Freeciv-3.4
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 = "";
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) {}
45void delta_stats_reset(void) {}
46
47const char *packet_name(enum packet_type type)
48{
49 static const char *const names[PACKET_LAST] = {
50 "PACKET_PROCESSING_STARTED",
51 "PACKET_PROCESSING_FINISHED",
52 "unknown",
53 "unknown",
54 "PACKET_SERVER_JOIN_REQ",
55 "PACKET_SERVER_JOIN_REPLY",
56 "PACKET_AUTHENTICATION_REQ",
57 "PACKET_AUTHENTICATION_REPLY",
58 "PACKET_SERVER_SHUTDOWN",
59 "PACKET_RULESET_TECH_CLASS",
60 "PACKET_NATION_SELECT_REQ",
61 "PACKET_PLAYER_READY",
62 "PACKET_ENDGAME_REPORT",
63 "PACKET_SCENARIO_DESCRIPTION",
64 "PACKET_EDIT_SCENARIO_DESC",
65 "PACKET_TILE_INFO",
66 "PACKET_GAME_INFO",
67 "PACKET_MAP_INFO",
68 "PACKET_NUKE_TILE_INFO",
69 "PACKET_TEAM_NAME_INFO",
70 "PACKET_RULESET_IMPR_FLAG",
71 "PACKET_INVESTIGATE_STARTED",
72 "PACKET_INVESTIGATE_FINISHED",
73 "unknown",
74 "unknown",
75 "PACKET_CHAT_MSG",
76 "PACKET_CHAT_MSG_REQ",
77 "PACKET_CONNECT_MSG",
78 "PACKET_EARLY_CHAT_MSG",
79 "PACKET_SERVER_INFO",
80 "PACKET_CITY_REMOVE",
81 "PACKET_CITY_INFO",
82 "PACKET_CITY_SHORT_INFO",
83 "PACKET_CITY_SELL",
84 "PACKET_CITY_BUY",
85 "PACKET_CITY_CHANGE",
86 "PACKET_CITY_WORKLIST",
87 "PACKET_CITY_MAKE_SPECIALIST",
88 "PACKET_CITY_MAKE_WORKER",
89 "PACKET_CITY_CHANGE_SPECIALIST",
90 "PACKET_CITY_RENAME",
91 "PACKET_CITY_OPTIONS_REQ",
92 "PACKET_CITY_REFRESH",
93 "PACKET_CITY_NAME_SUGGESTION_REQ",
94 "PACKET_CITY_NAME_SUGGESTION_INFO",
95 "PACKET_CITY_SABOTAGE_LIST",
96 "PACKET_CITY_NATIONALITIES",
97 "unknown",
98 "unknown",
99 "unknown",
100 "PACKET_PLAYER_REMOVE",
101 "PACKET_PLAYER_INFO",
102 "PACKET_PLAYER_PHASE_DONE",
103 "PACKET_PLAYER_RATES",
104 "PACKET_PLAYER_CHANGE_GOVERNMENT",
105 "PACKET_PLAYER_RESEARCH",
106 "PACKET_PLAYER_TECH_GOAL",
107 "PACKET_PLAYER_ATTRIBUTE_BLOCK",
108 "PACKET_PLAYER_ATTRIBUTE_CHUNK",
109 "PACKET_PLAYER_DIPLSTATE",
110 "PACKET_RESEARCH_INFO",
111 "PACKET_PLAYER_PLACE_INFRA",
112 "PACKET_UNIT_REMOVE",
113 "PACKET_UNIT_INFO",
114 "PACKET_UNIT_SHORT_INFO",
115 "PACKET_UNIT_COMBAT_INFO",
116 "PACKET_UNKNOWN_RESEARCH",
117 "unknown",
118 "unknown",
119 "unknown",
120 "unknown",
121 "PACKET_UNIT_SSCS_SET",
122 "unknown",
123 "PACKET_UNIT_ORDERS",
124 "PACKET_UNIT_SERVER_SIDE_AGENT_SET",
125 "unknown",
126 "unknown",
127 "unknown",
128 "unknown",
129 "unknown",
130 "unknown",
131 "unknown",
132 "PACKET_UNIT_ACTION_QUERY",
133 "PACKET_UNIT_TYPE_UPGRADE",
134 "PACKET_UNIT_DO_ACTION",
135 "PACKET_UNIT_ACTION_ANSWER",
136 "unknown",
137 "PACKET_UNIT_GET_ACTIONS",
138 "PACKET_CONN_PING",
139 "PACKET_CONN_PONG",
140 "PACKET_UNIT_ACTIONS",
141 "unknown",
142 "unknown",
143 "unknown",
144 "unknown",
145 "PACKET_DIPLOMACY_INIT_MEETING_REQ",
146 "PACKET_DIPLOMACY_INIT_MEETING",
147 "PACKET_DIPLOMACY_CANCEL_MEETING_REQ",
148 "PACKET_DIPLOMACY_CANCEL_MEETING",
149 "PACKET_DIPLOMACY_CREATE_CLAUSE_REQ",
150 "PACKET_DIPLOMACY_CREATE_CLAUSE",
151 "PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ",
152 "PACKET_DIPLOMACY_REMOVE_CLAUSE",
153 "PACKET_DIPLOMACY_ACCEPT_TREATY_REQ",
154 "PACKET_DIPLOMACY_ACCEPT_TREATY",
155 "PACKET_DIPLOMACY_CANCEL_PACT",
156 "unknown",
157 "unknown",
158 "unknown",
159 "unknown",
160 "PACKET_PAGE_MSG",
161 "PACKET_REPORT_REQ",
162 "unknown",
163 "unknown",
164 "unknown",
165 "PACKET_CONN_INFO",
166 "PACKET_CONN_PING_INFO",
167 "unknown",
168 "unknown",
169 "PACKET_CLIENT_INFO",
170 "unknown",
171 "unknown",
172 "unknown",
173 "unknown",
174 "unknown",
175 "PACKET_END_PHASE",
176 "PACKET_START_PHASE",
177 "PACKET_NEW_YEAR",
178 "PACKET_BEGIN_TURN",
179 "PACKET_END_TURN",
180 "PACKET_FREEZE_CLIENT",
181 "PACKET_THAW_CLIENT",
182 "unknown",
183 "unknown",
184 "unknown",
185 "PACKET_SPACESHIP_LAUNCH",
186 "PACKET_SPACESHIP_PLACE",
187 "PACKET_SPACESHIP_INFO",
188 "PACKET_CITY_RALLY_POINT",
189 "unknown",
190 "PACKET_RULESET_UNIT",
191 "PACKET_RULESET_GAME",
192 "PACKET_RULESET_SPECIALIST",
193 "PACKET_RULESET_GOVERNMENT_RULER_TITLE",
194 "PACKET_RULESET_TECH",
195 "PACKET_RULESET_GOVERNMENT",
196 "PACKET_RULESET_TERRAIN_CONTROL",
197 "PACKET_RULESET_NATION_GROUPS",
198 "PACKET_RULESET_NATION",
199 "PACKET_RULESET_CITY",
200 "PACKET_RULESET_BUILDING",
201 "PACKET_RULESET_TERRAIN",
202 "PACKET_RULESET_UNIT_CLASS",
203 "PACKET_RULESET_BASE",
204 "unknown",
205 "PACKET_RULESET_CONTROL",
206 "unknown",
207 "unknown",
208 "unknown",
209 "unknown",
210 "PACKET_SINGLE_WANT_HACK_REQ",
211 "PACKET_SINGLE_WANT_HACK_REPLY",
212 "PACKET_RULESET_CHOICES",
213 "PACKET_GAME_LOAD",
214 "PACKET_SERVER_SETTING_CONTROL",
215 "PACKET_SERVER_SETTING_CONST",
216 "PACKET_SERVER_SETTING_BOOL",
217 "PACKET_SERVER_SETTING_INT",
218 "PACKET_SERVER_SETTING_STR",
219 "PACKET_SERVER_SETTING_ENUM",
220 "PACKET_SERVER_SETTING_BITWISE",
221 "PACKET_RULESET_SELECT",
222 "unknown",
223 "unknown",
224 "unknown",
225 "PACKET_RULESET_EFFECT",
226 "unknown",
227 "PACKET_RULESET_RESOURCE",
228 "unknown",
229 "unknown",
230 "PACKET_SCENARIO_INFO",
231 "PACKET_SAVE_SCENARIO",
232 "unknown",
233 "unknown",
234 "unknown",
235 "PACKET_VOTE_NEW",
236 "PACKET_VOTE_UPDATE",
237 "PACKET_VOTE_REMOVE",
238 "PACKET_VOTE_RESOLVE",
239 "PACKET_VOTE_SUBMIT",
240 "PACKET_EDIT_MODE",
241 "unknown",
242 "unknown",
243 "unknown",
244 "unknown",
245 "unknown",
246 "unknown",
247 "PACKET_EDIT_RECALCULATE_BORDERS",
248 "PACKET_EDIT_CHECK_TILES",
249 "PACKET_EDIT_TOGGLE_FOGOFWAR",
250 "PACKET_EDIT_TILE_TERRAIN",
251 "unknown",
252 "PACKET_EDIT_TILE_EXTRA",
253 "unknown",
254 "PACKET_EDIT_STARTPOS",
255 "PACKET_EDIT_STARTPOS_FULL",
256 "PACKET_EDIT_TILE",
257 "PACKET_EDIT_UNIT_CREATE",
258 "PACKET_EDIT_UNIT_REMOVE",
259 "PACKET_EDIT_UNIT_REMOVE_BY_ID",
260 "PACKET_EDIT_UNIT",
261 "PACKET_EDIT_CITY_CREATE",
262 "PACKET_EDIT_CITY_REMOVE",
263 "PACKET_EDIT_CITY",
264 "PACKET_EDIT_PLAYER_CREATE",
265 "PACKET_EDIT_PLAYER_REMOVE",
266 "PACKET_EDIT_PLAYER",
267 "PACKET_EDIT_PLAYER_VISION",
268 "PACKET_EDIT_GAME",
269 "PACKET_EDIT_OBJECT_CREATED",
270 "PACKET_RULESET_ROAD",
271 "unknown",
272 "PACKET_UNIT_CHANGE_ACTIVITY",
273 "PACKET_ENDGAME_PLAYER",
274 "PACKET_RULESET_DISASTER",
275 "PACKET_RULESETS_READY",
276 "PACKET_RULESET_EXTRA_FLAG",
277 "PACKET_RULESET_TRADE",
278 "PACKET_RULESET_UNIT_BONUS",
279 "PACKET_RULESET_UNIT_FLAG",
280 "PACKET_RULESET_UNIT_CLASS_FLAG",
281 "PACKET_RULESET_TERRAIN_FLAG",
282 "PACKET_RULESET_EXTRA",
283 "PACKET_RULESET_ACHIEVEMENT",
284 "PACKET_RULESET_TECH_FLAG",
285 "PACKET_RULESET_ACTION_ENABLER",
286 "PACKET_RULESET_NATION_SETS",
287 "PACKET_NATION_AVAILABILITY",
288 "PACKET_ACHIEVEMENT_INFO",
289 "PACKET_RULESET_STYLE",
290 "PACKET_RULESET_MUSIC",
291 "PACKET_WORKER_TASK",
292 "PACKET_PLAYER_MULTIPLIER",
293 "PACKET_RULESET_MULTIPLIER",
294 "PACKET_TIMEOUT_INFO",
295 "PACKET_PLAY_MUSIC",
296 "PACKET_RULESET_ACTION",
297 "PACKET_RULESET_DESCRIPTION_PART",
298 "PACKET_RULESET_GOODS",
299 "PACKET_TRADE_ROUTE_INFO",
300 "PACKET_PAGE_MSG_PART",
301 "PACKET_RULESET_SUMMARY",
302 "PACKET_RULESET_ACTION_AUTO",
303 "PACKET_SET_TOPOLOGY",
304 "PACKET_CLIENT_HEARTBEAT",
305 "PACKET_CALENDAR_INFO",
306 "PACKET_WEB_CITY_INFO_ADDITION",
307 "PACKET_WEB_CMA_SET",
308 "PACKET_WEB_CMA_CLEAR",
309 "PACKET_WEB_PLAYER_INFO_ADDITION",
310 "PACKET_WEB_RULESET_UNIT_ADDITION",
311 "unknown",
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 "PACKET_RULESET_CLAUSE",
563 "PACKET_RULESET_COUNTER",
564 "PACKET_CITY_UPDATE_COUNTERS",
565 "PACKET_POPUP_IMAGE",
566 "PACKET_EDIT_FOGOFWAR_STATE",
567 "PACKET_SYNC_SERIAL",
568 "PACKET_SYNC_SERIAL_REPLY",
569 "PACKET_RULESET_GOV_FLAG",
570 "PACKET_RULESET_TILEDEF",
571 };
572
573 return (type < PACKET_LAST ? names[type] : "unknown");
574}
575
577{
578 static const bool flag[PACKET_LAST] = {
591 /* others are FALSE by default */
592 };
593
594 return (type < PACKET_LAST) && flag[type];
595}
596
598{
599 memset(packet, 0, sizeof(*packet));
600}
601
602#define free_packet_processing_started(_packet) (void) 0
603#define destroy_packet_processing_started free
604
606{
607#define FREE_PACKET_STRUCT(_packet) free_packet_processing_started(_packet)
609
610 log_packet_detailed("packet_processing_started_100: got info about ()");
611
612 real_packet->__dummy = 0xff;
613
615#undef FREE_PACKET_STRUCT
616}
617
619{
621
622 log_packet_detailed("packet_processing_started_100: sending info about ()");
623
625}
626
628{
629 if (!pc->used) {
630 log_error("WARNING: trying to send data to the closed connection %s",
632 return -1;
633 }
634 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet != nullptr, -1,
635 "Handler for PACKET_PROCESSING_STARTED not installed");
636 return pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet(pc);
637}
638
640{
641 memset(packet, 0, sizeof(*packet));
642}
643
644#define free_packet_processing_finished(_packet) (void) 0
645#define destroy_packet_processing_finished free
646
648{
649#define FREE_PACKET_STRUCT(_packet) free_packet_processing_finished(_packet)
651
652 log_packet_detailed("packet_processing_finished_100: got info about ()");
653
654 real_packet->__dummy = 0xff;
655
657#undef FREE_PACKET_STRUCT
658}
659
661{
663
664 log_packet_detailed("packet_processing_finished_100: sending info about ()");
665
667}
668
670{
671 if (!pc->used) {
672 log_error("WARNING: trying to send data to the closed connection %s",
674 return -1;
675 }
676 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet != nullptr, -1,
677 "Handler for PACKET_PROCESSING_FINISHED not installed");
678 return pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet(pc);
679}
680
682{
683 memset(packet, 0, sizeof(*packet));
684}
685
686#define free_packet_investigate_started(_packet) (void) 0
687#define destroy_packet_investigate_started free
688
689#ifdef FREECIV_DELTA_PROTOCOL
690#define hash_packet_investigate_started_100 hash_const
691#define cmp_packet_investigate_started_100 cmp_const
693#endif /* FREECIV_DELTA_PROTOCOL */
694
696{
697#define FREE_PACKET_STRUCT(_packet) free_packet_investigate_started(_packet)
699
700#ifdef FREECIV_JSON_CONNECTION
701 struct plocation field_addr;
702 {
706 }
707#endif /* FREECIV_JSON_CONNECTION */
708
709 log_packet_detailed("packet_investigate_started_100: got info about ()");
710
711#ifdef FREECIV_DELTA_PROTOCOL
714 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_STARTED;
715
716 if (nullptr == *hash) {
718 nullptr, nullptr, nullptr, destroy_packet_investigate_started);
719 }
720
721 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
722 *real_packet = *old;
723 } else {
724 /* packet is already initialized empty */
725 log_packet_detailed(" no old info");
726 }
727
728#ifdef FREECIV_JSON_CONNECTION
729 field_addr.name = "fields";
730#endif /* FREECIV_JSON_CONNECTION */
731 DIO_BV_GET(&din, &field_addr, fields);
732
733 if (BV_ISSET(fields, 0)) {
734 log_packet_detailed(" got field 'city_id'");
735
736#ifdef FREECIV_JSON_CONNECTION
737 field_addr.name = "city_id";
738#endif /* FREECIV_JSON_CONNECTION */
739
740 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
742 }
743 }
744
745 if (nullptr == old) {
746 old = fc_malloc(sizeof(*old));
748 *old = *real_packet;
750 } else {
751 *old = *real_packet;
752 }
753
754#else /* FREECIV_DELTA_PROTOCOL */
755#ifdef FREECIV_JSON_CONNECTION
756 field_addr.name = "city_id";
757#endif /* FREECIV_JSON_CONNECTION */
758
759 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
761 }
762#endif /* FREECIV_DELTA_PROTOCOL */
763
765#undef FREE_PACKET_STRUCT
766}
767
769{
770 const struct packet_investigate_started *real_packet = packet;
771 int e;
773
774 log_packet_detailed("packet_investigate_started_100: sending info about ()");
775
776#ifdef FREECIV_DELTA_PROTOCOL
779 bool differ;
780 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_STARTED;
781
782 if (nullptr == *hash) {
784 nullptr, nullptr, nullptr, destroy_packet_investigate_started);
785 }
786 BV_CLR_ALL(fields);
787
788 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
789 old = fc_malloc(sizeof(*old));
790 /* temporary bitcopy just to insert correctly */
791 *old = *real_packet;
794 }
795
796 differ = (old->city_id != real_packet->city_id);
797 if (differ) {
798 BV_SET(fields, 0);
799 }
800#endif /* FREECIV_DELTA_PROTOCOL */
801
802#ifdef FREECIV_JSON_CONNECTION
803 struct plocation field_addr;
804 {
808 }
809#endif /* FREECIV_JSON_CONNECTION */
810
811#ifdef FREECIV_DELTA_PROTOCOL
812#ifdef FREECIV_JSON_CONNECTION
813 field_addr.name = "fields";
814#endif /* FREECIV_JSON_CONNECTION */
815 e = 0;
816 e |= DIO_BV_PUT(&dout, &field_addr, fields);
817 if (e) {
818 log_packet_detailed("fields bitvector error detected");
819 }
820
821 if (BV_ISSET(fields, 0)) {
822 log_packet_detailed(" field 'city_id' has changed");
823
824#ifdef FREECIV_JSON_CONNECTION
825 field_addr.name = "city_id";
826#endif /* FREECIV_JSON_CONNECTION */
827 e = 0;
828
829 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
830
831 if (e) {
832 log_packet_detailed("'city_id' field error detected");
833 }
834 }
835
836 *old = *real_packet;
837
838#else /* FREECIV_DELTA_PROTOCOL */
839#ifdef FREECIV_JSON_CONNECTION
840 field_addr.name = "city_id";
841#endif /* FREECIV_JSON_CONNECTION */
842 e = 0;
843
844 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
845
846 if (e) {
847 log_packet_detailed("'city_id' field error detected");
848 }
849#endif /* FREECIV_DELTA_PROTOCOL */
850
852}
853
855{
856 if (!pc->used) {
857 log_error("WARNING: trying to send data to the closed connection %s",
859 return -1;
860 }
861 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet != nullptr, -1,
862 "Handler for PACKET_INVESTIGATE_STARTED not installed");
863 return pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet(pc, packet);
864}
865
872
874{
875 struct packet_investigate_started packet, *real_packet = &packet;
876
878
880}
881
890
892{
893 memset(packet, 0, sizeof(*packet));
894}
895
896#define free_packet_investigate_finished(_packet) (void) 0
897#define destroy_packet_investigate_finished free
898
899#ifdef FREECIV_DELTA_PROTOCOL
900#define hash_packet_investigate_finished_100 hash_const
901#define cmp_packet_investigate_finished_100 cmp_const
903#endif /* FREECIV_DELTA_PROTOCOL */
904
906{
907#define FREE_PACKET_STRUCT(_packet) free_packet_investigate_finished(_packet)
909
910#ifdef FREECIV_JSON_CONNECTION
911 struct plocation field_addr;
912 {
916 }
917#endif /* FREECIV_JSON_CONNECTION */
918
919 log_packet_detailed("packet_investigate_finished_100: got info about ()");
920
921#ifdef FREECIV_DELTA_PROTOCOL
924 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_FINISHED;
925
926 if (nullptr == *hash) {
928 nullptr, nullptr, nullptr, destroy_packet_investigate_finished);
929 }
930
931 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
932 *real_packet = *old;
933 } else {
934 /* packet is already initialized empty */
935 log_packet_detailed(" no old info");
936 }
937
938#ifdef FREECIV_JSON_CONNECTION
939 field_addr.name = "fields";
940#endif /* FREECIV_JSON_CONNECTION */
941 DIO_BV_GET(&din, &field_addr, fields);
942
943 if (BV_ISSET(fields, 0)) {
944 log_packet_detailed(" got field 'city_id'");
945
946#ifdef FREECIV_JSON_CONNECTION
947 field_addr.name = "city_id";
948#endif /* FREECIV_JSON_CONNECTION */
949
950 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
952 }
953 }
954
955 if (nullptr == old) {
956 old = fc_malloc(sizeof(*old));
958 *old = *real_packet;
960 } else {
961 *old = *real_packet;
962 }
963
964#else /* FREECIV_DELTA_PROTOCOL */
965#ifdef FREECIV_JSON_CONNECTION
966 field_addr.name = "city_id";
967#endif /* FREECIV_JSON_CONNECTION */
968
969 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
971 }
972#endif /* FREECIV_DELTA_PROTOCOL */
973
975#undef FREE_PACKET_STRUCT
976}
977
979{
980 const struct packet_investigate_finished *real_packet = packet;
981 int e;
983
984 log_packet_detailed("packet_investigate_finished_100: sending info about ()");
985
986#ifdef FREECIV_DELTA_PROTOCOL
989 bool differ;
990 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_FINISHED;
991
992 if (nullptr == *hash) {
994 nullptr, nullptr, nullptr, destroy_packet_investigate_finished);
995 }
996 BV_CLR_ALL(fields);
997
998 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
999 old = fc_malloc(sizeof(*old));
1000 /* temporary bitcopy just to insert correctly */
1001 *old = *real_packet;
1004 }
1005
1006 differ = (old->city_id != real_packet->city_id);
1007 if (differ) {
1008 BV_SET(fields, 0);
1009 }
1010#endif /* FREECIV_DELTA_PROTOCOL */
1011
1012#ifdef FREECIV_JSON_CONNECTION
1013 struct plocation field_addr;
1014 {
1015 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1018 }
1019#endif /* FREECIV_JSON_CONNECTION */
1020
1021#ifdef FREECIV_DELTA_PROTOCOL
1022#ifdef FREECIV_JSON_CONNECTION
1023 field_addr.name = "fields";
1024#endif /* FREECIV_JSON_CONNECTION */
1025 e = 0;
1026 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1027 if (e) {
1028 log_packet_detailed("fields bitvector error detected");
1029 }
1030
1031 if (BV_ISSET(fields, 0)) {
1032 log_packet_detailed(" field 'city_id' has changed");
1033
1034#ifdef FREECIV_JSON_CONNECTION
1035 field_addr.name = "city_id";
1036#endif /* FREECIV_JSON_CONNECTION */
1037 e = 0;
1038
1039 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1040
1041 if (e) {
1042 log_packet_detailed("'city_id' field error detected");
1043 }
1044 }
1045
1046 *old = *real_packet;
1047
1048#else /* FREECIV_DELTA_PROTOCOL */
1049#ifdef FREECIV_JSON_CONNECTION
1050 field_addr.name = "city_id";
1051#endif /* FREECIV_JSON_CONNECTION */
1052 e = 0;
1053
1054 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1055
1056 if (e) {
1057 log_packet_detailed("'city_id' field error detected");
1058 }
1059#endif /* FREECIV_DELTA_PROTOCOL */
1060
1062}
1063
1065{
1066 if (!pc->used) {
1067 log_error("WARNING: trying to send data to the closed connection %s",
1069 return -1;
1070 }
1071 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet != nullptr, -1,
1072 "Handler for PACKET_INVESTIGATE_FINISHED not installed");
1073 return pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet(pc, packet);
1074}
1075
1082
1084{
1085 struct packet_investigate_finished packet, *real_packet = &packet;
1086
1088
1090}
1091
1093{
1094 struct packet_investigate_finished packet, *real_packet = &packet;
1095
1097
1099}
1100
1101static inline void init_packet_server_join_req(struct packet_server_join_req *packet)
1102{
1103 memset(packet, 0, sizeof(*packet));
1104}
1105
1106#define free_packet_server_join_req(_packet) (void) 0
1107#define destroy_packet_server_join_req free
1108
1110{
1111#define FREE_PACKET_STRUCT(_packet) free_packet_server_join_req(_packet)
1113
1114#ifdef FREECIV_JSON_CONNECTION
1115 struct plocation field_addr;
1116 {
1117 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1120 }
1121#endif /* FREECIV_JSON_CONNECTION */
1122
1123 log_packet_detailed("packet_server_join_req_100: got info about ()");
1124
1125#ifdef FREECIV_JSON_CONNECTION
1126 field_addr.name = "username";
1127#endif /* FREECIV_JSON_CONNECTION */
1128
1129 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
1131 }
1132
1133#ifdef FREECIV_JSON_CONNECTION
1134 field_addr.name = "capability";
1135#endif /* FREECIV_JSON_CONNECTION */
1136
1137 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1138 RECEIVE_PACKET_FIELD_ERROR(capability);
1139 }
1140
1141#ifdef FREECIV_JSON_CONNECTION
1142 field_addr.name = "version_label";
1143#endif /* FREECIV_JSON_CONNECTION */
1144
1145 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
1146 RECEIVE_PACKET_FIELD_ERROR(version_label);
1147 }
1148
1149#ifdef FREECIV_JSON_CONNECTION
1150 field_addr.name = "major_version";
1151#endif /* FREECIV_JSON_CONNECTION */
1152
1153 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
1154 RECEIVE_PACKET_FIELD_ERROR(major_version);
1155 }
1156
1157#ifdef FREECIV_JSON_CONNECTION
1158 field_addr.name = "minor_version";
1159#endif /* FREECIV_JSON_CONNECTION */
1160
1161 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
1162 RECEIVE_PACKET_FIELD_ERROR(minor_version);
1163 }
1164
1165#ifdef FREECIV_JSON_CONNECTION
1166 field_addr.name = "patch_version";
1167#endif /* FREECIV_JSON_CONNECTION */
1168
1169 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
1170 RECEIVE_PACKET_FIELD_ERROR(patch_version);
1171 }
1172
1174#undef FREE_PACKET_STRUCT
1175}
1176
1178{
1179 const struct packet_server_join_req *real_packet = packet;
1180 int e;
1182
1183 log_packet_detailed("packet_server_join_req_100: sending info about ()");
1184
1185#ifdef FREECIV_JSON_CONNECTION
1186 struct plocation field_addr;
1187 {
1188 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1191 }
1192#endif /* FREECIV_JSON_CONNECTION */
1193
1194#ifdef FREECIV_JSON_CONNECTION
1195 field_addr.name = "username";
1196#endif /* FREECIV_JSON_CONNECTION */
1197 e = 0;
1198
1199 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
1200
1201 if (e) {
1202 log_packet_detailed("'username' field error detected");
1203 }
1204
1205#ifdef FREECIV_JSON_CONNECTION
1206 field_addr.name = "capability";
1207#endif /* FREECIV_JSON_CONNECTION */
1208 e = 0;
1209
1210 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1211
1212 if (e) {
1213 log_packet_detailed("'capability' field error detected");
1214 }
1215
1216#ifdef FREECIV_JSON_CONNECTION
1217 field_addr.name = "version_label";
1218#endif /* FREECIV_JSON_CONNECTION */
1219 e = 0;
1220
1221 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
1222
1223 if (e) {
1224 log_packet_detailed("'version_label' field error detected");
1225 }
1226
1227#ifdef FREECIV_JSON_CONNECTION
1228 field_addr.name = "major_version";
1229#endif /* FREECIV_JSON_CONNECTION */
1230 e = 0;
1231
1232 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
1233
1234 if (e) {
1235 log_packet_detailed("'major_version' field error detected");
1236 }
1237
1238#ifdef FREECIV_JSON_CONNECTION
1239 field_addr.name = "minor_version";
1240#endif /* FREECIV_JSON_CONNECTION */
1241 e = 0;
1242
1243 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
1244
1245 if (e) {
1246 log_packet_detailed("'minor_version' field error detected");
1247 }
1248
1249#ifdef FREECIV_JSON_CONNECTION
1250 field_addr.name = "patch_version";
1251#endif /* FREECIV_JSON_CONNECTION */
1252 e = 0;
1253
1254 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
1255
1256 if (e) {
1257 log_packet_detailed("'patch_version' field error detected");
1258 }
1259
1261}
1262
1264{
1265 if (!pc->used) {
1266 log_error("WARNING: trying to send data to the closed connection %s",
1268 return -1;
1269 }
1270 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet != nullptr, -1,
1271 "Handler for PACKET_SERVER_JOIN_REQ not installed");
1272 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet(pc, packet);
1273}
1274
1275int 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)
1276{
1277 struct packet_server_join_req packet, *real_packet = &packet;
1278
1279 sz_strlcpy(real_packet->username, username);
1280 sz_strlcpy(real_packet->capability, capability);
1281 sz_strlcpy(real_packet->version_label, version_label);
1282 real_packet->major_version = major_version;
1283 real_packet->minor_version = minor_version;
1284 real_packet->patch_version = patch_version;
1285
1287}
1288
1290{
1291 memset(packet, 0, sizeof(*packet));
1292}
1293
1294#define free_packet_server_join_reply(_packet) (void) 0
1295#define destroy_packet_server_join_reply free
1296
1298{
1299#define FREE_PACKET_STRUCT(_packet) free_packet_server_join_reply(_packet)
1301
1302#ifdef FREECIV_JSON_CONNECTION
1303 struct plocation field_addr;
1304 {
1305 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1308 }
1309#endif /* FREECIV_JSON_CONNECTION */
1310
1311 log_packet_detailed("packet_server_join_reply_100: got info about ()");
1312
1313#ifdef FREECIV_JSON_CONNECTION
1314 field_addr.name = "you_can_join";
1315#endif /* FREECIV_JSON_CONNECTION */
1316
1317 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_can_join)) {
1318 RECEIVE_PACKET_FIELD_ERROR(you_can_join);
1319 }
1320
1321#ifdef FREECIV_JSON_CONNECTION
1322 field_addr.name = "message";
1323#endif /* FREECIV_JSON_CONNECTION */
1324
1325 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1327 }
1328
1329#ifdef FREECIV_JSON_CONNECTION
1330 field_addr.name = "capability";
1331#endif /* FREECIV_JSON_CONNECTION */
1332
1333 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1334 RECEIVE_PACKET_FIELD_ERROR(capability);
1335 }
1336
1337#ifdef FREECIV_JSON_CONNECTION
1338 field_addr.name = "challenge_file";
1339#endif /* FREECIV_JSON_CONNECTION */
1340
1341 if (!DIO_GET(string, &din, &field_addr, real_packet->challenge_file, sizeof(real_packet->challenge_file))) {
1342 RECEIVE_PACKET_FIELD_ERROR(challenge_file);
1343 }
1344
1345#ifdef FREECIV_JSON_CONNECTION
1346 field_addr.name = "conn_id";
1347#endif /* FREECIV_JSON_CONNECTION */
1348
1349 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
1351 }
1352
1355#undef FREE_PACKET_STRUCT
1356}
1357
1359{
1360 const struct packet_server_join_reply *real_packet = packet;
1361 int e;
1363
1364 log_packet_detailed("packet_server_join_reply_100: sending info about ()");
1365
1366#ifdef FREECIV_JSON_CONNECTION
1367 struct plocation field_addr;
1368 {
1369 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1372 }
1373#endif /* FREECIV_JSON_CONNECTION */
1374
1375#ifdef FREECIV_JSON_CONNECTION
1376 field_addr.name = "you_can_join";
1377#endif /* FREECIV_JSON_CONNECTION */
1378 e = 0;
1379
1380 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_can_join);
1381
1382 if (e) {
1383 log_packet_detailed("'you_can_join' field error detected");
1384 }
1385
1386#ifdef FREECIV_JSON_CONNECTION
1387 field_addr.name = "message";
1388#endif /* FREECIV_JSON_CONNECTION */
1389 e = 0;
1390
1391 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1392
1393 if (e) {
1394 log_packet_detailed("'message' field error detected");
1395 }
1396
1397#ifdef FREECIV_JSON_CONNECTION
1398 field_addr.name = "capability";
1399#endif /* FREECIV_JSON_CONNECTION */
1400 e = 0;
1401
1402 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1403
1404 if (e) {
1405 log_packet_detailed("'capability' field error detected");
1406 }
1407
1408#ifdef FREECIV_JSON_CONNECTION
1409 field_addr.name = "challenge_file";
1410#endif /* FREECIV_JSON_CONNECTION */
1411 e = 0;
1412
1413 e |= DIO_PUT(string, &dout, &field_addr, real_packet->challenge_file);
1414
1415 if (e) {
1416 log_packet_detailed("'challenge_file' field error detected");
1417 }
1418
1419#ifdef FREECIV_JSON_CONNECTION
1420 field_addr.name = "conn_id";
1421#endif /* FREECIV_JSON_CONNECTION */
1422 e = 0;
1423
1424 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
1425
1426 if (e) {
1427 log_packet_detailed("'conn_id' field error detected");
1428 }
1429
1432}
1433
1435{
1436 if (!pc->used) {
1437 log_error("WARNING: trying to send data to the closed connection %s",
1439 return -1;
1440 }
1441 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet != nullptr, -1,
1442 "Handler for PACKET_SERVER_JOIN_REPLY not installed");
1443 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet(pc, packet);
1444}
1445
1447{
1448 memset(packet, 0, sizeof(*packet));
1449}
1450
1451#define free_packet_authentication_req(_packet) (void) 0
1452#define destroy_packet_authentication_req free
1453
1454#ifdef FREECIV_DELTA_PROTOCOL
1455#define hash_packet_authentication_req_100 hash_const
1456#define cmp_packet_authentication_req_100 cmp_const
1458#endif /* FREECIV_DELTA_PROTOCOL */
1459
1461{
1462#define FREE_PACKET_STRUCT(_packet) free_packet_authentication_req(_packet)
1464
1465#ifdef FREECIV_JSON_CONNECTION
1466 struct plocation field_addr;
1467 {
1468 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1471 }
1472#endif /* FREECIV_JSON_CONNECTION */
1473
1474 log_packet_detailed("packet_authentication_req_100: got info about ()");
1475
1476#ifdef FREECIV_DELTA_PROTOCOL
1479 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REQ;
1480
1481 if (nullptr == *hash) {
1483 nullptr, nullptr, nullptr, destroy_packet_authentication_req);
1484 }
1485
1486 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1487 *real_packet = *old;
1488 } else {
1489 /* packet is already initialized empty */
1490 log_packet_detailed(" no old info");
1491 }
1492
1493#ifdef FREECIV_JSON_CONNECTION
1494 field_addr.name = "fields";
1495#endif /* FREECIV_JSON_CONNECTION */
1496 DIO_BV_GET(&din, &field_addr, fields);
1497
1498 if (BV_ISSET(fields, 0)) {
1499 log_packet_detailed(" got field 'type'");
1500
1501#ifdef FREECIV_JSON_CONNECTION
1502 field_addr.name = "type";
1503#endif /* FREECIV_JSON_CONNECTION */
1504
1505 {
1506 int readin;
1507
1508 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1510 }
1511 real_packet->type = readin;
1512 }
1513 }
1514
1515 if (BV_ISSET(fields, 1)) {
1516 log_packet_detailed(" got field 'message'");
1517
1518#ifdef FREECIV_JSON_CONNECTION
1519 field_addr.name = "message";
1520#endif /* FREECIV_JSON_CONNECTION */
1521
1522 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1524 }
1525 }
1526
1527 if (nullptr == old) {
1528 old = fc_malloc(sizeof(*old));
1530 *old = *real_packet;
1532 } else {
1533 *old = *real_packet;
1534 }
1535
1536#else /* FREECIV_DELTA_PROTOCOL */
1537#ifdef FREECIV_JSON_CONNECTION
1538 field_addr.name = "type";
1539#endif /* FREECIV_JSON_CONNECTION */
1540
1541 {
1542 int readin;
1543
1544 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1546 }
1547 real_packet->type = readin;
1548 }
1549
1550#ifdef FREECIV_JSON_CONNECTION
1551 field_addr.name = "message";
1552#endif /* FREECIV_JSON_CONNECTION */
1553
1554 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1556 }
1557#endif /* FREECIV_DELTA_PROTOCOL */
1558
1560#undef FREE_PACKET_STRUCT
1561}
1562
1564{
1565 const struct packet_authentication_req *real_packet = packet;
1566 int e;
1568
1569 log_packet_detailed("packet_authentication_req_100: sending info about ()");
1570
1571#ifdef FREECIV_DELTA_PROTOCOL
1574 bool differ;
1575 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REQ;
1576
1577 if (nullptr == *hash) {
1579 nullptr, nullptr, nullptr, destroy_packet_authentication_req);
1580 }
1581 BV_CLR_ALL(fields);
1582
1583 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1584 old = fc_malloc(sizeof(*old));
1585 /* temporary bitcopy just to insert correctly */
1586 *old = *real_packet;
1589 }
1590
1591 differ = (old->type != real_packet->type);
1592 if (differ) {
1593 BV_SET(fields, 0);
1594 }
1595
1596 differ = (strcmp(old->message, real_packet->message) != 0);
1597 if (differ) {
1598 BV_SET(fields, 1);
1599 }
1600#endif /* FREECIV_DELTA_PROTOCOL */
1601
1602#ifdef FREECIV_JSON_CONNECTION
1603 struct plocation field_addr;
1604 {
1605 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1608 }
1609#endif /* FREECIV_JSON_CONNECTION */
1610
1611#ifdef FREECIV_DELTA_PROTOCOL
1612#ifdef FREECIV_JSON_CONNECTION
1613 field_addr.name = "fields";
1614#endif /* FREECIV_JSON_CONNECTION */
1615 e = 0;
1616 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1617 if (e) {
1618 log_packet_detailed("fields bitvector error detected");
1619 }
1620
1621 if (BV_ISSET(fields, 0)) {
1622 log_packet_detailed(" field 'type' has changed");
1623
1624#ifdef FREECIV_JSON_CONNECTION
1625 field_addr.name = "type";
1626#endif /* FREECIV_JSON_CONNECTION */
1627 e = 0;
1628
1629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
1630
1631 if (e) {
1632 log_packet_detailed("'type' field error detected");
1633 }
1634 }
1635
1636 if (BV_ISSET(fields, 1)) {
1637 log_packet_detailed(" field 'message' has changed");
1638
1639#ifdef FREECIV_JSON_CONNECTION
1640 field_addr.name = "message";
1641#endif /* FREECIV_JSON_CONNECTION */
1642 e = 0;
1643
1644 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1645
1646 if (e) {
1647 log_packet_detailed("'message' field error detected");
1648 }
1649 }
1650
1651 *old = *real_packet;
1652
1653#else /* FREECIV_DELTA_PROTOCOL */
1654#ifdef FREECIV_JSON_CONNECTION
1655 field_addr.name = "type";
1656#endif /* FREECIV_JSON_CONNECTION */
1657 e = 0;
1658
1659 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
1660
1661 if (e) {
1662 log_packet_detailed("'type' field error detected");
1663 }
1664
1665#ifdef FREECIV_JSON_CONNECTION
1666 field_addr.name = "message";
1667#endif /* FREECIV_JSON_CONNECTION */
1668 e = 0;
1669
1670 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1671
1672 if (e) {
1673 log_packet_detailed("'message' field error detected");
1674 }
1675#endif /* FREECIV_DELTA_PROTOCOL */
1676
1678}
1679
1681{
1682 if (!pc->used) {
1683 log_error("WARNING: trying to send data to the closed connection %s",
1685 return -1;
1686 }
1687 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet != nullptr, -1,
1688 "Handler for PACKET_AUTHENTICATION_REQ not installed");
1689 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet(pc, packet);
1690}
1691
1693{
1694 struct packet_authentication_req packet, *real_packet = &packet;
1695
1697 sz_strlcpy(real_packet->message, message);
1698
1700}
1701
1703{
1704 memset(packet, 0, sizeof(*packet));
1705}
1706
1707#define free_packet_authentication_reply(_packet) (void) 0
1708#define destroy_packet_authentication_reply free
1709
1710#ifdef FREECIV_DELTA_PROTOCOL
1711#define hash_packet_authentication_reply_100 hash_const
1712#define cmp_packet_authentication_reply_100 cmp_const
1714#endif /* FREECIV_DELTA_PROTOCOL */
1715
1717{
1718#define FREE_PACKET_STRUCT(_packet) free_packet_authentication_reply(_packet)
1720
1721#ifdef FREECIV_JSON_CONNECTION
1722 struct plocation field_addr;
1723 {
1724 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1727 }
1728#endif /* FREECIV_JSON_CONNECTION */
1729
1730 log_packet_detailed("packet_authentication_reply_100: got info about ()");
1731
1732#ifdef FREECIV_DELTA_PROTOCOL
1735 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REPLY;
1736
1737 if (nullptr == *hash) {
1739 nullptr, nullptr, nullptr, destroy_packet_authentication_reply);
1740 }
1741
1742 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1743 *real_packet = *old;
1744 } else {
1745 /* packet is already initialized empty */
1746 log_packet_detailed(" no old info");
1747 }
1748
1749#ifdef FREECIV_JSON_CONNECTION
1750 field_addr.name = "fields";
1751#endif /* FREECIV_JSON_CONNECTION */
1752 DIO_BV_GET(&din, &field_addr, fields);
1753
1754 if (BV_ISSET(fields, 0)) {
1755 log_packet_detailed(" got field 'password'");
1756
1757#ifdef FREECIV_JSON_CONNECTION
1758 field_addr.name = "password";
1759#endif /* FREECIV_JSON_CONNECTION */
1760
1761 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
1763 }
1764 }
1765
1766 if (nullptr == old) {
1767 old = fc_malloc(sizeof(*old));
1769 *old = *real_packet;
1771 } else {
1772 *old = *real_packet;
1773 }
1774
1775#else /* FREECIV_DELTA_PROTOCOL */
1776#ifdef FREECIV_JSON_CONNECTION
1777 field_addr.name = "password";
1778#endif /* FREECIV_JSON_CONNECTION */
1779
1780 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
1782 }
1783#endif /* FREECIV_DELTA_PROTOCOL */
1784
1786#undef FREE_PACKET_STRUCT
1787}
1788
1790{
1791 const struct packet_authentication_reply *real_packet = packet;
1792 int e;
1794
1795 log_packet_detailed("packet_authentication_reply_100: sending info about ()");
1796
1797#ifdef FREECIV_DELTA_PROTOCOL
1800 bool differ;
1801 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REPLY;
1802
1803 if (nullptr == *hash) {
1805 nullptr, nullptr, nullptr, destroy_packet_authentication_reply);
1806 }
1807 BV_CLR_ALL(fields);
1808
1809 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1810 old = fc_malloc(sizeof(*old));
1811 /* temporary bitcopy just to insert correctly */
1812 *old = *real_packet;
1815 }
1816
1817 differ = (strcmp(old->password, real_packet->password) != 0);
1818 if (differ) {
1819 BV_SET(fields, 0);
1820 }
1821#endif /* FREECIV_DELTA_PROTOCOL */
1822
1823#ifdef FREECIV_JSON_CONNECTION
1824 struct plocation field_addr;
1825 {
1826 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1829 }
1830#endif /* FREECIV_JSON_CONNECTION */
1831
1832#ifdef FREECIV_DELTA_PROTOCOL
1833#ifdef FREECIV_JSON_CONNECTION
1834 field_addr.name = "fields";
1835#endif /* FREECIV_JSON_CONNECTION */
1836 e = 0;
1837 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1838 if (e) {
1839 log_packet_detailed("fields bitvector error detected");
1840 }
1841
1842 if (BV_ISSET(fields, 0)) {
1843 log_packet_detailed(" field 'password' has changed");
1844
1845#ifdef FREECIV_JSON_CONNECTION
1846 field_addr.name = "password";
1847#endif /* FREECIV_JSON_CONNECTION */
1848 e = 0;
1849
1850 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
1851
1852 if (e) {
1853 log_packet_detailed("'password' field error detected");
1854 }
1855 }
1856
1857 *old = *real_packet;
1858
1859#else /* FREECIV_DELTA_PROTOCOL */
1860#ifdef FREECIV_JSON_CONNECTION
1861 field_addr.name = "password";
1862#endif /* FREECIV_JSON_CONNECTION */
1863 e = 0;
1864
1865 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
1866
1867 if (e) {
1868 log_packet_detailed("'password' field error detected");
1869 }
1870#endif /* FREECIV_DELTA_PROTOCOL */
1871
1873}
1874
1876{
1877 if (!pc->used) {
1878 log_error("WARNING: trying to send data to the closed connection %s",
1880 return -1;
1881 }
1882 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet != nullptr, -1,
1883 "Handler for PACKET_AUTHENTICATION_REPLY not installed");
1884 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet(pc, packet);
1885}
1886
1887static inline void init_packet_server_shutdown(struct packet_server_shutdown *packet)
1888{
1889 memset(packet, 0, sizeof(*packet));
1890}
1891
1892#define free_packet_server_shutdown(_packet) (void) 0
1893#define destroy_packet_server_shutdown free
1894
1896{
1897#define FREE_PACKET_STRUCT(_packet) free_packet_server_shutdown(_packet)
1899
1900 log_packet_detailed("packet_server_shutdown_100: got info about ()");
1901
1902 real_packet->__dummy = 0xff;
1903
1905#undef FREE_PACKET_STRUCT
1906}
1907
1909{
1911
1912 log_packet_detailed("packet_server_shutdown_100: sending info about ()");
1913
1915}
1916
1918{
1919 if (!pc->used) {
1920 log_error("WARNING: trying to send data to the closed connection %s",
1922 return -1;
1923 }
1924 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet != nullptr, -1,
1925 "Handler for PACKET_SERVER_SHUTDOWN not installed");
1926 return pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet(pc);
1927}
1928
1935
1937{
1938 memset(packet, 0, sizeof(*packet));
1939}
1940
1941#define free_packet_nation_select_req(_packet) (void) 0
1942#define destroy_packet_nation_select_req free
1943
1944#ifdef FREECIV_DELTA_PROTOCOL
1945#define hash_packet_nation_select_req_100 hash_const
1946#define cmp_packet_nation_select_req_100 cmp_const
1948#endif /* FREECIV_DELTA_PROTOCOL */
1949
1951{
1952#define FREE_PACKET_STRUCT(_packet) free_packet_nation_select_req(_packet)
1954
1955#ifdef FREECIV_JSON_CONNECTION
1956 struct plocation field_addr;
1957 {
1958 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1961 }
1962#endif /* FREECIV_JSON_CONNECTION */
1963
1964 log_packet_detailed("packet_nation_select_req_100: got info about ()");
1965
1966#ifdef FREECIV_DELTA_PROTOCOL
1969 struct genhash **hash = pc->phs.received + PACKET_NATION_SELECT_REQ;
1970
1971 if (nullptr == *hash) {
1973 nullptr, nullptr, nullptr, destroy_packet_nation_select_req);
1974 }
1975
1976 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1977 *real_packet = *old;
1978 } else {
1979 /* packet is already initialized empty */
1980 log_packet_detailed(" no old info");
1981 }
1982
1983#ifdef FREECIV_JSON_CONNECTION
1984 field_addr.name = "fields";
1985#endif /* FREECIV_JSON_CONNECTION */
1986 DIO_BV_GET(&din, &field_addr, fields);
1987
1988 if (BV_ISSET(fields, 0)) {
1989 log_packet_detailed(" got field 'player_no'");
1990
1991#ifdef FREECIV_JSON_CONNECTION
1992 field_addr.name = "player_no";
1993#endif /* FREECIV_JSON_CONNECTION */
1994
1995 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
1996 RECEIVE_PACKET_FIELD_ERROR(player_no);
1997 }
1998 }
1999
2000 if (BV_ISSET(fields, 1)) {
2001 log_packet_detailed(" got field 'nation_no'");
2002
2003#ifdef FREECIV_JSON_CONNECTION
2004 field_addr.name = "nation_no";
2005#endif /* FREECIV_JSON_CONNECTION */
2006
2007 {
2008 int readin;
2009
2010 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2011 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2012 }
2013 real_packet->nation_no = readin;
2014 }
2015 }
2016
2017 real_packet->is_male = BV_ISSET(fields, 2);
2018
2019 if (BV_ISSET(fields, 3)) {
2020 log_packet_detailed(" got field 'name'");
2021
2022#ifdef FREECIV_JSON_CONNECTION
2023 field_addr.name = "name";
2024#endif /* FREECIV_JSON_CONNECTION */
2025
2026 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2028 }
2029 }
2030
2031 if (BV_ISSET(fields, 4)) {
2032 log_packet_detailed(" got field 'style'");
2033
2034#ifdef FREECIV_JSON_CONNECTION
2035 field_addr.name = "style";
2036#endif /* FREECIV_JSON_CONNECTION */
2037
2038 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2040 }
2041 }
2042
2043 if (nullptr == old) {
2044 old = fc_malloc(sizeof(*old));
2046 *old = *real_packet;
2048 } else {
2049 *old = *real_packet;
2050 }
2051
2052#else /* FREECIV_DELTA_PROTOCOL */
2053#ifdef FREECIV_JSON_CONNECTION
2054 field_addr.name = "player_no";
2055#endif /* FREECIV_JSON_CONNECTION */
2056
2057 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2058 RECEIVE_PACKET_FIELD_ERROR(player_no);
2059 }
2060
2061#ifdef FREECIV_JSON_CONNECTION
2062 field_addr.name = "nation_no";
2063#endif /* FREECIV_JSON_CONNECTION */
2064
2065 {
2066 int readin;
2067
2068 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2069 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2070 }
2071 real_packet->nation_no = readin;
2072 }
2073
2074#ifdef FREECIV_JSON_CONNECTION
2075 field_addr.name = "is_male";
2076#endif /* FREECIV_JSON_CONNECTION */
2077
2078 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
2080 }
2081
2082#ifdef FREECIV_JSON_CONNECTION
2083 field_addr.name = "name";
2084#endif /* FREECIV_JSON_CONNECTION */
2085
2086 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2088 }
2089
2090#ifdef FREECIV_JSON_CONNECTION
2091 field_addr.name = "style";
2092#endif /* FREECIV_JSON_CONNECTION */
2093
2094 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2096 }
2097#endif /* FREECIV_DELTA_PROTOCOL */
2098
2100#undef FREE_PACKET_STRUCT
2101}
2102
2104{
2105 const struct packet_nation_select_req *real_packet = packet;
2106 int e;
2108
2109 log_packet_detailed("packet_nation_select_req_100: sending info about ()");
2110
2111#ifdef FREECIV_DELTA_PROTOCOL
2114 bool differ;
2115 struct genhash **hash = pc->phs.sent + PACKET_NATION_SELECT_REQ;
2116
2117 if (nullptr == *hash) {
2119 nullptr, nullptr, nullptr, destroy_packet_nation_select_req);
2120 }
2121 BV_CLR_ALL(fields);
2122
2123 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2124 old = fc_malloc(sizeof(*old));
2125 /* temporary bitcopy just to insert correctly */
2126 *old = *real_packet;
2129 }
2130
2131 differ = (old->player_no != real_packet->player_no);
2132 if (differ) {
2133 BV_SET(fields, 0);
2134 }
2135
2136 differ = (old->nation_no != real_packet->nation_no);
2137 if (differ) {
2138 BV_SET(fields, 1);
2139 }
2140
2141 /* folded into head */
2142 if (real_packet->is_male) {
2143 BV_SET(fields, 2);
2144 }
2145
2146 differ = (strcmp(old->name, real_packet->name) != 0);
2147 if (differ) {
2148 BV_SET(fields, 3);
2149 }
2150
2151 differ = (old->style != real_packet->style);
2152 if (differ) {
2153 BV_SET(fields, 4);
2154 }
2155#endif /* FREECIV_DELTA_PROTOCOL */
2156
2157#ifdef FREECIV_JSON_CONNECTION
2158 struct plocation field_addr;
2159 {
2160 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2163 }
2164#endif /* FREECIV_JSON_CONNECTION */
2165
2166#ifdef FREECIV_DELTA_PROTOCOL
2167#ifdef FREECIV_JSON_CONNECTION
2168 field_addr.name = "fields";
2169#endif /* FREECIV_JSON_CONNECTION */
2170 e = 0;
2171 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2172 if (e) {
2173 log_packet_detailed("fields bitvector error detected");
2174 }
2175
2176 if (BV_ISSET(fields, 0)) {
2177 log_packet_detailed(" field 'player_no' has changed");
2178
2179#ifdef FREECIV_JSON_CONNECTION
2180 field_addr.name = "player_no";
2181#endif /* FREECIV_JSON_CONNECTION */
2182 e = 0;
2183
2184 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2185
2186 if (e) {
2187 log_packet_detailed("'player_no' field error detected");
2188 }
2189 }
2190
2191 if (BV_ISSET(fields, 1)) {
2192 log_packet_detailed(" field 'nation_no' has changed");
2193
2194#ifdef FREECIV_JSON_CONNECTION
2195 field_addr.name = "nation_no";
2196#endif /* FREECIV_JSON_CONNECTION */
2197 e = 0;
2198
2199 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2200
2201 if (e) {
2202 log_packet_detailed("'nation_no' field error detected");
2203 }
2204 }
2205
2206 /* field 2 is folded into the header */
2207
2208 if (BV_ISSET(fields, 3)) {
2209 log_packet_detailed(" field 'name' has changed");
2210
2211#ifdef FREECIV_JSON_CONNECTION
2212 field_addr.name = "name";
2213#endif /* FREECIV_JSON_CONNECTION */
2214 e = 0;
2215
2216 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2217
2218 if (e) {
2219 log_packet_detailed("'name' field error detected");
2220 }
2221 }
2222
2223 if (BV_ISSET(fields, 4)) {
2224 log_packet_detailed(" field 'style' has changed");
2225
2226#ifdef FREECIV_JSON_CONNECTION
2227 field_addr.name = "style";
2228#endif /* FREECIV_JSON_CONNECTION */
2229 e = 0;
2230
2231 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2232
2233 if (e) {
2234 log_packet_detailed("'style' field error detected");
2235 }
2236 }
2237
2238 *old = *real_packet;
2239
2240#else /* FREECIV_DELTA_PROTOCOL */
2241#ifdef FREECIV_JSON_CONNECTION
2242 field_addr.name = "player_no";
2243#endif /* FREECIV_JSON_CONNECTION */
2244 e = 0;
2245
2246 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2247
2248 if (e) {
2249 log_packet_detailed("'player_no' field error detected");
2250 }
2251
2252#ifdef FREECIV_JSON_CONNECTION
2253 field_addr.name = "nation_no";
2254#endif /* FREECIV_JSON_CONNECTION */
2255 e = 0;
2256
2257 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2258
2259 if (e) {
2260 log_packet_detailed("'nation_no' field error detected");
2261 }
2262
2263#ifdef FREECIV_JSON_CONNECTION
2264 field_addr.name = "is_male";
2265#endif /* FREECIV_JSON_CONNECTION */
2266 e = 0;
2267
2268 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
2269
2270 if (e) {
2271 log_packet_detailed("'is_male' field error detected");
2272 }
2273
2274#ifdef FREECIV_JSON_CONNECTION
2275 field_addr.name = "name";
2276#endif /* FREECIV_JSON_CONNECTION */
2277 e = 0;
2278
2279 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2280
2281 if (e) {
2282 log_packet_detailed("'name' field error detected");
2283 }
2284
2285#ifdef FREECIV_JSON_CONNECTION
2286 field_addr.name = "style";
2287#endif /* FREECIV_JSON_CONNECTION */
2288 e = 0;
2289
2290 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2291
2292 if (e) {
2293 log_packet_detailed("'style' field error detected");
2294 }
2295#endif /* FREECIV_DELTA_PROTOCOL */
2296
2298}
2299
2301{
2302 if (!pc->used) {
2303 log_error("WARNING: trying to send data to the closed connection %s",
2305 return -1;
2306 }
2307 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet != nullptr, -1,
2308 "Handler for PACKET_NATION_SELECT_REQ not installed");
2309 return pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet(pc, packet);
2310}
2311
2312int dsend_packet_nation_select_req(struct connection *pc, int player_no, Nation_type_id nation_no, bool is_male, const char *name, int style)
2313{
2314 struct packet_nation_select_req packet, *real_packet = &packet;
2315
2317 real_packet->nation_no = nation_no;
2318 real_packet->is_male = is_male;
2319 sz_strlcpy(real_packet->name, name);
2320 real_packet->style = style;
2321
2323}
2324
2325static inline void init_packet_player_ready(struct packet_player_ready *packet)
2326{
2327 memset(packet, 0, sizeof(*packet));
2328}
2329
2330#define free_packet_player_ready(_packet) (void) 0
2331#define destroy_packet_player_ready free
2332
2333#ifdef FREECIV_DELTA_PROTOCOL
2334#define hash_packet_player_ready_100 hash_const
2335#define cmp_packet_player_ready_100 cmp_const
2337#endif /* FREECIV_DELTA_PROTOCOL */
2338
2340{
2341#define FREE_PACKET_STRUCT(_packet) free_packet_player_ready(_packet)
2343
2344#ifdef FREECIV_JSON_CONNECTION
2345 struct plocation field_addr;
2346 {
2347 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2350 }
2351#endif /* FREECIV_JSON_CONNECTION */
2352
2353 log_packet_detailed("packet_player_ready_100: got info about ()");
2354
2355#ifdef FREECIV_DELTA_PROTOCOL
2357 struct packet_player_ready *old;
2358 struct genhash **hash = pc->phs.received + PACKET_PLAYER_READY;
2359
2360 if (nullptr == *hash) {
2362 nullptr, nullptr, nullptr, destroy_packet_player_ready);
2363 }
2364
2365 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2366 *real_packet = *old;
2367 } else {
2368 /* packet is already initialized empty */
2369 log_packet_detailed(" no old info");
2370 }
2371
2372#ifdef FREECIV_JSON_CONNECTION
2373 field_addr.name = "fields";
2374#endif /* FREECIV_JSON_CONNECTION */
2375 DIO_BV_GET(&din, &field_addr, fields);
2376
2377 if (BV_ISSET(fields, 0)) {
2378 log_packet_detailed(" got field 'player_no'");
2379
2380#ifdef FREECIV_JSON_CONNECTION
2381 field_addr.name = "player_no";
2382#endif /* FREECIV_JSON_CONNECTION */
2383
2384 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2385 RECEIVE_PACKET_FIELD_ERROR(player_no);
2386 }
2387 }
2388
2389 real_packet->is_ready = BV_ISSET(fields, 1);
2390
2391 if (nullptr == old) {
2392 old = fc_malloc(sizeof(*old));
2394 *old = *real_packet;
2396 } else {
2397 *old = *real_packet;
2398 }
2399
2400#else /* FREECIV_DELTA_PROTOCOL */
2401#ifdef FREECIV_JSON_CONNECTION
2402 field_addr.name = "player_no";
2403#endif /* FREECIV_JSON_CONNECTION */
2404
2405 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2406 RECEIVE_PACKET_FIELD_ERROR(player_no);
2407 }
2408
2409#ifdef FREECIV_JSON_CONNECTION
2410 field_addr.name = "is_ready";
2411#endif /* FREECIV_JSON_CONNECTION */
2412
2413 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
2415 }
2416#endif /* FREECIV_DELTA_PROTOCOL */
2417
2419#undef FREE_PACKET_STRUCT
2420}
2421
2422static int send_packet_player_ready_100(struct connection *pc, const struct packet_player_ready *packet)
2423{
2424 const struct packet_player_ready *real_packet = packet;
2425 int e;
2427
2428 log_packet_detailed("packet_player_ready_100: sending info about ()");
2429
2430#ifdef FREECIV_DELTA_PROTOCOL
2432 struct packet_player_ready *old;
2433 bool differ;
2434 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_READY;
2435
2436 if (nullptr == *hash) {
2438 nullptr, nullptr, nullptr, destroy_packet_player_ready);
2439 }
2440 BV_CLR_ALL(fields);
2441
2442 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2443 old = fc_malloc(sizeof(*old));
2444 /* temporary bitcopy just to insert correctly */
2445 *old = *real_packet;
2448 }
2449
2450 differ = (old->player_no != real_packet->player_no);
2451 if (differ) {
2452 BV_SET(fields, 0);
2453 }
2454
2455 /* folded into head */
2456 if (real_packet->is_ready) {
2457 BV_SET(fields, 1);
2458 }
2459#endif /* FREECIV_DELTA_PROTOCOL */
2460
2461#ifdef FREECIV_JSON_CONNECTION
2462 struct plocation field_addr;
2463 {
2464 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2467 }
2468#endif /* FREECIV_JSON_CONNECTION */
2469
2470#ifdef FREECIV_DELTA_PROTOCOL
2471#ifdef FREECIV_JSON_CONNECTION
2472 field_addr.name = "fields";
2473#endif /* FREECIV_JSON_CONNECTION */
2474 e = 0;
2475 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2476 if (e) {
2477 log_packet_detailed("fields bitvector error detected");
2478 }
2479
2480 if (BV_ISSET(fields, 0)) {
2481 log_packet_detailed(" field 'player_no' has changed");
2482
2483#ifdef FREECIV_JSON_CONNECTION
2484 field_addr.name = "player_no";
2485#endif /* FREECIV_JSON_CONNECTION */
2486 e = 0;
2487
2488 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2489
2490 if (e) {
2491 log_packet_detailed("'player_no' field error detected");
2492 }
2493 }
2494
2495 /* field 1 is folded into the header */
2496
2497 *old = *real_packet;
2498
2499#else /* FREECIV_DELTA_PROTOCOL */
2500#ifdef FREECIV_JSON_CONNECTION
2501 field_addr.name = "player_no";
2502#endif /* FREECIV_JSON_CONNECTION */
2503 e = 0;
2504
2505 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2506
2507 if (e) {
2508 log_packet_detailed("'player_no' field error detected");
2509 }
2510
2511#ifdef FREECIV_JSON_CONNECTION
2512 field_addr.name = "is_ready";
2513#endif /* FREECIV_JSON_CONNECTION */
2514 e = 0;
2515
2516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
2517
2518 if (e) {
2519 log_packet_detailed("'is_ready' field error detected");
2520 }
2521#endif /* FREECIV_DELTA_PROTOCOL */
2522
2524}
2525
2527{
2528 if (!pc->used) {
2529 log_error("WARNING: trying to send data to the closed connection %s",
2531 return -1;
2532 }
2533 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_READY].packet != nullptr, -1,
2534 "Handler for PACKET_PLAYER_READY not installed");
2535 return pc->phs.handlers->send[PACKET_PLAYER_READY].packet(pc, packet);
2536}
2537
2538int dsend_packet_player_ready(struct connection *pc, int player_no, bool is_ready)
2539{
2540 struct packet_player_ready packet, *real_packet = &packet;
2541
2543 real_packet->is_ready = is_ready;
2544
2546}
2547
2548static inline void init_packet_endgame_report(struct packet_endgame_report *packet)
2549{
2550 memset(packet, 0, sizeof(*packet));
2551}
2552
2553#define free_packet_endgame_report(_packet) (void) 0
2554#define destroy_packet_endgame_report free
2555
2557{
2558#define FREE_PACKET_STRUCT(_packet) free_packet_endgame_report(_packet)
2560
2561#ifdef FREECIV_JSON_CONNECTION
2562 struct plocation field_addr;
2563 {
2564 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2567 }
2568#endif /* FREECIV_JSON_CONNECTION */
2569
2570 log_packet_detailed("packet_endgame_report_100: got info about ()");
2571
2572#ifdef FREECIV_JSON_CONNECTION
2573 field_addr.name = "category_num";
2574#endif /* FREECIV_JSON_CONNECTION */
2575
2576 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2577 RECEIVE_PACKET_FIELD_ERROR(category_num);
2578 }
2579
2580#ifdef FREECIV_JSON_CONNECTION
2581 field_addr.name = "category_name";
2582#endif /* FREECIV_JSON_CONNECTION */
2583
2584 {
2585 int i;
2586
2587 if (real_packet->category_num > 32) {
2588 RECEIVE_PACKET_FIELD_ERROR(category_name, ": array truncated");
2589 }
2590
2591#ifdef FREECIV_JSON_CONNECTION
2592 /* Enter array. */
2593 field_addr.sub_location = plocation_elem_new(0);
2594#endif /* FREECIV_JSON_CONNECTION */
2595
2596 for (i = 0; i < real_packet->category_num; i++) {
2597#ifdef FREECIV_JSON_CONNECTION
2598 /* Next array element */
2599 field_addr.sub_location->number = i;
2600#endif /* FREECIV_JSON_CONNECTION */
2601
2602 if (!DIO_GET(string, &din, &field_addr, real_packet->category_name[i], sizeof(real_packet->category_name[i]))) {
2603 RECEIVE_PACKET_FIELD_ERROR(category_name);
2604 }
2605 }
2606
2607#ifdef FREECIV_JSON_CONNECTION
2608 /* Exit array. */
2609 FC_FREE(field_addr.sub_location);
2610#endif /* FREECIV_JSON_CONNECTION */
2611 }
2612
2613#ifdef FREECIV_JSON_CONNECTION
2614 field_addr.name = "player_num";
2615#endif /* FREECIV_JSON_CONNECTION */
2616
2617 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
2618 RECEIVE_PACKET_FIELD_ERROR(player_num);
2619 }
2620
2622#undef FREE_PACKET_STRUCT
2623}
2624
2626{
2627 const struct packet_endgame_report *real_packet = packet;
2628 int e;
2630
2631 log_packet_detailed("packet_endgame_report_100: sending info about ()");
2632
2633#ifdef FREECIV_JSON_CONNECTION
2634 struct plocation field_addr;
2635 {
2636 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2639 }
2640#endif /* FREECIV_JSON_CONNECTION */
2641
2642#ifdef FREECIV_JSON_CONNECTION
2643 field_addr.name = "category_num";
2644#endif /* FREECIV_JSON_CONNECTION */
2645 e = 0;
2646
2647 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
2648
2649 if (e) {
2650 log_packet_detailed("'category_num' field error detected");
2651 }
2652
2653#ifdef FREECIV_JSON_CONNECTION
2654 field_addr.name = "category_name";
2655#endif /* FREECIV_JSON_CONNECTION */
2656 e = 0;
2657
2658 {
2659 int i;
2660
2661#ifdef FREECIV_JSON_CONNECTION
2662 /* Create the array. */
2663 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
2664
2665 /* Enter array. */
2666 field_addr.sub_location = plocation_elem_new(0);
2667#endif /* FREECIV_JSON_CONNECTION */
2668
2669 for (i = 0; i < real_packet->category_num; i++) {
2670#ifdef FREECIV_JSON_CONNECTION
2671 /* Next array element. */
2672 field_addr.sub_location->number = i;
2673#endif /* FREECIV_JSON_CONNECTION */
2674
2675 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_name[i]);
2676 }
2677
2678#ifdef FREECIV_JSON_CONNECTION
2679 /* Exit array. */
2680 FC_FREE(field_addr.sub_location);
2681#endif /* FREECIV_JSON_CONNECTION */
2682 }
2683
2684 if (e) {
2685 log_packet_detailed("'category_name' field error detected");
2686 }
2687
2688#ifdef FREECIV_JSON_CONNECTION
2689 field_addr.name = "player_num";
2690#endif /* FREECIV_JSON_CONNECTION */
2691 e = 0;
2692
2693 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
2694
2695 if (e) {
2696 log_packet_detailed("'player_num' field error detected");
2697 }
2698
2700}
2701
2703{
2704 if (!pc->used) {
2705 log_error("WARNING: trying to send data to the closed connection %s",
2707 return -1;
2708 }
2709 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet != nullptr, -1,
2710 "Handler for PACKET_ENDGAME_REPORT not installed");
2711 return pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet(pc, packet);
2712}
2713
2714void lsend_packet_endgame_report(struct conn_list *dest, const struct packet_endgame_report *packet)
2715{
2716 conn_list_iterate(dest, pconn) {
2719}
2720
2721static inline void init_packet_endgame_player(struct packet_endgame_player *packet)
2722{
2723 memset(packet, 0, sizeof(*packet));
2724}
2725
2726#define free_packet_endgame_player(_packet) (void) 0
2727#define destroy_packet_endgame_player free
2728
2730{
2731#define FREE_PACKET_STRUCT(_packet) free_packet_endgame_player(_packet)
2733
2734#ifdef FREECIV_JSON_CONNECTION
2735 struct plocation field_addr;
2736 {
2737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2740 }
2741#endif /* FREECIV_JSON_CONNECTION */
2742
2743 log_packet_detailed("packet_endgame_player_100: got info about ()");
2744
2745#ifdef FREECIV_JSON_CONNECTION
2746 field_addr.name = "category_num";
2747#endif /* FREECIV_JSON_CONNECTION */
2748
2749 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2750 RECEIVE_PACKET_FIELD_ERROR(category_num);
2751 }
2752
2753#ifdef FREECIV_JSON_CONNECTION
2754 field_addr.name = "player_id";
2755#endif /* FREECIV_JSON_CONNECTION */
2756
2757 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_id)) {
2758 RECEIVE_PACKET_FIELD_ERROR(player_id);
2759 }
2760
2761#ifdef FREECIV_JSON_CONNECTION
2762 field_addr.name = "score";
2763#endif /* FREECIV_JSON_CONNECTION */
2764
2765 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
2767 }
2768
2769#ifdef FREECIV_JSON_CONNECTION
2770 field_addr.name = "category_score";
2771#endif /* FREECIV_JSON_CONNECTION */
2772
2773 {
2774 int i;
2775
2776 if (real_packet->category_num > 32) {
2777 RECEIVE_PACKET_FIELD_ERROR(category_score, ": array truncated");
2778 }
2779
2780#ifdef FREECIV_JSON_CONNECTION
2781 /* Enter array. */
2782 field_addr.sub_location = plocation_elem_new(0);
2783#endif /* FREECIV_JSON_CONNECTION */
2784
2785 for (i = 0; i < real_packet->category_num; i++) {
2786#ifdef FREECIV_JSON_CONNECTION
2787 /* Next array element */
2788 field_addr.sub_location->number = i;
2789#endif /* FREECIV_JSON_CONNECTION */
2790
2791 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->category_score[i])) {
2792 RECEIVE_PACKET_FIELD_ERROR(category_score);
2793 }
2794 }
2795
2796#ifdef FREECIV_JSON_CONNECTION
2797 /* Exit array. */
2798 FC_FREE(field_addr.sub_location);
2799#endif /* FREECIV_JSON_CONNECTION */
2800 }
2801
2802#ifdef FREECIV_JSON_CONNECTION
2803 field_addr.name = "winner";
2804#endif /* FREECIV_JSON_CONNECTION */
2805
2806 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->winner)) {
2808 }
2809
2811#undef FREE_PACKET_STRUCT
2812}
2813
2815{
2816 const struct packet_endgame_player *real_packet = packet;
2817 int e;
2819
2820 log_packet_detailed("packet_endgame_player_100: sending info about ()");
2821
2822#ifdef FREECIV_JSON_CONNECTION
2823 struct plocation field_addr;
2824 {
2825 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2828 }
2829#endif /* FREECIV_JSON_CONNECTION */
2830
2831#ifdef FREECIV_JSON_CONNECTION
2832 field_addr.name = "category_num";
2833#endif /* FREECIV_JSON_CONNECTION */
2834 e = 0;
2835
2836 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
2837
2838 if (e) {
2839 log_packet_detailed("'category_num' field error detected");
2840 }
2841
2842#ifdef FREECIV_JSON_CONNECTION
2843 field_addr.name = "player_id";
2844#endif /* FREECIV_JSON_CONNECTION */
2845 e = 0;
2846
2847 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_id);
2848
2849 if (e) {
2850 log_packet_detailed("'player_id' field error detected");
2851 }
2852
2853#ifdef FREECIV_JSON_CONNECTION
2854 field_addr.name = "score";
2855#endif /* FREECIV_JSON_CONNECTION */
2856 e = 0;
2857
2858 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
2859
2860 if (e) {
2861 log_packet_detailed("'score' field error detected");
2862 }
2863
2864#ifdef FREECIV_JSON_CONNECTION
2865 field_addr.name = "category_score";
2866#endif /* FREECIV_JSON_CONNECTION */
2867 e = 0;
2868
2869 {
2870 int i;
2871
2872#ifdef FREECIV_JSON_CONNECTION
2873 /* Create the array. */
2874 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
2875
2876 /* Enter array. */
2877 field_addr.sub_location = plocation_elem_new(0);
2878#endif /* FREECIV_JSON_CONNECTION */
2879
2880 for (i = 0; i < real_packet->category_num; i++) {
2881#ifdef FREECIV_JSON_CONNECTION
2882 /* Next array element. */
2883 field_addr.sub_location->number = i;
2884#endif /* FREECIV_JSON_CONNECTION */
2885
2886 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->category_score[i]);
2887 }
2888
2889#ifdef FREECIV_JSON_CONNECTION
2890 /* Exit array. */
2891 FC_FREE(field_addr.sub_location);
2892#endif /* FREECIV_JSON_CONNECTION */
2893 }
2894
2895 if (e) {
2896 log_packet_detailed("'category_score' field error detected");
2897 }
2898
2899#ifdef FREECIV_JSON_CONNECTION
2900 field_addr.name = "winner";
2901#endif /* FREECIV_JSON_CONNECTION */
2902 e = 0;
2903
2904 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->winner);
2905
2906 if (e) {
2907 log_packet_detailed("'winner' field error detected");
2908 }
2909
2911}
2912
2914{
2915 if (!pc->used) {
2916 log_error("WARNING: trying to send data to the closed connection %s",
2918 return -1;
2919 }
2920 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet != nullptr, -1,
2921 "Handler for PACKET_ENDGAME_PLAYER not installed");
2922 return pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet(pc, packet);
2923}
2924
2925void lsend_packet_endgame_player(struct conn_list *dest, const struct packet_endgame_player *packet)
2926{
2927 conn_list_iterate(dest, pconn) {
2930}
2931
2932static inline void init_packet_tile_info(struct packet_tile_info *packet)
2933{
2934 memset(packet, 0, sizeof(*packet));
2935}
2936
2937#define free_packet_tile_info(_packet) (void) 0
2938#define destroy_packet_tile_info free
2939
2940#ifdef FREECIV_DELTA_PROTOCOL
2942{
2943 const struct packet_tile_info *key = (const struct packet_tile_info *) vkey;
2944 genhash_val_t result = 0;
2945
2946 result += key->tile;
2947
2948 result &= 0xFFFFFFFF;
2949 return result;
2950}
2951
2952static bool cmp_packet_tile_info_100(const void *vkey1, const void *vkey2)
2953{
2954 const struct packet_tile_info *old = (const struct packet_tile_info *) vkey1;
2955 const struct packet_tile_info *real_packet = (const struct packet_tile_info *) vkey2;
2956 bool differ;
2957
2958 differ = (old->tile != real_packet->tile);
2959
2960 return !differ;
2961}
2963#endif /* FREECIV_DELTA_PROTOCOL */
2964
2966{
2967#define FREE_PACKET_STRUCT(_packet) free_packet_tile_info(_packet)
2969
2970#ifdef FREECIV_JSON_CONNECTION
2971 struct plocation field_addr;
2972 {
2973 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2976 }
2977#endif /* FREECIV_JSON_CONNECTION */
2978
2979#ifdef FREECIV_JSON_CONNECTION
2980 field_addr.name = "tile";
2981#endif /* FREECIV_JSON_CONNECTION */
2982
2983 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
2985 }
2986
2987 log_packet_detailed("packet_tile_info_100: got info about (%d)",
2988 real_packet->tile);
2989
2990#ifdef FREECIV_DELTA_PROTOCOL
2992 struct packet_tile_info *old;
2993 struct genhash **hash = pc->phs.received + PACKET_TILE_INFO;
2994
2995 if (nullptr == *hash) {
2997 nullptr, nullptr, nullptr, destroy_packet_tile_info);
2998 }
2999
3000 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
3001 *real_packet = *old;
3002 } else {
3003 /* packet is already initialized empty */
3004 log_packet_detailed(" no old info");
3005 }
3006
3007#ifdef FREECIV_JSON_CONNECTION
3008 field_addr.name = "fields";
3009#endif /* FREECIV_JSON_CONNECTION */
3010 DIO_BV_GET(&din, &field_addr, fields);
3011
3012 if (BV_ISSET(fields, 0)) {
3013 log_packet_detailed(" got field 'continent'");
3014
3015#ifdef FREECIV_JSON_CONNECTION
3016 field_addr.name = "continent";
3017#endif /* FREECIV_JSON_CONNECTION */
3018
3019 {
3020 int readin;
3021
3022 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3023 RECEIVE_PACKET_FIELD_ERROR(continent);
3024 }
3025 real_packet->continent = readin;
3026 }
3027 }
3028
3029 if (BV_ISSET(fields, 1)) {
3030 log_packet_detailed(" got field 'known'");
3031
3032#ifdef FREECIV_JSON_CONNECTION
3033 field_addr.name = "known";
3034#endif /* FREECIV_JSON_CONNECTION */
3035
3036 {
3037 int readin;
3038
3039 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3041 }
3042 real_packet->known = readin;
3043 }
3044 }
3045
3046 if (BV_ISSET(fields, 2)) {
3047 log_packet_detailed(" got field 'owner'");
3048
3049#ifdef FREECIV_JSON_CONNECTION
3050 field_addr.name = "owner";
3051#endif /* FREECIV_JSON_CONNECTION */
3052
3053 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
3055 }
3056 }
3057
3058 if (BV_ISSET(fields, 3)) {
3059 log_packet_detailed(" got field 'extras_owner'");
3060
3061#ifdef FREECIV_JSON_CONNECTION
3062 field_addr.name = "extras_owner";
3063#endif /* FREECIV_JSON_CONNECTION */
3064
3065 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->extras_owner)) {
3066 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3067 }
3068 }
3069
3070 if (BV_ISSET(fields, 4)) {
3071 log_packet_detailed(" got field 'worked'");
3072
3073#ifdef FREECIV_JSON_CONNECTION
3074 field_addr.name = "worked";
3075#endif /* FREECIV_JSON_CONNECTION */
3076
3077 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3079 }
3080 }
3081
3082 if (BV_ISSET(fields, 5)) {
3083 log_packet_detailed(" got field 'terrain'");
3084
3085#ifdef FREECIV_JSON_CONNECTION
3086 field_addr.name = "terrain";
3087#endif /* FREECIV_JSON_CONNECTION */
3088
3089 {
3090 int readin;
3091
3092 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3094 }
3095 real_packet->terrain = readin;
3096 }
3097 }
3098
3099 if (BV_ISSET(fields, 6)) {
3100 log_packet_detailed(" got field 'resource'");
3101
3102#ifdef FREECIV_JSON_CONNECTION
3103 field_addr.name = "resource";
3104#endif /* FREECIV_JSON_CONNECTION */
3105
3106 {
3107 int readin;
3108
3109 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3111 }
3112 real_packet->resource = readin;
3113 }
3114 }
3115
3116 if (BV_ISSET(fields, 7)) {
3117 log_packet_detailed(" got field 'extras'");
3118
3119#ifdef FREECIV_JSON_CONNECTION
3120 field_addr.name = "extras";
3121#endif /* FREECIV_JSON_CONNECTION */
3122
3123 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3125 }
3126 }
3127
3128 if (BV_ISSET(fields, 8)) {
3129 log_packet_detailed(" got field 'placing'");
3130
3131#ifdef FREECIV_JSON_CONNECTION
3132 field_addr.name = "placing";
3133#endif /* FREECIV_JSON_CONNECTION */
3134
3135 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3137 }
3138 }
3139
3140 if (BV_ISSET(fields, 9)) {
3141 log_packet_detailed(" got field 'place_turn'");
3142
3143#ifdef FREECIV_JSON_CONNECTION
3144 field_addr.name = "place_turn";
3145#endif /* FREECIV_JSON_CONNECTION */
3146
3147 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3148 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3149 }
3150 }
3151
3152 if (BV_ISSET(fields, 10)) {
3153 log_packet_detailed(" got field 'altitude'");
3154
3155#ifdef FREECIV_JSON_CONNECTION
3156 field_addr.name = "altitude";
3157#endif /* FREECIV_JSON_CONNECTION */
3158
3159 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->altitude)) {
3161 }
3162 }
3163
3164 if (BV_ISSET(fields, 11)) {
3165 log_packet_detailed(" got field 'spec_sprite'");
3166
3167#ifdef FREECIV_JSON_CONNECTION
3168 field_addr.name = "spec_sprite";
3169#endif /* FREECIV_JSON_CONNECTION */
3170
3171 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3172 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3173 }
3174 }
3175
3176 if (BV_ISSET(fields, 12)) {
3177 log_packet_detailed(" got field 'label'");
3178
3179#ifdef FREECIV_JSON_CONNECTION
3180 field_addr.name = "label";
3181#endif /* FREECIV_JSON_CONNECTION */
3182
3183 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3185 }
3186 }
3187
3188 if (nullptr == old) {
3189 old = fc_malloc(sizeof(*old));
3191 *old = *real_packet;
3193 } else {
3194 *old = *real_packet;
3195 }
3196
3197#else /* FREECIV_DELTA_PROTOCOL */
3198#ifdef FREECIV_JSON_CONNECTION
3199 field_addr.name = "continent";
3200#endif /* FREECIV_JSON_CONNECTION */
3201
3202 {
3203 int readin;
3204
3205 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3206 RECEIVE_PACKET_FIELD_ERROR(continent);
3207 }
3208 real_packet->continent = readin;
3209 }
3210
3211#ifdef FREECIV_JSON_CONNECTION
3212 field_addr.name = "known";
3213#endif /* FREECIV_JSON_CONNECTION */
3214
3215 {
3216 int readin;
3217
3218 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3220 }
3221 real_packet->known = readin;
3222 }
3223
3224#ifdef FREECIV_JSON_CONNECTION
3225 field_addr.name = "owner";
3226#endif /* FREECIV_JSON_CONNECTION */
3227
3228 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
3230 }
3231
3232#ifdef FREECIV_JSON_CONNECTION
3233 field_addr.name = "extras_owner";
3234#endif /* FREECIV_JSON_CONNECTION */
3235
3236 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->extras_owner)) {
3237 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3238 }
3239
3240#ifdef FREECIV_JSON_CONNECTION
3241 field_addr.name = "worked";
3242#endif /* FREECIV_JSON_CONNECTION */
3243
3244 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3246 }
3247
3248#ifdef FREECIV_JSON_CONNECTION
3249 field_addr.name = "terrain";
3250#endif /* FREECIV_JSON_CONNECTION */
3251
3252 {
3253 int readin;
3254
3255 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3257 }
3258 real_packet->terrain = readin;
3259 }
3260
3261#ifdef FREECIV_JSON_CONNECTION
3262 field_addr.name = "resource";
3263#endif /* FREECIV_JSON_CONNECTION */
3264
3265 {
3266 int readin;
3267
3268 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3270 }
3271 real_packet->resource = readin;
3272 }
3273
3274#ifdef FREECIV_JSON_CONNECTION
3275 field_addr.name = "extras";
3276#endif /* FREECIV_JSON_CONNECTION */
3277
3278 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3280 }
3281
3282#ifdef FREECIV_JSON_CONNECTION
3283 field_addr.name = "placing";
3284#endif /* FREECIV_JSON_CONNECTION */
3285
3286 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3288 }
3289
3290#ifdef FREECIV_JSON_CONNECTION
3291 field_addr.name = "place_turn";
3292#endif /* FREECIV_JSON_CONNECTION */
3293
3294 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3295 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3296 }
3297
3298#ifdef FREECIV_JSON_CONNECTION
3299 field_addr.name = "altitude";
3300#endif /* FREECIV_JSON_CONNECTION */
3301
3302 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->altitude)) {
3304 }
3305
3306#ifdef FREECIV_JSON_CONNECTION
3307 field_addr.name = "spec_sprite";
3308#endif /* FREECIV_JSON_CONNECTION */
3309
3310 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3311 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3312 }
3313
3314#ifdef FREECIV_JSON_CONNECTION
3315 field_addr.name = "label";
3316#endif /* FREECIV_JSON_CONNECTION */
3317
3318 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3320 }
3321#endif /* FREECIV_DELTA_PROTOCOL */
3322
3324#undef FREE_PACKET_STRUCT
3325}
3326
3327static int send_packet_tile_info_100(struct connection *pc, const struct packet_tile_info *packet)
3328{
3329 const struct packet_tile_info *real_packet = packet;
3330 int e;
3332
3333 log_packet_detailed("packet_tile_info_100: sending info about (%d)",
3334 real_packet->tile);
3335
3336#ifdef FREECIV_DELTA_PROTOCOL
3338 struct packet_tile_info *old;
3339 bool differ;
3340 int different = 0;
3341 struct genhash **hash = pc->phs.sent + PACKET_TILE_INFO;
3342
3343 if (nullptr == *hash) {
3345 nullptr, nullptr, nullptr, destroy_packet_tile_info);
3346 }
3347 BV_CLR_ALL(fields);
3348
3349 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
3350 old = fc_malloc(sizeof(*old));
3351 /* temporary bitcopy just to insert correctly */
3352 *old = *real_packet;
3355 different = 1; /* Force to send. */
3356 }
3357
3358 differ = (old->continent != real_packet->continent);
3359 if (differ) {
3360 different++;
3361 BV_SET(fields, 0);
3362 }
3363
3364 differ = (old->known != real_packet->known);
3365 if (differ) {
3366 different++;
3367 BV_SET(fields, 1);
3368 }
3369
3370 differ = (old->owner != real_packet->owner);
3371 if (differ) {
3372 different++;
3373 BV_SET(fields, 2);
3374 }
3375
3376 differ = (old->extras_owner != real_packet->extras_owner);
3377 if (differ) {
3378 different++;
3379 BV_SET(fields, 3);
3380 }
3381
3382 differ = (old->worked != real_packet->worked);
3383 if (differ) {
3384 different++;
3385 BV_SET(fields, 4);
3386 }
3387
3388 differ = (old->terrain != real_packet->terrain);
3389 if (differ) {
3390 different++;
3391 BV_SET(fields, 5);
3392 }
3393
3394 differ = (old->resource != real_packet->resource);
3395 if (differ) {
3396 different++;
3397 BV_SET(fields, 6);
3398 }
3399
3400 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
3401 if (differ) {
3402 different++;
3403 BV_SET(fields, 7);
3404 }
3405
3406 differ = (old->placing != real_packet->placing);
3407 if (differ) {
3408 different++;
3409 BV_SET(fields, 8);
3410 }
3411
3412 differ = (old->place_turn != real_packet->place_turn);
3413 if (differ) {
3414 different++;
3415 BV_SET(fields, 9);
3416 }
3417
3418 differ = (old->altitude != real_packet->altitude);
3419 if (differ) {
3420 different++;
3421 BV_SET(fields, 10);
3422 }
3423
3424 differ = (strcmp(old->spec_sprite, real_packet->spec_sprite) != 0);
3425 if (differ) {
3426 different++;
3427 BV_SET(fields, 11);
3428 }
3429
3430 differ = (strcmp(old->label, real_packet->label) != 0);
3431 if (differ) {
3432 different++;
3433 BV_SET(fields, 12);
3434 }
3435
3436 if (different == 0) {
3437 log_packet_detailed(" no change -> discard");
3439 }
3440#endif /* FREECIV_DELTA_PROTOCOL */
3441
3442#ifdef FREECIV_JSON_CONNECTION
3443 struct plocation field_addr;
3444 {
3445 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
3448 }
3449#endif /* FREECIV_JSON_CONNECTION */
3450
3451#ifdef FREECIV_JSON_CONNECTION
3452 field_addr.name = "tile";
3453#endif /* FREECIV_JSON_CONNECTION */
3454 e = 0;
3455
3456 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
3457
3458 if (e) {
3459 log_packet_detailed("'tile' field error detected");
3460 }
3461
3462#ifdef FREECIV_DELTA_PROTOCOL
3463#ifdef FREECIV_JSON_CONNECTION
3464 field_addr.name = "fields";
3465#endif /* FREECIV_JSON_CONNECTION */
3466 e = 0;
3467 e |= DIO_BV_PUT(&dout, &field_addr, fields);
3468 if (e) {
3469 log_packet_detailed("fields bitvector error detected");
3470 }
3471
3472 if (BV_ISSET(fields, 0)) {
3473 log_packet_detailed(" field 'continent' has changed");
3474
3475#ifdef FREECIV_JSON_CONNECTION
3476 field_addr.name = "continent";
3477#endif /* FREECIV_JSON_CONNECTION */
3478 e = 0;
3479
3480 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3481
3482 if (e) {
3483 log_packet_detailed("'continent' field error detected");
3484 }
3485 }
3486
3487 if (BV_ISSET(fields, 1)) {
3488 log_packet_detailed(" field 'known' has changed");
3489
3490#ifdef FREECIV_JSON_CONNECTION
3491 field_addr.name = "known";
3492#endif /* FREECIV_JSON_CONNECTION */
3493 e = 0;
3494
3495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3496
3497 if (e) {
3498 log_packet_detailed("'known' field error detected");
3499 }
3500 }
3501
3502 if (BV_ISSET(fields, 2)) {
3503 log_packet_detailed(" field 'owner' has changed");
3504
3505#ifdef FREECIV_JSON_CONNECTION
3506 field_addr.name = "owner";
3507#endif /* FREECIV_JSON_CONNECTION */
3508 e = 0;
3509
3510 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
3511
3512 if (e) {
3513 log_packet_detailed("'owner' field error detected");
3514 }
3515 }
3516
3517 if (BV_ISSET(fields, 3)) {
3518 log_packet_detailed(" field 'extras_owner' has changed");
3519
3520#ifdef FREECIV_JSON_CONNECTION
3521 field_addr.name = "extras_owner";
3522#endif /* FREECIV_JSON_CONNECTION */
3523 e = 0;
3524
3525 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->extras_owner);
3526
3527 if (e) {
3528 log_packet_detailed("'extras_owner' field error detected");
3529 }
3530 }
3531
3532 if (BV_ISSET(fields, 4)) {
3533 log_packet_detailed(" field 'worked' has changed");
3534
3535#ifdef FREECIV_JSON_CONNECTION
3536 field_addr.name = "worked";
3537#endif /* FREECIV_JSON_CONNECTION */
3538 e = 0;
3539
3540 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3541
3542 if (e) {
3543 log_packet_detailed("'worked' field error detected");
3544 }
3545 }
3546
3547 if (BV_ISSET(fields, 5)) {
3548 log_packet_detailed(" field 'terrain' has changed");
3549
3550#ifdef FREECIV_JSON_CONNECTION
3551 field_addr.name = "terrain";
3552#endif /* FREECIV_JSON_CONNECTION */
3553 e = 0;
3554
3555 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3556
3557 if (e) {
3558 log_packet_detailed("'terrain' field error detected");
3559 }
3560 }
3561
3562 if (BV_ISSET(fields, 6)) {
3563 log_packet_detailed(" field 'resource' has changed");
3564
3565#ifdef FREECIV_JSON_CONNECTION
3566 field_addr.name = "resource";
3567#endif /* FREECIV_JSON_CONNECTION */
3568 e = 0;
3569
3570 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3571
3572 if (e) {
3573 log_packet_detailed("'resource' field error detected");
3574 }
3575 }
3576
3577 if (BV_ISSET(fields, 7)) {
3578 log_packet_detailed(" field 'extras' has changed");
3579
3580#ifdef FREECIV_JSON_CONNECTION
3581 field_addr.name = "extras";
3582#endif /* FREECIV_JSON_CONNECTION */
3583 e = 0;
3584
3585 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
3586
3587 if (e) {
3588 log_packet_detailed("'extras' field error detected");
3589 }
3590 }
3591
3592 if (BV_ISSET(fields, 8)) {
3593 log_packet_detailed(" field 'placing' has changed");
3594
3595#ifdef FREECIV_JSON_CONNECTION
3596 field_addr.name = "placing";
3597#endif /* FREECIV_JSON_CONNECTION */
3598 e = 0;
3599
3600 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3601
3602 if (e) {
3603 log_packet_detailed("'placing' field error detected");
3604 }
3605 }
3606
3607 if (BV_ISSET(fields, 9)) {
3608 log_packet_detailed(" field 'place_turn' has changed");
3609
3610#ifdef FREECIV_JSON_CONNECTION
3611 field_addr.name = "place_turn";
3612#endif /* FREECIV_JSON_CONNECTION */
3613 e = 0;
3614
3615 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3616
3617 if (e) {
3618 log_packet_detailed("'place_turn' field error detected");
3619 }
3620 }
3621
3622 if (BV_ISSET(fields, 10)) {
3623 log_packet_detailed(" field 'altitude' has changed");
3624
3625#ifdef FREECIV_JSON_CONNECTION
3626 field_addr.name = "altitude";
3627#endif /* FREECIV_JSON_CONNECTION */
3628 e = 0;
3629
3630 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->altitude);
3631
3632 if (e) {
3633 log_packet_detailed("'altitude' field error detected");
3634 }
3635 }
3636
3637 if (BV_ISSET(fields, 11)) {
3638 log_packet_detailed(" field 'spec_sprite' has changed");
3639
3640#ifdef FREECIV_JSON_CONNECTION
3641 field_addr.name = "spec_sprite";
3642#endif /* FREECIV_JSON_CONNECTION */
3643 e = 0;
3644
3645 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3646
3647 if (e) {
3648 log_packet_detailed("'spec_sprite' field error detected");
3649 }
3650 }
3651
3652 if (BV_ISSET(fields, 12)) {
3653 log_packet_detailed(" field 'label' has changed");
3654
3655#ifdef FREECIV_JSON_CONNECTION
3656 field_addr.name = "label";
3657#endif /* FREECIV_JSON_CONNECTION */
3658 e = 0;
3659
3660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3661
3662 if (e) {
3663 log_packet_detailed("'label' field error detected");
3664 }
3665 }
3666
3667 *old = *real_packet;
3668
3669#else /* FREECIV_DELTA_PROTOCOL */
3670#ifdef FREECIV_JSON_CONNECTION
3671 field_addr.name = "continent";
3672#endif /* FREECIV_JSON_CONNECTION */
3673 e = 0;
3674
3675 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3676
3677 if (e) {
3678 log_packet_detailed("'continent' field error detected");
3679 }
3680
3681#ifdef FREECIV_JSON_CONNECTION
3682 field_addr.name = "known";
3683#endif /* FREECIV_JSON_CONNECTION */
3684 e = 0;
3685
3686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3687
3688 if (e) {
3689 log_packet_detailed("'known' field error detected");
3690 }
3691
3692#ifdef FREECIV_JSON_CONNECTION
3693 field_addr.name = "owner";
3694#endif /* FREECIV_JSON_CONNECTION */
3695 e = 0;
3696
3697 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
3698
3699 if (e) {
3700 log_packet_detailed("'owner' field error detected");
3701 }
3702
3703#ifdef FREECIV_JSON_CONNECTION
3704 field_addr.name = "extras_owner";
3705#endif /* FREECIV_JSON_CONNECTION */
3706 e = 0;
3707
3708 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->extras_owner);
3709
3710 if (e) {
3711 log_packet_detailed("'extras_owner' field error detected");
3712 }
3713
3714#ifdef FREECIV_JSON_CONNECTION
3715 field_addr.name = "worked";
3716#endif /* FREECIV_JSON_CONNECTION */
3717 e = 0;
3718
3719 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3720
3721 if (e) {
3722 log_packet_detailed("'worked' field error detected");
3723 }
3724
3725#ifdef FREECIV_JSON_CONNECTION
3726 field_addr.name = "terrain";
3727#endif /* FREECIV_JSON_CONNECTION */
3728 e = 0;
3729
3730 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3731
3732 if (e) {
3733 log_packet_detailed("'terrain' field error detected");
3734 }
3735
3736#ifdef FREECIV_JSON_CONNECTION
3737 field_addr.name = "resource";
3738#endif /* FREECIV_JSON_CONNECTION */
3739 e = 0;
3740
3741 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3742
3743 if (e) {
3744 log_packet_detailed("'resource' field error detected");
3745 }
3746
3747#ifdef FREECIV_JSON_CONNECTION
3748 field_addr.name = "extras";
3749#endif /* FREECIV_JSON_CONNECTION */
3750 e = 0;
3751
3752 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
3753
3754 if (e) {
3755 log_packet_detailed("'extras' field error detected");
3756 }
3757
3758#ifdef FREECIV_JSON_CONNECTION
3759 field_addr.name = "placing";
3760#endif /* FREECIV_JSON_CONNECTION */
3761 e = 0;
3762
3763 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3764
3765 if (e) {
3766 log_packet_detailed("'placing' field error detected");
3767 }
3768
3769#ifdef FREECIV_JSON_CONNECTION
3770 field_addr.name = "place_turn";
3771#endif /* FREECIV_JSON_CONNECTION */
3772 e = 0;
3773
3774 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3775
3776 if (e) {
3777 log_packet_detailed("'place_turn' field error detected");
3778 }
3779
3780#ifdef FREECIV_JSON_CONNECTION
3781 field_addr.name = "altitude";
3782#endif /* FREECIV_JSON_CONNECTION */
3783 e = 0;
3784
3785 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->altitude);
3786
3787 if (e) {
3788 log_packet_detailed("'altitude' field error detected");
3789 }
3790
3791#ifdef FREECIV_JSON_CONNECTION
3792 field_addr.name = "spec_sprite";
3793#endif /* FREECIV_JSON_CONNECTION */
3794 e = 0;
3795
3796 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3797
3798 if (e) {
3799 log_packet_detailed("'spec_sprite' field error detected");
3800 }
3801
3802#ifdef FREECIV_JSON_CONNECTION
3803 field_addr.name = "label";
3804#endif /* FREECIV_JSON_CONNECTION */
3805 e = 0;
3806
3807 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3808
3809 if (e) {
3810 log_packet_detailed("'label' field error detected");
3811 }
3812#endif /* FREECIV_DELTA_PROTOCOL */
3813
3815}
3816
3817int send_packet_tile_info(struct connection *pc, const struct packet_tile_info *packet)
3818{
3819 if (!pc->used) {
3820 log_error("WARNING: trying to send data to the closed connection %s",
3822 return -1;
3823 }
3824 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TILE_INFO].packet != nullptr, -1,
3825 "Handler for PACKET_TILE_INFO not installed");
3826 return pc->phs.handlers->send[PACKET_TILE_INFO].packet(pc, packet);
3827}
3828
3829void lsend_packet_tile_info(struct conn_list *dest, const struct packet_tile_info *packet)
3830{
3831 conn_list_iterate(dest, pconn) {
3834}
3835
3836static inline void init_packet_game_info(struct packet_game_info *packet)
3837{
3838 memset(packet, 0, sizeof(*packet));
3839}
3840
3841#define free_packet_game_info(_packet) (void) 0
3842#define destroy_packet_game_info free
3843
3844#ifdef FREECIV_DELTA_PROTOCOL
3845#define hash_packet_game_info_100 hash_const
3846#define cmp_packet_game_info_100 cmp_const
3848#endif /* FREECIV_DELTA_PROTOCOL */
3849
3851{
3852#define FREE_PACKET_STRUCT(_packet) free_packet_game_info(_packet)
3854
3855#ifdef FREECIV_JSON_CONNECTION
3856 struct plocation field_addr;
3857 {
3858 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
3861 }
3862#endif /* FREECIV_JSON_CONNECTION */
3863
3864 log_packet_detailed("packet_game_info_100: got info about ()");
3865
3866#ifdef FREECIV_DELTA_PROTOCOL
3868 struct packet_game_info *old;
3869 struct genhash **hash = pc->phs.received + PACKET_GAME_INFO;
3870
3871 if (nullptr == *hash) {
3873 nullptr, nullptr, nullptr, destroy_packet_game_info);
3874 }
3875
3876 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
3877 *real_packet = *old;
3878 } else {
3879 /* packet is already initialized empty */
3880 log_packet_detailed(" no old info");
3881 }
3882
3883#ifdef FREECIV_JSON_CONNECTION
3884 field_addr.name = "fields";
3885#endif /* FREECIV_JSON_CONNECTION */
3886 DIO_BV_GET(&din, &field_addr, fields);
3887
3888 if (BV_ISSET(fields, 0)) {
3889 log_packet_detailed(" got field 'add_to_size_limit'");
3890
3891#ifdef FREECIV_JSON_CONNECTION
3892 field_addr.name = "add_to_size_limit";
3893#endif /* FREECIV_JSON_CONNECTION */
3894
3895 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->add_to_size_limit)) {
3896 RECEIVE_PACKET_FIELD_ERROR(add_to_size_limit);
3897 }
3898 }
3899
3900 if (BV_ISSET(fields, 1)) {
3901 log_packet_detailed(" got field 'aifill'");
3902
3903#ifdef FREECIV_JSON_CONNECTION
3904 field_addr.name = "aifill";
3905#endif /* FREECIV_JSON_CONNECTION */
3906
3907 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->aifill)) {
3909 }
3910 }
3911
3912 if (BV_ISSET(fields, 2)) {
3913 log_packet_detailed(" got field 'persistent_ready'");
3914
3915#ifdef FREECIV_JSON_CONNECTION
3916 field_addr.name = "persistent_ready";
3917#endif /* FREECIV_JSON_CONNECTION */
3918
3919 {
3920 int readin;
3921
3922 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3923 RECEIVE_PACKET_FIELD_ERROR(persistent_ready);
3924 }
3925 real_packet->persistent_ready = readin;
3926 }
3927 }
3928
3929 if (BV_ISSET(fields, 3)) {
3930 log_packet_detailed(" got field 'airlifting_style'");
3931
3932#ifdef FREECIV_JSON_CONNECTION
3933 field_addr.name = "airlifting_style";
3934#endif /* FREECIV_JSON_CONNECTION */
3935
3936 {
3937 int readin;
3938
3939 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3940 RECEIVE_PACKET_FIELD_ERROR(airlifting_style);
3941 }
3942 real_packet->airlifting_style = readin;
3943 }
3944 }
3945
3946 real_packet->airlift_from_always_enabled = BV_ISSET(fields, 4);
3947
3948 real_packet->airlift_to_always_enabled = BV_ISSET(fields, 5);
3949
3950 if (BV_ISSET(fields, 6)) {
3951 log_packet_detailed(" got field 'angrycitizen'");
3952
3953#ifdef FREECIV_JSON_CONNECTION
3954 field_addr.name = "angrycitizen";
3955#endif /* FREECIV_JSON_CONNECTION */
3956
3957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->angrycitizen)) {
3958 RECEIVE_PACKET_FIELD_ERROR(angrycitizen);
3959 }
3960 }
3961
3962 if (BV_ISSET(fields, 7)) {
3963 log_packet_detailed(" got field 'base_pollution'");
3964
3965#ifdef FREECIV_JSON_CONNECTION
3966 field_addr.name = "base_pollution";
3967#endif /* FREECIV_JSON_CONNECTION */
3968
3969 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->base_pollution)) {
3970 RECEIVE_PACKET_FIELD_ERROR(base_pollution);
3971 }
3972 }
3973
3974 if (BV_ISSET(fields, 8)) {
3975 log_packet_detailed(" got field 'base_tech_cost'");
3976
3977#ifdef FREECIV_JSON_CONNECTION
3978 field_addr.name = "base_tech_cost";
3979#endif /* FREECIV_JSON_CONNECTION */
3980
3981 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->base_tech_cost)) {
3982 RECEIVE_PACKET_FIELD_ERROR(base_tech_cost);
3983 }
3984 }
3985
3986 if (BV_ISSET(fields, 9)) {
3987 log_packet_detailed(" got field 'min_tech_cost'");
3988
3989#ifdef FREECIV_JSON_CONNECTION
3990 field_addr.name = "min_tech_cost";
3991#endif /* FREECIV_JSON_CONNECTION */
3992
3993 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_tech_cost)) {
3994 RECEIVE_PACKET_FIELD_ERROR(min_tech_cost);
3995 }
3996 }
3997
3998 if (BV_ISSET(fields, 10)) {
3999 log_packet_detailed(" got field 'tech_leak_pct'");
4000
4001#ifdef FREECIV_JSON_CONNECTION
4002 field_addr.name = "tech_leak_pct";
4003#endif /* FREECIV_JSON_CONNECTION */
4004
4005 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tech_leak_pct)) {
4006 RECEIVE_PACKET_FIELD_ERROR(tech_leak_pct);
4007 }
4008 }
4009
4010 if (BV_ISSET(fields, 11)) {
4011 log_packet_detailed(" got field 'border_city_radius_sq'");
4012
4013#ifdef FREECIV_JSON_CONNECTION
4014 field_addr.name = "border_city_radius_sq";
4015#endif /* FREECIV_JSON_CONNECTION */
4016
4017 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->border_city_radius_sq)) {
4018 RECEIVE_PACKET_FIELD_ERROR(border_city_radius_sq);
4019 }
4020 }
4021
4022 if (BV_ISSET(fields, 12)) {
4023 log_packet_detailed(" got field 'border_size_effect'");
4024
4025#ifdef FREECIV_JSON_CONNECTION
4026 field_addr.name = "border_size_effect";
4027#endif /* FREECIV_JSON_CONNECTION */
4028
4029 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->border_size_effect)) {
4030 RECEIVE_PACKET_FIELD_ERROR(border_size_effect);
4031 }
4032 }
4033
4034 if (BV_ISSET(fields, 13)) {
4035 log_packet_detailed(" got field 'border_city_permanent_radius_sq'");
4036
4037#ifdef FREECIV_JSON_CONNECTION
4038 field_addr.name = "border_city_permanent_radius_sq";
4039#endif /* FREECIV_JSON_CONNECTION */
4040
4041 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->border_city_permanent_radius_sq)) {
4042 RECEIVE_PACKET_FIELD_ERROR(border_city_permanent_radius_sq);
4043 }
4044 }
4045
4046 if (BV_ISSET(fields, 14)) {
4047 log_packet_detailed(" got field 'borders'");
4048
4049#ifdef FREECIV_JSON_CONNECTION
4050 field_addr.name = "borders";
4051#endif /* FREECIV_JSON_CONNECTION */
4052
4053 {
4054 int readin;
4055
4056 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4058 }
4059 real_packet->borders = readin;
4060 }
4061 }
4062
4063 if (BV_ISSET(fields, 15)) {
4064 log_packet_detailed(" got field 'base_bribe_cost'");
4065
4066#ifdef FREECIV_JSON_CONNECTION
4067 field_addr.name = "base_bribe_cost";
4068#endif /* FREECIV_JSON_CONNECTION */
4069
4070 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->base_bribe_cost)) {
4071 RECEIVE_PACKET_FIELD_ERROR(base_bribe_cost);
4072 }
4073 }
4074
4075 if (BV_ISSET(fields, 16)) {
4076 log_packet_detailed(" got field 'caravan_bonus_style'");
4077
4078#ifdef FREECIV_JSON_CONNECTION
4079 field_addr.name = "caravan_bonus_style";
4080#endif /* FREECIV_JSON_CONNECTION */
4081
4082 {
4083 int readin;
4084
4085 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4086 RECEIVE_PACKET_FIELD_ERROR(caravan_bonus_style);
4087 }
4088 real_packet->caravan_bonus_style = readin;
4089 }
4090 }
4091
4092 if (BV_ISSET(fields, 17)) {
4093 log_packet_detailed(" got field 'culture_vic_points'");
4094
4095#ifdef FREECIV_JSON_CONNECTION
4096 field_addr.name = "culture_vic_points";
4097#endif /* FREECIV_JSON_CONNECTION */
4098
4099 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture_vic_points)) {
4100 RECEIVE_PACKET_FIELD_ERROR(culture_vic_points);
4101 }
4102 }
4103
4104 if (BV_ISSET(fields, 18)) {
4105 log_packet_detailed(" got field 'culture_vic_lead'");
4106
4107#ifdef FREECIV_JSON_CONNECTION
4108 field_addr.name = "culture_vic_lead";
4109#endif /* FREECIV_JSON_CONNECTION */
4110
4111 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_vic_lead)) {
4112 RECEIVE_PACKET_FIELD_ERROR(culture_vic_lead);
4113 }
4114 }
4115
4116 if (BV_ISSET(fields, 19)) {
4117 log_packet_detailed(" got field 'culture_migration_pml'");
4118
4119#ifdef FREECIV_JSON_CONNECTION
4120 field_addr.name = "culture_migration_pml";
4121#endif /* FREECIV_JSON_CONNECTION */
4122
4123 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_migration_pml)) {
4125 }
4126 }
4127
4128 if (BV_ISSET(fields, 20)) {
4129 log_packet_detailed(" got field 'history_interest_pml'");
4130
4131#ifdef FREECIV_JSON_CONNECTION
4132 field_addr.name = "history_interest_pml";
4133#endif /* FREECIV_JSON_CONNECTION */
4134
4135 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->history_interest_pml)) {
4136 RECEIVE_PACKET_FIELD_ERROR(history_interest_pml);
4137 }
4138 }
4139
4140 if (BV_ISSET(fields, 21)) {
4141 log_packet_detailed(" got field 'world_peace_turns'");
4142
4143#ifdef FREECIV_JSON_CONNECTION
4144 field_addr.name = "world_peace_turns";
4145#endif /* FREECIV_JSON_CONNECTION */
4146
4147 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->world_peace_turns)) {
4149 }
4150 }
4151
4152 if (BV_ISSET(fields, 22)) {
4153 log_packet_detailed(" got field 'celebratesize'");
4154
4155#ifdef FREECIV_JSON_CONNECTION
4156 field_addr.name = "celebratesize";
4157#endif /* FREECIV_JSON_CONNECTION */
4158
4159 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->celebratesize)) {
4160 RECEIVE_PACKET_FIELD_ERROR(celebratesize);
4161 }
4162 }
4163
4164 real_packet->changable_tax = BV_ISSET(fields, 23);
4165
4166 if (BV_ISSET(fields, 24)) {
4167 log_packet_detailed(" got field 'pop_report_zeroes'");
4168
4169#ifdef FREECIV_JSON_CONNECTION
4170 field_addr.name = "pop_report_zeroes";
4171#endif /* FREECIV_JSON_CONNECTION */
4172
4173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_report_zeroes)) {
4174 RECEIVE_PACKET_FIELD_ERROR(pop_report_zeroes);
4175 }
4176 }
4177
4178 real_packet->citizen_nationality = BV_ISSET(fields, 25);
4179
4180 real_packet->unit_builders_nationality = BV_ISSET(fields, 26);
4181
4182 if (BV_ISSET(fields, 27)) {
4183 log_packet_detailed(" got field 'citizen_convert_speed'");
4184
4185#ifdef FREECIV_JSON_CONNECTION
4186 field_addr.name = "citizen_convert_speed";
4187#endif /* FREECIV_JSON_CONNECTION */
4188
4189 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->citizen_convert_speed)) {
4190 RECEIVE_PACKET_FIELD_ERROR(citizen_convert_speed);
4191 }
4192 }
4193
4194 if (BV_ISSET(fields, 28)) {
4195 log_packet_detailed(" got field 'conquest_convert_pct'");
4196
4197#ifdef FREECIV_JSON_CONNECTION
4198 field_addr.name = "conquest_convert_pct";
4199#endif /* FREECIV_JSON_CONNECTION */
4200
4201 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->conquest_convert_pct)) {
4202 RECEIVE_PACKET_FIELD_ERROR(conquest_convert_pct);
4203 }
4204 }
4205
4206 if (BV_ISSET(fields, 29)) {
4207 log_packet_detailed(" got field 'citizen_partisans_pct'");
4208
4209#ifdef FREECIV_JSON_CONNECTION
4210 field_addr.name = "citizen_partisans_pct";
4211#endif /* FREECIV_JSON_CONNECTION */
4212
4213 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citizen_partisans_pct)) {
4214 RECEIVE_PACKET_FIELD_ERROR(citizen_partisans_pct);
4215 }
4216 }
4217
4218 if (BV_ISSET(fields, 30)) {
4219 log_packet_detailed(" got field 'citymindist'");
4220
4221#ifdef FREECIV_JSON_CONNECTION
4222 field_addr.name = "citymindist";
4223#endif /* FREECIV_JSON_CONNECTION */
4224
4225 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citymindist)) {
4226 RECEIVE_PACKET_FIELD_ERROR(citymindist);
4227 }
4228 }
4229
4230 if (BV_ISSET(fields, 31)) {
4231 log_packet_detailed(" got field 'cooling'");
4232
4233#ifdef FREECIV_JSON_CONNECTION
4234 field_addr.name = "cooling";
4235#endif /* FREECIV_JSON_CONNECTION */
4236
4237 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cooling)) {
4239 }
4240 }
4241
4242 if (BV_ISSET(fields, 32)) {
4243 log_packet_detailed(" got field 'coolinglevel'");
4244
4245#ifdef FREECIV_JSON_CONNECTION
4246 field_addr.name = "coolinglevel";
4247#endif /* FREECIV_JSON_CONNECTION */
4248
4249 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->coolinglevel)) {
4250 RECEIVE_PACKET_FIELD_ERROR(coolinglevel);
4251 }
4252 }
4253
4254 if (BV_ISSET(fields, 33)) {
4255 log_packet_detailed(" got field 'diplchance_initial_odds'");
4256
4257#ifdef FREECIV_JSON_CONNECTION
4258 field_addr.name = "diplchance_initial_odds";
4259#endif /* FREECIV_JSON_CONNECTION */
4260
4261 if (!DIO_BV_GET(&din, &field_addr, real_packet->diplchance_initial_odds)) {
4262 RECEIVE_PACKET_FIELD_ERROR(diplchance_initial_odds);
4263 }
4264 }
4265
4266 if (BV_ISSET(fields, 34)) {
4267 log_packet_detailed(" got field 'diplomacy'");
4268
4269#ifdef FREECIV_JSON_CONNECTION
4270 field_addr.name = "diplomacy";
4271#endif /* FREECIV_JSON_CONNECTION */
4272
4273 {
4274 int readin;
4275
4276 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4277 RECEIVE_PACKET_FIELD_ERROR(diplomacy);
4278 }
4279 real_packet->diplomacy = readin;
4280 }
4281 }
4282
4283 real_packet->fogofwar = BV_ISSET(fields, 35);
4284
4285 if (BV_ISSET(fields, 36)) {
4286 log_packet_detailed(" got field 'food_cost'");
4287
4288#ifdef FREECIV_JSON_CONNECTION
4289 field_addr.name = "food_cost";
4290#endif /* FREECIV_JSON_CONNECTION */
4291
4292 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_cost)) {
4293 RECEIVE_PACKET_FIELD_ERROR(food_cost);
4294 }
4295 }
4296
4297 if (BV_ISSET(fields, 37)) {
4298 log_packet_detailed(" got field 'foodbox'");
4299
4300#ifdef FREECIV_JSON_CONNECTION
4301 field_addr.name = "foodbox";
4302#endif /* FREECIV_JSON_CONNECTION */
4303
4304 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->foodbox)) {
4306 }
4307 }
4308
4309 if (BV_ISSET(fields, 38)) {
4310 log_packet_detailed(" got field 'forced_gold'");
4311
4312#ifdef FREECIV_JSON_CONNECTION
4313 field_addr.name = "forced_gold";
4314#endif /* FREECIV_JSON_CONNECTION */
4315
4316 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_gold)) {
4317 RECEIVE_PACKET_FIELD_ERROR(forced_gold);
4318 }
4319 }
4320
4321 if (BV_ISSET(fields, 39)) {
4322 log_packet_detailed(" got field 'forced_luxury'");
4323
4324#ifdef FREECIV_JSON_CONNECTION
4325 field_addr.name = "forced_luxury";
4326#endif /* FREECIV_JSON_CONNECTION */
4327
4328 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_luxury)) {
4329 RECEIVE_PACKET_FIELD_ERROR(forced_luxury);
4330 }
4331 }
4332
4333 if (BV_ISSET(fields, 40)) {
4334 log_packet_detailed(" got field 'forced_science'");
4335
4336#ifdef FREECIV_JSON_CONNECTION
4337 field_addr.name = "forced_science";
4338#endif /* FREECIV_JSON_CONNECTION */
4339
4340 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_science)) {
4341 RECEIVE_PACKET_FIELD_ERROR(forced_science);
4342 }
4343 }
4344
4345 if (BV_ISSET(fields, 41)) {
4346 log_packet_detailed(" got field 'fulltradesize'");
4347
4348#ifdef FREECIV_JSON_CONNECTION
4349 field_addr.name = "fulltradesize";
4350#endif /* FREECIV_JSON_CONNECTION */
4351
4352 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fulltradesize)) {
4353 RECEIVE_PACKET_FIELD_ERROR(fulltradesize);
4354 }
4355 }
4356
4357 if (BV_ISSET(fields, 42)) {
4358 log_packet_detailed(" got field 'trade_world_rel_pct'");
4359
4360#ifdef FREECIV_JSON_CONNECTION
4361 field_addr.name = "trade_world_rel_pct";
4362#endif /* FREECIV_JSON_CONNECTION */
4363
4364 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_world_rel_pct)) {
4365 RECEIVE_PACKET_FIELD_ERROR(trade_world_rel_pct);
4366 }
4367 }
4368
4369 if (BV_ISSET(fields, 43)) {
4370 log_packet_detailed(" got field 'min_trade_route_val'");
4371
4372#ifdef FREECIV_JSON_CONNECTION
4373 field_addr.name = "min_trade_route_val";
4374#endif /* FREECIV_JSON_CONNECTION */
4375
4376 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_trade_route_val)) {
4377 RECEIVE_PACKET_FIELD_ERROR(min_trade_route_val);
4378 }
4379 }
4380
4381 real_packet->reveal_trade_partner = BV_ISSET(fields, 44);
4382
4383 if (BV_ISSET(fields, 45)) {
4384 log_packet_detailed(" got field 'goods_selection'");
4385
4386#ifdef FREECIV_JSON_CONNECTION
4387 field_addr.name = "goods_selection";
4388#endif /* FREECIV_JSON_CONNECTION */
4389
4390 {
4391 int readin;
4392
4393 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4394 RECEIVE_PACKET_FIELD_ERROR(goods_selection);
4395 }
4396 real_packet->goods_selection = readin;
4397 }
4398 }
4399
4400 if (BV_ISSET(fields, 46)) {
4401 log_packet_detailed(" got field 'global_advance_count'");
4402
4403#ifdef FREECIV_JSON_CONNECTION
4404 field_addr.name = "global_advance_count";
4405#endif /* FREECIV_JSON_CONNECTION */
4406
4407 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_advance_count)) {
4408 RECEIVE_PACKET_FIELD_ERROR(global_advance_count);
4409 }
4410 }
4411
4412 if (BV_ISSET(fields, 47)) {
4413 log_packet_detailed(" got field 'global_advances'");
4414
4415#ifdef FREECIV_JSON_CONNECTION
4416 field_addr.name = "global_advances";
4417#endif /* FREECIV_JSON_CONNECTION */
4418
4420#ifdef FREECIV_JSON_CONNECTION
4421 /* Enter array (start at initial element). */
4422 field_addr.sub_location = plocation_elem_new(0);
4423 /* Enter diff array element (start at the index address). */
4424 field_addr.sub_location->sub_location = plocation_field_new("index");
4425#endif /* FREECIV_JSON_CONNECTION */
4426
4427 while (TRUE) {
4428 int i;
4429
4430 /* Read next index */
4431#if A_LAST <= MAX_UINT8
4432 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
4433#else
4434 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
4435#endif
4436 RECEIVE_PACKET_FIELD_ERROR(global_advances);
4437 }
4438
4439 if (i == A_LAST) {
4440 break;
4441 }
4442 if (i > A_LAST) {
4443 RECEIVE_PACKET_FIELD_ERROR(global_advances,
4444 ": unexpected index %d "
4445 "> length %d in array diff",
4446 i,
4447 A_LAST);
4448 }
4449
4450#ifdef FREECIV_JSON_CONNECTION
4451 /* Content address. */
4452 field_addr.sub_location->sub_location->name = "data";
4453#endif /* FREECIV_JSON_CONNECTION */
4454
4455 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_advances[i])) {
4456 RECEIVE_PACKET_FIELD_ERROR(global_advances);
4457 }
4458
4459#ifdef FREECIV_JSON_CONNECTION
4460 /* Move to the next diff array element. */
4461 field_addr.sub_location->number++;
4462 /* Back to the index address. */
4463 field_addr.sub_location->sub_location->name = "index";
4464#endif /* FREECIV_JSON_CONNECTION */
4465 }
4466
4467#ifdef FREECIV_JSON_CONNECTION
4468 /* Exit diff array element. */
4469 FC_FREE(field_addr.sub_location->sub_location);
4470 /* Exit array. */
4471 FC_FREE(field_addr.sub_location);
4472#endif /* FREECIV_JSON_CONNECTION */
4473 }
4474
4475 real_packet->global_warming = BV_ISSET(fields, 48);
4476
4477 if (BV_ISSET(fields, 49)) {
4478 log_packet_detailed(" got field 'globalwarming'");
4479
4480#ifdef FREECIV_JSON_CONNECTION
4481 field_addr.name = "globalwarming";
4482#endif /* FREECIV_JSON_CONNECTION */
4483
4484 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->globalwarming)) {
4485 RECEIVE_PACKET_FIELD_ERROR(globalwarming);
4486 }
4487 }
4488
4489 if (BV_ISSET(fields, 50)) {
4490 log_packet_detailed(" got field 'gold'");
4491
4492#ifdef FREECIV_JSON_CONNECTION
4493 field_addr.name = "gold";
4494#endif /* FREECIV_JSON_CONNECTION */
4495
4496 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
4498 }
4499 }
4500
4501 if (BV_ISSET(fields, 51)) {
4502 log_packet_detailed(" got field 'gold_upkeep_style'");
4503
4504#ifdef FREECIV_JSON_CONNECTION
4505 field_addr.name = "gold_upkeep_style";
4506#endif /* FREECIV_JSON_CONNECTION */
4507
4508 {
4509 int readin;
4510
4511 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4512 RECEIVE_PACKET_FIELD_ERROR(gold_upkeep_style);
4513 }
4514 real_packet->gold_upkeep_style = readin;
4515 }
4516 }
4517
4518 if (BV_ISSET(fields, 52)) {
4519 log_packet_detailed(" got field 'infrapoints'");
4520
4521#ifdef FREECIV_JSON_CONNECTION
4522 field_addr.name = "infrapoints";
4523#endif /* FREECIV_JSON_CONNECTION */
4524
4525 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
4526 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
4527 }
4528 }
4529
4530 if (BV_ISSET(fields, 53)) {
4531 log_packet_detailed(" got field 'revolentype'");
4532
4533#ifdef FREECIV_JSON_CONNECTION
4534 field_addr.name = "revolentype";
4535#endif /* FREECIV_JSON_CONNECTION */
4536
4537 {
4538 int readin;
4539
4540 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4541 RECEIVE_PACKET_FIELD_ERROR(revolentype);
4542 }
4543 real_packet->revolentype = readin;
4544 }
4545 }
4546
4547 if (BV_ISSET(fields, 54)) {
4548 log_packet_detailed(" got field 'default_government_id'");
4549
4550#ifdef FREECIV_JSON_CONNECTION
4551 field_addr.name = "default_government_id";
4552#endif /* FREECIV_JSON_CONNECTION */
4553
4554 {
4555 int readin;
4556
4557 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
4558 RECEIVE_PACKET_FIELD_ERROR(default_government_id);
4559 }
4560 real_packet->default_government_id = readin;
4561 }
4562 }
4563
4564 if (BV_ISSET(fields, 55)) {
4565 log_packet_detailed(" got field 'government_during_revolution_id'");
4566
4567#ifdef FREECIV_JSON_CONNECTION
4568 field_addr.name = "government_during_revolution_id";
4569#endif /* FREECIV_JSON_CONNECTION */
4570
4571 {
4572 int readin;
4573
4574 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
4575 RECEIVE_PACKET_FIELD_ERROR(government_during_revolution_id);
4576 }
4577 real_packet->government_during_revolution_id = readin;
4578 }
4579 }
4580
4581 if (BV_ISSET(fields, 56)) {
4582 log_packet_detailed(" got field 'granary_food_inc'");
4583
4584#ifdef FREECIV_JSON_CONNECTION
4585 field_addr.name = "granary_food_inc";
4586#endif /* FREECIV_JSON_CONNECTION */
4587
4588 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_inc)) {
4589 RECEIVE_PACKET_FIELD_ERROR(granary_food_inc);
4590 }
4591 }
4592
4593 if (BV_ISSET(fields, 57)) {
4594 log_packet_detailed(" got field 'granary_food_ini'");
4595
4596#ifdef FREECIV_JSON_CONNECTION
4597 field_addr.name = "granary_food_ini";
4598#endif /* FREECIV_JSON_CONNECTION */
4599
4600 {
4601 int i;
4602
4603
4604#ifdef FREECIV_JSON_CONNECTION
4605 /* Enter array. */
4606 field_addr.sub_location = plocation_elem_new(0);
4607#endif /* FREECIV_JSON_CONNECTION */
4608
4609 for (i = 0; i < MAX_GRANARY_INIS; i++) {
4610#ifdef FREECIV_JSON_CONNECTION
4611 /* Next array element */
4612 field_addr.sub_location->number = i;
4613#endif /* FREECIV_JSON_CONNECTION */
4614
4615 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_ini[i])) {
4616 RECEIVE_PACKET_FIELD_ERROR(granary_food_ini);
4617 }
4618 }
4619
4620#ifdef FREECIV_JSON_CONNECTION
4621 /* Exit array. */
4622 FC_FREE(field_addr.sub_location);
4623#endif /* FREECIV_JSON_CONNECTION */
4624 }
4625 }
4626
4627 if (BV_ISSET(fields, 58)) {
4628 log_packet_detailed(" got field 'granary_num_inis'");
4629
4630#ifdef FREECIV_JSON_CONNECTION
4631 field_addr.name = "granary_num_inis";
4632#endif /* FREECIV_JSON_CONNECTION */
4633
4634 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->granary_num_inis)) {
4635 RECEIVE_PACKET_FIELD_ERROR(granary_num_inis);
4636 }
4637 }
4638
4639 if (BV_ISSET(fields, 59)) {
4640 log_packet_detailed(" got field 'great_wonder_owners'");
4641
4642#ifdef FREECIV_JSON_CONNECTION
4643 field_addr.name = "great_wonder_owners";
4644#endif /* FREECIV_JSON_CONNECTION */
4645
4647#ifdef FREECIV_JSON_CONNECTION
4648 /* Enter array (start at initial element). */
4649 field_addr.sub_location = plocation_elem_new(0);
4650 /* Enter diff array element (start at the index address). */
4651 field_addr.sub_location->sub_location = plocation_field_new("index");
4652#endif /* FREECIV_JSON_CONNECTION */
4653
4654 while (TRUE) {
4655 int i;
4656
4657 /* Read next index */
4658#if B_LAST <= MAX_UINT8
4659 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
4660#else
4661 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
4662#endif
4663 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
4664 }
4665
4666 if (i == B_LAST) {
4667 break;
4668 }
4669 if (i > B_LAST) {
4670 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners,
4671 ": unexpected index %d "
4672 "> length %d in array diff",
4673 i,
4674 B_LAST);
4675 }
4676
4677#ifdef FREECIV_JSON_CONNECTION
4678 /* Content address. */
4679 field_addr.sub_location->sub_location->name = "data";
4680#endif /* FREECIV_JSON_CONNECTION */
4681
4682 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->great_wonder_owners[i])) {
4683 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
4684 }
4685
4686#ifdef FREECIV_JSON_CONNECTION
4687 /* Move to the next diff array element. */
4688 field_addr.sub_location->number++;
4689 /* Back to the index address. */
4690 field_addr.sub_location->sub_location->name = "index";
4691#endif /* FREECIV_JSON_CONNECTION */
4692 }
4693
4694#ifdef FREECIV_JSON_CONNECTION
4695 /* Exit diff array element. */
4696 FC_FREE(field_addr.sub_location->sub_location);
4697 /* Exit array. */
4698 FC_FREE(field_addr.sub_location);
4699#endif /* FREECIV_JSON_CONNECTION */
4700 }
4701
4702 if (BV_ISSET(fields, 60)) {
4703 log_packet_detailed(" got field 'happy_cost'");
4704
4705#ifdef FREECIV_JSON_CONNECTION
4706 field_addr.name = "happy_cost";
4707#endif /* FREECIV_JSON_CONNECTION */
4708
4709 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->happy_cost)) {
4710 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
4711 }
4712 }
4713
4714 if (BV_ISSET(fields, 61)) {
4715 log_packet_detailed(" got field 'happyborders'");
4716
4717#ifdef FREECIV_JSON_CONNECTION
4718 field_addr.name = "happyborders";
4719#endif /* FREECIV_JSON_CONNECTION */
4720
4721 {
4722 int readin;
4723
4724 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4725 RECEIVE_PACKET_FIELD_ERROR(happyborders);
4726 }
4727 real_packet->happyborders = readin;
4728 }
4729 }
4730
4731 if (BV_ISSET(fields, 62)) {
4732 log_packet_detailed(" got field 'heating'");
4733
4734#ifdef FREECIV_JSON_CONNECTION
4735 field_addr.name = "heating";
4736#endif /* FREECIV_JSON_CONNECTION */
4737
4738 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->heating)) {
4740 }
4741 }
4742
4743 if (BV_ISSET(fields, 63)) {
4744 log_packet_detailed(" got field 'illness_base_factor'");
4745
4746#ifdef FREECIV_JSON_CONNECTION
4747 field_addr.name = "illness_base_factor";
4748#endif /* FREECIV_JSON_CONNECTION */
4749
4750 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_base_factor)) {
4751 RECEIVE_PACKET_FIELD_ERROR(illness_base_factor);
4752 }
4753 }
4754
4755 if (BV_ISSET(fields, 64)) {
4756 log_packet_detailed(" got field 'illness_min_size'");
4757
4758#ifdef FREECIV_JSON_CONNECTION
4759 field_addr.name = "illness_min_size";
4760#endif /* FREECIV_JSON_CONNECTION */
4761
4762 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->illness_min_size)) {
4763 RECEIVE_PACKET_FIELD_ERROR(illness_min_size);
4764 }
4765 }
4766
4767 real_packet->illness_on = BV_ISSET(fields, 65);
4768
4769 if (BV_ISSET(fields, 66)) {
4770 log_packet_detailed(" got field 'illness_pollution_factor'");
4771
4772#ifdef FREECIV_JSON_CONNECTION
4773 field_addr.name = "illness_pollution_factor";
4774#endif /* FREECIV_JSON_CONNECTION */
4775
4776 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_pollution_factor)) {
4777 RECEIVE_PACKET_FIELD_ERROR(illness_pollution_factor);
4778 }
4779 }
4780
4781 if (BV_ISSET(fields, 67)) {
4782 log_packet_detailed(" got field 'illness_trade_infection'");
4783
4784#ifdef FREECIV_JSON_CONNECTION
4785 field_addr.name = "illness_trade_infection";
4786#endif /* FREECIV_JSON_CONNECTION */
4787
4788 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade_infection)) {
4789 RECEIVE_PACKET_FIELD_ERROR(illness_trade_infection);
4790 }
4791 }
4792
4793 if (BV_ISSET(fields, 68)) {
4794 log_packet_detailed(" got field 'init_city_radius_sq'");
4795
4796#ifdef FREECIV_JSON_CONNECTION
4797 field_addr.name = "init_city_radius_sq";
4798#endif /* FREECIV_JSON_CONNECTION */
4799
4800 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_city_radius_sq)) {
4801 RECEIVE_PACKET_FIELD_ERROR(init_city_radius_sq);
4802 }
4803 }
4804
4805 real_packet->is_edit_mode = BV_ISSET(fields, 69);
4806
4807 real_packet->is_new_game = BV_ISSET(fields, 70);
4808
4809 real_packet->killcitizen = BV_ISSET(fields, 71);
4810
4811 real_packet->killstack = BV_ISSET(fields, 72);
4812
4813 real_packet->only_killing_makes_veteran = BV_ISSET(fields, 73);
4814
4815 real_packet->only_real_fight_makes_veteran = BV_ISSET(fields, 74);
4816
4817 real_packet->combat_odds_scaled_veterancy = BV_ISSET(fields, 75);
4818
4819 real_packet->damage_reduces_bombard_rate = BV_ISSET(fields, 76);
4820
4821 if (BV_ISSET(fields, 77)) {
4822 log_packet_detailed(" got field 'low_firepower_badwallattacker'");
4823
4824#ifdef FREECIV_JSON_CONNECTION
4825 field_addr.name = "low_firepower_badwallattacker";
4826#endif /* FREECIV_JSON_CONNECTION */
4827
4828 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_badwallattacker)) {
4829 RECEIVE_PACKET_FIELD_ERROR(low_firepower_badwallattacker);
4830 }
4831 }
4832
4833 if (BV_ISSET(fields, 78)) {
4834 log_packet_detailed(" got field 'low_firepower_pearl_harbor'");
4835
4836#ifdef FREECIV_JSON_CONNECTION
4837 field_addr.name = "low_firepower_pearl_harbor";
4838#endif /* FREECIV_JSON_CONNECTION */
4839
4840 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_pearl_harbor)) {
4841 RECEIVE_PACKET_FIELD_ERROR(low_firepower_pearl_harbor);
4842 }
4843 }
4844
4845 if (BV_ISSET(fields, 79)) {
4846 log_packet_detailed(" got field 'low_firepower_combat_bonus'");
4847
4848#ifdef FREECIV_JSON_CONNECTION
4849 field_addr.name = "low_firepower_combat_bonus";
4850#endif /* FREECIV_JSON_CONNECTION */
4851
4852 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_combat_bonus)) {
4853 RECEIVE_PACKET_FIELD_ERROR(low_firepower_combat_bonus);
4854 }
4855 }
4856
4857 if (BV_ISSET(fields, 80)) {
4858 log_packet_detailed(" got field 'low_firepower_nonnat_bombard'");
4859
4860#ifdef FREECIV_JSON_CONNECTION
4861 field_addr.name = "low_firepower_nonnat_bombard";
4862#endif /* FREECIV_JSON_CONNECTION */
4863
4864 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_nonnat_bombard)) {
4865 RECEIVE_PACKET_FIELD_ERROR(low_firepower_nonnat_bombard);
4866 }
4867 }
4868
4869 if (BV_ISSET(fields, 81)) {
4870 log_packet_detailed(" got field 'nuke_pop_loss_pct'");
4871
4872#ifdef FREECIV_JSON_CONNECTION
4873 field_addr.name = "nuke_pop_loss_pct";
4874#endif /* FREECIV_JSON_CONNECTION */
4875
4876 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_pop_loss_pct)) {
4877 RECEIVE_PACKET_FIELD_ERROR(nuke_pop_loss_pct);
4878 }
4879 }
4880
4881 if (BV_ISSET(fields, 82)) {
4882 log_packet_detailed(" got field 'nuke_defender_survival_chance_pct'");
4883
4884#ifdef FREECIV_JSON_CONNECTION
4885 field_addr.name = "nuke_defender_survival_chance_pct";
4886#endif /* FREECIV_JSON_CONNECTION */
4887
4888 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_defender_survival_chance_pct)) {
4889 RECEIVE_PACKET_FIELD_ERROR(nuke_defender_survival_chance_pct);
4890 }
4891 }
4892
4893 if (BV_ISSET(fields, 83)) {
4894 log_packet_detailed(" got field 'min_city_center_output'");
4895
4896#ifdef FREECIV_JSON_CONNECTION
4897 field_addr.name = "min_city_center_output";
4898#endif /* FREECIV_JSON_CONNECTION */
4899
4900 {
4901 int i;
4902
4903
4904#ifdef FREECIV_JSON_CONNECTION
4905 /* Enter array. */
4906 field_addr.sub_location = plocation_elem_new(0);
4907#endif /* FREECIV_JSON_CONNECTION */
4908
4909 for (i = 0; i < O_LAST; i++) {
4910#ifdef FREECIV_JSON_CONNECTION
4911 /* Next array element */
4912 field_addr.sub_location->number = i;
4913#endif /* FREECIV_JSON_CONNECTION */
4914
4915 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_city_center_output[i])) {
4916 RECEIVE_PACKET_FIELD_ERROR(min_city_center_output);
4917 }
4918 }
4919
4920#ifdef FREECIV_JSON_CONNECTION
4921 /* Exit array. */
4922 FC_FREE(field_addr.sub_location);
4923#endif /* FREECIV_JSON_CONNECTION */
4924 }
4925 }
4926
4927 real_packet->muuk_food_wipe = BV_ISSET(fields, 84);
4928
4929 real_packet->muuk_gold_wipe = BV_ISSET(fields, 85);
4930
4931 real_packet->muuk_shield_wipe = BV_ISSET(fields, 86);
4932
4933 if (BV_ISSET(fields, 87)) {
4934 log_packet_detailed(" got field 'notradesize'");
4935
4936#ifdef FREECIV_JSON_CONNECTION
4937 field_addr.name = "notradesize";
4938#endif /* FREECIV_JSON_CONNECTION */
4939
4940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->notradesize)) {
4941 RECEIVE_PACKET_FIELD_ERROR(notradesize);
4942 }
4943 }
4944
4945 real_packet->nuclear_winter = BV_ISSET(fields, 88);
4946
4947 if (BV_ISSET(fields, 89)) {
4948 log_packet_detailed(" got field 'nuclearwinter'");
4949
4950#ifdef FREECIV_JSON_CONNECTION
4951 field_addr.name = "nuclearwinter";
4952#endif /* FREECIV_JSON_CONNECTION */
4953
4954 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->nuclearwinter)) {
4955 RECEIVE_PACKET_FIELD_ERROR(nuclearwinter);
4956 }
4957 }
4958
4959 if (BV_ISSET(fields, 90)) {
4960 log_packet_detailed(" got field 'phase'");
4961
4962#ifdef FREECIV_JSON_CONNECTION
4963 field_addr.name = "phase";
4964#endif /* FREECIV_JSON_CONNECTION */
4965
4966 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
4968 }
4969 }
4970
4971 if (BV_ISSET(fields, 91)) {
4972 log_packet_detailed(" got field 'phase_mode'");
4973
4974#ifdef FREECIV_JSON_CONNECTION
4975 field_addr.name = "phase_mode";
4976#endif /* FREECIV_JSON_CONNECTION */
4977
4978 {
4979 int readin;
4980
4981 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4982 RECEIVE_PACKET_FIELD_ERROR(phase_mode);
4983 }
4984 real_packet->phase_mode = readin;
4985 }
4986 }
4987
4988 real_packet->pillage_select = BV_ISSET(fields, 92);
4989
4990 real_packet->steal_maps_reveals_all_cities = BV_ISSET(fields, 93);
4991
4992 real_packet->poison_empties_food_stock = BV_ISSET(fields, 94);
4993
4994 real_packet->tech_steal_allow_holes = BV_ISSET(fields, 95);
4995
4996 real_packet->tech_trade_allow_holes = BV_ISSET(fields, 96);
4997
4998 real_packet->tech_trade_loss_allow_holes = BV_ISSET(fields, 97);
4999
5000 real_packet->tech_parasite_allow_holes = BV_ISSET(fields, 98);
5001
5002 real_packet->tech_loss_allow_holes = BV_ISSET(fields, 99);
5003
5004 if (BV_ISSET(fields, 100)) {
5005 log_packet_detailed(" got field 'rapturedelay'");
5006
5007#ifdef FREECIV_JSON_CONNECTION
5008 field_addr.name = "rapturedelay";
5009#endif /* FREECIV_JSON_CONNECTION */
5010
5011 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapturedelay)) {
5012 RECEIVE_PACKET_FIELD_ERROR(rapturedelay);
5013 }
5014 }
5015
5016 if (BV_ISSET(fields, 101)) {
5017 log_packet_detailed(" got field 'disasters'");
5018
5019#ifdef FREECIV_JSON_CONNECTION
5020 field_addr.name = "disasters";
5021#endif /* FREECIV_JSON_CONNECTION */
5022
5023 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disasters)) {
5025 }
5026 }
5027
5028 real_packet->restrictinfra = BV_ISSET(fields, 102);
5029
5030 real_packet->unreachable_protects = BV_ISSET(fields, 103);
5031
5032 if (BV_ISSET(fields, 104)) {
5033 log_packet_detailed(" got field 'sciencebox'");
5034
5035#ifdef FREECIV_JSON_CONNECTION
5036 field_addr.name = "sciencebox";
5037#endif /* FREECIV_JSON_CONNECTION */
5038
5039 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->sciencebox)) {
5040 RECEIVE_PACKET_FIELD_ERROR(sciencebox);
5041 }
5042 }
5043
5044 if (BV_ISSET(fields, 105)) {
5045 log_packet_detailed(" got field 'shieldbox'");
5046
5047#ifdef FREECIV_JSON_CONNECTION
5048 field_addr.name = "shieldbox";
5049#endif /* FREECIV_JSON_CONNECTION */
5050
5051 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->shieldbox)) {
5052 RECEIVE_PACKET_FIELD_ERROR(shieldbox);
5053 }
5054 }
5055
5056 if (BV_ISSET(fields, 106)) {
5057 log_packet_detailed(" got field 'skill_level'");
5058
5059#ifdef FREECIV_JSON_CONNECTION
5060 field_addr.name = "skill_level";
5061#endif /* FREECIV_JSON_CONNECTION */
5062
5063 {
5064 int readin;
5065
5066 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5067 RECEIVE_PACKET_FIELD_ERROR(skill_level);
5068 }
5069 real_packet->skill_level = readin;
5070 }
5071 }
5072
5073 if (BV_ISSET(fields, 107)) {
5074 log_packet_detailed(" got field 'victory_conditions'");
5075
5076#ifdef FREECIV_JSON_CONNECTION
5077 field_addr.name = "victory_conditions";
5078#endif /* FREECIV_JSON_CONNECTION */
5079
5080 {
5081 int readin;
5082
5083 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5084 RECEIVE_PACKET_FIELD_ERROR(victory_conditions);
5085 }
5086 real_packet->victory_conditions = readin;
5087 }
5088 }
5089
5090 real_packet->team_pooled_research = BV_ISSET(fields, 108);
5091
5092 if (BV_ISSET(fields, 109)) {
5093 log_packet_detailed(" got field 'tech'");
5094
5095#ifdef FREECIV_JSON_CONNECTION
5096 field_addr.name = "tech";
5097#endif /* FREECIV_JSON_CONNECTION */
5098
5099 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech)) {
5101 }
5102 }
5103
5104 if (BV_ISSET(fields, 110)) {
5105 log_packet_detailed(" got field 'tech_cost_style'");
5106
5107#ifdef FREECIV_JSON_CONNECTION
5108 field_addr.name = "tech_cost_style";
5109#endif /* FREECIV_JSON_CONNECTION */
5110
5111 {
5112 int readin;
5113
5114 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5115 RECEIVE_PACKET_FIELD_ERROR(tech_cost_style);
5116 }
5117 real_packet->tech_cost_style = readin;
5118 }
5119 }
5120
5121 if (BV_ISSET(fields, 111)) {
5122 log_packet_detailed(" got field 'tech_leakage'");
5123
5124#ifdef FREECIV_JSON_CONNECTION
5125 field_addr.name = "tech_leakage";
5126#endif /* FREECIV_JSON_CONNECTION */
5127
5128 {
5129 int readin;
5130
5131 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5132 RECEIVE_PACKET_FIELD_ERROR(tech_leakage);
5133 }
5134 real_packet->tech_leakage = readin;
5135 }
5136 }
5137
5138 if (BV_ISSET(fields, 112)) {
5139 log_packet_detailed(" got field 'tech_upkeep_divider'");
5140
5141#ifdef FREECIV_JSON_CONNECTION
5142 field_addr.name = "tech_upkeep_divider";
5143#endif /* FREECIV_JSON_CONNECTION */
5144
5145 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_divider)) {
5146 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_divider);
5147 }
5148 }
5149
5150 if (BV_ISSET(fields, 113)) {
5151 log_packet_detailed(" got field 'tech_upkeep_style'");
5152
5153#ifdef FREECIV_JSON_CONNECTION
5154 field_addr.name = "tech_upkeep_style";
5155#endif /* FREECIV_JSON_CONNECTION */
5156
5157 {
5158 int readin;
5159
5160 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5161 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_style);
5162 }
5163 real_packet->tech_upkeep_style = readin;
5164 }
5165 }
5166
5167 if (BV_ISSET(fields, 114)) {
5168 log_packet_detailed(" got field 'techloss_forgiveness'");
5169
5170#ifdef FREECIV_JSON_CONNECTION
5171 field_addr.name = "techloss_forgiveness";
5172#endif /* FREECIV_JSON_CONNECTION */
5173
5174 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->techloss_forgiveness)) {
5175 RECEIVE_PACKET_FIELD_ERROR(techloss_forgiveness);
5176 }
5177 }
5178
5179 if (BV_ISSET(fields, 115)) {
5180 log_packet_detailed(" got field 'free_tech_method'");
5181
5182#ifdef FREECIV_JSON_CONNECTION
5183 field_addr.name = "free_tech_method";
5184#endif /* FREECIV_JSON_CONNECTION */
5185
5186 {
5187 int readin;
5188
5189 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5190 RECEIVE_PACKET_FIELD_ERROR(free_tech_method);
5191 }
5192 real_packet->free_tech_method = readin;
5193 }
5194 }
5195
5196 if (BV_ISSET(fields, 116)) {
5197 log_packet_detailed(" got field 'gameloss_style'");
5198
5199#ifdef FREECIV_JSON_CONNECTION
5200 field_addr.name = "gameloss_style";
5201#endif /* FREECIV_JSON_CONNECTION */
5202
5203 {
5204 int readin;
5205
5206 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5207 RECEIVE_PACKET_FIELD_ERROR(gameloss_style);
5208 }
5209 real_packet->gameloss_style = readin;
5210 }
5211 }
5212
5213 if (BV_ISSET(fields, 117)) {
5214 log_packet_detailed(" got field 'timeout'");
5215
5216#ifdef FREECIV_JSON_CONNECTION
5217 field_addr.name = "timeout";
5218#endif /* FREECIV_JSON_CONNECTION */
5219
5220 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->timeout)) {
5222 }
5223 }
5224
5225 if (BV_ISSET(fields, 118)) {
5226 log_packet_detailed(" got field 'first_timeout'");
5227
5228#ifdef FREECIV_JSON_CONNECTION
5229 field_addr.name = "first_timeout";
5230#endif /* FREECIV_JSON_CONNECTION */
5231
5232 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->first_timeout)) {
5233 RECEIVE_PACKET_FIELD_ERROR(first_timeout);
5234 }
5235 }
5236
5237 real_packet->tired_attack = BV_ISSET(fields, 119);
5238
5239 if (BV_ISSET(fields, 120)) {
5240 log_packet_detailed(" got field 'trademindist'");
5241
5242#ifdef FREECIV_JSON_CONNECTION
5243 field_addr.name = "trademindist";
5244#endif /* FREECIV_JSON_CONNECTION */
5245
5246 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trademindist)) {
5247 RECEIVE_PACKET_FIELD_ERROR(trademindist);
5248 }
5249 }
5250
5251 if (BV_ISSET(fields, 121)) {
5252 log_packet_detailed(" got field 'trade_revenue_style'");
5253
5254#ifdef FREECIV_JSON_CONNECTION
5255 field_addr.name = "trade_revenue_style";
5256#endif /* FREECIV_JSON_CONNECTION */
5257
5258 {
5259 int readin;
5260
5261 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5262 RECEIVE_PACKET_FIELD_ERROR(trade_revenue_style);
5263 }
5264 real_packet->trade_revenue_style = readin;
5265 }
5266 }
5267
5268 real_packet->trading_city = BV_ISSET(fields, 122);
5269
5270 real_packet->trading_gold = BV_ISSET(fields, 123);
5271
5272 real_packet->trading_tech = BV_ISSET(fields, 124);
5273
5274 if (BV_ISSET(fields, 125)) {
5275 log_packet_detailed(" got field 'turn'");
5276
5277#ifdef FREECIV_JSON_CONNECTION
5278 field_addr.name = "turn";
5279#endif /* FREECIV_JSON_CONNECTION */
5280
5281 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
5283 }
5284 }
5285
5286 if (BV_ISSET(fields, 126)) {
5287 log_packet_detailed(" got field 'warminglevel'");
5288
5289#ifdef FREECIV_JSON_CONNECTION
5290 field_addr.name = "warminglevel";
5291#endif /* FREECIV_JSON_CONNECTION */
5292
5293 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->warminglevel)) {
5294 RECEIVE_PACKET_FIELD_ERROR(warminglevel);
5295 }
5296 }
5297
5298 if (BV_ISSET(fields, 127)) {
5299 log_packet_detailed(" got field 'year'");
5300
5301#ifdef FREECIV_JSON_CONNECTION
5302 field_addr.name = "year";
5303#endif /* FREECIV_JSON_CONNECTION */
5304
5305 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
5307 }
5308 }
5309
5310 real_packet->year_0_hack = BV_ISSET(fields, 128);
5311
5312 if (BV_ISSET(fields, 129)) {
5313 log_packet_detailed(" got field 'top_cities_count'");
5314
5315#ifdef FREECIV_JSON_CONNECTION
5316 field_addr.name = "top_cities_count";
5317#endif /* FREECIV_JSON_CONNECTION */
5318
5319 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->top_cities_count)) {
5320 RECEIVE_PACKET_FIELD_ERROR(top_cities_count);
5321 }
5322 }
5323
5324 if (BV_ISSET(fields, 130)) {
5325 log_packet_detailed(" got field 'fragment_count'");
5326
5327#ifdef FREECIV_JSON_CONNECTION
5328 field_addr.name = "fragment_count";
5329#endif /* FREECIV_JSON_CONNECTION */
5330
5331 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragment_count)) {
5332 RECEIVE_PACKET_FIELD_ERROR(fragment_count);
5333 }
5334 }
5335
5336 if (BV_ISSET(fields, 131)) {
5337 log_packet_detailed(" got field 'granularity'");
5338
5339#ifdef FREECIV_JSON_CONNECTION
5340 field_addr.name = "granularity";
5341#endif /* FREECIV_JSON_CONNECTION */
5342
5343 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granularity)) {
5344 RECEIVE_PACKET_FIELD_ERROR(granularity);
5345 }
5346 }
5347
5348 if (BV_ISSET(fields, 132)) {
5349 log_packet_detailed(" got field 'small_wonder_visibility'");
5350
5351#ifdef FREECIV_JSON_CONNECTION
5352 field_addr.name = "small_wonder_visibility";
5353#endif /* FREECIV_JSON_CONNECTION */
5354
5355 {
5356 int readin;
5357
5358 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5359 RECEIVE_PACKET_FIELD_ERROR(small_wonder_visibility);
5360 }
5361 real_packet->small_wonder_visibility = readin;
5362 }
5363 }
5364
5365 if (nullptr == old) {
5366 old = fc_malloc(sizeof(*old));
5368 *old = *real_packet;
5370 } else {
5371 *old = *real_packet;
5372 }
5373
5374#else /* FREECIV_DELTA_PROTOCOL */
5375#ifdef FREECIV_JSON_CONNECTION
5376 field_addr.name = "add_to_size_limit";
5377#endif /* FREECIV_JSON_CONNECTION */
5378
5379 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->add_to_size_limit)) {
5380 RECEIVE_PACKET_FIELD_ERROR(add_to_size_limit);
5381 }
5382
5383#ifdef FREECIV_JSON_CONNECTION
5384 field_addr.name = "aifill";
5385#endif /* FREECIV_JSON_CONNECTION */
5386
5387 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->aifill)) {
5389 }
5390
5391#ifdef FREECIV_JSON_CONNECTION
5392 field_addr.name = "persistent_ready";
5393#endif /* FREECIV_JSON_CONNECTION */
5394
5395 {
5396 int readin;
5397
5398 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5399 RECEIVE_PACKET_FIELD_ERROR(persistent_ready);
5400 }
5401 real_packet->persistent_ready = readin;
5402 }
5403
5404#ifdef FREECIV_JSON_CONNECTION
5405 field_addr.name = "airlifting_style";
5406#endif /* FREECIV_JSON_CONNECTION */
5407
5408 {
5409 int readin;
5410
5411 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5412 RECEIVE_PACKET_FIELD_ERROR(airlifting_style);
5413 }
5414 real_packet->airlifting_style = readin;
5415 }
5416
5417#ifdef FREECIV_JSON_CONNECTION
5418 field_addr.name = "airlift_from_always_enabled";
5419#endif /* FREECIV_JSON_CONNECTION */
5420
5421 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift_from_always_enabled)) {
5422 RECEIVE_PACKET_FIELD_ERROR(airlift_from_always_enabled);
5423 }
5424
5425#ifdef FREECIV_JSON_CONNECTION
5426 field_addr.name = "airlift_to_always_enabled";
5427#endif /* FREECIV_JSON_CONNECTION */
5428
5429 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift_to_always_enabled)) {
5430 RECEIVE_PACKET_FIELD_ERROR(airlift_to_always_enabled);
5431 }
5432
5433#ifdef FREECIV_JSON_CONNECTION
5434 field_addr.name = "angrycitizen";
5435#endif /* FREECIV_JSON_CONNECTION */
5436
5437 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->angrycitizen)) {
5438 RECEIVE_PACKET_FIELD_ERROR(angrycitizen);
5439 }
5440
5441#ifdef FREECIV_JSON_CONNECTION
5442 field_addr.name = "base_pollution";
5443#endif /* FREECIV_JSON_CONNECTION */
5444
5445 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->base_pollution)) {
5446 RECEIVE_PACKET_FIELD_ERROR(base_pollution);
5447 }
5448
5449#ifdef FREECIV_JSON_CONNECTION
5450 field_addr.name = "base_tech_cost";
5451#endif /* FREECIV_JSON_CONNECTION */
5452
5453 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->base_tech_cost)) {
5454 RECEIVE_PACKET_FIELD_ERROR(base_tech_cost);
5455 }
5456
5457#ifdef FREECIV_JSON_CONNECTION
5458 field_addr.name = "min_tech_cost";
5459#endif /* FREECIV_JSON_CONNECTION */
5460
5461 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_tech_cost)) {
5462 RECEIVE_PACKET_FIELD_ERROR(min_tech_cost);
5463 }
5464
5465#ifdef FREECIV_JSON_CONNECTION
5466 field_addr.name = "tech_leak_pct";
5467#endif /* FREECIV_JSON_CONNECTION */
5468
5469 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tech_leak_pct)) {
5470 RECEIVE_PACKET_FIELD_ERROR(tech_leak_pct);
5471 }
5472
5473#ifdef FREECIV_JSON_CONNECTION
5474 field_addr.name = "border_city_radius_sq";
5475#endif /* FREECIV_JSON_CONNECTION */
5476
5477 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->border_city_radius_sq)) {
5478 RECEIVE_PACKET_FIELD_ERROR(border_city_radius_sq);
5479 }
5480
5481#ifdef FREECIV_JSON_CONNECTION
5482 field_addr.name = "border_size_effect";
5483#endif /* FREECIV_JSON_CONNECTION */
5484
5485 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->border_size_effect)) {
5486 RECEIVE_PACKET_FIELD_ERROR(border_size_effect);
5487 }
5488
5489#ifdef FREECIV_JSON_CONNECTION
5490 field_addr.name = "border_city_permanent_radius_sq";
5491#endif /* FREECIV_JSON_CONNECTION */
5492
5493 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->border_city_permanent_radius_sq)) {
5494 RECEIVE_PACKET_FIELD_ERROR(border_city_permanent_radius_sq);
5495 }
5496
5497#ifdef FREECIV_JSON_CONNECTION
5498 field_addr.name = "borders";
5499#endif /* FREECIV_JSON_CONNECTION */
5500
5501 {
5502 int readin;
5503
5504 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5506 }
5507 real_packet->borders = readin;
5508 }
5509
5510#ifdef FREECIV_JSON_CONNECTION
5511 field_addr.name = "base_bribe_cost";
5512#endif /* FREECIV_JSON_CONNECTION */
5513
5514 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->base_bribe_cost)) {
5515 RECEIVE_PACKET_FIELD_ERROR(base_bribe_cost);
5516 }
5517
5518#ifdef FREECIV_JSON_CONNECTION
5519 field_addr.name = "caravan_bonus_style";
5520#endif /* FREECIV_JSON_CONNECTION */
5521
5522 {
5523 int readin;
5524
5525 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5526 RECEIVE_PACKET_FIELD_ERROR(caravan_bonus_style);
5527 }
5528 real_packet->caravan_bonus_style = readin;
5529 }
5530
5531#ifdef FREECIV_JSON_CONNECTION
5532 field_addr.name = "culture_vic_points";
5533#endif /* FREECIV_JSON_CONNECTION */
5534
5535 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture_vic_points)) {
5536 RECEIVE_PACKET_FIELD_ERROR(culture_vic_points);
5537 }
5538
5539#ifdef FREECIV_JSON_CONNECTION
5540 field_addr.name = "culture_vic_lead";
5541#endif /* FREECIV_JSON_CONNECTION */
5542
5543 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_vic_lead)) {
5544 RECEIVE_PACKET_FIELD_ERROR(culture_vic_lead);
5545 }
5546
5547#ifdef FREECIV_JSON_CONNECTION
5548 field_addr.name = "culture_migration_pml";
5549#endif /* FREECIV_JSON_CONNECTION */
5550
5551 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_migration_pml)) {
5553 }
5554
5555#ifdef FREECIV_JSON_CONNECTION
5556 field_addr.name = "history_interest_pml";
5557#endif /* FREECIV_JSON_CONNECTION */
5558
5559 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->history_interest_pml)) {
5560 RECEIVE_PACKET_FIELD_ERROR(history_interest_pml);
5561 }
5562
5563#ifdef FREECIV_JSON_CONNECTION
5564 field_addr.name = "world_peace_turns";
5565#endif /* FREECIV_JSON_CONNECTION */
5566
5567 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->world_peace_turns)) {
5569 }
5570
5571#ifdef FREECIV_JSON_CONNECTION
5572 field_addr.name = "celebratesize";
5573#endif /* FREECIV_JSON_CONNECTION */
5574
5575 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->celebratesize)) {
5576 RECEIVE_PACKET_FIELD_ERROR(celebratesize);
5577 }
5578
5579#ifdef FREECIV_JSON_CONNECTION
5580 field_addr.name = "changable_tax";
5581#endif /* FREECIV_JSON_CONNECTION */
5582
5583 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->changable_tax)) {
5584 RECEIVE_PACKET_FIELD_ERROR(changable_tax);
5585 }
5586
5587#ifdef FREECIV_JSON_CONNECTION
5588 field_addr.name = "pop_report_zeroes";
5589#endif /* FREECIV_JSON_CONNECTION */
5590
5591 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_report_zeroes)) {
5592 RECEIVE_PACKET_FIELD_ERROR(pop_report_zeroes);
5593 }
5594
5595#ifdef FREECIV_JSON_CONNECTION
5596 field_addr.name = "citizen_nationality";
5597#endif /* FREECIV_JSON_CONNECTION */
5598
5599 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->citizen_nationality)) {
5600 RECEIVE_PACKET_FIELD_ERROR(citizen_nationality);
5601 }
5602
5603#ifdef FREECIV_JSON_CONNECTION
5604 field_addr.name = "unit_builders_nationality";
5605#endif /* FREECIV_JSON_CONNECTION */
5606
5607 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unit_builders_nationality)) {
5608 RECEIVE_PACKET_FIELD_ERROR(unit_builders_nationality);
5609 }
5610
5611#ifdef FREECIV_JSON_CONNECTION
5612 field_addr.name = "citizen_convert_speed";
5613#endif /* FREECIV_JSON_CONNECTION */
5614
5615 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->citizen_convert_speed)) {
5616 RECEIVE_PACKET_FIELD_ERROR(citizen_convert_speed);
5617 }
5618
5619#ifdef FREECIV_JSON_CONNECTION
5620 field_addr.name = "conquest_convert_pct";
5621#endif /* FREECIV_JSON_CONNECTION */
5622
5623 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->conquest_convert_pct)) {
5624 RECEIVE_PACKET_FIELD_ERROR(conquest_convert_pct);
5625 }
5626
5627#ifdef FREECIV_JSON_CONNECTION
5628 field_addr.name = "citizen_partisans_pct";
5629#endif /* FREECIV_JSON_CONNECTION */
5630
5631 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citizen_partisans_pct)) {
5632 RECEIVE_PACKET_FIELD_ERROR(citizen_partisans_pct);
5633 }
5634
5635#ifdef FREECIV_JSON_CONNECTION
5636 field_addr.name = "citymindist";
5637#endif /* FREECIV_JSON_CONNECTION */
5638
5639 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citymindist)) {
5640 RECEIVE_PACKET_FIELD_ERROR(citymindist);
5641 }
5642
5643#ifdef FREECIV_JSON_CONNECTION
5644 field_addr.name = "cooling";
5645#endif /* FREECIV_JSON_CONNECTION */
5646
5647 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cooling)) {
5649 }
5650
5651#ifdef FREECIV_JSON_CONNECTION
5652 field_addr.name = "coolinglevel";
5653#endif /* FREECIV_JSON_CONNECTION */
5654
5655 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->coolinglevel)) {
5656 RECEIVE_PACKET_FIELD_ERROR(coolinglevel);
5657 }
5658
5659#ifdef FREECIV_JSON_CONNECTION
5660 field_addr.name = "diplchance_initial_odds";
5661#endif /* FREECIV_JSON_CONNECTION */
5662
5663 if (!DIO_BV_GET(&din, &field_addr, real_packet->diplchance_initial_odds)) {
5664 RECEIVE_PACKET_FIELD_ERROR(diplchance_initial_odds);
5665 }
5666
5667#ifdef FREECIV_JSON_CONNECTION
5668 field_addr.name = "diplomacy";
5669#endif /* FREECIV_JSON_CONNECTION */
5670
5671 {
5672 int readin;
5673
5674 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5675 RECEIVE_PACKET_FIELD_ERROR(diplomacy);
5676 }
5677 real_packet->diplomacy = readin;
5678 }
5679
5680#ifdef FREECIV_JSON_CONNECTION
5681 field_addr.name = "fogofwar";
5682#endif /* FREECIV_JSON_CONNECTION */
5683
5684 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->fogofwar)) {
5686 }
5687
5688#ifdef FREECIV_JSON_CONNECTION
5689 field_addr.name = "food_cost";
5690#endif /* FREECIV_JSON_CONNECTION */
5691
5692 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_cost)) {
5693 RECEIVE_PACKET_FIELD_ERROR(food_cost);
5694 }
5695
5696#ifdef FREECIV_JSON_CONNECTION
5697 field_addr.name = "foodbox";
5698#endif /* FREECIV_JSON_CONNECTION */
5699
5700 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->foodbox)) {
5702 }
5703
5704#ifdef FREECIV_JSON_CONNECTION
5705 field_addr.name = "forced_gold";
5706#endif /* FREECIV_JSON_CONNECTION */
5707
5708 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_gold)) {
5709 RECEIVE_PACKET_FIELD_ERROR(forced_gold);
5710 }
5711
5712#ifdef FREECIV_JSON_CONNECTION
5713 field_addr.name = "forced_luxury";
5714#endif /* FREECIV_JSON_CONNECTION */
5715
5716 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_luxury)) {
5717 RECEIVE_PACKET_FIELD_ERROR(forced_luxury);
5718 }
5719
5720#ifdef FREECIV_JSON_CONNECTION
5721 field_addr.name = "forced_science";
5722#endif /* FREECIV_JSON_CONNECTION */
5723
5724 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_science)) {
5725 RECEIVE_PACKET_FIELD_ERROR(forced_science);
5726 }
5727
5728#ifdef FREECIV_JSON_CONNECTION
5729 field_addr.name = "fulltradesize";
5730#endif /* FREECIV_JSON_CONNECTION */
5731
5732 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fulltradesize)) {
5733 RECEIVE_PACKET_FIELD_ERROR(fulltradesize);
5734 }
5735
5736#ifdef FREECIV_JSON_CONNECTION
5737 field_addr.name = "trade_world_rel_pct";
5738#endif /* FREECIV_JSON_CONNECTION */
5739
5740 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_world_rel_pct)) {
5741 RECEIVE_PACKET_FIELD_ERROR(trade_world_rel_pct);
5742 }
5743
5744#ifdef FREECIV_JSON_CONNECTION
5745 field_addr.name = "min_trade_route_val";
5746#endif /* FREECIV_JSON_CONNECTION */
5747
5748 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_trade_route_val)) {
5749 RECEIVE_PACKET_FIELD_ERROR(min_trade_route_val);
5750 }
5751
5752#ifdef FREECIV_JSON_CONNECTION
5753 field_addr.name = "reveal_trade_partner";
5754#endif /* FREECIV_JSON_CONNECTION */
5755
5756 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->reveal_trade_partner)) {
5757 RECEIVE_PACKET_FIELD_ERROR(reveal_trade_partner);
5758 }
5759
5760#ifdef FREECIV_JSON_CONNECTION
5761 field_addr.name = "goods_selection";
5762#endif /* FREECIV_JSON_CONNECTION */
5763
5764 {
5765 int readin;
5766
5767 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5768 RECEIVE_PACKET_FIELD_ERROR(goods_selection);
5769 }
5770 real_packet->goods_selection = readin;
5771 }
5772
5773#ifdef FREECIV_JSON_CONNECTION
5774 field_addr.name = "global_advance_count";
5775#endif /* FREECIV_JSON_CONNECTION */
5776
5777 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_advance_count)) {
5778 RECEIVE_PACKET_FIELD_ERROR(global_advance_count);
5779 }
5780
5781#ifdef FREECIV_JSON_CONNECTION
5782 field_addr.name = "global_advances";
5783#endif /* FREECIV_JSON_CONNECTION */
5784
5785 {
5786 int i;
5787
5788
5789#ifdef FREECIV_JSON_CONNECTION
5790 /* Enter array. */
5791 field_addr.sub_location = plocation_elem_new(0);
5792#endif /* FREECIV_JSON_CONNECTION */
5793
5794 for (i = 0; i < A_LAST; i++) {
5795#ifdef FREECIV_JSON_CONNECTION
5796 /* Next array element */
5797 field_addr.sub_location->number = i;
5798#endif /* FREECIV_JSON_CONNECTION */
5799
5800 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_advances[i])) {
5801 RECEIVE_PACKET_FIELD_ERROR(global_advances);
5802 }
5803 }
5804
5805#ifdef FREECIV_JSON_CONNECTION
5806 /* Exit array. */
5807 FC_FREE(field_addr.sub_location);
5808#endif /* FREECIV_JSON_CONNECTION */
5809 }
5810
5811#ifdef FREECIV_JSON_CONNECTION
5812 field_addr.name = "global_warming";
5813#endif /* FREECIV_JSON_CONNECTION */
5814
5815 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_warming)) {
5817 }
5818
5819#ifdef FREECIV_JSON_CONNECTION
5820 field_addr.name = "globalwarming";
5821#endif /* FREECIV_JSON_CONNECTION */
5822
5823 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->globalwarming)) {
5824 RECEIVE_PACKET_FIELD_ERROR(globalwarming);
5825 }
5826
5827#ifdef FREECIV_JSON_CONNECTION
5828 field_addr.name = "gold";
5829#endif /* FREECIV_JSON_CONNECTION */
5830
5831 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
5833 }
5834
5835#ifdef FREECIV_JSON_CONNECTION
5836 field_addr.name = "gold_upkeep_style";
5837#endif /* FREECIV_JSON_CONNECTION */
5838
5839 {
5840 int readin;
5841
5842 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5843 RECEIVE_PACKET_FIELD_ERROR(gold_upkeep_style);
5844 }
5845 real_packet->gold_upkeep_style = readin;
5846 }
5847
5848#ifdef FREECIV_JSON_CONNECTION
5849 field_addr.name = "infrapoints";
5850#endif /* FREECIV_JSON_CONNECTION */
5851
5852 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
5853 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
5854 }
5855
5856#ifdef FREECIV_JSON_CONNECTION
5857 field_addr.name = "revolentype";
5858#endif /* FREECIV_JSON_CONNECTION */
5859
5860 {
5861 int readin;
5862
5863 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5864 RECEIVE_PACKET_FIELD_ERROR(revolentype);
5865 }
5866 real_packet->revolentype = readin;
5867 }
5868
5869#ifdef FREECIV_JSON_CONNECTION
5870 field_addr.name = "default_government_id";
5871#endif /* FREECIV_JSON_CONNECTION */
5872
5873 {
5874 int readin;
5875
5876 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5877 RECEIVE_PACKET_FIELD_ERROR(default_government_id);
5878 }
5879 real_packet->default_government_id = readin;
5880 }
5881
5882#ifdef FREECIV_JSON_CONNECTION
5883 field_addr.name = "government_during_revolution_id";
5884#endif /* FREECIV_JSON_CONNECTION */
5885
5886 {
5887 int readin;
5888
5889 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5890 RECEIVE_PACKET_FIELD_ERROR(government_during_revolution_id);
5891 }
5892 real_packet->government_during_revolution_id = readin;
5893 }
5894
5895#ifdef FREECIV_JSON_CONNECTION
5896 field_addr.name = "granary_food_inc";
5897#endif /* FREECIV_JSON_CONNECTION */
5898
5899 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_inc)) {
5900 RECEIVE_PACKET_FIELD_ERROR(granary_food_inc);
5901 }
5902
5903#ifdef FREECIV_JSON_CONNECTION
5904 field_addr.name = "granary_food_ini";
5905#endif /* FREECIV_JSON_CONNECTION */
5906
5907 {
5908 int i;
5909
5910
5911#ifdef FREECIV_JSON_CONNECTION
5912 /* Enter array. */
5913 field_addr.sub_location = plocation_elem_new(0);
5914#endif /* FREECIV_JSON_CONNECTION */
5915
5916 for (i = 0; i < MAX_GRANARY_INIS; i++) {
5917#ifdef FREECIV_JSON_CONNECTION
5918 /* Next array element */
5919 field_addr.sub_location->number = i;
5920#endif /* FREECIV_JSON_CONNECTION */
5921
5922 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_ini[i])) {
5923 RECEIVE_PACKET_FIELD_ERROR(granary_food_ini);
5924 }
5925 }
5926
5927#ifdef FREECIV_JSON_CONNECTION
5928 /* Exit array. */
5929 FC_FREE(field_addr.sub_location);
5930#endif /* FREECIV_JSON_CONNECTION */
5931 }
5932
5933#ifdef FREECIV_JSON_CONNECTION
5934 field_addr.name = "granary_num_inis";
5935#endif /* FREECIV_JSON_CONNECTION */
5936
5937 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->granary_num_inis)) {
5938 RECEIVE_PACKET_FIELD_ERROR(granary_num_inis);
5939 }
5940
5941#ifdef FREECIV_JSON_CONNECTION
5942 field_addr.name = "great_wonder_owners";
5943#endif /* FREECIV_JSON_CONNECTION */
5944
5945 {
5946 int i;
5947
5948
5949#ifdef FREECIV_JSON_CONNECTION
5950 /* Enter array. */
5951 field_addr.sub_location = plocation_elem_new(0);
5952#endif /* FREECIV_JSON_CONNECTION */
5953
5954 for (i = 0; i < B_LAST; i++) {
5955#ifdef FREECIV_JSON_CONNECTION
5956 /* Next array element */
5957 field_addr.sub_location->number = i;
5958#endif /* FREECIV_JSON_CONNECTION */
5959
5960 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->great_wonder_owners[i])) {
5961 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
5962 }
5963 }
5964
5965#ifdef FREECIV_JSON_CONNECTION
5966 /* Exit array. */
5967 FC_FREE(field_addr.sub_location);
5968#endif /* FREECIV_JSON_CONNECTION */
5969 }
5970
5971#ifdef FREECIV_JSON_CONNECTION
5972 field_addr.name = "happy_cost";
5973#endif /* FREECIV_JSON_CONNECTION */
5974
5975 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->happy_cost)) {
5976 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
5977 }
5978
5979#ifdef FREECIV_JSON_CONNECTION
5980 field_addr.name = "happyborders";
5981#endif /* FREECIV_JSON_CONNECTION */
5982
5983 {
5984 int readin;
5985
5986 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5987 RECEIVE_PACKET_FIELD_ERROR(happyborders);
5988 }
5989 real_packet->happyborders = readin;
5990 }
5991
5992#ifdef FREECIV_JSON_CONNECTION
5993 field_addr.name = "heating";
5994#endif /* FREECIV_JSON_CONNECTION */
5995
5996 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->heating)) {
5998 }
5999
6000#ifdef FREECIV_JSON_CONNECTION
6001 field_addr.name = "illness_base_factor";
6002#endif /* FREECIV_JSON_CONNECTION */
6003
6004 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_base_factor)) {
6005 RECEIVE_PACKET_FIELD_ERROR(illness_base_factor);
6006 }
6007
6008#ifdef FREECIV_JSON_CONNECTION
6009 field_addr.name = "illness_min_size";
6010#endif /* FREECIV_JSON_CONNECTION */
6011
6012 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->illness_min_size)) {
6013 RECEIVE_PACKET_FIELD_ERROR(illness_min_size);
6014 }
6015
6016#ifdef FREECIV_JSON_CONNECTION
6017 field_addr.name = "illness_on";
6018#endif /* FREECIV_JSON_CONNECTION */
6019
6020 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->illness_on)) {
6021 RECEIVE_PACKET_FIELD_ERROR(illness_on);
6022 }
6023
6024#ifdef FREECIV_JSON_CONNECTION
6025 field_addr.name = "illness_pollution_factor";
6026#endif /* FREECIV_JSON_CONNECTION */
6027
6028 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_pollution_factor)) {
6029 RECEIVE_PACKET_FIELD_ERROR(illness_pollution_factor);
6030 }
6031
6032#ifdef FREECIV_JSON_CONNECTION
6033 field_addr.name = "illness_trade_infection";
6034#endif /* FREECIV_JSON_CONNECTION */
6035
6036 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade_infection)) {
6037 RECEIVE_PACKET_FIELD_ERROR(illness_trade_infection);
6038 }
6039
6040#ifdef FREECIV_JSON_CONNECTION
6041 field_addr.name = "init_city_radius_sq";
6042#endif /* FREECIV_JSON_CONNECTION */
6043
6044 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_city_radius_sq)) {
6045 RECEIVE_PACKET_FIELD_ERROR(init_city_radius_sq);
6046 }
6047
6048#ifdef FREECIV_JSON_CONNECTION
6049 field_addr.name = "is_edit_mode";
6050#endif /* FREECIV_JSON_CONNECTION */
6051
6052 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_edit_mode)) {
6053 RECEIVE_PACKET_FIELD_ERROR(is_edit_mode);
6054 }
6055
6056#ifdef FREECIV_JSON_CONNECTION
6057 field_addr.name = "is_new_game";
6058#endif /* FREECIV_JSON_CONNECTION */
6059
6060 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_new_game)) {
6061 RECEIVE_PACKET_FIELD_ERROR(is_new_game);
6062 }
6063
6064#ifdef FREECIV_JSON_CONNECTION
6065 field_addr.name = "killcitizen";
6066#endif /* FREECIV_JSON_CONNECTION */
6067
6068 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killcitizen)) {
6069 RECEIVE_PACKET_FIELD_ERROR(killcitizen);
6070 }
6071
6072#ifdef FREECIV_JSON_CONNECTION
6073 field_addr.name = "killstack";
6074#endif /* FREECIV_JSON_CONNECTION */
6075
6076 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killstack)) {
6077 RECEIVE_PACKET_FIELD_ERROR(killstack);
6078 }
6079
6080#ifdef FREECIV_JSON_CONNECTION
6081 field_addr.name = "only_killing_makes_veteran";
6082#endif /* FREECIV_JSON_CONNECTION */
6083
6084 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_killing_makes_veteran)) {
6085 RECEIVE_PACKET_FIELD_ERROR(only_killing_makes_veteran);
6086 }
6087
6088#ifdef FREECIV_JSON_CONNECTION
6089 field_addr.name = "only_real_fight_makes_veteran";
6090#endif /* FREECIV_JSON_CONNECTION */
6091
6092 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_real_fight_makes_veteran)) {
6093 RECEIVE_PACKET_FIELD_ERROR(only_real_fight_makes_veteran);
6094 }
6095
6096#ifdef FREECIV_JSON_CONNECTION
6097 field_addr.name = "combat_odds_scaled_veterancy";
6098#endif /* FREECIV_JSON_CONNECTION */
6099
6100 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->combat_odds_scaled_veterancy)) {
6101 RECEIVE_PACKET_FIELD_ERROR(combat_odds_scaled_veterancy);
6102 }
6103
6104#ifdef FREECIV_JSON_CONNECTION
6105 field_addr.name = "damage_reduces_bombard_rate";
6106#endif /* FREECIV_JSON_CONNECTION */
6107
6108 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->damage_reduces_bombard_rate)) {
6109 RECEIVE_PACKET_FIELD_ERROR(damage_reduces_bombard_rate);
6110 }
6111
6112#ifdef FREECIV_JSON_CONNECTION
6113 field_addr.name = "low_firepower_badwallattacker";
6114#endif /* FREECIV_JSON_CONNECTION */
6115
6116 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_badwallattacker)) {
6117 RECEIVE_PACKET_FIELD_ERROR(low_firepower_badwallattacker);
6118 }
6119
6120#ifdef FREECIV_JSON_CONNECTION
6121 field_addr.name = "low_firepower_pearl_harbor";
6122#endif /* FREECIV_JSON_CONNECTION */
6123
6124 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_pearl_harbor)) {
6125 RECEIVE_PACKET_FIELD_ERROR(low_firepower_pearl_harbor);
6126 }
6127
6128#ifdef FREECIV_JSON_CONNECTION
6129 field_addr.name = "low_firepower_combat_bonus";
6130#endif /* FREECIV_JSON_CONNECTION */
6131
6132 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_combat_bonus)) {
6133 RECEIVE_PACKET_FIELD_ERROR(low_firepower_combat_bonus);
6134 }
6135
6136#ifdef FREECIV_JSON_CONNECTION
6137 field_addr.name = "low_firepower_nonnat_bombard";
6138#endif /* FREECIV_JSON_CONNECTION */
6139
6140 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_nonnat_bombard)) {
6141 RECEIVE_PACKET_FIELD_ERROR(low_firepower_nonnat_bombard);
6142 }
6143
6144#ifdef FREECIV_JSON_CONNECTION
6145 field_addr.name = "nuke_pop_loss_pct";
6146#endif /* FREECIV_JSON_CONNECTION */
6147
6148 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_pop_loss_pct)) {
6149 RECEIVE_PACKET_FIELD_ERROR(nuke_pop_loss_pct);
6150 }
6151
6152#ifdef FREECIV_JSON_CONNECTION
6153 field_addr.name = "nuke_defender_survival_chance_pct";
6154#endif /* FREECIV_JSON_CONNECTION */
6155
6156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_defender_survival_chance_pct)) {
6157 RECEIVE_PACKET_FIELD_ERROR(nuke_defender_survival_chance_pct);
6158 }
6159
6160#ifdef FREECIV_JSON_CONNECTION
6161 field_addr.name = "min_city_center_output";
6162#endif /* FREECIV_JSON_CONNECTION */
6163
6164 {
6165 int i;
6166
6167
6168#ifdef FREECIV_JSON_CONNECTION
6169 /* Enter array. */
6170 field_addr.sub_location = plocation_elem_new(0);
6171#endif /* FREECIV_JSON_CONNECTION */
6172
6173 for (i = 0; i < O_LAST; i++) {
6174#ifdef FREECIV_JSON_CONNECTION
6175 /* Next array element */
6176 field_addr.sub_location->number = i;
6177#endif /* FREECIV_JSON_CONNECTION */
6178
6179 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_city_center_output[i])) {
6180 RECEIVE_PACKET_FIELD_ERROR(min_city_center_output);
6181 }
6182 }
6183
6184#ifdef FREECIV_JSON_CONNECTION
6185 /* Exit array. */
6186 FC_FREE(field_addr.sub_location);
6187#endif /* FREECIV_JSON_CONNECTION */
6188 }
6189
6190#ifdef FREECIV_JSON_CONNECTION
6191 field_addr.name = "muuk_food_wipe";
6192#endif /* FREECIV_JSON_CONNECTION */
6193
6194 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_food_wipe)) {
6195 RECEIVE_PACKET_FIELD_ERROR(muuk_food_wipe);
6196 }
6197
6198#ifdef FREECIV_JSON_CONNECTION
6199 field_addr.name = "muuk_gold_wipe";
6200#endif /* FREECIV_JSON_CONNECTION */
6201
6202 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_gold_wipe)) {
6203 RECEIVE_PACKET_FIELD_ERROR(muuk_gold_wipe);
6204 }
6205
6206#ifdef FREECIV_JSON_CONNECTION
6207 field_addr.name = "muuk_shield_wipe";
6208#endif /* FREECIV_JSON_CONNECTION */
6209
6210 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_shield_wipe)) {
6211 RECEIVE_PACKET_FIELD_ERROR(muuk_shield_wipe);
6212 }
6213
6214#ifdef FREECIV_JSON_CONNECTION
6215 field_addr.name = "notradesize";
6216#endif /* FREECIV_JSON_CONNECTION */
6217
6218 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->notradesize)) {
6219 RECEIVE_PACKET_FIELD_ERROR(notradesize);
6220 }
6221
6222#ifdef FREECIV_JSON_CONNECTION
6223 field_addr.name = "nuclear_winter";
6224#endif /* FREECIV_JSON_CONNECTION */
6225
6226 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nuclear_winter)) {
6228 }
6229
6230#ifdef FREECIV_JSON_CONNECTION
6231 field_addr.name = "nuclearwinter";
6232#endif /* FREECIV_JSON_CONNECTION */
6233
6234 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->nuclearwinter)) {
6235 RECEIVE_PACKET_FIELD_ERROR(nuclearwinter);
6236 }
6237
6238#ifdef FREECIV_JSON_CONNECTION
6239 field_addr.name = "phase";
6240#endif /* FREECIV_JSON_CONNECTION */
6241
6242 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
6244 }
6245
6246#ifdef FREECIV_JSON_CONNECTION
6247 field_addr.name = "phase_mode";
6248#endif /* FREECIV_JSON_CONNECTION */
6249
6250 {
6251 int readin;
6252
6253 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6254 RECEIVE_PACKET_FIELD_ERROR(phase_mode);
6255 }
6256 real_packet->phase_mode = readin;
6257 }
6258
6259#ifdef FREECIV_JSON_CONNECTION
6260 field_addr.name = "pillage_select";
6261#endif /* FREECIV_JSON_CONNECTION */
6262
6263 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pillage_select)) {
6264 RECEIVE_PACKET_FIELD_ERROR(pillage_select);
6265 }
6266
6267#ifdef FREECIV_JSON_CONNECTION
6268 field_addr.name = "steal_maps_reveals_all_cities";
6269#endif /* FREECIV_JSON_CONNECTION */
6270
6271 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->steal_maps_reveals_all_cities)) {
6272 RECEIVE_PACKET_FIELD_ERROR(steal_maps_reveals_all_cities);
6273 }
6274
6275#ifdef FREECIV_JSON_CONNECTION
6276 field_addr.name = "poison_empties_food_stock";
6277#endif /* FREECIV_JSON_CONNECTION */
6278
6279 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->poison_empties_food_stock)) {
6280 RECEIVE_PACKET_FIELD_ERROR(poison_empties_food_stock);
6281 }
6282
6283#ifdef FREECIV_JSON_CONNECTION
6284 field_addr.name = "tech_steal_allow_holes";
6285#endif /* FREECIV_JSON_CONNECTION */
6286
6287 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_steal_allow_holes)) {
6288 RECEIVE_PACKET_FIELD_ERROR(tech_steal_allow_holes);
6289 }
6290
6291#ifdef FREECIV_JSON_CONNECTION
6292 field_addr.name = "tech_trade_allow_holes";
6293#endif /* FREECIV_JSON_CONNECTION */
6294
6295 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_allow_holes)) {
6296 RECEIVE_PACKET_FIELD_ERROR(tech_trade_allow_holes);
6297 }
6298
6299#ifdef FREECIV_JSON_CONNECTION
6300 field_addr.name = "tech_trade_loss_allow_holes";
6301#endif /* FREECIV_JSON_CONNECTION */
6302
6303 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_loss_allow_holes)) {
6304 RECEIVE_PACKET_FIELD_ERROR(tech_trade_loss_allow_holes);
6305 }
6306
6307#ifdef FREECIV_JSON_CONNECTION
6308 field_addr.name = "tech_parasite_allow_holes";
6309#endif /* FREECIV_JSON_CONNECTION */
6310
6311 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_parasite_allow_holes)) {
6312 RECEIVE_PACKET_FIELD_ERROR(tech_parasite_allow_holes);
6313 }
6314
6315#ifdef FREECIV_JSON_CONNECTION
6316 field_addr.name = "tech_loss_allow_holes";
6317#endif /* FREECIV_JSON_CONNECTION */
6318
6319 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_loss_allow_holes)) {
6320 RECEIVE_PACKET_FIELD_ERROR(tech_loss_allow_holes);
6321 }
6322
6323#ifdef FREECIV_JSON_CONNECTION
6324 field_addr.name = "rapturedelay";
6325#endif /* FREECIV_JSON_CONNECTION */
6326
6327 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapturedelay)) {
6328 RECEIVE_PACKET_FIELD_ERROR(rapturedelay);
6329 }
6330
6331#ifdef FREECIV_JSON_CONNECTION
6332 field_addr.name = "disasters";
6333#endif /* FREECIV_JSON_CONNECTION */
6334
6335 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disasters)) {
6337 }
6338
6339#ifdef FREECIV_JSON_CONNECTION
6340 field_addr.name = "restrictinfra";
6341#endif /* FREECIV_JSON_CONNECTION */
6342
6343 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->restrictinfra)) {
6344 RECEIVE_PACKET_FIELD_ERROR(restrictinfra);
6345 }
6346
6347#ifdef FREECIV_JSON_CONNECTION
6348 field_addr.name = "unreachable_protects";
6349#endif /* FREECIV_JSON_CONNECTION */
6350
6351 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unreachable_protects)) {
6352 RECEIVE_PACKET_FIELD_ERROR(unreachable_protects);
6353 }
6354
6355#ifdef FREECIV_JSON_CONNECTION
6356 field_addr.name = "sciencebox";
6357#endif /* FREECIV_JSON_CONNECTION */
6358
6359 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->sciencebox)) {
6360 RECEIVE_PACKET_FIELD_ERROR(sciencebox);
6361 }
6362
6363#ifdef FREECIV_JSON_CONNECTION
6364 field_addr.name = "shieldbox";
6365#endif /* FREECIV_JSON_CONNECTION */
6366
6367 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->shieldbox)) {
6368 RECEIVE_PACKET_FIELD_ERROR(shieldbox);
6369 }
6370
6371#ifdef FREECIV_JSON_CONNECTION
6372 field_addr.name = "skill_level";
6373#endif /* FREECIV_JSON_CONNECTION */
6374
6375 {
6376 int readin;
6377
6378 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6379 RECEIVE_PACKET_FIELD_ERROR(skill_level);
6380 }
6381 real_packet->skill_level = readin;
6382 }
6383
6384#ifdef FREECIV_JSON_CONNECTION
6385 field_addr.name = "victory_conditions";
6386#endif /* FREECIV_JSON_CONNECTION */
6387
6388 {
6389 int readin;
6390
6391 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6392 RECEIVE_PACKET_FIELD_ERROR(victory_conditions);
6393 }
6394 real_packet->victory_conditions = readin;
6395 }
6396
6397#ifdef FREECIV_JSON_CONNECTION
6398 field_addr.name = "team_pooled_research";
6399#endif /* FREECIV_JSON_CONNECTION */
6400
6401 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->team_pooled_research)) {
6402 RECEIVE_PACKET_FIELD_ERROR(team_pooled_research);
6403 }
6404
6405#ifdef FREECIV_JSON_CONNECTION
6406 field_addr.name = "tech";
6407#endif /* FREECIV_JSON_CONNECTION */
6408
6409 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech)) {
6411 }
6412
6413#ifdef FREECIV_JSON_CONNECTION
6414 field_addr.name = "tech_cost_style";
6415#endif /* FREECIV_JSON_CONNECTION */
6416
6417 {
6418 int readin;
6419
6420 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6421 RECEIVE_PACKET_FIELD_ERROR(tech_cost_style);
6422 }
6423 real_packet->tech_cost_style = readin;
6424 }
6425
6426#ifdef FREECIV_JSON_CONNECTION
6427 field_addr.name = "tech_leakage";
6428#endif /* FREECIV_JSON_CONNECTION */
6429
6430 {
6431 int readin;
6432
6433 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6434 RECEIVE_PACKET_FIELD_ERROR(tech_leakage);
6435 }
6436 real_packet->tech_leakage = readin;
6437 }
6438
6439#ifdef FREECIV_JSON_CONNECTION
6440 field_addr.name = "tech_upkeep_divider";
6441#endif /* FREECIV_JSON_CONNECTION */
6442
6443 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_divider)) {
6444 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_divider);
6445 }
6446
6447#ifdef FREECIV_JSON_CONNECTION
6448 field_addr.name = "tech_upkeep_style";
6449#endif /* FREECIV_JSON_CONNECTION */
6450
6451 {
6452 int readin;
6453
6454 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6455 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_style);
6456 }
6457 real_packet->tech_upkeep_style = readin;
6458 }
6459
6460#ifdef FREECIV_JSON_CONNECTION
6461 field_addr.name = "techloss_forgiveness";
6462#endif /* FREECIV_JSON_CONNECTION */
6463
6464 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->techloss_forgiveness)) {
6465 RECEIVE_PACKET_FIELD_ERROR(techloss_forgiveness);
6466 }
6467
6468#ifdef FREECIV_JSON_CONNECTION
6469 field_addr.name = "free_tech_method";
6470#endif /* FREECIV_JSON_CONNECTION */
6471
6472 {
6473 int readin;
6474
6475 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6476 RECEIVE_PACKET_FIELD_ERROR(free_tech_method);
6477 }
6478 real_packet->free_tech_method = readin;
6479 }
6480
6481#ifdef FREECIV_JSON_CONNECTION
6482 field_addr.name = "gameloss_style";
6483#endif /* FREECIV_JSON_CONNECTION */
6484
6485 {
6486 int readin;
6487
6488 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6489 RECEIVE_PACKET_FIELD_ERROR(gameloss_style);
6490 }
6491 real_packet->gameloss_style = readin;
6492 }
6493
6494#ifdef FREECIV_JSON_CONNECTION
6495 field_addr.name = "timeout";
6496#endif /* FREECIV_JSON_CONNECTION */
6497
6498 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->timeout)) {
6500 }
6501
6502#ifdef FREECIV_JSON_CONNECTION
6503 field_addr.name = "first_timeout";
6504#endif /* FREECIV_JSON_CONNECTION */
6505
6506 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->first_timeout)) {
6507 RECEIVE_PACKET_FIELD_ERROR(first_timeout);
6508 }
6509
6510#ifdef FREECIV_JSON_CONNECTION
6511 field_addr.name = "tired_attack";
6512#endif /* FREECIV_JSON_CONNECTION */
6513
6514 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tired_attack)) {
6515 RECEIVE_PACKET_FIELD_ERROR(tired_attack);
6516 }
6517
6518#ifdef FREECIV_JSON_CONNECTION
6519 field_addr.name = "trademindist";
6520#endif /* FREECIV_JSON_CONNECTION */
6521
6522 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trademindist)) {
6523 RECEIVE_PACKET_FIELD_ERROR(trademindist);
6524 }
6525
6526#ifdef FREECIV_JSON_CONNECTION
6527 field_addr.name = "trade_revenue_style";
6528#endif /* FREECIV_JSON_CONNECTION */
6529
6530 {
6531 int readin;
6532
6533 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6534 RECEIVE_PACKET_FIELD_ERROR(trade_revenue_style);
6535 }
6536 real_packet->trade_revenue_style = readin;
6537 }
6538
6539#ifdef FREECIV_JSON_CONNECTION
6540 field_addr.name = "trading_city";
6541#endif /* FREECIV_JSON_CONNECTION */
6542
6543 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_city)) {
6544 RECEIVE_PACKET_FIELD_ERROR(trading_city);
6545 }
6546
6547#ifdef FREECIV_JSON_CONNECTION
6548 field_addr.name = "trading_gold";
6549#endif /* FREECIV_JSON_CONNECTION */
6550
6551 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_gold)) {
6552 RECEIVE_PACKET_FIELD_ERROR(trading_gold);
6553 }
6554
6555#ifdef FREECIV_JSON_CONNECTION
6556 field_addr.name = "trading_tech";
6557#endif /* FREECIV_JSON_CONNECTION */
6558
6559 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_tech)) {
6560 RECEIVE_PACKET_FIELD_ERROR(trading_tech);
6561 }
6562
6563#ifdef FREECIV_JSON_CONNECTION
6564 field_addr.name = "turn";
6565#endif /* FREECIV_JSON_CONNECTION */
6566
6567 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
6569 }
6570
6571#ifdef FREECIV_JSON_CONNECTION
6572 field_addr.name = "warminglevel";
6573#endif /* FREECIV_JSON_CONNECTION */
6574
6575 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->warminglevel)) {
6576 RECEIVE_PACKET_FIELD_ERROR(warminglevel);
6577 }
6578
6579#ifdef FREECIV_JSON_CONNECTION
6580 field_addr.name = "year";
6581#endif /* FREECIV_JSON_CONNECTION */
6582
6583 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
6585 }
6586
6587#ifdef FREECIV_JSON_CONNECTION
6588 field_addr.name = "year_0_hack";
6589#endif /* FREECIV_JSON_CONNECTION */
6590
6591 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->year_0_hack)) {
6592 RECEIVE_PACKET_FIELD_ERROR(year_0_hack);
6593 }
6594
6595#ifdef FREECIV_JSON_CONNECTION
6596 field_addr.name = "top_cities_count";
6597#endif /* FREECIV_JSON_CONNECTION */
6598
6599 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->top_cities_count)) {
6600 RECEIVE_PACKET_FIELD_ERROR(top_cities_count);
6601 }
6602
6603#ifdef FREECIV_JSON_CONNECTION
6604 field_addr.name = "fragment_count";
6605#endif /* FREECIV_JSON_CONNECTION */
6606
6607 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragment_count)) {
6608 RECEIVE_PACKET_FIELD_ERROR(fragment_count);
6609 }
6610
6611#ifdef FREECIV_JSON_CONNECTION
6612 field_addr.name = "granularity";
6613#endif /* FREECIV_JSON_CONNECTION */
6614
6615 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granularity)) {
6616 RECEIVE_PACKET_FIELD_ERROR(granularity);
6617 }
6618
6619#ifdef FREECIV_JSON_CONNECTION
6620 field_addr.name = "small_wonder_visibility";
6621#endif /* FREECIV_JSON_CONNECTION */
6622
6623 {
6624 int readin;
6625
6626 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6627 RECEIVE_PACKET_FIELD_ERROR(small_wonder_visibility);
6628 }
6629 real_packet->small_wonder_visibility = readin;
6630 }
6631#endif /* FREECIV_DELTA_PROTOCOL */
6632
6634#undef FREE_PACKET_STRUCT
6635}
6636
6637static int send_packet_game_info_100(struct connection *pc, const struct packet_game_info *packet)
6638{
6639 const struct packet_game_info *real_packet = packet;
6640 int e;
6642
6643 log_packet_detailed("packet_game_info_100: sending info about ()");
6644
6645#ifdef FREECIV_DELTA_PROTOCOL
6647 struct packet_game_info *old;
6648 bool differ;
6649 int different = 0;
6650 struct genhash **hash = pc->phs.sent + PACKET_GAME_INFO;
6651
6652 if (nullptr == *hash) {
6654 nullptr, nullptr, nullptr, destroy_packet_game_info);
6655 }
6656 BV_CLR_ALL(fields);
6657
6658 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
6659 old = fc_malloc(sizeof(*old));
6660 /* temporary bitcopy just to insert correctly */
6661 *old = *real_packet;
6664 different = 1; /* Force to send. */
6665 }
6666
6667 differ = (old->add_to_size_limit != real_packet->add_to_size_limit);
6668 if (differ) {
6669 different++;
6670 BV_SET(fields, 0);
6671 }
6672
6673 differ = (old->aifill != real_packet->aifill);
6674 if (differ) {
6675 different++;
6676 BV_SET(fields, 1);
6677 }
6678
6679 differ = (old->persistent_ready != real_packet->persistent_ready);
6680 if (differ) {
6681 different++;
6682 BV_SET(fields, 2);
6683 }
6684
6685 differ = (old->airlifting_style != real_packet->airlifting_style);
6686 if (differ) {
6687 different++;
6688 BV_SET(fields, 3);
6689 }
6690
6691 differ = (old->airlift_from_always_enabled != real_packet->airlift_from_always_enabled);
6692 if (differ) {
6693 different++;
6694 }
6695 /* folded into head */
6696 if (real_packet->airlift_from_always_enabled) {
6697 BV_SET(fields, 4);
6698 }
6699
6700 differ = (old->airlift_to_always_enabled != real_packet->airlift_to_always_enabled);
6701 if (differ) {
6702 different++;
6703 }
6704 /* folded into head */
6705 if (real_packet->airlift_to_always_enabled) {
6706 BV_SET(fields, 5);
6707 }
6708
6709 differ = (old->angrycitizen != real_packet->angrycitizen);
6710 if (differ) {
6711 different++;
6712 BV_SET(fields, 6);
6713 }
6714
6715 differ = (old->base_pollution != real_packet->base_pollution);
6716 if (differ) {
6717 different++;
6718 BV_SET(fields, 7);
6719 }
6720
6721 differ = (old->base_tech_cost != real_packet->base_tech_cost);
6722 if (differ) {
6723 different++;
6724 BV_SET(fields, 8);
6725 }
6726
6727 differ = (old->min_tech_cost != real_packet->min_tech_cost);
6728 if (differ) {
6729 different++;
6730 BV_SET(fields, 9);
6731 }
6732
6733 differ = (old->tech_leak_pct != real_packet->tech_leak_pct);
6734 if (differ) {
6735 different++;
6736 BV_SET(fields, 10);
6737 }
6738
6739 differ = (old->border_city_radius_sq != real_packet->border_city_radius_sq);
6740 if (differ) {
6741 different++;
6742 BV_SET(fields, 11);
6743 }
6744
6745 differ = (old->border_size_effect != real_packet->border_size_effect);
6746 if (differ) {
6747 different++;
6748 BV_SET(fields, 12);
6749 }
6750
6751 differ = (old->border_city_permanent_radius_sq != real_packet->border_city_permanent_radius_sq);
6752 if (differ) {
6753 different++;
6754 BV_SET(fields, 13);
6755 }
6756
6757 differ = (old->borders != real_packet->borders);
6758 if (differ) {
6759 different++;
6760 BV_SET(fields, 14);
6761 }
6762
6763 differ = (old->base_bribe_cost != real_packet->base_bribe_cost);
6764 if (differ) {
6765 different++;
6766 BV_SET(fields, 15);
6767 }
6768
6769 differ = (old->caravan_bonus_style != real_packet->caravan_bonus_style);
6770 if (differ) {
6771 different++;
6772 BV_SET(fields, 16);
6773 }
6774
6775 differ = (old->culture_vic_points != real_packet->culture_vic_points);
6776 if (differ) {
6777 different++;
6778 BV_SET(fields, 17);
6779 }
6780
6781 differ = (old->culture_vic_lead != real_packet->culture_vic_lead);
6782 if (differ) {
6783 different++;
6784 BV_SET(fields, 18);
6785 }
6786
6787 differ = (old->culture_migration_pml != real_packet->culture_migration_pml);
6788 if (differ) {
6789 different++;
6790 BV_SET(fields, 19);
6791 }
6792
6793 differ = (old->history_interest_pml != real_packet->history_interest_pml);
6794 if (differ) {
6795 different++;
6796 BV_SET(fields, 20);
6797 }
6798
6799 differ = (old->world_peace_turns != real_packet->world_peace_turns);
6800 if (differ) {
6801 different++;
6802 BV_SET(fields, 21);
6803 }
6804
6805 differ = (old->celebratesize != real_packet->celebratesize);
6806 if (differ) {
6807 different++;
6808 BV_SET(fields, 22);
6809 }
6810
6811 differ = (old->changable_tax != real_packet->changable_tax);
6812 if (differ) {
6813 different++;
6814 }
6815 /* folded into head */
6816 if (real_packet->changable_tax) {
6817 BV_SET(fields, 23);
6818 }
6819
6820 differ = (old->pop_report_zeroes != real_packet->pop_report_zeroes);
6821 if (differ) {
6822 different++;
6823 BV_SET(fields, 24);
6824 }
6825
6826 differ = (old->citizen_nationality != real_packet->citizen_nationality);
6827 if (differ) {
6828 different++;
6829 }
6830 /* folded into head */
6831 if (real_packet->citizen_nationality) {
6832 BV_SET(fields, 25);
6833 }
6834
6835 differ = (old->unit_builders_nationality != real_packet->unit_builders_nationality);
6836 if (differ) {
6837 different++;
6838 }
6839 /* folded into head */
6840 if (real_packet->unit_builders_nationality) {
6841 BV_SET(fields, 26);
6842 }
6843
6844 differ = (old->citizen_convert_speed != real_packet->citizen_convert_speed);
6845 if (differ) {
6846 different++;
6847 BV_SET(fields, 27);
6848 }
6849
6850 differ = (old->conquest_convert_pct != real_packet->conquest_convert_pct);
6851 if (differ) {
6852 different++;
6853 BV_SET(fields, 28);
6854 }
6855
6856 differ = (old->citizen_partisans_pct != real_packet->citizen_partisans_pct);
6857 if (differ) {
6858 different++;
6859 BV_SET(fields, 29);
6860 }
6861
6862 differ = (old->citymindist != real_packet->citymindist);
6863 if (differ) {
6864 different++;
6865 BV_SET(fields, 30);
6866 }
6867
6868 differ = (old->cooling != real_packet->cooling);
6869 if (differ) {
6870 different++;
6871 BV_SET(fields, 31);
6872 }
6873
6874 differ = (old->coolinglevel != real_packet->coolinglevel);
6875 if (differ) {
6876 different++;
6877 BV_SET(fields, 32);
6878 }
6879
6880 differ = !BV_ARE_EQUAL(old->diplchance_initial_odds, real_packet->diplchance_initial_odds);
6881 if (differ) {
6882 different++;
6883 BV_SET(fields, 33);
6884 }
6885
6886 differ = (old->diplomacy != real_packet->diplomacy);
6887 if (differ) {
6888 different++;
6889 BV_SET(fields, 34);
6890 }
6891
6892 differ = (old->fogofwar != real_packet->fogofwar);
6893 if (differ) {
6894 different++;
6895 }
6896 /* folded into head */
6897 if (real_packet->fogofwar) {
6898 BV_SET(fields, 35);
6899 }
6900
6901 differ = (old->food_cost != real_packet->food_cost);
6902 if (differ) {
6903 different++;
6904 BV_SET(fields, 36);
6905 }
6906
6907 differ = (old->foodbox != real_packet->foodbox);
6908 if (differ) {
6909 different++;
6910 BV_SET(fields, 37);
6911 }
6912
6913 differ = (old->forced_gold != real_packet->forced_gold);
6914 if (differ) {
6915 different++;
6916 BV_SET(fields, 38);
6917 }
6918
6919 differ = (old->forced_luxury != real_packet->forced_luxury);
6920 if (differ) {
6921 different++;
6922 BV_SET(fields, 39);
6923 }
6924
6925 differ = (old->forced_science != real_packet->forced_science);
6926 if (differ) {
6927 different++;
6928 BV_SET(fields, 40);
6929 }
6930
6931 differ = (old->fulltradesize != real_packet->fulltradesize);
6932 if (differ) {
6933 different++;
6934 BV_SET(fields, 41);
6935 }
6936
6937 differ = (old->trade_world_rel_pct != real_packet->trade_world_rel_pct);
6938 if (differ) {
6939 different++;
6940 BV_SET(fields, 42);
6941 }
6942
6943 differ = (old->min_trade_route_val != real_packet->min_trade_route_val);
6944 if (differ) {
6945 different++;
6946 BV_SET(fields, 43);
6947 }
6948
6949 differ = (old->reveal_trade_partner != real_packet->reveal_trade_partner);
6950 if (differ) {
6951 different++;
6952 }
6953 /* folded into head */
6954 if (real_packet->reveal_trade_partner) {
6955 BV_SET(fields, 44);
6956 }
6957
6958 differ = (old->goods_selection != real_packet->goods_selection);
6959 if (differ) {
6960 different++;
6961 BV_SET(fields, 45);
6962 }
6963
6964 differ = (old->global_advance_count != real_packet->global_advance_count);
6965 if (differ) {
6966 different++;
6967 BV_SET(fields, 46);
6968 }
6969
6970 differ = FALSE;
6971 {
6972 int i;
6973
6974 for (i = 0; i < A_LAST; i++) {
6975 differ = (old->global_advances[i] != real_packet->global_advances[i]);
6976 if (differ) {
6977 break;
6978 }
6979 }
6980 }
6981 if (differ) {
6982 different++;
6983 BV_SET(fields, 47);
6984 }
6985
6986 differ = (old->global_warming != real_packet->global_warming);
6987 if (differ) {
6988 different++;
6989 }
6990 /* folded into head */
6991 if (real_packet->global_warming) {
6992 BV_SET(fields, 48);
6993 }
6994
6995 differ = (old->globalwarming != real_packet->globalwarming);
6996 if (differ) {
6997 different++;
6998 BV_SET(fields, 49);
6999 }
7000
7001 differ = (old->gold != real_packet->gold);
7002 if (differ) {
7003 different++;
7004 BV_SET(fields, 50);
7005 }
7006
7007 differ = (old->gold_upkeep_style != real_packet->gold_upkeep_style);
7008 if (differ) {
7009 different++;
7010 BV_SET(fields, 51);
7011 }
7012
7013 differ = (old->infrapoints != real_packet->infrapoints);
7014 if (differ) {
7015 different++;
7016 BV_SET(fields, 52);
7017 }
7018
7019 differ = (old->revolentype != real_packet->revolentype);
7020 if (differ) {
7021 different++;
7022 BV_SET(fields, 53);
7023 }
7024
7025 differ = (old->default_government_id != real_packet->default_government_id);
7026 if (differ) {
7027 different++;
7028 BV_SET(fields, 54);
7029 }
7030
7031 differ = (old->government_during_revolution_id != real_packet->government_during_revolution_id);
7032 if (differ) {
7033 different++;
7034 BV_SET(fields, 55);
7035 }
7036
7037 differ = (old->granary_food_inc != real_packet->granary_food_inc);
7038 if (differ) {
7039 different++;
7040 BV_SET(fields, 56);
7041 }
7042
7043 differ = FALSE;
7044 {
7045 int i;
7046
7047 for (i = 0; i < MAX_GRANARY_INIS; i++) {
7048 differ = (old->granary_food_ini[i] != real_packet->granary_food_ini[i]);
7049 if (differ) {
7050 break;
7051 }
7052 }
7053 }
7054 if (differ) {
7055 different++;
7056 BV_SET(fields, 57);
7057 }
7058
7059 differ = (old->granary_num_inis != real_packet->granary_num_inis);
7060 if (differ) {
7061 different++;
7062 BV_SET(fields, 58);
7063 }
7064
7065 differ = FALSE;
7066 {
7067 int i;
7068
7069 for (i = 0; i < B_LAST; i++) {
7070 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
7071 if (differ) {
7072 break;
7073 }
7074 }
7075 }
7076 if (differ) {
7077 different++;
7078 BV_SET(fields, 59);
7079 }
7080
7081 differ = (old->happy_cost != real_packet->happy_cost);
7082 if (differ) {
7083 different++;
7084 BV_SET(fields, 60);
7085 }
7086
7087 differ = (old->happyborders != real_packet->happyborders);
7088 if (differ) {
7089 different++;
7090 BV_SET(fields, 61);
7091 }
7092
7093 differ = (old->heating != real_packet->heating);
7094 if (differ) {
7095 different++;
7096 BV_SET(fields, 62);
7097 }
7098
7099 differ = (old->illness_base_factor != real_packet->illness_base_factor);
7100 if (differ) {
7101 different++;
7102 BV_SET(fields, 63);
7103 }
7104
7105 differ = (old->illness_min_size != real_packet->illness_min_size);
7106 if (differ) {
7107 different++;
7108 BV_SET(fields, 64);
7109 }
7110
7111 differ = (old->illness_on != real_packet->illness_on);
7112 if (differ) {
7113 different++;
7114 }
7115 /* folded into head */
7116 if (real_packet->illness_on) {
7117 BV_SET(fields, 65);
7118 }
7119
7120 differ = (old->illness_pollution_factor != real_packet->illness_pollution_factor);
7121 if (differ) {
7122 different++;
7123 BV_SET(fields, 66);
7124 }
7125
7126 differ = (old->illness_trade_infection != real_packet->illness_trade_infection);
7127 if (differ) {
7128 different++;
7129 BV_SET(fields, 67);
7130 }
7131
7132 differ = (old->init_city_radius_sq != real_packet->init_city_radius_sq);
7133 if (differ) {
7134 different++;
7135 BV_SET(fields, 68);
7136 }
7137
7138 differ = (old->is_edit_mode != real_packet->is_edit_mode);
7139 if (differ) {
7140 different++;
7141 }
7142 /* folded into head */
7143 if (real_packet->is_edit_mode) {
7144 BV_SET(fields, 69);
7145 }
7146
7147 differ = (old->is_new_game != real_packet->is_new_game);
7148 if (differ) {
7149 different++;
7150 }
7151 /* folded into head */
7152 if (real_packet->is_new_game) {
7153 BV_SET(fields, 70);
7154 }
7155
7156 differ = (old->killcitizen != real_packet->killcitizen);
7157 if (differ) {
7158 different++;
7159 }
7160 /* folded into head */
7161 if (real_packet->killcitizen) {
7162 BV_SET(fields, 71);
7163 }
7164
7165 differ = (old->killstack != real_packet->killstack);
7166 if (differ) {
7167 different++;
7168 }
7169 /* folded into head */
7170 if (real_packet->killstack) {
7171 BV_SET(fields, 72);
7172 }
7173
7174 differ = (old->only_killing_makes_veteran != real_packet->only_killing_makes_veteran);
7175 if (differ) {
7176 different++;
7177 }
7178 /* folded into head */
7179 if (real_packet->only_killing_makes_veteran) {
7180 BV_SET(fields, 73);
7181 }
7182
7183 differ = (old->only_real_fight_makes_veteran != real_packet->only_real_fight_makes_veteran);
7184 if (differ) {
7185 different++;
7186 }
7187 /* folded into head */
7188 if (real_packet->only_real_fight_makes_veteran) {
7189 BV_SET(fields, 74);
7190 }
7191
7192 differ = (old->combat_odds_scaled_veterancy != real_packet->combat_odds_scaled_veterancy);
7193 if (differ) {
7194 different++;
7195 }
7196 /* folded into head */
7197 if (real_packet->combat_odds_scaled_veterancy) {
7198 BV_SET(fields, 75);
7199 }
7200
7201 differ = (old->damage_reduces_bombard_rate != real_packet->damage_reduces_bombard_rate);
7202 if (differ) {
7203 different++;
7204 }
7205 /* folded into head */
7206 if (real_packet->damage_reduces_bombard_rate) {
7207 BV_SET(fields, 76);
7208 }
7209
7210 differ = (old->low_firepower_badwallattacker != real_packet->low_firepower_badwallattacker);
7211 if (differ) {
7212 different++;
7213 BV_SET(fields, 77);
7214 }
7215
7216 differ = (old->low_firepower_pearl_harbor != real_packet->low_firepower_pearl_harbor);
7217 if (differ) {
7218 different++;
7219 BV_SET(fields, 78);
7220 }
7221
7222 differ = (old->low_firepower_combat_bonus != real_packet->low_firepower_combat_bonus);
7223 if (differ) {
7224 different++;
7225 BV_SET(fields, 79);
7226 }
7227
7228 differ = (old->low_firepower_nonnat_bombard != real_packet->low_firepower_nonnat_bombard);
7229 if (differ) {
7230 different++;
7231 BV_SET(fields, 80);
7232 }
7233
7234 differ = (old->nuke_pop_loss_pct != real_packet->nuke_pop_loss_pct);
7235 if (differ) {
7236 different++;
7237 BV_SET(fields, 81);
7238 }
7239
7240 differ = (old->nuke_defender_survival_chance_pct != real_packet->nuke_defender_survival_chance_pct);
7241 if (differ) {
7242 different++;
7243 BV_SET(fields, 82);
7244 }
7245
7246 differ = FALSE;
7247 {
7248 int i;
7249
7250 for (i = 0; i < O_LAST; i++) {
7251 differ = (old->min_city_center_output[i] != real_packet->min_city_center_output[i]);
7252 if (differ) {
7253 break;
7254 }
7255 }
7256 }
7257 if (differ) {
7258 different++;
7259 BV_SET(fields, 83);
7260 }
7261
7262 differ = (old->muuk_food_wipe != real_packet->muuk_food_wipe);
7263 if (differ) {
7264 different++;
7265 }
7266 /* folded into head */
7267 if (real_packet->muuk_food_wipe) {
7268 BV_SET(fields, 84);
7269 }
7270
7271 differ = (old->muuk_gold_wipe != real_packet->muuk_gold_wipe);
7272 if (differ) {
7273 different++;
7274 }
7275 /* folded into head */
7276 if (real_packet->muuk_gold_wipe) {
7277 BV_SET(fields, 85);
7278 }
7279
7280 differ = (old->muuk_shield_wipe != real_packet->muuk_shield_wipe);
7281 if (differ) {
7282 different++;
7283 }
7284 /* folded into head */
7285 if (real_packet->muuk_shield_wipe) {
7286 BV_SET(fields, 86);
7287 }
7288
7289 differ = (old->notradesize != real_packet->notradesize);
7290 if (differ) {
7291 different++;
7292 BV_SET(fields, 87);
7293 }
7294
7295 differ = (old->nuclear_winter != real_packet->nuclear_winter);
7296 if (differ) {
7297 different++;
7298 }
7299 /* folded into head */
7300 if (real_packet->nuclear_winter) {
7301 BV_SET(fields, 88);
7302 }
7303
7304 differ = (old->nuclearwinter != real_packet->nuclearwinter);
7305 if (differ) {
7306 different++;
7307 BV_SET(fields, 89);
7308 }
7309
7310 differ = (old->phase != real_packet->phase);
7311 if (differ) {
7312 different++;
7313 BV_SET(fields, 90);
7314 }
7315
7316 differ = (old->phase_mode != real_packet->phase_mode);
7317 if (differ) {
7318 different++;
7319 BV_SET(fields, 91);
7320 }
7321
7322 differ = (old->pillage_select != real_packet->pillage_select);
7323 if (differ) {
7324 different++;
7325 }
7326 /* folded into head */
7327 if (real_packet->pillage_select) {
7328 BV_SET(fields, 92);
7329 }
7330
7331 differ = (old->steal_maps_reveals_all_cities != real_packet->steal_maps_reveals_all_cities);
7332 if (differ) {
7333 different++;
7334 }
7335 /* folded into head */
7336 if (real_packet->steal_maps_reveals_all_cities) {
7337 BV_SET(fields, 93);
7338 }
7339
7340 differ = (old->poison_empties_food_stock != real_packet->poison_empties_food_stock);
7341 if (differ) {
7342 different++;
7343 }
7344 /* folded into head */
7345 if (real_packet->poison_empties_food_stock) {
7346 BV_SET(fields, 94);
7347 }
7348
7349 differ = (old->tech_steal_allow_holes != real_packet->tech_steal_allow_holes);
7350 if (differ) {
7351 different++;
7352 }
7353 /* folded into head */
7354 if (real_packet->tech_steal_allow_holes) {
7355 BV_SET(fields, 95);
7356 }
7357
7358 differ = (old->tech_trade_allow_holes != real_packet->tech_trade_allow_holes);
7359 if (differ) {
7360 different++;
7361 }
7362 /* folded into head */
7363 if (real_packet->tech_trade_allow_holes) {
7364 BV_SET(fields, 96);
7365 }
7366
7367 differ = (old->tech_trade_loss_allow_holes != real_packet->tech_trade_loss_allow_holes);
7368 if (differ) {
7369 different++;
7370 }
7371 /* folded into head */
7372 if (real_packet->tech_trade_loss_allow_holes) {
7373 BV_SET(fields, 97);
7374 }
7375
7376 differ = (old->tech_parasite_allow_holes != real_packet->tech_parasite_allow_holes);
7377 if (differ) {
7378 different++;
7379 }
7380 /* folded into head */
7381 if (real_packet->tech_parasite_allow_holes) {
7382 BV_SET(fields, 98);
7383 }
7384
7385 differ = (old->tech_loss_allow_holes != real_packet->tech_loss_allow_holes);
7386 if (differ) {
7387 different++;
7388 }
7389 /* folded into head */
7390 if (real_packet->tech_loss_allow_holes) {
7391 BV_SET(fields, 99);
7392 }
7393
7394 differ = (old->rapturedelay != real_packet->rapturedelay);
7395 if (differ) {
7396 different++;
7397 BV_SET(fields, 100);
7398 }
7399
7400 differ = (old->disasters != real_packet->disasters);
7401 if (differ) {
7402 different++;
7403 BV_SET(fields, 101);
7404 }
7405
7406 differ = (old->restrictinfra != real_packet->restrictinfra);
7407 if (differ) {
7408 different++;
7409 }
7410 /* folded into head */
7411 if (real_packet->restrictinfra) {
7412 BV_SET(fields, 102);
7413 }
7414
7415 differ = (old->unreachable_protects != real_packet->unreachable_protects);
7416 if (differ) {
7417 different++;
7418 }
7419 /* folded into head */
7420 if (real_packet->unreachable_protects) {
7421 BV_SET(fields, 103);
7422 }
7423
7424 differ = (old->sciencebox != real_packet->sciencebox);
7425 if (differ) {
7426 different++;
7427 BV_SET(fields, 104);
7428 }
7429
7430 differ = (old->shieldbox != real_packet->shieldbox);
7431 if (differ) {
7432 different++;
7433 BV_SET(fields, 105);
7434 }
7435
7436 differ = (old->skill_level != real_packet->skill_level);
7437 if (differ) {
7438 different++;
7439 BV_SET(fields, 106);
7440 }
7441
7442 differ = (old->victory_conditions != real_packet->victory_conditions);
7443 if (differ) {
7444 different++;
7445 BV_SET(fields, 107);
7446 }
7447
7448 differ = (old->team_pooled_research != real_packet->team_pooled_research);
7449 if (differ) {
7450 different++;
7451 }
7452 /* folded into head */
7453 if (real_packet->team_pooled_research) {
7454 BV_SET(fields, 108);
7455 }
7456
7457 differ = (old->tech != real_packet->tech);
7458 if (differ) {
7459 different++;
7460 BV_SET(fields, 109);
7461 }
7462
7463 differ = (old->tech_cost_style != real_packet->tech_cost_style);
7464 if (differ) {
7465 different++;
7466 BV_SET(fields, 110);
7467 }
7468
7469 differ = (old->tech_leakage != real_packet->tech_leakage);
7470 if (differ) {
7471 different++;
7472 BV_SET(fields, 111);
7473 }
7474
7475 differ = (old->tech_upkeep_divider != real_packet->tech_upkeep_divider);
7476 if (differ) {
7477 different++;
7478 BV_SET(fields, 112);
7479 }
7480
7481 differ = (old->tech_upkeep_style != real_packet->tech_upkeep_style);
7482 if (differ) {
7483 different++;
7484 BV_SET(fields, 113);
7485 }
7486
7487 differ = (old->techloss_forgiveness != real_packet->techloss_forgiveness);
7488 if (differ) {
7489 different++;
7490 BV_SET(fields, 114);
7491 }
7492
7493 differ = (old->free_tech_method != real_packet->free_tech_method);
7494 if (differ) {
7495 different++;
7496 BV_SET(fields, 115);
7497 }
7498
7499 differ = (old->gameloss_style != real_packet->gameloss_style);
7500 if (differ) {
7501 different++;
7502 BV_SET(fields, 116);
7503 }
7504
7505 differ = (old->timeout != real_packet->timeout);
7506 if (differ) {
7507 different++;
7508 BV_SET(fields, 117);
7509 }
7510
7511 differ = (old->first_timeout != real_packet->first_timeout);
7512 if (differ) {
7513 different++;
7514 BV_SET(fields, 118);
7515 }
7516
7517 differ = (old->tired_attack != real_packet->tired_attack);
7518 if (differ) {
7519 different++;
7520 }
7521 /* folded into head */
7522 if (real_packet->tired_attack) {
7523 BV_SET(fields, 119);
7524 }
7525
7526 differ = (old->trademindist != real_packet->trademindist);
7527 if (differ) {
7528 different++;
7529 BV_SET(fields, 120);
7530 }
7531
7532 differ = (old->trade_revenue_style != real_packet->trade_revenue_style);
7533 if (differ) {
7534 different++;
7535 BV_SET(fields, 121);
7536 }
7537
7538 differ = (old->trading_city != real_packet->trading_city);
7539 if (differ) {
7540 different++;
7541 }
7542 /* folded into head */
7543 if (real_packet->trading_city) {
7544 BV_SET(fields, 122);
7545 }
7546
7547 differ = (old->trading_gold != real_packet->trading_gold);
7548 if (differ) {
7549 different++;
7550 }
7551 /* folded into head */
7552 if (real_packet->trading_gold) {
7553 BV_SET(fields, 123);
7554 }
7555
7556 differ = (old->trading_tech != real_packet->trading_tech);
7557 if (differ) {
7558 different++;
7559 }
7560 /* folded into head */
7561 if (real_packet->trading_tech) {
7562 BV_SET(fields, 124);
7563 }
7564
7565 differ = (old->turn != real_packet->turn);
7566 if (differ) {
7567 different++;
7568 BV_SET(fields, 125);
7569 }
7570
7571 differ = (old->warminglevel != real_packet->warminglevel);
7572 if (differ) {
7573 different++;
7574 BV_SET(fields, 126);
7575 }
7576
7577 differ = (old->year != real_packet->year);
7578 if (differ) {
7579 different++;
7580 BV_SET(fields, 127);
7581 }
7582
7583 differ = (old->year_0_hack != real_packet->year_0_hack);
7584 if (differ) {
7585 different++;
7586 }
7587 /* folded into head */
7588 if (real_packet->year_0_hack) {
7589 BV_SET(fields, 128);
7590 }
7591
7592 differ = (old->top_cities_count != real_packet->top_cities_count);
7593 if (differ) {
7594 different++;
7595 BV_SET(fields, 129);
7596 }
7597
7598 differ = (old->fragment_count != real_packet->fragment_count);
7599 if (differ) {
7600 different++;
7601 BV_SET(fields, 130);
7602 }
7603
7604 differ = (old->granularity != real_packet->granularity);
7605 if (differ) {
7606 different++;
7607 BV_SET(fields, 131);
7608 }
7609
7610 differ = (old->small_wonder_visibility != real_packet->small_wonder_visibility);
7611 if (differ) {
7612 different++;
7613 BV_SET(fields, 132);
7614 }
7615
7616 if (different == 0) {
7617 log_packet_detailed(" no change -> discard");
7619 }
7620#endif /* FREECIV_DELTA_PROTOCOL */
7621
7622#ifdef FREECIV_JSON_CONNECTION
7623 struct plocation field_addr;
7624 {
7625 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
7628 }
7629#endif /* FREECIV_JSON_CONNECTION */
7630
7631#ifdef FREECIV_DELTA_PROTOCOL
7632#ifdef FREECIV_JSON_CONNECTION
7633 field_addr.name = "fields";
7634#endif /* FREECIV_JSON_CONNECTION */
7635 e = 0;
7636 e |= DIO_BV_PUT(&dout, &field_addr, fields);
7637 if (e) {
7638 log_packet_detailed("fields bitvector error detected");
7639 }
7640
7641 if (BV_ISSET(fields, 0)) {
7642 log_packet_detailed(" field 'add_to_size_limit' has changed");
7643
7644#ifdef FREECIV_JSON_CONNECTION
7645 field_addr.name = "add_to_size_limit";
7646#endif /* FREECIV_JSON_CONNECTION */
7647 e = 0;
7648
7649 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
7650
7651 if (e) {
7652 log_packet_detailed("'add_to_size_limit' field error detected");
7653 }
7654 }
7655
7656 if (BV_ISSET(fields, 1)) {
7657 log_packet_detailed(" field 'aifill' has changed");
7658
7659#ifdef FREECIV_JSON_CONNECTION
7660 field_addr.name = "aifill";
7661#endif /* FREECIV_JSON_CONNECTION */
7662 e = 0;
7663
7664 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->aifill);
7665
7666 if (e) {
7667 log_packet_detailed("'aifill' field error detected");
7668 }
7669 }
7670
7671 if (BV_ISSET(fields, 2)) {
7672 log_packet_detailed(" field 'persistent_ready' has changed");
7673
7674#ifdef FREECIV_JSON_CONNECTION
7675 field_addr.name = "persistent_ready";
7676#endif /* FREECIV_JSON_CONNECTION */
7677 e = 0;
7678
7679 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
7680
7681 if (e) {
7682 log_packet_detailed("'persistent_ready' field error detected");
7683 }
7684 }
7685
7686 if (BV_ISSET(fields, 3)) {
7687 log_packet_detailed(" field 'airlifting_style' has changed");
7688
7689#ifdef FREECIV_JSON_CONNECTION
7690 field_addr.name = "airlifting_style";
7691#endif /* FREECIV_JSON_CONNECTION */
7692 e = 0;
7693
7694 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
7695
7696 if (e) {
7697 log_packet_detailed("'airlifting_style' field error detected");
7698 }
7699 }
7700
7701 /* field 4 is folded into the header */
7702
7703 /* field 5 is folded into the header */
7704
7705 if (BV_ISSET(fields, 6)) {
7706 log_packet_detailed(" field 'angrycitizen' has changed");
7707
7708#ifdef FREECIV_JSON_CONNECTION
7709 field_addr.name = "angrycitizen";
7710#endif /* FREECIV_JSON_CONNECTION */
7711 e = 0;
7712
7713 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
7714
7715 if (e) {
7716 log_packet_detailed("'angrycitizen' field error detected");
7717 }
7718 }
7719
7720 if (BV_ISSET(fields, 7)) {
7721 log_packet_detailed(" field 'base_pollution' has changed");
7722
7723#ifdef FREECIV_JSON_CONNECTION
7724 field_addr.name = "base_pollution";
7725#endif /* FREECIV_JSON_CONNECTION */
7726 e = 0;
7727
7728 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
7729
7730 if (e) {
7731 log_packet_detailed("'base_pollution' field error detected");
7732 }
7733 }
7734
7735 if (BV_ISSET(fields, 8)) {
7736 log_packet_detailed(" field 'base_tech_cost' has changed");
7737
7738#ifdef FREECIV_JSON_CONNECTION
7739 field_addr.name = "base_tech_cost";
7740#endif /* FREECIV_JSON_CONNECTION */
7741 e = 0;
7742
7743 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
7744
7745 if (e) {
7746 log_packet_detailed("'base_tech_cost' field error detected");
7747 }
7748 }
7749
7750 if (BV_ISSET(fields, 9)) {
7751 log_packet_detailed(" field 'min_tech_cost' has changed");
7752
7753#ifdef FREECIV_JSON_CONNECTION
7754 field_addr.name = "min_tech_cost";
7755#endif /* FREECIV_JSON_CONNECTION */
7756 e = 0;
7757
7758 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
7759
7760 if (e) {
7761 log_packet_detailed("'min_tech_cost' field error detected");
7762 }
7763 }
7764
7765 if (BV_ISSET(fields, 10)) {
7766 log_packet_detailed(" field 'tech_leak_pct' has changed");
7767
7768#ifdef FREECIV_JSON_CONNECTION
7769 field_addr.name = "tech_leak_pct";
7770#endif /* FREECIV_JSON_CONNECTION */
7771 e = 0;
7772
7773 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
7774
7775 if (e) {
7776 log_packet_detailed("'tech_leak_pct' field error detected");
7777 }
7778 }
7779
7780 if (BV_ISSET(fields, 11)) {
7781 log_packet_detailed(" field 'border_city_radius_sq' has changed");
7782
7783#ifdef FREECIV_JSON_CONNECTION
7784 field_addr.name = "border_city_radius_sq";
7785#endif /* FREECIV_JSON_CONNECTION */
7786 e = 0;
7787
7788 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
7789
7790 if (e) {
7791 log_packet_detailed("'border_city_radius_sq' field error detected");
7792 }
7793 }
7794
7795 if (BV_ISSET(fields, 12)) {
7796 log_packet_detailed(" field 'border_size_effect' has changed");
7797
7798#ifdef FREECIV_JSON_CONNECTION
7799 field_addr.name = "border_size_effect";
7800#endif /* FREECIV_JSON_CONNECTION */
7801 e = 0;
7802
7803 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
7804
7805 if (e) {
7806 log_packet_detailed("'border_size_effect' field error detected");
7807 }
7808 }
7809
7810 if (BV_ISSET(fields, 13)) {
7811 log_packet_detailed(" field 'border_city_permanent_radius_sq' has changed");
7812
7813#ifdef FREECIV_JSON_CONNECTION
7814 field_addr.name = "border_city_permanent_radius_sq";
7815#endif /* FREECIV_JSON_CONNECTION */
7816 e = 0;
7817
7818 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
7819
7820 if (e) {
7821 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
7822 }
7823 }
7824
7825 if (BV_ISSET(fields, 14)) {
7826 log_packet_detailed(" field 'borders' has changed");
7827
7828#ifdef FREECIV_JSON_CONNECTION
7829 field_addr.name = "borders";
7830#endif /* FREECIV_JSON_CONNECTION */
7831 e = 0;
7832
7833 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
7834
7835 if (e) {
7836 log_packet_detailed("'borders' field error detected");
7837 }
7838 }
7839
7840 if (BV_ISSET(fields, 15)) {
7841 log_packet_detailed(" field 'base_bribe_cost' has changed");
7842
7843#ifdef FREECIV_JSON_CONNECTION
7844 field_addr.name = "base_bribe_cost";
7845#endif /* FREECIV_JSON_CONNECTION */
7846 e = 0;
7847
7848 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
7849
7850 if (e) {
7851 log_packet_detailed("'base_bribe_cost' field error detected");
7852 }
7853 }
7854
7855 if (BV_ISSET(fields, 16)) {
7856 log_packet_detailed(" field 'caravan_bonus_style' has changed");
7857
7858#ifdef FREECIV_JSON_CONNECTION
7859 field_addr.name = "caravan_bonus_style";
7860#endif /* FREECIV_JSON_CONNECTION */
7861 e = 0;
7862
7863 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
7864
7865 if (e) {
7866 log_packet_detailed("'caravan_bonus_style' field error detected");
7867 }
7868 }
7869
7870 if (BV_ISSET(fields, 17)) {
7871 log_packet_detailed(" field 'culture_vic_points' has changed");
7872
7873#ifdef FREECIV_JSON_CONNECTION
7874 field_addr.name = "culture_vic_points";
7875#endif /* FREECIV_JSON_CONNECTION */
7876 e = 0;
7877
7878 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
7879
7880 if (e) {
7881 log_packet_detailed("'culture_vic_points' field error detected");
7882 }
7883 }
7884
7885 if (BV_ISSET(fields, 18)) {
7886 log_packet_detailed(" field 'culture_vic_lead' has changed");
7887
7888#ifdef FREECIV_JSON_CONNECTION
7889 field_addr.name = "culture_vic_lead";
7890#endif /* FREECIV_JSON_CONNECTION */
7891 e = 0;
7892
7893 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
7894
7895 if (e) {
7896 log_packet_detailed("'culture_vic_lead' field error detected");
7897 }
7898 }
7899
7900 if (BV_ISSET(fields, 19)) {
7901 log_packet_detailed(" field 'culture_migration_pml' has changed");
7902
7903#ifdef FREECIV_JSON_CONNECTION
7904 field_addr.name = "culture_migration_pml";
7905#endif /* FREECIV_JSON_CONNECTION */
7906 e = 0;
7907
7908 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
7909
7910 if (e) {
7911 log_packet_detailed("'culture_migration_pml' field error detected");
7912 }
7913 }
7914
7915 if (BV_ISSET(fields, 20)) {
7916 log_packet_detailed(" field 'history_interest_pml' has changed");
7917
7918#ifdef FREECIV_JSON_CONNECTION
7919 field_addr.name = "history_interest_pml";
7920#endif /* FREECIV_JSON_CONNECTION */
7921 e = 0;
7922
7923 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
7924
7925 if (e) {
7926 log_packet_detailed("'history_interest_pml' field error detected");
7927 }
7928 }
7929
7930 if (BV_ISSET(fields, 21)) {
7931 log_packet_detailed(" field 'world_peace_turns' has changed");
7932
7933#ifdef FREECIV_JSON_CONNECTION
7934 field_addr.name = "world_peace_turns";
7935#endif /* FREECIV_JSON_CONNECTION */
7936 e = 0;
7937
7938 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->world_peace_turns);
7939
7940 if (e) {
7941 log_packet_detailed("'world_peace_turns' field error detected");
7942 }
7943 }
7944
7945 if (BV_ISSET(fields, 22)) {
7946 log_packet_detailed(" field 'celebratesize' has changed");
7947
7948#ifdef FREECIV_JSON_CONNECTION
7949 field_addr.name = "celebratesize";
7950#endif /* FREECIV_JSON_CONNECTION */
7951 e = 0;
7952
7953 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
7954
7955 if (e) {
7956 log_packet_detailed("'celebratesize' field error detected");
7957 }
7958 }
7959
7960 /* field 23 is folded into the header */
7961
7962 if (BV_ISSET(fields, 24)) {
7963 log_packet_detailed(" field 'pop_report_zeroes' has changed");
7964
7965#ifdef FREECIV_JSON_CONNECTION
7966 field_addr.name = "pop_report_zeroes";
7967#endif /* FREECIV_JSON_CONNECTION */
7968 e = 0;
7969
7970 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
7971
7972 if (e) {
7973 log_packet_detailed("'pop_report_zeroes' field error detected");
7974 }
7975 }
7976
7977 /* field 25 is folded into the header */
7978
7979 /* field 26 is folded into the header */
7980
7981 if (BV_ISSET(fields, 27)) {
7982 log_packet_detailed(" field 'citizen_convert_speed' has changed");
7983
7984#ifdef FREECIV_JSON_CONNECTION
7985 field_addr.name = "citizen_convert_speed";
7986#endif /* FREECIV_JSON_CONNECTION */
7987 e = 0;
7988
7989 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
7990
7991 if (e) {
7992 log_packet_detailed("'citizen_convert_speed' field error detected");
7993 }
7994 }
7995
7996 if (BV_ISSET(fields, 28)) {
7997 log_packet_detailed(" field 'conquest_convert_pct' has changed");
7998
7999#ifdef FREECIV_JSON_CONNECTION
8000 field_addr.name = "conquest_convert_pct";
8001#endif /* FREECIV_JSON_CONNECTION */
8002 e = 0;
8003
8004 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
8005
8006 if (e) {
8007 log_packet_detailed("'conquest_convert_pct' field error detected");
8008 }
8009 }
8010
8011 if (BV_ISSET(fields, 29)) {
8012 log_packet_detailed(" field 'citizen_partisans_pct' has changed");
8013
8014#ifdef FREECIV_JSON_CONNECTION
8015 field_addr.name = "citizen_partisans_pct";
8016#endif /* FREECIV_JSON_CONNECTION */
8017 e = 0;
8018
8019 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
8020
8021 if (e) {
8022 log_packet_detailed("'citizen_partisans_pct' field error detected");
8023 }
8024 }
8025
8026 if (BV_ISSET(fields, 30)) {
8027 log_packet_detailed(" field 'citymindist' has changed");
8028
8029#ifdef FREECIV_JSON_CONNECTION
8030 field_addr.name = "citymindist";
8031#endif /* FREECIV_JSON_CONNECTION */
8032 e = 0;
8033
8034 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
8035
8036 if (e) {
8037 log_packet_detailed("'citymindist' field error detected");
8038 }
8039 }
8040
8041 if (BV_ISSET(fields, 31)) {
8042 log_packet_detailed(" field 'cooling' has changed");
8043
8044#ifdef FREECIV_JSON_CONNECTION
8045 field_addr.name = "cooling";
8046#endif /* FREECIV_JSON_CONNECTION */
8047 e = 0;
8048
8049 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
8050
8051 if (e) {
8052 log_packet_detailed("'cooling' field error detected");
8053 }
8054 }
8055
8056 if (BV_ISSET(fields, 32)) {
8057 log_packet_detailed(" field 'coolinglevel' has changed");
8058
8059#ifdef FREECIV_JSON_CONNECTION
8060 field_addr.name = "coolinglevel";
8061#endif /* FREECIV_JSON_CONNECTION */
8062 e = 0;
8063
8064 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
8065
8066 if (e) {
8067 log_packet_detailed("'coolinglevel' field error detected");
8068 }
8069 }
8070
8071 if (BV_ISSET(fields, 33)) {
8072 log_packet_detailed(" field 'diplchance_initial_odds' has changed");
8073
8074#ifdef FREECIV_JSON_CONNECTION
8075 field_addr.name = "diplchance_initial_odds";
8076#endif /* FREECIV_JSON_CONNECTION */
8077 e = 0;
8078
8079 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->diplchance_initial_odds);
8080
8081 if (e) {
8082 log_packet_detailed("'diplchance_initial_odds' field error detected");
8083 }
8084 }
8085
8086 if (BV_ISSET(fields, 34)) {
8087 log_packet_detailed(" field 'diplomacy' has changed");
8088
8089#ifdef FREECIV_JSON_CONNECTION
8090 field_addr.name = "diplomacy";
8091#endif /* FREECIV_JSON_CONNECTION */
8092 e = 0;
8093
8094 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
8095
8096 if (e) {
8097 log_packet_detailed("'diplomacy' field error detected");
8098 }
8099 }
8100
8101 /* field 35 is folded into the header */
8102
8103 if (BV_ISSET(fields, 36)) {
8104 log_packet_detailed(" field 'food_cost' has changed");
8105
8106#ifdef FREECIV_JSON_CONNECTION
8107 field_addr.name = "food_cost";
8108#endif /* FREECIV_JSON_CONNECTION */
8109 e = 0;
8110
8111 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
8112
8113 if (e) {
8114 log_packet_detailed("'food_cost' field error detected");
8115 }
8116 }
8117
8118 if (BV_ISSET(fields, 37)) {
8119 log_packet_detailed(" field 'foodbox' has changed");
8120
8121#ifdef FREECIV_JSON_CONNECTION
8122 field_addr.name = "foodbox";
8123#endif /* FREECIV_JSON_CONNECTION */
8124 e = 0;
8125
8126 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
8127
8128 if (e) {
8129 log_packet_detailed("'foodbox' field error detected");
8130 }
8131 }
8132
8133 if (BV_ISSET(fields, 38)) {
8134 log_packet_detailed(" field 'forced_gold' has changed");
8135
8136#ifdef FREECIV_JSON_CONNECTION
8137 field_addr.name = "forced_gold";
8138#endif /* FREECIV_JSON_CONNECTION */
8139 e = 0;
8140
8141 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
8142
8143 if (e) {
8144 log_packet_detailed("'forced_gold' field error detected");
8145 }
8146 }
8147
8148 if (BV_ISSET(fields, 39)) {
8149 log_packet_detailed(" field 'forced_luxury' has changed");
8150
8151#ifdef FREECIV_JSON_CONNECTION
8152 field_addr.name = "forced_luxury";
8153#endif /* FREECIV_JSON_CONNECTION */
8154 e = 0;
8155
8156 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
8157
8158 if (e) {
8159 log_packet_detailed("'forced_luxury' field error detected");
8160 }
8161 }
8162
8163 if (BV_ISSET(fields, 40)) {
8164 log_packet_detailed(" field 'forced_science' has changed");
8165
8166#ifdef FREECIV_JSON_CONNECTION
8167 field_addr.name = "forced_science";
8168#endif /* FREECIV_JSON_CONNECTION */
8169 e = 0;
8170
8171 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
8172
8173 if (e) {
8174 log_packet_detailed("'forced_science' field error detected");
8175 }
8176 }
8177
8178 if (BV_ISSET(fields, 41)) {
8179 log_packet_detailed(" field 'fulltradesize' has changed");
8180
8181#ifdef FREECIV_JSON_CONNECTION
8182 field_addr.name = "fulltradesize";
8183#endif /* FREECIV_JSON_CONNECTION */
8184 e = 0;
8185
8186 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
8187
8188 if (e) {
8189 log_packet_detailed("'fulltradesize' field error detected");
8190 }
8191 }
8192
8193 if (BV_ISSET(fields, 42)) {
8194 log_packet_detailed(" field 'trade_world_rel_pct' has changed");
8195
8196#ifdef FREECIV_JSON_CONNECTION
8197 field_addr.name = "trade_world_rel_pct";
8198#endif /* FREECIV_JSON_CONNECTION */
8199 e = 0;
8200
8201 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
8202
8203 if (e) {
8204 log_packet_detailed("'trade_world_rel_pct' field error detected");
8205 }
8206 }
8207
8208 if (BV_ISSET(fields, 43)) {
8209 log_packet_detailed(" field 'min_trade_route_val' has changed");
8210
8211#ifdef FREECIV_JSON_CONNECTION
8212 field_addr.name = "min_trade_route_val";
8213#endif /* FREECIV_JSON_CONNECTION */
8214 e = 0;
8215
8216 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
8217
8218 if (e) {
8219 log_packet_detailed("'min_trade_route_val' field error detected");
8220 }
8221 }
8222
8223 /* field 44 is folded into the header */
8224
8225 if (BV_ISSET(fields, 45)) {
8226 log_packet_detailed(" field 'goods_selection' has changed");
8227
8228#ifdef FREECIV_JSON_CONNECTION
8229 field_addr.name = "goods_selection";
8230#endif /* FREECIV_JSON_CONNECTION */
8231 e = 0;
8232
8233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
8234
8235 if (e) {
8236 log_packet_detailed("'goods_selection' field error detected");
8237 }
8238 }
8239
8240 if (BV_ISSET(fields, 46)) {
8241 log_packet_detailed(" field 'global_advance_count' has changed");
8242
8243#ifdef FREECIV_JSON_CONNECTION
8244 field_addr.name = "global_advance_count";
8245#endif /* FREECIV_JSON_CONNECTION */
8246 e = 0;
8247
8248 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
8249
8250 if (e) {
8251 log_packet_detailed("'global_advance_count' field error detected");
8252 }
8253 }
8254
8255 if (BV_ISSET(fields, 47)) {
8256 log_packet_detailed(" field 'global_advances' has changed");
8257
8258#ifdef FREECIV_JSON_CONNECTION
8259 field_addr.name = "global_advances";
8260#endif /* FREECIV_JSON_CONNECTION */
8261 e = 0;
8262
8263 {
8264 int i;
8265
8267
8268#ifdef FREECIV_JSON_CONNECTION
8269 size_t count_i = 0;
8270
8271 /* Create the array. */
8272 e |= DIO_PUT(farray, &dout, &field_addr, 0);
8273
8274 /* Enter array. */
8275 field_addr.sub_location = plocation_elem_new(0);
8276#endif /* FREECIV_JSON_CONNECTION */
8277
8278 for (i = 0; i < A_LAST; i++) {
8279 differ = (old->global_advances[i] != real_packet->global_advances[i]);
8280
8281 if (!differ) {
8282 continue;
8283 }
8284
8285#ifdef FREECIV_JSON_CONNECTION
8286 /* Append next diff array element. */
8287 field_addr.sub_location->number = -1;
8288
8289 /* Create the diff array element. */
8290 e |= DIO_PUT(object, &dout, &field_addr);
8291
8292 /* Enter diff array element (start at the index address). */
8293 field_addr.sub_location->number = count_i++;
8294 field_addr.sub_location->sub_location = plocation_field_new("index");
8295#endif /* FREECIV_JSON_CONNECTION */
8296
8297 /* Write the index */
8298#if A_LAST <= MAX_UINT8
8299 e |= DIO_PUT(uint8, &dout, &field_addr, i);
8300#else
8301 e |= DIO_PUT(uint16, &dout, &field_addr, i);
8302#endif
8303
8304#ifdef FREECIV_JSON_CONNECTION
8305 /* Content address. */
8306 field_addr.sub_location->sub_location->name = "data";
8307#endif /* FREECIV_JSON_CONNECTION */
8308
8309 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
8310
8311#ifdef FREECIV_JSON_CONNECTION
8312 /* Exit diff array element. */
8313 FC_FREE(field_addr.sub_location->sub_location);
8314#endif /* FREECIV_JSON_CONNECTION */
8315 }
8316
8317#ifdef FREECIV_JSON_CONNECTION
8318 /* Append diff array element. */
8319 field_addr.sub_location->number = -1;
8320
8321 /* Create the terminating diff array element. */
8322 e |= DIO_PUT(object, &dout, &field_addr);
8323
8324 /* Enter diff array element (start at the index address). */
8325 field_addr.sub_location->number = count_i;
8326 field_addr.sub_location->sub_location = plocation_field_new("index");
8327#endif /* FREECIV_JSON_CONNECTION */
8328
8329 /* Write the sentinel value */
8330#if A_LAST <= MAX_UINT8
8331 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST);
8332#else
8333 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST);
8334#endif
8335
8336#ifdef FREECIV_JSON_CONNECTION
8337 /* Exit diff array element. */
8338 FC_FREE(field_addr.sub_location->sub_location);
8339 /* Exit array. */
8340 FC_FREE(field_addr.sub_location);
8341#endif /* FREECIV_JSON_CONNECTION */
8342 }
8343
8344 if (e) {
8345 log_packet_detailed("'global_advances' field error detected");
8346 }
8347 }
8348
8349 /* field 48 is folded into the header */
8350
8351 if (BV_ISSET(fields, 49)) {
8352 log_packet_detailed(" field 'globalwarming' has changed");
8353
8354#ifdef FREECIV_JSON_CONNECTION
8355 field_addr.name = "globalwarming";
8356#endif /* FREECIV_JSON_CONNECTION */
8357 e = 0;
8358
8359 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
8360
8361 if (e) {
8362 log_packet_detailed("'globalwarming' field error detected");
8363 }
8364 }
8365
8366 if (BV_ISSET(fields, 50)) {
8367 log_packet_detailed(" field 'gold' has changed");
8368
8369#ifdef FREECIV_JSON_CONNECTION
8370 field_addr.name = "gold";
8371#endif /* FREECIV_JSON_CONNECTION */
8372 e = 0;
8373
8374 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
8375
8376 if (e) {
8377 log_packet_detailed("'gold' field error detected");
8378 }
8379 }
8380
8381 if (BV_ISSET(fields, 51)) {
8382 log_packet_detailed(" field 'gold_upkeep_style' has changed");
8383
8384#ifdef FREECIV_JSON_CONNECTION
8385 field_addr.name = "gold_upkeep_style";
8386#endif /* FREECIV_JSON_CONNECTION */
8387 e = 0;
8388
8389 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
8390
8391 if (e) {
8392 log_packet_detailed("'gold_upkeep_style' field error detected");
8393 }
8394 }
8395
8396 if (BV_ISSET(fields, 52)) {
8397 log_packet_detailed(" field 'infrapoints' has changed");
8398
8399#ifdef FREECIV_JSON_CONNECTION
8400 field_addr.name = "infrapoints";
8401#endif /* FREECIV_JSON_CONNECTION */
8402 e = 0;
8403
8404 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
8405
8406 if (e) {
8407 log_packet_detailed("'infrapoints' field error detected");
8408 }
8409 }
8410
8411 if (BV_ISSET(fields, 53)) {
8412 log_packet_detailed(" field 'revolentype' has changed");
8413
8414#ifdef FREECIV_JSON_CONNECTION
8415 field_addr.name = "revolentype";
8416#endif /* FREECIV_JSON_CONNECTION */
8417 e = 0;
8418
8419 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
8420
8421 if (e) {
8422 log_packet_detailed("'revolentype' field error detected");
8423 }
8424 }
8425
8426 if (BV_ISSET(fields, 54)) {
8427 log_packet_detailed(" field 'default_government_id' has changed");
8428
8429#ifdef FREECIV_JSON_CONNECTION
8430 field_addr.name = "default_government_id";
8431#endif /* FREECIV_JSON_CONNECTION */
8432 e = 0;
8433
8434 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
8435
8436 if (e) {
8437 log_packet_detailed("'default_government_id' field error detected");
8438 }
8439 }
8440
8441 if (BV_ISSET(fields, 55)) {
8442 log_packet_detailed(" field 'government_during_revolution_id' has changed");
8443
8444#ifdef FREECIV_JSON_CONNECTION
8445 field_addr.name = "government_during_revolution_id";
8446#endif /* FREECIV_JSON_CONNECTION */
8447 e = 0;
8448
8449 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
8450
8451 if (e) {
8452 log_packet_detailed("'government_during_revolution_id' field error detected");
8453 }
8454 }
8455
8456 if (BV_ISSET(fields, 56)) {
8457 log_packet_detailed(" field 'granary_food_inc' has changed");
8458
8459#ifdef FREECIV_JSON_CONNECTION
8460 field_addr.name = "granary_food_inc";
8461#endif /* FREECIV_JSON_CONNECTION */
8462 e = 0;
8463
8464 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
8465
8466 if (e) {
8467 log_packet_detailed("'granary_food_inc' field error detected");
8468 }
8469 }
8470
8471 if (BV_ISSET(fields, 57)) {
8472 log_packet_detailed(" field 'granary_food_ini' has changed");
8473
8474#ifdef FREECIV_JSON_CONNECTION
8475 field_addr.name = "granary_food_ini";
8476#endif /* FREECIV_JSON_CONNECTION */
8477 e = 0;
8478
8479 {
8480 int i;
8481
8482#ifdef FREECIV_JSON_CONNECTION
8483 /* Create the array. */
8485
8486 /* Enter array. */
8487 field_addr.sub_location = plocation_elem_new(0);
8488#endif /* FREECIV_JSON_CONNECTION */
8489
8490 for (i = 0; i < MAX_GRANARY_INIS; i++) {
8491#ifdef FREECIV_JSON_CONNECTION
8492 /* Next array element. */
8493 field_addr.sub_location->number = i;
8494#endif /* FREECIV_JSON_CONNECTION */
8495
8496 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
8497 }
8498
8499#ifdef FREECIV_JSON_CONNECTION
8500 /* Exit array. */
8501 FC_FREE(field_addr.sub_location);
8502#endif /* FREECIV_JSON_CONNECTION */
8503 }
8504
8505 if (e) {
8506 log_packet_detailed("'granary_food_ini' field error detected");
8507 }
8508 }
8509
8510 if (BV_ISSET(fields, 58)) {
8511 log_packet_detailed(" field 'granary_num_inis' has changed");
8512
8513#ifdef FREECIV_JSON_CONNECTION
8514 field_addr.name = "granary_num_inis";
8515#endif /* FREECIV_JSON_CONNECTION */
8516 e = 0;
8517
8518 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
8519
8520 if (e) {
8521 log_packet_detailed("'granary_num_inis' field error detected");
8522 }
8523 }
8524
8525 if (BV_ISSET(fields, 59)) {
8526 log_packet_detailed(" field 'great_wonder_owners' has changed");
8527
8528#ifdef FREECIV_JSON_CONNECTION
8529 field_addr.name = "great_wonder_owners";
8530#endif /* FREECIV_JSON_CONNECTION */
8531 e = 0;
8532
8533 {
8534 int i;
8535
8537
8538#ifdef FREECIV_JSON_CONNECTION
8539 size_t count_i = 0;
8540
8541 /* Create the array. */
8542 e |= DIO_PUT(farray, &dout, &field_addr, 0);
8543
8544 /* Enter array. */
8545 field_addr.sub_location = plocation_elem_new(0);
8546#endif /* FREECIV_JSON_CONNECTION */
8547
8548 for (i = 0; i < B_LAST; i++) {
8549 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
8550
8551 if (!differ) {
8552 continue;
8553 }
8554
8555#ifdef FREECIV_JSON_CONNECTION
8556 /* Append next diff array element. */
8557 field_addr.sub_location->number = -1;
8558
8559 /* Create the diff array element. */
8560 e |= DIO_PUT(object, &dout, &field_addr);
8561
8562 /* Enter diff array element (start at the index address). */
8563 field_addr.sub_location->number = count_i++;
8564 field_addr.sub_location->sub_location = plocation_field_new("index");
8565#endif /* FREECIV_JSON_CONNECTION */
8566
8567 /* Write the index */
8568#if B_LAST <= MAX_UINT8
8569 e |= DIO_PUT(uint8, &dout, &field_addr, i);
8570#else
8571 e |= DIO_PUT(uint16, &dout, &field_addr, i);
8572#endif
8573
8574#ifdef FREECIV_JSON_CONNECTION
8575 /* Content address. */
8576 field_addr.sub_location->sub_location->name = "data";
8577#endif /* FREECIV_JSON_CONNECTION */
8578
8579 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
8580
8581#ifdef FREECIV_JSON_CONNECTION
8582 /* Exit diff array element. */
8583 FC_FREE(field_addr.sub_location->sub_location);
8584#endif /* FREECIV_JSON_CONNECTION */
8585 }
8586
8587#ifdef FREECIV_JSON_CONNECTION
8588 /* Append diff array element. */
8589 field_addr.sub_location->number = -1;
8590
8591 /* Create the terminating diff array element. */
8592 e |= DIO_PUT(object, &dout, &field_addr);
8593
8594 /* Enter diff array element (start at the index address). */
8595 field_addr.sub_location->number = count_i;
8596 field_addr.sub_location->sub_location = plocation_field_new("index");
8597#endif /* FREECIV_JSON_CONNECTION */
8598
8599 /* Write the sentinel value */
8600#if B_LAST <= MAX_UINT8
8601 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
8602#else
8603 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
8604#endif
8605
8606#ifdef FREECIV_JSON_CONNECTION
8607 /* Exit diff array element. */
8608 FC_FREE(field_addr.sub_location->sub_location);
8609 /* Exit array. */
8610 FC_FREE(field_addr.sub_location);
8611#endif /* FREECIV_JSON_CONNECTION */
8612 }
8613
8614 if (e) {
8615 log_packet_detailed("'great_wonder_owners' field error detected");
8616 }
8617 }
8618
8619 if (BV_ISSET(fields, 60)) {
8620 log_packet_detailed(" field 'happy_cost' has changed");
8621
8622#ifdef FREECIV_JSON_CONNECTION
8623 field_addr.name = "happy_cost";
8624#endif /* FREECIV_JSON_CONNECTION */
8625 e = 0;
8626
8627 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
8628
8629 if (e) {
8630 log_packet_detailed("'happy_cost' field error detected");
8631 }
8632 }
8633
8634 if (BV_ISSET(fields, 61)) {
8635 log_packet_detailed(" field 'happyborders' has changed");
8636
8637#ifdef FREECIV_JSON_CONNECTION
8638 field_addr.name = "happyborders";
8639#endif /* FREECIV_JSON_CONNECTION */
8640 e = 0;
8641
8642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
8643
8644 if (e) {
8645 log_packet_detailed("'happyborders' field error detected");
8646 }
8647 }
8648
8649 if (BV_ISSET(fields, 62)) {
8650 log_packet_detailed(" field 'heating' has changed");
8651
8652#ifdef FREECIV_JSON_CONNECTION
8653 field_addr.name = "heating";
8654#endif /* FREECIV_JSON_CONNECTION */
8655 e = 0;
8656
8657 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
8658
8659 if (e) {
8660 log_packet_detailed("'heating' field error detected");
8661 }
8662 }
8663
8664 if (BV_ISSET(fields, 63)) {
8665 log_packet_detailed(" field 'illness_base_factor' has changed");
8666
8667#ifdef FREECIV_JSON_CONNECTION
8668 field_addr.name = "illness_base_factor";
8669#endif /* FREECIV_JSON_CONNECTION */
8670 e = 0;
8671
8672 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
8673
8674 if (e) {
8675 log_packet_detailed("'illness_base_factor' field error detected");
8676 }
8677 }
8678
8679 if (BV_ISSET(fields, 64)) {
8680 log_packet_detailed(" field 'illness_min_size' has changed");
8681
8682#ifdef FREECIV_JSON_CONNECTION
8683 field_addr.name = "illness_min_size";
8684#endif /* FREECIV_JSON_CONNECTION */
8685 e = 0;
8686
8687 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
8688
8689 if (e) {
8690 log_packet_detailed("'illness_min_size' field error detected");
8691 }
8692 }
8693
8694 /* field 65 is folded into the header */
8695
8696 if (BV_ISSET(fields, 66)) {
8697 log_packet_detailed(" field 'illness_pollution_factor' has changed");
8698
8699#ifdef FREECIV_JSON_CONNECTION
8700 field_addr.name = "illness_pollution_factor";
8701#endif /* FREECIV_JSON_CONNECTION */
8702 e = 0;
8703
8704 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
8705
8706 if (e) {
8707 log_packet_detailed("'illness_pollution_factor' field error detected");
8708 }
8709 }
8710
8711 if (BV_ISSET(fields, 67)) {
8712 log_packet_detailed(" field 'illness_trade_infection' has changed");
8713
8714#ifdef FREECIV_JSON_CONNECTION
8715 field_addr.name = "illness_trade_infection";
8716#endif /* FREECIV_JSON_CONNECTION */
8717 e = 0;
8718
8719 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
8720
8721 if (e) {
8722 log_packet_detailed("'illness_trade_infection' field error detected");
8723 }
8724 }
8725
8726 if (BV_ISSET(fields, 68)) {
8727 log_packet_detailed(" field 'init_city_radius_sq' has changed");
8728
8729#ifdef FREECIV_JSON_CONNECTION
8730 field_addr.name = "init_city_radius_sq";
8731#endif /* FREECIV_JSON_CONNECTION */
8732 e = 0;
8733
8734 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
8735
8736 if (e) {
8737 log_packet_detailed("'init_city_radius_sq' field error detected");
8738 }
8739 }
8740
8741 /* field 69 is folded into the header */
8742
8743 /* field 70 is folded into the header */
8744
8745 /* field 71 is folded into the header */
8746
8747 /* field 72 is folded into the header */
8748
8749 /* field 73 is folded into the header */
8750
8751 /* field 74 is folded into the header */
8752
8753 /* field 75 is folded into the header */
8754
8755 /* field 76 is folded into the header */
8756
8757 if (BV_ISSET(fields, 77)) {
8758 log_packet_detailed(" field 'low_firepower_badwallattacker' has changed");
8759
8760#ifdef FREECIV_JSON_CONNECTION
8761 field_addr.name = "low_firepower_badwallattacker";
8762#endif /* FREECIV_JSON_CONNECTION */
8763 e = 0;
8764
8765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
8766
8767 if (e) {
8768 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
8769 }
8770 }
8771
8772 if (BV_ISSET(fields, 78)) {
8773 log_packet_detailed(" field 'low_firepower_pearl_harbor' has changed");
8774
8775#ifdef FREECIV_JSON_CONNECTION
8776 field_addr.name = "low_firepower_pearl_harbor";
8777#endif /* FREECIV_JSON_CONNECTION */
8778 e = 0;
8779
8780 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbor);
8781
8782 if (e) {
8783 log_packet_detailed("'low_firepower_pearl_harbor' field error detected");
8784 }
8785 }
8786
8787 if (BV_ISSET(fields, 79)) {
8788 log_packet_detailed(" field 'low_firepower_combat_bonus' has changed");
8789
8790#ifdef FREECIV_JSON_CONNECTION
8791 field_addr.name = "low_firepower_combat_bonus";
8792#endif /* FREECIV_JSON_CONNECTION */
8793 e = 0;
8794
8795 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
8796
8797 if (e) {
8798 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
8799 }
8800 }
8801
8802 if (BV_ISSET(fields, 80)) {
8803 log_packet_detailed(" field 'low_firepower_nonnat_bombard' has changed");
8804
8805#ifdef FREECIV_JSON_CONNECTION
8806 field_addr.name = "low_firepower_nonnat_bombard";
8807#endif /* FREECIV_JSON_CONNECTION */
8808 e = 0;
8809
8810 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
8811
8812 if (e) {
8813 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
8814 }
8815 }
8816
8817 if (BV_ISSET(fields, 81)) {
8818 log_packet_detailed(" field 'nuke_pop_loss_pct' has changed");
8819
8820#ifdef FREECIV_JSON_CONNECTION
8821 field_addr.name = "nuke_pop_loss_pct";
8822#endif /* FREECIV_JSON_CONNECTION */
8823 e = 0;
8824
8825 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
8826
8827 if (e) {
8828 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
8829 }
8830 }
8831
8832 if (BV_ISSET(fields, 82)) {
8833 log_packet_detailed(" field 'nuke_defender_survival_chance_pct' has changed");
8834
8835#ifdef FREECIV_JSON_CONNECTION
8836 field_addr.name = "nuke_defender_survival_chance_pct";
8837#endif /* FREECIV_JSON_CONNECTION */
8838 e = 0;
8839
8840 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
8841
8842 if (e) {
8843 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
8844 }
8845 }
8846
8847 if (BV_ISSET(fields, 83)) {
8848 log_packet_detailed(" field 'min_city_center_output' has changed");
8849
8850#ifdef FREECIV_JSON_CONNECTION
8851 field_addr.name = "min_city_center_output";
8852#endif /* FREECIV_JSON_CONNECTION */
8853 e = 0;
8854
8855 {
8856 int i;
8857
8858#ifdef FREECIV_JSON_CONNECTION
8859 /* Create the array. */
8860 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
8861
8862 /* Enter array. */
8863 field_addr.sub_location = plocation_elem_new(0);
8864#endif /* FREECIV_JSON_CONNECTION */
8865
8866 for (i = 0; i < O_LAST; i++) {
8867#ifdef FREECIV_JSON_CONNECTION
8868 /* Next array element. */
8869 field_addr.sub_location->number = i;
8870#endif /* FREECIV_JSON_CONNECTION */
8871
8872 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
8873 }
8874
8875#ifdef FREECIV_JSON_CONNECTION
8876 /* Exit array. */
8877 FC_FREE(field_addr.sub_location);
8878#endif /* FREECIV_JSON_CONNECTION */
8879 }
8880
8881 if (e) {
8882 log_packet_detailed("'min_city_center_output' field error detected");
8883 }
8884 }
8885
8886 /* field 84 is folded into the header */
8887
8888 /* field 85 is folded into the header */
8889
8890 /* field 86 is folded into the header */
8891
8892 if (BV_ISSET(fields, 87)) {
8893 log_packet_detailed(" field 'notradesize' has changed");
8894
8895#ifdef FREECIV_JSON_CONNECTION
8896 field_addr.name = "notradesize";
8897#endif /* FREECIV_JSON_CONNECTION */
8898 e = 0;
8899
8900 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
8901
8902 if (e) {
8903 log_packet_detailed("'notradesize' field error detected");
8904 }
8905 }
8906
8907 /* field 88 is folded into the header */
8908
8909 if (BV_ISSET(fields, 89)) {
8910 log_packet_detailed(" field 'nuclearwinter' has changed");
8911
8912#ifdef FREECIV_JSON_CONNECTION
8913 field_addr.name = "nuclearwinter";
8914#endif /* FREECIV_JSON_CONNECTION */
8915 e = 0;
8916
8917 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
8918
8919 if (e) {
8920 log_packet_detailed("'nuclearwinter' field error detected");
8921 }
8922 }
8923
8924 if (BV_ISSET(fields, 90)) {
8925 log_packet_detailed(" field 'phase' has changed");
8926
8927#ifdef FREECIV_JSON_CONNECTION
8928 field_addr.name = "phase";
8929#endif /* FREECIV_JSON_CONNECTION */
8930 e = 0;
8931
8932 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
8933
8934 if (e) {
8935 log_packet_detailed("'phase' field error detected");
8936 }
8937 }
8938
8939 if (BV_ISSET(fields, 91)) {
8940 log_packet_detailed(" field 'phase_mode' has changed");
8941
8942#ifdef FREECIV_JSON_CONNECTION
8943 field_addr.name = "phase_mode";
8944#endif /* FREECIV_JSON_CONNECTION */
8945 e = 0;
8946
8947 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
8948
8949 if (e) {
8950 log_packet_detailed("'phase_mode' field error detected");
8951 }
8952 }
8953
8954 /* field 92 is folded into the header */
8955
8956 /* field 93 is folded into the header */
8957
8958 /* field 94 is folded into the header */
8959
8960 /* field 95 is folded into the header */
8961
8962 /* field 96 is folded into the header */
8963
8964 /* field 97 is folded into the header */
8965
8966 /* field 98 is folded into the header */
8967
8968 /* field 99 is folded into the header */
8969
8970 if (BV_ISSET(fields, 100)) {
8971 log_packet_detailed(" field 'rapturedelay' has changed");
8972
8973#ifdef FREECIV_JSON_CONNECTION
8974 field_addr.name = "rapturedelay";
8975#endif /* FREECIV_JSON_CONNECTION */
8976 e = 0;
8977
8978 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
8979
8980 if (e) {
8981 log_packet_detailed("'rapturedelay' field error detected");
8982 }
8983 }
8984
8985 if (BV_ISSET(fields, 101)) {
8986 log_packet_detailed(" field 'disasters' has changed");
8987
8988#ifdef FREECIV_JSON_CONNECTION
8989 field_addr.name = "disasters";
8990#endif /* FREECIV_JSON_CONNECTION */
8991 e = 0;
8992
8993 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
8994
8995 if (e) {
8996 log_packet_detailed("'disasters' field error detected");
8997 }
8998 }
8999
9000 /* field 102 is folded into the header */
9001
9002 /* field 103 is folded into the header */
9003
9004 if (BV_ISSET(fields, 104)) {
9005 log_packet_detailed(" field 'sciencebox' has changed");
9006
9007#ifdef FREECIV_JSON_CONNECTION
9008 field_addr.name = "sciencebox";
9009#endif /* FREECIV_JSON_CONNECTION */
9010 e = 0;
9011
9012 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
9013
9014 if (e) {
9015 log_packet_detailed("'sciencebox' field error detected");
9016 }
9017 }
9018
9019 if (BV_ISSET(fields, 105)) {
9020 log_packet_detailed(" field 'shieldbox' has changed");
9021
9022#ifdef FREECIV_JSON_CONNECTION
9023 field_addr.name = "shieldbox";
9024#endif /* FREECIV_JSON_CONNECTION */
9025 e = 0;
9026
9027 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
9028
9029 if (e) {
9030 log_packet_detailed("'shieldbox' field error detected");
9031 }
9032 }
9033
9034 if (BV_ISSET(fields, 106)) {
9035 log_packet_detailed(" field 'skill_level' has changed");
9036
9037#ifdef FREECIV_JSON_CONNECTION
9038 field_addr.name = "skill_level";
9039#endif /* FREECIV_JSON_CONNECTION */
9040 e = 0;
9041
9042 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
9043
9044 if (e) {
9045 log_packet_detailed("'skill_level' field error detected");
9046 }
9047 }
9048
9049 if (BV_ISSET(fields, 107)) {
9050 log_packet_detailed(" field 'victory_conditions' has changed");
9051
9052#ifdef FREECIV_JSON_CONNECTION
9053 field_addr.name = "victory_conditions";
9054#endif /* FREECIV_JSON_CONNECTION */
9055 e = 0;
9056
9057 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
9058
9059 if (e) {
9060 log_packet_detailed("'victory_conditions' field error detected");
9061 }
9062 }
9063
9064 /* field 108 is folded into the header */
9065
9066 if (BV_ISSET(fields, 109)) {
9067 log_packet_detailed(" field 'tech' has changed");
9068
9069#ifdef FREECIV_JSON_CONNECTION
9070 field_addr.name = "tech";
9071#endif /* FREECIV_JSON_CONNECTION */
9072 e = 0;
9073
9074 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
9075
9076 if (e) {
9077 log_packet_detailed("'tech' field error detected");
9078 }
9079 }
9080
9081 if (BV_ISSET(fields, 110)) {
9082 log_packet_detailed(" field 'tech_cost_style' has changed");
9083
9084#ifdef FREECIV_JSON_CONNECTION
9085 field_addr.name = "tech_cost_style";
9086#endif /* FREECIV_JSON_CONNECTION */
9087 e = 0;
9088
9089 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
9090
9091 if (e) {
9092 log_packet_detailed("'tech_cost_style' field error detected");
9093 }
9094 }
9095
9096 if (BV_ISSET(fields, 111)) {
9097 log_packet_detailed(" field 'tech_leakage' has changed");
9098
9099#ifdef FREECIV_JSON_CONNECTION
9100 field_addr.name = "tech_leakage";
9101#endif /* FREECIV_JSON_CONNECTION */
9102 e = 0;
9103
9104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
9105
9106 if (e) {
9107 log_packet_detailed("'tech_leakage' field error detected");
9108 }
9109 }
9110
9111 if (BV_ISSET(fields, 112)) {
9112 log_packet_detailed(" field 'tech_upkeep_divider' has changed");
9113
9114#ifdef FREECIV_JSON_CONNECTION
9115 field_addr.name = "tech_upkeep_divider";
9116#endif /* FREECIV_JSON_CONNECTION */
9117 e = 0;
9118
9119 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
9120
9121 if (e) {
9122 log_packet_detailed("'tech_upkeep_divider' field error detected");
9123 }
9124 }
9125
9126 if (BV_ISSET(fields, 113)) {
9127 log_packet_detailed(" field 'tech_upkeep_style' has changed");
9128
9129#ifdef FREECIV_JSON_CONNECTION
9130 field_addr.name = "tech_upkeep_style";
9131#endif /* FREECIV_JSON_CONNECTION */
9132 e = 0;
9133
9134 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
9135
9136 if (e) {
9137 log_packet_detailed("'tech_upkeep_style' field error detected");
9138 }
9139 }
9140
9141 if (BV_ISSET(fields, 114)) {
9142 log_packet_detailed(" field 'techloss_forgiveness' has changed");
9143
9144#ifdef FREECIV_JSON_CONNECTION
9145 field_addr.name = "techloss_forgiveness";
9146#endif /* FREECIV_JSON_CONNECTION */
9147 e = 0;
9148
9149 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
9150
9151 if (e) {
9152 log_packet_detailed("'techloss_forgiveness' field error detected");
9153 }
9154 }
9155
9156 if (BV_ISSET(fields, 115)) {
9157 log_packet_detailed(" field 'free_tech_method' has changed");
9158
9159#ifdef FREECIV_JSON_CONNECTION
9160 field_addr.name = "free_tech_method";
9161#endif /* FREECIV_JSON_CONNECTION */
9162 e = 0;
9163
9164 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
9165
9166 if (e) {
9167 log_packet_detailed("'free_tech_method' field error detected");
9168 }
9169 }
9170
9171 if (BV_ISSET(fields, 116)) {
9172 log_packet_detailed(" field 'gameloss_style' has changed");
9173
9174#ifdef FREECIV_JSON_CONNECTION
9175 field_addr.name = "gameloss_style";
9176#endif /* FREECIV_JSON_CONNECTION */
9177 e = 0;
9178
9179 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
9180
9181 if (e) {
9182 log_packet_detailed("'gameloss_style' field error detected");
9183 }
9184 }
9185
9186 if (BV_ISSET(fields, 117)) {
9187 log_packet_detailed(" field 'timeout' has changed");
9188
9189#ifdef FREECIV_JSON_CONNECTION
9190 field_addr.name = "timeout";
9191#endif /* FREECIV_JSON_CONNECTION */
9192 e = 0;
9193
9194 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
9195
9196 if (e) {
9197 log_packet_detailed("'timeout' field error detected");
9198 }
9199 }
9200
9201 if (BV_ISSET(fields, 118)) {
9202 log_packet_detailed(" field 'first_timeout' has changed");
9203
9204#ifdef FREECIV_JSON_CONNECTION
9205 field_addr.name = "first_timeout";
9206#endif /* FREECIV_JSON_CONNECTION */
9207 e = 0;
9208
9209 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
9210
9211 if (e) {
9212 log_packet_detailed("'first_timeout' field error detected");
9213 }
9214 }
9215
9216 /* field 119 is folded into the header */
9217
9218 if (BV_ISSET(fields, 120)) {
9219 log_packet_detailed(" field 'trademindist' has changed");
9220
9221#ifdef FREECIV_JSON_CONNECTION
9222 field_addr.name = "trademindist";
9223#endif /* FREECIV_JSON_CONNECTION */
9224 e = 0;
9225
9226 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
9227
9228 if (e) {
9229 log_packet_detailed("'trademindist' field error detected");
9230 }
9231 }
9232
9233 if (BV_ISSET(fields, 121)) {
9234 log_packet_detailed(" field 'trade_revenue_style' has changed");
9235
9236#ifdef FREECIV_JSON_CONNECTION
9237 field_addr.name = "trade_revenue_style";
9238#endif /* FREECIV_JSON_CONNECTION */
9239 e = 0;
9240
9241 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
9242
9243 if (e) {
9244 log_packet_detailed("'trade_revenue_style' field error detected");
9245 }
9246 }
9247
9248 /* field 122 is folded into the header */
9249
9250 /* field 123 is folded into the header */
9251
9252 /* field 124 is folded into the header */
9253
9254 if (BV_ISSET(fields, 125)) {
9255 log_packet_detailed(" field 'turn' has changed");
9256
9257#ifdef FREECIV_JSON_CONNECTION
9258 field_addr.name = "turn";
9259#endif /* FREECIV_JSON_CONNECTION */
9260 e = 0;
9261
9262 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
9263
9264 if (e) {
9265 log_packet_detailed("'turn' field error detected");
9266 }
9267 }
9268
9269 if (BV_ISSET(fields, 126)) {
9270 log_packet_detailed(" field 'warminglevel' has changed");
9271
9272#ifdef FREECIV_JSON_CONNECTION
9273 field_addr.name = "warminglevel";
9274#endif /* FREECIV_JSON_CONNECTION */
9275 e = 0;
9276
9277 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
9278
9279 if (e) {
9280 log_packet_detailed("'warminglevel' field error detected");
9281 }
9282 }
9283
9284 if (BV_ISSET(fields, 127)) {
9285 log_packet_detailed(" field 'year' has changed");
9286
9287#ifdef FREECIV_JSON_CONNECTION
9288 field_addr.name = "year";
9289#endif /* FREECIV_JSON_CONNECTION */
9290 e = 0;
9291
9292 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
9293
9294 if (e) {
9295 log_packet_detailed("'year' field error detected");
9296 }
9297 }
9298
9299 /* field 128 is folded into the header */
9300
9301 if (BV_ISSET(fields, 129)) {
9302 log_packet_detailed(" field 'top_cities_count' has changed");
9303
9304#ifdef FREECIV_JSON_CONNECTION
9305 field_addr.name = "top_cities_count";
9306#endif /* FREECIV_JSON_CONNECTION */
9307 e = 0;
9308
9309 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
9310
9311 if (e) {
9312 log_packet_detailed("'top_cities_count' field error detected");
9313 }
9314 }
9315
9316 if (BV_ISSET(fields, 130)) {
9317 log_packet_detailed(" field 'fragment_count' has changed");
9318
9319#ifdef FREECIV_JSON_CONNECTION
9320 field_addr.name = "fragment_count";
9321#endif /* FREECIV_JSON_CONNECTION */
9322 e = 0;
9323
9324 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
9325
9326 if (e) {
9327 log_packet_detailed("'fragment_count' field error detected");
9328 }
9329 }
9330
9331 if (BV_ISSET(fields, 131)) {
9332 log_packet_detailed(" field 'granularity' has changed");
9333
9334#ifdef FREECIV_JSON_CONNECTION
9335 field_addr.name = "granularity";
9336#endif /* FREECIV_JSON_CONNECTION */
9337 e = 0;
9338
9339 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
9340
9341 if (e) {
9342 log_packet_detailed("'granularity' field error detected");
9343 }
9344 }
9345
9346 if (BV_ISSET(fields, 132)) {
9347 log_packet_detailed(" field 'small_wonder_visibility' has changed");
9348
9349#ifdef FREECIV_JSON_CONNECTION
9350 field_addr.name = "small_wonder_visibility";
9351#endif /* FREECIV_JSON_CONNECTION */
9352 e = 0;
9353
9354 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
9355
9356 if (e) {
9357 log_packet_detailed("'small_wonder_visibility' field error detected");
9358 }
9359 }
9360
9361 *old = *real_packet;
9362
9363#else /* FREECIV_DELTA_PROTOCOL */
9364#ifdef FREECIV_JSON_CONNECTION
9365 field_addr.name = "add_to_size_limit";
9366#endif /* FREECIV_JSON_CONNECTION */
9367 e = 0;
9368
9369 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
9370
9371 if (e) {
9372 log_packet_detailed("'add_to_size_limit' field error detected");
9373 }
9374
9375#ifdef FREECIV_JSON_CONNECTION
9376 field_addr.name = "aifill";
9377#endif /* FREECIV_JSON_CONNECTION */
9378 e = 0;
9379
9380 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->aifill);
9381
9382 if (e) {
9383 log_packet_detailed("'aifill' field error detected");
9384 }
9385
9386#ifdef FREECIV_JSON_CONNECTION
9387 field_addr.name = "persistent_ready";
9388#endif /* FREECIV_JSON_CONNECTION */
9389 e = 0;
9390
9391 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
9392
9393 if (e) {
9394 log_packet_detailed("'persistent_ready' field error detected");
9395 }
9396
9397#ifdef FREECIV_JSON_CONNECTION
9398 field_addr.name = "airlifting_style";
9399#endif /* FREECIV_JSON_CONNECTION */
9400 e = 0;
9401
9402 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
9403
9404 if (e) {
9405 log_packet_detailed("'airlifting_style' field error detected");
9406 }
9407
9408#ifdef FREECIV_JSON_CONNECTION
9409 field_addr.name = "airlift_from_always_enabled";
9410#endif /* FREECIV_JSON_CONNECTION */
9411 e = 0;
9412
9413 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_from_always_enabled);
9414
9415 if (e) {
9416 log_packet_detailed("'airlift_from_always_enabled' field error detected");
9417 }
9418
9419#ifdef FREECIV_JSON_CONNECTION
9420 field_addr.name = "airlift_to_always_enabled";
9421#endif /* FREECIV_JSON_CONNECTION */
9422 e = 0;
9423
9424 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_to_always_enabled);
9425
9426 if (e) {
9427 log_packet_detailed("'airlift_to_always_enabled' field error detected");
9428 }
9429
9430#ifdef FREECIV_JSON_CONNECTION
9431 field_addr.name = "angrycitizen";
9432#endif /* FREECIV_JSON_CONNECTION */
9433 e = 0;
9434
9435 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
9436
9437 if (e) {
9438 log_packet_detailed("'angrycitizen' field error detected");
9439 }
9440
9441#ifdef FREECIV_JSON_CONNECTION
9442 field_addr.name = "base_pollution";
9443#endif /* FREECIV_JSON_CONNECTION */
9444 e = 0;
9445
9446 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
9447
9448 if (e) {
9449 log_packet_detailed("'base_pollution' field error detected");
9450 }
9451
9452#ifdef FREECIV_JSON_CONNECTION
9453 field_addr.name = "base_tech_cost";
9454#endif /* FREECIV_JSON_CONNECTION */
9455 e = 0;
9456
9457 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
9458
9459 if (e) {
9460 log_packet_detailed("'base_tech_cost' field error detected");
9461 }
9462
9463#ifdef FREECIV_JSON_CONNECTION
9464 field_addr.name = "min_tech_cost";
9465#endif /* FREECIV_JSON_CONNECTION */
9466 e = 0;
9467
9468 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
9469
9470 if (e) {
9471 log_packet_detailed("'min_tech_cost' field error detected");
9472 }
9473
9474#ifdef FREECIV_JSON_CONNECTION
9475 field_addr.name = "tech_leak_pct";
9476#endif /* FREECIV_JSON_CONNECTION */
9477 e = 0;
9478
9479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
9480
9481 if (e) {
9482 log_packet_detailed("'tech_leak_pct' field error detected");
9483 }
9484
9485#ifdef FREECIV_JSON_CONNECTION
9486 field_addr.name = "border_city_radius_sq";
9487#endif /* FREECIV_JSON_CONNECTION */
9488 e = 0;
9489
9490 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
9491
9492 if (e) {
9493 log_packet_detailed("'border_city_radius_sq' field error detected");
9494 }
9495
9496#ifdef FREECIV_JSON_CONNECTION
9497 field_addr.name = "border_size_effect";
9498#endif /* FREECIV_JSON_CONNECTION */
9499 e = 0;
9500
9501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
9502
9503 if (e) {
9504 log_packet_detailed("'border_size_effect' field error detected");
9505 }
9506
9507#ifdef FREECIV_JSON_CONNECTION
9508 field_addr.name = "border_city_permanent_radius_sq";
9509#endif /* FREECIV_JSON_CONNECTION */
9510 e = 0;
9511
9512 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
9513
9514 if (e) {
9515 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
9516 }
9517
9518#ifdef FREECIV_JSON_CONNECTION
9519 field_addr.name = "borders";
9520#endif /* FREECIV_JSON_CONNECTION */
9521 e = 0;
9522
9523 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
9524
9525 if (e) {
9526 log_packet_detailed("'borders' field error detected");
9527 }
9528
9529#ifdef FREECIV_JSON_CONNECTION
9530 field_addr.name = "base_bribe_cost";
9531#endif /* FREECIV_JSON_CONNECTION */
9532 e = 0;
9533
9534 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
9535
9536 if (e) {
9537 log_packet_detailed("'base_bribe_cost' field error detected");
9538 }
9539
9540#ifdef FREECIV_JSON_CONNECTION
9541 field_addr.name = "caravan_bonus_style";
9542#endif /* FREECIV_JSON_CONNECTION */
9543 e = 0;
9544
9545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
9546
9547 if (e) {
9548 log_packet_detailed("'caravan_bonus_style' field error detected");
9549 }
9550
9551#ifdef FREECIV_JSON_CONNECTION
9552 field_addr.name = "culture_vic_points";
9553#endif /* FREECIV_JSON_CONNECTION */
9554 e = 0;
9555
9556 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
9557
9558 if (e) {
9559 log_packet_detailed("'culture_vic_points' field error detected");
9560 }
9561
9562#ifdef FREECIV_JSON_CONNECTION
9563 field_addr.name = "culture_vic_lead";
9564#endif /* FREECIV_JSON_CONNECTION */
9565 e = 0;
9566
9567 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
9568
9569 if (e) {
9570 log_packet_detailed("'culture_vic_lead' field error detected");
9571 }
9572
9573#ifdef FREECIV_JSON_CONNECTION
9574 field_addr.name = "culture_migration_pml";
9575#endif /* FREECIV_JSON_CONNECTION */
9576 e = 0;
9577
9578 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
9579
9580 if (e) {
9581 log_packet_detailed("'culture_migration_pml' field error detected");
9582 }
9583
9584#ifdef FREECIV_JSON_CONNECTION
9585 field_addr.name = "history_interest_pml";
9586#endif /* FREECIV_JSON_CONNECTION */
9587 e = 0;
9588
9589 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
9590
9591 if (e) {
9592 log_packet_detailed("'history_interest_pml' field error detected");
9593 }
9594
9595#ifdef FREECIV_JSON_CONNECTION
9596 field_addr.name = "world_peace_turns";
9597#endif /* FREECIV_JSON_CONNECTION */
9598 e = 0;
9599
9600 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->world_peace_turns);
9601
9602 if (e) {
9603 log_packet_detailed("'world_peace_turns' field error detected");
9604 }
9605
9606#ifdef FREECIV_JSON_CONNECTION
9607 field_addr.name = "celebratesize";
9608#endif /* FREECIV_JSON_CONNECTION */
9609 e = 0;
9610
9611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
9612
9613 if (e) {
9614 log_packet_detailed("'celebratesize' field error detected");
9615 }
9616
9617#ifdef FREECIV_JSON_CONNECTION
9618 field_addr.name = "changable_tax";
9619#endif /* FREECIV_JSON_CONNECTION */
9620 e = 0;
9621
9622 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->changable_tax);
9623
9624 if (e) {
9625 log_packet_detailed("'changable_tax' field error detected");
9626 }
9627
9628#ifdef FREECIV_JSON_CONNECTION
9629 field_addr.name = "pop_report_zeroes";
9630#endif /* FREECIV_JSON_CONNECTION */
9631 e = 0;
9632
9633 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
9634
9635 if (e) {
9636 log_packet_detailed("'pop_report_zeroes' field error detected");
9637 }
9638
9639#ifdef FREECIV_JSON_CONNECTION
9640 field_addr.name = "citizen_nationality";
9641#endif /* FREECIV_JSON_CONNECTION */
9642 e = 0;
9643
9644 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->citizen_nationality);
9645
9646 if (e) {
9647 log_packet_detailed("'citizen_nationality' field error detected");
9648 }
9649
9650#ifdef FREECIV_JSON_CONNECTION
9651 field_addr.name = "unit_builders_nationality";
9652#endif /* FREECIV_JSON_CONNECTION */
9653 e = 0;
9654
9655 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unit_builders_nationality);
9656
9657 if (e) {
9658 log_packet_detailed("'unit_builders_nationality' field error detected");
9659 }
9660
9661#ifdef FREECIV_JSON_CONNECTION
9662 field_addr.name = "citizen_convert_speed";
9663#endif /* FREECIV_JSON_CONNECTION */
9664 e = 0;
9665
9666 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
9667
9668 if (e) {
9669 log_packet_detailed("'citizen_convert_speed' field error detected");
9670 }
9671
9672#ifdef FREECIV_JSON_CONNECTION
9673 field_addr.name = "conquest_convert_pct";
9674#endif /* FREECIV_JSON_CONNECTION */
9675 e = 0;
9676
9677 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
9678
9679 if (e) {
9680 log_packet_detailed("'conquest_convert_pct' field error detected");
9681 }
9682
9683#ifdef FREECIV_JSON_CONNECTION
9684 field_addr.name = "citizen_partisans_pct";
9685#endif /* FREECIV_JSON_CONNECTION */
9686 e = 0;
9687
9688 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
9689
9690 if (e) {
9691 log_packet_detailed("'citizen_partisans_pct' field error detected");
9692 }
9693
9694#ifdef FREECIV_JSON_CONNECTION
9695 field_addr.name = "citymindist";
9696#endif /* FREECIV_JSON_CONNECTION */
9697 e = 0;
9698
9699 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
9700
9701 if (e) {
9702 log_packet_detailed("'citymindist' field error detected");
9703 }
9704
9705#ifdef FREECIV_JSON_CONNECTION
9706 field_addr.name = "cooling";
9707#endif /* FREECIV_JSON_CONNECTION */
9708 e = 0;
9709
9710 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
9711
9712 if (e) {
9713 log_packet_detailed("'cooling' field error detected");
9714 }
9715
9716#ifdef FREECIV_JSON_CONNECTION
9717 field_addr.name = "coolinglevel";
9718#endif /* FREECIV_JSON_CONNECTION */
9719 e = 0;
9720
9721 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
9722
9723 if (e) {
9724 log_packet_detailed("'coolinglevel' field error detected");
9725 }
9726
9727#ifdef FREECIV_JSON_CONNECTION
9728 field_addr.name = "diplchance_initial_odds";
9729#endif /* FREECIV_JSON_CONNECTION */
9730 e = 0;
9731
9732 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->diplchance_initial_odds);
9733
9734 if (e) {
9735 log_packet_detailed("'diplchance_initial_odds' field error detected");
9736 }
9737
9738#ifdef FREECIV_JSON_CONNECTION
9739 field_addr.name = "diplomacy";
9740#endif /* FREECIV_JSON_CONNECTION */
9741 e = 0;
9742
9743 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
9744
9745 if (e) {
9746 log_packet_detailed("'diplomacy' field error detected");
9747 }
9748
9749#ifdef FREECIV_JSON_CONNECTION
9750 field_addr.name = "fogofwar";
9751#endif /* FREECIV_JSON_CONNECTION */
9752 e = 0;
9753
9754 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->fogofwar);
9755
9756 if (e) {
9757 log_packet_detailed("'fogofwar' field error detected");
9758 }
9759
9760#ifdef FREECIV_JSON_CONNECTION
9761 field_addr.name = "food_cost";
9762#endif /* FREECIV_JSON_CONNECTION */
9763 e = 0;
9764
9765 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
9766
9767 if (e) {
9768 log_packet_detailed("'food_cost' field error detected");
9769 }
9770
9771#ifdef FREECIV_JSON_CONNECTION
9772 field_addr.name = "foodbox";
9773#endif /* FREECIV_JSON_CONNECTION */
9774 e = 0;
9775
9776 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
9777
9778 if (e) {
9779 log_packet_detailed("'foodbox' field error detected");
9780 }
9781
9782#ifdef FREECIV_JSON_CONNECTION
9783 field_addr.name = "forced_gold";
9784#endif /* FREECIV_JSON_CONNECTION */
9785 e = 0;
9786
9787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
9788
9789 if (e) {
9790 log_packet_detailed("'forced_gold' field error detected");
9791 }
9792
9793#ifdef FREECIV_JSON_CONNECTION
9794 field_addr.name = "forced_luxury";
9795#endif /* FREECIV_JSON_CONNECTION */
9796 e = 0;
9797
9798 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
9799
9800 if (e) {
9801 log_packet_detailed("'forced_luxury' field error detected");
9802 }
9803
9804#ifdef FREECIV_JSON_CONNECTION
9805 field_addr.name = "forced_science";
9806#endif /* FREECIV_JSON_CONNECTION */
9807 e = 0;
9808
9809 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
9810
9811 if (e) {
9812 log_packet_detailed("'forced_science' field error detected");
9813 }
9814
9815#ifdef FREECIV_JSON_CONNECTION
9816 field_addr.name = "fulltradesize";
9817#endif /* FREECIV_JSON_CONNECTION */
9818 e = 0;
9819
9820 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
9821
9822 if (e) {
9823 log_packet_detailed("'fulltradesize' field error detected");
9824 }
9825
9826#ifdef FREECIV_JSON_CONNECTION
9827 field_addr.name = "trade_world_rel_pct";
9828#endif /* FREECIV_JSON_CONNECTION */
9829 e = 0;
9830
9831 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
9832
9833 if (e) {
9834 log_packet_detailed("'trade_world_rel_pct' field error detected");
9835 }
9836
9837#ifdef FREECIV_JSON_CONNECTION
9838 field_addr.name = "min_trade_route_val";
9839#endif /* FREECIV_JSON_CONNECTION */
9840 e = 0;
9841
9842 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
9843
9844 if (e) {
9845 log_packet_detailed("'min_trade_route_val' field error detected");
9846 }
9847
9848#ifdef FREECIV_JSON_CONNECTION
9849 field_addr.name = "reveal_trade_partner";
9850#endif /* FREECIV_JSON_CONNECTION */
9851 e = 0;
9852
9853 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->reveal_trade_partner);
9854
9855 if (e) {
9856 log_packet_detailed("'reveal_trade_partner' field error detected");
9857 }
9858
9859#ifdef FREECIV_JSON_CONNECTION
9860 field_addr.name = "goods_selection";
9861#endif /* FREECIV_JSON_CONNECTION */
9862 e = 0;
9863
9864 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
9865
9866 if (e) {
9867 log_packet_detailed("'goods_selection' field error detected");
9868 }
9869
9870#ifdef FREECIV_JSON_CONNECTION
9871 field_addr.name = "global_advance_count";
9872#endif /* FREECIV_JSON_CONNECTION */
9873 e = 0;
9874
9875 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
9876
9877 if (e) {
9878 log_packet_detailed("'global_advance_count' field error detected");
9879 }
9880
9881#ifdef FREECIV_JSON_CONNECTION
9882 field_addr.name = "global_advances";
9883#endif /* FREECIV_JSON_CONNECTION */
9884 e = 0;
9885
9886 {
9887 int i;
9888
9889#ifdef FREECIV_JSON_CONNECTION
9890 /* Create the array. */
9891 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST);
9892
9893 /* Enter array. */
9894 field_addr.sub_location = plocation_elem_new(0);
9895#endif /* FREECIV_JSON_CONNECTION */
9896
9897 for (i = 0; i < A_LAST; i++) {
9898#ifdef FREECIV_JSON_CONNECTION
9899 /* Next array element. */
9900 field_addr.sub_location->number = i;
9901#endif /* FREECIV_JSON_CONNECTION */
9902
9903 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
9904 }
9905
9906#ifdef FREECIV_JSON_CONNECTION
9907 /* Exit array. */
9908 FC_FREE(field_addr.sub_location);
9909#endif /* FREECIV_JSON_CONNECTION */
9910 }
9911
9912 if (e) {
9913 log_packet_detailed("'global_advances' field error detected");
9914 }
9915
9916#ifdef FREECIV_JSON_CONNECTION
9917 field_addr.name = "global_warming";
9918#endif /* FREECIV_JSON_CONNECTION */
9919 e = 0;
9920
9921 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_warming);
9922
9923 if (e) {
9924 log_packet_detailed("'global_warming' field error detected");
9925 }
9926
9927#ifdef FREECIV_JSON_CONNECTION
9928 field_addr.name = "globalwarming";
9929#endif /* FREECIV_JSON_CONNECTION */
9930 e = 0;
9931
9932 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
9933
9934 if (e) {
9935 log_packet_detailed("'globalwarming' field error detected");
9936 }
9937
9938#ifdef FREECIV_JSON_CONNECTION
9939 field_addr.name = "gold";
9940#endif /* FREECIV_JSON_CONNECTION */
9941 e = 0;
9942
9943 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
9944
9945 if (e) {
9946 log_packet_detailed("'gold' field error detected");
9947 }
9948
9949#ifdef FREECIV_JSON_CONNECTION
9950 field_addr.name = "gold_upkeep_style";
9951#endif /* FREECIV_JSON_CONNECTION */
9952 e = 0;
9953
9954 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
9955
9956 if (e) {
9957 log_packet_detailed("'gold_upkeep_style' field error detected");
9958 }
9959
9960#ifdef FREECIV_JSON_CONNECTION
9961 field_addr.name = "infrapoints";
9962#endif /* FREECIV_JSON_CONNECTION */
9963 e = 0;
9964
9965 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
9966
9967 if (e) {
9968 log_packet_detailed("'infrapoints' field error detected");
9969 }
9970
9971#ifdef FREECIV_JSON_CONNECTION
9972 field_addr.name = "revolentype";
9973#endif /* FREECIV_JSON_CONNECTION */
9974 e = 0;
9975
9976 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
9977
9978 if (e) {
9979 log_packet_detailed("'revolentype' field error detected");
9980 }
9981
9982#ifdef FREECIV_JSON_CONNECTION
9983 field_addr.name = "default_government_id";
9984#endif /* FREECIV_JSON_CONNECTION */
9985 e = 0;
9986
9987 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
9988
9989 if (e) {
9990 log_packet_detailed("'default_government_id' field error detected");
9991 }
9992
9993#ifdef FREECIV_JSON_CONNECTION
9994 field_addr.name = "government_during_revolution_id";
9995#endif /* FREECIV_JSON_CONNECTION */
9996 e = 0;
9997
9998 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
9999
10000 if (e) {
10001 log_packet_detailed("'government_during_revolution_id' field error detected");
10002 }
10003
10004#ifdef FREECIV_JSON_CONNECTION
10005 field_addr.name = "granary_food_inc";
10006#endif /* FREECIV_JSON_CONNECTION */
10007 e = 0;
10008
10009 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
10010
10011 if (e) {
10012 log_packet_detailed("'granary_food_inc' field error detected");
10013 }
10014
10015#ifdef FREECIV_JSON_CONNECTION
10016 field_addr.name = "granary_food_ini";
10017#endif /* FREECIV_JSON_CONNECTION */
10018 e = 0;
10019
10020 {
10021 int i;
10022
10023#ifdef FREECIV_JSON_CONNECTION
10024 /* Create the array. */
10026
10027 /* Enter array. */
10028 field_addr.sub_location = plocation_elem_new(0);
10029#endif /* FREECIV_JSON_CONNECTION */
10030
10031 for (i = 0; i < MAX_GRANARY_INIS; i++) {
10032#ifdef FREECIV_JSON_CONNECTION
10033 /* Next array element. */
10034 field_addr.sub_location->number = i;
10035#endif /* FREECIV_JSON_CONNECTION */
10036
10037 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
10038 }
10039
10040#ifdef FREECIV_JSON_CONNECTION
10041 /* Exit array. */
10042 FC_FREE(field_addr.sub_location);
10043#endif /* FREECIV_JSON_CONNECTION */
10044 }
10045
10046 if (e) {
10047 log_packet_detailed("'granary_food_ini' field error detected");
10048 }
10049
10050#ifdef FREECIV_JSON_CONNECTION
10051 field_addr.name = "granary_num_inis";
10052#endif /* FREECIV_JSON_CONNECTION */
10053 e = 0;
10054
10055 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
10056
10057 if (e) {
10058 log_packet_detailed("'granary_num_inis' field error detected");
10059 }
10060
10061#ifdef FREECIV_JSON_CONNECTION
10062 field_addr.name = "great_wonder_owners";
10063#endif /* FREECIV_JSON_CONNECTION */
10064 e = 0;
10065
10066 {
10067 int i;
10068
10069#ifdef FREECIV_JSON_CONNECTION
10070 /* Create the array. */
10071 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
10072
10073 /* Enter array. */
10074 field_addr.sub_location = plocation_elem_new(0);
10075#endif /* FREECIV_JSON_CONNECTION */
10076
10077 for (i = 0; i < B_LAST; i++) {
10078#ifdef FREECIV_JSON_CONNECTION
10079 /* Next array element. */
10080 field_addr.sub_location->number = i;
10081#endif /* FREECIV_JSON_CONNECTION */
10082
10083 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
10084 }
10085
10086#ifdef FREECIV_JSON_CONNECTION
10087 /* Exit array. */
10088 FC_FREE(field_addr.sub_location);
10089#endif /* FREECIV_JSON_CONNECTION */
10090 }
10091
10092 if (e) {
10093 log_packet_detailed("'great_wonder_owners' field error detected");
10094 }
10095
10096#ifdef FREECIV_JSON_CONNECTION
10097 field_addr.name = "happy_cost";
10098#endif /* FREECIV_JSON_CONNECTION */
10099 e = 0;
10100
10101 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
10102
10103 if (e) {
10104 log_packet_detailed("'happy_cost' field error detected");
10105 }
10106
10107#ifdef FREECIV_JSON_CONNECTION
10108 field_addr.name = "happyborders";
10109#endif /* FREECIV_JSON_CONNECTION */
10110 e = 0;
10111
10112 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
10113
10114 if (e) {
10115 log_packet_detailed("'happyborders' field error detected");
10116 }
10117
10118#ifdef FREECIV_JSON_CONNECTION
10119 field_addr.name = "heating";
10120#endif /* FREECIV_JSON_CONNECTION */
10121 e = 0;
10122
10123 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
10124
10125 if (e) {
10126 log_packet_detailed("'heating' field error detected");
10127 }
10128
10129#ifdef FREECIV_JSON_CONNECTION
10130 field_addr.name = "illness_base_factor";
10131#endif /* FREECIV_JSON_CONNECTION */
10132 e = 0;
10133
10134 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
10135
10136 if (e) {
10137 log_packet_detailed("'illness_base_factor' field error detected");
10138 }
10139
10140#ifdef FREECIV_JSON_CONNECTION
10141 field_addr.name = "illness_min_size";
10142#endif /* FREECIV_JSON_CONNECTION */
10143 e = 0;
10144
10145 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
10146
10147 if (e) {
10148 log_packet_detailed("'illness_min_size' field error detected");
10149 }
10150
10151#ifdef FREECIV_JSON_CONNECTION
10152 field_addr.name = "illness_on";
10153#endif /* FREECIV_JSON_CONNECTION */
10154 e = 0;
10155
10156 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->illness_on);
10157
10158 if (e) {
10159 log_packet_detailed("'illness_on' field error detected");
10160 }
10161
10162#ifdef FREECIV_JSON_CONNECTION
10163 field_addr.name = "illness_pollution_factor";
10164#endif /* FREECIV_JSON_CONNECTION */
10165 e = 0;
10166
10167 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
10168
10169 if (e) {
10170 log_packet_detailed("'illness_pollution_factor' field error detected");
10171 }
10172
10173#ifdef FREECIV_JSON_CONNECTION
10174 field_addr.name = "illness_trade_infection";
10175#endif /* FREECIV_JSON_CONNECTION */
10176 e = 0;
10177
10178 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
10179
10180 if (e) {
10181 log_packet_detailed("'illness_trade_infection' field error detected");
10182 }
10183
10184#ifdef FREECIV_JSON_CONNECTION
10185 field_addr.name = "init_city_radius_sq";
10186#endif /* FREECIV_JSON_CONNECTION */
10187 e = 0;
10188
10189 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
10190
10191 if (e) {
10192 log_packet_detailed("'init_city_radius_sq' field error detected");
10193 }
10194
10195#ifdef FREECIV_JSON_CONNECTION
10196 field_addr.name = "is_edit_mode";
10197#endif /* FREECIV_JSON_CONNECTION */
10198 e = 0;
10199
10200 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_edit_mode);
10201
10202 if (e) {
10203 log_packet_detailed("'is_edit_mode' field error detected");
10204 }
10205
10206#ifdef FREECIV_JSON_CONNECTION
10207 field_addr.name = "is_new_game";
10208#endif /* FREECIV_JSON_CONNECTION */
10209 e = 0;
10210
10211 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_new_game);
10212
10213 if (e) {
10214 log_packet_detailed("'is_new_game' field error detected");
10215 }
10216
10217#ifdef FREECIV_JSON_CONNECTION
10218 field_addr.name = "killcitizen";
10219#endif /* FREECIV_JSON_CONNECTION */
10220 e = 0;
10221
10222 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killcitizen);
10223
10224 if (e) {
10225 log_packet_detailed("'killcitizen' field error detected");
10226 }
10227
10228#ifdef FREECIV_JSON_CONNECTION
10229 field_addr.name = "killstack";
10230#endif /* FREECIV_JSON_CONNECTION */
10231 e = 0;
10232
10233 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killstack);
10234
10235 if (e) {
10236 log_packet_detailed("'killstack' field error detected");
10237 }
10238
10239#ifdef FREECIV_JSON_CONNECTION
10240 field_addr.name = "only_killing_makes_veteran";
10241#endif /* FREECIV_JSON_CONNECTION */
10242 e = 0;
10243
10244 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_killing_makes_veteran);
10245
10246 if (e) {
10247 log_packet_detailed("'only_killing_makes_veteran' field error detected");
10248 }
10249
10250#ifdef FREECIV_JSON_CONNECTION
10251 field_addr.name = "only_real_fight_makes_veteran";
10252#endif /* FREECIV_JSON_CONNECTION */
10253 e = 0;
10254
10255 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_real_fight_makes_veteran);
10256
10257 if (e) {
10258 log_packet_detailed("'only_real_fight_makes_veteran' field error detected");
10259 }
10260
10261#ifdef FREECIV_JSON_CONNECTION
10262 field_addr.name = "combat_odds_scaled_veterancy";
10263#endif /* FREECIV_JSON_CONNECTION */
10264 e = 0;
10265
10266 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->combat_odds_scaled_veterancy);
10267
10268 if (e) {
10269 log_packet_detailed("'combat_odds_scaled_veterancy' field error detected");
10270 }
10271
10272#ifdef FREECIV_JSON_CONNECTION
10273 field_addr.name = "damage_reduces_bombard_rate";
10274#endif /* FREECIV_JSON_CONNECTION */
10275 e = 0;
10276
10277 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->damage_reduces_bombard_rate);
10278
10279 if (e) {
10280 log_packet_detailed("'damage_reduces_bombard_rate' field error detected");
10281 }
10282
10283#ifdef FREECIV_JSON_CONNECTION
10284 field_addr.name = "low_firepower_badwallattacker";
10285#endif /* FREECIV_JSON_CONNECTION */
10286 e = 0;
10287
10288 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
10289
10290 if (e) {
10291 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
10292 }
10293
10294#ifdef FREECIV_JSON_CONNECTION
10295 field_addr.name = "low_firepower_pearl_harbor";
10296#endif /* FREECIV_JSON_CONNECTION */
10297 e = 0;
10298
10299 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbor);
10300
10301 if (e) {
10302 log_packet_detailed("'low_firepower_pearl_harbor' field error detected");
10303 }
10304
10305#ifdef FREECIV_JSON_CONNECTION
10306 field_addr.name = "low_firepower_combat_bonus";
10307#endif /* FREECIV_JSON_CONNECTION */
10308 e = 0;
10309
10310 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
10311
10312 if (e) {
10313 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
10314 }
10315
10316#ifdef FREECIV_JSON_CONNECTION
10317 field_addr.name = "low_firepower_nonnat_bombard";
10318#endif /* FREECIV_JSON_CONNECTION */
10319 e = 0;
10320
10321 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
10322
10323 if (e) {
10324 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
10325 }
10326
10327#ifdef FREECIV_JSON_CONNECTION
10328 field_addr.name = "nuke_pop_loss_pct";
10329#endif /* FREECIV_JSON_CONNECTION */
10330 e = 0;
10331
10332 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
10333
10334 if (e) {
10335 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
10336 }
10337
10338#ifdef FREECIV_JSON_CONNECTION
10339 field_addr.name = "nuke_defender_survival_chance_pct";
10340#endif /* FREECIV_JSON_CONNECTION */
10341 e = 0;
10342
10343 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
10344
10345 if (e) {
10346 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
10347 }
10348
10349#ifdef FREECIV_JSON_CONNECTION
10350 field_addr.name = "min_city_center_output";
10351#endif /* FREECIV_JSON_CONNECTION */
10352 e = 0;
10353
10354 {
10355 int i;
10356
10357#ifdef FREECIV_JSON_CONNECTION
10358 /* Create the array. */
10359 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
10360
10361 /* Enter array. */
10362 field_addr.sub_location = plocation_elem_new(0);
10363#endif /* FREECIV_JSON_CONNECTION */
10364
10365 for (i = 0; i < O_LAST; i++) {
10366#ifdef FREECIV_JSON_CONNECTION
10367 /* Next array element. */
10368 field_addr.sub_location->number = i;
10369#endif /* FREECIV_JSON_CONNECTION */
10370
10371 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
10372 }
10373
10374#ifdef FREECIV_JSON_CONNECTION
10375 /* Exit array. */
10376 FC_FREE(field_addr.sub_location);
10377#endif /* FREECIV_JSON_CONNECTION */
10378 }
10379
10380 if (e) {
10381 log_packet_detailed("'min_city_center_output' field error detected");
10382 }
10383
10384#ifdef FREECIV_JSON_CONNECTION
10385 field_addr.name = "muuk_food_wipe";
10386#endif /* FREECIV_JSON_CONNECTION */
10387 e = 0;
10388
10389 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_food_wipe);
10390
10391 if (e) {
10392 log_packet_detailed("'muuk_food_wipe' field error detected");
10393 }
10394
10395#ifdef FREECIV_JSON_CONNECTION
10396 field_addr.name = "muuk_gold_wipe";
10397#endif /* FREECIV_JSON_CONNECTION */
10398 e = 0;
10399
10400 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_gold_wipe);
10401
10402 if (e) {
10403 log_packet_detailed("'muuk_gold_wipe' field error detected");
10404 }
10405
10406#ifdef FREECIV_JSON_CONNECTION
10407 field_addr.name = "muuk_shield_wipe";
10408#endif /* FREECIV_JSON_CONNECTION */
10409 e = 0;
10410
10411 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_shield_wipe);
10412
10413 if (e) {
10414 log_packet_detailed("'muuk_shield_wipe' field error detected");
10415 }
10416
10417#ifdef FREECIV_JSON_CONNECTION
10418 field_addr.name = "notradesize";
10419#endif /* FREECIV_JSON_CONNECTION */
10420 e = 0;
10421
10422 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
10423
10424 if (e) {
10425 log_packet_detailed("'notradesize' field error detected");
10426 }
10427
10428#ifdef FREECIV_JSON_CONNECTION
10429 field_addr.name = "nuclear_winter";
10430#endif /* FREECIV_JSON_CONNECTION */
10431 e = 0;
10432
10433 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nuclear_winter);
10434
10435 if (e) {
10436 log_packet_detailed("'nuclear_winter' field error detected");
10437 }
10438
10439#ifdef FREECIV_JSON_CONNECTION
10440 field_addr.name = "nuclearwinter";
10441#endif /* FREECIV_JSON_CONNECTION */
10442 e = 0;
10443
10444 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
10445
10446 if (e) {
10447 log_packet_detailed("'nuclearwinter' field error detected");
10448 }
10449
10450#ifdef FREECIV_JSON_CONNECTION
10451 field_addr.name = "phase";
10452#endif /* FREECIV_JSON_CONNECTION */
10453 e = 0;
10454
10455 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
10456
10457 if (e) {
10458 log_packet_detailed("'phase' field error detected");
10459 }
10460
10461#ifdef FREECIV_JSON_CONNECTION
10462 field_addr.name = "phase_mode";
10463#endif /* FREECIV_JSON_CONNECTION */
10464 e = 0;
10465
10466 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
10467
10468 if (e) {
10469 log_packet_detailed("'phase_mode' field error detected");
10470 }
10471
10472#ifdef FREECIV_JSON_CONNECTION
10473 field_addr.name = "pillage_select";
10474#endif /* FREECIV_JSON_CONNECTION */
10475 e = 0;
10476
10477 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pillage_select);
10478
10479 if (e) {
10480 log_packet_detailed("'pillage_select' field error detected");
10481 }
10482
10483#ifdef FREECIV_JSON_CONNECTION
10484 field_addr.name = "steal_maps_reveals_all_cities";
10485#endif /* FREECIV_JSON_CONNECTION */
10486 e = 0;
10487
10488 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->steal_maps_reveals_all_cities);
10489
10490 if (e) {
10491 log_packet_detailed("'steal_maps_reveals_all_cities' field error detected");
10492 }
10493
10494#ifdef FREECIV_JSON_CONNECTION
10495 field_addr.name = "poison_empties_food_stock";
10496#endif /* FREECIV_JSON_CONNECTION */
10497 e = 0;
10498
10499 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->poison_empties_food_stock);
10500
10501 if (e) {
10502 log_packet_detailed("'poison_empties_food_stock' field error detected");
10503 }
10504
10505#ifdef FREECIV_JSON_CONNECTION
10506 field_addr.name = "tech_steal_allow_holes";
10507#endif /* FREECIV_JSON_CONNECTION */
10508 e = 0;
10509
10510 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_steal_allow_holes);
10511
10512 if (e) {
10513 log_packet_detailed("'tech_steal_allow_holes' field error detected");
10514 }
10515
10516#ifdef FREECIV_JSON_CONNECTION
10517 field_addr.name = "tech_trade_allow_holes";
10518#endif /* FREECIV_JSON_CONNECTION */
10519 e = 0;
10520
10521 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_allow_holes);
10522
10523 if (e) {
10524 log_packet_detailed("'tech_trade_allow_holes' field error detected");
10525 }
10526
10527#ifdef FREECIV_JSON_CONNECTION
10528 field_addr.name = "tech_trade_loss_allow_holes";
10529#endif /* FREECIV_JSON_CONNECTION */
10530 e = 0;
10531
10532 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_loss_allow_holes);
10533
10534 if (e) {
10535 log_packet_detailed("'tech_trade_loss_allow_holes' field error detected");
10536 }
10537
10538#ifdef FREECIV_JSON_CONNECTION
10539 field_addr.name = "tech_parasite_allow_holes";
10540#endif /* FREECIV_JSON_CONNECTION */
10541 e = 0;
10542
10543 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_parasite_allow_holes);
10544
10545 if (e) {
10546 log_packet_detailed("'tech_parasite_allow_holes' field error detected");
10547 }
10548
10549#ifdef FREECIV_JSON_CONNECTION
10550 field_addr.name = "tech_loss_allow_holes";
10551#endif /* FREECIV_JSON_CONNECTION */
10552 e = 0;
10553
10554 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_loss_allow_holes);
10555
10556 if (e) {
10557 log_packet_detailed("'tech_loss_allow_holes' field error detected");
10558 }
10559
10560#ifdef FREECIV_JSON_CONNECTION
10561 field_addr.name = "rapturedelay";
10562#endif /* FREECIV_JSON_CONNECTION */
10563 e = 0;
10564
10565 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
10566
10567 if (e) {
10568 log_packet_detailed("'rapturedelay' field error detected");
10569 }
10570
10571#ifdef FREECIV_JSON_CONNECTION
10572 field_addr.name = "disasters";
10573#endif /* FREECIV_JSON_CONNECTION */
10574 e = 0;
10575
10576 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
10577
10578 if (e) {
10579 log_packet_detailed("'disasters' field error detected");
10580 }
10581
10582#ifdef FREECIV_JSON_CONNECTION
10583 field_addr.name = "restrictinfra";
10584#endif /* FREECIV_JSON_CONNECTION */
10585 e = 0;
10586
10587 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->restrictinfra);
10588
10589 if (e) {
10590 log_packet_detailed("'restrictinfra' field error detected");
10591 }
10592
10593#ifdef FREECIV_JSON_CONNECTION
10594 field_addr.name = "unreachable_protects";
10595#endif /* FREECIV_JSON_CONNECTION */
10596 e = 0;
10597
10598 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unreachable_protects);
10599
10600 if (e) {
10601 log_packet_detailed("'unreachable_protects' field error detected");
10602 }
10603
10604#ifdef FREECIV_JSON_CONNECTION
10605 field_addr.name = "sciencebox";
10606#endif /* FREECIV_JSON_CONNECTION */
10607 e = 0;
10608
10609 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
10610
10611 if (e) {
10612 log_packet_detailed("'sciencebox' field error detected");
10613 }
10614
10615#ifdef FREECIV_JSON_CONNECTION
10616 field_addr.name = "shieldbox";
10617#endif /* FREECIV_JSON_CONNECTION */
10618 e = 0;
10619
10620 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
10621
10622 if (e) {
10623 log_packet_detailed("'shieldbox' field error detected");
10624 }
10625
10626#ifdef FREECIV_JSON_CONNECTION
10627 field_addr.name = "skill_level";
10628#endif /* FREECIV_JSON_CONNECTION */
10629 e = 0;
10630
10631 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
10632
10633 if (e) {
10634 log_packet_detailed("'skill_level' field error detected");
10635 }
10636
10637#ifdef FREECIV_JSON_CONNECTION
10638 field_addr.name = "victory_conditions";
10639#endif /* FREECIV_JSON_CONNECTION */
10640 e = 0;
10641
10642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
10643
10644 if (e) {
10645 log_packet_detailed("'victory_conditions' field error detected");
10646 }
10647
10648#ifdef FREECIV_JSON_CONNECTION
10649 field_addr.name = "team_pooled_research";
10650#endif /* FREECIV_JSON_CONNECTION */
10651 e = 0;
10652
10653 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->team_pooled_research);
10654
10655 if (e) {
10656 log_packet_detailed("'team_pooled_research' field error detected");
10657 }
10658
10659#ifdef FREECIV_JSON_CONNECTION
10660 field_addr.name = "tech";
10661#endif /* FREECIV_JSON_CONNECTION */
10662 e = 0;
10663
10664 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
10665
10666 if (e) {
10667 log_packet_detailed("'tech' field error detected");
10668 }
10669
10670#ifdef FREECIV_JSON_CONNECTION
10671 field_addr.name = "tech_cost_style";
10672#endif /* FREECIV_JSON_CONNECTION */
10673 e = 0;
10674
10675 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
10676
10677 if (e) {
10678 log_packet_detailed("'tech_cost_style' field error detected");
10679 }
10680
10681#ifdef FREECIV_JSON_CONNECTION
10682 field_addr.name = "tech_leakage";
10683#endif /* FREECIV_JSON_CONNECTION */
10684 e = 0;
10685
10686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
10687
10688 if (e) {
10689 log_packet_detailed("'tech_leakage' field error detected");
10690 }
10691
10692#ifdef FREECIV_JSON_CONNECTION
10693 field_addr.name = "tech_upkeep_divider";
10694#endif /* FREECIV_JSON_CONNECTION */
10695 e = 0;
10696
10697 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
10698
10699 if (e) {
10700 log_packet_detailed("'tech_upkeep_divider' field error detected");
10701 }
10702
10703#ifdef FREECIV_JSON_CONNECTION
10704 field_addr.name = "tech_upkeep_style";
10705#endif /* FREECIV_JSON_CONNECTION */
10706 e = 0;
10707
10708 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
10709
10710 if (e) {
10711 log_packet_detailed("'tech_upkeep_style' field error detected");
10712 }
10713
10714#ifdef FREECIV_JSON_CONNECTION
10715 field_addr.name = "techloss_forgiveness";
10716#endif /* FREECIV_JSON_CONNECTION */
10717 e = 0;
10718
10719 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
10720
10721 if (e) {
10722 log_packet_detailed("'techloss_forgiveness' field error detected");
10723 }
10724
10725#ifdef FREECIV_JSON_CONNECTION
10726 field_addr.name = "free_tech_method";
10727#endif /* FREECIV_JSON_CONNECTION */
10728 e = 0;
10729
10730 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
10731
10732 if (e) {
10733 log_packet_detailed("'free_tech_method' field error detected");
10734 }
10735
10736#ifdef FREECIV_JSON_CONNECTION
10737 field_addr.name = "gameloss_style";
10738#endif /* FREECIV_JSON_CONNECTION */
10739 e = 0;
10740
10741 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
10742
10743 if (e) {
10744 log_packet_detailed("'gameloss_style' field error detected");
10745 }
10746
10747#ifdef FREECIV_JSON_CONNECTION
10748 field_addr.name = "timeout";
10749#endif /* FREECIV_JSON_CONNECTION */
10750 e = 0;
10751
10752 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
10753
10754 if (e) {
10755 log_packet_detailed("'timeout' field error detected");
10756 }
10757
10758#ifdef FREECIV_JSON_CONNECTION
10759 field_addr.name = "first_timeout";
10760#endif /* FREECIV_JSON_CONNECTION */
10761 e = 0;
10762
10763 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
10764
10765 if (e) {
10766 log_packet_detailed("'first_timeout' field error detected");
10767 }
10768
10769#ifdef FREECIV_JSON_CONNECTION
10770 field_addr.name = "tired_attack";
10771#endif /* FREECIV_JSON_CONNECTION */
10772 e = 0;
10773
10774 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tired_attack);
10775
10776 if (e) {
10777 log_packet_detailed("'tired_attack' field error detected");
10778 }
10779
10780#ifdef FREECIV_JSON_CONNECTION
10781 field_addr.name = "trademindist";
10782#endif /* FREECIV_JSON_CONNECTION */
10783 e = 0;
10784
10785 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
10786
10787 if (e) {
10788 log_packet_detailed("'trademindist' field error detected");
10789 }
10790
10791#ifdef FREECIV_JSON_CONNECTION
10792 field_addr.name = "trade_revenue_style";
10793#endif /* FREECIV_JSON_CONNECTION */
10794 e = 0;
10795
10796 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
10797
10798 if (e) {
10799 log_packet_detailed("'trade_revenue_style' field error detected");
10800 }
10801
10802#ifdef FREECIV_JSON_CONNECTION
10803 field_addr.name = "trading_city";
10804#endif /* FREECIV_JSON_CONNECTION */
10805 e = 0;
10806
10807 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_city);
10808
10809 if (e) {
10810 log_packet_detailed("'trading_city' field error detected");
10811 }
10812
10813#ifdef FREECIV_JSON_CONNECTION
10814 field_addr.name = "trading_gold";
10815#endif /* FREECIV_JSON_CONNECTION */
10816 e = 0;
10817
10818 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_gold);
10819
10820 if (e) {
10821 log_packet_detailed("'trading_gold' field error detected");
10822 }
10823
10824#ifdef FREECIV_JSON_CONNECTION
10825 field_addr.name = "trading_tech";
10826#endif /* FREECIV_JSON_CONNECTION */
10827 e = 0;
10828
10829 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_tech);
10830
10831 if (e) {
10832 log_packet_detailed("'trading_tech' field error detected");
10833 }
10834
10835#ifdef FREECIV_JSON_CONNECTION
10836 field_addr.name = "turn";
10837#endif /* FREECIV_JSON_CONNECTION */
10838 e = 0;
10839
10840 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
10841
10842 if (e) {
10843 log_packet_detailed("'turn' field error detected");
10844 }
10845
10846#ifdef FREECIV_JSON_CONNECTION
10847 field_addr.name = "warminglevel";
10848#endif /* FREECIV_JSON_CONNECTION */
10849 e = 0;
10850
10851 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
10852
10853 if (e) {
10854 log_packet_detailed("'warminglevel' field error detected");
10855 }
10856
10857#ifdef FREECIV_JSON_CONNECTION
10858 field_addr.name = "year";
10859#endif /* FREECIV_JSON_CONNECTION */
10860 e = 0;
10861
10862 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
10863
10864 if (e) {
10865 log_packet_detailed("'year' field error detected");
10866 }
10867
10868#ifdef FREECIV_JSON_CONNECTION
10869 field_addr.name = "year_0_hack";
10870#endif /* FREECIV_JSON_CONNECTION */
10871 e = 0;
10872
10873 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->year_0_hack);
10874
10875 if (e) {
10876 log_packet_detailed("'year_0_hack' field error detected");
10877 }
10878
10879#ifdef FREECIV_JSON_CONNECTION
10880 field_addr.name = "top_cities_count";
10881#endif /* FREECIV_JSON_CONNECTION */
10882 e = 0;
10883
10884 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
10885
10886 if (e) {
10887 log_packet_detailed("'top_cities_count' field error detected");
10888 }
10889
10890#ifdef FREECIV_JSON_CONNECTION
10891 field_addr.name = "fragment_count";
10892#endif /* FREECIV_JSON_CONNECTION */
10893 e = 0;
10894
10895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
10896
10897 if (e) {
10898 log_packet_detailed("'fragment_count' field error detected");
10899 }
10900
10901#ifdef FREECIV_JSON_CONNECTION
10902 field_addr.name = "granularity";
10903#endif /* FREECIV_JSON_CONNECTION */
10904 e = 0;
10905
10906 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
10907
10908 if (e) {
10909 log_packet_detailed("'granularity' field error detected");
10910 }
10911
10912#ifdef FREECIV_JSON_CONNECTION
10913 field_addr.name = "small_wonder_visibility";
10914#endif /* FREECIV_JSON_CONNECTION */
10915 e = 0;
10916
10917 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
10918
10919 if (e) {
10920 log_packet_detailed("'small_wonder_visibility' field error detected");
10921 }
10922#endif /* FREECIV_DELTA_PROTOCOL */
10923
10925}
10926
10927int send_packet_game_info(struct connection *pc, const struct packet_game_info *packet)
10928{
10929 if (!pc->used) {
10930 log_error("WARNING: trying to send data to the closed connection %s",
10932 return -1;
10933 }
10934 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_INFO].packet != nullptr, -1,
10935 "Handler for PACKET_GAME_INFO not installed");
10936 return pc->phs.handlers->send[PACKET_GAME_INFO].packet(pc, packet);
10937}
10938
10939static inline void init_packet_calendar_info(struct packet_calendar_info *packet)
10940{
10941 memset(packet, 0, sizeof(*packet));
10942}
10943
10944#define free_packet_calendar_info(_packet) (void) 0
10945#define destroy_packet_calendar_info free
10946
10947#ifdef FREECIV_DELTA_PROTOCOL
10948#define hash_packet_calendar_info_100 hash_const
10949#define cmp_packet_calendar_info_100 cmp_const
10951#endif /* FREECIV_DELTA_PROTOCOL */
10952
10954{
10955#define FREE_PACKET_STRUCT(_packet) free_packet_calendar_info(_packet)
10957
10958#ifdef FREECIV_JSON_CONNECTION
10959 struct plocation field_addr;
10960 {
10961 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
10964 }
10965#endif /* FREECIV_JSON_CONNECTION */
10966
10967 log_packet_detailed("packet_calendar_info_100: got info about ()");
10968
10969#ifdef FREECIV_DELTA_PROTOCOL
10971 struct packet_calendar_info *old;
10972 struct genhash **hash = pc->phs.received + PACKET_CALENDAR_INFO;
10973
10974 if (nullptr == *hash) {
10976 nullptr, nullptr, nullptr, destroy_packet_calendar_info);
10977 }
10978
10979 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
10980 *real_packet = *old;
10981 } else {
10982 /* packet is already initialized empty */
10983 log_packet_detailed(" no old info");
10984 }
10985
10986#ifdef FREECIV_JSON_CONNECTION
10987 field_addr.name = "fields";
10988#endif /* FREECIV_JSON_CONNECTION */
10989 DIO_BV_GET(&din, &field_addr, fields);
10990
10991 if (BV_ISSET(fields, 0)) {
10992 log_packet_detailed(" got field 'positive_year_label'");
10993
10994#ifdef FREECIV_JSON_CONNECTION
10995 field_addr.name = "positive_year_label";
10996#endif /* FREECIV_JSON_CONNECTION */
10997
10998 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
10999 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
11000 }
11001 }
11002
11003 if (BV_ISSET(fields, 1)) {
11004 log_packet_detailed(" got field 'negative_year_label'");
11005
11006#ifdef FREECIV_JSON_CONNECTION
11007 field_addr.name = "negative_year_label";
11008#endif /* FREECIV_JSON_CONNECTION */
11009
11010 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
11011 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
11012 }
11013 }
11014
11015 if (BV_ISSET(fields, 2)) {
11016 log_packet_detailed(" got field 'calendar_fragments'");
11017
11018#ifdef FREECIV_JSON_CONNECTION
11019 field_addr.name = "calendar_fragments";
11020#endif /* FREECIV_JSON_CONNECTION */
11021
11022 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
11024 }
11025 }
11026
11027 if (BV_ISSET(fields, 3)) {
11028 log_packet_detailed(" got field 'calendar_fragment_name'");
11029
11030#ifdef FREECIV_JSON_CONNECTION
11031 field_addr.name = "calendar_fragment_name";
11032#endif /* FREECIV_JSON_CONNECTION */
11033
11034 {
11035 int i;
11036
11037
11038#ifdef FREECIV_JSON_CONNECTION
11039 /* Enter array. */
11040 field_addr.sub_location = plocation_elem_new(0);
11041#endif /* FREECIV_JSON_CONNECTION */
11042
11043 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11044#ifdef FREECIV_JSON_CONNECTION
11045 /* Next array element */
11046 field_addr.sub_location->number = i;
11047#endif /* FREECIV_JSON_CONNECTION */
11048
11049 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
11050 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
11051 }
11052 }
11053
11054#ifdef FREECIV_JSON_CONNECTION
11055 /* Exit array. */
11056 FC_FREE(field_addr.sub_location);
11057#endif /* FREECIV_JSON_CONNECTION */
11058 }
11059 }
11060
11061 real_packet->calendar_skip_0 = BV_ISSET(fields, 4);
11062
11063 if (nullptr == old) {
11064 old = fc_malloc(sizeof(*old));
11066 *old = *real_packet;
11068 } else {
11069 *old = *real_packet;
11070 }
11071
11072#else /* FREECIV_DELTA_PROTOCOL */
11073#ifdef FREECIV_JSON_CONNECTION
11074 field_addr.name = "positive_year_label";
11075#endif /* FREECIV_JSON_CONNECTION */
11076
11077 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
11078 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
11079 }
11080
11081#ifdef FREECIV_JSON_CONNECTION
11082 field_addr.name = "negative_year_label";
11083#endif /* FREECIV_JSON_CONNECTION */
11084
11085 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
11086 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
11087 }
11088
11089#ifdef FREECIV_JSON_CONNECTION
11090 field_addr.name = "calendar_fragments";
11091#endif /* FREECIV_JSON_CONNECTION */
11092
11093 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
11095 }
11096
11097#ifdef FREECIV_JSON_CONNECTION
11098 field_addr.name = "calendar_fragment_name";
11099#endif /* FREECIV_JSON_CONNECTION */
11100
11101 {
11102 int i;
11103
11104
11105#ifdef FREECIV_JSON_CONNECTION
11106 /* Enter array. */
11107 field_addr.sub_location = plocation_elem_new(0);
11108#endif /* FREECIV_JSON_CONNECTION */
11109
11110 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11111#ifdef FREECIV_JSON_CONNECTION
11112 /* Next array element */
11113 field_addr.sub_location->number = i;
11114#endif /* FREECIV_JSON_CONNECTION */
11115
11116 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
11117 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
11118 }
11119 }
11120
11121#ifdef FREECIV_JSON_CONNECTION
11122 /* Exit array. */
11123 FC_FREE(field_addr.sub_location);
11124#endif /* FREECIV_JSON_CONNECTION */
11125 }
11126
11127#ifdef FREECIV_JSON_CONNECTION
11128 field_addr.name = "calendar_skip_0";
11129#endif /* FREECIV_JSON_CONNECTION */
11130
11131 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->calendar_skip_0)) {
11132 RECEIVE_PACKET_FIELD_ERROR(calendar_skip_0);
11133 }
11134#endif /* FREECIV_DELTA_PROTOCOL */
11135
11137#undef FREE_PACKET_STRUCT
11138}
11139
11140static int send_packet_calendar_info_100(struct connection *pc, const struct packet_calendar_info *packet)
11141{
11142 const struct packet_calendar_info *real_packet = packet;
11143 int e;
11145
11146 log_packet_detailed("packet_calendar_info_100: sending info about ()");
11147
11148#ifdef FREECIV_DELTA_PROTOCOL
11150 struct packet_calendar_info *old;
11151 bool differ;
11152 int different = 0;
11153 struct genhash **hash = pc->phs.sent + PACKET_CALENDAR_INFO;
11154
11155 if (nullptr == *hash) {
11157 nullptr, nullptr, nullptr, destroy_packet_calendar_info);
11158 }
11159 BV_CLR_ALL(fields);
11160
11161 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11162 old = fc_malloc(sizeof(*old));
11163 /* temporary bitcopy just to insert correctly */
11164 *old = *real_packet;
11167 different = 1; /* Force to send. */
11168 }
11169
11170 differ = (strcmp(old->positive_year_label, real_packet->positive_year_label) != 0);
11171 if (differ) {
11172 different++;
11173 BV_SET(fields, 0);
11174 }
11175
11176 differ = (strcmp(old->negative_year_label, real_packet->negative_year_label) != 0);
11177 if (differ) {
11178 different++;
11179 BV_SET(fields, 1);
11180 }
11181
11182 differ = (old->calendar_fragments != real_packet->calendar_fragments);
11183 if (differ) {
11184 different++;
11185 BV_SET(fields, 2);
11186 }
11187
11188 differ = FALSE;
11189 {
11190 int i;
11191
11192 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11193 differ = (strcmp(old->calendar_fragment_name[i], real_packet->calendar_fragment_name[i]) != 0);
11194 if (differ) {
11195 break;
11196 }
11197 }
11198 }
11199 if (differ) {
11200 different++;
11201 BV_SET(fields, 3);
11202 }
11203
11204 differ = (old->calendar_skip_0 != real_packet->calendar_skip_0);
11205 if (differ) {
11206 different++;
11207 }
11208 /* folded into head */
11209 if (real_packet->calendar_skip_0) {
11210 BV_SET(fields, 4);
11211 }
11212
11213 if (different == 0) {
11214 log_packet_detailed(" no change -> discard");
11216 }
11217#endif /* FREECIV_DELTA_PROTOCOL */
11218
11219#ifdef FREECIV_JSON_CONNECTION
11220 struct plocation field_addr;
11221 {
11222 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11225 }
11226#endif /* FREECIV_JSON_CONNECTION */
11227
11228#ifdef FREECIV_DELTA_PROTOCOL
11229#ifdef FREECIV_JSON_CONNECTION
11230 field_addr.name = "fields";
11231#endif /* FREECIV_JSON_CONNECTION */
11232 e = 0;
11233 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11234 if (e) {
11235 log_packet_detailed("fields bitvector error detected");
11236 }
11237
11238 if (BV_ISSET(fields, 0)) {
11239 log_packet_detailed(" field 'positive_year_label' has changed");
11240
11241#ifdef FREECIV_JSON_CONNECTION
11242 field_addr.name = "positive_year_label";
11243#endif /* FREECIV_JSON_CONNECTION */
11244 e = 0;
11245
11246 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
11247
11248 if (e) {
11249 log_packet_detailed("'positive_year_label' field error detected");
11250 }
11251 }
11252
11253 if (BV_ISSET(fields, 1)) {
11254 log_packet_detailed(" field 'negative_year_label' has changed");
11255
11256#ifdef FREECIV_JSON_CONNECTION
11257 field_addr.name = "negative_year_label";
11258#endif /* FREECIV_JSON_CONNECTION */
11259 e = 0;
11260
11261 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
11262
11263 if (e) {
11264 log_packet_detailed("'negative_year_label' field error detected");
11265 }
11266 }
11267
11268 if (BV_ISSET(fields, 2)) {
11269 log_packet_detailed(" field 'calendar_fragments' has changed");
11270
11271#ifdef FREECIV_JSON_CONNECTION
11272 field_addr.name = "calendar_fragments";
11273#endif /* FREECIV_JSON_CONNECTION */
11274 e = 0;
11275
11276 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
11277
11278 if (e) {
11279 log_packet_detailed("'calendar_fragments' field error detected");
11280 }
11281 }
11282
11283 if (BV_ISSET(fields, 3)) {
11284 log_packet_detailed(" field 'calendar_fragment_name' has changed");
11285
11286#ifdef FREECIV_JSON_CONNECTION
11287 field_addr.name = "calendar_fragment_name";
11288#endif /* FREECIV_JSON_CONNECTION */
11289 e = 0;
11290
11291 {
11292 int i;
11293
11294#ifdef FREECIV_JSON_CONNECTION
11295 /* Create the array. */
11297
11298 /* Enter array. */
11299 field_addr.sub_location = plocation_elem_new(0);
11300#endif /* FREECIV_JSON_CONNECTION */
11301
11302 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11303#ifdef FREECIV_JSON_CONNECTION
11304 /* Next array element. */
11305 field_addr.sub_location->number = i;
11306#endif /* FREECIV_JSON_CONNECTION */
11307
11308 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
11309 }
11310
11311#ifdef FREECIV_JSON_CONNECTION
11312 /* Exit array. */
11313 FC_FREE(field_addr.sub_location);
11314#endif /* FREECIV_JSON_CONNECTION */
11315 }
11316
11317 if (e) {
11318 log_packet_detailed("'calendar_fragment_name' field error detected");
11319 }
11320 }
11321
11322 /* field 4 is folded into the header */
11323
11324 *old = *real_packet;
11325
11326#else /* FREECIV_DELTA_PROTOCOL */
11327#ifdef FREECIV_JSON_CONNECTION
11328 field_addr.name = "positive_year_label";
11329#endif /* FREECIV_JSON_CONNECTION */
11330 e = 0;
11331
11332 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
11333
11334 if (e) {
11335 log_packet_detailed("'positive_year_label' field error detected");
11336 }
11337
11338#ifdef FREECIV_JSON_CONNECTION
11339 field_addr.name = "negative_year_label";
11340#endif /* FREECIV_JSON_CONNECTION */
11341 e = 0;
11342
11343 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
11344
11345 if (e) {
11346 log_packet_detailed("'negative_year_label' field error detected");
11347 }
11348
11349#ifdef FREECIV_JSON_CONNECTION
11350 field_addr.name = "calendar_fragments";
11351#endif /* FREECIV_JSON_CONNECTION */
11352 e = 0;
11353
11354 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
11355
11356 if (e) {
11357 log_packet_detailed("'calendar_fragments' field error detected");
11358 }
11359
11360#ifdef FREECIV_JSON_CONNECTION
11361 field_addr.name = "calendar_fragment_name";
11362#endif /* FREECIV_JSON_CONNECTION */
11363 e = 0;
11364
11365 {
11366 int i;
11367
11368#ifdef FREECIV_JSON_CONNECTION
11369 /* Create the array. */
11371
11372 /* Enter array. */
11373 field_addr.sub_location = plocation_elem_new(0);
11374#endif /* FREECIV_JSON_CONNECTION */
11375
11376 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11377#ifdef FREECIV_JSON_CONNECTION
11378 /* Next array element. */
11379 field_addr.sub_location->number = i;
11380#endif /* FREECIV_JSON_CONNECTION */
11381
11382 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
11383 }
11384
11385#ifdef FREECIV_JSON_CONNECTION
11386 /* Exit array. */
11387 FC_FREE(field_addr.sub_location);
11388#endif /* FREECIV_JSON_CONNECTION */
11389 }
11390
11391 if (e) {
11392 log_packet_detailed("'calendar_fragment_name' field error detected");
11393 }
11394
11395#ifdef FREECIV_JSON_CONNECTION
11396 field_addr.name = "calendar_skip_0";
11397#endif /* FREECIV_JSON_CONNECTION */
11398 e = 0;
11399
11400 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->calendar_skip_0);
11401
11402 if (e) {
11403 log_packet_detailed("'calendar_skip_0' field error detected");
11404 }
11405#endif /* FREECIV_DELTA_PROTOCOL */
11406
11408}
11409
11411{
11412 if (!pc->used) {
11413 log_error("WARNING: trying to send data to the closed connection %s",
11415 return -1;
11416 }
11417 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet != nullptr, -1,
11418 "Handler for PACKET_CALENDAR_INFO not installed");
11419 return pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet(pc, packet);
11420}
11421
11422static inline void init_packet_timeout_info(struct packet_timeout_info *packet)
11423{
11424 memset(packet, 0, sizeof(*packet));
11425}
11426
11427#define free_packet_timeout_info(_packet) (void) 0
11428#define destroy_packet_timeout_info free
11429
11430#ifdef FREECIV_DELTA_PROTOCOL
11431#define hash_packet_timeout_info_100 hash_const
11432#define cmp_packet_timeout_info_100 cmp_const
11434#endif /* FREECIV_DELTA_PROTOCOL */
11435
11437{
11438#define FREE_PACKET_STRUCT(_packet) free_packet_timeout_info(_packet)
11440
11441#ifdef FREECIV_JSON_CONNECTION
11442 struct plocation field_addr;
11443 {
11444 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11447 }
11448#endif /* FREECIV_JSON_CONNECTION */
11449
11450 log_packet_detailed("packet_timeout_info_100: got info about ()");
11451
11452#ifdef FREECIV_DELTA_PROTOCOL
11454 struct packet_timeout_info *old;
11455 struct genhash **hash = pc->phs.received + PACKET_TIMEOUT_INFO;
11456
11457 if (nullptr == *hash) {
11459 nullptr, nullptr, nullptr, destroy_packet_timeout_info);
11460 }
11461
11462 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11463 *real_packet = *old;
11464 } else {
11465 /* packet is already initialized empty */
11466 log_packet_detailed(" no old info");
11467 }
11468
11469#ifdef FREECIV_JSON_CONNECTION
11470 field_addr.name = "fields";
11471#endif /* FREECIV_JSON_CONNECTION */
11472 DIO_BV_GET(&din, &field_addr, fields);
11473
11474 if (BV_ISSET(fields, 0)) {
11475 log_packet_detailed(" got field 'seconds_to_phasedone'");
11476
11477#ifdef FREECIV_JSON_CONNECTION
11478 field_addr.name = "seconds_to_phasedone";
11479#endif /* FREECIV_JSON_CONNECTION */
11480
11481 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
11482 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
11483 }
11484 }
11485
11486 if (BV_ISSET(fields, 1)) {
11487 log_packet_detailed(" got field 'last_turn_change_time'");
11488
11489#ifdef FREECIV_JSON_CONNECTION
11490 field_addr.name = "last_turn_change_time";
11491#endif /* FREECIV_JSON_CONNECTION */
11492
11493 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
11494 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
11495 }
11496 }
11497
11498 if (nullptr == old) {
11499 old = fc_malloc(sizeof(*old));
11501 *old = *real_packet;
11503 } else {
11504 *old = *real_packet;
11505 }
11506
11507#else /* FREECIV_DELTA_PROTOCOL */
11508#ifdef FREECIV_JSON_CONNECTION
11509 field_addr.name = "seconds_to_phasedone";
11510#endif /* FREECIV_JSON_CONNECTION */
11511
11512 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
11513 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
11514 }
11515
11516#ifdef FREECIV_JSON_CONNECTION
11517 field_addr.name = "last_turn_change_time";
11518#endif /* FREECIV_JSON_CONNECTION */
11519
11520 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
11521 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
11522 }
11523#endif /* FREECIV_DELTA_PROTOCOL */
11524
11526#undef FREE_PACKET_STRUCT
11527}
11528
11529static int send_packet_timeout_info_100(struct connection *pc, const struct packet_timeout_info *packet)
11530{
11531 const struct packet_timeout_info *real_packet = packet;
11532 int e;
11534
11535 log_packet_detailed("packet_timeout_info_100: sending info about ()");
11536
11537#ifdef FREECIV_DELTA_PROTOCOL
11539 struct packet_timeout_info *old;
11540 bool differ;
11541 struct genhash **hash = pc->phs.sent + PACKET_TIMEOUT_INFO;
11542
11543 if (nullptr == *hash) {
11545 nullptr, nullptr, nullptr, destroy_packet_timeout_info);
11546 }
11547 BV_CLR_ALL(fields);
11548
11549 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11550 old = fc_malloc(sizeof(*old));
11551 /* temporary bitcopy just to insert correctly */
11552 *old = *real_packet;
11555 }
11556
11557 differ = ((int) (old->seconds_to_phasedone * 100) != (int) (real_packet->seconds_to_phasedone * 100));
11558 if (differ) {
11559 BV_SET(fields, 0);
11560 }
11561
11562 differ = ((int) (old->last_turn_change_time * 100) != (int) (real_packet->last_turn_change_time * 100));
11563 if (differ) {
11564 BV_SET(fields, 1);
11565 }
11566#endif /* FREECIV_DELTA_PROTOCOL */
11567
11568#ifdef FREECIV_JSON_CONNECTION
11569 struct plocation field_addr;
11570 {
11571 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11574 }
11575#endif /* FREECIV_JSON_CONNECTION */
11576
11577#ifdef FREECIV_DELTA_PROTOCOL
11578#ifdef FREECIV_JSON_CONNECTION
11579 field_addr.name = "fields";
11580#endif /* FREECIV_JSON_CONNECTION */
11581 e = 0;
11582 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11583 if (e) {
11584 log_packet_detailed("fields bitvector error detected");
11585 }
11586
11587 if (BV_ISSET(fields, 0)) {
11588 log_packet_detailed(" field 'seconds_to_phasedone' has changed");
11589
11590#ifdef FREECIV_JSON_CONNECTION
11591 field_addr.name = "seconds_to_phasedone";
11592#endif /* FREECIV_JSON_CONNECTION */
11593 e = 0;
11594
11595 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->seconds_to_phasedone, 100);
11596
11597 if (e) {
11598 log_packet_detailed("'seconds_to_phasedone' field error detected");
11599 }
11600 }
11601
11602 if (BV_ISSET(fields, 1)) {
11603 log_packet_detailed(" field 'last_turn_change_time' has changed");
11604
11605#ifdef FREECIV_JSON_CONNECTION
11606 field_addr.name = "last_turn_change_time";
11607#endif /* FREECIV_JSON_CONNECTION */
11608 e = 0;
11609
11610 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
11611
11612 if (e) {
11613 log_packet_detailed("'last_turn_change_time' field error detected");
11614 }
11615 }
11616
11617 *old = *real_packet;
11618
11619#else /* FREECIV_DELTA_PROTOCOL */
11620#ifdef FREECIV_JSON_CONNECTION
11621 field_addr.name = "seconds_to_phasedone";
11622#endif /* FREECIV_JSON_CONNECTION */
11623 e = 0;
11624
11625 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->seconds_to_phasedone, 100);
11626
11627 if (e) {
11628 log_packet_detailed("'seconds_to_phasedone' field error detected");
11629 }
11630
11631#ifdef FREECIV_JSON_CONNECTION
11632 field_addr.name = "last_turn_change_time";
11633#endif /* FREECIV_JSON_CONNECTION */
11634 e = 0;
11635
11636 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
11637
11638 if (e) {
11639 log_packet_detailed("'last_turn_change_time' field error detected");
11640 }
11641#endif /* FREECIV_DELTA_PROTOCOL */
11642
11644}
11645
11647{
11648 if (!pc->used) {
11649 log_error("WARNING: trying to send data to the closed connection %s",
11651 return -1;
11652 }
11653 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet != nullptr, -1,
11654 "Handler for PACKET_TIMEOUT_INFO not installed");
11655 return pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet(pc, packet);
11656}
11657
11658static inline void init_packet_map_info(struct packet_map_info *packet)
11659{
11660 memset(packet, 0, sizeof(*packet));
11661}
11662
11663#define free_packet_map_info(_packet) (void) 0
11664#define destroy_packet_map_info free
11665
11666#ifdef FREECIV_DELTA_PROTOCOL
11667#define hash_packet_map_info_100 hash_const
11668#define cmp_packet_map_info_100 cmp_const
11670#endif /* FREECIV_DELTA_PROTOCOL */
11671
11673{
11674#define FREE_PACKET_STRUCT(_packet) free_packet_map_info(_packet)
11676
11677#ifdef FREECIV_JSON_CONNECTION
11678 struct plocation field_addr;
11679 {
11680 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11683 }
11684#endif /* FREECIV_JSON_CONNECTION */
11685
11686 log_packet_detailed("packet_map_info_100: got info about ()");
11687
11688#ifdef FREECIV_DELTA_PROTOCOL
11690 struct packet_map_info *old;
11691 struct genhash **hash = pc->phs.received + PACKET_MAP_INFO;
11692
11693 if (nullptr == *hash) {
11695 nullptr, nullptr, nullptr, destroy_packet_map_info);
11696 }
11697
11698 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11699 *real_packet = *old;
11700 } else {
11701 /* packet is already initialized empty */
11702 log_packet_detailed(" no old info");
11703 }
11704
11705#ifdef FREECIV_JSON_CONNECTION
11706 field_addr.name = "fields";
11707#endif /* FREECIV_JSON_CONNECTION */
11708 DIO_BV_GET(&din, &field_addr, fields);
11709
11710 if (BV_ISSET(fields, 0)) {
11711 log_packet_detailed(" got field 'xsize'");
11712
11713#ifdef FREECIV_JSON_CONNECTION
11714 field_addr.name = "xsize";
11715#endif /* FREECIV_JSON_CONNECTION */
11716
11717 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
11719 }
11720 }
11721
11722 if (BV_ISSET(fields, 1)) {
11723 log_packet_detailed(" got field 'ysize'");
11724
11725#ifdef FREECIV_JSON_CONNECTION
11726 field_addr.name = "ysize";
11727#endif /* FREECIV_JSON_CONNECTION */
11728
11729 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
11731 }
11732 }
11733
11734 if (BV_ISSET(fields, 2)) {
11735 log_packet_detailed(" got field 'topology_id'");
11736
11737#ifdef FREECIV_JSON_CONNECTION
11738 field_addr.name = "topology_id";
11739#endif /* FREECIV_JSON_CONNECTION */
11740
11741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
11742 RECEIVE_PACKET_FIELD_ERROR(topology_id);
11743 }
11744 }
11745
11746 if (BV_ISSET(fields, 3)) {
11747 log_packet_detailed(" got field 'wrap_id'");
11748
11749#ifdef FREECIV_JSON_CONNECTION
11750 field_addr.name = "wrap_id";
11751#endif /* FREECIV_JSON_CONNECTION */
11752
11753 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
11755 }
11756 }
11757
11758 if (BV_ISSET(fields, 4)) {
11759 log_packet_detailed(" got field 'north_latitude'");
11760
11761#ifdef FREECIV_JSON_CONNECTION
11762 field_addr.name = "north_latitude";
11763#endif /* FREECIV_JSON_CONNECTION */
11764
11765 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
11766 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
11767 }
11768 }
11769
11770 if (BV_ISSET(fields, 5)) {
11771 log_packet_detailed(" got field 'south_latitude'");
11772
11773#ifdef FREECIV_JSON_CONNECTION
11774 field_addr.name = "south_latitude";
11775#endif /* FREECIV_JSON_CONNECTION */
11776
11777 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
11778 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
11779 }
11780 }
11781
11782 real_packet->altitude_info = BV_ISSET(fields, 6);
11783
11784 if (nullptr == old) {
11785 old = fc_malloc(sizeof(*old));
11787 *old = *real_packet;
11789 } else {
11790 *old = *real_packet;
11791 }
11792
11793#else /* FREECIV_DELTA_PROTOCOL */
11794#ifdef FREECIV_JSON_CONNECTION
11795 field_addr.name = "xsize";
11796#endif /* FREECIV_JSON_CONNECTION */
11797
11798 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
11800 }
11801
11802#ifdef FREECIV_JSON_CONNECTION
11803 field_addr.name = "ysize";
11804#endif /* FREECIV_JSON_CONNECTION */
11805
11806 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
11808 }
11809
11810#ifdef FREECIV_JSON_CONNECTION
11811 field_addr.name = "topology_id";
11812#endif /* FREECIV_JSON_CONNECTION */
11813
11814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
11815 RECEIVE_PACKET_FIELD_ERROR(topology_id);
11816 }
11817
11818#ifdef FREECIV_JSON_CONNECTION
11819 field_addr.name = "wrap_id";
11820#endif /* FREECIV_JSON_CONNECTION */
11821
11822 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
11824 }
11825
11826#ifdef FREECIV_JSON_CONNECTION
11827 field_addr.name = "north_latitude";
11828#endif /* FREECIV_JSON_CONNECTION */
11829
11830 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
11831 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
11832 }
11833
11834#ifdef FREECIV_JSON_CONNECTION
11835 field_addr.name = "south_latitude";
11836#endif /* FREECIV_JSON_CONNECTION */
11837
11838 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
11839 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
11840 }
11841
11842#ifdef FREECIV_JSON_CONNECTION
11843 field_addr.name = "altitude_info";
11844#endif /* FREECIV_JSON_CONNECTION */
11845
11846 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->altitude_info)) {
11847 RECEIVE_PACKET_FIELD_ERROR(altitude_info);
11848 }
11849#endif /* FREECIV_DELTA_PROTOCOL */
11850
11852#undef FREE_PACKET_STRUCT
11853}
11854
11855static int send_packet_map_info_100(struct connection *pc, const struct packet_map_info *packet)
11856{
11857 const struct packet_map_info *real_packet = packet;
11858 int e;
11860
11861 log_packet_detailed("packet_map_info_100: sending info about ()");
11862
11863#ifdef FREECIV_DELTA_PROTOCOL
11865 struct packet_map_info *old;
11866 bool differ;
11867 struct genhash **hash = pc->phs.sent + PACKET_MAP_INFO;
11868
11869 if (nullptr == *hash) {
11871 nullptr, nullptr, nullptr, destroy_packet_map_info);
11872 }
11873 BV_CLR_ALL(fields);
11874
11875 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11876 old = fc_malloc(sizeof(*old));
11877 /* temporary bitcopy just to insert correctly */
11878 *old = *real_packet;
11881 }
11882
11883 differ = (old->xsize != real_packet->xsize);
11884 if (differ) {
11885 BV_SET(fields, 0);
11886 }
11887
11888 differ = (old->ysize != real_packet->ysize);
11889 if (differ) {
11890 BV_SET(fields, 1);
11891 }
11892
11893 differ = (old->topology_id != real_packet->topology_id);
11894 if (differ) {
11895 BV_SET(fields, 2);
11896 }
11897
11898 differ = (old->wrap_id != real_packet->wrap_id);
11899 if (differ) {
11900 BV_SET(fields, 3);
11901 }
11902
11903 differ = (old->north_latitude != real_packet->north_latitude);
11904 if (differ) {
11905 BV_SET(fields, 4);
11906 }
11907
11908 differ = (old->south_latitude != real_packet->south_latitude);
11909 if (differ) {
11910 BV_SET(fields, 5);
11911 }
11912
11913 /* folded into head */
11914 if (real_packet->altitude_info) {
11915 BV_SET(fields, 6);
11916 }
11917#endif /* FREECIV_DELTA_PROTOCOL */
11918
11919#ifdef FREECIV_JSON_CONNECTION
11920 struct plocation field_addr;
11921 {
11922 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11925 }
11926#endif /* FREECIV_JSON_CONNECTION */
11927
11928#ifdef FREECIV_DELTA_PROTOCOL
11929#ifdef FREECIV_JSON_CONNECTION
11930 field_addr.name = "fields";
11931#endif /* FREECIV_JSON_CONNECTION */
11932 e = 0;
11933 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11934 if (e) {
11935 log_packet_detailed("fields bitvector error detected");
11936 }
11937
11938 if (BV_ISSET(fields, 0)) {
11939 log_packet_detailed(" field 'xsize' has changed");
11940
11941#ifdef FREECIV_JSON_CONNECTION
11942 field_addr.name = "xsize";
11943#endif /* FREECIV_JSON_CONNECTION */
11944 e = 0;
11945
11946 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
11947
11948 if (e) {
11949 log_packet_detailed("'xsize' field error detected");
11950 }
11951 }
11952
11953 if (BV_ISSET(fields, 1)) {
11954 log_packet_detailed(" field 'ysize' has changed");
11955
11956#ifdef FREECIV_JSON_CONNECTION
11957 field_addr.name = "ysize";
11958#endif /* FREECIV_JSON_CONNECTION */
11959 e = 0;
11960
11961 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
11962
11963 if (e) {
11964 log_packet_detailed("'ysize' field error detected");
11965 }
11966 }
11967
11968 if (BV_ISSET(fields, 2)) {
11969 log_packet_detailed(" field 'topology_id' has changed");
11970
11971#ifdef FREECIV_JSON_CONNECTION
11972 field_addr.name = "topology_id";
11973#endif /* FREECIV_JSON_CONNECTION */
11974 e = 0;
11975
11976 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
11977
11978 if (e) {
11979 log_packet_detailed("'topology_id' field error detected");
11980 }
11981 }
11982
11983 if (BV_ISSET(fields, 3)) {
11984 log_packet_detailed(" field 'wrap_id' has changed");
11985
11986#ifdef FREECIV_JSON_CONNECTION
11987 field_addr.name = "wrap_id";
11988#endif /* FREECIV_JSON_CONNECTION */
11989 e = 0;
11990
11991 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
11992
11993 if (e) {
11994 log_packet_detailed("'wrap_id' field error detected");
11995 }
11996 }
11997
11998 if (BV_ISSET(fields, 4)) {
11999 log_packet_detailed(" field 'north_latitude' has changed");
12000
12001#ifdef FREECIV_JSON_CONNECTION
12002 field_addr.name = "north_latitude";
12003#endif /* FREECIV_JSON_CONNECTION */
12004 e = 0;
12005
12006 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
12007
12008 if (e) {
12009 log_packet_detailed("'north_latitude' field error detected");
12010 }
12011 }
12012
12013 if (BV_ISSET(fields, 5)) {
12014 log_packet_detailed(" field 'south_latitude' has changed");
12015
12016#ifdef FREECIV_JSON_CONNECTION
12017 field_addr.name = "south_latitude";
12018#endif /* FREECIV_JSON_CONNECTION */
12019 e = 0;
12020
12021 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
12022
12023 if (e) {
12024 log_packet_detailed("'south_latitude' field error detected");
12025 }
12026 }
12027
12028 /* field 6 is folded into the header */
12029
12030 *old = *real_packet;
12031
12032#else /* FREECIV_DELTA_PROTOCOL */
12033#ifdef FREECIV_JSON_CONNECTION
12034 field_addr.name = "xsize";
12035#endif /* FREECIV_JSON_CONNECTION */
12036 e = 0;
12037
12038 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
12039
12040 if (e) {
12041 log_packet_detailed("'xsize' field error detected");
12042 }
12043
12044#ifdef FREECIV_JSON_CONNECTION
12045 field_addr.name = "ysize";
12046#endif /* FREECIV_JSON_CONNECTION */
12047 e = 0;
12048
12049 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
12050
12051 if (e) {
12052 log_packet_detailed("'ysize' field error detected");
12053 }
12054
12055#ifdef FREECIV_JSON_CONNECTION
12056 field_addr.name = "topology_id";
12057#endif /* FREECIV_JSON_CONNECTION */
12058 e = 0;
12059
12060 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
12061
12062 if (e) {
12063 log_packet_detailed("'topology_id' field error detected");
12064 }
12065
12066#ifdef FREECIV_JSON_CONNECTION
12067 field_addr.name = "wrap_id";
12068#endif /* FREECIV_JSON_CONNECTION */
12069 e = 0;
12070
12071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
12072
12073 if (e) {
12074 log_packet_detailed("'wrap_id' field error detected");
12075 }
12076
12077#ifdef FREECIV_JSON_CONNECTION
12078 field_addr.name = "north_latitude";
12079#endif /* FREECIV_JSON_CONNECTION */
12080 e = 0;
12081
12082 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
12083
12084 if (e) {
12085 log_packet_detailed("'north_latitude' field error detected");
12086 }
12087
12088#ifdef FREECIV_JSON_CONNECTION
12089 field_addr.name = "south_latitude";
12090#endif /* FREECIV_JSON_CONNECTION */
12091 e = 0;
12092
12093 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
12094
12095 if (e) {
12096 log_packet_detailed("'south_latitude' field error detected");
12097 }
12098
12099#ifdef FREECIV_JSON_CONNECTION
12100 field_addr.name = "altitude_info";
12101#endif /* FREECIV_JSON_CONNECTION */
12102 e = 0;
12103
12104 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->altitude_info);
12105
12106 if (e) {
12107 log_packet_detailed("'altitude_info' field error detected");
12108 }
12109#endif /* FREECIV_DELTA_PROTOCOL */
12110
12112}
12113
12114int send_packet_map_info(struct connection *pc, const struct packet_map_info *packet)
12115{
12116 if (!pc->used) {
12117 log_error("WARNING: trying to send data to the closed connection %s",
12119 return -1;
12120 }
12121 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_MAP_INFO].packet != nullptr, -1,
12122 "Handler for PACKET_MAP_INFO not installed");
12123 return pc->phs.handlers->send[PACKET_MAP_INFO].packet(pc, packet);
12124}
12125
12126void lsend_packet_map_info(struct conn_list *dest, const struct packet_map_info *packet)
12127{
12128 conn_list_iterate(dest, pconn) {
12129 send_packet_map_info(pconn, packet);
12131}
12132
12133static inline void init_packet_nuke_tile_info(struct packet_nuke_tile_info *packet)
12134{
12135 memset(packet, 0, sizeof(*packet));
12136}
12137
12138#define free_packet_nuke_tile_info(_packet) (void) 0
12139#define destroy_packet_nuke_tile_info free
12140
12141#ifdef FREECIV_DELTA_PROTOCOL
12142#define hash_packet_nuke_tile_info_100 hash_const
12143#define cmp_packet_nuke_tile_info_100 cmp_const
12145#endif /* FREECIV_DELTA_PROTOCOL */
12146
12148{
12149#define FREE_PACKET_STRUCT(_packet) free_packet_nuke_tile_info(_packet)
12151
12152#ifdef FREECIV_JSON_CONNECTION
12153 struct plocation field_addr;
12154 {
12155 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12158 }
12159#endif /* FREECIV_JSON_CONNECTION */
12160
12161 log_packet_detailed("packet_nuke_tile_info_100: got info about ()");
12162
12163#ifdef FREECIV_DELTA_PROTOCOL
12165 struct packet_nuke_tile_info *old;
12166 struct genhash **hash = pc->phs.received + PACKET_NUKE_TILE_INFO;
12167
12168 if (nullptr == *hash) {
12170 nullptr, nullptr, nullptr, destroy_packet_nuke_tile_info);
12171 }
12172
12173 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12174 *real_packet = *old;
12175 } else {
12176 /* packet is already initialized empty */
12177 log_packet_detailed(" no old info");
12178 }
12179
12180#ifdef FREECIV_JSON_CONNECTION
12181 field_addr.name = "fields";
12182#endif /* FREECIV_JSON_CONNECTION */
12183 DIO_BV_GET(&din, &field_addr, fields);
12184
12185 if (BV_ISSET(fields, 0)) {
12186 log_packet_detailed(" got field 'tile'");
12187
12188#ifdef FREECIV_JSON_CONNECTION
12189 field_addr.name = "tile";
12190#endif /* FREECIV_JSON_CONNECTION */
12191
12192 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12194 }
12195 }
12196
12197 if (nullptr == old) {
12198 old = fc_malloc(sizeof(*old));
12200 *old = *real_packet;
12202 } else {
12203 *old = *real_packet;
12204 }
12205
12206#else /* FREECIV_DELTA_PROTOCOL */
12207#ifdef FREECIV_JSON_CONNECTION
12208 field_addr.name = "tile";
12209#endif /* FREECIV_JSON_CONNECTION */
12210
12211 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12213 }
12214#endif /* FREECIV_DELTA_PROTOCOL */
12215
12217#undef FREE_PACKET_STRUCT
12218}
12219
12221{
12222 const struct packet_nuke_tile_info *real_packet = packet;
12223 int e;
12225
12226 log_packet_detailed("packet_nuke_tile_info_100: sending info about ()");
12227
12228#ifdef FREECIV_DELTA_PROTOCOL
12230 struct packet_nuke_tile_info *old;
12231 bool differ;
12232 struct genhash **hash = pc->phs.sent + PACKET_NUKE_TILE_INFO;
12233
12234 if (nullptr == *hash) {
12236 nullptr, nullptr, nullptr, destroy_packet_nuke_tile_info);
12237 }
12238 BV_CLR_ALL(fields);
12239
12240 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12241 old = fc_malloc(sizeof(*old));
12242 /* temporary bitcopy just to insert correctly */
12243 *old = *real_packet;
12246 }
12247
12248 differ = (old->tile != real_packet->tile);
12249 if (differ) {
12250 BV_SET(fields, 0);
12251 }
12252#endif /* FREECIV_DELTA_PROTOCOL */
12253
12254#ifdef FREECIV_JSON_CONNECTION
12255 struct plocation field_addr;
12256 {
12257 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
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 e = 0;
12268 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12269 if (e) {
12270 log_packet_detailed("fields bitvector error detected");
12271 }
12272
12273 if (BV_ISSET(fields, 0)) {
12274 log_packet_detailed(" field 'tile' has changed");
12275
12276#ifdef FREECIV_JSON_CONNECTION
12277 field_addr.name = "tile";
12278#endif /* FREECIV_JSON_CONNECTION */
12279 e = 0;
12280
12281 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
12282
12283 if (e) {
12284 log_packet_detailed("'tile' field error detected");
12285 }
12286 }
12287
12288 *old = *real_packet;
12289
12290#else /* FREECIV_DELTA_PROTOCOL */
12291#ifdef FREECIV_JSON_CONNECTION
12292 field_addr.name = "tile";
12293#endif /* FREECIV_JSON_CONNECTION */
12294 e = 0;
12295
12296 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
12297
12298 if (e) {
12299 log_packet_detailed("'tile' field error detected");
12300 }
12301#endif /* FREECIV_DELTA_PROTOCOL */
12302
12304}
12305
12307{
12308 if (!pc->used) {
12309 log_error("WARNING: trying to send data to the closed connection %s",
12311 return -1;
12312 }
12313 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet != nullptr, -1,
12314 "Handler for PACKET_NUKE_TILE_INFO not installed");
12315 return pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet(pc, packet);
12316}
12317
12318void lsend_packet_nuke_tile_info(struct conn_list *dest, const struct packet_nuke_tile_info *packet)
12319{
12320 conn_list_iterate(dest, pconn) {
12323}
12324
12326{
12327 struct packet_nuke_tile_info packet, *real_packet = &packet;
12328
12330
12332}
12333
12335{
12336 struct packet_nuke_tile_info packet, *real_packet = &packet;
12337
12339
12341}
12342
12343static inline void init_packet_team_name_info(struct packet_team_name_info *packet)
12344{
12345 memset(packet, 0, sizeof(*packet));
12346}
12347
12348#define free_packet_team_name_info(_packet) (void) 0
12349#define destroy_packet_team_name_info free
12350
12351#ifdef FREECIV_DELTA_PROTOCOL
12353{
12354 const struct packet_team_name_info *key = (const struct packet_team_name_info *) vkey;
12355 genhash_val_t result = 0;
12356
12357 result += key->team_id;
12358
12359 result &= 0xFFFFFFFF;
12360 return result;
12361}
12362
12363static bool cmp_packet_team_name_info_100(const void *vkey1, const void *vkey2)
12364{
12365 const struct packet_team_name_info *old = (const struct packet_team_name_info *) vkey1;
12366 const struct packet_team_name_info *real_packet = (const struct packet_team_name_info *) vkey2;
12367 bool differ;
12368
12369 differ = (old->team_id != real_packet->team_id);
12370
12371 return !differ;
12372}
12374#endif /* FREECIV_DELTA_PROTOCOL */
12375
12377{
12378#define FREE_PACKET_STRUCT(_packet) free_packet_team_name_info(_packet)
12380
12381#ifdef FREECIV_JSON_CONNECTION
12382 struct plocation field_addr;
12383 {
12384 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12387 }
12388#endif /* FREECIV_JSON_CONNECTION */
12389
12390#ifdef FREECIV_JSON_CONNECTION
12391 field_addr.name = "team_id";
12392#endif /* FREECIV_JSON_CONNECTION */
12393
12394 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team_id)) {
12396 }
12397
12398 log_packet_detailed("packet_team_name_info_100: got info about (%d)",
12399 real_packet->team_id);
12400
12401#ifdef FREECIV_DELTA_PROTOCOL
12403 struct packet_team_name_info *old;
12404 struct genhash **hash = pc->phs.received + PACKET_TEAM_NAME_INFO;
12405
12406 if (nullptr == *hash) {
12408 nullptr, nullptr, nullptr, destroy_packet_team_name_info);
12409 }
12410
12411 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12412 *real_packet = *old;
12413 } else {
12414 /* packet is already initialized empty */
12415 log_packet_detailed(" no old info");
12416 }
12417
12418#ifdef FREECIV_JSON_CONNECTION
12419 field_addr.name = "fields";
12420#endif /* FREECIV_JSON_CONNECTION */
12421 DIO_BV_GET(&din, &field_addr, fields);
12422
12423 if (BV_ISSET(fields, 0)) {
12424 log_packet_detailed(" got field 'team_name'");
12425
12426#ifdef FREECIV_JSON_CONNECTION
12427 field_addr.name = "team_name";
12428#endif /* FREECIV_JSON_CONNECTION */
12429
12430 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
12431 RECEIVE_PACKET_FIELD_ERROR(team_name);
12432 }
12433 }
12434
12435 if (nullptr == old) {
12436 old = fc_malloc(sizeof(*old));
12438 *old = *real_packet;
12440 } else {
12441 *old = *real_packet;
12442 }
12443
12444#else /* FREECIV_DELTA_PROTOCOL */
12445#ifdef FREECIV_JSON_CONNECTION
12446 field_addr.name = "team_name";
12447#endif /* FREECIV_JSON_CONNECTION */
12448
12449 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
12450 RECEIVE_PACKET_FIELD_ERROR(team_name);
12451 }
12452#endif /* FREECIV_DELTA_PROTOCOL */
12453
12455#undef FREE_PACKET_STRUCT
12456}
12457
12459{
12460 const struct packet_team_name_info *real_packet = packet;
12461 int e;
12463
12464 log_packet_detailed("packet_team_name_info_100: sending info about (%d)",
12465 real_packet->team_id);
12466
12467#ifdef FREECIV_DELTA_PROTOCOL
12469 struct packet_team_name_info *old;
12470 bool differ;
12471 struct genhash **hash = pc->phs.sent + PACKET_TEAM_NAME_INFO;
12472
12473 if (nullptr == *hash) {
12475 nullptr, nullptr, nullptr, destroy_packet_team_name_info);
12476 }
12477 BV_CLR_ALL(fields);
12478
12479 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12480 old = fc_malloc(sizeof(*old));
12481 /* temporary bitcopy just to insert correctly */
12482 *old = *real_packet;
12485 }
12486
12487 differ = (strcmp(old->team_name, real_packet->team_name) != 0);
12488 if (differ) {
12489 BV_SET(fields, 0);
12490 }
12491#endif /* FREECIV_DELTA_PROTOCOL */
12492
12493#ifdef FREECIV_JSON_CONNECTION
12494 struct plocation field_addr;
12495 {
12496 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12499 }
12500#endif /* FREECIV_JSON_CONNECTION */
12501
12502#ifdef FREECIV_JSON_CONNECTION
12503 field_addr.name = "team_id";
12504#endif /* FREECIV_JSON_CONNECTION */
12505 e = 0;
12506
12507 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team_id);
12508
12509 if (e) {
12510 log_packet_detailed("'team_id' field error detected");
12511 }
12512
12513#ifdef FREECIV_DELTA_PROTOCOL
12514#ifdef FREECIV_JSON_CONNECTION
12515 field_addr.name = "fields";
12516#endif /* FREECIV_JSON_CONNECTION */
12517 e = 0;
12518 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12519 if (e) {
12520 log_packet_detailed("fields bitvector error detected");
12521 }
12522
12523 if (BV_ISSET(fields, 0)) {
12524 log_packet_detailed(" field 'team_name' has changed");
12525
12526#ifdef FREECIV_JSON_CONNECTION
12527 field_addr.name = "team_name";
12528#endif /* FREECIV_JSON_CONNECTION */
12529 e = 0;
12530
12531 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
12532
12533 if (e) {
12534 log_packet_detailed("'team_name' field error detected");
12535 }
12536 }
12537
12538 *old = *real_packet;
12539
12540#else /* FREECIV_DELTA_PROTOCOL */
12541#ifdef FREECIV_JSON_CONNECTION
12542 field_addr.name = "team_name";
12543#endif /* FREECIV_JSON_CONNECTION */
12544 e = 0;
12545
12546 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
12547
12548 if (e) {
12549 log_packet_detailed("'team_name' field error detected");
12550 }
12551#endif /* FREECIV_DELTA_PROTOCOL */
12552
12554}
12555
12557{
12558 if (!pc->used) {
12559 log_error("WARNING: trying to send data to the closed connection %s",
12561 return -1;
12562 }
12563 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet != nullptr, -1,
12564 "Handler for PACKET_TEAM_NAME_INFO not installed");
12565 return pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet(pc, packet);
12566}
12567
12568void lsend_packet_team_name_info(struct conn_list *dest, const struct packet_team_name_info *packet)
12569{
12570 conn_list_iterate(dest, pconn) {
12573}
12574
12576{
12577 memset(packet, 0, sizeof(*packet));
12578}
12579
12580#define free_packet_achievement_info(_packet) (void) 0
12581#define destroy_packet_achievement_info free
12582
12583#ifdef FREECIV_DELTA_PROTOCOL
12584#define hash_packet_achievement_info_100 hash_const
12585#define cmp_packet_achievement_info_100 cmp_const
12587#endif /* FREECIV_DELTA_PROTOCOL */
12588
12590{
12591#define FREE_PACKET_STRUCT(_packet) free_packet_achievement_info(_packet)
12593
12594#ifdef FREECIV_JSON_CONNECTION
12595 struct plocation field_addr;
12596 {
12597 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12600 }
12601#endif /* FREECIV_JSON_CONNECTION */
12602
12603 log_packet_detailed("packet_achievement_info_100: got info about ()");
12604
12605#ifdef FREECIV_DELTA_PROTOCOL
12608 struct genhash **hash = pc->phs.received + PACKET_ACHIEVEMENT_INFO;
12609
12610 if (nullptr == *hash) {
12612 nullptr, nullptr, nullptr, destroy_packet_achievement_info);
12613 }
12614
12615 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12616 *real_packet = *old;
12617 } else {
12618 /* packet is already initialized empty */
12619 log_packet_detailed(" no old info");
12620 }
12621
12622#ifdef FREECIV_JSON_CONNECTION
12623 field_addr.name = "fields";
12624#endif /* FREECIV_JSON_CONNECTION */
12625 DIO_BV_GET(&din, &field_addr, fields);
12626
12627 if (BV_ISSET(fields, 0)) {
12628 log_packet_detailed(" got field 'id'");
12629
12630#ifdef FREECIV_JSON_CONNECTION
12631 field_addr.name = "id";
12632#endif /* FREECIV_JSON_CONNECTION */
12633
12634 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
12636 }
12637 }
12638
12639 real_packet->gained = BV_ISSET(fields, 1);
12640
12641 real_packet->first = BV_ISSET(fields, 2);
12642
12643 if (nullptr == old) {
12644 old = fc_malloc(sizeof(*old));
12646 *old = *real_packet;
12648 } else {
12649 *old = *real_packet;
12650 }
12651
12652#else /* FREECIV_DELTA_PROTOCOL */
12653#ifdef FREECIV_JSON_CONNECTION
12654 field_addr.name = "id";
12655#endif /* FREECIV_JSON_CONNECTION */
12656
12657 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
12659 }
12660
12661#ifdef FREECIV_JSON_CONNECTION
12662 field_addr.name = "gained";
12663#endif /* FREECIV_JSON_CONNECTION */
12664
12665 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->gained)) {
12667 }
12668
12669#ifdef FREECIV_JSON_CONNECTION
12670 field_addr.name = "first";
12671#endif /* FREECIV_JSON_CONNECTION */
12672
12673 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->first)) {
12675 }
12676#endif /* FREECIV_DELTA_PROTOCOL */
12677
12679#undef FREE_PACKET_STRUCT
12680}
12681
12683{
12684 const struct packet_achievement_info *real_packet = packet;
12685 int e;
12687
12688 log_packet_detailed("packet_achievement_info_100: sending info about ()");
12689
12690#ifdef FREECIV_DELTA_PROTOCOL
12693 bool differ;
12694 struct genhash **hash = pc->phs.sent + PACKET_ACHIEVEMENT_INFO;
12695
12696 if (nullptr == *hash) {
12698 nullptr, nullptr, nullptr, destroy_packet_achievement_info);
12699 }
12700 BV_CLR_ALL(fields);
12701
12702 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12703 old = fc_malloc(sizeof(*old));
12704 /* temporary bitcopy just to insert correctly */
12705 *old = *real_packet;
12708 }
12709
12710 differ = (old->id != real_packet->id);
12711 if (differ) {
12712 BV_SET(fields, 0);
12713 }
12714
12715 /* folded into head */
12716 if (real_packet->gained) {
12717 BV_SET(fields, 1);
12718 }
12719
12720 /* folded into head */
12721 if (real_packet->first) {
12722 BV_SET(fields, 2);
12723 }
12724#endif /* FREECIV_DELTA_PROTOCOL */
12725
12726#ifdef FREECIV_JSON_CONNECTION
12727 struct plocation field_addr;
12728 {
12729 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12732 }
12733#endif /* FREECIV_JSON_CONNECTION */
12734
12735#ifdef FREECIV_DELTA_PROTOCOL
12736#ifdef FREECIV_JSON_CONNECTION
12737 field_addr.name = "fields";
12738#endif /* FREECIV_JSON_CONNECTION */
12739 e = 0;
12740 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12741 if (e) {
12742 log_packet_detailed("fields bitvector error detected");
12743 }
12744
12745 if (BV_ISSET(fields, 0)) {
12746 log_packet_detailed(" field 'id' has changed");
12747
12748#ifdef FREECIV_JSON_CONNECTION
12749 field_addr.name = "id";
12750#endif /* FREECIV_JSON_CONNECTION */
12751 e = 0;
12752
12753 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
12754
12755 if (e) {
12756 log_packet_detailed("'id' field error detected");
12757 }
12758 }
12759
12760 /* field 1 is folded into the header */
12761
12762 /* field 2 is folded into the header */
12763
12764 *old = *real_packet;
12765
12766#else /* FREECIV_DELTA_PROTOCOL */
12767#ifdef FREECIV_JSON_CONNECTION
12768 field_addr.name = "id";
12769#endif /* FREECIV_JSON_CONNECTION */
12770 e = 0;
12771
12772 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
12773
12774 if (e) {
12775 log_packet_detailed("'id' field error detected");
12776 }
12777
12778#ifdef FREECIV_JSON_CONNECTION
12779 field_addr.name = "gained";
12780#endif /* FREECIV_JSON_CONNECTION */
12781 e = 0;
12782
12783 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->gained);
12784
12785 if (e) {
12786 log_packet_detailed("'gained' field error detected");
12787 }
12788
12789#ifdef FREECIV_JSON_CONNECTION
12790 field_addr.name = "first";
12791#endif /* FREECIV_JSON_CONNECTION */
12792 e = 0;
12793
12794 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->first);
12795
12796 if (e) {
12797 log_packet_detailed("'first' field error detected");
12798 }
12799#endif /* FREECIV_DELTA_PROTOCOL */
12800
12802}
12803
12805{
12806 if (!pc->used) {
12807 log_error("WARNING: trying to send data to the closed connection %s",
12809 return -1;
12810 }
12811 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet != nullptr, -1,
12812 "Handler for PACKET_ACHIEVEMENT_INFO not installed");
12813 return pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet(pc, packet);
12814}
12815
12817{
12818 conn_list_iterate(dest, pconn) {
12821}
12822
12823static inline void init_packet_chat_msg(struct packet_chat_msg *packet)
12824{
12825 memset(packet, 0, sizeof(*packet));
12826}
12827
12828#define free_packet_chat_msg(_packet) (void) 0
12829#define destroy_packet_chat_msg free
12830
12831#ifdef FREECIV_DELTA_PROTOCOL
12832#define hash_packet_chat_msg_100 hash_const
12833#define cmp_packet_chat_msg_100 cmp_const
12835#endif /* FREECIV_DELTA_PROTOCOL */
12836
12838{
12839#define FREE_PACKET_STRUCT(_packet) free_packet_chat_msg(_packet)
12841
12842#ifdef FREECIV_JSON_CONNECTION
12843 struct plocation field_addr;
12844 {
12845 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12848 }
12849#endif /* FREECIV_JSON_CONNECTION */
12850
12851 log_packet_detailed("packet_chat_msg_100: got info about ()");
12852
12853#ifdef FREECIV_DELTA_PROTOCOL
12855 struct packet_chat_msg *old;
12856 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG;
12857
12858 if (nullptr == *hash) {
12860 nullptr, nullptr, nullptr, destroy_packet_chat_msg);
12861 }
12862
12863 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12864 *real_packet = *old;
12865 } else {
12866 /* packet is already initialized empty */
12867 log_packet_detailed(" no old info");
12868 }
12869
12870#ifdef FREECIV_JSON_CONNECTION
12871 field_addr.name = "fields";
12872#endif /* FREECIV_JSON_CONNECTION */
12873 DIO_BV_GET(&din, &field_addr, fields);
12874
12875 if (BV_ISSET(fields, 0)) {
12876 log_packet_detailed(" got field 'message'");
12877
12878#ifdef FREECIV_JSON_CONNECTION
12879 field_addr.name = "message";
12880#endif /* FREECIV_JSON_CONNECTION */
12881
12882 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12884 }
12885 }
12886
12887 if (BV_ISSET(fields, 1)) {
12888 log_packet_detailed(" got field 'tile'");
12889
12890#ifdef FREECIV_JSON_CONNECTION
12891 field_addr.name = "tile";
12892#endif /* FREECIV_JSON_CONNECTION */
12893
12894 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12896 }
12897 }
12898
12899 if (BV_ISSET(fields, 2)) {
12900 log_packet_detailed(" got field 'event'");
12901
12902#ifdef FREECIV_JSON_CONNECTION
12903 field_addr.name = "event";
12904#endif /* FREECIV_JSON_CONNECTION */
12905
12906 {
12907 int readin;
12908
12909 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
12911 }
12912 real_packet->event = readin;
12913 }
12914 }
12915
12916 if (BV_ISSET(fields, 3)) {
12917 log_packet_detailed(" got field 'turn'");
12918
12919#ifdef FREECIV_JSON_CONNECTION
12920 field_addr.name = "turn";
12921#endif /* FREECIV_JSON_CONNECTION */
12922
12923 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
12925 }
12926 }
12927
12928 if (BV_ISSET(fields, 4)) {
12929 log_packet_detailed(" got field 'phase'");
12930
12931#ifdef FREECIV_JSON_CONNECTION
12932 field_addr.name = "phase";
12933#endif /* FREECIV_JSON_CONNECTION */
12934
12935 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
12937 }
12938 }
12939
12940 if (BV_ISSET(fields, 5)) {
12941 log_packet_detailed(" got field 'conn_id'");
12942
12943#ifdef FREECIV_JSON_CONNECTION
12944 field_addr.name = "conn_id";
12945#endif /* FREECIV_JSON_CONNECTION */
12946
12947 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
12949 }
12950 }
12951
12952 if (nullptr == old) {
12953 old = fc_malloc(sizeof(*old));
12955 *old = *real_packet;
12957 } else {
12958 *old = *real_packet;
12959 }
12960
12961#else /* FREECIV_DELTA_PROTOCOL */
12962#ifdef FREECIV_JSON_CONNECTION
12963 field_addr.name = "message";
12964#endif /* FREECIV_JSON_CONNECTION */
12965
12966 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12968 }
12969
12970#ifdef FREECIV_JSON_CONNECTION
12971 field_addr.name = "tile";
12972#endif /* FREECIV_JSON_CONNECTION */
12973
12974 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12976 }
12977
12978#ifdef FREECIV_JSON_CONNECTION
12979 field_addr.name = "event";
12980#endif /* FREECIV_JSON_CONNECTION */
12981
12982 {
12983 int readin;
12984
12985 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
12987 }
12988 real_packet->event = readin;
12989 }
12990
12991#ifdef FREECIV_JSON_CONNECTION
12992 field_addr.name = "turn";
12993#endif /* FREECIV_JSON_CONNECTION */
12994
12995 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
12997 }
12998
12999#ifdef FREECIV_JSON_CONNECTION
13000 field_addr.name = "phase";
13001#endif /* FREECIV_JSON_CONNECTION */
13002
13003 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13005 }
13006
13007#ifdef FREECIV_JSON_CONNECTION
13008 field_addr.name = "conn_id";
13009#endif /* FREECIV_JSON_CONNECTION */
13010
13011 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13013 }
13014#endif /* FREECIV_DELTA_PROTOCOL */
13015
13017#undef FREE_PACKET_STRUCT
13018}
13019
13020static int send_packet_chat_msg_100(struct connection *pc, const struct packet_chat_msg *packet)
13021{
13022 const struct packet_chat_msg *real_packet = packet;
13023 int e;
13025
13026 log_packet_detailed("packet_chat_msg_100: sending info about ()");
13027
13028#ifdef FREECIV_DELTA_PROTOCOL
13030 struct packet_chat_msg *old;
13031 bool differ;
13032 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG;
13033
13034 if (nullptr == *hash) {
13036 nullptr, nullptr, nullptr, destroy_packet_chat_msg);
13037 }
13038 BV_CLR_ALL(fields);
13039
13040 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13041 old = fc_malloc(sizeof(*old));
13042 /* temporary bitcopy just to insert correctly */
13043 *old = *real_packet;
13046 }
13047
13048 differ = (strcmp(old->message, real_packet->message) != 0);
13049 if (differ) {
13050 BV_SET(fields, 0);
13051 }
13052
13053 differ = (old->tile != real_packet->tile);
13054 if (differ) {
13055 BV_SET(fields, 1);
13056 }
13057
13058 differ = (old->event != real_packet->event);
13059 if (differ) {
13060 BV_SET(fields, 2);
13061 }
13062
13063 differ = (old->turn != real_packet->turn);
13064 if (differ) {
13065 BV_SET(fields, 3);
13066 }
13067
13068 differ = (old->phase != real_packet->phase);
13069 if (differ) {
13070 BV_SET(fields, 4);
13071 }
13072
13073 differ = (old->conn_id != real_packet->conn_id);
13074 if (differ) {
13075 BV_SET(fields, 5);
13076 }
13077#endif /* FREECIV_DELTA_PROTOCOL */
13078
13079#ifdef FREECIV_JSON_CONNECTION
13080 struct plocation field_addr;
13081 {
13082 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13085 }
13086#endif /* FREECIV_JSON_CONNECTION */
13087
13088#ifdef FREECIV_DELTA_PROTOCOL
13089#ifdef FREECIV_JSON_CONNECTION
13090 field_addr.name = "fields";
13091#endif /* FREECIV_JSON_CONNECTION */
13092 e = 0;
13093 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13094 if (e) {
13095 log_packet_detailed("fields bitvector error detected");
13096 }
13097
13098 if (BV_ISSET(fields, 0)) {
13099 log_packet_detailed(" field 'message' has changed");
13100
13101#ifdef FREECIV_JSON_CONNECTION
13102 field_addr.name = "message";
13103#endif /* FREECIV_JSON_CONNECTION */
13104 e = 0;
13105
13106 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13107
13108 if (e) {
13109 log_packet_detailed("'message' field error detected");
13110 }
13111 }
13112
13113 if (BV_ISSET(fields, 1)) {
13114 log_packet_detailed(" field 'tile' has changed");
13115
13116#ifdef FREECIV_JSON_CONNECTION
13117 field_addr.name = "tile";
13118#endif /* FREECIV_JSON_CONNECTION */
13119 e = 0;
13120
13121 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13122
13123 if (e) {
13124 log_packet_detailed("'tile' field error detected");
13125 }
13126 }
13127
13128 if (BV_ISSET(fields, 2)) {
13129 log_packet_detailed(" field 'event' has changed");
13130
13131#ifdef FREECIV_JSON_CONNECTION
13132 field_addr.name = "event";
13133#endif /* FREECIV_JSON_CONNECTION */
13134 e = 0;
13135
13136 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13137
13138 if (e) {
13139 log_packet_detailed("'event' field error detected");
13140 }
13141 }
13142
13143 if (BV_ISSET(fields, 3)) {
13144 log_packet_detailed(" field 'turn' has changed");
13145
13146#ifdef FREECIV_JSON_CONNECTION
13147 field_addr.name = "turn";
13148#endif /* FREECIV_JSON_CONNECTION */
13149 e = 0;
13150
13151 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13152
13153 if (e) {
13154 log_packet_detailed("'turn' field error detected");
13155 }
13156 }
13157
13158 if (BV_ISSET(fields, 4)) {
13159 log_packet_detailed(" field 'phase' has changed");
13160
13161#ifdef FREECIV_JSON_CONNECTION
13162 field_addr.name = "phase";
13163#endif /* FREECIV_JSON_CONNECTION */
13164 e = 0;
13165
13166 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13167
13168 if (e) {
13169 log_packet_detailed("'phase' field error detected");
13170 }
13171 }
13172
13173 if (BV_ISSET(fields, 5)) {
13174 log_packet_detailed(" field 'conn_id' has changed");
13175
13176#ifdef FREECIV_JSON_CONNECTION
13177 field_addr.name = "conn_id";
13178#endif /* FREECIV_JSON_CONNECTION */
13179 e = 0;
13180
13181 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13182
13183 if (e) {
13184 log_packet_detailed("'conn_id' field error detected");
13185 }
13186 }
13187
13188 *old = *real_packet;
13189
13190#else /* FREECIV_DELTA_PROTOCOL */
13191#ifdef FREECIV_JSON_CONNECTION
13192 field_addr.name = "message";
13193#endif /* FREECIV_JSON_CONNECTION */
13194 e = 0;
13195
13196 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13197
13198 if (e) {
13199 log_packet_detailed("'message' field error detected");
13200 }
13201
13202#ifdef FREECIV_JSON_CONNECTION
13203 field_addr.name = "tile";
13204#endif /* FREECIV_JSON_CONNECTION */
13205 e = 0;
13206
13207 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13208
13209 if (e) {
13210 log_packet_detailed("'tile' field error detected");
13211 }
13212
13213#ifdef FREECIV_JSON_CONNECTION
13214 field_addr.name = "event";
13215#endif /* FREECIV_JSON_CONNECTION */
13216 e = 0;
13217
13218 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13219
13220 if (e) {
13221 log_packet_detailed("'event' field error detected");
13222 }
13223
13224#ifdef FREECIV_JSON_CONNECTION
13225 field_addr.name = "turn";
13226#endif /* FREECIV_JSON_CONNECTION */
13227 e = 0;
13228
13229 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13230
13231 if (e) {
13232 log_packet_detailed("'turn' field error detected");
13233 }
13234
13235#ifdef FREECIV_JSON_CONNECTION
13236 field_addr.name = "phase";
13237#endif /* FREECIV_JSON_CONNECTION */
13238 e = 0;
13239
13240 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13241
13242 if (e) {
13243 log_packet_detailed("'phase' field error detected");
13244 }
13245
13246#ifdef FREECIV_JSON_CONNECTION
13247 field_addr.name = "conn_id";
13248#endif /* FREECIV_JSON_CONNECTION */
13249 e = 0;
13250
13251 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13252
13253 if (e) {
13254 log_packet_detailed("'conn_id' field error detected");
13255 }
13256#endif /* FREECIV_DELTA_PROTOCOL */
13257
13259}
13260
13261int send_packet_chat_msg(struct connection *pc, const struct packet_chat_msg *packet)
13262{
13263 if (!pc->used) {
13264 log_error("WARNING: trying to send data to the closed connection %s",
13266 return -1;
13267 }
13268 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG].packet != nullptr, -1,
13269 "Handler for PACKET_CHAT_MSG not installed");
13270 return pc->phs.handlers->send[PACKET_CHAT_MSG].packet(pc, packet);
13271}
13272
13273void lsend_packet_chat_msg(struct conn_list *dest, const struct packet_chat_msg *packet)
13274{
13275 conn_list_iterate(dest, pconn) {
13276 send_packet_chat_msg(pconn, packet);
13278}
13279
13280static inline void init_packet_early_chat_msg(struct packet_early_chat_msg *packet)
13281{
13282 memset(packet, 0, sizeof(*packet));
13283}
13284
13285#define free_packet_early_chat_msg(_packet) (void) 0
13286#define destroy_packet_early_chat_msg free
13287
13288#ifdef FREECIV_DELTA_PROTOCOL
13289#define hash_packet_early_chat_msg_100 hash_const
13290#define cmp_packet_early_chat_msg_100 cmp_const
13292#endif /* FREECIV_DELTA_PROTOCOL */
13293
13295{
13296#define FREE_PACKET_STRUCT(_packet) free_packet_early_chat_msg(_packet)
13298
13299#ifdef FREECIV_JSON_CONNECTION
13300 struct plocation field_addr;
13301 {
13302 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13305 }
13306#endif /* FREECIV_JSON_CONNECTION */
13307
13308 log_packet_detailed("packet_early_chat_msg_100: got info about ()");
13309
13310#ifdef FREECIV_DELTA_PROTOCOL
13312 struct packet_early_chat_msg *old;
13313 struct genhash **hash = pc->phs.received + PACKET_EARLY_CHAT_MSG;
13314
13315 if (nullptr == *hash) {
13317 nullptr, nullptr, nullptr, destroy_packet_early_chat_msg);
13318 }
13319
13320 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13321 *real_packet = *old;
13322 } else {
13323 /* packet is already initialized empty */
13324 log_packet_detailed(" no old info");
13325 }
13326
13327#ifdef FREECIV_JSON_CONNECTION
13328 field_addr.name = "fields";
13329#endif /* FREECIV_JSON_CONNECTION */
13330 DIO_BV_GET(&din, &field_addr, fields);
13331
13332 if (BV_ISSET(fields, 0)) {
13333 log_packet_detailed(" got field 'message'");
13334
13335#ifdef FREECIV_JSON_CONNECTION
13336 field_addr.name = "message";
13337#endif /* FREECIV_JSON_CONNECTION */
13338
13339 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13341 }
13342 }
13343
13344 if (BV_ISSET(fields, 1)) {
13345 log_packet_detailed(" got field 'tile'");
13346
13347#ifdef FREECIV_JSON_CONNECTION
13348 field_addr.name = "tile";
13349#endif /* FREECIV_JSON_CONNECTION */
13350
13351 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13353 }
13354 }
13355
13356 if (BV_ISSET(fields, 2)) {
13357 log_packet_detailed(" got field 'event'");
13358
13359#ifdef FREECIV_JSON_CONNECTION
13360 field_addr.name = "event";
13361#endif /* FREECIV_JSON_CONNECTION */
13362
13363 {
13364 int readin;
13365
13366 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
13368 }
13369 real_packet->event = readin;
13370 }
13371 }
13372
13373 if (BV_ISSET(fields, 3)) {
13374 log_packet_detailed(" got field 'turn'");
13375
13376#ifdef FREECIV_JSON_CONNECTION
13377 field_addr.name = "turn";
13378#endif /* FREECIV_JSON_CONNECTION */
13379
13380 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
13382 }
13383 }
13384
13385 if (BV_ISSET(fields, 4)) {
13386 log_packet_detailed(" got field 'phase'");
13387
13388#ifdef FREECIV_JSON_CONNECTION
13389 field_addr.name = "phase";
13390#endif /* FREECIV_JSON_CONNECTION */
13391
13392 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13394 }
13395 }
13396
13397 if (BV_ISSET(fields, 5)) {
13398 log_packet_detailed(" got field 'conn_id'");
13399
13400#ifdef FREECIV_JSON_CONNECTION
13401 field_addr.name = "conn_id";
13402#endif /* FREECIV_JSON_CONNECTION */
13403
13404 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13406 }
13407 }
13408
13409 if (nullptr == old) {
13410 old = fc_malloc(sizeof(*old));
13412 *old = *real_packet;
13414 } else {
13415 *old = *real_packet;
13416 }
13417
13418#else /* FREECIV_DELTA_PROTOCOL */
13419#ifdef FREECIV_JSON_CONNECTION
13420 field_addr.name = "message";
13421#endif /* FREECIV_JSON_CONNECTION */
13422
13423 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13425 }
13426
13427#ifdef FREECIV_JSON_CONNECTION
13428 field_addr.name = "tile";
13429#endif /* FREECIV_JSON_CONNECTION */
13430
13431 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13433 }
13434
13435#ifdef FREECIV_JSON_CONNECTION
13436 field_addr.name = "event";
13437#endif /* FREECIV_JSON_CONNECTION */
13438
13439 {
13440 int readin;
13441
13442 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
13444 }
13445 real_packet->event = readin;
13446 }
13447
13448#ifdef FREECIV_JSON_CONNECTION
13449 field_addr.name = "turn";
13450#endif /* FREECIV_JSON_CONNECTION */
13451
13452 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
13454 }
13455
13456#ifdef FREECIV_JSON_CONNECTION
13457 field_addr.name = "phase";
13458#endif /* FREECIV_JSON_CONNECTION */
13459
13460 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13462 }
13463
13464#ifdef FREECIV_JSON_CONNECTION
13465 field_addr.name = "conn_id";
13466#endif /* FREECIV_JSON_CONNECTION */
13467
13468 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13470 }
13471#endif /* FREECIV_DELTA_PROTOCOL */
13472
13474#undef FREE_PACKET_STRUCT
13475}
13476
13478{
13479 const struct packet_early_chat_msg *real_packet = packet;
13480 int e;
13482
13483 log_packet_detailed("packet_early_chat_msg_100: sending info about ()");
13484
13485#ifdef FREECIV_DELTA_PROTOCOL
13487 struct packet_early_chat_msg *old;
13488 bool differ;
13489 struct genhash **hash = pc->phs.sent + PACKET_EARLY_CHAT_MSG;
13490
13491 if (nullptr == *hash) {
13493 nullptr, nullptr, nullptr, destroy_packet_early_chat_msg);
13494 }
13495 BV_CLR_ALL(fields);
13496
13497 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13498 old = fc_malloc(sizeof(*old));
13499 /* temporary bitcopy just to insert correctly */
13500 *old = *real_packet;
13503 }
13504
13505 differ = (strcmp(old->message, real_packet->message) != 0);
13506 if (differ) {
13507 BV_SET(fields, 0);
13508 }
13509
13510 differ = (old->tile != real_packet->tile);
13511 if (differ) {
13512 BV_SET(fields, 1);
13513 }
13514
13515 differ = (old->event != real_packet->event);
13516 if (differ) {
13517 BV_SET(fields, 2);
13518 }
13519
13520 differ = (old->turn != real_packet->turn);
13521 if (differ) {
13522 BV_SET(fields, 3);
13523 }
13524
13525 differ = (old->phase != real_packet->phase);
13526 if (differ) {
13527 BV_SET(fields, 4);
13528 }
13529
13530 differ = (old->conn_id != real_packet->conn_id);
13531 if (differ) {
13532 BV_SET(fields, 5);
13533 }
13534#endif /* FREECIV_DELTA_PROTOCOL */
13535
13536#ifdef FREECIV_JSON_CONNECTION
13537 struct plocation field_addr;
13538 {
13539 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13542 }
13543#endif /* FREECIV_JSON_CONNECTION */
13544
13545#ifdef FREECIV_DELTA_PROTOCOL
13546#ifdef FREECIV_JSON_CONNECTION
13547 field_addr.name = "fields";
13548#endif /* FREECIV_JSON_CONNECTION */
13549 e = 0;
13550 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13551 if (e) {
13552 log_packet_detailed("fields bitvector error detected");
13553 }
13554
13555 if (BV_ISSET(fields, 0)) {
13556 log_packet_detailed(" field 'message' has changed");
13557
13558#ifdef FREECIV_JSON_CONNECTION
13559 field_addr.name = "message";
13560#endif /* FREECIV_JSON_CONNECTION */
13561 e = 0;
13562
13563 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13564
13565 if (e) {
13566 log_packet_detailed("'message' field error detected");
13567 }
13568 }
13569
13570 if (BV_ISSET(fields, 1)) {
13571 log_packet_detailed(" field 'tile' has changed");
13572
13573#ifdef FREECIV_JSON_CONNECTION
13574 field_addr.name = "tile";
13575#endif /* FREECIV_JSON_CONNECTION */
13576 e = 0;
13577
13578 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13579
13580 if (e) {
13581 log_packet_detailed("'tile' field error detected");
13582 }
13583 }
13584
13585 if (BV_ISSET(fields, 2)) {
13586 log_packet_detailed(" field 'event' has changed");
13587
13588#ifdef FREECIV_JSON_CONNECTION
13589 field_addr.name = "event";
13590#endif /* FREECIV_JSON_CONNECTION */
13591 e = 0;
13592
13593 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13594
13595 if (e) {
13596 log_packet_detailed("'event' field error detected");
13597 }
13598 }
13599
13600 if (BV_ISSET(fields, 3)) {
13601 log_packet_detailed(" field 'turn' has changed");
13602
13603#ifdef FREECIV_JSON_CONNECTION
13604 field_addr.name = "turn";
13605#endif /* FREECIV_JSON_CONNECTION */
13606 e = 0;
13607
13608 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13609
13610 if (e) {
13611 log_packet_detailed("'turn' field error detected");
13612 }
13613 }
13614
13615 if (BV_ISSET(fields, 4)) {
13616 log_packet_detailed(" field 'phase' has changed");
13617
13618#ifdef FREECIV_JSON_CONNECTION
13619 field_addr.name = "phase";
13620#endif /* FREECIV_JSON_CONNECTION */
13621 e = 0;
13622
13623 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13624
13625 if (e) {
13626 log_packet_detailed("'phase' field error detected");
13627 }
13628 }
13629
13630 if (BV_ISSET(fields, 5)) {
13631 log_packet_detailed(" field 'conn_id' has changed");
13632
13633#ifdef FREECIV_JSON_CONNECTION
13634 field_addr.name = "conn_id";
13635#endif /* FREECIV_JSON_CONNECTION */
13636 e = 0;
13637
13638 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13639
13640 if (e) {
13641 log_packet_detailed("'conn_id' field error detected");
13642 }
13643 }
13644
13645 *old = *real_packet;
13646
13647#else /* FREECIV_DELTA_PROTOCOL */
13648#ifdef FREECIV_JSON_CONNECTION
13649 field_addr.name = "message";
13650#endif /* FREECIV_JSON_CONNECTION */
13651 e = 0;
13652
13653 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13654
13655 if (e) {
13656 log_packet_detailed("'message' field error detected");
13657 }
13658
13659#ifdef FREECIV_JSON_CONNECTION
13660 field_addr.name = "tile";
13661#endif /* FREECIV_JSON_CONNECTION */
13662 e = 0;
13663
13664 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13665
13666 if (e) {
13667 log_packet_detailed("'tile' field error detected");
13668 }
13669
13670#ifdef FREECIV_JSON_CONNECTION
13671 field_addr.name = "event";
13672#endif /* FREECIV_JSON_CONNECTION */
13673 e = 0;
13674
13675 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13676
13677 if (e) {
13678 log_packet_detailed("'event' field error detected");
13679 }
13680
13681#ifdef FREECIV_JSON_CONNECTION
13682 field_addr.name = "turn";
13683#endif /* FREECIV_JSON_CONNECTION */
13684 e = 0;
13685
13686 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13687
13688 if (e) {
13689 log_packet_detailed("'turn' field error detected");
13690 }
13691
13692#ifdef FREECIV_JSON_CONNECTION
13693 field_addr.name = "phase";
13694#endif /* FREECIV_JSON_CONNECTION */
13695 e = 0;
13696
13697 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13698
13699 if (e) {
13700 log_packet_detailed("'phase' field error detected");
13701 }
13702
13703#ifdef FREECIV_JSON_CONNECTION
13704 field_addr.name = "conn_id";
13705#endif /* FREECIV_JSON_CONNECTION */
13706 e = 0;
13707
13708 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13709
13710 if (e) {
13711 log_packet_detailed("'conn_id' field error detected");
13712 }
13713#endif /* FREECIV_DELTA_PROTOCOL */
13714
13716}
13717
13719{
13720 if (!pc->used) {
13721 log_error("WARNING: trying to send data to the closed connection %s",
13723 return -1;
13724 }
13725 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet != nullptr, -1,
13726 "Handler for PACKET_EARLY_CHAT_MSG not installed");
13727 return pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet(pc, packet);
13728}
13729
13730void lsend_packet_early_chat_msg(struct conn_list *dest, const struct packet_early_chat_msg *packet)
13731{
13732 conn_list_iterate(dest, pconn) {
13735}
13736
13737static inline void init_packet_chat_msg_req(struct packet_chat_msg_req *packet)
13738{
13739 memset(packet, 0, sizeof(*packet));
13740}
13741
13742#define free_packet_chat_msg_req(_packet) (void) 0
13743#define destroy_packet_chat_msg_req free
13744
13745#ifdef FREECIV_DELTA_PROTOCOL
13746#define hash_packet_chat_msg_req_100 hash_const
13747#define cmp_packet_chat_msg_req_100 cmp_const
13749#endif /* FREECIV_DELTA_PROTOCOL */
13750
13752{
13753#define FREE_PACKET_STRUCT(_packet) free_packet_chat_msg_req(_packet)
13755
13756#ifdef FREECIV_JSON_CONNECTION
13757 struct plocation field_addr;
13758 {
13759 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13762 }
13763#endif /* FREECIV_JSON_CONNECTION */
13764
13765 log_packet_detailed("packet_chat_msg_req_100: got info about ()");
13766
13767#ifdef FREECIV_DELTA_PROTOCOL
13769 struct packet_chat_msg_req *old;
13770 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG_REQ;
13771
13772 if (nullptr == *hash) {
13774 nullptr, nullptr, nullptr, destroy_packet_chat_msg_req);
13775 }
13776
13777 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13778 *real_packet = *old;
13779 } else {
13780 /* packet is already initialized empty */
13781 log_packet_detailed(" no old info");
13782 }
13783
13784#ifdef FREECIV_JSON_CONNECTION
13785 field_addr.name = "fields";
13786#endif /* FREECIV_JSON_CONNECTION */
13787 DIO_BV_GET(&din, &field_addr, fields);
13788
13789 if (BV_ISSET(fields, 0)) {
13790 log_packet_detailed(" got field 'message'");
13791
13792#ifdef FREECIV_JSON_CONNECTION
13793 field_addr.name = "message";
13794#endif /* FREECIV_JSON_CONNECTION */
13795
13796 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13798 }
13799 }
13800
13801 if (nullptr == old) {
13802 old = fc_malloc(sizeof(*old));
13804 *old = *real_packet;
13806 } else {
13807 *old = *real_packet;
13808 }
13809
13810#else /* FREECIV_DELTA_PROTOCOL */
13811#ifdef FREECIV_JSON_CONNECTION
13812 field_addr.name = "message";
13813#endif /* FREECIV_JSON_CONNECTION */
13814
13815 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13817 }
13818#endif /* FREECIV_DELTA_PROTOCOL */
13819
13821#undef FREE_PACKET_STRUCT
13822}
13823
13824static int send_packet_chat_msg_req_100(struct connection *pc, const struct packet_chat_msg_req *packet)
13825{
13826 const struct packet_chat_msg_req *real_packet = packet;
13827 int e;
13829
13830 log_packet_detailed("packet_chat_msg_req_100: sending info about ()");
13831
13832#ifdef FREECIV_DELTA_PROTOCOL
13834 struct packet_chat_msg_req *old;
13835 bool differ;
13836 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG_REQ;
13837
13838 if (nullptr == *hash) {
13840 nullptr, nullptr, nullptr, destroy_packet_chat_msg_req);
13841 }
13842 BV_CLR_ALL(fields);
13843
13844 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13845 old = fc_malloc(sizeof(*old));
13846 /* temporary bitcopy just to insert correctly */
13847 *old = *real_packet;
13850 }
13851
13852 differ = (strcmp(old->message, real_packet->message) != 0);
13853 if (differ) {
13854 BV_SET(fields, 0);
13855 }
13856#endif /* FREECIV_DELTA_PROTOCOL */
13857
13858#ifdef FREECIV_JSON_CONNECTION
13859 struct plocation field_addr;
13860 {
13861 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13864 }
13865#endif /* FREECIV_JSON_CONNECTION */
13866
13867#ifdef FREECIV_DELTA_PROTOCOL
13868#ifdef FREECIV_JSON_CONNECTION
13869 field_addr.name = "fields";
13870#endif /* FREECIV_JSON_CONNECTION */
13871 e = 0;
13872 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13873 if (e) {
13874 log_packet_detailed("fields bitvector error detected");
13875 }
13876
13877 if (BV_ISSET(fields, 0)) {
13878 log_packet_detailed(" field 'message' has changed");
13879
13880#ifdef FREECIV_JSON_CONNECTION
13881 field_addr.name = "message";
13882#endif /* FREECIV_JSON_CONNECTION */
13883 e = 0;
13884
13885 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
13886
13887 if (e) {
13888 log_packet_detailed("'message' field error detected");
13889 }
13890 }
13891
13892 *old = *real_packet;
13893
13894#else /* FREECIV_DELTA_PROTOCOL */
13895#ifdef FREECIV_JSON_CONNECTION
13896 field_addr.name = "message";
13897#endif /* FREECIV_JSON_CONNECTION */
13898 e = 0;
13899
13900 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
13901
13902 if (e) {
13903 log_packet_detailed("'message' field error detected");
13904 }
13905#endif /* FREECIV_DELTA_PROTOCOL */
13906
13908}
13909
13911{
13912 if (!pc->used) {
13913 log_error("WARNING: trying to send data to the closed connection %s",
13915 return -1;
13916 }
13917 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet != nullptr, -1,
13918 "Handler for PACKET_CHAT_MSG_REQ not installed");
13919 return pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet(pc, packet);
13920}
13921
13923{
13924 struct packet_chat_msg_req packet, *real_packet = &packet;
13925
13926 sz_strlcpy(real_packet->message, message);
13927
13929}
13930
13931static inline void init_packet_connect_msg(struct packet_connect_msg *packet)
13932{
13933 memset(packet, 0, sizeof(*packet));
13934}
13935
13936#define free_packet_connect_msg(_packet) (void) 0
13937#define destroy_packet_connect_msg free
13938
13939#ifdef FREECIV_DELTA_PROTOCOL
13940#define hash_packet_connect_msg_100 hash_const
13941#define cmp_packet_connect_msg_100 cmp_const
13943#endif /* FREECIV_DELTA_PROTOCOL */
13944
13946{
13947#define FREE_PACKET_STRUCT(_packet) free_packet_connect_msg(_packet)
13949
13950#ifdef FREECIV_JSON_CONNECTION
13951 struct plocation field_addr;
13952 {
13953 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13956 }
13957#endif /* FREECIV_JSON_CONNECTION */
13958
13959 log_packet_detailed("packet_connect_msg_100: got info about ()");
13960
13961#ifdef FREECIV_DELTA_PROTOCOL
13963 struct packet_connect_msg *old;
13964 struct genhash **hash = pc->phs.received + PACKET_CONNECT_MSG;
13965
13966 if (nullptr == *hash) {
13968 nullptr, nullptr, nullptr, destroy_packet_connect_msg);
13969 }
13970
13971 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13972 *real_packet = *old;
13973 } else {
13974 /* packet is already initialized empty */
13975 log_packet_detailed(" no old info");
13976 }
13977
13978#ifdef FREECIV_JSON_CONNECTION
13979 field_addr.name = "fields";
13980#endif /* FREECIV_JSON_CONNECTION */
13981 DIO_BV_GET(&din, &field_addr, fields);
13982
13983 if (BV_ISSET(fields, 0)) {
13984 log_packet_detailed(" got field 'message'");
13985
13986#ifdef FREECIV_JSON_CONNECTION
13987 field_addr.name = "message";
13988#endif /* FREECIV_JSON_CONNECTION */
13989
13990 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13992 }
13993 }
13994
13995 if (nullptr == old) {
13996 old = fc_malloc(sizeof(*old));
13998 *old = *real_packet;
14000 } else {
14001 *old = *real_packet;
14002 }
14003
14004#else /* FREECIV_DELTA_PROTOCOL */
14005#ifdef FREECIV_JSON_CONNECTION
14006 field_addr.name = "message";
14007#endif /* FREECIV_JSON_CONNECTION */
14008
14009 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
14011 }
14012#endif /* FREECIV_DELTA_PROTOCOL */
14013
14015#undef FREE_PACKET_STRUCT
14016}
14017
14018static int send_packet_connect_msg_100(struct connection *pc, const struct packet_connect_msg *packet)
14019{
14020 const struct packet_connect_msg *real_packet = packet;
14021 int e;
14023
14024 log_packet_detailed("packet_connect_msg_100: sending info about ()");
14025
14026#ifdef FREECIV_DELTA_PROTOCOL
14028 struct packet_connect_msg *old;
14029 bool differ;
14030 struct genhash **hash = pc->phs.sent + PACKET_CONNECT_MSG;
14031
14032 if (nullptr == *hash) {
14034 nullptr, nullptr, nullptr, destroy_packet_connect_msg);
14035 }
14036 BV_CLR_ALL(fields);
14037
14038 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14039 old = fc_malloc(sizeof(*old));
14040 /* temporary bitcopy just to insert correctly */
14041 *old = *real_packet;
14044 }
14045
14046 differ = (strcmp(old->message, real_packet->message) != 0);
14047 if (differ) {
14048 BV_SET(fields, 0);
14049 }
14050#endif /* FREECIV_DELTA_PROTOCOL */
14051
14052#ifdef FREECIV_JSON_CONNECTION
14053 struct plocation field_addr;
14054 {
14055 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14058 }
14059#endif /* FREECIV_JSON_CONNECTION */
14060
14061#ifdef FREECIV_DELTA_PROTOCOL
14062#ifdef FREECIV_JSON_CONNECTION
14063 field_addr.name = "fields";
14064#endif /* FREECIV_JSON_CONNECTION */
14065 e = 0;
14066 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14067 if (e) {
14068 log_packet_detailed("fields bitvector error detected");
14069 }
14070
14071 if (BV_ISSET(fields, 0)) {
14072 log_packet_detailed(" field 'message' has changed");
14073
14074#ifdef FREECIV_JSON_CONNECTION
14075 field_addr.name = "message";
14076#endif /* FREECIV_JSON_CONNECTION */
14077 e = 0;
14078
14079 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
14080
14081 if (e) {
14082 log_packet_detailed("'message' field error detected");
14083 }
14084 }
14085
14086 *old = *real_packet;
14087
14088#else /* FREECIV_DELTA_PROTOCOL */
14089#ifdef FREECIV_JSON_CONNECTION
14090 field_addr.name = "message";
14091#endif /* FREECIV_JSON_CONNECTION */
14092 e = 0;
14093
14094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
14095
14096 if (e) {
14097 log_packet_detailed("'message' field error detected");
14098 }
14099#endif /* FREECIV_DELTA_PROTOCOL */
14100
14102}
14103
14105{
14106 if (!pc->used) {
14107 log_error("WARNING: trying to send data to the closed connection %s",
14109 return -1;
14110 }
14111 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONNECT_MSG].packet != nullptr, -1,
14112 "Handler for PACKET_CONNECT_MSG not installed");
14113 return pc->phs.handlers->send[PACKET_CONNECT_MSG].packet(pc, packet);
14114}
14115
14117{
14118 struct packet_connect_msg packet, *real_packet = &packet;
14119
14120 sz_strlcpy(real_packet->message, message);
14121
14123}
14124
14125static inline void init_packet_server_info(struct packet_server_info *packet)
14126{
14127 memset(packet, 0, sizeof(*packet));
14128}
14129
14130#define free_packet_server_info(_packet) (void) 0
14131#define destroy_packet_server_info free
14132
14133#ifdef FREECIV_DELTA_PROTOCOL
14134#define hash_packet_server_info_100 hash_const
14135#define cmp_packet_server_info_100 cmp_const
14137#endif /* FREECIV_DELTA_PROTOCOL */
14138
14140{
14141#define FREE_PACKET_STRUCT(_packet) free_packet_server_info(_packet)
14143
14144#ifdef FREECIV_JSON_CONNECTION
14145 struct plocation field_addr;
14146 {
14147 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14150 }
14151#endif /* FREECIV_JSON_CONNECTION */
14152
14153 log_packet_detailed("packet_server_info_100: got info about ()");
14154
14155#ifdef FREECIV_DELTA_PROTOCOL
14157 struct packet_server_info *old;
14158 struct genhash **hash = pc->phs.received + PACKET_SERVER_INFO;
14159
14160 if (nullptr == *hash) {
14162 nullptr, nullptr, nullptr, destroy_packet_server_info);
14163 }
14164
14165 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14166 *real_packet = *old;
14167 } else {
14168 /* packet is already initialized empty */
14169 log_packet_detailed(" no old info");
14170 }
14171
14172#ifdef FREECIV_JSON_CONNECTION
14173 field_addr.name = "fields";
14174#endif /* FREECIV_JSON_CONNECTION */
14175 DIO_BV_GET(&din, &field_addr, fields);
14176
14177 if (BV_ISSET(fields, 0)) {
14178 log_packet_detailed(" got field 'version_label'");
14179
14180#ifdef FREECIV_JSON_CONNECTION
14181 field_addr.name = "version_label";
14182#endif /* FREECIV_JSON_CONNECTION */
14183
14184 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
14185 RECEIVE_PACKET_FIELD_ERROR(version_label);
14186 }
14187 }
14188
14189 if (BV_ISSET(fields, 1)) {
14190 log_packet_detailed(" got field 'major_version'");
14191
14192#ifdef FREECIV_JSON_CONNECTION
14193 field_addr.name = "major_version";
14194#endif /* FREECIV_JSON_CONNECTION */
14195
14196 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
14197 RECEIVE_PACKET_FIELD_ERROR(major_version);
14198 }
14199 }
14200
14201 if (BV_ISSET(fields, 2)) {
14202 log_packet_detailed(" got field 'minor_version'");
14203
14204#ifdef FREECIV_JSON_CONNECTION
14205 field_addr.name = "minor_version";
14206#endif /* FREECIV_JSON_CONNECTION */
14207
14208 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
14209 RECEIVE_PACKET_FIELD_ERROR(minor_version);
14210 }
14211 }
14212
14213 if (BV_ISSET(fields, 3)) {
14214 log_packet_detailed(" got field 'patch_version'");
14215
14216#ifdef FREECIV_JSON_CONNECTION
14217 field_addr.name = "patch_version";
14218#endif /* FREECIV_JSON_CONNECTION */
14219
14220 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
14221 RECEIVE_PACKET_FIELD_ERROR(patch_version);
14222 }
14223 }
14224
14225 if (BV_ISSET(fields, 4)) {
14226 log_packet_detailed(" got field 'emerg_version'");
14227
14228#ifdef FREECIV_JSON_CONNECTION
14229 field_addr.name = "emerg_version";
14230#endif /* FREECIV_JSON_CONNECTION */
14231
14232 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
14233 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
14234 }
14235 }
14236
14237 if (nullptr == old) {
14238 old = fc_malloc(sizeof(*old));
14240 *old = *real_packet;
14242 } else {
14243 *old = *real_packet;
14244 }
14245
14246#else /* FREECIV_DELTA_PROTOCOL */
14247#ifdef FREECIV_JSON_CONNECTION
14248 field_addr.name = "version_label";
14249#endif /* FREECIV_JSON_CONNECTION */
14250
14251 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
14252 RECEIVE_PACKET_FIELD_ERROR(version_label);
14253 }
14254
14255#ifdef FREECIV_JSON_CONNECTION
14256 field_addr.name = "major_version";
14257#endif /* FREECIV_JSON_CONNECTION */
14258
14259 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
14260 RECEIVE_PACKET_FIELD_ERROR(major_version);
14261 }
14262
14263#ifdef FREECIV_JSON_CONNECTION
14264 field_addr.name = "minor_version";
14265#endif /* FREECIV_JSON_CONNECTION */
14266
14267 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
14268 RECEIVE_PACKET_FIELD_ERROR(minor_version);
14269 }
14270
14271#ifdef FREECIV_JSON_CONNECTION
14272 field_addr.name = "patch_version";
14273#endif /* FREECIV_JSON_CONNECTION */
14274
14275 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
14276 RECEIVE_PACKET_FIELD_ERROR(patch_version);
14277 }
14278
14279#ifdef FREECIV_JSON_CONNECTION
14280 field_addr.name = "emerg_version";
14281#endif /* FREECIV_JSON_CONNECTION */
14282
14283 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
14284 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
14285 }
14286#endif /* FREECIV_DELTA_PROTOCOL */
14287
14289#undef FREE_PACKET_STRUCT
14290}
14291
14292static int send_packet_server_info_100(struct connection *pc, const struct packet_server_info *packet)
14293{
14294 const struct packet_server_info *real_packet = packet;
14295 int e;
14297
14298 log_packet_detailed("packet_server_info_100: sending info about ()");
14299
14300#ifdef FREECIV_DELTA_PROTOCOL
14302 struct packet_server_info *old;
14303 bool differ;
14304 struct genhash **hash = pc->phs.sent + PACKET_SERVER_INFO;
14305
14306 if (nullptr == *hash) {
14308 nullptr, nullptr, nullptr, destroy_packet_server_info);
14309 }
14310 BV_CLR_ALL(fields);
14311
14312 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14313 old = fc_malloc(sizeof(*old));
14314 /* temporary bitcopy just to insert correctly */
14315 *old = *real_packet;
14318 }
14319
14320 differ = (strcmp(old->version_label, real_packet->version_label) != 0);
14321 if (differ) {
14322 BV_SET(fields, 0);
14323 }
14324
14325 differ = (old->major_version != real_packet->major_version);
14326 if (differ) {
14327 BV_SET(fields, 1);
14328 }
14329
14330 differ = (old->minor_version != real_packet->minor_version);
14331 if (differ) {
14332 BV_SET(fields, 2);
14333 }
14334
14335 differ = (old->patch_version != real_packet->patch_version);
14336 if (differ) {
14337 BV_SET(fields, 3);
14338 }
14339
14340 differ = (old->emerg_version != real_packet->emerg_version);
14341 if (differ) {
14342 BV_SET(fields, 4);
14343 }
14344#endif /* FREECIV_DELTA_PROTOCOL */
14345
14346#ifdef FREECIV_JSON_CONNECTION
14347 struct plocation field_addr;
14348 {
14349 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14352 }
14353#endif /* FREECIV_JSON_CONNECTION */
14354
14355#ifdef FREECIV_DELTA_PROTOCOL
14356#ifdef FREECIV_JSON_CONNECTION
14357 field_addr.name = "fields";
14358#endif /* FREECIV_JSON_CONNECTION */
14359 e = 0;
14360 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14361 if (e) {
14362 log_packet_detailed("fields bitvector error detected");
14363 }
14364
14365 if (BV_ISSET(fields, 0)) {
14366 log_packet_detailed(" field 'version_label' has changed");
14367
14368#ifdef FREECIV_JSON_CONNECTION
14369 field_addr.name = "version_label";
14370#endif /* FREECIV_JSON_CONNECTION */
14371 e = 0;
14372
14373 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
14374
14375 if (e) {
14376 log_packet_detailed("'version_label' field error detected");
14377 }
14378 }
14379
14380 if (BV_ISSET(fields, 1)) {
14381 log_packet_detailed(" field 'major_version' has changed");
14382
14383#ifdef FREECIV_JSON_CONNECTION
14384 field_addr.name = "major_version";
14385#endif /* FREECIV_JSON_CONNECTION */
14386 e = 0;
14387
14388 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
14389
14390 if (e) {
14391 log_packet_detailed("'major_version' field error detected");
14392 }
14393 }
14394
14395 if (BV_ISSET(fields, 2)) {
14396 log_packet_detailed(" field 'minor_version' has changed");
14397
14398#ifdef FREECIV_JSON_CONNECTION
14399 field_addr.name = "minor_version";
14400#endif /* FREECIV_JSON_CONNECTION */
14401 e = 0;
14402
14403 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
14404
14405 if (e) {
14406 log_packet_detailed("'minor_version' field error detected");
14407 }
14408 }
14409
14410 if (BV_ISSET(fields, 3)) {
14411 log_packet_detailed(" field 'patch_version' has changed");
14412
14413#ifdef FREECIV_JSON_CONNECTION
14414 field_addr.name = "patch_version";
14415#endif /* FREECIV_JSON_CONNECTION */
14416 e = 0;
14417
14418 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
14419
14420 if (e) {
14421 log_packet_detailed("'patch_version' field error detected");
14422 }
14423 }
14424
14425 if (BV_ISSET(fields, 4)) {
14426 log_packet_detailed(" field 'emerg_version' has changed");
14427
14428#ifdef FREECIV_JSON_CONNECTION
14429 field_addr.name = "emerg_version";
14430#endif /* FREECIV_JSON_CONNECTION */
14431 e = 0;
14432
14433 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
14434
14435 if (e) {
14436 log_packet_detailed("'emerg_version' field error detected");
14437 }
14438 }
14439
14440 *old = *real_packet;
14441
14442#else /* FREECIV_DELTA_PROTOCOL */
14443#ifdef FREECIV_JSON_CONNECTION
14444 field_addr.name = "version_label";
14445#endif /* FREECIV_JSON_CONNECTION */
14446 e = 0;
14447
14448 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
14449
14450 if (e) {
14451 log_packet_detailed("'version_label' field error detected");
14452 }
14453
14454#ifdef FREECIV_JSON_CONNECTION
14455 field_addr.name = "major_version";
14456#endif /* FREECIV_JSON_CONNECTION */
14457 e = 0;
14458
14459 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
14460
14461 if (e) {
14462 log_packet_detailed("'major_version' field error detected");
14463 }
14464
14465#ifdef FREECIV_JSON_CONNECTION
14466 field_addr.name = "minor_version";
14467#endif /* FREECIV_JSON_CONNECTION */
14468 e = 0;
14469
14470 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
14471
14472 if (e) {
14473 log_packet_detailed("'minor_version' field error detected");
14474 }
14475
14476#ifdef FREECIV_JSON_CONNECTION
14477 field_addr.name = "patch_version";
14478#endif /* FREECIV_JSON_CONNECTION */
14479 e = 0;
14480
14481 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
14482
14483 if (e) {
14484 log_packet_detailed("'patch_version' field error detected");
14485 }
14486
14487#ifdef FREECIV_JSON_CONNECTION
14488 field_addr.name = "emerg_version";
14489#endif /* FREECIV_JSON_CONNECTION */
14490 e = 0;
14491
14492 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
14493
14494 if (e) {
14495 log_packet_detailed("'emerg_version' field error detected");
14496 }
14497#endif /* FREECIV_DELTA_PROTOCOL */
14498
14500}
14501
14503{
14504 if (!pc->used) {
14505 log_error("WARNING: trying to send data to the closed connection %s",
14507 return -1;
14508 }
14509 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_INFO].packet != nullptr, -1,
14510 "Handler for PACKET_SERVER_INFO not installed");
14511 return pc->phs.handlers->send[PACKET_SERVER_INFO].packet(pc, packet);
14512}
14513
14514int dsend_packet_server_info(struct connection *pc, const char *version_label, int major_version, int minor_version, int patch_version, int emerg_version)
14515{
14516 struct packet_server_info packet, *real_packet = &packet;
14517
14518 sz_strlcpy(real_packet->version_label, version_label);
14519 real_packet->major_version = major_version;
14520 real_packet->minor_version = minor_version;
14521 real_packet->patch_version = patch_version;
14522 real_packet->emerg_version = emerg_version;
14523
14525}
14526
14527static inline void init_packet_city_remove(struct packet_city_remove *packet)
14528{
14529 memset(packet, 0, sizeof(*packet));
14530}
14531
14532#define free_packet_city_remove(_packet) (void) 0
14533#define destroy_packet_city_remove free
14534
14535#ifdef FREECIV_DELTA_PROTOCOL
14536#define hash_packet_city_remove_100 hash_const
14537#define cmp_packet_city_remove_100 cmp_const
14539#endif /* FREECIV_DELTA_PROTOCOL */
14540
14542{
14543#define FREE_PACKET_STRUCT(_packet) free_packet_city_remove(_packet)
14545
14546#ifdef FREECIV_JSON_CONNECTION
14547 struct plocation field_addr;
14548 {
14549 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14552 }
14553#endif /* FREECIV_JSON_CONNECTION */
14554
14555 log_packet_detailed("packet_city_remove_100: got info about ()");
14556
14557#ifdef FREECIV_DELTA_PROTOCOL
14559 struct packet_city_remove *old;
14560 struct genhash **hash = pc->phs.received + PACKET_CITY_REMOVE;
14561
14562 if (nullptr == *hash) {
14564 nullptr, nullptr, nullptr, destroy_packet_city_remove);
14565 }
14566
14567 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14568 *real_packet = *old;
14569 } else {
14570 /* packet is already initialized empty */
14571 log_packet_detailed(" no old info");
14572 }
14573
14574#ifdef FREECIV_JSON_CONNECTION
14575 field_addr.name = "fields";
14576#endif /* FREECIV_JSON_CONNECTION */
14577 DIO_BV_GET(&din, &field_addr, fields);
14578
14579 if (BV_ISSET(fields, 0)) {
14580 log_packet_detailed(" got field 'city_id'");
14581
14582#ifdef FREECIV_JSON_CONNECTION
14583 field_addr.name = "city_id";
14584#endif /* FREECIV_JSON_CONNECTION */
14585
14586 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
14588 }
14589 }
14590
14591 if (nullptr == old) {
14592 old = fc_malloc(sizeof(*old));
14594 *old = *real_packet;
14596 } else {
14597 *old = *real_packet;
14598 }
14599
14600 hash = pc->phs.received + PACKET_CITY_INFO;
14601 if (nullptr != *hash) {
14603 }
14604
14605 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
14606 if (nullptr != *hash) {
14608 }
14609
14610 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
14611 if (nullptr != *hash) {
14613 }
14614
14615 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
14616 if (nullptr != *hash) {
14618 }
14619
14620 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
14621 if (nullptr != *hash) {
14623 }
14624
14625#else /* FREECIV_DELTA_PROTOCOL */
14626#ifdef FREECIV_JSON_CONNECTION
14627 field_addr.name = "city_id";
14628#endif /* FREECIV_JSON_CONNECTION */
14629
14630 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
14632 }
14633#endif /* FREECIV_DELTA_PROTOCOL */
14634
14636#undef FREE_PACKET_STRUCT
14637}
14638
14639static int send_packet_city_remove_100(struct connection *pc, const struct packet_city_remove *packet)
14640{
14641 const struct packet_city_remove *real_packet = packet;
14642 int e;
14644
14645 log_packet_detailed("packet_city_remove_100: sending info about ()");
14646
14647#ifdef FREECIV_DELTA_PROTOCOL
14649 struct packet_city_remove *old;
14650 bool differ;
14651 struct genhash **hash = pc->phs.sent + PACKET_CITY_REMOVE;
14652
14653 if (nullptr == *hash) {
14655 nullptr, nullptr, nullptr, destroy_packet_city_remove);
14656 }
14657 BV_CLR_ALL(fields);
14658
14659 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14660 old = fc_malloc(sizeof(*old));
14661 /* temporary bitcopy just to insert correctly */
14662 *old = *real_packet;
14665 }
14666
14667 differ = (old->city_id != real_packet->city_id);
14668 if (differ) {
14669 BV_SET(fields, 0);
14670 }
14671#endif /* FREECIV_DELTA_PROTOCOL */
14672
14673#ifdef FREECIV_JSON_CONNECTION
14674 struct plocation field_addr;
14675 {
14676 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14679 }
14680#endif /* FREECIV_JSON_CONNECTION */
14681
14682#ifdef FREECIV_DELTA_PROTOCOL
14683#ifdef FREECIV_JSON_CONNECTION
14684 field_addr.name = "fields";
14685#endif /* FREECIV_JSON_CONNECTION */
14686 e = 0;
14687 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14688 if (e) {
14689 log_packet_detailed("fields bitvector error detected");
14690 }
14691
14692 if (BV_ISSET(fields, 0)) {
14693 log_packet_detailed(" field 'city_id' has changed");
14694
14695#ifdef FREECIV_JSON_CONNECTION
14696 field_addr.name = "city_id";
14697#endif /* FREECIV_JSON_CONNECTION */
14698 e = 0;
14699
14700 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
14701
14702 if (e) {
14703 log_packet_detailed("'city_id' field error detected");
14704 }
14705 }
14706
14707 *old = *real_packet;
14708
14709 hash = pc->phs.sent + PACKET_CITY_INFO;
14710 if (nullptr != *hash) {
14712 }
14713
14715 if (nullptr != *hash) {
14717 }
14718
14719 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
14720 if (nullptr != *hash) {
14722 }
14723
14724 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
14725 if (nullptr != *hash) {
14727 }
14728
14729 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
14730 if (nullptr != *hash) {
14732 }
14733
14734#else /* FREECIV_DELTA_PROTOCOL */
14735#ifdef FREECIV_JSON_CONNECTION
14736 field_addr.name = "city_id";
14737#endif /* FREECIV_JSON_CONNECTION */
14738 e = 0;
14739
14740 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
14741
14742 if (e) {
14743 log_packet_detailed("'city_id' field error detected");
14744 }
14745#endif /* FREECIV_DELTA_PROTOCOL */
14746
14748}
14749
14751{
14752 if (!pc->used) {
14753 log_error("WARNING: trying to send data to the closed connection %s",
14755 return -1;
14756 }
14757 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REMOVE].packet != nullptr, -1,
14758 "Handler for PACKET_CITY_REMOVE not installed");
14759 return pc->phs.handlers->send[PACKET_CITY_REMOVE].packet(pc, packet);
14760}
14761
14762void lsend_packet_city_remove(struct conn_list *dest, const struct packet_city_remove *packet)
14763{
14764 conn_list_iterate(dest, pconn) {
14767}
14768
14769int dsend_packet_city_remove(struct connection *pc, int city_id)
14770{
14771 struct packet_city_remove packet, *real_packet = &packet;
14772
14774
14776}
14777
14779{
14780 struct packet_city_remove packet, *real_packet = &packet;
14781
14783
14785}
14786
14787static inline void init_packet_city_info(struct packet_city_info *packet)
14788{
14789 memset(packet, 0, sizeof(*packet));
14790}
14791
14792#define free_packet_city_info(_packet) (void) 0
14793#define destroy_packet_city_info free
14794
14795#ifdef FREECIV_DELTA_PROTOCOL
14797{
14798 const struct packet_city_info *key = (const struct packet_city_info *) vkey;
14799 genhash_val_t result = 0;
14800
14801 result += key->id;
14802
14803 result &= 0xFFFFFFFF;
14804 return result;
14805}
14806
14807static bool cmp_packet_city_info_100(const void *vkey1, const void *vkey2)
14808{
14809 const struct packet_city_info *old = (const struct packet_city_info *) vkey1;
14810 const struct packet_city_info *real_packet = (const struct packet_city_info *) vkey2;
14811 bool differ;
14812
14813 differ = (old->id != real_packet->id);
14814
14815 return !differ;
14816}
14818#endif /* FREECIV_DELTA_PROTOCOL */
14819
14821{
14822#define FREE_PACKET_STRUCT(_packet) free_packet_city_info(_packet)
14824
14825#ifdef FREECIV_JSON_CONNECTION
14826 struct plocation field_addr;
14827 {
14828 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14831 }
14832#endif /* FREECIV_JSON_CONNECTION */
14833
14834#ifdef FREECIV_JSON_CONNECTION
14835 field_addr.name = "id";
14836#endif /* FREECIV_JSON_CONNECTION */
14837
14838 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
14840 }
14841
14842 log_packet_detailed("packet_city_info_100: got info about (%d)",
14843 real_packet->id);
14844
14845#ifdef FREECIV_DELTA_PROTOCOL
14847 struct packet_city_info *old;
14848 struct genhash **hash = pc->phs.received + PACKET_CITY_INFO;
14849
14850 if (nullptr == *hash) {
14852 nullptr, nullptr, nullptr, destroy_packet_city_info);
14853 }
14854
14855 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14856 *real_packet = *old;
14857 } else {
14858 /* packet is already initialized empty */
14859 log_packet_detailed(" no old info");
14860 }
14861
14862#ifdef FREECIV_JSON_CONNECTION
14863 field_addr.name = "fields";
14864#endif /* FREECIV_JSON_CONNECTION */
14865 DIO_BV_GET(&din, &field_addr, fields);
14866
14867 if (BV_ISSET(fields, 0)) {
14868 log_packet_detailed(" got field 'tile'");
14869
14870#ifdef FREECIV_JSON_CONNECTION
14871 field_addr.name = "tile";
14872#endif /* FREECIV_JSON_CONNECTION */
14873
14874 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
14876 }
14877 }
14878
14879 if (BV_ISSET(fields, 1)) {
14880 log_packet_detailed(" got field 'owner'");
14881
14882#ifdef FREECIV_JSON_CONNECTION
14883 field_addr.name = "owner";
14884#endif /* FREECIV_JSON_CONNECTION */
14885
14886 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
14888 }
14889 }
14890
14891 if (BV_ISSET(fields, 2)) {
14892 log_packet_detailed(" got field 'original'");
14893
14894#ifdef FREECIV_JSON_CONNECTION
14895 field_addr.name = "original";
14896#endif /* FREECIV_JSON_CONNECTION */
14897
14898 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
14900 }
14901 }
14902
14903 if (BV_ISSET(fields, 3)) {
14904 log_packet_detailed(" got field 'size'");
14905
14906#ifdef FREECIV_JSON_CONNECTION
14907 field_addr.name = "size";
14908#endif /* FREECIV_JSON_CONNECTION */
14909
14910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
14912 }
14913 }
14914
14915 if (BV_ISSET(fields, 4)) {
14916 log_packet_detailed(" got field 'city_radius_sq'");
14917
14918#ifdef FREECIV_JSON_CONNECTION
14919 field_addr.name = "city_radius_sq";
14920#endif /* FREECIV_JSON_CONNECTION */
14921
14922 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
14923 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
14924 }
14925 }
14926
14927 if (BV_ISSET(fields, 5)) {
14928 log_packet_detailed(" got field 'style'");
14929
14930#ifdef FREECIV_JSON_CONNECTION
14931 field_addr.name = "style";
14932#endif /* FREECIV_JSON_CONNECTION */
14933
14934 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
14936 }
14937 }
14938
14939 if (BV_ISSET(fields, 6)) {
14940 log_packet_detailed(" got field 'capital'");
14941
14942#ifdef FREECIV_JSON_CONNECTION
14943 field_addr.name = "capital";
14944#endif /* FREECIV_JSON_CONNECTION */
14945
14946 {
14947 int readin;
14948
14949 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
14951 }
14952 real_packet->capital = readin;
14953 }
14954 }
14955
14956 if (BV_ISSET(fields, 7)) {
14957 log_packet_detailed(" got field 'ppl_happy'");
14958
14959#ifdef FREECIV_JSON_CONNECTION
14960 field_addr.name = "ppl_happy";
14961#endif /* FREECIV_JSON_CONNECTION */
14962
14963 {
14964 int i;
14965
14966
14967#ifdef FREECIV_JSON_CONNECTION
14968 /* Enter array. */
14969 field_addr.sub_location = plocation_elem_new(0);
14970#endif /* FREECIV_JSON_CONNECTION */
14971
14972 for (i = 0; i < FEELING_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 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
14979 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
14980 }
14981 }
14982
14983#ifdef FREECIV_JSON_CONNECTION
14984 /* Exit array. */
14985 FC_FREE(field_addr.sub_location);
14986#endif /* FREECIV_JSON_CONNECTION */
14987 }
14988 }
14989
14990 if (BV_ISSET(fields, 8)) {
14991 log_packet_detailed(" got field 'ppl_content'");
14992
14993#ifdef FREECIV_JSON_CONNECTION
14994 field_addr.name = "ppl_content";
14995#endif /* FREECIV_JSON_CONNECTION */
14996
14997 {
14998 int i;
14999
15000
15001#ifdef FREECIV_JSON_CONNECTION
15002 /* Enter array. */
15003 field_addr.sub_location = plocation_elem_new(0);
15004#endif /* FREECIV_JSON_CONNECTION */
15005
15006 for (i = 0; i < FEELING_LAST; i++) {
15007#ifdef FREECIV_JSON_CONNECTION
15008 /* Next array element */
15009 field_addr.sub_location->number = i;
15010#endif /* FREECIV_JSON_CONNECTION */
15011
15012 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
15013 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
15014 }
15015 }
15016
15017#ifdef FREECIV_JSON_CONNECTION
15018 /* Exit array. */
15019 FC_FREE(field_addr.sub_location);
15020#endif /* FREECIV_JSON_CONNECTION */
15021 }
15022 }
15023
15024 if (BV_ISSET(fields, 9)) {
15025 log_packet_detailed(" got field 'ppl_unhappy'");
15026
15027#ifdef FREECIV_JSON_CONNECTION
15028 field_addr.name = "ppl_unhappy";
15029#endif /* FREECIV_JSON_CONNECTION */
15030
15031 {
15032 int i;
15033
15034
15035#ifdef FREECIV_JSON_CONNECTION
15036 /* Enter array. */
15037 field_addr.sub_location = plocation_elem_new(0);
15038#endif /* FREECIV_JSON_CONNECTION */
15039
15040 for (i = 0; i < FEELING_LAST; i++) {
15041#ifdef FREECIV_JSON_CONNECTION
15042 /* Next array element */
15043 field_addr.sub_location->number = i;
15044#endif /* FREECIV_JSON_CONNECTION */
15045
15046 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
15047 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
15048 }
15049 }
15050
15051#ifdef FREECIV_JSON_CONNECTION
15052 /* Exit array. */
15053 FC_FREE(field_addr.sub_location);
15054#endif /* FREECIV_JSON_CONNECTION */
15055 }
15056 }
15057
15058 if (BV_ISSET(fields, 10)) {
15059 log_packet_detailed(" got field 'ppl_angry'");
15060
15061#ifdef FREECIV_JSON_CONNECTION
15062 field_addr.name = "ppl_angry";
15063#endif /* FREECIV_JSON_CONNECTION */
15064
15065 {
15066 int i;
15067
15068
15069#ifdef FREECIV_JSON_CONNECTION
15070 /* Enter array. */
15071 field_addr.sub_location = plocation_elem_new(0);
15072#endif /* FREECIV_JSON_CONNECTION */
15073
15074 for (i = 0; i < FEELING_LAST; i++) {
15075#ifdef FREECIV_JSON_CONNECTION
15076 /* Next array element */
15077 field_addr.sub_location->number = i;
15078#endif /* FREECIV_JSON_CONNECTION */
15079
15080 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
15081 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
15082 }
15083 }
15084
15085#ifdef FREECIV_JSON_CONNECTION
15086 /* Exit array. */
15087 FC_FREE(field_addr.sub_location);
15088#endif /* FREECIV_JSON_CONNECTION */
15089 }
15090 }
15091
15092 if (BV_ISSET(fields, 11)) {
15093 log_packet_detailed(" got field 'specialists_size'");
15094
15095#ifdef FREECIV_JSON_CONNECTION
15096 field_addr.name = "specialists_size";
15097#endif /* FREECIV_JSON_CONNECTION */
15098
15099 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
15100 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
15101 }
15102 }
15103
15104 if (BV_ISSET(fields, 12)) {
15105 log_packet_detailed(" got field 'specialists'");
15106
15107#ifdef FREECIV_JSON_CONNECTION
15108 field_addr.name = "specialists";
15109#endif /* FREECIV_JSON_CONNECTION */
15110
15111 {
15112 int i;
15113
15114 if (real_packet->specialists_size > SP_MAX) {
15115 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
15116 }
15117
15118#ifdef FREECIV_JSON_CONNECTION
15119 /* Enter array. */
15120 field_addr.sub_location = plocation_elem_new(0);
15121#endif /* FREECIV_JSON_CONNECTION */
15122
15123 for (i = 0; i < real_packet->specialists_size; i++) {
15124#ifdef FREECIV_JSON_CONNECTION
15125 /* Next array element */
15126 field_addr.sub_location->number = i;
15127#endif /* FREECIV_JSON_CONNECTION */
15128
15129 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
15131 }
15132 }
15133
15134#ifdef FREECIV_JSON_CONNECTION
15135 /* Exit array. */
15136 FC_FREE(field_addr.sub_location);
15137#endif /* FREECIV_JSON_CONNECTION */
15138 }
15139 }
15140
15141 if (BV_ISSET(fields, 13)) {
15142 log_packet_detailed(" got field 'history'");
15143
15144#ifdef FREECIV_JSON_CONNECTION
15145 field_addr.name = "history";
15146#endif /* FREECIV_JSON_CONNECTION */
15147
15148 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
15150 }
15151 }
15152
15153 if (BV_ISSET(fields, 14)) {
15154 log_packet_detailed(" got field 'culture'");
15155
15156#ifdef FREECIV_JSON_CONNECTION
15157 field_addr.name = "culture";
15158#endif /* FREECIV_JSON_CONNECTION */
15159
15160 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
15162 }
15163 }
15164
15165 if (BV_ISSET(fields, 15)) {
15166 log_packet_detailed(" got field 'buy_cost'");
15167
15168#ifdef FREECIV_JSON_CONNECTION
15169 field_addr.name = "buy_cost";
15170#endif /* FREECIV_JSON_CONNECTION */
15171
15172 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
15174 }
15175 }
15176
15177 if (BV_ISSET(fields, 16)) {
15178 log_packet_detailed(" got field 'surplus'");
15179
15180#ifdef FREECIV_JSON_CONNECTION
15181 field_addr.name = "surplus";
15182#endif /* FREECIV_JSON_CONNECTION */
15183
15184 {
15185 int i;
15186
15187
15188#ifdef FREECIV_JSON_CONNECTION
15189 /* Enter array. */
15190 field_addr.sub_location = plocation_elem_new(0);
15191#endif /* FREECIV_JSON_CONNECTION */
15192
15193 for (i = 0; i < O_LAST; i++) {
15194#ifdef FREECIV_JSON_CONNECTION
15195 /* Next array element */
15196 field_addr.sub_location->number = i;
15197#endif /* FREECIV_JSON_CONNECTION */
15198
15199 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
15201 }
15202 }
15203
15204#ifdef FREECIV_JSON_CONNECTION
15205 /* Exit array. */
15206 FC_FREE(field_addr.sub_location);
15207#endif /* FREECIV_JSON_CONNECTION */
15208 }
15209 }
15210
15211 if (BV_ISSET(fields, 17)) {
15212 log_packet_detailed(" got field 'waste'");
15213
15214#ifdef FREECIV_JSON_CONNECTION
15215 field_addr.name = "waste";
15216#endif /* FREECIV_JSON_CONNECTION */
15217
15218 {
15219 int i;
15220
15221
15222#ifdef FREECIV_JSON_CONNECTION
15223 /* Enter array. */
15224 field_addr.sub_location = plocation_elem_new(0);
15225#endif /* FREECIV_JSON_CONNECTION */
15226
15227 for (i = 0; i < O_LAST; i++) {
15228#ifdef FREECIV_JSON_CONNECTION
15229 /* Next array element */
15230 field_addr.sub_location->number = i;
15231#endif /* FREECIV_JSON_CONNECTION */
15232
15233 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
15235 }
15236 }
15237
15238#ifdef FREECIV_JSON_CONNECTION
15239 /* Exit array. */
15240 FC_FREE(field_addr.sub_location);
15241#endif /* FREECIV_JSON_CONNECTION */
15242 }
15243 }
15244
15245 if (BV_ISSET(fields, 18)) {
15246 log_packet_detailed(" got field 'unhappy_penalty'");
15247
15248#ifdef FREECIV_JSON_CONNECTION
15249 field_addr.name = "unhappy_penalty";
15250#endif /* FREECIV_JSON_CONNECTION */
15251
15252 {
15253 int i;
15254
15255
15256#ifdef FREECIV_JSON_CONNECTION
15257 /* Enter array. */
15258 field_addr.sub_location = plocation_elem_new(0);
15259#endif /* FREECIV_JSON_CONNECTION */
15260
15261 for (i = 0; i < O_LAST; i++) {
15262#ifdef FREECIV_JSON_CONNECTION
15263 /* Next array element */
15264 field_addr.sub_location->number = i;
15265#endif /* FREECIV_JSON_CONNECTION */
15266
15267 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
15268 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
15269 }
15270 }
15271
15272#ifdef FREECIV_JSON_CONNECTION
15273 /* Exit array. */
15274 FC_FREE(field_addr.sub_location);
15275#endif /* FREECIV_JSON_CONNECTION */
15276 }
15277 }
15278
15279 if (BV_ISSET(fields, 19)) {
15280 log_packet_detailed(" got field 'prod'");
15281
15282#ifdef FREECIV_JSON_CONNECTION
15283 field_addr.name = "prod";
15284#endif /* FREECIV_JSON_CONNECTION */
15285
15286 {
15287 int i;
15288
15289
15290#ifdef FREECIV_JSON_CONNECTION
15291 /* Enter array. */
15292 field_addr.sub_location = plocation_elem_new(0);
15293#endif /* FREECIV_JSON_CONNECTION */
15294
15295 for (i = 0; i < O_LAST; i++) {
15296#ifdef FREECIV_JSON_CONNECTION
15297 /* Next array element */
15298 field_addr.sub_location->number = i;
15299#endif /* FREECIV_JSON_CONNECTION */
15300
15301 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
15303 }
15304 }
15305
15306#ifdef FREECIV_JSON_CONNECTION
15307 /* Exit array. */
15308 FC_FREE(field_addr.sub_location);
15309#endif /* FREECIV_JSON_CONNECTION */
15310 }
15311 }
15312
15313 if (BV_ISSET(fields, 20)) {
15314 log_packet_detailed(" got field 'citizen_base'");
15315
15316#ifdef FREECIV_JSON_CONNECTION
15317 field_addr.name = "citizen_base";
15318#endif /* FREECIV_JSON_CONNECTION */
15319
15320 {
15321 int i;
15322
15323
15324#ifdef FREECIV_JSON_CONNECTION
15325 /* Enter array. */
15326 field_addr.sub_location = plocation_elem_new(0);
15327#endif /* FREECIV_JSON_CONNECTION */
15328
15329 for (i = 0; i < O_LAST; i++) {
15330#ifdef FREECIV_JSON_CONNECTION
15331 /* Next array element */
15332 field_addr.sub_location->number = i;
15333#endif /* FREECIV_JSON_CONNECTION */
15334
15335 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
15336 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
15337 }
15338 }
15339
15340#ifdef FREECIV_JSON_CONNECTION
15341 /* Exit array. */
15342 FC_FREE(field_addr.sub_location);
15343#endif /* FREECIV_JSON_CONNECTION */
15344 }
15345 }
15346
15347 if (BV_ISSET(fields, 21)) {
15348 log_packet_detailed(" got field 'usage'");
15349
15350#ifdef FREECIV_JSON_CONNECTION
15351 field_addr.name = "usage";
15352#endif /* FREECIV_JSON_CONNECTION */
15353
15354 {
15355 int i;
15356
15357
15358#ifdef FREECIV_JSON_CONNECTION
15359 /* Enter array. */
15360 field_addr.sub_location = plocation_elem_new(0);
15361#endif /* FREECIV_JSON_CONNECTION */
15362
15363 for (i = 0; i < O_LAST; i++) {
15364#ifdef FREECIV_JSON_CONNECTION
15365 /* Next array element */
15366 field_addr.sub_location->number = i;
15367#endif /* FREECIV_JSON_CONNECTION */
15368
15369 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
15371 }
15372 }
15373
15374#ifdef FREECIV_JSON_CONNECTION
15375 /* Exit array. */
15376 FC_FREE(field_addr.sub_location);
15377#endif /* FREECIV_JSON_CONNECTION */
15378 }
15379 }
15380
15381 if (BV_ISSET(fields, 22)) {
15382 log_packet_detailed(" got field 'food_stock'");
15383
15384#ifdef FREECIV_JSON_CONNECTION
15385 field_addr.name = "food_stock";
15386#endif /* FREECIV_JSON_CONNECTION */
15387
15388 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
15389 RECEIVE_PACKET_FIELD_ERROR(food_stock);
15390 }
15391 }
15392
15393 if (BV_ISSET(fields, 23)) {
15394 log_packet_detailed(" got field 'shield_stock'");
15395
15396#ifdef FREECIV_JSON_CONNECTION
15397 field_addr.name = "shield_stock";
15398#endif /* FREECIV_JSON_CONNECTION */
15399
15400 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
15401 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
15402 }
15403 }
15404
15405 if (BV_ISSET(fields, 24)) {
15406 log_packet_detailed(" got field 'trade_route_count'");
15407
15408#ifdef FREECIV_JSON_CONNECTION
15409 field_addr.name = "trade_route_count";
15410#endif /* FREECIV_JSON_CONNECTION */
15411
15412 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
15413 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
15414 }
15415 }
15416
15417 if (BV_ISSET(fields, 25)) {
15418 log_packet_detailed(" got field 'pollution'");
15419
15420#ifdef FREECIV_JSON_CONNECTION
15421 field_addr.name = "pollution";
15422#endif /* FREECIV_JSON_CONNECTION */
15423
15424 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
15425 RECEIVE_PACKET_FIELD_ERROR(pollution);
15426 }
15427 }
15428
15429 if (BV_ISSET(fields, 26)) {
15430 log_packet_detailed(" got field 'illness_trade'");
15431
15432#ifdef FREECIV_JSON_CONNECTION
15433 field_addr.name = "illness_trade";
15434#endif /* FREECIV_JSON_CONNECTION */
15435
15436 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
15437 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
15438 }
15439 }
15440
15441 if (BV_ISSET(fields, 27)) {
15442 log_packet_detailed(" got field 'production_kind'");
15443
15444#ifdef FREECIV_JSON_CONNECTION
15445 field_addr.name = "production_kind";
15446#endif /* FREECIV_JSON_CONNECTION */
15447
15448 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
15449 RECEIVE_PACKET_FIELD_ERROR(production_kind);
15450 }
15451 }
15452
15453 if (BV_ISSET(fields, 28)) {
15454 log_packet_detailed(" got field 'production_value'");
15455
15456#ifdef FREECIV_JSON_CONNECTION
15457 field_addr.name = "production_value";
15458#endif /* FREECIV_JSON_CONNECTION */
15459
15460 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
15461 RECEIVE_PACKET_FIELD_ERROR(production_value);
15462 }
15463 }
15464
15465 if (BV_ISSET(fields, 29)) {
15466 log_packet_detailed(" got field 'turn_founded'");
15467
15468#ifdef FREECIV_JSON_CONNECTION
15469 field_addr.name = "turn_founded";
15470#endif /* FREECIV_JSON_CONNECTION */
15471
15472 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
15473 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
15474 }
15475 }
15476
15477 if (BV_ISSET(fields, 30)) {
15478 log_packet_detailed(" got field 'turn_last_built'");
15479
15480#ifdef FREECIV_JSON_CONNECTION
15481 field_addr.name = "turn_last_built";
15482#endif /* FREECIV_JSON_CONNECTION */
15483
15484 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
15485 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
15486 }
15487 }
15488
15489 if (BV_ISSET(fields, 31)) {
15490 log_packet_detailed(" got field 'changed_from_kind'");
15491
15492#ifdef FREECIV_JSON_CONNECTION
15493 field_addr.name = "changed_from_kind";
15494#endif /* FREECIV_JSON_CONNECTION */
15495
15496 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
15497 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
15498 }
15499 }
15500
15501 if (BV_ISSET(fields, 32)) {
15502 log_packet_detailed(" got field 'changed_from_value'");
15503
15504#ifdef FREECIV_JSON_CONNECTION
15505 field_addr.name = "changed_from_value";
15506#endif /* FREECIV_JSON_CONNECTION */
15507
15508 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
15509 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
15510 }
15511 }
15512
15513 if (BV_ISSET(fields, 33)) {
15514 log_packet_detailed(" got field 'before_change_shields'");
15515
15516#ifdef FREECIV_JSON_CONNECTION
15517 field_addr.name = "before_change_shields";
15518#endif /* FREECIV_JSON_CONNECTION */
15519
15520 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
15521 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
15522 }
15523 }
15524
15525 if (BV_ISSET(fields, 34)) {
15526 log_packet_detailed(" got field 'disbanded_shields'");
15527
15528#ifdef FREECIV_JSON_CONNECTION
15529 field_addr.name = "disbanded_shields";
15530#endif /* FREECIV_JSON_CONNECTION */
15531
15532 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
15533 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
15534 }
15535 }
15536
15537 if (BV_ISSET(fields, 35)) {
15538 log_packet_detailed(" got field 'caravan_shields'");
15539
15540#ifdef FREECIV_JSON_CONNECTION
15541 field_addr.name = "caravan_shields";
15542#endif /* FREECIV_JSON_CONNECTION */
15543
15544 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
15545 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
15546 }
15547 }
15548
15549 if (BV_ISSET(fields, 36)) {
15550 log_packet_detailed(" got field 'last_turns_shield_surplus'");
15551
15552#ifdef FREECIV_JSON_CONNECTION
15553 field_addr.name = "last_turns_shield_surplus";
15554#endif /* FREECIV_JSON_CONNECTION */
15555
15556 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
15557 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
15558 }
15559 }
15560
15561 if (BV_ISSET(fields, 37)) {
15562 log_packet_detailed(" got field 'airlift'");
15563
15564#ifdef FREECIV_JSON_CONNECTION
15565 field_addr.name = "airlift";
15566#endif /* FREECIV_JSON_CONNECTION */
15567
15568 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
15570 }
15571 }
15572
15573 real_packet->did_buy = BV_ISSET(fields, 38);
15574
15575 real_packet->did_sell = BV_ISSET(fields, 39);
15576
15577 real_packet->was_happy = BV_ISSET(fields, 40);
15578
15579 real_packet->had_famine = BV_ISSET(fields, 41);
15580
15581 if (BV_ISSET(fields, 42)) {
15582 log_packet_detailed(" got field 'anarchy'");
15583
15584#ifdef FREECIV_JSON_CONNECTION
15585 field_addr.name = "anarchy";
15586#endif /* FREECIV_JSON_CONNECTION */
15587
15588 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
15590 }
15591 }
15592
15593 if (BV_ISSET(fields, 43)) {
15594 log_packet_detailed(" got field 'rapture'");
15595
15596#ifdef FREECIV_JSON_CONNECTION
15597 field_addr.name = "rapture";
15598#endif /* FREECIV_JSON_CONNECTION */
15599
15600 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
15602 }
15603 }
15604
15605 real_packet->diplomat_investigate = BV_ISSET(fields, 44);
15606
15607 if (BV_ISSET(fields, 45)) {
15608 log_packet_detailed(" got field 'walls'");
15609
15610#ifdef FREECIV_JSON_CONNECTION
15611 field_addr.name = "walls";
15612#endif /* FREECIV_JSON_CONNECTION */
15613
15614 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
15616 }
15617 }
15618
15619 if (BV_ISSET(fields, 46)) {
15620 log_packet_detailed(" got field 'city_image'");
15621
15622#ifdef FREECIV_JSON_CONNECTION
15623 field_addr.name = "city_image";
15624#endif /* FREECIV_JSON_CONNECTION */
15625
15626 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
15627 RECEIVE_PACKET_FIELD_ERROR(city_image);
15628 }
15629 }
15630
15631 if (BV_ISSET(fields, 47)) {
15632 log_packet_detailed(" got field 'steal'");
15633
15634#ifdef FREECIV_JSON_CONNECTION
15635 field_addr.name = "steal";
15636#endif /* FREECIV_JSON_CONNECTION */
15637
15638 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
15640 }
15641 }
15642
15643 if (BV_ISSET(fields, 48)) {
15644 log_packet_detailed(" got field 'worklist'");
15645
15646#ifdef FREECIV_JSON_CONNECTION
15647 field_addr.name = "worklist";
15648#endif /* FREECIV_JSON_CONNECTION */
15649
15650 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
15652 }
15653 }
15654
15655 if (BV_ISSET(fields, 49)) {
15656 log_packet_detailed(" got field 'improvements'");
15657
15658#ifdef FREECIV_JSON_CONNECTION
15659 field_addr.name = "improvements";
15660#endif /* FREECIV_JSON_CONNECTION */
15661
15662 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
15663 RECEIVE_PACKET_FIELD_ERROR(improvements);
15664 }
15665 }
15666
15667 if (BV_ISSET(fields, 50)) {
15668 log_packet_detailed(" got field 'city_options'");
15669
15670#ifdef FREECIV_JSON_CONNECTION
15671 field_addr.name = "city_options";
15672#endif /* FREECIV_JSON_CONNECTION */
15673
15674 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
15675 RECEIVE_PACKET_FIELD_ERROR(city_options);
15676 }
15677 }
15678
15679 if (BV_ISSET(fields, 51)) {
15680 log_packet_detailed(" got field 'wl_cb'");
15681
15682#ifdef FREECIV_JSON_CONNECTION
15683 field_addr.name = "wl_cb";
15684#endif /* FREECIV_JSON_CONNECTION */
15685
15686 {
15687 int readin;
15688
15689 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15691 }
15692 real_packet->wl_cb = readin;
15693 }
15694 }
15695
15696 if (BV_ISSET(fields, 52)) {
15697 log_packet_detailed(" got field 'acquire_type'");
15698
15699#ifdef FREECIV_JSON_CONNECTION
15700 field_addr.name = "acquire_type";
15701#endif /* FREECIV_JSON_CONNECTION */
15702
15703 {
15704 int readin;
15705
15706 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15707 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
15708 }
15709 real_packet->acquire_type = readin;
15710 }
15711 }
15712
15713 if (BV_ISSET(fields, 53)) {
15714 log_packet_detailed(" got field 'name'");
15715
15716#ifdef FREECIV_JSON_CONNECTION
15717 field_addr.name = "name";
15718#endif /* FREECIV_JSON_CONNECTION */
15719
15720 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
15722 }
15723 }
15724
15725 if (nullptr == old) {
15726 old = fc_malloc(sizeof(*old));
15728 *old = *real_packet;
15730 } else {
15731 *old = *real_packet;
15732 }
15733
15734 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
15735 if (nullptr != *hash) {
15737 }
15738
15739#else /* FREECIV_DELTA_PROTOCOL */
15740#ifdef FREECIV_JSON_CONNECTION
15741 field_addr.name = "tile";
15742#endif /* FREECIV_JSON_CONNECTION */
15743
15744 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
15746 }
15747
15748#ifdef FREECIV_JSON_CONNECTION
15749 field_addr.name = "owner";
15750#endif /* FREECIV_JSON_CONNECTION */
15751
15752 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
15754 }
15755
15756#ifdef FREECIV_JSON_CONNECTION
15757 field_addr.name = "original";
15758#endif /* FREECIV_JSON_CONNECTION */
15759
15760 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
15762 }
15763
15764#ifdef FREECIV_JSON_CONNECTION
15765 field_addr.name = "size";
15766#endif /* FREECIV_JSON_CONNECTION */
15767
15768 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
15770 }
15771
15772#ifdef FREECIV_JSON_CONNECTION
15773 field_addr.name = "city_radius_sq";
15774#endif /* FREECIV_JSON_CONNECTION */
15775
15776 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
15777 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
15778 }
15779
15780#ifdef FREECIV_JSON_CONNECTION
15781 field_addr.name = "style";
15782#endif /* FREECIV_JSON_CONNECTION */
15783
15784 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
15786 }
15787
15788#ifdef FREECIV_JSON_CONNECTION
15789 field_addr.name = "capital";
15790#endif /* FREECIV_JSON_CONNECTION */
15791
15792 {
15793 int readin;
15794
15795 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15797 }
15798 real_packet->capital = readin;
15799 }
15800
15801#ifdef FREECIV_JSON_CONNECTION
15802 field_addr.name = "ppl_happy";
15803#endif /* FREECIV_JSON_CONNECTION */
15804
15805 {
15806 int i;
15807
15808
15809#ifdef FREECIV_JSON_CONNECTION
15810 /* Enter array. */
15811 field_addr.sub_location = plocation_elem_new(0);
15812#endif /* FREECIV_JSON_CONNECTION */
15813
15814 for (i = 0; i < FEELING_LAST; i++) {
15815#ifdef FREECIV_JSON_CONNECTION
15816 /* Next array element */
15817 field_addr.sub_location->number = i;
15818#endif /* FREECIV_JSON_CONNECTION */
15819
15820 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
15821 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
15822 }
15823 }
15824
15825#ifdef FREECIV_JSON_CONNECTION
15826 /* Exit array. */
15827 FC_FREE(field_addr.sub_location);
15828#endif /* FREECIV_JSON_CONNECTION */
15829 }
15830
15831#ifdef FREECIV_JSON_CONNECTION
15832 field_addr.name = "ppl_content";
15833#endif /* FREECIV_JSON_CONNECTION */
15834
15835 {
15836 int i;
15837
15838
15839#ifdef FREECIV_JSON_CONNECTION
15840 /* Enter array. */
15841 field_addr.sub_location = plocation_elem_new(0);
15842#endif /* FREECIV_JSON_CONNECTION */
15843
15844 for (i = 0; i < FEELING_LAST; i++) {
15845#ifdef FREECIV_JSON_CONNECTION
15846 /* Next array element */
15847 field_addr.sub_location->number = i;
15848#endif /* FREECIV_JSON_CONNECTION */
15849
15850 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
15851 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
15852 }
15853 }
15854
15855#ifdef FREECIV_JSON_CONNECTION
15856 /* Exit array. */
15857 FC_FREE(field_addr.sub_location);
15858#endif /* FREECIV_JSON_CONNECTION */
15859 }
15860
15861#ifdef FREECIV_JSON_CONNECTION
15862 field_addr.name = "ppl_unhappy";
15863#endif /* FREECIV_JSON_CONNECTION */
15864
15865 {
15866 int i;
15867
15868
15869#ifdef FREECIV_JSON_CONNECTION
15870 /* Enter array. */
15871 field_addr.sub_location = plocation_elem_new(0);
15872#endif /* FREECIV_JSON_CONNECTION */
15873
15874 for (i = 0; i < FEELING_LAST; i++) {
15875#ifdef FREECIV_JSON_CONNECTION
15876 /* Next array element */
15877 field_addr.sub_location->number = i;
15878#endif /* FREECIV_JSON_CONNECTION */
15879
15880 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
15881 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
15882 }
15883 }
15884
15885#ifdef FREECIV_JSON_CONNECTION
15886 /* Exit array. */
15887 FC_FREE(field_addr.sub_location);
15888#endif /* FREECIV_JSON_CONNECTION */
15889 }
15890
15891#ifdef FREECIV_JSON_CONNECTION
15892 field_addr.name = "ppl_angry";
15893#endif /* FREECIV_JSON_CONNECTION */
15894
15895 {
15896 int i;
15897
15898
15899#ifdef FREECIV_JSON_CONNECTION
15900 /* Enter array. */
15901 field_addr.sub_location = plocation_elem_new(0);
15902#endif /* FREECIV_JSON_CONNECTION */
15903
15904 for (i = 0; i < FEELING_LAST; i++) {
15905#ifdef FREECIV_JSON_CONNECTION
15906 /* Next array element */
15907 field_addr.sub_location->number = i;
15908#endif /* FREECIV_JSON_CONNECTION */
15909
15910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
15911 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
15912 }
15913 }
15914
15915#ifdef FREECIV_JSON_CONNECTION
15916 /* Exit array. */
15917 FC_FREE(field_addr.sub_location);
15918#endif /* FREECIV_JSON_CONNECTION */
15919 }
15920
15921#ifdef FREECIV_JSON_CONNECTION
15922 field_addr.name = "specialists_size";
15923#endif /* FREECIV_JSON_CONNECTION */
15924
15925 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
15926 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
15927 }
15928
15929#ifdef FREECIV_JSON_CONNECTION
15930 field_addr.name = "specialists";
15931#endif /* FREECIV_JSON_CONNECTION */
15932
15933 {
15934 int i;
15935
15936 if (real_packet->specialists_size > SP_MAX) {
15937 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
15938 }
15939
15940#ifdef FREECIV_JSON_CONNECTION
15941 /* Enter array. */
15942 field_addr.sub_location = plocation_elem_new(0);
15943#endif /* FREECIV_JSON_CONNECTION */
15944
15945 for (i = 0; i < real_packet->specialists_size; i++) {
15946#ifdef FREECIV_JSON_CONNECTION
15947 /* Next array element */
15948 field_addr.sub_location->number = i;
15949#endif /* FREECIV_JSON_CONNECTION */
15950
15951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
15953 }
15954 }
15955
15956#ifdef FREECIV_JSON_CONNECTION
15957 /* Exit array. */
15958 FC_FREE(field_addr.sub_location);
15959#endif /* FREECIV_JSON_CONNECTION */
15960 }
15961
15962#ifdef FREECIV_JSON_CONNECTION
15963 field_addr.name = "history";
15964#endif /* FREECIV_JSON_CONNECTION */
15965
15966 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
15968 }
15969
15970#ifdef FREECIV_JSON_CONNECTION
15971 field_addr.name = "culture";
15972#endif /* FREECIV_JSON_CONNECTION */
15973
15974 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
15976 }
15977
15978#ifdef FREECIV_JSON_CONNECTION
15979 field_addr.name = "buy_cost";
15980#endif /* FREECIV_JSON_CONNECTION */
15981
15982 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
15984 }
15985
15986#ifdef FREECIV_JSON_CONNECTION
15987 field_addr.name = "surplus";
15988#endif /* FREECIV_JSON_CONNECTION */
15989
15990 {
15991 int i;
15992
15993
15994#ifdef FREECIV_JSON_CONNECTION
15995 /* Enter array. */
15996 field_addr.sub_location = plocation_elem_new(0);
15997#endif /* FREECIV_JSON_CONNECTION */
15998
15999 for (i = 0; i < O_LAST; i++) {
16000#ifdef FREECIV_JSON_CONNECTION
16001 /* Next array element */
16002 field_addr.sub_location->number = i;
16003#endif /* FREECIV_JSON_CONNECTION */
16004
16005 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
16007 }
16008 }
16009
16010#ifdef FREECIV_JSON_CONNECTION
16011 /* Exit array. */
16012 FC_FREE(field_addr.sub_location);
16013#endif /* FREECIV_JSON_CONNECTION */
16014 }
16015
16016#ifdef FREECIV_JSON_CONNECTION
16017 field_addr.name = "waste";
16018#endif /* FREECIV_JSON_CONNECTION */
16019
16020 {
16021 int i;
16022
16023
16024#ifdef FREECIV_JSON_CONNECTION
16025 /* Enter array. */
16026 field_addr.sub_location = plocation_elem_new(0);
16027#endif /* FREECIV_JSON_CONNECTION */
16028
16029 for (i = 0; i < O_LAST; i++) {
16030#ifdef FREECIV_JSON_CONNECTION
16031 /* Next array element */
16032 field_addr.sub_location->number = i;
16033#endif /* FREECIV_JSON_CONNECTION */
16034
16035 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
16037 }
16038 }
16039
16040#ifdef FREECIV_JSON_CONNECTION
16041 /* Exit array. */
16042 FC_FREE(field_addr.sub_location);
16043#endif /* FREECIV_JSON_CONNECTION */
16044 }
16045
16046#ifdef FREECIV_JSON_CONNECTION
16047 field_addr.name = "unhappy_penalty";
16048#endif /* FREECIV_JSON_CONNECTION */
16049
16050 {
16051 int i;
16052
16053
16054#ifdef FREECIV_JSON_CONNECTION
16055 /* Enter array. */
16056 field_addr.sub_location = plocation_elem_new(0);
16057#endif /* FREECIV_JSON_CONNECTION */
16058
16059 for (i = 0; i < O_LAST; i++) {
16060#ifdef FREECIV_JSON_CONNECTION
16061 /* Next array element */
16062 field_addr.sub_location->number = i;
16063#endif /* FREECIV_JSON_CONNECTION */
16064
16065 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
16066 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
16067 }
16068 }
16069
16070#ifdef FREECIV_JSON_CONNECTION
16071 /* Exit array. */
16072 FC_FREE(field_addr.sub_location);
16073#endif /* FREECIV_JSON_CONNECTION */
16074 }
16075
16076#ifdef FREECIV_JSON_CONNECTION
16077 field_addr.name = "prod";
16078#endif /* FREECIV_JSON_CONNECTION */
16079
16080 {
16081 int i;
16082
16083
16084#ifdef FREECIV_JSON_CONNECTION
16085 /* Enter array. */
16086 field_addr.sub_location = plocation_elem_new(0);
16087#endif /* FREECIV_JSON_CONNECTION */
16088
16089 for (i = 0; i < O_LAST; i++) {
16090#ifdef FREECIV_JSON_CONNECTION
16091 /* Next array element */
16092 field_addr.sub_location->number = i;
16093#endif /* FREECIV_JSON_CONNECTION */
16094
16095 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
16097 }
16098 }
16099
16100#ifdef FREECIV_JSON_CONNECTION
16101 /* Exit array. */
16102 FC_FREE(field_addr.sub_location);
16103#endif /* FREECIV_JSON_CONNECTION */
16104 }
16105
16106#ifdef FREECIV_JSON_CONNECTION
16107 field_addr.name = "citizen_base";
16108#endif /* FREECIV_JSON_CONNECTION */
16109
16110 {
16111 int i;
16112
16113
16114#ifdef FREECIV_JSON_CONNECTION
16115 /* Enter array. */
16116 field_addr.sub_location = plocation_elem_new(0);
16117#endif /* FREECIV_JSON_CONNECTION */
16118
16119 for (i = 0; i < O_LAST; i++) {
16120#ifdef FREECIV_JSON_CONNECTION
16121 /* Next array element */
16122 field_addr.sub_location->number = i;
16123#endif /* FREECIV_JSON_CONNECTION */
16124
16125 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
16126 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
16127 }
16128 }
16129
16130#ifdef FREECIV_JSON_CONNECTION
16131 /* Exit array. */
16132 FC_FREE(field_addr.sub_location);
16133#endif /* FREECIV_JSON_CONNECTION */
16134 }
16135
16136#ifdef FREECIV_JSON_CONNECTION
16137 field_addr.name = "usage";
16138#endif /* FREECIV_JSON_CONNECTION */
16139
16140 {
16141 int i;
16142
16143
16144#ifdef FREECIV_JSON_CONNECTION
16145 /* Enter array. */
16146 field_addr.sub_location = plocation_elem_new(0);
16147#endif /* FREECIV_JSON_CONNECTION */
16148
16149 for (i = 0; i < O_LAST; i++) {
16150#ifdef FREECIV_JSON_CONNECTION
16151 /* Next array element */
16152 field_addr.sub_location->number = i;
16153#endif /* FREECIV_JSON_CONNECTION */
16154
16155 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
16157 }
16158 }
16159
16160#ifdef FREECIV_JSON_CONNECTION
16161 /* Exit array. */
16162 FC_FREE(field_addr.sub_location);
16163#endif /* FREECIV_JSON_CONNECTION */
16164 }
16165
16166#ifdef FREECIV_JSON_CONNECTION
16167 field_addr.name = "food_stock";
16168#endif /* FREECIV_JSON_CONNECTION */
16169
16170 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
16171 RECEIVE_PACKET_FIELD_ERROR(food_stock);
16172 }
16173
16174#ifdef FREECIV_JSON_CONNECTION
16175 field_addr.name = "shield_stock";
16176#endif /* FREECIV_JSON_CONNECTION */
16177
16178 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
16179 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
16180 }
16181
16182#ifdef FREECIV_JSON_CONNECTION
16183 field_addr.name = "trade_route_count";
16184#endif /* FREECIV_JSON_CONNECTION */
16185
16186 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
16187 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
16188 }
16189
16190#ifdef FREECIV_JSON_CONNECTION
16191 field_addr.name = "pollution";
16192#endif /* FREECIV_JSON_CONNECTION */
16193
16194 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
16195 RECEIVE_PACKET_FIELD_ERROR(pollution);
16196 }
16197
16198#ifdef FREECIV_JSON_CONNECTION
16199 field_addr.name = "illness_trade";
16200#endif /* FREECIV_JSON_CONNECTION */
16201
16202 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
16203 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
16204 }
16205
16206#ifdef FREECIV_JSON_CONNECTION
16207 field_addr.name = "production_kind";
16208#endif /* FREECIV_JSON_CONNECTION */
16209
16210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
16211 RECEIVE_PACKET_FIELD_ERROR(production_kind);
16212 }
16213
16214#ifdef FREECIV_JSON_CONNECTION
16215 field_addr.name = "production_value";
16216#endif /* FREECIV_JSON_CONNECTION */
16217
16218 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
16219 RECEIVE_PACKET_FIELD_ERROR(production_value);
16220 }
16221
16222#ifdef FREECIV_JSON_CONNECTION
16223 field_addr.name = "turn_founded";
16224#endif /* FREECIV_JSON_CONNECTION */
16225
16226 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
16227 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
16228 }
16229
16230#ifdef FREECIV_JSON_CONNECTION
16231 field_addr.name = "turn_last_built";
16232#endif /* FREECIV_JSON_CONNECTION */
16233
16234 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
16235 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
16236 }
16237
16238#ifdef FREECIV_JSON_CONNECTION
16239 field_addr.name = "changed_from_kind";
16240#endif /* FREECIV_JSON_CONNECTION */
16241
16242 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
16243 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
16244 }
16245
16246#ifdef FREECIV_JSON_CONNECTION
16247 field_addr.name = "changed_from_value";
16248#endif /* FREECIV_JSON_CONNECTION */
16249
16250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
16251 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
16252 }
16253
16254#ifdef FREECIV_JSON_CONNECTION
16255 field_addr.name = "before_change_shields";
16256#endif /* FREECIV_JSON_CONNECTION */
16257
16258 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
16259 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
16260 }
16261
16262#ifdef FREECIV_JSON_CONNECTION
16263 field_addr.name = "disbanded_shields";
16264#endif /* FREECIV_JSON_CONNECTION */
16265
16266 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
16267 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
16268 }
16269
16270#ifdef FREECIV_JSON_CONNECTION
16271 field_addr.name = "caravan_shields";
16272#endif /* FREECIV_JSON_CONNECTION */
16273
16274 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
16275 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
16276 }
16277
16278#ifdef FREECIV_JSON_CONNECTION
16279 field_addr.name = "last_turns_shield_surplus";
16280#endif /* FREECIV_JSON_CONNECTION */
16281
16282 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
16283 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
16284 }
16285
16286#ifdef FREECIV_JSON_CONNECTION
16287 field_addr.name = "airlift";
16288#endif /* FREECIV_JSON_CONNECTION */
16289
16290 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
16292 }
16293
16294#ifdef FREECIV_JSON_CONNECTION
16295 field_addr.name = "did_buy";
16296#endif /* FREECIV_JSON_CONNECTION */
16297
16298 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
16300 }
16301
16302#ifdef FREECIV_JSON_CONNECTION
16303 field_addr.name = "did_sell";
16304#endif /* FREECIV_JSON_CONNECTION */
16305
16306 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
16308 }
16309
16310#ifdef FREECIV_JSON_CONNECTION
16311 field_addr.name = "was_happy";
16312#endif /* FREECIV_JSON_CONNECTION */
16313
16314 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
16315 RECEIVE_PACKET_FIELD_ERROR(was_happy);
16316 }
16317
16318#ifdef FREECIV_JSON_CONNECTION
16319 field_addr.name = "had_famine";
16320#endif /* FREECIV_JSON_CONNECTION */
16321
16322 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
16323 RECEIVE_PACKET_FIELD_ERROR(had_famine);
16324 }
16325
16326#ifdef FREECIV_JSON_CONNECTION
16327 field_addr.name = "anarchy";
16328#endif /* FREECIV_JSON_CONNECTION */
16329
16330 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
16332 }
16333
16334#ifdef FREECIV_JSON_CONNECTION
16335 field_addr.name = "rapture";
16336#endif /* FREECIV_JSON_CONNECTION */
16337
16338 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
16340 }
16341
16342#ifdef FREECIV_JSON_CONNECTION
16343 field_addr.name = "diplomat_investigate";
16344#endif /* FREECIV_JSON_CONNECTION */
16345
16346 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->diplomat_investigate)) {
16348 }
16349
16350#ifdef FREECIV_JSON_CONNECTION
16351 field_addr.name = "walls";
16352#endif /* FREECIV_JSON_CONNECTION */
16353
16354 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
16356 }
16357
16358#ifdef FREECIV_JSON_CONNECTION
16359 field_addr.name = "city_image";
16360#endif /* FREECIV_JSON_CONNECTION */
16361
16362 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
16363 RECEIVE_PACKET_FIELD_ERROR(city_image);
16364 }
16365
16366#ifdef FREECIV_JSON_CONNECTION
16367 field_addr.name = "steal";
16368#endif /* FREECIV_JSON_CONNECTION */
16369
16370 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
16372 }
16373
16374#ifdef FREECIV_JSON_CONNECTION
16375 field_addr.name = "worklist";
16376#endif /* FREECIV_JSON_CONNECTION */
16377
16378 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
16380 }
16381
16382#ifdef FREECIV_JSON_CONNECTION
16383 field_addr.name = "improvements";
16384#endif /* FREECIV_JSON_CONNECTION */
16385
16386 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
16387 RECEIVE_PACKET_FIELD_ERROR(improvements);
16388 }
16389
16390#ifdef FREECIV_JSON_CONNECTION
16391 field_addr.name = "city_options";
16392#endif /* FREECIV_JSON_CONNECTION */
16393
16394 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
16395 RECEIVE_PACKET_FIELD_ERROR(city_options);
16396 }
16397
16398#ifdef FREECIV_JSON_CONNECTION
16399 field_addr.name = "wl_cb";
16400#endif /* FREECIV_JSON_CONNECTION */
16401
16402 {
16403 int readin;
16404
16405 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16407 }
16408 real_packet->wl_cb = readin;
16409 }
16410
16411#ifdef FREECIV_JSON_CONNECTION
16412 field_addr.name = "acquire_type";
16413#endif /* FREECIV_JSON_CONNECTION */
16414
16415 {
16416 int readin;
16417
16418 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16419 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
16420 }
16421 real_packet->acquire_type = readin;
16422 }
16423
16424#ifdef FREECIV_JSON_CONNECTION
16425 field_addr.name = "name";
16426#endif /* FREECIV_JSON_CONNECTION */
16427
16428 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
16430 }
16431#endif /* FREECIV_DELTA_PROTOCOL */
16432
16434#undef FREE_PACKET_STRUCT
16435}
16436
16437static int send_packet_city_info_100(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
16438{
16439 const struct packet_city_info *real_packet = packet;
16440 int e;
16442
16443 log_packet_detailed("packet_city_info_100: sending info about (%d)",
16444 real_packet->id);
16445
16446#ifdef FREECIV_DELTA_PROTOCOL
16448 struct packet_city_info *old;
16449 bool differ;
16450 int different = force_to_send;
16451 struct genhash **hash = pc->phs.sent + PACKET_CITY_INFO;
16452
16453 if (nullptr == *hash) {
16455 nullptr, nullptr, nullptr, destroy_packet_city_info);
16456 }
16457 BV_CLR_ALL(fields);
16458
16459 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
16460 old = fc_malloc(sizeof(*old));
16461 /* temporary bitcopy just to insert correctly */
16462 *old = *real_packet;
16465 different = 1; /* Force to send. */
16466 }
16467
16468 differ = (old->tile != real_packet->tile);
16469 if (differ) {
16470 different++;
16471 BV_SET(fields, 0);
16472 }
16473
16474 differ = (old->owner != real_packet->owner);
16475 if (differ) {
16476 different++;
16477 BV_SET(fields, 1);
16478 }
16479
16480 differ = (old->original != real_packet->original);
16481 if (differ) {
16482 different++;
16483 BV_SET(fields, 2);
16484 }
16485
16486 differ = (old->size != real_packet->size);
16487 if (differ) {
16488 different++;
16489 BV_SET(fields, 3);
16490 }
16491
16492 differ = (old->city_radius_sq != real_packet->city_radius_sq);
16493 if (differ) {
16494 different++;
16495 BV_SET(fields, 4);
16496 }
16497
16498 differ = (old->style != real_packet->style);
16499 if (differ) {
16500 different++;
16501 BV_SET(fields, 5);
16502 }
16503
16504 differ = (old->capital != real_packet->capital);
16505 if (differ) {
16506 different++;
16507 BV_SET(fields, 6);
16508 }
16509
16510 differ = FALSE;
16511 {
16512 int i;
16513
16514 for (i = 0; i < FEELING_LAST; i++) {
16515 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
16516 if (differ) {
16517 break;
16518 }
16519 }
16520 }
16521 if (differ) {
16522 different++;
16523 BV_SET(fields, 7);
16524 }
16525
16526 differ = FALSE;
16527 {
16528 int i;
16529
16530 for (i = 0; i < FEELING_LAST; i++) {
16531 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
16532 if (differ) {
16533 break;
16534 }
16535 }
16536 }
16537 if (differ) {
16538 different++;
16539 BV_SET(fields, 8);
16540 }
16541
16542 differ = FALSE;
16543 {
16544 int i;
16545
16546 for (i = 0; i < FEELING_LAST; i++) {
16547 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
16548 if (differ) {
16549 break;
16550 }
16551 }
16552 }
16553 if (differ) {
16554 different++;
16555 BV_SET(fields, 9);
16556 }
16557
16558 differ = FALSE;
16559 {
16560 int i;
16561
16562 for (i = 0; i < FEELING_LAST; i++) {
16563 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
16564 if (differ) {
16565 break;
16566 }
16567 }
16568 }
16569 if (differ) {
16570 different++;
16571 BV_SET(fields, 10);
16572 }
16573
16574 differ = (old->specialists_size != real_packet->specialists_size);
16575 if (differ) {
16576 different++;
16577 BV_SET(fields, 11);
16578 }
16579
16580 differ = (old->specialists_size != real_packet->specialists_size);
16581 if (!differ) {
16582 int i;
16583
16584 for (i = 0; i < old->specialists_size; i++) {
16585 differ = (old->specialists[i] != real_packet->specialists[i]);
16586 if (differ) {
16587 break;
16588 }
16589 }
16590 }
16591 if (differ) {
16592 different++;
16593 BV_SET(fields, 12);
16594 }
16595
16596 differ = (old->history != real_packet->history);
16597 if (differ) {
16598 different++;
16599 BV_SET(fields, 13);
16600 }
16601
16602 differ = (old->culture != real_packet->culture);
16603 if (differ) {
16604 different++;
16605 BV_SET(fields, 14);
16606 }
16607
16608 differ = (old->buy_cost != real_packet->buy_cost);
16609 if (differ) {
16610 different++;
16611 BV_SET(fields, 15);
16612 }
16613
16614 differ = FALSE;
16615 {
16616 int i;
16617
16618 for (i = 0; i < O_LAST; i++) {
16619 differ = (old->surplus[i] != real_packet->surplus[i]);
16620 if (differ) {
16621 break;
16622 }
16623 }
16624 }
16625 if (differ) {
16626 different++;
16627 BV_SET(fields, 16);
16628 }
16629
16630 differ = FALSE;
16631 {
16632 int i;
16633
16634 for (i = 0; i < O_LAST; i++) {
16635 differ = (old->waste[i] != real_packet->waste[i]);
16636 if (differ) {
16637 break;
16638 }
16639 }
16640 }
16641 if (differ) {
16642 different++;
16643 BV_SET(fields, 17);
16644 }
16645
16646 differ = FALSE;
16647 {
16648 int i;
16649
16650 for (i = 0; i < O_LAST; i++) {
16651 differ = (old->unhappy_penalty[i] != real_packet->unhappy_penalty[i]);
16652 if (differ) {
16653 break;
16654 }
16655 }
16656 }
16657 if (differ) {
16658 different++;
16659 BV_SET(fields, 18);
16660 }
16661
16662 differ = FALSE;
16663 {
16664 int i;
16665
16666 for (i = 0; i < O_LAST; i++) {
16667 differ = (old->prod[i] != real_packet->prod[i]);
16668 if (differ) {
16669 break;
16670 }
16671 }
16672 }
16673 if (differ) {
16674 different++;
16675 BV_SET(fields, 19);
16676 }
16677
16678 differ = FALSE;
16679 {
16680 int i;
16681
16682 for (i = 0; i < O_LAST; i++) {
16683 differ = (old->citizen_base[i] != real_packet->citizen_base[i]);
16684 if (differ) {
16685 break;
16686 }
16687 }
16688 }
16689 if (differ) {
16690 different++;
16691 BV_SET(fields, 20);
16692 }
16693
16694 differ = FALSE;
16695 {
16696 int i;
16697
16698 for (i = 0; i < O_LAST; i++) {
16699 differ = (old->usage[i] != real_packet->usage[i]);
16700 if (differ) {
16701 break;
16702 }
16703 }
16704 }
16705 if (differ) {
16706 different++;
16707 BV_SET(fields, 21);
16708 }
16709
16710 differ = (old->food_stock != real_packet->food_stock);
16711 if (differ) {
16712 different++;
16713 BV_SET(fields, 22);
16714 }
16715
16716 differ = (old->shield_stock != real_packet->shield_stock);
16717 if (differ) {
16718 different++;
16719 BV_SET(fields, 23);
16720 }
16721
16722 differ = (old->trade_route_count != real_packet->trade_route_count);
16723 if (differ) {
16724 different++;
16725 BV_SET(fields, 24);
16726 }
16727
16728 differ = (old->pollution != real_packet->pollution);
16729 if (differ) {
16730 different++;
16731 BV_SET(fields, 25);
16732 }
16733
16734 differ = (old->illness_trade != real_packet->illness_trade);
16735 if (differ) {
16736 different++;
16737 BV_SET(fields, 26);
16738 }
16739
16740 differ = (old->production_kind != real_packet->production_kind);
16741 if (differ) {
16742 different++;
16743 BV_SET(fields, 27);
16744 }
16745
16746 differ = (old->production_value != real_packet->production_value);
16747 if (differ) {
16748 different++;
16749 BV_SET(fields, 28);
16750 }
16751
16752 differ = (old->turn_founded != real_packet->turn_founded);
16753 if (differ) {
16754 different++;
16755 BV_SET(fields, 29);
16756 }
16757
16758 differ = (old->turn_last_built != real_packet->turn_last_built);
16759 if (differ) {
16760 different++;
16761 BV_SET(fields, 30);
16762 }
16763
16764 differ = (old->changed_from_kind != real_packet->changed_from_kind);
16765 if (differ) {
16766 different++;
16767 BV_SET(fields, 31);
16768 }
16769
16770 differ = (old->changed_from_value != real_packet->changed_from_value);
16771 if (differ) {
16772 different++;
16773 BV_SET(fields, 32);
16774 }
16775
16776 differ = (old->before_change_shields != real_packet->before_change_shields);
16777 if (differ) {
16778 different++;
16779 BV_SET(fields, 33);
16780 }
16781
16782 differ = (old->disbanded_shields != real_packet->disbanded_shields);
16783 if (differ) {
16784 different++;
16785 BV_SET(fields, 34);
16786 }
16787
16788 differ = (old->caravan_shields != real_packet->caravan_shields);
16789 if (differ) {
16790 different++;
16791 BV_SET(fields, 35);
16792 }
16793
16794 differ = (old->last_turns_shield_surplus != real_packet->last_turns_shield_surplus);
16795 if (differ) {
16796 different++;
16797 BV_SET(fields, 36);
16798 }
16799
16800 differ = (old->airlift != real_packet->airlift);
16801 if (differ) {
16802 different++;
16803 BV_SET(fields, 37);
16804 }
16805
16806 differ = (old->did_buy != real_packet->did_buy);
16807 if (differ) {
16808 different++;
16809 }
16810 /* folded into head */
16811 if (real_packet->did_buy) {
16812 BV_SET(fields, 38);
16813 }
16814
16815 differ = (old->did_sell != real_packet->did_sell);
16816 if (differ) {
16817 different++;
16818 }
16819 /* folded into head */
16820 if (real_packet->did_sell) {
16821 BV_SET(fields, 39);
16822 }
16823
16824 differ = (old->was_happy != real_packet->was_happy);
16825 if (differ) {
16826 different++;
16827 }
16828 /* folded into head */
16829 if (real_packet->was_happy) {
16830 BV_SET(fields, 40);
16831 }
16832
16833 differ = (old->had_famine != real_packet->had_famine);
16834 if (differ) {
16835 different++;
16836 }
16837 /* folded into head */
16838 if (real_packet->had_famine) {
16839 BV_SET(fields, 41);
16840 }
16841
16842 differ = (old->anarchy != real_packet->anarchy);
16843 if (differ) {
16844 different++;
16845 BV_SET(fields, 42);
16846 }
16847
16848 differ = (old->rapture != real_packet->rapture);
16849 if (differ) {
16850 different++;
16851 BV_SET(fields, 43);
16852 }
16853
16854 differ = (old->diplomat_investigate != real_packet->diplomat_investigate);
16855 if (differ) {
16856 different++;
16857 }
16858 /* folded into head */
16859 if (real_packet->diplomat_investigate) {
16860 BV_SET(fields, 44);
16861 }
16862
16863 differ = (old->walls != real_packet->walls);
16864 if (differ) {
16865 different++;
16866 BV_SET(fields, 45);
16867 }
16868
16869 differ = (old->city_image != real_packet->city_image);
16870 if (differ) {
16871 different++;
16872 BV_SET(fields, 46);
16873 }
16874
16875 differ = (old->steal != real_packet->steal);
16876 if (differ) {
16877 different++;
16878 BV_SET(fields, 47);
16879 }
16880
16881 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
16882 if (differ) {
16883 different++;
16884 BV_SET(fields, 48);
16885 }
16886
16887 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
16888 if (differ) {
16889 different++;
16890 BV_SET(fields, 49);
16891 }
16892
16893 differ = !BV_ARE_EQUAL(old->city_options, real_packet->city_options);
16894 if (differ) {
16895 different++;
16896 BV_SET(fields, 50);
16897 }
16898
16899 differ = (old->wl_cb != real_packet->wl_cb);
16900 if (differ) {
16901 different++;
16902 BV_SET(fields, 51);
16903 }
16904
16905 differ = (old->acquire_type != real_packet->acquire_type);
16906 if (differ) {
16907 different++;
16908 BV_SET(fields, 52);
16909 }
16910
16911 differ = (strcmp(old->name, real_packet->name) != 0);
16912 if (differ) {
16913 different++;
16914 BV_SET(fields, 53);
16915 }
16916
16917 if (different == 0) {
16918 log_packet_detailed(" no change -> discard");
16920 }
16921#endif /* FREECIV_DELTA_PROTOCOL */
16922
16923#ifdef FREECIV_JSON_CONNECTION
16924 struct plocation field_addr;
16925 {
16926 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
16929 }
16930#endif /* FREECIV_JSON_CONNECTION */
16931
16932#ifdef FREECIV_JSON_CONNECTION
16933 field_addr.name = "id";
16934#endif /* FREECIV_JSON_CONNECTION */
16935 e = 0;
16936
16937 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
16938
16939 if (e) {
16940 log_packet_detailed("'id' field error detected");
16941 }
16942
16943#ifdef FREECIV_DELTA_PROTOCOL
16944#ifdef FREECIV_JSON_CONNECTION
16945 field_addr.name = "fields";
16946#endif /* FREECIV_JSON_CONNECTION */
16947 e = 0;
16948 e |= DIO_BV_PUT(&dout, &field_addr, fields);
16949 if (e) {
16950 log_packet_detailed("fields bitvector error detected");
16951 }
16952
16953 if (BV_ISSET(fields, 0)) {
16954 log_packet_detailed(" field 'tile' has changed");
16955
16956#ifdef FREECIV_JSON_CONNECTION
16957 field_addr.name = "tile";
16958#endif /* FREECIV_JSON_CONNECTION */
16959 e = 0;
16960
16961 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
16962
16963 if (e) {
16964 log_packet_detailed("'tile' field error detected");
16965 }
16966 }
16967
16968 if (BV_ISSET(fields, 1)) {
16969 log_packet_detailed(" field 'owner' has changed");
16970
16971#ifdef FREECIV_JSON_CONNECTION
16972 field_addr.name = "owner";
16973#endif /* FREECIV_JSON_CONNECTION */
16974 e = 0;
16975
16976 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
16977
16978 if (e) {
16979 log_packet_detailed("'owner' field error detected");
16980 }
16981 }
16982
16983 if (BV_ISSET(fields, 2)) {
16984 log_packet_detailed(" field 'original' has changed");
16985
16986#ifdef FREECIV_JSON_CONNECTION
16987 field_addr.name = "original";
16988#endif /* FREECIV_JSON_CONNECTION */
16989 e = 0;
16990
16991 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
16992
16993 if (e) {
16994 log_packet_detailed("'original' field error detected");
16995 }
16996 }
16997
16998 if (BV_ISSET(fields, 3)) {
16999 log_packet_detailed(" field 'size' has changed");
17000
17001#ifdef FREECIV_JSON_CONNECTION
17002 field_addr.name = "size";
17003#endif /* FREECIV_JSON_CONNECTION */
17004 e = 0;
17005
17006 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
17007
17008 if (e) {
17009 log_packet_detailed("'size' field error detected");
17010 }
17011 }
17012
17013 if (BV_ISSET(fields, 4)) {
17014 log_packet_detailed(" field 'city_radius_sq' has changed");
17015
17016#ifdef FREECIV_JSON_CONNECTION
17017 field_addr.name = "city_radius_sq";
17018#endif /* FREECIV_JSON_CONNECTION */
17019 e = 0;
17020
17021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
17022
17023 if (e) {
17024 log_packet_detailed("'city_radius_sq' field error detected");
17025 }
17026 }
17027
17028 if (BV_ISSET(fields, 5)) {
17029 log_packet_detailed(" field 'style' has changed");
17030
17031#ifdef FREECIV_JSON_CONNECTION
17032 field_addr.name = "style";
17033#endif /* FREECIV_JSON_CONNECTION */
17034 e = 0;
17035
17036 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17037
17038 if (e) {
17039 log_packet_detailed("'style' field error detected");
17040 }
17041 }
17042
17043 if (BV_ISSET(fields, 6)) {
17044 log_packet_detailed(" field 'capital' has changed");
17045
17046#ifdef FREECIV_JSON_CONNECTION
17047 field_addr.name = "capital";
17048#endif /* FREECIV_JSON_CONNECTION */
17049 e = 0;
17050
17051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17052
17053 if (e) {
17054 log_packet_detailed("'capital' field error detected");
17055 }
17056 }
17057
17058 if (BV_ISSET(fields, 7)) {
17059 log_packet_detailed(" field 'ppl_happy' has changed");
17060
17061#ifdef FREECIV_JSON_CONNECTION
17062 field_addr.name = "ppl_happy";
17063#endif /* FREECIV_JSON_CONNECTION */
17064 e = 0;
17065
17066 {
17067 int i;
17068
17069#ifdef FREECIV_JSON_CONNECTION
17070 /* Create the array. */
17072
17073 /* Enter array. */
17074 field_addr.sub_location = plocation_elem_new(0);
17075#endif /* FREECIV_JSON_CONNECTION */
17076
17077 for (i = 0; i < FEELING_LAST; i++) {
17078#ifdef FREECIV_JSON_CONNECTION
17079 /* Next array element. */
17080 field_addr.sub_location->number = i;
17081#endif /* FREECIV_JSON_CONNECTION */
17082
17083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
17084 }
17085
17086#ifdef FREECIV_JSON_CONNECTION
17087 /* Exit array. */
17088 FC_FREE(field_addr.sub_location);
17089#endif /* FREECIV_JSON_CONNECTION */
17090 }
17091
17092 if (e) {
17093 log_packet_detailed("'ppl_happy' field error detected");
17094 }
17095 }
17096
17097 if (BV_ISSET(fields, 8)) {
17098 log_packet_detailed(" field 'ppl_content' has changed");
17099
17100#ifdef FREECIV_JSON_CONNECTION
17101 field_addr.name = "ppl_content";
17102#endif /* FREECIV_JSON_CONNECTION */
17103 e = 0;
17104
17105 {
17106 int i;
17107
17108#ifdef FREECIV_JSON_CONNECTION
17109 /* Create the array. */
17111
17112 /* Enter array. */
17113 field_addr.sub_location = plocation_elem_new(0);
17114#endif /* FREECIV_JSON_CONNECTION */
17115
17116 for (i = 0; i < FEELING_LAST; i++) {
17117#ifdef FREECIV_JSON_CONNECTION
17118 /* Next array element. */
17119 field_addr.sub_location->number = i;
17120#endif /* FREECIV_JSON_CONNECTION */
17121
17122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
17123 }
17124
17125#ifdef FREECIV_JSON_CONNECTION
17126 /* Exit array. */
17127 FC_FREE(field_addr.sub_location);
17128#endif /* FREECIV_JSON_CONNECTION */
17129 }
17130
17131 if (e) {
17132 log_packet_detailed("'ppl_content' field error detected");
17133 }
17134 }
17135
17136 if (BV_ISSET(fields, 9)) {
17137 log_packet_detailed(" field 'ppl_unhappy' has changed");
17138
17139#ifdef FREECIV_JSON_CONNECTION
17140 field_addr.name = "ppl_unhappy";
17141#endif /* FREECIV_JSON_CONNECTION */
17142 e = 0;
17143
17144 {
17145 int i;
17146
17147#ifdef FREECIV_JSON_CONNECTION
17148 /* Create the array. */
17150
17151 /* Enter array. */
17152 field_addr.sub_location = plocation_elem_new(0);
17153#endif /* FREECIV_JSON_CONNECTION */
17154
17155 for (i = 0; i < FEELING_LAST; i++) {
17156#ifdef FREECIV_JSON_CONNECTION
17157 /* Next array element. */
17158 field_addr.sub_location->number = i;
17159#endif /* FREECIV_JSON_CONNECTION */
17160
17161 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
17162 }
17163
17164#ifdef FREECIV_JSON_CONNECTION
17165 /* Exit array. */
17166 FC_FREE(field_addr.sub_location);
17167#endif /* FREECIV_JSON_CONNECTION */
17168 }
17169
17170 if (e) {
17171 log_packet_detailed("'ppl_unhappy' field error detected");
17172 }
17173 }
17174
17175 if (BV_ISSET(fields, 10)) {
17176 log_packet_detailed(" field 'ppl_angry' has changed");
17177
17178#ifdef FREECIV_JSON_CONNECTION
17179 field_addr.name = "ppl_angry";
17180#endif /* FREECIV_JSON_CONNECTION */
17181 e = 0;
17182
17183 {
17184 int i;
17185
17186#ifdef FREECIV_JSON_CONNECTION
17187 /* Create the array. */
17189
17190 /* Enter array. */
17191 field_addr.sub_location = plocation_elem_new(0);
17192#endif /* FREECIV_JSON_CONNECTION */
17193
17194 for (i = 0; i < FEELING_LAST; i++) {
17195#ifdef FREECIV_JSON_CONNECTION
17196 /* Next array element. */
17197 field_addr.sub_location->number = i;
17198#endif /* FREECIV_JSON_CONNECTION */
17199
17200 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
17201 }
17202
17203#ifdef FREECIV_JSON_CONNECTION
17204 /* Exit array. */
17205 FC_FREE(field_addr.sub_location);
17206#endif /* FREECIV_JSON_CONNECTION */
17207 }
17208
17209 if (e) {
17210 log_packet_detailed("'ppl_angry' field error detected");
17211 }
17212 }
17213
17214 if (BV_ISSET(fields, 11)) {
17215 log_packet_detailed(" field 'specialists_size' has changed");
17216
17217#ifdef FREECIV_JSON_CONNECTION
17218 field_addr.name = "specialists_size";
17219#endif /* FREECIV_JSON_CONNECTION */
17220 e = 0;
17221
17222 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
17223
17224 if (e) {
17225 log_packet_detailed("'specialists_size' field error detected");
17226 }
17227 }
17228
17229 if (BV_ISSET(fields, 12)) {
17230 log_packet_detailed(" field 'specialists' has changed");
17231
17232#ifdef FREECIV_JSON_CONNECTION
17233 field_addr.name = "specialists";
17234#endif /* FREECIV_JSON_CONNECTION */
17235 e = 0;
17236
17237 {
17238 int i;
17239
17240#ifdef FREECIV_JSON_CONNECTION
17241 /* Create the array. */
17242 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
17243
17244 /* Enter array. */
17245 field_addr.sub_location = plocation_elem_new(0);
17246#endif /* FREECIV_JSON_CONNECTION */
17247
17248 for (i = 0; i < real_packet->specialists_size; i++) {
17249#ifdef FREECIV_JSON_CONNECTION
17250 /* Next array element. */
17251 field_addr.sub_location->number = i;
17252#endif /* FREECIV_JSON_CONNECTION */
17253
17254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
17255 }
17256
17257#ifdef FREECIV_JSON_CONNECTION
17258 /* Exit array. */
17259 FC_FREE(field_addr.sub_location);
17260#endif /* FREECIV_JSON_CONNECTION */
17261 }
17262
17263 if (e) {
17264 log_packet_detailed("'specialists' field error detected");
17265 }
17266 }
17267
17268 if (BV_ISSET(fields, 13)) {
17269 log_packet_detailed(" field 'history' has changed");
17270
17271#ifdef FREECIV_JSON_CONNECTION
17272 field_addr.name = "history";
17273#endif /* FREECIV_JSON_CONNECTION */
17274 e = 0;
17275
17276 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
17277
17278 if (e) {
17279 log_packet_detailed("'history' field error detected");
17280 }
17281 }
17282
17283 if (BV_ISSET(fields, 14)) {
17284 log_packet_detailed(" field 'culture' has changed");
17285
17286#ifdef FREECIV_JSON_CONNECTION
17287 field_addr.name = "culture";
17288#endif /* FREECIV_JSON_CONNECTION */
17289 e = 0;
17290
17291 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
17292
17293 if (e) {
17294 log_packet_detailed("'culture' field error detected");
17295 }
17296 }
17297
17298 if (BV_ISSET(fields, 15)) {
17299 log_packet_detailed(" field 'buy_cost' has changed");
17300
17301#ifdef FREECIV_JSON_CONNECTION
17302 field_addr.name = "buy_cost";
17303#endif /* FREECIV_JSON_CONNECTION */
17304 e = 0;
17305
17306 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
17307
17308 if (e) {
17309 log_packet_detailed("'buy_cost' field error detected");
17310 }
17311 }
17312
17313 if (BV_ISSET(fields, 16)) {
17314 log_packet_detailed(" field 'surplus' has changed");
17315
17316#ifdef FREECIV_JSON_CONNECTION
17317 field_addr.name = "surplus";
17318#endif /* FREECIV_JSON_CONNECTION */
17319 e = 0;
17320
17321 {
17322 int i;
17323
17324#ifdef FREECIV_JSON_CONNECTION
17325 /* Create the array. */
17326 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17327
17328 /* Enter array. */
17329 field_addr.sub_location = plocation_elem_new(0);
17330#endif /* FREECIV_JSON_CONNECTION */
17331
17332 for (i = 0; i < O_LAST; i++) {
17333#ifdef FREECIV_JSON_CONNECTION
17334 /* Next array element. */
17335 field_addr.sub_location->number = i;
17336#endif /* FREECIV_JSON_CONNECTION */
17337
17338 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
17339 }
17340
17341#ifdef FREECIV_JSON_CONNECTION
17342 /* Exit array. */
17343 FC_FREE(field_addr.sub_location);
17344#endif /* FREECIV_JSON_CONNECTION */
17345 }
17346
17347 if (e) {
17348 log_packet_detailed("'surplus' field error detected");
17349 }
17350 }
17351
17352 if (BV_ISSET(fields, 17)) {
17353 log_packet_detailed(" field 'waste' has changed");
17354
17355#ifdef FREECIV_JSON_CONNECTION
17356 field_addr.name = "waste";
17357#endif /* FREECIV_JSON_CONNECTION */
17358 e = 0;
17359
17360 {
17361 int i;
17362
17363#ifdef FREECIV_JSON_CONNECTION
17364 /* Create the array. */
17365 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17366
17367 /* Enter array. */
17368 field_addr.sub_location = plocation_elem_new(0);
17369#endif /* FREECIV_JSON_CONNECTION */
17370
17371 for (i = 0; i < O_LAST; i++) {
17372#ifdef FREECIV_JSON_CONNECTION
17373 /* Next array element. */
17374 field_addr.sub_location->number = i;
17375#endif /* FREECIV_JSON_CONNECTION */
17376
17377 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
17378 }
17379
17380#ifdef FREECIV_JSON_CONNECTION
17381 /* Exit array. */
17382 FC_FREE(field_addr.sub_location);
17383#endif /* FREECIV_JSON_CONNECTION */
17384 }
17385
17386 if (e) {
17387 log_packet_detailed("'waste' field error detected");
17388 }
17389 }
17390
17391 if (BV_ISSET(fields, 18)) {
17392 log_packet_detailed(" field 'unhappy_penalty' has changed");
17393
17394#ifdef FREECIV_JSON_CONNECTION
17395 field_addr.name = "unhappy_penalty";
17396#endif /* FREECIV_JSON_CONNECTION */
17397 e = 0;
17398
17399 {
17400 int i;
17401
17402#ifdef FREECIV_JSON_CONNECTION
17403 /* Create the array. */
17404 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17405
17406 /* Enter array. */
17407 field_addr.sub_location = plocation_elem_new(0);
17408#endif /* FREECIV_JSON_CONNECTION */
17409
17410 for (i = 0; i < O_LAST; i++) {
17411#ifdef FREECIV_JSON_CONNECTION
17412 /* Next array element. */
17413 field_addr.sub_location->number = i;
17414#endif /* FREECIV_JSON_CONNECTION */
17415
17416 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
17417 }
17418
17419#ifdef FREECIV_JSON_CONNECTION
17420 /* Exit array. */
17421 FC_FREE(field_addr.sub_location);
17422#endif /* FREECIV_JSON_CONNECTION */
17423 }
17424
17425 if (e) {
17426 log_packet_detailed("'unhappy_penalty' field error detected");
17427 }
17428 }
17429
17430 if (BV_ISSET(fields, 19)) {
17431 log_packet_detailed(" field 'prod' has changed");
17432
17433#ifdef FREECIV_JSON_CONNECTION
17434 field_addr.name = "prod";
17435#endif /* FREECIV_JSON_CONNECTION */
17436 e = 0;
17437
17438 {
17439 int i;
17440
17441#ifdef FREECIV_JSON_CONNECTION
17442 /* Create the array. */
17443 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17444
17445 /* Enter array. */
17446 field_addr.sub_location = plocation_elem_new(0);
17447#endif /* FREECIV_JSON_CONNECTION */
17448
17449 for (i = 0; i < O_LAST; i++) {
17450#ifdef FREECIV_JSON_CONNECTION
17451 /* Next array element. */
17452 field_addr.sub_location->number = i;
17453#endif /* FREECIV_JSON_CONNECTION */
17454
17455 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
17456 }
17457
17458#ifdef FREECIV_JSON_CONNECTION
17459 /* Exit array. */
17460 FC_FREE(field_addr.sub_location);
17461#endif /* FREECIV_JSON_CONNECTION */
17462 }
17463
17464 if (e) {
17465 log_packet_detailed("'prod' field error detected");
17466 }
17467 }
17468
17469 if (BV_ISSET(fields, 20)) {
17470 log_packet_detailed(" field 'citizen_base' has changed");
17471
17472#ifdef FREECIV_JSON_CONNECTION
17473 field_addr.name = "citizen_base";
17474#endif /* FREECIV_JSON_CONNECTION */
17475 e = 0;
17476
17477 {
17478 int i;
17479
17480#ifdef FREECIV_JSON_CONNECTION
17481 /* Create the array. */
17482 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17483
17484 /* Enter array. */
17485 field_addr.sub_location = plocation_elem_new(0);
17486#endif /* FREECIV_JSON_CONNECTION */
17487
17488 for (i = 0; i < O_LAST; i++) {
17489#ifdef FREECIV_JSON_CONNECTION
17490 /* Next array element. */
17491 field_addr.sub_location->number = i;
17492#endif /* FREECIV_JSON_CONNECTION */
17493
17494 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
17495 }
17496
17497#ifdef FREECIV_JSON_CONNECTION
17498 /* Exit array. */
17499 FC_FREE(field_addr.sub_location);
17500#endif /* FREECIV_JSON_CONNECTION */
17501 }
17502
17503 if (e) {
17504 log_packet_detailed("'citizen_base' field error detected");
17505 }
17506 }
17507
17508 if (BV_ISSET(fields, 21)) {
17509 log_packet_detailed(" field 'usage' has changed");
17510
17511#ifdef FREECIV_JSON_CONNECTION
17512 field_addr.name = "usage";
17513#endif /* FREECIV_JSON_CONNECTION */
17514 e = 0;
17515
17516 {
17517 int i;
17518
17519#ifdef FREECIV_JSON_CONNECTION
17520 /* Create the array. */
17521 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17522
17523 /* Enter array. */
17524 field_addr.sub_location = plocation_elem_new(0);
17525#endif /* FREECIV_JSON_CONNECTION */
17526
17527 for (i = 0; i < O_LAST; i++) {
17528#ifdef FREECIV_JSON_CONNECTION
17529 /* Next array element. */
17530 field_addr.sub_location->number = i;
17531#endif /* FREECIV_JSON_CONNECTION */
17532
17533 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
17534 }
17535
17536#ifdef FREECIV_JSON_CONNECTION
17537 /* Exit array. */
17538 FC_FREE(field_addr.sub_location);
17539#endif /* FREECIV_JSON_CONNECTION */
17540 }
17541
17542 if (e) {
17543 log_packet_detailed("'usage' field error detected");
17544 }
17545 }
17546
17547 if (BV_ISSET(fields, 22)) {
17548 log_packet_detailed(" field 'food_stock' has changed");
17549
17550#ifdef FREECIV_JSON_CONNECTION
17551 field_addr.name = "food_stock";
17552#endif /* FREECIV_JSON_CONNECTION */
17553 e = 0;
17554
17555 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
17556
17557 if (e) {
17558 log_packet_detailed("'food_stock' field error detected");
17559 }
17560 }
17561
17562 if (BV_ISSET(fields, 23)) {
17563 log_packet_detailed(" field 'shield_stock' has changed");
17564
17565#ifdef FREECIV_JSON_CONNECTION
17566 field_addr.name = "shield_stock";
17567#endif /* FREECIV_JSON_CONNECTION */
17568 e = 0;
17569
17570 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
17571
17572 if (e) {
17573 log_packet_detailed("'shield_stock' field error detected");
17574 }
17575 }
17576
17577 if (BV_ISSET(fields, 24)) {
17578 log_packet_detailed(" field 'trade_route_count' has changed");
17579
17580#ifdef FREECIV_JSON_CONNECTION
17581 field_addr.name = "trade_route_count";
17582#endif /* FREECIV_JSON_CONNECTION */
17583 e = 0;
17584
17585 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
17586
17587 if (e) {
17588 log_packet_detailed("'trade_route_count' field error detected");
17589 }
17590 }
17591
17592 if (BV_ISSET(fields, 25)) {
17593 log_packet_detailed(" field 'pollution' has changed");
17594
17595#ifdef FREECIV_JSON_CONNECTION
17596 field_addr.name = "pollution";
17597#endif /* FREECIV_JSON_CONNECTION */
17598 e = 0;
17599
17600 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
17601
17602 if (e) {
17603 log_packet_detailed("'pollution' field error detected");
17604 }
17605 }
17606
17607 if (BV_ISSET(fields, 26)) {
17608 log_packet_detailed(" field 'illness_trade' has changed");
17609
17610#ifdef FREECIV_JSON_CONNECTION
17611 field_addr.name = "illness_trade";
17612#endif /* FREECIV_JSON_CONNECTION */
17613 e = 0;
17614
17615 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
17616
17617 if (e) {
17618 log_packet_detailed("'illness_trade' field error detected");
17619 }
17620 }
17621
17622 if (BV_ISSET(fields, 27)) {
17623 log_packet_detailed(" field 'production_kind' has changed");
17624
17625#ifdef FREECIV_JSON_CONNECTION
17626 field_addr.name = "production_kind";
17627#endif /* FREECIV_JSON_CONNECTION */
17628 e = 0;
17629
17630 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
17631
17632 if (e) {
17633 log_packet_detailed("'production_kind' field error detected");
17634 }
17635 }
17636
17637 if (BV_ISSET(fields, 28)) {
17638 log_packet_detailed(" field 'production_value' has changed");
17639
17640#ifdef FREECIV_JSON_CONNECTION
17641 field_addr.name = "production_value";
17642#endif /* FREECIV_JSON_CONNECTION */
17643 e = 0;
17644
17645 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
17646
17647 if (e) {
17648 log_packet_detailed("'production_value' field error detected");
17649 }
17650 }
17651
17652 if (BV_ISSET(fields, 29)) {
17653 log_packet_detailed(" field 'turn_founded' has changed");
17654
17655#ifdef FREECIV_JSON_CONNECTION
17656 field_addr.name = "turn_founded";
17657#endif /* FREECIV_JSON_CONNECTION */
17658 e = 0;
17659
17660 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
17661
17662 if (e) {
17663 log_packet_detailed("'turn_founded' field error detected");
17664 }
17665 }
17666
17667 if (BV_ISSET(fields, 30)) {
17668 log_packet_detailed(" field 'turn_last_built' has changed");
17669
17670#ifdef FREECIV_JSON_CONNECTION
17671 field_addr.name = "turn_last_built";
17672#endif /* FREECIV_JSON_CONNECTION */
17673 e = 0;
17674
17675 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
17676
17677 if (e) {
17678 log_packet_detailed("'turn_last_built' field error detected");
17679 }
17680 }
17681
17682 if (BV_ISSET(fields, 31)) {
17683 log_packet_detailed(" field 'changed_from_kind' has changed");
17684
17685#ifdef FREECIV_JSON_CONNECTION
17686 field_addr.name = "changed_from_kind";
17687#endif /* FREECIV_JSON_CONNECTION */
17688 e = 0;
17689
17690 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
17691
17692 if (e) {
17693 log_packet_detailed("'changed_from_kind' field error detected");
17694 }
17695 }
17696
17697 if (BV_ISSET(fields, 32)) {
17698 log_packet_detailed(" field 'changed_from_value' has changed");
17699
17700#ifdef FREECIV_JSON_CONNECTION
17701 field_addr.name = "changed_from_value";
17702#endif /* FREECIV_JSON_CONNECTION */
17703 e = 0;
17704
17705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
17706
17707 if (e) {
17708 log_packet_detailed("'changed_from_value' field error detected");
17709 }
17710 }
17711
17712 if (BV_ISSET(fields, 33)) {
17713 log_packet_detailed(" field 'before_change_shields' has changed");
17714
17715#ifdef FREECIV_JSON_CONNECTION
17716 field_addr.name = "before_change_shields";
17717#endif /* FREECIV_JSON_CONNECTION */
17718 e = 0;
17719
17720 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
17721
17722 if (e) {
17723 log_packet_detailed("'before_change_shields' field error detected");
17724 }
17725 }
17726
17727 if (BV_ISSET(fields, 34)) {
17728 log_packet_detailed(" field 'disbanded_shields' has changed");
17729
17730#ifdef FREECIV_JSON_CONNECTION
17731 field_addr.name = "disbanded_shields";
17732#endif /* FREECIV_JSON_CONNECTION */
17733 e = 0;
17734
17735 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
17736
17737 if (e) {
17738 log_packet_detailed("'disbanded_shields' field error detected");
17739 }
17740 }
17741
17742 if (BV_ISSET(fields, 35)) {
17743 log_packet_detailed(" field 'caravan_shields' has changed");
17744
17745#ifdef FREECIV_JSON_CONNECTION
17746 field_addr.name = "caravan_shields";
17747#endif /* FREECIV_JSON_CONNECTION */
17748 e = 0;
17749
17750 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
17751
17752 if (e) {
17753 log_packet_detailed("'caravan_shields' field error detected");
17754 }
17755 }
17756
17757 if (BV_ISSET(fields, 36)) {
17758 log_packet_detailed(" field 'last_turns_shield_surplus' has changed");
17759
17760#ifdef FREECIV_JSON_CONNECTION
17761 field_addr.name = "last_turns_shield_surplus";
17762#endif /* FREECIV_JSON_CONNECTION */
17763 e = 0;
17764
17765 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
17766
17767 if (e) {
17768 log_packet_detailed("'last_turns_shield_surplus' field error detected");
17769 }
17770 }
17771
17772 if (BV_ISSET(fields, 37)) {
17773 log_packet_detailed(" field 'airlift' has changed");
17774
17775#ifdef FREECIV_JSON_CONNECTION
17776 field_addr.name = "airlift";
17777#endif /* FREECIV_JSON_CONNECTION */
17778 e = 0;
17779
17780 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
17781
17782 if (e) {
17783 log_packet_detailed("'airlift' field error detected");
17784 }
17785 }
17786
17787 /* field 38 is folded into the header */
17788
17789 /* field 39 is folded into the header */
17790
17791 /* field 40 is folded into the header */
17792
17793 /* field 41 is folded into the header */
17794
17795 if (BV_ISSET(fields, 42)) {
17796 log_packet_detailed(" field 'anarchy' has changed");
17797
17798#ifdef FREECIV_JSON_CONNECTION
17799 field_addr.name = "anarchy";
17800#endif /* FREECIV_JSON_CONNECTION */
17801 e = 0;
17802
17803 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
17804
17805 if (e) {
17806 log_packet_detailed("'anarchy' field error detected");
17807 }
17808 }
17809
17810 if (BV_ISSET(fields, 43)) {
17811 log_packet_detailed(" field 'rapture' has changed");
17812
17813#ifdef FREECIV_JSON_CONNECTION
17814 field_addr.name = "rapture";
17815#endif /* FREECIV_JSON_CONNECTION */
17816 e = 0;
17817
17818 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
17819
17820 if (e) {
17821 log_packet_detailed("'rapture' field error detected");
17822 }
17823 }
17824
17825 /* field 44 is folded into the header */
17826
17827 if (BV_ISSET(fields, 45)) {
17828 log_packet_detailed(" field 'walls' has changed");
17829
17830#ifdef FREECIV_JSON_CONNECTION
17831 field_addr.name = "walls";
17832#endif /* FREECIV_JSON_CONNECTION */
17833 e = 0;
17834
17835 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
17836
17837 if (e) {
17838 log_packet_detailed("'walls' field error detected");
17839 }
17840 }
17841
17842 if (BV_ISSET(fields, 46)) {
17843 log_packet_detailed(" field 'city_image' has changed");
17844
17845#ifdef FREECIV_JSON_CONNECTION
17846 field_addr.name = "city_image";
17847#endif /* FREECIV_JSON_CONNECTION */
17848 e = 0;
17849
17850 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
17851
17852 if (e) {
17853 log_packet_detailed("'city_image' field error detected");
17854 }
17855 }
17856
17857 if (BV_ISSET(fields, 47)) {
17858 log_packet_detailed(" field 'steal' has changed");
17859
17860#ifdef FREECIV_JSON_CONNECTION
17861 field_addr.name = "steal";
17862#endif /* FREECIV_JSON_CONNECTION */
17863 e = 0;
17864
17865 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
17866
17867 if (e) {
17868 log_packet_detailed("'steal' field error detected");
17869 }
17870 }
17871
17872 if (BV_ISSET(fields, 48)) {
17873 log_packet_detailed(" field 'worklist' has changed");
17874
17875#ifdef FREECIV_JSON_CONNECTION
17876 field_addr.name = "worklist";
17877#endif /* FREECIV_JSON_CONNECTION */
17878 e = 0;
17879
17880 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
17881
17882 if (e) {
17883 log_packet_detailed("'worklist' field error detected");
17884 }
17885 }
17886
17887 if (BV_ISSET(fields, 49)) {
17888 log_packet_detailed(" field 'improvements' has changed");
17889
17890#ifdef FREECIV_JSON_CONNECTION
17891 field_addr.name = "improvements";
17892#endif /* FREECIV_JSON_CONNECTION */
17893 e = 0;
17894
17895 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
17896
17897 if (e) {
17898 log_packet_detailed("'improvements' field error detected");
17899 }
17900 }
17901
17902 if (BV_ISSET(fields, 50)) {
17903 log_packet_detailed(" field 'city_options' has changed");
17904
17905#ifdef FREECIV_JSON_CONNECTION
17906 field_addr.name = "city_options";
17907#endif /* FREECIV_JSON_CONNECTION */
17908 e = 0;
17909
17910 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
17911
17912 if (e) {
17913 log_packet_detailed("'city_options' field error detected");
17914 }
17915 }
17916
17917 if (BV_ISSET(fields, 51)) {
17918 log_packet_detailed(" field 'wl_cb' has changed");
17919
17920#ifdef FREECIV_JSON_CONNECTION
17921 field_addr.name = "wl_cb";
17922#endif /* FREECIV_JSON_CONNECTION */
17923 e = 0;
17924
17925 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
17926
17927 if (e) {
17928 log_packet_detailed("'wl_cb' field error detected");
17929 }
17930 }
17931
17932 if (BV_ISSET(fields, 52)) {
17933 log_packet_detailed(" field 'acquire_type' has changed");
17934
17935#ifdef FREECIV_JSON_CONNECTION
17936 field_addr.name = "acquire_type";
17937#endif /* FREECIV_JSON_CONNECTION */
17938 e = 0;
17939
17940 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
17941
17942 if (e) {
17943 log_packet_detailed("'acquire_type' field error detected");
17944 }
17945 }
17946
17947 if (BV_ISSET(fields, 53)) {
17948 log_packet_detailed(" field 'name' has changed");
17949
17950#ifdef FREECIV_JSON_CONNECTION
17951 field_addr.name = "name";
17952#endif /* FREECIV_JSON_CONNECTION */
17953 e = 0;
17954
17955 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
17956
17957 if (e) {
17958 log_packet_detailed("'name' field error detected");
17959 }
17960 }
17961
17962 *old = *real_packet;
17963
17964 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
17965 if (nullptr != *hash) {
17967 }
17968
17969#else /* FREECIV_DELTA_PROTOCOL */
17970#ifdef FREECIV_JSON_CONNECTION
17971 field_addr.name = "tile";
17972#endif /* FREECIV_JSON_CONNECTION */
17973 e = 0;
17974
17975 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
17976
17977 if (e) {
17978 log_packet_detailed("'tile' field error detected");
17979 }
17980
17981#ifdef FREECIV_JSON_CONNECTION
17982 field_addr.name = "owner";
17983#endif /* FREECIV_JSON_CONNECTION */
17984 e = 0;
17985
17986 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
17987
17988 if (e) {
17989 log_packet_detailed("'owner' field error detected");
17990 }
17991
17992#ifdef FREECIV_JSON_CONNECTION
17993 field_addr.name = "original";
17994#endif /* FREECIV_JSON_CONNECTION */
17995 e = 0;
17996
17997 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
17998
17999 if (e) {
18000 log_packet_detailed("'original' field error detected");
18001 }
18002
18003#ifdef FREECIV_JSON_CONNECTION
18004 field_addr.name = "size";
18005#endif /* FREECIV_JSON_CONNECTION */
18006 e = 0;
18007
18008 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
18009
18010 if (e) {
18011 log_packet_detailed("'size' field error detected");
18012 }
18013
18014#ifdef FREECIV_JSON_CONNECTION
18015 field_addr.name = "city_radius_sq";
18016#endif /* FREECIV_JSON_CONNECTION */
18017 e = 0;
18018
18019 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
18020
18021 if (e) {
18022 log_packet_detailed("'city_radius_sq' field error detected");
18023 }
18024
18025#ifdef FREECIV_JSON_CONNECTION
18026 field_addr.name = "style";
18027#endif /* FREECIV_JSON_CONNECTION */
18028 e = 0;
18029
18030 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
18031
18032 if (e) {
18033 log_packet_detailed("'style' field error detected");
18034 }
18035
18036#ifdef FREECIV_JSON_CONNECTION
18037 field_addr.name = "capital";
18038#endif /* FREECIV_JSON_CONNECTION */
18039 e = 0;
18040
18041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
18042
18043 if (e) {
18044 log_packet_detailed("'capital' field error detected");
18045 }
18046
18047#ifdef FREECIV_JSON_CONNECTION
18048 field_addr.name = "ppl_happy";
18049#endif /* FREECIV_JSON_CONNECTION */
18050 e = 0;
18051
18052 {
18053 int i;
18054
18055#ifdef FREECIV_JSON_CONNECTION
18056 /* Create the array. */
18058
18059 /* Enter array. */
18060 field_addr.sub_location = plocation_elem_new(0);
18061#endif /* FREECIV_JSON_CONNECTION */
18062
18063 for (i = 0; i < FEELING_LAST; i++) {
18064#ifdef FREECIV_JSON_CONNECTION
18065 /* Next array element. */
18066 field_addr.sub_location->number = i;
18067#endif /* FREECIV_JSON_CONNECTION */
18068
18069 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
18070 }
18071
18072#ifdef FREECIV_JSON_CONNECTION
18073 /* Exit array. */
18074 FC_FREE(field_addr.sub_location);
18075#endif /* FREECIV_JSON_CONNECTION */
18076 }
18077
18078 if (e) {
18079 log_packet_detailed("'ppl_happy' field error detected");
18080 }
18081
18082#ifdef FREECIV_JSON_CONNECTION
18083 field_addr.name = "ppl_content";
18084#endif /* FREECIV_JSON_CONNECTION */
18085 e = 0;
18086
18087 {
18088 int i;
18089
18090#ifdef FREECIV_JSON_CONNECTION
18091 /* Create the array. */
18093
18094 /* Enter array. */
18095 field_addr.sub_location = plocation_elem_new(0);
18096#endif /* FREECIV_JSON_CONNECTION */
18097
18098 for (i = 0; i < FEELING_LAST; i++) {
18099#ifdef FREECIV_JSON_CONNECTION
18100 /* Next array element. */
18101 field_addr.sub_location->number = i;
18102#endif /* FREECIV_JSON_CONNECTION */
18103
18104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
18105 }
18106
18107#ifdef FREECIV_JSON_CONNECTION
18108 /* Exit array. */
18109 FC_FREE(field_addr.sub_location);
18110#endif /* FREECIV_JSON_CONNECTION */
18111 }
18112
18113 if (e) {
18114 log_packet_detailed("'ppl_content' field error detected");
18115 }
18116
18117#ifdef FREECIV_JSON_CONNECTION
18118 field_addr.name = "ppl_unhappy";
18119#endif /* FREECIV_JSON_CONNECTION */
18120 e = 0;
18121
18122 {
18123 int i;
18124
18125#ifdef FREECIV_JSON_CONNECTION
18126 /* Create the array. */
18128
18129 /* Enter array. */
18130 field_addr.sub_location = plocation_elem_new(0);
18131#endif /* FREECIV_JSON_CONNECTION */
18132
18133 for (i = 0; i < FEELING_LAST; i++) {
18134#ifdef FREECIV_JSON_CONNECTION
18135 /* Next array element. */
18136 field_addr.sub_location->number = i;
18137#endif /* FREECIV_JSON_CONNECTION */
18138
18139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
18140 }
18141
18142#ifdef FREECIV_JSON_CONNECTION
18143 /* Exit array. */
18144 FC_FREE(field_addr.sub_location);
18145#endif /* FREECIV_JSON_CONNECTION */
18146 }
18147
18148 if (e) {
18149 log_packet_detailed("'ppl_unhappy' field error detected");
18150 }
18151
18152#ifdef FREECIV_JSON_CONNECTION
18153 field_addr.name = "ppl_angry";
18154#endif /* FREECIV_JSON_CONNECTION */
18155 e = 0;
18156
18157 {
18158 int i;
18159
18160#ifdef FREECIV_JSON_CONNECTION
18161 /* Create the array. */
18163
18164 /* Enter array. */
18165 field_addr.sub_location = plocation_elem_new(0);
18166#endif /* FREECIV_JSON_CONNECTION */
18167
18168 for (i = 0; i < FEELING_LAST; i++) {
18169#ifdef FREECIV_JSON_CONNECTION
18170 /* Next array element. */
18171 field_addr.sub_location->number = i;
18172#endif /* FREECIV_JSON_CONNECTION */
18173
18174 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
18175 }
18176
18177#ifdef FREECIV_JSON_CONNECTION
18178 /* Exit array. */
18179 FC_FREE(field_addr.sub_location);
18180#endif /* FREECIV_JSON_CONNECTION */
18181 }
18182
18183 if (e) {
18184 log_packet_detailed("'ppl_angry' field error detected");
18185 }
18186
18187#ifdef FREECIV_JSON_CONNECTION
18188 field_addr.name = "specialists_size";
18189#endif /* FREECIV_JSON_CONNECTION */
18190 e = 0;
18191
18192 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
18193
18194 if (e) {
18195 log_packet_detailed("'specialists_size' field error detected");
18196 }
18197
18198#ifdef FREECIV_JSON_CONNECTION
18199 field_addr.name = "specialists";
18200#endif /* FREECIV_JSON_CONNECTION */
18201 e = 0;
18202
18203 {
18204 int i;
18205
18206#ifdef FREECIV_JSON_CONNECTION
18207 /* Create the array. */
18208 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
18209
18210 /* Enter array. */
18211 field_addr.sub_location = plocation_elem_new(0);
18212#endif /* FREECIV_JSON_CONNECTION */
18213
18214 for (i = 0; i < real_packet->specialists_size; i++) {
18215#ifdef FREECIV_JSON_CONNECTION
18216 /* Next array element. */
18217 field_addr.sub_location->number = i;
18218#endif /* FREECIV_JSON_CONNECTION */
18219
18220 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
18221 }
18222
18223#ifdef FREECIV_JSON_CONNECTION
18224 /* Exit array. */
18225 FC_FREE(field_addr.sub_location);
18226#endif /* FREECIV_JSON_CONNECTION */
18227 }
18228
18229 if (e) {
18230 log_packet_detailed("'specialists' field error detected");
18231 }
18232
18233#ifdef FREECIV_JSON_CONNECTION
18234 field_addr.name = "history";
18235#endif /* FREECIV_JSON_CONNECTION */
18236 e = 0;
18237
18238 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
18239
18240 if (e) {
18241 log_packet_detailed("'history' field error detected");
18242 }
18243
18244#ifdef FREECIV_JSON_CONNECTION
18245 field_addr.name = "culture";
18246#endif /* FREECIV_JSON_CONNECTION */
18247 e = 0;
18248
18249 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
18250
18251 if (e) {
18252 log_packet_detailed("'culture' field error detected");
18253 }
18254
18255#ifdef FREECIV_JSON_CONNECTION
18256 field_addr.name = "buy_cost";
18257#endif /* FREECIV_JSON_CONNECTION */
18258 e = 0;
18259
18260 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
18261
18262 if (e) {
18263 log_packet_detailed("'buy_cost' field error detected");
18264 }
18265
18266#ifdef FREECIV_JSON_CONNECTION
18267 field_addr.name = "surplus";
18268#endif /* FREECIV_JSON_CONNECTION */
18269 e = 0;
18270
18271 {
18272 int i;
18273
18274#ifdef FREECIV_JSON_CONNECTION
18275 /* Create the array. */
18276 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18277
18278 /* Enter array. */
18279 field_addr.sub_location = plocation_elem_new(0);
18280#endif /* FREECIV_JSON_CONNECTION */
18281
18282 for (i = 0; i < O_LAST; i++) {
18283#ifdef FREECIV_JSON_CONNECTION
18284 /* Next array element. */
18285 field_addr.sub_location->number = i;
18286#endif /* FREECIV_JSON_CONNECTION */
18287
18288 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
18289 }
18290
18291#ifdef FREECIV_JSON_CONNECTION
18292 /* Exit array. */
18293 FC_FREE(field_addr.sub_location);
18294#endif /* FREECIV_JSON_CONNECTION */
18295 }
18296
18297 if (e) {
18298 log_packet_detailed("'surplus' field error detected");
18299 }
18300
18301#ifdef FREECIV_JSON_CONNECTION
18302 field_addr.name = "waste";
18303#endif /* FREECIV_JSON_CONNECTION */
18304 e = 0;
18305
18306 {
18307 int i;
18308
18309#ifdef FREECIV_JSON_CONNECTION
18310 /* Create the array. */
18311 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18312
18313 /* Enter array. */
18314 field_addr.sub_location = plocation_elem_new(0);
18315#endif /* FREECIV_JSON_CONNECTION */
18316
18317 for (i = 0; i < O_LAST; i++) {
18318#ifdef FREECIV_JSON_CONNECTION
18319 /* Next array element. */
18320 field_addr.sub_location->number = i;
18321#endif /* FREECIV_JSON_CONNECTION */
18322
18323 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
18324 }
18325
18326#ifdef FREECIV_JSON_CONNECTION
18327 /* Exit array. */
18328 FC_FREE(field_addr.sub_location);
18329#endif /* FREECIV_JSON_CONNECTION */
18330 }
18331
18332 if (e) {
18333 log_packet_detailed("'waste' field error detected");
18334 }
18335
18336#ifdef FREECIV_JSON_CONNECTION
18337 field_addr.name = "unhappy_penalty";
18338#endif /* FREECIV_JSON_CONNECTION */
18339 e = 0;
18340
18341 {
18342 int i;
18343
18344#ifdef FREECIV_JSON_CONNECTION
18345 /* Create the array. */
18346 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18347
18348 /* Enter array. */
18349 field_addr.sub_location = plocation_elem_new(0);
18350#endif /* FREECIV_JSON_CONNECTION */
18351
18352 for (i = 0; i < O_LAST; i++) {
18353#ifdef FREECIV_JSON_CONNECTION
18354 /* Next array element. */
18355 field_addr.sub_location->number = i;
18356#endif /* FREECIV_JSON_CONNECTION */
18357
18358 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
18359 }
18360
18361#ifdef FREECIV_JSON_CONNECTION
18362 /* Exit array. */
18363 FC_FREE(field_addr.sub_location);
18364#endif /* FREECIV_JSON_CONNECTION */
18365 }
18366
18367 if (e) {
18368 log_packet_detailed("'unhappy_penalty' field error detected");
18369 }
18370
18371#ifdef FREECIV_JSON_CONNECTION
18372 field_addr.name = "prod";
18373#endif /* FREECIV_JSON_CONNECTION */
18374 e = 0;
18375
18376 {
18377 int i;
18378
18379#ifdef FREECIV_JSON_CONNECTION
18380 /* Create the array. */
18381 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18382
18383 /* Enter array. */
18384 field_addr.sub_location = plocation_elem_new(0);
18385#endif /* FREECIV_JSON_CONNECTION */
18386
18387 for (i = 0; i < O_LAST; i++) {
18388#ifdef FREECIV_JSON_CONNECTION
18389 /* Next array element. */
18390 field_addr.sub_location->number = i;
18391#endif /* FREECIV_JSON_CONNECTION */
18392
18393 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
18394 }
18395
18396#ifdef FREECIV_JSON_CONNECTION
18397 /* Exit array. */
18398 FC_FREE(field_addr.sub_location);
18399#endif /* FREECIV_JSON_CONNECTION */
18400 }
18401
18402 if (e) {
18403 log_packet_detailed("'prod' field error detected");
18404 }
18405
18406#ifdef FREECIV_JSON_CONNECTION
18407 field_addr.name = "citizen_base";
18408#endif /* FREECIV_JSON_CONNECTION */
18409 e = 0;
18410
18411 {
18412 int i;
18413
18414#ifdef FREECIV_JSON_CONNECTION
18415 /* Create the array. */
18416 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18417
18418 /* Enter array. */
18419 field_addr.sub_location = plocation_elem_new(0);
18420#endif /* FREECIV_JSON_CONNECTION */
18421
18422 for (i = 0; i < O_LAST; i++) {
18423#ifdef FREECIV_JSON_CONNECTION
18424 /* Next array element. */
18425 field_addr.sub_location->number = i;
18426#endif /* FREECIV_JSON_CONNECTION */
18427
18428 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
18429 }
18430
18431#ifdef FREECIV_JSON_CONNECTION
18432 /* Exit array. */
18433 FC_FREE(field_addr.sub_location);
18434#endif /* FREECIV_JSON_CONNECTION */
18435 }
18436
18437 if (e) {
18438 log_packet_detailed("'citizen_base' field error detected");
18439 }
18440
18441#ifdef FREECIV_JSON_CONNECTION
18442 field_addr.name = "usage";
18443#endif /* FREECIV_JSON_CONNECTION */
18444 e = 0;
18445
18446 {
18447 int i;
18448
18449#ifdef FREECIV_JSON_CONNECTION
18450 /* Create the array. */
18451 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18452
18453 /* Enter array. */
18454 field_addr.sub_location = plocation_elem_new(0);
18455#endif /* FREECIV_JSON_CONNECTION */
18456
18457 for (i = 0; i < O_LAST; i++) {
18458#ifdef FREECIV_JSON_CONNECTION
18459 /* Next array element. */
18460 field_addr.sub_location->number = i;
18461#endif /* FREECIV_JSON_CONNECTION */
18462
18463 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
18464 }
18465
18466#ifdef FREECIV_JSON_CONNECTION
18467 /* Exit array. */
18468 FC_FREE(field_addr.sub_location);
18469#endif /* FREECIV_JSON_CONNECTION */
18470 }
18471
18472 if (e) {
18473 log_packet_detailed("'usage' field error detected");
18474 }
18475
18476#ifdef FREECIV_JSON_CONNECTION
18477 field_addr.name = "food_stock";
18478#endif /* FREECIV_JSON_CONNECTION */
18479 e = 0;
18480
18481 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
18482
18483 if (e) {
18484 log_packet_detailed("'food_stock' field error detected");
18485 }
18486
18487#ifdef FREECIV_JSON_CONNECTION
18488 field_addr.name = "shield_stock";
18489#endif /* FREECIV_JSON_CONNECTION */
18490 e = 0;
18491
18492 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
18493
18494 if (e) {
18495 log_packet_detailed("'shield_stock' field error detected");
18496 }
18497
18498#ifdef FREECIV_JSON_CONNECTION
18499 field_addr.name = "trade_route_count";
18500#endif /* FREECIV_JSON_CONNECTION */
18501 e = 0;
18502
18503 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
18504
18505 if (e) {
18506 log_packet_detailed("'trade_route_count' field error detected");
18507 }
18508
18509#ifdef FREECIV_JSON_CONNECTION
18510 field_addr.name = "pollution";
18511#endif /* FREECIV_JSON_CONNECTION */
18512 e = 0;
18513
18514 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
18515
18516 if (e) {
18517 log_packet_detailed("'pollution' field error detected");
18518 }
18519
18520#ifdef FREECIV_JSON_CONNECTION
18521 field_addr.name = "illness_trade";
18522#endif /* FREECIV_JSON_CONNECTION */
18523 e = 0;
18524
18525 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
18526
18527 if (e) {
18528 log_packet_detailed("'illness_trade' field error detected");
18529 }
18530
18531#ifdef FREECIV_JSON_CONNECTION
18532 field_addr.name = "production_kind";
18533#endif /* FREECIV_JSON_CONNECTION */
18534 e = 0;
18535
18536 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18537
18538 if (e) {
18539 log_packet_detailed("'production_kind' field error detected");
18540 }
18541
18542#ifdef FREECIV_JSON_CONNECTION
18543 field_addr.name = "production_value";
18544#endif /* FREECIV_JSON_CONNECTION */
18545 e = 0;
18546
18547 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18548
18549 if (e) {
18550 log_packet_detailed("'production_value' field error detected");
18551 }
18552
18553#ifdef FREECIV_JSON_CONNECTION
18554 field_addr.name = "turn_founded";
18555#endif /* FREECIV_JSON_CONNECTION */
18556 e = 0;
18557
18558 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
18559
18560 if (e) {
18561 log_packet_detailed("'turn_founded' field error detected");
18562 }
18563
18564#ifdef FREECIV_JSON_CONNECTION
18565 field_addr.name = "turn_last_built";
18566#endif /* FREECIV_JSON_CONNECTION */
18567 e = 0;
18568
18569 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
18570
18571 if (e) {
18572 log_packet_detailed("'turn_last_built' field error detected");
18573 }
18574
18575#ifdef FREECIV_JSON_CONNECTION
18576 field_addr.name = "changed_from_kind";
18577#endif /* FREECIV_JSON_CONNECTION */
18578 e = 0;
18579
18580 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
18581
18582 if (e) {
18583 log_packet_detailed("'changed_from_kind' field error detected");
18584 }
18585
18586#ifdef FREECIV_JSON_CONNECTION
18587 field_addr.name = "changed_from_value";
18588#endif /* FREECIV_JSON_CONNECTION */
18589 e = 0;
18590
18591 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
18592
18593 if (e) {
18594 log_packet_detailed("'changed_from_value' field error detected");
18595 }
18596
18597#ifdef FREECIV_JSON_CONNECTION
18598 field_addr.name = "before_change_shields";
18599#endif /* FREECIV_JSON_CONNECTION */
18600 e = 0;
18601
18602 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
18603
18604 if (e) {
18605 log_packet_detailed("'before_change_shields' field error detected");
18606 }
18607
18608#ifdef FREECIV_JSON_CONNECTION
18609 field_addr.name = "disbanded_shields";
18610#endif /* FREECIV_JSON_CONNECTION */
18611 e = 0;
18612
18613 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
18614
18615 if (e) {
18616 log_packet_detailed("'disbanded_shields' field error detected");
18617 }
18618
18619#ifdef FREECIV_JSON_CONNECTION
18620 field_addr.name = "caravan_shields";
18621#endif /* FREECIV_JSON_CONNECTION */
18622 e = 0;
18623
18624 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
18625
18626 if (e) {
18627 log_packet_detailed("'caravan_shields' field error detected");
18628 }
18629
18630#ifdef FREECIV_JSON_CONNECTION
18631 field_addr.name = "last_turns_shield_surplus";
18632#endif /* FREECIV_JSON_CONNECTION */
18633 e = 0;
18634
18635 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
18636
18637 if (e) {
18638 log_packet_detailed("'last_turns_shield_surplus' field error detected");
18639 }
18640
18641#ifdef FREECIV_JSON_CONNECTION
18642 field_addr.name = "airlift";
18643#endif /* FREECIV_JSON_CONNECTION */
18644 e = 0;
18645
18646 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
18647
18648 if (e) {
18649 log_packet_detailed("'airlift' field error detected");
18650 }
18651
18652#ifdef FREECIV_JSON_CONNECTION
18653 field_addr.name = "did_buy";
18654#endif /* FREECIV_JSON_CONNECTION */
18655 e = 0;
18656
18657 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
18658
18659 if (e) {
18660 log_packet_detailed("'did_buy' field error detected");
18661 }
18662
18663#ifdef FREECIV_JSON_CONNECTION
18664 field_addr.name = "did_sell";
18665#endif /* FREECIV_JSON_CONNECTION */
18666 e = 0;
18667
18668 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
18669
18670 if (e) {
18671 log_packet_detailed("'did_sell' field error detected");
18672 }
18673
18674#ifdef FREECIV_JSON_CONNECTION
18675 field_addr.name = "was_happy";
18676#endif /* FREECIV_JSON_CONNECTION */
18677 e = 0;
18678
18679 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
18680
18681 if (e) {
18682 log_packet_detailed("'was_happy' field error detected");
18683 }
18684
18685#ifdef FREECIV_JSON_CONNECTION
18686 field_addr.name = "had_famine";
18687#endif /* FREECIV_JSON_CONNECTION */
18688 e = 0;
18689
18690 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
18691
18692 if (e) {
18693 log_packet_detailed("'had_famine' field error detected");
18694 }
18695
18696#ifdef FREECIV_JSON_CONNECTION
18697 field_addr.name = "anarchy";
18698#endif /* FREECIV_JSON_CONNECTION */
18699 e = 0;
18700
18701 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
18702
18703 if (e) {
18704 log_packet_detailed("'anarchy' field error detected");
18705 }
18706
18707#ifdef FREECIV_JSON_CONNECTION
18708 field_addr.name = "rapture";
18709#endif /* FREECIV_JSON_CONNECTION */
18710 e = 0;
18711
18712 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
18713
18714 if (e) {
18715 log_packet_detailed("'rapture' field error detected");
18716 }
18717
18718#ifdef FREECIV_JSON_CONNECTION
18719 field_addr.name = "diplomat_investigate";
18720#endif /* FREECIV_JSON_CONNECTION */
18721 e = 0;
18722
18723 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->diplomat_investigate);
18724
18725 if (e) {
18726 log_packet_detailed("'diplomat_investigate' field error detected");
18727 }
18728
18729#ifdef FREECIV_JSON_CONNECTION
18730 field_addr.name = "walls";
18731#endif /* FREECIV_JSON_CONNECTION */
18732 e = 0;
18733
18734 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
18735
18736 if (e) {
18737 log_packet_detailed("'walls' field error detected");
18738 }
18739
18740#ifdef FREECIV_JSON_CONNECTION
18741 field_addr.name = "city_image";
18742#endif /* FREECIV_JSON_CONNECTION */
18743 e = 0;
18744
18745 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
18746
18747 if (e) {
18748 log_packet_detailed("'city_image' field error detected");
18749 }
18750
18751#ifdef FREECIV_JSON_CONNECTION
18752 field_addr.name = "steal";
18753#endif /* FREECIV_JSON_CONNECTION */
18754 e = 0;
18755
18756 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
18757
18758 if (e) {
18759 log_packet_detailed("'steal' field error detected");
18760 }
18761
18762#ifdef FREECIV_JSON_CONNECTION
18763 field_addr.name = "worklist";
18764#endif /* FREECIV_JSON_CONNECTION */
18765 e = 0;
18766
18767 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18768
18769 if (e) {
18770 log_packet_detailed("'worklist' field error detected");
18771 }
18772
18773#ifdef FREECIV_JSON_CONNECTION
18774 field_addr.name = "improvements";
18775#endif /* FREECIV_JSON_CONNECTION */
18776 e = 0;
18777
18778 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
18779
18780 if (e) {
18781 log_packet_detailed("'improvements' field error detected");
18782 }
18783
18784#ifdef FREECIV_JSON_CONNECTION
18785 field_addr.name = "city_options";
18786#endif /* FREECIV_JSON_CONNECTION */
18787 e = 0;
18788
18789 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
18790
18791 if (e) {
18792 log_packet_detailed("'city_options' field error detected");
18793 }
18794
18795#ifdef FREECIV_JSON_CONNECTION
18796 field_addr.name = "wl_cb";
18797#endif /* FREECIV_JSON_CONNECTION */
18798 e = 0;
18799
18800 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
18801
18802 if (e) {
18803 log_packet_detailed("'wl_cb' field error detected");
18804 }
18805
18806#ifdef FREECIV_JSON_CONNECTION
18807 field_addr.name = "acquire_type";
18808#endif /* FREECIV_JSON_CONNECTION */
18809 e = 0;
18810
18811 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
18812
18813 if (e) {
18814 log_packet_detailed("'acquire_type' field error detected");
18815 }
18816
18817#ifdef FREECIV_JSON_CONNECTION
18818 field_addr.name = "name";
18819#endif /* FREECIV_JSON_CONNECTION */
18820 e = 0;
18821
18822 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
18823
18824 if (e) {
18825 log_packet_detailed("'name' field error detected");
18826 }
18827#endif /* FREECIV_DELTA_PROTOCOL */
18828
18830}
18831
18832int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
18833{
18834 if (!pc->used) {
18835 log_error("WARNING: trying to send data to the closed connection %s",
18837 return -1;
18838 }
18839 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send != nullptr, -1,
18840 "Handler for PACKET_CITY_INFO not installed");
18841 return pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send(pc, packet, force_to_send);
18842}
18843
18844void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
18845{
18846 conn_list_iterate(dest, pconn) {
18847 send_packet_city_info(pconn, packet, force_to_send);
18849}
18850
18852{
18853 memset(packet, 0, sizeof(*packet));
18854}
18855
18856#define free_packet_city_nationalities(_packet) (void) 0
18857#define destroy_packet_city_nationalities free
18858
18859#ifdef FREECIV_DELTA_PROTOCOL
18861{
18862 const struct packet_city_nationalities *key = (const struct packet_city_nationalities *) vkey;
18863 genhash_val_t result = 0;
18864
18865 result += key->id;
18866
18867 result &= 0xFFFFFFFF;
18868 return result;
18869}
18870
18871static bool cmp_packet_city_nationalities_100(const void *vkey1, const void *vkey2)
18872{
18873 const struct packet_city_nationalities *old = (const struct packet_city_nationalities *) vkey1;
18875 bool differ;
18876
18877 differ = (old->id != real_packet->id);
18878
18879 return !differ;
18880}
18882#endif /* FREECIV_DELTA_PROTOCOL */
18883
18885{
18886#define FREE_PACKET_STRUCT(_packet) free_packet_city_nationalities(_packet)
18888
18889#ifdef FREECIV_JSON_CONNECTION
18890 struct plocation field_addr;
18891 {
18892 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
18895 }
18896#endif /* FREECIV_JSON_CONNECTION */
18897
18898#ifdef FREECIV_JSON_CONNECTION
18899 field_addr.name = "id";
18900#endif /* FREECIV_JSON_CONNECTION */
18901
18902 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
18904 }
18905
18906 log_packet_detailed("packet_city_nationalities_100: got info about (%d)",
18907 real_packet->id);
18908
18909#ifdef FREECIV_DELTA_PROTOCOL
18912 struct genhash **hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
18913
18914 if (nullptr == *hash) {
18916 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
18917 }
18918
18919 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18920 *real_packet = *old;
18921 } else {
18922 /* packet is already initialized empty */
18923 log_packet_detailed(" no old info");
18924 }
18925
18926#ifdef FREECIV_JSON_CONNECTION
18927 field_addr.name = "fields";
18928#endif /* FREECIV_JSON_CONNECTION */
18929 DIO_BV_GET(&din, &field_addr, fields);
18930
18931 if (BV_ISSET(fields, 0)) {
18932 log_packet_detailed(" got field 'nationalities_count'");
18933
18934#ifdef FREECIV_JSON_CONNECTION
18935 field_addr.name = "nationalities_count";
18936#endif /* FREECIV_JSON_CONNECTION */
18937
18938 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
18939 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
18940 }
18941 }
18942
18943 if (BV_ISSET(fields, 1)) {
18944 log_packet_detailed(" got field 'nation_id'");
18945
18946#ifdef FREECIV_JSON_CONNECTION
18947 field_addr.name = "nation_id";
18948#endif /* FREECIV_JSON_CONNECTION */
18949
18950 {
18951 int i;
18952
18953 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18954 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
18955 }
18956
18957#ifdef FREECIV_JSON_CONNECTION
18958 /* Enter array. */
18959 field_addr.sub_location = plocation_elem_new(0);
18960#endif /* FREECIV_JSON_CONNECTION */
18961
18962 for (i = 0; i < real_packet->nationalities_count; i++) {
18963#ifdef FREECIV_JSON_CONNECTION
18964 /* Next array element */
18965 field_addr.sub_location->number = i;
18966#endif /* FREECIV_JSON_CONNECTION */
18967
18968 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
18969 RECEIVE_PACKET_FIELD_ERROR(nation_id);
18970 }
18971 }
18972
18973#ifdef FREECIV_JSON_CONNECTION
18974 /* Exit array. */
18975 FC_FREE(field_addr.sub_location);
18976#endif /* FREECIV_JSON_CONNECTION */
18977 }
18978 }
18979
18980 if (BV_ISSET(fields, 2)) {
18981 log_packet_detailed(" got field 'nation_citizens'");
18982
18983#ifdef FREECIV_JSON_CONNECTION
18984 field_addr.name = "nation_citizens";
18985#endif /* FREECIV_JSON_CONNECTION */
18986
18987 {
18988 int i;
18989
18990 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18991 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
18992 }
18993
18994#ifdef FREECIV_JSON_CONNECTION
18995 /* Enter array. */
18996 field_addr.sub_location = plocation_elem_new(0);
18997#endif /* FREECIV_JSON_CONNECTION */
18998
18999 for (i = 0; i < real_packet->nationalities_count; i++) {
19000#ifdef FREECIV_JSON_CONNECTION
19001 /* Next array element */
19002 field_addr.sub_location->number = i;
19003#endif /* FREECIV_JSON_CONNECTION */
19004
19005 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19006 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19007 }
19008 }
19009
19010#ifdef FREECIV_JSON_CONNECTION
19011 /* Exit array. */
19012 FC_FREE(field_addr.sub_location);
19013#endif /* FREECIV_JSON_CONNECTION */
19014 }
19015 }
19016
19017 if (nullptr == old) {
19018 old = fc_malloc(sizeof(*old));
19020 *old = *real_packet;
19022 } else {
19023 *old = *real_packet;
19024 }
19025
19026#else /* FREECIV_DELTA_PROTOCOL */
19027#ifdef FREECIV_JSON_CONNECTION
19028 field_addr.name = "nationalities_count";
19029#endif /* FREECIV_JSON_CONNECTION */
19030
19031 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
19032 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
19033 }
19034
19035#ifdef FREECIV_JSON_CONNECTION
19036 field_addr.name = "nation_id";
19037#endif /* FREECIV_JSON_CONNECTION */
19038
19039 {
19040 int i;
19041
19042 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19043 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
19044 }
19045
19046#ifdef FREECIV_JSON_CONNECTION
19047 /* Enter array. */
19048 field_addr.sub_location = plocation_elem_new(0);
19049#endif /* FREECIV_JSON_CONNECTION */
19050
19051 for (i = 0; i < real_packet->nationalities_count; i++) {
19052#ifdef FREECIV_JSON_CONNECTION
19053 /* Next array element */
19054 field_addr.sub_location->number = i;
19055#endif /* FREECIV_JSON_CONNECTION */
19056
19057 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
19058 RECEIVE_PACKET_FIELD_ERROR(nation_id);
19059 }
19060 }
19061
19062#ifdef FREECIV_JSON_CONNECTION
19063 /* Exit array. */
19064 FC_FREE(field_addr.sub_location);
19065#endif /* FREECIV_JSON_CONNECTION */
19066 }
19067
19068#ifdef FREECIV_JSON_CONNECTION
19069 field_addr.name = "nation_citizens";
19070#endif /* FREECIV_JSON_CONNECTION */
19071
19072 {
19073 int i;
19074
19075 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19076 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
19077 }
19078
19079#ifdef FREECIV_JSON_CONNECTION
19080 /* Enter array. */
19081 field_addr.sub_location = plocation_elem_new(0);
19082#endif /* FREECIV_JSON_CONNECTION */
19083
19084 for (i = 0; i < real_packet->nationalities_count; i++) {
19085#ifdef FREECIV_JSON_CONNECTION
19086 /* Next array element */
19087 field_addr.sub_location->number = i;
19088#endif /* FREECIV_JSON_CONNECTION */
19089
19090 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19091 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19092 }
19093 }
19094
19095#ifdef FREECIV_JSON_CONNECTION
19096 /* Exit array. */
19097 FC_FREE(field_addr.sub_location);
19098#endif /* FREECIV_JSON_CONNECTION */
19099 }
19100#endif /* FREECIV_DELTA_PROTOCOL */
19101
19103#undef FREE_PACKET_STRUCT
19104}
19105
19106static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19107{
19108 const struct packet_city_nationalities *real_packet = packet;
19109 int e;
19111
19112 log_packet_detailed("packet_city_nationalities_100: sending info about (%d)",
19113 real_packet->id);
19114
19115#ifdef FREECIV_DELTA_PROTOCOL
19118 bool differ;
19119 int different = force_to_send;
19120 struct genhash **hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
19121
19122 if (nullptr == *hash) {
19124 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
19125 }
19126 BV_CLR_ALL(fields);
19127
19128 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19129 old = fc_malloc(sizeof(*old));
19130 /* temporary bitcopy just to insert correctly */
19131 *old = *real_packet;
19134 different = 1; /* Force to send. */
19135 }
19136
19137 differ = (old->nationalities_count != real_packet->nationalities_count);
19138 if (differ) {
19139 different++;
19140 BV_SET(fields, 0);
19141 }
19142
19143 differ = (old->nationalities_count != real_packet->nationalities_count);
19144 if (!differ) {
19145 int i;
19146
19147 for (i = 0; i < old->nationalities_count; i++) {
19148 differ = (old->nation_id[i] != real_packet->nation_id[i]);
19149 if (differ) {
19150 break;
19151 }
19152 }
19153 }
19154 if (differ) {
19155 different++;
19156 BV_SET(fields, 1);
19157 }
19158
19159 differ = (old->nationalities_count != real_packet->nationalities_count);
19160 if (!differ) {
19161 int i;
19162
19163 for (i = 0; i < old->nationalities_count; i++) {
19164 differ = (old->nation_citizens[i] != real_packet->nation_citizens[i]);
19165 if (differ) {
19166 break;
19167 }
19168 }
19169 }
19170 if (differ) {
19171 different++;
19172 BV_SET(fields, 2);
19173 }
19174
19175 if (different == 0) {
19176 log_packet_detailed(" no change -> discard");
19178 }
19179#endif /* FREECIV_DELTA_PROTOCOL */
19180
19181#ifdef FREECIV_JSON_CONNECTION
19182 struct plocation field_addr;
19183 {
19184 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19187 }
19188#endif /* FREECIV_JSON_CONNECTION */
19189
19190#ifdef FREECIV_JSON_CONNECTION
19191 field_addr.name = "id";
19192#endif /* FREECIV_JSON_CONNECTION */
19193 e = 0;
19194
19195 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
19196
19197 if (e) {
19198 log_packet_detailed("'id' field error detected");
19199 }
19200
19201#ifdef FREECIV_DELTA_PROTOCOL
19202#ifdef FREECIV_JSON_CONNECTION
19203 field_addr.name = "fields";
19204#endif /* FREECIV_JSON_CONNECTION */
19205 e = 0;
19206 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19207 if (e) {
19208 log_packet_detailed("fields bitvector error detected");
19209 }
19210
19211 if (BV_ISSET(fields, 0)) {
19212 log_packet_detailed(" field 'nationalities_count' has changed");
19213
19214#ifdef FREECIV_JSON_CONNECTION
19215 field_addr.name = "nationalities_count";
19216#endif /* FREECIV_JSON_CONNECTION */
19217 e = 0;
19218
19219 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19220
19221 if (e) {
19222 log_packet_detailed("'nationalities_count' field error detected");
19223 }
19224 }
19225
19226 if (BV_ISSET(fields, 1)) {
19227 log_packet_detailed(" field 'nation_id' has changed");
19228
19229#ifdef FREECIV_JSON_CONNECTION
19230 field_addr.name = "nation_id";
19231#endif /* FREECIV_JSON_CONNECTION */
19232 e = 0;
19233
19234 {
19235 int i;
19236
19237#ifdef FREECIV_JSON_CONNECTION
19238 /* Create the array. */
19239 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19240
19241 /* Enter array. */
19242 field_addr.sub_location = plocation_elem_new(0);
19243#endif /* FREECIV_JSON_CONNECTION */
19244
19245 for (i = 0; i < real_packet->nationalities_count; i++) {
19246#ifdef FREECIV_JSON_CONNECTION
19247 /* Next array element. */
19248 field_addr.sub_location->number = i;
19249#endif /* FREECIV_JSON_CONNECTION */
19250
19251 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19252 }
19253
19254#ifdef FREECIV_JSON_CONNECTION
19255 /* Exit array. */
19256 FC_FREE(field_addr.sub_location);
19257#endif /* FREECIV_JSON_CONNECTION */
19258 }
19259
19260 if (e) {
19261 log_packet_detailed("'nation_id' field error detected");
19262 }
19263 }
19264
19265 if (BV_ISSET(fields, 2)) {
19266 log_packet_detailed(" field 'nation_citizens' has changed");
19267
19268#ifdef FREECIV_JSON_CONNECTION
19269 field_addr.name = "nation_citizens";
19270#endif /* FREECIV_JSON_CONNECTION */
19271 e = 0;
19272
19273 {
19274 int i;
19275
19276#ifdef FREECIV_JSON_CONNECTION
19277 /* Create the array. */
19278 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19279
19280 /* Enter array. */
19281 field_addr.sub_location = plocation_elem_new(0);
19282#endif /* FREECIV_JSON_CONNECTION */
19283
19284 for (i = 0; i < real_packet->nationalities_count; i++) {
19285#ifdef FREECIV_JSON_CONNECTION
19286 /* Next array element. */
19287 field_addr.sub_location->number = i;
19288#endif /* FREECIV_JSON_CONNECTION */
19289
19290 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19291 }
19292
19293#ifdef FREECIV_JSON_CONNECTION
19294 /* Exit array. */
19295 FC_FREE(field_addr.sub_location);
19296#endif /* FREECIV_JSON_CONNECTION */
19297 }
19298
19299 if (e) {
19300 log_packet_detailed("'nation_citizens' field error detected");
19301 }
19302 }
19303
19304 *old = *real_packet;
19305
19306#else /* FREECIV_DELTA_PROTOCOL */
19307#ifdef FREECIV_JSON_CONNECTION
19308 field_addr.name = "nationalities_count";
19309#endif /* FREECIV_JSON_CONNECTION */
19310 e = 0;
19311
19312 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19313
19314 if (e) {
19315 log_packet_detailed("'nationalities_count' field error detected");
19316 }
19317
19318#ifdef FREECIV_JSON_CONNECTION
19319 field_addr.name = "nation_id";
19320#endif /* FREECIV_JSON_CONNECTION */
19321 e = 0;
19322
19323 {
19324 int i;
19325
19326#ifdef FREECIV_JSON_CONNECTION
19327 /* Create the array. */
19328 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19329
19330 /* Enter array. */
19331 field_addr.sub_location = plocation_elem_new(0);
19332#endif /* FREECIV_JSON_CONNECTION */
19333
19334 for (i = 0; i < real_packet->nationalities_count; i++) {
19335#ifdef FREECIV_JSON_CONNECTION
19336 /* Next array element. */
19337 field_addr.sub_location->number = i;
19338#endif /* FREECIV_JSON_CONNECTION */
19339
19340 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19341 }
19342
19343#ifdef FREECIV_JSON_CONNECTION
19344 /* Exit array. */
19345 FC_FREE(field_addr.sub_location);
19346#endif /* FREECIV_JSON_CONNECTION */
19347 }
19348
19349 if (e) {
19350 log_packet_detailed("'nation_id' field error detected");
19351 }
19352
19353#ifdef FREECIV_JSON_CONNECTION
19354 field_addr.name = "nation_citizens";
19355#endif /* FREECIV_JSON_CONNECTION */
19356 e = 0;
19357
19358 {
19359 int i;
19360
19361#ifdef FREECIV_JSON_CONNECTION
19362 /* Create the array. */
19363 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19364
19365 /* Enter array. */
19366 field_addr.sub_location = plocation_elem_new(0);
19367#endif /* FREECIV_JSON_CONNECTION */
19368
19369 for (i = 0; i < real_packet->nationalities_count; i++) {
19370#ifdef FREECIV_JSON_CONNECTION
19371 /* Next array element. */
19372 field_addr.sub_location->number = i;
19373#endif /* FREECIV_JSON_CONNECTION */
19374
19375 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19376 }
19377
19378#ifdef FREECIV_JSON_CONNECTION
19379 /* Exit array. */
19380 FC_FREE(field_addr.sub_location);
19381#endif /* FREECIV_JSON_CONNECTION */
19382 }
19383
19384 if (e) {
19385 log_packet_detailed("'nation_citizens' field error detected");
19386 }
19387#endif /* FREECIV_DELTA_PROTOCOL */
19388
19390}
19391
19392int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19393{
19394 if (!pc->used) {
19395 log_error("WARNING: trying to send data to the closed connection %s",
19397 return -1;
19398 }
19399 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send != nullptr, -1,
19400 "Handler for PACKET_CITY_NATIONALITIES not installed");
19401 return pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send(pc, packet, force_to_send);
19402}
19403
19404void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
19405{
19406 conn_list_iterate(dest, pconn) {
19407 send_packet_city_nationalities(pconn, packet, force_to_send);
19409}
19410
19412{
19413 memset(packet, 0, sizeof(*packet));
19414}
19415
19416#define free_packet_city_update_counters(_packet) (void) 0
19417#define destroy_packet_city_update_counters free
19418
19419#ifdef FREECIV_DELTA_PROTOCOL
19421{
19422 const struct packet_city_update_counters *key = (const struct packet_city_update_counters *) vkey;
19423 genhash_val_t result = 0;
19424
19425 result += key->city;
19426
19427 result &= 0xFFFFFFFF;
19428 return result;
19429}
19430
19431static bool cmp_packet_city_update_counters_100(const void *vkey1, const void *vkey2)
19432{
19433 const struct packet_city_update_counters *old = (const struct packet_city_update_counters *) vkey1;
19435 bool differ;
19436
19437 differ = (old->city != real_packet->city);
19438
19439 return !differ;
19440}
19442#endif /* FREECIV_DELTA_PROTOCOL */
19443
19445{
19446#define FREE_PACKET_STRUCT(_packet) free_packet_city_update_counters(_packet)
19448
19449#ifdef FREECIV_JSON_CONNECTION
19450 struct plocation field_addr;
19451 {
19452 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19455 }
19456#endif /* FREECIV_JSON_CONNECTION */
19457
19458#ifdef FREECIV_JSON_CONNECTION
19459 field_addr.name = "city";
19460#endif /* FREECIV_JSON_CONNECTION */
19461
19462 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
19464 }
19465
19466 log_packet_detailed("packet_city_update_counters_100: got info about (%d)",
19467 real_packet->city);
19468
19469#ifdef FREECIV_DELTA_PROTOCOL
19472 struct genhash **hash = pc->phs.received + PACKET_CITY_UPDATE_COUNTERS;
19473
19474 if (nullptr == *hash) {
19476 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19477 }
19478
19479 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19480 *real_packet = *old;
19481 } else {
19482 /* packet is already initialized empty */
19483 log_packet_detailed(" no old info");
19484 }
19485
19486#ifdef FREECIV_JSON_CONNECTION
19487 field_addr.name = "fields";
19488#endif /* FREECIV_JSON_CONNECTION */
19489 DIO_BV_GET(&din, &field_addr, fields);
19490
19491 if (BV_ISSET(fields, 0)) {
19492 log_packet_detailed(" got field 'count'");
19493
19494#ifdef FREECIV_JSON_CONNECTION
19495 field_addr.name = "count";
19496#endif /* FREECIV_JSON_CONNECTION */
19497
19498 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19500 }
19501 }
19502
19503 if (BV_ISSET(fields, 1)) {
19504 log_packet_detailed(" got field 'counters'");
19505
19506#ifdef FREECIV_JSON_CONNECTION
19507 field_addr.name = "counters";
19508#endif /* FREECIV_JSON_CONNECTION */
19509
19510 {
19511 int i;
19512
19513 if (real_packet->count > MAX_COUNTERS) {
19514 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19515 }
19516
19517#ifdef FREECIV_JSON_CONNECTION
19518 /* Enter array. */
19519 field_addr.sub_location = plocation_elem_new(0);
19520#endif /* FREECIV_JSON_CONNECTION */
19521
19522 for (i = 0; i < real_packet->count; i++) {
19523#ifdef FREECIV_JSON_CONNECTION
19524 /* Next array element */
19525 field_addr.sub_location->number = i;
19526#endif /* FREECIV_JSON_CONNECTION */
19527
19528 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19530 }
19531 }
19532
19533#ifdef FREECIV_JSON_CONNECTION
19534 /* Exit array. */
19535 FC_FREE(field_addr.sub_location);
19536#endif /* FREECIV_JSON_CONNECTION */
19537 }
19538 }
19539
19540 if (nullptr == old) {
19541 old = fc_malloc(sizeof(*old));
19543 *old = *real_packet;
19545 } else {
19546 *old = *real_packet;
19547 }
19548
19549#else /* FREECIV_DELTA_PROTOCOL */
19550#ifdef FREECIV_JSON_CONNECTION
19551 field_addr.name = "count";
19552#endif /* FREECIV_JSON_CONNECTION */
19553
19554 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19556 }
19557
19558#ifdef FREECIV_JSON_CONNECTION
19559 field_addr.name = "counters";
19560#endif /* FREECIV_JSON_CONNECTION */
19561
19562 {
19563 int i;
19564
19565 if (real_packet->count > MAX_COUNTERS) {
19566 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19567 }
19568
19569#ifdef FREECIV_JSON_CONNECTION
19570 /* Enter array. */
19571 field_addr.sub_location = plocation_elem_new(0);
19572#endif /* FREECIV_JSON_CONNECTION */
19573
19574 for (i = 0; i < real_packet->count; i++) {
19575#ifdef FREECIV_JSON_CONNECTION
19576 /* Next array element */
19577 field_addr.sub_location->number = i;
19578#endif /* FREECIV_JSON_CONNECTION */
19579
19580 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19582 }
19583 }
19584
19585#ifdef FREECIV_JSON_CONNECTION
19586 /* Exit array. */
19587 FC_FREE(field_addr.sub_location);
19588#endif /* FREECIV_JSON_CONNECTION */
19589 }
19590#endif /* FREECIV_DELTA_PROTOCOL */
19591
19593#undef FREE_PACKET_STRUCT
19594}
19595
19597{
19598 const struct packet_city_update_counters *real_packet = packet;
19599 int e;
19601
19602 log_packet_detailed("packet_city_update_counters_100: sending info about (%d)",
19603 real_packet->city);
19604
19605#ifdef FREECIV_DELTA_PROTOCOL
19608 bool differ;
19609 int different = 0;
19610 struct genhash **hash = pc->phs.sent + PACKET_CITY_UPDATE_COUNTERS;
19611
19612 if (nullptr == *hash) {
19614 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19615 }
19616 BV_CLR_ALL(fields);
19617
19618 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19619 old = fc_malloc(sizeof(*old));
19620 /* temporary bitcopy just to insert correctly */
19621 *old = *real_packet;
19624 different = 1; /* Force to send. */
19625 }
19626
19627 differ = (old->count != real_packet->count);
19628 if (differ) {
19629 different++;
19630 BV_SET(fields, 0);
19631 }
19632
19633 differ = (old->count != real_packet->count);
19634 if (!differ) {
19635 int i;
19636
19637 for (i = 0; i < old->count; i++) {
19638 differ = (old->counters[i] != real_packet->counters[i]);
19639 if (differ) {
19640 break;
19641 }
19642 }
19643 }
19644 if (differ) {
19645 different++;
19646 BV_SET(fields, 1);
19647 }
19648
19649 if (different == 0) {
19650 log_packet_detailed(" no change -> discard");
19652 }
19653#endif /* FREECIV_DELTA_PROTOCOL */
19654
19655#ifdef FREECIV_JSON_CONNECTION
19656 struct plocation field_addr;
19657 {
19658 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19661 }
19662#endif /* FREECIV_JSON_CONNECTION */
19663
19664#ifdef FREECIV_JSON_CONNECTION
19665 field_addr.name = "city";
19666#endif /* FREECIV_JSON_CONNECTION */
19667 e = 0;
19668
19669 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
19670
19671 if (e) {
19672 log_packet_detailed("'city' field error detected");
19673 }
19674
19675#ifdef FREECIV_DELTA_PROTOCOL
19676#ifdef FREECIV_JSON_CONNECTION
19677 field_addr.name = "fields";
19678#endif /* FREECIV_JSON_CONNECTION */
19679 e = 0;
19680 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19681 if (e) {
19682 log_packet_detailed("fields bitvector error detected");
19683 }
19684
19685 if (BV_ISSET(fields, 0)) {
19686 log_packet_detailed(" field 'count' has changed");
19687
19688#ifdef FREECIV_JSON_CONNECTION
19689 field_addr.name = "count";
19690#endif /* FREECIV_JSON_CONNECTION */
19691 e = 0;
19692
19693 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19694
19695 if (e) {
19696 log_packet_detailed("'count' field error detected");
19697 }
19698 }
19699
19700 if (BV_ISSET(fields, 1)) {
19701 log_packet_detailed(" field 'counters' has changed");
19702
19703#ifdef FREECIV_JSON_CONNECTION
19704 field_addr.name = "counters";
19705#endif /* FREECIV_JSON_CONNECTION */
19706 e = 0;
19707
19708 {
19709 int i;
19710
19711#ifdef FREECIV_JSON_CONNECTION
19712 /* Create the array. */
19713 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19714
19715 /* Enter array. */
19716 field_addr.sub_location = plocation_elem_new(0);
19717#endif /* FREECIV_JSON_CONNECTION */
19718
19719 for (i = 0; i < real_packet->count; i++) {
19720#ifdef FREECIV_JSON_CONNECTION
19721 /* Next array element. */
19722 field_addr.sub_location->number = i;
19723#endif /* FREECIV_JSON_CONNECTION */
19724
19725 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19726 }
19727
19728#ifdef FREECIV_JSON_CONNECTION
19729 /* Exit array. */
19730 FC_FREE(field_addr.sub_location);
19731#endif /* FREECIV_JSON_CONNECTION */
19732 }
19733
19734 if (e) {
19735 log_packet_detailed("'counters' field error detected");
19736 }
19737 }
19738
19739 *old = *real_packet;
19740
19741#else /* FREECIV_DELTA_PROTOCOL */
19742#ifdef FREECIV_JSON_CONNECTION
19743 field_addr.name = "count";
19744#endif /* FREECIV_JSON_CONNECTION */
19745 e = 0;
19746
19747 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19748
19749 if (e) {
19750 log_packet_detailed("'count' field error detected");
19751 }
19752
19753#ifdef FREECIV_JSON_CONNECTION
19754 field_addr.name = "counters";
19755#endif /* FREECIV_JSON_CONNECTION */
19756 e = 0;
19757
19758 {
19759 int i;
19760
19761#ifdef FREECIV_JSON_CONNECTION
19762 /* Create the array. */
19763 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19764
19765 /* Enter array. */
19766 field_addr.sub_location = plocation_elem_new(0);
19767#endif /* FREECIV_JSON_CONNECTION */
19768
19769 for (i = 0; i < real_packet->count; i++) {
19770#ifdef FREECIV_JSON_CONNECTION
19771 /* Next array element. */
19772 field_addr.sub_location->number = i;
19773#endif /* FREECIV_JSON_CONNECTION */
19774
19775 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19776 }
19777
19778#ifdef FREECIV_JSON_CONNECTION
19779 /* Exit array. */
19780 FC_FREE(field_addr.sub_location);
19781#endif /* FREECIV_JSON_CONNECTION */
19782 }
19783
19784 if (e) {
19785 log_packet_detailed("'counters' field error detected");
19786 }
19787#endif /* FREECIV_DELTA_PROTOCOL */
19788
19790}
19791
19793{
19794 if (!pc->used) {
19795 log_error("WARNING: trying to send data to the closed connection %s",
19797 return -1;
19798 }
19799 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet != nullptr, -1,
19800 "Handler for PACKET_CITY_UPDATE_COUNTERS not installed");
19801 return pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet(pc, packet);
19802}
19803
19805{
19806 conn_list_iterate(dest, pconn) {
19809}
19810
19811static inline void init_packet_city_short_info(struct packet_city_short_info *packet)
19812{
19813 memset(packet, 0, sizeof(*packet));
19814}
19815
19816#define free_packet_city_short_info(_packet) (void) 0
19817#define destroy_packet_city_short_info free
19818
19819#ifdef FREECIV_DELTA_PROTOCOL
19821{
19822 const struct packet_city_short_info *key = (const struct packet_city_short_info *) vkey;
19823 genhash_val_t result = 0;
19824
19825 result += key->id;
19826
19827 result &= 0xFFFFFFFF;
19828 return result;
19829}
19830
19831static bool cmp_packet_city_short_info_100(const void *vkey1, const void *vkey2)
19832{
19833 const struct packet_city_short_info *old = (const struct packet_city_short_info *) vkey1;
19834 const struct packet_city_short_info *real_packet = (const struct packet_city_short_info *) vkey2;
19835 bool differ;
19836
19837 differ = (old->id != real_packet->id);
19838
19839 return !differ;
19840}
19842#endif /* FREECIV_DELTA_PROTOCOL */
19843
19845{
19846#define FREE_PACKET_STRUCT(_packet) free_packet_city_short_info(_packet)
19848
19849#ifdef FREECIV_JSON_CONNECTION
19850 struct plocation field_addr;
19851 {
19852 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19855 }
19856#endif /* FREECIV_JSON_CONNECTION */
19857
19858#ifdef FREECIV_JSON_CONNECTION
19859 field_addr.name = "id";
19860#endif /* FREECIV_JSON_CONNECTION */
19861
19862 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
19864 }
19865
19866 log_packet_detailed("packet_city_short_info_100: got info about (%d)",
19867 real_packet->id);
19868
19869#ifdef FREECIV_DELTA_PROTOCOL
19872 struct genhash **hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
19873
19874 if (nullptr == *hash) {
19876 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
19877 }
19878
19879 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19880 *real_packet = *old;
19881 } else {
19882 /* packet is already initialized empty */
19883 log_packet_detailed(" no old info");
19884 }
19885
19886#ifdef FREECIV_JSON_CONNECTION
19887 field_addr.name = "fields";
19888#endif /* FREECIV_JSON_CONNECTION */
19889 DIO_BV_GET(&din, &field_addr, fields);
19890
19891 if (BV_ISSET(fields, 0)) {
19892 log_packet_detailed(" got field 'tile'");
19893
19894#ifdef FREECIV_JSON_CONNECTION
19895 field_addr.name = "tile";
19896#endif /* FREECIV_JSON_CONNECTION */
19897
19898 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
19900 }
19901 }
19902
19903 if (BV_ISSET(fields, 1)) {
19904 log_packet_detailed(" got field 'owner'");
19905
19906#ifdef FREECIV_JSON_CONNECTION
19907 field_addr.name = "owner";
19908#endif /* FREECIV_JSON_CONNECTION */
19909
19910 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
19912 }
19913 }
19914
19915 if (BV_ISSET(fields, 2)) {
19916 log_packet_detailed(" got field 'original'");
19917
19918#ifdef FREECIV_JSON_CONNECTION
19919 field_addr.name = "original";
19920#endif /* FREECIV_JSON_CONNECTION */
19921
19922 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
19924 }
19925 }
19926
19927 if (BV_ISSET(fields, 3)) {
19928 log_packet_detailed(" got field 'size'");
19929
19930#ifdef FREECIV_JSON_CONNECTION
19931 field_addr.name = "size";
19932#endif /* FREECIV_JSON_CONNECTION */
19933
19934 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
19936 }
19937 }
19938
19939 if (BV_ISSET(fields, 4)) {
19940 log_packet_detailed(" got field 'style'");
19941
19942#ifdef FREECIV_JSON_CONNECTION
19943 field_addr.name = "style";
19944#endif /* FREECIV_JSON_CONNECTION */
19945
19946 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
19948 }
19949 }
19950
19951 if (BV_ISSET(fields, 5)) {
19952 log_packet_detailed(" got field 'capital'");
19953
19954#ifdef FREECIV_JSON_CONNECTION
19955 field_addr.name = "capital";
19956#endif /* FREECIV_JSON_CONNECTION */
19957
19958 {
19959 int readin;
19960
19961 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19963 }
19964 real_packet->capital = readin;
19965 }
19966 }
19967
19968 real_packet->occupied = BV_ISSET(fields, 6);
19969
19970 if (BV_ISSET(fields, 7)) {
19971 log_packet_detailed(" got field 'walls'");
19972
19973#ifdef FREECIV_JSON_CONNECTION
19974 field_addr.name = "walls";
19975#endif /* FREECIV_JSON_CONNECTION */
19976
19977 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
19979 }
19980 }
19981
19982 real_packet->happy = BV_ISSET(fields, 8);
19983
19984 real_packet->unhappy = BV_ISSET(fields, 9);
19985
19986 if (BV_ISSET(fields, 10)) {
19987 log_packet_detailed(" got field 'city_image'");
19988
19989#ifdef FREECIV_JSON_CONNECTION
19990 field_addr.name = "city_image";
19991#endif /* FREECIV_JSON_CONNECTION */
19992
19993 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
19994 RECEIVE_PACKET_FIELD_ERROR(city_image);
19995 }
19996 }
19997
19998 if (BV_ISSET(fields, 11)) {
19999 log_packet_detailed(" got field 'improvements'");
20000
20001#ifdef FREECIV_JSON_CONNECTION
20002 field_addr.name = "improvements";
20003#endif /* FREECIV_JSON_CONNECTION */
20004
20005 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20006 RECEIVE_PACKET_FIELD_ERROR(improvements);
20007 }
20008 }
20009
20010 if (BV_ISSET(fields, 12)) {
20011 log_packet_detailed(" got field 'name'");
20012
20013#ifdef FREECIV_JSON_CONNECTION
20014 field_addr.name = "name";
20015#endif /* FREECIV_JSON_CONNECTION */
20016
20017 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20019 }
20020 }
20021
20022 if (nullptr == old) {
20023 old = fc_malloc(sizeof(*old));
20025 *old = *real_packet;
20027 } else {
20028 *old = *real_packet;
20029 }
20030
20031 hash = pc->phs.received + PACKET_CITY_INFO;
20032 if (nullptr != *hash) {
20034 }
20035
20036 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
20037 if (nullptr != *hash) {
20039 }
20040
20041 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
20042 if (nullptr != *hash) {
20044 }
20045
20046 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
20047 if (nullptr != *hash) {
20049 }
20050
20051#else /* FREECIV_DELTA_PROTOCOL */
20052#ifdef FREECIV_JSON_CONNECTION
20053 field_addr.name = "tile";
20054#endif /* FREECIV_JSON_CONNECTION */
20055
20056 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
20058 }
20059
20060#ifdef FREECIV_JSON_CONNECTION
20061 field_addr.name = "owner";
20062#endif /* FREECIV_JSON_CONNECTION */
20063
20064 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
20066 }
20067
20068#ifdef FREECIV_JSON_CONNECTION
20069 field_addr.name = "original";
20070#endif /* FREECIV_JSON_CONNECTION */
20071
20072 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
20074 }
20075
20076#ifdef FREECIV_JSON_CONNECTION
20077 field_addr.name = "size";
20078#endif /* FREECIV_JSON_CONNECTION */
20079
20080 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
20082 }
20083
20084#ifdef FREECIV_JSON_CONNECTION
20085 field_addr.name = "style";
20086#endif /* FREECIV_JSON_CONNECTION */
20087
20088 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
20090 }
20091
20092#ifdef FREECIV_JSON_CONNECTION
20093 field_addr.name = "capital";
20094#endif /* FREECIV_JSON_CONNECTION */
20095
20096 {
20097 int readin;
20098
20099 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20101 }
20102 real_packet->capital = readin;
20103 }
20104
20105#ifdef FREECIV_JSON_CONNECTION
20106 field_addr.name = "occupied";
20107#endif /* FREECIV_JSON_CONNECTION */
20108
20109 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
20111 }
20112
20113#ifdef FREECIV_JSON_CONNECTION
20114 field_addr.name = "walls";
20115#endif /* FREECIV_JSON_CONNECTION */
20116
20117 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20119 }
20120
20121#ifdef FREECIV_JSON_CONNECTION
20122 field_addr.name = "happy";
20123#endif /* FREECIV_JSON_CONNECTION */
20124
20125 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->happy)) {
20127 }
20128
20129#ifdef FREECIV_JSON_CONNECTION
20130 field_addr.name = "unhappy";
20131#endif /* FREECIV_JSON_CONNECTION */
20132
20133 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unhappy)) {
20135 }
20136
20137#ifdef FREECIV_JSON_CONNECTION
20138 field_addr.name = "city_image";
20139#endif /* FREECIV_JSON_CONNECTION */
20140
20141 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20142 RECEIVE_PACKET_FIELD_ERROR(city_image);
20143 }
20144
20145#ifdef FREECIV_JSON_CONNECTION
20146 field_addr.name = "improvements";
20147#endif /* FREECIV_JSON_CONNECTION */
20148
20149 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20150 RECEIVE_PACKET_FIELD_ERROR(improvements);
20151 }
20152
20153#ifdef FREECIV_JSON_CONNECTION
20154 field_addr.name = "name";
20155#endif /* FREECIV_JSON_CONNECTION */
20156
20157 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20159 }
20160#endif /* FREECIV_DELTA_PROTOCOL */
20161
20163#undef FREE_PACKET_STRUCT
20164}
20165
20167{
20168 const struct packet_city_short_info *real_packet = packet;
20169 int e;
20171
20172 log_packet_detailed("packet_city_short_info_100: sending info about (%d)",
20173 real_packet->id);
20174
20175#ifdef FREECIV_DELTA_PROTOCOL
20178 bool differ;
20179 int different = 0;
20180 struct genhash **hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
20181
20182 if (nullptr == *hash) {
20184 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
20185 }
20186 BV_CLR_ALL(fields);
20187
20188 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20189 old = fc_malloc(sizeof(*old));
20190 /* temporary bitcopy just to insert correctly */
20191 *old = *real_packet;
20194 different = 1; /* Force to send. */
20195 }
20196
20197 differ = (old->tile != real_packet->tile);
20198 if (differ) {
20199 different++;
20200 BV_SET(fields, 0);
20201 }
20202
20203 differ = (old->owner != real_packet->owner);
20204 if (differ) {
20205 different++;
20206 BV_SET(fields, 1);
20207 }
20208
20209 differ = (old->original != real_packet->original);
20210 if (differ) {
20211 different++;
20212 BV_SET(fields, 2);
20213 }
20214
20215 differ = (old->size != real_packet->size);
20216 if (differ) {
20217 different++;
20218 BV_SET(fields, 3);
20219 }
20220
20221 differ = (old->style != real_packet->style);
20222 if (differ) {
20223 different++;
20224 BV_SET(fields, 4);
20225 }
20226
20227 differ = (old->capital != real_packet->capital);
20228 if (differ) {
20229 different++;
20230 BV_SET(fields, 5);
20231 }
20232
20233 differ = (old->occupied != real_packet->occupied);
20234 if (differ) {
20235 different++;
20236 }
20237 /* folded into head */
20238 if (real_packet->occupied) {
20239 BV_SET(fields, 6);
20240 }
20241
20242 differ = (old->walls != real_packet->walls);
20243 if (differ) {
20244 different++;
20245 BV_SET(fields, 7);
20246 }
20247
20248 differ = (old->happy != real_packet->happy);
20249 if (differ) {
20250 different++;
20251 }
20252 /* folded into head */
20253 if (real_packet->happy) {
20254 BV_SET(fields, 8);
20255 }
20256
20257 differ = (old->unhappy != real_packet->unhappy);
20258 if (differ) {
20259 different++;
20260 }
20261 /* folded into head */
20262 if (real_packet->unhappy) {
20263 BV_SET(fields, 9);
20264 }
20265
20266 differ = (old->city_image != real_packet->city_image);
20267 if (differ) {
20268 different++;
20269 BV_SET(fields, 10);
20270 }
20271
20272 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
20273 if (differ) {
20274 different++;
20275 BV_SET(fields, 11);
20276 }
20277
20278 differ = (strcmp(old->name, real_packet->name) != 0);
20279 if (differ) {
20280 different++;
20281 BV_SET(fields, 12);
20282 }
20283
20284 if (different == 0) {
20285 log_packet_detailed(" no change -> discard");
20287 }
20288#endif /* FREECIV_DELTA_PROTOCOL */
20289
20290#ifdef FREECIV_JSON_CONNECTION
20291 struct plocation field_addr;
20292 {
20293 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20296 }
20297#endif /* FREECIV_JSON_CONNECTION */
20298
20299#ifdef FREECIV_JSON_CONNECTION
20300 field_addr.name = "id";
20301#endif /* FREECIV_JSON_CONNECTION */
20302 e = 0;
20303
20304 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
20305
20306 if (e) {
20307 log_packet_detailed("'id' field error detected");
20308 }
20309
20310#ifdef FREECIV_DELTA_PROTOCOL
20311#ifdef FREECIV_JSON_CONNECTION
20312 field_addr.name = "fields";
20313#endif /* FREECIV_JSON_CONNECTION */
20314 e = 0;
20315 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20316 if (e) {
20317 log_packet_detailed("fields bitvector error detected");
20318 }
20319
20320 if (BV_ISSET(fields, 0)) {
20321 log_packet_detailed(" field 'tile' has changed");
20322
20323#ifdef FREECIV_JSON_CONNECTION
20324 field_addr.name = "tile";
20325#endif /* FREECIV_JSON_CONNECTION */
20326 e = 0;
20327
20328 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20329
20330 if (e) {
20331 log_packet_detailed("'tile' field error detected");
20332 }
20333 }
20334
20335 if (BV_ISSET(fields, 1)) {
20336 log_packet_detailed(" field 'owner' has changed");
20337
20338#ifdef FREECIV_JSON_CONNECTION
20339 field_addr.name = "owner";
20340#endif /* FREECIV_JSON_CONNECTION */
20341 e = 0;
20342
20343 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20344
20345 if (e) {
20346 log_packet_detailed("'owner' field error detected");
20347 }
20348 }
20349
20350 if (BV_ISSET(fields, 2)) {
20351 log_packet_detailed(" field 'original' has changed");
20352
20353#ifdef FREECIV_JSON_CONNECTION
20354 field_addr.name = "original";
20355#endif /* FREECIV_JSON_CONNECTION */
20356 e = 0;
20357
20358 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20359
20360 if (e) {
20361 log_packet_detailed("'original' field error detected");
20362 }
20363 }
20364
20365 if (BV_ISSET(fields, 3)) {
20366 log_packet_detailed(" field 'size' has changed");
20367
20368#ifdef FREECIV_JSON_CONNECTION
20369 field_addr.name = "size";
20370#endif /* FREECIV_JSON_CONNECTION */
20371 e = 0;
20372
20373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20374
20375 if (e) {
20376 log_packet_detailed("'size' field error detected");
20377 }
20378 }
20379
20380 if (BV_ISSET(fields, 4)) {
20381 log_packet_detailed(" field 'style' has changed");
20382
20383#ifdef FREECIV_JSON_CONNECTION
20384 field_addr.name = "style";
20385#endif /* FREECIV_JSON_CONNECTION */
20386 e = 0;
20387
20388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20389
20390 if (e) {
20391 log_packet_detailed("'style' field error detected");
20392 }
20393 }
20394
20395 if (BV_ISSET(fields, 5)) {
20396 log_packet_detailed(" field 'capital' has changed");
20397
20398#ifdef FREECIV_JSON_CONNECTION
20399 field_addr.name = "capital";
20400#endif /* FREECIV_JSON_CONNECTION */
20401 e = 0;
20402
20403 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20404
20405 if (e) {
20406 log_packet_detailed("'capital' field error detected");
20407 }
20408 }
20409
20410 /* field 6 is folded into the header */
20411
20412 if (BV_ISSET(fields, 7)) {
20413 log_packet_detailed(" field 'walls' has changed");
20414
20415#ifdef FREECIV_JSON_CONNECTION
20416 field_addr.name = "walls";
20417#endif /* FREECIV_JSON_CONNECTION */
20418 e = 0;
20419
20420 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20421
20422 if (e) {
20423 log_packet_detailed("'walls' field error detected");
20424 }
20425 }
20426
20427 /* field 8 is folded into the header */
20428
20429 /* field 9 is folded into the header */
20430
20431 if (BV_ISSET(fields, 10)) {
20432 log_packet_detailed(" field 'city_image' has changed");
20433
20434#ifdef FREECIV_JSON_CONNECTION
20435 field_addr.name = "city_image";
20436#endif /* FREECIV_JSON_CONNECTION */
20437 e = 0;
20438
20439 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20440
20441 if (e) {
20442 log_packet_detailed("'city_image' field error detected");
20443 }
20444 }
20445
20446 if (BV_ISSET(fields, 11)) {
20447 log_packet_detailed(" field 'improvements' has changed");
20448
20449#ifdef FREECIV_JSON_CONNECTION
20450 field_addr.name = "improvements";
20451#endif /* FREECIV_JSON_CONNECTION */
20452 e = 0;
20453
20454 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20455
20456 if (e) {
20457 log_packet_detailed("'improvements' field error detected");
20458 }
20459 }
20460
20461 if (BV_ISSET(fields, 12)) {
20462 log_packet_detailed(" field 'name' has changed");
20463
20464#ifdef FREECIV_JSON_CONNECTION
20465 field_addr.name = "name";
20466#endif /* FREECIV_JSON_CONNECTION */
20467 e = 0;
20468
20469 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20470
20471 if (e) {
20472 log_packet_detailed("'name' field error detected");
20473 }
20474 }
20475
20476 *old = *real_packet;
20477
20478 hash = pc->phs.sent + PACKET_CITY_INFO;
20479 if (nullptr != *hash) {
20481 }
20482
20484 if (nullptr != *hash) {
20486 }
20487
20488 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
20489 if (nullptr != *hash) {
20491 }
20492
20493 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
20494 if (nullptr != *hash) {
20496 }
20497
20498#else /* FREECIV_DELTA_PROTOCOL */
20499#ifdef FREECIV_JSON_CONNECTION
20500 field_addr.name = "tile";
20501#endif /* FREECIV_JSON_CONNECTION */
20502 e = 0;
20503
20504 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20505
20506 if (e) {
20507 log_packet_detailed("'tile' field error detected");
20508 }
20509
20510#ifdef FREECIV_JSON_CONNECTION
20511 field_addr.name = "owner";
20512#endif /* FREECIV_JSON_CONNECTION */
20513 e = 0;
20514
20515 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20516
20517 if (e) {
20518 log_packet_detailed("'owner' field error detected");
20519 }
20520
20521#ifdef FREECIV_JSON_CONNECTION
20522 field_addr.name = "original";
20523#endif /* FREECIV_JSON_CONNECTION */
20524 e = 0;
20525
20526 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20527
20528 if (e) {
20529 log_packet_detailed("'original' field error detected");
20530 }
20531
20532#ifdef FREECIV_JSON_CONNECTION
20533 field_addr.name = "size";
20534#endif /* FREECIV_JSON_CONNECTION */
20535 e = 0;
20536
20537 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20538
20539 if (e) {
20540 log_packet_detailed("'size' field error detected");
20541 }
20542
20543#ifdef FREECIV_JSON_CONNECTION
20544 field_addr.name = "style";
20545#endif /* FREECIV_JSON_CONNECTION */
20546 e = 0;
20547
20548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20549
20550 if (e) {
20551 log_packet_detailed("'style' field error detected");
20552 }
20553
20554#ifdef FREECIV_JSON_CONNECTION
20555 field_addr.name = "capital";
20556#endif /* FREECIV_JSON_CONNECTION */
20557 e = 0;
20558
20559 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20560
20561 if (e) {
20562 log_packet_detailed("'capital' field error detected");
20563 }
20564
20565#ifdef FREECIV_JSON_CONNECTION
20566 field_addr.name = "occupied";
20567#endif /* FREECIV_JSON_CONNECTION */
20568 e = 0;
20569
20570 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
20571
20572 if (e) {
20573 log_packet_detailed("'occupied' field error detected");
20574 }
20575
20576#ifdef FREECIV_JSON_CONNECTION
20577 field_addr.name = "walls";
20578#endif /* FREECIV_JSON_CONNECTION */
20579 e = 0;
20580
20581 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20582
20583 if (e) {
20584 log_packet_detailed("'walls' field error detected");
20585 }
20586
20587#ifdef FREECIV_JSON_CONNECTION
20588 field_addr.name = "happy";
20589#endif /* FREECIV_JSON_CONNECTION */
20590 e = 0;
20591
20592 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->happy);
20593
20594 if (e) {
20595 log_packet_detailed("'happy' field error detected");
20596 }
20597
20598#ifdef FREECIV_JSON_CONNECTION
20599 field_addr.name = "unhappy";
20600#endif /* FREECIV_JSON_CONNECTION */
20601 e = 0;
20602
20603 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unhappy);
20604
20605 if (e) {
20606 log_packet_detailed("'unhappy' field error detected");
20607 }
20608
20609#ifdef FREECIV_JSON_CONNECTION
20610 field_addr.name = "city_image";
20611#endif /* FREECIV_JSON_CONNECTION */
20612 e = 0;
20613
20614 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20615
20616 if (e) {
20617 log_packet_detailed("'city_image' field error detected");
20618 }
20619
20620#ifdef FREECIV_JSON_CONNECTION
20621 field_addr.name = "improvements";
20622#endif /* FREECIV_JSON_CONNECTION */
20623 e = 0;
20624
20625 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20626
20627 if (e) {
20628 log_packet_detailed("'improvements' field error detected");
20629 }
20630
20631#ifdef FREECIV_JSON_CONNECTION
20632 field_addr.name = "name";
20633#endif /* FREECIV_JSON_CONNECTION */
20634 e = 0;
20635
20636 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20637
20638 if (e) {
20639 log_packet_detailed("'name' field error detected");
20640 }
20641#endif /* FREECIV_DELTA_PROTOCOL */
20642
20644}
20645
20647{
20648 if (!pc->used) {
20649 log_error("WARNING: trying to send data to the closed connection %s",
20651 return -1;
20652 }
20653 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet != nullptr, -1,
20654 "Handler for PACKET_CITY_SHORT_INFO not installed");
20655 return pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet(pc, packet);
20656}
20657
20658void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
20659{
20660 conn_list_iterate(dest, pconn) {
20663}
20664
20666{
20667 memset(packet, 0, sizeof(*packet));
20668}
20669
20670#define free_packet_trade_route_info(_packet) (void) 0
20671#define destroy_packet_trade_route_info free
20672
20673#ifdef FREECIV_DELTA_PROTOCOL
20674#define hash_packet_trade_route_info_100 hash_const
20675#define cmp_packet_trade_route_info_100 cmp_const
20677#endif /* FREECIV_DELTA_PROTOCOL */
20678
20680{
20681#define FREE_PACKET_STRUCT(_packet) free_packet_trade_route_info(_packet)
20683
20684#ifdef FREECIV_JSON_CONNECTION
20685 struct plocation field_addr;
20686 {
20687 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20690 }
20691#endif /* FREECIV_JSON_CONNECTION */
20692
20693 log_packet_detailed("packet_trade_route_info_100: got info about ()");
20694
20695#ifdef FREECIV_DELTA_PROTOCOL
20698 struct genhash **hash = pc->phs.received + PACKET_TRADE_ROUTE_INFO;
20699
20700 if (nullptr == *hash) {
20702 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20703 }
20704
20705 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20706 *real_packet = *old;
20707 } else {
20708 /* packet is already initialized empty */
20709 log_packet_detailed(" no old info");
20710 }
20711
20712#ifdef FREECIV_JSON_CONNECTION
20713 field_addr.name = "fields";
20714#endif /* FREECIV_JSON_CONNECTION */
20715 DIO_BV_GET(&din, &field_addr, fields);
20716
20717 if (BV_ISSET(fields, 0)) {
20718 log_packet_detailed(" got field 'city'");
20719
20720#ifdef FREECIV_JSON_CONNECTION
20721 field_addr.name = "city";
20722#endif /* FREECIV_JSON_CONNECTION */
20723
20724 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20726 }
20727 }
20728
20729 if (BV_ISSET(fields, 1)) {
20730 log_packet_detailed(" got field 'index'");
20731
20732#ifdef FREECIV_JSON_CONNECTION
20733 field_addr.name = "index";
20734#endif /* FREECIV_JSON_CONNECTION */
20735
20736 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20738 }
20739 }
20740
20741 if (BV_ISSET(fields, 2)) {
20742 log_packet_detailed(" got field 'partner'");
20743
20744#ifdef FREECIV_JSON_CONNECTION
20745 field_addr.name = "partner";
20746#endif /* FREECIV_JSON_CONNECTION */
20747
20748 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20750 }
20751 }
20752
20753 if (BV_ISSET(fields, 3)) {
20754 log_packet_detailed(" got field 'value'");
20755
20756#ifdef FREECIV_JSON_CONNECTION
20757 field_addr.name = "value";
20758#endif /* FREECIV_JSON_CONNECTION */
20759
20760 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20762 }
20763 }
20764
20765 if (BV_ISSET(fields, 4)) {
20766 log_packet_detailed(" got field 'direction'");
20767
20768#ifdef FREECIV_JSON_CONNECTION
20769 field_addr.name = "direction";
20770#endif /* FREECIV_JSON_CONNECTION */
20771
20772 {
20773 int readin;
20774
20775 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20776 RECEIVE_PACKET_FIELD_ERROR(direction);
20777 }
20778 real_packet->direction = readin;
20779 }
20780 }
20781
20782 if (BV_ISSET(fields, 5)) {
20783 log_packet_detailed(" got field 'goods'");
20784
20785#ifdef FREECIV_JSON_CONNECTION
20786 field_addr.name = "goods";
20787#endif /* FREECIV_JSON_CONNECTION */
20788
20789 {
20790 int readin;
20791
20792 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20794 }
20795 real_packet->goods = readin;
20796 }
20797 }
20798
20799 if (nullptr == old) {
20800 old = fc_malloc(sizeof(*old));
20802 *old = *real_packet;
20804 } else {
20805 *old = *real_packet;
20806 }
20807
20808#else /* FREECIV_DELTA_PROTOCOL */
20809#ifdef FREECIV_JSON_CONNECTION
20810 field_addr.name = "city";
20811#endif /* FREECIV_JSON_CONNECTION */
20812
20813 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20815 }
20816
20817#ifdef FREECIV_JSON_CONNECTION
20818 field_addr.name = "index";
20819#endif /* FREECIV_JSON_CONNECTION */
20820
20821 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20823 }
20824
20825#ifdef FREECIV_JSON_CONNECTION
20826 field_addr.name = "partner";
20827#endif /* FREECIV_JSON_CONNECTION */
20828
20829 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20831 }
20832
20833#ifdef FREECIV_JSON_CONNECTION
20834 field_addr.name = "value";
20835#endif /* FREECIV_JSON_CONNECTION */
20836
20837 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20839 }
20840
20841#ifdef FREECIV_JSON_CONNECTION
20842 field_addr.name = "direction";
20843#endif /* FREECIV_JSON_CONNECTION */
20844
20845 {
20846 int readin;
20847
20848 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20849 RECEIVE_PACKET_FIELD_ERROR(direction);
20850 }
20851 real_packet->direction = readin;
20852 }
20853
20854#ifdef FREECIV_JSON_CONNECTION
20855 field_addr.name = "goods";
20856#endif /* FREECIV_JSON_CONNECTION */
20857
20858 {
20859 int readin;
20860
20861 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20863 }
20864 real_packet->goods = readin;
20865 }
20866#endif /* FREECIV_DELTA_PROTOCOL */
20867
20869#undef FREE_PACKET_STRUCT
20870}
20871
20873{
20874 const struct packet_trade_route_info *real_packet = packet;
20875 int e;
20877
20878 log_packet_detailed("packet_trade_route_info_100: sending info about ()");
20879
20880#ifdef FREECIV_DELTA_PROTOCOL
20883 bool differ;
20884 struct genhash **hash = pc->phs.sent + PACKET_TRADE_ROUTE_INFO;
20885
20886 if (nullptr == *hash) {
20888 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20889 }
20890 BV_CLR_ALL(fields);
20891
20892 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20893 old = fc_malloc(sizeof(*old));
20894 /* temporary bitcopy just to insert correctly */
20895 *old = *real_packet;
20898 }
20899
20900 differ = (old->city != real_packet->city);
20901 if (differ) {
20902 BV_SET(fields, 0);
20903 }
20904
20905 differ = (old->index != real_packet->index);
20906 if (differ) {
20907 BV_SET(fields, 1);
20908 }
20909
20910 differ = (old->partner != real_packet->partner);
20911 if (differ) {
20912 BV_SET(fields, 2);
20913 }
20914
20915 differ = (old->value != real_packet->value);
20916 if (differ) {
20917 BV_SET(fields, 3);
20918 }
20919
20920 differ = (old->direction != real_packet->direction);
20921 if (differ) {
20922 BV_SET(fields, 4);
20923 }
20924
20925 differ = (old->goods != real_packet->goods);
20926 if (differ) {
20927 BV_SET(fields, 5);
20928 }
20929#endif /* FREECIV_DELTA_PROTOCOL */
20930
20931#ifdef FREECIV_JSON_CONNECTION
20932 struct plocation field_addr;
20933 {
20934 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20937 }
20938#endif /* FREECIV_JSON_CONNECTION */
20939
20940#ifdef FREECIV_DELTA_PROTOCOL
20941#ifdef FREECIV_JSON_CONNECTION
20942 field_addr.name = "fields";
20943#endif /* FREECIV_JSON_CONNECTION */
20944 e = 0;
20945 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20946 if (e) {
20947 log_packet_detailed("fields bitvector error detected");
20948 }
20949
20950 if (BV_ISSET(fields, 0)) {
20951 log_packet_detailed(" field 'city' has changed");
20952
20953#ifdef FREECIV_JSON_CONNECTION
20954 field_addr.name = "city";
20955#endif /* FREECIV_JSON_CONNECTION */
20956 e = 0;
20957
20958 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20959
20960 if (e) {
20961 log_packet_detailed("'city' field error detected");
20962 }
20963 }
20964
20965 if (BV_ISSET(fields, 1)) {
20966 log_packet_detailed(" field 'index' has changed");
20967
20968#ifdef FREECIV_JSON_CONNECTION
20969 field_addr.name = "index";
20970#endif /* FREECIV_JSON_CONNECTION */
20971 e = 0;
20972
20973 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
20974
20975 if (e) {
20976 log_packet_detailed("'index' field error detected");
20977 }
20978 }
20979
20980 if (BV_ISSET(fields, 2)) {
20981 log_packet_detailed(" field 'partner' has changed");
20982
20983#ifdef FREECIV_JSON_CONNECTION
20984 field_addr.name = "partner";
20985#endif /* FREECIV_JSON_CONNECTION */
20986 e = 0;
20987
20988 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
20989
20990 if (e) {
20991 log_packet_detailed("'partner' field error detected");
20992 }
20993 }
20994
20995 if (BV_ISSET(fields, 3)) {
20996 log_packet_detailed(" field 'value' has changed");
20997
20998#ifdef FREECIV_JSON_CONNECTION
20999 field_addr.name = "value";
21000#endif /* FREECIV_JSON_CONNECTION */
21001 e = 0;
21002
21003 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21004
21005 if (e) {
21006 log_packet_detailed("'value' field error detected");
21007 }
21008 }
21009
21010 if (BV_ISSET(fields, 4)) {
21011 log_packet_detailed(" field 'direction' has changed");
21012
21013#ifdef FREECIV_JSON_CONNECTION
21014 field_addr.name = "direction";
21015#endif /* FREECIV_JSON_CONNECTION */
21016 e = 0;
21017
21018 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21019
21020 if (e) {
21021 log_packet_detailed("'direction' field error detected");
21022 }
21023 }
21024
21025 if (BV_ISSET(fields, 5)) {
21026 log_packet_detailed(" field 'goods' has changed");
21027
21028#ifdef FREECIV_JSON_CONNECTION
21029 field_addr.name = "goods";
21030#endif /* FREECIV_JSON_CONNECTION */
21031 e = 0;
21032
21033 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21034
21035 if (e) {
21036 log_packet_detailed("'goods' field error detected");
21037 }
21038 }
21039
21040 *old = *real_packet;
21041
21042#else /* FREECIV_DELTA_PROTOCOL */
21043#ifdef FREECIV_JSON_CONNECTION
21044 field_addr.name = "city";
21045#endif /* FREECIV_JSON_CONNECTION */
21046 e = 0;
21047
21048 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
21049
21050 if (e) {
21051 log_packet_detailed("'city' field error detected");
21052 }
21053
21054#ifdef FREECIV_JSON_CONNECTION
21055 field_addr.name = "index";
21056#endif /* FREECIV_JSON_CONNECTION */
21057 e = 0;
21058
21059 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
21060
21061 if (e) {
21062 log_packet_detailed("'index' field error detected");
21063 }
21064
21065#ifdef FREECIV_JSON_CONNECTION
21066 field_addr.name = "partner";
21067#endif /* FREECIV_JSON_CONNECTION */
21068 e = 0;
21069
21070 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
21071
21072 if (e) {
21073 log_packet_detailed("'partner' field error detected");
21074 }
21075
21076#ifdef FREECIV_JSON_CONNECTION
21077 field_addr.name = "value";
21078#endif /* FREECIV_JSON_CONNECTION */
21079 e = 0;
21080
21081 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21082
21083 if (e) {
21084 log_packet_detailed("'value' field error detected");
21085 }
21086
21087#ifdef FREECIV_JSON_CONNECTION
21088 field_addr.name = "direction";
21089#endif /* FREECIV_JSON_CONNECTION */
21090 e = 0;
21091
21092 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21093
21094 if (e) {
21095 log_packet_detailed("'direction' field error detected");
21096 }
21097
21098#ifdef FREECIV_JSON_CONNECTION
21099 field_addr.name = "goods";
21100#endif /* FREECIV_JSON_CONNECTION */
21101 e = 0;
21102
21103 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21104
21105 if (e) {
21106 log_packet_detailed("'goods' field error detected");
21107 }
21108#endif /* FREECIV_DELTA_PROTOCOL */
21109
21111}
21112
21114{
21115 if (!pc->used) {
21116 log_error("WARNING: trying to send data to the closed connection %s",
21118 return -1;
21119 }
21120 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet != nullptr, -1,
21121 "Handler for PACKET_TRADE_ROUTE_INFO not installed");
21122 return pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet(pc, packet);
21123}
21124
21126{
21127 conn_list_iterate(dest, pconn) {
21130}
21131
21132static inline void init_packet_city_sell(struct packet_city_sell *packet)
21133{
21134 memset(packet, 0, sizeof(*packet));
21135}
21136
21137#define free_packet_city_sell(_packet) (void) 0
21138#define destroy_packet_city_sell free
21139
21140#ifdef FREECIV_DELTA_PROTOCOL
21141#define hash_packet_city_sell_100 hash_const
21142#define cmp_packet_city_sell_100 cmp_const
21144#endif /* FREECIV_DELTA_PROTOCOL */
21145
21147{
21148#define FREE_PACKET_STRUCT(_packet) free_packet_city_sell(_packet)
21150
21151#ifdef FREECIV_JSON_CONNECTION
21152 struct plocation field_addr;
21153 {
21154 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21157 }
21158#endif /* FREECIV_JSON_CONNECTION */
21159
21160 log_packet_detailed("packet_city_sell_100: got info about ()");
21161
21162#ifdef FREECIV_DELTA_PROTOCOL
21164 struct packet_city_sell *old;
21165 struct genhash **hash = pc->phs.received + PACKET_CITY_SELL;
21166
21167 if (nullptr == *hash) {
21169 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21170 }
21171
21172 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21173 *real_packet = *old;
21174 } else {
21175 /* packet is already initialized empty */
21176 log_packet_detailed(" no old info");
21177 }
21178
21179#ifdef FREECIV_JSON_CONNECTION
21180 field_addr.name = "fields";
21181#endif /* FREECIV_JSON_CONNECTION */
21182 DIO_BV_GET(&din, &field_addr, fields);
21183
21184 if (BV_ISSET(fields, 0)) {
21185 log_packet_detailed(" got field 'city_id'");
21186
21187#ifdef FREECIV_JSON_CONNECTION
21188 field_addr.name = "city_id";
21189#endif /* FREECIV_JSON_CONNECTION */
21190
21191 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21193 }
21194 }
21195
21196 if (BV_ISSET(fields, 1)) {
21197 log_packet_detailed(" got field 'build_id'");
21198
21199#ifdef FREECIV_JSON_CONNECTION
21200 field_addr.name = "build_id";
21201#endif /* FREECIV_JSON_CONNECTION */
21202
21203 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21205 }
21206 }
21207
21208 if (nullptr == old) {
21209 old = fc_malloc(sizeof(*old));
21211 *old = *real_packet;
21213 } else {
21214 *old = *real_packet;
21215 }
21216
21217#else /* FREECIV_DELTA_PROTOCOL */
21218#ifdef FREECIV_JSON_CONNECTION
21219 field_addr.name = "city_id";
21220#endif /* FREECIV_JSON_CONNECTION */
21221
21222 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21224 }
21225
21226#ifdef FREECIV_JSON_CONNECTION
21227 field_addr.name = "build_id";
21228#endif /* FREECIV_JSON_CONNECTION */
21229
21230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21232 }
21233#endif /* FREECIV_DELTA_PROTOCOL */
21234
21236#undef FREE_PACKET_STRUCT
21237}
21238
21239static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
21240{
21241 const struct packet_city_sell *real_packet = packet;
21242 int e;
21244
21245 log_packet_detailed("packet_city_sell_100: sending info about ()");
21246
21247#ifdef FREECIV_DELTA_PROTOCOL
21249 struct packet_city_sell *old;
21250 bool differ;
21251 struct genhash **hash = pc->phs.sent + PACKET_CITY_SELL;
21252
21253 if (nullptr == *hash) {
21255 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21256 }
21257 BV_CLR_ALL(fields);
21258
21259 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21260 old = fc_malloc(sizeof(*old));
21261 /* temporary bitcopy just to insert correctly */
21262 *old = *real_packet;
21265 }
21266
21267 differ = (old->city_id != real_packet->city_id);
21268 if (differ) {
21269 BV_SET(fields, 0);
21270 }
21271
21272 differ = (old->build_id != real_packet->build_id);
21273 if (differ) {
21274 BV_SET(fields, 1);
21275 }
21276#endif /* FREECIV_DELTA_PROTOCOL */
21277
21278#ifdef FREECIV_JSON_CONNECTION
21279 struct plocation field_addr;
21280 {
21281 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21284 }
21285#endif /* FREECIV_JSON_CONNECTION */
21286
21287#ifdef FREECIV_DELTA_PROTOCOL
21288#ifdef FREECIV_JSON_CONNECTION
21289 field_addr.name = "fields";
21290#endif /* FREECIV_JSON_CONNECTION */
21291 e = 0;
21292 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21293 if (e) {
21294 log_packet_detailed("fields bitvector error detected");
21295 }
21296
21297 if (BV_ISSET(fields, 0)) {
21298 log_packet_detailed(" field 'city_id' has changed");
21299
21300#ifdef FREECIV_JSON_CONNECTION
21301 field_addr.name = "city_id";
21302#endif /* FREECIV_JSON_CONNECTION */
21303 e = 0;
21304
21305 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21306
21307 if (e) {
21308 log_packet_detailed("'city_id' field error detected");
21309 }
21310 }
21311
21312 if (BV_ISSET(fields, 1)) {
21313 log_packet_detailed(" field 'build_id' has changed");
21314
21315#ifdef FREECIV_JSON_CONNECTION
21316 field_addr.name = "build_id";
21317#endif /* FREECIV_JSON_CONNECTION */
21318 e = 0;
21319
21320 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21321
21322 if (e) {
21323 log_packet_detailed("'build_id' field error detected");
21324 }
21325 }
21326
21327 *old = *real_packet;
21328
21329#else /* FREECIV_DELTA_PROTOCOL */
21330#ifdef FREECIV_JSON_CONNECTION
21331 field_addr.name = "city_id";
21332#endif /* FREECIV_JSON_CONNECTION */
21333 e = 0;
21334
21335 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21336
21337 if (e) {
21338 log_packet_detailed("'city_id' field error detected");
21339 }
21340
21341#ifdef FREECIV_JSON_CONNECTION
21342 field_addr.name = "build_id";
21343#endif /* FREECIV_JSON_CONNECTION */
21344 e = 0;
21345
21346 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21347
21348 if (e) {
21349 log_packet_detailed("'build_id' field error detected");
21350 }
21351#endif /* FREECIV_DELTA_PROTOCOL */
21352
21354}
21355
21356int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
21357{
21358 if (!pc->used) {
21359 log_error("WARNING: trying to send data to the closed connection %s",
21361 return -1;
21362 }
21363 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SELL].packet != nullptr, -1,
21364 "Handler for PACKET_CITY_SELL not installed");
21365 return pc->phs.handlers->send[PACKET_CITY_SELL].packet(pc, packet);
21366}
21367
21368int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
21369{
21370 struct packet_city_sell packet, *real_packet = &packet;
21371
21373 real_packet->build_id = build_id;
21374
21376}
21377
21378static inline void init_packet_city_buy(struct packet_city_buy *packet)
21379{
21380 memset(packet, 0, sizeof(*packet));
21381}
21382
21383#define free_packet_city_buy(_packet) (void) 0
21384#define destroy_packet_city_buy free
21385
21386#ifdef FREECIV_DELTA_PROTOCOL
21387#define hash_packet_city_buy_100 hash_const
21388#define cmp_packet_city_buy_100 cmp_const
21390#endif /* FREECIV_DELTA_PROTOCOL */
21391
21393{
21394#define FREE_PACKET_STRUCT(_packet) free_packet_city_buy(_packet)
21396
21397#ifdef FREECIV_JSON_CONNECTION
21398 struct plocation field_addr;
21399 {
21400 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21403 }
21404#endif /* FREECIV_JSON_CONNECTION */
21405
21406 log_packet_detailed("packet_city_buy_100: got info about ()");
21407
21408#ifdef FREECIV_DELTA_PROTOCOL
21410 struct packet_city_buy *old;
21411 struct genhash **hash = pc->phs.received + PACKET_CITY_BUY;
21412
21413 if (nullptr == *hash) {
21415 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21416 }
21417
21418 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21419 *real_packet = *old;
21420 } else {
21421 /* packet is already initialized empty */
21422 log_packet_detailed(" no old info");
21423 }
21424
21425#ifdef FREECIV_JSON_CONNECTION
21426 field_addr.name = "fields";
21427#endif /* FREECIV_JSON_CONNECTION */
21428 DIO_BV_GET(&din, &field_addr, fields);
21429
21430 if (BV_ISSET(fields, 0)) {
21431 log_packet_detailed(" got field 'city_id'");
21432
21433#ifdef FREECIV_JSON_CONNECTION
21434 field_addr.name = "city_id";
21435#endif /* FREECIV_JSON_CONNECTION */
21436
21437 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21439 }
21440 }
21441
21442 if (nullptr == old) {
21443 old = fc_malloc(sizeof(*old));
21445 *old = *real_packet;
21447 } else {
21448 *old = *real_packet;
21449 }
21450
21451#else /* FREECIV_DELTA_PROTOCOL */
21452#ifdef FREECIV_JSON_CONNECTION
21453 field_addr.name = "city_id";
21454#endif /* FREECIV_JSON_CONNECTION */
21455
21456 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21458 }
21459#endif /* FREECIV_DELTA_PROTOCOL */
21460
21462#undef FREE_PACKET_STRUCT
21463}
21464
21465static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
21466{
21467 const struct packet_city_buy *real_packet = packet;
21468 int e;
21470
21471 log_packet_detailed("packet_city_buy_100: sending info about ()");
21472
21473#ifdef FREECIV_DELTA_PROTOCOL
21475 struct packet_city_buy *old;
21476 bool differ;
21477 struct genhash **hash = pc->phs.sent + PACKET_CITY_BUY;
21478
21479 if (nullptr == *hash) {
21481 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21482 }
21483 BV_CLR_ALL(fields);
21484
21485 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21486 old = fc_malloc(sizeof(*old));
21487 /* temporary bitcopy just to insert correctly */
21488 *old = *real_packet;
21491 }
21492
21493 differ = (old->city_id != real_packet->city_id);
21494 if (differ) {
21495 BV_SET(fields, 0);
21496 }
21497#endif /* FREECIV_DELTA_PROTOCOL */
21498
21499#ifdef FREECIV_JSON_CONNECTION
21500 struct plocation field_addr;
21501 {
21502 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21505 }
21506#endif /* FREECIV_JSON_CONNECTION */
21507
21508#ifdef FREECIV_DELTA_PROTOCOL
21509#ifdef FREECIV_JSON_CONNECTION
21510 field_addr.name = "fields";
21511#endif /* FREECIV_JSON_CONNECTION */
21512 e = 0;
21513 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21514 if (e) {
21515 log_packet_detailed("fields bitvector error detected");
21516 }
21517
21518 if (BV_ISSET(fields, 0)) {
21519 log_packet_detailed(" field 'city_id' has changed");
21520
21521#ifdef FREECIV_JSON_CONNECTION
21522 field_addr.name = "city_id";
21523#endif /* FREECIV_JSON_CONNECTION */
21524 e = 0;
21525
21526 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21527
21528 if (e) {
21529 log_packet_detailed("'city_id' field error detected");
21530 }
21531 }
21532
21533 *old = *real_packet;
21534
21535#else /* FREECIV_DELTA_PROTOCOL */
21536#ifdef FREECIV_JSON_CONNECTION
21537 field_addr.name = "city_id";
21538#endif /* FREECIV_JSON_CONNECTION */
21539 e = 0;
21540
21541 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21542
21543 if (e) {
21544 log_packet_detailed("'city_id' field error detected");
21545 }
21546#endif /* FREECIV_DELTA_PROTOCOL */
21547
21549}
21550
21551int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
21552{
21553 if (!pc->used) {
21554 log_error("WARNING: trying to send data to the closed connection %s",
21556 return -1;
21557 }
21558 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_BUY].packet != nullptr, -1,
21559 "Handler for PACKET_CITY_BUY not installed");
21560 return pc->phs.handlers->send[PACKET_CITY_BUY].packet(pc, packet);
21561}
21562
21563int dsend_packet_city_buy(struct connection *pc, int city_id)
21564{
21565 struct packet_city_buy packet, *real_packet = &packet;
21566
21568
21570}
21571
21572static inline void init_packet_city_change(struct packet_city_change *packet)
21573{
21574 memset(packet, 0, sizeof(*packet));
21575}
21576
21577#define free_packet_city_change(_packet) (void) 0
21578#define destroy_packet_city_change free
21579
21580#ifdef FREECIV_DELTA_PROTOCOL
21581#define hash_packet_city_change_100 hash_const
21582#define cmp_packet_city_change_100 cmp_const
21584#endif /* FREECIV_DELTA_PROTOCOL */
21585
21587{
21588#define FREE_PACKET_STRUCT(_packet) free_packet_city_change(_packet)
21590
21591#ifdef FREECIV_JSON_CONNECTION
21592 struct plocation field_addr;
21593 {
21594 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21597 }
21598#endif /* FREECIV_JSON_CONNECTION */
21599
21600 log_packet_detailed("packet_city_change_100: got info about ()");
21601
21602#ifdef FREECIV_DELTA_PROTOCOL
21604 struct packet_city_change *old;
21605 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE;
21606
21607 if (nullptr == *hash) {
21609 nullptr, nullptr, nullptr, destroy_packet_city_change);
21610 }
21611
21612 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21613 *real_packet = *old;
21614 } else {
21615 /* packet is already initialized empty */
21616 log_packet_detailed(" no old info");
21617 }
21618
21619#ifdef FREECIV_JSON_CONNECTION
21620 field_addr.name = "fields";
21621#endif /* FREECIV_JSON_CONNECTION */
21622 DIO_BV_GET(&din, &field_addr, fields);
21623
21624 if (BV_ISSET(fields, 0)) {
21625 log_packet_detailed(" got field 'city_id'");
21626
21627#ifdef FREECIV_JSON_CONNECTION
21628 field_addr.name = "city_id";
21629#endif /* FREECIV_JSON_CONNECTION */
21630
21631 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21633 }
21634 }
21635
21636 if (BV_ISSET(fields, 1)) {
21637 log_packet_detailed(" got field 'production_kind'");
21638
21639#ifdef FREECIV_JSON_CONNECTION
21640 field_addr.name = "production_kind";
21641#endif /* FREECIV_JSON_CONNECTION */
21642
21643 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21644 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21645 }
21646 }
21647
21648 if (BV_ISSET(fields, 2)) {
21649 log_packet_detailed(" got field 'production_value'");
21650
21651#ifdef FREECIV_JSON_CONNECTION
21652 field_addr.name = "production_value";
21653#endif /* FREECIV_JSON_CONNECTION */
21654
21655 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21656 RECEIVE_PACKET_FIELD_ERROR(production_value);
21657 }
21658 }
21659
21660 if (nullptr == old) {
21661 old = fc_malloc(sizeof(*old));
21663 *old = *real_packet;
21665 } else {
21666 *old = *real_packet;
21667 }
21668
21669#else /* FREECIV_DELTA_PROTOCOL */
21670#ifdef FREECIV_JSON_CONNECTION
21671 field_addr.name = "city_id";
21672#endif /* FREECIV_JSON_CONNECTION */
21673
21674 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21676 }
21677
21678#ifdef FREECIV_JSON_CONNECTION
21679 field_addr.name = "production_kind";
21680#endif /* FREECIV_JSON_CONNECTION */
21681
21682 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21683 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21684 }
21685
21686#ifdef FREECIV_JSON_CONNECTION
21687 field_addr.name = "production_value";
21688#endif /* FREECIV_JSON_CONNECTION */
21689
21690 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21691 RECEIVE_PACKET_FIELD_ERROR(production_value);
21692 }
21693#endif /* FREECIV_DELTA_PROTOCOL */
21694
21696#undef FREE_PACKET_STRUCT
21697}
21698
21699static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
21700{
21701 const struct packet_city_change *real_packet = packet;
21702 int e;
21704
21705 log_packet_detailed("packet_city_change_100: sending info about ()");
21706
21707#ifdef FREECIV_DELTA_PROTOCOL
21709 struct packet_city_change *old;
21710 bool differ;
21711 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE;
21712
21713 if (nullptr == *hash) {
21715 nullptr, nullptr, nullptr, destroy_packet_city_change);
21716 }
21717 BV_CLR_ALL(fields);
21718
21719 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21720 old = fc_malloc(sizeof(*old));
21721 /* temporary bitcopy just to insert correctly */
21722 *old = *real_packet;
21725 }
21726
21727 differ = (old->city_id != real_packet->city_id);
21728 if (differ) {
21729 BV_SET(fields, 0);
21730 }
21731
21732 differ = (old->production_kind != real_packet->production_kind);
21733 if (differ) {
21734 BV_SET(fields, 1);
21735 }
21736
21737 differ = (old->production_value != real_packet->production_value);
21738 if (differ) {
21739 BV_SET(fields, 2);
21740 }
21741#endif /* FREECIV_DELTA_PROTOCOL */
21742
21743#ifdef FREECIV_JSON_CONNECTION
21744 struct plocation field_addr;
21745 {
21746 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21749 }
21750#endif /* FREECIV_JSON_CONNECTION */
21751
21752#ifdef FREECIV_DELTA_PROTOCOL
21753#ifdef FREECIV_JSON_CONNECTION
21754 field_addr.name = "fields";
21755#endif /* FREECIV_JSON_CONNECTION */
21756 e = 0;
21757 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21758 if (e) {
21759 log_packet_detailed("fields bitvector error detected");
21760 }
21761
21762 if (BV_ISSET(fields, 0)) {
21763 log_packet_detailed(" field 'city_id' has changed");
21764
21765#ifdef FREECIV_JSON_CONNECTION
21766 field_addr.name = "city_id";
21767#endif /* FREECIV_JSON_CONNECTION */
21768 e = 0;
21769
21770 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21771
21772 if (e) {
21773 log_packet_detailed("'city_id' field error detected");
21774 }
21775 }
21776
21777 if (BV_ISSET(fields, 1)) {
21778 log_packet_detailed(" field 'production_kind' has changed");
21779
21780#ifdef FREECIV_JSON_CONNECTION
21781 field_addr.name = "production_kind";
21782#endif /* FREECIV_JSON_CONNECTION */
21783 e = 0;
21784
21785 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21786
21787 if (e) {
21788 log_packet_detailed("'production_kind' field error detected");
21789 }
21790 }
21791
21792 if (BV_ISSET(fields, 2)) {
21793 log_packet_detailed(" field 'production_value' has changed");
21794
21795#ifdef FREECIV_JSON_CONNECTION
21796 field_addr.name = "production_value";
21797#endif /* FREECIV_JSON_CONNECTION */
21798 e = 0;
21799
21800 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21801
21802 if (e) {
21803 log_packet_detailed("'production_value' field error detected");
21804 }
21805 }
21806
21807 *old = *real_packet;
21808
21809#else /* FREECIV_DELTA_PROTOCOL */
21810#ifdef FREECIV_JSON_CONNECTION
21811 field_addr.name = "city_id";
21812#endif /* FREECIV_JSON_CONNECTION */
21813 e = 0;
21814
21815 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21816
21817 if (e) {
21818 log_packet_detailed("'city_id' field error detected");
21819 }
21820
21821#ifdef FREECIV_JSON_CONNECTION
21822 field_addr.name = "production_kind";
21823#endif /* FREECIV_JSON_CONNECTION */
21824 e = 0;
21825
21826 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21827
21828 if (e) {
21829 log_packet_detailed("'production_kind' field error detected");
21830 }
21831
21832#ifdef FREECIV_JSON_CONNECTION
21833 field_addr.name = "production_value";
21834#endif /* FREECIV_JSON_CONNECTION */
21835 e = 0;
21836
21837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21838
21839 if (e) {
21840 log_packet_detailed("'production_value' field error detected");
21841 }
21842#endif /* FREECIV_DELTA_PROTOCOL */
21843
21845}
21846
21848{
21849 if (!pc->used) {
21850 log_error("WARNING: trying to send data to the closed connection %s",
21852 return -1;
21853 }
21854 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE].packet != nullptr, -1,
21855 "Handler for PACKET_CITY_CHANGE not installed");
21856 return pc->phs.handlers->send[PACKET_CITY_CHANGE].packet(pc, packet);
21857}
21858
21859int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
21860{
21861 struct packet_city_change packet, *real_packet = &packet;
21862
21864 real_packet->production_kind = production_kind;
21865 real_packet->production_value = production_value;
21866
21868}
21869
21870static inline void init_packet_city_worklist(struct packet_city_worklist *packet)
21871{
21872 memset(packet, 0, sizeof(*packet));
21873}
21874
21875#define free_packet_city_worklist(_packet) (void) 0
21876#define destroy_packet_city_worklist free
21877
21878#ifdef FREECIV_DELTA_PROTOCOL
21879#define hash_packet_city_worklist_100 hash_const
21880#define cmp_packet_city_worklist_100 cmp_const
21882#endif /* FREECIV_DELTA_PROTOCOL */
21883
21885{
21886#define FREE_PACKET_STRUCT(_packet) free_packet_city_worklist(_packet)
21888
21889#ifdef FREECIV_JSON_CONNECTION
21890 struct plocation field_addr;
21891 {
21892 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21895 }
21896#endif /* FREECIV_JSON_CONNECTION */
21897
21898 log_packet_detailed("packet_city_worklist_100: got info about ()");
21899
21900#ifdef FREECIV_DELTA_PROTOCOL
21902 struct packet_city_worklist *old;
21903 struct genhash **hash = pc->phs.received + PACKET_CITY_WORKLIST;
21904
21905 if (nullptr == *hash) {
21907 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
21908 }
21909
21910 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21911 *real_packet = *old;
21912 } else {
21913 /* packet is already initialized empty */
21914 log_packet_detailed(" no old info");
21915 }
21916
21917#ifdef FREECIV_JSON_CONNECTION
21918 field_addr.name = "fields";
21919#endif /* FREECIV_JSON_CONNECTION */
21920 DIO_BV_GET(&din, &field_addr, fields);
21921
21922 if (BV_ISSET(fields, 0)) {
21923 log_packet_detailed(" got field 'city_id'");
21924
21925#ifdef FREECIV_JSON_CONNECTION
21926 field_addr.name = "city_id";
21927#endif /* FREECIV_JSON_CONNECTION */
21928
21929 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21931 }
21932 }
21933
21934 if (BV_ISSET(fields, 1)) {
21935 log_packet_detailed(" got field 'worklist'");
21936
21937#ifdef FREECIV_JSON_CONNECTION
21938 field_addr.name = "worklist";
21939#endif /* FREECIV_JSON_CONNECTION */
21940
21941 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
21943 }
21944 }
21945
21946 if (nullptr == old) {
21947 old = fc_malloc(sizeof(*old));
21949 *old = *real_packet;
21951 } else {
21952 *old = *real_packet;
21953 }
21954
21955#else /* FREECIV_DELTA_PROTOCOL */
21956#ifdef FREECIV_JSON_CONNECTION
21957 field_addr.name = "city_id";
21958#endif /* FREECIV_JSON_CONNECTION */
21959
21960 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21962 }
21963
21964#ifdef FREECIV_JSON_CONNECTION
21965 field_addr.name = "worklist";
21966#endif /* FREECIV_JSON_CONNECTION */
21967
21968 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
21970 }
21971#endif /* FREECIV_DELTA_PROTOCOL */
21972
21974#undef FREE_PACKET_STRUCT
21975}
21976
21977static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
21978{
21979 const struct packet_city_worklist *real_packet = packet;
21980 int e;
21982
21983 log_packet_detailed("packet_city_worklist_100: sending info about ()");
21984
21985#ifdef FREECIV_DELTA_PROTOCOL
21987 struct packet_city_worklist *old;
21988 bool differ;
21989 struct genhash **hash = pc->phs.sent + PACKET_CITY_WORKLIST;
21990
21991 if (nullptr == *hash) {
21993 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
21994 }
21995 BV_CLR_ALL(fields);
21996
21997 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21998 old = fc_malloc(sizeof(*old));
21999 /* temporary bitcopy just to insert correctly */
22000 *old = *real_packet;
22003 }
22004
22005 differ = (old->city_id != real_packet->city_id);
22006 if (differ) {
22007 BV_SET(fields, 0);
22008 }
22009
22010 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
22011 if (differ) {
22012 BV_SET(fields, 1);
22013 }
22014#endif /* FREECIV_DELTA_PROTOCOL */
22015
22016#ifdef FREECIV_JSON_CONNECTION
22017 struct plocation field_addr;
22018 {
22019 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22022 }
22023#endif /* FREECIV_JSON_CONNECTION */
22024
22025#ifdef FREECIV_DELTA_PROTOCOL
22026#ifdef FREECIV_JSON_CONNECTION
22027 field_addr.name = "fields";
22028#endif /* FREECIV_JSON_CONNECTION */
22029 e = 0;
22030 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22031 if (e) {
22032 log_packet_detailed("fields bitvector error detected");
22033 }
22034
22035 if (BV_ISSET(fields, 0)) {
22036 log_packet_detailed(" field 'city_id' has changed");
22037
22038#ifdef FREECIV_JSON_CONNECTION
22039 field_addr.name = "city_id";
22040#endif /* FREECIV_JSON_CONNECTION */
22041 e = 0;
22042
22043 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22044
22045 if (e) {
22046 log_packet_detailed("'city_id' field error detected");
22047 }
22048 }
22049
22050 if (BV_ISSET(fields, 1)) {
22051 log_packet_detailed(" field 'worklist' has changed");
22052
22053#ifdef FREECIV_JSON_CONNECTION
22054 field_addr.name = "worklist";
22055#endif /* FREECIV_JSON_CONNECTION */
22056 e = 0;
22057
22058 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22059
22060 if (e) {
22061 log_packet_detailed("'worklist' field error detected");
22062 }
22063 }
22064
22065 *old = *real_packet;
22066
22067#else /* FREECIV_DELTA_PROTOCOL */
22068#ifdef FREECIV_JSON_CONNECTION
22069 field_addr.name = "city_id";
22070#endif /* FREECIV_JSON_CONNECTION */
22071 e = 0;
22072
22073 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22074
22075 if (e) {
22076 log_packet_detailed("'city_id' field error detected");
22077 }
22078
22079#ifdef FREECIV_JSON_CONNECTION
22080 field_addr.name = "worklist";
22081#endif /* FREECIV_JSON_CONNECTION */
22082 e = 0;
22083
22084 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22085
22086 if (e) {
22087 log_packet_detailed("'worklist' field error detected");
22088 }
22089#endif /* FREECIV_DELTA_PROTOCOL */
22090
22092}
22093
22095{
22096 if (!pc->used) {
22097 log_error("WARNING: trying to send data to the closed connection %s",
22099 return -1;
22100 }
22101 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet != nullptr, -1,
22102 "Handler for PACKET_CITY_WORKLIST not installed");
22103 return pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet(pc, packet);
22104}
22105
22106int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
22107{
22108 struct packet_city_worklist packet, *real_packet = &packet;
22109
22111 worklist_copy(&real_packet->worklist, worklist);
22112
22114}
22115
22117{
22118 memset(packet, 0, sizeof(*packet));
22119}
22120
22121#define free_packet_city_make_specialist(_packet) (void) 0
22122#define destroy_packet_city_make_specialist free
22123
22124#ifdef FREECIV_DELTA_PROTOCOL
22125#define hash_packet_city_make_specialist_100 hash_const
22126#define cmp_packet_city_make_specialist_100 cmp_const
22128#endif /* FREECIV_DELTA_PROTOCOL */
22129
22131{
22132#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_specialist(_packet)
22134
22135#ifdef FREECIV_JSON_CONNECTION
22136 struct plocation field_addr;
22137 {
22138 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22141 }
22142#endif /* FREECIV_JSON_CONNECTION */
22143
22144 log_packet_detailed("packet_city_make_specialist_100: got info about ()");
22145
22146#ifdef FREECIV_DELTA_PROTOCOL
22149 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_SPECIALIST;
22150
22151 if (nullptr == *hash) {
22153 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22154 }
22155
22156 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22157 *real_packet = *old;
22158 } else {
22159 /* packet is already initialized empty */
22160 log_packet_detailed(" no old info");
22161 }
22162
22163#ifdef FREECIV_JSON_CONNECTION
22164 field_addr.name = "fields";
22165#endif /* FREECIV_JSON_CONNECTION */
22166 DIO_BV_GET(&din, &field_addr, fields);
22167
22168 if (BV_ISSET(fields, 0)) {
22169 log_packet_detailed(" got field 'city_id'");
22170
22171#ifdef FREECIV_JSON_CONNECTION
22172 field_addr.name = "city_id";
22173#endif /* FREECIV_JSON_CONNECTION */
22174
22175 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22177 }
22178 }
22179
22180 if (BV_ISSET(fields, 1)) {
22181 log_packet_detailed(" got field 'tile_id'");
22182
22183#ifdef FREECIV_JSON_CONNECTION
22184 field_addr.name = "tile_id";
22185#endif /* FREECIV_JSON_CONNECTION */
22186
22187 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22189 }
22190 }
22191
22192 if (nullptr == old) {
22193 old = fc_malloc(sizeof(*old));
22195 *old = *real_packet;
22197 } else {
22198 *old = *real_packet;
22199 }
22200
22201#else /* FREECIV_DELTA_PROTOCOL */
22202#ifdef FREECIV_JSON_CONNECTION
22203 field_addr.name = "city_id";
22204#endif /* FREECIV_JSON_CONNECTION */
22205
22206 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22208 }
22209
22210#ifdef FREECIV_JSON_CONNECTION
22211 field_addr.name = "tile_id";
22212#endif /* FREECIV_JSON_CONNECTION */
22213
22214 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22216 }
22217#endif /* FREECIV_DELTA_PROTOCOL */
22218
22220#undef FREE_PACKET_STRUCT
22221}
22222
22224{
22225 const struct packet_city_make_specialist *real_packet = packet;
22226 int e;
22228
22229 log_packet_detailed("packet_city_make_specialist_100: sending info about ()");
22230
22231#ifdef FREECIV_DELTA_PROTOCOL
22234 bool differ;
22235 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_SPECIALIST;
22236
22237 if (nullptr == *hash) {
22239 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22240 }
22241 BV_CLR_ALL(fields);
22242
22243 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22244 old = fc_malloc(sizeof(*old));
22245 /* temporary bitcopy just to insert correctly */
22246 *old = *real_packet;
22249 }
22250
22251 differ = (old->city_id != real_packet->city_id);
22252 if (differ) {
22253 BV_SET(fields, 0);
22254 }
22255
22256 differ = (old->tile_id != real_packet->tile_id);
22257 if (differ) {
22258 BV_SET(fields, 1);
22259 }
22260#endif /* FREECIV_DELTA_PROTOCOL */
22261
22262#ifdef FREECIV_JSON_CONNECTION
22263 struct plocation field_addr;
22264 {
22265 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22268 }
22269#endif /* FREECIV_JSON_CONNECTION */
22270
22271#ifdef FREECIV_DELTA_PROTOCOL
22272#ifdef FREECIV_JSON_CONNECTION
22273 field_addr.name = "fields";
22274#endif /* FREECIV_JSON_CONNECTION */
22275 e = 0;
22276 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22277 if (e) {
22278 log_packet_detailed("fields bitvector error detected");
22279 }
22280
22281 if (BV_ISSET(fields, 0)) {
22282 log_packet_detailed(" field 'city_id' has changed");
22283
22284#ifdef FREECIV_JSON_CONNECTION
22285 field_addr.name = "city_id";
22286#endif /* FREECIV_JSON_CONNECTION */
22287 e = 0;
22288
22289 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22290
22291 if (e) {
22292 log_packet_detailed("'city_id' field error detected");
22293 }
22294 }
22295
22296 if (BV_ISSET(fields, 1)) {
22297 log_packet_detailed(" field 'tile_id' has changed");
22298
22299#ifdef FREECIV_JSON_CONNECTION
22300 field_addr.name = "tile_id";
22301#endif /* FREECIV_JSON_CONNECTION */
22302 e = 0;
22303
22304 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22305
22306 if (e) {
22307 log_packet_detailed("'tile_id' field error detected");
22308 }
22309 }
22310
22311 *old = *real_packet;
22312
22313#else /* FREECIV_DELTA_PROTOCOL */
22314#ifdef FREECIV_JSON_CONNECTION
22315 field_addr.name = "city_id";
22316#endif /* FREECIV_JSON_CONNECTION */
22317 e = 0;
22318
22319 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22320
22321 if (e) {
22322 log_packet_detailed("'city_id' field error detected");
22323 }
22324
22325#ifdef FREECIV_JSON_CONNECTION
22326 field_addr.name = "tile_id";
22327#endif /* FREECIV_JSON_CONNECTION */
22328 e = 0;
22329
22330 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22331
22332 if (e) {
22333 log_packet_detailed("'tile_id' field error detected");
22334 }
22335#endif /* FREECIV_DELTA_PROTOCOL */
22336
22338}
22339
22341{
22342 if (!pc->used) {
22343 log_error("WARNING: trying to send data to the closed connection %s",
22345 return -1;
22346 }
22347 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet != nullptr, -1,
22348 "Handler for PACKET_CITY_MAKE_SPECIALIST not installed");
22349 return pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet(pc, packet);
22350}
22351
22352int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
22353{
22354 struct packet_city_make_specialist packet, *real_packet = &packet;
22355
22357 real_packet->tile_id = tile_id;
22358
22360}
22361
22363{
22364 memset(packet, 0, sizeof(*packet));
22365}
22366
22367#define free_packet_city_make_worker(_packet) (void) 0
22368#define destroy_packet_city_make_worker free
22369
22370#ifdef FREECIV_DELTA_PROTOCOL
22371#define hash_packet_city_make_worker_100 hash_const
22372#define cmp_packet_city_make_worker_100 cmp_const
22374#endif /* FREECIV_DELTA_PROTOCOL */
22375
22377{
22378#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_worker(_packet)
22380
22381#ifdef FREECIV_JSON_CONNECTION
22382 struct plocation field_addr;
22383 {
22384 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22387 }
22388#endif /* FREECIV_JSON_CONNECTION */
22389
22390 log_packet_detailed("packet_city_make_worker_100: got info about ()");
22391
22392#ifdef FREECIV_DELTA_PROTOCOL
22395 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_WORKER;
22396
22397 if (nullptr == *hash) {
22399 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22400 }
22401
22402 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22403 *real_packet = *old;
22404 } else {
22405 /* packet is already initialized empty */
22406 log_packet_detailed(" no old info");
22407 }
22408
22409#ifdef FREECIV_JSON_CONNECTION
22410 field_addr.name = "fields";
22411#endif /* FREECIV_JSON_CONNECTION */
22412 DIO_BV_GET(&din, &field_addr, fields);
22413
22414 if (BV_ISSET(fields, 0)) {
22415 log_packet_detailed(" got field 'city_id'");
22416
22417#ifdef FREECIV_JSON_CONNECTION
22418 field_addr.name = "city_id";
22419#endif /* FREECIV_JSON_CONNECTION */
22420
22421 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22423 }
22424 }
22425
22426 if (BV_ISSET(fields, 1)) {
22427 log_packet_detailed(" got field 'tile_id'");
22428
22429#ifdef FREECIV_JSON_CONNECTION
22430 field_addr.name = "tile_id";
22431#endif /* FREECIV_JSON_CONNECTION */
22432
22433 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22435 }
22436 }
22437
22438 if (nullptr == old) {
22439 old = fc_malloc(sizeof(*old));
22441 *old = *real_packet;
22443 } else {
22444 *old = *real_packet;
22445 }
22446
22447#else /* FREECIV_DELTA_PROTOCOL */
22448#ifdef FREECIV_JSON_CONNECTION
22449 field_addr.name = "city_id";
22450#endif /* FREECIV_JSON_CONNECTION */
22451
22452 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22454 }
22455
22456#ifdef FREECIV_JSON_CONNECTION
22457 field_addr.name = "tile_id";
22458#endif /* FREECIV_JSON_CONNECTION */
22459
22460 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22462 }
22463#endif /* FREECIV_DELTA_PROTOCOL */
22464
22466#undef FREE_PACKET_STRUCT
22467}
22468
22470{
22471 const struct packet_city_make_worker *real_packet = packet;
22472 int e;
22474
22475 log_packet_detailed("packet_city_make_worker_100: sending info about ()");
22476
22477#ifdef FREECIV_DELTA_PROTOCOL
22480 bool differ;
22481 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_WORKER;
22482
22483 if (nullptr == *hash) {
22485 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22486 }
22487 BV_CLR_ALL(fields);
22488
22489 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22490 old = fc_malloc(sizeof(*old));
22491 /* temporary bitcopy just to insert correctly */
22492 *old = *real_packet;
22495 }
22496
22497 differ = (old->city_id != real_packet->city_id);
22498 if (differ) {
22499 BV_SET(fields, 0);
22500 }
22501
22502 differ = (old->tile_id != real_packet->tile_id);
22503 if (differ) {
22504 BV_SET(fields, 1);
22505 }
22506#endif /* FREECIV_DELTA_PROTOCOL */
22507
22508#ifdef FREECIV_JSON_CONNECTION
22509 struct plocation field_addr;
22510 {
22511 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22514 }
22515#endif /* FREECIV_JSON_CONNECTION */
22516
22517#ifdef FREECIV_DELTA_PROTOCOL
22518#ifdef FREECIV_JSON_CONNECTION
22519 field_addr.name = "fields";
22520#endif /* FREECIV_JSON_CONNECTION */
22521 e = 0;
22522 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22523 if (e) {
22524 log_packet_detailed("fields bitvector error detected");
22525 }
22526
22527 if (BV_ISSET(fields, 0)) {
22528 log_packet_detailed(" field 'city_id' has changed");
22529
22530#ifdef FREECIV_JSON_CONNECTION
22531 field_addr.name = "city_id";
22532#endif /* FREECIV_JSON_CONNECTION */
22533 e = 0;
22534
22535 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22536
22537 if (e) {
22538 log_packet_detailed("'city_id' field error detected");
22539 }
22540 }
22541
22542 if (BV_ISSET(fields, 1)) {
22543 log_packet_detailed(" field 'tile_id' has changed");
22544
22545#ifdef FREECIV_JSON_CONNECTION
22546 field_addr.name = "tile_id";
22547#endif /* FREECIV_JSON_CONNECTION */
22548 e = 0;
22549
22550 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22551
22552 if (e) {
22553 log_packet_detailed("'tile_id' field error detected");
22554 }
22555 }
22556
22557 *old = *real_packet;
22558
22559#else /* FREECIV_DELTA_PROTOCOL */
22560#ifdef FREECIV_JSON_CONNECTION
22561 field_addr.name = "city_id";
22562#endif /* FREECIV_JSON_CONNECTION */
22563 e = 0;
22564
22565 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22566
22567 if (e) {
22568 log_packet_detailed("'city_id' field error detected");
22569 }
22570
22571#ifdef FREECIV_JSON_CONNECTION
22572 field_addr.name = "tile_id";
22573#endif /* FREECIV_JSON_CONNECTION */
22574 e = 0;
22575
22576 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22577
22578 if (e) {
22579 log_packet_detailed("'tile_id' field error detected");
22580 }
22581#endif /* FREECIV_DELTA_PROTOCOL */
22582
22584}
22585
22587{
22588 if (!pc->used) {
22589 log_error("WARNING: trying to send data to the closed connection %s",
22591 return -1;
22592 }
22593 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet != nullptr, -1,
22594 "Handler for PACKET_CITY_MAKE_WORKER not installed");
22595 return pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet(pc, packet);
22596}
22597
22598int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
22599{
22600 struct packet_city_make_worker packet, *real_packet = &packet;
22601
22603 real_packet->tile_id = tile_id;
22604
22606}
22607
22609{
22610 memset(packet, 0, sizeof(*packet));
22611}
22612
22613#define free_packet_city_change_specialist(_packet) (void) 0
22614#define destroy_packet_city_change_specialist free
22615
22616#ifdef FREECIV_DELTA_PROTOCOL
22617#define hash_packet_city_change_specialist_100 hash_const
22618#define cmp_packet_city_change_specialist_100 cmp_const
22620#endif /* FREECIV_DELTA_PROTOCOL */
22621
22623{
22624#define FREE_PACKET_STRUCT(_packet) free_packet_city_change_specialist(_packet)
22626
22627#ifdef FREECIV_JSON_CONNECTION
22628 struct plocation field_addr;
22629 {
22630 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22633 }
22634#endif /* FREECIV_JSON_CONNECTION */
22635
22636 log_packet_detailed("packet_city_change_specialist_100: got info about ()");
22637
22638#ifdef FREECIV_DELTA_PROTOCOL
22641 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE_SPECIALIST;
22642
22643 if (nullptr == *hash) {
22645 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22646 }
22647
22648 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22649 *real_packet = *old;
22650 } else {
22651 /* packet is already initialized empty */
22652 log_packet_detailed(" no old info");
22653 }
22654
22655#ifdef FREECIV_JSON_CONNECTION
22656 field_addr.name = "fields";
22657#endif /* FREECIV_JSON_CONNECTION */
22658 DIO_BV_GET(&din, &field_addr, fields);
22659
22660 if (BV_ISSET(fields, 0)) {
22661 log_packet_detailed(" got field 'city_id'");
22662
22663#ifdef FREECIV_JSON_CONNECTION
22664 field_addr.name = "city_id";
22665#endif /* FREECIV_JSON_CONNECTION */
22666
22667 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22669 }
22670 }
22671
22672 if (BV_ISSET(fields, 1)) {
22673 log_packet_detailed(" got field 'from'");
22674
22675#ifdef FREECIV_JSON_CONNECTION
22676 field_addr.name = "from";
22677#endif /* FREECIV_JSON_CONNECTION */
22678
22679 {
22680 int readin;
22681
22682 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22684 }
22685 real_packet->from = readin;
22686 }
22687 }
22688
22689 if (BV_ISSET(fields, 2)) {
22690 log_packet_detailed(" got field 'to'");
22691
22692#ifdef FREECIV_JSON_CONNECTION
22693 field_addr.name = "to";
22694#endif /* FREECIV_JSON_CONNECTION */
22695
22696 {
22697 int readin;
22698
22699 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22701 }
22702 real_packet->to = readin;
22703 }
22704 }
22705
22706 if (nullptr == old) {
22707 old = fc_malloc(sizeof(*old));
22709 *old = *real_packet;
22711 } else {
22712 *old = *real_packet;
22713 }
22714
22715#else /* FREECIV_DELTA_PROTOCOL */
22716#ifdef FREECIV_JSON_CONNECTION
22717 field_addr.name = "city_id";
22718#endif /* FREECIV_JSON_CONNECTION */
22719
22720 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22722 }
22723
22724#ifdef FREECIV_JSON_CONNECTION
22725 field_addr.name = "from";
22726#endif /* FREECIV_JSON_CONNECTION */
22727
22728 {
22729 int readin;
22730
22731 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22733 }
22734 real_packet->from = readin;
22735 }
22736
22737#ifdef FREECIV_JSON_CONNECTION
22738 field_addr.name = "to";
22739#endif /* FREECIV_JSON_CONNECTION */
22740
22741 {
22742 int readin;
22743
22744 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22746 }
22747 real_packet->to = readin;
22748 }
22749#endif /* FREECIV_DELTA_PROTOCOL */
22750
22752#undef FREE_PACKET_STRUCT
22753}
22754
22756{
22757 const struct packet_city_change_specialist *real_packet = packet;
22758 int e;
22760
22761 log_packet_detailed("packet_city_change_specialist_100: sending info about ()");
22762
22763#ifdef FREECIV_DELTA_PROTOCOL
22766 bool differ;
22767 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE_SPECIALIST;
22768
22769 if (nullptr == *hash) {
22771 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22772 }
22773 BV_CLR_ALL(fields);
22774
22775 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22776 old = fc_malloc(sizeof(*old));
22777 /* temporary bitcopy just to insert correctly */
22778 *old = *real_packet;
22781 }
22782
22783 differ = (old->city_id != real_packet->city_id);
22784 if (differ) {
22785 BV_SET(fields, 0);
22786 }
22787
22788 differ = (old->from != real_packet->from);
22789 if (differ) {
22790 BV_SET(fields, 1);
22791 }
22792
22793 differ = (old->to != real_packet->to);
22794 if (differ) {
22795 BV_SET(fields, 2);
22796 }
22797#endif /* FREECIV_DELTA_PROTOCOL */
22798
22799#ifdef FREECIV_JSON_CONNECTION
22800 struct plocation field_addr;
22801 {
22802 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22805 }
22806#endif /* FREECIV_JSON_CONNECTION */
22807
22808#ifdef FREECIV_DELTA_PROTOCOL
22809#ifdef FREECIV_JSON_CONNECTION
22810 field_addr.name = "fields";
22811#endif /* FREECIV_JSON_CONNECTION */
22812 e = 0;
22813 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22814 if (e) {
22815 log_packet_detailed("fields bitvector error detected");
22816 }
22817
22818 if (BV_ISSET(fields, 0)) {
22819 log_packet_detailed(" field 'city_id' has changed");
22820
22821#ifdef FREECIV_JSON_CONNECTION
22822 field_addr.name = "city_id";
22823#endif /* FREECIV_JSON_CONNECTION */
22824 e = 0;
22825
22826 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22827
22828 if (e) {
22829 log_packet_detailed("'city_id' field error detected");
22830 }
22831 }
22832
22833 if (BV_ISSET(fields, 1)) {
22834 log_packet_detailed(" field 'from' has changed");
22835
22836#ifdef FREECIV_JSON_CONNECTION
22837 field_addr.name = "from";
22838#endif /* FREECIV_JSON_CONNECTION */
22839 e = 0;
22840
22841 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22842
22843 if (e) {
22844 log_packet_detailed("'from' field error detected");
22845 }
22846 }
22847
22848 if (BV_ISSET(fields, 2)) {
22849 log_packet_detailed(" field 'to' has changed");
22850
22851#ifdef FREECIV_JSON_CONNECTION
22852 field_addr.name = "to";
22853#endif /* FREECIV_JSON_CONNECTION */
22854 e = 0;
22855
22856 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22857
22858 if (e) {
22859 log_packet_detailed("'to' field error detected");
22860 }
22861 }
22862
22863 *old = *real_packet;
22864
22865#else /* FREECIV_DELTA_PROTOCOL */
22866#ifdef FREECIV_JSON_CONNECTION
22867 field_addr.name = "city_id";
22868#endif /* FREECIV_JSON_CONNECTION */
22869 e = 0;
22870
22871 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22872
22873 if (e) {
22874 log_packet_detailed("'city_id' field error detected");
22875 }
22876
22877#ifdef FREECIV_JSON_CONNECTION
22878 field_addr.name = "from";
22879#endif /* FREECIV_JSON_CONNECTION */
22880 e = 0;
22881
22882 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22883
22884 if (e) {
22885 log_packet_detailed("'from' field error detected");
22886 }
22887
22888#ifdef FREECIV_JSON_CONNECTION
22889 field_addr.name = "to";
22890#endif /* FREECIV_JSON_CONNECTION */
22891 e = 0;
22892
22893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22894
22895 if (e) {
22896 log_packet_detailed("'to' field error detected");
22897 }
22898#endif /* FREECIV_DELTA_PROTOCOL */
22899
22901}
22902
22904{
22905 if (!pc->used) {
22906 log_error("WARNING: trying to send data to the closed connection %s",
22908 return -1;
22909 }
22910 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet != nullptr, -1,
22911 "Handler for PACKET_CITY_CHANGE_SPECIALIST not installed");
22912 return pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet(pc, packet);
22913}
22914
22916{
22917 struct packet_city_change_specialist packet, *real_packet = &packet;
22918
22920 real_packet->from = from;
22921 real_packet->to = to;
22922
22924}
22925
22926static inline void init_packet_city_rename(struct packet_city_rename *packet)
22927{
22928 memset(packet, 0, sizeof(*packet));
22929}
22930
22931#define free_packet_city_rename(_packet) (void) 0
22932#define destroy_packet_city_rename free
22933
22934#ifdef FREECIV_DELTA_PROTOCOL
22935#define hash_packet_city_rename_100 hash_const
22936#define cmp_packet_city_rename_100 cmp_const
22938#endif /* FREECIV_DELTA_PROTOCOL */
22939
22941{
22942#define FREE_PACKET_STRUCT(_packet) free_packet_city_rename(_packet)
22944
22945#ifdef FREECIV_JSON_CONNECTION
22946 struct plocation field_addr;
22947 {
22948 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22951 }
22952#endif /* FREECIV_JSON_CONNECTION */
22953
22954 log_packet_detailed("packet_city_rename_100: got info about ()");
22955
22956#ifdef FREECIV_DELTA_PROTOCOL
22958 struct packet_city_rename *old;
22959 struct genhash **hash = pc->phs.received + PACKET_CITY_RENAME;
22960
22961 if (nullptr == *hash) {
22963 nullptr, nullptr, nullptr, destroy_packet_city_rename);
22964 }
22965
22966 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22967 *real_packet = *old;
22968 } else {
22969 /* packet is already initialized empty */
22970 log_packet_detailed(" no old info");
22971 }
22972
22973#ifdef FREECIV_JSON_CONNECTION
22974 field_addr.name = "fields";
22975#endif /* FREECIV_JSON_CONNECTION */
22976 DIO_BV_GET(&din, &field_addr, fields);
22977
22978 if (BV_ISSET(fields, 0)) {
22979 log_packet_detailed(" got field 'city_id'");
22980
22981#ifdef FREECIV_JSON_CONNECTION
22982 field_addr.name = "city_id";
22983#endif /* FREECIV_JSON_CONNECTION */
22984
22985 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22987 }
22988 }
22989
22990 if (BV_ISSET(fields, 1)) {
22991 log_packet_detailed(" got field 'name'");
22992
22993#ifdef FREECIV_JSON_CONNECTION
22994 field_addr.name = "name";
22995#endif /* FREECIV_JSON_CONNECTION */
22996
22997 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
22999 }
23000 }
23001
23002 if (nullptr == old) {
23003 old = fc_malloc(sizeof(*old));
23005 *old = *real_packet;
23007 } else {
23008 *old = *real_packet;
23009 }
23010
23011#else /* FREECIV_DELTA_PROTOCOL */
23012#ifdef FREECIV_JSON_CONNECTION
23013 field_addr.name = "city_id";
23014#endif /* FREECIV_JSON_CONNECTION */
23015
23016 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23018 }
23019
23020#ifdef FREECIV_JSON_CONNECTION
23021 field_addr.name = "name";
23022#endif /* FREECIV_JSON_CONNECTION */
23023
23024 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23026 }
23027#endif /* FREECIV_DELTA_PROTOCOL */
23028
23030#undef FREE_PACKET_STRUCT
23031}
23032
23033static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
23034{
23035 const struct packet_city_rename *real_packet = packet;
23036 int e;
23038
23039 log_packet_detailed("packet_city_rename_100: sending info about ()");
23040
23041#ifdef FREECIV_DELTA_PROTOCOL
23043 struct packet_city_rename *old;
23044 bool differ;
23045 struct genhash **hash = pc->phs.sent + PACKET_CITY_RENAME;
23046
23047 if (nullptr == *hash) {
23049 nullptr, nullptr, nullptr, destroy_packet_city_rename);
23050 }
23051 BV_CLR_ALL(fields);
23052
23053 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23054 old = fc_malloc(sizeof(*old));
23055 /* temporary bitcopy just to insert correctly */
23056 *old = *real_packet;
23059 }
23060
23061 differ = (old->city_id != real_packet->city_id);
23062 if (differ) {
23063 BV_SET(fields, 0);
23064 }
23065
23066 differ = (strcmp(old->name, real_packet->name) != 0);
23067 if (differ) {
23068 BV_SET(fields, 1);
23069 }
23070#endif /* FREECIV_DELTA_PROTOCOL */
23071
23072#ifdef FREECIV_JSON_CONNECTION
23073 struct plocation field_addr;
23074 {
23075 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23078 }
23079#endif /* FREECIV_JSON_CONNECTION */
23080
23081#ifdef FREECIV_DELTA_PROTOCOL
23082#ifdef FREECIV_JSON_CONNECTION
23083 field_addr.name = "fields";
23084#endif /* FREECIV_JSON_CONNECTION */
23085 e = 0;
23086 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23087 if (e) {
23088 log_packet_detailed("fields bitvector error detected");
23089 }
23090
23091 if (BV_ISSET(fields, 0)) {
23092 log_packet_detailed(" field 'city_id' has changed");
23093
23094#ifdef FREECIV_JSON_CONNECTION
23095 field_addr.name = "city_id";
23096#endif /* FREECIV_JSON_CONNECTION */
23097 e = 0;
23098
23099 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23100
23101 if (e) {
23102 log_packet_detailed("'city_id' field error detected");
23103 }
23104 }
23105
23106 if (BV_ISSET(fields, 1)) {
23107 log_packet_detailed(" field 'name' has changed");
23108
23109#ifdef FREECIV_JSON_CONNECTION
23110 field_addr.name = "name";
23111#endif /* FREECIV_JSON_CONNECTION */
23112 e = 0;
23113
23114 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23115
23116 if (e) {
23117 log_packet_detailed("'name' field error detected");
23118 }
23119 }
23120
23121 *old = *real_packet;
23122
23123#else /* FREECIV_DELTA_PROTOCOL */
23124#ifdef FREECIV_JSON_CONNECTION
23125 field_addr.name = "city_id";
23126#endif /* FREECIV_JSON_CONNECTION */
23127 e = 0;
23128
23129 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23130
23131 if (e) {
23132 log_packet_detailed("'city_id' field error detected");
23133 }
23134
23135#ifdef FREECIV_JSON_CONNECTION
23136 field_addr.name = "name";
23137#endif /* FREECIV_JSON_CONNECTION */
23138 e = 0;
23139
23140 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23141
23142 if (e) {
23143 log_packet_detailed("'name' field error detected");
23144 }
23145#endif /* FREECIV_DELTA_PROTOCOL */
23146
23148}
23149
23151{
23152 if (!pc->used) {
23153 log_error("WARNING: trying to send data to the closed connection %s",
23155 return -1;
23156 }
23157 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RENAME].packet != nullptr, -1,
23158 "Handler for PACKET_CITY_RENAME not installed");
23159 return pc->phs.handlers->send[PACKET_CITY_RENAME].packet(pc, packet);
23160}
23161
23162int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
23163{
23164 struct packet_city_rename packet, *real_packet = &packet;
23165
23167 sz_strlcpy(real_packet->name, name);
23168
23170}
23171
23173{
23174 memset(packet, 0, sizeof(*packet));
23175}
23176
23177#define free_packet_city_options_req(_packet) (void) 0
23178#define destroy_packet_city_options_req free
23179
23180#ifdef FREECIV_DELTA_PROTOCOL
23181#define hash_packet_city_options_req_100 hash_const
23182#define cmp_packet_city_options_req_100 cmp_const
23184#endif /* FREECIV_DELTA_PROTOCOL */
23185
23187{
23188#define FREE_PACKET_STRUCT(_packet) free_packet_city_options_req(_packet)
23190
23191#ifdef FREECIV_JSON_CONNECTION
23192 struct plocation field_addr;
23193 {
23194 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23197 }
23198#endif /* FREECIV_JSON_CONNECTION */
23199
23200 log_packet_detailed("packet_city_options_req_100: got info about ()");
23201
23202#ifdef FREECIV_DELTA_PROTOCOL
23205 struct genhash **hash = pc->phs.received + PACKET_CITY_OPTIONS_REQ;
23206
23207 if (nullptr == *hash) {
23209 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23210 }
23211
23212 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23213 *real_packet = *old;
23214 } else {
23215 /* packet is already initialized empty */
23216 log_packet_detailed(" no old info");
23217 }
23218
23219#ifdef FREECIV_JSON_CONNECTION
23220 field_addr.name = "fields";
23221#endif /* FREECIV_JSON_CONNECTION */
23222 DIO_BV_GET(&din, &field_addr, fields);
23223
23224 if (BV_ISSET(fields, 0)) {
23225 log_packet_detailed(" got field 'city_id'");
23226
23227#ifdef FREECIV_JSON_CONNECTION
23228 field_addr.name = "city_id";
23229#endif /* FREECIV_JSON_CONNECTION */
23230
23231 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23233 }
23234 }
23235
23236 if (BV_ISSET(fields, 1)) {
23237 log_packet_detailed(" got field 'options'");
23238
23239#ifdef FREECIV_JSON_CONNECTION
23240 field_addr.name = "options";
23241#endif /* FREECIV_JSON_CONNECTION */
23242
23243 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23245 }
23246 }
23247
23248 if (BV_ISSET(fields, 2)) {
23249 log_packet_detailed(" got field 'wl_cb'");
23250
23251#ifdef FREECIV_JSON_CONNECTION
23252 field_addr.name = "wl_cb";
23253#endif /* FREECIV_JSON_CONNECTION */
23254
23255 {
23256 int readin;
23257
23258 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23260 }
23261 real_packet->wl_cb = readin;
23262 }
23263 }
23264
23265 if (nullptr == old) {
23266 old = fc_malloc(sizeof(*old));
23268 *old = *real_packet;
23270 } else {
23271 *old = *real_packet;
23272 }
23273
23274#else /* FREECIV_DELTA_PROTOCOL */
23275#ifdef FREECIV_JSON_CONNECTION
23276 field_addr.name = "city_id";
23277#endif /* FREECIV_JSON_CONNECTION */
23278
23279 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23281 }
23282
23283#ifdef FREECIV_JSON_CONNECTION
23284 field_addr.name = "options";
23285#endif /* FREECIV_JSON_CONNECTION */
23286
23287 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23289 }
23290
23291#ifdef FREECIV_JSON_CONNECTION
23292 field_addr.name = "wl_cb";
23293#endif /* FREECIV_JSON_CONNECTION */
23294
23295 {
23296 int readin;
23297
23298 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23300 }
23301 real_packet->wl_cb = readin;
23302 }
23303#endif /* FREECIV_DELTA_PROTOCOL */
23304
23306#undef FREE_PACKET_STRUCT
23307}
23308
23310{
23311 const struct packet_city_options_req *real_packet = packet;
23312 int e;
23314
23315 log_packet_detailed("packet_city_options_req_100: sending info about ()");
23316
23317#ifdef FREECIV_DELTA_PROTOCOL
23320 bool differ;
23321 struct genhash **hash = pc->phs.sent + PACKET_CITY_OPTIONS_REQ;
23322
23323 if (nullptr == *hash) {
23325 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23326 }
23327 BV_CLR_ALL(fields);
23328
23329 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23330 old = fc_malloc(sizeof(*old));
23331 /* temporary bitcopy just to insert correctly */
23332 *old = *real_packet;
23335 }
23336
23337 differ = (old->city_id != real_packet->city_id);
23338 if (differ) {
23339 BV_SET(fields, 0);
23340 }
23341
23342 differ = !BV_ARE_EQUAL(old->options, real_packet->options);
23343 if (differ) {
23344 BV_SET(fields, 1);
23345 }
23346
23347 differ = (old->wl_cb != real_packet->wl_cb);
23348 if (differ) {
23349 BV_SET(fields, 2);
23350 }
23351#endif /* FREECIV_DELTA_PROTOCOL */
23352
23353#ifdef FREECIV_JSON_CONNECTION
23354 struct plocation field_addr;
23355 {
23356 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23359 }
23360#endif /* FREECIV_JSON_CONNECTION */
23361
23362#ifdef FREECIV_DELTA_PROTOCOL
23363#ifdef FREECIV_JSON_CONNECTION
23364 field_addr.name = "fields";
23365#endif /* FREECIV_JSON_CONNECTION */
23366 e = 0;
23367 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23368 if (e) {
23369 log_packet_detailed("fields bitvector error detected");
23370 }
23371
23372 if (BV_ISSET(fields, 0)) {
23373 log_packet_detailed(" field 'city_id' has changed");
23374
23375#ifdef FREECIV_JSON_CONNECTION
23376 field_addr.name = "city_id";
23377#endif /* FREECIV_JSON_CONNECTION */
23378 e = 0;
23379
23380 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23381
23382 if (e) {
23383 log_packet_detailed("'city_id' field error detected");
23384 }
23385 }
23386
23387 if (BV_ISSET(fields, 1)) {
23388 log_packet_detailed(" field 'options' has changed");
23389
23390#ifdef FREECIV_JSON_CONNECTION
23391 field_addr.name = "options";
23392#endif /* FREECIV_JSON_CONNECTION */
23393 e = 0;
23394
23395 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23396
23397 if (e) {
23398 log_packet_detailed("'options' field error detected");
23399 }
23400 }
23401
23402 if (BV_ISSET(fields, 2)) {
23403 log_packet_detailed(" field 'wl_cb' has changed");
23404
23405#ifdef FREECIV_JSON_CONNECTION
23406 field_addr.name = "wl_cb";
23407#endif /* FREECIV_JSON_CONNECTION */
23408 e = 0;
23409
23410 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23411
23412 if (e) {
23413 log_packet_detailed("'wl_cb' field error detected");
23414 }
23415 }
23416
23417 *old = *real_packet;
23418
23419#else /* FREECIV_DELTA_PROTOCOL */
23420#ifdef FREECIV_JSON_CONNECTION
23421 field_addr.name = "city_id";
23422#endif /* FREECIV_JSON_CONNECTION */
23423 e = 0;
23424
23425 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23426
23427 if (e) {
23428 log_packet_detailed("'city_id' field error detected");
23429 }
23430
23431#ifdef FREECIV_JSON_CONNECTION
23432 field_addr.name = "options";
23433#endif /* FREECIV_JSON_CONNECTION */
23434 e = 0;
23435
23436 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23437
23438 if (e) {
23439 log_packet_detailed("'options' field error detected");
23440 }
23441
23442#ifdef FREECIV_JSON_CONNECTION
23443 field_addr.name = "wl_cb";
23444#endif /* FREECIV_JSON_CONNECTION */
23445 e = 0;
23446
23447 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23448
23449 if (e) {
23450 log_packet_detailed("'wl_cb' field error detected");
23451 }
23452#endif /* FREECIV_DELTA_PROTOCOL */
23453
23455}
23456
23458{
23459 if (!pc->used) {
23460 log_error("WARNING: trying to send data to the closed connection %s",
23462 return -1;
23463 }
23464 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet != nullptr, -1,
23465 "Handler for PACKET_CITY_OPTIONS_REQ not installed");
23466 return pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet(pc, packet);
23467}
23468
23470{
23471 struct packet_city_options_req packet, *real_packet = &packet;
23472
23474 real_packet->options = options;
23475 real_packet->wl_cb = wl_cb;
23476
23478}
23479
23480static inline void init_packet_city_refresh(struct packet_city_refresh *packet)
23481{
23482 memset(packet, 0, sizeof(*packet));
23483}
23484
23485#define free_packet_city_refresh(_packet) (void) 0
23486#define destroy_packet_city_refresh free
23487
23488#ifdef FREECIV_DELTA_PROTOCOL
23489#define hash_packet_city_refresh_100 hash_const
23490#define cmp_packet_city_refresh_100 cmp_const
23492#endif /* FREECIV_DELTA_PROTOCOL */
23493
23495{
23496#define FREE_PACKET_STRUCT(_packet) free_packet_city_refresh(_packet)
23498
23499#ifdef FREECIV_JSON_CONNECTION
23500 struct plocation field_addr;
23501 {
23502 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23505 }
23506#endif /* FREECIV_JSON_CONNECTION */
23507
23508 log_packet_detailed("packet_city_refresh_100: got info about ()");
23509
23510#ifdef FREECIV_DELTA_PROTOCOL
23512 struct packet_city_refresh *old;
23513 struct genhash **hash = pc->phs.received + PACKET_CITY_REFRESH;
23514
23515 if (nullptr == *hash) {
23517 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23518 }
23519
23520 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23521 *real_packet = *old;
23522 } else {
23523 /* packet is already initialized empty */
23524 log_packet_detailed(" no old info");
23525 }
23526
23527#ifdef FREECIV_JSON_CONNECTION
23528 field_addr.name = "fields";
23529#endif /* FREECIV_JSON_CONNECTION */
23530 DIO_BV_GET(&din, &field_addr, fields);
23531
23532 if (BV_ISSET(fields, 0)) {
23533 log_packet_detailed(" got field 'city_id'");
23534
23535#ifdef FREECIV_JSON_CONNECTION
23536 field_addr.name = "city_id";
23537#endif /* FREECIV_JSON_CONNECTION */
23538
23539 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23541 }
23542 }
23543
23544 if (nullptr == old) {
23545 old = fc_malloc(sizeof(*old));
23547 *old = *real_packet;
23549 } else {
23550 *old = *real_packet;
23551 }
23552
23553#else /* FREECIV_DELTA_PROTOCOL */
23554#ifdef FREECIV_JSON_CONNECTION
23555 field_addr.name = "city_id";
23556#endif /* FREECIV_JSON_CONNECTION */
23557
23558 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23560 }
23561#endif /* FREECIV_DELTA_PROTOCOL */
23562
23564#undef FREE_PACKET_STRUCT
23565}
23566
23567static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
23568{
23569 const struct packet_city_refresh *real_packet = packet;
23570 int e;
23572
23573 log_packet_detailed("packet_city_refresh_100: sending info about ()");
23574
23575#ifdef FREECIV_DELTA_PROTOCOL
23577 struct packet_city_refresh *old;
23578 bool differ;
23579 struct genhash **hash = pc->phs.sent + PACKET_CITY_REFRESH;
23580
23581 if (nullptr == *hash) {
23583 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23584 }
23585 BV_CLR_ALL(fields);
23586
23587 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23588 old = fc_malloc(sizeof(*old));
23589 /* temporary bitcopy just to insert correctly */
23590 *old = *real_packet;
23593 }
23594
23595 differ = (old->city_id != real_packet->city_id);
23596 if (differ) {
23597 BV_SET(fields, 0);
23598 }
23599#endif /* FREECIV_DELTA_PROTOCOL */
23600
23601#ifdef FREECIV_JSON_CONNECTION
23602 struct plocation field_addr;
23603 {
23604 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23607 }
23608#endif /* FREECIV_JSON_CONNECTION */
23609
23610#ifdef FREECIV_DELTA_PROTOCOL
23611#ifdef FREECIV_JSON_CONNECTION
23612 field_addr.name = "fields";
23613#endif /* FREECIV_JSON_CONNECTION */
23614 e = 0;
23615 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23616 if (e) {
23617 log_packet_detailed("fields bitvector error detected");
23618 }
23619
23620 if (BV_ISSET(fields, 0)) {
23621 log_packet_detailed(" field 'city_id' has changed");
23622
23623#ifdef FREECIV_JSON_CONNECTION
23624 field_addr.name = "city_id";
23625#endif /* FREECIV_JSON_CONNECTION */
23626 e = 0;
23627
23628 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23629
23630 if (e) {
23631 log_packet_detailed("'city_id' field error detected");
23632 }
23633 }
23634
23635 *old = *real_packet;
23636
23637#else /* FREECIV_DELTA_PROTOCOL */
23638#ifdef FREECIV_JSON_CONNECTION
23639 field_addr.name = "city_id";
23640#endif /* FREECIV_JSON_CONNECTION */
23641 e = 0;
23642
23643 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23644
23645 if (e) {
23646 log_packet_detailed("'city_id' field error detected");
23647 }
23648#endif /* FREECIV_DELTA_PROTOCOL */
23649
23651}
23652
23654{
23655 if (!pc->used) {
23656 log_error("WARNING: trying to send data to the closed connection %s",
23658 return -1;
23659 }
23660 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REFRESH].packet != nullptr, -1,
23661 "Handler for PACKET_CITY_REFRESH not installed");
23662 return pc->phs.handlers->send[PACKET_CITY_REFRESH].packet(pc, packet);
23663}
23664
23665int dsend_packet_city_refresh(struct connection *pc, int city_id)
23666{
23667 struct packet_city_refresh packet, *real_packet = &packet;
23668
23670
23672}
23673
23675{
23676 memset(packet, 0, sizeof(*packet));
23677}
23678
23679#define free_packet_city_name_suggestion_req(_packet) (void) 0
23680#define destroy_packet_city_name_suggestion_req free
23681
23682#ifdef FREECIV_DELTA_PROTOCOL
23683#define hash_packet_city_name_suggestion_req_100 hash_const
23684#define cmp_packet_city_name_suggestion_req_100 cmp_const
23686#endif /* FREECIV_DELTA_PROTOCOL */
23687
23689{
23690#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_req(_packet)
23692
23693#ifdef FREECIV_JSON_CONNECTION
23694 struct plocation field_addr;
23695 {
23696 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23699 }
23700#endif /* FREECIV_JSON_CONNECTION */
23701
23702 log_packet_detailed("packet_city_name_suggestion_req_100: got info about ()");
23703
23704#ifdef FREECIV_DELTA_PROTOCOL
23707 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_REQ;
23708
23709 if (nullptr == *hash) {
23711 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23712 }
23713
23714 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23715 *real_packet = *old;
23716 } else {
23717 /* packet is already initialized empty */
23718 log_packet_detailed(" no old info");
23719 }
23720
23721#ifdef FREECIV_JSON_CONNECTION
23722 field_addr.name = "fields";
23723#endif /* FREECIV_JSON_CONNECTION */
23724 DIO_BV_GET(&din, &field_addr, fields);
23725
23726 if (BV_ISSET(fields, 0)) {
23727 log_packet_detailed(" got field 'unit_id'");
23728
23729#ifdef FREECIV_JSON_CONNECTION
23730 field_addr.name = "unit_id";
23731#endif /* FREECIV_JSON_CONNECTION */
23732
23733 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23735 }
23736 }
23737
23738 if (nullptr == old) {
23739 old = fc_malloc(sizeof(*old));
23741 *old = *real_packet;
23743 } else {
23744 *old = *real_packet;
23745 }
23746
23747#else /* FREECIV_DELTA_PROTOCOL */
23748#ifdef FREECIV_JSON_CONNECTION
23749 field_addr.name = "unit_id";
23750#endif /* FREECIV_JSON_CONNECTION */
23751
23752 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23754 }
23755#endif /* FREECIV_DELTA_PROTOCOL */
23756
23758#undef FREE_PACKET_STRUCT
23759}
23760
23762{
23763 const struct packet_city_name_suggestion_req *real_packet = packet;
23764 int e;
23766
23767 log_packet_detailed("packet_city_name_suggestion_req_100: sending info about ()");
23768
23769#ifdef FREECIV_DELTA_PROTOCOL
23772 bool differ;
23773 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_REQ;
23774
23775 if (nullptr == *hash) {
23777 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23778 }
23779 BV_CLR_ALL(fields);
23780
23781 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23782 old = fc_malloc(sizeof(*old));
23783 /* temporary bitcopy just to insert correctly */
23784 *old = *real_packet;
23787 }
23788
23789 differ = (old->unit_id != real_packet->unit_id);
23790 if (differ) {
23791 BV_SET(fields, 0);
23792 }
23793#endif /* FREECIV_DELTA_PROTOCOL */
23794
23795#ifdef FREECIV_JSON_CONNECTION
23796 struct plocation field_addr;
23797 {
23798 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23801 }
23802#endif /* FREECIV_JSON_CONNECTION */
23803
23804#ifdef FREECIV_DELTA_PROTOCOL
23805#ifdef FREECIV_JSON_CONNECTION
23806 field_addr.name = "fields";
23807#endif /* FREECIV_JSON_CONNECTION */
23808 e = 0;
23809 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23810 if (e) {
23811 log_packet_detailed("fields bitvector error detected");
23812 }
23813
23814 if (BV_ISSET(fields, 0)) {
23815 log_packet_detailed(" field 'unit_id' has changed");
23816
23817#ifdef FREECIV_JSON_CONNECTION
23818 field_addr.name = "unit_id";
23819#endif /* FREECIV_JSON_CONNECTION */
23820 e = 0;
23821
23822 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23823
23824 if (e) {
23825 log_packet_detailed("'unit_id' field error detected");
23826 }
23827 }
23828
23829 *old = *real_packet;
23830
23831#else /* FREECIV_DELTA_PROTOCOL */
23832#ifdef FREECIV_JSON_CONNECTION
23833 field_addr.name = "unit_id";
23834#endif /* FREECIV_JSON_CONNECTION */
23835 e = 0;
23836
23837 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23838
23839 if (e) {
23840 log_packet_detailed("'unit_id' field error detected");
23841 }
23842#endif /* FREECIV_DELTA_PROTOCOL */
23843
23845}
23846
23848{
23849 if (!pc->used) {
23850 log_error("WARNING: trying to send data to the closed connection %s",
23852 return -1;
23853 }
23854 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet != nullptr, -1,
23855 "Handler for PACKET_CITY_NAME_SUGGESTION_REQ not installed");
23856 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet(pc, packet);
23857}
23858
23860{
23861 struct packet_city_name_suggestion_req packet, *real_packet = &packet;
23862
23864
23866}
23867
23869{
23870 memset(packet, 0, sizeof(*packet));
23871}
23872
23873#define free_packet_city_name_suggestion_info(_packet) (void) 0
23874#define destroy_packet_city_name_suggestion_info free
23875
23876#ifdef FREECIV_DELTA_PROTOCOL
23877#define hash_packet_city_name_suggestion_info_100 hash_const
23878#define cmp_packet_city_name_suggestion_info_100 cmp_const
23880#endif /* FREECIV_DELTA_PROTOCOL */
23881
23883{
23884#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_info(_packet)
23886
23887#ifdef FREECIV_JSON_CONNECTION
23888 struct plocation field_addr;
23889 {
23890 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23893 }
23894#endif /* FREECIV_JSON_CONNECTION */
23895
23896 log_packet_detailed("packet_city_name_suggestion_info_100: got info about ()");
23897
23898#ifdef FREECIV_DELTA_PROTOCOL
23901 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_INFO;
23902
23903 if (nullptr == *hash) {
23905 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
23906 }
23907
23908 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23909 *real_packet = *old;
23910 } else {
23911 /* packet is already initialized empty */
23912 log_packet_detailed(" no old info");
23913 }
23914
23915#ifdef FREECIV_JSON_CONNECTION
23916 field_addr.name = "fields";
23917#endif /* FREECIV_JSON_CONNECTION */
23918 DIO_BV_GET(&din, &field_addr, fields);
23919
23920 if (BV_ISSET(fields, 0)) {
23921 log_packet_detailed(" got field 'unit_id'");
23922
23923#ifdef FREECIV_JSON_CONNECTION
23924 field_addr.name = "unit_id";
23925#endif /* FREECIV_JSON_CONNECTION */
23926
23927 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23929 }
23930 }
23931
23932 if (BV_ISSET(fields, 1)) {
23933 log_packet_detailed(" got field 'name'");
23934
23935#ifdef FREECIV_JSON_CONNECTION
23936 field_addr.name = "name";
23937#endif /* FREECIV_JSON_CONNECTION */
23938
23939 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23941 }
23942 }
23943
23944 if (nullptr == old) {
23945 old = fc_malloc(sizeof(*old));
23947 *old = *real_packet;
23949 } else {
23950 *old = *real_packet;
23951 }
23952
23953#else /* FREECIV_DELTA_PROTOCOL */
23954#ifdef FREECIV_JSON_CONNECTION
23955 field_addr.name = "unit_id";
23956#endif /* FREECIV_JSON_CONNECTION */
23957
23958 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23960 }
23961
23962#ifdef FREECIV_JSON_CONNECTION
23963 field_addr.name = "name";
23964#endif /* FREECIV_JSON_CONNECTION */
23965
23966 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23968 }
23969#endif /* FREECIV_DELTA_PROTOCOL */
23970
23972#undef FREE_PACKET_STRUCT
23973}
23974
23976{
23977 const struct packet_city_name_suggestion_info *real_packet = packet;
23978 int e;
23980
23981 log_packet_detailed("packet_city_name_suggestion_info_100: sending info about ()");
23982
23983#ifdef FREECIV_DELTA_PROTOCOL
23986 bool differ;
23987 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_INFO;
23988
23989 if (nullptr == *hash) {
23991 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
23992 }
23993 BV_CLR_ALL(fields);
23994
23995 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23996 old = fc_malloc(sizeof(*old));
23997 /* temporary bitcopy just to insert correctly */
23998 *old = *real_packet;
24001 }
24002
24003 differ = (old->unit_id != real_packet->unit_id);
24004 if (differ) {
24005 BV_SET(fields, 0);
24006 }
24007
24008 differ = (strcmp(old->name, real_packet->name) != 0);
24009 if (differ) {
24010 BV_SET(fields, 1);
24011 }
24012#endif /* FREECIV_DELTA_PROTOCOL */
24013
24014#ifdef FREECIV_JSON_CONNECTION
24015 struct plocation field_addr;
24016 {
24017 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24020 }
24021#endif /* FREECIV_JSON_CONNECTION */
24022
24023#ifdef FREECIV_DELTA_PROTOCOL
24024#ifdef FREECIV_JSON_CONNECTION
24025 field_addr.name = "fields";
24026#endif /* FREECIV_JSON_CONNECTION */
24027 e = 0;
24028 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24029 if (e) {
24030 log_packet_detailed("fields bitvector error detected");
24031 }
24032
24033 if (BV_ISSET(fields, 0)) {
24034 log_packet_detailed(" field 'unit_id' has changed");
24035
24036#ifdef FREECIV_JSON_CONNECTION
24037 field_addr.name = "unit_id";
24038#endif /* FREECIV_JSON_CONNECTION */
24039 e = 0;
24040
24041 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24042
24043 if (e) {
24044 log_packet_detailed("'unit_id' field error detected");
24045 }
24046 }
24047
24048 if (BV_ISSET(fields, 1)) {
24049 log_packet_detailed(" field 'name' has changed");
24050
24051#ifdef FREECIV_JSON_CONNECTION
24052 field_addr.name = "name";
24053#endif /* FREECIV_JSON_CONNECTION */
24054 e = 0;
24055
24056 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24057
24058 if (e) {
24059 log_packet_detailed("'name' field error detected");
24060 }
24061 }
24062
24063 *old = *real_packet;
24064
24065#else /* FREECIV_DELTA_PROTOCOL */
24066#ifdef FREECIV_JSON_CONNECTION
24067 field_addr.name = "unit_id";
24068#endif /* FREECIV_JSON_CONNECTION */
24069 e = 0;
24070
24071 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24072
24073 if (e) {
24074 log_packet_detailed("'unit_id' field error detected");
24075 }
24076
24077#ifdef FREECIV_JSON_CONNECTION
24078 field_addr.name = "name";
24079#endif /* FREECIV_JSON_CONNECTION */
24080 e = 0;
24081
24082 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24083
24084 if (e) {
24085 log_packet_detailed("'name' field error detected");
24086 }
24087#endif /* FREECIV_DELTA_PROTOCOL */
24088
24090}
24091
24093{
24094 if (!pc->used) {
24095 log_error("WARNING: trying to send data to the closed connection %s",
24097 return -1;
24098 }
24099 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet != nullptr, -1,
24100 "Handler for PACKET_CITY_NAME_SUGGESTION_INFO not installed");
24101 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet(pc, packet);
24102}
24103
24110
24111int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
24112{
24113 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24114
24116 sz_strlcpy(real_packet->name, name);
24117
24119}
24120
24122{
24123 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24124
24126 sz_strlcpy(real_packet->name, name);
24127
24129}
24130
24132{
24133 memset(packet, 0, sizeof(*packet));
24134}
24135
24136#define free_packet_city_sabotage_list(_packet) (void) 0
24137#define destroy_packet_city_sabotage_list free
24138
24139#ifdef FREECIV_DELTA_PROTOCOL
24140#define hash_packet_city_sabotage_list_100 hash_const
24141#define cmp_packet_city_sabotage_list_100 cmp_const
24143#endif /* FREECIV_DELTA_PROTOCOL */
24144
24146{
24147#define FREE_PACKET_STRUCT(_packet) free_packet_city_sabotage_list(_packet)
24149
24150#ifdef FREECIV_JSON_CONNECTION
24151 struct plocation field_addr;
24152 {
24153 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24156 }
24157#endif /* FREECIV_JSON_CONNECTION */
24158
24159 log_packet_detailed("packet_city_sabotage_list_100: got info about ()");
24160
24161#ifdef FREECIV_DELTA_PROTOCOL
24164 struct genhash **hash = pc->phs.received + PACKET_CITY_SABOTAGE_LIST;
24165
24166 if (nullptr == *hash) {
24168 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24169 }
24170
24171 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24172 *real_packet = *old;
24173 } else {
24174 /* packet is already initialized empty */
24175 log_packet_detailed(" no old info");
24176 }
24177
24178#ifdef FREECIV_JSON_CONNECTION
24179 field_addr.name = "fields";
24180#endif /* FREECIV_JSON_CONNECTION */
24181 DIO_BV_GET(&din, &field_addr, fields);
24182
24183 if (BV_ISSET(fields, 0)) {
24184 log_packet_detailed(" got field 'actor_id'");
24185
24186#ifdef FREECIV_JSON_CONNECTION
24187 field_addr.name = "actor_id";
24188#endif /* FREECIV_JSON_CONNECTION */
24189
24190 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24192 }
24193 }
24194
24195 if (BV_ISSET(fields, 1)) {
24196 log_packet_detailed(" got field 'city_id'");
24197
24198#ifdef FREECIV_JSON_CONNECTION
24199 field_addr.name = "city_id";
24200#endif /* FREECIV_JSON_CONNECTION */
24201
24202 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24204 }
24205 }
24206
24207 if (BV_ISSET(fields, 2)) {
24208 log_packet_detailed(" got field 'improvements'");
24209
24210#ifdef FREECIV_JSON_CONNECTION
24211 field_addr.name = "improvements";
24212#endif /* FREECIV_JSON_CONNECTION */
24213
24214 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24215 RECEIVE_PACKET_FIELD_ERROR(improvements);
24216 }
24217 }
24218
24219 if (BV_ISSET(fields, 3)) {
24220 log_packet_detailed(" got field 'act_id'");
24221
24222#ifdef FREECIV_JSON_CONNECTION
24223 field_addr.name = "act_id";
24224#endif /* FREECIV_JSON_CONNECTION */
24225
24226 {
24227 int readin;
24228
24229 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24231 }
24232 real_packet->act_id = readin;
24233 }
24234 }
24235
24236 if (BV_ISSET(fields, 4)) {
24237 log_packet_detailed(" got field 'request_kind'");
24238
24239#ifdef FREECIV_JSON_CONNECTION
24240 field_addr.name = "request_kind";
24241#endif /* FREECIV_JSON_CONNECTION */
24242
24243 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24244 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24245 }
24246 }
24247
24248 if (nullptr == old) {
24249 old = fc_malloc(sizeof(*old));
24251 *old = *real_packet;
24253 } else {
24254 *old = *real_packet;
24255 }
24256
24257#else /* FREECIV_DELTA_PROTOCOL */
24258#ifdef FREECIV_JSON_CONNECTION
24259 field_addr.name = "actor_id";
24260#endif /* FREECIV_JSON_CONNECTION */
24261
24262 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24264 }
24265
24266#ifdef FREECIV_JSON_CONNECTION
24267 field_addr.name = "city_id";
24268#endif /* FREECIV_JSON_CONNECTION */
24269
24270 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24272 }
24273
24274#ifdef FREECIV_JSON_CONNECTION
24275 field_addr.name = "improvements";
24276#endif /* FREECIV_JSON_CONNECTION */
24277
24278 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24279 RECEIVE_PACKET_FIELD_ERROR(improvements);
24280 }
24281
24282#ifdef FREECIV_JSON_CONNECTION
24283 field_addr.name = "act_id";
24284#endif /* FREECIV_JSON_CONNECTION */
24285
24286 {
24287 int readin;
24288
24289 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24291 }
24292 real_packet->act_id = readin;
24293 }
24294
24295#ifdef FREECIV_JSON_CONNECTION
24296 field_addr.name = "request_kind";
24297#endif /* FREECIV_JSON_CONNECTION */
24298
24299 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24300 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24301 }
24302#endif /* FREECIV_DELTA_PROTOCOL */
24303
24305#undef FREE_PACKET_STRUCT
24306}
24307
24309{
24310 const struct packet_city_sabotage_list *real_packet = packet;
24311 int e;
24313
24314 log_packet_detailed("packet_city_sabotage_list_100: sending info about ()");
24315
24316#ifdef FREECIV_DELTA_PROTOCOL
24319 bool differ;
24320 struct genhash **hash = pc->phs.sent + PACKET_CITY_SABOTAGE_LIST;
24321
24322 if (nullptr == *hash) {
24324 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24325 }
24326 BV_CLR_ALL(fields);
24327
24328 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24329 old = fc_malloc(sizeof(*old));
24330 /* temporary bitcopy just to insert correctly */
24331 *old = *real_packet;
24334 }
24335
24336 differ = (old->actor_id != real_packet->actor_id);
24337 if (differ) {
24338 BV_SET(fields, 0);
24339 }
24340
24341 differ = (old->city_id != real_packet->city_id);
24342 if (differ) {
24343 BV_SET(fields, 1);
24344 }
24345
24346 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
24347 if (differ) {
24348 BV_SET(fields, 2);
24349 }
24350
24351 differ = (old->act_id != real_packet->act_id);
24352 if (differ) {
24353 BV_SET(fields, 3);
24354 }
24355
24356 differ = (old->request_kind != real_packet->request_kind);
24357 if (differ) {
24358 BV_SET(fields, 4);
24359 }
24360#endif /* FREECIV_DELTA_PROTOCOL */
24361
24362#ifdef FREECIV_JSON_CONNECTION
24363 struct plocation field_addr;
24364 {
24365 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24368 }
24369#endif /* FREECIV_JSON_CONNECTION */
24370
24371#ifdef FREECIV_DELTA_PROTOCOL
24372#ifdef FREECIV_JSON_CONNECTION
24373 field_addr.name = "fields";
24374#endif /* FREECIV_JSON_CONNECTION */
24375 e = 0;
24376 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24377 if (e) {
24378 log_packet_detailed("fields bitvector error detected");
24379 }
24380
24381 if (BV_ISSET(fields, 0)) {
24382 log_packet_detailed(" field 'actor_id' has changed");
24383
24384#ifdef FREECIV_JSON_CONNECTION
24385 field_addr.name = "actor_id";
24386#endif /* FREECIV_JSON_CONNECTION */
24387 e = 0;
24388
24389 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24390
24391 if (e) {
24392 log_packet_detailed("'actor_id' field error detected");
24393 }
24394 }
24395
24396 if (BV_ISSET(fields, 1)) {
24397 log_packet_detailed(" field 'city_id' has changed");
24398
24399#ifdef FREECIV_JSON_CONNECTION
24400 field_addr.name = "city_id";
24401#endif /* FREECIV_JSON_CONNECTION */
24402 e = 0;
24403
24404 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24405
24406 if (e) {
24407 log_packet_detailed("'city_id' field error detected");
24408 }
24409 }
24410
24411 if (BV_ISSET(fields, 2)) {
24412 log_packet_detailed(" field 'improvements' has changed");
24413
24414#ifdef FREECIV_JSON_CONNECTION
24415 field_addr.name = "improvements";
24416#endif /* FREECIV_JSON_CONNECTION */
24417 e = 0;
24418
24419 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24420
24421 if (e) {
24422 log_packet_detailed("'improvements' field error detected");
24423 }
24424 }
24425
24426 if (BV_ISSET(fields, 3)) {
24427 log_packet_detailed(" field 'act_id' has changed");
24428
24429#ifdef FREECIV_JSON_CONNECTION
24430 field_addr.name = "act_id";
24431#endif /* FREECIV_JSON_CONNECTION */
24432 e = 0;
24433
24434 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24435
24436 if (e) {
24437 log_packet_detailed("'act_id' field error detected");
24438 }
24439 }
24440
24441 if (BV_ISSET(fields, 4)) {
24442 log_packet_detailed(" field 'request_kind' has changed");
24443
24444#ifdef FREECIV_JSON_CONNECTION
24445 field_addr.name = "request_kind";
24446#endif /* FREECIV_JSON_CONNECTION */
24447 e = 0;
24448
24449 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24450
24451 if (e) {
24452 log_packet_detailed("'request_kind' field error detected");
24453 }
24454 }
24455
24456 *old = *real_packet;
24457
24458#else /* FREECIV_DELTA_PROTOCOL */
24459#ifdef FREECIV_JSON_CONNECTION
24460 field_addr.name = "actor_id";
24461#endif /* FREECIV_JSON_CONNECTION */
24462 e = 0;
24463
24464 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24465
24466 if (e) {
24467 log_packet_detailed("'actor_id' field error detected");
24468 }
24469
24470#ifdef FREECIV_JSON_CONNECTION
24471 field_addr.name = "city_id";
24472#endif /* FREECIV_JSON_CONNECTION */
24473 e = 0;
24474
24475 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24476
24477 if (e) {
24478 log_packet_detailed("'city_id' field error detected");
24479 }
24480
24481#ifdef FREECIV_JSON_CONNECTION
24482 field_addr.name = "improvements";
24483#endif /* FREECIV_JSON_CONNECTION */
24484 e = 0;
24485
24486 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24487
24488 if (e) {
24489 log_packet_detailed("'improvements' field error detected");
24490 }
24491
24492#ifdef FREECIV_JSON_CONNECTION
24493 field_addr.name = "act_id";
24494#endif /* FREECIV_JSON_CONNECTION */
24495 e = 0;
24496
24497 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24498
24499 if (e) {
24500 log_packet_detailed("'act_id' field error detected");
24501 }
24502
24503#ifdef FREECIV_JSON_CONNECTION
24504 field_addr.name = "request_kind";
24505#endif /* FREECIV_JSON_CONNECTION */
24506 e = 0;
24507
24508 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24509
24510 if (e) {
24511 log_packet_detailed("'request_kind' field error detected");
24512 }
24513#endif /* FREECIV_DELTA_PROTOCOL */
24514
24516}
24517
24519{
24520 if (!pc->used) {
24521 log_error("WARNING: trying to send data to the closed connection %s",
24523 return -1;
24524 }
24525 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet != nullptr, -1,
24526 "Handler for PACKET_CITY_SABOTAGE_LIST not installed");
24527 return pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet(pc, packet);
24528}
24529
24531{
24532 conn_list_iterate(dest, pconn) {
24535}
24536
24538{
24539 memset(packet, 0, sizeof(*packet));
24540}
24541
24542#define free_packet_city_rally_point(_packet) (void) 0
24543#define destroy_packet_city_rally_point free
24544
24545#ifdef FREECIV_DELTA_PROTOCOL
24546#define hash_packet_city_rally_point_100 hash_const
24547#define cmp_packet_city_rally_point_100 cmp_const
24549#endif /* FREECIV_DELTA_PROTOCOL */
24550
24552{
24553#define FREE_PACKET_STRUCT(_packet) free_packet_city_rally_point(_packet)
24555
24556#ifdef FREECIV_JSON_CONNECTION
24557 struct plocation field_addr;
24558 {
24559 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24562 }
24563#endif /* FREECIV_JSON_CONNECTION */
24564
24565 log_packet_detailed("packet_city_rally_point_100: got info about ()");
24566
24567#ifdef FREECIV_DELTA_PROTOCOL
24570 struct genhash **hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
24571
24572 if (nullptr == *hash) {
24574 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24575 }
24576
24577 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24578 *real_packet = *old;
24579 } else {
24580 /* packet is already initialized empty */
24581 log_packet_detailed(" no old info");
24582 }
24583
24584#ifdef FREECIV_JSON_CONNECTION
24585 field_addr.name = "fields";
24586#endif /* FREECIV_JSON_CONNECTION */
24587 DIO_BV_GET(&din, &field_addr, fields);
24588
24589 if (BV_ISSET(fields, 0)) {
24590 log_packet_detailed(" got field 'id'");
24591
24592#ifdef FREECIV_JSON_CONNECTION
24593 field_addr.name = "id";
24594#endif /* FREECIV_JSON_CONNECTION */
24595
24596 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24598 }
24599 }
24600
24601 if (BV_ISSET(fields, 1)) {
24602 log_packet_detailed(" got field 'length'");
24603
24604#ifdef FREECIV_JSON_CONNECTION
24605 field_addr.name = "length";
24606#endif /* FREECIV_JSON_CONNECTION */
24607
24608 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24610 }
24611 }
24612
24613 real_packet->persistent = BV_ISSET(fields, 2);
24614
24615 real_packet->vigilant = BV_ISSET(fields, 3);
24616
24617 if (BV_ISSET(fields, 4)) {
24618 log_packet_detailed(" got field 'orders'");
24619
24620#ifdef FREECIV_JSON_CONNECTION
24621 field_addr.name = "orders";
24622#endif /* FREECIV_JSON_CONNECTION */
24623
24624 {
24625 int i;
24626
24627 if (real_packet->length > MAX_LEN_ROUTE) {
24628 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24629 }
24630
24631#ifdef FREECIV_JSON_CONNECTION
24632 /* Enter array. */
24633 field_addr.sub_location = plocation_elem_new(0);
24634#endif /* FREECIV_JSON_CONNECTION */
24635
24636 for (i = 0; i < real_packet->length; i++) {
24637#ifdef FREECIV_JSON_CONNECTION
24638 /* Next array element */
24639 field_addr.sub_location->number = i;
24640#endif /* FREECIV_JSON_CONNECTION */
24641
24642 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24644 }
24645 }
24646
24647#ifdef FREECIV_JSON_CONNECTION
24648 /* Exit array. */
24649 FC_FREE(field_addr.sub_location);
24650#endif /* FREECIV_JSON_CONNECTION */
24651 }
24652 }
24653
24654 if (nullptr == old) {
24655 old = fc_malloc(sizeof(*old));
24657 *old = *real_packet;
24659 } else {
24660 *old = *real_packet;
24661 }
24662
24663#else /* FREECIV_DELTA_PROTOCOL */
24664#ifdef FREECIV_JSON_CONNECTION
24665 field_addr.name = "id";
24666#endif /* FREECIV_JSON_CONNECTION */
24667
24668 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24670 }
24671
24672#ifdef FREECIV_JSON_CONNECTION
24673 field_addr.name = "length";
24674#endif /* FREECIV_JSON_CONNECTION */
24675
24676 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24678 }
24679
24680#ifdef FREECIV_JSON_CONNECTION
24681 field_addr.name = "persistent";
24682#endif /* FREECIV_JSON_CONNECTION */
24683
24684 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->persistent)) {
24686 }
24687
24688#ifdef FREECIV_JSON_CONNECTION
24689 field_addr.name = "vigilant";
24690#endif /* FREECIV_JSON_CONNECTION */
24691
24692 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
24694 }
24695
24696#ifdef FREECIV_JSON_CONNECTION
24697 field_addr.name = "orders";
24698#endif /* FREECIV_JSON_CONNECTION */
24699
24700 {
24701 int i;
24702
24703 if (real_packet->length > MAX_LEN_ROUTE) {
24704 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24705 }
24706
24707#ifdef FREECIV_JSON_CONNECTION
24708 /* Enter array. */
24709 field_addr.sub_location = plocation_elem_new(0);
24710#endif /* FREECIV_JSON_CONNECTION */
24711
24712 for (i = 0; i < real_packet->length; i++) {
24713#ifdef FREECIV_JSON_CONNECTION
24714 /* Next array element */
24715 field_addr.sub_location->number = i;
24716#endif /* FREECIV_JSON_CONNECTION */
24717
24718 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24720 }
24721 }
24722
24723#ifdef FREECIV_JSON_CONNECTION
24724 /* Exit array. */
24725 FC_FREE(field_addr.sub_location);
24726#endif /* FREECIV_JSON_CONNECTION */
24727 }
24728#endif /* FREECIV_DELTA_PROTOCOL */
24729
24731#undef FREE_PACKET_STRUCT
24732}
24733
24734static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24735{
24736 const struct packet_city_rally_point *real_packet = packet;
24737 int e;
24739
24740 log_packet_detailed("packet_city_rally_point_100: sending info about ()");
24741
24742#ifdef FREECIV_DELTA_PROTOCOL
24745 bool differ;
24746 int different = force_to_send;
24747 struct genhash **hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
24748
24749 if (nullptr == *hash) {
24751 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24752 }
24753 BV_CLR_ALL(fields);
24754
24755 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24756 old = fc_malloc(sizeof(*old));
24757 /* temporary bitcopy just to insert correctly */
24758 *old = *real_packet;
24761 different = 1; /* Force to send. */
24762 }
24763
24764 differ = (old->id != real_packet->id);
24765 if (differ) {
24766 different++;
24767 BV_SET(fields, 0);
24768 }
24769
24770 differ = (old->length != real_packet->length);
24771 if (differ) {
24772 different++;
24773 BV_SET(fields, 1);
24774 }
24775
24776 differ = (old->persistent != real_packet->persistent);
24777 if (differ) {
24778 different++;
24779 }
24780 /* folded into head */
24781 if (real_packet->persistent) {
24782 BV_SET(fields, 2);
24783 }
24784
24785 differ = (old->vigilant != real_packet->vigilant);
24786 if (differ) {
24787 different++;
24788 }
24789 /* folded into head */
24790 if (real_packet->vigilant) {
24791 BV_SET(fields, 3);
24792 }
24793
24794 differ = (old->length != real_packet->length);
24795 if (!differ) {
24796 int i;
24797
24798 for (i = 0; i < old->length; i++) {
24799 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
24800 if (differ) {
24801 break;
24802 }
24803 }
24804 }
24805 if (differ) {
24806 different++;
24807 BV_SET(fields, 4);
24808 }
24809
24810 if (different == 0) {
24811 log_packet_detailed(" no change -> discard");
24813 }
24814#endif /* FREECIV_DELTA_PROTOCOL */
24815
24816#ifdef FREECIV_JSON_CONNECTION
24817 struct plocation field_addr;
24818 {
24819 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24822 }
24823#endif /* FREECIV_JSON_CONNECTION */
24824
24825#ifdef FREECIV_DELTA_PROTOCOL
24826#ifdef FREECIV_JSON_CONNECTION
24827 field_addr.name = "fields";
24828#endif /* FREECIV_JSON_CONNECTION */
24829 e = 0;
24830 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24831 if (e) {
24832 log_packet_detailed("fields bitvector error detected");
24833 }
24834
24835 if (BV_ISSET(fields, 0)) {
24836 log_packet_detailed(" field 'id' has changed");
24837
24838#ifdef FREECIV_JSON_CONNECTION
24839 field_addr.name = "id";
24840#endif /* FREECIV_JSON_CONNECTION */
24841 e = 0;
24842
24843 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24844
24845 if (e) {
24846 log_packet_detailed("'id' field error detected");
24847 }
24848 }
24849
24850 if (BV_ISSET(fields, 1)) {
24851 log_packet_detailed(" field 'length' has changed");
24852
24853#ifdef FREECIV_JSON_CONNECTION
24854 field_addr.name = "length";
24855#endif /* FREECIV_JSON_CONNECTION */
24856 e = 0;
24857
24858 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24859
24860 if (e) {
24861 log_packet_detailed("'length' field error detected");
24862 }
24863 }
24864
24865 /* field 2 is folded into the header */
24866
24867 /* field 3 is folded into the header */
24868
24869 if (BV_ISSET(fields, 4)) {
24870 log_packet_detailed(" field 'orders' has changed");
24871
24872#ifdef FREECIV_JSON_CONNECTION
24873 field_addr.name = "orders";
24874#endif /* FREECIV_JSON_CONNECTION */
24875 e = 0;
24876
24877 {
24878 int i;
24879
24880#ifdef FREECIV_JSON_CONNECTION
24881 /* Create the array. */
24882 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24883
24884 /* Enter array. */
24885 field_addr.sub_location = plocation_elem_new(0);
24886#endif /* FREECIV_JSON_CONNECTION */
24887
24888 for (i = 0; i < real_packet->length; i++) {
24889#ifdef FREECIV_JSON_CONNECTION
24890 /* Next array element. */
24891 field_addr.sub_location->number = i;
24892#endif /* FREECIV_JSON_CONNECTION */
24893
24894 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24895 }
24896
24897#ifdef FREECIV_JSON_CONNECTION
24898 /* Exit array. */
24899 FC_FREE(field_addr.sub_location);
24900#endif /* FREECIV_JSON_CONNECTION */
24901 }
24902
24903 if (e) {
24904 log_packet_detailed("'orders' field error detected");
24905 }
24906 }
24907
24908 *old = *real_packet;
24909
24910#else /* FREECIV_DELTA_PROTOCOL */
24911#ifdef FREECIV_JSON_CONNECTION
24912 field_addr.name = "id";
24913#endif /* FREECIV_JSON_CONNECTION */
24914 e = 0;
24915
24916 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24917
24918 if (e) {
24919 log_packet_detailed("'id' field error detected");
24920 }
24921
24922#ifdef FREECIV_JSON_CONNECTION
24923 field_addr.name = "length";
24924#endif /* FREECIV_JSON_CONNECTION */
24925 e = 0;
24926
24927 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24928
24929 if (e) {
24930 log_packet_detailed("'length' field error detected");
24931 }
24932
24933#ifdef FREECIV_JSON_CONNECTION
24934 field_addr.name = "persistent";
24935#endif /* FREECIV_JSON_CONNECTION */
24936 e = 0;
24937
24938 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->persistent);
24939
24940 if (e) {
24941 log_packet_detailed("'persistent' field error detected");
24942 }
24943
24944#ifdef FREECIV_JSON_CONNECTION
24945 field_addr.name = "vigilant";
24946#endif /* FREECIV_JSON_CONNECTION */
24947 e = 0;
24948
24949 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
24950
24951 if (e) {
24952 log_packet_detailed("'vigilant' field error detected");
24953 }
24954
24955#ifdef FREECIV_JSON_CONNECTION
24956 field_addr.name = "orders";
24957#endif /* FREECIV_JSON_CONNECTION */
24958 e = 0;
24959
24960 {
24961 int i;
24962
24963#ifdef FREECIV_JSON_CONNECTION
24964 /* Create the array. */
24965 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24966
24967 /* Enter array. */
24968 field_addr.sub_location = plocation_elem_new(0);
24969#endif /* FREECIV_JSON_CONNECTION */
24970
24971 for (i = 0; i < real_packet->length; i++) {
24972#ifdef FREECIV_JSON_CONNECTION
24973 /* Next array element. */
24974 field_addr.sub_location->number = i;
24975#endif /* FREECIV_JSON_CONNECTION */
24976
24977 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24978 }
24979
24980#ifdef FREECIV_JSON_CONNECTION
24981 /* Exit array. */
24982 FC_FREE(field_addr.sub_location);
24983#endif /* FREECIV_JSON_CONNECTION */
24984 }
24985
24986 if (e) {
24987 log_packet_detailed("'orders' field error detected");
24988 }
24989#endif /* FREECIV_DELTA_PROTOCOL */
24990
24992}
24993
24994int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24995{
24996 if (!pc->used) {
24997 log_error("WARNING: trying to send data to the closed connection %s",
24999 return -1;
25000 }
25001 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send != nullptr, -1,
25002 "Handler for PACKET_CITY_RALLY_POINT not installed");
25003 return pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send(pc, packet, force_to_send);
25004}
25005
25006void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
25007{
25008 conn_list_iterate(dest, pconn) {
25009 send_packet_city_rally_point(pconn, packet, force_to_send);
25011}
25012
25013static inline void init_packet_worker_task(struct packet_worker_task *packet)
25014{
25015 memset(packet, 0, sizeof(*packet));
25016}
25017
25018#define free_packet_worker_task(_packet) (void) 0
25019#define destroy_packet_worker_task free
25020
25021#ifdef FREECIV_DELTA_PROTOCOL
25022#define hash_packet_worker_task_100 hash_const
25023#define cmp_packet_worker_task_100 cmp_const
25025#endif /* FREECIV_DELTA_PROTOCOL */
25026
25028{
25029#define FREE_PACKET_STRUCT(_packet) free_packet_worker_task(_packet)
25031
25032#ifdef FREECIV_JSON_CONNECTION
25033 struct plocation field_addr;
25034 {
25035 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25038 }
25039#endif /* FREECIV_JSON_CONNECTION */
25040
25041 log_packet_detailed("packet_worker_task_100: got info about ()");
25042
25043#ifdef FREECIV_DELTA_PROTOCOL
25045 struct packet_worker_task *old;
25046 struct genhash **hash = pc->phs.received + PACKET_WORKER_TASK;
25047
25048 if (nullptr == *hash) {
25050 nullptr, nullptr, nullptr, destroy_packet_worker_task);
25051 }
25052
25053 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25054 *real_packet = *old;
25055 } else {
25056 /* packet is already initialized empty */
25057 log_packet_detailed(" no old info");
25058 }
25059
25060#ifdef FREECIV_JSON_CONNECTION
25061 field_addr.name = "fields";
25062#endif /* FREECIV_JSON_CONNECTION */
25063 DIO_BV_GET(&din, &field_addr, fields);
25064
25065 if (BV_ISSET(fields, 0)) {
25066 log_packet_detailed(" got field 'city_id'");
25067
25068#ifdef FREECIV_JSON_CONNECTION
25069 field_addr.name = "city_id";
25070#endif /* FREECIV_JSON_CONNECTION */
25071
25072 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25074 }
25075 }
25076
25077 if (BV_ISSET(fields, 1)) {
25078 log_packet_detailed(" got field 'tile_id'");
25079
25080#ifdef FREECIV_JSON_CONNECTION
25081 field_addr.name = "tile_id";
25082#endif /* FREECIV_JSON_CONNECTION */
25083
25084 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25086 }
25087 }
25088
25089 if (BV_ISSET(fields, 2)) {
25090 log_packet_detailed(" got field 'activity'");
25091
25092#ifdef FREECIV_JSON_CONNECTION
25093 field_addr.name = "activity";
25094#endif /* FREECIV_JSON_CONNECTION */
25095
25096 {
25097 int readin;
25098
25099 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25101 }
25102 real_packet->activity = readin;
25103 }
25104 }
25105
25106 if (BV_ISSET(fields, 3)) {
25107 log_packet_detailed(" got field 'tgt'");
25108
25109#ifdef FREECIV_JSON_CONNECTION
25110 field_addr.name = "tgt";
25111#endif /* FREECIV_JSON_CONNECTION */
25112
25113 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25115 }
25116 }
25117
25118 if (BV_ISSET(fields, 4)) {
25119 log_packet_detailed(" got field 'want'");
25120
25121#ifdef FREECIV_JSON_CONNECTION
25122 field_addr.name = "want";
25123#endif /* FREECIV_JSON_CONNECTION */
25124
25125 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25127 }
25128 }
25129
25130 if (nullptr == old) {
25131 old = fc_malloc(sizeof(*old));
25133 *old = *real_packet;
25135 } else {
25136 *old = *real_packet;
25137 }
25138
25139#else /* FREECIV_DELTA_PROTOCOL */
25140#ifdef FREECIV_JSON_CONNECTION
25141 field_addr.name = "city_id";
25142#endif /* FREECIV_JSON_CONNECTION */
25143
25144 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25146 }
25147
25148#ifdef FREECIV_JSON_CONNECTION
25149 field_addr.name = "tile_id";
25150#endif /* FREECIV_JSON_CONNECTION */
25151
25152 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25154 }
25155
25156#ifdef FREECIV_JSON_CONNECTION
25157 field_addr.name = "activity";
25158#endif /* FREECIV_JSON_CONNECTION */
25159
25160 {
25161 int readin;
25162
25163 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25165 }
25166 real_packet->activity = readin;
25167 }
25168
25169#ifdef FREECIV_JSON_CONNECTION
25170 field_addr.name = "tgt";
25171#endif /* FREECIV_JSON_CONNECTION */
25172
25173 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25175 }
25176
25177#ifdef FREECIV_JSON_CONNECTION
25178 field_addr.name = "want";
25179#endif /* FREECIV_JSON_CONNECTION */
25180
25181 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25183 }
25184#endif /* FREECIV_DELTA_PROTOCOL */
25185
25187#undef FREE_PACKET_STRUCT
25188}
25189
25190static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
25191{
25192 const struct packet_worker_task *real_packet = packet;
25193 int e;
25195
25196 log_packet_detailed("packet_worker_task_100: sending info about ()");
25197
25198#ifdef FREECIV_DELTA_PROTOCOL
25200 struct packet_worker_task *old;
25201 bool differ;
25202 struct genhash **hash = pc->phs.sent + PACKET_WORKER_TASK;
25203
25204 if (nullptr == *hash) {
25206 nullptr, nullptr, nullptr, destroy_packet_worker_task);
25207 }
25208 BV_CLR_ALL(fields);
25209
25210 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25211 old = fc_malloc(sizeof(*old));
25212 /* temporary bitcopy just to insert correctly */
25213 *old = *real_packet;
25216 }
25217
25218 differ = (old->city_id != real_packet->city_id);
25219 if (differ) {
25220 BV_SET(fields, 0);
25221 }
25222
25223 differ = (old->tile_id != real_packet->tile_id);
25224 if (differ) {
25225 BV_SET(fields, 1);
25226 }
25227
25228 differ = (old->activity != real_packet->activity);
25229 if (differ) {
25230 BV_SET(fields, 2);
25231 }
25232
25233 differ = (old->tgt != real_packet->tgt);
25234 if (differ) {
25235 BV_SET(fields, 3);
25236 }
25237
25238 differ = (old->want != real_packet->want);
25239 if (differ) {
25240 BV_SET(fields, 4);
25241 }
25242#endif /* FREECIV_DELTA_PROTOCOL */
25243
25244#ifdef FREECIV_JSON_CONNECTION
25245 struct plocation field_addr;
25246 {
25247 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25250 }
25251#endif /* FREECIV_JSON_CONNECTION */
25252
25253#ifdef FREECIV_DELTA_PROTOCOL
25254#ifdef FREECIV_JSON_CONNECTION
25255 field_addr.name = "fields";
25256#endif /* FREECIV_JSON_CONNECTION */
25257 e = 0;
25258 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25259 if (e) {
25260 log_packet_detailed("fields bitvector error detected");
25261 }
25262
25263 if (BV_ISSET(fields, 0)) {
25264 log_packet_detailed(" field 'city_id' has changed");
25265
25266#ifdef FREECIV_JSON_CONNECTION
25267 field_addr.name = "city_id";
25268#endif /* FREECIV_JSON_CONNECTION */
25269 e = 0;
25270
25271 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25272
25273 if (e) {
25274 log_packet_detailed("'city_id' field error detected");
25275 }
25276 }
25277
25278 if (BV_ISSET(fields, 1)) {
25279 log_packet_detailed(" field 'tile_id' has changed");
25280
25281#ifdef FREECIV_JSON_CONNECTION
25282 field_addr.name = "tile_id";
25283#endif /* FREECIV_JSON_CONNECTION */
25284 e = 0;
25285
25286 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25287
25288 if (e) {
25289 log_packet_detailed("'tile_id' field error detected");
25290 }
25291 }
25292
25293 if (BV_ISSET(fields, 2)) {
25294 log_packet_detailed(" field 'activity' has changed");
25295
25296#ifdef FREECIV_JSON_CONNECTION
25297 field_addr.name = "activity";
25298#endif /* FREECIV_JSON_CONNECTION */
25299 e = 0;
25300
25301 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25302
25303 if (e) {
25304 log_packet_detailed("'activity' field error detected");
25305 }
25306 }
25307
25308 if (BV_ISSET(fields, 3)) {
25309 log_packet_detailed(" field 'tgt' has changed");
25310
25311#ifdef FREECIV_JSON_CONNECTION
25312 field_addr.name = "tgt";
25313#endif /* FREECIV_JSON_CONNECTION */
25314 e = 0;
25315
25316 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25317
25318 if (e) {
25319 log_packet_detailed("'tgt' field error detected");
25320 }
25321 }
25322
25323 if (BV_ISSET(fields, 4)) {
25324 log_packet_detailed(" field 'want' has changed");
25325
25326#ifdef FREECIV_JSON_CONNECTION
25327 field_addr.name = "want";
25328#endif /* FREECIV_JSON_CONNECTION */
25329 e = 0;
25330
25331 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25332
25333 if (e) {
25334 log_packet_detailed("'want' field error detected");
25335 }
25336 }
25337
25338 *old = *real_packet;
25339
25340#else /* FREECIV_DELTA_PROTOCOL */
25341#ifdef FREECIV_JSON_CONNECTION
25342 field_addr.name = "city_id";
25343#endif /* FREECIV_JSON_CONNECTION */
25344 e = 0;
25345
25346 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25347
25348 if (e) {
25349 log_packet_detailed("'city_id' field error detected");
25350 }
25351
25352#ifdef FREECIV_JSON_CONNECTION
25353 field_addr.name = "tile_id";
25354#endif /* FREECIV_JSON_CONNECTION */
25355 e = 0;
25356
25357 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25358
25359 if (e) {
25360 log_packet_detailed("'tile_id' field error detected");
25361 }
25362
25363#ifdef FREECIV_JSON_CONNECTION
25364 field_addr.name = "activity";
25365#endif /* FREECIV_JSON_CONNECTION */
25366 e = 0;
25367
25368 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25369
25370 if (e) {
25371 log_packet_detailed("'activity' field error detected");
25372 }
25373
25374#ifdef FREECIV_JSON_CONNECTION
25375 field_addr.name = "tgt";
25376#endif /* FREECIV_JSON_CONNECTION */
25377 e = 0;
25378
25379 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25380
25381 if (e) {
25382 log_packet_detailed("'tgt' field error detected");
25383 }
25384
25385#ifdef FREECIV_JSON_CONNECTION
25386 field_addr.name = "want";
25387#endif /* FREECIV_JSON_CONNECTION */
25388 e = 0;
25389
25390 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25391
25392 if (e) {
25393 log_packet_detailed("'want' field error detected");
25394 }
25395#endif /* FREECIV_DELTA_PROTOCOL */
25396
25398}
25399
25401{
25402 if (!pc->used) {
25403 log_error("WARNING: trying to send data to the closed connection %s",
25405 return -1;
25406 }
25407 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WORKER_TASK].packet != nullptr, -1,
25408 "Handler for PACKET_WORKER_TASK not installed");
25409 return pc->phs.handlers->send[PACKET_WORKER_TASK].packet(pc, packet);
25410}
25411
25412void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
25413{
25414 conn_list_iterate(dest, pconn) {
25417}
25418
25419static inline void init_packet_player_remove(struct packet_player_remove *packet)
25420{
25421 memset(packet, 0, sizeof(*packet));
25422}
25423
25424#define free_packet_player_remove(_packet) (void) 0
25425#define destroy_packet_player_remove free
25426
25427#ifdef FREECIV_DELTA_PROTOCOL
25428#define hash_packet_player_remove_100 hash_const
25429#define cmp_packet_player_remove_100 cmp_const
25431#endif /* FREECIV_DELTA_PROTOCOL */
25432
25434{
25435#define FREE_PACKET_STRUCT(_packet) free_packet_player_remove(_packet)
25437
25438#ifdef FREECIV_JSON_CONNECTION
25439 struct plocation field_addr;
25440 {
25441 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25444 }
25445#endif /* FREECIV_JSON_CONNECTION */
25446
25447 log_packet_detailed("packet_player_remove_100: got info about ()");
25448
25449#ifdef FREECIV_DELTA_PROTOCOL
25451 struct packet_player_remove *old;
25452 struct genhash **hash = pc->phs.received + PACKET_PLAYER_REMOVE;
25453
25454 if (nullptr == *hash) {
25456 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25457 }
25458
25459 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25460 *real_packet = *old;
25461 } else {
25462 /* packet is already initialized empty */
25463 log_packet_detailed(" no old info");
25464 }
25465
25466#ifdef FREECIV_JSON_CONNECTION
25467 field_addr.name = "fields";
25468#endif /* FREECIV_JSON_CONNECTION */
25469 DIO_BV_GET(&din, &field_addr, fields);
25470
25471 if (BV_ISSET(fields, 0)) {
25472 log_packet_detailed(" got field 'playerno'");
25473
25474#ifdef FREECIV_JSON_CONNECTION
25475 field_addr.name = "playerno";
25476#endif /* FREECIV_JSON_CONNECTION */
25477
25478 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25480 }
25481 }
25482
25483 if (nullptr == old) {
25484 old = fc_malloc(sizeof(*old));
25486 *old = *real_packet;
25488 } else {
25489 *old = *real_packet;
25490 }
25491
25492 hash = pc->phs.received + PACKET_PLAYER_INFO;
25493 if (nullptr != *hash) {
25495 }
25496
25497#else /* FREECIV_DELTA_PROTOCOL */
25498#ifdef FREECIV_JSON_CONNECTION
25499 field_addr.name = "playerno";
25500#endif /* FREECIV_JSON_CONNECTION */
25501
25502 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25504 }
25505#endif /* FREECIV_DELTA_PROTOCOL */
25506
25508#undef FREE_PACKET_STRUCT
25509}
25510
25511static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
25512{
25513 const struct packet_player_remove *real_packet = packet;
25514 int e;
25516
25517 log_packet_detailed("packet_player_remove_100: sending info about ()");
25518
25519#ifdef FREECIV_DELTA_PROTOCOL
25521 struct packet_player_remove *old;
25522 bool differ;
25523 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_REMOVE;
25524
25525 if (nullptr == *hash) {
25527 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25528 }
25529 BV_CLR_ALL(fields);
25530
25531 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25532 old = fc_malloc(sizeof(*old));
25533 /* temporary bitcopy just to insert correctly */
25534 *old = *real_packet;
25537 }
25538
25539 differ = (old->playerno != real_packet->playerno);
25540 if (differ) {
25541 BV_SET(fields, 0);
25542 }
25543#endif /* FREECIV_DELTA_PROTOCOL */
25544
25545#ifdef FREECIV_JSON_CONNECTION
25546 struct plocation field_addr;
25547 {
25548 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25551 }
25552#endif /* FREECIV_JSON_CONNECTION */
25553
25554#ifdef FREECIV_DELTA_PROTOCOL
25555#ifdef FREECIV_JSON_CONNECTION
25556 field_addr.name = "fields";
25557#endif /* FREECIV_JSON_CONNECTION */
25558 e = 0;
25559 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25560 if (e) {
25561 log_packet_detailed("fields bitvector error detected");
25562 }
25563
25564 if (BV_ISSET(fields, 0)) {
25565 log_packet_detailed(" field 'playerno' has changed");
25566
25567#ifdef FREECIV_JSON_CONNECTION
25568 field_addr.name = "playerno";
25569#endif /* FREECIV_JSON_CONNECTION */
25570 e = 0;
25571
25572 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25573
25574 if (e) {
25575 log_packet_detailed("'playerno' field error detected");
25576 }
25577 }
25578
25579 *old = *real_packet;
25580
25581 hash = pc->phs.sent + PACKET_PLAYER_INFO;
25582 if (nullptr != *hash) {
25584 }
25585
25586#else /* FREECIV_DELTA_PROTOCOL */
25587#ifdef FREECIV_JSON_CONNECTION
25588 field_addr.name = "playerno";
25589#endif /* FREECIV_JSON_CONNECTION */
25590 e = 0;
25591
25592 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25593
25594 if (e) {
25595 log_packet_detailed("'playerno' field error detected");
25596 }
25597#endif /* FREECIV_DELTA_PROTOCOL */
25598
25600}
25601
25603{
25604 if (!pc->used) {
25605 log_error("WARNING: trying to send data to the closed connection %s",
25607 return -1;
25608 }
25609 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet != nullptr, -1,
25610 "Handler for PACKET_PLAYER_REMOVE not installed");
25611 return pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet(pc, packet);
25612}
25613
25614int dsend_packet_player_remove(struct connection *pc, int playerno)
25615{
25616 struct packet_player_remove packet, *real_packet = &packet;
25617
25619
25621}
25622
25623static inline void init_packet_player_info(struct packet_player_info *packet)
25624{
25625 memset(packet, 0, sizeof(*packet));
25626}
25627
25628#define free_packet_player_info(_packet) (void) 0
25629#define destroy_packet_player_info free
25630
25631#ifdef FREECIV_DELTA_PROTOCOL
25633{
25634 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
25635 genhash_val_t result = 0;
25636
25637 result += key->playerno;
25638
25639 result &= 0xFFFFFFFF;
25640 return result;
25641}
25642
25643static bool cmp_packet_player_info_100(const void *vkey1, const void *vkey2)
25644{
25645 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
25646 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
25647 bool differ;
25648
25649 differ = (old->playerno != real_packet->playerno);
25650
25651 return !differ;
25652}
25654#endif /* FREECIV_DELTA_PROTOCOL */
25655
25657{
25658#define FREE_PACKET_STRUCT(_packet) free_packet_player_info(_packet)
25660
25661#ifdef FREECIV_JSON_CONNECTION
25662 struct plocation field_addr;
25663 {
25664 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25667 }
25668#endif /* FREECIV_JSON_CONNECTION */
25669
25670#ifdef FREECIV_JSON_CONNECTION
25671 field_addr.name = "playerno";
25672#endif /* FREECIV_JSON_CONNECTION */
25673
25674 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25676 }
25677
25678 log_packet_detailed("packet_player_info_100: got info about (%d)",
25679 real_packet->playerno);
25680
25681#ifdef FREECIV_DELTA_PROTOCOL
25683 struct packet_player_info *old;
25684 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
25685
25686 if (nullptr == *hash) {
25688 nullptr, nullptr, nullptr, destroy_packet_player_info);
25689 }
25690
25691 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25692 *real_packet = *old;
25693 } else {
25694 /* packet is already initialized empty */
25695 log_packet_detailed(" no old info");
25696 }
25697
25698#ifdef FREECIV_JSON_CONNECTION
25699 field_addr.name = "fields";
25700#endif /* FREECIV_JSON_CONNECTION */
25701 DIO_BV_GET(&din, &field_addr, fields);
25702
25703 if (BV_ISSET(fields, 0)) {
25704 log_packet_detailed(" got field 'name'");
25705
25706#ifdef FREECIV_JSON_CONNECTION
25707 field_addr.name = "name";
25708#endif /* FREECIV_JSON_CONNECTION */
25709
25710 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25712 }
25713 }
25714
25715 if (BV_ISSET(fields, 1)) {
25716 log_packet_detailed(" got field 'username'");
25717
25718#ifdef FREECIV_JSON_CONNECTION
25719 field_addr.name = "username";
25720#endif /* FREECIV_JSON_CONNECTION */
25721
25722 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25724 }
25725 }
25726
25727 real_packet->unassigned_user = BV_ISSET(fields, 2);
25728
25729 if (BV_ISSET(fields, 3)) {
25730 log_packet_detailed(" got field 'score'");
25731
25732#ifdef FREECIV_JSON_CONNECTION
25733 field_addr.name = "score";
25734#endif /* FREECIV_JSON_CONNECTION */
25735
25736 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25738 }
25739 }
25740
25741 real_packet->is_male = BV_ISSET(fields, 4);
25742
25743 real_packet->was_created = BV_ISSET(fields, 5);
25744
25745 if (BV_ISSET(fields, 6)) {
25746 log_packet_detailed(" got field 'government'");
25747
25748#ifdef FREECIV_JSON_CONNECTION
25749 field_addr.name = "government";
25750#endif /* FREECIV_JSON_CONNECTION */
25751
25752 {
25753 int readin;
25754
25755 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25757 }
25758 real_packet->government = readin;
25759 }
25760 }
25761
25762 if (BV_ISSET(fields, 7)) {
25763 log_packet_detailed(" got field 'target_government'");
25764
25765#ifdef FREECIV_JSON_CONNECTION
25766 field_addr.name = "target_government";
25767#endif /* FREECIV_JSON_CONNECTION */
25768
25769 {
25770 int readin;
25771
25772 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25773 RECEIVE_PACKET_FIELD_ERROR(target_government);
25774 }
25775 real_packet->target_government = readin;
25776 }
25777 }
25778
25779 if (BV_ISSET(fields, 8)) {
25780 log_packet_detailed(" got field 'real_embassy'");
25781
25782#ifdef FREECIV_JSON_CONNECTION
25783 field_addr.name = "real_embassy";
25784#endif /* FREECIV_JSON_CONNECTION */
25785
25786 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25787 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25788 }
25789 }
25790
25791 if (BV_ISSET(fields, 9)) {
25792 log_packet_detailed(" got field 'mood'");
25793
25794#ifdef FREECIV_JSON_CONNECTION
25795 field_addr.name = "mood";
25796#endif /* FREECIV_JSON_CONNECTION */
25797
25798 {
25799 int readin;
25800
25801 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25803 }
25804 real_packet->mood = readin;
25805 }
25806 }
25807
25808 if (BV_ISSET(fields, 10)) {
25809 log_packet_detailed(" got field 'style'");
25810
25811#ifdef FREECIV_JSON_CONNECTION
25812 field_addr.name = "style";
25813#endif /* FREECIV_JSON_CONNECTION */
25814
25815 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
25817 }
25818 }
25819
25820 if (BV_ISSET(fields, 11)) {
25821 log_packet_detailed(" got field 'music_style'");
25822
25823#ifdef FREECIV_JSON_CONNECTION
25824 field_addr.name = "music_style";
25825#endif /* FREECIV_JSON_CONNECTION */
25826
25827 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
25829 }
25830 }
25831
25832 if (BV_ISSET(fields, 12)) {
25833 log_packet_detailed(" got field 'nation'");
25834
25835#ifdef FREECIV_JSON_CONNECTION
25836 field_addr.name = "nation";
25837#endif /* FREECIV_JSON_CONNECTION */
25838
25839 {
25840 int readin;
25841
25842 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
25844 }
25845 real_packet->nation = readin;
25846 }
25847 }
25848
25849 if (BV_ISSET(fields, 13)) {
25850 log_packet_detailed(" got field 'team'");
25851
25852#ifdef FREECIV_JSON_CONNECTION
25853 field_addr.name = "team";
25854#endif /* FREECIV_JSON_CONNECTION */
25855
25856 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
25858 }
25859 }
25860
25861 real_packet->is_ready = BV_ISSET(fields, 14);
25862
25863 real_packet->phase_done = BV_ISSET(fields, 15);
25864
25865 if (BV_ISSET(fields, 16)) {
25866 log_packet_detailed(" got field 'nturns_idle'");
25867
25868#ifdef FREECIV_JSON_CONNECTION
25869 field_addr.name = "nturns_idle";
25870#endif /* FREECIV_JSON_CONNECTION */
25871
25872 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
25873 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
25874 }
25875 }
25876
25877 if (BV_ISSET(fields, 17)) {
25878 log_packet_detailed(" got field 'turns_alive'");
25879
25880#ifdef FREECIV_JSON_CONNECTION
25881 field_addr.name = "turns_alive";
25882#endif /* FREECIV_JSON_CONNECTION */
25883
25884 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
25885 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
25886 }
25887 }
25888
25889 real_packet->is_alive = BV_ISSET(fields, 18);
25890
25891 if (BV_ISSET(fields, 19)) {
25892 log_packet_detailed(" got field 'autoselect_weight'");
25893
25894#ifdef FREECIV_JSON_CONNECTION
25895 field_addr.name = "autoselect_weight";
25896#endif /* FREECIV_JSON_CONNECTION */
25897
25898 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
25899 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
25900 }
25901 }
25902
25903 if (BV_ISSET(fields, 20)) {
25904 log_packet_detailed(" got field 'gold'");
25905
25906#ifdef FREECIV_JSON_CONNECTION
25907 field_addr.name = "gold";
25908#endif /* FREECIV_JSON_CONNECTION */
25909
25910 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
25912 }
25913 }
25914
25915 if (BV_ISSET(fields, 21)) {
25916 log_packet_detailed(" got field 'tax'");
25917
25918#ifdef FREECIV_JSON_CONNECTION
25919 field_addr.name = "tax";
25920#endif /* FREECIV_JSON_CONNECTION */
25921
25922 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
25924 }
25925 }
25926
25927 if (BV_ISSET(fields, 22)) {
25928 log_packet_detailed(" got field 'science'");
25929
25930#ifdef FREECIV_JSON_CONNECTION
25931 field_addr.name = "science";
25932#endif /* FREECIV_JSON_CONNECTION */
25933
25934 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
25936 }
25937 }
25938
25939 if (BV_ISSET(fields, 23)) {
25940 log_packet_detailed(" got field 'luxury'");
25941
25942#ifdef FREECIV_JSON_CONNECTION
25943 field_addr.name = "luxury";
25944#endif /* FREECIV_JSON_CONNECTION */
25945
25946 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
25948 }
25949 }
25950
25951 if (BV_ISSET(fields, 24)) {
25952 log_packet_detailed(" got field 'infrapoints'");
25953
25954#ifdef FREECIV_JSON_CONNECTION
25955 field_addr.name = "infrapoints";
25956#endif /* FREECIV_JSON_CONNECTION */
25957
25958 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
25959 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
25960 }
25961 }
25962
25963 if (BV_ISSET(fields, 25)) {
25964 log_packet_detailed(" got field 'tech_upkeep'");
25965
25966#ifdef FREECIV_JSON_CONNECTION
25967 field_addr.name = "tech_upkeep";
25968#endif /* FREECIV_JSON_CONNECTION */
25969
25970 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
25971 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
25972 }
25973 }
25974
25975 if (BV_ISSET(fields, 26)) {
25976 log_packet_detailed(" got field 'science_cost'");
25977
25978#ifdef FREECIV_JSON_CONNECTION
25979 field_addr.name = "science_cost";
25980#endif /* FREECIV_JSON_CONNECTION */
25981
25982 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
25983 RECEIVE_PACKET_FIELD_ERROR(science_cost);
25984 }
25985 }
25986
25987 real_packet->is_connected = BV_ISSET(fields, 27);
25988
25989 if (BV_ISSET(fields, 28)) {
25990 log_packet_detailed(" got field 'revolution_finishes'");
25991
25992#ifdef FREECIV_JSON_CONNECTION
25993 field_addr.name = "revolution_finishes";
25994#endif /* FREECIV_JSON_CONNECTION */
25995
25996 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
25997 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
25998 }
25999 }
26000
26001 if (BV_ISSET(fields, 29)) {
26002 log_packet_detailed(" got field 'ai_skill_level'");
26003
26004#ifdef FREECIV_JSON_CONNECTION
26005 field_addr.name = "ai_skill_level";
26006#endif /* FREECIV_JSON_CONNECTION */
26007
26008 {
26009 int readin;
26010
26011 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26012 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26013 }
26014 real_packet->ai_skill_level = readin;
26015 }
26016 }
26017
26018 if (BV_ISSET(fields, 30)) {
26019 log_packet_detailed(" got field 'barbarian_type'");
26020
26021#ifdef FREECIV_JSON_CONNECTION
26022 field_addr.name = "barbarian_type";
26023#endif /* FREECIV_JSON_CONNECTION */
26024
26025 {
26026 int readin;
26027
26028 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26029 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26030 }
26031 real_packet->barbarian_type = readin;
26032 }
26033 }
26034
26035 if (BV_ISSET(fields, 31)) {
26036 log_packet_detailed(" got field 'gives_shared_vision'");
26037
26038#ifdef FREECIV_JSON_CONNECTION
26039 field_addr.name = "gives_shared_vision";
26040#endif /* FREECIV_JSON_CONNECTION */
26041
26042 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26044 }
26045 }
26046
26047 if (BV_ISSET(fields, 32)) {
26048 log_packet_detailed(" got field 'gives_shared_tiles'");
26049
26050#ifdef FREECIV_JSON_CONNECTION
26051 field_addr.name = "gives_shared_tiles";
26052#endif /* FREECIV_JSON_CONNECTION */
26053
26054 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26056 }
26057 }
26058
26059 if (BV_ISSET(fields, 33)) {
26060 log_packet_detailed(" got field 'history'");
26061
26062#ifdef FREECIV_JSON_CONNECTION
26063 field_addr.name = "history";
26064#endif /* FREECIV_JSON_CONNECTION */
26065
26066 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26068 }
26069 }
26070
26071 if (BV_ISSET(fields, 34)) {
26072 log_packet_detailed(" got field 'culture'");
26073
26074#ifdef FREECIV_JSON_CONNECTION
26075 field_addr.name = "culture";
26076#endif /* FREECIV_JSON_CONNECTION */
26077
26078 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26080 }
26081 }
26082
26083 if (BV_ISSET(fields, 35)) {
26084 log_packet_detailed(" got field 'love'");
26085
26086#ifdef FREECIV_JSON_CONNECTION
26087 field_addr.name = "love";
26088#endif /* FREECIV_JSON_CONNECTION */
26089
26090 {
26091 int i;
26092
26093
26094#ifdef FREECIV_JSON_CONNECTION
26095 /* Enter array. */
26096 field_addr.sub_location = plocation_elem_new(0);
26097#endif /* FREECIV_JSON_CONNECTION */
26098
26099 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26100#ifdef FREECIV_JSON_CONNECTION
26101 /* Next array element */
26102 field_addr.sub_location->number = i;
26103#endif /* FREECIV_JSON_CONNECTION */
26104
26105 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26107 }
26108 }
26109
26110#ifdef FREECIV_JSON_CONNECTION
26111 /* Exit array. */
26112 FC_FREE(field_addr.sub_location);
26113#endif /* FREECIV_JSON_CONNECTION */
26114 }
26115 }
26116
26117 real_packet->color_valid = BV_ISSET(fields, 36);
26118
26119 real_packet->color_changeable = BV_ISSET(fields, 37);
26120
26121 if (BV_ISSET(fields, 38)) {
26122 log_packet_detailed(" got field 'color_red'");
26123
26124#ifdef FREECIV_JSON_CONNECTION
26125 field_addr.name = "color_red";
26126#endif /* FREECIV_JSON_CONNECTION */
26127
26128 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26129 RECEIVE_PACKET_FIELD_ERROR(color_red);
26130 }
26131 }
26132
26133 if (BV_ISSET(fields, 39)) {
26134 log_packet_detailed(" got field 'color_green'");
26135
26136#ifdef FREECIV_JSON_CONNECTION
26137 field_addr.name = "color_green";
26138#endif /* FREECIV_JSON_CONNECTION */
26139
26140 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26141 RECEIVE_PACKET_FIELD_ERROR(color_green);
26142 }
26143 }
26144
26145 if (BV_ISSET(fields, 40)) {
26146 log_packet_detailed(" got field 'color_blue'");
26147
26148#ifdef FREECIV_JSON_CONNECTION
26149 field_addr.name = "color_blue";
26150#endif /* FREECIV_JSON_CONNECTION */
26151
26152 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26153 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26154 }
26155 }
26156
26157 if (BV_ISSET(fields, 41)) {
26158 log_packet_detailed(" got field 'flags'");
26159
26160#ifdef FREECIV_JSON_CONNECTION
26161 field_addr.name = "flags";
26162#endif /* FREECIV_JSON_CONNECTION */
26163
26164 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26166 }
26167 }
26168
26169 if (BV_ISSET(fields, 42)) {
26170 log_packet_detailed(" got field 'wonders'");
26171
26172#ifdef FREECIV_JSON_CONNECTION
26173 field_addr.name = "wonders";
26174#endif /* FREECIV_JSON_CONNECTION */
26175
26177#ifdef FREECIV_JSON_CONNECTION
26178 /* Enter array (start at initial element). */
26179 field_addr.sub_location = plocation_elem_new(0);
26180 /* Enter diff array element (start at the index address). */
26181 field_addr.sub_location->sub_location = plocation_field_new("index");
26182#endif /* FREECIV_JSON_CONNECTION */
26183
26184 while (TRUE) {
26185 int i;
26186
26187 /* Read next index */
26188#if B_LAST <= MAX_UINT8
26189 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
26190#else
26191 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
26192#endif
26194 }
26195
26196 if (i == B_LAST) {
26197 break;
26198 }
26199 if (i > B_LAST) {
26201 ": unexpected index %d "
26202 "> length %d in array diff",
26203 i,
26204 B_LAST);
26205 }
26206
26207#ifdef FREECIV_JSON_CONNECTION
26208 /* Content address. */
26209 field_addr.sub_location->sub_location->name = "data";
26210#endif /* FREECIV_JSON_CONNECTION */
26211
26212 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26214 }
26215
26216#ifdef FREECIV_JSON_CONNECTION
26217 /* Move to the next diff array element. */
26218 field_addr.sub_location->number++;
26219 /* Back to the index address. */
26220 field_addr.sub_location->sub_location->name = "index";
26221#endif /* FREECIV_JSON_CONNECTION */
26222 }
26223
26224#ifdef FREECIV_JSON_CONNECTION
26225 /* Exit diff array element. */
26226 FC_FREE(field_addr.sub_location->sub_location);
26227 /* Exit array. */
26228 FC_FREE(field_addr.sub_location);
26229#endif /* FREECIV_JSON_CONNECTION */
26230 }
26231
26232 if (BV_ISSET(fields, 43)) {
26233 log_packet_detailed(" got field 'multip_count'");
26234
26235#ifdef FREECIV_JSON_CONNECTION
26236 field_addr.name = "multip_count";
26237#endif /* FREECIV_JSON_CONNECTION */
26238
26239 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26240 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26241 }
26242 }
26243
26244 if (BV_ISSET(fields, 44)) {
26245 log_packet_detailed(" got field 'multiplier'");
26246
26247#ifdef FREECIV_JSON_CONNECTION
26248 field_addr.name = "multiplier";
26249#endif /* FREECIV_JSON_CONNECTION */
26250
26251 {
26252 int i;
26253
26254 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26255 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26256 }
26257
26258#ifdef FREECIV_JSON_CONNECTION
26259 /* Enter array. */
26260 field_addr.sub_location = plocation_elem_new(0);
26261#endif /* FREECIV_JSON_CONNECTION */
26262
26263 for (i = 0; i < real_packet->multip_count; i++) {
26264#ifdef FREECIV_JSON_CONNECTION
26265 /* Next array element */
26266 field_addr.sub_location->number = i;
26267#endif /* FREECIV_JSON_CONNECTION */
26268
26269 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26271 }
26272 }
26273
26274#ifdef FREECIV_JSON_CONNECTION
26275 /* Exit array. */
26276 FC_FREE(field_addr.sub_location);
26277#endif /* FREECIV_JSON_CONNECTION */
26278 }
26279 }
26280
26281 if (BV_ISSET(fields, 45)) {
26282 log_packet_detailed(" got field 'multiplier_target'");
26283
26284#ifdef FREECIV_JSON_CONNECTION
26285 field_addr.name = "multiplier_target";
26286#endif /* FREECIV_JSON_CONNECTION */
26287
26288 {
26289 int i;
26290
26291 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26292 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
26293 }
26294
26295#ifdef FREECIV_JSON_CONNECTION
26296 /* Enter array. */
26297 field_addr.sub_location = plocation_elem_new(0);
26298#endif /* FREECIV_JSON_CONNECTION */
26299
26300 for (i = 0; i < real_packet->multip_count; i++) {
26301#ifdef FREECIV_JSON_CONNECTION
26302 /* Next array element */
26303 field_addr.sub_location->number = i;
26304#endif /* FREECIV_JSON_CONNECTION */
26305
26306 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26307 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26308 }
26309 }
26310
26311#ifdef FREECIV_JSON_CONNECTION
26312 /* Exit array. */
26313 FC_FREE(field_addr.sub_location);
26314#endif /* FREECIV_JSON_CONNECTION */
26315 }
26316 }
26317
26318 if (BV_ISSET(fields, 46)) {
26319 log_packet_detailed(" got field 'multiplier_changed'");
26320
26321#ifdef FREECIV_JSON_CONNECTION
26322 field_addr.name = "multiplier_changed";
26323#endif /* FREECIV_JSON_CONNECTION */
26324
26325 {
26326 int i;
26327
26328 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26329 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": array truncated");
26330 }
26331
26332#ifdef FREECIV_JSON_CONNECTION
26333 /* Enter array. */
26334 field_addr.sub_location = plocation_elem_new(0);
26335#endif /* FREECIV_JSON_CONNECTION */
26336
26337 for (i = 0; i < real_packet->multip_count; i++) {
26338#ifdef FREECIV_JSON_CONNECTION
26339 /* Next array element */
26340 field_addr.sub_location->number = i;
26341#endif /* FREECIV_JSON_CONNECTION */
26342
26343 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26344 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26345 }
26346 }
26347
26348#ifdef FREECIV_JSON_CONNECTION
26349 /* Exit array. */
26350 FC_FREE(field_addr.sub_location);
26351#endif /* FREECIV_JSON_CONNECTION */
26352 }
26353 }
26354
26355 if (nullptr == old) {
26356 old = fc_malloc(sizeof(*old));
26358 *old = *real_packet;
26360 } else {
26361 *old = *real_packet;
26362 }
26363
26364#else /* FREECIV_DELTA_PROTOCOL */
26365#ifdef FREECIV_JSON_CONNECTION
26366 field_addr.name = "name";
26367#endif /* FREECIV_JSON_CONNECTION */
26368
26369 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
26371 }
26372
26373#ifdef FREECIV_JSON_CONNECTION
26374 field_addr.name = "username";
26375#endif /* FREECIV_JSON_CONNECTION */
26376
26377 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
26379 }
26380
26381#ifdef FREECIV_JSON_CONNECTION
26382 field_addr.name = "unassigned_user";
26383#endif /* FREECIV_JSON_CONNECTION */
26384
26385 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
26386 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
26387 }
26388
26389#ifdef FREECIV_JSON_CONNECTION
26390 field_addr.name = "score";
26391#endif /* FREECIV_JSON_CONNECTION */
26392
26393 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
26395 }
26396
26397#ifdef FREECIV_JSON_CONNECTION
26398 field_addr.name = "is_male";
26399#endif /* FREECIV_JSON_CONNECTION */
26400
26401 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
26403 }
26404
26405#ifdef FREECIV_JSON_CONNECTION
26406 field_addr.name = "was_created";
26407#endif /* FREECIV_JSON_CONNECTION */
26408
26409 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
26410 RECEIVE_PACKET_FIELD_ERROR(was_created);
26411 }
26412
26413#ifdef FREECIV_JSON_CONNECTION
26414 field_addr.name = "government";
26415#endif /* FREECIV_JSON_CONNECTION */
26416
26417 {
26418 int readin;
26419
26420 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26422 }
26423 real_packet->government = readin;
26424 }
26425
26426#ifdef FREECIV_JSON_CONNECTION
26427 field_addr.name = "target_government";
26428#endif /* FREECIV_JSON_CONNECTION */
26429
26430 {
26431 int readin;
26432
26433 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26434 RECEIVE_PACKET_FIELD_ERROR(target_government);
26435 }
26436 real_packet->target_government = readin;
26437 }
26438
26439#ifdef FREECIV_JSON_CONNECTION
26440 field_addr.name = "real_embassy";
26441#endif /* FREECIV_JSON_CONNECTION */
26442
26443 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
26444 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
26445 }
26446
26447#ifdef FREECIV_JSON_CONNECTION
26448 field_addr.name = "mood";
26449#endif /* FREECIV_JSON_CONNECTION */
26450
26451 {
26452 int readin;
26453
26454 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26456 }
26457 real_packet->mood = readin;
26458 }
26459
26460#ifdef FREECIV_JSON_CONNECTION
26461 field_addr.name = "style";
26462#endif /* FREECIV_JSON_CONNECTION */
26463
26464 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
26466 }
26467
26468#ifdef FREECIV_JSON_CONNECTION
26469 field_addr.name = "music_style";
26470#endif /* FREECIV_JSON_CONNECTION */
26471
26472 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
26474 }
26475
26476#ifdef FREECIV_JSON_CONNECTION
26477 field_addr.name = "nation";
26478#endif /* FREECIV_JSON_CONNECTION */
26479
26480 {
26481 int readin;
26482
26483 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
26485 }
26486 real_packet->nation = readin;
26487 }
26488
26489#ifdef FREECIV_JSON_CONNECTION
26490 field_addr.name = "team";
26491#endif /* FREECIV_JSON_CONNECTION */
26492
26493 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
26495 }
26496
26497#ifdef FREECIV_JSON_CONNECTION
26498 field_addr.name = "is_ready";
26499#endif /* FREECIV_JSON_CONNECTION */
26500
26501 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
26503 }
26504
26505#ifdef FREECIV_JSON_CONNECTION
26506 field_addr.name = "phase_done";
26507#endif /* FREECIV_JSON_CONNECTION */
26508
26509 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
26510 RECEIVE_PACKET_FIELD_ERROR(phase_done);
26511 }
26512
26513#ifdef FREECIV_JSON_CONNECTION
26514 field_addr.name = "nturns_idle";
26515#endif /* FREECIV_JSON_CONNECTION */
26516
26517 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
26518 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
26519 }
26520
26521#ifdef FREECIV_JSON_CONNECTION
26522 field_addr.name = "turns_alive";
26523#endif /* FREECIV_JSON_CONNECTION */
26524
26525 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
26526 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
26527 }
26528
26529#ifdef FREECIV_JSON_CONNECTION
26530 field_addr.name = "is_alive";
26531#endif /* FREECIV_JSON_CONNECTION */
26532
26533 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
26535 }
26536
26537#ifdef FREECIV_JSON_CONNECTION
26538 field_addr.name = "autoselect_weight";
26539#endif /* FREECIV_JSON_CONNECTION */
26540
26541 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
26542 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
26543 }
26544
26545#ifdef FREECIV_JSON_CONNECTION
26546 field_addr.name = "gold";
26547#endif /* FREECIV_JSON_CONNECTION */
26548
26549 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
26551 }
26552
26553#ifdef FREECIV_JSON_CONNECTION
26554 field_addr.name = "tax";
26555#endif /* FREECIV_JSON_CONNECTION */
26556
26557 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
26559 }
26560
26561#ifdef FREECIV_JSON_CONNECTION
26562 field_addr.name = "science";
26563#endif /* FREECIV_JSON_CONNECTION */
26564
26565 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
26567 }
26568
26569#ifdef FREECIV_JSON_CONNECTION
26570 field_addr.name = "luxury";
26571#endif /* FREECIV_JSON_CONNECTION */
26572
26573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
26575 }
26576
26577#ifdef FREECIV_JSON_CONNECTION
26578 field_addr.name = "infrapoints";
26579#endif /* FREECIV_JSON_CONNECTION */
26580
26581 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
26582 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
26583 }
26584
26585#ifdef FREECIV_JSON_CONNECTION
26586 field_addr.name = "tech_upkeep";
26587#endif /* FREECIV_JSON_CONNECTION */
26588
26589 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
26590 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
26591 }
26592
26593#ifdef FREECIV_JSON_CONNECTION
26594 field_addr.name = "science_cost";
26595#endif /* FREECIV_JSON_CONNECTION */
26596
26597 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
26598 RECEIVE_PACKET_FIELD_ERROR(science_cost);
26599 }
26600
26601#ifdef FREECIV_JSON_CONNECTION
26602 field_addr.name = "is_connected";
26603#endif /* FREECIV_JSON_CONNECTION */
26604
26605 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
26606 RECEIVE_PACKET_FIELD_ERROR(is_connected);
26607 }
26608
26609#ifdef FREECIV_JSON_CONNECTION
26610 field_addr.name = "revolution_finishes";
26611#endif /* FREECIV_JSON_CONNECTION */
26612
26613 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
26614 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
26615 }
26616
26617#ifdef FREECIV_JSON_CONNECTION
26618 field_addr.name = "ai_skill_level";
26619#endif /* FREECIV_JSON_CONNECTION */
26620
26621 {
26622 int readin;
26623
26624 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26625 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26626 }
26627 real_packet->ai_skill_level = readin;
26628 }
26629
26630#ifdef FREECIV_JSON_CONNECTION
26631 field_addr.name = "barbarian_type";
26632#endif /* FREECIV_JSON_CONNECTION */
26633
26634 {
26635 int readin;
26636
26637 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26638 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26639 }
26640 real_packet->barbarian_type = readin;
26641 }
26642
26643#ifdef FREECIV_JSON_CONNECTION
26644 field_addr.name = "gives_shared_vision";
26645#endif /* FREECIV_JSON_CONNECTION */
26646
26647 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26649 }
26650
26651#ifdef FREECIV_JSON_CONNECTION
26652 field_addr.name = "gives_shared_tiles";
26653#endif /* FREECIV_JSON_CONNECTION */
26654
26655 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26657 }
26658
26659#ifdef FREECIV_JSON_CONNECTION
26660 field_addr.name = "history";
26661#endif /* FREECIV_JSON_CONNECTION */
26662
26663 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26665 }
26666
26667#ifdef FREECIV_JSON_CONNECTION
26668 field_addr.name = "culture";
26669#endif /* FREECIV_JSON_CONNECTION */
26670
26671 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26673 }
26674
26675#ifdef FREECIV_JSON_CONNECTION
26676 field_addr.name = "love";
26677#endif /* FREECIV_JSON_CONNECTION */
26678
26679 {
26680 int i;
26681
26682
26683#ifdef FREECIV_JSON_CONNECTION
26684 /* Enter array. */
26685 field_addr.sub_location = plocation_elem_new(0);
26686#endif /* FREECIV_JSON_CONNECTION */
26687
26688 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26689#ifdef FREECIV_JSON_CONNECTION
26690 /* Next array element */
26691 field_addr.sub_location->number = i;
26692#endif /* FREECIV_JSON_CONNECTION */
26693
26694 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26696 }
26697 }
26698
26699#ifdef FREECIV_JSON_CONNECTION
26700 /* Exit array. */
26701 FC_FREE(field_addr.sub_location);
26702#endif /* FREECIV_JSON_CONNECTION */
26703 }
26704
26705#ifdef FREECIV_JSON_CONNECTION
26706 field_addr.name = "color_valid";
26707#endif /* FREECIV_JSON_CONNECTION */
26708
26709 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
26710 RECEIVE_PACKET_FIELD_ERROR(color_valid);
26711 }
26712
26713#ifdef FREECIV_JSON_CONNECTION
26714 field_addr.name = "color_changeable";
26715#endif /* FREECIV_JSON_CONNECTION */
26716
26717 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
26718 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
26719 }
26720
26721#ifdef FREECIV_JSON_CONNECTION
26722 field_addr.name = "color_red";
26723#endif /* FREECIV_JSON_CONNECTION */
26724
26725 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26726 RECEIVE_PACKET_FIELD_ERROR(color_red);
26727 }
26728
26729#ifdef FREECIV_JSON_CONNECTION
26730 field_addr.name = "color_green";
26731#endif /* FREECIV_JSON_CONNECTION */
26732
26733 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26734 RECEIVE_PACKET_FIELD_ERROR(color_green);
26735 }
26736
26737#ifdef FREECIV_JSON_CONNECTION
26738 field_addr.name = "color_blue";
26739#endif /* FREECIV_JSON_CONNECTION */
26740
26741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26742 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26743 }
26744
26745#ifdef FREECIV_JSON_CONNECTION
26746 field_addr.name = "flags";
26747#endif /* FREECIV_JSON_CONNECTION */
26748
26749 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26751 }
26752
26753#ifdef FREECIV_JSON_CONNECTION
26754 field_addr.name = "wonders";
26755#endif /* FREECIV_JSON_CONNECTION */
26756
26757 {
26758 int i;
26759
26760
26761#ifdef FREECIV_JSON_CONNECTION
26762 /* Enter array. */
26763 field_addr.sub_location = plocation_elem_new(0);
26764#endif /* FREECIV_JSON_CONNECTION */
26765
26766 for (i = 0; i < B_LAST; i++) {
26767#ifdef FREECIV_JSON_CONNECTION
26768 /* Next array element */
26769 field_addr.sub_location->number = i;
26770#endif /* FREECIV_JSON_CONNECTION */
26771
26772 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26774 }
26775 }
26776
26777#ifdef FREECIV_JSON_CONNECTION
26778 /* Exit array. */
26779 FC_FREE(field_addr.sub_location);
26780#endif /* FREECIV_JSON_CONNECTION */
26781 }
26782
26783#ifdef FREECIV_JSON_CONNECTION
26784 field_addr.name = "multip_count";
26785#endif /* FREECIV_JSON_CONNECTION */
26786
26787 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26788 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26789 }
26790
26791#ifdef FREECIV_JSON_CONNECTION
26792 field_addr.name = "multiplier";
26793#endif /* FREECIV_JSON_CONNECTION */
26794
26795 {
26796 int i;
26797
26798 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26799 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26800 }
26801
26802#ifdef FREECIV_JSON_CONNECTION
26803 /* Enter array. */
26804 field_addr.sub_location = plocation_elem_new(0);
26805#endif /* FREECIV_JSON_CONNECTION */
26806
26807 for (i = 0; i < real_packet->multip_count; i++) {
26808#ifdef FREECIV_JSON_CONNECTION
26809 /* Next array element */
26810 field_addr.sub_location->number = i;
26811#endif /* FREECIV_JSON_CONNECTION */
26812
26813 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26815 }
26816 }
26817
26818#ifdef FREECIV_JSON_CONNECTION
26819 /* Exit array. */
26820 FC_FREE(field_addr.sub_location);
26821#endif /* FREECIV_JSON_CONNECTION */
26822 }
26823
26824#ifdef FREECIV_JSON_CONNECTION
26825 field_addr.name = "multiplier_target";
26826#endif /* FREECIV_JSON_CONNECTION */
26827
26828 {
26829 int i;
26830
26831 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26832 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
26833 }
26834
26835#ifdef FREECIV_JSON_CONNECTION
26836 /* Enter array. */
26837 field_addr.sub_location = plocation_elem_new(0);
26838#endif /* FREECIV_JSON_CONNECTION */
26839
26840 for (i = 0; i < real_packet->multip_count; i++) {
26841#ifdef FREECIV_JSON_CONNECTION
26842 /* Next array element */
26843 field_addr.sub_location->number = i;
26844#endif /* FREECIV_JSON_CONNECTION */
26845
26846 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26847 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26848 }
26849 }
26850
26851#ifdef FREECIV_JSON_CONNECTION
26852 /* Exit array. */
26853 FC_FREE(field_addr.sub_location);
26854#endif /* FREECIV_JSON_CONNECTION */
26855 }
26856
26857#ifdef FREECIV_JSON_CONNECTION
26858 field_addr.name = "multiplier_changed";
26859#endif /* FREECIV_JSON_CONNECTION */
26860
26861 {
26862 int i;
26863
26864 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26865 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": array truncated");
26866 }
26867
26868#ifdef FREECIV_JSON_CONNECTION
26869 /* Enter array. */
26870 field_addr.sub_location = plocation_elem_new(0);
26871#endif /* FREECIV_JSON_CONNECTION */
26872
26873 for (i = 0; i < real_packet->multip_count; i++) {
26874#ifdef FREECIV_JSON_CONNECTION
26875 /* Next array element */
26876 field_addr.sub_location->number = i;
26877#endif /* FREECIV_JSON_CONNECTION */
26878
26879 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26880 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26881 }
26882 }
26883
26884#ifdef FREECIV_JSON_CONNECTION
26885 /* Exit array. */
26886 FC_FREE(field_addr.sub_location);
26887#endif /* FREECIV_JSON_CONNECTION */
26888 }
26889#endif /* FREECIV_DELTA_PROTOCOL */
26890
26892#undef FREE_PACKET_STRUCT
26893}
26894
26895static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
26896{
26897 const struct packet_player_info *real_packet = packet;
26898 int e;
26900
26901 log_packet_detailed("packet_player_info_100: sending info about (%d)",
26902 real_packet->playerno);
26903
26904#ifdef FREECIV_DELTA_PROTOCOL
26906 struct packet_player_info *old;
26907 bool differ;
26908 int different = 0;
26909 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
26910
26911 if (nullptr == *hash) {
26913 nullptr, nullptr, nullptr, destroy_packet_player_info);
26914 }
26915 BV_CLR_ALL(fields);
26916
26917 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
26918 old = fc_malloc(sizeof(*old));
26919 /* temporary bitcopy just to insert correctly */
26920 *old = *real_packet;
26923 different = 1; /* Force to send. */
26924 }
26925
26926 differ = (strcmp(old->name, real_packet->name) != 0);
26927 if (differ) {
26928 different++;
26929 BV_SET(fields, 0);
26930 }
26931
26932 differ = (strcmp(old->username, real_packet->username) != 0);
26933 if (differ) {
26934 different++;
26935 BV_SET(fields, 1);
26936 }
26937
26938 differ = (old->unassigned_user != real_packet->unassigned_user);
26939 if (differ) {
26940 different++;
26941 }
26942 /* folded into head */
26943 if (real_packet->unassigned_user) {
26944 BV_SET(fields, 2);
26945 }
26946
26947 differ = (old->score != real_packet->score);
26948 if (differ) {
26949 different++;
26950 BV_SET(fields, 3);
26951 }
26952
26953 differ = (old->is_male != real_packet->is_male);
26954 if (differ) {
26955 different++;
26956 }
26957 /* folded into head */
26958 if (real_packet->is_male) {
26959 BV_SET(fields, 4);
26960 }
26961
26962 differ = (old->was_created != real_packet->was_created);
26963 if (differ) {
26964 different++;
26965 }
26966 /* folded into head */
26967 if (real_packet->was_created) {
26968 BV_SET(fields, 5);
26969 }
26970
26971 differ = (old->government != real_packet->government);
26972 if (differ) {
26973 different++;
26974 BV_SET(fields, 6);
26975 }
26976
26977 differ = (old->target_government != real_packet->target_government);
26978 if (differ) {
26979 different++;
26980 BV_SET(fields, 7);
26981 }
26982
26983 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
26984 if (differ) {
26985 different++;
26986 BV_SET(fields, 8);
26987 }
26988
26989 differ = (old->mood != real_packet->mood);
26990 if (differ) {
26991 different++;
26992 BV_SET(fields, 9);
26993 }
26994
26995 differ = (old->style != real_packet->style);
26996 if (differ) {
26997 different++;
26998 BV_SET(fields, 10);
26999 }
27000
27001 differ = (old->music_style != real_packet->music_style);
27002 if (differ) {
27003 different++;
27004 BV_SET(fields, 11);
27005 }
27006
27007 differ = (old->nation != real_packet->nation);
27008 if (differ) {
27009 different++;
27010 BV_SET(fields, 12);
27011 }
27012
27013 differ = (old->team != real_packet->team);
27014 if (differ) {
27015 different++;
27016 BV_SET(fields, 13);
27017 }
27018
27019 differ = (old->is_ready != real_packet->is_ready);
27020 if (differ) {
27021 different++;
27022 }
27023 /* folded into head */
27024 if (real_packet->is_ready) {
27025 BV_SET(fields, 14);
27026 }
27027
27028 differ = (old->phase_done != real_packet->phase_done);
27029 if (differ) {
27030 different++;
27031 }
27032 /* folded into head */
27033 if (real_packet->phase_done) {
27034 BV_SET(fields, 15);
27035 }
27036
27037 differ = (old->nturns_idle != real_packet->nturns_idle);
27038 if (differ) {
27039 different++;
27040 BV_SET(fields, 16);
27041 }
27042
27043 differ = (old->turns_alive != real_packet->turns_alive);
27044 if (differ) {
27045 different++;
27046 BV_SET(fields, 17);
27047 }
27048
27049 differ = (old->is_alive != real_packet->is_alive);
27050 if (differ) {
27051 different++;
27052 }
27053 /* folded into head */
27054 if (real_packet->is_alive) {
27055 BV_SET(fields, 18);
27056 }
27057
27058 differ = (old->autoselect_weight != real_packet->autoselect_weight);
27059 if (differ) {
27060 different++;
27061 BV_SET(fields, 19);
27062 }
27063
27064 differ = (old->gold != real_packet->gold);
27065 if (differ) {
27066 different++;
27067 BV_SET(fields, 20);
27068 }
27069
27070 differ = (old->tax != real_packet->tax);
27071 if (differ) {
27072 different++;
27073 BV_SET(fields, 21);
27074 }
27075
27076 differ = (old->science != real_packet->science);
27077 if (differ) {
27078 different++;
27079 BV_SET(fields, 22);
27080 }
27081
27082 differ = (old->luxury != real_packet->luxury);
27083 if (differ) {
27084 different++;
27085 BV_SET(fields, 23);
27086 }
27087
27088 differ = (old->infrapoints != real_packet->infrapoints);
27089 if (differ) {
27090 different++;
27091 BV_SET(fields, 24);
27092 }
27093
27094 differ = (old->tech_upkeep != real_packet->tech_upkeep);
27095 if (differ) {
27096 different++;
27097 BV_SET(fields, 25);
27098 }
27099
27100 differ = (old->science_cost != real_packet->science_cost);
27101 if (differ) {
27102 different++;
27103 BV_SET(fields, 26);
27104 }
27105
27106 differ = (old->is_connected != real_packet->is_connected);
27107 if (differ) {
27108 different++;
27109 }
27110 /* folded into head */
27111 if (real_packet->is_connected) {
27112 BV_SET(fields, 27);
27113 }
27114
27115 differ = (old->revolution_finishes != real_packet->revolution_finishes);
27116 if (differ) {
27117 different++;
27118 BV_SET(fields, 28);
27119 }
27120
27121 differ = (old->ai_skill_level != real_packet->ai_skill_level);
27122 if (differ) {
27123 different++;
27124 BV_SET(fields, 29);
27125 }
27126
27127 differ = (old->barbarian_type != real_packet->barbarian_type);
27128 if (differ) {
27129 different++;
27130 BV_SET(fields, 30);
27131 }
27132
27133 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
27134 if (differ) {
27135 different++;
27136 BV_SET(fields, 31);
27137 }
27138
27139 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
27140 if (differ) {
27141 different++;
27142 BV_SET(fields, 32);
27143 }
27144
27145 differ = (old->history != real_packet->history);
27146 if (differ) {
27147 different++;
27148 BV_SET(fields, 33);
27149 }
27150
27151 differ = (old->culture != real_packet->culture);
27152 if (differ) {
27153 different++;
27154 BV_SET(fields, 34);
27155 }
27156
27157 differ = FALSE;
27158 {
27159 int i;
27160
27161 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27162 differ = (old->love[i] != real_packet->love[i]);
27163 if (differ) {
27164 break;
27165 }
27166 }
27167 }
27168 if (differ) {
27169 different++;
27170 BV_SET(fields, 35);
27171 }
27172
27173 differ = (old->color_valid != real_packet->color_valid);
27174 if (differ) {
27175 different++;
27176 }
27177 /* folded into head */
27178 if (real_packet->color_valid) {
27179 BV_SET(fields, 36);
27180 }
27181
27182 differ = (old->color_changeable != real_packet->color_changeable);
27183 if (differ) {
27184 different++;
27185 }
27186 /* folded into head */
27187 if (real_packet->color_changeable) {
27188 BV_SET(fields, 37);
27189 }
27190
27191 differ = (old->color_red != real_packet->color_red);
27192 if (differ) {
27193 different++;
27194 BV_SET(fields, 38);
27195 }
27196
27197 differ = (old->color_green != real_packet->color_green);
27198 if (differ) {
27199 different++;
27200 BV_SET(fields, 39);
27201 }
27202
27203 differ = (old->color_blue != real_packet->color_blue);
27204 if (differ) {
27205 different++;
27206 BV_SET(fields, 40);
27207 }
27208
27209 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
27210 if (differ) {
27211 different++;
27212 BV_SET(fields, 41);
27213 }
27214
27215 differ = FALSE;
27216 {
27217 int i;
27218
27219 for (i = 0; i < B_LAST; i++) {
27220 differ = (old->wonders[i] != real_packet->wonders[i]);
27221 if (differ) {
27222 break;
27223 }
27224 }
27225 }
27226 if (differ) {
27227 different++;
27228 BV_SET(fields, 42);
27229 }
27230
27231 differ = (old->multip_count != real_packet->multip_count);
27232 if (differ) {
27233 different++;
27234 BV_SET(fields, 43);
27235 }
27236
27237 differ = (old->multip_count != real_packet->multip_count);
27238 if (!differ) {
27239 int i;
27240
27241 for (i = 0; i < old->multip_count; i++) {
27242 differ = (old->multiplier[i] != real_packet->multiplier[i]);
27243 if (differ) {
27244 break;
27245 }
27246 }
27247 }
27248 if (differ) {
27249 different++;
27250 BV_SET(fields, 44);
27251 }
27252
27253 differ = (old->multip_count != real_packet->multip_count);
27254 if (!differ) {
27255 int i;
27256
27257 for (i = 0; i < old->multip_count; i++) {
27258 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
27259 if (differ) {
27260 break;
27261 }
27262 }
27263 }
27264 if (differ) {
27265 different++;
27266 BV_SET(fields, 45);
27267 }
27268
27269 differ = (old->multip_count != real_packet->multip_count);
27270 if (!differ) {
27271 int i;
27272
27273 for (i = 0; i < old->multip_count; i++) {
27274 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
27275 if (differ) {
27276 break;
27277 }
27278 }
27279 }
27280 if (differ) {
27281 different++;
27282 BV_SET(fields, 46);
27283 }
27284
27285 if (different == 0) {
27286 log_packet_detailed(" no change -> discard");
27288 }
27289#endif /* FREECIV_DELTA_PROTOCOL */
27290
27291#ifdef FREECIV_JSON_CONNECTION
27292 struct plocation field_addr;
27293 {
27294 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
27297 }
27298#endif /* FREECIV_JSON_CONNECTION */
27299
27300#ifdef FREECIV_JSON_CONNECTION
27301 field_addr.name = "playerno";
27302#endif /* FREECIV_JSON_CONNECTION */
27303 e = 0;
27304
27305 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
27306
27307 if (e) {
27308 log_packet_detailed("'playerno' field error detected");
27309 }
27310
27311#ifdef FREECIV_DELTA_PROTOCOL
27312#ifdef FREECIV_JSON_CONNECTION
27313 field_addr.name = "fields";
27314#endif /* FREECIV_JSON_CONNECTION */
27315 e = 0;
27316 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27317 if (e) {
27318 log_packet_detailed("fields bitvector error detected");
27319 }
27320
27321 if (BV_ISSET(fields, 0)) {
27322 log_packet_detailed(" field 'name' has changed");
27323
27324#ifdef FREECIV_JSON_CONNECTION
27325 field_addr.name = "name";
27326#endif /* FREECIV_JSON_CONNECTION */
27327 e = 0;
27328
27329 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
27330
27331 if (e) {
27332 log_packet_detailed("'name' field error detected");
27333 }
27334 }
27335
27336 if (BV_ISSET(fields, 1)) {
27337 log_packet_detailed(" field 'username' has changed");
27338
27339#ifdef FREECIV_JSON_CONNECTION
27340 field_addr.name = "username";
27341#endif /* FREECIV_JSON_CONNECTION */
27342 e = 0;
27343
27344 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
27345
27346 if (e) {
27347 log_packet_detailed("'username' field error detected");
27348 }
27349 }
27350
27351 /* field 2 is folded into the header */
27352
27353 if (BV_ISSET(fields, 3)) {
27354 log_packet_detailed(" field 'score' has changed");
27355
27356#ifdef FREECIV_JSON_CONNECTION
27357 field_addr.name = "score";
27358#endif /* FREECIV_JSON_CONNECTION */
27359 e = 0;
27360
27361 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
27362
27363 if (e) {
27364 log_packet_detailed("'score' field error detected");
27365 }
27366 }
27367
27368 /* field 4 is folded into the header */
27369
27370 /* field 5 is folded into the header */
27371
27372 if (BV_ISSET(fields, 6)) {
27373 log_packet_detailed(" field 'government' has changed");
27374
27375#ifdef FREECIV_JSON_CONNECTION
27376 field_addr.name = "government";
27377#endif /* FREECIV_JSON_CONNECTION */
27378 e = 0;
27379
27380 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27381
27382 if (e) {
27383 log_packet_detailed("'government' field error detected");
27384 }
27385 }
27386
27387 if (BV_ISSET(fields, 7)) {
27388 log_packet_detailed(" field 'target_government' has changed");
27389
27390#ifdef FREECIV_JSON_CONNECTION
27391 field_addr.name = "target_government";
27392#endif /* FREECIV_JSON_CONNECTION */
27393 e = 0;
27394
27395 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
27396
27397 if (e) {
27398 log_packet_detailed("'target_government' field error detected");
27399 }
27400 }
27401
27402 if (BV_ISSET(fields, 8)) {
27403 log_packet_detailed(" field 'real_embassy' has changed");
27404
27405#ifdef FREECIV_JSON_CONNECTION
27406 field_addr.name = "real_embassy";
27407#endif /* FREECIV_JSON_CONNECTION */
27408 e = 0;
27409
27410 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
27411
27412 if (e) {
27413 log_packet_detailed("'real_embassy' field error detected");
27414 }
27415 }
27416
27417 if (BV_ISSET(fields, 9)) {
27418 log_packet_detailed(" field 'mood' has changed");
27419
27420#ifdef FREECIV_JSON_CONNECTION
27421 field_addr.name = "mood";
27422#endif /* FREECIV_JSON_CONNECTION */
27423 e = 0;
27424
27425 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
27426
27427 if (e) {
27428 log_packet_detailed("'mood' field error detected");
27429 }
27430 }
27431
27432 if (BV_ISSET(fields, 10)) {
27433 log_packet_detailed(" field 'style' has changed");
27434
27435#ifdef FREECIV_JSON_CONNECTION
27436 field_addr.name = "style";
27437#endif /* FREECIV_JSON_CONNECTION */
27438 e = 0;
27439
27440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
27441
27442 if (e) {
27443 log_packet_detailed("'style' field error detected");
27444 }
27445 }
27446
27447 if (BV_ISSET(fields, 11)) {
27448 log_packet_detailed(" field 'music_style' has changed");
27449
27450#ifdef FREECIV_JSON_CONNECTION
27451 field_addr.name = "music_style";
27452#endif /* FREECIV_JSON_CONNECTION */
27453 e = 0;
27454
27455 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
27456
27457 if (e) {
27458 log_packet_detailed("'music_style' field error detected");
27459 }
27460 }
27461
27462 if (BV_ISSET(fields, 12)) {
27463 log_packet_detailed(" field 'nation' has changed");
27464
27465#ifdef FREECIV_JSON_CONNECTION
27466 field_addr.name = "nation";
27467#endif /* FREECIV_JSON_CONNECTION */
27468 e = 0;
27469
27470 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
27471
27472 if (e) {
27473 log_packet_detailed("'nation' field error detected");
27474 }
27475 }
27476
27477 if (BV_ISSET(fields, 13)) {
27478 log_packet_detailed(" field 'team' has changed");
27479
27480#ifdef FREECIV_JSON_CONNECTION
27481 field_addr.name = "team";
27482#endif /* FREECIV_JSON_CONNECTION */
27483 e = 0;
27484
27485 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
27486
27487 if (e) {
27488 log_packet_detailed("'team' field error detected");
27489 }
27490 }
27491
27492 /* field 14 is folded into the header */
27493
27494 /* field 15 is folded into the header */
27495
27496 if (BV_ISSET(fields, 16)) {
27497 log_packet_detailed(" field 'nturns_idle' has changed");
27498
27499#ifdef FREECIV_JSON_CONNECTION
27500 field_addr.name = "nturns_idle";
27501#endif /* FREECIV_JSON_CONNECTION */
27502 e = 0;
27503
27504 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
27505
27506 if (e) {
27507 log_packet_detailed("'nturns_idle' field error detected");
27508 }
27509 }
27510
27511 if (BV_ISSET(fields, 17)) {
27512 log_packet_detailed(" field 'turns_alive' has changed");
27513
27514#ifdef FREECIV_JSON_CONNECTION
27515 field_addr.name = "turns_alive";
27516#endif /* FREECIV_JSON_CONNECTION */
27517 e = 0;
27518
27519 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
27520
27521 if (e) {
27522 log_packet_detailed("'turns_alive' field error detected");
27523 }
27524 }
27525
27526 /* field 18 is folded into the header */
27527
27528 if (BV_ISSET(fields, 19)) {
27529 log_packet_detailed(" field 'autoselect_weight' has changed");
27530
27531#ifdef FREECIV_JSON_CONNECTION
27532 field_addr.name = "autoselect_weight";
27533#endif /* FREECIV_JSON_CONNECTION */
27534 e = 0;
27535
27536 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
27537
27538 if (e) {
27539 log_packet_detailed("'autoselect_weight' field error detected");
27540 }
27541 }
27542
27543 if (BV_ISSET(fields, 20)) {
27544 log_packet_detailed(" field 'gold' has changed");
27545
27546#ifdef FREECIV_JSON_CONNECTION
27547 field_addr.name = "gold";
27548#endif /* FREECIV_JSON_CONNECTION */
27549 e = 0;
27550
27551 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
27552
27553 if (e) {
27554 log_packet_detailed("'gold' field error detected");
27555 }
27556 }
27557
27558 if (BV_ISSET(fields, 21)) {
27559 log_packet_detailed(" field 'tax' has changed");
27560
27561#ifdef FREECIV_JSON_CONNECTION
27562 field_addr.name = "tax";
27563#endif /* FREECIV_JSON_CONNECTION */
27564 e = 0;
27565
27566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27567
27568 if (e) {
27569 log_packet_detailed("'tax' field error detected");
27570 }
27571 }
27572
27573 if (BV_ISSET(fields, 22)) {
27574 log_packet_detailed(" field 'science' has changed");
27575
27576#ifdef FREECIV_JSON_CONNECTION
27577 field_addr.name = "science";
27578#endif /* FREECIV_JSON_CONNECTION */
27579 e = 0;
27580
27581 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27582
27583 if (e) {
27584 log_packet_detailed("'science' field error detected");
27585 }
27586 }
27587
27588 if (BV_ISSET(fields, 23)) {
27589 log_packet_detailed(" field 'luxury' has changed");
27590
27591#ifdef FREECIV_JSON_CONNECTION
27592 field_addr.name = "luxury";
27593#endif /* FREECIV_JSON_CONNECTION */
27594 e = 0;
27595
27596 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27597
27598 if (e) {
27599 log_packet_detailed("'luxury' field error detected");
27600 }
27601 }
27602
27603 if (BV_ISSET(fields, 24)) {
27604 log_packet_detailed(" field 'infrapoints' has changed");
27605
27606#ifdef FREECIV_JSON_CONNECTION
27607 field_addr.name = "infrapoints";
27608#endif /* FREECIV_JSON_CONNECTION */
27609 e = 0;
27610
27611 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
27612
27613 if (e) {
27614 log_packet_detailed("'infrapoints' field error detected");
27615 }
27616 }
27617
27618 if (BV_ISSET(fields, 25)) {
27619 log_packet_detailed(" field 'tech_upkeep' has changed");
27620
27621#ifdef FREECIV_JSON_CONNECTION
27622 field_addr.name = "tech_upkeep";
27623#endif /* FREECIV_JSON_CONNECTION */
27624 e = 0;
27625
27626 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
27627
27628 if (e) {
27629 log_packet_detailed("'tech_upkeep' field error detected");
27630 }
27631 }
27632
27633 if (BV_ISSET(fields, 26)) {
27634 log_packet_detailed(" field 'science_cost' has changed");
27635
27636#ifdef FREECIV_JSON_CONNECTION
27637 field_addr.name = "science_cost";
27638#endif /* FREECIV_JSON_CONNECTION */
27639 e = 0;
27640
27641 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
27642
27643 if (e) {
27644 log_packet_detailed("'science_cost' field error detected");
27645 }
27646 }
27647
27648 /* field 27 is folded into the header */
27649
27650 if (BV_ISSET(fields, 28)) {
27651 log_packet_detailed(" field 'revolution_finishes' has changed");
27652
27653#ifdef FREECIV_JSON_CONNECTION
27654 field_addr.name = "revolution_finishes";
27655#endif /* FREECIV_JSON_CONNECTION */
27656 e = 0;
27657
27658 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
27659
27660 if (e) {
27661 log_packet_detailed("'revolution_finishes' field error detected");
27662 }
27663 }
27664
27665 if (BV_ISSET(fields, 29)) {
27666 log_packet_detailed(" field 'ai_skill_level' has changed");
27667
27668#ifdef FREECIV_JSON_CONNECTION
27669 field_addr.name = "ai_skill_level";
27670#endif /* FREECIV_JSON_CONNECTION */
27671 e = 0;
27672
27673 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
27674
27675 if (e) {
27676 log_packet_detailed("'ai_skill_level' field error detected");
27677 }
27678 }
27679
27680 if (BV_ISSET(fields, 30)) {
27681 log_packet_detailed(" field 'barbarian_type' has changed");
27682
27683#ifdef FREECIV_JSON_CONNECTION
27684 field_addr.name = "barbarian_type";
27685#endif /* FREECIV_JSON_CONNECTION */
27686 e = 0;
27687
27688 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
27689
27690 if (e) {
27691 log_packet_detailed("'barbarian_type' field error detected");
27692 }
27693 }
27694
27695 if (BV_ISSET(fields, 31)) {
27696 log_packet_detailed(" field 'gives_shared_vision' has changed");
27697
27698#ifdef FREECIV_JSON_CONNECTION
27699 field_addr.name = "gives_shared_vision";
27700#endif /* FREECIV_JSON_CONNECTION */
27701 e = 0;
27702
27703 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
27704
27705 if (e) {
27706 log_packet_detailed("'gives_shared_vision' field error detected");
27707 }
27708 }
27709
27710 if (BV_ISSET(fields, 32)) {
27711 log_packet_detailed(" field 'gives_shared_tiles' has changed");
27712
27713#ifdef FREECIV_JSON_CONNECTION
27714 field_addr.name = "gives_shared_tiles";
27715#endif /* FREECIV_JSON_CONNECTION */
27716 e = 0;
27717
27718 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
27719
27720 if (e) {
27721 log_packet_detailed("'gives_shared_tiles' field error detected");
27722 }
27723 }
27724
27725 if (BV_ISSET(fields, 33)) {
27726 log_packet_detailed(" field 'history' has changed");
27727
27728#ifdef FREECIV_JSON_CONNECTION
27729 field_addr.name = "history";
27730#endif /* FREECIV_JSON_CONNECTION */
27731 e = 0;
27732
27733 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
27734
27735 if (e) {
27736 log_packet_detailed("'history' field error detected");
27737 }
27738 }
27739
27740 if (BV_ISSET(fields, 34)) {
27741 log_packet_detailed(" field 'culture' has changed");
27742
27743#ifdef FREECIV_JSON_CONNECTION
27744 field_addr.name = "culture";
27745#endif /* FREECIV_JSON_CONNECTION */
27746 e = 0;
27747
27748 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
27749
27750 if (e) {
27751 log_packet_detailed("'culture' field error detected");
27752 }
27753 }
27754
27755 if (BV_ISSET(fields, 35)) {
27756 log_packet_detailed(" field 'love' has changed");
27757
27758#ifdef FREECIV_JSON_CONNECTION
27759 field_addr.name = "love";
27760#endif /* FREECIV_JSON_CONNECTION */
27761 e = 0;
27762
27763 {
27764 int i;
27765
27766#ifdef FREECIV_JSON_CONNECTION
27767 /* Create the array. */
27769
27770 /* Enter array. */
27771 field_addr.sub_location = plocation_elem_new(0);
27772#endif /* FREECIV_JSON_CONNECTION */
27773
27774 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27775#ifdef FREECIV_JSON_CONNECTION
27776 /* Next array element. */
27777 field_addr.sub_location->number = i;
27778#endif /* FREECIV_JSON_CONNECTION */
27779
27780 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
27781 }
27782
27783#ifdef FREECIV_JSON_CONNECTION
27784 /* Exit array. */
27785 FC_FREE(field_addr.sub_location);
27786#endif /* FREECIV_JSON_CONNECTION */
27787 }
27788
27789 if (e) {
27790 log_packet_detailed("'love' field error detected");
27791 }
27792 }
27793
27794 /* field 36 is folded into the header */
27795
27796 /* field 37 is folded into the header */
27797
27798 if (BV_ISSET(fields, 38)) {
27799 log_packet_detailed(" field 'color_red' has changed");
27800
27801#ifdef FREECIV_JSON_CONNECTION
27802 field_addr.name = "color_red";
27803#endif /* FREECIV_JSON_CONNECTION */
27804 e = 0;
27805
27806 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
27807
27808 if (e) {
27809 log_packet_detailed("'color_red' field error detected");
27810 }
27811 }
27812
27813 if (BV_ISSET(fields, 39)) {
27814 log_packet_detailed(" field 'color_green' has changed");
27815
27816#ifdef FREECIV_JSON_CONNECTION
27817 field_addr.name = "color_green";
27818#endif /* FREECIV_JSON_CONNECTION */
27819 e = 0;
27820
27821 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
27822
27823 if (e) {
27824 log_packet_detailed("'color_green' field error detected");
27825 }
27826 }
27827
27828 if (BV_ISSET(fields, 40)) {
27829 log_packet_detailed(" field 'color_blue' has changed");
27830
27831#ifdef FREECIV_JSON_CONNECTION
27832 field_addr.name = "color_blue";
27833#endif /* FREECIV_JSON_CONNECTION */
27834 e = 0;
27835
27836 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27837
27838 if (e) {
27839 log_packet_detailed("'color_blue' field error detected");
27840 }
27841 }
27842
27843 if (BV_ISSET(fields, 41)) {
27844 log_packet_detailed(" field 'flags' has changed");
27845
27846#ifdef FREECIV_JSON_CONNECTION
27847 field_addr.name = "flags";
27848#endif /* FREECIV_JSON_CONNECTION */
27849 e = 0;
27850
27851 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
27852
27853 if (e) {
27854 log_packet_detailed("'flags' field error detected");
27855 }
27856 }
27857
27858 if (BV_ISSET(fields, 42)) {
27859 log_packet_detailed(" field 'wonders' has changed");
27860
27861#ifdef FREECIV_JSON_CONNECTION
27862 field_addr.name = "wonders";
27863#endif /* FREECIV_JSON_CONNECTION */
27864 e = 0;
27865
27866 {
27867 int i;
27868
27870
27871#ifdef FREECIV_JSON_CONNECTION
27872 size_t count_i = 0;
27873
27874 /* Create the array. */
27875 e |= DIO_PUT(farray, &dout, &field_addr, 0);
27876
27877 /* Enter array. */
27878 field_addr.sub_location = plocation_elem_new(0);
27879#endif /* FREECIV_JSON_CONNECTION */
27880
27881 for (i = 0; i < B_LAST; i++) {
27882 differ = (old->wonders[i] != real_packet->wonders[i]);
27883
27884 if (!differ) {
27885 continue;
27886 }
27887
27888#ifdef FREECIV_JSON_CONNECTION
27889 /* Append next diff array element. */
27890 field_addr.sub_location->number = -1;
27891
27892 /* Create the diff array element. */
27893 e |= DIO_PUT(object, &dout, &field_addr);
27894
27895 /* Enter diff array element (start at the index address). */
27896 field_addr.sub_location->number = count_i++;
27897 field_addr.sub_location->sub_location = plocation_field_new("index");
27898#endif /* FREECIV_JSON_CONNECTION */
27899
27900 /* Write the index */
27901#if B_LAST <= MAX_UINT8
27902 e |= DIO_PUT(uint8, &dout, &field_addr, i);
27903#else
27904 e |= DIO_PUT(uint16, &dout, &field_addr, i);
27905#endif
27906
27907#ifdef FREECIV_JSON_CONNECTION
27908 /* Content address. */
27909 field_addr.sub_location->sub_location->name = "data";
27910#endif /* FREECIV_JSON_CONNECTION */
27911
27912 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27913
27914#ifdef FREECIV_JSON_CONNECTION
27915 /* Exit diff array element. */
27916 FC_FREE(field_addr.sub_location->sub_location);
27917#endif /* FREECIV_JSON_CONNECTION */
27918 }
27919
27920#ifdef FREECIV_JSON_CONNECTION
27921 /* Append diff array element. */
27922 field_addr.sub_location->number = -1;
27923
27924 /* Create the terminating diff array element. */
27925 e |= DIO_PUT(object, &dout, &field_addr);
27926
27927 /* Enter diff array element (start at the index address). */
27928 field_addr.sub_location->number = count_i;
27929 field_addr.sub_location->sub_location = plocation_field_new("index");
27930#endif /* FREECIV_JSON_CONNECTION */
27931
27932 /* Write the sentinel value */
27933#if B_LAST <= MAX_UINT8
27934 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
27935#else
27936 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
27937#endif
27938
27939#ifdef FREECIV_JSON_CONNECTION
27940 /* Exit diff array element. */
27941 FC_FREE(field_addr.sub_location->sub_location);
27942 /* Exit array. */
27943 FC_FREE(field_addr.sub_location);
27944#endif /* FREECIV_JSON_CONNECTION */
27945 }
27946
27947 if (e) {
27948 log_packet_detailed("'wonders' field error detected");
27949 }
27950 }
27951
27952 if (BV_ISSET(fields, 43)) {
27953 log_packet_detailed(" field 'multip_count' has changed");
27954
27955#ifdef FREECIV_JSON_CONNECTION
27956 field_addr.name = "multip_count";
27957#endif /* FREECIV_JSON_CONNECTION */
27958 e = 0;
27959
27960 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27961
27962 if (e) {
27963 log_packet_detailed("'multip_count' field error detected");
27964 }
27965 }
27966
27967 if (BV_ISSET(fields, 44)) {
27968 log_packet_detailed(" field 'multiplier' has changed");
27969
27970#ifdef FREECIV_JSON_CONNECTION
27971 field_addr.name = "multiplier";
27972#endif /* FREECIV_JSON_CONNECTION */
27973 e = 0;
27974
27975 {
27976 int i;
27977
27978#ifdef FREECIV_JSON_CONNECTION
27979 /* Create the array. */
27980 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27981
27982 /* Enter array. */
27983 field_addr.sub_location = plocation_elem_new(0);
27984#endif /* FREECIV_JSON_CONNECTION */
27985
27986 for (i = 0; i < real_packet->multip_count; i++) {
27987#ifdef FREECIV_JSON_CONNECTION
27988 /* Next array element. */
27989 field_addr.sub_location->number = i;
27990#endif /* FREECIV_JSON_CONNECTION */
27991
27992 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
27993 }
27994
27995#ifdef FREECIV_JSON_CONNECTION
27996 /* Exit array. */
27997 FC_FREE(field_addr.sub_location);
27998#endif /* FREECIV_JSON_CONNECTION */
27999 }
28000
28001 if (e) {
28002 log_packet_detailed("'multiplier' field error detected");
28003 }
28004 }
28005
28006 if (BV_ISSET(fields, 45)) {
28007 log_packet_detailed(" field 'multiplier_target' has changed");
28008
28009#ifdef FREECIV_JSON_CONNECTION
28010 field_addr.name = "multiplier_target";
28011#endif /* FREECIV_JSON_CONNECTION */
28012 e = 0;
28013
28014 {
28015 int i;
28016
28017#ifdef FREECIV_JSON_CONNECTION
28018 /* Create the array. */
28019 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28020
28021 /* Enter array. */
28022 field_addr.sub_location = plocation_elem_new(0);
28023#endif /* FREECIV_JSON_CONNECTION */
28024
28025 for (i = 0; i < real_packet->multip_count; i++) {
28026#ifdef FREECIV_JSON_CONNECTION
28027 /* Next array element. */
28028 field_addr.sub_location->number = i;
28029#endif /* FREECIV_JSON_CONNECTION */
28030
28031 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
28032 }
28033
28034#ifdef FREECIV_JSON_CONNECTION
28035 /* Exit array. */
28036 FC_FREE(field_addr.sub_location);
28037#endif /* FREECIV_JSON_CONNECTION */
28038 }
28039
28040 if (e) {
28041 log_packet_detailed("'multiplier_target' field error detected");
28042 }
28043 }
28044
28045 if (BV_ISSET(fields, 46)) {
28046 log_packet_detailed(" field 'multiplier_changed' has changed");
28047
28048#ifdef FREECIV_JSON_CONNECTION
28049 field_addr.name = "multiplier_changed";
28050#endif /* FREECIV_JSON_CONNECTION */
28051 e = 0;
28052
28053 {
28054 int i;
28055
28056#ifdef FREECIV_JSON_CONNECTION
28057 /* Create the array. */
28058 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28059
28060 /* Enter array. */
28061 field_addr.sub_location = plocation_elem_new(0);
28062#endif /* FREECIV_JSON_CONNECTION */
28063
28064 for (i = 0; i < real_packet->multip_count; i++) {
28065#ifdef FREECIV_JSON_CONNECTION
28066 /* Next array element. */
28067 field_addr.sub_location->number = i;
28068#endif /* FREECIV_JSON_CONNECTION */
28069
28070 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
28071 }
28072
28073#ifdef FREECIV_JSON_CONNECTION
28074 /* Exit array. */
28075 FC_FREE(field_addr.sub_location);
28076#endif /* FREECIV_JSON_CONNECTION */
28077 }
28078
28079 if (e) {
28080 log_packet_detailed("'multiplier_changed' field error detected");
28081 }
28082 }
28083
28084 *old = *real_packet;
28085
28086#else /* FREECIV_DELTA_PROTOCOL */
28087#ifdef FREECIV_JSON_CONNECTION
28088 field_addr.name = "name";
28089#endif /* FREECIV_JSON_CONNECTION */
28090 e = 0;
28091
28092 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
28093
28094 if (e) {
28095 log_packet_detailed("'name' field error detected");
28096 }
28097
28098#ifdef FREECIV_JSON_CONNECTION
28099 field_addr.name = "username";
28100#endif /* FREECIV_JSON_CONNECTION */
28101 e = 0;
28102
28103 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
28104
28105 if (e) {
28106 log_packet_detailed("'username' field error detected");
28107 }
28108
28109#ifdef FREECIV_JSON_CONNECTION
28110 field_addr.name = "unassigned_user";
28111#endif /* FREECIV_JSON_CONNECTION */
28112 e = 0;
28113
28114 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
28115
28116 if (e) {
28117 log_packet_detailed("'unassigned_user' field error detected");
28118 }
28119
28120#ifdef FREECIV_JSON_CONNECTION
28121 field_addr.name = "score";
28122#endif /* FREECIV_JSON_CONNECTION */
28123 e = 0;
28124
28125 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
28126
28127 if (e) {
28128 log_packet_detailed("'score' field error detected");
28129 }
28130
28131#ifdef FREECIV_JSON_CONNECTION
28132 field_addr.name = "is_male";
28133#endif /* FREECIV_JSON_CONNECTION */
28134 e = 0;
28135
28136 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
28137
28138 if (e) {
28139 log_packet_detailed("'is_male' field error detected");
28140 }
28141
28142#ifdef FREECIV_JSON_CONNECTION
28143 field_addr.name = "was_created";
28144#endif /* FREECIV_JSON_CONNECTION */
28145 e = 0;
28146
28147 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
28148
28149 if (e) {
28150 log_packet_detailed("'was_created' field error detected");
28151 }
28152
28153#ifdef FREECIV_JSON_CONNECTION
28154 field_addr.name = "government";
28155#endif /* FREECIV_JSON_CONNECTION */
28156 e = 0;
28157
28158 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
28159
28160 if (e) {
28161 log_packet_detailed("'government' field error detected");
28162 }
28163
28164#ifdef FREECIV_JSON_CONNECTION
28165 field_addr.name = "target_government";
28166#endif /* FREECIV_JSON_CONNECTION */
28167 e = 0;
28168
28169 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
28170
28171 if (e) {
28172 log_packet_detailed("'target_government' field error detected");
28173 }
28174
28175#ifdef FREECIV_JSON_CONNECTION
28176 field_addr.name = "real_embassy";
28177#endif /* FREECIV_JSON_CONNECTION */
28178 e = 0;
28179
28180 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
28181
28182 if (e) {
28183 log_packet_detailed("'real_embassy' field error detected");
28184 }
28185
28186#ifdef FREECIV_JSON_CONNECTION
28187 field_addr.name = "mood";
28188#endif /* FREECIV_JSON_CONNECTION */
28189 e = 0;
28190
28191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
28192
28193 if (e) {
28194 log_packet_detailed("'mood' field error detected");
28195 }
28196
28197#ifdef FREECIV_JSON_CONNECTION
28198 field_addr.name = "style";
28199#endif /* FREECIV_JSON_CONNECTION */
28200 e = 0;
28201
28202 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
28203
28204 if (e) {
28205 log_packet_detailed("'style' field error detected");
28206 }
28207
28208#ifdef FREECIV_JSON_CONNECTION
28209 field_addr.name = "music_style";
28210#endif /* FREECIV_JSON_CONNECTION */
28211 e = 0;
28212
28213 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
28214
28215 if (e) {
28216 log_packet_detailed("'music_style' field error detected");
28217 }
28218
28219#ifdef FREECIV_JSON_CONNECTION
28220 field_addr.name = "nation";
28221#endif /* FREECIV_JSON_CONNECTION */
28222 e = 0;
28223
28224 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
28225
28226 if (e) {
28227 log_packet_detailed("'nation' field error detected");
28228 }
28229
28230#ifdef FREECIV_JSON_CONNECTION
28231 field_addr.name = "team";
28232#endif /* FREECIV_JSON_CONNECTION */
28233 e = 0;
28234
28235 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
28236
28237 if (e) {
28238 log_packet_detailed("'team' field error detected");
28239 }
28240
28241#ifdef FREECIV_JSON_CONNECTION
28242 field_addr.name = "is_ready";
28243#endif /* FREECIV_JSON_CONNECTION */
28244 e = 0;
28245
28246 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
28247
28248 if (e) {
28249 log_packet_detailed("'is_ready' field error detected");
28250 }
28251
28252#ifdef FREECIV_JSON_CONNECTION
28253 field_addr.name = "phase_done";
28254#endif /* FREECIV_JSON_CONNECTION */
28255 e = 0;
28256
28257 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
28258
28259 if (e) {
28260 log_packet_detailed("'phase_done' field error detected");
28261 }
28262
28263#ifdef FREECIV_JSON_CONNECTION
28264 field_addr.name = "nturns_idle";
28265#endif /* FREECIV_JSON_CONNECTION */
28266 e = 0;
28267
28268 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
28269
28270 if (e) {
28271 log_packet_detailed("'nturns_idle' field error detected");
28272 }
28273
28274#ifdef FREECIV_JSON_CONNECTION
28275 field_addr.name = "turns_alive";
28276#endif /* FREECIV_JSON_CONNECTION */
28277 e = 0;
28278
28279 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
28280
28281 if (e) {
28282 log_packet_detailed("'turns_alive' field error detected");
28283 }
28284
28285#ifdef FREECIV_JSON_CONNECTION
28286 field_addr.name = "is_alive";
28287#endif /* FREECIV_JSON_CONNECTION */
28288 e = 0;
28289
28290 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
28291
28292 if (e) {
28293 log_packet_detailed("'is_alive' field error detected");
28294 }
28295
28296#ifdef FREECIV_JSON_CONNECTION
28297 field_addr.name = "autoselect_weight";
28298#endif /* FREECIV_JSON_CONNECTION */
28299 e = 0;
28300
28301 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
28302
28303 if (e) {
28304 log_packet_detailed("'autoselect_weight' field error detected");
28305 }
28306
28307#ifdef FREECIV_JSON_CONNECTION
28308 field_addr.name = "gold";
28309#endif /* FREECIV_JSON_CONNECTION */
28310 e = 0;
28311
28312 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
28313
28314 if (e) {
28315 log_packet_detailed("'gold' field error detected");
28316 }
28317
28318#ifdef FREECIV_JSON_CONNECTION
28319 field_addr.name = "tax";
28320#endif /* FREECIV_JSON_CONNECTION */
28321 e = 0;
28322
28323 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
28324
28325 if (e) {
28326 log_packet_detailed("'tax' field error detected");
28327 }
28328
28329#ifdef FREECIV_JSON_CONNECTION
28330 field_addr.name = "science";
28331#endif /* FREECIV_JSON_CONNECTION */
28332 e = 0;
28333
28334 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
28335
28336 if (e) {
28337 log_packet_detailed("'science' field error detected");
28338 }
28339
28340#ifdef FREECIV_JSON_CONNECTION
28341 field_addr.name = "luxury";
28342#endif /* FREECIV_JSON_CONNECTION */
28343 e = 0;
28344
28345 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
28346
28347 if (e) {
28348 log_packet_detailed("'luxury' field error detected");
28349 }
28350
28351#ifdef FREECIV_JSON_CONNECTION
28352 field_addr.name = "infrapoints";
28353#endif /* FREECIV_JSON_CONNECTION */
28354 e = 0;
28355
28356 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
28357
28358 if (e) {
28359 log_packet_detailed("'infrapoints' field error detected");
28360 }
28361
28362#ifdef FREECIV_JSON_CONNECTION
28363 field_addr.name = "tech_upkeep";
28364#endif /* FREECIV_JSON_CONNECTION */
28365 e = 0;
28366
28367 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
28368
28369 if (e) {
28370 log_packet_detailed("'tech_upkeep' field error detected");
28371 }
28372
28373#ifdef FREECIV_JSON_CONNECTION
28374 field_addr.name = "science_cost";
28375#endif /* FREECIV_JSON_CONNECTION */
28376 e = 0;
28377
28378 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
28379
28380 if (e) {
28381 log_packet_detailed("'science_cost' field error detected");
28382 }
28383
28384#ifdef FREECIV_JSON_CONNECTION
28385 field_addr.name = "is_connected";
28386#endif /* FREECIV_JSON_CONNECTION */
28387 e = 0;
28388
28389 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
28390
28391 if (e) {
28392 log_packet_detailed("'is_connected' field error detected");
28393 }
28394
28395#ifdef FREECIV_JSON_CONNECTION
28396 field_addr.name = "revolution_finishes";
28397#endif /* FREECIV_JSON_CONNECTION */
28398 e = 0;
28399
28400 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
28401
28402 if (e) {
28403 log_packet_detailed("'revolution_finishes' field error detected");
28404 }
28405
28406#ifdef FREECIV_JSON_CONNECTION
28407 field_addr.name = "ai_skill_level";
28408#endif /* FREECIV_JSON_CONNECTION */
28409 e = 0;
28410
28411 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
28412
28413 if (e) {
28414 log_packet_detailed("'ai_skill_level' field error detected");
28415 }
28416
28417#ifdef FREECIV_JSON_CONNECTION
28418 field_addr.name = "barbarian_type";
28419#endif /* FREECIV_JSON_CONNECTION */
28420 e = 0;
28421
28422 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
28423
28424 if (e) {
28425 log_packet_detailed("'barbarian_type' field error detected");
28426 }
28427
28428#ifdef FREECIV_JSON_CONNECTION
28429 field_addr.name = "gives_shared_vision";
28430#endif /* FREECIV_JSON_CONNECTION */
28431 e = 0;
28432
28433 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
28434
28435 if (e) {
28436 log_packet_detailed("'gives_shared_vision' field error detected");
28437 }
28438
28439#ifdef FREECIV_JSON_CONNECTION
28440 field_addr.name = "gives_shared_tiles";
28441#endif /* FREECIV_JSON_CONNECTION */
28442 e = 0;
28443
28444 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
28445
28446 if (e) {
28447 log_packet_detailed("'gives_shared_tiles' field error detected");
28448 }
28449
28450#ifdef FREECIV_JSON_CONNECTION
28451 field_addr.name = "history";
28452#endif /* FREECIV_JSON_CONNECTION */
28453 e = 0;
28454
28455 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
28456
28457 if (e) {
28458 log_packet_detailed("'history' field error detected");
28459 }
28460
28461#ifdef FREECIV_JSON_CONNECTION
28462 field_addr.name = "culture";
28463#endif /* FREECIV_JSON_CONNECTION */
28464 e = 0;
28465
28466 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
28467
28468 if (e) {
28469 log_packet_detailed("'culture' field error detected");
28470 }
28471
28472#ifdef FREECIV_JSON_CONNECTION
28473 field_addr.name = "love";
28474#endif /* FREECIV_JSON_CONNECTION */
28475 e = 0;
28476
28477 {
28478 int i;
28479
28480#ifdef FREECIV_JSON_CONNECTION
28481 /* Create the array. */
28483
28484 /* Enter array. */
28485 field_addr.sub_location = plocation_elem_new(0);
28486#endif /* FREECIV_JSON_CONNECTION */
28487
28488 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
28489#ifdef FREECIV_JSON_CONNECTION
28490 /* Next array element. */
28491 field_addr.sub_location->number = i;
28492#endif /* FREECIV_JSON_CONNECTION */
28493
28494 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
28495 }
28496
28497#ifdef FREECIV_JSON_CONNECTION
28498 /* Exit array. */
28499 FC_FREE(field_addr.sub_location);
28500#endif /* FREECIV_JSON_CONNECTION */
28501 }
28502
28503 if (e) {
28504 log_packet_detailed("'love' field error detected");
28505 }
28506
28507#ifdef FREECIV_JSON_CONNECTION
28508 field_addr.name = "color_valid";
28509#endif /* FREECIV_JSON_CONNECTION */
28510 e = 0;
28511
28512 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
28513
28514 if (e) {
28515 log_packet_detailed("'color_valid' field error detected");
28516 }
28517
28518#ifdef FREECIV_JSON_CONNECTION
28519 field_addr.name = "color_changeable";
28520#endif /* FREECIV_JSON_CONNECTION */
28521 e = 0;
28522
28523 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
28524
28525 if (e) {
28526 log_packet_detailed("'color_changeable' field error detected");
28527 }
28528
28529#ifdef FREECIV_JSON_CONNECTION
28530 field_addr.name = "color_red";
28531#endif /* FREECIV_JSON_CONNECTION */
28532 e = 0;
28533
28534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
28535
28536 if (e) {
28537 log_packet_detailed("'color_red' field error detected");
28538 }
28539
28540#ifdef FREECIV_JSON_CONNECTION
28541 field_addr.name = "color_green";
28542#endif /* FREECIV_JSON_CONNECTION */
28543 e = 0;
28544
28545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
28546
28547 if (e) {
28548 log_packet_detailed("'color_green' field error detected");
28549 }
28550
28551#ifdef FREECIV_JSON_CONNECTION
28552 field_addr.name = "color_blue";
28553#endif /* FREECIV_JSON_CONNECTION */
28554 e = 0;
28555
28556 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
28557
28558 if (e) {
28559 log_packet_detailed("'color_blue' field error detected");
28560 }
28561
28562#ifdef FREECIV_JSON_CONNECTION
28563 field_addr.name = "flags";
28564#endif /* FREECIV_JSON_CONNECTION */
28565 e = 0;
28566
28567 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
28568
28569 if (e) {
28570 log_packet_detailed("'flags' field error detected");
28571 }
28572
28573#ifdef FREECIV_JSON_CONNECTION
28574 field_addr.name = "wonders";
28575#endif /* FREECIV_JSON_CONNECTION */
28576 e = 0;
28577
28578 {
28579 int i;
28580
28581#ifdef FREECIV_JSON_CONNECTION
28582 /* Create the array. */
28583 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
28584
28585 /* Enter array. */
28586 field_addr.sub_location = plocation_elem_new(0);
28587#endif /* FREECIV_JSON_CONNECTION */
28588
28589 for (i = 0; i < B_LAST; i++) {
28590#ifdef FREECIV_JSON_CONNECTION
28591 /* Next array element. */
28592 field_addr.sub_location->number = i;
28593#endif /* FREECIV_JSON_CONNECTION */
28594
28595 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
28596 }
28597
28598#ifdef FREECIV_JSON_CONNECTION
28599 /* Exit array. */
28600 FC_FREE(field_addr.sub_location);
28601#endif /* FREECIV_JSON_CONNECTION */
28602 }
28603
28604 if (e) {
28605 log_packet_detailed("'wonders' field error detected");
28606 }
28607
28608#ifdef FREECIV_JSON_CONNECTION
28609 field_addr.name = "multip_count";
28610#endif /* FREECIV_JSON_CONNECTION */
28611 e = 0;
28612
28613 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
28614
28615 if (e) {
28616 log_packet_detailed("'multip_count' field error detected");
28617 }
28618
28619#ifdef FREECIV_JSON_CONNECTION
28620 field_addr.name = "multiplier";
28621#endif /* FREECIV_JSON_CONNECTION */
28622 e = 0;
28623
28624 {
28625 int i;
28626
28627#ifdef FREECIV_JSON_CONNECTION
28628 /* Create the array. */
28629 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28630
28631 /* Enter array. */
28632 field_addr.sub_location = plocation_elem_new(0);
28633#endif /* FREECIV_JSON_CONNECTION */
28634
28635 for (i = 0; i < real_packet->multip_count; i++) {
28636#ifdef FREECIV_JSON_CONNECTION
28637 /* Next array element. */
28638 field_addr.sub_location->number = i;
28639#endif /* FREECIV_JSON_CONNECTION */
28640
28641 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
28642 }
28643
28644#ifdef FREECIV_JSON_CONNECTION
28645 /* Exit array. */
28646 FC_FREE(field_addr.sub_location);
28647#endif /* FREECIV_JSON_CONNECTION */
28648 }
28649
28650 if (e) {
28651 log_packet_detailed("'multiplier' field error detected");
28652 }
28653
28654#ifdef FREECIV_JSON_CONNECTION
28655 field_addr.name = "multiplier_target";
28656#endif /* FREECIV_JSON_CONNECTION */
28657 e = 0;
28658
28659 {
28660 int i;
28661
28662#ifdef FREECIV_JSON_CONNECTION
28663 /* Create the array. */
28664 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28665
28666 /* Enter array. */
28667 field_addr.sub_location = plocation_elem_new(0);
28668#endif /* FREECIV_JSON_CONNECTION */
28669
28670 for (i = 0; i < real_packet->multip_count; i++) {
28671#ifdef FREECIV_JSON_CONNECTION
28672 /* Next array element. */
28673 field_addr.sub_location->number = i;
28674#endif /* FREECIV_JSON_CONNECTION */
28675
28676 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
28677 }
28678
28679#ifdef FREECIV_JSON_CONNECTION
28680 /* Exit array. */
28681 FC_FREE(field_addr.sub_location);
28682#endif /* FREECIV_JSON_CONNECTION */
28683 }
28684
28685 if (e) {
28686 log_packet_detailed("'multiplier_target' field error detected");
28687 }
28688
28689#ifdef FREECIV_JSON_CONNECTION
28690 field_addr.name = "multiplier_changed";
28691#endif /* FREECIV_JSON_CONNECTION */
28692 e = 0;
28693
28694 {
28695 int i;
28696
28697#ifdef FREECIV_JSON_CONNECTION
28698 /* Create the array. */
28699 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28700
28701 /* Enter array. */
28702 field_addr.sub_location = plocation_elem_new(0);
28703#endif /* FREECIV_JSON_CONNECTION */
28704
28705 for (i = 0; i < real_packet->multip_count; i++) {
28706#ifdef FREECIV_JSON_CONNECTION
28707 /* Next array element. */
28708 field_addr.sub_location->number = i;
28709#endif /* FREECIV_JSON_CONNECTION */
28710
28711 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
28712 }
28713
28714#ifdef FREECIV_JSON_CONNECTION
28715 /* Exit array. */
28716 FC_FREE(field_addr.sub_location);
28717#endif /* FREECIV_JSON_CONNECTION */
28718 }
28719
28720 if (e) {
28721 log_packet_detailed("'multiplier_changed' field error detected");
28722 }
28723#endif /* FREECIV_DELTA_PROTOCOL */
28724
28726}
28727
28729{
28730 if (!pc->used) {
28731 log_error("WARNING: trying to send data to the closed connection %s",
28733 return -1;
28734 }
28735 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_INFO].packet != nullptr, -1,
28736 "Handler for PACKET_PLAYER_INFO not installed");
28737 return pc->phs.handlers->send[PACKET_PLAYER_INFO].packet(pc, packet);
28738}
28739
28741{
28742 memset(packet, 0, sizeof(*packet));
28743}
28744
28745#define free_packet_player_phase_done(_packet) (void) 0
28746#define destroy_packet_player_phase_done free
28747
28748#ifdef FREECIV_DELTA_PROTOCOL
28749#define hash_packet_player_phase_done_100 hash_const
28750#define cmp_packet_player_phase_done_100 cmp_const
28752#endif /* FREECIV_DELTA_PROTOCOL */
28753
28755{
28756#define FREE_PACKET_STRUCT(_packet) free_packet_player_phase_done(_packet)
28758
28759#ifdef FREECIV_JSON_CONNECTION
28760 struct plocation field_addr;
28761 {
28762 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28765 }
28766#endif /* FREECIV_JSON_CONNECTION */
28767
28768 log_packet_detailed("packet_player_phase_done_100: got info about ()");
28769
28770#ifdef FREECIV_DELTA_PROTOCOL
28773 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PHASE_DONE;
28774
28775 if (nullptr == *hash) {
28777 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28778 }
28779
28780 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28781 *real_packet = *old;
28782 } else {
28783 /* packet is already initialized empty */
28784 log_packet_detailed(" no old info");
28785 }
28786
28787#ifdef FREECIV_JSON_CONNECTION
28788 field_addr.name = "fields";
28789#endif /* FREECIV_JSON_CONNECTION */
28790 DIO_BV_GET(&din, &field_addr, fields);
28791
28792 if (BV_ISSET(fields, 0)) {
28793 log_packet_detailed(" got field 'turn'");
28794
28795#ifdef FREECIV_JSON_CONNECTION
28796 field_addr.name = "turn";
28797#endif /* FREECIV_JSON_CONNECTION */
28798
28799 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28801 }
28802 }
28803
28804 if (nullptr == old) {
28805 old = fc_malloc(sizeof(*old));
28807 *old = *real_packet;
28809 } else {
28810 *old = *real_packet;
28811 }
28812
28813#else /* FREECIV_DELTA_PROTOCOL */
28814#ifdef FREECIV_JSON_CONNECTION
28815 field_addr.name = "turn";
28816#endif /* FREECIV_JSON_CONNECTION */
28817
28818 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28820 }
28821#endif /* FREECIV_DELTA_PROTOCOL */
28822
28824#undef FREE_PACKET_STRUCT
28825}
28826
28828{
28829 const struct packet_player_phase_done *real_packet = packet;
28830 int e;
28832
28833 log_packet_detailed("packet_player_phase_done_100: sending info about ()");
28834
28835#ifdef FREECIV_DELTA_PROTOCOL
28838 bool differ;
28839 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PHASE_DONE;
28840
28841 if (nullptr == *hash) {
28843 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28844 }
28845 BV_CLR_ALL(fields);
28846
28847 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28848 old = fc_malloc(sizeof(*old));
28849 /* temporary bitcopy just to insert correctly */
28850 *old = *real_packet;
28853 }
28854
28855 differ = (old->turn != real_packet->turn);
28856 if (differ) {
28857 BV_SET(fields, 0);
28858 }
28859#endif /* FREECIV_DELTA_PROTOCOL */
28860
28861#ifdef FREECIV_JSON_CONNECTION
28862 struct plocation field_addr;
28863 {
28864 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28867 }
28868#endif /* FREECIV_JSON_CONNECTION */
28869
28870#ifdef FREECIV_DELTA_PROTOCOL
28871#ifdef FREECIV_JSON_CONNECTION
28872 field_addr.name = "fields";
28873#endif /* FREECIV_JSON_CONNECTION */
28874 e = 0;
28875 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28876 if (e) {
28877 log_packet_detailed("fields bitvector error detected");
28878 }
28879
28880 if (BV_ISSET(fields, 0)) {
28881 log_packet_detailed(" field 'turn' has changed");
28882
28883#ifdef FREECIV_JSON_CONNECTION
28884 field_addr.name = "turn";
28885#endif /* FREECIV_JSON_CONNECTION */
28886 e = 0;
28887
28888 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28889
28890 if (e) {
28891 log_packet_detailed("'turn' field error detected");
28892 }
28893 }
28894
28895 *old = *real_packet;
28896
28897#else /* FREECIV_DELTA_PROTOCOL */
28898#ifdef FREECIV_JSON_CONNECTION
28899 field_addr.name = "turn";
28900#endif /* FREECIV_JSON_CONNECTION */
28901 e = 0;
28902
28903 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28904
28905 if (e) {
28906 log_packet_detailed("'turn' field error detected");
28907 }
28908#endif /* FREECIV_DELTA_PROTOCOL */
28909
28911}
28912
28914{
28915 if (!pc->used) {
28916 log_error("WARNING: trying to send data to the closed connection %s",
28918 return -1;
28919 }
28920 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet != nullptr, -1,
28921 "Handler for PACKET_PLAYER_PHASE_DONE not installed");
28922 return pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet(pc, packet);
28923}
28924
28926{
28927 struct packet_player_phase_done packet, *real_packet = &packet;
28928
28930
28932}
28933
28934static inline void init_packet_player_rates(struct packet_player_rates *packet)
28935{
28936 memset(packet, 0, sizeof(*packet));
28937}
28938
28939#define free_packet_player_rates(_packet) (void) 0
28940#define destroy_packet_player_rates free
28941
28942#ifdef FREECIV_DELTA_PROTOCOL
28943#define hash_packet_player_rates_100 hash_const
28944#define cmp_packet_player_rates_100 cmp_const
28946#endif /* FREECIV_DELTA_PROTOCOL */
28947
28949{
28950#define FREE_PACKET_STRUCT(_packet) free_packet_player_rates(_packet)
28952
28953#ifdef FREECIV_JSON_CONNECTION
28954 struct plocation field_addr;
28955 {
28956 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28959 }
28960#endif /* FREECIV_JSON_CONNECTION */
28961
28962 log_packet_detailed("packet_player_rates_100: got info about ()");
28963
28964#ifdef FREECIV_DELTA_PROTOCOL
28966 struct packet_player_rates *old;
28967 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RATES;
28968
28969 if (nullptr == *hash) {
28971 nullptr, nullptr, nullptr, destroy_packet_player_rates);
28972 }
28973
28974 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28975 *real_packet = *old;
28976 } else {
28977 /* packet is already initialized empty */
28978 log_packet_detailed(" no old info");
28979 }
28980
28981#ifdef FREECIV_JSON_CONNECTION
28982 field_addr.name = "fields";
28983#endif /* FREECIV_JSON_CONNECTION */
28984 DIO_BV_GET(&din, &field_addr, fields);
28985
28986 if (BV_ISSET(fields, 0)) {
28987 log_packet_detailed(" got field 'tax'");
28988
28989#ifdef FREECIV_JSON_CONNECTION
28990 field_addr.name = "tax";
28991#endif /* FREECIV_JSON_CONNECTION */
28992
28993 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
28995 }
28996 }
28997
28998 if (BV_ISSET(fields, 1)) {
28999 log_packet_detailed(" got field 'luxury'");
29000
29001#ifdef FREECIV_JSON_CONNECTION
29002 field_addr.name = "luxury";
29003#endif /* FREECIV_JSON_CONNECTION */
29004
29005 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
29007 }
29008 }
29009
29010 if (BV_ISSET(fields, 2)) {
29011 log_packet_detailed(" got field 'science'");
29012
29013#ifdef FREECIV_JSON_CONNECTION
29014 field_addr.name = "science";
29015#endif /* FREECIV_JSON_CONNECTION */
29016
29017 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
29019 }
29020 }
29021
29022 if (nullptr == old) {
29023 old = fc_malloc(sizeof(*old));
29025 *old = *real_packet;
29027 } else {
29028 *old = *real_packet;
29029 }
29030
29031#else /* FREECIV_DELTA_PROTOCOL */
29032#ifdef FREECIV_JSON_CONNECTION
29033 field_addr.name = "tax";
29034#endif /* FREECIV_JSON_CONNECTION */
29035
29036 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
29038 }
29039
29040#ifdef FREECIV_JSON_CONNECTION
29041 field_addr.name = "luxury";
29042#endif /* FREECIV_JSON_CONNECTION */
29043
29044 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
29046 }
29047
29048#ifdef FREECIV_JSON_CONNECTION
29049 field_addr.name = "science";
29050#endif /* FREECIV_JSON_CONNECTION */
29051
29052 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
29054 }
29055#endif /* FREECIV_DELTA_PROTOCOL */
29056
29058#undef FREE_PACKET_STRUCT
29059}
29060
29061static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
29062{
29063 const struct packet_player_rates *real_packet = packet;
29064 int e;
29066
29067 log_packet_detailed("packet_player_rates_100: sending info about ()");
29068
29069#ifdef FREECIV_DELTA_PROTOCOL
29071 struct packet_player_rates *old;
29072 bool differ;
29073 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RATES;
29074
29075 if (nullptr == *hash) {
29077 nullptr, nullptr, nullptr, destroy_packet_player_rates);
29078 }
29079 BV_CLR_ALL(fields);
29080
29081 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29082 old = fc_malloc(sizeof(*old));
29083 /* temporary bitcopy just to insert correctly */
29084 *old = *real_packet;
29087 }
29088
29089 differ = (old->tax != real_packet->tax);
29090 if (differ) {
29091 BV_SET(fields, 0);
29092 }
29093
29094 differ = (old->luxury != real_packet->luxury);
29095 if (differ) {
29096 BV_SET(fields, 1);
29097 }
29098
29099 differ = (old->science != real_packet->science);
29100 if (differ) {
29101 BV_SET(fields, 2);
29102 }
29103#endif /* FREECIV_DELTA_PROTOCOL */
29104
29105#ifdef FREECIV_JSON_CONNECTION
29106 struct plocation field_addr;
29107 {
29108 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29111 }
29112#endif /* FREECIV_JSON_CONNECTION */
29113
29114#ifdef FREECIV_DELTA_PROTOCOL
29115#ifdef FREECIV_JSON_CONNECTION
29116 field_addr.name = "fields";
29117#endif /* FREECIV_JSON_CONNECTION */
29118 e = 0;
29119 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29120 if (e) {
29121 log_packet_detailed("fields bitvector error detected");
29122 }
29123
29124 if (BV_ISSET(fields, 0)) {
29125 log_packet_detailed(" field 'tax' has changed");
29126
29127#ifdef FREECIV_JSON_CONNECTION
29128 field_addr.name = "tax";
29129#endif /* FREECIV_JSON_CONNECTION */
29130 e = 0;
29131
29132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29133
29134 if (e) {
29135 log_packet_detailed("'tax' field error detected");
29136 }
29137 }
29138
29139 if (BV_ISSET(fields, 1)) {
29140 log_packet_detailed(" field 'luxury' has changed");
29141
29142#ifdef FREECIV_JSON_CONNECTION
29143 field_addr.name = "luxury";
29144#endif /* FREECIV_JSON_CONNECTION */
29145 e = 0;
29146
29147 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29148
29149 if (e) {
29150 log_packet_detailed("'luxury' field error detected");
29151 }
29152 }
29153
29154 if (BV_ISSET(fields, 2)) {
29155 log_packet_detailed(" field 'science' has changed");
29156
29157#ifdef FREECIV_JSON_CONNECTION
29158 field_addr.name = "science";
29159#endif /* FREECIV_JSON_CONNECTION */
29160 e = 0;
29161
29162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29163
29164 if (e) {
29165 log_packet_detailed("'science' field error detected");
29166 }
29167 }
29168
29169 *old = *real_packet;
29170
29171#else /* FREECIV_DELTA_PROTOCOL */
29172#ifdef FREECIV_JSON_CONNECTION
29173 field_addr.name = "tax";
29174#endif /* FREECIV_JSON_CONNECTION */
29175 e = 0;
29176
29177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29178
29179 if (e) {
29180 log_packet_detailed("'tax' field error detected");
29181 }
29182
29183#ifdef FREECIV_JSON_CONNECTION
29184 field_addr.name = "luxury";
29185#endif /* FREECIV_JSON_CONNECTION */
29186 e = 0;
29187
29188 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29189
29190 if (e) {
29191 log_packet_detailed("'luxury' field error detected");
29192 }
29193
29194#ifdef FREECIV_JSON_CONNECTION
29195 field_addr.name = "science";
29196#endif /* FREECIV_JSON_CONNECTION */
29197 e = 0;
29198
29199 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29200
29201 if (e) {
29202 log_packet_detailed("'science' field error detected");
29203 }
29204#endif /* FREECIV_DELTA_PROTOCOL */
29205
29207}
29208
29210{
29211 if (!pc->used) {
29212 log_error("WARNING: trying to send data to the closed connection %s",
29214 return -1;
29215 }
29216 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RATES].packet != nullptr, -1,
29217 "Handler for PACKET_PLAYER_RATES not installed");
29218 return pc->phs.handlers->send[PACKET_PLAYER_RATES].packet(pc, packet);
29219}
29220
29221int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
29222{
29223 struct packet_player_rates packet, *real_packet = &packet;
29224
29225 real_packet->tax = tax;
29226 real_packet->luxury = luxury;
29227 real_packet->science = science;
29228
29230}
29231
29233{
29234 memset(packet, 0, sizeof(*packet));
29235}
29236
29237#define free_packet_player_change_government(_packet) (void) 0
29238#define destroy_packet_player_change_government free
29239
29240#ifdef FREECIV_DELTA_PROTOCOL
29241#define hash_packet_player_change_government_100 hash_const
29242#define cmp_packet_player_change_government_100 cmp_const
29244#endif /* FREECIV_DELTA_PROTOCOL */
29245
29247{
29248#define FREE_PACKET_STRUCT(_packet) free_packet_player_change_government(_packet)
29250
29251#ifdef FREECIV_JSON_CONNECTION
29252 struct plocation field_addr;
29253 {
29254 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29257 }
29258#endif /* FREECIV_JSON_CONNECTION */
29259
29260 log_packet_detailed("packet_player_change_government_100: got info about ()");
29261
29262#ifdef FREECIV_DELTA_PROTOCOL
29265 struct genhash **hash = pc->phs.received + PACKET_PLAYER_CHANGE_GOVERNMENT;
29266
29267 if (nullptr == *hash) {
29269 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29270 }
29271
29272 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29273 *real_packet = *old;
29274 } else {
29275 /* packet is already initialized empty */
29276 log_packet_detailed(" no old info");
29277 }
29278
29279#ifdef FREECIV_JSON_CONNECTION
29280 field_addr.name = "fields";
29281#endif /* FREECIV_JSON_CONNECTION */
29282 DIO_BV_GET(&din, &field_addr, fields);
29283
29284 if (BV_ISSET(fields, 0)) {
29285 log_packet_detailed(" got field 'government'");
29286
29287#ifdef FREECIV_JSON_CONNECTION
29288 field_addr.name = "government";
29289#endif /* FREECIV_JSON_CONNECTION */
29290
29291 {
29292 int readin;
29293
29294 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29296 }
29297 real_packet->government = readin;
29298 }
29299 }
29300
29301 if (nullptr == old) {
29302 old = fc_malloc(sizeof(*old));
29304 *old = *real_packet;
29306 } else {
29307 *old = *real_packet;
29308 }
29309
29310#else /* FREECIV_DELTA_PROTOCOL */
29311#ifdef FREECIV_JSON_CONNECTION
29312 field_addr.name = "government";
29313#endif /* FREECIV_JSON_CONNECTION */
29314
29315 {
29316 int readin;
29317
29318 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29320 }
29321 real_packet->government = readin;
29322 }
29323#endif /* FREECIV_DELTA_PROTOCOL */
29324
29326#undef FREE_PACKET_STRUCT
29327}
29328
29330{
29331 const struct packet_player_change_government *real_packet = packet;
29332 int e;
29334
29335 log_packet_detailed("packet_player_change_government_100: sending info about ()");
29336
29337#ifdef FREECIV_DELTA_PROTOCOL
29340 bool differ;
29341 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_CHANGE_GOVERNMENT;
29342
29343 if (nullptr == *hash) {
29345 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29346 }
29347 BV_CLR_ALL(fields);
29348
29349 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29350 old = fc_malloc(sizeof(*old));
29351 /* temporary bitcopy just to insert correctly */
29352 *old = *real_packet;
29355 }
29356
29357 differ = (old->government != real_packet->government);
29358 if (differ) {
29359 BV_SET(fields, 0);
29360 }
29361#endif /* FREECIV_DELTA_PROTOCOL */
29362
29363#ifdef FREECIV_JSON_CONNECTION
29364 struct plocation field_addr;
29365 {
29366 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29369 }
29370#endif /* FREECIV_JSON_CONNECTION */
29371
29372#ifdef FREECIV_DELTA_PROTOCOL
29373#ifdef FREECIV_JSON_CONNECTION
29374 field_addr.name = "fields";
29375#endif /* FREECIV_JSON_CONNECTION */
29376 e = 0;
29377 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29378 if (e) {
29379 log_packet_detailed("fields bitvector error detected");
29380 }
29381
29382 if (BV_ISSET(fields, 0)) {
29383 log_packet_detailed(" field 'government' has changed");
29384
29385#ifdef FREECIV_JSON_CONNECTION
29386 field_addr.name = "government";
29387#endif /* FREECIV_JSON_CONNECTION */
29388 e = 0;
29389
29390 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29391
29392 if (e) {
29393 log_packet_detailed("'government' field error detected");
29394 }
29395 }
29396
29397 *old = *real_packet;
29398
29399#else /* FREECIV_DELTA_PROTOCOL */
29400#ifdef FREECIV_JSON_CONNECTION
29401 field_addr.name = "government";
29402#endif /* FREECIV_JSON_CONNECTION */
29403 e = 0;
29404
29405 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29406
29407 if (e) {
29408 log_packet_detailed("'government' field error detected");
29409 }
29410#endif /* FREECIV_DELTA_PROTOCOL */
29411
29413}
29414
29416{
29417 if (!pc->used) {
29418 log_error("WARNING: trying to send data to the closed connection %s",
29420 return -1;
29421 }
29422 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet != nullptr, -1,
29423 "Handler for PACKET_PLAYER_CHANGE_GOVERNMENT not installed");
29424 return pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet(pc, packet);
29425}
29426
29435
29437{
29438 memset(packet, 0, sizeof(*packet));
29439}
29440
29441#define free_packet_player_place_infra(_packet) (void) 0
29442#define destroy_packet_player_place_infra free
29443
29444#ifdef FREECIV_DELTA_PROTOCOL
29445#define hash_packet_player_place_infra_100 hash_const
29446#define cmp_packet_player_place_infra_100 cmp_const
29448#endif /* FREECIV_DELTA_PROTOCOL */
29449
29451{
29452#define FREE_PACKET_STRUCT(_packet) free_packet_player_place_infra(_packet)
29454
29455#ifdef FREECIV_JSON_CONNECTION
29456 struct plocation field_addr;
29457 {
29458 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29461 }
29462#endif /* FREECIV_JSON_CONNECTION */
29463
29464 log_packet_detailed("packet_player_place_infra_100: got info about ()");
29465
29466#ifdef FREECIV_DELTA_PROTOCOL
29469 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PLACE_INFRA;
29470
29471 if (nullptr == *hash) {
29473 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29474 }
29475
29476 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29477 *real_packet = *old;
29478 } else {
29479 /* packet is already initialized empty */
29480 log_packet_detailed(" no old info");
29481 }
29482
29483#ifdef FREECIV_JSON_CONNECTION
29484 field_addr.name = "fields";
29485#endif /* FREECIV_JSON_CONNECTION */
29486 DIO_BV_GET(&din, &field_addr, fields);
29487
29488 if (BV_ISSET(fields, 0)) {
29489 log_packet_detailed(" got field 'tile'");
29490
29491#ifdef FREECIV_JSON_CONNECTION
29492 field_addr.name = "tile";
29493#endif /* FREECIV_JSON_CONNECTION */
29494
29495 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29497 }
29498 }
29499
29500 if (BV_ISSET(fields, 1)) {
29501 log_packet_detailed(" got field 'extra'");
29502
29503#ifdef FREECIV_JSON_CONNECTION
29504 field_addr.name = "extra";
29505#endif /* FREECIV_JSON_CONNECTION */
29506
29507 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29509 }
29510 }
29511
29512 if (nullptr == old) {
29513 old = fc_malloc(sizeof(*old));
29515 *old = *real_packet;
29517 } else {
29518 *old = *real_packet;
29519 }
29520
29521#else /* FREECIV_DELTA_PROTOCOL */
29522#ifdef FREECIV_JSON_CONNECTION
29523 field_addr.name = "tile";
29524#endif /* FREECIV_JSON_CONNECTION */
29525
29526 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29528 }
29529
29530#ifdef FREECIV_JSON_CONNECTION
29531 field_addr.name = "extra";
29532#endif /* FREECIV_JSON_CONNECTION */
29533
29534 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29536 }
29537#endif /* FREECIV_DELTA_PROTOCOL */
29538
29540#undef FREE_PACKET_STRUCT
29541}
29542
29544{
29545 const struct packet_player_place_infra *real_packet = packet;
29546 int e;
29548
29549 log_packet_detailed("packet_player_place_infra_100: sending info about ()");
29550
29551#ifdef FREECIV_DELTA_PROTOCOL
29554 bool differ;
29555 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PLACE_INFRA;
29556
29557 if (nullptr == *hash) {
29559 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29560 }
29561 BV_CLR_ALL(fields);
29562
29563 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29564 old = fc_malloc(sizeof(*old));
29565 /* temporary bitcopy just to insert correctly */
29566 *old = *real_packet;
29569 }
29570
29571 differ = (old->tile != real_packet->tile);
29572 if (differ) {
29573 BV_SET(fields, 0);
29574 }
29575
29576 differ = (old->extra != real_packet->extra);
29577 if (differ) {
29578 BV_SET(fields, 1);
29579 }
29580#endif /* FREECIV_DELTA_PROTOCOL */
29581
29582#ifdef FREECIV_JSON_CONNECTION
29583 struct plocation field_addr;
29584 {
29585 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29588 }
29589#endif /* FREECIV_JSON_CONNECTION */
29590
29591#ifdef FREECIV_DELTA_PROTOCOL
29592#ifdef FREECIV_JSON_CONNECTION
29593 field_addr.name = "fields";
29594#endif /* FREECIV_JSON_CONNECTION */
29595 e = 0;
29596 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29597 if (e) {
29598 log_packet_detailed("fields bitvector error detected");
29599 }
29600
29601 if (BV_ISSET(fields, 0)) {
29602 log_packet_detailed(" field 'tile' has changed");
29603
29604#ifdef FREECIV_JSON_CONNECTION
29605 field_addr.name = "tile";
29606#endif /* FREECIV_JSON_CONNECTION */
29607 e = 0;
29608
29609 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29610
29611 if (e) {
29612 log_packet_detailed("'tile' field error detected");
29613 }
29614 }
29615
29616 if (BV_ISSET(fields, 1)) {
29617 log_packet_detailed(" field 'extra' has changed");
29618
29619#ifdef FREECIV_JSON_CONNECTION
29620 field_addr.name = "extra";
29621#endif /* FREECIV_JSON_CONNECTION */
29622 e = 0;
29623
29624 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29625
29626 if (e) {
29627 log_packet_detailed("'extra' field error detected");
29628 }
29629 }
29630
29631 *old = *real_packet;
29632
29633#else /* FREECIV_DELTA_PROTOCOL */
29634#ifdef FREECIV_JSON_CONNECTION
29635 field_addr.name = "tile";
29636#endif /* FREECIV_JSON_CONNECTION */
29637 e = 0;
29638
29639 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29640
29641 if (e) {
29642 log_packet_detailed("'tile' field error detected");
29643 }
29644
29645#ifdef FREECIV_JSON_CONNECTION
29646 field_addr.name = "extra";
29647#endif /* FREECIV_JSON_CONNECTION */
29648 e = 0;
29649
29650 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29651
29652 if (e) {
29653 log_packet_detailed("'extra' field error detected");
29654 }
29655#endif /* FREECIV_DELTA_PROTOCOL */
29656
29658}
29659
29661{
29662 if (!pc->used) {
29663 log_error("WARNING: trying to send data to the closed connection %s",
29665 return -1;
29666 }
29667 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet != nullptr, -1,
29668 "Handler for PACKET_PLAYER_PLACE_INFRA not installed");
29669 return pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet(pc, packet);
29670}
29671
29673{
29674 struct packet_player_place_infra packet, *real_packet = &packet;
29675
29677 real_packet->extra = extra;
29678
29680}
29681
29683{
29684 memset(packet, 0, sizeof(*packet));
29685}
29686
29687#define free_packet_player_attribute_block(_packet) (void) 0
29688#define destroy_packet_player_attribute_block free
29689
29691{
29692#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_block(_packet)
29694
29695 log_packet_detailed("packet_player_attribute_block_100: got info about ()");
29696
29697 real_packet->__dummy = 0xff;
29698
29700#undef FREE_PACKET_STRUCT
29701}
29702
29704{
29706
29707 log_packet_detailed("packet_player_attribute_block_100: sending info about ()");
29708
29710}
29711
29713{
29714 if (!pc->used) {
29715 log_error("WARNING: trying to send data to the closed connection %s",
29717 return -1;
29718 }
29719 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet != nullptr, -1,
29720 "Handler for PACKET_PLAYER_ATTRIBUTE_BLOCK not installed");
29721 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet(pc);
29722}
29723
29725{
29726 memset(packet, 0, sizeof(*packet));
29727}
29728
29729#define free_packet_player_attribute_chunk(_packet) (void) 0
29730#define destroy_packet_player_attribute_chunk free
29731
29732#ifdef FREECIV_DELTA_PROTOCOL
29734{
29735 const struct packet_player_attribute_chunk *key = (const struct packet_player_attribute_chunk *) vkey;
29736 genhash_val_t result = 0;
29737
29738 result += key->offset;
29739
29740 result &= 0xFFFFFFFF;
29741 return result;
29742}
29743
29744static bool cmp_packet_player_attribute_chunk_100(const void *vkey1, const void *vkey2)
29745{
29748 bool differ;
29749
29750 differ = (old->offset != real_packet->offset);
29751
29752 return !differ;
29753}
29755#endif /* FREECIV_DELTA_PROTOCOL */
29756
29758{
29759#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_chunk(_packet)
29761
29762#ifdef FREECIV_JSON_CONNECTION
29763 struct plocation field_addr;
29764 {
29765 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29768 }
29769#endif /* FREECIV_JSON_CONNECTION */
29770
29771#ifdef FREECIV_JSON_CONNECTION
29772 field_addr.name = "offset";
29773#endif /* FREECIV_JSON_CONNECTION */
29774
29775 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
29777 }
29778
29779 log_packet_detailed("packet_player_attribute_chunk_100: got info about (%d)",
29780 real_packet->offset);
29781
29782#ifdef FREECIV_DELTA_PROTOCOL
29785 struct genhash **hash = pc->phs.received + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29786
29787 if (nullptr == *hash) {
29789 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29790 }
29791
29792 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29793 *real_packet = *old;
29794 } else {
29795 /* packet is already initialized empty */
29796 log_packet_detailed(" no old info");
29797 }
29798
29799#ifdef FREECIV_JSON_CONNECTION
29800 field_addr.name = "fields";
29801#endif /* FREECIV_JSON_CONNECTION */
29802 DIO_BV_GET(&din, &field_addr, fields);
29803
29804 if (BV_ISSET(fields, 0)) {
29805 log_packet_detailed(" got field 'total_length'");
29806
29807#ifdef FREECIV_JSON_CONNECTION
29808 field_addr.name = "total_length";
29809#endif /* FREECIV_JSON_CONNECTION */
29810
29811 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29812 RECEIVE_PACKET_FIELD_ERROR(total_length);
29813 }
29814 }
29815
29816 if (BV_ISSET(fields, 1)) {
29817 log_packet_detailed(" got field 'chunk_length'");
29818
29819#ifdef FREECIV_JSON_CONNECTION
29820 field_addr.name = "chunk_length";
29821#endif /* FREECIV_JSON_CONNECTION */
29822
29823 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29824 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29825 }
29826 }
29827
29828 if (BV_ISSET(fields, 2)) {
29829 log_packet_detailed(" got field 'data'");
29830
29831#ifdef FREECIV_JSON_CONNECTION
29832 field_addr.name = "data";
29833#endif /* FREECIV_JSON_CONNECTION */
29834
29835 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29836 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29837 }
29838 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29840 }
29841 }
29842
29843 if (nullptr == old) {
29844 old = fc_malloc(sizeof(*old));
29846 *old = *real_packet;
29848 } else {
29849 *old = *real_packet;
29850 }
29851
29852#else /* FREECIV_DELTA_PROTOCOL */
29853#ifdef FREECIV_JSON_CONNECTION
29854 field_addr.name = "total_length";
29855#endif /* FREECIV_JSON_CONNECTION */
29856
29857 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29858 RECEIVE_PACKET_FIELD_ERROR(total_length);
29859 }
29860
29861#ifdef FREECIV_JSON_CONNECTION
29862 field_addr.name = "chunk_length";
29863#endif /* FREECIV_JSON_CONNECTION */
29864
29865 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29866 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29867 }
29868
29869#ifdef FREECIV_JSON_CONNECTION
29870 field_addr.name = "data";
29871#endif /* FREECIV_JSON_CONNECTION */
29872
29873 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29874 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29875 }
29876 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29878 }
29879#endif /* FREECIV_DELTA_PROTOCOL */
29880
29882#undef FREE_PACKET_STRUCT
29883}
29884
29886{
29887 /* copy packet for pre-send */
29890 int e;
29892
29893 log_packet_detailed("packet_player_attribute_chunk_100: sending info about (%d)",
29894 real_packet->offset);
29895
29897
29898#ifdef FREECIV_DELTA_PROTOCOL
29901 bool differ;
29902 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29903
29904 if (nullptr == *hash) {
29906 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29907 }
29908 BV_CLR_ALL(fields);
29909
29910 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29911 old = fc_malloc(sizeof(*old));
29912 /* temporary bitcopy just to insert correctly */
29913 *old = *real_packet;
29916 }
29917
29918 differ = (old->total_length != real_packet->total_length);
29919 if (differ) {
29920 BV_SET(fields, 0);
29921 }
29922
29923 differ = (old->chunk_length != real_packet->chunk_length);
29924 if (differ) {
29925 BV_SET(fields, 1);
29926 }
29927
29928 differ = ((old->chunk_length != real_packet->chunk_length)
29929 || (memcmp(old->data, real_packet->data, real_packet->chunk_length) != 0));
29930 if (differ) {
29931 BV_SET(fields, 2);
29932 }
29933#endif /* FREECIV_DELTA_PROTOCOL */
29934
29935#ifdef FREECIV_JSON_CONNECTION
29936 struct plocation field_addr;
29937 {
29938 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29941 }
29942#endif /* FREECIV_JSON_CONNECTION */
29943
29944#ifdef FREECIV_JSON_CONNECTION
29945 field_addr.name = "offset";
29946#endif /* FREECIV_JSON_CONNECTION */
29947 e = 0;
29948
29949 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
29950
29951 if (e) {
29952 log_packet_detailed("'offset' field error detected");
29953 }
29954
29955#ifdef FREECIV_DELTA_PROTOCOL
29956#ifdef FREECIV_JSON_CONNECTION
29957 field_addr.name = "fields";
29958#endif /* FREECIV_JSON_CONNECTION */
29959 e = 0;
29960 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29961 if (e) {
29962 log_packet_detailed("fields bitvector error detected");
29963 }
29964
29965 if (BV_ISSET(fields, 0)) {
29966 log_packet_detailed(" field 'total_length' has changed");
29967
29968#ifdef FREECIV_JSON_CONNECTION
29969 field_addr.name = "total_length";
29970#endif /* FREECIV_JSON_CONNECTION */
29971 e = 0;
29972
29973 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
29974
29975 if (e) {
29976 log_packet_detailed("'total_length' field error detected");
29977 }
29978 }
29979
29980 if (BV_ISSET(fields, 1)) {
29981 log_packet_detailed(" field 'chunk_length' has changed");
29982
29983#ifdef FREECIV_JSON_CONNECTION
29984 field_addr.name = "chunk_length";
29985#endif /* FREECIV_JSON_CONNECTION */
29986 e = 0;
29987
29988 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
29989
29990 if (e) {
29991 log_packet_detailed("'chunk_length' field error detected");
29992 }
29993 }
29994
29995 if (BV_ISSET(fields, 2)) {
29996 log_packet_detailed(" field 'data' has changed");
29997
29998#ifdef FREECIV_JSON_CONNECTION
29999 field_addr.name = "data";
30000#endif /* FREECIV_JSON_CONNECTION */
30001 e = 0;
30002
30003 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
30004
30005 if (e) {
30006 log_packet_detailed("'data' field error detected");
30007 }
30008 }
30009
30010 *old = *real_packet;
30011
30012#else /* FREECIV_DELTA_PROTOCOL */
30013#ifdef FREECIV_JSON_CONNECTION
30014 field_addr.name = "total_length";
30015#endif /* FREECIV_JSON_CONNECTION */
30016 e = 0;
30017
30018 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
30019
30020 if (e) {
30021 log_packet_detailed("'total_length' field error detected");
30022 }
30023
30024#ifdef FREECIV_JSON_CONNECTION
30025 field_addr.name = "chunk_length";
30026#endif /* FREECIV_JSON_CONNECTION */
30027 e = 0;
30028
30029 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
30030
30031 if (e) {
30032 log_packet_detailed("'chunk_length' field error detected");
30033 }
30034
30035#ifdef FREECIV_JSON_CONNECTION
30036 field_addr.name = "data";
30037#endif /* FREECIV_JSON_CONNECTION */
30038 e = 0;
30039
30040 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
30041
30042 if (e) {
30043 log_packet_detailed("'data' field error detected");
30044 }
30045#endif /* FREECIV_DELTA_PROTOCOL */
30046
30048}
30049
30051{
30052 if (!pc->used) {
30053 log_error("WARNING: trying to send data to the closed connection %s",
30055 return -1;
30056 }
30057 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet != nullptr, -1,
30058 "Handler for PACKET_PLAYER_ATTRIBUTE_CHUNK not installed");
30059 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet(pc, packet);
30060}
30061
30063{
30064 memset(packet, 0, sizeof(*packet));
30065}
30066
30067#define free_packet_player_diplstate(_packet) (void) 0
30068#define destroy_packet_player_diplstate free
30069
30070#ifdef FREECIV_DELTA_PROTOCOL
30072{
30073 const struct packet_player_diplstate *key = (const struct packet_player_diplstate *) vkey;
30074 genhash_val_t result = 0;
30075
30076 result += key->diplstate_id;
30077
30078 result &= 0xFFFFFFFF;
30079 return result;
30080}
30081
30082static bool cmp_packet_player_diplstate_100(const void *vkey1, const void *vkey2)
30083{
30084 const struct packet_player_diplstate *old = (const struct packet_player_diplstate *) vkey1;
30085 const struct packet_player_diplstate *real_packet = (const struct packet_player_diplstate *) vkey2;
30086 bool differ;
30087
30088 differ = (old->diplstate_id != real_packet->diplstate_id);
30089
30090 return !differ;
30091}
30093#endif /* FREECIV_DELTA_PROTOCOL */
30094
30096{
30097#define FREE_PACKET_STRUCT(_packet) free_packet_player_diplstate(_packet)
30099
30100#ifdef FREECIV_JSON_CONNECTION
30101 struct plocation field_addr;
30102 {
30103 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30106 }
30107#endif /* FREECIV_JSON_CONNECTION */
30108
30109#ifdef FREECIV_JSON_CONNECTION
30110 field_addr.name = "diplstate_id";
30111#endif /* FREECIV_JSON_CONNECTION */
30112
30113 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
30114 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
30115 }
30116
30117 log_packet_detailed("packet_player_diplstate_100: got info about (%d)",
30118 real_packet->diplstate_id);
30119
30120#ifdef FREECIV_DELTA_PROTOCOL
30123 struct genhash **hash = pc->phs.received + PACKET_PLAYER_DIPLSTATE;
30124
30125 if (nullptr == *hash) {
30127 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30128 }
30129
30130 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30131 *real_packet = *old;
30132 } else {
30133 /* packet is already initialized empty */
30134 log_packet_detailed(" no old info");
30135 }
30136
30137#ifdef FREECIV_JSON_CONNECTION
30138 field_addr.name = "fields";
30139#endif /* FREECIV_JSON_CONNECTION */
30140 DIO_BV_GET(&din, &field_addr, fields);
30141
30142 if (BV_ISSET(fields, 0)) {
30143 log_packet_detailed(" got field 'plr1'");
30144
30145#ifdef FREECIV_JSON_CONNECTION
30146 field_addr.name = "plr1";
30147#endif /* FREECIV_JSON_CONNECTION */
30148
30149 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30151 }
30152 }
30153
30154 if (BV_ISSET(fields, 1)) {
30155 log_packet_detailed(" got field 'plr2'");
30156
30157#ifdef FREECIV_JSON_CONNECTION
30158 field_addr.name = "plr2";
30159#endif /* FREECIV_JSON_CONNECTION */
30160
30161 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30163 }
30164 }
30165
30166 if (BV_ISSET(fields, 2)) {
30167 log_packet_detailed(" got field 'type'");
30168
30169#ifdef FREECIV_JSON_CONNECTION
30170 field_addr.name = "type";
30171#endif /* FREECIV_JSON_CONNECTION */
30172
30173 {
30174 int readin;
30175
30176 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30178 }
30179 real_packet->type = readin;
30180 }
30181 }
30182
30183 if (BV_ISSET(fields, 3)) {
30184 log_packet_detailed(" got field 'turns_left'");
30185
30186#ifdef FREECIV_JSON_CONNECTION
30187 field_addr.name = "turns_left";
30188#endif /* FREECIV_JSON_CONNECTION */
30189
30190 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30191 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30192 }
30193 }
30194
30195 if (BV_ISSET(fields, 4)) {
30196 log_packet_detailed(" got field 'has_reason_to_cancel'");
30197
30198#ifdef FREECIV_JSON_CONNECTION
30199 field_addr.name = "has_reason_to_cancel";
30200#endif /* FREECIV_JSON_CONNECTION */
30201
30202 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30203 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30204 }
30205 }
30206
30207 if (BV_ISSET(fields, 5)) {
30208 log_packet_detailed(" got field 'contact_turns_left'");
30209
30210#ifdef FREECIV_JSON_CONNECTION
30211 field_addr.name = "contact_turns_left";
30212#endif /* FREECIV_JSON_CONNECTION */
30213
30214 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30215 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30216 }
30217 }
30218
30219 if (nullptr == old) {
30220 old = fc_malloc(sizeof(*old));
30222 *old = *real_packet;
30224 } else {
30225 *old = *real_packet;
30226 }
30227
30228#else /* FREECIV_DELTA_PROTOCOL */
30229#ifdef FREECIV_JSON_CONNECTION
30230 field_addr.name = "plr1";
30231#endif /* FREECIV_JSON_CONNECTION */
30232
30233 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30235 }
30236
30237#ifdef FREECIV_JSON_CONNECTION
30238 field_addr.name = "plr2";
30239#endif /* FREECIV_JSON_CONNECTION */
30240
30241 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30243 }
30244
30245#ifdef FREECIV_JSON_CONNECTION
30246 field_addr.name = "type";
30247#endif /* FREECIV_JSON_CONNECTION */
30248
30249 {
30250 int readin;
30251
30252 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30254 }
30255 real_packet->type = readin;
30256 }
30257
30258#ifdef FREECIV_JSON_CONNECTION
30259 field_addr.name = "turns_left";
30260#endif /* FREECIV_JSON_CONNECTION */
30261
30262 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30263 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30264 }
30265
30266#ifdef FREECIV_JSON_CONNECTION
30267 field_addr.name = "has_reason_to_cancel";
30268#endif /* FREECIV_JSON_CONNECTION */
30269
30270 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30271 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30272 }
30273
30274#ifdef FREECIV_JSON_CONNECTION
30275 field_addr.name = "contact_turns_left";
30276#endif /* FREECIV_JSON_CONNECTION */
30277
30278 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30279 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30280 }
30281#endif /* FREECIV_DELTA_PROTOCOL */
30282
30284#undef FREE_PACKET_STRUCT
30285}
30286
30288{
30289 const struct packet_player_diplstate *real_packet = packet;
30290 int e;
30292
30293 log_packet_detailed("packet_player_diplstate_100: sending info about (%d)",
30294 real_packet->diplstate_id);
30295
30296#ifdef FREECIV_DELTA_PROTOCOL
30299 bool differ;
30300 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_DIPLSTATE;
30301
30302 if (nullptr == *hash) {
30304 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30305 }
30306 BV_CLR_ALL(fields);
30307
30308 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30309 old = fc_malloc(sizeof(*old));
30310 /* temporary bitcopy just to insert correctly */
30311 *old = *real_packet;
30314 }
30315
30316 differ = (old->plr1 != real_packet->plr1);
30317 if (differ) {
30318 BV_SET(fields, 0);
30319 }
30320
30321 differ = (old->plr2 != real_packet->plr2);
30322 if (differ) {
30323 BV_SET(fields, 1);
30324 }
30325
30326 differ = (old->type != real_packet->type);
30327 if (differ) {
30328 BV_SET(fields, 2);
30329 }
30330
30331 differ = (old->turns_left != real_packet->turns_left);
30332 if (differ) {
30333 BV_SET(fields, 3);
30334 }
30335
30336 differ = (old->has_reason_to_cancel != real_packet->has_reason_to_cancel);
30337 if (differ) {
30338 BV_SET(fields, 4);
30339 }
30340
30341 differ = (old->contact_turns_left != real_packet->contact_turns_left);
30342 if (differ) {
30343 BV_SET(fields, 5);
30344 }
30345#endif /* FREECIV_DELTA_PROTOCOL */
30346
30347#ifdef FREECIV_JSON_CONNECTION
30348 struct plocation field_addr;
30349 {
30350 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30353 }
30354#endif /* FREECIV_JSON_CONNECTION */
30355
30356#ifdef FREECIV_JSON_CONNECTION
30357 field_addr.name = "diplstate_id";
30358#endif /* FREECIV_JSON_CONNECTION */
30359 e = 0;
30360
30361 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
30362
30363 if (e) {
30364 log_packet_detailed("'diplstate_id' field error detected");
30365 }
30366
30367#ifdef FREECIV_DELTA_PROTOCOL
30368#ifdef FREECIV_JSON_CONNECTION
30369 field_addr.name = "fields";
30370#endif /* FREECIV_JSON_CONNECTION */
30371 e = 0;
30372 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30373 if (e) {
30374 log_packet_detailed("fields bitvector error detected");
30375 }
30376
30377 if (BV_ISSET(fields, 0)) {
30378 log_packet_detailed(" field 'plr1' has changed");
30379
30380#ifdef FREECIV_JSON_CONNECTION
30381 field_addr.name = "plr1";
30382#endif /* FREECIV_JSON_CONNECTION */
30383 e = 0;
30384
30385 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30386
30387 if (e) {
30388 log_packet_detailed("'plr1' field error detected");
30389 }
30390 }
30391
30392 if (BV_ISSET(fields, 1)) {
30393 log_packet_detailed(" field 'plr2' has changed");
30394
30395#ifdef FREECIV_JSON_CONNECTION
30396 field_addr.name = "plr2";
30397#endif /* FREECIV_JSON_CONNECTION */
30398 e = 0;
30399
30400 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30401
30402 if (e) {
30403 log_packet_detailed("'plr2' field error detected");
30404 }
30405 }
30406
30407 if (BV_ISSET(fields, 2)) {
30408 log_packet_detailed(" field 'type' has changed");
30409
30410#ifdef FREECIV_JSON_CONNECTION
30411 field_addr.name = "type";
30412#endif /* FREECIV_JSON_CONNECTION */
30413 e = 0;
30414
30415 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30416
30417 if (e) {
30418 log_packet_detailed("'type' field error detected");
30419 }
30420 }
30421
30422 if (BV_ISSET(fields, 3)) {
30423 log_packet_detailed(" field 'turns_left' has changed");
30424
30425#ifdef FREECIV_JSON_CONNECTION
30426 field_addr.name = "turns_left";
30427#endif /* FREECIV_JSON_CONNECTION */
30428 e = 0;
30429
30430 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30431
30432 if (e) {
30433 log_packet_detailed("'turns_left' field error detected");
30434 }
30435 }
30436
30437 if (BV_ISSET(fields, 4)) {
30438 log_packet_detailed(" field 'has_reason_to_cancel' has changed");
30439
30440#ifdef FREECIV_JSON_CONNECTION
30441 field_addr.name = "has_reason_to_cancel";
30442#endif /* FREECIV_JSON_CONNECTION */
30443 e = 0;
30444
30445 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
30446
30447 if (e) {
30448 log_packet_detailed("'has_reason_to_cancel' field error detected");
30449 }
30450 }
30451
30452 if (BV_ISSET(fields, 5)) {
30453 log_packet_detailed(" field 'contact_turns_left' has changed");
30454
30455#ifdef FREECIV_JSON_CONNECTION
30456 field_addr.name = "contact_turns_left";
30457#endif /* FREECIV_JSON_CONNECTION */
30458 e = 0;
30459
30460 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30461
30462 if (e) {
30463 log_packet_detailed("'contact_turns_left' field error detected");
30464 }
30465 }
30466
30467 *old = *real_packet;
30468
30469#else /* FREECIV_DELTA_PROTOCOL */
30470#ifdef FREECIV_JSON_CONNECTION
30471 field_addr.name = "plr1";
30472#endif /* FREECIV_JSON_CONNECTION */
30473 e = 0;
30474
30475 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30476
30477 if (e) {
30478 log_packet_detailed("'plr1' field error detected");
30479 }
30480
30481#ifdef FREECIV_JSON_CONNECTION
30482 field_addr.name = "plr2";
30483#endif /* FREECIV_JSON_CONNECTION */
30484 e = 0;
30485
30486 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30487
30488 if (e) {
30489 log_packet_detailed("'plr2' field error detected");
30490 }
30491
30492#ifdef FREECIV_JSON_CONNECTION
30493 field_addr.name = "type";
30494#endif /* FREECIV_JSON_CONNECTION */
30495 e = 0;
30496
30497 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30498
30499 if (e) {
30500 log_packet_detailed("'type' field error detected");
30501 }
30502
30503#ifdef FREECIV_JSON_CONNECTION
30504 field_addr.name = "turns_left";
30505#endif /* FREECIV_JSON_CONNECTION */
30506 e = 0;
30507
30508 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30509
30510 if (e) {
30511 log_packet_detailed("'turns_left' field error detected");
30512 }
30513
30514#ifdef FREECIV_JSON_CONNECTION
30515 field_addr.name = "has_reason_to_cancel";
30516#endif /* FREECIV_JSON_CONNECTION */
30517 e = 0;
30518
30519 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
30520
30521 if (e) {
30522 log_packet_detailed("'has_reason_to_cancel' field error detected");
30523 }
30524
30525#ifdef FREECIV_JSON_CONNECTION
30526 field_addr.name = "contact_turns_left";
30527#endif /* FREECIV_JSON_CONNECTION */
30528 e = 0;
30529
30530 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30531
30532 if (e) {
30533 log_packet_detailed("'contact_turns_left' field error detected");
30534 }
30535#endif /* FREECIV_DELTA_PROTOCOL */
30536
30538}
30539
30541{
30542 if (!pc->used) {
30543 log_error("WARNING: trying to send data to the closed connection %s",
30545 return -1;
30546 }
30547 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet != nullptr, -1,
30548 "Handler for PACKET_PLAYER_DIPLSTATE not installed");
30549 return pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet(pc, packet);
30550}
30551
30553{
30554 memset(packet, 0, sizeof(*packet));
30555}
30556
30557#define free_packet_player_multiplier(_packet) (void) 0
30558#define destroy_packet_player_multiplier free
30559
30560#ifdef FREECIV_DELTA_PROTOCOL
30561#define hash_packet_player_multiplier_100 hash_const
30562#define cmp_packet_player_multiplier_100 cmp_const
30564#endif /* FREECIV_DELTA_PROTOCOL */
30565
30567{
30568#define FREE_PACKET_STRUCT(_packet) free_packet_player_multiplier(_packet)
30570
30571#ifdef FREECIV_JSON_CONNECTION
30572 struct plocation field_addr;
30573 {
30574 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30577 }
30578#endif /* FREECIV_JSON_CONNECTION */
30579
30580 log_packet_detailed("packet_player_multiplier_100: got info about ()");
30581
30582#ifdef FREECIV_DELTA_PROTOCOL
30585 struct genhash **hash = pc->phs.received + PACKET_PLAYER_MULTIPLIER;
30586
30587 if (nullptr == *hash) {
30589 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30590 }
30591
30592 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30593 *real_packet = *old;
30594 } else {
30595 /* packet is already initialized empty */
30596 log_packet_detailed(" no old info");
30597 }
30598
30599#ifdef FREECIV_JSON_CONNECTION
30600 field_addr.name = "fields";
30601#endif /* FREECIV_JSON_CONNECTION */
30602 DIO_BV_GET(&din, &field_addr, fields);
30603
30604 if (BV_ISSET(fields, 0)) {
30605 log_packet_detailed(" got field 'count'");
30606
30607#ifdef FREECIV_JSON_CONNECTION
30608 field_addr.name = "count";
30609#endif /* FREECIV_JSON_CONNECTION */
30610
30611 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30613 }
30614 }
30615
30616 if (BV_ISSET(fields, 1)) {
30617 log_packet_detailed(" got field 'multipliers'");
30618
30619#ifdef FREECIV_JSON_CONNECTION
30620 field_addr.name = "multipliers";
30621#endif /* FREECIV_JSON_CONNECTION */
30622
30623 {
30624 int i;
30625
30626 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30627 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30628 }
30629
30630#ifdef FREECIV_JSON_CONNECTION
30631 /* Enter array. */
30632 field_addr.sub_location = plocation_elem_new(0);
30633#endif /* FREECIV_JSON_CONNECTION */
30634
30635 for (i = 0; i < real_packet->count; i++) {
30636#ifdef FREECIV_JSON_CONNECTION
30637 /* Next array element */
30638 field_addr.sub_location->number = i;
30639#endif /* FREECIV_JSON_CONNECTION */
30640
30641 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30643 }
30644 }
30645
30646#ifdef FREECIV_JSON_CONNECTION
30647 /* Exit array. */
30648 FC_FREE(field_addr.sub_location);
30649#endif /* FREECIV_JSON_CONNECTION */
30650 }
30651 }
30652
30653 if (nullptr == old) {
30654 old = fc_malloc(sizeof(*old));
30656 *old = *real_packet;
30658 } else {
30659 *old = *real_packet;
30660 }
30661
30662#else /* FREECIV_DELTA_PROTOCOL */
30663#ifdef FREECIV_JSON_CONNECTION
30664 field_addr.name = "count";
30665#endif /* FREECIV_JSON_CONNECTION */
30666
30667 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30669 }
30670
30671#ifdef FREECIV_JSON_CONNECTION
30672 field_addr.name = "multipliers";
30673#endif /* FREECIV_JSON_CONNECTION */
30674
30675 {
30676 int i;
30677
30678 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30679 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30680 }
30681
30682#ifdef FREECIV_JSON_CONNECTION
30683 /* Enter array. */
30684 field_addr.sub_location = plocation_elem_new(0);
30685#endif /* FREECIV_JSON_CONNECTION */
30686
30687 for (i = 0; i < real_packet->count; i++) {
30688#ifdef FREECIV_JSON_CONNECTION
30689 /* Next array element */
30690 field_addr.sub_location->number = i;
30691#endif /* FREECIV_JSON_CONNECTION */
30692
30693 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30695 }
30696 }
30697
30698#ifdef FREECIV_JSON_CONNECTION
30699 /* Exit array. */
30700 FC_FREE(field_addr.sub_location);
30701#endif /* FREECIV_JSON_CONNECTION */
30702 }
30703#endif /* FREECIV_DELTA_PROTOCOL */
30704
30706#undef FREE_PACKET_STRUCT
30707}
30708
30710{
30711 const struct packet_player_multiplier *real_packet = packet;
30712 int e;
30714
30715 log_packet_detailed("packet_player_multiplier_100: sending info about ()");
30716
30717#ifdef FREECIV_DELTA_PROTOCOL
30720 bool differ;
30721 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_MULTIPLIER;
30722
30723 if (nullptr == *hash) {
30725 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30726 }
30727 BV_CLR_ALL(fields);
30728
30729 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30730 old = fc_malloc(sizeof(*old));
30731 /* temporary bitcopy just to insert correctly */
30732 *old = *real_packet;
30735 }
30736
30737 differ = (old->count != real_packet->count);
30738 if (differ) {
30739 BV_SET(fields, 0);
30740 }
30741
30742 differ = (old->count != real_packet->count);
30743 if (!differ) {
30744 int i;
30745
30746 for (i = 0; i < old->count; i++) {
30747 differ = (old->multipliers[i] != real_packet->multipliers[i]);
30748 if (differ) {
30749 break;
30750 }
30751 }
30752 }
30753 if (differ) {
30754 BV_SET(fields, 1);
30755 }
30756#endif /* FREECIV_DELTA_PROTOCOL */
30757
30758#ifdef FREECIV_JSON_CONNECTION
30759 struct plocation field_addr;
30760 {
30761 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30764 }
30765#endif /* FREECIV_JSON_CONNECTION */
30766
30767#ifdef FREECIV_DELTA_PROTOCOL
30768#ifdef FREECIV_JSON_CONNECTION
30769 field_addr.name = "fields";
30770#endif /* FREECIV_JSON_CONNECTION */
30771 e = 0;
30772 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30773 if (e) {
30774 log_packet_detailed("fields bitvector error detected");
30775 }
30776
30777 if (BV_ISSET(fields, 0)) {
30778 log_packet_detailed(" field 'count' has changed");
30779
30780#ifdef FREECIV_JSON_CONNECTION
30781 field_addr.name = "count";
30782#endif /* FREECIV_JSON_CONNECTION */
30783 e = 0;
30784
30785 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30786
30787 if (e) {
30788 log_packet_detailed("'count' field error detected");
30789 }
30790 }
30791
30792 if (BV_ISSET(fields, 1)) {
30793 log_packet_detailed(" field 'multipliers' has changed");
30794
30795#ifdef FREECIV_JSON_CONNECTION
30796 field_addr.name = "multipliers";
30797#endif /* FREECIV_JSON_CONNECTION */
30798 e = 0;
30799
30800 {
30801 int i;
30802
30803#ifdef FREECIV_JSON_CONNECTION
30804 /* Create the array. */
30805 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30806
30807 /* Enter array. */
30808 field_addr.sub_location = plocation_elem_new(0);
30809#endif /* FREECIV_JSON_CONNECTION */
30810
30811 for (i = 0; i < real_packet->count; i++) {
30812#ifdef FREECIV_JSON_CONNECTION
30813 /* Next array element. */
30814 field_addr.sub_location->number = i;
30815#endif /* FREECIV_JSON_CONNECTION */
30816
30817 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30818 }
30819
30820#ifdef FREECIV_JSON_CONNECTION
30821 /* Exit array. */
30822 FC_FREE(field_addr.sub_location);
30823#endif /* FREECIV_JSON_CONNECTION */
30824 }
30825
30826 if (e) {
30827 log_packet_detailed("'multipliers' field error detected");
30828 }
30829 }
30830
30831 *old = *real_packet;
30832
30833#else /* FREECIV_DELTA_PROTOCOL */
30834#ifdef FREECIV_JSON_CONNECTION
30835 field_addr.name = "count";
30836#endif /* FREECIV_JSON_CONNECTION */
30837 e = 0;
30838
30839 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30840
30841 if (e) {
30842 log_packet_detailed("'count' field error detected");
30843 }
30844
30845#ifdef FREECIV_JSON_CONNECTION
30846 field_addr.name = "multipliers";
30847#endif /* FREECIV_JSON_CONNECTION */
30848 e = 0;
30849
30850 {
30851 int i;
30852
30853#ifdef FREECIV_JSON_CONNECTION
30854 /* Create the array. */
30855 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30856
30857 /* Enter array. */
30858 field_addr.sub_location = plocation_elem_new(0);
30859#endif /* FREECIV_JSON_CONNECTION */
30860
30861 for (i = 0; i < real_packet->count; i++) {
30862#ifdef FREECIV_JSON_CONNECTION
30863 /* Next array element. */
30864 field_addr.sub_location->number = i;
30865#endif /* FREECIV_JSON_CONNECTION */
30866
30867 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30868 }
30869
30870#ifdef FREECIV_JSON_CONNECTION
30871 /* Exit array. */
30872 FC_FREE(field_addr.sub_location);
30873#endif /* FREECIV_JSON_CONNECTION */
30874 }
30875
30876 if (e) {
30877 log_packet_detailed("'multipliers' field error detected");
30878 }
30879#endif /* FREECIV_DELTA_PROTOCOL */
30880
30882}
30883
30885{
30886 if (!pc->used) {
30887 log_error("WARNING: trying to send data to the closed connection %s",
30889 return -1;
30890 }
30891 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet != nullptr, -1,
30892 "Handler for PACKET_PLAYER_MULTIPLIER not installed");
30893 return pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet(pc, packet);
30894}
30895
30896static inline void init_packet_research_info(struct packet_research_info *packet)
30897{
30898 memset(packet, 0, sizeof(*packet));
30899}
30900
30901#define free_packet_research_info(_packet) (void) 0
30902#define destroy_packet_research_info free
30903
30904#ifdef FREECIV_DELTA_PROTOCOL
30906{
30907 const struct packet_research_info *key = (const struct packet_research_info *) vkey;
30908 genhash_val_t result = 0;
30909
30910 result += key->id;
30911
30912 result &= 0xFFFFFFFF;
30913 return result;
30914}
30915
30916static bool cmp_packet_research_info_100(const void *vkey1, const void *vkey2)
30917{
30918 const struct packet_research_info *old = (const struct packet_research_info *) vkey1;
30919 const struct packet_research_info *real_packet = (const struct packet_research_info *) vkey2;
30920 bool differ;
30921
30922 differ = (old->id != real_packet->id);
30923
30924 return !differ;
30925}
30927#endif /* FREECIV_DELTA_PROTOCOL */
30928
30930{
30931#define FREE_PACKET_STRUCT(_packet) free_packet_research_info(_packet)
30933
30934#ifdef FREECIV_JSON_CONNECTION
30935 struct plocation field_addr;
30936 {
30937 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30940 }
30941#endif /* FREECIV_JSON_CONNECTION */
30942
30943#ifdef FREECIV_JSON_CONNECTION
30944 field_addr.name = "id";
30945#endif /* FREECIV_JSON_CONNECTION */
30946
30947 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
30949 }
30950
30951 log_packet_detailed("packet_research_info_100: got info about (%d)",
30952 real_packet->id);
30953
30954#ifdef FREECIV_DELTA_PROTOCOL
30956 struct packet_research_info *old;
30957 struct genhash **hash = pc->phs.received + PACKET_RESEARCH_INFO;
30958
30959 if (nullptr == *hash) {
30961 nullptr, nullptr, nullptr, destroy_packet_research_info);
30962 }
30963
30964 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30965 *real_packet = *old;
30966 } else {
30967 /* packet is already initialized empty */
30968 log_packet_detailed(" no old info");
30969 }
30970
30971#ifdef FREECIV_JSON_CONNECTION
30972 field_addr.name = "fields";
30973#endif /* FREECIV_JSON_CONNECTION */
30974 DIO_BV_GET(&din, &field_addr, fields);
30975
30976 if (BV_ISSET(fields, 0)) {
30977 log_packet_detailed(" got field 'techs_researched'");
30978
30979#ifdef FREECIV_JSON_CONNECTION
30980 field_addr.name = "techs_researched";
30981#endif /* FREECIV_JSON_CONNECTION */
30982
30983 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
30984 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
30985 }
30986 }
30987
30988 if (BV_ISSET(fields, 1)) {
30989 log_packet_detailed(" got field 'future_tech'");
30990
30991#ifdef FREECIV_JSON_CONNECTION
30992 field_addr.name = "future_tech";
30993#endif /* FREECIV_JSON_CONNECTION */
30994
30995 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
30996 RECEIVE_PACKET_FIELD_ERROR(future_tech);
30997 }
30998 }
30999
31000 if (BV_ISSET(fields, 2)) {
31001 log_packet_detailed(" got field 'researching'");
31002
31003#ifdef FREECIV_JSON_CONNECTION
31004 field_addr.name = "researching";
31005#endif /* FREECIV_JSON_CONNECTION */
31006
31007 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
31008 RECEIVE_PACKET_FIELD_ERROR(researching);
31009 }
31010 }
31011
31012 if (BV_ISSET(fields, 3)) {
31013 log_packet_detailed(" got field 'researching_cost'");
31014
31015#ifdef FREECIV_JSON_CONNECTION
31016 field_addr.name = "researching_cost";
31017#endif /* FREECIV_JSON_CONNECTION */
31018
31019 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
31020 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
31021 }
31022 }
31023
31024 if (BV_ISSET(fields, 4)) {
31025 log_packet_detailed(" got field 'bulbs_researched'");
31026
31027#ifdef FREECIV_JSON_CONNECTION
31028 field_addr.name = "bulbs_researched";
31029#endif /* FREECIV_JSON_CONNECTION */
31030
31031 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
31032 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
31033 }
31034 }
31035
31036 if (BV_ISSET(fields, 5)) {
31037 log_packet_detailed(" got field 'tech_goal'");
31038
31039#ifdef FREECIV_JSON_CONNECTION
31040 field_addr.name = "tech_goal";
31041#endif /* FREECIV_JSON_CONNECTION */
31042
31043 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
31044 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
31045 }
31046 }
31047
31048 if (BV_ISSET(fields, 6)) {
31049 log_packet_detailed(" got field 'total_bulbs_prod'");
31050
31051#ifdef FREECIV_JSON_CONNECTION
31052 field_addr.name = "total_bulbs_prod";
31053#endif /* FREECIV_JSON_CONNECTION */
31054
31055 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
31056 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
31057 }
31058 }
31059
31060 if (BV_ISSET(fields, 7)) {
31061 log_packet_detailed(" got field 'inventions'");
31062
31063#ifdef FREECIV_JSON_CONNECTION
31064 field_addr.name = "inventions";
31065#endif /* FREECIV_JSON_CONNECTION */
31066
31067 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
31068 RECEIVE_PACKET_FIELD_ERROR(inventions);
31069 }
31070 }
31071
31072 if (nullptr == old) {
31073 old = fc_malloc(sizeof(*old));
31075 *old = *real_packet;
31077 } else {
31078 *old = *real_packet;
31079 }
31080
31081#else /* FREECIV_DELTA_PROTOCOL */
31082#ifdef FREECIV_JSON_CONNECTION
31083 field_addr.name = "techs_researched";
31084#endif /* FREECIV_JSON_CONNECTION */
31085
31086 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
31087 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
31088 }
31089
31090#ifdef FREECIV_JSON_CONNECTION
31091 field_addr.name = "future_tech";
31092#endif /* FREECIV_JSON_CONNECTION */
31093
31094 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
31095 RECEIVE_PACKET_FIELD_ERROR(future_tech);
31096 }
31097
31098#ifdef FREECIV_JSON_CONNECTION
31099 field_addr.name = "researching";
31100#endif /* FREECIV_JSON_CONNECTION */
31101
31102 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
31103 RECEIVE_PACKET_FIELD_ERROR(researching);
31104 }
31105
31106#ifdef FREECIV_JSON_CONNECTION
31107 field_addr.name = "researching_cost";
31108#endif /* FREECIV_JSON_CONNECTION */
31109
31110 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
31111 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
31112 }
31113
31114#ifdef FREECIV_JSON_CONNECTION
31115 field_addr.name = "bulbs_researched";
31116#endif /* FREECIV_JSON_CONNECTION */
31117
31118 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
31119 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
31120 }
31121
31122#ifdef FREECIV_JSON_CONNECTION
31123 field_addr.name = "tech_goal";
31124#endif /* FREECIV_JSON_CONNECTION */
31125
31126 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
31127 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
31128 }
31129
31130#ifdef FREECIV_JSON_CONNECTION
31131 field_addr.name = "total_bulbs_prod";
31132#endif /* FREECIV_JSON_CONNECTION */
31133
31134 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
31135 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
31136 }
31137
31138#ifdef FREECIV_JSON_CONNECTION
31139 field_addr.name = "inventions";
31140#endif /* FREECIV_JSON_CONNECTION */
31141
31142 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
31143 RECEIVE_PACKET_FIELD_ERROR(inventions);
31144 }
31145#endif /* FREECIV_DELTA_PROTOCOL */
31146
31148#undef FREE_PACKET_STRUCT
31149}
31150
31151static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
31152{
31153 const struct packet_research_info *real_packet = packet;
31154 int e;
31156
31157 log_packet_detailed("packet_research_info_100: sending info about (%d)",
31158 real_packet->id);
31159
31160#ifdef FREECIV_DELTA_PROTOCOL
31162 struct packet_research_info *old;
31163 bool differ;
31164 int different = 0;
31165 struct genhash **hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31166
31167 if (nullptr == *hash) {
31169 nullptr, nullptr, nullptr, destroy_packet_research_info);
31170 }
31171 BV_CLR_ALL(fields);
31172
31173 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31174 old = fc_malloc(sizeof(*old));
31175 /* temporary bitcopy just to insert correctly */
31176 *old = *real_packet;
31179 different = 1; /* Force to send. */
31180 }
31181
31182 differ = (old->techs_researched != real_packet->techs_researched);
31183 if (differ) {
31184 different++;
31185 BV_SET(fields, 0);
31186 }
31187
31188 differ = (old->future_tech != real_packet->future_tech);
31189 if (differ) {
31190 different++;
31191 BV_SET(fields, 1);
31192 }
31193
31194 differ = (old->researching != real_packet->researching);
31195 if (differ) {
31196 different++;
31197 BV_SET(fields, 2);
31198 }
31199
31200 differ = (old->researching_cost != real_packet->researching_cost);
31201 if (differ) {
31202 different++;
31203 BV_SET(fields, 3);
31204 }
31205
31206 differ = (old->bulbs_researched != real_packet->bulbs_researched);
31207 if (differ) {
31208 different++;
31209 BV_SET(fields, 4);
31210 }
31211
31212 differ = (old->tech_goal != real_packet->tech_goal);
31213 if (differ) {
31214 different++;
31215 BV_SET(fields, 5);
31216 }
31217
31218 differ = (old->total_bulbs_prod != real_packet->total_bulbs_prod);
31219 if (differ) {
31220 different++;
31221 BV_SET(fields, 6);
31222 }
31223
31224 differ = (strcmp(old->inventions, real_packet->inventions) != 0);
31225 if (differ) {
31226 different++;
31227 BV_SET(fields, 7);
31228 }
31229
31230 if (different == 0) {
31231 log_packet_detailed(" no change -> discard");
31233 }
31234#endif /* FREECIV_DELTA_PROTOCOL */
31235
31236#ifdef FREECIV_JSON_CONNECTION
31237 struct plocation field_addr;
31238 {
31239 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31242 }
31243#endif /* FREECIV_JSON_CONNECTION */
31244
31245#ifdef FREECIV_JSON_CONNECTION
31246 field_addr.name = "id";
31247#endif /* FREECIV_JSON_CONNECTION */
31248 e = 0;
31249
31250 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31251
31252 if (e) {
31253 log_packet_detailed("'id' field error detected");
31254 }
31255
31256#ifdef FREECIV_DELTA_PROTOCOL
31257#ifdef FREECIV_JSON_CONNECTION
31258 field_addr.name = "fields";
31259#endif /* FREECIV_JSON_CONNECTION */
31260 e = 0;
31261 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31262 if (e) {
31263 log_packet_detailed("fields bitvector error detected");
31264 }
31265
31266 if (BV_ISSET(fields, 0)) {
31267 log_packet_detailed(" field 'techs_researched' has changed");
31268
31269#ifdef FREECIV_JSON_CONNECTION
31270 field_addr.name = "techs_researched";
31271#endif /* FREECIV_JSON_CONNECTION */
31272 e = 0;
31273
31274 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31275
31276 if (e) {
31277 log_packet_detailed("'techs_researched' field error detected");
31278 }
31279 }
31280
31281 if (BV_ISSET(fields, 1)) {
31282 log_packet_detailed(" field 'future_tech' has changed");
31283
31284#ifdef FREECIV_JSON_CONNECTION
31285 field_addr.name = "future_tech";
31286#endif /* FREECIV_JSON_CONNECTION */
31287 e = 0;
31288
31289 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31290
31291 if (e) {
31292 log_packet_detailed("'future_tech' field error detected");
31293 }
31294 }
31295
31296 if (BV_ISSET(fields, 2)) {
31297 log_packet_detailed(" field 'researching' has changed");
31298
31299#ifdef FREECIV_JSON_CONNECTION
31300 field_addr.name = "researching";
31301#endif /* FREECIV_JSON_CONNECTION */
31302 e = 0;
31303
31304 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31305
31306 if (e) {
31307 log_packet_detailed("'researching' field error detected");
31308 }
31309 }
31310
31311 if (BV_ISSET(fields, 3)) {
31312 log_packet_detailed(" field 'researching_cost' has changed");
31313
31314#ifdef FREECIV_JSON_CONNECTION
31315 field_addr.name = "researching_cost";
31316#endif /* FREECIV_JSON_CONNECTION */
31317 e = 0;
31318
31319 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31320
31321 if (e) {
31322 log_packet_detailed("'researching_cost' field error detected");
31323 }
31324 }
31325
31326 if (BV_ISSET(fields, 4)) {
31327 log_packet_detailed(" field 'bulbs_researched' has changed");
31328
31329#ifdef FREECIV_JSON_CONNECTION
31330 field_addr.name = "bulbs_researched";
31331#endif /* FREECIV_JSON_CONNECTION */
31332 e = 0;
31333
31334 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
31335
31336 if (e) {
31337 log_packet_detailed("'bulbs_researched' field error detected");
31338 }
31339 }
31340
31341 if (BV_ISSET(fields, 5)) {
31342 log_packet_detailed(" field 'tech_goal' has changed");
31343
31344#ifdef FREECIV_JSON_CONNECTION
31345 field_addr.name = "tech_goal";
31346#endif /* FREECIV_JSON_CONNECTION */
31347 e = 0;
31348
31349 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31350
31351 if (e) {
31352 log_packet_detailed("'tech_goal' field error detected");
31353 }
31354 }
31355
31356 if (BV_ISSET(fields, 6)) {
31357 log_packet_detailed(" field 'total_bulbs_prod' has changed");
31358
31359#ifdef FREECIV_JSON_CONNECTION
31360 field_addr.name = "total_bulbs_prod";
31361#endif /* FREECIV_JSON_CONNECTION */
31362 e = 0;
31363
31364 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31365
31366 if (e) {
31367 log_packet_detailed("'total_bulbs_prod' field error detected");
31368 }
31369 }
31370
31371 if (BV_ISSET(fields, 7)) {
31372 log_packet_detailed(" field 'inventions' has changed");
31373
31374#ifdef FREECIV_JSON_CONNECTION
31375 field_addr.name = "inventions";
31376#endif /* FREECIV_JSON_CONNECTION */
31377 e = 0;
31378
31379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31380
31381 if (e) {
31382 log_packet_detailed("'inventions' field error detected");
31383 }
31384 }
31385
31386 *old = *real_packet;
31387
31388#else /* FREECIV_DELTA_PROTOCOL */
31389#ifdef FREECIV_JSON_CONNECTION
31390 field_addr.name = "techs_researched";
31391#endif /* FREECIV_JSON_CONNECTION */
31392 e = 0;
31393
31394 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31395
31396 if (e) {
31397 log_packet_detailed("'techs_researched' field error detected");
31398 }
31399
31400#ifdef FREECIV_JSON_CONNECTION
31401 field_addr.name = "future_tech";
31402#endif /* FREECIV_JSON_CONNECTION */
31403 e = 0;
31404
31405 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31406
31407 if (e) {
31408 log_packet_detailed("'future_tech' field error detected");
31409 }
31410
31411#ifdef FREECIV_JSON_CONNECTION
31412 field_addr.name = "researching";
31413#endif /* FREECIV_JSON_CONNECTION */
31414 e = 0;
31415
31416 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31417
31418 if (e) {
31419 log_packet_detailed("'researching' field error detected");
31420 }
31421
31422#ifdef FREECIV_JSON_CONNECTION
31423 field_addr.name = "researching_cost";
31424#endif /* FREECIV_JSON_CONNECTION */
31425 e = 0;
31426
31427 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31428
31429 if (e) {
31430 log_packet_detailed("'researching_cost' field error detected");
31431 }
31432
31433#ifdef FREECIV_JSON_CONNECTION
31434 field_addr.name = "bulbs_researched";
31435#endif /* FREECIV_JSON_CONNECTION */
31436 e = 0;
31437
31438 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
31439
31440 if (e) {
31441 log_packet_detailed("'bulbs_researched' field error detected");
31442 }
31443
31444#ifdef FREECIV_JSON_CONNECTION
31445 field_addr.name = "tech_goal";
31446#endif /* FREECIV_JSON_CONNECTION */
31447 e = 0;
31448
31449 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31450
31451 if (e) {
31452 log_packet_detailed("'tech_goal' field error detected");
31453 }
31454
31455#ifdef FREECIV_JSON_CONNECTION
31456 field_addr.name = "total_bulbs_prod";
31457#endif /* FREECIV_JSON_CONNECTION */
31458 e = 0;
31459
31460 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31461
31462 if (e) {
31463 log_packet_detailed("'total_bulbs_prod' field error detected");
31464 }
31465
31466#ifdef FREECIV_JSON_CONNECTION
31467 field_addr.name = "inventions";
31468#endif /* FREECIV_JSON_CONNECTION */
31469 e = 0;
31470
31471 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31472
31473 if (e) {
31474 log_packet_detailed("'inventions' field error detected");
31475 }
31476#endif /* FREECIV_DELTA_PROTOCOL */
31477
31479}
31480
31482{
31483 if (!pc->used) {
31484 log_error("WARNING: trying to send data to the closed connection %s",
31486 return -1;
31487 }
31488 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet != nullptr, -1,
31489 "Handler for PACKET_RESEARCH_INFO not installed");
31490 return pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet(pc, packet);
31491}
31492
31493void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
31494{
31495 conn_list_iterate(dest, pconn) {
31498}
31499
31501{
31502 memset(packet, 0, sizeof(*packet));
31503}
31504
31505#define free_packet_unknown_research(_packet) (void) 0
31506#define destroy_packet_unknown_research free
31507
31508#ifdef FREECIV_DELTA_PROTOCOL
31509#define hash_packet_unknown_research_100 hash_const
31510#define cmp_packet_unknown_research_100 cmp_const
31512#endif /* FREECIV_DELTA_PROTOCOL */
31513
31515{
31516#define FREE_PACKET_STRUCT(_packet) free_packet_unknown_research(_packet)
31518
31519#ifdef FREECIV_JSON_CONNECTION
31520 struct plocation field_addr;
31521 {
31522 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31525 }
31526#endif /* FREECIV_JSON_CONNECTION */
31527
31528 log_packet_detailed("packet_unknown_research_100: got info about ()");
31529
31530#ifdef FREECIV_DELTA_PROTOCOL
31533 struct genhash **hash = pc->phs.received + PACKET_UNKNOWN_RESEARCH;
31534
31535 if (nullptr == *hash) {
31537 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31538 }
31539
31540 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31541 *real_packet = *old;
31542 } else {
31543 /* packet is already initialized empty */
31544 log_packet_detailed(" no old info");
31545 }
31546
31547#ifdef FREECIV_JSON_CONNECTION
31548 field_addr.name = "fields";
31549#endif /* FREECIV_JSON_CONNECTION */
31550 DIO_BV_GET(&din, &field_addr, fields);
31551
31552 if (BV_ISSET(fields, 0)) {
31553 log_packet_detailed(" got field 'id'");
31554
31555#ifdef FREECIV_JSON_CONNECTION
31556 field_addr.name = "id";
31557#endif /* FREECIV_JSON_CONNECTION */
31558
31559 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31561 }
31562 }
31563
31564 if (nullptr == old) {
31565 old = fc_malloc(sizeof(*old));
31567 *old = *real_packet;
31569 } else {
31570 *old = *real_packet;
31571 }
31572
31573 hash = pc->phs.received + PACKET_RESEARCH_INFO;
31574 if (nullptr != *hash) {
31576 }
31577
31578#else /* FREECIV_DELTA_PROTOCOL */
31579#ifdef FREECIV_JSON_CONNECTION
31580 field_addr.name = "id";
31581#endif /* FREECIV_JSON_CONNECTION */
31582
31583 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31585 }
31586#endif /* FREECIV_DELTA_PROTOCOL */
31587
31589#undef FREE_PACKET_STRUCT
31590}
31591
31593{
31594 const struct packet_unknown_research *real_packet = packet;
31595 int e;
31597
31598 log_packet_detailed("packet_unknown_research_100: sending info about ()");
31599
31600#ifdef FREECIV_DELTA_PROTOCOL
31603 bool differ;
31604 int different = 0;
31605 struct genhash **hash = pc->phs.sent + PACKET_UNKNOWN_RESEARCH;
31606
31607 if (nullptr == *hash) {
31609 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31610 }
31611 BV_CLR_ALL(fields);
31612
31613 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31614 old = fc_malloc(sizeof(*old));
31615 /* temporary bitcopy just to insert correctly */
31616 *old = *real_packet;
31619 different = 1; /* Force to send. */
31620 }
31621
31622 differ = (old->id != real_packet->id);
31623 if (differ) {
31624 different++;
31625 BV_SET(fields, 0);
31626 }
31627
31628 if (different == 0) {
31629 log_packet_detailed(" no change -> discard");
31631 }
31632#endif /* FREECIV_DELTA_PROTOCOL */
31633
31634#ifdef FREECIV_JSON_CONNECTION
31635 struct plocation field_addr;
31636 {
31637 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31640 }
31641#endif /* FREECIV_JSON_CONNECTION */
31642
31643#ifdef FREECIV_DELTA_PROTOCOL
31644#ifdef FREECIV_JSON_CONNECTION
31645 field_addr.name = "fields";
31646#endif /* FREECIV_JSON_CONNECTION */
31647 e = 0;
31648 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31649 if (e) {
31650 log_packet_detailed("fields bitvector error detected");
31651 }
31652
31653 if (BV_ISSET(fields, 0)) {
31654 log_packet_detailed(" field 'id' has changed");
31655
31656#ifdef FREECIV_JSON_CONNECTION
31657 field_addr.name = "id";
31658#endif /* FREECIV_JSON_CONNECTION */
31659 e = 0;
31660
31661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31662
31663 if (e) {
31664 log_packet_detailed("'id' field error detected");
31665 }
31666 }
31667
31668 *old = *real_packet;
31669
31670 hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31671 if (nullptr != *hash) {
31673 }
31674
31675#else /* FREECIV_DELTA_PROTOCOL */
31676#ifdef FREECIV_JSON_CONNECTION
31677 field_addr.name = "id";
31678#endif /* FREECIV_JSON_CONNECTION */
31679 e = 0;
31680
31681 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31682
31683 if (e) {
31684 log_packet_detailed("'id' field error detected");
31685 }
31686#endif /* FREECIV_DELTA_PROTOCOL */
31687
31689}
31690
31692{
31693 if (!pc->used) {
31694 log_error("WARNING: trying to send data to the closed connection %s",
31696 return -1;
31697 }
31698 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet != nullptr, -1,
31699 "Handler for PACKET_UNKNOWN_RESEARCH not installed");
31700 return pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet(pc, packet);
31701}
31702
31703static inline void init_packet_player_research(struct packet_player_research *packet)
31704{
31705 memset(packet, 0, sizeof(*packet));
31706}
31707
31708#define free_packet_player_research(_packet) (void) 0
31709#define destroy_packet_player_research free
31710
31711#ifdef FREECIV_DELTA_PROTOCOL
31712#define hash_packet_player_research_100 hash_const
31713#define cmp_packet_player_research_100 cmp_const
31715#endif /* FREECIV_DELTA_PROTOCOL */
31716
31718{
31719#define FREE_PACKET_STRUCT(_packet) free_packet_player_research(_packet)
31721
31722#ifdef FREECIV_JSON_CONNECTION
31723 struct plocation field_addr;
31724 {
31725 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31728 }
31729#endif /* FREECIV_JSON_CONNECTION */
31730
31731 log_packet_detailed("packet_player_research_100: got info about ()");
31732
31733#ifdef FREECIV_DELTA_PROTOCOL
31736 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RESEARCH;
31737
31738 if (nullptr == *hash) {
31740 nullptr, nullptr, nullptr, destroy_packet_player_research);
31741 }
31742
31743 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31744 *real_packet = *old;
31745 } else {
31746 /* packet is already initialized empty */
31747 log_packet_detailed(" no old info");
31748 }
31749
31750#ifdef FREECIV_JSON_CONNECTION
31751 field_addr.name = "fields";
31752#endif /* FREECIV_JSON_CONNECTION */
31753 DIO_BV_GET(&din, &field_addr, fields);
31754
31755 if (BV_ISSET(fields, 0)) {
31756 log_packet_detailed(" got field 'tech'");
31757
31758#ifdef FREECIV_JSON_CONNECTION
31759 field_addr.name = "tech";
31760#endif /* FREECIV_JSON_CONNECTION */
31761
31762 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31764 }
31765 }
31766
31767 if (nullptr == old) {
31768 old = fc_malloc(sizeof(*old));
31770 *old = *real_packet;
31772 } else {
31773 *old = *real_packet;
31774 }
31775
31776#else /* FREECIV_DELTA_PROTOCOL */
31777#ifdef FREECIV_JSON_CONNECTION
31778 field_addr.name = "tech";
31779#endif /* FREECIV_JSON_CONNECTION */
31780
31781 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31783 }
31784#endif /* FREECIV_DELTA_PROTOCOL */
31785
31787#undef FREE_PACKET_STRUCT
31788}
31789
31791{
31792 const struct packet_player_research *real_packet = packet;
31793 int e;
31795
31796 log_packet_detailed("packet_player_research_100: sending info about ()");
31797
31798#ifdef FREECIV_DELTA_PROTOCOL
31801 bool differ;
31802 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RESEARCH;
31803
31804 if (nullptr == *hash) {
31806 nullptr, nullptr, nullptr, destroy_packet_player_research);
31807 }
31808 BV_CLR_ALL(fields);
31809
31810 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31811 old = fc_malloc(sizeof(*old));
31812 /* temporary bitcopy just to insert correctly */
31813 *old = *real_packet;
31816 }
31817
31818 differ = (old->tech != real_packet->tech);
31819 if (differ) {
31820 BV_SET(fields, 0);
31821 }
31822#endif /* FREECIV_DELTA_PROTOCOL */
31823
31824#ifdef FREECIV_JSON_CONNECTION
31825 struct plocation field_addr;
31826 {
31827 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31830 }
31831#endif /* FREECIV_JSON_CONNECTION */
31832
31833#ifdef FREECIV_DELTA_PROTOCOL
31834#ifdef FREECIV_JSON_CONNECTION
31835 field_addr.name = "fields";
31836#endif /* FREECIV_JSON_CONNECTION */
31837 e = 0;
31838 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31839 if (e) {
31840 log_packet_detailed("fields bitvector error detected");
31841 }
31842
31843 if (BV_ISSET(fields, 0)) {
31844 log_packet_detailed(" field 'tech' has changed");
31845
31846#ifdef FREECIV_JSON_CONNECTION
31847 field_addr.name = "tech";
31848#endif /* FREECIV_JSON_CONNECTION */
31849 e = 0;
31850
31851 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31852
31853 if (e) {
31854 log_packet_detailed("'tech' field error detected");
31855 }
31856 }
31857
31858 *old = *real_packet;
31859
31860#else /* FREECIV_DELTA_PROTOCOL */
31861#ifdef FREECIV_JSON_CONNECTION
31862 field_addr.name = "tech";
31863#endif /* FREECIV_JSON_CONNECTION */
31864 e = 0;
31865
31866 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31867
31868 if (e) {
31869 log_packet_detailed("'tech' field error detected");
31870 }
31871#endif /* FREECIV_DELTA_PROTOCOL */
31872
31874}
31875
31877{
31878 if (!pc->used) {
31879 log_error("WARNING: trying to send data to the closed connection %s",
31881 return -1;
31882 }
31883 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet != nullptr, -1,
31884 "Handler for PACKET_PLAYER_RESEARCH not installed");
31885 return pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet(pc, packet);
31886}
31887
31889{
31890 struct packet_player_research packet, *real_packet = &packet;
31891
31893
31895}
31896
31898{
31899 memset(packet, 0, sizeof(*packet));
31900}
31901
31902#define free_packet_player_tech_goal(_packet) (void) 0
31903#define destroy_packet_player_tech_goal free
31904
31905#ifdef FREECIV_DELTA_PROTOCOL
31906#define hash_packet_player_tech_goal_100 hash_const
31907#define cmp_packet_player_tech_goal_100 cmp_const
31909#endif /* FREECIV_DELTA_PROTOCOL */
31910
31912{
31913#define FREE_PACKET_STRUCT(_packet) free_packet_player_tech_goal(_packet)
31915
31916#ifdef FREECIV_JSON_CONNECTION
31917 struct plocation field_addr;
31918 {
31919 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31922 }
31923#endif /* FREECIV_JSON_CONNECTION */
31924
31925 log_packet_detailed("packet_player_tech_goal_100: got info about ()");
31926
31927#ifdef FREECIV_DELTA_PROTOCOL
31930 struct genhash **hash = pc->phs.received + PACKET_PLAYER_TECH_GOAL;
31931
31932 if (nullptr == *hash) {
31934 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
31935 }
31936
31937 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31938 *real_packet = *old;
31939 } else {
31940 /* packet is already initialized empty */
31941 log_packet_detailed(" no old info");
31942 }
31943
31944#ifdef FREECIV_JSON_CONNECTION
31945 field_addr.name = "fields";
31946#endif /* FREECIV_JSON_CONNECTION */
31947 DIO_BV_GET(&din, &field_addr, fields);
31948
31949 if (BV_ISSET(fields, 0)) {
31950 log_packet_detailed(" got field 'tech'");
31951
31952#ifdef FREECIV_JSON_CONNECTION
31953 field_addr.name = "tech";
31954#endif /* FREECIV_JSON_CONNECTION */
31955
31956 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31958 }
31959 }
31960
31961 if (nullptr == old) {
31962 old = fc_malloc(sizeof(*old));
31964 *old = *real_packet;
31966 } else {
31967 *old = *real_packet;
31968 }
31969
31970#else /* FREECIV_DELTA_PROTOCOL */
31971#ifdef FREECIV_JSON_CONNECTION
31972 field_addr.name = "tech";
31973#endif /* FREECIV_JSON_CONNECTION */
31974
31975 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31977 }
31978#endif /* FREECIV_DELTA_PROTOCOL */
31979
31981#undef FREE_PACKET_STRUCT
31982}
31983
31985{
31986 const struct packet_player_tech_goal *real_packet = packet;
31987 int e;
31989
31990 log_packet_detailed("packet_player_tech_goal_100: sending info about ()");
31991
31992#ifdef FREECIV_DELTA_PROTOCOL
31995 bool differ;
31996 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_TECH_GOAL;
31997
31998 if (nullptr == *hash) {
32000 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
32001 }
32002 BV_CLR_ALL(fields);
32003
32004 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32005 old = fc_malloc(sizeof(*old));
32006 /* temporary bitcopy just to insert correctly */
32007 *old = *real_packet;
32010 }
32011
32012 differ = (old->tech != real_packet->tech);
32013 if (differ) {
32014 BV_SET(fields, 0);
32015 }
32016#endif /* FREECIV_DELTA_PROTOCOL */
32017
32018#ifdef FREECIV_JSON_CONNECTION
32019 struct plocation field_addr;
32020 {
32021 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32024 }
32025#endif /* FREECIV_JSON_CONNECTION */
32026
32027#ifdef FREECIV_DELTA_PROTOCOL
32028#ifdef FREECIV_JSON_CONNECTION
32029 field_addr.name = "fields";
32030#endif /* FREECIV_JSON_CONNECTION */
32031 e = 0;
32032 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32033 if (e) {
32034 log_packet_detailed("fields bitvector error detected");
32035 }
32036
32037 if (BV_ISSET(fields, 0)) {
32038 log_packet_detailed(" field 'tech' has changed");
32039
32040#ifdef FREECIV_JSON_CONNECTION
32041 field_addr.name = "tech";
32042#endif /* FREECIV_JSON_CONNECTION */
32043 e = 0;
32044
32045 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
32046
32047 if (e) {
32048 log_packet_detailed("'tech' field error detected");
32049 }
32050 }
32051
32052 *old = *real_packet;
32053
32054#else /* FREECIV_DELTA_PROTOCOL */
32055#ifdef FREECIV_JSON_CONNECTION
32056 field_addr.name = "tech";
32057#endif /* FREECIV_JSON_CONNECTION */
32058 e = 0;
32059
32060 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
32061
32062 if (e) {
32063 log_packet_detailed("'tech' field error detected");
32064 }
32065#endif /* FREECIV_DELTA_PROTOCOL */
32066
32068}
32069
32071{
32072 if (!pc->used) {
32073 log_error("WARNING: trying to send data to the closed connection %s",
32075 return -1;
32076 }
32077 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet != nullptr, -1,
32078 "Handler for PACKET_PLAYER_TECH_GOAL not installed");
32079 return pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet(pc, packet);
32080}
32081
32083{
32084 struct packet_player_tech_goal packet, *real_packet = &packet;
32085
32087
32089}
32090
32091static inline void init_packet_unit_remove(struct packet_unit_remove *packet)
32092{
32093 memset(packet, 0, sizeof(*packet));
32094}
32095
32096#define free_packet_unit_remove(_packet) (void) 0
32097#define destroy_packet_unit_remove free
32098
32099#ifdef FREECIV_DELTA_PROTOCOL
32100#define hash_packet_unit_remove_100 hash_const
32101#define cmp_packet_unit_remove_100 cmp_const
32103#endif /* FREECIV_DELTA_PROTOCOL */
32104
32106{
32107#define FREE_PACKET_STRUCT(_packet) free_packet_unit_remove(_packet)
32109
32110#ifdef FREECIV_JSON_CONNECTION
32111 struct plocation field_addr;
32112 {
32113 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32116 }
32117#endif /* FREECIV_JSON_CONNECTION */
32118
32119 log_packet_detailed("packet_unit_remove_100: got info about ()");
32120
32121#ifdef FREECIV_DELTA_PROTOCOL
32123 struct packet_unit_remove *old;
32124 struct genhash **hash = pc->phs.received + PACKET_UNIT_REMOVE;
32125
32126 if (nullptr == *hash) {
32128 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32129 }
32130
32131 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32132 *real_packet = *old;
32133 } else {
32134 /* packet is already initialized empty */
32135 log_packet_detailed(" no old info");
32136 }
32137
32138#ifdef FREECIV_JSON_CONNECTION
32139 field_addr.name = "fields";
32140#endif /* FREECIV_JSON_CONNECTION */
32141 DIO_BV_GET(&din, &field_addr, fields);
32142
32143 if (BV_ISSET(fields, 0)) {
32144 log_packet_detailed(" got field 'unit_id'");
32145
32146#ifdef FREECIV_JSON_CONNECTION
32147 field_addr.name = "unit_id";
32148#endif /* FREECIV_JSON_CONNECTION */
32149
32150 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32152 }
32153 }
32154
32155 if (nullptr == old) {
32156 old = fc_malloc(sizeof(*old));
32158 *old = *real_packet;
32160 } else {
32161 *old = *real_packet;
32162 }
32163
32164 hash = pc->phs.received + PACKET_UNIT_INFO;
32165 if (nullptr != *hash) {
32167 }
32168
32169 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32170 if (nullptr != *hash) {
32172 }
32173
32174#else /* FREECIV_DELTA_PROTOCOL */
32175#ifdef FREECIV_JSON_CONNECTION
32176 field_addr.name = "unit_id";
32177#endif /* FREECIV_JSON_CONNECTION */
32178
32179 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32181 }
32182#endif /* FREECIV_DELTA_PROTOCOL */
32183
32185#undef FREE_PACKET_STRUCT
32186}
32187
32188static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
32189{
32190 const struct packet_unit_remove *real_packet = packet;
32191 int e;
32193
32194 log_packet_detailed("packet_unit_remove_100: sending info about ()");
32195
32196#ifdef FREECIV_DELTA_PROTOCOL
32198 struct packet_unit_remove *old;
32199 bool differ;
32200 struct genhash **hash = pc->phs.sent + PACKET_UNIT_REMOVE;
32201
32202 if (nullptr == *hash) {
32204 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32205 }
32206 BV_CLR_ALL(fields);
32207
32208 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32209 old = fc_malloc(sizeof(*old));
32210 /* temporary bitcopy just to insert correctly */
32211 *old = *real_packet;
32214 }
32215
32216 differ = (old->unit_id != real_packet->unit_id);
32217 if (differ) {
32218 BV_SET(fields, 0);
32219 }
32220#endif /* FREECIV_DELTA_PROTOCOL */
32221
32222#ifdef FREECIV_JSON_CONNECTION
32223 struct plocation field_addr;
32224 {
32225 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32228 }
32229#endif /* FREECIV_JSON_CONNECTION */
32230
32231#ifdef FREECIV_DELTA_PROTOCOL
32232#ifdef FREECIV_JSON_CONNECTION
32233 field_addr.name = "fields";
32234#endif /* FREECIV_JSON_CONNECTION */
32235 e = 0;
32236 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32237 if (e) {
32238 log_packet_detailed("fields bitvector error detected");
32239 }
32240
32241 if (BV_ISSET(fields, 0)) {
32242 log_packet_detailed(" field 'unit_id' has changed");
32243
32244#ifdef FREECIV_JSON_CONNECTION
32245 field_addr.name = "unit_id";
32246#endif /* FREECIV_JSON_CONNECTION */
32247 e = 0;
32248
32249 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32250
32251 if (e) {
32252 log_packet_detailed("'unit_id' field error detected");
32253 }
32254 }
32255
32256 *old = *real_packet;
32257
32258 hash = pc->phs.sent + PACKET_UNIT_INFO;
32259 if (nullptr != *hash) {
32261 }
32262
32263 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
32264 if (nullptr != *hash) {
32266 }
32267
32268#else /* FREECIV_DELTA_PROTOCOL */
32269#ifdef FREECIV_JSON_CONNECTION
32270 field_addr.name = "unit_id";
32271#endif /* FREECIV_JSON_CONNECTION */
32272 e = 0;
32273
32274 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32275
32276 if (e) {
32277 log_packet_detailed("'unit_id' field error detected");
32278 }
32279#endif /* FREECIV_DELTA_PROTOCOL */
32280
32282}
32283
32285{
32286 if (!pc->used) {
32287 log_error("WARNING: trying to send data to the closed connection %s",
32289 return -1;
32290 }
32291 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet != nullptr, -1,
32292 "Handler for PACKET_UNIT_REMOVE not installed");
32293 return pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet(pc, packet);
32294}
32295
32296void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
32297{
32298 conn_list_iterate(dest, pconn) {
32301}
32302
32303int dsend_packet_unit_remove(struct connection *pc, int unit_id)
32304{
32305 struct packet_unit_remove packet, *real_packet = &packet;
32306
32308
32310}
32311
32313{
32314 struct packet_unit_remove packet, *real_packet = &packet;
32315
32317
32319}
32320
32321static inline void init_packet_unit_info(struct packet_unit_info *packet)
32322{
32323 memset(packet, 0, sizeof(*packet));
32324}
32325
32326#define free_packet_unit_info(_packet) (void) 0
32327#define destroy_packet_unit_info free
32328
32329#ifdef FREECIV_DELTA_PROTOCOL
32331{
32332 const struct packet_unit_info *key = (const struct packet_unit_info *) vkey;
32333 genhash_val_t result = 0;
32334
32335 result += key->id;
32336
32337 result &= 0xFFFFFFFF;
32338 return result;
32339}
32340
32341static bool cmp_packet_unit_info_100(const void *vkey1, const void *vkey2)
32342{
32343 const struct packet_unit_info *old = (const struct packet_unit_info *) vkey1;
32344 const struct packet_unit_info *real_packet = (const struct packet_unit_info *) vkey2;
32345 bool differ;
32346
32347 differ = (old->id != real_packet->id);
32348
32349 return !differ;
32350}
32352#endif /* FREECIV_DELTA_PROTOCOL */
32353
32355{
32356#define FREE_PACKET_STRUCT(_packet) free_packet_unit_info(_packet)
32358
32359#ifdef FREECIV_JSON_CONNECTION
32360 struct plocation field_addr;
32361 {
32362 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32365 }
32366#endif /* FREECIV_JSON_CONNECTION */
32367
32368#ifdef FREECIV_JSON_CONNECTION
32369 field_addr.name = "id";
32370#endif /* FREECIV_JSON_CONNECTION */
32371
32372 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
32374 }
32375
32376 log_packet_detailed("packet_unit_info_100: got info about (%d)",
32377 real_packet->id);
32378
32379#ifdef FREECIV_DELTA_PROTOCOL
32381 struct packet_unit_info *old;
32382 struct genhash **hash = pc->phs.received + PACKET_UNIT_INFO;
32383
32384 if (nullptr == *hash) {
32386 nullptr, nullptr, nullptr, destroy_packet_unit_info);
32387 }
32388
32389 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32390 *real_packet = *old;
32391 } else {
32392 /* packet is already initialized empty */
32393 log_packet_detailed(" no old info");
32394 }
32395
32396#ifdef FREECIV_JSON_CONNECTION
32397 field_addr.name = "fields";
32398#endif /* FREECIV_JSON_CONNECTION */
32399 DIO_BV_GET(&din, &field_addr, fields);
32400
32401 if (BV_ISSET(fields, 0)) {
32402 log_packet_detailed(" got field 'owner'");
32403
32404#ifdef FREECIV_JSON_CONNECTION
32405 field_addr.name = "owner";
32406#endif /* FREECIV_JSON_CONNECTION */
32407
32408 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32410 }
32411 }
32412
32413 if (BV_ISSET(fields, 1)) {
32414 log_packet_detailed(" got field 'nationality'");
32415
32416#ifdef FREECIV_JSON_CONNECTION
32417 field_addr.name = "nationality";
32418#endif /* FREECIV_JSON_CONNECTION */
32419
32420 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32421 RECEIVE_PACKET_FIELD_ERROR(nationality);
32422 }
32423 }
32424
32425 if (BV_ISSET(fields, 2)) {
32426 log_packet_detailed(" got field 'tile'");
32427
32428#ifdef FREECIV_JSON_CONNECTION
32429 field_addr.name = "tile";
32430#endif /* FREECIV_JSON_CONNECTION */
32431
32432 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32434 }
32435 }
32436
32437 if (BV_ISSET(fields, 3)) {
32438 log_packet_detailed(" got field 'facing'");
32439
32440#ifdef FREECIV_JSON_CONNECTION
32441 field_addr.name = "facing";
32442#endif /* FREECIV_JSON_CONNECTION */
32443
32444 {
32445 int readin;
32446
32447 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32449 }
32450 real_packet->facing = readin;
32451 }
32452 }
32453
32454 if (BV_ISSET(fields, 4)) {
32455 log_packet_detailed(" got field 'homecity'");
32456
32457#ifdef FREECIV_JSON_CONNECTION
32458 field_addr.name = "homecity";
32459#endif /* FREECIV_JSON_CONNECTION */
32460
32461 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32463 }
32464 }
32465
32466 if (BV_ISSET(fields, 5)) {
32467 log_packet_detailed(" got field 'upkeep'");
32468
32469#ifdef FREECIV_JSON_CONNECTION
32470 field_addr.name = "upkeep";
32471#endif /* FREECIV_JSON_CONNECTION */
32472
32473 {
32474 int i;
32475
32476
32477#ifdef FREECIV_JSON_CONNECTION
32478 /* Enter array. */
32479 field_addr.sub_location = plocation_elem_new(0);
32480#endif /* FREECIV_JSON_CONNECTION */
32481
32482 for (i = 0; i < O_LAST; i++) {
32483#ifdef FREECIV_JSON_CONNECTION
32484 /* Next array element */
32485 field_addr.sub_location->number = i;
32486#endif /* FREECIV_JSON_CONNECTION */
32487
32488 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32490 }
32491 }
32492
32493#ifdef FREECIV_JSON_CONNECTION
32494 /* Exit array. */
32495 FC_FREE(field_addr.sub_location);
32496#endif /* FREECIV_JSON_CONNECTION */
32497 }
32498 }
32499
32500 if (BV_ISSET(fields, 6)) {
32501 log_packet_detailed(" got field 'veteran'");
32502
32503#ifdef FREECIV_JSON_CONNECTION
32504 field_addr.name = "veteran";
32505#endif /* FREECIV_JSON_CONNECTION */
32506
32507 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32509 }
32510 }
32511
32512 if (BV_ISSET(fields, 7)) {
32513 log_packet_detailed(" got field 'ssa_controller'");
32514
32515#ifdef FREECIV_JSON_CONNECTION
32516 field_addr.name = "ssa_controller";
32517#endif /* FREECIV_JSON_CONNECTION */
32518
32519 {
32520 int readin;
32521
32522 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32523 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32524 }
32525 real_packet->ssa_controller = readin;
32526 }
32527 }
32528
32529 real_packet->paradropped = BV_ISSET(fields, 8);
32530
32531 real_packet->occupied = BV_ISSET(fields, 9);
32532
32533 real_packet->transported = BV_ISSET(fields, 10);
32534
32535 real_packet->done_moving = BV_ISSET(fields, 11);
32536
32537 real_packet->stay = BV_ISSET(fields, 12);
32538
32539 if (BV_ISSET(fields, 13)) {
32540 log_packet_detailed(" got field 'birth_turn'");
32541
32542#ifdef FREECIV_JSON_CONNECTION
32543 field_addr.name = "birth_turn";
32544#endif /* FREECIV_JSON_CONNECTION */
32545
32546 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
32547 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
32548 }
32549 }
32550
32551 if (BV_ISSET(fields, 14)) {
32552 log_packet_detailed(" got field 'current_form_turn'");
32553
32554#ifdef FREECIV_JSON_CONNECTION
32555 field_addr.name = "current_form_turn";
32556#endif /* FREECIV_JSON_CONNECTION */
32557
32558 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
32559 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
32560 }
32561 }
32562
32563 if (BV_ISSET(fields, 15)) {
32564 log_packet_detailed(" got field 'type'");
32565
32566#ifdef FREECIV_JSON_CONNECTION
32567 field_addr.name = "type";
32568#endif /* FREECIV_JSON_CONNECTION */
32569
32570 {
32571 int readin;
32572
32573 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32575 }
32576 real_packet->type = readin;
32577 }
32578 }
32579
32580 if (BV_ISSET(fields, 16)) {
32581 log_packet_detailed(" got field 'transported_by'");
32582
32583#ifdef FREECIV_JSON_CONNECTION
32584 field_addr.name = "transported_by";
32585#endif /* FREECIV_JSON_CONNECTION */
32586
32587 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32588 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32589 }
32590 }
32591
32592 if (BV_ISSET(fields, 17)) {
32593 log_packet_detailed(" got field 'carrying'");
32594
32595#ifdef FREECIV_JSON_CONNECTION
32596 field_addr.name = "carrying";
32597#endif /* FREECIV_JSON_CONNECTION */
32598
32599 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
32601 }
32602 }
32603
32604 if (BV_ISSET(fields, 18)) {
32605 log_packet_detailed(" got field 'movesleft'");
32606
32607#ifdef FREECIV_JSON_CONNECTION
32608 field_addr.name = "movesleft";
32609#endif /* FREECIV_JSON_CONNECTION */
32610
32611 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
32612 RECEIVE_PACKET_FIELD_ERROR(movesleft);
32613 }
32614 }
32615
32616 if (BV_ISSET(fields, 19)) {
32617 log_packet_detailed(" got field 'hp'");
32618
32619#ifdef FREECIV_JSON_CONNECTION
32620 field_addr.name = "hp";
32621#endif /* FREECIV_JSON_CONNECTION */
32622
32623 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32625 }
32626 }
32627
32628 if (BV_ISSET(fields, 20)) {
32629 log_packet_detailed(" got field 'fuel'");
32630
32631#ifdef FREECIV_JSON_CONNECTION
32632 field_addr.name = "fuel";
32633#endif /* FREECIV_JSON_CONNECTION */
32634
32635 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
32637 }
32638 }
32639
32640 if (BV_ISSET(fields, 21)) {
32641 log_packet_detailed(" got field 'activity_count'");
32642
32643#ifdef FREECIV_JSON_CONNECTION
32644 field_addr.name = "activity_count";
32645#endif /* FREECIV_JSON_CONNECTION */
32646
32647 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
32648 RECEIVE_PACKET_FIELD_ERROR(activity_count);
32649 }
32650 }
32651
32652 if (BV_ISSET(fields, 22)) {
32653 log_packet_detailed(" got field 'changed_from_count'");
32654
32655#ifdef FREECIV_JSON_CONNECTION
32656 field_addr.name = "changed_from_count";
32657#endif /* FREECIV_JSON_CONNECTION */
32658
32659 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
32660 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
32661 }
32662 }
32663
32664 if (BV_ISSET(fields, 23)) {
32665 log_packet_detailed(" got field 'goto_tile'");
32666
32667#ifdef FREECIV_JSON_CONNECTION
32668 field_addr.name = "goto_tile";
32669#endif /* FREECIV_JSON_CONNECTION */
32670
32671 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
32672 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
32673 }
32674 }
32675
32676 if (BV_ISSET(fields, 24)) {
32677 log_packet_detailed(" got field 'activity'");
32678
32679#ifdef FREECIV_JSON_CONNECTION
32680 field_addr.name = "activity";
32681#endif /* FREECIV_JSON_CONNECTION */
32682
32683 {
32684 int readin;
32685
32686 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32688 }
32689 real_packet->activity = readin;
32690 }
32691 }
32692
32693 if (BV_ISSET(fields, 25)) {
32694 log_packet_detailed(" got field 'activity_tgt'");
32695
32696#ifdef FREECIV_JSON_CONNECTION
32697 field_addr.name = "activity_tgt";
32698#endif /* FREECIV_JSON_CONNECTION */
32699
32700 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
32701 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
32702 }
32703 }
32704
32705 if (BV_ISSET(fields, 26)) {
32706 log_packet_detailed(" got field 'changed_from'");
32707
32708#ifdef FREECIV_JSON_CONNECTION
32709 field_addr.name = "changed_from";
32710#endif /* FREECIV_JSON_CONNECTION */
32711
32712 {
32713 int readin;
32714
32715 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32716 RECEIVE_PACKET_FIELD_ERROR(changed_from);
32717 }
32718 real_packet->changed_from = readin;
32719 }
32720 }
32721
32722 if (BV_ISSET(fields, 27)) {
32723 log_packet_detailed(" got field 'changed_from_tgt'");
32724
32725#ifdef FREECIV_JSON_CONNECTION
32726 field_addr.name = "changed_from_tgt";
32727#endif /* FREECIV_JSON_CONNECTION */
32728
32729 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
32730 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
32731 }
32732 }
32733
32734 if (BV_ISSET(fields, 28)) {
32735 log_packet_detailed(" got field 'battlegroup'");
32736
32737#ifdef FREECIV_JSON_CONNECTION
32738 field_addr.name = "battlegroup";
32739#endif /* FREECIV_JSON_CONNECTION */
32740
32741 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
32742 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
32743 }
32744 }
32745
32746 real_packet->has_orders = BV_ISSET(fields, 29);
32747
32748 if (BV_ISSET(fields, 30)) {
32749 log_packet_detailed(" got field 'orders_length'");
32750
32751#ifdef FREECIV_JSON_CONNECTION
32752 field_addr.name = "orders_length";
32753#endif /* FREECIV_JSON_CONNECTION */
32754
32755 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
32756 RECEIVE_PACKET_FIELD_ERROR(orders_length);
32757 }
32758 }
32759
32760 if (BV_ISSET(fields, 31)) {
32761 log_packet_detailed(" got field 'orders_index'");
32762
32763#ifdef FREECIV_JSON_CONNECTION
32764 field_addr.name = "orders_index";
32765#endif /* FREECIV_JSON_CONNECTION */
32766
32767 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
32768 RECEIVE_PACKET_FIELD_ERROR(orders_index);
32769 }
32770 }
32771
32772 real_packet->orders_repeat = BV_ISSET(fields, 32);
32773
32774 real_packet->orders_vigilant = BV_ISSET(fields, 33);
32775
32776 if (BV_ISSET(fields, 34)) {
32777 log_packet_detailed(" got field 'orders'");
32778
32779#ifdef FREECIV_JSON_CONNECTION
32780 field_addr.name = "orders";
32781#endif /* FREECIV_JSON_CONNECTION */
32782
32783 {
32784 int i;
32785
32786 if (real_packet->orders_length > MAX_LEN_ROUTE) {
32787 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
32788 }
32789
32790#ifdef FREECIV_JSON_CONNECTION
32791 /* Enter array. */
32792 field_addr.sub_location = plocation_elem_new(0);
32793#endif /* FREECIV_JSON_CONNECTION */
32794
32795 for (i = 0; i < real_packet->orders_length; i++) {
32796#ifdef FREECIV_JSON_CONNECTION
32797 /* Next array element */
32798 field_addr.sub_location->number = i;
32799#endif /* FREECIV_JSON_CONNECTION */
32800
32801 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
32803 }
32804 }
32805
32806#ifdef FREECIV_JSON_CONNECTION
32807 /* Exit array. */
32808 FC_FREE(field_addr.sub_location);
32809#endif /* FREECIV_JSON_CONNECTION */
32810 }
32811 }
32812
32813 if (BV_ISSET(fields, 35)) {
32814 log_packet_detailed(" got field 'action_decision_want'");
32815
32816#ifdef FREECIV_JSON_CONNECTION
32817 field_addr.name = "action_decision_want";
32818#endif /* FREECIV_JSON_CONNECTION */
32819
32820 {
32821 int readin;
32822
32823 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32824 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
32825 }
32826 real_packet->action_decision_want = readin;
32827 }
32828 }
32829
32830 if (BV_ISSET(fields, 36)) {
32831 log_packet_detailed(" got field 'action_decision_tile'");
32832
32833#ifdef FREECIV_JSON_CONNECTION
32834 field_addr.name = "action_decision_tile";
32835#endif /* FREECIV_JSON_CONNECTION */
32836
32837 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
32838 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
32839 }
32840 }
32841
32842 if (nullptr == old) {
32843 old = fc_malloc(sizeof(*old));
32845 *old = *real_packet;
32847 } else {
32848 *old = *real_packet;
32849 }
32850
32851 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32852 if (nullptr != *hash) {
32854 }
32855
32856#else /* FREECIV_DELTA_PROTOCOL */
32857#ifdef FREECIV_JSON_CONNECTION
32858 field_addr.name = "owner";
32859#endif /* FREECIV_JSON_CONNECTION */
32860
32861 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32863 }
32864
32865#ifdef FREECIV_JSON_CONNECTION
32866 field_addr.name = "nationality";
32867#endif /* FREECIV_JSON_CONNECTION */
32868
32869 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32870 RECEIVE_PACKET_FIELD_ERROR(nationality);
32871 }
32872
32873#ifdef FREECIV_JSON_CONNECTION
32874 field_addr.name = "tile";
32875#endif /* FREECIV_JSON_CONNECTION */
32876
32877 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32879 }
32880
32881#ifdef FREECIV_JSON_CONNECTION
32882 field_addr.name = "facing";
32883#endif /* FREECIV_JSON_CONNECTION */
32884
32885 {
32886 int readin;
32887
32888 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32890 }
32891 real_packet->facing = readin;
32892 }
32893
32894#ifdef FREECIV_JSON_CONNECTION
32895 field_addr.name = "homecity";
32896#endif /* FREECIV_JSON_CONNECTION */
32897
32898 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32900 }
32901
32902#ifdef FREECIV_JSON_CONNECTION
32903 field_addr.name = "upkeep";
32904#endif /* FREECIV_JSON_CONNECTION */
32905
32906 {
32907 int i;
32908
32909
32910#ifdef FREECIV_JSON_CONNECTION
32911 /* Enter array. */
32912 field_addr.sub_location = plocation_elem_new(0);
32913#endif /* FREECIV_JSON_CONNECTION */
32914
32915 for (i = 0; i < O_LAST; i++) {
32916#ifdef FREECIV_JSON_CONNECTION
32917 /* Next array element */
32918 field_addr.sub_location->number = i;
32919#endif /* FREECIV_JSON_CONNECTION */
32920
32921 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32923 }
32924 }
32925
32926#ifdef FREECIV_JSON_CONNECTION
32927 /* Exit array. */
32928 FC_FREE(field_addr.sub_location);
32929#endif /* FREECIV_JSON_CONNECTION */
32930 }
32931
32932#ifdef FREECIV_JSON_CONNECTION
32933 field_addr.name = "veteran";
32934#endif /* FREECIV_JSON_CONNECTION */
32935
32936 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32938 }
32939
32940#ifdef FREECIV_JSON_CONNECTION
32941 field_addr.name = "ssa_controller";
32942#endif /* FREECIV_JSON_CONNECTION */
32943
32944 {
32945 int readin;
32946
32947 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32948 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32949 }
32950 real_packet->ssa_controller = readin;
32951 }
32952
32953#ifdef FREECIV_JSON_CONNECTION
32954 field_addr.name = "paradropped";
32955#endif /* FREECIV_JSON_CONNECTION */
32956
32957 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
32958 RECEIVE_PACKET_FIELD_ERROR(paradropped);
32959 }
32960
32961#ifdef FREECIV_JSON_CONNECTION
32962 field_addr.name = "occupied";
32963#endif /* FREECIV_JSON_CONNECTION */
32964
32965 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
32967 }
32968
32969#ifdef FREECIV_JSON_CONNECTION
32970 field_addr.name = "transported";
32971#endif /* FREECIV_JSON_CONNECTION */
32972
32973 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
32974 RECEIVE_PACKET_FIELD_ERROR(transported);
32975 }
32976
32977#ifdef FREECIV_JSON_CONNECTION
32978 field_addr.name = "done_moving";
32979#endif /* FREECIV_JSON_CONNECTION */
32980
32981 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
32982 RECEIVE_PACKET_FIELD_ERROR(done_moving);
32983 }
32984
32985#ifdef FREECIV_JSON_CONNECTION
32986 field_addr.name = "stay";
32987#endif /* FREECIV_JSON_CONNECTION */
32988
32989 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
32991 }
32992
32993#ifdef FREECIV_JSON_CONNECTION
32994 field_addr.name = "birth_turn";
32995#endif /* FREECIV_JSON_CONNECTION */
32996
32997 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
32998 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
32999 }
33000
33001#ifdef FREECIV_JSON_CONNECTION
33002 field_addr.name = "current_form_turn";
33003#endif /* FREECIV_JSON_CONNECTION */
33004
33005 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
33006 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
33007 }
33008
33009#ifdef FREECIV_JSON_CONNECTION
33010 field_addr.name = "type";
33011#endif /* FREECIV_JSON_CONNECTION */
33012
33013 {
33014 int readin;
33015
33016 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
33018 }
33019 real_packet->type = readin;
33020 }
33021
33022#ifdef FREECIV_JSON_CONNECTION
33023 field_addr.name = "transported_by";
33024#endif /* FREECIV_JSON_CONNECTION */
33025
33026 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
33027 RECEIVE_PACKET_FIELD_ERROR(transported_by);
33028 }
33029
33030#ifdef FREECIV_JSON_CONNECTION
33031 field_addr.name = "carrying";
33032#endif /* FREECIV_JSON_CONNECTION */
33033
33034 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
33036 }
33037
33038#ifdef FREECIV_JSON_CONNECTION
33039 field_addr.name = "movesleft";
33040#endif /* FREECIV_JSON_CONNECTION */
33041
33042 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
33043 RECEIVE_PACKET_FIELD_ERROR(movesleft);
33044 }
33045
33046#ifdef FREECIV_JSON_CONNECTION
33047 field_addr.name = "hp";
33048#endif /* FREECIV_JSON_CONNECTION */
33049
33050 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
33052 }
33053
33054#ifdef FREECIV_JSON_CONNECTION
33055 field_addr.name = "fuel";
33056#endif /* FREECIV_JSON_CONNECTION */
33057
33058 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
33060 }
33061
33062#ifdef FREECIV_JSON_CONNECTION
33063 field_addr.name = "activity_count";
33064#endif /* FREECIV_JSON_CONNECTION */
33065
33066 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
33067 RECEIVE_PACKET_FIELD_ERROR(activity_count);
33068 }
33069
33070#ifdef FREECIV_JSON_CONNECTION
33071 field_addr.name = "changed_from_count";
33072#endif /* FREECIV_JSON_CONNECTION */
33073
33074 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
33075 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
33076 }
33077
33078#ifdef FREECIV_JSON_CONNECTION
33079 field_addr.name = "goto_tile";
33080#endif /* FREECIV_JSON_CONNECTION */
33081
33082 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
33083 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
33084 }
33085
33086#ifdef FREECIV_JSON_CONNECTION
33087 field_addr.name = "activity";
33088#endif /* FREECIV_JSON_CONNECTION */
33089
33090 {
33091 int readin;
33092
33093 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33095 }
33096 real_packet->activity = readin;
33097 }
33098
33099#ifdef FREECIV_JSON_CONNECTION
33100 field_addr.name = "activity_tgt";
33101#endif /* FREECIV_JSON_CONNECTION */
33102
33103 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
33104 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
33105 }
33106
33107#ifdef FREECIV_JSON_CONNECTION
33108 field_addr.name = "changed_from";
33109#endif /* FREECIV_JSON_CONNECTION */
33110
33111 {
33112 int readin;
33113
33114 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33115 RECEIVE_PACKET_FIELD_ERROR(changed_from);
33116 }
33117 real_packet->changed_from = readin;
33118 }
33119
33120#ifdef FREECIV_JSON_CONNECTION
33121 field_addr.name = "changed_from_tgt";
33122#endif /* FREECIV_JSON_CONNECTION */
33123
33124 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
33125 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
33126 }
33127
33128#ifdef FREECIV_JSON_CONNECTION
33129 field_addr.name = "battlegroup";
33130#endif /* FREECIV_JSON_CONNECTION */
33131
33132 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
33133 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
33134 }
33135
33136#ifdef FREECIV_JSON_CONNECTION
33137 field_addr.name = "has_orders";
33138#endif /* FREECIV_JSON_CONNECTION */
33139
33140 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_orders)) {
33141 RECEIVE_PACKET_FIELD_ERROR(has_orders);
33142 }
33143
33144#ifdef FREECIV_JSON_CONNECTION
33145 field_addr.name = "orders_length";
33146#endif /* FREECIV_JSON_CONNECTION */
33147
33148 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
33149 RECEIVE_PACKET_FIELD_ERROR(orders_length);
33150 }
33151
33152#ifdef FREECIV_JSON_CONNECTION
33153 field_addr.name = "orders_index";
33154#endif /* FREECIV_JSON_CONNECTION */
33155
33156 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
33157 RECEIVE_PACKET_FIELD_ERROR(orders_index);
33158 }
33159
33160#ifdef FREECIV_JSON_CONNECTION
33161 field_addr.name = "orders_repeat";
33162#endif /* FREECIV_JSON_CONNECTION */
33163
33164 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_repeat)) {
33165 RECEIVE_PACKET_FIELD_ERROR(orders_repeat);
33166 }
33167
33168#ifdef FREECIV_JSON_CONNECTION
33169 field_addr.name = "orders_vigilant";
33170#endif /* FREECIV_JSON_CONNECTION */
33171
33172 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_vigilant)) {
33173 RECEIVE_PACKET_FIELD_ERROR(orders_vigilant);
33174 }
33175
33176#ifdef FREECIV_JSON_CONNECTION
33177 field_addr.name = "orders";
33178#endif /* FREECIV_JSON_CONNECTION */
33179
33180 {
33181 int i;
33182
33183 if (real_packet->orders_length > MAX_LEN_ROUTE) {
33184 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
33185 }
33186
33187#ifdef FREECIV_JSON_CONNECTION
33188 /* Enter array. */
33189 field_addr.sub_location = plocation_elem_new(0);
33190#endif /* FREECIV_JSON_CONNECTION */
33191
33192 for (i = 0; i < real_packet->orders_length; i++) {
33193#ifdef FREECIV_JSON_CONNECTION
33194 /* Next array element */
33195 field_addr.sub_location->number = i;
33196#endif /* FREECIV_JSON_CONNECTION */
33197
33198 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
33200 }
33201 }
33202
33203#ifdef FREECIV_JSON_CONNECTION
33204 /* Exit array. */
33205 FC_FREE(field_addr.sub_location);
33206#endif /* FREECIV_JSON_CONNECTION */
33207 }
33208
33209#ifdef FREECIV_JSON_CONNECTION
33210 field_addr.name = "action_decision_want";
33211#endif /* FREECIV_JSON_CONNECTION */
33212
33213 {
33214 int readin;
33215
33216 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33217 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
33218 }
33219 real_packet->action_decision_want = readin;
33220 }
33221
33222#ifdef FREECIV_JSON_CONNECTION
33223 field_addr.name = "action_decision_tile";
33224#endif /* FREECIV_JSON_CONNECTION */
33225
33226 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
33227 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
33228 }
33229#endif /* FREECIV_DELTA_PROTOCOL */
33230
33232#undef FREE_PACKET_STRUCT
33233}
33234
33235static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
33236{
33237 const struct packet_unit_info *real_packet = packet;
33238 int e;
33240
33241 log_packet_detailed("packet_unit_info_100: sending info about (%d)",
33242 real_packet->id);
33243
33244#ifdef FREECIV_DELTA_PROTOCOL
33246 struct packet_unit_info *old;
33247 bool differ;
33248 int different = 0;
33249 struct genhash **hash = pc->phs.sent + PACKET_UNIT_INFO;
33250
33251 if (nullptr == *hash) {
33253 nullptr, nullptr, nullptr, destroy_packet_unit_info);
33254 }
33255 BV_CLR_ALL(fields);
33256
33257 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33258 old = fc_malloc(sizeof(*old));
33259 /* temporary bitcopy just to insert correctly */
33260 *old = *real_packet;
33263 different = 1; /* Force to send. */
33264 }
33265
33266 differ = (old->owner != real_packet->owner);
33267 if (differ) {
33268 different++;
33269 BV_SET(fields, 0);
33270 }
33271
33272 differ = (old->nationality != real_packet->nationality);
33273 if (differ) {
33274 different++;
33275 BV_SET(fields, 1);
33276 }
33277
33278 differ = (old->tile != real_packet->tile);
33279 if (differ) {
33280 different++;
33281 BV_SET(fields, 2);
33282 }
33283
33284 differ = (old->facing != real_packet->facing);
33285 if (differ) {
33286 different++;
33287 BV_SET(fields, 3);
33288 }
33289
33290 differ = (old->homecity != real_packet->homecity);
33291 if (differ) {
33292 different++;
33293 BV_SET(fields, 4);
33294 }
33295
33296 differ = FALSE;
33297 {
33298 int i;
33299
33300 for (i = 0; i < O_LAST; i++) {
33301 differ = (old->upkeep[i] != real_packet->upkeep[i]);
33302 if (differ) {
33303 break;
33304 }
33305 }
33306 }
33307 if (differ) {
33308 different++;
33309 BV_SET(fields, 5);
33310 }
33311
33312 differ = (old->veteran != real_packet->veteran);
33313 if (differ) {
33314 different++;
33315 BV_SET(fields, 6);
33316 }
33317
33318 differ = (old->ssa_controller != real_packet->ssa_controller);
33319 if (differ) {
33320 different++;
33321 BV_SET(fields, 7);
33322 }
33323
33324 differ = (old->paradropped != real_packet->paradropped);
33325 if (differ) {
33326 different++;
33327 }
33328 /* folded into head */
33329 if (real_packet->paradropped) {
33330 BV_SET(fields, 8);
33331 }
33332
33333 differ = (old->occupied != real_packet->occupied);
33334 if (differ) {
33335 different++;
33336 }
33337 /* folded into head */
33338 if (real_packet->occupied) {
33339 BV_SET(fields, 9);
33340 }
33341
33342 differ = (old->transported != real_packet->transported);
33343 if (differ) {
33344 different++;
33345 }
33346 /* folded into head */
33347 if (real_packet->transported) {
33348 BV_SET(fields, 10);
33349 }
33350
33351 differ = (old->done_moving != real_packet->done_moving);
33352 if (differ) {
33353 different++;
33354 }
33355 /* folded into head */
33356 if (real_packet->done_moving) {
33357 BV_SET(fields, 11);
33358 }
33359
33360 differ = (old->stay != real_packet->stay);
33361 if (differ) {
33362 different++;
33363 }
33364 /* folded into head */
33365 if (real_packet->stay) {
33366 BV_SET(fields, 12);
33367 }
33368
33369 differ = (old->birth_turn != real_packet->birth_turn);
33370 if (differ) {
33371 different++;
33372 BV_SET(fields, 13);
33373 }
33374
33375 differ = (old->current_form_turn != real_packet->current_form_turn);
33376 if (differ) {
33377 different++;
33378 BV_SET(fields, 14);
33379 }
33380
33381 differ = (old->type != real_packet->type);
33382 if (differ) {
33383 different++;
33384 BV_SET(fields, 15);
33385 }
33386
33387 differ = (old->transported_by != real_packet->transported_by);
33388 if (differ) {
33389 different++;
33390 BV_SET(fields, 16);
33391 }
33392
33393 differ = (old->carrying != real_packet->carrying);
33394 if (differ) {
33395 different++;
33396 BV_SET(fields, 17);
33397 }
33398
33399 differ = (old->movesleft != real_packet->movesleft);
33400 if (differ) {
33401 different++;
33402 BV_SET(fields, 18);
33403 }
33404
33405 differ = (old->hp != real_packet->hp);
33406 if (differ) {
33407 different++;
33408 BV_SET(fields, 19);
33409 }
33410
33411 differ = (old->fuel != real_packet->fuel);
33412 if (differ) {
33413 different++;
33414 BV_SET(fields, 20);
33415 }
33416
33417 differ = (old->activity_count != real_packet->activity_count);
33418 if (differ) {
33419 different++;
33420 BV_SET(fields, 21);
33421 }
33422
33423 differ = (old->changed_from_count != real_packet->changed_from_count);
33424 if (differ) {
33425 different++;
33426 BV_SET(fields, 22);
33427 }
33428
33429 differ = (old->goto_tile != real_packet->goto_tile);
33430 if (differ) {
33431 different++;
33432 BV_SET(fields, 23);
33433 }
33434
33435 differ = (old->activity != real_packet->activity);
33436 if (differ) {
33437 different++;
33438 BV_SET(fields, 24);
33439 }
33440
33441 differ = (old->activity_tgt != real_packet->activity_tgt);
33442 if (differ) {
33443 different++;
33444 BV_SET(fields, 25);
33445 }
33446
33447 differ = (old->changed_from != real_packet->changed_from);
33448 if (differ) {
33449 different++;
33450 BV_SET(fields, 26);
33451 }
33452
33453 differ = (old->changed_from_tgt != real_packet->changed_from_tgt);
33454 if (differ) {
33455 different++;
33456 BV_SET(fields, 27);
33457 }
33458
33459 differ = (old->battlegroup != real_packet->battlegroup);
33460 if (differ) {
33461 different++;
33462 BV_SET(fields, 28);
33463 }
33464
33465 differ = (old->has_orders != real_packet->has_orders);
33466 if (differ) {
33467 different++;
33468 }
33469 /* folded into head */
33470 if (real_packet->has_orders) {
33471 BV_SET(fields, 29);
33472 }
33473
33474 differ = (old->orders_length != real_packet->orders_length);
33475 if (differ) {
33476 different++;
33477 BV_SET(fields, 30);
33478 }
33479
33480 differ = (old->orders_index != real_packet->orders_index);
33481 if (differ) {
33482 different++;
33483 BV_SET(fields, 31);
33484 }
33485
33486 differ = (old->orders_repeat != real_packet->orders_repeat);
33487 if (differ) {
33488 different++;
33489 }
33490 /* folded into head */
33491 if (real_packet->orders_repeat) {
33492 BV_SET(fields, 32);
33493 }
33494
33495 differ = (old->orders_vigilant != real_packet->orders_vigilant);
33496 if (differ) {
33497 different++;
33498 }
33499 /* folded into head */
33500 if (real_packet->orders_vigilant) {
33501 BV_SET(fields, 33);
33502 }
33503
33504 differ = (old->orders_length != real_packet->orders_length);
33505 if (!differ) {
33506 int i;
33507
33508 for (i = 0; i < old->orders_length; i++) {
33509 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
33510 if (differ) {
33511 break;
33512 }
33513 }
33514 }
33515 if (differ) {
33516 different++;
33517 BV_SET(fields, 34);
33518 }
33519
33520 differ = (old->action_decision_want != real_packet->action_decision_want);
33521 if (differ) {
33522 different++;
33523 BV_SET(fields, 35);
33524 }
33525
33526 differ = (old->action_decision_tile != real_packet->action_decision_tile);
33527 if (differ) {
33528 different++;
33529 BV_SET(fields, 36);
33530 }
33531
33532 if (different == 0) {
33533 log_packet_detailed(" no change -> discard");
33535 }
33536#endif /* FREECIV_DELTA_PROTOCOL */
33537
33538#ifdef FREECIV_JSON_CONNECTION
33539 struct plocation field_addr;
33540 {
33541 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
33544 }
33545#endif /* FREECIV_JSON_CONNECTION */
33546
33547#ifdef FREECIV_JSON_CONNECTION
33548 field_addr.name = "id";
33549#endif /* FREECIV_JSON_CONNECTION */
33550 e = 0;
33551
33552 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
33553
33554 if (e) {
33555 log_packet_detailed("'id' field error detected");
33556 }
33557
33558#ifdef FREECIV_DELTA_PROTOCOL
33559#ifdef FREECIV_JSON_CONNECTION
33560 field_addr.name = "fields";
33561#endif /* FREECIV_JSON_CONNECTION */
33562 e = 0;
33563 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33564 if (e) {
33565 log_packet_detailed("fields bitvector error detected");
33566 }
33567
33568 if (BV_ISSET(fields, 0)) {
33569 log_packet_detailed(" field 'owner' has changed");
33570
33571#ifdef FREECIV_JSON_CONNECTION
33572 field_addr.name = "owner";
33573#endif /* FREECIV_JSON_CONNECTION */
33574 e = 0;
33575
33576 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
33577
33578 if (e) {
33579 log_packet_detailed("'owner' field error detected");
33580 }
33581 }
33582
33583 if (BV_ISSET(fields, 1)) {
33584 log_packet_detailed(" field 'nationality' has changed");
33585
33586#ifdef FREECIV_JSON_CONNECTION
33587 field_addr.name = "nationality";
33588#endif /* FREECIV_JSON_CONNECTION */
33589 e = 0;
33590
33591 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
33592
33593 if (e) {
33594 log_packet_detailed("'nationality' field error detected");
33595 }
33596 }
33597
33598 if (BV_ISSET(fields, 2)) {
33599 log_packet_detailed(" field 'tile' has changed");
33600
33601#ifdef FREECIV_JSON_CONNECTION
33602 field_addr.name = "tile";
33603#endif /* FREECIV_JSON_CONNECTION */
33604 e = 0;
33605
33606 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
33607
33608 if (e) {
33609 log_packet_detailed("'tile' field error detected");
33610 }
33611 }
33612
33613 if (BV_ISSET(fields, 3)) {
33614 log_packet_detailed(" field 'facing' has changed");
33615
33616#ifdef FREECIV_JSON_CONNECTION
33617 field_addr.name = "facing";
33618#endif /* FREECIV_JSON_CONNECTION */
33619 e = 0;
33620
33621 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
33622
33623 if (e) {
33624 log_packet_detailed("'facing' field error detected");
33625 }
33626 }
33627
33628 if (BV_ISSET(fields, 4)) {
33629 log_packet_detailed(" field 'homecity' has changed");
33630
33631#ifdef FREECIV_JSON_CONNECTION
33632 field_addr.name = "homecity";
33633#endif /* FREECIV_JSON_CONNECTION */
33634 e = 0;
33635
33636 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
33637
33638 if (e) {
33639 log_packet_detailed("'homecity' field error detected");
33640 }
33641 }
33642
33643 if (BV_ISSET(fields, 5)) {
33644 log_packet_detailed(" field 'upkeep' has changed");
33645
33646#ifdef FREECIV_JSON_CONNECTION
33647 field_addr.name = "upkeep";
33648#endif /* FREECIV_JSON_CONNECTION */
33649 e = 0;
33650
33651 {
33652 int i;
33653
33654#ifdef FREECIV_JSON_CONNECTION
33655 /* Create the array. */
33656 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
33657
33658 /* Enter array. */
33659 field_addr.sub_location = plocation_elem_new(0);
33660#endif /* FREECIV_JSON_CONNECTION */
33661
33662 for (i = 0; i < O_LAST; i++) {
33663#ifdef FREECIV_JSON_CONNECTION
33664 /* Next array element. */
33665 field_addr.sub_location->number = i;
33666#endif /* FREECIV_JSON_CONNECTION */
33667
33668 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
33669 }
33670
33671#ifdef FREECIV_JSON_CONNECTION
33672 /* Exit array. */
33673 FC_FREE(field_addr.sub_location);
33674#endif /* FREECIV_JSON_CONNECTION */
33675 }
33676
33677 if (e) {
33678 log_packet_detailed("'upkeep' field error detected");
33679 }
33680 }
33681
33682 if (BV_ISSET(fields, 6)) {
33683 log_packet_detailed(" field 'veteran' has changed");
33684
33685#ifdef FREECIV_JSON_CONNECTION
33686 field_addr.name = "veteran";
33687#endif /* FREECIV_JSON_CONNECTION */
33688 e = 0;
33689
33690 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
33691
33692 if (e) {
33693 log_packet_detailed("'veteran' field error detected");
33694 }
33695 }
33696
33697 if (BV_ISSET(fields, 7)) {
33698 log_packet_detailed(" field 'ssa_controller' has changed");
33699
33700#ifdef FREECIV_JSON_CONNECTION
33701 field_addr.name = "ssa_controller";
33702#endif /* FREECIV_JSON_CONNECTION */
33703 e = 0;
33704
33705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
33706
33707 if (e) {
33708 log_packet_detailed("'ssa_controller' field error detected");
33709 }
33710 }
33711
33712 /* field 8 is folded into the header */
33713
33714 /* field 9 is folded into the header */
33715
33716 /* field 10 is folded into the header */
33717
33718 /* field 11 is folded into the header */
33719
33720 /* field 12 is folded into the header */
33721
33722 if (BV_ISSET(fields, 13)) {
33723 log_packet_detailed(" field 'birth_turn' has changed");
33724
33725#ifdef FREECIV_JSON_CONNECTION
33726 field_addr.name = "birth_turn";
33727#endif /* FREECIV_JSON_CONNECTION */
33728 e = 0;
33729
33730 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
33731
33732 if (e) {
33733 log_packet_detailed("'birth_turn' field error detected");
33734 }
33735 }
33736
33737 if (BV_ISSET(fields, 14)) {
33738 log_packet_detailed(" field 'current_form_turn' has changed");
33739
33740#ifdef FREECIV_JSON_CONNECTION
33741 field_addr.name = "current_form_turn";
33742#endif /* FREECIV_JSON_CONNECTION */
33743 e = 0;
33744
33745 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
33746
33747 if (e) {
33748 log_packet_detailed("'current_form_turn' field error detected");
33749 }
33750 }
33751
33752 if (BV_ISSET(fields, 15)) {
33753 log_packet_detailed(" field 'type' has changed");
33754
33755#ifdef FREECIV_JSON_CONNECTION
33756 field_addr.name = "type";
33757#endif /* FREECIV_JSON_CONNECTION */
33758 e = 0;
33759
33760 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
33761
33762 if (e) {
33763 log_packet_detailed("'type' field error detected");
33764 }
33765 }
33766
33767 if (BV_ISSET(fields, 16)) {
33768 log_packet_detailed(" field 'transported_by' has changed");
33769
33770#ifdef FREECIV_JSON_CONNECTION
33771 field_addr.name = "transported_by";
33772#endif /* FREECIV_JSON_CONNECTION */
33773 e = 0;
33774
33775 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
33776
33777 if (e) {
33778 log_packet_detailed("'transported_by' field error detected");
33779 }
33780 }
33781
33782 if (BV_ISSET(fields, 17)) {
33783 log_packet_detailed(" field 'carrying' has changed");
33784
33785#ifdef FREECIV_JSON_CONNECTION
33786 field_addr.name = "carrying";
33787#endif /* FREECIV_JSON_CONNECTION */
33788 e = 0;
33789
33790 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
33791
33792 if (e) {
33793 log_packet_detailed("'carrying' field error detected");
33794 }
33795 }
33796
33797 if (BV_ISSET(fields, 18)) {
33798 log_packet_detailed(" field 'movesleft' has changed");
33799
33800#ifdef FREECIV_JSON_CONNECTION
33801 field_addr.name = "movesleft";
33802#endif /* FREECIV_JSON_CONNECTION */
33803 e = 0;
33804
33805 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
33806
33807 if (e) {
33808 log_packet_detailed("'movesleft' field error detected");
33809 }
33810 }
33811
33812 if (BV_ISSET(fields, 19)) {
33813 log_packet_detailed(" field 'hp' has changed");
33814
33815#ifdef FREECIV_JSON_CONNECTION
33816 field_addr.name = "hp";
33817#endif /* FREECIV_JSON_CONNECTION */
33818 e = 0;
33819
33820 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
33821
33822 if (e) {
33823 log_packet_detailed("'hp' field error detected");
33824 }
33825 }
33826
33827 if (BV_ISSET(fields, 20)) {
33828 log_packet_detailed(" field 'fuel' has changed");
33829
33830#ifdef FREECIV_JSON_CONNECTION
33831 field_addr.name = "fuel";
33832#endif /* FREECIV_JSON_CONNECTION */
33833 e = 0;
33834
33835 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
33836
33837 if (e) {
33838 log_packet_detailed("'fuel' field error detected");
33839 }
33840 }
33841
33842 if (BV_ISSET(fields, 21)) {
33843 log_packet_detailed(" field 'activity_count' has changed");
33844
33845#ifdef FREECIV_JSON_CONNECTION
33846 field_addr.name = "activity_count";
33847#endif /* FREECIV_JSON_CONNECTION */
33848 e = 0;
33849
33850 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
33851
33852 if (e) {
33853 log_packet_detailed("'activity_count' field error detected");
33854 }
33855 }
33856
33857 if (BV_ISSET(fields, 22)) {
33858 log_packet_detailed(" field 'changed_from_count' has changed");
33859
33860#ifdef FREECIV_JSON_CONNECTION
33861 field_addr.name = "changed_from_count";
33862#endif /* FREECIV_JSON_CONNECTION */
33863 e = 0;
33864
33865 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
33866
33867 if (e) {
33868 log_packet_detailed("'changed_from_count' field error detected");
33869 }
33870 }
33871
33872 if (BV_ISSET(fields, 23)) {
33873 log_packet_detailed(" field 'goto_tile' has changed");
33874
33875#ifdef FREECIV_JSON_CONNECTION
33876 field_addr.name = "goto_tile";
33877#endif /* FREECIV_JSON_CONNECTION */
33878 e = 0;
33879
33880 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
33881
33882 if (e) {
33883 log_packet_detailed("'goto_tile' field error detected");
33884 }
33885 }
33886
33887 if (BV_ISSET(fields, 24)) {
33888 log_packet_detailed(" field 'activity' has changed");
33889
33890#ifdef FREECIV_JSON_CONNECTION
33891 field_addr.name = "activity";
33892#endif /* FREECIV_JSON_CONNECTION */
33893 e = 0;
33894
33895 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
33896
33897 if (e) {
33898 log_packet_detailed("'activity' field error detected");
33899 }
33900 }
33901
33902 if (BV_ISSET(fields, 25)) {
33903 log_packet_detailed(" field 'activity_tgt' has changed");
33904
33905#ifdef FREECIV_JSON_CONNECTION
33906 field_addr.name = "activity_tgt";
33907#endif /* FREECIV_JSON_CONNECTION */
33908 e = 0;
33909
33910 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
33911
33912 if (e) {
33913 log_packet_detailed("'activity_tgt' field error detected");
33914 }
33915 }
33916
33917 if (BV_ISSET(fields, 26)) {
33918 log_packet_detailed(" field 'changed_from' has changed");
33919
33920#ifdef FREECIV_JSON_CONNECTION
33921 field_addr.name = "changed_from";
33922#endif /* FREECIV_JSON_CONNECTION */
33923 e = 0;
33924
33925 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
33926
33927 if (e) {
33928 log_packet_detailed("'changed_from' field error detected");
33929 }
33930 }
33931
33932 if (BV_ISSET(fields, 27)) {
33933 log_packet_detailed(" field 'changed_from_tgt' has changed");
33934
33935#ifdef FREECIV_JSON_CONNECTION
33936 field_addr.name = "changed_from_tgt";
33937#endif /* FREECIV_JSON_CONNECTION */
33938 e = 0;
33939
33940 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
33941
33942 if (e) {
33943 log_packet_detailed("'changed_from_tgt' field error detected");
33944 }
33945 }
33946
33947 if (BV_ISSET(fields, 28)) {
33948 log_packet_detailed(" field 'battlegroup' has changed");
33949
33950#ifdef FREECIV_JSON_CONNECTION
33951 field_addr.name = "battlegroup";
33952#endif /* FREECIV_JSON_CONNECTION */
33953 e = 0;
33954
33955 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
33956
33957 if (e) {
33958 log_packet_detailed("'battlegroup' field error detected");
33959 }
33960 }
33961
33962 /* field 29 is folded into the header */
33963
33964 if (BV_ISSET(fields, 30)) {
33965 log_packet_detailed(" field 'orders_length' has changed");
33966
33967#ifdef FREECIV_JSON_CONNECTION
33968 field_addr.name = "orders_length";
33969#endif /* FREECIV_JSON_CONNECTION */
33970 e = 0;
33971
33972 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
33973
33974 if (e) {
33975 log_packet_detailed("'orders_length' field error detected");
33976 }
33977 }
33978
33979 if (BV_ISSET(fields, 31)) {
33980 log_packet_detailed(" field 'orders_index' has changed");
33981
33982#ifdef FREECIV_JSON_CONNECTION
33983 field_addr.name = "orders_index";
33984#endif /* FREECIV_JSON_CONNECTION */
33985 e = 0;
33986
33987 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
33988
33989 if (e) {
33990 log_packet_detailed("'orders_index' field error detected");
33991 }
33992 }
33993
33994 /* field 32 is folded into the header */
33995
33996 /* field 33 is folded into the header */
33997
33998 if (BV_ISSET(fields, 34)) {
33999 log_packet_detailed(" field 'orders' has changed");
34000
34001#ifdef FREECIV_JSON_CONNECTION
34002 field_addr.name = "orders";
34003#endif /* FREECIV_JSON_CONNECTION */
34004 e = 0;
34005
34006 {
34007 int i;
34008
34009#ifdef FREECIV_JSON_CONNECTION
34010 /* Create the array. */
34011 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
34012
34013 /* Enter array. */
34014 field_addr.sub_location = plocation_elem_new(0);
34015#endif /* FREECIV_JSON_CONNECTION */
34016
34017 for (i = 0; i < real_packet->orders_length; i++) {
34018#ifdef FREECIV_JSON_CONNECTION
34019 /* Next array element. */
34020 field_addr.sub_location->number = i;
34021#endif /* FREECIV_JSON_CONNECTION */
34022
34023 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
34024 }
34025
34026#ifdef FREECIV_JSON_CONNECTION
34027 /* Exit array. */
34028 FC_FREE(field_addr.sub_location);
34029#endif /* FREECIV_JSON_CONNECTION */
34030 }
34031
34032 if (e) {
34033 log_packet_detailed("'orders' field error detected");
34034 }
34035 }
34036
34037 if (BV_ISSET(fields, 35)) {
34038 log_packet_detailed(" field 'action_decision_want' has changed");
34039
34040#ifdef FREECIV_JSON_CONNECTION
34041 field_addr.name = "action_decision_want";
34042#endif /* FREECIV_JSON_CONNECTION */
34043 e = 0;
34044
34045 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
34046
34047 if (e) {
34048 log_packet_detailed("'action_decision_want' field error detected");
34049 }
34050 }
34051
34052 if (BV_ISSET(fields, 36)) {
34053 log_packet_detailed(" field 'action_decision_tile' has changed");
34054
34055#ifdef FREECIV_JSON_CONNECTION
34056 field_addr.name = "action_decision_tile";
34057#endif /* FREECIV_JSON_CONNECTION */
34058 e = 0;
34059
34060 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
34061
34062 if (e) {
34063 log_packet_detailed("'action_decision_tile' field error detected");
34064 }
34065 }
34066
34067 *old = *real_packet;
34068
34069 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
34070 if (nullptr != *hash) {
34072 }
34073
34074#else /* FREECIV_DELTA_PROTOCOL */
34075#ifdef FREECIV_JSON_CONNECTION
34076 field_addr.name = "owner";
34077#endif /* FREECIV_JSON_CONNECTION */
34078 e = 0;
34079
34080 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
34081
34082 if (e) {
34083 log_packet_detailed("'owner' field error detected");
34084 }
34085
34086#ifdef FREECIV_JSON_CONNECTION
34087 field_addr.name = "nationality";
34088#endif /* FREECIV_JSON_CONNECTION */
34089 e = 0;
34090
34091 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
34092
34093 if (e) {
34094 log_packet_detailed("'nationality' field error detected");
34095 }
34096
34097#ifdef FREECIV_JSON_CONNECTION
34098 field_addr.name = "tile";
34099#endif /* FREECIV_JSON_CONNECTION */
34100 e = 0;
34101
34102 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
34103
34104 if (e) {
34105 log_packet_detailed("'tile' field error detected");
34106 }
34107
34108#ifdef FREECIV_JSON_CONNECTION
34109 field_addr.name = "facing";
34110#endif /* FREECIV_JSON_CONNECTION */
34111 e = 0;
34112
34113 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
34114
34115 if (e) {
34116 log_packet_detailed("'facing' field error detected");
34117 }
34118
34119#ifdef FREECIV_JSON_CONNECTION
34120 field_addr.name = "homecity";
34121#endif /* FREECIV_JSON_CONNECTION */
34122 e = 0;
34123
34124 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
34125
34126 if (e) {
34127 log_packet_detailed("'homecity' field error detected");
34128 }
34129
34130#ifdef FREECIV_JSON_CONNECTION
34131 field_addr.name = "upkeep";
34132#endif /* FREECIV_JSON_CONNECTION */
34133 e = 0;
34134
34135 {
34136 int i;
34137
34138#ifdef FREECIV_JSON_CONNECTION
34139 /* Create the array. */
34140 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
34141
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 /* Next array element. */
34149 field_addr.sub_location->number = i;
34150#endif /* FREECIV_JSON_CONNECTION */
34151
34152 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
34153 }
34154
34155#ifdef FREECIV_JSON_CONNECTION
34156 /* Exit array. */
34157 FC_FREE(field_addr.sub_location);
34158#endif /* FREECIV_JSON_CONNECTION */
34159 }
34160
34161 if (e) {
34162 log_packet_detailed("'upkeep' field error detected");
34163 }
34164
34165#ifdef FREECIV_JSON_CONNECTION
34166 field_addr.name = "veteran";
34167#endif /* FREECIV_JSON_CONNECTION */
34168 e = 0;
34169
34170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
34171
34172 if (e) {
34173 log_packet_detailed("'veteran' field error detected");
34174 }
34175
34176#ifdef FREECIV_JSON_CONNECTION
34177 field_addr.name = "ssa_controller";
34178#endif /* FREECIV_JSON_CONNECTION */
34179 e = 0;
34180
34181 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
34182
34183 if (e) {
34184 log_packet_detailed("'ssa_controller' field error detected");
34185 }
34186
34187#ifdef FREECIV_JSON_CONNECTION
34188 field_addr.name = "paradropped";
34189#endif /* FREECIV_JSON_CONNECTION */
34190 e = 0;
34191
34192 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
34193
34194 if (e) {
34195 log_packet_detailed("'paradropped' field error detected");
34196 }
34197
34198#ifdef FREECIV_JSON_CONNECTION
34199 field_addr.name = "occupied";
34200#endif /* FREECIV_JSON_CONNECTION */
34201 e = 0;
34202
34203 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
34204
34205 if (e) {
34206 log_packet_detailed("'occupied' field error detected");
34207 }
34208
34209#ifdef FREECIV_JSON_CONNECTION
34210 field_addr.name = "transported";
34211#endif /* FREECIV_JSON_CONNECTION */
34212 e = 0;
34213
34214 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
34215
34216 if (e) {
34217 log_packet_detailed("'transported' field error detected");
34218 }
34219
34220#ifdef FREECIV_JSON_CONNECTION
34221 field_addr.name = "done_moving";
34222#endif /* FREECIV_JSON_CONNECTION */
34223 e = 0;
34224
34225 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
34226
34227 if (e) {
34228 log_packet_detailed("'done_moving' field error detected");
34229 }
34230
34231#ifdef FREECIV_JSON_CONNECTION
34232 field_addr.name = "stay";
34233#endif /* FREECIV_JSON_CONNECTION */
34234 e = 0;
34235
34236 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
34237
34238 if (e) {
34239 log_packet_detailed("'stay' field error detected");
34240 }
34241
34242#ifdef FREECIV_JSON_CONNECTION
34243 field_addr.name = "birth_turn";
34244#endif /* FREECIV_JSON_CONNECTION */
34245 e = 0;
34246
34247 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
34248
34249 if (e) {
34250 log_packet_detailed("'birth_turn' field error detected");
34251 }
34252
34253#ifdef FREECIV_JSON_CONNECTION
34254 field_addr.name = "current_form_turn";
34255#endif /* FREECIV_JSON_CONNECTION */
34256 e = 0;
34257
34258 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
34259
34260 if (e) {
34261 log_packet_detailed("'current_form_turn' field error detected");
34262 }
34263
34264#ifdef FREECIV_JSON_CONNECTION
34265 field_addr.name = "type";
34266#endif /* FREECIV_JSON_CONNECTION */
34267 e = 0;
34268
34269 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34270
34271 if (e) {
34272 log_packet_detailed("'type' field error detected");
34273 }
34274
34275#ifdef FREECIV_JSON_CONNECTION
34276 field_addr.name = "transported_by";
34277#endif /* FREECIV_JSON_CONNECTION */
34278 e = 0;
34279
34280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
34281
34282 if (e) {
34283 log_packet_detailed("'transported_by' field error detected");
34284 }
34285
34286#ifdef FREECIV_JSON_CONNECTION
34287 field_addr.name = "carrying";
34288#endif /* FREECIV_JSON_CONNECTION */
34289 e = 0;
34290
34291 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
34292
34293 if (e) {
34294 log_packet_detailed("'carrying' field error detected");
34295 }
34296
34297#ifdef FREECIV_JSON_CONNECTION
34298 field_addr.name = "movesleft";
34299#endif /* FREECIV_JSON_CONNECTION */
34300 e = 0;
34301
34302 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
34303
34304 if (e) {
34305 log_packet_detailed("'movesleft' field error detected");
34306 }
34307
34308#ifdef FREECIV_JSON_CONNECTION
34309 field_addr.name = "hp";
34310#endif /* FREECIV_JSON_CONNECTION */
34311 e = 0;
34312
34313 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
34314
34315 if (e) {
34316 log_packet_detailed("'hp' field error detected");
34317 }
34318
34319#ifdef FREECIV_JSON_CONNECTION
34320 field_addr.name = "fuel";
34321#endif /* FREECIV_JSON_CONNECTION */
34322 e = 0;
34323
34324 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
34325
34326 if (e) {
34327 log_packet_detailed("'fuel' field error detected");
34328 }
34329
34330#ifdef FREECIV_JSON_CONNECTION
34331 field_addr.name = "activity_count";
34332#endif /* FREECIV_JSON_CONNECTION */
34333 e = 0;
34334
34335 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
34336
34337 if (e) {
34338 log_packet_detailed("'activity_count' field error detected");
34339 }
34340
34341#ifdef FREECIV_JSON_CONNECTION
34342 field_addr.name = "changed_from_count";
34343#endif /* FREECIV_JSON_CONNECTION */
34344 e = 0;
34345
34346 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
34347
34348 if (e) {
34349 log_packet_detailed("'changed_from_count' field error detected");
34350 }
34351
34352#ifdef FREECIV_JSON_CONNECTION
34353 field_addr.name = "goto_tile";
34354#endif /* FREECIV_JSON_CONNECTION */
34355 e = 0;
34356
34357 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
34358
34359 if (e) {
34360 log_packet_detailed("'goto_tile' field error detected");
34361 }
34362
34363#ifdef FREECIV_JSON_CONNECTION
34364 field_addr.name = "activity";
34365#endif /* FREECIV_JSON_CONNECTION */
34366 e = 0;
34367
34368 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
34369
34370 if (e) {
34371 log_packet_detailed("'activity' field error detected");
34372 }
34373
34374#ifdef FREECIV_JSON_CONNECTION
34375 field_addr.name = "activity_tgt";
34376#endif /* FREECIV_JSON_CONNECTION */
34377 e = 0;
34378
34379 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
34380
34381 if (e) {
34382 log_packet_detailed("'activity_tgt' field error detected");
34383 }
34384
34385#ifdef FREECIV_JSON_CONNECTION
34386 field_addr.name = "changed_from";
34387#endif /* FREECIV_JSON_CONNECTION */
34388 e = 0;
34389
34390 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
34391
34392 if (e) {
34393 log_packet_detailed("'changed_from' field error detected");
34394 }
34395
34396#ifdef FREECIV_JSON_CONNECTION
34397 field_addr.name = "changed_from_tgt";
34398#endif /* FREECIV_JSON_CONNECTION */
34399 e = 0;
34400
34401 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
34402
34403 if (e) {
34404 log_packet_detailed("'changed_from_tgt' field error detected");
34405 }
34406
34407#ifdef FREECIV_JSON_CONNECTION
34408 field_addr.name = "battlegroup";
34409#endif /* FREECIV_JSON_CONNECTION */
34410 e = 0;
34411
34412 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
34413
34414 if (e) {
34415 log_packet_detailed("'battlegroup' field error detected");
34416 }
34417
34418#ifdef FREECIV_JSON_CONNECTION
34419 field_addr.name = "has_orders";
34420#endif /* FREECIV_JSON_CONNECTION */
34421 e = 0;
34422
34423 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_orders);
34424
34425 if (e) {
34426 log_packet_detailed("'has_orders' field error detected");
34427 }
34428
34429#ifdef FREECIV_JSON_CONNECTION
34430 field_addr.name = "orders_length";
34431#endif /* FREECIV_JSON_CONNECTION */
34432 e = 0;
34433
34434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
34435
34436 if (e) {
34437 log_packet_detailed("'orders_length' field error detected");
34438 }
34439
34440#ifdef FREECIV_JSON_CONNECTION
34441 field_addr.name = "orders_index";
34442#endif /* FREECIV_JSON_CONNECTION */
34443 e = 0;
34444
34445 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
34446
34447 if (e) {
34448 log_packet_detailed("'orders_index' field error detected");
34449 }
34450
34451#ifdef FREECIV_JSON_CONNECTION
34452 field_addr.name = "orders_repeat";
34453#endif /* FREECIV_JSON_CONNECTION */
34454 e = 0;
34455
34456 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_repeat);
34457
34458 if (e) {
34459 log_packet_detailed("'orders_repeat' field error detected");
34460 }
34461
34462#ifdef FREECIV_JSON_CONNECTION
34463 field_addr.name = "orders_vigilant";
34464#endif /* FREECIV_JSON_CONNECTION */
34465 e = 0;
34466
34467 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_vigilant);
34468
34469 if (e) {
34470 log_packet_detailed("'orders_vigilant' field error detected");
34471 }
34472
34473#ifdef FREECIV_JSON_CONNECTION
34474 field_addr.name = "orders";
34475#endif /* FREECIV_JSON_CONNECTION */
34476 e = 0;
34477
34478 {
34479 int i;
34480
34481#ifdef FREECIV_JSON_CONNECTION
34482 /* Create the array. */
34483 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
34484
34485 /* Enter array. */
34486 field_addr.sub_location = plocation_elem_new(0);
34487#endif /* FREECIV_JSON_CONNECTION */
34488
34489 for (i = 0; i < real_packet->orders_length; i++) {
34490#ifdef FREECIV_JSON_CONNECTION
34491 /* Next array element. */
34492 field_addr.sub_location->number = i;
34493#endif /* FREECIV_JSON_CONNECTION */
34494
34495 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
34496 }
34497
34498#ifdef FREECIV_JSON_CONNECTION
34499 /* Exit array. */
34500 FC_FREE(field_addr.sub_location);
34501#endif /* FREECIV_JSON_CONNECTION */
34502 }
34503
34504 if (e) {
34505 log_packet_detailed("'orders' field error detected");
34506 }
34507
34508#ifdef FREECIV_JSON_CONNECTION
34509 field_addr.name = "action_decision_want";
34510#endif /* FREECIV_JSON_CONNECTION */
34511 e = 0;
34512
34513 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
34514
34515 if (e) {
34516 log_packet_detailed("'action_decision_want' field error detected");
34517 }
34518
34519#ifdef FREECIV_JSON_CONNECTION
34520 field_addr.name = "action_decision_tile";
34521#endif /* FREECIV_JSON_CONNECTION */
34522 e = 0;
34523
34524 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
34525
34526 if (e) {
34527 log_packet_detailed("'action_decision_tile' field error detected");
34528 }
34529#endif /* FREECIV_DELTA_PROTOCOL */
34530
34532}
34533
34534int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
34535{
34536 if (!pc->used) {
34537 log_error("WARNING: trying to send data to the closed connection %s",
34539 return -1;
34540 }
34541 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_INFO].packet != nullptr, -1,
34542 "Handler for PACKET_UNIT_INFO not installed");
34543 return pc->phs.handlers->send[PACKET_UNIT_INFO].packet(pc, packet);
34544}
34545
34546void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
34547{
34548 conn_list_iterate(dest, pconn) {
34551}
34552
34553static inline void init_packet_unit_short_info(struct packet_unit_short_info *packet)
34554{
34555 memset(packet, 0, sizeof(*packet));
34556}
34557
34558#define free_packet_unit_short_info(_packet) (void) 0
34559#define destroy_packet_unit_short_info free
34560
34561#ifdef FREECIV_DELTA_PROTOCOL
34563{
34564 const struct packet_unit_short_info *key = (const struct packet_unit_short_info *) vkey;
34565 genhash_val_t result = 0;
34566
34567 result += key->id;
34568
34569 result &= 0xFFFFFFFF;
34570 return result;
34571}
34572
34573static bool cmp_packet_unit_short_info_100(const void *vkey1, const void *vkey2)
34574{
34575 const struct packet_unit_short_info *old = (const struct packet_unit_short_info *) vkey1;
34576 const struct packet_unit_short_info *real_packet = (const struct packet_unit_short_info *) vkey2;
34577 bool differ;
34578
34579 differ = (old->id != real_packet->id);
34580
34581 return !differ;
34582}
34584#endif /* FREECIV_DELTA_PROTOCOL */
34585
34587{
34588#define FREE_PACKET_STRUCT(_packet) free_packet_unit_short_info(_packet)
34590
34591#ifdef FREECIV_JSON_CONNECTION
34592 struct plocation field_addr;
34593 {
34594 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
34597 }
34598#endif /* FREECIV_JSON_CONNECTION */
34599
34600#ifdef FREECIV_JSON_CONNECTION
34601 field_addr.name = "id";
34602#endif /* FREECIV_JSON_CONNECTION */
34603
34604 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
34606 }
34607
34608 log_packet_detailed("packet_unit_short_info_100: got info about (%d)",
34609 real_packet->id);
34610
34611#ifdef FREECIV_DELTA_PROTOCOL
34614 struct genhash **hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
34615
34616 if (nullptr == *hash) {
34618 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34619 }
34620
34621 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34622 *real_packet = *old;
34623 } else {
34624 /* packet is already initialized empty */
34625 log_packet_detailed(" no old info");
34626 }
34627
34628#ifdef FREECIV_JSON_CONNECTION
34629 field_addr.name = "fields";
34630#endif /* FREECIV_JSON_CONNECTION */
34631 DIO_BV_GET(&din, &field_addr, fields);
34632
34633 if (BV_ISSET(fields, 0)) {
34634 log_packet_detailed(" got field 'owner'");
34635
34636#ifdef FREECIV_JSON_CONNECTION
34637 field_addr.name = "owner";
34638#endif /* FREECIV_JSON_CONNECTION */
34639
34640 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34642 }
34643 }
34644
34645 if (BV_ISSET(fields, 1)) {
34646 log_packet_detailed(" got field 'tile'");
34647
34648#ifdef FREECIV_JSON_CONNECTION
34649 field_addr.name = "tile";
34650#endif /* FREECIV_JSON_CONNECTION */
34651
34652 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34654 }
34655 }
34656
34657 if (BV_ISSET(fields, 2)) {
34658 log_packet_detailed(" got field 'facing'");
34659
34660#ifdef FREECIV_JSON_CONNECTION
34661 field_addr.name = "facing";
34662#endif /* FREECIV_JSON_CONNECTION */
34663
34664 {
34665 int readin;
34666
34667 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34669 }
34670 real_packet->facing = readin;
34671 }
34672 }
34673
34674 if (BV_ISSET(fields, 3)) {
34675 log_packet_detailed(" got field 'type'");
34676
34677#ifdef FREECIV_JSON_CONNECTION
34678 field_addr.name = "type";
34679#endif /* FREECIV_JSON_CONNECTION */
34680
34681 {
34682 int readin;
34683
34684 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34686 }
34687 real_packet->type = readin;
34688 }
34689 }
34690
34691 if (BV_ISSET(fields, 4)) {
34692 log_packet_detailed(" got field 'veteran'");
34693
34694#ifdef FREECIV_JSON_CONNECTION
34695 field_addr.name = "veteran";
34696#endif /* FREECIV_JSON_CONNECTION */
34697
34698 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34700 }
34701 }
34702
34703 real_packet->occupied = BV_ISSET(fields, 5);
34704
34705 real_packet->transported = BV_ISSET(fields, 6);
34706
34707 if (BV_ISSET(fields, 7)) {
34708 log_packet_detailed(" got field 'hp'");
34709
34710#ifdef FREECIV_JSON_CONNECTION
34711 field_addr.name = "hp";
34712#endif /* FREECIV_JSON_CONNECTION */
34713
34714 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34716 }
34717 }
34718
34719 if (BV_ISSET(fields, 8)) {
34720 log_packet_detailed(" got field 'activity'");
34721
34722#ifdef FREECIV_JSON_CONNECTION
34723 field_addr.name = "activity";
34724#endif /* FREECIV_JSON_CONNECTION */
34725
34726 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34728 }
34729 }
34730
34731 if (BV_ISSET(fields, 9)) {
34732 log_packet_detailed(" got field 'activity_tgt'");
34733
34734#ifdef FREECIV_JSON_CONNECTION
34735 field_addr.name = "activity_tgt";
34736#endif /* FREECIV_JSON_CONNECTION */
34737
34738 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34739 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34740 }
34741 }
34742
34743 if (BV_ISSET(fields, 10)) {
34744 log_packet_detailed(" got field 'transported_by'");
34745
34746#ifdef FREECIV_JSON_CONNECTION
34747 field_addr.name = "transported_by";
34748#endif /* FREECIV_JSON_CONNECTION */
34749
34750 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34751 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34752 }
34753 }
34754
34755 if (BV_ISSET(fields, 11)) {
34756 log_packet_detailed(" got field 'packet_use'");
34757
34758#ifdef FREECIV_JSON_CONNECTION
34759 field_addr.name = "packet_use";
34760#endif /* FREECIV_JSON_CONNECTION */
34761
34762 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34763 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34764 }
34765 }
34766
34767 if (BV_ISSET(fields, 12)) {
34768 log_packet_detailed(" got field 'info_city_id'");
34769
34770#ifdef FREECIV_JSON_CONNECTION
34771 field_addr.name = "info_city_id";
34772#endif /* FREECIV_JSON_CONNECTION */
34773
34774 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34775 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34776 }
34777 }
34778
34779 if (nullptr == old) {
34780 old = fc_malloc(sizeof(*old));
34782 *old = *real_packet;
34784 } else {
34785 *old = *real_packet;
34786 }
34787
34788 hash = pc->phs.received + PACKET_UNIT_INFO;
34789 if (nullptr != *hash) {
34791 }
34792
34793#else /* FREECIV_DELTA_PROTOCOL */
34794#ifdef FREECIV_JSON_CONNECTION
34795 field_addr.name = "owner";
34796#endif /* FREECIV_JSON_CONNECTION */
34797
34798 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34800 }
34801
34802#ifdef FREECIV_JSON_CONNECTION
34803 field_addr.name = "tile";
34804#endif /* FREECIV_JSON_CONNECTION */
34805
34806 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34808 }
34809
34810#ifdef FREECIV_JSON_CONNECTION
34811 field_addr.name = "facing";
34812#endif /* FREECIV_JSON_CONNECTION */
34813
34814 {
34815 int readin;
34816
34817 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34819 }
34820 real_packet->facing = readin;
34821 }
34822
34823#ifdef FREECIV_JSON_CONNECTION
34824 field_addr.name = "type";
34825#endif /* FREECIV_JSON_CONNECTION */
34826
34827 {
34828 int readin;
34829
34830 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34832 }
34833 real_packet->type = readin;
34834 }
34835
34836#ifdef FREECIV_JSON_CONNECTION
34837 field_addr.name = "veteran";
34838#endif /* FREECIV_JSON_CONNECTION */
34839
34840 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34842 }
34843
34844#ifdef FREECIV_JSON_CONNECTION
34845 field_addr.name = "occupied";
34846#endif /* FREECIV_JSON_CONNECTION */
34847
34848 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
34850 }
34851
34852#ifdef FREECIV_JSON_CONNECTION
34853 field_addr.name = "transported";
34854#endif /* FREECIV_JSON_CONNECTION */
34855
34856 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
34857 RECEIVE_PACKET_FIELD_ERROR(transported);
34858 }
34859
34860#ifdef FREECIV_JSON_CONNECTION
34861 field_addr.name = "hp";
34862#endif /* FREECIV_JSON_CONNECTION */
34863
34864 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34866 }
34867
34868#ifdef FREECIV_JSON_CONNECTION
34869 field_addr.name = "activity";
34870#endif /* FREECIV_JSON_CONNECTION */
34871
34872 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34874 }
34875
34876#ifdef FREECIV_JSON_CONNECTION
34877 field_addr.name = "activity_tgt";
34878#endif /* FREECIV_JSON_CONNECTION */
34879
34880 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34881 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34882 }
34883
34884#ifdef FREECIV_JSON_CONNECTION
34885 field_addr.name = "transported_by";
34886#endif /* FREECIV_JSON_CONNECTION */
34887
34888 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34889 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34890 }
34891
34892#ifdef FREECIV_JSON_CONNECTION
34893 field_addr.name = "packet_use";
34894#endif /* FREECIV_JSON_CONNECTION */
34895
34896 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34897 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34898 }
34899
34900#ifdef FREECIV_JSON_CONNECTION
34901 field_addr.name = "info_city_id";
34902#endif /* FREECIV_JSON_CONNECTION */
34903
34904 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34905 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34906 }
34907#endif /* FREECIV_DELTA_PROTOCOL */
34908
34910#undef FREE_PACKET_STRUCT
34911}
34912
34913static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
34914{
34915 const struct packet_unit_short_info *real_packet = packet;
34916 int e;
34918
34919 log_packet_detailed("packet_unit_short_info_100: sending info about (%d)",
34920 real_packet->id);
34921
34922#ifdef FREECIV_DELTA_PROTOCOL
34925 bool differ;
34926 int different = force_to_send;
34927 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
34928
34929 if (nullptr == *hash) {
34931 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34932 }
34933 BV_CLR_ALL(fields);
34934
34935 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34936 old = fc_malloc(sizeof(*old));
34937 /* temporary bitcopy just to insert correctly */
34938 *old = *real_packet;
34941 different = 1; /* Force to send. */
34942 }
34943
34944 differ = (old->owner != real_packet->owner);
34945 if (differ) {
34946 different++;
34947 BV_SET(fields, 0);
34948 }
34949
34950 differ = (old->tile != real_packet->tile);
34951 if (differ) {
34952 different++;
34953 BV_SET(fields, 1);
34954 }
34955
34956 differ = (old->facing != real_packet->facing);
34957 if (differ) {
34958 different++;
34959 BV_SET(fields, 2);
34960 }
34961
34962 differ = (old->type != real_packet->type);
34963 if (differ) {
34964 different++;
34965 BV_SET(fields, 3);
34966 }
34967
34968 differ = (old->veteran != real_packet->veteran);
34969 if (differ) {
34970 different++;
34971 BV_SET(fields, 4);
34972 }
34973
34974 differ = (old->occupied != real_packet->occupied);
34975 if (differ) {
34976 different++;
34977 }
34978 /* folded into head */
34979 if (real_packet->occupied) {
34980 BV_SET(fields, 5);
34981 }
34982
34983 differ = (old->transported != real_packet->transported);
34984 if (differ) {
34985 different++;
34986 }
34987 /* folded into head */
34988 if (real_packet->transported) {
34989 BV_SET(fields, 6);
34990 }
34991
34992 differ = (old->hp != real_packet->hp);
34993 if (differ) {
34994 different++;
34995 BV_SET(fields, 7);
34996 }
34997
34998 differ = (old->activity != real_packet->activity);
34999 if (differ) {
35000 different++;
35001 BV_SET(fields, 8);
35002 }
35003
35004 differ = (old->activity_tgt != real_packet->activity_tgt);
35005 if (differ) {
35006 different++;
35007 BV_SET(fields, 9);
35008 }
35009
35010 differ = (old->transported_by != real_packet->transported_by);
35011 if (differ) {
35012 different++;
35013 BV_SET(fields, 10);
35014 }
35015
35016 differ = (old->packet_use != real_packet->packet_use);
35017 if (differ) {
35018 different++;
35019 BV_SET(fields, 11);
35020 }
35021
35022 differ = (old->info_city_id != real_packet->info_city_id);
35023 if (differ) {
35024 different++;
35025 BV_SET(fields, 12);
35026 }
35027
35028 if (different == 0) {
35029 log_packet_detailed(" no change -> discard");
35031 }
35032#endif /* FREECIV_DELTA_PROTOCOL */
35033
35034#ifdef FREECIV_JSON_CONNECTION
35035 struct plocation field_addr;
35036 {
35037 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35040 }
35041#endif /* FREECIV_JSON_CONNECTION */
35042
35043#ifdef FREECIV_JSON_CONNECTION
35044 field_addr.name = "id";
35045#endif /* FREECIV_JSON_CONNECTION */
35046 e = 0;
35047
35048 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
35049
35050 if (e) {
35051 log_packet_detailed("'id' field error detected");
35052 }
35053
35054#ifdef FREECIV_DELTA_PROTOCOL
35055#ifdef FREECIV_JSON_CONNECTION
35056 field_addr.name = "fields";
35057#endif /* FREECIV_JSON_CONNECTION */
35058 e = 0;
35059 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35060 if (e) {
35061 log_packet_detailed("fields bitvector error detected");
35062 }
35063
35064 if (BV_ISSET(fields, 0)) {
35065 log_packet_detailed(" field 'owner' has changed");
35066
35067#ifdef FREECIV_JSON_CONNECTION
35068 field_addr.name = "owner";
35069#endif /* FREECIV_JSON_CONNECTION */
35070 e = 0;
35071
35072 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
35073
35074 if (e) {
35075 log_packet_detailed("'owner' field error detected");
35076 }
35077 }
35078
35079 if (BV_ISSET(fields, 1)) {
35080 log_packet_detailed(" field 'tile' has changed");
35081
35082#ifdef FREECIV_JSON_CONNECTION
35083 field_addr.name = "tile";
35084#endif /* FREECIV_JSON_CONNECTION */
35085 e = 0;
35086
35087 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35088
35089 if (e) {
35090 log_packet_detailed("'tile' field error detected");
35091 }
35092 }
35093
35094 if (BV_ISSET(fields, 2)) {
35095 log_packet_detailed(" field 'facing' has changed");
35096
35097#ifdef FREECIV_JSON_CONNECTION
35098 field_addr.name = "facing";
35099#endif /* FREECIV_JSON_CONNECTION */
35100 e = 0;
35101
35102 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35103
35104 if (e) {
35105 log_packet_detailed("'facing' field error detected");
35106 }
35107 }
35108
35109 if (BV_ISSET(fields, 3)) {
35110 log_packet_detailed(" field 'type' has changed");
35111
35112#ifdef FREECIV_JSON_CONNECTION
35113 field_addr.name = "type";
35114#endif /* FREECIV_JSON_CONNECTION */
35115 e = 0;
35116
35117 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35118
35119 if (e) {
35120 log_packet_detailed("'type' field error detected");
35121 }
35122 }
35123
35124 if (BV_ISSET(fields, 4)) {
35125 log_packet_detailed(" field 'veteran' has changed");
35126
35127#ifdef FREECIV_JSON_CONNECTION
35128 field_addr.name = "veteran";
35129#endif /* FREECIV_JSON_CONNECTION */
35130 e = 0;
35131
35132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35133
35134 if (e) {
35135 log_packet_detailed("'veteran' field error detected");
35136 }
35137 }
35138
35139 /* field 5 is folded into the header */
35140
35141 /* field 6 is folded into the header */
35142
35143 if (BV_ISSET(fields, 7)) {
35144 log_packet_detailed(" field 'hp' has changed");
35145
35146#ifdef FREECIV_JSON_CONNECTION
35147 field_addr.name = "hp";
35148#endif /* FREECIV_JSON_CONNECTION */
35149 e = 0;
35150
35151 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35152
35153 if (e) {
35154 log_packet_detailed("'hp' field error detected");
35155 }
35156 }
35157
35158 if (BV_ISSET(fields, 8)) {
35159 log_packet_detailed(" field 'activity' has changed");
35160
35161#ifdef FREECIV_JSON_CONNECTION
35162 field_addr.name = "activity";
35163#endif /* FREECIV_JSON_CONNECTION */
35164 e = 0;
35165
35166 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35167
35168 if (e) {
35169 log_packet_detailed("'activity' field error detected");
35170 }
35171 }
35172
35173 if (BV_ISSET(fields, 9)) {
35174 log_packet_detailed(" field 'activity_tgt' has changed");
35175
35176#ifdef FREECIV_JSON_CONNECTION
35177 field_addr.name = "activity_tgt";
35178#endif /* FREECIV_JSON_CONNECTION */
35179 e = 0;
35180
35181 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35182
35183 if (e) {
35184 log_packet_detailed("'activity_tgt' field error detected");
35185 }
35186 }
35187
35188 if (BV_ISSET(fields, 10)) {
35189 log_packet_detailed(" field 'transported_by' has changed");
35190
35191#ifdef FREECIV_JSON_CONNECTION
35192 field_addr.name = "transported_by";
35193#endif /* FREECIV_JSON_CONNECTION */
35194 e = 0;
35195
35196 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35197
35198 if (e) {
35199 log_packet_detailed("'transported_by' field error detected");
35200 }
35201 }
35202
35203 if (BV_ISSET(fields, 11)) {
35204 log_packet_detailed(" field 'packet_use' has changed");
35205
35206#ifdef FREECIV_JSON_CONNECTION
35207 field_addr.name = "packet_use";
35208#endif /* FREECIV_JSON_CONNECTION */
35209 e = 0;
35210
35211 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35212
35213 if (e) {
35214 log_packet_detailed("'packet_use' field error detected");
35215 }
35216 }
35217
35218 if (BV_ISSET(fields, 12)) {
35219 log_packet_detailed(" field 'info_city_id' has changed");
35220
35221#ifdef FREECIV_JSON_CONNECTION
35222 field_addr.name = "info_city_id";
35223#endif /* FREECIV_JSON_CONNECTION */
35224 e = 0;
35225
35226 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35227
35228 if (e) {
35229 log_packet_detailed("'info_city_id' field error detected");
35230 }
35231 }
35232
35233 *old = *real_packet;
35234
35235 hash = pc->phs.sent + PACKET_UNIT_INFO;
35236 if (nullptr != *hash) {
35238 }
35239
35240#else /* FREECIV_DELTA_PROTOCOL */
35241#ifdef FREECIV_JSON_CONNECTION
35242 field_addr.name = "owner";
35243#endif /* FREECIV_JSON_CONNECTION */
35244 e = 0;
35245
35246 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
35247
35248 if (e) {
35249 log_packet_detailed("'owner' field error detected");
35250 }
35251
35252#ifdef FREECIV_JSON_CONNECTION
35253 field_addr.name = "tile";
35254#endif /* FREECIV_JSON_CONNECTION */
35255 e = 0;
35256
35257 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35258
35259 if (e) {
35260 log_packet_detailed("'tile' field error detected");
35261 }
35262
35263#ifdef FREECIV_JSON_CONNECTION
35264 field_addr.name = "facing";
35265#endif /* FREECIV_JSON_CONNECTION */
35266 e = 0;
35267
35268 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35269
35270 if (e) {
35271 log_packet_detailed("'facing' field error detected");
35272 }
35273
35274#ifdef FREECIV_JSON_CONNECTION
35275 field_addr.name = "type";
35276#endif /* FREECIV_JSON_CONNECTION */
35277 e = 0;
35278
35279 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35280
35281 if (e) {
35282 log_packet_detailed("'type' field error detected");
35283 }
35284
35285#ifdef FREECIV_JSON_CONNECTION
35286 field_addr.name = "veteran";
35287#endif /* FREECIV_JSON_CONNECTION */
35288 e = 0;
35289
35290 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35291
35292 if (e) {
35293 log_packet_detailed("'veteran' field error detected");
35294 }
35295
35296#ifdef FREECIV_JSON_CONNECTION
35297 field_addr.name = "occupied";
35298#endif /* FREECIV_JSON_CONNECTION */
35299 e = 0;
35300
35301 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
35302
35303 if (e) {
35304 log_packet_detailed("'occupied' field error detected");
35305 }
35306
35307#ifdef FREECIV_JSON_CONNECTION
35308 field_addr.name = "transported";
35309#endif /* FREECIV_JSON_CONNECTION */
35310 e = 0;
35311
35312 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
35313
35314 if (e) {
35315 log_packet_detailed("'transported' field error detected");
35316 }
35317
35318#ifdef FREECIV_JSON_CONNECTION
35319 field_addr.name = "hp";
35320#endif /* FREECIV_JSON_CONNECTION */
35321 e = 0;
35322
35323 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35324
35325 if (e) {
35326 log_packet_detailed("'hp' field error detected");
35327 }
35328
35329#ifdef FREECIV_JSON_CONNECTION
35330 field_addr.name = "activity";
35331#endif /* FREECIV_JSON_CONNECTION */
35332 e = 0;
35333
35334 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35335
35336 if (e) {
35337 log_packet_detailed("'activity' field error detected");
35338 }
35339
35340#ifdef FREECIV_JSON_CONNECTION
35341 field_addr.name = "activity_tgt";
35342#endif /* FREECIV_JSON_CONNECTION */
35343 e = 0;
35344
35345 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35346
35347 if (e) {
35348 log_packet_detailed("'activity_tgt' field error detected");
35349 }
35350
35351#ifdef FREECIV_JSON_CONNECTION
35352 field_addr.name = "transported_by";
35353#endif /* FREECIV_JSON_CONNECTION */
35354 e = 0;
35355
35356 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35357
35358 if (e) {
35359 log_packet_detailed("'transported_by' field error detected");
35360 }
35361
35362#ifdef FREECIV_JSON_CONNECTION
35363 field_addr.name = "packet_use";
35364#endif /* FREECIV_JSON_CONNECTION */
35365 e = 0;
35366
35367 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35368
35369 if (e) {
35370 log_packet_detailed("'packet_use' field error detected");
35371 }
35372
35373#ifdef FREECIV_JSON_CONNECTION
35374 field_addr.name = "info_city_id";
35375#endif /* FREECIV_JSON_CONNECTION */
35376 e = 0;
35377
35378 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35379
35380 if (e) {
35381 log_packet_detailed("'info_city_id' field error detected");
35382 }
35383#endif /* FREECIV_DELTA_PROTOCOL */
35384
35386}
35387
35388int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
35389{
35390 if (!pc->used) {
35391 log_error("WARNING: trying to send data to the closed connection %s",
35393 return -1;
35394 }
35395 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send != nullptr, -1,
35396 "Handler for PACKET_UNIT_SHORT_INFO not installed");
35397 return pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send(pc, packet, force_to_send);
35398}
35399
35400void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
35401{
35402 conn_list_iterate(dest, pconn) {
35403 send_packet_unit_short_info(pconn, packet, force_to_send);
35405}
35406
35408{
35409 memset(packet, 0, sizeof(*packet));
35410}
35411
35412#define free_packet_unit_combat_info(_packet) (void) 0
35413#define destroy_packet_unit_combat_info free
35414
35415#ifdef FREECIV_DELTA_PROTOCOL
35416#define hash_packet_unit_combat_info_100 hash_const
35417#define cmp_packet_unit_combat_info_100 cmp_const
35419#endif /* FREECIV_DELTA_PROTOCOL */
35420
35422{
35423#define FREE_PACKET_STRUCT(_packet) free_packet_unit_combat_info(_packet)
35425
35426#ifdef FREECIV_JSON_CONNECTION
35427 struct plocation field_addr;
35428 {
35429 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35432 }
35433#endif /* FREECIV_JSON_CONNECTION */
35434
35435 log_packet_detailed("packet_unit_combat_info_100: got info about ()");
35436
35437#ifdef FREECIV_DELTA_PROTOCOL
35440 struct genhash **hash = pc->phs.received + PACKET_UNIT_COMBAT_INFO;
35441
35442 if (nullptr == *hash) {
35444 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35445 }
35446
35447 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35448 *real_packet = *old;
35449 } else {
35450 /* packet is already initialized empty */
35451 log_packet_detailed(" no old info");
35452 }
35453
35454#ifdef FREECIV_JSON_CONNECTION
35455 field_addr.name = "fields";
35456#endif /* FREECIV_JSON_CONNECTION */
35457 DIO_BV_GET(&din, &field_addr, fields);
35458
35459 if (BV_ISSET(fields, 0)) {
35460 log_packet_detailed(" got field 'attacker_unit_id'");
35461
35462#ifdef FREECIV_JSON_CONNECTION
35463 field_addr.name = "attacker_unit_id";
35464#endif /* FREECIV_JSON_CONNECTION */
35465
35466 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35467 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35468 }
35469 }
35470
35471 if (BV_ISSET(fields, 1)) {
35472 log_packet_detailed(" got field 'defender_unit_id'");
35473
35474#ifdef FREECIV_JSON_CONNECTION
35475 field_addr.name = "defender_unit_id";
35476#endif /* FREECIV_JSON_CONNECTION */
35477
35478 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35479 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35480 }
35481 }
35482
35483 if (BV_ISSET(fields, 2)) {
35484 log_packet_detailed(" got field 'attacker_hp'");
35485
35486#ifdef FREECIV_JSON_CONNECTION
35487 field_addr.name = "attacker_hp";
35488#endif /* FREECIV_JSON_CONNECTION */
35489
35490 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35491 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35492 }
35493 }
35494
35495 if (BV_ISSET(fields, 3)) {
35496 log_packet_detailed(" got field 'defender_hp'");
35497
35498#ifdef FREECIV_JSON_CONNECTION
35499 field_addr.name = "defender_hp";
35500#endif /* FREECIV_JSON_CONNECTION */
35501
35502 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35503 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35504 }
35505 }
35506
35507 real_packet->make_att_veteran = BV_ISSET(fields, 4);
35508
35509 real_packet->make_def_veteran = BV_ISSET(fields, 5);
35510
35511 if (nullptr == old) {
35512 old = fc_malloc(sizeof(*old));
35514 *old = *real_packet;
35516 } else {
35517 *old = *real_packet;
35518 }
35519
35520#else /* FREECIV_DELTA_PROTOCOL */
35521#ifdef FREECIV_JSON_CONNECTION
35522 field_addr.name = "attacker_unit_id";
35523#endif /* FREECIV_JSON_CONNECTION */
35524
35525 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35526 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35527 }
35528
35529#ifdef FREECIV_JSON_CONNECTION
35530 field_addr.name = "defender_unit_id";
35531#endif /* FREECIV_JSON_CONNECTION */
35532
35533 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35534 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35535 }
35536
35537#ifdef FREECIV_JSON_CONNECTION
35538 field_addr.name = "attacker_hp";
35539#endif /* FREECIV_JSON_CONNECTION */
35540
35541 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35542 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35543 }
35544
35545#ifdef FREECIV_JSON_CONNECTION
35546 field_addr.name = "defender_hp";
35547#endif /* FREECIV_JSON_CONNECTION */
35548
35549 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35550 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35551 }
35552
35553#ifdef FREECIV_JSON_CONNECTION
35554 field_addr.name = "make_att_veteran";
35555#endif /* FREECIV_JSON_CONNECTION */
35556
35557 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_att_veteran)) {
35558 RECEIVE_PACKET_FIELD_ERROR(make_att_veteran);
35559 }
35560
35561#ifdef FREECIV_JSON_CONNECTION
35562 field_addr.name = "make_def_veteran";
35563#endif /* FREECIV_JSON_CONNECTION */
35564
35565 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_def_veteran)) {
35566 RECEIVE_PACKET_FIELD_ERROR(make_def_veteran);
35567 }
35568#endif /* FREECIV_DELTA_PROTOCOL */
35569
35571#undef FREE_PACKET_STRUCT
35572}
35573
35575{
35576 const struct packet_unit_combat_info *real_packet = packet;
35577 int e;
35579
35580 log_packet_detailed("packet_unit_combat_info_100: sending info about ()");
35581
35582#ifdef FREECIV_DELTA_PROTOCOL
35585 bool differ;
35586 struct genhash **hash = pc->phs.sent + PACKET_UNIT_COMBAT_INFO;
35587
35588 if (nullptr == *hash) {
35590 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35591 }
35592 BV_CLR_ALL(fields);
35593
35594 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35595 old = fc_malloc(sizeof(*old));
35596 /* temporary bitcopy just to insert correctly */
35597 *old = *real_packet;
35600 }
35601
35602 differ = (old->attacker_unit_id != real_packet->attacker_unit_id);
35603 if (differ) {
35604 BV_SET(fields, 0);
35605 }
35606
35607 differ = (old->defender_unit_id != real_packet->defender_unit_id);
35608 if (differ) {
35609 BV_SET(fields, 1);
35610 }
35611
35612 differ = (old->attacker_hp != real_packet->attacker_hp);
35613 if (differ) {
35614 BV_SET(fields, 2);
35615 }
35616
35617 differ = (old->defender_hp != real_packet->defender_hp);
35618 if (differ) {
35619 BV_SET(fields, 3);
35620 }
35621
35622 /* folded into head */
35623 if (real_packet->make_att_veteran) {
35624 BV_SET(fields, 4);
35625 }
35626
35627 /* folded into head */
35628 if (real_packet->make_def_veteran) {
35629 BV_SET(fields, 5);
35630 }
35631#endif /* FREECIV_DELTA_PROTOCOL */
35632
35633#ifdef FREECIV_JSON_CONNECTION
35634 struct plocation field_addr;
35635 {
35636 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35639 }
35640#endif /* FREECIV_JSON_CONNECTION */
35641
35642#ifdef FREECIV_DELTA_PROTOCOL
35643#ifdef FREECIV_JSON_CONNECTION
35644 field_addr.name = "fields";
35645#endif /* FREECIV_JSON_CONNECTION */
35646 e = 0;
35647 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35648 if (e) {
35649 log_packet_detailed("fields bitvector error detected");
35650 }
35651
35652 if (BV_ISSET(fields, 0)) {
35653 log_packet_detailed(" field 'attacker_unit_id' has changed");
35654
35655#ifdef FREECIV_JSON_CONNECTION
35656 field_addr.name = "attacker_unit_id";
35657#endif /* FREECIV_JSON_CONNECTION */
35658 e = 0;
35659
35660 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35661
35662 if (e) {
35663 log_packet_detailed("'attacker_unit_id' field error detected");
35664 }
35665 }
35666
35667 if (BV_ISSET(fields, 1)) {
35668 log_packet_detailed(" field 'defender_unit_id' has changed");
35669
35670#ifdef FREECIV_JSON_CONNECTION
35671 field_addr.name = "defender_unit_id";
35672#endif /* FREECIV_JSON_CONNECTION */
35673 e = 0;
35674
35675 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35676
35677 if (e) {
35678 log_packet_detailed("'defender_unit_id' field error detected");
35679 }
35680 }
35681
35682 if (BV_ISSET(fields, 2)) {
35683 log_packet_detailed(" field 'attacker_hp' has changed");
35684
35685#ifdef FREECIV_JSON_CONNECTION
35686 field_addr.name = "attacker_hp";
35687#endif /* FREECIV_JSON_CONNECTION */
35688 e = 0;
35689
35690 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35691
35692 if (e) {
35693 log_packet_detailed("'attacker_hp' field error detected");
35694 }
35695 }
35696
35697 if (BV_ISSET(fields, 3)) {
35698 log_packet_detailed(" field 'defender_hp' has changed");
35699
35700#ifdef FREECIV_JSON_CONNECTION
35701 field_addr.name = "defender_hp";
35702#endif /* FREECIV_JSON_CONNECTION */
35703 e = 0;
35704
35705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35706
35707 if (e) {
35708 log_packet_detailed("'defender_hp' field error detected");
35709 }
35710 }
35711
35712 /* field 4 is folded into the header */
35713
35714 /* field 5 is folded into the header */
35715
35716 *old = *real_packet;
35717
35718#else /* FREECIV_DELTA_PROTOCOL */
35719#ifdef FREECIV_JSON_CONNECTION
35720 field_addr.name = "attacker_unit_id";
35721#endif /* FREECIV_JSON_CONNECTION */
35722 e = 0;
35723
35724 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35725
35726 if (e) {
35727 log_packet_detailed("'attacker_unit_id' field error detected");
35728 }
35729
35730#ifdef FREECIV_JSON_CONNECTION
35731 field_addr.name = "defender_unit_id";
35732#endif /* FREECIV_JSON_CONNECTION */
35733 e = 0;
35734
35735 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35736
35737 if (e) {
35738 log_packet_detailed("'defender_unit_id' field error detected");
35739 }
35740
35741#ifdef FREECIV_JSON_CONNECTION
35742 field_addr.name = "attacker_hp";
35743#endif /* FREECIV_JSON_CONNECTION */
35744 e = 0;
35745
35746 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35747
35748 if (e) {
35749 log_packet_detailed("'attacker_hp' field error detected");
35750 }
35751
35752#ifdef FREECIV_JSON_CONNECTION
35753 field_addr.name = "defender_hp";
35754#endif /* FREECIV_JSON_CONNECTION */
35755 e = 0;
35756
35757 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35758
35759 if (e) {
35760 log_packet_detailed("'defender_hp' field error detected");
35761 }
35762
35763#ifdef FREECIV_JSON_CONNECTION
35764 field_addr.name = "make_att_veteran";
35765#endif /* FREECIV_JSON_CONNECTION */
35766 e = 0;
35767
35768 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_att_veteran);
35769
35770 if (e) {
35771 log_packet_detailed("'make_att_veteran' field error detected");
35772 }
35773
35774#ifdef FREECIV_JSON_CONNECTION
35775 field_addr.name = "make_def_veteran";
35776#endif /* FREECIV_JSON_CONNECTION */
35777 e = 0;
35778
35779 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_def_veteran);
35780
35781 if (e) {
35782 log_packet_detailed("'make_def_veteran' field error detected");
35783 }
35784#endif /* FREECIV_DELTA_PROTOCOL */
35785
35787}
35788
35790{
35791 if (!pc->used) {
35792 log_error("WARNING: trying to send data to the closed connection %s",
35794 return -1;
35795 }
35796 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet != nullptr, -1,
35797 "Handler for PACKET_UNIT_COMBAT_INFO not installed");
35798 return pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet(pc, packet);
35799}
35800
35802{
35803 conn_list_iterate(dest, pconn) {
35806}
35807
35808static inline void init_packet_unit_sscs_set(struct packet_unit_sscs_set *packet)
35809{
35810 memset(packet, 0, sizeof(*packet));
35811}
35812
35813#define free_packet_unit_sscs_set(_packet) (void) 0
35814#define destroy_packet_unit_sscs_set free
35815
35816#ifdef FREECIV_DELTA_PROTOCOL
35817#define hash_packet_unit_sscs_set_100 hash_const
35818#define cmp_packet_unit_sscs_set_100 cmp_const
35820#endif /* FREECIV_DELTA_PROTOCOL */
35821
35823{
35824#define FREE_PACKET_STRUCT(_packet) free_packet_unit_sscs_set(_packet)
35826
35827#ifdef FREECIV_JSON_CONNECTION
35828 struct plocation field_addr;
35829 {
35830 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35833 }
35834#endif /* FREECIV_JSON_CONNECTION */
35835
35836 log_packet_detailed("packet_unit_sscs_set_100: got info about ()");
35837
35838#ifdef FREECIV_DELTA_PROTOCOL
35840 struct packet_unit_sscs_set *old;
35841 struct genhash **hash = pc->phs.received + PACKET_UNIT_SSCS_SET;
35842
35843 if (nullptr == *hash) {
35845 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35846 }
35847
35848 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35849 *real_packet = *old;
35850 } else {
35851 /* packet is already initialized empty */
35852 log_packet_detailed(" no old info");
35853 }
35854
35855#ifdef FREECIV_JSON_CONNECTION
35856 field_addr.name = "fields";
35857#endif /* FREECIV_JSON_CONNECTION */
35858 DIO_BV_GET(&din, &field_addr, fields);
35859
35860 if (BV_ISSET(fields, 0)) {
35861 log_packet_detailed(" got field 'unit_id'");
35862
35863#ifdef FREECIV_JSON_CONNECTION
35864 field_addr.name = "unit_id";
35865#endif /* FREECIV_JSON_CONNECTION */
35866
35867 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35869 }
35870 }
35871
35872 if (BV_ISSET(fields, 1)) {
35873 log_packet_detailed(" got field 'type'");
35874
35875#ifdef FREECIV_JSON_CONNECTION
35876 field_addr.name = "type";
35877#endif /* FREECIV_JSON_CONNECTION */
35878
35879 {
35880 int readin;
35881
35882 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35884 }
35885 real_packet->type = readin;
35886 }
35887 }
35888
35889 if (BV_ISSET(fields, 2)) {
35890 log_packet_detailed(" got field 'value'");
35891
35892#ifdef FREECIV_JSON_CONNECTION
35893 field_addr.name = "value";
35894#endif /* FREECIV_JSON_CONNECTION */
35895
35896 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35898 }
35899 }
35900
35901 if (nullptr == old) {
35902 old = fc_malloc(sizeof(*old));
35904 *old = *real_packet;
35906 } else {
35907 *old = *real_packet;
35908 }
35909
35910#else /* FREECIV_DELTA_PROTOCOL */
35911#ifdef FREECIV_JSON_CONNECTION
35912 field_addr.name = "unit_id";
35913#endif /* FREECIV_JSON_CONNECTION */
35914
35915 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35917 }
35918
35919#ifdef FREECIV_JSON_CONNECTION
35920 field_addr.name = "type";
35921#endif /* FREECIV_JSON_CONNECTION */
35922
35923 {
35924 int readin;
35925
35926 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35928 }
35929 real_packet->type = readin;
35930 }
35931
35932#ifdef FREECIV_JSON_CONNECTION
35933 field_addr.name = "value";
35934#endif /* FREECIV_JSON_CONNECTION */
35935
35936 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35938 }
35939#endif /* FREECIV_DELTA_PROTOCOL */
35940
35942#undef FREE_PACKET_STRUCT
35943}
35944
35945static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
35946{
35947 const struct packet_unit_sscs_set *real_packet = packet;
35948 int e;
35950
35951 log_packet_detailed("packet_unit_sscs_set_100: sending info about ()");
35952
35953#ifdef FREECIV_DELTA_PROTOCOL
35955 struct packet_unit_sscs_set *old;
35956 bool differ;
35957 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SSCS_SET;
35958
35959 if (nullptr == *hash) {
35961 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35962 }
35963 BV_CLR_ALL(fields);
35964
35965 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35966 old = fc_malloc(sizeof(*old));
35967 /* temporary bitcopy just to insert correctly */
35968 *old = *real_packet;
35971 }
35972
35973 differ = (old->unit_id != real_packet->unit_id);
35974 if (differ) {
35975 BV_SET(fields, 0);
35976 }
35977
35978 differ = (old->type != real_packet->type);
35979 if (differ) {
35980 BV_SET(fields, 1);
35981 }
35982
35983 differ = (old->value != real_packet->value);
35984 if (differ) {
35985 BV_SET(fields, 2);
35986 }
35987#endif /* FREECIV_DELTA_PROTOCOL */
35988
35989#ifdef FREECIV_JSON_CONNECTION
35990 struct plocation field_addr;
35991 {
35992 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35995 }
35996#endif /* FREECIV_JSON_CONNECTION */
35997
35998#ifdef FREECIV_DELTA_PROTOCOL
35999#ifdef FREECIV_JSON_CONNECTION
36000 field_addr.name = "fields";
36001#endif /* FREECIV_JSON_CONNECTION */
36002 e = 0;
36003 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36004 if (e) {
36005 log_packet_detailed("fields bitvector error detected");
36006 }
36007
36008 if (BV_ISSET(fields, 0)) {
36009 log_packet_detailed(" field 'unit_id' has changed");
36010
36011#ifdef FREECIV_JSON_CONNECTION
36012 field_addr.name = "unit_id";
36013#endif /* FREECIV_JSON_CONNECTION */
36014 e = 0;
36015
36016 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36017
36018 if (e) {
36019 log_packet_detailed("'unit_id' field error detected");
36020 }
36021 }
36022
36023 if (BV_ISSET(fields, 1)) {
36024 log_packet_detailed(" field 'type' has changed");
36025
36026#ifdef FREECIV_JSON_CONNECTION
36027 field_addr.name = "type";
36028#endif /* FREECIV_JSON_CONNECTION */
36029 e = 0;
36030
36031 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36032
36033 if (e) {
36034 log_packet_detailed("'type' field error detected");
36035 }
36036 }
36037
36038 if (BV_ISSET(fields, 2)) {
36039 log_packet_detailed(" field 'value' has changed");
36040
36041#ifdef FREECIV_JSON_CONNECTION
36042 field_addr.name = "value";
36043#endif /* FREECIV_JSON_CONNECTION */
36044 e = 0;
36045
36046 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36047
36048 if (e) {
36049 log_packet_detailed("'value' field error detected");
36050 }
36051 }
36052
36053 *old = *real_packet;
36054
36055#else /* FREECIV_DELTA_PROTOCOL */
36056#ifdef FREECIV_JSON_CONNECTION
36057 field_addr.name = "unit_id";
36058#endif /* FREECIV_JSON_CONNECTION */
36059 e = 0;
36060
36061 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36062
36063 if (e) {
36064 log_packet_detailed("'unit_id' field error detected");
36065 }
36066
36067#ifdef FREECIV_JSON_CONNECTION
36068 field_addr.name = "type";
36069#endif /* FREECIV_JSON_CONNECTION */
36070 e = 0;
36071
36072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36073
36074 if (e) {
36075 log_packet_detailed("'type' field error detected");
36076 }
36077
36078#ifdef FREECIV_JSON_CONNECTION
36079 field_addr.name = "value";
36080#endif /* FREECIV_JSON_CONNECTION */
36081 e = 0;
36082
36083 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36084
36085 if (e) {
36086 log_packet_detailed("'value' field error detected");
36087 }
36088#endif /* FREECIV_DELTA_PROTOCOL */
36089
36091}
36092
36094{
36095 if (!pc->used) {
36096 log_error("WARNING: trying to send data to the closed connection %s",
36098 return -1;
36099 }
36100 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet != nullptr, -1,
36101 "Handler for PACKET_UNIT_SSCS_SET not installed");
36102 return pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet(pc, packet);
36103}
36104
36105int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
36106{
36107 struct packet_unit_sscs_set packet, *real_packet = &packet;
36108
36110 real_packet->type = type;
36111 real_packet->value = value;
36112
36114}
36115
36116static inline void init_packet_unit_orders(struct packet_unit_orders *packet)
36117{
36118 memset(packet, 0, sizeof(*packet));
36119}
36120
36121#define free_packet_unit_orders(_packet) (void) 0
36122#define destroy_packet_unit_orders free
36123
36124#ifdef FREECIV_DELTA_PROTOCOL
36125#define hash_packet_unit_orders_100 hash_const
36126#define cmp_packet_unit_orders_100 cmp_const
36128#endif /* FREECIV_DELTA_PROTOCOL */
36129
36131{
36132#define FREE_PACKET_STRUCT(_packet) free_packet_unit_orders(_packet)
36134
36135#ifdef FREECIV_JSON_CONNECTION
36136 struct plocation field_addr;
36137 {
36138 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36141 }
36142#endif /* FREECIV_JSON_CONNECTION */
36143
36144 log_packet_detailed("packet_unit_orders_100: got info about ()");
36145
36146#ifdef FREECIV_DELTA_PROTOCOL
36148 struct packet_unit_orders *old;
36149 struct genhash **hash = pc->phs.received + PACKET_UNIT_ORDERS;
36150
36151 if (nullptr == *hash) {
36153 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36154 }
36155
36156 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36157 *real_packet = *old;
36158 } else {
36159 /* packet is already initialized empty */
36160 log_packet_detailed(" no old info");
36161 }
36162
36163#ifdef FREECIV_JSON_CONNECTION
36164 field_addr.name = "fields";
36165#endif /* FREECIV_JSON_CONNECTION */
36166 DIO_BV_GET(&din, &field_addr, fields);
36167
36168 if (BV_ISSET(fields, 0)) {
36169 log_packet_detailed(" got field 'unit_id'");
36170
36171#ifdef FREECIV_JSON_CONNECTION
36172 field_addr.name = "unit_id";
36173#endif /* FREECIV_JSON_CONNECTION */
36174
36175 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36177 }
36178 }
36179
36180 if (BV_ISSET(fields, 1)) {
36181 log_packet_detailed(" got field 'src_tile'");
36182
36183#ifdef FREECIV_JSON_CONNECTION
36184 field_addr.name = "src_tile";
36185#endif /* FREECIV_JSON_CONNECTION */
36186
36187 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36189 }
36190 }
36191
36192 if (BV_ISSET(fields, 2)) {
36193 log_packet_detailed(" got field 'length'");
36194
36195#ifdef FREECIV_JSON_CONNECTION
36196 field_addr.name = "length";
36197#endif /* FREECIV_JSON_CONNECTION */
36198
36199 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36201 }
36202 }
36203
36204 real_packet->repeat = BV_ISSET(fields, 3);
36205
36206 real_packet->vigilant = BV_ISSET(fields, 4);
36207
36208 if (BV_ISSET(fields, 5)) {
36209 log_packet_detailed(" got field 'orders'");
36210
36211#ifdef FREECIV_JSON_CONNECTION
36212 field_addr.name = "orders";
36213#endif /* FREECIV_JSON_CONNECTION */
36214
36215 {
36216 int i;
36217
36218 if (real_packet->length > MAX_LEN_ROUTE) {
36219 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36220 }
36221
36222#ifdef FREECIV_JSON_CONNECTION
36223 /* Enter array. */
36224 field_addr.sub_location = plocation_elem_new(0);
36225#endif /* FREECIV_JSON_CONNECTION */
36226
36227 for (i = 0; i < real_packet->length; i++) {
36228#ifdef FREECIV_JSON_CONNECTION
36229 /* Next array element */
36230 field_addr.sub_location->number = i;
36231#endif /* FREECIV_JSON_CONNECTION */
36232
36233 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36235 }
36236 }
36237
36238#ifdef FREECIV_JSON_CONNECTION
36239 /* Exit array. */
36240 FC_FREE(field_addr.sub_location);
36241#endif /* FREECIV_JSON_CONNECTION */
36242 }
36243 }
36244
36245 if (BV_ISSET(fields, 6)) {
36246 log_packet_detailed(" got field 'dest_tile'");
36247
36248#ifdef FREECIV_JSON_CONNECTION
36249 field_addr.name = "dest_tile";
36250#endif /* FREECIV_JSON_CONNECTION */
36251
36252 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36253 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36254 }
36255 }
36256
36257 if (nullptr == old) {
36258 old = fc_malloc(sizeof(*old));
36260 *old = *real_packet;
36262 } else {
36263 *old = *real_packet;
36264 }
36265
36266#else /* FREECIV_DELTA_PROTOCOL */
36267#ifdef FREECIV_JSON_CONNECTION
36268 field_addr.name = "unit_id";
36269#endif /* FREECIV_JSON_CONNECTION */
36270
36271 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36273 }
36274
36275#ifdef FREECIV_JSON_CONNECTION
36276 field_addr.name = "src_tile";
36277#endif /* FREECIV_JSON_CONNECTION */
36278
36279 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36281 }
36282
36283#ifdef FREECIV_JSON_CONNECTION
36284 field_addr.name = "length";
36285#endif /* FREECIV_JSON_CONNECTION */
36286
36287 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36289 }
36290
36291#ifdef FREECIV_JSON_CONNECTION
36292 field_addr.name = "repeat";
36293#endif /* FREECIV_JSON_CONNECTION */
36294
36295 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->repeat)) {
36297 }
36298
36299#ifdef FREECIV_JSON_CONNECTION
36300 field_addr.name = "vigilant";
36301#endif /* FREECIV_JSON_CONNECTION */
36302
36303 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
36305 }
36306
36307#ifdef FREECIV_JSON_CONNECTION
36308 field_addr.name = "orders";
36309#endif /* FREECIV_JSON_CONNECTION */
36310
36311 {
36312 int i;
36313
36314 if (real_packet->length > MAX_LEN_ROUTE) {
36315 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36316 }
36317
36318#ifdef FREECIV_JSON_CONNECTION
36319 /* Enter array. */
36320 field_addr.sub_location = plocation_elem_new(0);
36321#endif /* FREECIV_JSON_CONNECTION */
36322
36323 for (i = 0; i < real_packet->length; i++) {
36324#ifdef FREECIV_JSON_CONNECTION
36325 /* Next array element */
36326 field_addr.sub_location->number = i;
36327#endif /* FREECIV_JSON_CONNECTION */
36328
36329 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36331 }
36332 }
36333
36334#ifdef FREECIV_JSON_CONNECTION
36335 /* Exit array. */
36336 FC_FREE(field_addr.sub_location);
36337#endif /* FREECIV_JSON_CONNECTION */
36338 }
36339
36340#ifdef FREECIV_JSON_CONNECTION
36341 field_addr.name = "dest_tile";
36342#endif /* FREECIV_JSON_CONNECTION */
36343
36344 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36345 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36346 }
36347#endif /* FREECIV_DELTA_PROTOCOL */
36348
36350#undef FREE_PACKET_STRUCT
36351}
36352
36353static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
36354{
36355 const struct packet_unit_orders *real_packet = packet;
36356 int e;
36358
36359 log_packet_detailed("packet_unit_orders_100: sending info about ()");
36360
36361#ifdef FREECIV_DELTA_PROTOCOL
36363 struct packet_unit_orders *old;
36364 bool differ;
36365 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ORDERS;
36366
36367 if (nullptr == *hash) {
36369 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36370 }
36371 BV_CLR_ALL(fields);
36372
36373 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36374 old = fc_malloc(sizeof(*old));
36375 /* temporary bitcopy just to insert correctly */
36376 *old = *real_packet;
36379 }
36380
36381 differ = (old->unit_id != real_packet->unit_id);
36382 if (differ) {
36383 BV_SET(fields, 0);
36384 }
36385
36386 differ = (old->src_tile != real_packet->src_tile);
36387 if (differ) {
36388 BV_SET(fields, 1);
36389 }
36390
36391 differ = (old->length != real_packet->length);
36392 if (differ) {
36393 BV_SET(fields, 2);
36394 }
36395
36396 /* folded into head */
36397 if (real_packet->repeat) {
36398 BV_SET(fields, 3);
36399 }
36400
36401 /* folded into head */
36402 if (real_packet->vigilant) {
36403 BV_SET(fields, 4);
36404 }
36405
36406 differ = (old->length != real_packet->length);
36407 if (!differ) {
36408 int i;
36409
36410 for (i = 0; i < old->length; i++) {
36411 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
36412 if (differ) {
36413 break;
36414 }
36415 }
36416 }
36417 if (differ) {
36418 BV_SET(fields, 5);
36419 }
36420
36421 differ = (old->dest_tile != real_packet->dest_tile);
36422 if (differ) {
36423 BV_SET(fields, 6);
36424 }
36425#endif /* FREECIV_DELTA_PROTOCOL */
36426
36427#ifdef FREECIV_JSON_CONNECTION
36428 struct plocation field_addr;
36429 {
36430 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36433 }
36434#endif /* FREECIV_JSON_CONNECTION */
36435
36436#ifdef FREECIV_DELTA_PROTOCOL
36437#ifdef FREECIV_JSON_CONNECTION
36438 field_addr.name = "fields";
36439#endif /* FREECIV_JSON_CONNECTION */
36440 e = 0;
36441 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36442 if (e) {
36443 log_packet_detailed("fields bitvector error detected");
36444 }
36445
36446 if (BV_ISSET(fields, 0)) {
36447 log_packet_detailed(" field 'unit_id' has changed");
36448
36449#ifdef FREECIV_JSON_CONNECTION
36450 field_addr.name = "unit_id";
36451#endif /* FREECIV_JSON_CONNECTION */
36452 e = 0;
36453
36454 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36455
36456 if (e) {
36457 log_packet_detailed("'unit_id' field error detected");
36458 }
36459 }
36460
36461 if (BV_ISSET(fields, 1)) {
36462 log_packet_detailed(" field 'src_tile' has changed");
36463
36464#ifdef FREECIV_JSON_CONNECTION
36465 field_addr.name = "src_tile";
36466#endif /* FREECIV_JSON_CONNECTION */
36467 e = 0;
36468
36469 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36470
36471 if (e) {
36472 log_packet_detailed("'src_tile' field error detected");
36473 }
36474 }
36475
36476 if (BV_ISSET(fields, 2)) {
36477 log_packet_detailed(" field 'length' has changed");
36478
36479#ifdef FREECIV_JSON_CONNECTION
36480 field_addr.name = "length";
36481#endif /* FREECIV_JSON_CONNECTION */
36482 e = 0;
36483
36484 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36485
36486 if (e) {
36487 log_packet_detailed("'length' field error detected");
36488 }
36489 }
36490
36491 /* field 3 is folded into the header */
36492
36493 /* field 4 is folded into the header */
36494
36495 if (BV_ISSET(fields, 5)) {
36496 log_packet_detailed(" field 'orders' has changed");
36497
36498#ifdef FREECIV_JSON_CONNECTION
36499 field_addr.name = "orders";
36500#endif /* FREECIV_JSON_CONNECTION */
36501 e = 0;
36502
36503 {
36504 int i;
36505
36506#ifdef FREECIV_JSON_CONNECTION
36507 /* Create the array. */
36508 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36509
36510 /* Enter array. */
36511 field_addr.sub_location = plocation_elem_new(0);
36512#endif /* FREECIV_JSON_CONNECTION */
36513
36514 for (i = 0; i < real_packet->length; i++) {
36515#ifdef FREECIV_JSON_CONNECTION
36516 /* Next array element. */
36517 field_addr.sub_location->number = i;
36518#endif /* FREECIV_JSON_CONNECTION */
36519
36520 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36521 }
36522
36523#ifdef FREECIV_JSON_CONNECTION
36524 /* Exit array. */
36525 FC_FREE(field_addr.sub_location);
36526#endif /* FREECIV_JSON_CONNECTION */
36527 }
36528
36529 if (e) {
36530 log_packet_detailed("'orders' field error detected");
36531 }
36532 }
36533
36534 if (BV_ISSET(fields, 6)) {
36535 log_packet_detailed(" field 'dest_tile' has changed");
36536
36537#ifdef FREECIV_JSON_CONNECTION
36538 field_addr.name = "dest_tile";
36539#endif /* FREECIV_JSON_CONNECTION */
36540 e = 0;
36541
36542 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36543
36544 if (e) {
36545 log_packet_detailed("'dest_tile' field error detected");
36546 }
36547 }
36548
36549 *old = *real_packet;
36550
36551#else /* FREECIV_DELTA_PROTOCOL */
36552#ifdef FREECIV_JSON_CONNECTION
36553 field_addr.name = "unit_id";
36554#endif /* FREECIV_JSON_CONNECTION */
36555 e = 0;
36556
36557 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36558
36559 if (e) {
36560 log_packet_detailed("'unit_id' field error detected");
36561 }
36562
36563#ifdef FREECIV_JSON_CONNECTION
36564 field_addr.name = "src_tile";
36565#endif /* FREECIV_JSON_CONNECTION */
36566 e = 0;
36567
36568 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36569
36570 if (e) {
36571 log_packet_detailed("'src_tile' field error detected");
36572 }
36573
36574#ifdef FREECIV_JSON_CONNECTION
36575 field_addr.name = "length";
36576#endif /* FREECIV_JSON_CONNECTION */
36577 e = 0;
36578
36579 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36580
36581 if (e) {
36582 log_packet_detailed("'length' field error detected");
36583 }
36584
36585#ifdef FREECIV_JSON_CONNECTION
36586 field_addr.name = "repeat";
36587#endif /* FREECIV_JSON_CONNECTION */
36588 e = 0;
36589
36590 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->repeat);
36591
36592 if (e) {
36593 log_packet_detailed("'repeat' field error detected");
36594 }
36595
36596#ifdef FREECIV_JSON_CONNECTION
36597 field_addr.name = "vigilant";
36598#endif /* FREECIV_JSON_CONNECTION */
36599 e = 0;
36600
36601 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
36602
36603 if (e) {
36604 log_packet_detailed("'vigilant' field error detected");
36605 }
36606
36607#ifdef FREECIV_JSON_CONNECTION
36608 field_addr.name = "orders";
36609#endif /* FREECIV_JSON_CONNECTION */
36610 e = 0;
36611
36612 {
36613 int i;
36614
36615#ifdef FREECIV_JSON_CONNECTION
36616 /* Create the array. */
36617 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36618
36619 /* Enter array. */
36620 field_addr.sub_location = plocation_elem_new(0);
36621#endif /* FREECIV_JSON_CONNECTION */
36622
36623 for (i = 0; i < real_packet->length; i++) {
36624#ifdef FREECIV_JSON_CONNECTION
36625 /* Next array element. */
36626 field_addr.sub_location->number = i;
36627#endif /* FREECIV_JSON_CONNECTION */
36628
36629 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36630 }
36631
36632#ifdef FREECIV_JSON_CONNECTION
36633 /* Exit array. */
36634 FC_FREE(field_addr.sub_location);
36635#endif /* FREECIV_JSON_CONNECTION */
36636 }
36637
36638 if (e) {
36639 log_packet_detailed("'orders' field error detected");
36640 }
36641
36642#ifdef FREECIV_JSON_CONNECTION
36643 field_addr.name = "dest_tile";
36644#endif /* FREECIV_JSON_CONNECTION */
36645 e = 0;
36646
36647 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36648
36649 if (e) {
36650 log_packet_detailed("'dest_tile' field error detected");
36651 }
36652#endif /* FREECIV_DELTA_PROTOCOL */
36653
36655}
36656
36658{
36659 if (!pc->used) {
36660 log_error("WARNING: trying to send data to the closed connection %s",
36662 return -1;
36663 }
36664 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet != nullptr, -1,
36665 "Handler for PACKET_UNIT_ORDERS not installed");
36666 return pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet(pc, packet);
36667}
36668
36670{
36671 memset(packet, 0, sizeof(*packet));
36672}
36673
36674#define free_packet_unit_server_side_agent_set(_packet) (void) 0
36675#define destroy_packet_unit_server_side_agent_set free
36676
36677#ifdef FREECIV_DELTA_PROTOCOL
36678#define hash_packet_unit_server_side_agent_set_100 hash_const
36679#define cmp_packet_unit_server_side_agent_set_100 cmp_const
36681#endif /* FREECIV_DELTA_PROTOCOL */
36682
36684{
36685#define FREE_PACKET_STRUCT(_packet) free_packet_unit_server_side_agent_set(_packet)
36687
36688#ifdef FREECIV_JSON_CONNECTION
36689 struct plocation field_addr;
36690 {
36691 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36694 }
36695#endif /* FREECIV_JSON_CONNECTION */
36696
36697 log_packet_detailed("packet_unit_server_side_agent_set_100: got info about ()");
36698
36699#ifdef FREECIV_DELTA_PROTOCOL
36702 struct genhash **hash = pc->phs.received + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36703
36704 if (nullptr == *hash) {
36706 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36707 }
36708
36709 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36710 *real_packet = *old;
36711 } else {
36712 /* packet is already initialized empty */
36713 log_packet_detailed(" no old info");
36714 }
36715
36716#ifdef FREECIV_JSON_CONNECTION
36717 field_addr.name = "fields";
36718#endif /* FREECIV_JSON_CONNECTION */
36719 DIO_BV_GET(&din, &field_addr, fields);
36720
36721 if (BV_ISSET(fields, 0)) {
36722 log_packet_detailed(" got field 'unit_id'");
36723
36724#ifdef FREECIV_JSON_CONNECTION
36725 field_addr.name = "unit_id";
36726#endif /* FREECIV_JSON_CONNECTION */
36727
36728 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36730 }
36731 }
36732
36733 if (BV_ISSET(fields, 1)) {
36734 log_packet_detailed(" got field 'agent'");
36735
36736#ifdef FREECIV_JSON_CONNECTION
36737 field_addr.name = "agent";
36738#endif /* FREECIV_JSON_CONNECTION */
36739
36740 {
36741 int readin;
36742
36743 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36745 }
36746 real_packet->agent = readin;
36747 }
36748 }
36749
36750 if (nullptr == old) {
36751 old = fc_malloc(sizeof(*old));
36753 *old = *real_packet;
36755 } else {
36756 *old = *real_packet;
36757 }
36758
36759#else /* FREECIV_DELTA_PROTOCOL */
36760#ifdef FREECIV_JSON_CONNECTION
36761 field_addr.name = "unit_id";
36762#endif /* FREECIV_JSON_CONNECTION */
36763
36764 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36766 }
36767
36768#ifdef FREECIV_JSON_CONNECTION
36769 field_addr.name = "agent";
36770#endif /* FREECIV_JSON_CONNECTION */
36771
36772 {
36773 int readin;
36774
36775 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36777 }
36778 real_packet->agent = readin;
36779 }
36780#endif /* FREECIV_DELTA_PROTOCOL */
36781
36783#undef FREE_PACKET_STRUCT
36784}
36785
36787{
36788 const struct packet_unit_server_side_agent_set *real_packet = packet;
36789 int e;
36791
36792 log_packet_detailed("packet_unit_server_side_agent_set_100: sending info about ()");
36793
36794#ifdef FREECIV_DELTA_PROTOCOL
36797 bool differ;
36798 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36799
36800 if (nullptr == *hash) {
36802 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36803 }
36804 BV_CLR_ALL(fields);
36805
36806 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36807 old = fc_malloc(sizeof(*old));
36808 /* temporary bitcopy just to insert correctly */
36809 *old = *real_packet;
36812 }
36813
36814 differ = (old->unit_id != real_packet->unit_id);
36815 if (differ) {
36816 BV_SET(fields, 0);
36817 }
36818
36819 differ = (old->agent != real_packet->agent);
36820 if (differ) {
36821 BV_SET(fields, 1);
36822 }
36823#endif /* FREECIV_DELTA_PROTOCOL */
36824
36825#ifdef FREECIV_JSON_CONNECTION
36826 struct plocation field_addr;
36827 {
36828 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36831 }
36832#endif /* FREECIV_JSON_CONNECTION */
36833
36834#ifdef FREECIV_DELTA_PROTOCOL
36835#ifdef FREECIV_JSON_CONNECTION
36836 field_addr.name = "fields";
36837#endif /* FREECIV_JSON_CONNECTION */
36838 e = 0;
36839 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36840 if (e) {
36841 log_packet_detailed("fields bitvector error detected");
36842 }
36843
36844 if (BV_ISSET(fields, 0)) {
36845 log_packet_detailed(" field 'unit_id' has changed");
36846
36847#ifdef FREECIV_JSON_CONNECTION
36848 field_addr.name = "unit_id";
36849#endif /* FREECIV_JSON_CONNECTION */
36850 e = 0;
36851
36852 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36853
36854 if (e) {
36855 log_packet_detailed("'unit_id' field error detected");
36856 }
36857 }
36858
36859 if (BV_ISSET(fields, 1)) {
36860 log_packet_detailed(" field 'agent' has changed");
36861
36862#ifdef FREECIV_JSON_CONNECTION
36863 field_addr.name = "agent";
36864#endif /* FREECIV_JSON_CONNECTION */
36865 e = 0;
36866
36867 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36868
36869 if (e) {
36870 log_packet_detailed("'agent' field error detected");
36871 }
36872 }
36873
36874 *old = *real_packet;
36875
36876#else /* FREECIV_DELTA_PROTOCOL */
36877#ifdef FREECIV_JSON_CONNECTION
36878 field_addr.name = "unit_id";
36879#endif /* FREECIV_JSON_CONNECTION */
36880 e = 0;
36881
36882 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36883
36884 if (e) {
36885 log_packet_detailed("'unit_id' field error detected");
36886 }
36887
36888#ifdef FREECIV_JSON_CONNECTION
36889 field_addr.name = "agent";
36890#endif /* FREECIV_JSON_CONNECTION */
36891 e = 0;
36892
36893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36894
36895 if (e) {
36896 log_packet_detailed("'agent' field error detected");
36897 }
36898#endif /* FREECIV_DELTA_PROTOCOL */
36899
36901}
36902
36904{
36905 if (!pc->used) {
36906 log_error("WARNING: trying to send data to the closed connection %s",
36908 return -1;
36909 }
36910 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet != nullptr, -1,
36911 "Handler for PACKET_UNIT_SERVER_SIDE_AGENT_SET not installed");
36912 return pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet(pc, packet);
36913}
36914
36916{
36917 struct packet_unit_server_side_agent_set packet, *real_packet = &packet;
36918
36920 real_packet->agent = agent;
36921
36923}
36924
36926{
36927 memset(packet, 0, sizeof(*packet));
36928}
36929
36930#define free_packet_unit_action_query(_packet) (void) 0
36931#define destroy_packet_unit_action_query free
36932
36933#ifdef FREECIV_DELTA_PROTOCOL
36934#define hash_packet_unit_action_query_100 hash_const
36935#define cmp_packet_unit_action_query_100 cmp_const
36937#endif /* FREECIV_DELTA_PROTOCOL */
36938
36940{
36941#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_query(_packet)
36943
36944#ifdef FREECIV_JSON_CONNECTION
36945 struct plocation field_addr;
36946 {
36947 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36950 }
36951#endif /* FREECIV_JSON_CONNECTION */
36952
36953 log_packet_detailed("packet_unit_action_query_100: got info about ()");
36954
36955#ifdef FREECIV_DELTA_PROTOCOL
36958 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_QUERY;
36959
36960 if (nullptr == *hash) {
36962 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
36963 }
36964
36965 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36966 *real_packet = *old;
36967 } else {
36968 /* packet is already initialized empty */
36969 log_packet_detailed(" no old info");
36970 }
36971
36972#ifdef FREECIV_JSON_CONNECTION
36973 field_addr.name = "fields";
36974#endif /* FREECIV_JSON_CONNECTION */
36975 DIO_BV_GET(&din, &field_addr, fields);
36976
36977 if (BV_ISSET(fields, 0)) {
36978 log_packet_detailed(" got field 'actor_id'");
36979
36980#ifdef FREECIV_JSON_CONNECTION
36981 field_addr.name = "actor_id";
36982#endif /* FREECIV_JSON_CONNECTION */
36983
36984 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
36986 }
36987 }
36988
36989 if (BV_ISSET(fields, 1)) {
36990 log_packet_detailed(" got field 'target_id'");
36991
36992#ifdef FREECIV_JSON_CONNECTION
36993 field_addr.name = "target_id";
36994#endif /* FREECIV_JSON_CONNECTION */
36995
36996 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
36997 RECEIVE_PACKET_FIELD_ERROR(target_id);
36998 }
36999 }
37000
37001 if (BV_ISSET(fields, 2)) {
37002 log_packet_detailed(" got field 'action_type'");
37003
37004#ifdef FREECIV_JSON_CONNECTION
37005 field_addr.name = "action_type";
37006#endif /* FREECIV_JSON_CONNECTION */
37007
37008 {
37009 int readin;
37010
37011 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37012 RECEIVE_PACKET_FIELD_ERROR(action_type);
37013 }
37014 real_packet->action_type = readin;
37015 }
37016 }
37017
37018 if (BV_ISSET(fields, 3)) {
37019 log_packet_detailed(" got field 'request_kind'");
37020
37021#ifdef FREECIV_JSON_CONNECTION
37022 field_addr.name = "request_kind";
37023#endif /* FREECIV_JSON_CONNECTION */
37024
37025 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37026 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37027 }
37028 }
37029
37030 if (nullptr == old) {
37031 old = fc_malloc(sizeof(*old));
37033 *old = *real_packet;
37035 } else {
37036 *old = *real_packet;
37037 }
37038
37039#else /* FREECIV_DELTA_PROTOCOL */
37040#ifdef FREECIV_JSON_CONNECTION
37041 field_addr.name = "actor_id";
37042#endif /* FREECIV_JSON_CONNECTION */
37043
37044 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37046 }
37047
37048#ifdef FREECIV_JSON_CONNECTION
37049 field_addr.name = "target_id";
37050#endif /* FREECIV_JSON_CONNECTION */
37051
37052 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37053 RECEIVE_PACKET_FIELD_ERROR(target_id);
37054 }
37055
37056#ifdef FREECIV_JSON_CONNECTION
37057 field_addr.name = "action_type";
37058#endif /* FREECIV_JSON_CONNECTION */
37059
37060 {
37061 int readin;
37062
37063 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37064 RECEIVE_PACKET_FIELD_ERROR(action_type);
37065 }
37066 real_packet->action_type = readin;
37067 }
37068
37069#ifdef FREECIV_JSON_CONNECTION
37070 field_addr.name = "request_kind";
37071#endif /* FREECIV_JSON_CONNECTION */
37072
37073 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37074 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37075 }
37076#endif /* FREECIV_DELTA_PROTOCOL */
37077
37079#undef FREE_PACKET_STRUCT
37080}
37081
37083{
37084 const struct packet_unit_action_query *real_packet = packet;
37085 int e;
37087
37088 log_packet_detailed("packet_unit_action_query_100: sending info about ()");
37089
37090#ifdef FREECIV_DELTA_PROTOCOL
37093 bool differ;
37094 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_QUERY;
37095
37096 if (nullptr == *hash) {
37098 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
37099 }
37100 BV_CLR_ALL(fields);
37101
37102 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37103 old = fc_malloc(sizeof(*old));
37104 /* temporary bitcopy just to insert correctly */
37105 *old = *real_packet;
37108 }
37109
37110 differ = (old->actor_id != real_packet->actor_id);
37111 if (differ) {
37112 BV_SET(fields, 0);
37113 }
37114
37115 differ = (old->target_id != real_packet->target_id);
37116 if (differ) {
37117 BV_SET(fields, 1);
37118 }
37119
37120 differ = (old->action_type != real_packet->action_type);
37121 if (differ) {
37122 BV_SET(fields, 2);
37123 }
37124
37125 differ = (old->request_kind != real_packet->request_kind);
37126 if (differ) {
37127 BV_SET(fields, 3);
37128 }
37129#endif /* FREECIV_DELTA_PROTOCOL */
37130
37131#ifdef FREECIV_JSON_CONNECTION
37132 struct plocation field_addr;
37133 {
37134 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37137 }
37138#endif /* FREECIV_JSON_CONNECTION */
37139
37140#ifdef FREECIV_DELTA_PROTOCOL
37141#ifdef FREECIV_JSON_CONNECTION
37142 field_addr.name = "fields";
37143#endif /* FREECIV_JSON_CONNECTION */
37144 e = 0;
37145 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37146 if (e) {
37147 log_packet_detailed("fields bitvector error detected");
37148 }
37149
37150 if (BV_ISSET(fields, 0)) {
37151 log_packet_detailed(" field 'actor_id' has changed");
37152
37153#ifdef FREECIV_JSON_CONNECTION
37154 field_addr.name = "actor_id";
37155#endif /* FREECIV_JSON_CONNECTION */
37156 e = 0;
37157
37158 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37159
37160 if (e) {
37161 log_packet_detailed("'actor_id' field error detected");
37162 }
37163 }
37164
37165 if (BV_ISSET(fields, 1)) {
37166 log_packet_detailed(" field 'target_id' has changed");
37167
37168#ifdef FREECIV_JSON_CONNECTION
37169 field_addr.name = "target_id";
37170#endif /* FREECIV_JSON_CONNECTION */
37171 e = 0;
37172
37173 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37174
37175 if (e) {
37176 log_packet_detailed("'target_id' field error detected");
37177 }
37178 }
37179
37180 if (BV_ISSET(fields, 2)) {
37181 log_packet_detailed(" field 'action_type' has changed");
37182
37183#ifdef FREECIV_JSON_CONNECTION
37184 field_addr.name = "action_type";
37185#endif /* FREECIV_JSON_CONNECTION */
37186 e = 0;
37187
37188 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37189
37190 if (e) {
37191 log_packet_detailed("'action_type' field error detected");
37192 }
37193 }
37194
37195 if (BV_ISSET(fields, 3)) {
37196 log_packet_detailed(" field 'request_kind' has changed");
37197
37198#ifdef FREECIV_JSON_CONNECTION
37199 field_addr.name = "request_kind";
37200#endif /* FREECIV_JSON_CONNECTION */
37201 e = 0;
37202
37203 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37204
37205 if (e) {
37206 log_packet_detailed("'request_kind' field error detected");
37207 }
37208 }
37209
37210 *old = *real_packet;
37211
37212#else /* FREECIV_DELTA_PROTOCOL */
37213#ifdef FREECIV_JSON_CONNECTION
37214 field_addr.name = "actor_id";
37215#endif /* FREECIV_JSON_CONNECTION */
37216 e = 0;
37217
37218 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37219
37220 if (e) {
37221 log_packet_detailed("'actor_id' field error detected");
37222 }
37223
37224#ifdef FREECIV_JSON_CONNECTION
37225 field_addr.name = "target_id";
37226#endif /* FREECIV_JSON_CONNECTION */
37227 e = 0;
37228
37229 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37230
37231 if (e) {
37232 log_packet_detailed("'target_id' field error detected");
37233 }
37234
37235#ifdef FREECIV_JSON_CONNECTION
37236 field_addr.name = "action_type";
37237#endif /* FREECIV_JSON_CONNECTION */
37238 e = 0;
37239
37240 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37241
37242 if (e) {
37243 log_packet_detailed("'action_type' field error detected");
37244 }
37245
37246#ifdef FREECIV_JSON_CONNECTION
37247 field_addr.name = "request_kind";
37248#endif /* FREECIV_JSON_CONNECTION */
37249 e = 0;
37250
37251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37252
37253 if (e) {
37254 log_packet_detailed("'request_kind' field error detected");
37255 }
37256#endif /* FREECIV_DELTA_PROTOCOL */
37257
37259}
37260
37262{
37263 if (!pc->used) {
37264 log_error("WARNING: trying to send data to the closed connection %s",
37266 return -1;
37267 }
37268 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet != nullptr, -1,
37269 "Handler for PACKET_UNIT_ACTION_QUERY not installed");
37270 return pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet(pc, packet);
37271}
37272
37273int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
37274{
37275 struct packet_unit_action_query packet, *real_packet = &packet;
37276
37278 real_packet->target_id = target_id;
37279 real_packet->action_type = action_type;
37280 real_packet->request_kind = request_kind;
37281
37283}
37284
37286{
37287 memset(packet, 0, sizeof(*packet));
37288}
37289
37290#define free_packet_unit_type_upgrade(_packet) (void) 0
37291#define destroy_packet_unit_type_upgrade free
37292
37293#ifdef FREECIV_DELTA_PROTOCOL
37294#define hash_packet_unit_type_upgrade_100 hash_const
37295#define cmp_packet_unit_type_upgrade_100 cmp_const
37297#endif /* FREECIV_DELTA_PROTOCOL */
37298
37300{
37301#define FREE_PACKET_STRUCT(_packet) free_packet_unit_type_upgrade(_packet)
37303
37304#ifdef FREECIV_JSON_CONNECTION
37305 struct plocation field_addr;
37306 {
37307 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37310 }
37311#endif /* FREECIV_JSON_CONNECTION */
37312
37313 log_packet_detailed("packet_unit_type_upgrade_100: got info about ()");
37314
37315#ifdef FREECIV_DELTA_PROTOCOL
37318 struct genhash **hash = pc->phs.received + PACKET_UNIT_TYPE_UPGRADE;
37319
37320 if (nullptr == *hash) {
37322 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37323 }
37324
37325 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37326 *real_packet = *old;
37327 } else {
37328 /* packet is already initialized empty */
37329 log_packet_detailed(" no old info");
37330 }
37331
37332#ifdef FREECIV_JSON_CONNECTION
37333 field_addr.name = "fields";
37334#endif /* FREECIV_JSON_CONNECTION */
37335 DIO_BV_GET(&din, &field_addr, fields);
37336
37337 if (BV_ISSET(fields, 0)) {
37338 log_packet_detailed(" got field 'type'");
37339
37340#ifdef FREECIV_JSON_CONNECTION
37341 field_addr.name = "type";
37342#endif /* FREECIV_JSON_CONNECTION */
37343
37344 {
37345 int readin;
37346
37347 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37349 }
37350 real_packet->type = readin;
37351 }
37352 }
37353
37354 if (nullptr == old) {
37355 old = fc_malloc(sizeof(*old));
37357 *old = *real_packet;
37359 } else {
37360 *old = *real_packet;
37361 }
37362
37363#else /* FREECIV_DELTA_PROTOCOL */
37364#ifdef FREECIV_JSON_CONNECTION
37365 field_addr.name = "type";
37366#endif /* FREECIV_JSON_CONNECTION */
37367
37368 {
37369 int readin;
37370
37371 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37373 }
37374 real_packet->type = readin;
37375 }
37376#endif /* FREECIV_DELTA_PROTOCOL */
37377
37379#undef FREE_PACKET_STRUCT
37380}
37381
37383{
37384 const struct packet_unit_type_upgrade *real_packet = packet;
37385 int e;
37387
37388 log_packet_detailed("packet_unit_type_upgrade_100: sending info about ()");
37389
37390#ifdef FREECIV_DELTA_PROTOCOL
37393 bool differ;
37394 struct genhash **hash = pc->phs.sent + PACKET_UNIT_TYPE_UPGRADE;
37395
37396 if (nullptr == *hash) {
37398 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37399 }
37400 BV_CLR_ALL(fields);
37401
37402 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37403 old = fc_malloc(sizeof(*old));
37404 /* temporary bitcopy just to insert correctly */
37405 *old = *real_packet;
37408 }
37409
37410 differ = (old->type != real_packet->type);
37411 if (differ) {
37412 BV_SET(fields, 0);
37413 }
37414#endif /* FREECIV_DELTA_PROTOCOL */
37415
37416#ifdef FREECIV_JSON_CONNECTION
37417 struct plocation field_addr;
37418 {
37419 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37422 }
37423#endif /* FREECIV_JSON_CONNECTION */
37424
37425#ifdef FREECIV_DELTA_PROTOCOL
37426#ifdef FREECIV_JSON_CONNECTION
37427 field_addr.name = "fields";
37428#endif /* FREECIV_JSON_CONNECTION */
37429 e = 0;
37430 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37431 if (e) {
37432 log_packet_detailed("fields bitvector error detected");
37433 }
37434
37435 if (BV_ISSET(fields, 0)) {
37436 log_packet_detailed(" field 'type' has changed");
37437
37438#ifdef FREECIV_JSON_CONNECTION
37439 field_addr.name = "type";
37440#endif /* FREECIV_JSON_CONNECTION */
37441 e = 0;
37442
37443 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37444
37445 if (e) {
37446 log_packet_detailed("'type' field error detected");
37447 }
37448 }
37449
37450 *old = *real_packet;
37451
37452#else /* FREECIV_DELTA_PROTOCOL */
37453#ifdef FREECIV_JSON_CONNECTION
37454 field_addr.name = "type";
37455#endif /* FREECIV_JSON_CONNECTION */
37456 e = 0;
37457
37458 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37459
37460 if (e) {
37461 log_packet_detailed("'type' field error detected");
37462 }
37463#endif /* FREECIV_DELTA_PROTOCOL */
37464
37466}
37467
37469{
37470 if (!pc->used) {
37471 log_error("WARNING: trying to send data to the closed connection %s",
37473 return -1;
37474 }
37475 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet != nullptr, -1,
37476 "Handler for PACKET_UNIT_TYPE_UPGRADE not installed");
37477 return pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet(pc, packet);
37478}
37479
37481{
37482 struct packet_unit_type_upgrade packet, *real_packet = &packet;
37483
37485
37487}
37488
37489static inline void init_packet_unit_do_action(struct packet_unit_do_action *packet)
37490{
37491 memset(packet, 0, sizeof(*packet));
37492}
37493
37494#define free_packet_unit_do_action(_packet) (void) 0
37495#define destroy_packet_unit_do_action free
37496
37497#ifdef FREECIV_DELTA_PROTOCOL
37498#define hash_packet_unit_do_action_100 hash_const
37499#define cmp_packet_unit_do_action_100 cmp_const
37501#endif /* FREECIV_DELTA_PROTOCOL */
37502
37504{
37505#define FREE_PACKET_STRUCT(_packet) free_packet_unit_do_action(_packet)
37507
37508#ifdef FREECIV_JSON_CONNECTION
37509 struct plocation field_addr;
37510 {
37511 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37514 }
37515#endif /* FREECIV_JSON_CONNECTION */
37516
37517 log_packet_detailed("packet_unit_do_action_100: got info about ()");
37518
37519#ifdef FREECIV_DELTA_PROTOCOL
37521 struct packet_unit_do_action *old;
37522 struct genhash **hash = pc->phs.received + PACKET_UNIT_DO_ACTION;
37523
37524 if (nullptr == *hash) {
37526 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37527 }
37528
37529 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37530 *real_packet = *old;
37531 } else {
37532 /* packet is already initialized empty */
37533 log_packet_detailed(" no old info");
37534 }
37535
37536#ifdef FREECIV_JSON_CONNECTION
37537 field_addr.name = "fields";
37538#endif /* FREECIV_JSON_CONNECTION */
37539 DIO_BV_GET(&din, &field_addr, fields);
37540
37541 if (BV_ISSET(fields, 0)) {
37542 log_packet_detailed(" got field 'actor_id'");
37543
37544#ifdef FREECIV_JSON_CONNECTION
37545 field_addr.name = "actor_id";
37546#endif /* FREECIV_JSON_CONNECTION */
37547
37548 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37550 }
37551 }
37552
37553 if (BV_ISSET(fields, 1)) {
37554 log_packet_detailed(" got field 'target_id'");
37555
37556#ifdef FREECIV_JSON_CONNECTION
37557 field_addr.name = "target_id";
37558#endif /* FREECIV_JSON_CONNECTION */
37559
37560 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37561 RECEIVE_PACKET_FIELD_ERROR(target_id);
37562 }
37563 }
37564
37565 if (BV_ISSET(fields, 2)) {
37566 log_packet_detailed(" got field 'sub_tgt_id'");
37567
37568#ifdef FREECIV_JSON_CONNECTION
37569 field_addr.name = "sub_tgt_id";
37570#endif /* FREECIV_JSON_CONNECTION */
37571
37572 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37573 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37574 }
37575 }
37576
37577 if (BV_ISSET(fields, 3)) {
37578 log_packet_detailed(" got field 'name'");
37579
37580#ifdef FREECIV_JSON_CONNECTION
37581 field_addr.name = "name";
37582#endif /* FREECIV_JSON_CONNECTION */
37583
37584 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37586 }
37587 }
37588
37589 if (BV_ISSET(fields, 4)) {
37590 log_packet_detailed(" got field 'action_type'");
37591
37592#ifdef FREECIV_JSON_CONNECTION
37593 field_addr.name = "action_type";
37594#endif /* FREECIV_JSON_CONNECTION */
37595
37596 {
37597 int readin;
37598
37599 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37600 RECEIVE_PACKET_FIELD_ERROR(action_type);
37601 }
37602 real_packet->action_type = readin;
37603 }
37604 }
37605
37606 if (nullptr == old) {
37607 old = fc_malloc(sizeof(*old));
37609 *old = *real_packet;
37611 } else {
37612 *old = *real_packet;
37613 }
37614
37615#else /* FREECIV_DELTA_PROTOCOL */
37616#ifdef FREECIV_JSON_CONNECTION
37617 field_addr.name = "actor_id";
37618#endif /* FREECIV_JSON_CONNECTION */
37619
37620 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37622 }
37623
37624#ifdef FREECIV_JSON_CONNECTION
37625 field_addr.name = "target_id";
37626#endif /* FREECIV_JSON_CONNECTION */
37627
37628 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37629 RECEIVE_PACKET_FIELD_ERROR(target_id);
37630 }
37631
37632#ifdef FREECIV_JSON_CONNECTION
37633 field_addr.name = "sub_tgt_id";
37634#endif /* FREECIV_JSON_CONNECTION */
37635
37636 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37637 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37638 }
37639
37640#ifdef FREECIV_JSON_CONNECTION
37641 field_addr.name = "name";
37642#endif /* FREECIV_JSON_CONNECTION */
37643
37644 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37646 }
37647
37648#ifdef FREECIV_JSON_CONNECTION
37649 field_addr.name = "action_type";
37650#endif /* FREECIV_JSON_CONNECTION */
37651
37652 {
37653 int readin;
37654
37655 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37656 RECEIVE_PACKET_FIELD_ERROR(action_type);
37657 }
37658 real_packet->action_type = readin;
37659 }
37660#endif /* FREECIV_DELTA_PROTOCOL */
37661
37663#undef FREE_PACKET_STRUCT
37664}
37665
37667{
37668 const struct packet_unit_do_action *real_packet = packet;
37669 int e;
37671
37672 log_packet_detailed("packet_unit_do_action_100: sending info about ()");
37673
37674#ifdef FREECIV_DELTA_PROTOCOL
37676 struct packet_unit_do_action *old;
37677 bool differ;
37678 struct genhash **hash = pc->phs.sent + PACKET_UNIT_DO_ACTION;
37679
37680 if (nullptr == *hash) {
37682 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37683 }
37684 BV_CLR_ALL(fields);
37685
37686 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37687 old = fc_malloc(sizeof(*old));
37688 /* temporary bitcopy just to insert correctly */
37689 *old = *real_packet;
37692 }
37693
37694 differ = (old->actor_id != real_packet->actor_id);
37695 if (differ) {
37696 BV_SET(fields, 0);
37697 }
37698
37699 differ = (old->target_id != real_packet->target_id);
37700 if (differ) {
37701 BV_SET(fields, 1);
37702 }
37703
37704 differ = (old->sub_tgt_id != real_packet->sub_tgt_id);
37705 if (differ) {
37706 BV_SET(fields, 2);
37707 }
37708
37709 differ = (strcmp(old->name, real_packet->name) != 0);
37710 if (differ) {
37711 BV_SET(fields, 3);
37712 }
37713
37714 differ = (old->action_type != real_packet->action_type);
37715 if (differ) {
37716 BV_SET(fields, 4);
37717 }
37718#endif /* FREECIV_DELTA_PROTOCOL */
37719
37720#ifdef FREECIV_JSON_CONNECTION
37721 struct plocation field_addr;
37722 {
37723 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37726 }
37727#endif /* FREECIV_JSON_CONNECTION */
37728
37729#ifdef FREECIV_DELTA_PROTOCOL
37730#ifdef FREECIV_JSON_CONNECTION
37731 field_addr.name = "fields";
37732#endif /* FREECIV_JSON_CONNECTION */
37733 e = 0;
37734 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37735 if (e) {
37736 log_packet_detailed("fields bitvector error detected");
37737 }
37738
37739 if (BV_ISSET(fields, 0)) {
37740 log_packet_detailed(" field 'actor_id' has changed");
37741
37742#ifdef FREECIV_JSON_CONNECTION
37743 field_addr.name = "actor_id";
37744#endif /* FREECIV_JSON_CONNECTION */
37745 e = 0;
37746
37747 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37748
37749 if (e) {
37750 log_packet_detailed("'actor_id' field error detected");
37751 }
37752 }
37753
37754 if (BV_ISSET(fields, 1)) {
37755 log_packet_detailed(" field 'target_id' has changed");
37756
37757#ifdef FREECIV_JSON_CONNECTION
37758 field_addr.name = "target_id";
37759#endif /* FREECIV_JSON_CONNECTION */
37760 e = 0;
37761
37762 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37763
37764 if (e) {
37765 log_packet_detailed("'target_id' field error detected");
37766 }
37767 }
37768
37769 if (BV_ISSET(fields, 2)) {
37770 log_packet_detailed(" field 'sub_tgt_id' has changed");
37771
37772#ifdef FREECIV_JSON_CONNECTION
37773 field_addr.name = "sub_tgt_id";
37774#endif /* FREECIV_JSON_CONNECTION */
37775 e = 0;
37776
37777 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37778
37779 if (e) {
37780 log_packet_detailed("'sub_tgt_id' field error detected");
37781 }
37782 }
37783
37784 if (BV_ISSET(fields, 3)) {
37785 log_packet_detailed(" field 'name' has changed");
37786
37787#ifdef FREECIV_JSON_CONNECTION
37788 field_addr.name = "name";
37789#endif /* FREECIV_JSON_CONNECTION */
37790 e = 0;
37791
37792 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37793
37794 if (e) {
37795 log_packet_detailed("'name' field error detected");
37796 }
37797 }
37798
37799 if (BV_ISSET(fields, 4)) {
37800 log_packet_detailed(" field 'action_type' has changed");
37801
37802#ifdef FREECIV_JSON_CONNECTION
37803 field_addr.name = "action_type";
37804#endif /* FREECIV_JSON_CONNECTION */
37805 e = 0;
37806
37807 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37808
37809 if (e) {
37810 log_packet_detailed("'action_type' field error detected");
37811 }
37812 }
37813
37814 *old = *real_packet;
37815
37816#else /* FREECIV_DELTA_PROTOCOL */
37817#ifdef FREECIV_JSON_CONNECTION
37818 field_addr.name = "actor_id";
37819#endif /* FREECIV_JSON_CONNECTION */
37820 e = 0;
37821
37822 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37823
37824 if (e) {
37825 log_packet_detailed("'actor_id' field error detected");
37826 }
37827
37828#ifdef FREECIV_JSON_CONNECTION
37829 field_addr.name = "target_id";
37830#endif /* FREECIV_JSON_CONNECTION */
37831 e = 0;
37832
37833 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37834
37835 if (e) {
37836 log_packet_detailed("'target_id' field error detected");
37837 }
37838
37839#ifdef FREECIV_JSON_CONNECTION
37840 field_addr.name = "sub_tgt_id";
37841#endif /* FREECIV_JSON_CONNECTION */
37842 e = 0;
37843
37844 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37845
37846 if (e) {
37847 log_packet_detailed("'sub_tgt_id' field error detected");
37848 }
37849
37850#ifdef FREECIV_JSON_CONNECTION
37851 field_addr.name = "name";
37852#endif /* FREECIV_JSON_CONNECTION */
37853 e = 0;
37854
37855 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37856
37857 if (e) {
37858 log_packet_detailed("'name' field error detected");
37859 }
37860
37861#ifdef FREECIV_JSON_CONNECTION
37862 field_addr.name = "action_type";
37863#endif /* FREECIV_JSON_CONNECTION */
37864 e = 0;
37865
37866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37867
37868 if (e) {
37869 log_packet_detailed("'action_type' field error detected");
37870 }
37871#endif /* FREECIV_DELTA_PROTOCOL */
37872
37874}
37875
37877{
37878 if (!pc->used) {
37879 log_error("WARNING: trying to send data to the closed connection %s",
37881 return -1;
37882 }
37883 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet != nullptr, -1,
37884 "Handler for PACKET_UNIT_DO_ACTION not installed");
37885 return pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet(pc, packet);
37886}
37887
37888int 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)
37889{
37890 struct packet_unit_do_action packet, *real_packet = &packet;
37891
37893 real_packet->target_id = target_id;
37894 real_packet->sub_tgt_id = sub_tgt_id;
37895 sz_strlcpy(real_packet->name, name);
37896 real_packet->action_type = action_type;
37897
37899}
37900
37902{
37903 memset(packet, 0, sizeof(*packet));
37904}
37905
37906#define free_packet_unit_action_answer(_packet) (void) 0
37907#define destroy_packet_unit_action_answer free
37908
37909#ifdef FREECIV_DELTA_PROTOCOL
37910#define hash_packet_unit_action_answer_100 hash_const
37911#define cmp_packet_unit_action_answer_100 cmp_const
37913#endif /* FREECIV_DELTA_PROTOCOL */
37914
37916{
37917#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_answer(_packet)
37919
37920#ifdef FREECIV_JSON_CONNECTION
37921 struct plocation field_addr;
37922 {
37923 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37926 }
37927#endif /* FREECIV_JSON_CONNECTION */
37928
37929 log_packet_detailed("packet_unit_action_answer_100: got info about ()");
37930
37931#ifdef FREECIV_DELTA_PROTOCOL
37934 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_ANSWER;
37935
37936 if (nullptr == *hash) {
37938 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
37939 }
37940
37941 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37942 *real_packet = *old;
37943 } else {
37944 /* packet is already initialized empty */
37945 log_packet_detailed(" no old info");
37946 }
37947
37948#ifdef FREECIV_JSON_CONNECTION
37949 field_addr.name = "fields";
37950#endif /* FREECIV_JSON_CONNECTION */
37951 DIO_BV_GET(&din, &field_addr, fields);
37952
37953 if (BV_ISSET(fields, 0)) {
37954 log_packet_detailed(" got field 'actor_id'");
37955
37956#ifdef FREECIV_JSON_CONNECTION
37957 field_addr.name = "actor_id";
37958#endif /* FREECIV_JSON_CONNECTION */
37959
37960 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37962 }
37963 }
37964
37965 if (BV_ISSET(fields, 1)) {
37966 log_packet_detailed(" got field 'target_id'");
37967
37968#ifdef FREECIV_JSON_CONNECTION
37969 field_addr.name = "target_id";
37970#endif /* FREECIV_JSON_CONNECTION */
37971
37972 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37973 RECEIVE_PACKET_FIELD_ERROR(target_id);
37974 }
37975 }
37976
37977 if (BV_ISSET(fields, 2)) {
37978 log_packet_detailed(" got field 'cost'");
37979
37980#ifdef FREECIV_JSON_CONNECTION
37981 field_addr.name = "cost";
37982#endif /* FREECIV_JSON_CONNECTION */
37983
37984 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
37986 }
37987 }
37988
37989 if (BV_ISSET(fields, 3)) {
37990 log_packet_detailed(" got field 'action_type'");
37991
37992#ifdef FREECIV_JSON_CONNECTION
37993 field_addr.name = "action_type";
37994#endif /* FREECIV_JSON_CONNECTION */
37995
37996 {
37997 int readin;
37998
37999 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38000 RECEIVE_PACKET_FIELD_ERROR(action_type);
38001 }
38002 real_packet->action_type = readin;
38003 }
38004 }
38005
38006 if (BV_ISSET(fields, 4)) {
38007 log_packet_detailed(" got field 'request_kind'");
38008
38009#ifdef FREECIV_JSON_CONNECTION
38010 field_addr.name = "request_kind";
38011#endif /* FREECIV_JSON_CONNECTION */
38012
38013 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38014 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38015 }
38016 }
38017
38018 if (nullptr == old) {
38019 old = fc_malloc(sizeof(*old));
38021 *old = *real_packet;
38023 } else {
38024 *old = *real_packet;
38025 }
38026
38027#else /* FREECIV_DELTA_PROTOCOL */
38028#ifdef FREECIV_JSON_CONNECTION
38029 field_addr.name = "actor_id";
38030#endif /* FREECIV_JSON_CONNECTION */
38031
38032 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38034 }
38035
38036#ifdef FREECIV_JSON_CONNECTION
38037 field_addr.name = "target_id";
38038#endif /* FREECIV_JSON_CONNECTION */
38039
38040 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38041 RECEIVE_PACKET_FIELD_ERROR(target_id);
38042 }
38043
38044#ifdef FREECIV_JSON_CONNECTION
38045 field_addr.name = "cost";
38046#endif /* FREECIV_JSON_CONNECTION */
38047
38048 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
38050 }
38051
38052#ifdef FREECIV_JSON_CONNECTION
38053 field_addr.name = "action_type";
38054#endif /* FREECIV_JSON_CONNECTION */
38055
38056 {
38057 int readin;
38058
38059 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38060 RECEIVE_PACKET_FIELD_ERROR(action_type);
38061 }
38062 real_packet->action_type = readin;
38063 }
38064
38065#ifdef FREECIV_JSON_CONNECTION
38066 field_addr.name = "request_kind";
38067#endif /* FREECIV_JSON_CONNECTION */
38068
38069 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38070 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38071 }
38072#endif /* FREECIV_DELTA_PROTOCOL */
38073
38075#undef FREE_PACKET_STRUCT
38076}
38077
38079{
38080 const struct packet_unit_action_answer *real_packet = packet;
38081 int e;
38083
38084 log_packet_detailed("packet_unit_action_answer_100: sending info about ()");
38085
38086#ifdef FREECIV_DELTA_PROTOCOL
38089 bool differ;
38090 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_ANSWER;
38091
38092 if (nullptr == *hash) {
38094 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
38095 }
38096 BV_CLR_ALL(fields);
38097
38098 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38099 old = fc_malloc(sizeof(*old));
38100 /* temporary bitcopy just to insert correctly */
38101 *old = *real_packet;
38104 }
38105
38106 differ = (old->actor_id != real_packet->actor_id);
38107 if (differ) {
38108 BV_SET(fields, 0);
38109 }
38110
38111 differ = (old->target_id != real_packet->target_id);
38112 if (differ) {
38113 BV_SET(fields, 1);
38114 }
38115
38116 differ = (old->cost != real_packet->cost);
38117 if (differ) {
38118 BV_SET(fields, 2);
38119 }
38120
38121 differ = (old->action_type != real_packet->action_type);
38122 if (differ) {
38123 BV_SET(fields, 3);
38124 }
38125
38126 differ = (old->request_kind != real_packet->request_kind);
38127 if (differ) {
38128 BV_SET(fields, 4);
38129 }
38130#endif /* FREECIV_DELTA_PROTOCOL */
38131
38132#ifdef FREECIV_JSON_CONNECTION
38133 struct plocation field_addr;
38134 {
38135 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38138 }
38139#endif /* FREECIV_JSON_CONNECTION */
38140
38141#ifdef FREECIV_DELTA_PROTOCOL
38142#ifdef FREECIV_JSON_CONNECTION
38143 field_addr.name = "fields";
38144#endif /* FREECIV_JSON_CONNECTION */
38145 e = 0;
38146 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38147 if (e) {
38148 log_packet_detailed("fields bitvector error detected");
38149 }
38150
38151 if (BV_ISSET(fields, 0)) {
38152 log_packet_detailed(" field 'actor_id' has changed");
38153
38154#ifdef FREECIV_JSON_CONNECTION
38155 field_addr.name = "actor_id";
38156#endif /* FREECIV_JSON_CONNECTION */
38157 e = 0;
38158
38159 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38160
38161 if (e) {
38162 log_packet_detailed("'actor_id' field error detected");
38163 }
38164 }
38165
38166 if (BV_ISSET(fields, 1)) {
38167 log_packet_detailed(" field 'target_id' has changed");
38168
38169#ifdef FREECIV_JSON_CONNECTION
38170 field_addr.name = "target_id";
38171#endif /* FREECIV_JSON_CONNECTION */
38172 e = 0;
38173
38174 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38175
38176 if (e) {
38177 log_packet_detailed("'target_id' field error detected");
38178 }
38179 }
38180
38181 if (BV_ISSET(fields, 2)) {
38182 log_packet_detailed(" field 'cost' has changed");
38183
38184#ifdef FREECIV_JSON_CONNECTION
38185 field_addr.name = "cost";
38186#endif /* FREECIV_JSON_CONNECTION */
38187 e = 0;
38188
38189 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38190
38191 if (e) {
38192 log_packet_detailed("'cost' field error detected");
38193 }
38194 }
38195
38196 if (BV_ISSET(fields, 3)) {
38197 log_packet_detailed(" field 'action_type' has changed");
38198
38199#ifdef FREECIV_JSON_CONNECTION
38200 field_addr.name = "action_type";
38201#endif /* FREECIV_JSON_CONNECTION */
38202 e = 0;
38203
38204 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38205
38206 if (e) {
38207 log_packet_detailed("'action_type' field error detected");
38208 }
38209 }
38210
38211 if (BV_ISSET(fields, 4)) {
38212 log_packet_detailed(" field 'request_kind' has changed");
38213
38214#ifdef FREECIV_JSON_CONNECTION
38215 field_addr.name = "request_kind";
38216#endif /* FREECIV_JSON_CONNECTION */
38217 e = 0;
38218
38219 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38220
38221 if (e) {
38222 log_packet_detailed("'request_kind' field error detected");
38223 }
38224 }
38225
38226 *old = *real_packet;
38227
38228#else /* FREECIV_DELTA_PROTOCOL */
38229#ifdef FREECIV_JSON_CONNECTION
38230 field_addr.name = "actor_id";
38231#endif /* FREECIV_JSON_CONNECTION */
38232 e = 0;
38233
38234 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38235
38236 if (e) {
38237 log_packet_detailed("'actor_id' field error detected");
38238 }
38239
38240#ifdef FREECIV_JSON_CONNECTION
38241 field_addr.name = "target_id";
38242#endif /* FREECIV_JSON_CONNECTION */
38243 e = 0;
38244
38245 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38246
38247 if (e) {
38248 log_packet_detailed("'target_id' field error detected");
38249 }
38250
38251#ifdef FREECIV_JSON_CONNECTION
38252 field_addr.name = "cost";
38253#endif /* FREECIV_JSON_CONNECTION */
38254 e = 0;
38255
38256 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38257
38258 if (e) {
38259 log_packet_detailed("'cost' field error detected");
38260 }
38261
38262#ifdef FREECIV_JSON_CONNECTION
38263 field_addr.name = "action_type";
38264#endif /* FREECIV_JSON_CONNECTION */
38265 e = 0;
38266
38267 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38268
38269 if (e) {
38270 log_packet_detailed("'action_type' field error detected");
38271 }
38272
38273#ifdef FREECIV_JSON_CONNECTION
38274 field_addr.name = "request_kind";
38275#endif /* FREECIV_JSON_CONNECTION */
38276 e = 0;
38277
38278 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38279
38280 if (e) {
38281 log_packet_detailed("'request_kind' field error detected");
38282 }
38283#endif /* FREECIV_DELTA_PROTOCOL */
38284
38286}
38287
38289{
38290 if (!pc->used) {
38291 log_error("WARNING: trying to send data to the closed connection %s",
38293 return -1;
38294 }
38295 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet != nullptr, -1,
38296 "Handler for PACKET_UNIT_ACTION_ANSWER not installed");
38297 return pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet(pc, packet);
38298}
38299
38300int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
38301{
38302 struct packet_unit_action_answer packet, *real_packet = &packet;
38303
38305 real_packet->target_id = target_id;
38306 real_packet->cost = cost;
38307 real_packet->action_type = action_type;
38308 real_packet->request_kind = request_kind;
38309
38311}
38312
38314{
38315 memset(packet, 0, sizeof(*packet));
38316}
38317
38318#define free_packet_unit_get_actions(_packet) (void) 0
38319#define destroy_packet_unit_get_actions free
38320
38321#ifdef FREECIV_DELTA_PROTOCOL
38322#define hash_packet_unit_get_actions_100 hash_const
38323#define cmp_packet_unit_get_actions_100 cmp_const
38325#endif /* FREECIV_DELTA_PROTOCOL */
38326
38328{
38329#define FREE_PACKET_STRUCT(_packet) free_packet_unit_get_actions(_packet)
38331
38332#ifdef FREECIV_JSON_CONNECTION
38333 struct plocation field_addr;
38334 {
38335 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38338 }
38339#endif /* FREECIV_JSON_CONNECTION */
38340
38341 log_packet_detailed("packet_unit_get_actions_100: got info about ()");
38342
38343#ifdef FREECIV_DELTA_PROTOCOL
38346 struct genhash **hash = pc->phs.received + PACKET_UNIT_GET_ACTIONS;
38347
38348 if (nullptr == *hash) {
38350 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38351 }
38352
38353 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38354 *real_packet = *old;
38355 } else {
38356 /* packet is already initialized empty */
38357 log_packet_detailed(" no old info");
38358 }
38359
38360#ifdef FREECIV_JSON_CONNECTION
38361 field_addr.name = "fields";
38362#endif /* FREECIV_JSON_CONNECTION */
38363 DIO_BV_GET(&din, &field_addr, fields);
38364
38365 if (BV_ISSET(fields, 0)) {
38366 log_packet_detailed(" got field 'actor_unit_id'");
38367
38368#ifdef FREECIV_JSON_CONNECTION
38369 field_addr.name = "actor_unit_id";
38370#endif /* FREECIV_JSON_CONNECTION */
38371
38372 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38374 }
38375 }
38376
38377 if (BV_ISSET(fields, 1)) {
38378 log_packet_detailed(" got field 'target_unit_id'");
38379
38380#ifdef FREECIV_JSON_CONNECTION
38381 field_addr.name = "target_unit_id";
38382#endif /* FREECIV_JSON_CONNECTION */
38383
38384 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38385 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38386 }
38387 }
38388
38389 if (BV_ISSET(fields, 2)) {
38390 log_packet_detailed(" got field 'target_tile_id'");
38391
38392#ifdef FREECIV_JSON_CONNECTION
38393 field_addr.name = "target_tile_id";
38394#endif /* FREECIV_JSON_CONNECTION */
38395
38396 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38397 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38398 }
38399 }
38400
38401 if (BV_ISSET(fields, 3)) {
38402 log_packet_detailed(" got field 'target_extra_id'");
38403
38404#ifdef FREECIV_JSON_CONNECTION
38405 field_addr.name = "target_extra_id";
38406#endif /* FREECIV_JSON_CONNECTION */
38407
38408 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38410 }
38411 }
38412
38413 if (BV_ISSET(fields, 4)) {
38414 log_packet_detailed(" got field 'request_kind'");
38415
38416#ifdef FREECIV_JSON_CONNECTION
38417 field_addr.name = "request_kind";
38418#endif /* FREECIV_JSON_CONNECTION */
38419
38420 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38421 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38422 }
38423 }
38424
38425 if (nullptr == old) {
38426 old = fc_malloc(sizeof(*old));
38428 *old = *real_packet;
38430 } else {
38431 *old = *real_packet;
38432 }
38433
38434#else /* FREECIV_DELTA_PROTOCOL */
38435#ifdef FREECIV_JSON_CONNECTION
38436 field_addr.name = "actor_unit_id";
38437#endif /* FREECIV_JSON_CONNECTION */
38438
38439 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38441 }
38442
38443#ifdef FREECIV_JSON_CONNECTION
38444 field_addr.name = "target_unit_id";
38445#endif /* FREECIV_JSON_CONNECTION */
38446
38447 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38448 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38449 }
38450
38451#ifdef FREECIV_JSON_CONNECTION
38452 field_addr.name = "target_tile_id";
38453#endif /* FREECIV_JSON_CONNECTION */
38454
38455 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38456 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38457 }
38458
38459#ifdef FREECIV_JSON_CONNECTION
38460 field_addr.name = "target_extra_id";
38461#endif /* FREECIV_JSON_CONNECTION */
38462
38463 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38465 }
38466
38467#ifdef FREECIV_JSON_CONNECTION
38468 field_addr.name = "request_kind";
38469#endif /* FREECIV_JSON_CONNECTION */
38470
38471 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38472 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38473 }
38474#endif /* FREECIV_DELTA_PROTOCOL */
38475
38477#undef FREE_PACKET_STRUCT
38478}
38479
38481{
38482 const struct packet_unit_get_actions *real_packet = packet;
38483 int e;
38485
38486 log_packet_detailed("packet_unit_get_actions_100: sending info about ()");
38487
38488#ifdef FREECIV_DELTA_PROTOCOL
38491 bool differ;
38492 struct genhash **hash = pc->phs.sent + PACKET_UNIT_GET_ACTIONS;
38493
38494 if (nullptr == *hash) {
38496 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38497 }
38498 BV_CLR_ALL(fields);
38499
38500 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38501 old = fc_malloc(sizeof(*old));
38502 /* temporary bitcopy just to insert correctly */
38503 *old = *real_packet;
38506 }
38507
38508 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38509 if (differ) {
38510 BV_SET(fields, 0);
38511 }
38512
38513 differ = (old->target_unit_id != real_packet->target_unit_id);
38514 if (differ) {
38515 BV_SET(fields, 1);
38516 }
38517
38518 differ = (old->target_tile_id != real_packet->target_tile_id);
38519 if (differ) {
38520 BV_SET(fields, 2);
38521 }
38522
38523 differ = (old->target_extra_id != real_packet->target_extra_id);
38524 if (differ) {
38525 BV_SET(fields, 3);
38526 }
38527
38528 differ = (old->request_kind != real_packet->request_kind);
38529 if (differ) {
38530 BV_SET(fields, 4);
38531 }
38532#endif /* FREECIV_DELTA_PROTOCOL */
38533
38534#ifdef FREECIV_JSON_CONNECTION
38535 struct plocation field_addr;
38536 {
38537 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38540 }
38541#endif /* FREECIV_JSON_CONNECTION */
38542
38543#ifdef FREECIV_DELTA_PROTOCOL
38544#ifdef FREECIV_JSON_CONNECTION
38545 field_addr.name = "fields";
38546#endif /* FREECIV_JSON_CONNECTION */
38547 e = 0;
38548 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38549 if (e) {
38550 log_packet_detailed("fields bitvector error detected");
38551 }
38552
38553 if (BV_ISSET(fields, 0)) {
38554 log_packet_detailed(" field 'actor_unit_id' has changed");
38555
38556#ifdef FREECIV_JSON_CONNECTION
38557 field_addr.name = "actor_unit_id";
38558#endif /* FREECIV_JSON_CONNECTION */
38559 e = 0;
38560
38561 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38562
38563 if (e) {
38564 log_packet_detailed("'actor_unit_id' field error detected");
38565 }
38566 }
38567
38568 if (BV_ISSET(fields, 1)) {
38569 log_packet_detailed(" field 'target_unit_id' has changed");
38570
38571#ifdef FREECIV_JSON_CONNECTION
38572 field_addr.name = "target_unit_id";
38573#endif /* FREECIV_JSON_CONNECTION */
38574 e = 0;
38575
38576 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38577
38578 if (e) {
38579 log_packet_detailed("'target_unit_id' field error detected");
38580 }
38581 }
38582
38583 if (BV_ISSET(fields, 2)) {
38584 log_packet_detailed(" field 'target_tile_id' has changed");
38585
38586#ifdef FREECIV_JSON_CONNECTION
38587 field_addr.name = "target_tile_id";
38588#endif /* FREECIV_JSON_CONNECTION */
38589 e = 0;
38590
38591 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38592
38593 if (e) {
38594 log_packet_detailed("'target_tile_id' field error detected");
38595 }
38596 }
38597
38598 if (BV_ISSET(fields, 3)) {
38599 log_packet_detailed(" field 'target_extra_id' has changed");
38600
38601#ifdef FREECIV_JSON_CONNECTION
38602 field_addr.name = "target_extra_id";
38603#endif /* FREECIV_JSON_CONNECTION */
38604 e = 0;
38605
38606 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38607
38608 if (e) {
38609 log_packet_detailed("'target_extra_id' field error detected");
38610 }
38611 }
38612
38613 if (BV_ISSET(fields, 4)) {
38614 log_packet_detailed(" field 'request_kind' has changed");
38615
38616#ifdef FREECIV_JSON_CONNECTION
38617 field_addr.name = "request_kind";
38618#endif /* FREECIV_JSON_CONNECTION */
38619 e = 0;
38620
38621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38622
38623 if (e) {
38624 log_packet_detailed("'request_kind' field error detected");
38625 }
38626 }
38627
38628 *old = *real_packet;
38629
38630#else /* FREECIV_DELTA_PROTOCOL */
38631#ifdef FREECIV_JSON_CONNECTION
38632 field_addr.name = "actor_unit_id";
38633#endif /* FREECIV_JSON_CONNECTION */
38634 e = 0;
38635
38636 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38637
38638 if (e) {
38639 log_packet_detailed("'actor_unit_id' field error detected");
38640 }
38641
38642#ifdef FREECIV_JSON_CONNECTION
38643 field_addr.name = "target_unit_id";
38644#endif /* FREECIV_JSON_CONNECTION */
38645 e = 0;
38646
38647 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38648
38649 if (e) {
38650 log_packet_detailed("'target_unit_id' field error detected");
38651 }
38652
38653#ifdef FREECIV_JSON_CONNECTION
38654 field_addr.name = "target_tile_id";
38655#endif /* FREECIV_JSON_CONNECTION */
38656 e = 0;
38657
38658 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38659
38660 if (e) {
38661 log_packet_detailed("'target_tile_id' field error detected");
38662 }
38663
38664#ifdef FREECIV_JSON_CONNECTION
38665 field_addr.name = "target_extra_id";
38666#endif /* FREECIV_JSON_CONNECTION */
38667 e = 0;
38668
38669 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38670
38671 if (e) {
38672 log_packet_detailed("'target_extra_id' field error detected");
38673 }
38674
38675#ifdef FREECIV_JSON_CONNECTION
38676 field_addr.name = "request_kind";
38677#endif /* FREECIV_JSON_CONNECTION */
38678 e = 0;
38679
38680 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38681
38682 if (e) {
38683 log_packet_detailed("'request_kind' field error detected");
38684 }
38685#endif /* FREECIV_DELTA_PROTOCOL */
38686
38688}
38689
38691{
38692 if (!pc->used) {
38693 log_error("WARNING: trying to send data to the closed connection %s",
38695 return -1;
38696 }
38697 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet != nullptr, -1,
38698 "Handler for PACKET_UNIT_GET_ACTIONS not installed");
38699 return pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet(pc, packet);
38700}
38701
38702int 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)
38703{
38704 struct packet_unit_get_actions packet, *real_packet = &packet;
38705
38707 real_packet->target_unit_id = target_unit_id;
38708 real_packet->target_tile_id = target_tile_id;
38709 real_packet->target_extra_id = target_extra_id;
38710 real_packet->request_kind = request_kind;
38711
38713}
38714
38715static inline void init_packet_unit_actions(struct packet_unit_actions *packet)
38716{
38717 memset(packet, 0, sizeof(*packet));
38718}
38719
38720#define free_packet_unit_actions(_packet) (void) 0
38721#define destroy_packet_unit_actions free
38722
38723#ifdef FREECIV_DELTA_PROTOCOL
38724#define hash_packet_unit_actions_100 hash_const
38725#define cmp_packet_unit_actions_100 cmp_const
38727#endif /* FREECIV_DELTA_PROTOCOL */
38728
38730{
38731#define FREE_PACKET_STRUCT(_packet) free_packet_unit_actions(_packet)
38733
38734#ifdef FREECIV_JSON_CONNECTION
38735 struct plocation field_addr;
38736 {
38737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38740 }
38741#endif /* FREECIV_JSON_CONNECTION */
38742
38743 log_packet_detailed("packet_unit_actions_100: got info about ()");
38744
38745#ifdef FREECIV_DELTA_PROTOCOL
38747 struct packet_unit_actions *old;
38748 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTIONS;
38749
38750 if (nullptr == *hash) {
38752 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
38753 }
38754
38755 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38756 *real_packet = *old;
38757 } else {
38758 /* packet is already initialized empty */
38759 log_packet_detailed(" no old info");
38760 }
38761
38762#ifdef FREECIV_JSON_CONNECTION
38763 field_addr.name = "fields";
38764#endif /* FREECIV_JSON_CONNECTION */
38765 DIO_BV_GET(&din, &field_addr, fields);
38766
38767 if (BV_ISSET(fields, 0)) {
38768 log_packet_detailed(" got field 'actor_unit_id'");
38769
38770#ifdef FREECIV_JSON_CONNECTION
38771 field_addr.name = "actor_unit_id";
38772#endif /* FREECIV_JSON_CONNECTION */
38773
38774 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38776 }
38777 }
38778
38779 if (BV_ISSET(fields, 1)) {
38780 log_packet_detailed(" got field 'target_unit_id'");
38781
38782#ifdef FREECIV_JSON_CONNECTION
38783 field_addr.name = "target_unit_id";
38784#endif /* FREECIV_JSON_CONNECTION */
38785
38786 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38787 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38788 }
38789 }
38790
38791 if (BV_ISSET(fields, 2)) {
38792 log_packet_detailed(" got field 'target_city_id'");
38793
38794#ifdef FREECIV_JSON_CONNECTION
38795 field_addr.name = "target_city_id";
38796#endif /* FREECIV_JSON_CONNECTION */
38797
38798 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38799 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38800 }
38801 }
38802
38803 if (BV_ISSET(fields, 3)) {
38804 log_packet_detailed(" got field 'target_tile_id'");
38805
38806#ifdef FREECIV_JSON_CONNECTION
38807 field_addr.name = "target_tile_id";
38808#endif /* FREECIV_JSON_CONNECTION */
38809
38810 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38811 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38812 }
38813 }
38814
38815 if (BV_ISSET(fields, 4)) {
38816 log_packet_detailed(" got field 'target_extra_id'");
38817
38818#ifdef FREECIV_JSON_CONNECTION
38819 field_addr.name = "target_extra_id";
38820#endif /* FREECIV_JSON_CONNECTION */
38821
38822 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38824 }
38825 }
38826
38827 if (BV_ISSET(fields, 5)) {
38828 log_packet_detailed(" got field 'request_kind'");
38829
38830#ifdef FREECIV_JSON_CONNECTION
38831 field_addr.name = "request_kind";
38832#endif /* FREECIV_JSON_CONNECTION */
38833
38834 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38835 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38836 }
38837 }
38838
38839 if (BV_ISSET(fields, 6)) {
38840 log_packet_detailed(" got field 'action_probabilities'");
38841
38842#ifdef FREECIV_JSON_CONNECTION
38843 field_addr.name = "action_probabilities";
38844#endif /* FREECIV_JSON_CONNECTION */
38845
38846 {
38847 int i;
38848
38849
38850#ifdef FREECIV_JSON_CONNECTION
38851 /* Enter array. */
38852 field_addr.sub_location = plocation_elem_new(0);
38853#endif /* FREECIV_JSON_CONNECTION */
38854
38855 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38856#ifdef FREECIV_JSON_CONNECTION
38857 /* Next array element */
38858 field_addr.sub_location->number = i;
38859#endif /* FREECIV_JSON_CONNECTION */
38860
38861 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38862 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38863 }
38864 }
38865
38866#ifdef FREECIV_JSON_CONNECTION
38867 /* Exit array. */
38868 FC_FREE(field_addr.sub_location);
38869#endif /* FREECIV_JSON_CONNECTION */
38870 }
38871 }
38872
38873 if (nullptr == old) {
38874 old = fc_malloc(sizeof(*old));
38876 *old = *real_packet;
38878 } else {
38879 *old = *real_packet;
38880 }
38881
38882#else /* FREECIV_DELTA_PROTOCOL */
38883#ifdef FREECIV_JSON_CONNECTION
38884 field_addr.name = "actor_unit_id";
38885#endif /* FREECIV_JSON_CONNECTION */
38886
38887 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38889 }
38890
38891#ifdef FREECIV_JSON_CONNECTION
38892 field_addr.name = "target_unit_id";
38893#endif /* FREECIV_JSON_CONNECTION */
38894
38895 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38896 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38897 }
38898
38899#ifdef FREECIV_JSON_CONNECTION
38900 field_addr.name = "target_city_id";
38901#endif /* FREECIV_JSON_CONNECTION */
38902
38903 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38904 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38905 }
38906
38907#ifdef FREECIV_JSON_CONNECTION
38908 field_addr.name = "target_tile_id";
38909#endif /* FREECIV_JSON_CONNECTION */
38910
38911 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38912 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38913 }
38914
38915#ifdef FREECIV_JSON_CONNECTION
38916 field_addr.name = "target_extra_id";
38917#endif /* FREECIV_JSON_CONNECTION */
38918
38919 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38921 }
38922
38923#ifdef FREECIV_JSON_CONNECTION
38924 field_addr.name = "request_kind";
38925#endif /* FREECIV_JSON_CONNECTION */
38926
38927 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38928 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38929 }
38930
38931#ifdef FREECIV_JSON_CONNECTION
38932 field_addr.name = "action_probabilities";
38933#endif /* FREECIV_JSON_CONNECTION */
38934
38935 {
38936 int i;
38937
38938
38939#ifdef FREECIV_JSON_CONNECTION
38940 /* Enter array. */
38941 field_addr.sub_location = plocation_elem_new(0);
38942#endif /* FREECIV_JSON_CONNECTION */
38943
38944 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38945#ifdef FREECIV_JSON_CONNECTION
38946 /* Next array element */
38947 field_addr.sub_location->number = i;
38948#endif /* FREECIV_JSON_CONNECTION */
38949
38950 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38951 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38952 }
38953 }
38954
38955#ifdef FREECIV_JSON_CONNECTION
38956 /* Exit array. */
38957 FC_FREE(field_addr.sub_location);
38958#endif /* FREECIV_JSON_CONNECTION */
38959 }
38960#endif /* FREECIV_DELTA_PROTOCOL */
38961
38963#undef FREE_PACKET_STRUCT
38964}
38965
38966static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
38967{
38968 const struct packet_unit_actions *real_packet = packet;
38969 int e;
38971
38972 log_packet_detailed("packet_unit_actions_100: sending info about ()");
38973
38974#ifdef FREECIV_DELTA_PROTOCOL
38976 struct packet_unit_actions *old;
38977 bool differ;
38978 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTIONS;
38979
38980 if (nullptr == *hash) {
38982 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
38983 }
38984 BV_CLR_ALL(fields);
38985
38986 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38987 old = fc_malloc(sizeof(*old));
38988 /* temporary bitcopy just to insert correctly */
38989 *old = *real_packet;
38992 }
38993
38994 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38995 if (differ) {
38996 BV_SET(fields, 0);
38997 }
38998
38999 differ = (old->target_unit_id != real_packet->target_unit_id);
39000 if (differ) {
39001 BV_SET(fields, 1);
39002 }
39003
39004 differ = (old->target_city_id != real_packet->target_city_id);
39005 if (differ) {
39006 BV_SET(fields, 2);
39007 }
39008
39009 differ = (old->target_tile_id != real_packet->target_tile_id);
39010 if (differ) {
39011 BV_SET(fields, 3);
39012 }
39013
39014 differ = (old->target_extra_id != real_packet->target_extra_id);
39015 if (differ) {
39016 BV_SET(fields, 4);
39017 }
39018
39019 differ = (old->request_kind != real_packet->request_kind);
39020 if (differ) {
39021 BV_SET(fields, 5);
39022 }
39023
39024 differ = FALSE;
39025 {
39026 int i;
39027
39028 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39029 differ = !are_action_probabilitys_equal(&old->action_probabilities[i], &real_packet->action_probabilities[i]);
39030 if (differ) {
39031 break;
39032 }
39033 }
39034 }
39035 if (differ) {
39036 BV_SET(fields, 6);
39037 }
39038#endif /* FREECIV_DELTA_PROTOCOL */
39039
39040#ifdef FREECIV_JSON_CONNECTION
39041 struct plocation field_addr;
39042 {
39043 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39046 }
39047#endif /* FREECIV_JSON_CONNECTION */
39048
39049#ifdef FREECIV_DELTA_PROTOCOL
39050#ifdef FREECIV_JSON_CONNECTION
39051 field_addr.name = "fields";
39052#endif /* FREECIV_JSON_CONNECTION */
39053 e = 0;
39054 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39055 if (e) {
39056 log_packet_detailed("fields bitvector error detected");
39057 }
39058
39059 if (BV_ISSET(fields, 0)) {
39060 log_packet_detailed(" field 'actor_unit_id' has changed");
39061
39062#ifdef FREECIV_JSON_CONNECTION
39063 field_addr.name = "actor_unit_id";
39064#endif /* FREECIV_JSON_CONNECTION */
39065 e = 0;
39066
39067 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39068
39069 if (e) {
39070 log_packet_detailed("'actor_unit_id' field error detected");
39071 }
39072 }
39073
39074 if (BV_ISSET(fields, 1)) {
39075 log_packet_detailed(" field 'target_unit_id' has changed");
39076
39077#ifdef FREECIV_JSON_CONNECTION
39078 field_addr.name = "target_unit_id";
39079#endif /* FREECIV_JSON_CONNECTION */
39080 e = 0;
39081
39082 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39083
39084 if (e) {
39085 log_packet_detailed("'target_unit_id' field error detected");
39086 }
39087 }
39088
39089 if (BV_ISSET(fields, 2)) {
39090 log_packet_detailed(" field 'target_city_id' has changed");
39091
39092#ifdef FREECIV_JSON_CONNECTION
39093 field_addr.name = "target_city_id";
39094#endif /* FREECIV_JSON_CONNECTION */
39095 e = 0;
39096
39097 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39098
39099 if (e) {
39100 log_packet_detailed("'target_city_id' field error detected");
39101 }
39102 }
39103
39104 if (BV_ISSET(fields, 3)) {
39105 log_packet_detailed(" field 'target_tile_id' has changed");
39106
39107#ifdef FREECIV_JSON_CONNECTION
39108 field_addr.name = "target_tile_id";
39109#endif /* FREECIV_JSON_CONNECTION */
39110 e = 0;
39111
39112 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39113
39114 if (e) {
39115 log_packet_detailed("'target_tile_id' field error detected");
39116 }
39117 }
39118
39119 if (BV_ISSET(fields, 4)) {
39120 log_packet_detailed(" field 'target_extra_id' has changed");
39121
39122#ifdef FREECIV_JSON_CONNECTION
39123 field_addr.name = "target_extra_id";
39124#endif /* FREECIV_JSON_CONNECTION */
39125 e = 0;
39126
39127 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39128
39129 if (e) {
39130 log_packet_detailed("'target_extra_id' field error detected");
39131 }
39132 }
39133
39134 if (BV_ISSET(fields, 5)) {
39135 log_packet_detailed(" field 'request_kind' has changed");
39136
39137#ifdef FREECIV_JSON_CONNECTION
39138 field_addr.name = "request_kind";
39139#endif /* FREECIV_JSON_CONNECTION */
39140 e = 0;
39141
39142 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39143
39144 if (e) {
39145 log_packet_detailed("'request_kind' field error detected");
39146 }
39147 }
39148
39149 if (BV_ISSET(fields, 6)) {
39150 log_packet_detailed(" field 'action_probabilities' has changed");
39151
39152#ifdef FREECIV_JSON_CONNECTION
39153 field_addr.name = "action_probabilities";
39154#endif /* FREECIV_JSON_CONNECTION */
39155 e = 0;
39156
39157 {
39158 int i;
39159
39160#ifdef FREECIV_JSON_CONNECTION
39161 /* Create the array. */
39163
39164 /* Enter array. */
39165 field_addr.sub_location = plocation_elem_new(0);
39166#endif /* FREECIV_JSON_CONNECTION */
39167
39168 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39169#ifdef FREECIV_JSON_CONNECTION
39170 /* Next array element. */
39171 field_addr.sub_location->number = i;
39172#endif /* FREECIV_JSON_CONNECTION */
39173
39174 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39175 }
39176
39177#ifdef FREECIV_JSON_CONNECTION
39178 /* Exit array. */
39179 FC_FREE(field_addr.sub_location);
39180#endif /* FREECIV_JSON_CONNECTION */
39181 }
39182
39183 if (e) {
39184 log_packet_detailed("'action_probabilities' field error detected");
39185 }
39186 }
39187
39188 *old = *real_packet;
39189
39190#else /* FREECIV_DELTA_PROTOCOL */
39191#ifdef FREECIV_JSON_CONNECTION
39192 field_addr.name = "actor_unit_id";
39193#endif /* FREECIV_JSON_CONNECTION */
39194 e = 0;
39195
39196 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39197
39198 if (e) {
39199 log_packet_detailed("'actor_unit_id' field error detected");
39200 }
39201
39202#ifdef FREECIV_JSON_CONNECTION
39203 field_addr.name = "target_unit_id";
39204#endif /* FREECIV_JSON_CONNECTION */
39205 e = 0;
39206
39207 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39208
39209 if (e) {
39210 log_packet_detailed("'target_unit_id' field error detected");
39211 }
39212
39213#ifdef FREECIV_JSON_CONNECTION
39214 field_addr.name = "target_city_id";
39215#endif /* FREECIV_JSON_CONNECTION */
39216 e = 0;
39217
39218 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39219
39220 if (e) {
39221 log_packet_detailed("'target_city_id' field error detected");
39222 }
39223
39224#ifdef FREECIV_JSON_CONNECTION
39225 field_addr.name = "target_tile_id";
39226#endif /* FREECIV_JSON_CONNECTION */
39227 e = 0;
39228
39229 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39230
39231 if (e) {
39232 log_packet_detailed("'target_tile_id' field error detected");
39233 }
39234
39235#ifdef FREECIV_JSON_CONNECTION
39236 field_addr.name = "target_extra_id";
39237#endif /* FREECIV_JSON_CONNECTION */
39238 e = 0;
39239
39240 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39241
39242 if (e) {
39243 log_packet_detailed("'target_extra_id' field error detected");
39244 }
39245
39246#ifdef FREECIV_JSON_CONNECTION
39247 field_addr.name = "request_kind";
39248#endif /* FREECIV_JSON_CONNECTION */
39249 e = 0;
39250
39251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39252
39253 if (e) {
39254 log_packet_detailed("'request_kind' field error detected");
39255 }
39256
39257#ifdef FREECIV_JSON_CONNECTION
39258 field_addr.name = "action_probabilities";
39259#endif /* FREECIV_JSON_CONNECTION */
39260 e = 0;
39261
39262 {
39263 int i;
39264
39265#ifdef FREECIV_JSON_CONNECTION
39266 /* Create the array. */
39268
39269 /* Enter array. */
39270 field_addr.sub_location = plocation_elem_new(0);
39271#endif /* FREECIV_JSON_CONNECTION */
39272
39273 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39274#ifdef FREECIV_JSON_CONNECTION
39275 /* Next array element. */
39276 field_addr.sub_location->number = i;
39277#endif /* FREECIV_JSON_CONNECTION */
39278
39279 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39280 }
39281
39282#ifdef FREECIV_JSON_CONNECTION
39283 /* Exit array. */
39284 FC_FREE(field_addr.sub_location);
39285#endif /* FREECIV_JSON_CONNECTION */
39286 }
39287
39288 if (e) {
39289 log_packet_detailed("'action_probabilities' field error detected");
39290 }
39291#endif /* FREECIV_DELTA_PROTOCOL */
39292
39294}
39295
39297{
39298 if (!pc->used) {
39299 log_error("WARNING: trying to send data to the closed connection %s",
39301 return -1;
39302 }
39303 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet != nullptr, -1,
39304 "Handler for PACKET_UNIT_ACTIONS not installed");
39305 return pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet(pc, packet);
39306}
39307
39308int 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)
39309{
39310 struct packet_unit_actions packet, *real_packet = &packet;
39311
39313 real_packet->target_unit_id = target_unit_id;
39314 real_packet->target_city_id = target_city_id;
39315 real_packet->target_tile_id = target_tile_id;
39316 real_packet->target_extra_id = target_extra_id;
39317 real_packet->request_kind = request_kind;
39318 {
39319 int i;
39320
39321 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39322 real_packet->action_probabilities[i] = action_probabilities[i];
39323 }
39324 }
39325
39327}
39328
39330{
39331 memset(packet, 0, sizeof(*packet));
39332}
39333
39334#define free_packet_unit_change_activity(_packet) (void) 0
39335#define destroy_packet_unit_change_activity free
39336
39337#ifdef FREECIV_DELTA_PROTOCOL
39338#define hash_packet_unit_change_activity_100 hash_const
39339#define cmp_packet_unit_change_activity_100 cmp_const
39341#endif /* FREECIV_DELTA_PROTOCOL */
39342
39344{
39345#define FREE_PACKET_STRUCT(_packet) free_packet_unit_change_activity(_packet)
39347
39348#ifdef FREECIV_JSON_CONNECTION
39349 struct plocation field_addr;
39350 {
39351 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39354 }
39355#endif /* FREECIV_JSON_CONNECTION */
39356
39357 log_packet_detailed("packet_unit_change_activity_100: got info about ()");
39358
39359#ifdef FREECIV_DELTA_PROTOCOL
39362 struct genhash **hash = pc->phs.received + PACKET_UNIT_CHANGE_ACTIVITY;
39363
39364 if (nullptr == *hash) {
39366 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39367 }
39368
39369 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39370 *real_packet = *old;
39371 } else {
39372 /* packet is already initialized empty */
39373 log_packet_detailed(" no old info");
39374 }
39375
39376#ifdef FREECIV_JSON_CONNECTION
39377 field_addr.name = "fields";
39378#endif /* FREECIV_JSON_CONNECTION */
39379 DIO_BV_GET(&din, &field_addr, fields);
39380
39381 if (BV_ISSET(fields, 0)) {
39382 log_packet_detailed(" got field 'unit_id'");
39383
39384#ifdef FREECIV_JSON_CONNECTION
39385 field_addr.name = "unit_id";
39386#endif /* FREECIV_JSON_CONNECTION */
39387
39388 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39390 }
39391 }
39392
39393 if (BV_ISSET(fields, 1)) {
39394 log_packet_detailed(" got field 'activity'");
39395
39396#ifdef FREECIV_JSON_CONNECTION
39397 field_addr.name = "activity";
39398#endif /* FREECIV_JSON_CONNECTION */
39399
39400 {
39401 int readin;
39402
39403 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39405 }
39406 real_packet->activity = readin;
39407 }
39408 }
39409
39410 if (BV_ISSET(fields, 2)) {
39411 log_packet_detailed(" got field 'target'");
39412
39413#ifdef FREECIV_JSON_CONNECTION
39414 field_addr.name = "target";
39415#endif /* FREECIV_JSON_CONNECTION */
39416
39417 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39419 }
39420 }
39421
39422 if (nullptr == old) {
39423 old = fc_malloc(sizeof(*old));
39425 *old = *real_packet;
39427 } else {
39428 *old = *real_packet;
39429 }
39430
39431#else /* FREECIV_DELTA_PROTOCOL */
39432#ifdef FREECIV_JSON_CONNECTION
39433 field_addr.name = "unit_id";
39434#endif /* FREECIV_JSON_CONNECTION */
39435
39436 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39438 }
39439
39440#ifdef FREECIV_JSON_CONNECTION
39441 field_addr.name = "activity";
39442#endif /* FREECIV_JSON_CONNECTION */
39443
39444 {
39445 int readin;
39446
39447 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39449 }
39450 real_packet->activity = readin;
39451 }
39452
39453#ifdef FREECIV_JSON_CONNECTION
39454 field_addr.name = "target";
39455#endif /* FREECIV_JSON_CONNECTION */
39456
39457 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39459 }
39460#endif /* FREECIV_DELTA_PROTOCOL */
39461
39463#undef FREE_PACKET_STRUCT
39464}
39465
39467{
39468 const struct packet_unit_change_activity *real_packet = packet;
39469 int e;
39471
39472 log_packet_detailed("packet_unit_change_activity_100: sending info about ()");
39473
39474#ifdef FREECIV_DELTA_PROTOCOL
39477 bool differ;
39478 struct genhash **hash = pc->phs.sent + PACKET_UNIT_CHANGE_ACTIVITY;
39479
39480 if (nullptr == *hash) {
39482 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39483 }
39484 BV_CLR_ALL(fields);
39485
39486 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39487 old = fc_malloc(sizeof(*old));
39488 /* temporary bitcopy just to insert correctly */
39489 *old = *real_packet;
39492 }
39493
39494 differ = (old->unit_id != real_packet->unit_id);
39495 if (differ) {
39496 BV_SET(fields, 0);
39497 }
39498
39499 differ = (old->activity != real_packet->activity);
39500 if (differ) {
39501 BV_SET(fields, 1);
39502 }
39503
39504 differ = (old->target != real_packet->target);
39505 if (differ) {
39506 BV_SET(fields, 2);
39507 }
39508#endif /* FREECIV_DELTA_PROTOCOL */
39509
39510#ifdef FREECIV_JSON_CONNECTION
39511 struct plocation field_addr;
39512 {
39513 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39516 }
39517#endif /* FREECIV_JSON_CONNECTION */
39518
39519#ifdef FREECIV_DELTA_PROTOCOL
39520#ifdef FREECIV_JSON_CONNECTION
39521 field_addr.name = "fields";
39522#endif /* FREECIV_JSON_CONNECTION */
39523 e = 0;
39524 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39525 if (e) {
39526 log_packet_detailed("fields bitvector error detected");
39527 }
39528
39529 if (BV_ISSET(fields, 0)) {
39530 log_packet_detailed(" field 'unit_id' has changed");
39531
39532#ifdef FREECIV_JSON_CONNECTION
39533 field_addr.name = "unit_id";
39534#endif /* FREECIV_JSON_CONNECTION */
39535 e = 0;
39536
39537 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39538
39539 if (e) {
39540 log_packet_detailed("'unit_id' field error detected");
39541 }
39542 }
39543
39544 if (BV_ISSET(fields, 1)) {
39545 log_packet_detailed(" field 'activity' has changed");
39546
39547#ifdef FREECIV_JSON_CONNECTION
39548 field_addr.name = "activity";
39549#endif /* FREECIV_JSON_CONNECTION */
39550 e = 0;
39551
39552 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39553
39554 if (e) {
39555 log_packet_detailed("'activity' field error detected");
39556 }
39557 }
39558
39559 if (BV_ISSET(fields, 2)) {
39560 log_packet_detailed(" field 'target' has changed");
39561
39562#ifdef FREECIV_JSON_CONNECTION
39563 field_addr.name = "target";
39564#endif /* FREECIV_JSON_CONNECTION */
39565 e = 0;
39566
39567 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39568
39569 if (e) {
39570 log_packet_detailed("'target' field error detected");
39571 }
39572 }
39573
39574 *old = *real_packet;
39575
39576#else /* FREECIV_DELTA_PROTOCOL */
39577#ifdef FREECIV_JSON_CONNECTION
39578 field_addr.name = "unit_id";
39579#endif /* FREECIV_JSON_CONNECTION */
39580 e = 0;
39581
39582 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39583
39584 if (e) {
39585 log_packet_detailed("'unit_id' field error detected");
39586 }
39587
39588#ifdef FREECIV_JSON_CONNECTION
39589 field_addr.name = "activity";
39590#endif /* FREECIV_JSON_CONNECTION */
39591 e = 0;
39592
39593 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39594
39595 if (e) {
39596 log_packet_detailed("'activity' field error detected");
39597 }
39598
39599#ifdef FREECIV_JSON_CONNECTION
39600 field_addr.name = "target";
39601#endif /* FREECIV_JSON_CONNECTION */
39602 e = 0;
39603
39604 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39605
39606 if (e) {
39607 log_packet_detailed("'target' field error detected");
39608 }
39609#endif /* FREECIV_DELTA_PROTOCOL */
39610
39612}
39613
39615{
39616 if (!pc->used) {
39617 log_error("WARNING: trying to send data to the closed connection %s",
39619 return -1;
39620 }
39621 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet != nullptr, -1,
39622 "Handler for PACKET_UNIT_CHANGE_ACTIVITY not installed");
39623 return pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet(pc, packet);
39624}
39625
39626int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
39627{
39628 struct packet_unit_change_activity packet, *real_packet = &packet;
39629
39631 real_packet->activity = activity;
39632 real_packet->target = target;
39633
39635}
39636
39638{
39639 memset(packet, 0, sizeof(*packet));
39640}
39641
39642#define free_packet_diplomacy_init_meeting_req(_packet) (void) 0
39643#define destroy_packet_diplomacy_init_meeting_req free
39644
39645#ifdef FREECIV_DELTA_PROTOCOL
39646#define hash_packet_diplomacy_init_meeting_req_100 hash_const
39647#define cmp_packet_diplomacy_init_meeting_req_100 cmp_const
39649#endif /* FREECIV_DELTA_PROTOCOL */
39650
39652{
39653#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting_req(_packet)
39655
39656#ifdef FREECIV_JSON_CONNECTION
39657 struct plocation field_addr;
39658 {
39659 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39662 }
39663#endif /* FREECIV_JSON_CONNECTION */
39664
39665 log_packet_detailed("packet_diplomacy_init_meeting_req_100: got info about ()");
39666
39667#ifdef FREECIV_DELTA_PROTOCOL
39670 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39671
39672 if (nullptr == *hash) {
39674 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39675 }
39676
39677 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39678 *real_packet = *old;
39679 } else {
39680 /* packet is already initialized empty */
39681 log_packet_detailed(" no old info");
39682 }
39683
39684#ifdef FREECIV_JSON_CONNECTION
39685 field_addr.name = "fields";
39686#endif /* FREECIV_JSON_CONNECTION */
39687 DIO_BV_GET(&din, &field_addr, fields);
39688
39689 if (BV_ISSET(fields, 0)) {
39690 log_packet_detailed(" got field 'counterpart'");
39691
39692#ifdef FREECIV_JSON_CONNECTION
39693 field_addr.name = "counterpart";
39694#endif /* FREECIV_JSON_CONNECTION */
39695
39696 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39697 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39698 }
39699 }
39700
39701 if (nullptr == old) {
39702 old = fc_malloc(sizeof(*old));
39704 *old = *real_packet;
39706 } else {
39707 *old = *real_packet;
39708 }
39709
39710#else /* FREECIV_DELTA_PROTOCOL */
39711#ifdef FREECIV_JSON_CONNECTION
39712 field_addr.name = "counterpart";
39713#endif /* FREECIV_JSON_CONNECTION */
39714
39715 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39716 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39717 }
39718#endif /* FREECIV_DELTA_PROTOCOL */
39719
39721#undef FREE_PACKET_STRUCT
39722}
39723
39725{
39726 const struct packet_diplomacy_init_meeting_req *real_packet = packet;
39727 int e;
39729
39730 log_packet_detailed("packet_diplomacy_init_meeting_req_100: sending info about ()");
39731
39732#ifdef FREECIV_DELTA_PROTOCOL
39735 bool differ;
39736 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39737
39738 if (nullptr == *hash) {
39740 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39741 }
39742 BV_CLR_ALL(fields);
39743
39744 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39745 old = fc_malloc(sizeof(*old));
39746 /* temporary bitcopy just to insert correctly */
39747 *old = *real_packet;
39750 }
39751
39752 differ = (old->counterpart != real_packet->counterpart);
39753 if (differ) {
39754 BV_SET(fields, 0);
39755 }
39756#endif /* FREECIV_DELTA_PROTOCOL */
39757
39758#ifdef FREECIV_JSON_CONNECTION
39759 struct plocation field_addr;
39760 {
39761 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39764 }
39765#endif /* FREECIV_JSON_CONNECTION */
39766
39767#ifdef FREECIV_DELTA_PROTOCOL
39768#ifdef FREECIV_JSON_CONNECTION
39769 field_addr.name = "fields";
39770#endif /* FREECIV_JSON_CONNECTION */
39771 e = 0;
39772 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39773 if (e) {
39774 log_packet_detailed("fields bitvector error detected");
39775 }
39776
39777 if (BV_ISSET(fields, 0)) {
39778 log_packet_detailed(" field 'counterpart' has changed");
39779
39780#ifdef FREECIV_JSON_CONNECTION
39781 field_addr.name = "counterpart";
39782#endif /* FREECIV_JSON_CONNECTION */
39783 e = 0;
39784
39785 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39786
39787 if (e) {
39788 log_packet_detailed("'counterpart' field error detected");
39789 }
39790 }
39791
39792 *old = *real_packet;
39793
39794#else /* FREECIV_DELTA_PROTOCOL */
39795#ifdef FREECIV_JSON_CONNECTION
39796 field_addr.name = "counterpart";
39797#endif /* FREECIV_JSON_CONNECTION */
39798 e = 0;
39799
39800 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39801
39802 if (e) {
39803 log_packet_detailed("'counterpart' field error detected");
39804 }
39805#endif /* FREECIV_DELTA_PROTOCOL */
39806
39808}
39809
39811{
39812 if (!pc->used) {
39813 log_error("WARNING: trying to send data to the closed connection %s",
39815 return -1;
39816 }
39817 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet != nullptr, -1,
39818 "Handler for PACKET_DIPLOMACY_INIT_MEETING_REQ not installed");
39819 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet(pc, packet);
39820}
39821
39823{
39824 struct packet_diplomacy_init_meeting_req packet, *real_packet = &packet;
39825
39827
39829}
39830
39832{
39833 memset(packet, 0, sizeof(*packet));
39834}
39835
39836#define free_packet_diplomacy_init_meeting(_packet) (void) 0
39837#define destroy_packet_diplomacy_init_meeting free
39838
39839#ifdef FREECIV_DELTA_PROTOCOL
39840#define hash_packet_diplomacy_init_meeting_100 hash_const
39841#define cmp_packet_diplomacy_init_meeting_100 cmp_const
39843#endif /* FREECIV_DELTA_PROTOCOL */
39844
39846{
39847#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting(_packet)
39849
39850#ifdef FREECIV_JSON_CONNECTION
39851 struct plocation field_addr;
39852 {
39853 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39856 }
39857#endif /* FREECIV_JSON_CONNECTION */
39858
39859 log_packet_detailed("packet_diplomacy_init_meeting_100: got info about ()");
39860
39861#ifdef FREECIV_DELTA_PROTOCOL
39864 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING;
39865
39866 if (nullptr == *hash) {
39868 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39869 }
39870
39871 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39872 *real_packet = *old;
39873 } else {
39874 /* packet is already initialized empty */
39875 log_packet_detailed(" no old info");
39876 }
39877
39878#ifdef FREECIV_JSON_CONNECTION
39879 field_addr.name = "fields";
39880#endif /* FREECIV_JSON_CONNECTION */
39881 DIO_BV_GET(&din, &field_addr, fields);
39882
39883 if (BV_ISSET(fields, 0)) {
39884 log_packet_detailed(" got field 'counterpart'");
39885
39886#ifdef FREECIV_JSON_CONNECTION
39887 field_addr.name = "counterpart";
39888#endif /* FREECIV_JSON_CONNECTION */
39889
39890 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39891 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39892 }
39893 }
39894
39895 if (BV_ISSET(fields, 1)) {
39896 log_packet_detailed(" got field 'initiated_from'");
39897
39898#ifdef FREECIV_JSON_CONNECTION
39899 field_addr.name = "initiated_from";
39900#endif /* FREECIV_JSON_CONNECTION */
39901
39902 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39903 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39904 }
39905 }
39906
39907 if (nullptr == old) {
39908 old = fc_malloc(sizeof(*old));
39910 *old = *real_packet;
39912 } else {
39913 *old = *real_packet;
39914 }
39915
39916#else /* FREECIV_DELTA_PROTOCOL */
39917#ifdef FREECIV_JSON_CONNECTION
39918 field_addr.name = "counterpart";
39919#endif /* FREECIV_JSON_CONNECTION */
39920
39921 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39922 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39923 }
39924
39925#ifdef FREECIV_JSON_CONNECTION
39926 field_addr.name = "initiated_from";
39927#endif /* FREECIV_JSON_CONNECTION */
39928
39929 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39930 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39931 }
39932#endif /* FREECIV_DELTA_PROTOCOL */
39933
39935#undef FREE_PACKET_STRUCT
39936}
39937
39939{
39940 const struct packet_diplomacy_init_meeting *real_packet = packet;
39941 int e;
39943
39944 log_packet_detailed("packet_diplomacy_init_meeting_100: sending info about ()");
39945
39946#ifdef FREECIV_DELTA_PROTOCOL
39949 bool differ;
39950 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING;
39951
39952 if (nullptr == *hash) {
39954 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39955 }
39956 BV_CLR_ALL(fields);
39957
39958 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39959 old = fc_malloc(sizeof(*old));
39960 /* temporary bitcopy just to insert correctly */
39961 *old = *real_packet;
39964 }
39965
39966 differ = (old->counterpart != real_packet->counterpart);
39967 if (differ) {
39968 BV_SET(fields, 0);
39969 }
39970
39971 differ = (old->initiated_from != real_packet->initiated_from);
39972 if (differ) {
39973 BV_SET(fields, 1);
39974 }
39975#endif /* FREECIV_DELTA_PROTOCOL */
39976
39977#ifdef FREECIV_JSON_CONNECTION
39978 struct plocation field_addr;
39979 {
39980 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39983 }
39984#endif /* FREECIV_JSON_CONNECTION */
39985
39986#ifdef FREECIV_DELTA_PROTOCOL
39987#ifdef FREECIV_JSON_CONNECTION
39988 field_addr.name = "fields";
39989#endif /* FREECIV_JSON_CONNECTION */
39990 e = 0;
39991 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39992 if (e) {
39993 log_packet_detailed("fields bitvector error detected");
39994 }
39995
39996 if (BV_ISSET(fields, 0)) {
39997 log_packet_detailed(" field 'counterpart' has changed");
39998
39999#ifdef FREECIV_JSON_CONNECTION
40000 field_addr.name = "counterpart";
40001#endif /* FREECIV_JSON_CONNECTION */
40002 e = 0;
40003
40004 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40005
40006 if (e) {
40007 log_packet_detailed("'counterpart' field error detected");
40008 }
40009 }
40010
40011 if (BV_ISSET(fields, 1)) {
40012 log_packet_detailed(" field 'initiated_from' has changed");
40013
40014#ifdef FREECIV_JSON_CONNECTION
40015 field_addr.name = "initiated_from";
40016#endif /* FREECIV_JSON_CONNECTION */
40017 e = 0;
40018
40019 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40020
40021 if (e) {
40022 log_packet_detailed("'initiated_from' field error detected");
40023 }
40024 }
40025
40026 *old = *real_packet;
40027
40028#else /* FREECIV_DELTA_PROTOCOL */
40029#ifdef FREECIV_JSON_CONNECTION
40030 field_addr.name = "counterpart";
40031#endif /* FREECIV_JSON_CONNECTION */
40032 e = 0;
40033
40034 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40035
40036 if (e) {
40037 log_packet_detailed("'counterpart' field error detected");
40038 }
40039
40040#ifdef FREECIV_JSON_CONNECTION
40041 field_addr.name = "initiated_from";
40042#endif /* FREECIV_JSON_CONNECTION */
40043 e = 0;
40044
40045 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40046
40047 if (e) {
40048 log_packet_detailed("'initiated_from' field error detected");
40049 }
40050#endif /* FREECIV_DELTA_PROTOCOL */
40051
40053}
40054
40056{
40057 if (!pc->used) {
40058 log_error("WARNING: trying to send data to the closed connection %s",
40060 return -1;
40061 }
40062 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet != nullptr, -1,
40063 "Handler for PACKET_DIPLOMACY_INIT_MEETING not installed");
40064 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet(pc, packet);
40065}
40066
40073
40074int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
40075{
40076 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40077
40079 real_packet->initiated_from = initiated_from;
40080
40082}
40083
40085{
40086 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40087
40089 real_packet->initiated_from = initiated_from;
40090
40092}
40093
40095{
40096 memset(packet, 0, sizeof(*packet));
40097}
40098
40099#define free_packet_diplomacy_cancel_meeting_req(_packet) (void) 0
40100#define destroy_packet_diplomacy_cancel_meeting_req free
40101
40102#ifdef FREECIV_DELTA_PROTOCOL
40103#define hash_packet_diplomacy_cancel_meeting_req_100 hash_const
40104#define cmp_packet_diplomacy_cancel_meeting_req_100 cmp_const
40106#endif /* FREECIV_DELTA_PROTOCOL */
40107
40109{
40110#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting_req(_packet)
40112
40113#ifdef FREECIV_JSON_CONNECTION
40114 struct plocation field_addr;
40115 {
40116 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40119 }
40120#endif /* FREECIV_JSON_CONNECTION */
40121
40122 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: got info about ()");
40123
40124#ifdef FREECIV_DELTA_PROTOCOL
40127 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40128
40129 if (nullptr == *hash) {
40131 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40132 }
40133
40134 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40135 *real_packet = *old;
40136 } else {
40137 /* packet is already initialized empty */
40138 log_packet_detailed(" no old info");
40139 }
40140
40141#ifdef FREECIV_JSON_CONNECTION
40142 field_addr.name = "fields";
40143#endif /* FREECIV_JSON_CONNECTION */
40144 DIO_BV_GET(&din, &field_addr, fields);
40145
40146 if (BV_ISSET(fields, 0)) {
40147 log_packet_detailed(" got field 'counterpart'");
40148
40149#ifdef FREECIV_JSON_CONNECTION
40150 field_addr.name = "counterpart";
40151#endif /* FREECIV_JSON_CONNECTION */
40152
40153 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40154 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40155 }
40156 }
40157
40158 if (nullptr == old) {
40159 old = fc_malloc(sizeof(*old));
40161 *old = *real_packet;
40163 } else {
40164 *old = *real_packet;
40165 }
40166
40167#else /* FREECIV_DELTA_PROTOCOL */
40168#ifdef FREECIV_JSON_CONNECTION
40169 field_addr.name = "counterpart";
40170#endif /* FREECIV_JSON_CONNECTION */
40171
40172 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40173 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40174 }
40175#endif /* FREECIV_DELTA_PROTOCOL */
40176
40178#undef FREE_PACKET_STRUCT
40179}
40180
40182{
40183 const struct packet_diplomacy_cancel_meeting_req *real_packet = packet;
40184 int e;
40186
40187 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: sending info about ()");
40188
40189#ifdef FREECIV_DELTA_PROTOCOL
40192 bool differ;
40193 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40194
40195 if (nullptr == *hash) {
40197 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40198 }
40199 BV_CLR_ALL(fields);
40200
40201 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40202 old = fc_malloc(sizeof(*old));
40203 /* temporary bitcopy just to insert correctly */
40204 *old = *real_packet;
40207 }
40208
40209 differ = (old->counterpart != real_packet->counterpart);
40210 if (differ) {
40211 BV_SET(fields, 0);
40212 }
40213#endif /* FREECIV_DELTA_PROTOCOL */
40214
40215#ifdef FREECIV_JSON_CONNECTION
40216 struct plocation field_addr;
40217 {
40218 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40221 }
40222#endif /* FREECIV_JSON_CONNECTION */
40223
40224#ifdef FREECIV_DELTA_PROTOCOL
40225#ifdef FREECIV_JSON_CONNECTION
40226 field_addr.name = "fields";
40227#endif /* FREECIV_JSON_CONNECTION */
40228 e = 0;
40229 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40230 if (e) {
40231 log_packet_detailed("fields bitvector error detected");
40232 }
40233
40234 if (BV_ISSET(fields, 0)) {
40235 log_packet_detailed(" field 'counterpart' has changed");
40236
40237#ifdef FREECIV_JSON_CONNECTION
40238 field_addr.name = "counterpart";
40239#endif /* FREECIV_JSON_CONNECTION */
40240 e = 0;
40241
40242 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40243
40244 if (e) {
40245 log_packet_detailed("'counterpart' field error detected");
40246 }
40247 }
40248
40249 *old = *real_packet;
40250
40251#else /* FREECIV_DELTA_PROTOCOL */
40252#ifdef FREECIV_JSON_CONNECTION
40253 field_addr.name = "counterpart";
40254#endif /* FREECIV_JSON_CONNECTION */
40255 e = 0;
40256
40257 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40258
40259 if (e) {
40260 log_packet_detailed("'counterpart' field error detected");
40261 }
40262#endif /* FREECIV_DELTA_PROTOCOL */
40263
40265}
40266
40268{
40269 if (!pc->used) {
40270 log_error("WARNING: trying to send data to the closed connection %s",
40272 return -1;
40273 }
40274 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet != nullptr, -1,
40275 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING_REQ not installed");
40276 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet(pc, packet);
40277}
40278
40280{
40281 struct packet_diplomacy_cancel_meeting_req packet, *real_packet = &packet;
40282
40284
40286}
40287
40289{
40290 memset(packet, 0, sizeof(*packet));
40291}
40292
40293#define free_packet_diplomacy_cancel_meeting(_packet) (void) 0
40294#define destroy_packet_diplomacy_cancel_meeting free
40295
40296#ifdef FREECIV_DELTA_PROTOCOL
40297#define hash_packet_diplomacy_cancel_meeting_100 hash_const
40298#define cmp_packet_diplomacy_cancel_meeting_100 cmp_const
40300#endif /* FREECIV_DELTA_PROTOCOL */
40301
40303{
40304#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting(_packet)
40306
40307#ifdef FREECIV_JSON_CONNECTION
40308 struct plocation field_addr;
40309 {
40310 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40313 }
40314#endif /* FREECIV_JSON_CONNECTION */
40315
40316 log_packet_detailed("packet_diplomacy_cancel_meeting_100: got info about ()");
40317
40318#ifdef FREECIV_DELTA_PROTOCOL
40321 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING;
40322
40323 if (nullptr == *hash) {
40325 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40326 }
40327
40328 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40329 *real_packet = *old;
40330 } else {
40331 /* packet is already initialized empty */
40332 log_packet_detailed(" no old info");
40333 }
40334
40335#ifdef FREECIV_JSON_CONNECTION
40336 field_addr.name = "fields";
40337#endif /* FREECIV_JSON_CONNECTION */
40338 DIO_BV_GET(&din, &field_addr, fields);
40339
40340 if (BV_ISSET(fields, 0)) {
40341 log_packet_detailed(" got field 'counterpart'");
40342
40343#ifdef FREECIV_JSON_CONNECTION
40344 field_addr.name = "counterpart";
40345#endif /* FREECIV_JSON_CONNECTION */
40346
40347 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40348 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40349 }
40350 }
40351
40352 if (BV_ISSET(fields, 1)) {
40353 log_packet_detailed(" got field 'initiated_from'");
40354
40355#ifdef FREECIV_JSON_CONNECTION
40356 field_addr.name = "initiated_from";
40357#endif /* FREECIV_JSON_CONNECTION */
40358
40359 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40360 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40361 }
40362 }
40363
40364 if (nullptr == old) {
40365 old = fc_malloc(sizeof(*old));
40367 *old = *real_packet;
40369 } else {
40370 *old = *real_packet;
40371 }
40372
40373#else /* FREECIV_DELTA_PROTOCOL */
40374#ifdef FREECIV_JSON_CONNECTION
40375 field_addr.name = "counterpart";
40376#endif /* FREECIV_JSON_CONNECTION */
40377
40378 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40379 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40380 }
40381
40382#ifdef FREECIV_JSON_CONNECTION
40383 field_addr.name = "initiated_from";
40384#endif /* FREECIV_JSON_CONNECTION */
40385
40386 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40387 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40388 }
40389#endif /* FREECIV_DELTA_PROTOCOL */
40390
40392#undef FREE_PACKET_STRUCT
40393}
40394
40396{
40397 const struct packet_diplomacy_cancel_meeting *real_packet = packet;
40398 int e;
40400
40401 log_packet_detailed("packet_diplomacy_cancel_meeting_100: sending info about ()");
40402
40403#ifdef FREECIV_DELTA_PROTOCOL
40406 bool differ;
40407 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING;
40408
40409 if (nullptr == *hash) {
40411 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40412 }
40413 BV_CLR_ALL(fields);
40414
40415 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40416 old = fc_malloc(sizeof(*old));
40417 /* temporary bitcopy just to insert correctly */
40418 *old = *real_packet;
40421 }
40422
40423 differ = (old->counterpart != real_packet->counterpart);
40424 if (differ) {
40425 BV_SET(fields, 0);
40426 }
40427
40428 differ = (old->initiated_from != real_packet->initiated_from);
40429 if (differ) {
40430 BV_SET(fields, 1);
40431 }
40432#endif /* FREECIV_DELTA_PROTOCOL */
40433
40434#ifdef FREECIV_JSON_CONNECTION
40435 struct plocation field_addr;
40436 {
40437 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40440 }
40441#endif /* FREECIV_JSON_CONNECTION */
40442
40443#ifdef FREECIV_DELTA_PROTOCOL
40444#ifdef FREECIV_JSON_CONNECTION
40445 field_addr.name = "fields";
40446#endif /* FREECIV_JSON_CONNECTION */
40447 e = 0;
40448 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40449 if (e) {
40450 log_packet_detailed("fields bitvector error detected");
40451 }
40452
40453 if (BV_ISSET(fields, 0)) {
40454 log_packet_detailed(" field 'counterpart' has changed");
40455
40456#ifdef FREECIV_JSON_CONNECTION
40457 field_addr.name = "counterpart";
40458#endif /* FREECIV_JSON_CONNECTION */
40459 e = 0;
40460
40461 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40462
40463 if (e) {
40464 log_packet_detailed("'counterpart' field error detected");
40465 }
40466 }
40467
40468 if (BV_ISSET(fields, 1)) {
40469 log_packet_detailed(" field 'initiated_from' has changed");
40470
40471#ifdef FREECIV_JSON_CONNECTION
40472 field_addr.name = "initiated_from";
40473#endif /* FREECIV_JSON_CONNECTION */
40474 e = 0;
40475
40476 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40477
40478 if (e) {
40479 log_packet_detailed("'initiated_from' field error detected");
40480 }
40481 }
40482
40483 *old = *real_packet;
40484
40485#else /* FREECIV_DELTA_PROTOCOL */
40486#ifdef FREECIV_JSON_CONNECTION
40487 field_addr.name = "counterpart";
40488#endif /* FREECIV_JSON_CONNECTION */
40489 e = 0;
40490
40491 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40492
40493 if (e) {
40494 log_packet_detailed("'counterpart' field error detected");
40495 }
40496
40497#ifdef FREECIV_JSON_CONNECTION
40498 field_addr.name = "initiated_from";
40499#endif /* FREECIV_JSON_CONNECTION */
40500 e = 0;
40501
40502 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40503
40504 if (e) {
40505 log_packet_detailed("'initiated_from' field error detected");
40506 }
40507#endif /* FREECIV_DELTA_PROTOCOL */
40508
40510}
40511
40513{
40514 if (!pc->used) {
40515 log_error("WARNING: trying to send data to the closed connection %s",
40517 return -1;
40518 }
40519 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet != nullptr, -1,
40520 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING not installed");
40521 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet(pc, packet);
40522}
40523
40530
40531int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
40532{
40533 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40534
40536 real_packet->initiated_from = initiated_from;
40537
40539}
40540
40542{
40543 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40544
40546 real_packet->initiated_from = initiated_from;
40547
40549}
40550
40552{
40553 memset(packet, 0, sizeof(*packet));
40554}
40555
40556#define free_packet_diplomacy_create_clause_req(_packet) (void) 0
40557#define destroy_packet_diplomacy_create_clause_req free
40558
40559#ifdef FREECIV_DELTA_PROTOCOL
40560#define hash_packet_diplomacy_create_clause_req_100 hash_const
40561#define cmp_packet_diplomacy_create_clause_req_100 cmp_const
40563#endif /* FREECIV_DELTA_PROTOCOL */
40564
40566{
40567#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause_req(_packet)
40569
40570#ifdef FREECIV_JSON_CONNECTION
40571 struct plocation field_addr;
40572 {
40573 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40576 }
40577#endif /* FREECIV_JSON_CONNECTION */
40578
40579 log_packet_detailed("packet_diplomacy_create_clause_req_100: got info about ()");
40580
40581#ifdef FREECIV_DELTA_PROTOCOL
40584 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40585
40586 if (nullptr == *hash) {
40588 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40589 }
40590
40591 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40592 *real_packet = *old;
40593 } else {
40594 /* packet is already initialized empty */
40595 log_packet_detailed(" no old info");
40596 }
40597
40598#ifdef FREECIV_JSON_CONNECTION
40599 field_addr.name = "fields";
40600#endif /* FREECIV_JSON_CONNECTION */
40601 DIO_BV_GET(&din, &field_addr, fields);
40602
40603 if (BV_ISSET(fields, 0)) {
40604 log_packet_detailed(" got field 'counterpart'");
40605
40606#ifdef FREECIV_JSON_CONNECTION
40607 field_addr.name = "counterpart";
40608#endif /* FREECIV_JSON_CONNECTION */
40609
40610 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40611 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40612 }
40613 }
40614
40615 if (BV_ISSET(fields, 1)) {
40616 log_packet_detailed(" got field 'giver'");
40617
40618#ifdef FREECIV_JSON_CONNECTION
40619 field_addr.name = "giver";
40620#endif /* FREECIV_JSON_CONNECTION */
40621
40622 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40624 }
40625 }
40626
40627 if (BV_ISSET(fields, 2)) {
40628 log_packet_detailed(" got field 'type'");
40629
40630#ifdef FREECIV_JSON_CONNECTION
40631 field_addr.name = "type";
40632#endif /* FREECIV_JSON_CONNECTION */
40633
40634 {
40635 int readin;
40636
40637 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40639 }
40640 real_packet->type = readin;
40641 }
40642 }
40643
40644 if (BV_ISSET(fields, 3)) {
40645 log_packet_detailed(" got field 'value'");
40646
40647#ifdef FREECIV_JSON_CONNECTION
40648 field_addr.name = "value";
40649#endif /* FREECIV_JSON_CONNECTION */
40650
40651 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40653 }
40654 }
40655
40656 if (nullptr == old) {
40657 old = fc_malloc(sizeof(*old));
40659 *old = *real_packet;
40661 } else {
40662 *old = *real_packet;
40663 }
40664
40665#else /* FREECIV_DELTA_PROTOCOL */
40666#ifdef FREECIV_JSON_CONNECTION
40667 field_addr.name = "counterpart";
40668#endif /* FREECIV_JSON_CONNECTION */
40669
40670 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40671 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40672 }
40673
40674#ifdef FREECIV_JSON_CONNECTION
40675 field_addr.name = "giver";
40676#endif /* FREECIV_JSON_CONNECTION */
40677
40678 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40680 }
40681
40682#ifdef FREECIV_JSON_CONNECTION
40683 field_addr.name = "type";
40684#endif /* FREECIV_JSON_CONNECTION */
40685
40686 {
40687 int readin;
40688
40689 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40691 }
40692 real_packet->type = readin;
40693 }
40694
40695#ifdef FREECIV_JSON_CONNECTION
40696 field_addr.name = "value";
40697#endif /* FREECIV_JSON_CONNECTION */
40698
40699 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40701 }
40702#endif /* FREECIV_DELTA_PROTOCOL */
40703
40705#undef FREE_PACKET_STRUCT
40706}
40707
40709{
40710 const struct packet_diplomacy_create_clause_req *real_packet = packet;
40711 int e;
40713
40714 log_packet_detailed("packet_diplomacy_create_clause_req_100: sending info about ()");
40715
40716#ifdef FREECIV_DELTA_PROTOCOL
40719 bool differ;
40720 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40721
40722 if (nullptr == *hash) {
40724 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40725 }
40726 BV_CLR_ALL(fields);
40727
40728 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40729 old = fc_malloc(sizeof(*old));
40730 /* temporary bitcopy just to insert correctly */
40731 *old = *real_packet;
40734 }
40735
40736 differ = (old->counterpart != real_packet->counterpart);
40737 if (differ) {
40738 BV_SET(fields, 0);
40739 }
40740
40741 differ = (old->giver != real_packet->giver);
40742 if (differ) {
40743 BV_SET(fields, 1);
40744 }
40745
40746 differ = (old->type != real_packet->type);
40747 if (differ) {
40748 BV_SET(fields, 2);
40749 }
40750
40751 differ = (old->value != real_packet->value);
40752 if (differ) {
40753 BV_SET(fields, 3);
40754 }
40755#endif /* FREECIV_DELTA_PROTOCOL */
40756
40757#ifdef FREECIV_JSON_CONNECTION
40758 struct plocation field_addr;
40759 {
40760 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40763 }
40764#endif /* FREECIV_JSON_CONNECTION */
40765
40766#ifdef FREECIV_DELTA_PROTOCOL
40767#ifdef FREECIV_JSON_CONNECTION
40768 field_addr.name = "fields";
40769#endif /* FREECIV_JSON_CONNECTION */
40770 e = 0;
40771 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40772 if (e) {
40773 log_packet_detailed("fields bitvector error detected");
40774 }
40775
40776 if (BV_ISSET(fields, 0)) {
40777 log_packet_detailed(" field 'counterpart' has changed");
40778
40779#ifdef FREECIV_JSON_CONNECTION
40780 field_addr.name = "counterpart";
40781#endif /* FREECIV_JSON_CONNECTION */
40782 e = 0;
40783
40784 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40785
40786 if (e) {
40787 log_packet_detailed("'counterpart' field error detected");
40788 }
40789 }
40790
40791 if (BV_ISSET(fields, 1)) {
40792 log_packet_detailed(" field 'giver' has changed");
40793
40794#ifdef FREECIV_JSON_CONNECTION
40795 field_addr.name = "giver";
40796#endif /* FREECIV_JSON_CONNECTION */
40797 e = 0;
40798
40799 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40800
40801 if (e) {
40802 log_packet_detailed("'giver' field error detected");
40803 }
40804 }
40805
40806 if (BV_ISSET(fields, 2)) {
40807 log_packet_detailed(" field 'type' has changed");
40808
40809#ifdef FREECIV_JSON_CONNECTION
40810 field_addr.name = "type";
40811#endif /* FREECIV_JSON_CONNECTION */
40812 e = 0;
40813
40814 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40815
40816 if (e) {
40817 log_packet_detailed("'type' field error detected");
40818 }
40819 }
40820
40821 if (BV_ISSET(fields, 3)) {
40822 log_packet_detailed(" field 'value' has changed");
40823
40824#ifdef FREECIV_JSON_CONNECTION
40825 field_addr.name = "value";
40826#endif /* FREECIV_JSON_CONNECTION */
40827 e = 0;
40828
40829 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40830
40831 if (e) {
40832 log_packet_detailed("'value' field error detected");
40833 }
40834 }
40835
40836 *old = *real_packet;
40837
40838#else /* FREECIV_DELTA_PROTOCOL */
40839#ifdef FREECIV_JSON_CONNECTION
40840 field_addr.name = "counterpart";
40841#endif /* FREECIV_JSON_CONNECTION */
40842 e = 0;
40843
40844 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40845
40846 if (e) {
40847 log_packet_detailed("'counterpart' field error detected");
40848 }
40849
40850#ifdef FREECIV_JSON_CONNECTION
40851 field_addr.name = "giver";
40852#endif /* FREECIV_JSON_CONNECTION */
40853 e = 0;
40854
40855 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40856
40857 if (e) {
40858 log_packet_detailed("'giver' field error detected");
40859 }
40860
40861#ifdef FREECIV_JSON_CONNECTION
40862 field_addr.name = "type";
40863#endif /* FREECIV_JSON_CONNECTION */
40864 e = 0;
40865
40866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40867
40868 if (e) {
40869 log_packet_detailed("'type' field error detected");
40870 }
40871
40872#ifdef FREECIV_JSON_CONNECTION
40873 field_addr.name = "value";
40874#endif /* FREECIV_JSON_CONNECTION */
40875 e = 0;
40876
40877 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40878
40879 if (e) {
40880 log_packet_detailed("'value' field error detected");
40881 }
40882#endif /* FREECIV_DELTA_PROTOCOL */
40883
40885}
40886
40888{
40889 if (!pc->used) {
40890 log_error("WARNING: trying to send data to the closed connection %s",
40892 return -1;
40893 }
40894 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet != nullptr, -1,
40895 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE_REQ not installed");
40896 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet(pc, packet);
40897}
40898
40899int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
40900{
40901 struct packet_diplomacy_create_clause_req packet, *real_packet = &packet;
40902
40904 real_packet->giver = giver;
40905 real_packet->type = type;
40906 real_packet->value = value;
40907
40909}
40910
40912{
40913 memset(packet, 0, sizeof(*packet));
40914}
40915
40916#define free_packet_diplomacy_create_clause(_packet) (void) 0
40917#define destroy_packet_diplomacy_create_clause free
40918
40919#ifdef FREECIV_DELTA_PROTOCOL
40920#define hash_packet_diplomacy_create_clause_100 hash_const
40921#define cmp_packet_diplomacy_create_clause_100 cmp_const
40923#endif /* FREECIV_DELTA_PROTOCOL */
40924
40926{
40927#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause(_packet)
40929
40930#ifdef FREECIV_JSON_CONNECTION
40931 struct plocation field_addr;
40932 {
40933 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40936 }
40937#endif /* FREECIV_JSON_CONNECTION */
40938
40939 log_packet_detailed("packet_diplomacy_create_clause_100: got info about ()");
40940
40941#ifdef FREECIV_DELTA_PROTOCOL
40944 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE;
40945
40946 if (nullptr == *hash) {
40948 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
40949 }
40950
40951 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40952 *real_packet = *old;
40953 } else {
40954 /* packet is already initialized empty */
40955 log_packet_detailed(" no old info");
40956 }
40957
40958#ifdef FREECIV_JSON_CONNECTION
40959 field_addr.name = "fields";
40960#endif /* FREECIV_JSON_CONNECTION */
40961 DIO_BV_GET(&din, &field_addr, fields);
40962
40963 if (BV_ISSET(fields, 0)) {
40964 log_packet_detailed(" got field 'counterpart'");
40965
40966#ifdef FREECIV_JSON_CONNECTION
40967 field_addr.name = "counterpart";
40968#endif /* FREECIV_JSON_CONNECTION */
40969
40970 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40971 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40972 }
40973 }
40974
40975 if (BV_ISSET(fields, 1)) {
40976 log_packet_detailed(" got field 'giver'");
40977
40978#ifdef FREECIV_JSON_CONNECTION
40979 field_addr.name = "giver";
40980#endif /* FREECIV_JSON_CONNECTION */
40981
40982 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40984 }
40985 }
40986
40987 if (BV_ISSET(fields, 2)) {
40988 log_packet_detailed(" got field 'type'");
40989
40990#ifdef FREECIV_JSON_CONNECTION
40991 field_addr.name = "type";
40992#endif /* FREECIV_JSON_CONNECTION */
40993
40994 {
40995 int readin;
40996
40997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40999 }
41000 real_packet->type = readin;
41001 }
41002 }
41003
41004 if (BV_ISSET(fields, 3)) {
41005 log_packet_detailed(" got field 'value'");
41006
41007#ifdef FREECIV_JSON_CONNECTION
41008 field_addr.name = "value";
41009#endif /* FREECIV_JSON_CONNECTION */
41010
41011 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41013 }
41014 }
41015
41016 if (nullptr == old) {
41017 old = fc_malloc(sizeof(*old));
41019 *old = *real_packet;
41021 } else {
41022 *old = *real_packet;
41023 }
41024
41025#else /* FREECIV_DELTA_PROTOCOL */
41026#ifdef FREECIV_JSON_CONNECTION
41027 field_addr.name = "counterpart";
41028#endif /* FREECIV_JSON_CONNECTION */
41029
41030 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41031 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41032 }
41033
41034#ifdef FREECIV_JSON_CONNECTION
41035 field_addr.name = "giver";
41036#endif /* FREECIV_JSON_CONNECTION */
41037
41038 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41040 }
41041
41042#ifdef FREECIV_JSON_CONNECTION
41043 field_addr.name = "type";
41044#endif /* FREECIV_JSON_CONNECTION */
41045
41046 {
41047 int readin;
41048
41049 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41051 }
41052 real_packet->type = readin;
41053 }
41054
41055#ifdef FREECIV_JSON_CONNECTION
41056 field_addr.name = "value";
41057#endif /* FREECIV_JSON_CONNECTION */
41058
41059 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41061 }
41062#endif /* FREECIV_DELTA_PROTOCOL */
41063
41065#undef FREE_PACKET_STRUCT
41066}
41067
41069{
41070 const struct packet_diplomacy_create_clause *real_packet = packet;
41071 int e;
41073
41074 log_packet_detailed("packet_diplomacy_create_clause_100: sending info about ()");
41075
41076#ifdef FREECIV_DELTA_PROTOCOL
41079 bool differ;
41080 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE;
41081
41082 if (nullptr == *hash) {
41084 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
41085 }
41086 BV_CLR_ALL(fields);
41087
41088 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41089 old = fc_malloc(sizeof(*old));
41090 /* temporary bitcopy just to insert correctly */
41091 *old = *real_packet;
41094 }
41095
41096 differ = (old->counterpart != real_packet->counterpart);
41097 if (differ) {
41098 BV_SET(fields, 0);
41099 }
41100
41101 differ = (old->giver != real_packet->giver);
41102 if (differ) {
41103 BV_SET(fields, 1);
41104 }
41105
41106 differ = (old->type != real_packet->type);
41107 if (differ) {
41108 BV_SET(fields, 2);
41109 }
41110
41111 differ = (old->value != real_packet->value);
41112 if (differ) {
41113 BV_SET(fields, 3);
41114 }
41115#endif /* FREECIV_DELTA_PROTOCOL */
41116
41117#ifdef FREECIV_JSON_CONNECTION
41118 struct plocation field_addr;
41119 {
41120 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41123 }
41124#endif /* FREECIV_JSON_CONNECTION */
41125
41126#ifdef FREECIV_DELTA_PROTOCOL
41127#ifdef FREECIV_JSON_CONNECTION
41128 field_addr.name = "fields";
41129#endif /* FREECIV_JSON_CONNECTION */
41130 e = 0;
41131 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41132 if (e) {
41133 log_packet_detailed("fields bitvector error detected");
41134 }
41135
41136 if (BV_ISSET(fields, 0)) {
41137 log_packet_detailed(" field 'counterpart' has changed");
41138
41139#ifdef FREECIV_JSON_CONNECTION
41140 field_addr.name = "counterpart";
41141#endif /* FREECIV_JSON_CONNECTION */
41142 e = 0;
41143
41144 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41145
41146 if (e) {
41147 log_packet_detailed("'counterpart' field error detected");
41148 }
41149 }
41150
41151 if (BV_ISSET(fields, 1)) {
41152 log_packet_detailed(" field 'giver' has changed");
41153
41154#ifdef FREECIV_JSON_CONNECTION
41155 field_addr.name = "giver";
41156#endif /* FREECIV_JSON_CONNECTION */
41157 e = 0;
41158
41159 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41160
41161 if (e) {
41162 log_packet_detailed("'giver' field error detected");
41163 }
41164 }
41165
41166 if (BV_ISSET(fields, 2)) {
41167 log_packet_detailed(" field 'type' has changed");
41168
41169#ifdef FREECIV_JSON_CONNECTION
41170 field_addr.name = "type";
41171#endif /* FREECIV_JSON_CONNECTION */
41172 e = 0;
41173
41174 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41175
41176 if (e) {
41177 log_packet_detailed("'type' field error detected");
41178 }
41179 }
41180
41181 if (BV_ISSET(fields, 3)) {
41182 log_packet_detailed(" field 'value' has changed");
41183
41184#ifdef FREECIV_JSON_CONNECTION
41185 field_addr.name = "value";
41186#endif /* FREECIV_JSON_CONNECTION */
41187 e = 0;
41188
41189 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41190
41191 if (e) {
41192 log_packet_detailed("'value' field error detected");
41193 }
41194 }
41195
41196 *old = *real_packet;
41197
41198#else /* FREECIV_DELTA_PROTOCOL */
41199#ifdef FREECIV_JSON_CONNECTION
41200 field_addr.name = "counterpart";
41201#endif /* FREECIV_JSON_CONNECTION */
41202 e = 0;
41203
41204 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41205
41206 if (e) {
41207 log_packet_detailed("'counterpart' field error detected");
41208 }
41209
41210#ifdef FREECIV_JSON_CONNECTION
41211 field_addr.name = "giver";
41212#endif /* FREECIV_JSON_CONNECTION */
41213 e = 0;
41214
41215 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41216
41217 if (e) {
41218 log_packet_detailed("'giver' field error detected");
41219 }
41220
41221#ifdef FREECIV_JSON_CONNECTION
41222 field_addr.name = "type";
41223#endif /* FREECIV_JSON_CONNECTION */
41224 e = 0;
41225
41226 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41227
41228 if (e) {
41229 log_packet_detailed("'type' field error detected");
41230 }
41231
41232#ifdef FREECIV_JSON_CONNECTION
41233 field_addr.name = "value";
41234#endif /* FREECIV_JSON_CONNECTION */
41235 e = 0;
41236
41237 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41238
41239 if (e) {
41240 log_packet_detailed("'value' field error detected");
41241 }
41242#endif /* FREECIV_DELTA_PROTOCOL */
41243
41245}
41246
41248{
41249 if (!pc->used) {
41250 log_error("WARNING: trying to send data to the closed connection %s",
41252 return -1;
41253 }
41254 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet != nullptr, -1,
41255 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE not installed");
41256 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet(pc, packet);
41257}
41258
41265
41266int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41267{
41268 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41269
41271 real_packet->giver = giver;
41272 real_packet->type = type;
41273 real_packet->value = value;
41274
41276}
41277
41279{
41280 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41281
41283 real_packet->giver = giver;
41284 real_packet->type = type;
41285 real_packet->value = value;
41286
41288}
41289
41291{
41292 memset(packet, 0, sizeof(*packet));
41293}
41294
41295#define free_packet_diplomacy_remove_clause_req(_packet) (void) 0
41296#define destroy_packet_diplomacy_remove_clause_req free
41297
41298#ifdef FREECIV_DELTA_PROTOCOL
41299#define hash_packet_diplomacy_remove_clause_req_100 hash_const
41300#define cmp_packet_diplomacy_remove_clause_req_100 cmp_const
41302#endif /* FREECIV_DELTA_PROTOCOL */
41303
41305{
41306#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause_req(_packet)
41308
41309#ifdef FREECIV_JSON_CONNECTION
41310 struct plocation field_addr;
41311 {
41312 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41315 }
41316#endif /* FREECIV_JSON_CONNECTION */
41317
41318 log_packet_detailed("packet_diplomacy_remove_clause_req_100: got info about ()");
41319
41320#ifdef FREECIV_DELTA_PROTOCOL
41323 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41324
41325 if (nullptr == *hash) {
41327 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41328 }
41329
41330 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41331 *real_packet = *old;
41332 } else {
41333 /* packet is already initialized empty */
41334 log_packet_detailed(" no old info");
41335 }
41336
41337#ifdef FREECIV_JSON_CONNECTION
41338 field_addr.name = "fields";
41339#endif /* FREECIV_JSON_CONNECTION */
41340 DIO_BV_GET(&din, &field_addr, fields);
41341
41342 if (BV_ISSET(fields, 0)) {
41343 log_packet_detailed(" got field 'counterpart'");
41344
41345#ifdef FREECIV_JSON_CONNECTION
41346 field_addr.name = "counterpart";
41347#endif /* FREECIV_JSON_CONNECTION */
41348
41349 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41350 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41351 }
41352 }
41353
41354 if (BV_ISSET(fields, 1)) {
41355 log_packet_detailed(" got field 'giver'");
41356
41357#ifdef FREECIV_JSON_CONNECTION
41358 field_addr.name = "giver";
41359#endif /* FREECIV_JSON_CONNECTION */
41360
41361 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41363 }
41364 }
41365
41366 if (BV_ISSET(fields, 2)) {
41367 log_packet_detailed(" got field 'type'");
41368
41369#ifdef FREECIV_JSON_CONNECTION
41370 field_addr.name = "type";
41371#endif /* FREECIV_JSON_CONNECTION */
41372
41373 {
41374 int readin;
41375
41376 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41378 }
41379 real_packet->type = readin;
41380 }
41381 }
41382
41383 if (BV_ISSET(fields, 3)) {
41384 log_packet_detailed(" got field 'value'");
41385
41386#ifdef FREECIV_JSON_CONNECTION
41387 field_addr.name = "value";
41388#endif /* FREECIV_JSON_CONNECTION */
41389
41390 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41392 }
41393 }
41394
41395 if (nullptr == old) {
41396 old = fc_malloc(sizeof(*old));
41398 *old = *real_packet;
41400 } else {
41401 *old = *real_packet;
41402 }
41403
41404#else /* FREECIV_DELTA_PROTOCOL */
41405#ifdef FREECIV_JSON_CONNECTION
41406 field_addr.name = "counterpart";
41407#endif /* FREECIV_JSON_CONNECTION */
41408
41409 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41410 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41411 }
41412
41413#ifdef FREECIV_JSON_CONNECTION
41414 field_addr.name = "giver";
41415#endif /* FREECIV_JSON_CONNECTION */
41416
41417 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41419 }
41420
41421#ifdef FREECIV_JSON_CONNECTION
41422 field_addr.name = "type";
41423#endif /* FREECIV_JSON_CONNECTION */
41424
41425 {
41426 int readin;
41427
41428 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41430 }
41431 real_packet->type = readin;
41432 }
41433
41434#ifdef FREECIV_JSON_CONNECTION
41435 field_addr.name = "value";
41436#endif /* FREECIV_JSON_CONNECTION */
41437
41438 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41440 }
41441#endif /* FREECIV_DELTA_PROTOCOL */
41442
41444#undef FREE_PACKET_STRUCT
41445}
41446
41448{
41449 const struct packet_diplomacy_remove_clause_req *real_packet = packet;
41450 int e;
41452
41453 log_packet_detailed("packet_diplomacy_remove_clause_req_100: sending info about ()");
41454
41455#ifdef FREECIV_DELTA_PROTOCOL
41458 bool differ;
41459 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41460
41461 if (nullptr == *hash) {
41463 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41464 }
41465 BV_CLR_ALL(fields);
41466
41467 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41468 old = fc_malloc(sizeof(*old));
41469 /* temporary bitcopy just to insert correctly */
41470 *old = *real_packet;
41473 }
41474
41475 differ = (old->counterpart != real_packet->counterpart);
41476 if (differ) {
41477 BV_SET(fields, 0);
41478 }
41479
41480 differ = (old->giver != real_packet->giver);
41481 if (differ) {
41482 BV_SET(fields, 1);
41483 }
41484
41485 differ = (old->type != real_packet->type);
41486 if (differ) {
41487 BV_SET(fields, 2);
41488 }
41489
41490 differ = (old->value != real_packet->value);
41491 if (differ) {
41492 BV_SET(fields, 3);
41493 }
41494#endif /* FREECIV_DELTA_PROTOCOL */
41495
41496#ifdef FREECIV_JSON_CONNECTION
41497 struct plocation field_addr;
41498 {
41499 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41502 }
41503#endif /* FREECIV_JSON_CONNECTION */
41504
41505#ifdef FREECIV_DELTA_PROTOCOL
41506#ifdef FREECIV_JSON_CONNECTION
41507 field_addr.name = "fields";
41508#endif /* FREECIV_JSON_CONNECTION */
41509 e = 0;
41510 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41511 if (e) {
41512 log_packet_detailed("fields bitvector error detected");
41513 }
41514
41515 if (BV_ISSET(fields, 0)) {
41516 log_packet_detailed(" field 'counterpart' has changed");
41517
41518#ifdef FREECIV_JSON_CONNECTION
41519 field_addr.name = "counterpart";
41520#endif /* FREECIV_JSON_CONNECTION */
41521 e = 0;
41522
41523 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41524
41525 if (e) {
41526 log_packet_detailed("'counterpart' field error detected");
41527 }
41528 }
41529
41530 if (BV_ISSET(fields, 1)) {
41531 log_packet_detailed(" field 'giver' has changed");
41532
41533#ifdef FREECIV_JSON_CONNECTION
41534 field_addr.name = "giver";
41535#endif /* FREECIV_JSON_CONNECTION */
41536 e = 0;
41537
41538 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41539
41540 if (e) {
41541 log_packet_detailed("'giver' field error detected");
41542 }
41543 }
41544
41545 if (BV_ISSET(fields, 2)) {
41546 log_packet_detailed(" field 'type' has changed");
41547
41548#ifdef FREECIV_JSON_CONNECTION
41549 field_addr.name = "type";
41550#endif /* FREECIV_JSON_CONNECTION */
41551 e = 0;
41552
41553 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41554
41555 if (e) {
41556 log_packet_detailed("'type' field error detected");
41557 }
41558 }
41559
41560 if (BV_ISSET(fields, 3)) {
41561 log_packet_detailed(" field 'value' has changed");
41562
41563#ifdef FREECIV_JSON_CONNECTION
41564 field_addr.name = "value";
41565#endif /* FREECIV_JSON_CONNECTION */
41566 e = 0;
41567
41568 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41569
41570 if (e) {
41571 log_packet_detailed("'value' field error detected");
41572 }
41573 }
41574
41575 *old = *real_packet;
41576
41577#else /* FREECIV_DELTA_PROTOCOL */
41578#ifdef FREECIV_JSON_CONNECTION
41579 field_addr.name = "counterpart";
41580#endif /* FREECIV_JSON_CONNECTION */
41581 e = 0;
41582
41583 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41584
41585 if (e) {
41586 log_packet_detailed("'counterpart' field error detected");
41587 }
41588
41589#ifdef FREECIV_JSON_CONNECTION
41590 field_addr.name = "giver";
41591#endif /* FREECIV_JSON_CONNECTION */
41592 e = 0;
41593
41594 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41595
41596 if (e) {
41597 log_packet_detailed("'giver' field error detected");
41598 }
41599
41600#ifdef FREECIV_JSON_CONNECTION
41601 field_addr.name = "type";
41602#endif /* FREECIV_JSON_CONNECTION */
41603 e = 0;
41604
41605 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41606
41607 if (e) {
41608 log_packet_detailed("'type' field error detected");
41609 }
41610
41611#ifdef FREECIV_JSON_CONNECTION
41612 field_addr.name = "value";
41613#endif /* FREECIV_JSON_CONNECTION */
41614 e = 0;
41615
41616 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41617
41618 if (e) {
41619 log_packet_detailed("'value' field error detected");
41620 }
41621#endif /* FREECIV_DELTA_PROTOCOL */
41622
41624}
41625
41627{
41628 if (!pc->used) {
41629 log_error("WARNING: trying to send data to the closed connection %s",
41631 return -1;
41632 }
41633 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet != nullptr, -1,
41634 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ not installed");
41635 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet(pc, packet);
41636}
41637
41638int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41639{
41640 struct packet_diplomacy_remove_clause_req packet, *real_packet = &packet;
41641
41643 real_packet->giver = giver;
41644 real_packet->type = type;
41645 real_packet->value = value;
41646
41648}
41649
41651{
41652 memset(packet, 0, sizeof(*packet));
41653}
41654
41655#define free_packet_diplomacy_remove_clause(_packet) (void) 0
41656#define destroy_packet_diplomacy_remove_clause free
41657
41658#ifdef FREECIV_DELTA_PROTOCOL
41659#define hash_packet_diplomacy_remove_clause_100 hash_const
41660#define cmp_packet_diplomacy_remove_clause_100 cmp_const
41662#endif /* FREECIV_DELTA_PROTOCOL */
41663
41665{
41666#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause(_packet)
41668
41669#ifdef FREECIV_JSON_CONNECTION
41670 struct plocation field_addr;
41671 {
41672 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41675 }
41676#endif /* FREECIV_JSON_CONNECTION */
41677
41678 log_packet_detailed("packet_diplomacy_remove_clause_100: got info about ()");
41679
41680#ifdef FREECIV_DELTA_PROTOCOL
41683 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41684
41685 if (nullptr == *hash) {
41687 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41688 }
41689
41690 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41691 *real_packet = *old;
41692 } else {
41693 /* packet is already initialized empty */
41694 log_packet_detailed(" no old info");
41695 }
41696
41697#ifdef FREECIV_JSON_CONNECTION
41698 field_addr.name = "fields";
41699#endif /* FREECIV_JSON_CONNECTION */
41700 DIO_BV_GET(&din, &field_addr, fields);
41701
41702 if (BV_ISSET(fields, 0)) {
41703 log_packet_detailed(" got field 'counterpart'");
41704
41705#ifdef FREECIV_JSON_CONNECTION
41706 field_addr.name = "counterpart";
41707#endif /* FREECIV_JSON_CONNECTION */
41708
41709 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41710 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41711 }
41712 }
41713
41714 if (BV_ISSET(fields, 1)) {
41715 log_packet_detailed(" got field 'giver'");
41716
41717#ifdef FREECIV_JSON_CONNECTION
41718 field_addr.name = "giver";
41719#endif /* FREECIV_JSON_CONNECTION */
41720
41721 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41723 }
41724 }
41725
41726 if (BV_ISSET(fields, 2)) {
41727 log_packet_detailed(" got field 'type'");
41728
41729#ifdef FREECIV_JSON_CONNECTION
41730 field_addr.name = "type";
41731#endif /* FREECIV_JSON_CONNECTION */
41732
41733 {
41734 int readin;
41735
41736 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41738 }
41739 real_packet->type = readin;
41740 }
41741 }
41742
41743 if (BV_ISSET(fields, 3)) {
41744 log_packet_detailed(" got field 'value'");
41745
41746#ifdef FREECIV_JSON_CONNECTION
41747 field_addr.name = "value";
41748#endif /* FREECIV_JSON_CONNECTION */
41749
41750 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41752 }
41753 }
41754
41755 if (nullptr == old) {
41756 old = fc_malloc(sizeof(*old));
41758 *old = *real_packet;
41760 } else {
41761 *old = *real_packet;
41762 }
41763
41764#else /* FREECIV_DELTA_PROTOCOL */
41765#ifdef FREECIV_JSON_CONNECTION
41766 field_addr.name = "counterpart";
41767#endif /* FREECIV_JSON_CONNECTION */
41768
41769 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41770 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41771 }
41772
41773#ifdef FREECIV_JSON_CONNECTION
41774 field_addr.name = "giver";
41775#endif /* FREECIV_JSON_CONNECTION */
41776
41777 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41779 }
41780
41781#ifdef FREECIV_JSON_CONNECTION
41782 field_addr.name = "type";
41783#endif /* FREECIV_JSON_CONNECTION */
41784
41785 {
41786 int readin;
41787
41788 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41790 }
41791 real_packet->type = readin;
41792 }
41793
41794#ifdef FREECIV_JSON_CONNECTION
41795 field_addr.name = "value";
41796#endif /* FREECIV_JSON_CONNECTION */
41797
41798 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41800 }
41801#endif /* FREECIV_DELTA_PROTOCOL */
41802
41804#undef FREE_PACKET_STRUCT
41805}
41806
41808{
41809 const struct packet_diplomacy_remove_clause *real_packet = packet;
41810 int e;
41812
41813 log_packet_detailed("packet_diplomacy_remove_clause_100: sending info about ()");
41814
41815#ifdef FREECIV_DELTA_PROTOCOL
41818 bool differ;
41819 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41820
41821 if (nullptr == *hash) {
41823 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41824 }
41825 BV_CLR_ALL(fields);
41826
41827 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41828 old = fc_malloc(sizeof(*old));
41829 /* temporary bitcopy just to insert correctly */
41830 *old = *real_packet;
41833 }
41834
41835 differ = (old->counterpart != real_packet->counterpart);
41836 if (differ) {
41837 BV_SET(fields, 0);
41838 }
41839
41840 differ = (old->giver != real_packet->giver);
41841 if (differ) {
41842 BV_SET(fields, 1);
41843 }
41844
41845 differ = (old->type != real_packet->type);
41846 if (differ) {
41847 BV_SET(fields, 2);
41848 }
41849
41850 differ = (old->value != real_packet->value);
41851 if (differ) {
41852 BV_SET(fields, 3);
41853 }
41854#endif /* FREECIV_DELTA_PROTOCOL */
41855
41856#ifdef FREECIV_JSON_CONNECTION
41857 struct plocation field_addr;
41858 {
41859 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41862 }
41863#endif /* FREECIV_JSON_CONNECTION */
41864
41865#ifdef FREECIV_DELTA_PROTOCOL
41866#ifdef FREECIV_JSON_CONNECTION
41867 field_addr.name = "fields";
41868#endif /* FREECIV_JSON_CONNECTION */
41869 e = 0;
41870 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41871 if (e) {
41872 log_packet_detailed("fields bitvector error detected");
41873 }
41874
41875 if (BV_ISSET(fields, 0)) {
41876 log_packet_detailed(" field 'counterpart' has changed");
41877
41878#ifdef FREECIV_JSON_CONNECTION
41879 field_addr.name = "counterpart";
41880#endif /* FREECIV_JSON_CONNECTION */
41881 e = 0;
41882
41883 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41884
41885 if (e) {
41886 log_packet_detailed("'counterpart' field error detected");
41887 }
41888 }
41889
41890 if (BV_ISSET(fields, 1)) {
41891 log_packet_detailed(" field 'giver' has changed");
41892
41893#ifdef FREECIV_JSON_CONNECTION
41894 field_addr.name = "giver";
41895#endif /* FREECIV_JSON_CONNECTION */
41896 e = 0;
41897
41898 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41899
41900 if (e) {
41901 log_packet_detailed("'giver' field error detected");
41902 }
41903 }
41904
41905 if (BV_ISSET(fields, 2)) {
41906 log_packet_detailed(" field 'type' has changed");
41907
41908#ifdef FREECIV_JSON_CONNECTION
41909 field_addr.name = "type";
41910#endif /* FREECIV_JSON_CONNECTION */
41911 e = 0;
41912
41913 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41914
41915 if (e) {
41916 log_packet_detailed("'type' field error detected");
41917 }
41918 }
41919
41920 if (BV_ISSET(fields, 3)) {
41921 log_packet_detailed(" field 'value' has changed");
41922
41923#ifdef FREECIV_JSON_CONNECTION
41924 field_addr.name = "value";
41925#endif /* FREECIV_JSON_CONNECTION */
41926 e = 0;
41927
41928 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41929
41930 if (e) {
41931 log_packet_detailed("'value' field error detected");
41932 }
41933 }
41934
41935 *old = *real_packet;
41936
41937#else /* FREECIV_DELTA_PROTOCOL */
41938#ifdef FREECIV_JSON_CONNECTION
41939 field_addr.name = "counterpart";
41940#endif /* FREECIV_JSON_CONNECTION */
41941 e = 0;
41942
41943 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41944
41945 if (e) {
41946 log_packet_detailed("'counterpart' field error detected");
41947 }
41948
41949#ifdef FREECIV_JSON_CONNECTION
41950 field_addr.name = "giver";
41951#endif /* FREECIV_JSON_CONNECTION */
41952 e = 0;
41953
41954 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41955
41956 if (e) {
41957 log_packet_detailed("'giver' field error detected");
41958 }
41959
41960#ifdef FREECIV_JSON_CONNECTION
41961 field_addr.name = "type";
41962#endif /* FREECIV_JSON_CONNECTION */
41963 e = 0;
41964
41965 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41966
41967 if (e) {
41968 log_packet_detailed("'type' field error detected");
41969 }
41970
41971#ifdef FREECIV_JSON_CONNECTION
41972 field_addr.name = "value";
41973#endif /* FREECIV_JSON_CONNECTION */
41974 e = 0;
41975
41976 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41977
41978 if (e) {
41979 log_packet_detailed("'value' field error detected");
41980 }
41981#endif /* FREECIV_DELTA_PROTOCOL */
41982
41984}
41985
41987{
41988 if (!pc->used) {
41989 log_error("WARNING: trying to send data to the closed connection %s",
41991 return -1;
41992 }
41993 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet != nullptr, -1,
41994 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE not installed");
41995 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet(pc, packet);
41996}
41997
42004
42005int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
42006{
42007 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
42008
42010 real_packet->giver = giver;
42011 real_packet->type = type;
42012 real_packet->value = value;
42013
42015}
42016
42018{
42019 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
42020
42022 real_packet->giver = giver;
42023 real_packet->type = type;
42024 real_packet->value = value;
42025
42027}
42028
42030{
42031 memset(packet, 0, sizeof(*packet));
42032}
42033
42034#define free_packet_diplomacy_accept_treaty_req(_packet) (void) 0
42035#define destroy_packet_diplomacy_accept_treaty_req free
42036
42037#ifdef FREECIV_DELTA_PROTOCOL
42038#define hash_packet_diplomacy_accept_treaty_req_100 hash_const
42039#define cmp_packet_diplomacy_accept_treaty_req_100 cmp_const
42041#endif /* FREECIV_DELTA_PROTOCOL */
42042
42044{
42045#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty_req(_packet)
42047
42048#ifdef FREECIV_JSON_CONNECTION
42049 struct plocation field_addr;
42050 {
42051 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42054 }
42055#endif /* FREECIV_JSON_CONNECTION */
42056
42057 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: got info about ()");
42058
42059#ifdef FREECIV_DELTA_PROTOCOL
42062 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
42063
42064 if (nullptr == *hash) {
42066 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
42067 }
42068
42069 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42070 *real_packet = *old;
42071 } else {
42072 /* packet is already initialized empty */
42073 log_packet_detailed(" no old info");
42074 }
42075
42076#ifdef FREECIV_JSON_CONNECTION
42077 field_addr.name = "fields";
42078#endif /* FREECIV_JSON_CONNECTION */
42079 DIO_BV_GET(&din, &field_addr, fields);
42080
42081 if (BV_ISSET(fields, 0)) {
42082 log_packet_detailed(" got field 'counterpart'");
42083
42084#ifdef FREECIV_JSON_CONNECTION
42085 field_addr.name = "counterpart";
42086#endif /* FREECIV_JSON_CONNECTION */
42087
42088 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42089 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42090 }
42091 }
42092
42093 if (nullptr == old) {
42094 old = fc_malloc(sizeof(*old));
42096 *old = *real_packet;
42098 } else {
42099 *old = *real_packet;
42100 }
42101
42102#else /* FREECIV_DELTA_PROTOCOL */
42103#ifdef FREECIV_JSON_CONNECTION
42104 field_addr.name = "counterpart";
42105#endif /* FREECIV_JSON_CONNECTION */
42106
42107 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42108 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42109 }
42110#endif /* FREECIV_DELTA_PROTOCOL */
42111
42113#undef FREE_PACKET_STRUCT
42114}
42115
42117{
42118 const struct packet_diplomacy_accept_treaty_req *real_packet = packet;
42119 int e;
42121
42122 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: sending info about ()");
42123
42124#ifdef FREECIV_DELTA_PROTOCOL
42127 bool differ;
42128 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
42129
42130 if (nullptr == *hash) {
42132 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
42133 }
42134 BV_CLR_ALL(fields);
42135
42136 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42137 old = fc_malloc(sizeof(*old));
42138 /* temporary bitcopy just to insert correctly */
42139 *old = *real_packet;
42142 }
42143
42144 differ = (old->counterpart != real_packet->counterpart);
42145 if (differ) {
42146 BV_SET(fields, 0);
42147 }
42148#endif /* FREECIV_DELTA_PROTOCOL */
42149
42150#ifdef FREECIV_JSON_CONNECTION
42151 struct plocation field_addr;
42152 {
42153 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42156 }
42157#endif /* FREECIV_JSON_CONNECTION */
42158
42159#ifdef FREECIV_DELTA_PROTOCOL
42160#ifdef FREECIV_JSON_CONNECTION
42161 field_addr.name = "fields";
42162#endif /* FREECIV_JSON_CONNECTION */
42163 e = 0;
42164 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42165 if (e) {
42166 log_packet_detailed("fields bitvector error detected");
42167 }
42168
42169 if (BV_ISSET(fields, 0)) {
42170 log_packet_detailed(" field 'counterpart' has changed");
42171
42172#ifdef FREECIV_JSON_CONNECTION
42173 field_addr.name = "counterpart";
42174#endif /* FREECIV_JSON_CONNECTION */
42175 e = 0;
42176
42177 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42178
42179 if (e) {
42180 log_packet_detailed("'counterpart' field error detected");
42181 }
42182 }
42183
42184 *old = *real_packet;
42185
42186#else /* FREECIV_DELTA_PROTOCOL */
42187#ifdef FREECIV_JSON_CONNECTION
42188 field_addr.name = "counterpart";
42189#endif /* FREECIV_JSON_CONNECTION */
42190 e = 0;
42191
42192 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42193
42194 if (e) {
42195 log_packet_detailed("'counterpart' field error detected");
42196 }
42197#endif /* FREECIV_DELTA_PROTOCOL */
42198
42200}
42201
42203{
42204 if (!pc->used) {
42205 log_error("WARNING: trying to send data to the closed connection %s",
42207 return -1;
42208 }
42209 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet != nullptr, -1,
42210 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY_REQ not installed");
42211 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet(pc, packet);
42212}
42213
42215{
42216 struct packet_diplomacy_accept_treaty_req packet, *real_packet = &packet;
42217
42219
42221}
42222
42224{
42225 memset(packet, 0, sizeof(*packet));
42226}
42227
42228#define free_packet_diplomacy_accept_treaty(_packet) (void) 0
42229#define destroy_packet_diplomacy_accept_treaty free
42230
42231#ifdef FREECIV_DELTA_PROTOCOL
42232#define hash_packet_diplomacy_accept_treaty_100 hash_const
42233#define cmp_packet_diplomacy_accept_treaty_100 cmp_const
42235#endif /* FREECIV_DELTA_PROTOCOL */
42236
42238{
42239#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty(_packet)
42241
42242#ifdef FREECIV_JSON_CONNECTION
42243 struct plocation field_addr;
42244 {
42245 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42248 }
42249#endif /* FREECIV_JSON_CONNECTION */
42250
42251 log_packet_detailed("packet_diplomacy_accept_treaty_100: got info about ()");
42252
42253#ifdef FREECIV_DELTA_PROTOCOL
42256 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY;
42257
42258 if (nullptr == *hash) {
42260 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42261 }
42262
42263 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42264 *real_packet = *old;
42265 } else {
42266 /* packet is already initialized empty */
42267 log_packet_detailed(" no old info");
42268 }
42269
42270#ifdef FREECIV_JSON_CONNECTION
42271 field_addr.name = "fields";
42272#endif /* FREECIV_JSON_CONNECTION */
42273 DIO_BV_GET(&din, &field_addr, fields);
42274
42275 if (BV_ISSET(fields, 0)) {
42276 log_packet_detailed(" got field 'counterpart'");
42277
42278#ifdef FREECIV_JSON_CONNECTION
42279 field_addr.name = "counterpart";
42280#endif /* FREECIV_JSON_CONNECTION */
42281
42282 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42283 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42284 }
42285 }
42286
42287 real_packet->I_accepted = BV_ISSET(fields, 1);
42288
42289 real_packet->other_accepted = BV_ISSET(fields, 2);
42290
42291 if (nullptr == old) {
42292 old = fc_malloc(sizeof(*old));
42294 *old = *real_packet;
42296 } else {
42297 *old = *real_packet;
42298 }
42299
42300#else /* FREECIV_DELTA_PROTOCOL */
42301#ifdef FREECIV_JSON_CONNECTION
42302 field_addr.name = "counterpart";
42303#endif /* FREECIV_JSON_CONNECTION */
42304
42305 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42306 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42307 }
42308
42309#ifdef FREECIV_JSON_CONNECTION
42310 field_addr.name = "I_accepted";
42311#endif /* FREECIV_JSON_CONNECTION */
42312
42313 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->I_accepted)) {
42314 RECEIVE_PACKET_FIELD_ERROR(I_accepted);
42315 }
42316
42317#ifdef FREECIV_JSON_CONNECTION
42318 field_addr.name = "other_accepted";
42319#endif /* FREECIV_JSON_CONNECTION */
42320
42321 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->other_accepted)) {
42322 RECEIVE_PACKET_FIELD_ERROR(other_accepted);
42323 }
42324#endif /* FREECIV_DELTA_PROTOCOL */
42325
42327#undef FREE_PACKET_STRUCT
42328}
42329
42331{
42332 const struct packet_diplomacy_accept_treaty *real_packet = packet;
42333 int e;
42335
42336 log_packet_detailed("packet_diplomacy_accept_treaty_100: sending info about ()");
42337
42338#ifdef FREECIV_DELTA_PROTOCOL
42341 bool differ;
42342 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY;
42343
42344 if (nullptr == *hash) {
42346 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42347 }
42348 BV_CLR_ALL(fields);
42349
42350 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42351 old = fc_malloc(sizeof(*old));
42352 /* temporary bitcopy just to insert correctly */
42353 *old = *real_packet;
42356 }
42357
42358 differ = (old->counterpart != real_packet->counterpart);
42359 if (differ) {
42360 BV_SET(fields, 0);
42361 }
42362
42363 /* folded into head */
42364 if (real_packet->I_accepted) {
42365 BV_SET(fields, 1);
42366 }
42367
42368 /* folded into head */
42369 if (real_packet->other_accepted) {
42370 BV_SET(fields, 2);
42371 }
42372#endif /* FREECIV_DELTA_PROTOCOL */
42373
42374#ifdef FREECIV_JSON_CONNECTION
42375 struct plocation field_addr;
42376 {
42377 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42380 }
42381#endif /* FREECIV_JSON_CONNECTION */
42382
42383#ifdef FREECIV_DELTA_PROTOCOL
42384#ifdef FREECIV_JSON_CONNECTION
42385 field_addr.name = "fields";
42386#endif /* FREECIV_JSON_CONNECTION */
42387 e = 0;
42388 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42389 if (e) {
42390 log_packet_detailed("fields bitvector error detected");
42391 }
42392
42393 if (BV_ISSET(fields, 0)) {
42394 log_packet_detailed(" field 'counterpart' has changed");
42395
42396#ifdef FREECIV_JSON_CONNECTION
42397 field_addr.name = "counterpart";
42398#endif /* FREECIV_JSON_CONNECTION */
42399 e = 0;
42400
42401 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42402
42403 if (e) {
42404 log_packet_detailed("'counterpart' field error detected");
42405 }
42406 }
42407
42408 /* field 1 is folded into the header */
42409
42410 /* field 2 is folded into the header */
42411
42412 *old = *real_packet;
42413
42414#else /* FREECIV_DELTA_PROTOCOL */
42415#ifdef FREECIV_JSON_CONNECTION
42416 field_addr.name = "counterpart";
42417#endif /* FREECIV_JSON_CONNECTION */
42418 e = 0;
42419
42420 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42421
42422 if (e) {
42423 log_packet_detailed("'counterpart' field error detected");
42424 }
42425
42426#ifdef FREECIV_JSON_CONNECTION
42427 field_addr.name = "I_accepted";
42428#endif /* FREECIV_JSON_CONNECTION */
42429 e = 0;
42430
42431 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->I_accepted);
42432
42433 if (e) {
42434 log_packet_detailed("'I_accepted' field error detected");
42435 }
42436
42437#ifdef FREECIV_JSON_CONNECTION
42438 field_addr.name = "other_accepted";
42439#endif /* FREECIV_JSON_CONNECTION */
42440 e = 0;
42441
42442 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->other_accepted);
42443
42444 if (e) {
42445 log_packet_detailed("'other_accepted' field error detected");
42446 }
42447#endif /* FREECIV_DELTA_PROTOCOL */
42448
42450}
42451
42453{
42454 if (!pc->used) {
42455 log_error("WARNING: trying to send data to the closed connection %s",
42457 return -1;
42458 }
42459 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet != nullptr, -1,
42460 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY not installed");
42461 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet(pc, packet);
42462}
42463
42470
42471int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
42472{
42473 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42474
42476 real_packet->I_accepted = I_accepted;
42477 real_packet->other_accepted = other_accepted;
42478
42480}
42481
42483{
42484 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42485
42487 real_packet->I_accepted = I_accepted;
42488 real_packet->other_accepted = other_accepted;
42489
42491}
42492
42494{
42495 memset(packet, 0, sizeof(*packet));
42496}
42497
42498#define free_packet_diplomacy_cancel_pact(_packet) (void) 0
42499#define destroy_packet_diplomacy_cancel_pact free
42500
42501#ifdef FREECIV_DELTA_PROTOCOL
42502#define hash_packet_diplomacy_cancel_pact_100 hash_const
42503#define cmp_packet_diplomacy_cancel_pact_100 cmp_const
42505#endif /* FREECIV_DELTA_PROTOCOL */
42506
42508{
42509#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_pact(_packet)
42511
42512#ifdef FREECIV_JSON_CONNECTION
42513 struct plocation field_addr;
42514 {
42515 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42518 }
42519#endif /* FREECIV_JSON_CONNECTION */
42520
42521 log_packet_detailed("packet_diplomacy_cancel_pact_100: got info about ()");
42522
42523#ifdef FREECIV_DELTA_PROTOCOL
42526 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_PACT;
42527
42528 if (nullptr == *hash) {
42530 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42531 }
42532
42533 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42534 *real_packet = *old;
42535 } else {
42536 /* packet is already initialized empty */
42537 log_packet_detailed(" no old info");
42538 }
42539
42540#ifdef FREECIV_JSON_CONNECTION
42541 field_addr.name = "fields";
42542#endif /* FREECIV_JSON_CONNECTION */
42543 DIO_BV_GET(&din, &field_addr, fields);
42544
42545 if (BV_ISSET(fields, 0)) {
42546 log_packet_detailed(" got field 'other_player_id'");
42547
42548#ifdef FREECIV_JSON_CONNECTION
42549 field_addr.name = "other_player_id";
42550#endif /* FREECIV_JSON_CONNECTION */
42551
42552 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42553 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42554 }
42555 }
42556
42557 if (BV_ISSET(fields, 1)) {
42558 log_packet_detailed(" got field 'clause'");
42559
42560#ifdef FREECIV_JSON_CONNECTION
42561 field_addr.name = "clause";
42562#endif /* FREECIV_JSON_CONNECTION */
42563
42564 {
42565 int readin;
42566
42567 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42569 }
42570 real_packet->clause = readin;
42571 }
42572 }
42573
42574 if (nullptr == old) {
42575 old = fc_malloc(sizeof(*old));
42577 *old = *real_packet;
42579 } else {
42580 *old = *real_packet;
42581 }
42582
42583#else /* FREECIV_DELTA_PROTOCOL */
42584#ifdef FREECIV_JSON_CONNECTION
42585 field_addr.name = "other_player_id";
42586#endif /* FREECIV_JSON_CONNECTION */
42587
42588 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42589 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42590 }
42591
42592#ifdef FREECIV_JSON_CONNECTION
42593 field_addr.name = "clause";
42594#endif /* FREECIV_JSON_CONNECTION */
42595
42596 {
42597 int readin;
42598
42599 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42601 }
42602 real_packet->clause = readin;
42603 }
42604#endif /* FREECIV_DELTA_PROTOCOL */
42605
42607#undef FREE_PACKET_STRUCT
42608}
42609
42611{
42612 const struct packet_diplomacy_cancel_pact *real_packet = packet;
42613 int e;
42615
42616 log_packet_detailed("packet_diplomacy_cancel_pact_100: sending info about ()");
42617
42618#ifdef FREECIV_DELTA_PROTOCOL
42621 bool differ;
42622 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_PACT;
42623
42624 if (nullptr == *hash) {
42626 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42627 }
42628 BV_CLR_ALL(fields);
42629
42630 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42631 old = fc_malloc(sizeof(*old));
42632 /* temporary bitcopy just to insert correctly */
42633 *old = *real_packet;
42636 }
42637
42638 differ = (old->other_player_id != real_packet->other_player_id);
42639 if (differ) {
42640 BV_SET(fields, 0);
42641 }
42642
42643 differ = (old->clause != real_packet->clause);
42644 if (differ) {
42645 BV_SET(fields, 1);
42646 }
42647#endif /* FREECIV_DELTA_PROTOCOL */
42648
42649#ifdef FREECIV_JSON_CONNECTION
42650 struct plocation field_addr;
42651 {
42652 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42655 }
42656#endif /* FREECIV_JSON_CONNECTION */
42657
42658#ifdef FREECIV_DELTA_PROTOCOL
42659#ifdef FREECIV_JSON_CONNECTION
42660 field_addr.name = "fields";
42661#endif /* FREECIV_JSON_CONNECTION */
42662 e = 0;
42663 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42664 if (e) {
42665 log_packet_detailed("fields bitvector error detected");
42666 }
42667
42668 if (BV_ISSET(fields, 0)) {
42669 log_packet_detailed(" field 'other_player_id' has changed");
42670
42671#ifdef FREECIV_JSON_CONNECTION
42672 field_addr.name = "other_player_id";
42673#endif /* FREECIV_JSON_CONNECTION */
42674 e = 0;
42675
42676 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42677
42678 if (e) {
42679 log_packet_detailed("'other_player_id' field error detected");
42680 }
42681 }
42682
42683 if (BV_ISSET(fields, 1)) {
42684 log_packet_detailed(" field 'clause' has changed");
42685
42686#ifdef FREECIV_JSON_CONNECTION
42687 field_addr.name = "clause";
42688#endif /* FREECIV_JSON_CONNECTION */
42689 e = 0;
42690
42691 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42692
42693 if (e) {
42694 log_packet_detailed("'clause' field error detected");
42695 }
42696 }
42697
42698 *old = *real_packet;
42699
42700#else /* FREECIV_DELTA_PROTOCOL */
42701#ifdef FREECIV_JSON_CONNECTION
42702 field_addr.name = "other_player_id";
42703#endif /* FREECIV_JSON_CONNECTION */
42704 e = 0;
42705
42706 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42707
42708 if (e) {
42709 log_packet_detailed("'other_player_id' field error detected");
42710 }
42711
42712#ifdef FREECIV_JSON_CONNECTION
42713 field_addr.name = "clause";
42714#endif /* FREECIV_JSON_CONNECTION */
42715 e = 0;
42716
42717 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42718
42719 if (e) {
42720 log_packet_detailed("'clause' field error detected");
42721 }
42722#endif /* FREECIV_DELTA_PROTOCOL */
42723
42725}
42726
42728{
42729 if (!pc->used) {
42730 log_error("WARNING: trying to send data to the closed connection %s",
42732 return -1;
42733 }
42734 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet != nullptr, -1,
42735 "Handler for PACKET_DIPLOMACY_CANCEL_PACT not installed");
42736 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet(pc, packet);
42737}
42738
42739int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
42740{
42741 struct packet_diplomacy_cancel_pact packet, *real_packet = &packet;
42742
42744 real_packet->clause = clause;
42745
42747}
42748
42749static inline void init_packet_page_msg(struct packet_page_msg *packet)
42750{
42751 memset(packet, 0, sizeof(*packet));
42752}
42753
42754#define free_packet_page_msg(_packet) (void) 0
42755#define destroy_packet_page_msg free
42756
42757#ifdef FREECIV_DELTA_PROTOCOL
42758#define hash_packet_page_msg_100 hash_const
42759#define cmp_packet_page_msg_100 cmp_const
42761#endif /* FREECIV_DELTA_PROTOCOL */
42762
42764{
42765#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg(_packet)
42767
42768#ifdef FREECIV_JSON_CONNECTION
42769 struct plocation field_addr;
42770 {
42771 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42774 }
42775#endif /* FREECIV_JSON_CONNECTION */
42776
42777 log_packet_detailed("packet_page_msg_100: got info about ()");
42778
42779#ifdef FREECIV_DELTA_PROTOCOL
42781 struct packet_page_msg *old;
42782 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG;
42783
42784 if (nullptr == *hash) {
42786 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42787 }
42788
42789 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42790 *real_packet = *old;
42791 } else {
42792 /* packet is already initialized empty */
42793 log_packet_detailed(" no old info");
42794 }
42795
42796#ifdef FREECIV_JSON_CONNECTION
42797 field_addr.name = "fields";
42798#endif /* FREECIV_JSON_CONNECTION */
42799 DIO_BV_GET(&din, &field_addr, fields);
42800
42801 if (BV_ISSET(fields, 0)) {
42802 log_packet_detailed(" got field 'caption'");
42803
42804#ifdef FREECIV_JSON_CONNECTION
42805 field_addr.name = "caption";
42806#endif /* FREECIV_JSON_CONNECTION */
42807
42808 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42810 }
42811 }
42812
42813 if (BV_ISSET(fields, 1)) {
42814 log_packet_detailed(" got field 'headline'");
42815
42816#ifdef FREECIV_JSON_CONNECTION
42817 field_addr.name = "headline";
42818#endif /* FREECIV_JSON_CONNECTION */
42819
42820 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42822 }
42823 }
42824
42825 if (BV_ISSET(fields, 2)) {
42826 log_packet_detailed(" got field 'event'");
42827
42828#ifdef FREECIV_JSON_CONNECTION
42829 field_addr.name = "event";
42830#endif /* FREECIV_JSON_CONNECTION */
42831
42832 {
42833 int readin;
42834
42835 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42837 }
42838 real_packet->event = readin;
42839 }
42840 }
42841
42842 if (BV_ISSET(fields, 3)) {
42843 log_packet_detailed(" got field 'len'");
42844
42845#ifdef FREECIV_JSON_CONNECTION
42846 field_addr.name = "len";
42847#endif /* FREECIV_JSON_CONNECTION */
42848
42849 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42851 }
42852 }
42853
42854 if (BV_ISSET(fields, 4)) {
42855 log_packet_detailed(" got field 'parts'");
42856
42857#ifdef FREECIV_JSON_CONNECTION
42858 field_addr.name = "parts";
42859#endif /* FREECIV_JSON_CONNECTION */
42860
42861 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42863 }
42864 }
42865
42866 if (nullptr == old) {
42867 old = fc_malloc(sizeof(*old));
42869 *old = *real_packet;
42871 } else {
42872 *old = *real_packet;
42873 }
42874
42875#else /* FREECIV_DELTA_PROTOCOL */
42876#ifdef FREECIV_JSON_CONNECTION
42877 field_addr.name = "caption";
42878#endif /* FREECIV_JSON_CONNECTION */
42879
42880 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42882 }
42883
42884#ifdef FREECIV_JSON_CONNECTION
42885 field_addr.name = "headline";
42886#endif /* FREECIV_JSON_CONNECTION */
42887
42888 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42890 }
42891
42892#ifdef FREECIV_JSON_CONNECTION
42893 field_addr.name = "event";
42894#endif /* FREECIV_JSON_CONNECTION */
42895
42896 {
42897 int readin;
42898
42899 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42901 }
42902 real_packet->event = readin;
42903 }
42904
42905#ifdef FREECIV_JSON_CONNECTION
42906 field_addr.name = "len";
42907#endif /* FREECIV_JSON_CONNECTION */
42908
42909 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42911 }
42912
42913#ifdef FREECIV_JSON_CONNECTION
42914 field_addr.name = "parts";
42915#endif /* FREECIV_JSON_CONNECTION */
42916
42917 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42919 }
42920#endif /* FREECIV_DELTA_PROTOCOL */
42921
42923#undef FREE_PACKET_STRUCT
42924}
42925
42926static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
42927{
42928 const struct packet_page_msg *real_packet = packet;
42929 int e;
42931
42932 log_packet_detailed("packet_page_msg_100: sending info about ()");
42933
42934#ifdef FREECIV_DELTA_PROTOCOL
42936 struct packet_page_msg *old;
42937 bool differ;
42938 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG;
42939
42940 if (nullptr == *hash) {
42942 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42943 }
42944 BV_CLR_ALL(fields);
42945
42946 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42947 old = fc_malloc(sizeof(*old));
42948 /* temporary bitcopy just to insert correctly */
42949 *old = *real_packet;
42952 }
42953
42954 differ = (strcmp(old->caption, real_packet->caption) != 0);
42955 if (differ) {
42956 BV_SET(fields, 0);
42957 }
42958
42959 differ = (strcmp(old->headline, real_packet->headline) != 0);
42960 if (differ) {
42961 BV_SET(fields, 1);
42962 }
42963
42964 differ = (old->event != real_packet->event);
42965 if (differ) {
42966 BV_SET(fields, 2);
42967 }
42968
42969 differ = (old->len != real_packet->len);
42970 if (differ) {
42971 BV_SET(fields, 3);
42972 }
42973
42974 differ = (old->parts != real_packet->parts);
42975 if (differ) {
42976 BV_SET(fields, 4);
42977 }
42978#endif /* FREECIV_DELTA_PROTOCOL */
42979
42980#ifdef FREECIV_JSON_CONNECTION
42981 struct plocation field_addr;
42982 {
42983 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42986 }
42987#endif /* FREECIV_JSON_CONNECTION */
42988
42989#ifdef FREECIV_DELTA_PROTOCOL
42990#ifdef FREECIV_JSON_CONNECTION
42991 field_addr.name = "fields";
42992#endif /* FREECIV_JSON_CONNECTION */
42993 e = 0;
42994 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42995 if (e) {
42996 log_packet_detailed("fields bitvector error detected");
42997 }
42998
42999 if (BV_ISSET(fields, 0)) {
43000 log_packet_detailed(" field 'caption' has changed");
43001
43002#ifdef FREECIV_JSON_CONNECTION
43003 field_addr.name = "caption";
43004#endif /* FREECIV_JSON_CONNECTION */
43005 e = 0;
43006
43007 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
43008
43009 if (e) {
43010 log_packet_detailed("'caption' field error detected");
43011 }
43012 }
43013
43014 if (BV_ISSET(fields, 1)) {
43015 log_packet_detailed(" field 'headline' has changed");
43016
43017#ifdef FREECIV_JSON_CONNECTION
43018 field_addr.name = "headline";
43019#endif /* FREECIV_JSON_CONNECTION */
43020 e = 0;
43021
43022 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
43023
43024 if (e) {
43025 log_packet_detailed("'headline' field error detected");
43026 }
43027 }
43028
43029 if (BV_ISSET(fields, 2)) {
43030 log_packet_detailed(" field 'event' has changed");
43031
43032#ifdef FREECIV_JSON_CONNECTION
43033 field_addr.name = "event";
43034#endif /* FREECIV_JSON_CONNECTION */
43035 e = 0;
43036
43037 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
43038
43039 if (e) {
43040 log_packet_detailed("'event' field error detected");
43041 }
43042 }
43043
43044 if (BV_ISSET(fields, 3)) {
43045 log_packet_detailed(" field 'len' has changed");
43046
43047#ifdef FREECIV_JSON_CONNECTION
43048 field_addr.name = "len";
43049#endif /* FREECIV_JSON_CONNECTION */
43050 e = 0;
43051
43052 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
43053
43054 if (e) {
43055 log_packet_detailed("'len' field error detected");
43056 }
43057 }
43058
43059 if (BV_ISSET(fields, 4)) {
43060 log_packet_detailed(" field 'parts' has changed");
43061
43062#ifdef FREECIV_JSON_CONNECTION
43063 field_addr.name = "parts";
43064#endif /* FREECIV_JSON_CONNECTION */
43065 e = 0;
43066
43067 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
43068
43069 if (e) {
43070 log_packet_detailed("'parts' field error detected");
43071 }
43072 }
43073
43074 *old = *real_packet;
43075
43076#else /* FREECIV_DELTA_PROTOCOL */
43077#ifdef FREECIV_JSON_CONNECTION
43078 field_addr.name = "caption";
43079#endif /* FREECIV_JSON_CONNECTION */
43080 e = 0;
43081
43082 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
43083
43084 if (e) {
43085 log_packet_detailed("'caption' field error detected");
43086 }
43087
43088#ifdef FREECIV_JSON_CONNECTION
43089 field_addr.name = "headline";
43090#endif /* FREECIV_JSON_CONNECTION */
43091 e = 0;
43092
43093 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
43094
43095 if (e) {
43096 log_packet_detailed("'headline' field error detected");
43097 }
43098
43099#ifdef FREECIV_JSON_CONNECTION
43100 field_addr.name = "event";
43101#endif /* FREECIV_JSON_CONNECTION */
43102 e = 0;
43103
43104 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
43105
43106 if (e) {
43107 log_packet_detailed("'event' field error detected");
43108 }
43109
43110#ifdef FREECIV_JSON_CONNECTION
43111 field_addr.name = "len";
43112#endif /* FREECIV_JSON_CONNECTION */
43113 e = 0;
43114
43115 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
43116
43117 if (e) {
43118 log_packet_detailed("'len' field error detected");
43119 }
43120
43121#ifdef FREECIV_JSON_CONNECTION
43122 field_addr.name = "parts";
43123#endif /* FREECIV_JSON_CONNECTION */
43124 e = 0;
43125
43126 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
43127
43128 if (e) {
43129 log_packet_detailed("'parts' field error detected");
43130 }
43131#endif /* FREECIV_DELTA_PROTOCOL */
43132
43134}
43135
43136int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
43137{
43138 if (!pc->used) {
43139 log_error("WARNING: trying to send data to the closed connection %s",
43141 return -1;
43142 }
43143 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG].packet != nullptr, -1,
43144 "Handler for PACKET_PAGE_MSG not installed");
43145 return pc->phs.handlers->send[PACKET_PAGE_MSG].packet(pc, packet);
43146}
43147
43148void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
43149{
43150 conn_list_iterate(dest, pconn) {
43151 send_packet_page_msg(pconn, packet);
43153}
43154
43155static inline void init_packet_page_msg_part(struct packet_page_msg_part *packet)
43156{
43157 memset(packet, 0, sizeof(*packet));
43158}
43159
43160#define free_packet_page_msg_part(_packet) (void) 0
43161#define destroy_packet_page_msg_part free
43162
43163#ifdef FREECIV_DELTA_PROTOCOL
43164#define hash_packet_page_msg_part_100 hash_const
43165#define cmp_packet_page_msg_part_100 cmp_const
43167#endif /* FREECIV_DELTA_PROTOCOL */
43168
43170{
43171#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg_part(_packet)
43173
43174#ifdef FREECIV_JSON_CONNECTION
43175 struct plocation field_addr;
43176 {
43177 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43180 }
43181#endif /* FREECIV_JSON_CONNECTION */
43182
43183 log_packet_detailed("packet_page_msg_part_100: got info about ()");
43184
43185#ifdef FREECIV_DELTA_PROTOCOL
43187 struct packet_page_msg_part *old;
43188 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG_PART;
43189
43190 if (nullptr == *hash) {
43192 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43193 }
43194
43195 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43196 *real_packet = *old;
43197 } else {
43198 /* packet is already initialized empty */
43199 log_packet_detailed(" no old info");
43200 }
43201
43202#ifdef FREECIV_JSON_CONNECTION
43203 field_addr.name = "fields";
43204#endif /* FREECIV_JSON_CONNECTION */
43205 DIO_BV_GET(&din, &field_addr, fields);
43206
43207 if (BV_ISSET(fields, 0)) {
43208 log_packet_detailed(" got field 'lines'");
43209
43210#ifdef FREECIV_JSON_CONNECTION
43211 field_addr.name = "lines";
43212#endif /* FREECIV_JSON_CONNECTION */
43213
43214 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43216 }
43217 }
43218
43219 if (nullptr == old) {
43220 old = fc_malloc(sizeof(*old));
43222 *old = *real_packet;
43224 } else {
43225 *old = *real_packet;
43226 }
43227
43228#else /* FREECIV_DELTA_PROTOCOL */
43229#ifdef FREECIV_JSON_CONNECTION
43230 field_addr.name = "lines";
43231#endif /* FREECIV_JSON_CONNECTION */
43232
43233 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43235 }
43236#endif /* FREECIV_DELTA_PROTOCOL */
43237
43239#undef FREE_PACKET_STRUCT
43240}
43241
43242static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
43243{
43244 const struct packet_page_msg_part *real_packet = packet;
43245 int e;
43247
43248 log_packet_detailed("packet_page_msg_part_100: sending info about ()");
43249
43250#ifdef FREECIV_DELTA_PROTOCOL
43252 struct packet_page_msg_part *old;
43253 bool differ;
43254 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG_PART;
43255
43256 if (nullptr == *hash) {
43258 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43259 }
43260 BV_CLR_ALL(fields);
43261
43262 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43263 old = fc_malloc(sizeof(*old));
43264 /* temporary bitcopy just to insert correctly */
43265 *old = *real_packet;
43268 }
43269
43270 differ = (strcmp(old->lines, real_packet->lines) != 0);
43271 if (differ) {
43272 BV_SET(fields, 0);
43273 }
43274#endif /* FREECIV_DELTA_PROTOCOL */
43275
43276#ifdef FREECIV_JSON_CONNECTION
43277 struct plocation field_addr;
43278 {
43279 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43282 }
43283#endif /* FREECIV_JSON_CONNECTION */
43284
43285#ifdef FREECIV_DELTA_PROTOCOL
43286#ifdef FREECIV_JSON_CONNECTION
43287 field_addr.name = "fields";
43288#endif /* FREECIV_JSON_CONNECTION */
43289 e = 0;
43290 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43291 if (e) {
43292 log_packet_detailed("fields bitvector error detected");
43293 }
43294
43295 if (BV_ISSET(fields, 0)) {
43296 log_packet_detailed(" field 'lines' has changed");
43297
43298#ifdef FREECIV_JSON_CONNECTION
43299 field_addr.name = "lines";
43300#endif /* FREECIV_JSON_CONNECTION */
43301 e = 0;
43302
43303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43304
43305 if (e) {
43306 log_packet_detailed("'lines' field error detected");
43307 }
43308 }
43309
43310 *old = *real_packet;
43311
43312#else /* FREECIV_DELTA_PROTOCOL */
43313#ifdef FREECIV_JSON_CONNECTION
43314 field_addr.name = "lines";
43315#endif /* FREECIV_JSON_CONNECTION */
43316 e = 0;
43317
43318 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43319
43320 if (e) {
43321 log_packet_detailed("'lines' field error detected");
43322 }
43323#endif /* FREECIV_DELTA_PROTOCOL */
43324
43326}
43327
43329{
43330 if (!pc->used) {
43331 log_error("WARNING: trying to send data to the closed connection %s",
43333 return -1;
43334 }
43335 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet != nullptr, -1,
43336 "Handler for PACKET_PAGE_MSG_PART not installed");
43337 return pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet(pc, packet);
43338}
43339
43340void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
43341{
43342 conn_list_iterate(dest, pconn) {
43345}
43346
43347static inline void init_packet_report_req(struct packet_report_req *packet)
43348{
43349 memset(packet, 0, sizeof(*packet));
43350}
43351
43352#define free_packet_report_req(_packet) (void) 0
43353#define destroy_packet_report_req free
43354
43355#ifdef FREECIV_DELTA_PROTOCOL
43356#define hash_packet_report_req_100 hash_const
43357#define cmp_packet_report_req_100 cmp_const
43359#endif /* FREECIV_DELTA_PROTOCOL */
43360
43362{
43363#define FREE_PACKET_STRUCT(_packet) free_packet_report_req(_packet)
43365
43366#ifdef FREECIV_JSON_CONNECTION
43367 struct plocation field_addr;
43368 {
43369 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43372 }
43373#endif /* FREECIV_JSON_CONNECTION */
43374
43375 log_packet_detailed("packet_report_req_100: got info about ()");
43376
43377#ifdef FREECIV_DELTA_PROTOCOL
43379 struct packet_report_req *old;
43380 struct genhash **hash = pc->phs.received + PACKET_REPORT_REQ;
43381
43382 if (nullptr == *hash) {
43384 nullptr, nullptr, nullptr, destroy_packet_report_req);
43385 }
43386
43387 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43388 *real_packet = *old;
43389 } else {
43390 /* packet is already initialized empty */
43391 log_packet_detailed(" no old info");
43392 }
43393
43394#ifdef FREECIV_JSON_CONNECTION
43395 field_addr.name = "fields";
43396#endif /* FREECIV_JSON_CONNECTION */
43397 DIO_BV_GET(&din, &field_addr, fields);
43398
43399 if (BV_ISSET(fields, 0)) {
43400 log_packet_detailed(" got field 'type'");
43401
43402#ifdef FREECIV_JSON_CONNECTION
43403 field_addr.name = "type";
43404#endif /* FREECIV_JSON_CONNECTION */
43405
43406 {
43407 int readin;
43408
43409 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43411 }
43412 real_packet->type = readin;
43413 }
43414 }
43415
43416 if (nullptr == old) {
43417 old = fc_malloc(sizeof(*old));
43419 *old = *real_packet;
43421 } else {
43422 *old = *real_packet;
43423 }
43424
43425#else /* FREECIV_DELTA_PROTOCOL */
43426#ifdef FREECIV_JSON_CONNECTION
43427 field_addr.name = "type";
43428#endif /* FREECIV_JSON_CONNECTION */
43429
43430 {
43431 int readin;
43432
43433 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43435 }
43436 real_packet->type = readin;
43437 }
43438#endif /* FREECIV_DELTA_PROTOCOL */
43439
43441#undef FREE_PACKET_STRUCT
43442}
43443
43444static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
43445{
43446 const struct packet_report_req *real_packet = packet;
43447 int e;
43449
43450 log_packet_detailed("packet_report_req_100: sending info about ()");
43451
43452#ifdef FREECIV_DELTA_PROTOCOL
43454 struct packet_report_req *old;
43455 bool differ;
43456 struct genhash **hash = pc->phs.sent + PACKET_REPORT_REQ;
43457
43458 if (nullptr == *hash) {
43460 nullptr, nullptr, nullptr, destroy_packet_report_req);
43461 }
43462 BV_CLR_ALL(fields);
43463
43464 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43465 old = fc_malloc(sizeof(*old));
43466 /* temporary bitcopy just to insert correctly */
43467 *old = *real_packet;
43470 }
43471
43472 differ = (old->type != real_packet->type);
43473 if (differ) {
43474 BV_SET(fields, 0);
43475 }
43476#endif /* FREECIV_DELTA_PROTOCOL */
43477
43478#ifdef FREECIV_JSON_CONNECTION
43479 struct plocation field_addr;
43480 {
43481 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43484 }
43485#endif /* FREECIV_JSON_CONNECTION */
43486
43487#ifdef FREECIV_DELTA_PROTOCOL
43488#ifdef FREECIV_JSON_CONNECTION
43489 field_addr.name = "fields";
43490#endif /* FREECIV_JSON_CONNECTION */
43491 e = 0;
43492 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43493 if (e) {
43494 log_packet_detailed("fields bitvector error detected");
43495 }
43496
43497 if (BV_ISSET(fields, 0)) {
43498 log_packet_detailed(" field 'type' has changed");
43499
43500#ifdef FREECIV_JSON_CONNECTION
43501 field_addr.name = "type";
43502#endif /* FREECIV_JSON_CONNECTION */
43503 e = 0;
43504
43505 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43506
43507 if (e) {
43508 log_packet_detailed("'type' field error detected");
43509 }
43510 }
43511
43512 *old = *real_packet;
43513
43514#else /* FREECIV_DELTA_PROTOCOL */
43515#ifdef FREECIV_JSON_CONNECTION
43516 field_addr.name = "type";
43517#endif /* FREECIV_JSON_CONNECTION */
43518 e = 0;
43519
43520 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43521
43522 if (e) {
43523 log_packet_detailed("'type' field error detected");
43524 }
43525#endif /* FREECIV_DELTA_PROTOCOL */
43526
43528}
43529
43530int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
43531{
43532 if (!pc->used) {
43533 log_error("WARNING: trying to send data to the closed connection %s",
43535 return -1;
43536 }
43537 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_REPORT_REQ].packet != nullptr, -1,
43538 "Handler for PACKET_REPORT_REQ not installed");
43539 return pc->phs.handlers->send[PACKET_REPORT_REQ].packet(pc, packet);
43540}
43541
43543{
43544 struct packet_report_req packet, *real_packet = &packet;
43545
43547
43549}
43550
43551static inline void init_packet_conn_info(struct packet_conn_info *packet)
43552{
43553 memset(packet, 0, sizeof(*packet));
43554}
43555
43556#define free_packet_conn_info(_packet) (void) 0
43557#define destroy_packet_conn_info free
43558
43559#ifdef FREECIV_DELTA_PROTOCOL
43561{
43562 const struct packet_conn_info *key = (const struct packet_conn_info *) vkey;
43563 genhash_val_t result = 0;
43564
43565 result += key->id;
43566
43567 result &= 0xFFFFFFFF;
43568 return result;
43569}
43570
43571static bool cmp_packet_conn_info_100(const void *vkey1, const void *vkey2)
43572{
43573 const struct packet_conn_info *old = (const struct packet_conn_info *) vkey1;
43574 const struct packet_conn_info *real_packet = (const struct packet_conn_info *) vkey2;
43575 bool differ;
43576
43577 differ = (old->id != real_packet->id);
43578
43579 return !differ;
43580}
43582#endif /* FREECIV_DELTA_PROTOCOL */
43583
43585{
43586#define FREE_PACKET_STRUCT(_packet) free_packet_conn_info(_packet)
43588
43589#ifdef FREECIV_JSON_CONNECTION
43590 struct plocation field_addr;
43591 {
43592 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43595 }
43596#endif /* FREECIV_JSON_CONNECTION */
43597
43598#ifdef FREECIV_JSON_CONNECTION
43599 field_addr.name = "id";
43600#endif /* FREECIV_JSON_CONNECTION */
43601
43602 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
43604 }
43605
43606 log_packet_detailed("packet_conn_info_100: got info about (%d)",
43607 real_packet->id);
43608
43609#ifdef FREECIV_DELTA_PROTOCOL
43611 struct packet_conn_info *old;
43612 struct genhash **hash = pc->phs.received + PACKET_CONN_INFO;
43613
43614 if (nullptr == *hash) {
43616 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43617 }
43618
43619 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43620 *real_packet = *old;
43621 } else {
43622 /* packet is already initialized empty */
43623 log_packet_detailed(" no old info");
43624 }
43625
43626#ifdef FREECIV_JSON_CONNECTION
43627 field_addr.name = "fields";
43628#endif /* FREECIV_JSON_CONNECTION */
43629 DIO_BV_GET(&din, &field_addr, fields);
43630
43631 real_packet->used = BV_ISSET(fields, 0);
43632
43633 real_packet->established = BV_ISSET(fields, 1);
43634
43635 real_packet->observer = BV_ISSET(fields, 2);
43636
43637 if (BV_ISSET(fields, 3)) {
43638 log_packet_detailed(" got field 'player_num'");
43639
43640#ifdef FREECIV_JSON_CONNECTION
43641 field_addr.name = "player_num";
43642#endif /* FREECIV_JSON_CONNECTION */
43643
43644 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43645 RECEIVE_PACKET_FIELD_ERROR(player_num);
43646 }
43647 }
43648
43649 if (BV_ISSET(fields, 4)) {
43650 log_packet_detailed(" got field 'access_level'");
43651
43652#ifdef FREECIV_JSON_CONNECTION
43653 field_addr.name = "access_level";
43654#endif /* FREECIV_JSON_CONNECTION */
43655
43656 {
43657 int readin;
43658
43659 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43660 RECEIVE_PACKET_FIELD_ERROR(access_level);
43661 }
43662 real_packet->access_level = readin;
43663 }
43664 }
43665
43666 if (BV_ISSET(fields, 5)) {
43667 log_packet_detailed(" got field 'username'");
43668
43669#ifdef FREECIV_JSON_CONNECTION
43670 field_addr.name = "username";
43671#endif /* FREECIV_JSON_CONNECTION */
43672
43673 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43675 }
43676 }
43677
43678 if (BV_ISSET(fields, 6)) {
43679 log_packet_detailed(" got field 'addr'");
43680
43681#ifdef FREECIV_JSON_CONNECTION
43682 field_addr.name = "addr";
43683#endif /* FREECIV_JSON_CONNECTION */
43684
43685 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43687 }
43688 }
43689
43690 if (BV_ISSET(fields, 7)) {
43691 log_packet_detailed(" got field 'capability'");
43692
43693#ifdef FREECIV_JSON_CONNECTION
43694 field_addr.name = "capability";
43695#endif /* FREECIV_JSON_CONNECTION */
43696
43697 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43698 RECEIVE_PACKET_FIELD_ERROR(capability);
43699 }
43700 }
43701
43702 if (nullptr == old) {
43703 old = fc_malloc(sizeof(*old));
43705 *old = *real_packet;
43707 } else {
43708 *old = *real_packet;
43709 }
43710
43711#else /* FREECIV_DELTA_PROTOCOL */
43712#ifdef FREECIV_JSON_CONNECTION
43713 field_addr.name = "used";
43714#endif /* FREECIV_JSON_CONNECTION */
43715
43716 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->used)) {
43718 }
43719
43720#ifdef FREECIV_JSON_CONNECTION
43721 field_addr.name = "established";
43722#endif /* FREECIV_JSON_CONNECTION */
43723
43724 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->established)) {
43725 RECEIVE_PACKET_FIELD_ERROR(established);
43726 }
43727
43728#ifdef FREECIV_JSON_CONNECTION
43729 field_addr.name = "observer";
43730#endif /* FREECIV_JSON_CONNECTION */
43731
43732 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->observer)) {
43734 }
43735
43736#ifdef FREECIV_JSON_CONNECTION
43737 field_addr.name = "player_num";
43738#endif /* FREECIV_JSON_CONNECTION */
43739
43740 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43741 RECEIVE_PACKET_FIELD_ERROR(player_num);
43742 }
43743
43744#ifdef FREECIV_JSON_CONNECTION
43745 field_addr.name = "access_level";
43746#endif /* FREECIV_JSON_CONNECTION */
43747
43748 {
43749 int readin;
43750
43751 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43752 RECEIVE_PACKET_FIELD_ERROR(access_level);
43753 }
43754 real_packet->access_level = readin;
43755 }
43756
43757#ifdef FREECIV_JSON_CONNECTION
43758 field_addr.name = "username";
43759#endif /* FREECIV_JSON_CONNECTION */
43760
43761 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43763 }
43764
43765#ifdef FREECIV_JSON_CONNECTION
43766 field_addr.name = "addr";
43767#endif /* FREECIV_JSON_CONNECTION */
43768
43769 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43771 }
43772
43773#ifdef FREECIV_JSON_CONNECTION
43774 field_addr.name = "capability";
43775#endif /* FREECIV_JSON_CONNECTION */
43776
43777 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43778 RECEIVE_PACKET_FIELD_ERROR(capability);
43779 }
43780#endif /* FREECIV_DELTA_PROTOCOL */
43781
43783#undef FREE_PACKET_STRUCT
43784}
43785
43786static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
43787{
43788 const struct packet_conn_info *real_packet = packet;
43789 int e;
43791
43792 log_packet_detailed("packet_conn_info_100: sending info about (%d)",
43793 real_packet->id);
43794
43795#ifdef FREECIV_DELTA_PROTOCOL
43797 struct packet_conn_info *old;
43798 bool differ;
43799 int different = 0;
43800 struct genhash **hash = pc->phs.sent + PACKET_CONN_INFO;
43801
43802 if (nullptr == *hash) {
43804 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43805 }
43806 BV_CLR_ALL(fields);
43807
43808 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43809 old = fc_malloc(sizeof(*old));
43810 /* temporary bitcopy just to insert correctly */
43811 *old = *real_packet;
43814 different = 1; /* Force to send. */
43815 }
43816
43817 differ = (old->used != real_packet->used);
43818 if (differ) {
43819 different++;
43820 }
43821 /* folded into head */
43822 if (real_packet->used) {
43823 BV_SET(fields, 0);
43824 }
43825
43826 differ = (old->established != real_packet->established);
43827 if (differ) {
43828 different++;
43829 }
43830 /* folded into head */
43831 if (real_packet->established) {
43832 BV_SET(fields, 1);
43833 }
43834
43835 differ = (old->observer != real_packet->observer);
43836 if (differ) {
43837 different++;
43838 }
43839 /* folded into head */
43840 if (real_packet->observer) {
43841 BV_SET(fields, 2);
43842 }
43843
43844 differ = (old->player_num != real_packet->player_num);
43845 if (differ) {
43846 different++;
43847 BV_SET(fields, 3);
43848 }
43849
43850 differ = (old->access_level != real_packet->access_level);
43851 if (differ) {
43852 different++;
43853 BV_SET(fields, 4);
43854 }
43855
43856 differ = (strcmp(old->username, real_packet->username) != 0);
43857 if (differ) {
43858 different++;
43859 BV_SET(fields, 5);
43860 }
43861
43862 differ = (strcmp(old->addr, real_packet->addr) != 0);
43863 if (differ) {
43864 different++;
43865 BV_SET(fields, 6);
43866 }
43867
43868 differ = (strcmp(old->capability, real_packet->capability) != 0);
43869 if (differ) {
43870 different++;
43871 BV_SET(fields, 7);
43872 }
43873
43874 if (different == 0) {
43875 log_packet_detailed(" no change -> discard");
43877 }
43878#endif /* FREECIV_DELTA_PROTOCOL */
43879
43880#ifdef FREECIV_JSON_CONNECTION
43881 struct plocation field_addr;
43882 {
43883 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43886 }
43887#endif /* FREECIV_JSON_CONNECTION */
43888
43889#ifdef FREECIV_JSON_CONNECTION
43890 field_addr.name = "id";
43891#endif /* FREECIV_JSON_CONNECTION */
43892 e = 0;
43893
43894 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
43895
43896 if (e) {
43897 log_packet_detailed("'id' field error detected");
43898 }
43899
43900#ifdef FREECIV_DELTA_PROTOCOL
43901#ifdef FREECIV_JSON_CONNECTION
43902 field_addr.name = "fields";
43903#endif /* FREECIV_JSON_CONNECTION */
43904 e = 0;
43905 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43906 if (e) {
43907 log_packet_detailed("fields bitvector error detected");
43908 }
43909
43910 /* field 0 is folded into the header */
43911
43912 /* field 1 is folded into the header */
43913
43914 /* field 2 is folded into the header */
43915
43916 if (BV_ISSET(fields, 3)) {
43917 log_packet_detailed(" field 'player_num' has changed");
43918
43919#ifdef FREECIV_JSON_CONNECTION
43920 field_addr.name = "player_num";
43921#endif /* FREECIV_JSON_CONNECTION */
43922 e = 0;
43923
43924 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
43925
43926 if (e) {
43927 log_packet_detailed("'player_num' field error detected");
43928 }
43929 }
43930
43931 if (BV_ISSET(fields, 4)) {
43932 log_packet_detailed(" field 'access_level' has changed");
43933
43934#ifdef FREECIV_JSON_CONNECTION
43935 field_addr.name = "access_level";
43936#endif /* FREECIV_JSON_CONNECTION */
43937 e = 0;
43938
43939 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
43940
43941 if (e) {
43942 log_packet_detailed("'access_level' field error detected");
43943 }
43944 }
43945
43946 if (BV_ISSET(fields, 5)) {
43947 log_packet_detailed(" field 'username' has changed");
43948
43949#ifdef FREECIV_JSON_CONNECTION
43950 field_addr.name = "username";
43951#endif /* FREECIV_JSON_CONNECTION */
43952 e = 0;
43953
43954 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43955
43956 if (e) {
43957 log_packet_detailed("'username' field error detected");
43958 }
43959 }
43960
43961 if (BV_ISSET(fields, 6)) {
43962 log_packet_detailed(" field 'addr' has changed");
43963
43964#ifdef FREECIV_JSON_CONNECTION
43965 field_addr.name = "addr";
43966#endif /* FREECIV_JSON_CONNECTION */
43967 e = 0;
43968
43969 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
43970
43971 if (e) {
43972 log_packet_detailed("'addr' field error detected");
43973 }
43974 }
43975
43976 if (BV_ISSET(fields, 7)) {
43977 log_packet_detailed(" field 'capability' has changed");
43978
43979#ifdef FREECIV_JSON_CONNECTION
43980 field_addr.name = "capability";
43981#endif /* FREECIV_JSON_CONNECTION */
43982 e = 0;
43983
43984 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
43985
43986 if (e) {
43987 log_packet_detailed("'capability' field error detected");
43988 }
43989 }
43990
43991 *old = *real_packet;
43992
43993#else /* FREECIV_DELTA_PROTOCOL */
43994#ifdef FREECIV_JSON_CONNECTION
43995 field_addr.name = "used";
43996#endif /* FREECIV_JSON_CONNECTION */
43997 e = 0;
43998
43999 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->used);
44000
44001 if (e) {
44002 log_packet_detailed("'used' field error detected");
44003 }
44004
44005#ifdef FREECIV_JSON_CONNECTION
44006 field_addr.name = "established";
44007#endif /* FREECIV_JSON_CONNECTION */
44008 e = 0;
44009
44010 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->established);
44011
44012 if (e) {
44013 log_packet_detailed("'established' field error detected");
44014 }
44015
44016#ifdef FREECIV_JSON_CONNECTION
44017 field_addr.name = "observer";
44018#endif /* FREECIV_JSON_CONNECTION */
44019 e = 0;
44020
44021 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->observer);
44022
44023 if (e) {
44024 log_packet_detailed("'observer' field error detected");
44025 }
44026
44027#ifdef FREECIV_JSON_CONNECTION
44028 field_addr.name = "player_num";
44029#endif /* FREECIV_JSON_CONNECTION */
44030 e = 0;
44031
44032 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
44033
44034 if (e) {
44035 log_packet_detailed("'player_num' field error detected");
44036 }
44037
44038#ifdef FREECIV_JSON_CONNECTION
44039 field_addr.name = "access_level";
44040#endif /* FREECIV_JSON_CONNECTION */
44041 e = 0;
44042
44043 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
44044
44045 if (e) {
44046 log_packet_detailed("'access_level' field error detected");
44047 }
44048
44049#ifdef FREECIV_JSON_CONNECTION
44050 field_addr.name = "username";
44051#endif /* FREECIV_JSON_CONNECTION */
44052 e = 0;
44053
44054 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
44055
44056 if (e) {
44057 log_packet_detailed("'username' field error detected");
44058 }
44059
44060#ifdef FREECIV_JSON_CONNECTION
44061 field_addr.name = "addr";
44062#endif /* FREECIV_JSON_CONNECTION */
44063 e = 0;
44064
44065 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
44066
44067 if (e) {
44068 log_packet_detailed("'addr' field error detected");
44069 }
44070
44071#ifdef FREECIV_JSON_CONNECTION
44072 field_addr.name = "capability";
44073#endif /* FREECIV_JSON_CONNECTION */
44074 e = 0;
44075
44076 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
44077
44078 if (e) {
44079 log_packet_detailed("'capability' field error detected");
44080 }
44081#endif /* FREECIV_DELTA_PROTOCOL */
44082
44084}
44085
44086int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
44087{
44088 if (!pc->used) {
44089 log_error("WARNING: trying to send data to the closed connection %s",
44091 return -1;
44092 }
44093 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_INFO].packet != nullptr, -1,
44094 "Handler for PACKET_CONN_INFO not installed");
44095 return pc->phs.handlers->send[PACKET_CONN_INFO].packet(pc, packet);
44096}
44097
44098void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
44099{
44100 conn_list_iterate(dest, pconn) {
44103}
44104
44105static inline void init_packet_conn_ping_info(struct packet_conn_ping_info *packet)
44106{
44107 memset(packet, 0, sizeof(*packet));
44108}
44109
44110#define free_packet_conn_ping_info(_packet) (void) 0
44111#define destroy_packet_conn_ping_info free
44112
44113#ifdef FREECIV_DELTA_PROTOCOL
44114#define hash_packet_conn_ping_info_100 hash_const
44115#define cmp_packet_conn_ping_info_100 cmp_const
44117#endif /* FREECIV_DELTA_PROTOCOL */
44118
44120{
44121#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping_info(_packet)
44123
44124#ifdef FREECIV_JSON_CONNECTION
44125 struct plocation field_addr;
44126 {
44127 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44130 }
44131#endif /* FREECIV_JSON_CONNECTION */
44132
44133 log_packet_detailed("packet_conn_ping_info_100: got info about ()");
44134
44135#ifdef FREECIV_DELTA_PROTOCOL
44137 struct packet_conn_ping_info *old;
44138 struct genhash **hash = pc->phs.received + PACKET_CONN_PING_INFO;
44139
44140 if (nullptr == *hash) {
44142 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44143 }
44144
44145 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44146 *real_packet = *old;
44147 } else {
44148 /* packet is already initialized empty */
44149 log_packet_detailed(" no old info");
44150 }
44151
44152#ifdef FREECIV_JSON_CONNECTION
44153 field_addr.name = "fields";
44154#endif /* FREECIV_JSON_CONNECTION */
44155 DIO_BV_GET(&din, &field_addr, fields);
44156
44157 if (BV_ISSET(fields, 0)) {
44158 log_packet_detailed(" got field 'connections'");
44159
44160#ifdef FREECIV_JSON_CONNECTION
44161 field_addr.name = "connections";
44162#endif /* FREECIV_JSON_CONNECTION */
44163
44164 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44166 }
44167 }
44168
44169 if (BV_ISSET(fields, 1)) {
44170 log_packet_detailed(" got field 'conn_id'");
44171
44172#ifdef FREECIV_JSON_CONNECTION
44173 field_addr.name = "conn_id";
44174#endif /* FREECIV_JSON_CONNECTION */
44175
44176 {
44177 int i;
44178
44179 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44180 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44181 }
44182
44183#ifdef FREECIV_JSON_CONNECTION
44184 /* Enter array. */
44185 field_addr.sub_location = plocation_elem_new(0);
44186#endif /* FREECIV_JSON_CONNECTION */
44187
44188 for (i = 0; i < real_packet->connections; i++) {
44189#ifdef FREECIV_JSON_CONNECTION
44190 /* Next array element */
44191 field_addr.sub_location->number = i;
44192#endif /* FREECIV_JSON_CONNECTION */
44193
44194 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44196 }
44197 }
44198
44199#ifdef FREECIV_JSON_CONNECTION
44200 /* Exit array. */
44201 FC_FREE(field_addr.sub_location);
44202#endif /* FREECIV_JSON_CONNECTION */
44203 }
44204 }
44205
44206 if (BV_ISSET(fields, 2)) {
44207 log_packet_detailed(" got field 'ping_time'");
44208
44209#ifdef FREECIV_JSON_CONNECTION
44210 field_addr.name = "ping_time";
44211#endif /* FREECIV_JSON_CONNECTION */
44212
44213 {
44214 int i;
44215
44216 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44217 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44218 }
44219
44220#ifdef FREECIV_JSON_CONNECTION
44221 /* Enter array. */
44222 field_addr.sub_location = plocation_elem_new(0);
44223#endif /* FREECIV_JSON_CONNECTION */
44224
44225 for (i = 0; i < real_packet->connections; i++) {
44226#ifdef FREECIV_JSON_CONNECTION
44227 /* Next array element */
44228 field_addr.sub_location->number = i;
44229#endif /* FREECIV_JSON_CONNECTION */
44230
44231 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44232 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44233 }
44234 }
44235
44236#ifdef FREECIV_JSON_CONNECTION
44237 /* Exit array. */
44238 FC_FREE(field_addr.sub_location);
44239#endif /* FREECIV_JSON_CONNECTION */
44240 }
44241 }
44242
44243 if (nullptr == old) {
44244 old = fc_malloc(sizeof(*old));
44246 *old = *real_packet;
44248 } else {
44249 *old = *real_packet;
44250 }
44251
44252#else /* FREECIV_DELTA_PROTOCOL */
44253#ifdef FREECIV_JSON_CONNECTION
44254 field_addr.name = "connections";
44255#endif /* FREECIV_JSON_CONNECTION */
44256
44257 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44259 }
44260
44261#ifdef FREECIV_JSON_CONNECTION
44262 field_addr.name = "conn_id";
44263#endif /* FREECIV_JSON_CONNECTION */
44264
44265 {
44266 int i;
44267
44268 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44269 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44270 }
44271
44272#ifdef FREECIV_JSON_CONNECTION
44273 /* Enter array. */
44274 field_addr.sub_location = plocation_elem_new(0);
44275#endif /* FREECIV_JSON_CONNECTION */
44276
44277 for (i = 0; i < real_packet->connections; i++) {
44278#ifdef FREECIV_JSON_CONNECTION
44279 /* Next array element */
44280 field_addr.sub_location->number = i;
44281#endif /* FREECIV_JSON_CONNECTION */
44282
44283 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44285 }
44286 }
44287
44288#ifdef FREECIV_JSON_CONNECTION
44289 /* Exit array. */
44290 FC_FREE(field_addr.sub_location);
44291#endif /* FREECIV_JSON_CONNECTION */
44292 }
44293
44294#ifdef FREECIV_JSON_CONNECTION
44295 field_addr.name = "ping_time";
44296#endif /* FREECIV_JSON_CONNECTION */
44297
44298 {
44299 int i;
44300
44301 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44302 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44303 }
44304
44305#ifdef FREECIV_JSON_CONNECTION
44306 /* Enter array. */
44307 field_addr.sub_location = plocation_elem_new(0);
44308#endif /* FREECIV_JSON_CONNECTION */
44309
44310 for (i = 0; i < real_packet->connections; i++) {
44311#ifdef FREECIV_JSON_CONNECTION
44312 /* Next array element */
44313 field_addr.sub_location->number = i;
44314#endif /* FREECIV_JSON_CONNECTION */
44315
44316 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44317 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44318 }
44319 }
44320
44321#ifdef FREECIV_JSON_CONNECTION
44322 /* Exit array. */
44323 FC_FREE(field_addr.sub_location);
44324#endif /* FREECIV_JSON_CONNECTION */
44325 }
44326#endif /* FREECIV_DELTA_PROTOCOL */
44327
44329#undef FREE_PACKET_STRUCT
44330}
44331
44333{
44334 const struct packet_conn_ping_info *real_packet = packet;
44335 int e;
44337
44338 log_packet_detailed("packet_conn_ping_info_100: sending info about ()");
44339
44340#ifdef FREECIV_DELTA_PROTOCOL
44342 struct packet_conn_ping_info *old;
44343 bool differ;
44344 struct genhash **hash = pc->phs.sent + PACKET_CONN_PING_INFO;
44345
44346 if (nullptr == *hash) {
44348 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44349 }
44350 BV_CLR_ALL(fields);
44351
44352 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44353 old = fc_malloc(sizeof(*old));
44354 /* temporary bitcopy just to insert correctly */
44355 *old = *real_packet;
44358 }
44359
44360 differ = (old->connections != real_packet->connections);
44361 if (differ) {
44362 BV_SET(fields, 0);
44363 }
44364
44365 differ = (old->connections != real_packet->connections);
44366 if (!differ) {
44367 int i;
44368
44369 for (i = 0; i < old->connections; i++) {
44370 differ = (old->conn_id[i] != real_packet->conn_id[i]);
44371 if (differ) {
44372 break;
44373 }
44374 }
44375 }
44376 if (differ) {
44377 BV_SET(fields, 1);
44378 }
44379
44380 differ = (old->connections != real_packet->connections);
44381 if (!differ) {
44382 int i;
44383
44384 for (i = 0; i < old->connections; i++) {
44385 differ = ((int) (old->ping_time[i] * 100000) != (int) (real_packet->ping_time[i] * 100000));
44386 if (differ) {
44387 break;
44388 }
44389 }
44390 }
44391 if (differ) {
44392 BV_SET(fields, 2);
44393 }
44394#endif /* FREECIV_DELTA_PROTOCOL */
44395
44396#ifdef FREECIV_JSON_CONNECTION
44397 struct plocation field_addr;
44398 {
44399 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44402 }
44403#endif /* FREECIV_JSON_CONNECTION */
44404
44405#ifdef FREECIV_DELTA_PROTOCOL
44406#ifdef FREECIV_JSON_CONNECTION
44407 field_addr.name = "fields";
44408#endif /* FREECIV_JSON_CONNECTION */
44409 e = 0;
44410 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44411 if (e) {
44412 log_packet_detailed("fields bitvector error detected");
44413 }
44414
44415 if (BV_ISSET(fields, 0)) {
44416 log_packet_detailed(" field 'connections' has changed");
44417
44418#ifdef FREECIV_JSON_CONNECTION
44419 field_addr.name = "connections";
44420#endif /* FREECIV_JSON_CONNECTION */
44421 e = 0;
44422
44423 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44424
44425 if (e) {
44426 log_packet_detailed("'connections' field error detected");
44427 }
44428 }
44429
44430 if (BV_ISSET(fields, 1)) {
44431 log_packet_detailed(" field 'conn_id' has changed");
44432
44433#ifdef FREECIV_JSON_CONNECTION
44434 field_addr.name = "conn_id";
44435#endif /* FREECIV_JSON_CONNECTION */
44436 e = 0;
44437
44438 {
44439 int i;
44440
44441#ifdef FREECIV_JSON_CONNECTION
44442 /* Create the array. */
44443 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44444
44445 /* Enter array. */
44446 field_addr.sub_location = plocation_elem_new(0);
44447#endif /* FREECIV_JSON_CONNECTION */
44448
44449 for (i = 0; i < real_packet->connections; i++) {
44450#ifdef FREECIV_JSON_CONNECTION
44451 /* Next array element. */
44452 field_addr.sub_location->number = i;
44453#endif /* FREECIV_JSON_CONNECTION */
44454
44455 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44456 }
44457
44458#ifdef FREECIV_JSON_CONNECTION
44459 /* Exit array. */
44460 FC_FREE(field_addr.sub_location);
44461#endif /* FREECIV_JSON_CONNECTION */
44462 }
44463
44464 if (e) {
44465 log_packet_detailed("'conn_id' field error detected");
44466 }
44467 }
44468
44469 if (BV_ISSET(fields, 2)) {
44470 log_packet_detailed(" field 'ping_time' has changed");
44471
44472#ifdef FREECIV_JSON_CONNECTION
44473 field_addr.name = "ping_time";
44474#endif /* FREECIV_JSON_CONNECTION */
44475 e = 0;
44476
44477 {
44478 int i;
44479
44480#ifdef FREECIV_JSON_CONNECTION
44481 /* Create the array. */
44482 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44483
44484 /* Enter array. */
44485 field_addr.sub_location = plocation_elem_new(0);
44486#endif /* FREECIV_JSON_CONNECTION */
44487
44488 for (i = 0; i < real_packet->connections; i++) {
44489#ifdef FREECIV_JSON_CONNECTION
44490 /* Next array element. */
44491 field_addr.sub_location->number = i;
44492#endif /* FREECIV_JSON_CONNECTION */
44493
44494 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44495 }
44496
44497#ifdef FREECIV_JSON_CONNECTION
44498 /* Exit array. */
44499 FC_FREE(field_addr.sub_location);
44500#endif /* FREECIV_JSON_CONNECTION */
44501 }
44502
44503 if (e) {
44504 log_packet_detailed("'ping_time' field error detected");
44505 }
44506 }
44507
44508 *old = *real_packet;
44509
44510#else /* FREECIV_DELTA_PROTOCOL */
44511#ifdef FREECIV_JSON_CONNECTION
44512 field_addr.name = "connections";
44513#endif /* FREECIV_JSON_CONNECTION */
44514 e = 0;
44515
44516 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44517
44518 if (e) {
44519 log_packet_detailed("'connections' field error detected");
44520 }
44521
44522#ifdef FREECIV_JSON_CONNECTION
44523 field_addr.name = "conn_id";
44524#endif /* FREECIV_JSON_CONNECTION */
44525 e = 0;
44526
44527 {
44528 int i;
44529
44530#ifdef FREECIV_JSON_CONNECTION
44531 /* Create the array. */
44532 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44533
44534 /* Enter array. */
44535 field_addr.sub_location = plocation_elem_new(0);
44536#endif /* FREECIV_JSON_CONNECTION */
44537
44538 for (i = 0; i < real_packet->connections; i++) {
44539#ifdef FREECIV_JSON_CONNECTION
44540 /* Next array element. */
44541 field_addr.sub_location->number = i;
44542#endif /* FREECIV_JSON_CONNECTION */
44543
44544 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44545 }
44546
44547#ifdef FREECIV_JSON_CONNECTION
44548 /* Exit array. */
44549 FC_FREE(field_addr.sub_location);
44550#endif /* FREECIV_JSON_CONNECTION */
44551 }
44552
44553 if (e) {
44554 log_packet_detailed("'conn_id' field error detected");
44555 }
44556
44557#ifdef FREECIV_JSON_CONNECTION
44558 field_addr.name = "ping_time";
44559#endif /* FREECIV_JSON_CONNECTION */
44560 e = 0;
44561
44562 {
44563 int i;
44564
44565#ifdef FREECIV_JSON_CONNECTION
44566 /* Create the array. */
44567 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44568
44569 /* Enter array. */
44570 field_addr.sub_location = plocation_elem_new(0);
44571#endif /* FREECIV_JSON_CONNECTION */
44572
44573 for (i = 0; i < real_packet->connections; i++) {
44574#ifdef FREECIV_JSON_CONNECTION
44575 /* Next array element. */
44576 field_addr.sub_location->number = i;
44577#endif /* FREECIV_JSON_CONNECTION */
44578
44579 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44580 }
44581
44582#ifdef FREECIV_JSON_CONNECTION
44583 /* Exit array. */
44584 FC_FREE(field_addr.sub_location);
44585#endif /* FREECIV_JSON_CONNECTION */
44586 }
44587
44588 if (e) {
44589 log_packet_detailed("'ping_time' field error detected");
44590 }
44591#endif /* FREECIV_DELTA_PROTOCOL */
44592
44594}
44595
44597{
44598 if (!pc->used) {
44599 log_error("WARNING: trying to send data to the closed connection %s",
44601 return -1;
44602 }
44603 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet != nullptr, -1,
44604 "Handler for PACKET_CONN_PING_INFO not installed");
44605 return pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet(pc, packet);
44606}
44607
44608void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
44609{
44610 conn_list_iterate(dest, pconn) {
44613}
44614
44615static inline void init_packet_conn_ping(struct packet_conn_ping *packet)
44616{
44617 memset(packet, 0, sizeof(*packet));
44618}
44619
44620#define free_packet_conn_ping(_packet) (void) 0
44621#define destroy_packet_conn_ping free
44622
44624{
44625#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping(_packet)
44627
44628 log_packet_detailed("packet_conn_ping_100: got info about ()");
44629
44630 real_packet->__dummy = 0xff;
44631
44633#undef FREE_PACKET_STRUCT
44634}
44635
44637{
44639
44640 log_packet_detailed("packet_conn_ping_100: sending info about ()");
44641
44643}
44644
44646{
44647 if (!pc->used) {
44648 log_error("WARNING: trying to send data to the closed connection %s",
44650 return -1;
44651 }
44652 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING].no_packet != nullptr, -1,
44653 "Handler for PACKET_CONN_PING not installed");
44654 return pc->phs.handlers->send[PACKET_CONN_PING].no_packet(pc);
44655}
44656
44657static inline void init_packet_conn_pong(struct packet_conn_pong *packet)
44658{
44659 memset(packet, 0, sizeof(*packet));
44660}
44661
44662#define free_packet_conn_pong(_packet) (void) 0
44663#define destroy_packet_conn_pong free
44664
44666{
44667#define FREE_PACKET_STRUCT(_packet) free_packet_conn_pong(_packet)
44669
44670 log_packet_detailed("packet_conn_pong_100: got info about ()");
44671
44672 real_packet->__dummy = 0xff;
44673
44675#undef FREE_PACKET_STRUCT
44676}
44677
44679{
44681
44682 log_packet_detailed("packet_conn_pong_100: sending info about ()");
44683
44685}
44686
44688{
44689 if (!pc->used) {
44690 log_error("WARNING: trying to send data to the closed connection %s",
44692 return -1;
44693 }
44694 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PONG].no_packet != nullptr, -1,
44695 "Handler for PACKET_CONN_PONG not installed");
44696 return pc->phs.handlers->send[PACKET_CONN_PONG].no_packet(pc);
44697}
44698
44700{
44701 memset(packet, 0, sizeof(*packet));
44702}
44703
44704#define free_packet_client_heartbeat(_packet) (void) 0
44705#define destroy_packet_client_heartbeat free
44706
44708{
44709#define FREE_PACKET_STRUCT(_packet) free_packet_client_heartbeat(_packet)
44711
44712 log_packet_detailed("packet_client_heartbeat_100: got info about ()");
44713
44714 real_packet->__dummy = 0xff;
44715
44717#undef FREE_PACKET_STRUCT
44718}
44719
44721{
44723
44724 log_packet_detailed("packet_client_heartbeat_100: sending info about ()");
44725
44727}
44728
44730{
44731 if (!pc->used) {
44732 log_error("WARNING: trying to send data to the closed connection %s",
44734 return -1;
44735 }
44736 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet != nullptr, -1,
44737 "Handler for PACKET_CLIENT_HEARTBEAT not installed");
44738 return pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet(pc);
44739}
44740
44741static inline void init_packet_client_info(struct packet_client_info *packet)
44742{
44743 memset(packet, 0, sizeof(*packet));
44744}
44745
44746#define free_packet_client_info(_packet) (void) 0
44747#define destroy_packet_client_info free
44748
44749#ifdef FREECIV_DELTA_PROTOCOL
44750#define hash_packet_client_info_100 hash_const
44751#define cmp_packet_client_info_100 cmp_const
44753#endif /* FREECIV_DELTA_PROTOCOL */
44754
44756{
44757#define FREE_PACKET_STRUCT(_packet) free_packet_client_info(_packet)
44759
44760#ifdef FREECIV_JSON_CONNECTION
44761 struct plocation field_addr;
44762 {
44763 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44766 }
44767#endif /* FREECIV_JSON_CONNECTION */
44768
44769 log_packet_detailed("packet_client_info_100: got info about ()");
44770
44771#ifdef FREECIV_DELTA_PROTOCOL
44773 struct packet_client_info *old;
44774 struct genhash **hash = pc->phs.received + PACKET_CLIENT_INFO;
44775
44776 if (nullptr == *hash) {
44778 nullptr, nullptr, nullptr, destroy_packet_client_info);
44779 }
44780
44781 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44782 *real_packet = *old;
44783 } else {
44784 /* packet is already initialized empty */
44785 log_packet_detailed(" no old info");
44786 }
44787
44788#ifdef FREECIV_JSON_CONNECTION
44789 field_addr.name = "fields";
44790#endif /* FREECIV_JSON_CONNECTION */
44791 DIO_BV_GET(&din, &field_addr, fields);
44792
44793 if (BV_ISSET(fields, 0)) {
44794 log_packet_detailed(" got field 'gui'");
44795
44796#ifdef FREECIV_JSON_CONNECTION
44797 field_addr.name = "gui";
44798#endif /* FREECIV_JSON_CONNECTION */
44799
44800 {
44801 int readin;
44802
44803 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44805 }
44806 real_packet->gui = readin;
44807 }
44808 }
44809
44810 if (BV_ISSET(fields, 1)) {
44811 log_packet_detailed(" got field 'emerg_version'");
44812
44813#ifdef FREECIV_JSON_CONNECTION
44814 field_addr.name = "emerg_version";
44815#endif /* FREECIV_JSON_CONNECTION */
44816
44817 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44818 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44819 }
44820 }
44821
44822 if (BV_ISSET(fields, 2)) {
44823 log_packet_detailed(" got field 'distribution'");
44824
44825#ifdef FREECIV_JSON_CONNECTION
44826 field_addr.name = "distribution";
44827#endif /* FREECIV_JSON_CONNECTION */
44828
44829 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44830 RECEIVE_PACKET_FIELD_ERROR(distribution);
44831 }
44832 }
44833
44834 if (nullptr == old) {
44835 old = fc_malloc(sizeof(*old));
44837 *old = *real_packet;
44839 } else {
44840 *old = *real_packet;
44841 }
44842
44843#else /* FREECIV_DELTA_PROTOCOL */
44844#ifdef FREECIV_JSON_CONNECTION
44845 field_addr.name = "gui";
44846#endif /* FREECIV_JSON_CONNECTION */
44847
44848 {
44849 int readin;
44850
44851 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44853 }
44854 real_packet->gui = readin;
44855 }
44856
44857#ifdef FREECIV_JSON_CONNECTION
44858 field_addr.name = "emerg_version";
44859#endif /* FREECIV_JSON_CONNECTION */
44860
44861 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44862 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44863 }
44864
44865#ifdef FREECIV_JSON_CONNECTION
44866 field_addr.name = "distribution";
44867#endif /* FREECIV_JSON_CONNECTION */
44868
44869 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44870 RECEIVE_PACKET_FIELD_ERROR(distribution);
44871 }
44872#endif /* FREECIV_DELTA_PROTOCOL */
44873
44875#undef FREE_PACKET_STRUCT
44876}
44877
44878static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
44879{
44880 const struct packet_client_info *real_packet = packet;
44881 int e;
44883
44884 log_packet_detailed("packet_client_info_100: sending info about ()");
44885
44886#ifdef FREECIV_DELTA_PROTOCOL
44888 struct packet_client_info *old;
44889 bool differ;
44890 struct genhash **hash = pc->phs.sent + PACKET_CLIENT_INFO;
44891
44892 if (nullptr == *hash) {
44894 nullptr, nullptr, nullptr, destroy_packet_client_info);
44895 }
44896 BV_CLR_ALL(fields);
44897
44898 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44899 old = fc_malloc(sizeof(*old));
44900 /* temporary bitcopy just to insert correctly */
44901 *old = *real_packet;
44904 }
44905
44906 differ = (old->gui != real_packet->gui);
44907 if (differ) {
44908 BV_SET(fields, 0);
44909 }
44910
44911 differ = (old->emerg_version != real_packet->emerg_version);
44912 if (differ) {
44913 BV_SET(fields, 1);
44914 }
44915
44916 differ = (strcmp(old->distribution, real_packet->distribution) != 0);
44917 if (differ) {
44918 BV_SET(fields, 2);
44919 }
44920#endif /* FREECIV_DELTA_PROTOCOL */
44921
44922#ifdef FREECIV_JSON_CONNECTION
44923 struct plocation field_addr;
44924 {
44925 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44928 }
44929#endif /* FREECIV_JSON_CONNECTION */
44930
44931#ifdef FREECIV_DELTA_PROTOCOL
44932#ifdef FREECIV_JSON_CONNECTION
44933 field_addr.name = "fields";
44934#endif /* FREECIV_JSON_CONNECTION */
44935 e = 0;
44936 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44937 if (e) {
44938 log_packet_detailed("fields bitvector error detected");
44939 }
44940
44941 if (BV_ISSET(fields, 0)) {
44942 log_packet_detailed(" field 'gui' has changed");
44943
44944#ifdef FREECIV_JSON_CONNECTION
44945 field_addr.name = "gui";
44946#endif /* FREECIV_JSON_CONNECTION */
44947 e = 0;
44948
44949 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44950
44951 if (e) {
44952 log_packet_detailed("'gui' field error detected");
44953 }
44954 }
44955
44956 if (BV_ISSET(fields, 1)) {
44957 log_packet_detailed(" field 'emerg_version' has changed");
44958
44959#ifdef FREECIV_JSON_CONNECTION
44960 field_addr.name = "emerg_version";
44961#endif /* FREECIV_JSON_CONNECTION */
44962 e = 0;
44963
44964 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44965
44966 if (e) {
44967 log_packet_detailed("'emerg_version' field error detected");
44968 }
44969 }
44970
44971 if (BV_ISSET(fields, 2)) {
44972 log_packet_detailed(" field 'distribution' has changed");
44973
44974#ifdef FREECIV_JSON_CONNECTION
44975 field_addr.name = "distribution";
44976#endif /* FREECIV_JSON_CONNECTION */
44977 e = 0;
44978
44979 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
44980
44981 if (e) {
44982 log_packet_detailed("'distribution' field error detected");
44983 }
44984 }
44985
44986 *old = *real_packet;
44987
44988#else /* FREECIV_DELTA_PROTOCOL */
44989#ifdef FREECIV_JSON_CONNECTION
44990 field_addr.name = "gui";
44991#endif /* FREECIV_JSON_CONNECTION */
44992 e = 0;
44993
44994 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44995
44996 if (e) {
44997 log_packet_detailed("'gui' field error detected");
44998 }
44999
45000#ifdef FREECIV_JSON_CONNECTION
45001 field_addr.name = "emerg_version";
45002#endif /* FREECIV_JSON_CONNECTION */
45003 e = 0;
45004
45005 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
45006
45007 if (e) {
45008 log_packet_detailed("'emerg_version' field error detected");
45009 }
45010
45011#ifdef FREECIV_JSON_CONNECTION
45012 field_addr.name = "distribution";
45013#endif /* FREECIV_JSON_CONNECTION */
45014 e = 0;
45015
45016 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
45017
45018 if (e) {
45019 log_packet_detailed("'distribution' field error detected");
45020 }
45021#endif /* FREECIV_DELTA_PROTOCOL */
45022
45024}
45025
45027{
45028 if (!pc->used) {
45029 log_error("WARNING: trying to send data to the closed connection %s",
45031 return -1;
45032 }
45033 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_INFO].packet != nullptr, -1,
45034 "Handler for PACKET_CLIENT_INFO not installed");
45035 return pc->phs.handlers->send[PACKET_CLIENT_INFO].packet(pc, packet);
45036}
45037
45038static inline void init_packet_end_phase(struct packet_end_phase *packet)
45039{
45040 memset(packet, 0, sizeof(*packet));
45041}
45042
45043#define free_packet_end_phase(_packet) (void) 0
45044#define destroy_packet_end_phase free
45045
45047{
45048#define FREE_PACKET_STRUCT(_packet) free_packet_end_phase(_packet)
45050
45051 log_packet_detailed("packet_end_phase_100: got info about ()");
45052
45053 real_packet->__dummy = 0xff;
45054
45056#undef FREE_PACKET_STRUCT
45057}
45058
45060{
45062
45063 log_packet_detailed("packet_end_phase_100: sending info about ()");
45064
45066}
45067
45069{
45070 if (!pc->used) {
45071 log_error("WARNING: trying to send data to the closed connection %s",
45073 return -1;
45074 }
45075 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_PHASE].no_packet != nullptr, -1,
45076 "Handler for PACKET_END_PHASE not installed");
45077 return pc->phs.handlers->send[PACKET_END_PHASE].no_packet(pc);
45078}
45079
45081{
45082 conn_list_iterate(dest, pconn) {
45085}
45086
45087static inline void init_packet_start_phase(struct packet_start_phase *packet)
45088{
45089 memset(packet, 0, sizeof(*packet));
45090}
45091
45092#define free_packet_start_phase(_packet) (void) 0
45093#define destroy_packet_start_phase free
45094
45095#ifdef FREECIV_DELTA_PROTOCOL
45096#define hash_packet_start_phase_100 hash_const
45097#define cmp_packet_start_phase_100 cmp_const
45099#endif /* FREECIV_DELTA_PROTOCOL */
45100
45102{
45103#define FREE_PACKET_STRUCT(_packet) free_packet_start_phase(_packet)
45105
45106#ifdef FREECIV_JSON_CONNECTION
45107 struct plocation field_addr;
45108 {
45109 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45112 }
45113#endif /* FREECIV_JSON_CONNECTION */
45114
45115 log_packet_detailed("packet_start_phase_100: got info about ()");
45116
45117#ifdef FREECIV_DELTA_PROTOCOL
45119 struct packet_start_phase *old;
45120 struct genhash **hash = pc->phs.received + PACKET_START_PHASE;
45121
45122 if (nullptr == *hash) {
45124 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45125 }
45126
45127 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45128 *real_packet = *old;
45129 } else {
45130 /* packet is already initialized empty */
45131 log_packet_detailed(" no old info");
45132 }
45133
45134#ifdef FREECIV_JSON_CONNECTION
45135 field_addr.name = "fields";
45136#endif /* FREECIV_JSON_CONNECTION */
45137 DIO_BV_GET(&din, &field_addr, fields);
45138
45139 if (BV_ISSET(fields, 0)) {
45140 log_packet_detailed(" got field 'phase'");
45141
45142#ifdef FREECIV_JSON_CONNECTION
45143 field_addr.name = "phase";
45144#endif /* FREECIV_JSON_CONNECTION */
45145
45146 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45148 }
45149 }
45150
45151 if (nullptr == old) {
45152 old = fc_malloc(sizeof(*old));
45154 *old = *real_packet;
45156 } else {
45157 *old = *real_packet;
45158 }
45159
45160#else /* FREECIV_DELTA_PROTOCOL */
45161#ifdef FREECIV_JSON_CONNECTION
45162 field_addr.name = "phase";
45163#endif /* FREECIV_JSON_CONNECTION */
45164
45165 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45167 }
45168#endif /* FREECIV_DELTA_PROTOCOL */
45169
45171#undef FREE_PACKET_STRUCT
45172}
45173
45174static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
45175{
45176 const struct packet_start_phase *real_packet = packet;
45177 int e;
45179
45180 log_packet_detailed("packet_start_phase_100: sending info about ()");
45181
45182#ifdef FREECIV_DELTA_PROTOCOL
45184 struct packet_start_phase *old;
45185 bool differ;
45186 struct genhash **hash = pc->phs.sent + PACKET_START_PHASE;
45187
45188 if (nullptr == *hash) {
45190 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45191 }
45192 BV_CLR_ALL(fields);
45193
45194 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45195 old = fc_malloc(sizeof(*old));
45196 /* temporary bitcopy just to insert correctly */
45197 *old = *real_packet;
45200 }
45201
45202 differ = (old->phase != real_packet->phase);
45203 if (differ) {
45204 BV_SET(fields, 0);
45205 }
45206#endif /* FREECIV_DELTA_PROTOCOL */
45207
45208#ifdef FREECIV_JSON_CONNECTION
45209 struct plocation field_addr;
45210 {
45211 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45214 }
45215#endif /* FREECIV_JSON_CONNECTION */
45216
45217#ifdef FREECIV_DELTA_PROTOCOL
45218#ifdef FREECIV_JSON_CONNECTION
45219 field_addr.name = "fields";
45220#endif /* FREECIV_JSON_CONNECTION */
45221 e = 0;
45222 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45223 if (e) {
45224 log_packet_detailed("fields bitvector error detected");
45225 }
45226
45227 if (BV_ISSET(fields, 0)) {
45228 log_packet_detailed(" field 'phase' has changed");
45229
45230#ifdef FREECIV_JSON_CONNECTION
45231 field_addr.name = "phase";
45232#endif /* FREECIV_JSON_CONNECTION */
45233 e = 0;
45234
45235 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45236
45237 if (e) {
45238 log_packet_detailed("'phase' field error detected");
45239 }
45240 }
45241
45242 *old = *real_packet;
45243
45244#else /* FREECIV_DELTA_PROTOCOL */
45245#ifdef FREECIV_JSON_CONNECTION
45246 field_addr.name = "phase";
45247#endif /* FREECIV_JSON_CONNECTION */
45248 e = 0;
45249
45250 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45251
45252 if (e) {
45253 log_packet_detailed("'phase' field error detected");
45254 }
45255#endif /* FREECIV_DELTA_PROTOCOL */
45256
45258}
45259
45261{
45262 if (!pc->used) {
45263 log_error("WARNING: trying to send data to the closed connection %s",
45265 return -1;
45266 }
45267 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_START_PHASE].packet != nullptr, -1,
45268 "Handler for PACKET_START_PHASE not installed");
45269 return pc->phs.handlers->send[PACKET_START_PHASE].packet(pc, packet);
45270}
45271
45272void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
45273{
45274 conn_list_iterate(dest, pconn) {
45277}
45278
45280{
45281 struct packet_start_phase packet, *real_packet = &packet;
45282
45284
45286}
45287
45289{
45290 struct packet_start_phase packet, *real_packet = &packet;
45291
45293
45295}
45296
45297static inline void init_packet_new_year(struct packet_new_year *packet)
45298{
45299 memset(packet, 0, sizeof(*packet));
45300}
45301
45302#define free_packet_new_year(_packet) (void) 0
45303#define destroy_packet_new_year free
45304
45305#ifdef FREECIV_DELTA_PROTOCOL
45306#define hash_packet_new_year_100 hash_const
45307#define cmp_packet_new_year_100 cmp_const
45309#endif /* FREECIV_DELTA_PROTOCOL */
45310
45312{
45313#define FREE_PACKET_STRUCT(_packet) free_packet_new_year(_packet)
45315
45316#ifdef FREECIV_JSON_CONNECTION
45317 struct plocation field_addr;
45318 {
45319 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45322 }
45323#endif /* FREECIV_JSON_CONNECTION */
45324
45325 log_packet_detailed("packet_new_year_100: got info about ()");
45326
45327#ifdef FREECIV_DELTA_PROTOCOL
45329 struct packet_new_year *old;
45330 struct genhash **hash = pc->phs.received + PACKET_NEW_YEAR;
45331
45332 if (nullptr == *hash) {
45334 nullptr, nullptr, nullptr, destroy_packet_new_year);
45335 }
45336
45337 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45338 *real_packet = *old;
45339 } else {
45340 /* packet is already initialized empty */
45341 log_packet_detailed(" no old info");
45342 }
45343
45344#ifdef FREECIV_JSON_CONNECTION
45345 field_addr.name = "fields";
45346#endif /* FREECIV_JSON_CONNECTION */
45347 DIO_BV_GET(&din, &field_addr, fields);
45348
45349 if (BV_ISSET(fields, 0)) {
45350 log_packet_detailed(" got field 'year'");
45351
45352#ifdef FREECIV_JSON_CONNECTION
45353 field_addr.name = "year";
45354#endif /* FREECIV_JSON_CONNECTION */
45355
45356 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45358 }
45359 }
45360
45361 if (BV_ISSET(fields, 1)) {
45362 log_packet_detailed(" got field 'fragments'");
45363
45364#ifdef FREECIV_JSON_CONNECTION
45365 field_addr.name = "fragments";
45366#endif /* FREECIV_JSON_CONNECTION */
45367
45368 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45369 RECEIVE_PACKET_FIELD_ERROR(fragments);
45370 }
45371 }
45372
45373 if (BV_ISSET(fields, 2)) {
45374 log_packet_detailed(" got field 'turn'");
45375
45376#ifdef FREECIV_JSON_CONNECTION
45377 field_addr.name = "turn";
45378#endif /* FREECIV_JSON_CONNECTION */
45379
45380 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45382 }
45383 }
45384
45385 if (nullptr == old) {
45386 old = fc_malloc(sizeof(*old));
45388 *old = *real_packet;
45390 } else {
45391 *old = *real_packet;
45392 }
45393
45394#else /* FREECIV_DELTA_PROTOCOL */
45395#ifdef FREECIV_JSON_CONNECTION
45396 field_addr.name = "year";
45397#endif /* FREECIV_JSON_CONNECTION */
45398
45399 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45401 }
45402
45403#ifdef FREECIV_JSON_CONNECTION
45404 field_addr.name = "fragments";
45405#endif /* FREECIV_JSON_CONNECTION */
45406
45407 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45408 RECEIVE_PACKET_FIELD_ERROR(fragments);
45409 }
45410
45411#ifdef FREECIV_JSON_CONNECTION
45412 field_addr.name = "turn";
45413#endif /* FREECIV_JSON_CONNECTION */
45414
45415 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45417 }
45418#endif /* FREECIV_DELTA_PROTOCOL */
45419
45421#undef FREE_PACKET_STRUCT
45422}
45423
45424static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
45425{
45426 const struct packet_new_year *real_packet = packet;
45427 int e;
45429
45430 log_packet_detailed("packet_new_year_100: sending info about ()");
45431
45432#ifdef FREECIV_DELTA_PROTOCOL
45434 struct packet_new_year *old;
45435 bool differ;
45436 struct genhash **hash = pc->phs.sent + PACKET_NEW_YEAR;
45437
45438 if (nullptr == *hash) {
45440 nullptr, nullptr, nullptr, destroy_packet_new_year);
45441 }
45442 BV_CLR_ALL(fields);
45443
45444 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45445 old = fc_malloc(sizeof(*old));
45446 /* temporary bitcopy just to insert correctly */
45447 *old = *real_packet;
45450 }
45451
45452 differ = (old->year != real_packet->year);
45453 if (differ) {
45454 BV_SET(fields, 0);
45455 }
45456
45457 differ = (old->fragments != real_packet->fragments);
45458 if (differ) {
45459 BV_SET(fields, 1);
45460 }
45461
45462 differ = (old->turn != real_packet->turn);
45463 if (differ) {
45464 BV_SET(fields, 2);
45465 }
45466#endif /* FREECIV_DELTA_PROTOCOL */
45467
45468#ifdef FREECIV_JSON_CONNECTION
45469 struct plocation field_addr;
45470 {
45471 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45474 }
45475#endif /* FREECIV_JSON_CONNECTION */
45476
45477#ifdef FREECIV_DELTA_PROTOCOL
45478#ifdef FREECIV_JSON_CONNECTION
45479 field_addr.name = "fields";
45480#endif /* FREECIV_JSON_CONNECTION */
45481 e = 0;
45482 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45483 if (e) {
45484 log_packet_detailed("fields bitvector error detected");
45485 }
45486
45487 if (BV_ISSET(fields, 0)) {
45488 log_packet_detailed(" field 'year' has changed");
45489
45490#ifdef FREECIV_JSON_CONNECTION
45491 field_addr.name = "year";
45492#endif /* FREECIV_JSON_CONNECTION */
45493 e = 0;
45494
45495 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45496
45497 if (e) {
45498 log_packet_detailed("'year' field error detected");
45499 }
45500 }
45501
45502 if (BV_ISSET(fields, 1)) {
45503 log_packet_detailed(" field 'fragments' has changed");
45504
45505#ifdef FREECIV_JSON_CONNECTION
45506 field_addr.name = "fragments";
45507#endif /* FREECIV_JSON_CONNECTION */
45508 e = 0;
45509
45510 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45511
45512 if (e) {
45513 log_packet_detailed("'fragments' field error detected");
45514 }
45515 }
45516
45517 if (BV_ISSET(fields, 2)) {
45518 log_packet_detailed(" field 'turn' has changed");
45519
45520#ifdef FREECIV_JSON_CONNECTION
45521 field_addr.name = "turn";
45522#endif /* FREECIV_JSON_CONNECTION */
45523 e = 0;
45524
45525 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45526
45527 if (e) {
45528 log_packet_detailed("'turn' field error detected");
45529 }
45530 }
45531
45532 *old = *real_packet;
45533
45534#else /* FREECIV_DELTA_PROTOCOL */
45535#ifdef FREECIV_JSON_CONNECTION
45536 field_addr.name = "year";
45537#endif /* FREECIV_JSON_CONNECTION */
45538 e = 0;
45539
45540 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45541
45542 if (e) {
45543 log_packet_detailed("'year' field error detected");
45544 }
45545
45546#ifdef FREECIV_JSON_CONNECTION
45547 field_addr.name = "fragments";
45548#endif /* FREECIV_JSON_CONNECTION */
45549 e = 0;
45550
45551 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45552
45553 if (e) {
45554 log_packet_detailed("'fragments' field error detected");
45555 }
45556
45557#ifdef FREECIV_JSON_CONNECTION
45558 field_addr.name = "turn";
45559#endif /* FREECIV_JSON_CONNECTION */
45560 e = 0;
45561
45562 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45563
45564 if (e) {
45565 log_packet_detailed("'turn' field error detected");
45566 }
45567#endif /* FREECIV_DELTA_PROTOCOL */
45568
45570}
45571
45572int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
45573{
45574 if (!pc->used) {
45575 log_error("WARNING: trying to send data to the closed connection %s",
45577 return -1;
45578 }
45579 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NEW_YEAR].packet != nullptr, -1,
45580 "Handler for PACKET_NEW_YEAR not installed");
45581 return pc->phs.handlers->send[PACKET_NEW_YEAR].packet(pc, packet);
45582}
45583
45584void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
45585{
45586 conn_list_iterate(dest, pconn) {
45587 send_packet_new_year(pconn, packet);
45589}
45590
45591static inline void init_packet_begin_turn(struct packet_begin_turn *packet)
45592{
45593 memset(packet, 0, sizeof(*packet));
45594}
45595
45596#define free_packet_begin_turn(_packet) (void) 0
45597#define destroy_packet_begin_turn free
45598
45600{
45601#define FREE_PACKET_STRUCT(_packet) free_packet_begin_turn(_packet)
45603
45604 log_packet_detailed("packet_begin_turn_100: got info about ()");
45605
45606 real_packet->__dummy = 0xff;
45607
45609#undef FREE_PACKET_STRUCT
45610}
45611
45613{
45615
45616 log_packet_detailed("packet_begin_turn_100: sending info about ()");
45617
45619}
45620
45622{
45623 if (!pc->used) {
45624 log_error("WARNING: trying to send data to the closed connection %s",
45626 return -1;
45627 }
45628 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet != nullptr, -1,
45629 "Handler for PACKET_BEGIN_TURN not installed");
45630 return pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet(pc);
45631}
45632
45634{
45635 conn_list_iterate(dest, pconn) {
45638}
45639
45640static inline void init_packet_end_turn(struct packet_end_turn *packet)
45641{
45642 memset(packet, 0, sizeof(*packet));
45643}
45644
45645#define free_packet_end_turn(_packet) (void) 0
45646#define destroy_packet_end_turn free
45647
45649{
45650#define FREE_PACKET_STRUCT(_packet) free_packet_end_turn(_packet)
45652
45653 log_packet_detailed("packet_end_turn_100: got info about ()");
45654
45655 real_packet->__dummy = 0xff;
45656
45658#undef FREE_PACKET_STRUCT
45659}
45660
45662{
45664
45665 log_packet_detailed("packet_end_turn_100: sending info about ()");
45666
45668}
45669
45671{
45672 if (!pc->used) {
45673 log_error("WARNING: trying to send data to the closed connection %s",
45675 return -1;
45676 }
45677 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_TURN].no_packet != nullptr, -1,
45678 "Handler for PACKET_END_TURN not installed");
45679 return pc->phs.handlers->send[PACKET_END_TURN].no_packet(pc);
45680}
45681
45683{
45684 conn_list_iterate(dest, pconn) {
45687}
45688
45689static inline void init_packet_freeze_client(struct packet_freeze_client *packet)
45690{
45691 memset(packet, 0, sizeof(*packet));
45692}
45693
45694#define free_packet_freeze_client(_packet) (void) 0
45695#define destroy_packet_freeze_client free
45696
45698{
45699#define FREE_PACKET_STRUCT(_packet) free_packet_freeze_client(_packet)
45701
45702 log_packet_detailed("packet_freeze_client_100: got info about ()");
45703
45704 real_packet->__dummy = 0xff;
45705
45707#undef FREE_PACKET_STRUCT
45708}
45709
45711{
45713
45714 log_packet_detailed("packet_freeze_client_100: sending info about ()");
45715
45717}
45718
45720{
45721 if (!pc->used) {
45722 log_error("WARNING: trying to send data to the closed connection %s",
45724 return -1;
45725 }
45726 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet != nullptr, -1,
45727 "Handler for PACKET_FREEZE_CLIENT not installed");
45728 return pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet(pc);
45729}
45730
45737
45738static inline void init_packet_thaw_client(struct packet_thaw_client *packet)
45739{
45740 memset(packet, 0, sizeof(*packet));
45741}
45742
45743#define free_packet_thaw_client(_packet) (void) 0
45744#define destroy_packet_thaw_client free
45745
45747{
45748#define FREE_PACKET_STRUCT(_packet) free_packet_thaw_client(_packet)
45750
45751 log_packet_detailed("packet_thaw_client_100: got info about ()");
45752
45753 real_packet->__dummy = 0xff;
45754
45756#undef FREE_PACKET_STRUCT
45757}
45758
45760{
45762
45763 log_packet_detailed("packet_thaw_client_100: sending info about ()");
45764
45766}
45767
45769{
45770 if (!pc->used) {
45771 log_error("WARNING: trying to send data to the closed connection %s",
45773 return -1;
45774 }
45775 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet != nullptr, -1,
45776 "Handler for PACKET_THAW_CLIENT not installed");
45777 return pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet(pc);
45778}
45779
45781{
45782 conn_list_iterate(dest, pconn) {
45785}
45786
45788{
45789 memset(packet, 0, sizeof(*packet));
45790}
45791
45792#define free_packet_spaceship_launch(_packet) (void) 0
45793#define destroy_packet_spaceship_launch free
45794
45796{
45797#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_launch(_packet)
45799
45800 log_packet_detailed("packet_spaceship_launch_100: got info about ()");
45801
45802 real_packet->__dummy = 0xff;
45803
45805#undef FREE_PACKET_STRUCT
45806}
45807
45809{
45811
45812 log_packet_detailed("packet_spaceship_launch_100: sending info about ()");
45813
45815}
45816
45818{
45819 if (!pc->used) {
45820 log_error("WARNING: trying to send data to the closed connection %s",
45822 return -1;
45823 }
45824 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet != nullptr, -1,
45825 "Handler for PACKET_SPACESHIP_LAUNCH not installed");
45826 return pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet(pc);
45827}
45828
45829static inline void init_packet_spaceship_place(struct packet_spaceship_place *packet)
45830{
45831 memset(packet, 0, sizeof(*packet));
45832}
45833
45834#define free_packet_spaceship_place(_packet) (void) 0
45835#define destroy_packet_spaceship_place free
45836
45837#ifdef FREECIV_DELTA_PROTOCOL
45838#define hash_packet_spaceship_place_100 hash_const
45839#define cmp_packet_spaceship_place_100 cmp_const
45841#endif /* FREECIV_DELTA_PROTOCOL */
45842
45844{
45845#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_place(_packet)
45847
45848#ifdef FREECIV_JSON_CONNECTION
45849 struct plocation field_addr;
45850 {
45851 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45854 }
45855#endif /* FREECIV_JSON_CONNECTION */
45856
45857 log_packet_detailed("packet_spaceship_place_100: got info about ()");
45858
45859#ifdef FREECIV_DELTA_PROTOCOL
45862 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_PLACE;
45863
45864 if (nullptr == *hash) {
45866 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45867 }
45868
45869 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45870 *real_packet = *old;
45871 } else {
45872 /* packet is already initialized empty */
45873 log_packet_detailed(" no old info");
45874 }
45875
45876#ifdef FREECIV_JSON_CONNECTION
45877 field_addr.name = "fields";
45878#endif /* FREECIV_JSON_CONNECTION */
45879 DIO_BV_GET(&din, &field_addr, fields);
45880
45881 if (BV_ISSET(fields, 0)) {
45882 log_packet_detailed(" got field 'type'");
45883
45884#ifdef FREECIV_JSON_CONNECTION
45885 field_addr.name = "type";
45886#endif /* FREECIV_JSON_CONNECTION */
45887
45888 {
45889 int readin;
45890
45891 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45893 }
45894 real_packet->type = readin;
45895 }
45896 }
45897
45898 if (BV_ISSET(fields, 1)) {
45899 log_packet_detailed(" got field 'num'");
45900
45901#ifdef FREECIV_JSON_CONNECTION
45902 field_addr.name = "num";
45903#endif /* FREECIV_JSON_CONNECTION */
45904
45905 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45907 }
45908 }
45909
45910 if (nullptr == old) {
45911 old = fc_malloc(sizeof(*old));
45913 *old = *real_packet;
45915 } else {
45916 *old = *real_packet;
45917 }
45918
45919#else /* FREECIV_DELTA_PROTOCOL */
45920#ifdef FREECIV_JSON_CONNECTION
45921 field_addr.name = "type";
45922#endif /* FREECIV_JSON_CONNECTION */
45923
45924 {
45925 int readin;
45926
45927 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45929 }
45930 real_packet->type = readin;
45931 }
45932
45933#ifdef FREECIV_JSON_CONNECTION
45934 field_addr.name = "num";
45935#endif /* FREECIV_JSON_CONNECTION */
45936
45937 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45939 }
45940#endif /* FREECIV_DELTA_PROTOCOL */
45941
45943#undef FREE_PACKET_STRUCT
45944}
45945
45947{
45948 const struct packet_spaceship_place *real_packet = packet;
45949 int e;
45951
45952 log_packet_detailed("packet_spaceship_place_100: sending info about ()");
45953
45954#ifdef FREECIV_DELTA_PROTOCOL
45957 bool differ;
45958 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_PLACE;
45959
45960 if (nullptr == *hash) {
45962 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45963 }
45964 BV_CLR_ALL(fields);
45965
45966 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45967 old = fc_malloc(sizeof(*old));
45968 /* temporary bitcopy just to insert correctly */
45969 *old = *real_packet;
45972 }
45973
45974 differ = (old->type != real_packet->type);
45975 if (differ) {
45976 BV_SET(fields, 0);
45977 }
45978
45979 differ = (old->num != real_packet->num);
45980 if (differ) {
45981 BV_SET(fields, 1);
45982 }
45983#endif /* FREECIV_DELTA_PROTOCOL */
45984
45985#ifdef FREECIV_JSON_CONNECTION
45986 struct plocation field_addr;
45987 {
45988 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45991 }
45992#endif /* FREECIV_JSON_CONNECTION */
45993
45994#ifdef FREECIV_DELTA_PROTOCOL
45995#ifdef FREECIV_JSON_CONNECTION
45996 field_addr.name = "fields";
45997#endif /* FREECIV_JSON_CONNECTION */
45998 e = 0;
45999 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46000 if (e) {
46001 log_packet_detailed("fields bitvector error detected");
46002 }
46003
46004 if (BV_ISSET(fields, 0)) {
46005 log_packet_detailed(" field 'type' has changed");
46006
46007#ifdef FREECIV_JSON_CONNECTION
46008 field_addr.name = "type";
46009#endif /* FREECIV_JSON_CONNECTION */
46010 e = 0;
46011
46012 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
46013
46014 if (e) {
46015 log_packet_detailed("'type' field error detected");
46016 }
46017 }
46018
46019 if (BV_ISSET(fields, 1)) {
46020 log_packet_detailed(" field 'num' has changed");
46021
46022#ifdef FREECIV_JSON_CONNECTION
46023 field_addr.name = "num";
46024#endif /* FREECIV_JSON_CONNECTION */
46025 e = 0;
46026
46027 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
46028
46029 if (e) {
46030 log_packet_detailed("'num' field error detected");
46031 }
46032 }
46033
46034 *old = *real_packet;
46035
46036#else /* FREECIV_DELTA_PROTOCOL */
46037#ifdef FREECIV_JSON_CONNECTION
46038 field_addr.name = "type";
46039#endif /* FREECIV_JSON_CONNECTION */
46040 e = 0;
46041
46042 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
46043
46044 if (e) {
46045 log_packet_detailed("'type' field error detected");
46046 }
46047
46048#ifdef FREECIV_JSON_CONNECTION
46049 field_addr.name = "num";
46050#endif /* FREECIV_JSON_CONNECTION */
46051 e = 0;
46052
46053 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
46054
46055 if (e) {
46056 log_packet_detailed("'num' field error detected");
46057 }
46058#endif /* FREECIV_DELTA_PROTOCOL */
46059
46061}
46062
46064{
46065 if (!pc->used) {
46066 log_error("WARNING: trying to send data to the closed connection %s",
46068 return -1;
46069 }
46070 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet != nullptr, -1,
46071 "Handler for PACKET_SPACESHIP_PLACE not installed");
46072 return pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet(pc, packet);
46073}
46074
46076{
46077 struct packet_spaceship_place packet, *real_packet = &packet;
46078
46080 real_packet->num = num;
46081
46083}
46084
46085static inline void init_packet_spaceship_info(struct packet_spaceship_info *packet)
46086{
46087 memset(packet, 0, sizeof(*packet));
46088}
46089
46090#define free_packet_spaceship_info(_packet) (void) 0
46091#define destroy_packet_spaceship_info free
46092
46093#ifdef FREECIV_DELTA_PROTOCOL
46095{
46096 const struct packet_spaceship_info *key = (const struct packet_spaceship_info *) vkey;
46097 genhash_val_t result = 0;
46098
46099 result += key->player_num;
46100
46101 result &= 0xFFFFFFFF;
46102 return result;
46103}
46104
46105static bool cmp_packet_spaceship_info_100(const void *vkey1, const void *vkey2)
46106{
46107 const struct packet_spaceship_info *old = (const struct packet_spaceship_info *) vkey1;
46108 const struct packet_spaceship_info *real_packet = (const struct packet_spaceship_info *) vkey2;
46109 bool differ;
46110
46111 differ = (old->player_num != real_packet->player_num);
46112
46113 return !differ;
46114}
46116#endif /* FREECIV_DELTA_PROTOCOL */
46117
46119{
46120#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_info(_packet)
46122
46123#ifdef FREECIV_JSON_CONNECTION
46124 struct plocation field_addr;
46125 {
46126 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46129 }
46130#endif /* FREECIV_JSON_CONNECTION */
46131
46132#ifdef FREECIV_JSON_CONNECTION
46133 field_addr.name = "player_num";
46134#endif /* FREECIV_JSON_CONNECTION */
46135
46136 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
46137 RECEIVE_PACKET_FIELD_ERROR(player_num);
46138 }
46139
46140 log_packet_detailed("packet_spaceship_info_100: got info about (%d)",
46141 real_packet->player_num);
46142
46143#ifdef FREECIV_DELTA_PROTOCOL
46145 struct packet_spaceship_info *old;
46146 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_INFO;
46147
46148 if (nullptr == *hash) {
46150 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46151 }
46152
46153 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46154 *real_packet = *old;
46155 } else {
46156 /* packet is already initialized empty */
46157 log_packet_detailed(" no old info");
46158 }
46159
46160#ifdef FREECIV_JSON_CONNECTION
46161 field_addr.name = "fields";
46162#endif /* FREECIV_JSON_CONNECTION */
46163 DIO_BV_GET(&din, &field_addr, fields);
46164
46165 if (BV_ISSET(fields, 0)) {
46166 log_packet_detailed(" got field 'sship_state'");
46167
46168#ifdef FREECIV_JSON_CONNECTION
46169 field_addr.name = "sship_state";
46170#endif /* FREECIV_JSON_CONNECTION */
46171
46172 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46173 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46174 }
46175 }
46176
46177 if (BV_ISSET(fields, 1)) {
46178 log_packet_detailed(" got field 'structurals'");
46179
46180#ifdef FREECIV_JSON_CONNECTION
46181 field_addr.name = "structurals";
46182#endif /* FREECIV_JSON_CONNECTION */
46183
46184 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46185 RECEIVE_PACKET_FIELD_ERROR(structurals);
46186 }
46187 }
46188
46189 if (BV_ISSET(fields, 2)) {
46190 log_packet_detailed(" got field 'components'");
46191
46192#ifdef FREECIV_JSON_CONNECTION
46193 field_addr.name = "components";
46194#endif /* FREECIV_JSON_CONNECTION */
46195
46196 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46197 RECEIVE_PACKET_FIELD_ERROR(components);
46198 }
46199 }
46200
46201 if (BV_ISSET(fields, 3)) {
46202 log_packet_detailed(" got field 'modules'");
46203
46204#ifdef FREECIV_JSON_CONNECTION
46205 field_addr.name = "modules";
46206#endif /* FREECIV_JSON_CONNECTION */
46207
46208 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46210 }
46211 }
46212
46213 if (BV_ISSET(fields, 4)) {
46214 log_packet_detailed(" got field 'fuel'");
46215
46216#ifdef FREECIV_JSON_CONNECTION
46217 field_addr.name = "fuel";
46218#endif /* FREECIV_JSON_CONNECTION */
46219
46220 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46222 }
46223 }
46224
46225 if (BV_ISSET(fields, 5)) {
46226 log_packet_detailed(" got field 'propulsion'");
46227
46228#ifdef FREECIV_JSON_CONNECTION
46229 field_addr.name = "propulsion";
46230#endif /* FREECIV_JSON_CONNECTION */
46231
46232 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46233 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46234 }
46235 }
46236
46237 if (BV_ISSET(fields, 6)) {
46238 log_packet_detailed(" got field 'habitation'");
46239
46240#ifdef FREECIV_JSON_CONNECTION
46241 field_addr.name = "habitation";
46242#endif /* FREECIV_JSON_CONNECTION */
46243
46244 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46245 RECEIVE_PACKET_FIELD_ERROR(habitation);
46246 }
46247 }
46248
46249 if (BV_ISSET(fields, 7)) {
46250 log_packet_detailed(" got field 'life_support'");
46251
46252#ifdef FREECIV_JSON_CONNECTION
46253 field_addr.name = "life_support";
46254#endif /* FREECIV_JSON_CONNECTION */
46255
46256 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46257 RECEIVE_PACKET_FIELD_ERROR(life_support);
46258 }
46259 }
46260
46261 if (BV_ISSET(fields, 8)) {
46262 log_packet_detailed(" got field 'solar_panels'");
46263
46264#ifdef FREECIV_JSON_CONNECTION
46265 field_addr.name = "solar_panels";
46266#endif /* FREECIV_JSON_CONNECTION */
46267
46268 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46269 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46270 }
46271 }
46272
46273 if (BV_ISSET(fields, 9)) {
46274 log_packet_detailed(" got field 'launch_year'");
46275
46276#ifdef FREECIV_JSON_CONNECTION
46277 field_addr.name = "launch_year";
46278#endif /* FREECIV_JSON_CONNECTION */
46279
46280 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46281 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46282 }
46283 }
46284
46285 if (BV_ISSET(fields, 10)) {
46286 log_packet_detailed(" got field 'population'");
46287
46288#ifdef FREECIV_JSON_CONNECTION
46289 field_addr.name = "population";
46290#endif /* FREECIV_JSON_CONNECTION */
46291
46292 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46293 RECEIVE_PACKET_FIELD_ERROR(population);
46294 }
46295 }
46296
46297 if (BV_ISSET(fields, 11)) {
46298 log_packet_detailed(" got field 'mass'");
46299
46300#ifdef FREECIV_JSON_CONNECTION
46301 field_addr.name = "mass";
46302#endif /* FREECIV_JSON_CONNECTION */
46303
46304 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46306 }
46307 }
46308
46309 if (BV_ISSET(fields, 12)) {
46310 log_packet_detailed(" got field 'structure'");
46311
46312#ifdef FREECIV_JSON_CONNECTION
46313 field_addr.name = "structure";
46314#endif /* FREECIV_JSON_CONNECTION */
46315
46316 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46317 RECEIVE_PACKET_FIELD_ERROR(structure);
46318 }
46319 }
46320
46321 if (BV_ISSET(fields, 13)) {
46322 log_packet_detailed(" got field 'support_rate'");
46323
46324#ifdef FREECIV_JSON_CONNECTION
46325 field_addr.name = "support_rate";
46326#endif /* FREECIV_JSON_CONNECTION */
46327
46328 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46329 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46330 }
46331 }
46332
46333 if (BV_ISSET(fields, 14)) {
46334 log_packet_detailed(" got field 'energy_rate'");
46335
46336#ifdef FREECIV_JSON_CONNECTION
46337 field_addr.name = "energy_rate";
46338#endif /* FREECIV_JSON_CONNECTION */
46339
46340 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46341 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46342 }
46343 }
46344
46345 if (BV_ISSET(fields, 15)) {
46346 log_packet_detailed(" got field 'success_rate'");
46347
46348#ifdef FREECIV_JSON_CONNECTION
46349 field_addr.name = "success_rate";
46350#endif /* FREECIV_JSON_CONNECTION */
46351
46352 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46353 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46354 }
46355 }
46356
46357 if (BV_ISSET(fields, 16)) {
46358 log_packet_detailed(" got field 'travel_time'");
46359
46360#ifdef FREECIV_JSON_CONNECTION
46361 field_addr.name = "travel_time";
46362#endif /* FREECIV_JSON_CONNECTION */
46363
46364 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46365 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46366 }
46367 }
46368
46369 if (nullptr == old) {
46370 old = fc_malloc(sizeof(*old));
46372 *old = *real_packet;
46374 } else {
46375 *old = *real_packet;
46376 }
46377
46378#else /* FREECIV_DELTA_PROTOCOL */
46379#ifdef FREECIV_JSON_CONNECTION
46380 field_addr.name = "sship_state";
46381#endif /* FREECIV_JSON_CONNECTION */
46382
46383 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46384 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46385 }
46386
46387#ifdef FREECIV_JSON_CONNECTION
46388 field_addr.name = "structurals";
46389#endif /* FREECIV_JSON_CONNECTION */
46390
46391 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46392 RECEIVE_PACKET_FIELD_ERROR(structurals);
46393 }
46394
46395#ifdef FREECIV_JSON_CONNECTION
46396 field_addr.name = "components";
46397#endif /* FREECIV_JSON_CONNECTION */
46398
46399 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46400 RECEIVE_PACKET_FIELD_ERROR(components);
46401 }
46402
46403#ifdef FREECIV_JSON_CONNECTION
46404 field_addr.name = "modules";
46405#endif /* FREECIV_JSON_CONNECTION */
46406
46407 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46409 }
46410
46411#ifdef FREECIV_JSON_CONNECTION
46412 field_addr.name = "fuel";
46413#endif /* FREECIV_JSON_CONNECTION */
46414
46415 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46417 }
46418
46419#ifdef FREECIV_JSON_CONNECTION
46420 field_addr.name = "propulsion";
46421#endif /* FREECIV_JSON_CONNECTION */
46422
46423 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46424 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46425 }
46426
46427#ifdef FREECIV_JSON_CONNECTION
46428 field_addr.name = "habitation";
46429#endif /* FREECIV_JSON_CONNECTION */
46430
46431 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46432 RECEIVE_PACKET_FIELD_ERROR(habitation);
46433 }
46434
46435#ifdef FREECIV_JSON_CONNECTION
46436 field_addr.name = "life_support";
46437#endif /* FREECIV_JSON_CONNECTION */
46438
46439 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46440 RECEIVE_PACKET_FIELD_ERROR(life_support);
46441 }
46442
46443#ifdef FREECIV_JSON_CONNECTION
46444 field_addr.name = "solar_panels";
46445#endif /* FREECIV_JSON_CONNECTION */
46446
46447 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46448 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46449 }
46450
46451#ifdef FREECIV_JSON_CONNECTION
46452 field_addr.name = "launch_year";
46453#endif /* FREECIV_JSON_CONNECTION */
46454
46455 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46456 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46457 }
46458
46459#ifdef FREECIV_JSON_CONNECTION
46460 field_addr.name = "population";
46461#endif /* FREECIV_JSON_CONNECTION */
46462
46463 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46464 RECEIVE_PACKET_FIELD_ERROR(population);
46465 }
46466
46467#ifdef FREECIV_JSON_CONNECTION
46468 field_addr.name = "mass";
46469#endif /* FREECIV_JSON_CONNECTION */
46470
46471 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46473 }
46474
46475#ifdef FREECIV_JSON_CONNECTION
46476 field_addr.name = "structure";
46477#endif /* FREECIV_JSON_CONNECTION */
46478
46479 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46480 RECEIVE_PACKET_FIELD_ERROR(structure);
46481 }
46482
46483#ifdef FREECIV_JSON_CONNECTION
46484 field_addr.name = "support_rate";
46485#endif /* FREECIV_JSON_CONNECTION */
46486
46487 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46488 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46489 }
46490
46491#ifdef FREECIV_JSON_CONNECTION
46492 field_addr.name = "energy_rate";
46493#endif /* FREECIV_JSON_CONNECTION */
46494
46495 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46496 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46497 }
46498
46499#ifdef FREECIV_JSON_CONNECTION
46500 field_addr.name = "success_rate";
46501#endif /* FREECIV_JSON_CONNECTION */
46502
46503 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46504 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46505 }
46506
46507#ifdef FREECIV_JSON_CONNECTION
46508 field_addr.name = "travel_time";
46509#endif /* FREECIV_JSON_CONNECTION */
46510
46511 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46512 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46513 }
46514#endif /* FREECIV_DELTA_PROTOCOL */
46515
46517#undef FREE_PACKET_STRUCT
46518}
46519
46521{
46522 const struct packet_spaceship_info *real_packet = packet;
46523 int e;
46525
46526 log_packet_detailed("packet_spaceship_info_100: sending info about (%d)",
46527 real_packet->player_num);
46528
46529#ifdef FREECIV_DELTA_PROTOCOL
46531 struct packet_spaceship_info *old;
46532 bool differ;
46533 int different = 0;
46534 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_INFO;
46535
46536 if (nullptr == *hash) {
46538 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46539 }
46540 BV_CLR_ALL(fields);
46541
46542 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
46543 old = fc_malloc(sizeof(*old));
46544 /* temporary bitcopy just to insert correctly */
46545 *old = *real_packet;
46548 different = 1; /* Force to send. */
46549 }
46550
46551 differ = (old->sship_state != real_packet->sship_state);
46552 if (differ) {
46553 different++;
46554 BV_SET(fields, 0);
46555 }
46556
46557 differ = (old->structurals != real_packet->structurals);
46558 if (differ) {
46559 different++;
46560 BV_SET(fields, 1);
46561 }
46562
46563 differ = (old->components != real_packet->components);
46564 if (differ) {
46565 different++;
46566 BV_SET(fields, 2);
46567 }
46568
46569 differ = (old->modules != real_packet->modules);
46570 if (differ) {
46571 different++;
46572 BV_SET(fields, 3);
46573 }
46574
46575 differ = (old->fuel != real_packet->fuel);
46576 if (differ) {
46577 different++;
46578 BV_SET(fields, 4);
46579 }
46580
46581 differ = (old->propulsion != real_packet->propulsion);
46582 if (differ) {
46583 different++;
46584 BV_SET(fields, 5);
46585 }
46586
46587 differ = (old->habitation != real_packet->habitation);
46588 if (differ) {
46589 different++;
46590 BV_SET(fields, 6);
46591 }
46592
46593 differ = (old->life_support != real_packet->life_support);
46594 if (differ) {
46595 different++;
46596 BV_SET(fields, 7);
46597 }
46598
46599 differ = (old->solar_panels != real_packet->solar_panels);
46600 if (differ) {
46601 different++;
46602 BV_SET(fields, 8);
46603 }
46604
46605 differ = (old->launch_year != real_packet->launch_year);
46606 if (differ) {
46607 different++;
46608 BV_SET(fields, 9);
46609 }
46610
46611 differ = (old->population != real_packet->population);
46612 if (differ) {
46613 different++;
46614 BV_SET(fields, 10);
46615 }
46616
46617 differ = (old->mass != real_packet->mass);
46618 if (differ) {
46619 different++;
46620 BV_SET(fields, 11);
46621 }
46622
46623 differ = !BV_ARE_EQUAL(old->structure, real_packet->structure);
46624 if (differ) {
46625 different++;
46626 BV_SET(fields, 12);
46627 }
46628
46629 differ = ((int) (old->support_rate * 10000) != (int) (real_packet->support_rate * 10000));
46630 if (differ) {
46631 different++;
46632 BV_SET(fields, 13);
46633 }
46634
46635 differ = ((int) (old->energy_rate * 10000) != (int) (real_packet->energy_rate * 10000));
46636 if (differ) {
46637 different++;
46638 BV_SET(fields, 14);
46639 }
46640
46641 differ = ((int) (old->success_rate * 10000) != (int) (real_packet->success_rate * 10000));
46642 if (differ) {
46643 different++;
46644 BV_SET(fields, 15);
46645 }
46646
46647 differ = ((int) (old->travel_time * 10000) != (int) (real_packet->travel_time * 10000));
46648 if (differ) {
46649 different++;
46650 BV_SET(fields, 16);
46651 }
46652
46653 if (different == 0) {
46654 log_packet_detailed(" no change -> discard");
46656 }
46657#endif /* FREECIV_DELTA_PROTOCOL */
46658
46659#ifdef FREECIV_JSON_CONNECTION
46660 struct plocation field_addr;
46661 {
46662 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46665 }
46666#endif /* FREECIV_JSON_CONNECTION */
46667
46668#ifdef FREECIV_JSON_CONNECTION
46669 field_addr.name = "player_num";
46670#endif /* FREECIV_JSON_CONNECTION */
46671 e = 0;
46672
46673 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
46674
46675 if (e) {
46676 log_packet_detailed("'player_num' field error detected");
46677 }
46678
46679#ifdef FREECIV_DELTA_PROTOCOL
46680#ifdef FREECIV_JSON_CONNECTION
46681 field_addr.name = "fields";
46682#endif /* FREECIV_JSON_CONNECTION */
46683 e = 0;
46684 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46685 if (e) {
46686 log_packet_detailed("fields bitvector error detected");
46687 }
46688
46689 if (BV_ISSET(fields, 0)) {
46690 log_packet_detailed(" field 'sship_state' has changed");
46691
46692#ifdef FREECIV_JSON_CONNECTION
46693 field_addr.name = "sship_state";
46694#endif /* FREECIV_JSON_CONNECTION */
46695 e = 0;
46696
46697 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46698
46699 if (e) {
46700 log_packet_detailed("'sship_state' field error detected");
46701 }
46702 }
46703
46704 if (BV_ISSET(fields, 1)) {
46705 log_packet_detailed(" field 'structurals' has changed");
46706
46707#ifdef FREECIV_JSON_CONNECTION
46708 field_addr.name = "structurals";
46709#endif /* FREECIV_JSON_CONNECTION */
46710 e = 0;
46711
46712 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46713
46714 if (e) {
46715 log_packet_detailed("'structurals' field error detected");
46716 }
46717 }
46718
46719 if (BV_ISSET(fields, 2)) {
46720 log_packet_detailed(" field 'components' has changed");
46721
46722#ifdef FREECIV_JSON_CONNECTION
46723 field_addr.name = "components";
46724#endif /* FREECIV_JSON_CONNECTION */
46725 e = 0;
46726
46727 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46728
46729 if (e) {
46730 log_packet_detailed("'components' field error detected");
46731 }
46732 }
46733
46734 if (BV_ISSET(fields, 3)) {
46735 log_packet_detailed(" field 'modules' has changed");
46736
46737#ifdef FREECIV_JSON_CONNECTION
46738 field_addr.name = "modules";
46739#endif /* FREECIV_JSON_CONNECTION */
46740 e = 0;
46741
46742 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46743
46744 if (e) {
46745 log_packet_detailed("'modules' field error detected");
46746 }
46747 }
46748
46749 if (BV_ISSET(fields, 4)) {
46750 log_packet_detailed(" field 'fuel' has changed");
46751
46752#ifdef FREECIV_JSON_CONNECTION
46753 field_addr.name = "fuel";
46754#endif /* FREECIV_JSON_CONNECTION */
46755 e = 0;
46756
46757 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46758
46759 if (e) {
46760 log_packet_detailed("'fuel' field error detected");
46761 }
46762 }
46763
46764 if (BV_ISSET(fields, 5)) {
46765 log_packet_detailed(" field 'propulsion' has changed");
46766
46767#ifdef FREECIV_JSON_CONNECTION
46768 field_addr.name = "propulsion";
46769#endif /* FREECIV_JSON_CONNECTION */
46770 e = 0;
46771
46772 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
46773
46774 if (e) {
46775 log_packet_detailed("'propulsion' field error detected");
46776 }
46777 }
46778
46779 if (BV_ISSET(fields, 6)) {
46780 log_packet_detailed(" field 'habitation' has changed");
46781
46782#ifdef FREECIV_JSON_CONNECTION
46783 field_addr.name = "habitation";
46784#endif /* FREECIV_JSON_CONNECTION */
46785 e = 0;
46786
46787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
46788
46789 if (e) {
46790 log_packet_detailed("'habitation' field error detected");
46791 }
46792 }
46793
46794 if (BV_ISSET(fields, 7)) {
46795 log_packet_detailed(" field 'life_support' has changed");
46796
46797#ifdef FREECIV_JSON_CONNECTION
46798 field_addr.name = "life_support";
46799#endif /* FREECIV_JSON_CONNECTION */
46800 e = 0;
46801
46802 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
46803
46804 if (e) {
46805 log_packet_detailed("'life_support' field error detected");
46806 }
46807 }
46808
46809 if (BV_ISSET(fields, 8)) {
46810 log_packet_detailed(" field 'solar_panels' has changed");
46811
46812#ifdef FREECIV_JSON_CONNECTION
46813 field_addr.name = "solar_panels";
46814#endif /* FREECIV_JSON_CONNECTION */
46815 e = 0;
46816
46817 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
46818
46819 if (e) {
46820 log_packet_detailed("'solar_panels' field error detected");
46821 }
46822 }
46823
46824 if (BV_ISSET(fields, 9)) {
46825 log_packet_detailed(" field 'launch_year' has changed");
46826
46827#ifdef FREECIV_JSON_CONNECTION
46828 field_addr.name = "launch_year";
46829#endif /* FREECIV_JSON_CONNECTION */
46830 e = 0;
46831
46832 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46833
46834 if (e) {
46835 log_packet_detailed("'launch_year' field error detected");
46836 }
46837 }
46838
46839 if (BV_ISSET(fields, 10)) {
46840 log_packet_detailed(" field 'population' has changed");
46841
46842#ifdef FREECIV_JSON_CONNECTION
46843 field_addr.name = "population";
46844#endif /* FREECIV_JSON_CONNECTION */
46845 e = 0;
46846
46847 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46848
46849 if (e) {
46850 log_packet_detailed("'population' field error detected");
46851 }
46852 }
46853
46854 if (BV_ISSET(fields, 11)) {
46855 log_packet_detailed(" field 'mass' has changed");
46856
46857#ifdef FREECIV_JSON_CONNECTION
46858 field_addr.name = "mass";
46859#endif /* FREECIV_JSON_CONNECTION */
46860 e = 0;
46861
46862 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
46863
46864 if (e) {
46865 log_packet_detailed("'mass' field error detected");
46866 }
46867 }
46868
46869 if (BV_ISSET(fields, 12)) {
46870 log_packet_detailed(" field 'structure' has changed");
46871
46872#ifdef FREECIV_JSON_CONNECTION
46873 field_addr.name = "structure";
46874#endif /* FREECIV_JSON_CONNECTION */
46875 e = 0;
46876
46877 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
46878
46879 if (e) {
46880 log_packet_detailed("'structure' field error detected");
46881 }
46882 }
46883
46884 if (BV_ISSET(fields, 13)) {
46885 log_packet_detailed(" field 'support_rate' has changed");
46886
46887#ifdef FREECIV_JSON_CONNECTION
46888 field_addr.name = "support_rate";
46889#endif /* FREECIV_JSON_CONNECTION */
46890 e = 0;
46891
46892 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
46893
46894 if (e) {
46895 log_packet_detailed("'support_rate' field error detected");
46896 }
46897 }
46898
46899 if (BV_ISSET(fields, 14)) {
46900 log_packet_detailed(" field 'energy_rate' has changed");
46901
46902#ifdef FREECIV_JSON_CONNECTION
46903 field_addr.name = "energy_rate";
46904#endif /* FREECIV_JSON_CONNECTION */
46905 e = 0;
46906
46907 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
46908
46909 if (e) {
46910 log_packet_detailed("'energy_rate' field error detected");
46911 }
46912 }
46913
46914 if (BV_ISSET(fields, 15)) {
46915 log_packet_detailed(" field 'success_rate' has changed");
46916
46917#ifdef FREECIV_JSON_CONNECTION
46918 field_addr.name = "success_rate";
46919#endif /* FREECIV_JSON_CONNECTION */
46920 e = 0;
46921
46922 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
46923
46924 if (e) {
46925 log_packet_detailed("'success_rate' field error detected");
46926 }
46927 }
46928
46929 if (BV_ISSET(fields, 16)) {
46930 log_packet_detailed(" field 'travel_time' has changed");
46931
46932#ifdef FREECIV_JSON_CONNECTION
46933 field_addr.name = "travel_time";
46934#endif /* FREECIV_JSON_CONNECTION */
46935 e = 0;
46936
46937 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
46938
46939 if (e) {
46940 log_packet_detailed("'travel_time' field error detected");
46941 }
46942 }
46943
46944 *old = *real_packet;
46945
46946#else /* FREECIV_DELTA_PROTOCOL */
46947#ifdef FREECIV_JSON_CONNECTION
46948 field_addr.name = "sship_state";
46949#endif /* FREECIV_JSON_CONNECTION */
46950 e = 0;
46951
46952 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46953
46954 if (e) {
46955 log_packet_detailed("'sship_state' field error detected");
46956 }
46957
46958#ifdef FREECIV_JSON_CONNECTION
46959 field_addr.name = "structurals";
46960#endif /* FREECIV_JSON_CONNECTION */
46961 e = 0;
46962
46963 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46964
46965 if (e) {
46966 log_packet_detailed("'structurals' field error detected");
46967 }
46968
46969#ifdef FREECIV_JSON_CONNECTION
46970 field_addr.name = "components";
46971#endif /* FREECIV_JSON_CONNECTION */
46972 e = 0;
46973
46974 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46975
46976 if (e) {
46977 log_packet_detailed("'components' field error detected");
46978 }
46979
46980#ifdef FREECIV_JSON_CONNECTION
46981 field_addr.name = "modules";
46982#endif /* FREECIV_JSON_CONNECTION */
46983 e = 0;
46984
46985 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46986
46987 if (e) {
46988 log_packet_detailed("'modules' field error detected");
46989 }
46990
46991#ifdef FREECIV_JSON_CONNECTION
46992 field_addr.name = "fuel";
46993#endif /* FREECIV_JSON_CONNECTION */
46994 e = 0;
46995
46996 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46997
46998 if (e) {
46999 log_packet_detailed("'fuel' field error detected");
47000 }
47001
47002#ifdef FREECIV_JSON_CONNECTION
47003 field_addr.name = "propulsion";
47004#endif /* FREECIV_JSON_CONNECTION */
47005 e = 0;
47006
47007 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
47008
47009 if (e) {
47010 log_packet_detailed("'propulsion' field error detected");
47011 }
47012
47013#ifdef FREECIV_JSON_CONNECTION
47014 field_addr.name = "habitation";
47015#endif /* FREECIV_JSON_CONNECTION */
47016 e = 0;
47017
47018 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
47019
47020 if (e) {
47021 log_packet_detailed("'habitation' field error detected");
47022 }
47023
47024#ifdef FREECIV_JSON_CONNECTION
47025 field_addr.name = "life_support";
47026#endif /* FREECIV_JSON_CONNECTION */
47027 e = 0;
47028
47029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
47030
47031 if (e) {
47032 log_packet_detailed("'life_support' field error detected");
47033 }
47034
47035#ifdef FREECIV_JSON_CONNECTION
47036 field_addr.name = "solar_panels";
47037#endif /* FREECIV_JSON_CONNECTION */
47038 e = 0;
47039
47040 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
47041
47042 if (e) {
47043 log_packet_detailed("'solar_panels' field error detected");
47044 }
47045
47046#ifdef FREECIV_JSON_CONNECTION
47047 field_addr.name = "launch_year";
47048#endif /* FREECIV_JSON_CONNECTION */
47049 e = 0;
47050
47051 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
47052
47053 if (e) {
47054 log_packet_detailed("'launch_year' field error detected");
47055 }
47056
47057#ifdef FREECIV_JSON_CONNECTION
47058 field_addr.name = "population";
47059#endif /* FREECIV_JSON_CONNECTION */
47060 e = 0;
47061
47062 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
47063
47064 if (e) {
47065 log_packet_detailed("'population' field error detected");
47066 }
47067
47068#ifdef FREECIV_JSON_CONNECTION
47069 field_addr.name = "mass";
47070#endif /* FREECIV_JSON_CONNECTION */
47071 e = 0;
47072
47073 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
47074
47075 if (e) {
47076 log_packet_detailed("'mass' field error detected");
47077 }
47078
47079#ifdef FREECIV_JSON_CONNECTION
47080 field_addr.name = "structure";
47081#endif /* FREECIV_JSON_CONNECTION */
47082 e = 0;
47083
47084 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
47085
47086 if (e) {
47087 log_packet_detailed("'structure' field error detected");
47088 }
47089
47090#ifdef FREECIV_JSON_CONNECTION
47091 field_addr.name = "support_rate";
47092#endif /* FREECIV_JSON_CONNECTION */
47093 e = 0;
47094
47095 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
47096
47097 if (e) {
47098 log_packet_detailed("'support_rate' field error detected");
47099 }
47100
47101#ifdef FREECIV_JSON_CONNECTION
47102 field_addr.name = "energy_rate";
47103#endif /* FREECIV_JSON_CONNECTION */
47104 e = 0;
47105
47106 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
47107
47108 if (e) {
47109 log_packet_detailed("'energy_rate' field error detected");
47110 }
47111
47112#ifdef FREECIV_JSON_CONNECTION
47113 field_addr.name = "success_rate";
47114#endif /* FREECIV_JSON_CONNECTION */
47115 e = 0;
47116
47117 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
47118
47119 if (e) {
47120 log_packet_detailed("'success_rate' field error detected");
47121 }
47122
47123#ifdef FREECIV_JSON_CONNECTION
47124 field_addr.name = "travel_time";
47125#endif /* FREECIV_JSON_CONNECTION */
47126 e = 0;
47127
47128 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
47129
47130 if (e) {
47131 log_packet_detailed("'travel_time' field error detected");
47132 }
47133#endif /* FREECIV_DELTA_PROTOCOL */
47134
47136}
47137
47139{
47140 if (!pc->used) {
47141 log_error("WARNING: trying to send data to the closed connection %s",
47143 return -1;
47144 }
47145 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet != nullptr, -1,
47146 "Handler for PACKET_SPACESHIP_INFO not installed");
47147 return pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet(pc, packet);
47148}
47149
47150void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
47151{
47152 conn_list_iterate(dest, pconn) {
47155}
47156
47157static inline void init_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47158{
47159 memset(packet, 0, sizeof(*packet));
47160
47162 packet->helptext = strvec_new();
47163}
47164
47165static inline void free_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47166{
47167 if (packet->helptext) {
47168 strvec_destroy(packet->helptext);
47169 packet->helptext = nullptr;
47170 }
47172}
47173
47174static inline void destroy_packet_ruleset_unit(void *packet)
47175{
47177 free(packet);
47178}
47179
47180#ifdef FREECIV_DELTA_PROTOCOL
47181#define hash_packet_ruleset_unit_100 hash_const
47182#define cmp_packet_ruleset_unit_100 cmp_const
47184#endif /* FREECIV_DELTA_PROTOCOL */
47185
47187{
47188#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit(_packet)
47190
47191#ifdef FREECIV_JSON_CONNECTION
47192 struct plocation field_addr;
47193 {
47194 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
47197 }
47198#endif /* FREECIV_JSON_CONNECTION */
47199
47200 log_packet_detailed("packet_ruleset_unit_100: got info about ()");
47201
47202#ifdef FREECIV_DELTA_PROTOCOL
47204 struct packet_ruleset_unit *old;
47205 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT;
47206
47207 if (nullptr == *hash) {
47209 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
47210 }
47211
47212 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
47213 real_packet->id = old->id;
47214 sz_strlcpy(real_packet->name, old->name);
47215 sz_strlcpy(real_packet->rule_name, old->rule_name);
47216 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
47217 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
47218 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
47219 sz_strlcpy(real_packet->sound_move, old->sound_move);
47220 sz_strlcpy(real_packet->sound_move_alt, old->sound_move_alt);
47221 sz_strlcpy(real_packet->sound_fight, old->sound_fight);
47222 sz_strlcpy(real_packet->sound_fight_alt, old->sound_fight_alt);
47223 real_packet->unit_class_id = old->unit_class_id;
47224 real_packet->build_cost = old->build_cost;
47225 real_packet->pop_cost = old->pop_cost;
47226 real_packet->spectype_id = old->spectype_id;
47227 real_packet->attack_strength = old->attack_strength;
47228 real_packet->defense_strength = old->defense_strength;
47229 real_packet->move_rate = old->move_rate;
47230 requirement_vector_copy(&real_packet->build_reqs, &old->build_reqs);
47231 real_packet->vision_radius_sq = old->vision_radius_sq;
47232 real_packet->transport_capacity = old->transport_capacity;
47233 real_packet->hp = old->hp;
47234 real_packet->firepower = old->firepower;
47235 real_packet->obsoleted_by = old->obsoleted_by;
47236 real_packet->converted_to = old->converted_to;
47237 real_packet->convert_time = old->convert_time;
47238 real_packet->fuel = old->fuel;
47239 real_packet->happy_cost = old->happy_cost;
47240 {
47241 int i;
47242
47243 for (i = 0; i < O_LAST; i++) {
47244 real_packet->upkeep[i] = old->upkeep[i];
47245 }
47246 }
47247 real_packet->paratroopers_range = old->paratroopers_range;
47248 real_packet->veteran_levels = old->veteran_levels;
47249 {
47250 int i;
47251
47252 for (i = 0; i < old->veteran_levels; i++) {
47253 sz_strlcpy(real_packet->veteran_name[i], old->veteran_name[i]);
47254 }
47255 }
47256 {
47257 int i;
47258
47259 for (i = 0; i < old->veteran_levels; i++) {
47260 real_packet->power_fact[i] = old->power_fact[i];
47261 }
47262 }
47263 {
47264 int i;
47265
47266 for (i = 0; i < old->veteran_levels; i++) {
47267 real_packet->move_bonus[i] = old->move_bonus[i];
47268 }
47269 }
47270 {
47271 int i;
47272
47273 for (i = 0; i < old->veteran_levels; i++) {
47274 real_packet->base_raise_chance[i] = old->base_raise_chance[i];
47275 }
47276 }
47277 {
47278 int i;
47279
47280 for (i = 0; i < old->veteran_levels; i++) {
47281 real_packet->work_raise_chance[i] = old->work_raise_chance[i];
47282 }
47283 }
47284 real_packet->bombard_rate = old->bombard_rate;
47285 real_packet->city_size = old->city_size;
47286 real_packet->city_slots = old->city_slots;
47287 real_packet->tp_defense = old->tp_defense;
47288 real_packet->cargo = old->cargo;
47289 real_packet->targets = old->targets;
47290 real_packet->embarks = old->embarks;
47291 real_packet->disembarks = old->disembarks;
47292 real_packet->vlayer = old->vlayer;
47293 if (old->helptext) {
47294 strvec_copy(real_packet->helptext, old->helptext);
47295 } else {
47296 strvec_clear(real_packet->helptext);
47297 }
47298 real_packet->flags = old->flags;
47299 real_packet->roles = old->roles;
47300 real_packet->worker = old->worker;
47301 } else {
47302 /* packet is already initialized empty */
47303 log_packet_detailed(" no old info");
47304 }
47305
47306#ifdef FREECIV_JSON_CONNECTION
47307 field_addr.name = "fields";
47308#endif /* FREECIV_JSON_CONNECTION */
47309 DIO_BV_GET(&din, &field_addr, fields);
47310
47311 if (BV_ISSET(fields, 0)) {
47312 log_packet_detailed(" got field 'id'");
47313
47314#ifdef FREECIV_JSON_CONNECTION
47315 field_addr.name = "id";
47316#endif /* FREECIV_JSON_CONNECTION */
47317
47318 {
47319 int readin;
47320
47321 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
47323 }
47324 real_packet->id = readin;
47325 }
47326 }
47327
47328 if (BV_ISSET(fields, 1)) {
47329 log_packet_detailed(" got field 'name'");
47330
47331#ifdef FREECIV_JSON_CONNECTION
47332 field_addr.name = "name";
47333#endif /* FREECIV_JSON_CONNECTION */
47334
47335 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
47337 }
47338 }
47339
47340 if (BV_ISSET(fields, 2)) {
47341 log_packet_detailed(" got field 'rule_name'");
47342
47343#ifdef FREECIV_JSON_CONNECTION
47344 field_addr.name = "rule_name";
47345#endif /* FREECIV_JSON_CONNECTION */
47346
47347 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
47348 RECEIVE_PACKET_FIELD_ERROR(rule_name);
47349 }
47350 }
47351
47352 if (BV_ISSET(fields, 3)) {
47353 log_packet_detailed(" got field 'graphic_str'");
47354
47355#ifdef FREECIV_JSON_CONNECTION
47356 field_addr.name = "graphic_str";
47357#endif /* FREECIV_JSON_CONNECTION */
47358
47359 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
47360 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
47361 }
47362 }
47363
47364 if (BV_ISSET(fields, 4)) {
47365 log_packet_detailed(" got field 'graphic_alt'");
47366
47367#ifdef FREECIV_JSON_CONNECTION
47368 field_addr.name = "graphic_alt";
47369#endif /* FREECIV_JSON_CONNECTION */
47370
47371 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
47372 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
47373 }
47374 }
47375
47376 if (BV_ISSET(fields, 5)) {
47377 log_packet_detailed(" got field 'graphic_alt2'");
47378
47379#ifdef FREECIV_JSON_CONNECTION
47380 field_addr.name = "graphic_alt2";
47381#endif /* FREECIV_JSON_CONNECTION */
47382
47383 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
47384 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
47385 }
47386 }
47387
47388 if (BV_ISSET(fields, 6)) {
47389 log_packet_detailed(" got field 'sound_move'");
47390
47391#ifdef FREECIV_JSON_CONNECTION
47392 field_addr.name = "sound_move";
47393#endif /* FREECIV_JSON_CONNECTION */
47394
47395 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
47396 RECEIVE_PACKET_FIELD_ERROR(sound_move);
47397 }
47398 }
47399
47400 if (BV_ISSET(fields, 7)) {
47401 log_packet_detailed(" got field 'sound_move_alt'");
47402
47403#ifdef FREECIV_JSON_CONNECTION
47404 field_addr.name = "sound_move_alt";
47405#endif /* FREECIV_JSON_CONNECTION */
47406
47407 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
47408 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
47409 }
47410 }
47411
47412 if (BV_ISSET(fields, 8)) {
47413 log_packet_detailed(" got field 'sound_fight'");
47414
47415#ifdef FREECIV_JSON_CONNECTION
47416 field_addr.name = "sound_fight";
47417#endif /* FREECIV_JSON_CONNECTION */
47418
47419 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
47420 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
47421 }
47422 }
47423
47424 if (BV_ISSET(fields, 9)) {
47425 log_packet_detailed(" got field 'sound_fight_alt'");
47426
47427#ifdef FREECIV_JSON_CONNECTION
47428 field_addr.name = "sound_fight_alt";
47429#endif /* FREECIV_JSON_CONNECTION */
47430
47431 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
47432 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
47433 }
47434 }
47435
47436 if (BV_ISSET(fields, 10)) {
47437 log_packet_detailed(" got field 'unit_class_id'");
47438
47439#ifdef FREECIV_JSON_CONNECTION
47440 field_addr.name = "unit_class_id";
47441#endif /* FREECIV_JSON_CONNECTION */
47442
47443 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
47444 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
47445 }
47446 }
47447
47448 if (BV_ISSET(fields, 11)) {
47449 log_packet_detailed(" got field 'build_cost'");
47450
47451#ifdef FREECIV_JSON_CONNECTION
47452 field_addr.name = "build_cost";
47453#endif /* FREECIV_JSON_CONNECTION */
47454
47455 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
47456 RECEIVE_PACKET_FIELD_ERROR(build_cost);
47457 }
47458 }
47459
47460 if (BV_ISSET(fields, 12)) {
47461 log_packet_detailed(" got field 'pop_cost'");
47462
47463#ifdef FREECIV_JSON_CONNECTION
47464 field_addr.name = "pop_cost";
47465#endif /* FREECIV_JSON_CONNECTION */
47466
47467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
47469 }
47470 }
47471
47472 if (BV_ISSET(fields, 13)) {
47473 log_packet_detailed(" got field 'spectype_id'");
47474
47475#ifdef FREECIV_JSON_CONNECTION
47476 field_addr.name = "spectype_id";
47477#endif /* FREECIV_JSON_CONNECTION */
47478
47479 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->spectype_id)) {
47480 RECEIVE_PACKET_FIELD_ERROR(spectype_id);
47481 }
47482 }
47483
47484 if (BV_ISSET(fields, 14)) {
47485 log_packet_detailed(" got field 'attack_strength'");
47486
47487#ifdef FREECIV_JSON_CONNECTION
47488 field_addr.name = "attack_strength";
47489#endif /* FREECIV_JSON_CONNECTION */
47490
47491 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
47492 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
47493 }
47494 }
47495
47496 if (BV_ISSET(fields, 15)) {
47497 log_packet_detailed(" got field 'defense_strength'");
47498
47499#ifdef FREECIV_JSON_CONNECTION
47500 field_addr.name = "defense_strength";
47501#endif /* FREECIV_JSON_CONNECTION */
47502
47503 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
47504 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
47505 }
47506 }
47507
47508 if (BV_ISSET(fields, 16)) {
47509 log_packet_detailed(" got field 'move_rate'");
47510
47511#ifdef FREECIV_JSON_CONNECTION
47512 field_addr.name = "move_rate";
47513#endif /* FREECIV_JSON_CONNECTION */
47514
47515 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
47516 RECEIVE_PACKET_FIELD_ERROR(move_rate);
47517 }
47518 }
47519
47520 if (BV_ISSET(fields, 17)) {
47521 log_packet_detailed(" got field 'build_reqs'");
47522
47523#ifdef FREECIV_JSON_CONNECTION
47524 field_addr.name = "build_reqs";
47525#endif /* FREECIV_JSON_CONNECTION */
47526
47527 {
47528 int i;
47529
47530 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
47531 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47532 }
47534
47535#ifdef FREECIV_JSON_CONNECTION
47536 /* Enter array. */
47537 field_addr.sub_location = plocation_elem_new(0);
47538#endif /* FREECIV_JSON_CONNECTION */
47539
47540 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
47541#ifdef FREECIV_JSON_CONNECTION
47542 /* Next array element */
47543 field_addr.sub_location->number = i;
47544#endif /* FREECIV_JSON_CONNECTION */
47545
47546 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
47547 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47548 }
47549 }
47550
47551#ifdef FREECIV_JSON_CONNECTION
47552 /* Exit array. */
47553 FC_FREE(field_addr.sub_location);
47554#endif /* FREECIV_JSON_CONNECTION */
47555 }
47556 }
47557
47558 if (BV_ISSET(fields, 18)) {
47559 log_packet_detailed(" got field 'vision_radius_sq'");
47560
47561#ifdef FREECIV_JSON_CONNECTION
47562 field_addr.name = "vision_radius_sq";
47563#endif /* FREECIV_JSON_CONNECTION */
47564
47565 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
47566 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
47567 }
47568 }
47569
47570 if (BV_ISSET(fields, 19)) {
47571 log_packet_detailed(" got field 'transport_capacity'");
47572
47573#ifdef FREECIV_JSON_CONNECTION
47574 field_addr.name = "transport_capacity";
47575#endif /* FREECIV_JSON_CONNECTION */
47576
47577 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
47578 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
47579 }
47580 }
47581
47582 if (BV_ISSET(fields, 20)) {
47583 log_packet_detailed(" got field 'hp'");
47584
47585#ifdef FREECIV_JSON_CONNECTION
47586 field_addr.name = "hp";
47587#endif /* FREECIV_JSON_CONNECTION */
47588
47589 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
47591 }
47592 }
47593
47594 if (BV_ISSET(fields, 21)) {
47595 log_packet_detailed(" got field 'firepower'");
47596
47597#ifdef FREECIV_JSON_CONNECTION
47598 field_addr.name = "firepower";
47599#endif /* FREECIV_JSON_CONNECTION */
47600
47601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
47602 RECEIVE_PACKET_FIELD_ERROR(firepower);
47603 }
47604 }
47605
47606 if (BV_ISSET(fields, 22)) {
47607 log_packet_detailed(" got field 'obsoleted_by'");
47608
47609#ifdef FREECIV_JSON_CONNECTION
47610 field_addr.name = "obsoleted_by";
47611#endif /* FREECIV_JSON_CONNECTION */
47612
47613 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
47614 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
47615 }
47616 }
47617
47618 if (BV_ISSET(fields, 23)) {
47619 log_packet_detailed(" got field 'converted_to'");
47620
47621#ifdef FREECIV_JSON_CONNECTION
47622 field_addr.name = "converted_to";
47623#endif /* FREECIV_JSON_CONNECTION */
47624
47625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
47626 RECEIVE_PACKET_FIELD_ERROR(converted_to);
47627 }
47628 }
47629
47630 if (BV_ISSET(fields, 24)) {
47631 log_packet_detailed(" got field 'convert_time'");
47632
47633#ifdef FREECIV_JSON_CONNECTION
47634 field_addr.name = "convert_time";
47635#endif /* FREECIV_JSON_CONNECTION */
47636
47637 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
47638 RECEIVE_PACKET_FIELD_ERROR(convert_time);
47639 }
47640 }
47641
47642 if (BV_ISSET(fields, 25)) {
47643 log_packet_detailed(" got field 'fuel'");
47644
47645#ifdef FREECIV_JSON_CONNECTION
47646 field_addr.name = "fuel";
47647#endif /* FREECIV_JSON_CONNECTION */
47648
47649 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
47651 }
47652 }
47653
47654 if (BV_ISSET(fields, 26)) {
47655 log_packet_detailed(" got field 'happy_cost'");
47656
47657#ifdef FREECIV_JSON_CONNECTION
47658 field_addr.name = "happy_cost";
47659#endif /* FREECIV_JSON_CONNECTION */
47660
47661 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
47662 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
47663 }
47664 }
47665
47666 if (BV_ISSET(fields, 27)) {
47667 log_packet_detailed(" got field 'upkeep'");
47668
47669#ifdef FREECIV_JSON_CONNECTION
47670 field_addr.name = "upkeep";
47671#endif /* FREECIV_JSON_CONNECTION */
47672
47673 {
47674 int i;
47675
47676
47677#ifdef FREECIV_JSON_CONNECTION
47678 /* Enter array. */
47679 field_addr.sub_location = plocation_elem_new(0);
47680#endif /* FREECIV_JSON_CONNECTION */
47681
47682 for (i = 0; i < O_LAST; i++) {
47683#ifdef FREECIV_JSON_CONNECTION
47684 /* Next array element */
47685 field_addr.sub_location->number = i;
47686#endif /* FREECIV_JSON_CONNECTION */
47687
47688 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
47690 }
47691 }
47692
47693#ifdef FREECIV_JSON_CONNECTION
47694 /* Exit array. */
47695 FC_FREE(field_addr.sub_location);
47696#endif /* FREECIV_JSON_CONNECTION */
47697 }
47698 }
47699
47700 if (BV_ISSET(fields, 28)) {
47701 log_packet_detailed(" got field 'paratroopers_range'");
47702
47703#ifdef FREECIV_JSON_CONNECTION
47704 field_addr.name = "paratroopers_range";
47705#endif /* FREECIV_JSON_CONNECTION */
47706
47707 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
47708 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
47709 }
47710 }
47711
47712 if (BV_ISSET(fields, 29)) {
47713 log_packet_detailed(" got field 'veteran_levels'");
47714
47715#ifdef FREECIV_JSON_CONNECTION
47716 field_addr.name = "veteran_levels";
47717#endif /* FREECIV_JSON_CONNECTION */
47718
47719 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
47720 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
47721 }
47722 }
47723
47724 if (BV_ISSET(fields, 30)) {
47725 log_packet_detailed(" got field 'veteran_name'");
47726
47727#ifdef FREECIV_JSON_CONNECTION
47728 field_addr.name = "veteran_name";
47729#endif /* FREECIV_JSON_CONNECTION */
47730
47731 {
47732 int i;
47733
47734 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47735 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
47736 }
47737
47738#ifdef FREECIV_JSON_CONNECTION
47739 /* Enter array. */
47740 field_addr.sub_location = plocation_elem_new(0);
47741#endif /* FREECIV_JSON_CONNECTION */
47742
47743 for (i = 0; i < real_packet->veteran_levels; i++) {
47744#ifdef FREECIV_JSON_CONNECTION
47745 /* Next array element */
47746 field_addr.sub_location->number = i;
47747#endif /* FREECIV_JSON_CONNECTION */
47748
47749 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
47750 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
47751 }
47752 }
47753
47754#ifdef FREECIV_JSON_CONNECTION
47755 /* Exit array. */
47756 FC_FREE(field_addr.sub_location);
47757#endif /* FREECIV_JSON_CONNECTION */
47758 }
47759 }
47760
47761 if (BV_ISSET(fields, 31)) {
47762 log_packet_detailed(" got field 'power_fact'");
47763
47764#ifdef FREECIV_JSON_CONNECTION
47765 field_addr.name = "power_fact";
47766#endif /* FREECIV_JSON_CONNECTION */
47767
47768 {
47769 int i;
47770
47771 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47772 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
47773 }
47774
47775#ifdef FREECIV_JSON_CONNECTION
47776 /* Enter array. */
47777 field_addr.sub_location = plocation_elem_new(0);
47778#endif /* FREECIV_JSON_CONNECTION */
47779
47780 for (i = 0; i < real_packet->veteran_levels; i++) {
47781#ifdef FREECIV_JSON_CONNECTION
47782 /* Next array element */
47783 field_addr.sub_location->number = i;
47784#endif /* FREECIV_JSON_CONNECTION */
47785
47786 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
47787 RECEIVE_PACKET_FIELD_ERROR(power_fact);
47788 }
47789 }
47790
47791#ifdef FREECIV_JSON_CONNECTION
47792 /* Exit array. */
47793 FC_FREE(field_addr.sub_location);
47794#endif /* FREECIV_JSON_CONNECTION */
47795 }
47796 }
47797
47798 if (BV_ISSET(fields, 32)) {
47799 log_packet_detailed(" got field 'move_bonus'");
47800
47801#ifdef FREECIV_JSON_CONNECTION
47802 field_addr.name = "move_bonus";
47803#endif /* FREECIV_JSON_CONNECTION */
47804
47805 {
47806 int i;
47807
47808 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47809 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
47810 }
47811
47812#ifdef FREECIV_JSON_CONNECTION
47813 /* Enter array. */
47814 field_addr.sub_location = plocation_elem_new(0);
47815#endif /* FREECIV_JSON_CONNECTION */
47816
47817 for (i = 0; i < real_packet->veteran_levels; i++) {
47818#ifdef FREECIV_JSON_CONNECTION
47819 /* Next array element */
47820 field_addr.sub_location->number = i;
47821#endif /* FREECIV_JSON_CONNECTION */
47822
47823 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
47824 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
47825 }
47826 }
47827
47828#ifdef FREECIV_JSON_CONNECTION
47829 /* Exit array. */
47830 FC_FREE(field_addr.sub_location);
47831#endif /* FREECIV_JSON_CONNECTION */
47832 }
47833 }
47834
47835 if (BV_ISSET(fields, 33)) {
47836 log_packet_detailed(" got field 'base_raise_chance'");
47837
47838#ifdef FREECIV_JSON_CONNECTION
47839 field_addr.name = "base_raise_chance";
47840#endif /* FREECIV_JSON_CONNECTION */
47841
47842 {
47843 int i;
47844
47845 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47846 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
47847 }
47848
47849#ifdef FREECIV_JSON_CONNECTION
47850 /* Enter array. */
47851 field_addr.sub_location = plocation_elem_new(0);
47852#endif /* FREECIV_JSON_CONNECTION */
47853
47854 for (i = 0; i < real_packet->veteran_levels; i++) {
47855#ifdef FREECIV_JSON_CONNECTION
47856 /* Next array element */
47857 field_addr.sub_location->number = i;
47858#endif /* FREECIV_JSON_CONNECTION */
47859
47860 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
47861 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
47862 }
47863 }
47864
47865#ifdef FREECIV_JSON_CONNECTION
47866 /* Exit array. */
47867 FC_FREE(field_addr.sub_location);
47868#endif /* FREECIV_JSON_CONNECTION */
47869 }
47870 }
47871
47872 if (BV_ISSET(fields, 34)) {
47873 log_packet_detailed(" got field 'work_raise_chance'");
47874
47875#ifdef FREECIV_JSON_CONNECTION
47876 field_addr.name = "work_raise_chance";
47877#endif /* FREECIV_JSON_CONNECTION */
47878
47879 {
47880 int i;
47881
47882 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47883 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
47884 }
47885
47886#ifdef FREECIV_JSON_CONNECTION
47887 /* Enter array. */
47888 field_addr.sub_location = plocation_elem_new(0);
47889#endif /* FREECIV_JSON_CONNECTION */
47890
47891 for (i = 0; i < real_packet->veteran_levels; i++) {
47892#ifdef FREECIV_JSON_CONNECTION
47893 /* Next array element */
47894 field_addr.sub_location->number = i;
47895#endif /* FREECIV_JSON_CONNECTION */
47896
47897 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
47898 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
47899 }
47900 }
47901
47902#ifdef FREECIV_JSON_CONNECTION
47903 /* Exit array. */
47904 FC_FREE(field_addr.sub_location);
47905#endif /* FREECIV_JSON_CONNECTION */
47906 }
47907 }
47908
47909 if (BV_ISSET(fields, 35)) {
47910 log_packet_detailed(" got field 'bombard_rate'");
47911
47912#ifdef FREECIV_JSON_CONNECTION
47913 field_addr.name = "bombard_rate";
47914#endif /* FREECIV_JSON_CONNECTION */
47915
47916 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
47917 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
47918 }
47919 }
47920
47921 if (BV_ISSET(fields, 36)) {
47922 log_packet_detailed(" got field 'city_size'");
47923
47924#ifdef FREECIV_JSON_CONNECTION
47925 field_addr.name = "city_size";
47926#endif /* FREECIV_JSON_CONNECTION */
47927
47928 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
47929 RECEIVE_PACKET_FIELD_ERROR(city_size);
47930 }
47931 }
47932
47933 if (BV_ISSET(fields, 37)) {
47934 log_packet_detailed(" got field 'city_slots'");
47935
47936#ifdef FREECIV_JSON_CONNECTION
47937 field_addr.name = "city_slots";
47938#endif /* FREECIV_JSON_CONNECTION */
47939
47940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
47941 RECEIVE_PACKET_FIELD_ERROR(city_slots);
47942 }
47943 }
47944
47945 if (BV_ISSET(fields, 38)) {
47946 log_packet_detailed(" got field 'tp_defense'");
47947
47948#ifdef FREECIV_JSON_CONNECTION
47949 field_addr.name = "tp_defense";
47950#endif /* FREECIV_JSON_CONNECTION */
47951
47952 {
47953 int readin;
47954
47955 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47956 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
47957 }
47958 real_packet->tp_defense = readin;
47959 }
47960 }
47961
47962 if (BV_ISSET(fields, 39)) {
47963 log_packet_detailed(" got field 'cargo'");
47964
47965#ifdef FREECIV_JSON_CONNECTION
47966 field_addr.name = "cargo";
47967#endif /* FREECIV_JSON_CONNECTION */
47968
47969 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
47971 }
47972 }
47973
47974 if (BV_ISSET(fields, 40)) {
47975 log_packet_detailed(" got field 'targets'");
47976
47977#ifdef FREECIV_JSON_CONNECTION
47978 field_addr.name = "targets";
47979#endif /* FREECIV_JSON_CONNECTION */
47980
47981 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
47983 }
47984 }
47985
47986 if (BV_ISSET(fields, 41)) {
47987 log_packet_detailed(" got field 'embarks'");
47988
47989#ifdef FREECIV_JSON_CONNECTION
47990 field_addr.name = "embarks";
47991#endif /* FREECIV_JSON_CONNECTION */
47992
47993 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
47995 }
47996 }
47997
47998 if (BV_ISSET(fields, 42)) {
47999 log_packet_detailed(" got field 'disembarks'");
48000
48001#ifdef FREECIV_JSON_CONNECTION
48002 field_addr.name = "disembarks";
48003#endif /* FREECIV_JSON_CONNECTION */
48004
48005 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
48006 RECEIVE_PACKET_FIELD_ERROR(disembarks);
48007 }
48008 }
48009
48010 if (BV_ISSET(fields, 43)) {
48011 log_packet_detailed(" got field 'vlayer'");
48012
48013#ifdef FREECIV_JSON_CONNECTION
48014 field_addr.name = "vlayer";
48015#endif /* FREECIV_JSON_CONNECTION */
48016
48017 {
48018 int readin;
48019
48020 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48022 }
48023 real_packet->vlayer = readin;
48024 }
48025 }
48026
48027 if (BV_ISSET(fields, 44)) {
48028 log_packet_detailed(" got field 'helptext'");
48029
48030#ifdef FREECIV_JSON_CONNECTION
48031 field_addr.name = "helptext";
48032#endif /* FREECIV_JSON_CONNECTION */
48033
48034 {
48035 int i;
48036
48037 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48039 }
48040 strvec_reserve(real_packet->helptext, i);
48041
48042#ifdef FREECIV_JSON_CONNECTION
48043 /* Enter array. */
48044 field_addr.sub_location = plocation_elem_new(0);
48045#endif /* FREECIV_JSON_CONNECTION */
48046
48047 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
48048#ifdef FREECIV_JSON_CONNECTION
48049 /* Next array element */
48050 field_addr.sub_location->number = i;
48051#endif /* FREECIV_JSON_CONNECTION */
48052
48053 {
48054 char readin[MAX_LEN_PACKET];
48055
48056 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
48057 || !strvec_set(real_packet->helptext, i, readin)) {
48059 }
48060 }
48061 }
48062
48063#ifdef FREECIV_JSON_CONNECTION
48064 /* Exit array. */
48065 FC_FREE(field_addr.sub_location);
48066#endif /* FREECIV_JSON_CONNECTION */
48067 }
48068 }
48069
48070 if (BV_ISSET(fields, 45)) {
48071 log_packet_detailed(" got field 'flags'");
48072
48073#ifdef FREECIV_JSON_CONNECTION
48074 field_addr.name = "flags";
48075#endif /* FREECIV_JSON_CONNECTION */
48076
48077 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48079 }
48080 }
48081
48082 if (BV_ISSET(fields, 46)) {
48083 log_packet_detailed(" got field 'roles'");
48084
48085#ifdef FREECIV_JSON_CONNECTION
48086 field_addr.name = "roles";
48087#endif /* FREECIV_JSON_CONNECTION */
48088
48089 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48091 }
48092 }
48093
48094 real_packet->worker = BV_ISSET(fields, 47);
48095
48096 if (nullptr == old) {
48097 old = fc_malloc(sizeof(*old));
48099 old->id = real_packet->id;
48100 sz_strlcpy(old->name, real_packet->name);
48101 sz_strlcpy(old->rule_name, real_packet->rule_name);
48102 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48103 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48104 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48105 sz_strlcpy(old->sound_move, real_packet->sound_move);
48106 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48107 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48108 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48109 old->unit_class_id = real_packet->unit_class_id;
48110 old->build_cost = real_packet->build_cost;
48111 old->pop_cost = real_packet->pop_cost;
48112 old->spectype_id = real_packet->spectype_id;
48113 old->attack_strength = real_packet->attack_strength;
48114 old->defense_strength = real_packet->defense_strength;
48115 old->move_rate = real_packet->move_rate;
48116 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48117 old->vision_radius_sq = real_packet->vision_radius_sq;
48118 old->transport_capacity = real_packet->transport_capacity;
48119 old->hp = real_packet->hp;
48120 old->firepower = real_packet->firepower;
48121 old->obsoleted_by = real_packet->obsoleted_by;
48122 old->converted_to = real_packet->converted_to;
48123 old->convert_time = real_packet->convert_time;
48124 old->fuel = real_packet->fuel;
48125 old->happy_cost = real_packet->happy_cost;
48126 {
48127 int i;
48128
48129 for (i = 0; i < O_LAST; i++) {
48130 old->upkeep[i] = real_packet->upkeep[i];
48131 }
48132 }
48133 old->paratroopers_range = real_packet->paratroopers_range;
48134 old->veteran_levels = real_packet->veteran_levels;
48135 {
48136 int i;
48137
48138 for (i = 0; i < real_packet->veteran_levels; i++) {
48139 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48140 }
48141 }
48142 {
48143 int i;
48144
48145 for (i = 0; i < real_packet->veteran_levels; i++) {
48146 old->power_fact[i] = real_packet->power_fact[i];
48147 }
48148 }
48149 {
48150 int i;
48151
48152 for (i = 0; i < real_packet->veteran_levels; i++) {
48153 old->move_bonus[i] = real_packet->move_bonus[i];
48154 }
48155 }
48156 {
48157 int i;
48158
48159 for (i = 0; i < real_packet->veteran_levels; i++) {
48160 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48161 }
48162 }
48163 {
48164 int i;
48165
48166 for (i = 0; i < real_packet->veteran_levels; i++) {
48167 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48168 }
48169 }
48170 old->bombard_rate = real_packet->bombard_rate;
48171 old->city_size = real_packet->city_size;
48172 old->city_slots = real_packet->city_slots;
48173 old->tp_defense = real_packet->tp_defense;
48174 old->cargo = real_packet->cargo;
48175 old->targets = real_packet->targets;
48176 old->embarks = real_packet->embarks;
48177 old->disembarks = real_packet->disembarks;
48178 old->vlayer = real_packet->vlayer;
48179 if (real_packet->helptext) {
48180 strvec_copy(old->helptext, real_packet->helptext);
48181 } else {
48182 strvec_clear(old->helptext);
48183 }
48184 old->flags = real_packet->flags;
48185 old->roles = real_packet->roles;
48186 old->worker = real_packet->worker;
48188 } else {
48189 old->id = real_packet->id;
48190 sz_strlcpy(old->name, real_packet->name);
48191 sz_strlcpy(old->rule_name, real_packet->rule_name);
48192 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48193 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48194 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48195 sz_strlcpy(old->sound_move, real_packet->sound_move);
48196 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48197 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48198 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48199 old->unit_class_id = real_packet->unit_class_id;
48200 old->build_cost = real_packet->build_cost;
48201 old->pop_cost = real_packet->pop_cost;
48202 old->spectype_id = real_packet->spectype_id;
48203 old->attack_strength = real_packet->attack_strength;
48204 old->defense_strength = real_packet->defense_strength;
48205 old->move_rate = real_packet->move_rate;
48206 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48207 old->vision_radius_sq = real_packet->vision_radius_sq;
48208 old->transport_capacity = real_packet->transport_capacity;
48209 old->hp = real_packet->hp;
48210 old->firepower = real_packet->firepower;
48211 old->obsoleted_by = real_packet->obsoleted_by;
48212 old->converted_to = real_packet->converted_to;
48213 old->convert_time = real_packet->convert_time;
48214 old->fuel = real_packet->fuel;
48215 old->happy_cost = real_packet->happy_cost;
48216 {
48217 int i;
48218
48219 for (i = 0; i < O_LAST; i++) {
48220 old->upkeep[i] = real_packet->upkeep[i];
48221 }
48222 }
48223 old->paratroopers_range = real_packet->paratroopers_range;
48224 old->veteran_levels = real_packet->veteran_levels;
48225 {
48226 int i;
48227
48228 for (i = 0; i < real_packet->veteran_levels; i++) {
48229 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48230 }
48231 }
48232 {
48233 int i;
48234
48235 for (i = 0; i < real_packet->veteran_levels; i++) {
48236 old->power_fact[i] = real_packet->power_fact[i];
48237 }
48238 }
48239 {
48240 int i;
48241
48242 for (i = 0; i < real_packet->veteran_levels; i++) {
48243 old->move_bonus[i] = real_packet->move_bonus[i];
48244 }
48245 }
48246 {
48247 int i;
48248
48249 for (i = 0; i < real_packet->veteran_levels; i++) {
48250 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48251 }
48252 }
48253 {
48254 int i;
48255
48256 for (i = 0; i < real_packet->veteran_levels; i++) {
48257 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48258 }
48259 }
48260 old->bombard_rate = real_packet->bombard_rate;
48261 old->city_size = real_packet->city_size;
48262 old->city_slots = real_packet->city_slots;
48263 old->tp_defense = real_packet->tp_defense;
48264 old->cargo = real_packet->cargo;
48265 old->targets = real_packet->targets;
48266 old->embarks = real_packet->embarks;
48267 old->disembarks = real_packet->disembarks;
48268 old->vlayer = real_packet->vlayer;
48269 if (real_packet->helptext) {
48270 strvec_copy(old->helptext, real_packet->helptext);
48271 } else {
48272 strvec_clear(old->helptext);
48273 }
48274 old->flags = real_packet->flags;
48275 old->roles = real_packet->roles;
48276 old->worker = real_packet->worker;
48277 }
48278
48279#else /* FREECIV_DELTA_PROTOCOL */
48280#ifdef FREECIV_JSON_CONNECTION
48281 field_addr.name = "id";
48282#endif /* FREECIV_JSON_CONNECTION */
48283
48284 {
48285 int readin;
48286
48287 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
48289 }
48290 real_packet->id = readin;
48291 }
48292
48293#ifdef FREECIV_JSON_CONNECTION
48294 field_addr.name = "name";
48295#endif /* FREECIV_JSON_CONNECTION */
48296
48297 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
48299 }
48300
48301#ifdef FREECIV_JSON_CONNECTION
48302 field_addr.name = "rule_name";
48303#endif /* FREECIV_JSON_CONNECTION */
48304
48305 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
48306 RECEIVE_PACKET_FIELD_ERROR(rule_name);
48307 }
48308
48309#ifdef FREECIV_JSON_CONNECTION
48310 field_addr.name = "graphic_str";
48311#endif /* FREECIV_JSON_CONNECTION */
48312
48313 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
48314 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
48315 }
48316
48317#ifdef FREECIV_JSON_CONNECTION
48318 field_addr.name = "graphic_alt";
48319#endif /* FREECIV_JSON_CONNECTION */
48320
48321 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
48322 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
48323 }
48324
48325#ifdef FREECIV_JSON_CONNECTION
48326 field_addr.name = "graphic_alt2";
48327#endif /* FREECIV_JSON_CONNECTION */
48328
48329 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
48330 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
48331 }
48332
48333#ifdef FREECIV_JSON_CONNECTION
48334 field_addr.name = "sound_move";
48335#endif /* FREECIV_JSON_CONNECTION */
48336
48337 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
48338 RECEIVE_PACKET_FIELD_ERROR(sound_move);
48339 }
48340
48341#ifdef FREECIV_JSON_CONNECTION
48342 field_addr.name = "sound_move_alt";
48343#endif /* FREECIV_JSON_CONNECTION */
48344
48345 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
48346 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
48347 }
48348
48349#ifdef FREECIV_JSON_CONNECTION
48350 field_addr.name = "sound_fight";
48351#endif /* FREECIV_JSON_CONNECTION */
48352
48353 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
48354 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
48355 }
48356
48357#ifdef FREECIV_JSON_CONNECTION
48358 field_addr.name = "sound_fight_alt";
48359#endif /* FREECIV_JSON_CONNECTION */
48360
48361 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
48362 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
48363 }
48364
48365#ifdef FREECIV_JSON_CONNECTION
48366 field_addr.name = "unit_class_id";
48367#endif /* FREECIV_JSON_CONNECTION */
48368
48369 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
48370 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
48371 }
48372
48373#ifdef FREECIV_JSON_CONNECTION
48374 field_addr.name = "build_cost";
48375#endif /* FREECIV_JSON_CONNECTION */
48376
48377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
48378 RECEIVE_PACKET_FIELD_ERROR(build_cost);
48379 }
48380
48381#ifdef FREECIV_JSON_CONNECTION
48382 field_addr.name = "pop_cost";
48383#endif /* FREECIV_JSON_CONNECTION */
48384
48385 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
48387 }
48388
48389#ifdef FREECIV_JSON_CONNECTION
48390 field_addr.name = "spectype_id";
48391#endif /* FREECIV_JSON_CONNECTION */
48392
48393 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->spectype_id)) {
48394 RECEIVE_PACKET_FIELD_ERROR(spectype_id);
48395 }
48396
48397#ifdef FREECIV_JSON_CONNECTION
48398 field_addr.name = "attack_strength";
48399#endif /* FREECIV_JSON_CONNECTION */
48400
48401 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
48402 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
48403 }
48404
48405#ifdef FREECIV_JSON_CONNECTION
48406 field_addr.name = "defense_strength";
48407#endif /* FREECIV_JSON_CONNECTION */
48408
48409 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
48410 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
48411 }
48412
48413#ifdef FREECIV_JSON_CONNECTION
48414 field_addr.name = "move_rate";
48415#endif /* FREECIV_JSON_CONNECTION */
48416
48417 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
48418 RECEIVE_PACKET_FIELD_ERROR(move_rate);
48419 }
48420
48421#ifdef FREECIV_JSON_CONNECTION
48422 field_addr.name = "build_reqs";
48423#endif /* FREECIV_JSON_CONNECTION */
48424
48425 {
48426 int i;
48427
48428 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48429 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48430 }
48432
48433#ifdef FREECIV_JSON_CONNECTION
48434 /* Enter array. */
48435 field_addr.sub_location = plocation_elem_new(0);
48436#endif /* FREECIV_JSON_CONNECTION */
48437
48438 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
48439#ifdef FREECIV_JSON_CONNECTION
48440 /* Next array element */
48441 field_addr.sub_location->number = i;
48442#endif /* FREECIV_JSON_CONNECTION */
48443
48444 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
48445 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48446 }
48447 }
48448
48449#ifdef FREECIV_JSON_CONNECTION
48450 /* Exit array. */
48451 FC_FREE(field_addr.sub_location);
48452#endif /* FREECIV_JSON_CONNECTION */
48453 }
48454
48455#ifdef FREECIV_JSON_CONNECTION
48456 field_addr.name = "vision_radius_sq";
48457#endif /* FREECIV_JSON_CONNECTION */
48458
48459 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
48460 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
48461 }
48462
48463#ifdef FREECIV_JSON_CONNECTION
48464 field_addr.name = "transport_capacity";
48465#endif /* FREECIV_JSON_CONNECTION */
48466
48467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
48468 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
48469 }
48470
48471#ifdef FREECIV_JSON_CONNECTION
48472 field_addr.name = "hp";
48473#endif /* FREECIV_JSON_CONNECTION */
48474
48475 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
48477 }
48478
48479#ifdef FREECIV_JSON_CONNECTION
48480 field_addr.name = "firepower";
48481#endif /* FREECIV_JSON_CONNECTION */
48482
48483 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
48484 RECEIVE_PACKET_FIELD_ERROR(firepower);
48485 }
48486
48487#ifdef FREECIV_JSON_CONNECTION
48488 field_addr.name = "obsoleted_by";
48489#endif /* FREECIV_JSON_CONNECTION */
48490
48491 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
48492 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
48493 }
48494
48495#ifdef FREECIV_JSON_CONNECTION
48496 field_addr.name = "converted_to";
48497#endif /* FREECIV_JSON_CONNECTION */
48498
48499 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
48500 RECEIVE_PACKET_FIELD_ERROR(converted_to);
48501 }
48502
48503#ifdef FREECIV_JSON_CONNECTION
48504 field_addr.name = "convert_time";
48505#endif /* FREECIV_JSON_CONNECTION */
48506
48507 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
48508 RECEIVE_PACKET_FIELD_ERROR(convert_time);
48509 }
48510
48511#ifdef FREECIV_JSON_CONNECTION
48512 field_addr.name = "fuel";
48513#endif /* FREECIV_JSON_CONNECTION */
48514
48515 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
48517 }
48518
48519#ifdef FREECIV_JSON_CONNECTION
48520 field_addr.name = "happy_cost";
48521#endif /* FREECIV_JSON_CONNECTION */
48522
48523 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
48524 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
48525 }
48526
48527#ifdef FREECIV_JSON_CONNECTION
48528 field_addr.name = "upkeep";
48529#endif /* FREECIV_JSON_CONNECTION */
48530
48531 {
48532 int i;
48533
48534
48535#ifdef FREECIV_JSON_CONNECTION
48536 /* Enter array. */
48537 field_addr.sub_location = plocation_elem_new(0);
48538#endif /* FREECIV_JSON_CONNECTION */
48539
48540 for (i = 0; i < O_LAST; i++) {
48541#ifdef FREECIV_JSON_CONNECTION
48542 /* Next array element */
48543 field_addr.sub_location->number = i;
48544#endif /* FREECIV_JSON_CONNECTION */
48545
48546 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
48548 }
48549 }
48550
48551#ifdef FREECIV_JSON_CONNECTION
48552 /* Exit array. */
48553 FC_FREE(field_addr.sub_location);
48554#endif /* FREECIV_JSON_CONNECTION */
48555 }
48556
48557#ifdef FREECIV_JSON_CONNECTION
48558 field_addr.name = "paratroopers_range";
48559#endif /* FREECIV_JSON_CONNECTION */
48560
48561 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
48562 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
48563 }
48564
48565#ifdef FREECIV_JSON_CONNECTION
48566 field_addr.name = "veteran_levels";
48567#endif /* FREECIV_JSON_CONNECTION */
48568
48569 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
48570 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
48571 }
48572
48573#ifdef FREECIV_JSON_CONNECTION
48574 field_addr.name = "veteran_name";
48575#endif /* FREECIV_JSON_CONNECTION */
48576
48577 {
48578 int i;
48579
48580 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48581 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
48582 }
48583
48584#ifdef FREECIV_JSON_CONNECTION
48585 /* Enter array. */
48586 field_addr.sub_location = plocation_elem_new(0);
48587#endif /* FREECIV_JSON_CONNECTION */
48588
48589 for (i = 0; i < real_packet->veteran_levels; i++) {
48590#ifdef FREECIV_JSON_CONNECTION
48591 /* Next array element */
48592 field_addr.sub_location->number = i;
48593#endif /* FREECIV_JSON_CONNECTION */
48594
48595 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
48596 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
48597 }
48598 }
48599
48600#ifdef FREECIV_JSON_CONNECTION
48601 /* Exit array. */
48602 FC_FREE(field_addr.sub_location);
48603#endif /* FREECIV_JSON_CONNECTION */
48604 }
48605
48606#ifdef FREECIV_JSON_CONNECTION
48607 field_addr.name = "power_fact";
48608#endif /* FREECIV_JSON_CONNECTION */
48609
48610 {
48611 int i;
48612
48613 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48614 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
48615 }
48616
48617#ifdef FREECIV_JSON_CONNECTION
48618 /* Enter array. */
48619 field_addr.sub_location = plocation_elem_new(0);
48620#endif /* FREECIV_JSON_CONNECTION */
48621
48622 for (i = 0; i < real_packet->veteran_levels; i++) {
48623#ifdef FREECIV_JSON_CONNECTION
48624 /* Next array element */
48625 field_addr.sub_location->number = i;
48626#endif /* FREECIV_JSON_CONNECTION */
48627
48628 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
48629 RECEIVE_PACKET_FIELD_ERROR(power_fact);
48630 }
48631 }
48632
48633#ifdef FREECIV_JSON_CONNECTION
48634 /* Exit array. */
48635 FC_FREE(field_addr.sub_location);
48636#endif /* FREECIV_JSON_CONNECTION */
48637 }
48638
48639#ifdef FREECIV_JSON_CONNECTION
48640 field_addr.name = "move_bonus";
48641#endif /* FREECIV_JSON_CONNECTION */
48642
48643 {
48644 int i;
48645
48646 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48647 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
48648 }
48649
48650#ifdef FREECIV_JSON_CONNECTION
48651 /* Enter array. */
48652 field_addr.sub_location = plocation_elem_new(0);
48653#endif /* FREECIV_JSON_CONNECTION */
48654
48655 for (i = 0; i < real_packet->veteran_levels; i++) {
48656#ifdef FREECIV_JSON_CONNECTION
48657 /* Next array element */
48658 field_addr.sub_location->number = i;
48659#endif /* FREECIV_JSON_CONNECTION */
48660
48661 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
48662 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
48663 }
48664 }
48665
48666#ifdef FREECIV_JSON_CONNECTION
48667 /* Exit array. */
48668 FC_FREE(field_addr.sub_location);
48669#endif /* FREECIV_JSON_CONNECTION */
48670 }
48671
48672#ifdef FREECIV_JSON_CONNECTION
48673 field_addr.name = "base_raise_chance";
48674#endif /* FREECIV_JSON_CONNECTION */
48675
48676 {
48677 int i;
48678
48679 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48680 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
48681 }
48682
48683#ifdef FREECIV_JSON_CONNECTION
48684 /* Enter array. */
48685 field_addr.sub_location = plocation_elem_new(0);
48686#endif /* FREECIV_JSON_CONNECTION */
48687
48688 for (i = 0; i < real_packet->veteran_levels; i++) {
48689#ifdef FREECIV_JSON_CONNECTION
48690 /* Next array element */
48691 field_addr.sub_location->number = i;
48692#endif /* FREECIV_JSON_CONNECTION */
48693
48694 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
48695 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
48696 }
48697 }
48698
48699#ifdef FREECIV_JSON_CONNECTION
48700 /* Exit array. */
48701 FC_FREE(field_addr.sub_location);
48702#endif /* FREECIV_JSON_CONNECTION */
48703 }
48704
48705#ifdef FREECIV_JSON_CONNECTION
48706 field_addr.name = "work_raise_chance";
48707#endif /* FREECIV_JSON_CONNECTION */
48708
48709 {
48710 int i;
48711
48712 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48713 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
48714 }
48715
48716#ifdef FREECIV_JSON_CONNECTION
48717 /* Enter array. */
48718 field_addr.sub_location = plocation_elem_new(0);
48719#endif /* FREECIV_JSON_CONNECTION */
48720
48721 for (i = 0; i < real_packet->veteran_levels; i++) {
48722#ifdef FREECIV_JSON_CONNECTION
48723 /* Next array element */
48724 field_addr.sub_location->number = i;
48725#endif /* FREECIV_JSON_CONNECTION */
48726
48727 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
48728 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
48729 }
48730 }
48731
48732#ifdef FREECIV_JSON_CONNECTION
48733 /* Exit array. */
48734 FC_FREE(field_addr.sub_location);
48735#endif /* FREECIV_JSON_CONNECTION */
48736 }
48737
48738#ifdef FREECIV_JSON_CONNECTION
48739 field_addr.name = "bombard_rate";
48740#endif /* FREECIV_JSON_CONNECTION */
48741
48742 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
48743 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
48744 }
48745
48746#ifdef FREECIV_JSON_CONNECTION
48747 field_addr.name = "city_size";
48748#endif /* FREECIV_JSON_CONNECTION */
48749
48750 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
48751 RECEIVE_PACKET_FIELD_ERROR(city_size);
48752 }
48753
48754#ifdef FREECIV_JSON_CONNECTION
48755 field_addr.name = "city_slots";
48756#endif /* FREECIV_JSON_CONNECTION */
48757
48758 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
48759 RECEIVE_PACKET_FIELD_ERROR(city_slots);
48760 }
48761
48762#ifdef FREECIV_JSON_CONNECTION
48763 field_addr.name = "tp_defense";
48764#endif /* FREECIV_JSON_CONNECTION */
48765
48766 {
48767 int readin;
48768
48769 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48770 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
48771 }
48772 real_packet->tp_defense = readin;
48773 }
48774
48775#ifdef FREECIV_JSON_CONNECTION
48776 field_addr.name = "cargo";
48777#endif /* FREECIV_JSON_CONNECTION */
48778
48779 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
48781 }
48782
48783#ifdef FREECIV_JSON_CONNECTION
48784 field_addr.name = "targets";
48785#endif /* FREECIV_JSON_CONNECTION */
48786
48787 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
48789 }
48790
48791#ifdef FREECIV_JSON_CONNECTION
48792 field_addr.name = "embarks";
48793#endif /* FREECIV_JSON_CONNECTION */
48794
48795 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
48797 }
48798
48799#ifdef FREECIV_JSON_CONNECTION
48800 field_addr.name = "disembarks";
48801#endif /* FREECIV_JSON_CONNECTION */
48802
48803 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
48804 RECEIVE_PACKET_FIELD_ERROR(disembarks);
48805 }
48806
48807#ifdef FREECIV_JSON_CONNECTION
48808 field_addr.name = "vlayer";
48809#endif /* FREECIV_JSON_CONNECTION */
48810
48811 {
48812 int readin;
48813
48814 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48816 }
48817 real_packet->vlayer = readin;
48818 }
48819
48820#ifdef FREECIV_JSON_CONNECTION
48821 field_addr.name = "helptext";
48822#endif /* FREECIV_JSON_CONNECTION */
48823
48824 {
48825 int i;
48826
48827 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48829 }
48830 strvec_reserve(real_packet->helptext, i);
48831
48832#ifdef FREECIV_JSON_CONNECTION
48833 /* Enter array. */
48834 field_addr.sub_location = plocation_elem_new(0);
48835#endif /* FREECIV_JSON_CONNECTION */
48836
48837 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
48838#ifdef FREECIV_JSON_CONNECTION
48839 /* Next array element */
48840 field_addr.sub_location->number = i;
48841#endif /* FREECIV_JSON_CONNECTION */
48842
48843 {
48844 char readin[MAX_LEN_PACKET];
48845
48846 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
48847 || !strvec_set(real_packet->helptext, i, readin)) {
48849 }
48850 }
48851 }
48852
48853#ifdef FREECIV_JSON_CONNECTION
48854 /* Exit array. */
48855 FC_FREE(field_addr.sub_location);
48856#endif /* FREECIV_JSON_CONNECTION */
48857 }
48858
48859#ifdef FREECIV_JSON_CONNECTION
48860 field_addr.name = "flags";
48861#endif /* FREECIV_JSON_CONNECTION */
48862
48863 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48865 }
48866
48867#ifdef FREECIV_JSON_CONNECTION
48868 field_addr.name = "roles";
48869#endif /* FREECIV_JSON_CONNECTION */
48870
48871 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48873 }
48874
48875#ifdef FREECIV_JSON_CONNECTION
48876 field_addr.name = "worker";
48877#endif /* FREECIV_JSON_CONNECTION */
48878
48879 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->worker)) {
48881 }
48882#endif /* FREECIV_DELTA_PROTOCOL */
48883
48885#undef FREE_PACKET_STRUCT
48886}
48887
48888static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
48889{
48890 const struct packet_ruleset_unit *real_packet = packet;
48891 int e;
48893
48894 log_packet_detailed("packet_ruleset_unit_100: sending info about ()");
48895
48896#ifdef FREECIV_DELTA_PROTOCOL
48898 struct packet_ruleset_unit *old;
48899 bool differ;
48900 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT;
48901
48902 if (nullptr == *hash) {
48904 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
48905 }
48906 BV_CLR_ALL(fields);
48907
48908 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
48909 old = fc_malloc(sizeof(*old));
48910 /* temporary bitcopy just to insert correctly */
48911 *old = *real_packet;
48914 }
48915
48916 differ = (old->id != real_packet->id);
48917 if (differ) {
48918 BV_SET(fields, 0);
48919 }
48920
48921 differ = (strcmp(old->name, real_packet->name) != 0);
48922 if (differ) {
48923 BV_SET(fields, 1);
48924 }
48925
48926 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
48927 if (differ) {
48928 BV_SET(fields, 2);
48929 }
48930
48931 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
48932 if (differ) {
48933 BV_SET(fields, 3);
48934 }
48935
48936 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
48937 if (differ) {
48938 BV_SET(fields, 4);
48939 }
48940
48941 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
48942 if (differ) {
48943 BV_SET(fields, 5);
48944 }
48945
48946 differ = (strcmp(old->sound_move, real_packet->sound_move) != 0);
48947 if (differ) {
48948 BV_SET(fields, 6);
48949 }
48950
48951 differ = (strcmp(old->sound_move_alt, real_packet->sound_move_alt) != 0);
48952 if (differ) {
48953 BV_SET(fields, 7);
48954 }
48955
48956 differ = (strcmp(old->sound_fight, real_packet->sound_fight) != 0);
48957 if (differ) {
48958 BV_SET(fields, 8);
48959 }
48960
48961 differ = (strcmp(old->sound_fight_alt, real_packet->sound_fight_alt) != 0);
48962 if (differ) {
48963 BV_SET(fields, 9);
48964 }
48965
48966 differ = (old->unit_class_id != real_packet->unit_class_id);
48967 if (differ) {
48968 BV_SET(fields, 10);
48969 }
48970
48971 differ = (old->build_cost != real_packet->build_cost);
48972 if (differ) {
48973 BV_SET(fields, 11);
48974 }
48975
48976 differ = (old->pop_cost != real_packet->pop_cost);
48977 if (differ) {
48978 BV_SET(fields, 12);
48979 }
48980
48981 differ = (old->spectype_id != real_packet->spectype_id);
48982 if (differ) {
48983 BV_SET(fields, 13);
48984 }
48985
48986 differ = (old->attack_strength != real_packet->attack_strength);
48987 if (differ) {
48988 BV_SET(fields, 14);
48989 }
48990
48991 differ = (old->defense_strength != real_packet->defense_strength);
48992 if (differ) {
48993 BV_SET(fields, 15);
48994 }
48995
48996 differ = (old->move_rate != real_packet->move_rate);
48997 if (differ) {
48998 BV_SET(fields, 16);
48999 }
49000
49001 differ = (requirement_vector_size(&old->build_reqs) != requirement_vector_size(&real_packet->build_reqs));
49002 if (!differ) {
49003 int i;
49004
49005 for (i = 0; i < requirement_vector_size(&old->build_reqs); i++) {
49006 differ = !are_requirements_equal(&old->build_reqs.p[i], &real_packet->build_reqs.p[i]);
49007 if (differ) {
49008 break;
49009 }
49010 }
49011 }
49012 if (differ) {
49013 BV_SET(fields, 17);
49014 }
49015
49016 differ = (old->vision_radius_sq != real_packet->vision_radius_sq);
49017 if (differ) {
49018 BV_SET(fields, 18);
49019 }
49020
49021 differ = (old->transport_capacity != real_packet->transport_capacity);
49022 if (differ) {
49023 BV_SET(fields, 19);
49024 }
49025
49026 differ = (old->hp != real_packet->hp);
49027 if (differ) {
49028 BV_SET(fields, 20);
49029 }
49030
49031 differ = (old->firepower != real_packet->firepower);
49032 if (differ) {
49033 BV_SET(fields, 21);
49034 }
49035
49036 differ = (old->obsoleted_by != real_packet->obsoleted_by);
49037 if (differ) {
49038 BV_SET(fields, 22);
49039 }
49040
49041 differ = (old->converted_to != real_packet->converted_to);
49042 if (differ) {
49043 BV_SET(fields, 23);
49044 }
49045
49046 differ = (old->convert_time != real_packet->convert_time);
49047 if (differ) {
49048 BV_SET(fields, 24);
49049 }
49050
49051 differ = (old->fuel != real_packet->fuel);
49052 if (differ) {
49053 BV_SET(fields, 25);
49054 }
49055
49056 differ = (old->happy_cost != real_packet->happy_cost);
49057 if (differ) {
49058 BV_SET(fields, 26);
49059 }
49060
49061 differ = FALSE;
49062 {
49063 int i;
49064
49065 for (i = 0; i < O_LAST; i++) {
49066 differ = (old->upkeep[i] != real_packet->upkeep[i]);
49067 if (differ) {
49068 break;
49069 }
49070 }
49071 }
49072 if (differ) {
49073 BV_SET(fields, 27);
49074 }
49075
49076 differ = (old->paratroopers_range != real_packet->paratroopers_range);
49077 if (differ) {
49078 BV_SET(fields, 28);
49079 }
49080
49081 differ = (old->veteran_levels != real_packet->veteran_levels);
49082 if (differ) {
49083 BV_SET(fields, 29);
49084 }
49085
49086 differ = (old->veteran_levels != real_packet->veteran_levels);
49087 if (!differ) {
49088 int i;
49089
49090 for (i = 0; i < old->veteran_levels; i++) {
49091 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
49092 if (differ) {
49093 break;
49094 }
49095 }
49096 }
49097 if (differ) {
49098 BV_SET(fields, 30);
49099 }
49100
49101 differ = (old->veteran_levels != real_packet->veteran_levels);
49102 if (!differ) {
49103 int i;
49104
49105 for (i = 0; i < old->veteran_levels; i++) {
49106 differ = (old->power_fact[i] != real_packet->power_fact[i]);
49107 if (differ) {
49108 break;
49109 }
49110 }
49111 }
49112 if (differ) {
49113 BV_SET(fields, 31);
49114 }
49115
49116 differ = (old->veteran_levels != real_packet->veteran_levels);
49117 if (!differ) {
49118 int i;
49119
49120 for (i = 0; i < old->veteran_levels; i++) {
49121 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
49122 if (differ) {
49123 break;
49124 }
49125 }
49126 }
49127 if (differ) {
49128 BV_SET(fields, 32);
49129 }
49130
49131 differ = (old->veteran_levels != real_packet->veteran_levels);
49132 if (!differ) {
49133 int i;
49134
49135 for (i = 0; i < old->veteran_levels; i++) {
49136 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
49137 if (differ) {
49138 break;
49139 }
49140 }
49141 }
49142 if (differ) {
49143 BV_SET(fields, 33);
49144 }
49145
49146 differ = (old->veteran_levels != real_packet->veteran_levels);
49147 if (!differ) {
49148 int i;
49149
49150 for (i = 0; i < old->veteran_levels; i++) {
49151 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
49152 if (differ) {
49153 break;
49154 }
49155 }
49156 }
49157 if (differ) {
49158 BV_SET(fields, 34);
49159 }
49160
49161 differ = (old->bombard_rate != real_packet->bombard_rate);
49162 if (differ) {
49163 BV_SET(fields, 35);
49164 }
49165
49166 differ = (old->city_size != real_packet->city_size);
49167 if (differ) {
49168 BV_SET(fields, 36);
49169 }
49170
49171 differ = (old->city_slots != real_packet->city_slots);
49172 if (differ) {
49173 BV_SET(fields, 37);
49174 }
49175
49176 differ = (old->tp_defense != real_packet->tp_defense);
49177 if (differ) {
49178 BV_SET(fields, 38);
49179 }
49180
49181 differ = !BV_ARE_EQUAL(old->cargo, real_packet->cargo);
49182 if (differ) {
49183 BV_SET(fields, 39);
49184 }
49185
49186 differ = !BV_ARE_EQUAL(old->targets, real_packet->targets);
49187 if (differ) {
49188 BV_SET(fields, 40);
49189 }
49190
49191 differ = !BV_ARE_EQUAL(old->embarks, real_packet->embarks);
49192 if (differ) {
49193 BV_SET(fields, 41);
49194 }
49195
49196 differ = !BV_ARE_EQUAL(old->disembarks, real_packet->disembarks);
49197 if (differ) {
49198 BV_SET(fields, 42);
49199 }
49200
49201 differ = (old->vlayer != real_packet->vlayer);
49202 if (differ) {
49203 BV_SET(fields, 43);
49204 }
49205
49206 if (real_packet->helptext) {
49207 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
49208 } else {
49209 differ = (strvec_size(old->helptext) > 0);
49210 }
49211 if (differ) {
49212 BV_SET(fields, 44);
49213 }
49214
49215 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
49216 if (differ) {
49217 BV_SET(fields, 45);
49218 }
49219
49220 differ = !BV_ARE_EQUAL(old->roles, real_packet->roles);
49221 if (differ) {
49222 BV_SET(fields, 46);
49223 }
49224
49225 /* folded into head */
49226 if (real_packet->worker) {
49227 BV_SET(fields, 47);
49228 }
49229#endif /* FREECIV_DELTA_PROTOCOL */
49230
49231#ifdef FREECIV_JSON_CONNECTION
49232 struct plocation field_addr;
49233 {
49234 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
49237 }
49238#endif /* FREECIV_JSON_CONNECTION */
49239
49240#ifdef FREECIV_DELTA_PROTOCOL
49241#ifdef FREECIV_JSON_CONNECTION
49242 field_addr.name = "fields";
49243#endif /* FREECIV_JSON_CONNECTION */
49244 e = 0;
49245 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49246 if (e) {
49247 log_packet_detailed("fields bitvector error detected");
49248 }
49249
49250 if (BV_ISSET(fields, 0)) {
49251 log_packet_detailed(" field 'id' has changed");
49252
49253#ifdef FREECIV_JSON_CONNECTION
49254 field_addr.name = "id";
49255#endif /* FREECIV_JSON_CONNECTION */
49256 e = 0;
49257
49258 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49259
49260 if (e) {
49261 log_packet_detailed("'id' field error detected");
49262 }
49263 }
49264
49265 if (BV_ISSET(fields, 1)) {
49266 log_packet_detailed(" field 'name' has changed");
49267
49268#ifdef FREECIV_JSON_CONNECTION
49269 field_addr.name = "name";
49270#endif /* FREECIV_JSON_CONNECTION */
49271 e = 0;
49272
49273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49274
49275 if (e) {
49276 log_packet_detailed("'name' field error detected");
49277 }
49278 }
49279
49280 if (BV_ISSET(fields, 2)) {
49281 log_packet_detailed(" field 'rule_name' has changed");
49282
49283#ifdef FREECIV_JSON_CONNECTION
49284 field_addr.name = "rule_name";
49285#endif /* FREECIV_JSON_CONNECTION */
49286 e = 0;
49287
49288 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49289
49290 if (e) {
49291 log_packet_detailed("'rule_name' field error detected");
49292 }
49293 }
49294
49295 if (BV_ISSET(fields, 3)) {
49296 log_packet_detailed(" field 'graphic_str' has changed");
49297
49298#ifdef FREECIV_JSON_CONNECTION
49299 field_addr.name = "graphic_str";
49300#endif /* FREECIV_JSON_CONNECTION */
49301 e = 0;
49302
49303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
49304
49305 if (e) {
49306 log_packet_detailed("'graphic_str' field error detected");
49307 }
49308 }
49309
49310 if (BV_ISSET(fields, 4)) {
49311 log_packet_detailed(" field 'graphic_alt' has changed");
49312
49313#ifdef FREECIV_JSON_CONNECTION
49314 field_addr.name = "graphic_alt";
49315#endif /* FREECIV_JSON_CONNECTION */
49316 e = 0;
49317
49318 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
49319
49320 if (e) {
49321 log_packet_detailed("'graphic_alt' field error detected");
49322 }
49323 }
49324
49325 if (BV_ISSET(fields, 5)) {
49326 log_packet_detailed(" field 'graphic_alt2' has changed");
49327
49328#ifdef FREECIV_JSON_CONNECTION
49329 field_addr.name = "graphic_alt2";
49330#endif /* FREECIV_JSON_CONNECTION */
49331 e = 0;
49332
49333 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
49334
49335 if (e) {
49336 log_packet_detailed("'graphic_alt2' field error detected");
49337 }
49338 }
49339
49340 if (BV_ISSET(fields, 6)) {
49341 log_packet_detailed(" field 'sound_move' has changed");
49342
49343#ifdef FREECIV_JSON_CONNECTION
49344 field_addr.name = "sound_move";
49345#endif /* FREECIV_JSON_CONNECTION */
49346 e = 0;
49347
49348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
49349
49350 if (e) {
49351 log_packet_detailed("'sound_move' field error detected");
49352 }
49353 }
49354
49355 if (BV_ISSET(fields, 7)) {
49356 log_packet_detailed(" field 'sound_move_alt' has changed");
49357
49358#ifdef FREECIV_JSON_CONNECTION
49359 field_addr.name = "sound_move_alt";
49360#endif /* FREECIV_JSON_CONNECTION */
49361 e = 0;
49362
49363 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
49364
49365 if (e) {
49366 log_packet_detailed("'sound_move_alt' field error detected");
49367 }
49368 }
49369
49370 if (BV_ISSET(fields, 8)) {
49371 log_packet_detailed(" field 'sound_fight' has changed");
49372
49373#ifdef FREECIV_JSON_CONNECTION
49374 field_addr.name = "sound_fight";
49375#endif /* FREECIV_JSON_CONNECTION */
49376 e = 0;
49377
49378 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
49379
49380 if (e) {
49381 log_packet_detailed("'sound_fight' field error detected");
49382 }
49383 }
49384
49385 if (BV_ISSET(fields, 9)) {
49386 log_packet_detailed(" field 'sound_fight_alt' has changed");
49387
49388#ifdef FREECIV_JSON_CONNECTION
49389 field_addr.name = "sound_fight_alt";
49390#endif /* FREECIV_JSON_CONNECTION */
49391 e = 0;
49392
49393 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
49394
49395 if (e) {
49396 log_packet_detailed("'sound_fight_alt' field error detected");
49397 }
49398 }
49399
49400 if (BV_ISSET(fields, 10)) {
49401 log_packet_detailed(" field 'unit_class_id' has changed");
49402
49403#ifdef FREECIV_JSON_CONNECTION
49404 field_addr.name = "unit_class_id";
49405#endif /* FREECIV_JSON_CONNECTION */
49406 e = 0;
49407
49408 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
49409
49410 if (e) {
49411 log_packet_detailed("'unit_class_id' field error detected");
49412 }
49413 }
49414
49415 if (BV_ISSET(fields, 11)) {
49416 log_packet_detailed(" field 'build_cost' has changed");
49417
49418#ifdef FREECIV_JSON_CONNECTION
49419 field_addr.name = "build_cost";
49420#endif /* FREECIV_JSON_CONNECTION */
49421 e = 0;
49422
49423 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
49424
49425 if (e) {
49426 log_packet_detailed("'build_cost' field error detected");
49427 }
49428 }
49429
49430 if (BV_ISSET(fields, 12)) {
49431 log_packet_detailed(" field 'pop_cost' has changed");
49432
49433#ifdef FREECIV_JSON_CONNECTION
49434 field_addr.name = "pop_cost";
49435#endif /* FREECIV_JSON_CONNECTION */
49436 e = 0;
49437
49438 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
49439
49440 if (e) {
49441 log_packet_detailed("'pop_cost' field error detected");
49442 }
49443 }
49444
49445 if (BV_ISSET(fields, 13)) {
49446 log_packet_detailed(" field 'spectype_id' has changed");
49447
49448#ifdef FREECIV_JSON_CONNECTION
49449 field_addr.name = "spectype_id";
49450#endif /* FREECIV_JSON_CONNECTION */
49451 e = 0;
49452
49453 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->spectype_id);
49454
49455 if (e) {
49456 log_packet_detailed("'spectype_id' field error detected");
49457 }
49458 }
49459
49460 if (BV_ISSET(fields, 14)) {
49461 log_packet_detailed(" field 'attack_strength' has changed");
49462
49463#ifdef FREECIV_JSON_CONNECTION
49464 field_addr.name = "attack_strength";
49465#endif /* FREECIV_JSON_CONNECTION */
49466 e = 0;
49467
49468 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
49469
49470 if (e) {
49471 log_packet_detailed("'attack_strength' field error detected");
49472 }
49473 }
49474
49475 if (BV_ISSET(fields, 15)) {
49476 log_packet_detailed(" field 'defense_strength' has changed");
49477
49478#ifdef FREECIV_JSON_CONNECTION
49479 field_addr.name = "defense_strength";
49480#endif /* FREECIV_JSON_CONNECTION */
49481 e = 0;
49482
49483 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
49484
49485 if (e) {
49486 log_packet_detailed("'defense_strength' field error detected");
49487 }
49488 }
49489
49490 if (BV_ISSET(fields, 16)) {
49491 log_packet_detailed(" field 'move_rate' has changed");
49492
49493#ifdef FREECIV_JSON_CONNECTION
49494 field_addr.name = "move_rate";
49495#endif /* FREECIV_JSON_CONNECTION */
49496 e = 0;
49497
49498 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
49499
49500 if (e) {
49501 log_packet_detailed("'move_rate' field error detected");
49502 }
49503 }
49504
49505 if (BV_ISSET(fields, 17)) {
49506 log_packet_detailed(" field 'build_reqs' has changed");
49507
49508#ifdef FREECIV_JSON_CONNECTION
49509 field_addr.name = "build_reqs";
49510#endif /* FREECIV_JSON_CONNECTION */
49511 e = 0;
49512
49513 {
49514 int i;
49515
49518
49519#ifdef FREECIV_JSON_CONNECTION
49520 /* Enter array. */
49521 field_addr.sub_location = plocation_elem_new(0);
49522#endif /* FREECIV_JSON_CONNECTION */
49523
49524 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
49525#ifdef FREECIV_JSON_CONNECTION
49526 /* Next array element. */
49527 field_addr.sub_location->number = i;
49528#endif /* FREECIV_JSON_CONNECTION */
49529
49530 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
49531 }
49532
49533#ifdef FREECIV_JSON_CONNECTION
49534 /* Exit array. */
49535 FC_FREE(field_addr.sub_location);
49536#endif /* FREECIV_JSON_CONNECTION */
49537 }
49538
49539 if (e) {
49540 log_packet_detailed("'build_reqs' field error detected");
49541 }
49542 }
49543
49544 if (BV_ISSET(fields, 18)) {
49545 log_packet_detailed(" field 'vision_radius_sq' has changed");
49546
49547#ifdef FREECIV_JSON_CONNECTION
49548 field_addr.name = "vision_radius_sq";
49549#endif /* FREECIV_JSON_CONNECTION */
49550 e = 0;
49551
49552 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
49553
49554 if (e) {
49555 log_packet_detailed("'vision_radius_sq' field error detected");
49556 }
49557 }
49558
49559 if (BV_ISSET(fields, 19)) {
49560 log_packet_detailed(" field 'transport_capacity' has changed");
49561
49562#ifdef FREECIV_JSON_CONNECTION
49563 field_addr.name = "transport_capacity";
49564#endif /* FREECIV_JSON_CONNECTION */
49565 e = 0;
49566
49567 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
49568
49569 if (e) {
49570 log_packet_detailed("'transport_capacity' field error detected");
49571 }
49572 }
49573
49574 if (BV_ISSET(fields, 20)) {
49575 log_packet_detailed(" field 'hp' has changed");
49576
49577#ifdef FREECIV_JSON_CONNECTION
49578 field_addr.name = "hp";
49579#endif /* FREECIV_JSON_CONNECTION */
49580 e = 0;
49581
49582 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
49583
49584 if (e) {
49585 log_packet_detailed("'hp' field error detected");
49586 }
49587 }
49588
49589 if (BV_ISSET(fields, 21)) {
49590 log_packet_detailed(" field 'firepower' has changed");
49591
49592#ifdef FREECIV_JSON_CONNECTION
49593 field_addr.name = "firepower";
49594#endif /* FREECIV_JSON_CONNECTION */
49595 e = 0;
49596
49597 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
49598
49599 if (e) {
49600 log_packet_detailed("'firepower' field error detected");
49601 }
49602 }
49603
49604 if (BV_ISSET(fields, 22)) {
49605 log_packet_detailed(" field 'obsoleted_by' has changed");
49606
49607#ifdef FREECIV_JSON_CONNECTION
49608 field_addr.name = "obsoleted_by";
49609#endif /* FREECIV_JSON_CONNECTION */
49610 e = 0;
49611
49612 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
49613
49614 if (e) {
49615 log_packet_detailed("'obsoleted_by' field error detected");
49616 }
49617 }
49618
49619 if (BV_ISSET(fields, 23)) {
49620 log_packet_detailed(" field 'converted_to' has changed");
49621
49622#ifdef FREECIV_JSON_CONNECTION
49623 field_addr.name = "converted_to";
49624#endif /* FREECIV_JSON_CONNECTION */
49625 e = 0;
49626
49627 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
49628
49629 if (e) {
49630 log_packet_detailed("'converted_to' field error detected");
49631 }
49632 }
49633
49634 if (BV_ISSET(fields, 24)) {
49635 log_packet_detailed(" field 'convert_time' has changed");
49636
49637#ifdef FREECIV_JSON_CONNECTION
49638 field_addr.name = "convert_time";
49639#endif /* FREECIV_JSON_CONNECTION */
49640 e = 0;
49641
49642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
49643
49644 if (e) {
49645 log_packet_detailed("'convert_time' field error detected");
49646 }
49647 }
49648
49649 if (BV_ISSET(fields, 25)) {
49650 log_packet_detailed(" field 'fuel' has changed");
49651
49652#ifdef FREECIV_JSON_CONNECTION
49653 field_addr.name = "fuel";
49654#endif /* FREECIV_JSON_CONNECTION */
49655 e = 0;
49656
49657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
49658
49659 if (e) {
49660 log_packet_detailed("'fuel' field error detected");
49661 }
49662 }
49663
49664 if (BV_ISSET(fields, 26)) {
49665 log_packet_detailed(" field 'happy_cost' has changed");
49666
49667#ifdef FREECIV_JSON_CONNECTION
49668 field_addr.name = "happy_cost";
49669#endif /* FREECIV_JSON_CONNECTION */
49670 e = 0;
49671
49672 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
49673
49674 if (e) {
49675 log_packet_detailed("'happy_cost' field error detected");
49676 }
49677 }
49678
49679 if (BV_ISSET(fields, 27)) {
49680 log_packet_detailed(" field 'upkeep' has changed");
49681
49682#ifdef FREECIV_JSON_CONNECTION
49683 field_addr.name = "upkeep";
49684#endif /* FREECIV_JSON_CONNECTION */
49685 e = 0;
49686
49687 {
49688 int i;
49689
49690#ifdef FREECIV_JSON_CONNECTION
49691 /* Create the array. */
49692 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
49693
49694 /* Enter array. */
49695 field_addr.sub_location = plocation_elem_new(0);
49696#endif /* FREECIV_JSON_CONNECTION */
49697
49698 for (i = 0; i < O_LAST; i++) {
49699#ifdef FREECIV_JSON_CONNECTION
49700 /* Next array element. */
49701 field_addr.sub_location->number = i;
49702#endif /* FREECIV_JSON_CONNECTION */
49703
49704 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
49705 }
49706
49707#ifdef FREECIV_JSON_CONNECTION
49708 /* Exit array. */
49709 FC_FREE(field_addr.sub_location);
49710#endif /* FREECIV_JSON_CONNECTION */
49711 }
49712
49713 if (e) {
49714 log_packet_detailed("'upkeep' field error detected");
49715 }
49716 }
49717
49718 if (BV_ISSET(fields, 28)) {
49719 log_packet_detailed(" field 'paratroopers_range' has changed");
49720
49721#ifdef FREECIV_JSON_CONNECTION
49722 field_addr.name = "paratroopers_range";
49723#endif /* FREECIV_JSON_CONNECTION */
49724 e = 0;
49725
49726 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
49727
49728 if (e) {
49729 log_packet_detailed("'paratroopers_range' field error detected");
49730 }
49731 }
49732
49733 if (BV_ISSET(fields, 29)) {
49734 log_packet_detailed(" field 'veteran_levels' has changed");
49735
49736#ifdef FREECIV_JSON_CONNECTION
49737 field_addr.name = "veteran_levels";
49738#endif /* FREECIV_JSON_CONNECTION */
49739 e = 0;
49740
49741 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
49742
49743 if (e) {
49744 log_packet_detailed("'veteran_levels' field error detected");
49745 }
49746 }
49747
49748 if (BV_ISSET(fields, 30)) {
49749 log_packet_detailed(" field 'veteran_name' has changed");
49750
49751#ifdef FREECIV_JSON_CONNECTION
49752 field_addr.name = "veteran_name";
49753#endif /* FREECIV_JSON_CONNECTION */
49754 e = 0;
49755
49756 {
49757 int i;
49758
49759#ifdef FREECIV_JSON_CONNECTION
49760 /* Create the array. */
49761 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49762
49763 /* Enter array. */
49764 field_addr.sub_location = plocation_elem_new(0);
49765#endif /* FREECIV_JSON_CONNECTION */
49766
49767 for (i = 0; i < real_packet->veteran_levels; i++) {
49768#ifdef FREECIV_JSON_CONNECTION
49769 /* Next array element. */
49770 field_addr.sub_location->number = i;
49771#endif /* FREECIV_JSON_CONNECTION */
49772
49773 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
49774 }
49775
49776#ifdef FREECIV_JSON_CONNECTION
49777 /* Exit array. */
49778 FC_FREE(field_addr.sub_location);
49779#endif /* FREECIV_JSON_CONNECTION */
49780 }
49781
49782 if (e) {
49783 log_packet_detailed("'veteran_name' field error detected");
49784 }
49785 }
49786
49787 if (BV_ISSET(fields, 31)) {
49788 log_packet_detailed(" field 'power_fact' has changed");
49789
49790#ifdef FREECIV_JSON_CONNECTION
49791 field_addr.name = "power_fact";
49792#endif /* FREECIV_JSON_CONNECTION */
49793 e = 0;
49794
49795 {
49796 int i;
49797
49798#ifdef FREECIV_JSON_CONNECTION
49799 /* Create the array. */
49800 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49801
49802 /* Enter array. */
49803 field_addr.sub_location = plocation_elem_new(0);
49804#endif /* FREECIV_JSON_CONNECTION */
49805
49806 for (i = 0; i < real_packet->veteran_levels; i++) {
49807#ifdef FREECIV_JSON_CONNECTION
49808 /* Next array element. */
49809 field_addr.sub_location->number = i;
49810#endif /* FREECIV_JSON_CONNECTION */
49811
49812 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
49813 }
49814
49815#ifdef FREECIV_JSON_CONNECTION
49816 /* Exit array. */
49817 FC_FREE(field_addr.sub_location);
49818#endif /* FREECIV_JSON_CONNECTION */
49819 }
49820
49821 if (e) {
49822 log_packet_detailed("'power_fact' field error detected");
49823 }
49824 }
49825
49826 if (BV_ISSET(fields, 32)) {
49827 log_packet_detailed(" field 'move_bonus' has changed");
49828
49829#ifdef FREECIV_JSON_CONNECTION
49830 field_addr.name = "move_bonus";
49831#endif /* FREECIV_JSON_CONNECTION */
49832 e = 0;
49833
49834 {
49835 int i;
49836
49837#ifdef FREECIV_JSON_CONNECTION
49838 /* Create the array. */
49839 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49840
49841 /* Enter array. */
49842 field_addr.sub_location = plocation_elem_new(0);
49843#endif /* FREECIV_JSON_CONNECTION */
49844
49845 for (i = 0; i < real_packet->veteran_levels; i++) {
49846#ifdef FREECIV_JSON_CONNECTION
49847 /* Next array element. */
49848 field_addr.sub_location->number = i;
49849#endif /* FREECIV_JSON_CONNECTION */
49850
49851 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
49852 }
49853
49854#ifdef FREECIV_JSON_CONNECTION
49855 /* Exit array. */
49856 FC_FREE(field_addr.sub_location);
49857#endif /* FREECIV_JSON_CONNECTION */
49858 }
49859
49860 if (e) {
49861 log_packet_detailed("'move_bonus' field error detected");
49862 }
49863 }
49864
49865 if (BV_ISSET(fields, 33)) {
49866 log_packet_detailed(" field 'base_raise_chance' has changed");
49867
49868#ifdef FREECIV_JSON_CONNECTION
49869 field_addr.name = "base_raise_chance";
49870#endif /* FREECIV_JSON_CONNECTION */
49871 e = 0;
49872
49873 {
49874 int i;
49875
49876#ifdef FREECIV_JSON_CONNECTION
49877 /* Create the array. */
49878 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49879
49880 /* Enter array. */
49881 field_addr.sub_location = plocation_elem_new(0);
49882#endif /* FREECIV_JSON_CONNECTION */
49883
49884 for (i = 0; i < real_packet->veteran_levels; i++) {
49885#ifdef FREECIV_JSON_CONNECTION
49886 /* Next array element. */
49887 field_addr.sub_location->number = i;
49888#endif /* FREECIV_JSON_CONNECTION */
49889
49890 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
49891 }
49892
49893#ifdef FREECIV_JSON_CONNECTION
49894 /* Exit array. */
49895 FC_FREE(field_addr.sub_location);
49896#endif /* FREECIV_JSON_CONNECTION */
49897 }
49898
49899 if (e) {
49900 log_packet_detailed("'base_raise_chance' field error detected");
49901 }
49902 }
49903
49904 if (BV_ISSET(fields, 34)) {
49905 log_packet_detailed(" field 'work_raise_chance' has changed");
49906
49907#ifdef FREECIV_JSON_CONNECTION
49908 field_addr.name = "work_raise_chance";
49909#endif /* FREECIV_JSON_CONNECTION */
49910 e = 0;
49911
49912 {
49913 int i;
49914
49915#ifdef FREECIV_JSON_CONNECTION
49916 /* Create the array. */
49917 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49918
49919 /* Enter array. */
49920 field_addr.sub_location = plocation_elem_new(0);
49921#endif /* FREECIV_JSON_CONNECTION */
49922
49923 for (i = 0; i < real_packet->veteran_levels; i++) {
49924#ifdef FREECIV_JSON_CONNECTION
49925 /* Next array element. */
49926 field_addr.sub_location->number = i;
49927#endif /* FREECIV_JSON_CONNECTION */
49928
49929 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
49930 }
49931
49932#ifdef FREECIV_JSON_CONNECTION
49933 /* Exit array. */
49934 FC_FREE(field_addr.sub_location);
49935#endif /* FREECIV_JSON_CONNECTION */
49936 }
49937
49938 if (e) {
49939 log_packet_detailed("'work_raise_chance' field error detected");
49940 }
49941 }
49942
49943 if (BV_ISSET(fields, 35)) {
49944 log_packet_detailed(" field 'bombard_rate' has changed");
49945
49946#ifdef FREECIV_JSON_CONNECTION
49947 field_addr.name = "bombard_rate";
49948#endif /* FREECIV_JSON_CONNECTION */
49949 e = 0;
49950
49951 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
49952
49953 if (e) {
49954 log_packet_detailed("'bombard_rate' field error detected");
49955 }
49956 }
49957
49958 if (BV_ISSET(fields, 36)) {
49959 log_packet_detailed(" field 'city_size' has changed");
49960
49961#ifdef FREECIV_JSON_CONNECTION
49962 field_addr.name = "city_size";
49963#endif /* FREECIV_JSON_CONNECTION */
49964 e = 0;
49965
49966 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
49967
49968 if (e) {
49969 log_packet_detailed("'city_size' field error detected");
49970 }
49971 }
49972
49973 if (BV_ISSET(fields, 37)) {
49974 log_packet_detailed(" field 'city_slots' has changed");
49975
49976#ifdef FREECIV_JSON_CONNECTION
49977 field_addr.name = "city_slots";
49978#endif /* FREECIV_JSON_CONNECTION */
49979 e = 0;
49980
49981 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
49982
49983 if (e) {
49984 log_packet_detailed("'city_slots' field error detected");
49985 }
49986 }
49987
49988 if (BV_ISSET(fields, 38)) {
49989 log_packet_detailed(" field 'tp_defense' has changed");
49990
49991#ifdef FREECIV_JSON_CONNECTION
49992 field_addr.name = "tp_defense";
49993#endif /* FREECIV_JSON_CONNECTION */
49994 e = 0;
49995
49996 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
49997
49998 if (e) {
49999 log_packet_detailed("'tp_defense' field error detected");
50000 }
50001 }
50002
50003 if (BV_ISSET(fields, 39)) {
50004 log_packet_detailed(" field 'cargo' has changed");
50005
50006#ifdef FREECIV_JSON_CONNECTION
50007 field_addr.name = "cargo";
50008#endif /* FREECIV_JSON_CONNECTION */
50009 e = 0;
50010
50011 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
50012
50013 if (e) {
50014 log_packet_detailed("'cargo' field error detected");
50015 }
50016 }
50017
50018 if (BV_ISSET(fields, 40)) {
50019 log_packet_detailed(" field 'targets' has changed");
50020
50021#ifdef FREECIV_JSON_CONNECTION
50022 field_addr.name = "targets";
50023#endif /* FREECIV_JSON_CONNECTION */
50024 e = 0;
50025
50026 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
50027
50028 if (e) {
50029 log_packet_detailed("'targets' field error detected");
50030 }
50031 }
50032
50033 if (BV_ISSET(fields, 41)) {
50034 log_packet_detailed(" field 'embarks' has changed");
50035
50036#ifdef FREECIV_JSON_CONNECTION
50037 field_addr.name = "embarks";
50038#endif /* FREECIV_JSON_CONNECTION */
50039 e = 0;
50040
50041 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
50042
50043 if (e) {
50044 log_packet_detailed("'embarks' field error detected");
50045 }
50046 }
50047
50048 if (BV_ISSET(fields, 42)) {
50049 log_packet_detailed(" field 'disembarks' has changed");
50050
50051#ifdef FREECIV_JSON_CONNECTION
50052 field_addr.name = "disembarks";
50053#endif /* FREECIV_JSON_CONNECTION */
50054 e = 0;
50055
50056 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
50057
50058 if (e) {
50059 log_packet_detailed("'disembarks' field error detected");
50060 }
50061 }
50062
50063 if (BV_ISSET(fields, 43)) {
50064 log_packet_detailed(" field 'vlayer' has changed");
50065
50066#ifdef FREECIV_JSON_CONNECTION
50067 field_addr.name = "vlayer";
50068#endif /* FREECIV_JSON_CONNECTION */
50069 e = 0;
50070
50071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
50072
50073 if (e) {
50074 log_packet_detailed("'vlayer' field error detected");
50075 }
50076 }
50077
50078 if (BV_ISSET(fields, 44)) {
50079 log_packet_detailed(" field 'helptext' has changed");
50080
50081#ifdef FREECIV_JSON_CONNECTION
50082 field_addr.name = "helptext";
50083#endif /* FREECIV_JSON_CONNECTION */
50084 e = 0;
50085
50086 if (!real_packet->helptext) {
50087 /* Transmit null as empty */
50088 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
50089 } else {
50090 int i;
50091
50093 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
50094
50095#ifdef FREECIV_JSON_CONNECTION
50096 /* Enter array. */
50097 field_addr.sub_location = plocation_elem_new(0);
50098#endif /* FREECIV_JSON_CONNECTION */
50099
50100 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
50101#ifdef FREECIV_JSON_CONNECTION
50102 /* Next array element. */
50103 field_addr.sub_location->number = i;
50104#endif /* FREECIV_JSON_CONNECTION */
50105
50106 {
50107 const char *pstr = strvec_get(real_packet->helptext, i);
50108
50109 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
50110 }
50111 }
50112
50113#ifdef FREECIV_JSON_CONNECTION
50114 /* Exit array. */
50115 FC_FREE(field_addr.sub_location);
50116#endif /* FREECIV_JSON_CONNECTION */
50117 }
50118
50119 if (e) {
50120 log_packet_detailed("'helptext' field error detected");
50121 }
50122 }
50123
50124 if (BV_ISSET(fields, 45)) {
50125 log_packet_detailed(" field 'flags' has changed");
50126
50127#ifdef FREECIV_JSON_CONNECTION
50128 field_addr.name = "flags";
50129#endif /* FREECIV_JSON_CONNECTION */
50130 e = 0;
50131
50132 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50133
50134 if (e) {
50135 log_packet_detailed("'flags' field error detected");
50136 }
50137 }
50138
50139 if (BV_ISSET(fields, 46)) {
50140 log_packet_detailed(" field 'roles' has changed");
50141
50142#ifdef FREECIV_JSON_CONNECTION
50143 field_addr.name = "roles";
50144#endif /* FREECIV_JSON_CONNECTION */
50145 e = 0;
50146
50147 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50148
50149 if (e) {
50150 log_packet_detailed("'roles' field error detected");
50151 }
50152 }
50153
50154 /* field 47 is folded into the header */
50155
50156 old->id = real_packet->id;
50157 sz_strlcpy(old->name, real_packet->name);
50158 sz_strlcpy(old->rule_name, real_packet->rule_name);
50159 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
50160 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
50161 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
50162 sz_strlcpy(old->sound_move, real_packet->sound_move);
50163 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
50164 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
50165 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
50166 old->unit_class_id = real_packet->unit_class_id;
50167 old->build_cost = real_packet->build_cost;
50168 old->pop_cost = real_packet->pop_cost;
50169 old->spectype_id = real_packet->spectype_id;
50170 old->attack_strength = real_packet->attack_strength;
50171 old->defense_strength = real_packet->defense_strength;
50172 old->move_rate = real_packet->move_rate;
50173 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
50174 old->vision_radius_sq = real_packet->vision_radius_sq;
50175 old->transport_capacity = real_packet->transport_capacity;
50176 old->hp = real_packet->hp;
50177 old->firepower = real_packet->firepower;
50178 old->obsoleted_by = real_packet->obsoleted_by;
50179 old->converted_to = real_packet->converted_to;
50180 old->convert_time = real_packet->convert_time;
50181 old->fuel = real_packet->fuel;
50182 old->happy_cost = real_packet->happy_cost;
50183 {
50184 int i;
50185
50186 for (i = 0; i < O_LAST; i++) {
50187 old->upkeep[i] = real_packet->upkeep[i];
50188 }
50189 }
50190 old->paratroopers_range = real_packet->paratroopers_range;
50191 old->veteran_levels = real_packet->veteran_levels;
50192 {
50193 int i;
50194
50195 for (i = 0; i < real_packet->veteran_levels; i++) {
50196 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
50197 }
50198 }
50199 {
50200 int i;
50201
50202 for (i = 0; i < real_packet->veteran_levels; i++) {
50203 old->power_fact[i] = real_packet->power_fact[i];
50204 }
50205 }
50206 {
50207 int i;
50208
50209 for (i = 0; i < real_packet->veteran_levels; i++) {
50210 old->move_bonus[i] = real_packet->move_bonus[i];
50211 }
50212 }
50213 {
50214 int i;
50215
50216 for (i = 0; i < real_packet->veteran_levels; i++) {
50217 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
50218 }
50219 }
50220 {
50221 int i;
50222
50223 for (i = 0; i < real_packet->veteran_levels; i++) {
50224 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
50225 }
50226 }
50227 old->bombard_rate = real_packet->bombard_rate;
50228 old->city_size = real_packet->city_size;
50229 old->city_slots = real_packet->city_slots;
50230 old->tp_defense = real_packet->tp_defense;
50231 old->cargo = real_packet->cargo;
50232 old->targets = real_packet->targets;
50233 old->embarks = real_packet->embarks;
50234 old->disembarks = real_packet->disembarks;
50235 old->vlayer = real_packet->vlayer;
50236 if (real_packet->helptext) {
50237 strvec_copy(old->helptext, real_packet->helptext);
50238 } else {
50239 strvec_clear(old->helptext);
50240 }
50241 old->flags = real_packet->flags;
50242 old->roles = real_packet->roles;
50243 old->worker = real_packet->worker;
50244
50245#else /* FREECIV_DELTA_PROTOCOL */
50246#ifdef FREECIV_JSON_CONNECTION
50247 field_addr.name = "id";
50248#endif /* FREECIV_JSON_CONNECTION */
50249 e = 0;
50250
50251 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
50252
50253 if (e) {
50254 log_packet_detailed("'id' field error detected");
50255 }
50256
50257#ifdef FREECIV_JSON_CONNECTION
50258 field_addr.name = "name";
50259#endif /* FREECIV_JSON_CONNECTION */
50260 e = 0;
50261
50262 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50263
50264 if (e) {
50265 log_packet_detailed("'name' field error detected");
50266 }
50267
50268#ifdef FREECIV_JSON_CONNECTION
50269 field_addr.name = "rule_name";
50270#endif /* FREECIV_JSON_CONNECTION */
50271 e = 0;
50272
50273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
50274
50275 if (e) {
50276 log_packet_detailed("'rule_name' field error detected");
50277 }
50278
50279#ifdef FREECIV_JSON_CONNECTION
50280 field_addr.name = "graphic_str";
50281#endif /* FREECIV_JSON_CONNECTION */
50282 e = 0;
50283
50284 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
50285
50286 if (e) {
50287 log_packet_detailed("'graphic_str' field error detected");
50288 }
50289
50290#ifdef FREECIV_JSON_CONNECTION
50291 field_addr.name = "graphic_alt";
50292#endif /* FREECIV_JSON_CONNECTION */
50293 e = 0;
50294
50295 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
50296
50297 if (e) {
50298 log_packet_detailed("'graphic_alt' field error detected");
50299 }
50300
50301#ifdef FREECIV_JSON_CONNECTION
50302 field_addr.name = "graphic_alt2";
50303#endif /* FREECIV_JSON_CONNECTION */
50304 e = 0;
50305
50306 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
50307
50308 if (e) {
50309 log_packet_detailed("'graphic_alt2' field error detected");
50310 }
50311
50312#ifdef FREECIV_JSON_CONNECTION
50313 field_addr.name = "sound_move";
50314#endif /* FREECIV_JSON_CONNECTION */
50315 e = 0;
50316
50317 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
50318
50319 if (e) {
50320 log_packet_detailed("'sound_move' field error detected");
50321 }
50322
50323#ifdef FREECIV_JSON_CONNECTION
50324 field_addr.name = "sound_move_alt";
50325#endif /* FREECIV_JSON_CONNECTION */
50326 e = 0;
50327
50328 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
50329
50330 if (e) {
50331 log_packet_detailed("'sound_move_alt' field error detected");
50332 }
50333
50334#ifdef FREECIV_JSON_CONNECTION
50335 field_addr.name = "sound_fight";
50336#endif /* FREECIV_JSON_CONNECTION */
50337 e = 0;
50338
50339 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
50340
50341 if (e) {
50342 log_packet_detailed("'sound_fight' field error detected");
50343 }
50344
50345#ifdef FREECIV_JSON_CONNECTION
50346 field_addr.name = "sound_fight_alt";
50347#endif /* FREECIV_JSON_CONNECTION */
50348 e = 0;
50349
50350 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
50351
50352 if (e) {
50353 log_packet_detailed("'sound_fight_alt' field error detected");
50354 }
50355
50356#ifdef FREECIV_JSON_CONNECTION
50357 field_addr.name = "unit_class_id";
50358#endif /* FREECIV_JSON_CONNECTION */
50359 e = 0;
50360
50361 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
50362
50363 if (e) {
50364 log_packet_detailed("'unit_class_id' field error detected");
50365 }
50366
50367#ifdef FREECIV_JSON_CONNECTION
50368 field_addr.name = "build_cost";
50369#endif /* FREECIV_JSON_CONNECTION */
50370 e = 0;
50371
50372 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
50373
50374 if (e) {
50375 log_packet_detailed("'build_cost' field error detected");
50376 }
50377
50378#ifdef FREECIV_JSON_CONNECTION
50379 field_addr.name = "pop_cost";
50380#endif /* FREECIV_JSON_CONNECTION */
50381 e = 0;
50382
50383 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
50384
50385 if (e) {
50386 log_packet_detailed("'pop_cost' field error detected");
50387 }
50388
50389#ifdef FREECIV_JSON_CONNECTION
50390 field_addr.name = "spectype_id";
50391#endif /* FREECIV_JSON_CONNECTION */
50392 e = 0;
50393
50394 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->spectype_id);
50395
50396 if (e) {
50397 log_packet_detailed("'spectype_id' field error detected");
50398 }
50399
50400#ifdef FREECIV_JSON_CONNECTION
50401 field_addr.name = "attack_strength";
50402#endif /* FREECIV_JSON_CONNECTION */
50403 e = 0;
50404
50405 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
50406
50407 if (e) {
50408 log_packet_detailed("'attack_strength' field error detected");
50409 }
50410
50411#ifdef FREECIV_JSON_CONNECTION
50412 field_addr.name = "defense_strength";
50413#endif /* FREECIV_JSON_CONNECTION */
50414 e = 0;
50415
50416 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
50417
50418 if (e) {
50419 log_packet_detailed("'defense_strength' field error detected");
50420 }
50421
50422#ifdef FREECIV_JSON_CONNECTION
50423 field_addr.name = "move_rate";
50424#endif /* FREECIV_JSON_CONNECTION */
50425 e = 0;
50426
50427 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
50428
50429 if (e) {
50430 log_packet_detailed("'move_rate' field error detected");
50431 }
50432
50433#ifdef FREECIV_JSON_CONNECTION
50434 field_addr.name = "build_reqs";
50435#endif /* FREECIV_JSON_CONNECTION */
50436 e = 0;
50437
50438 {
50439 int i;
50440
50443
50444#ifdef FREECIV_JSON_CONNECTION
50445 /* Enter array. */
50446 field_addr.sub_location = plocation_elem_new(0);
50447#endif /* FREECIV_JSON_CONNECTION */
50448
50449 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
50450#ifdef FREECIV_JSON_CONNECTION
50451 /* Next array element. */
50452 field_addr.sub_location->number = i;
50453#endif /* FREECIV_JSON_CONNECTION */
50454
50455 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
50456 }
50457
50458#ifdef FREECIV_JSON_CONNECTION
50459 /* Exit array. */
50460 FC_FREE(field_addr.sub_location);
50461#endif /* FREECIV_JSON_CONNECTION */
50462 }
50463
50464 if (e) {
50465 log_packet_detailed("'build_reqs' field error detected");
50466 }
50467
50468#ifdef FREECIV_JSON_CONNECTION
50469 field_addr.name = "vision_radius_sq";
50470#endif /* FREECIV_JSON_CONNECTION */
50471 e = 0;
50472
50473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
50474
50475 if (e) {
50476 log_packet_detailed("'vision_radius_sq' field error detected");
50477 }
50478
50479#ifdef FREECIV_JSON_CONNECTION
50480 field_addr.name = "transport_capacity";
50481#endif /* FREECIV_JSON_CONNECTION */
50482 e = 0;
50483
50484 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
50485
50486 if (e) {
50487 log_packet_detailed("'transport_capacity' field error detected");
50488 }
50489
50490#ifdef FREECIV_JSON_CONNECTION
50491 field_addr.name = "hp";
50492#endif /* FREECIV_JSON_CONNECTION */
50493 e = 0;
50494
50495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
50496
50497 if (e) {
50498 log_packet_detailed("'hp' field error detected");
50499 }
50500
50501#ifdef FREECIV_JSON_CONNECTION
50502 field_addr.name = "firepower";
50503#endif /* FREECIV_JSON_CONNECTION */
50504 e = 0;
50505
50506 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
50507
50508 if (e) {
50509 log_packet_detailed("'firepower' field error detected");
50510 }
50511
50512#ifdef FREECIV_JSON_CONNECTION
50513 field_addr.name = "obsoleted_by";
50514#endif /* FREECIV_JSON_CONNECTION */
50515 e = 0;
50516
50517 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
50518
50519 if (e) {
50520 log_packet_detailed("'obsoleted_by' field error detected");
50521 }
50522
50523#ifdef FREECIV_JSON_CONNECTION
50524 field_addr.name = "converted_to";
50525#endif /* FREECIV_JSON_CONNECTION */
50526 e = 0;
50527
50528 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
50529
50530 if (e) {
50531 log_packet_detailed("'converted_to' field error detected");
50532 }
50533
50534#ifdef FREECIV_JSON_CONNECTION
50535 field_addr.name = "convert_time";
50536#endif /* FREECIV_JSON_CONNECTION */
50537 e = 0;
50538
50539 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
50540
50541 if (e) {
50542 log_packet_detailed("'convert_time' field error detected");
50543 }
50544
50545#ifdef FREECIV_JSON_CONNECTION
50546 field_addr.name = "fuel";
50547#endif /* FREECIV_JSON_CONNECTION */
50548 e = 0;
50549
50550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
50551
50552 if (e) {
50553 log_packet_detailed("'fuel' field error detected");
50554 }
50555
50556#ifdef FREECIV_JSON_CONNECTION
50557 field_addr.name = "happy_cost";
50558#endif /* FREECIV_JSON_CONNECTION */
50559 e = 0;
50560
50561 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
50562
50563 if (e) {
50564 log_packet_detailed("'happy_cost' field error detected");
50565 }
50566
50567#ifdef FREECIV_JSON_CONNECTION
50568 field_addr.name = "upkeep";
50569#endif /* FREECIV_JSON_CONNECTION */
50570 e = 0;
50571
50572 {
50573 int i;
50574
50575#ifdef FREECIV_JSON_CONNECTION
50576 /* Create the array. */
50577 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
50578
50579 /* Enter array. */
50580 field_addr.sub_location = plocation_elem_new(0);
50581#endif /* FREECIV_JSON_CONNECTION */
50582
50583 for (i = 0; i < O_LAST; i++) {
50584#ifdef FREECIV_JSON_CONNECTION
50585 /* Next array element. */
50586 field_addr.sub_location->number = i;
50587#endif /* FREECIV_JSON_CONNECTION */
50588
50589 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
50590 }
50591
50592#ifdef FREECIV_JSON_CONNECTION
50593 /* Exit array. */
50594 FC_FREE(field_addr.sub_location);
50595#endif /* FREECIV_JSON_CONNECTION */
50596 }
50597
50598 if (e) {
50599 log_packet_detailed("'upkeep' field error detected");
50600 }
50601
50602#ifdef FREECIV_JSON_CONNECTION
50603 field_addr.name = "paratroopers_range";
50604#endif /* FREECIV_JSON_CONNECTION */
50605 e = 0;
50606
50607 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
50608
50609 if (e) {
50610 log_packet_detailed("'paratroopers_range' field error detected");
50611 }
50612
50613#ifdef FREECIV_JSON_CONNECTION
50614 field_addr.name = "veteran_levels";
50615#endif /* FREECIV_JSON_CONNECTION */
50616 e = 0;
50617
50618 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
50619
50620 if (e) {
50621 log_packet_detailed("'veteran_levels' field error detected");
50622 }
50623
50624#ifdef FREECIV_JSON_CONNECTION
50625 field_addr.name = "veteran_name";
50626#endif /* FREECIV_JSON_CONNECTION */
50627 e = 0;
50628
50629 {
50630 int i;
50631
50632#ifdef FREECIV_JSON_CONNECTION
50633 /* Create the array. */
50634 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50635
50636 /* Enter array. */
50637 field_addr.sub_location = plocation_elem_new(0);
50638#endif /* FREECIV_JSON_CONNECTION */
50639
50640 for (i = 0; i < real_packet->veteran_levels; i++) {
50641#ifdef FREECIV_JSON_CONNECTION
50642 /* Next array element. */
50643 field_addr.sub_location->number = i;
50644#endif /* FREECIV_JSON_CONNECTION */
50645
50646 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
50647 }
50648
50649#ifdef FREECIV_JSON_CONNECTION
50650 /* Exit array. */
50651 FC_FREE(field_addr.sub_location);
50652#endif /* FREECIV_JSON_CONNECTION */
50653 }
50654
50655 if (e) {
50656 log_packet_detailed("'veteran_name' field error detected");
50657 }
50658
50659#ifdef FREECIV_JSON_CONNECTION
50660 field_addr.name = "power_fact";
50661#endif /* FREECIV_JSON_CONNECTION */
50662 e = 0;
50663
50664 {
50665 int i;
50666
50667#ifdef FREECIV_JSON_CONNECTION
50668 /* Create the array. */
50669 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50670
50671 /* Enter array. */
50672 field_addr.sub_location = plocation_elem_new(0);
50673#endif /* FREECIV_JSON_CONNECTION */
50674
50675 for (i = 0; i < real_packet->veteran_levels; i++) {
50676#ifdef FREECIV_JSON_CONNECTION
50677 /* Next array element. */
50678 field_addr.sub_location->number = i;
50679#endif /* FREECIV_JSON_CONNECTION */
50680
50681 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
50682 }
50683
50684#ifdef FREECIV_JSON_CONNECTION
50685 /* Exit array. */
50686 FC_FREE(field_addr.sub_location);
50687#endif /* FREECIV_JSON_CONNECTION */
50688 }
50689
50690 if (e) {
50691 log_packet_detailed("'power_fact' field error detected");
50692 }
50693
50694#ifdef FREECIV_JSON_CONNECTION
50695 field_addr.name = "move_bonus";
50696#endif /* FREECIV_JSON_CONNECTION */
50697 e = 0;
50698
50699 {
50700 int i;
50701
50702#ifdef FREECIV_JSON_CONNECTION
50703 /* Create the array. */
50704 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50705
50706 /* Enter array. */
50707 field_addr.sub_location = plocation_elem_new(0);
50708#endif /* FREECIV_JSON_CONNECTION */
50709
50710 for (i = 0; i < real_packet->veteran_levels; i++) {
50711#ifdef FREECIV_JSON_CONNECTION
50712 /* Next array element. */
50713 field_addr.sub_location->number = i;
50714#endif /* FREECIV_JSON_CONNECTION */
50715
50716 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
50717 }
50718
50719#ifdef FREECIV_JSON_CONNECTION
50720 /* Exit array. */
50721 FC_FREE(field_addr.sub_location);
50722#endif /* FREECIV_JSON_CONNECTION */
50723 }
50724
50725 if (e) {
50726 log_packet_detailed("'move_bonus' field error detected");
50727 }
50728
50729#ifdef FREECIV_JSON_CONNECTION
50730 field_addr.name = "base_raise_chance";
50731#endif /* FREECIV_JSON_CONNECTION */
50732 e = 0;
50733
50734 {
50735 int i;
50736
50737#ifdef FREECIV_JSON_CONNECTION
50738 /* Create the array. */
50739 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50740
50741 /* Enter array. */
50742 field_addr.sub_location = plocation_elem_new(0);
50743#endif /* FREECIV_JSON_CONNECTION */
50744
50745 for (i = 0; i < real_packet->veteran_levels; i++) {
50746#ifdef FREECIV_JSON_CONNECTION
50747 /* Next array element. */
50748 field_addr.sub_location->number = i;
50749#endif /* FREECIV_JSON_CONNECTION */
50750
50751 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
50752 }
50753
50754#ifdef FREECIV_JSON_CONNECTION
50755 /* Exit array. */
50756 FC_FREE(field_addr.sub_location);
50757#endif /* FREECIV_JSON_CONNECTION */
50758 }
50759
50760 if (e) {
50761 log_packet_detailed("'base_raise_chance' field error detected");
50762 }
50763
50764#ifdef FREECIV_JSON_CONNECTION
50765 field_addr.name = "work_raise_chance";
50766#endif /* FREECIV_JSON_CONNECTION */
50767 e = 0;
50768
50769 {
50770 int i;
50771
50772#ifdef FREECIV_JSON_CONNECTION
50773 /* Create the array. */
50774 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50775
50776 /* Enter array. */
50777 field_addr.sub_location = plocation_elem_new(0);
50778#endif /* FREECIV_JSON_CONNECTION */
50779
50780 for (i = 0; i < real_packet->veteran_levels; i++) {
50781#ifdef FREECIV_JSON_CONNECTION
50782 /* Next array element. */
50783 field_addr.sub_location->number = i;
50784#endif /* FREECIV_JSON_CONNECTION */
50785
50786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
50787 }
50788
50789#ifdef FREECIV_JSON_CONNECTION
50790 /* Exit array. */
50791 FC_FREE(field_addr.sub_location);
50792#endif /* FREECIV_JSON_CONNECTION */
50793 }
50794
50795 if (e) {
50796 log_packet_detailed("'work_raise_chance' field error detected");
50797 }
50798
50799#ifdef FREECIV_JSON_CONNECTION
50800 field_addr.name = "bombard_rate";
50801#endif /* FREECIV_JSON_CONNECTION */
50802 e = 0;
50803
50804 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
50805
50806 if (e) {
50807 log_packet_detailed("'bombard_rate' field error detected");
50808 }
50809
50810#ifdef FREECIV_JSON_CONNECTION
50811 field_addr.name = "city_size";
50812#endif /* FREECIV_JSON_CONNECTION */
50813 e = 0;
50814
50815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
50816
50817 if (e) {
50818 log_packet_detailed("'city_size' field error detected");
50819 }
50820
50821#ifdef FREECIV_JSON_CONNECTION
50822 field_addr.name = "city_slots";
50823#endif /* FREECIV_JSON_CONNECTION */
50824 e = 0;
50825
50826 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
50827
50828 if (e) {
50829 log_packet_detailed("'city_slots' field error detected");
50830 }
50831
50832#ifdef FREECIV_JSON_CONNECTION
50833 field_addr.name = "tp_defense";
50834#endif /* FREECIV_JSON_CONNECTION */
50835 e = 0;
50836
50837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
50838
50839 if (e) {
50840 log_packet_detailed("'tp_defense' field error detected");
50841 }
50842
50843#ifdef FREECIV_JSON_CONNECTION
50844 field_addr.name = "cargo";
50845#endif /* FREECIV_JSON_CONNECTION */
50846 e = 0;
50847
50848 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
50849
50850 if (e) {
50851 log_packet_detailed("'cargo' field error detected");
50852 }
50853
50854#ifdef FREECIV_JSON_CONNECTION
50855 field_addr.name = "targets";
50856#endif /* FREECIV_JSON_CONNECTION */
50857 e = 0;
50858
50859 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
50860
50861 if (e) {
50862 log_packet_detailed("'targets' field error detected");
50863 }
50864
50865#ifdef FREECIV_JSON_CONNECTION
50866 field_addr.name = "embarks";
50867#endif /* FREECIV_JSON_CONNECTION */
50868 e = 0;
50869
50870 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
50871
50872 if (e) {
50873 log_packet_detailed("'embarks' field error detected");
50874 }
50875
50876#ifdef FREECIV_JSON_CONNECTION
50877 field_addr.name = "disembarks";
50878#endif /* FREECIV_JSON_CONNECTION */
50879 e = 0;
50880
50881 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
50882
50883 if (e) {
50884 log_packet_detailed("'disembarks' field error detected");
50885 }
50886
50887#ifdef FREECIV_JSON_CONNECTION
50888 field_addr.name = "vlayer";
50889#endif /* FREECIV_JSON_CONNECTION */
50890 e = 0;
50891
50892 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
50893
50894 if (e) {
50895 log_packet_detailed("'vlayer' field error detected");
50896 }
50897
50898#ifdef FREECIV_JSON_CONNECTION
50899 field_addr.name = "helptext";
50900#endif /* FREECIV_JSON_CONNECTION */
50901 e = 0;
50902
50903 if (!real_packet->helptext) {
50904 /* Transmit null as empty */
50905 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
50906 } else {
50907 int i;
50908
50910 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
50911
50912#ifdef FREECIV_JSON_CONNECTION
50913 /* Enter array. */
50914 field_addr.sub_location = plocation_elem_new(0);
50915#endif /* FREECIV_JSON_CONNECTION */
50916
50917 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
50918#ifdef FREECIV_JSON_CONNECTION
50919 /* Next array element. */
50920 field_addr.sub_location->number = i;
50921#endif /* FREECIV_JSON_CONNECTION */
50922
50923 {
50924 const char *pstr = strvec_get(real_packet->helptext, i);
50925
50926 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
50927 }
50928 }
50929
50930#ifdef FREECIV_JSON_CONNECTION
50931 /* Exit array. */
50932 FC_FREE(field_addr.sub_location);
50933#endif /* FREECIV_JSON_CONNECTION */
50934 }
50935
50936 if (e) {
50937 log_packet_detailed("'helptext' field error detected");
50938 }
50939
50940#ifdef FREECIV_JSON_CONNECTION
50941 field_addr.name = "flags";
50942#endif /* FREECIV_JSON_CONNECTION */
50943 e = 0;
50944
50945 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50946
50947 if (e) {
50948 log_packet_detailed("'flags' field error detected");
50949 }
50950
50951#ifdef FREECIV_JSON_CONNECTION
50952 field_addr.name = "roles";
50953#endif /* FREECIV_JSON_CONNECTION */
50954 e = 0;
50955
50956 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50957
50958 if (e) {
50959 log_packet_detailed("'roles' field error detected");
50960 }
50961
50962#ifdef FREECIV_JSON_CONNECTION
50963 field_addr.name = "worker";
50964#endif /* FREECIV_JSON_CONNECTION */
50965 e = 0;
50966
50967 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->worker);
50968
50969 if (e) {
50970 log_packet_detailed("'worker' field error detected");
50971 }
50972#endif /* FREECIV_DELTA_PROTOCOL */
50973
50975}
50976
50978{
50979 if (!pc->used) {
50980 log_error("WARNING: trying to send data to the closed connection %s",
50982 return -1;
50983 }
50984 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT].packet != nullptr, -1,
50985 "Handler for PACKET_RULESET_UNIT not installed");
50986 return pc->phs.handlers->send[PACKET_RULESET_UNIT].packet(pc, packet);
50987}
50988
50989void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
50990{
50991 conn_list_iterate(dest, pconn) {
50994}
50995
50997{
50998 memset(packet, 0, sizeof(*packet));
50999}
51000
51001#define free_packet_ruleset_unit_bonus(_packet) (void) 0
51002#define destroy_packet_ruleset_unit_bonus free
51003
51004#ifdef FREECIV_DELTA_PROTOCOL
51005#define hash_packet_ruleset_unit_bonus_100 hash_const
51006#define cmp_packet_ruleset_unit_bonus_100 cmp_const
51008#endif /* FREECIV_DELTA_PROTOCOL */
51009
51011{
51012#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_bonus(_packet)
51014
51015#ifdef FREECIV_JSON_CONNECTION
51016 struct plocation field_addr;
51017 {
51018 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51021 }
51022#endif /* FREECIV_JSON_CONNECTION */
51023
51024 log_packet_detailed("packet_ruleset_unit_bonus_100: got info about ()");
51025
51026#ifdef FREECIV_DELTA_PROTOCOL
51029 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_BONUS;
51030
51031 if (nullptr == *hash) {
51033 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
51034 }
51035
51036 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51037 *real_packet = *old;
51038 } else {
51039 /* packet is already initialized empty */
51040 log_packet_detailed(" no old info");
51041 }
51042
51043#ifdef FREECIV_JSON_CONNECTION
51044 field_addr.name = "fields";
51045#endif /* FREECIV_JSON_CONNECTION */
51046 DIO_BV_GET(&din, &field_addr, fields);
51047
51048 if (BV_ISSET(fields, 0)) {
51049 log_packet_detailed(" got field 'unit'");
51050
51051#ifdef FREECIV_JSON_CONNECTION
51052 field_addr.name = "unit";
51053#endif /* FREECIV_JSON_CONNECTION */
51054
51055 {
51056 int readin;
51057
51058 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
51060 }
51061 real_packet->unit = readin;
51062 }
51063 }
51064
51065 if (BV_ISSET(fields, 1)) {
51066 log_packet_detailed(" got field 'flag'");
51067
51068#ifdef FREECIV_JSON_CONNECTION
51069 field_addr.name = "flag";
51070#endif /* FREECIV_JSON_CONNECTION */
51071
51072 {
51073 int readin;
51074
51075 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51077 }
51078 real_packet->flag = readin;
51079 }
51080 }
51081
51082 if (BV_ISSET(fields, 2)) {
51083 log_packet_detailed(" got field 'type'");
51084
51085#ifdef FREECIV_JSON_CONNECTION
51086 field_addr.name = "type";
51087#endif /* FREECIV_JSON_CONNECTION */
51088
51089 {
51090 int readin;
51091
51092 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51094 }
51095 real_packet->type = readin;
51096 }
51097 }
51098
51099 if (BV_ISSET(fields, 3)) {
51100 log_packet_detailed(" got field 'value'");
51101
51102#ifdef FREECIV_JSON_CONNECTION
51103 field_addr.name = "value";
51104#endif /* FREECIV_JSON_CONNECTION */
51105
51106 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
51108 }
51109 }
51110
51111 real_packet->quiet = BV_ISSET(fields, 4);
51112
51113 if (nullptr == old) {
51114 old = fc_malloc(sizeof(*old));
51116 *old = *real_packet;
51118 } else {
51119 *old = *real_packet;
51120 }
51121
51122#else /* FREECIV_DELTA_PROTOCOL */
51123#ifdef FREECIV_JSON_CONNECTION
51124 field_addr.name = "unit";
51125#endif /* FREECIV_JSON_CONNECTION */
51126
51127 {
51128 int readin;
51129
51130 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
51132 }
51133 real_packet->unit = readin;
51134 }
51135
51136#ifdef FREECIV_JSON_CONNECTION
51137 field_addr.name = "flag";
51138#endif /* FREECIV_JSON_CONNECTION */
51139
51140 {
51141 int readin;
51142
51143 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51145 }
51146 real_packet->flag = readin;
51147 }
51148
51149#ifdef FREECIV_JSON_CONNECTION
51150 field_addr.name = "type";
51151#endif /* FREECIV_JSON_CONNECTION */
51152
51153 {
51154 int readin;
51155
51156 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51158 }
51159 real_packet->type = readin;
51160 }
51161
51162#ifdef FREECIV_JSON_CONNECTION
51163 field_addr.name = "value";
51164#endif /* FREECIV_JSON_CONNECTION */
51165
51166 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
51168 }
51169
51170#ifdef FREECIV_JSON_CONNECTION
51171 field_addr.name = "quiet";
51172#endif /* FREECIV_JSON_CONNECTION */
51173
51174 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
51176 }
51177#endif /* FREECIV_DELTA_PROTOCOL */
51178
51180#undef FREE_PACKET_STRUCT
51181}
51182
51184{
51185 const struct packet_ruleset_unit_bonus *real_packet = packet;
51186 int e;
51188
51189 log_packet_detailed("packet_ruleset_unit_bonus_100: sending info about ()");
51190
51191#ifdef FREECIV_DELTA_PROTOCOL
51194 bool differ;
51195 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_BONUS;
51196
51197 if (nullptr == *hash) {
51199 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
51200 }
51201 BV_CLR_ALL(fields);
51202
51203 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51204 old = fc_malloc(sizeof(*old));
51205 /* temporary bitcopy just to insert correctly */
51206 *old = *real_packet;
51209 }
51210
51211 differ = (old->unit != real_packet->unit);
51212 if (differ) {
51213 BV_SET(fields, 0);
51214 }
51215
51216 differ = (old->flag != real_packet->flag);
51217 if (differ) {
51218 BV_SET(fields, 1);
51219 }
51220
51221 differ = (old->type != real_packet->type);
51222 if (differ) {
51223 BV_SET(fields, 2);
51224 }
51225
51226 differ = (old->value != real_packet->value);
51227 if (differ) {
51228 BV_SET(fields, 3);
51229 }
51230
51231 /* folded into head */
51232 if (real_packet->quiet) {
51233 BV_SET(fields, 4);
51234 }
51235#endif /* FREECIV_DELTA_PROTOCOL */
51236
51237#ifdef FREECIV_JSON_CONNECTION
51238 struct plocation field_addr;
51239 {
51240 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51243 }
51244#endif /* FREECIV_JSON_CONNECTION */
51245
51246#ifdef FREECIV_DELTA_PROTOCOL
51247#ifdef FREECIV_JSON_CONNECTION
51248 field_addr.name = "fields";
51249#endif /* FREECIV_JSON_CONNECTION */
51250 e = 0;
51251 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51252 if (e) {
51253 log_packet_detailed("fields bitvector error detected");
51254 }
51255
51256 if (BV_ISSET(fields, 0)) {
51257 log_packet_detailed(" field 'unit' has changed");
51258
51259#ifdef FREECIV_JSON_CONNECTION
51260 field_addr.name = "unit";
51261#endif /* FREECIV_JSON_CONNECTION */
51262 e = 0;
51263
51264 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51265
51266 if (e) {
51267 log_packet_detailed("'unit' field error detected");
51268 }
51269 }
51270
51271 if (BV_ISSET(fields, 1)) {
51272 log_packet_detailed(" field 'flag' has changed");
51273
51274#ifdef FREECIV_JSON_CONNECTION
51275 field_addr.name = "flag";
51276#endif /* FREECIV_JSON_CONNECTION */
51277 e = 0;
51278
51279 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51280
51281 if (e) {
51282 log_packet_detailed("'flag' field error detected");
51283 }
51284 }
51285
51286 if (BV_ISSET(fields, 2)) {
51287 log_packet_detailed(" field 'type' has changed");
51288
51289#ifdef FREECIV_JSON_CONNECTION
51290 field_addr.name = "type";
51291#endif /* FREECIV_JSON_CONNECTION */
51292 e = 0;
51293
51294 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51295
51296 if (e) {
51297 log_packet_detailed("'type' field error detected");
51298 }
51299 }
51300
51301 if (BV_ISSET(fields, 3)) {
51302 log_packet_detailed(" field 'value' has changed");
51303
51304#ifdef FREECIV_JSON_CONNECTION
51305 field_addr.name = "value";
51306#endif /* FREECIV_JSON_CONNECTION */
51307 e = 0;
51308
51309 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51310
51311 if (e) {
51312 log_packet_detailed("'value' field error detected");
51313 }
51314 }
51315
51316 /* field 4 is folded into the header */
51317
51318 *old = *real_packet;
51319
51320#else /* FREECIV_DELTA_PROTOCOL */
51321#ifdef FREECIV_JSON_CONNECTION
51322 field_addr.name = "unit";
51323#endif /* FREECIV_JSON_CONNECTION */
51324 e = 0;
51325
51326 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51327
51328 if (e) {
51329 log_packet_detailed("'unit' field error detected");
51330 }
51331
51332#ifdef FREECIV_JSON_CONNECTION
51333 field_addr.name = "flag";
51334#endif /* FREECIV_JSON_CONNECTION */
51335 e = 0;
51336
51337 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51338
51339 if (e) {
51340 log_packet_detailed("'flag' field error detected");
51341 }
51342
51343#ifdef FREECIV_JSON_CONNECTION
51344 field_addr.name = "type";
51345#endif /* FREECIV_JSON_CONNECTION */
51346 e = 0;
51347
51348 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51349
51350 if (e) {
51351 log_packet_detailed("'type' field error detected");
51352 }
51353
51354#ifdef FREECIV_JSON_CONNECTION
51355 field_addr.name = "value";
51356#endif /* FREECIV_JSON_CONNECTION */
51357 e = 0;
51358
51359 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51360
51361 if (e) {
51362 log_packet_detailed("'value' field error detected");
51363 }
51364
51365#ifdef FREECIV_JSON_CONNECTION
51366 field_addr.name = "quiet";
51367#endif /* FREECIV_JSON_CONNECTION */
51368 e = 0;
51369
51370 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
51371
51372 if (e) {
51373 log_packet_detailed("'quiet' field error detected");
51374 }
51375#endif /* FREECIV_DELTA_PROTOCOL */
51376
51378}
51379
51381{
51382 if (!pc->used) {
51383 log_error("WARNING: trying to send data to the closed connection %s",
51385 return -1;
51386 }
51387 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet != nullptr, -1,
51388 "Handler for PACKET_RULESET_UNIT_BONUS not installed");
51389 return pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet(pc, packet);
51390}
51391
51393{
51394 conn_list_iterate(dest, pconn) {
51397}
51398
51400{
51401 memset(packet, 0, sizeof(*packet));
51402}
51403
51404#define free_packet_ruleset_unit_flag(_packet) (void) 0
51405#define destroy_packet_ruleset_unit_flag free
51406
51407#ifdef FREECIV_DELTA_PROTOCOL
51408#define hash_packet_ruleset_unit_flag_100 hash_const
51409#define cmp_packet_ruleset_unit_flag_100 cmp_const
51411#endif /* FREECIV_DELTA_PROTOCOL */
51412
51414{
51415#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_flag(_packet)
51417
51418#ifdef FREECIV_JSON_CONNECTION
51419 struct plocation field_addr;
51420 {
51421 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51424 }
51425#endif /* FREECIV_JSON_CONNECTION */
51426
51427 log_packet_detailed("packet_ruleset_unit_flag_100: got info about ()");
51428
51429#ifdef FREECIV_DELTA_PROTOCOL
51432 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_FLAG;
51433
51434 if (nullptr == *hash) {
51436 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51437 }
51438
51439 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51440 *real_packet = *old;
51441 } else {
51442 /* packet is already initialized empty */
51443 log_packet_detailed(" no old info");
51444 }
51445
51446#ifdef FREECIV_JSON_CONNECTION
51447 field_addr.name = "fields";
51448#endif /* FREECIV_JSON_CONNECTION */
51449 DIO_BV_GET(&din, &field_addr, fields);
51450
51451 if (BV_ISSET(fields, 0)) {
51452 log_packet_detailed(" got field 'id'");
51453
51454#ifdef FREECIV_JSON_CONNECTION
51455 field_addr.name = "id";
51456#endif /* FREECIV_JSON_CONNECTION */
51457
51458 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51460 }
51461 }
51462
51463 if (BV_ISSET(fields, 1)) {
51464 log_packet_detailed(" got field 'name'");
51465
51466#ifdef FREECIV_JSON_CONNECTION
51467 field_addr.name = "name";
51468#endif /* FREECIV_JSON_CONNECTION */
51469
51470 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51472 }
51473 }
51474
51475 if (BV_ISSET(fields, 2)) {
51476 log_packet_detailed(" got field 'helptxt'");
51477
51478#ifdef FREECIV_JSON_CONNECTION
51479 field_addr.name = "helptxt";
51480#endif /* FREECIV_JSON_CONNECTION */
51481
51482 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51484 }
51485 }
51486
51487 if (nullptr == old) {
51488 old = fc_malloc(sizeof(*old));
51490 *old = *real_packet;
51492 } else {
51493 *old = *real_packet;
51494 }
51495
51496#else /* FREECIV_DELTA_PROTOCOL */
51497#ifdef FREECIV_JSON_CONNECTION
51498 field_addr.name = "id";
51499#endif /* FREECIV_JSON_CONNECTION */
51500
51501 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51503 }
51504
51505#ifdef FREECIV_JSON_CONNECTION
51506 field_addr.name = "name";
51507#endif /* FREECIV_JSON_CONNECTION */
51508
51509 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51511 }
51512
51513#ifdef FREECIV_JSON_CONNECTION
51514 field_addr.name = "helptxt";
51515#endif /* FREECIV_JSON_CONNECTION */
51516
51517 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51519 }
51520#endif /* FREECIV_DELTA_PROTOCOL */
51521
51523#undef FREE_PACKET_STRUCT
51524}
51525
51527{
51528 const struct packet_ruleset_unit_flag *real_packet = packet;
51529 int e;
51531
51532 log_packet_detailed("packet_ruleset_unit_flag_100: sending info about ()");
51533
51534#ifdef FREECIV_DELTA_PROTOCOL
51537 bool differ;
51538 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_FLAG;
51539
51540 if (nullptr == *hash) {
51542 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51543 }
51544 BV_CLR_ALL(fields);
51545
51546 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51547 old = fc_malloc(sizeof(*old));
51548 /* temporary bitcopy just to insert correctly */
51549 *old = *real_packet;
51552 }
51553
51554 differ = (old->id != real_packet->id);
51555 if (differ) {
51556 BV_SET(fields, 0);
51557 }
51558
51559 differ = (strcmp(old->name, real_packet->name) != 0);
51560 if (differ) {
51561 BV_SET(fields, 1);
51562 }
51563
51564 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51565 if (differ) {
51566 BV_SET(fields, 2);
51567 }
51568#endif /* FREECIV_DELTA_PROTOCOL */
51569
51570#ifdef FREECIV_JSON_CONNECTION
51571 struct plocation field_addr;
51572 {
51573 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51576 }
51577#endif /* FREECIV_JSON_CONNECTION */
51578
51579#ifdef FREECIV_DELTA_PROTOCOL
51580#ifdef FREECIV_JSON_CONNECTION
51581 field_addr.name = "fields";
51582#endif /* FREECIV_JSON_CONNECTION */
51583 e = 0;
51584 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51585 if (e) {
51586 log_packet_detailed("fields bitvector error detected");
51587 }
51588
51589 if (BV_ISSET(fields, 0)) {
51590 log_packet_detailed(" field 'id' has changed");
51591
51592#ifdef FREECIV_JSON_CONNECTION
51593 field_addr.name = "id";
51594#endif /* FREECIV_JSON_CONNECTION */
51595 e = 0;
51596
51597 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51598
51599 if (e) {
51600 log_packet_detailed("'id' field error detected");
51601 }
51602 }
51603
51604 if (BV_ISSET(fields, 1)) {
51605 log_packet_detailed(" field 'name' has changed");
51606
51607#ifdef FREECIV_JSON_CONNECTION
51608 field_addr.name = "name";
51609#endif /* FREECIV_JSON_CONNECTION */
51610 e = 0;
51611
51612 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51613
51614 if (e) {
51615 log_packet_detailed("'name' field error detected");
51616 }
51617 }
51618
51619 if (BV_ISSET(fields, 2)) {
51620 log_packet_detailed(" field 'helptxt' has changed");
51621
51622#ifdef FREECIV_JSON_CONNECTION
51623 field_addr.name = "helptxt";
51624#endif /* FREECIV_JSON_CONNECTION */
51625 e = 0;
51626
51627 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51628
51629 if (e) {
51630 log_packet_detailed("'helptxt' field error detected");
51631 }
51632 }
51633
51634 *old = *real_packet;
51635
51636#else /* FREECIV_DELTA_PROTOCOL */
51637#ifdef FREECIV_JSON_CONNECTION
51638 field_addr.name = "id";
51639#endif /* FREECIV_JSON_CONNECTION */
51640 e = 0;
51641
51642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51643
51644 if (e) {
51645 log_packet_detailed("'id' field error detected");
51646 }
51647
51648#ifdef FREECIV_JSON_CONNECTION
51649 field_addr.name = "name";
51650#endif /* FREECIV_JSON_CONNECTION */
51651 e = 0;
51652
51653 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51654
51655 if (e) {
51656 log_packet_detailed("'name' field error detected");
51657 }
51658
51659#ifdef FREECIV_JSON_CONNECTION
51660 field_addr.name = "helptxt";
51661#endif /* FREECIV_JSON_CONNECTION */
51662 e = 0;
51663
51664 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51665
51666 if (e) {
51667 log_packet_detailed("'helptxt' field error detected");
51668 }
51669#endif /* FREECIV_DELTA_PROTOCOL */
51670
51672}
51673
51675{
51676 if (!pc->used) {
51677 log_error("WARNING: trying to send data to the closed connection %s",
51679 return -1;
51680 }
51681 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet != nullptr, -1,
51682 "Handler for PACKET_RULESET_UNIT_FLAG not installed");
51683 return pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet(pc, packet);
51684}
51685
51687{
51688 conn_list_iterate(dest, pconn) {
51691}
51692
51694{
51695 memset(packet, 0, sizeof(*packet));
51696}
51697
51698#define free_packet_ruleset_unit_class_flag(_packet) (void) 0
51699#define destroy_packet_ruleset_unit_class_flag free
51700
51701#ifdef FREECIV_DELTA_PROTOCOL
51702#define hash_packet_ruleset_unit_class_flag_100 hash_const
51703#define cmp_packet_ruleset_unit_class_flag_100 cmp_const
51705#endif /* FREECIV_DELTA_PROTOCOL */
51706
51708{
51709#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class_flag(_packet)
51711
51712#ifdef FREECIV_JSON_CONNECTION
51713 struct plocation field_addr;
51714 {
51715 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51718 }
51719#endif /* FREECIV_JSON_CONNECTION */
51720
51721 log_packet_detailed("packet_ruleset_unit_class_flag_100: got info about ()");
51722
51723#ifdef FREECIV_DELTA_PROTOCOL
51726 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS_FLAG;
51727
51728 if (nullptr == *hash) {
51730 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51731 }
51732
51733 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51734 *real_packet = *old;
51735 } else {
51736 /* packet is already initialized empty */
51737 log_packet_detailed(" no old info");
51738 }
51739
51740#ifdef FREECIV_JSON_CONNECTION
51741 field_addr.name = "fields";
51742#endif /* FREECIV_JSON_CONNECTION */
51743 DIO_BV_GET(&din, &field_addr, fields);
51744
51745 if (BV_ISSET(fields, 0)) {
51746 log_packet_detailed(" got field 'id'");
51747
51748#ifdef FREECIV_JSON_CONNECTION
51749 field_addr.name = "id";
51750#endif /* FREECIV_JSON_CONNECTION */
51751
51752 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51754 }
51755 }
51756
51757 if (BV_ISSET(fields, 1)) {
51758 log_packet_detailed(" got field 'name'");
51759
51760#ifdef FREECIV_JSON_CONNECTION
51761 field_addr.name = "name";
51762#endif /* FREECIV_JSON_CONNECTION */
51763
51764 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51766 }
51767 }
51768
51769 if (BV_ISSET(fields, 2)) {
51770 log_packet_detailed(" got field 'helptxt'");
51771
51772#ifdef FREECIV_JSON_CONNECTION
51773 field_addr.name = "helptxt";
51774#endif /* FREECIV_JSON_CONNECTION */
51775
51776 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51778 }
51779 }
51780
51781 if (nullptr == old) {
51782 old = fc_malloc(sizeof(*old));
51784 *old = *real_packet;
51786 } else {
51787 *old = *real_packet;
51788 }
51789
51790#else /* FREECIV_DELTA_PROTOCOL */
51791#ifdef FREECIV_JSON_CONNECTION
51792 field_addr.name = "id";
51793#endif /* FREECIV_JSON_CONNECTION */
51794
51795 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51797 }
51798
51799#ifdef FREECIV_JSON_CONNECTION
51800 field_addr.name = "name";
51801#endif /* FREECIV_JSON_CONNECTION */
51802
51803 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51805 }
51806
51807#ifdef FREECIV_JSON_CONNECTION
51808 field_addr.name = "helptxt";
51809#endif /* FREECIV_JSON_CONNECTION */
51810
51811 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51813 }
51814#endif /* FREECIV_DELTA_PROTOCOL */
51815
51817#undef FREE_PACKET_STRUCT
51818}
51819
51821{
51822 const struct packet_ruleset_unit_class_flag *real_packet = packet;
51823 int e;
51825
51826 log_packet_detailed("packet_ruleset_unit_class_flag_100: sending info about ()");
51827
51828#ifdef FREECIV_DELTA_PROTOCOL
51831 bool differ;
51832 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS_FLAG;
51833
51834 if (nullptr == *hash) {
51836 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51837 }
51838 BV_CLR_ALL(fields);
51839
51840 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51841 old = fc_malloc(sizeof(*old));
51842 /* temporary bitcopy just to insert correctly */
51843 *old = *real_packet;
51846 }
51847
51848 differ = (old->id != real_packet->id);
51849 if (differ) {
51850 BV_SET(fields, 0);
51851 }
51852
51853 differ = (strcmp(old->name, real_packet->name) != 0);
51854 if (differ) {
51855 BV_SET(fields, 1);
51856 }
51857
51858 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51859 if (differ) {
51860 BV_SET(fields, 2);
51861 }
51862#endif /* FREECIV_DELTA_PROTOCOL */
51863
51864#ifdef FREECIV_JSON_CONNECTION
51865 struct plocation field_addr;
51866 {
51867 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51870 }
51871#endif /* FREECIV_JSON_CONNECTION */
51872
51873#ifdef FREECIV_DELTA_PROTOCOL
51874#ifdef FREECIV_JSON_CONNECTION
51875 field_addr.name = "fields";
51876#endif /* FREECIV_JSON_CONNECTION */
51877 e = 0;
51878 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51879 if (e) {
51880 log_packet_detailed("fields bitvector error detected");
51881 }
51882
51883 if (BV_ISSET(fields, 0)) {
51884 log_packet_detailed(" field 'id' has changed");
51885
51886#ifdef FREECIV_JSON_CONNECTION
51887 field_addr.name = "id";
51888#endif /* FREECIV_JSON_CONNECTION */
51889 e = 0;
51890
51891 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51892
51893 if (e) {
51894 log_packet_detailed("'id' field error detected");
51895 }
51896 }
51897
51898 if (BV_ISSET(fields, 1)) {
51899 log_packet_detailed(" field 'name' has changed");
51900
51901#ifdef FREECIV_JSON_CONNECTION
51902 field_addr.name = "name";
51903#endif /* FREECIV_JSON_CONNECTION */
51904 e = 0;
51905
51906 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51907
51908 if (e) {
51909 log_packet_detailed("'name' field error detected");
51910 }
51911 }
51912
51913 if (BV_ISSET(fields, 2)) {
51914 log_packet_detailed(" field 'helptxt' has changed");
51915
51916#ifdef FREECIV_JSON_CONNECTION
51917 field_addr.name = "helptxt";
51918#endif /* FREECIV_JSON_CONNECTION */
51919 e = 0;
51920
51921 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51922
51923 if (e) {
51924 log_packet_detailed("'helptxt' field error detected");
51925 }
51926 }
51927
51928 *old = *real_packet;
51929
51930#else /* FREECIV_DELTA_PROTOCOL */
51931#ifdef FREECIV_JSON_CONNECTION
51932 field_addr.name = "id";
51933#endif /* FREECIV_JSON_CONNECTION */
51934 e = 0;
51935
51936 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51937
51938 if (e) {
51939 log_packet_detailed("'id' field error detected");
51940 }
51941
51942#ifdef FREECIV_JSON_CONNECTION
51943 field_addr.name = "name";
51944#endif /* FREECIV_JSON_CONNECTION */
51945 e = 0;
51946
51947 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51948
51949 if (e) {
51950 log_packet_detailed("'name' field error detected");
51951 }
51952
51953#ifdef FREECIV_JSON_CONNECTION
51954 field_addr.name = "helptxt";
51955#endif /* FREECIV_JSON_CONNECTION */
51956 e = 0;
51957
51958 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51959
51960 if (e) {
51961 log_packet_detailed("'helptxt' field error detected");
51962 }
51963#endif /* FREECIV_DELTA_PROTOCOL */
51964
51966}
51967
51969{
51970 if (!pc->used) {
51971 log_error("WARNING: trying to send data to the closed connection %s",
51973 return -1;
51974 }
51975 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet != nullptr, -1,
51976 "Handler for PACKET_RULESET_UNIT_CLASS_FLAG not installed");
51977 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet(pc, packet);
51978}
51979
51986
51987static inline void init_packet_ruleset_game(struct packet_ruleset_game *packet)
51988{
51989 memset(packet, 0, sizeof(*packet));
51990}
51991
51992#define free_packet_ruleset_game(_packet) (void) 0
51993#define destroy_packet_ruleset_game free
51994
51995#ifdef FREECIV_DELTA_PROTOCOL
51996#define hash_packet_ruleset_game_100 hash_const
51997#define cmp_packet_ruleset_game_100 cmp_const
51999#endif /* FREECIV_DELTA_PROTOCOL */
52000
52002{
52003#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_game(_packet)
52005
52006#ifdef FREECIV_JSON_CONNECTION
52007 struct plocation field_addr;
52008 {
52009 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
52012 }
52013#endif /* FREECIV_JSON_CONNECTION */
52014
52015 log_packet_detailed("packet_ruleset_game_100: got info about ()");
52016
52017#ifdef FREECIV_DELTA_PROTOCOL
52019 struct packet_ruleset_game *old;
52020 struct genhash **hash = pc->phs.received + PACKET_RULESET_GAME;
52021
52022 if (nullptr == *hash) {
52024 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
52025 }
52026
52027 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52028 *real_packet = *old;
52029 } else {
52030 /* packet is already initialized empty */
52031 log_packet_detailed(" no old info");
52032 }
52033
52034#ifdef FREECIV_JSON_CONNECTION
52035 field_addr.name = "fields";
52036#endif /* FREECIV_JSON_CONNECTION */
52037 DIO_BV_GET(&din, &field_addr, fields);
52038
52039 if (BV_ISSET(fields, 0)) {
52040 log_packet_detailed(" got field 'default_specialist'");
52041
52042#ifdef FREECIV_JSON_CONNECTION
52043 field_addr.name = "default_specialist";
52044#endif /* FREECIV_JSON_CONNECTION */
52045
52046 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
52048 }
52049 }
52050
52051 if (BV_ISSET(fields, 1)) {
52052 log_packet_detailed(" got field 'global_init_techs_count'");
52053
52054#ifdef FREECIV_JSON_CONNECTION
52055 field_addr.name = "global_init_techs_count";
52056#endif /* FREECIV_JSON_CONNECTION */
52057
52058 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
52059 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
52060 }
52061 }
52062
52063 if (BV_ISSET(fields, 2)) {
52064 log_packet_detailed(" got field 'global_init_techs'");
52065
52066#ifdef FREECIV_JSON_CONNECTION
52067 field_addr.name = "global_init_techs";
52068#endif /* FREECIV_JSON_CONNECTION */
52069
52070 {
52071 int i;
52072
52073 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
52074 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
52075 }
52076
52077#ifdef FREECIV_JSON_CONNECTION
52078 /* Enter array. */
52079 field_addr.sub_location = plocation_elem_new(0);
52080#endif /* FREECIV_JSON_CONNECTION */
52081
52082 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52083#ifdef FREECIV_JSON_CONNECTION
52084 /* Next array element */
52085 field_addr.sub_location->number = i;
52086#endif /* FREECIV_JSON_CONNECTION */
52087
52088 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
52089 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
52090 }
52091 }
52092
52093#ifdef FREECIV_JSON_CONNECTION
52094 /* Exit array. */
52095 FC_FREE(field_addr.sub_location);
52096#endif /* FREECIV_JSON_CONNECTION */
52097 }
52098 }
52099
52100 if (BV_ISSET(fields, 3)) {
52101 log_packet_detailed(" got field 'global_init_buildings_count'");
52102
52103#ifdef FREECIV_JSON_CONNECTION
52104 field_addr.name = "global_init_buildings_count";
52105#endif /* FREECIV_JSON_CONNECTION */
52106
52107 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
52108 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
52109 }
52110 }
52111
52112 if (BV_ISSET(fields, 4)) {
52113 log_packet_detailed(" got field 'global_init_buildings'");
52114
52115#ifdef FREECIV_JSON_CONNECTION
52116 field_addr.name = "global_init_buildings";
52117#endif /* FREECIV_JSON_CONNECTION */
52118
52119 {
52120 int i;
52121
52122 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
52123 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
52124 }
52125
52126#ifdef FREECIV_JSON_CONNECTION
52127 /* Enter array. */
52128 field_addr.sub_location = plocation_elem_new(0);
52129#endif /* FREECIV_JSON_CONNECTION */
52130
52131 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52132#ifdef FREECIV_JSON_CONNECTION
52133 /* Next array element */
52134 field_addr.sub_location->number = i;
52135#endif /* FREECIV_JSON_CONNECTION */
52136
52137 {
52138 int readin;
52139
52140 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52141 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52142 }
52143 real_packet->global_init_buildings[i] = readin;
52144 }
52145 }
52146
52147#ifdef FREECIV_JSON_CONNECTION
52148 /* Exit array. */
52149 FC_FREE(field_addr.sub_location);
52150#endif /* FREECIV_JSON_CONNECTION */
52151 }
52152 }
52153
52154 if (BV_ISSET(fields, 5)) {
52155 log_packet_detailed(" got field 'veteran_levels'");
52156
52157#ifdef FREECIV_JSON_CONNECTION
52158 field_addr.name = "veteran_levels";
52159#endif /* FREECIV_JSON_CONNECTION */
52160
52161 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52162 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52163 }
52164 }
52165
52166 if (BV_ISSET(fields, 6)) {
52167 log_packet_detailed(" got field 'veteran_name'");
52168
52169#ifdef FREECIV_JSON_CONNECTION
52170 field_addr.name = "veteran_name";
52171#endif /* FREECIV_JSON_CONNECTION */
52172
52173 {
52174 int i;
52175
52176 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52177 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52178 }
52179
52180#ifdef FREECIV_JSON_CONNECTION
52181 /* Enter array. */
52182 field_addr.sub_location = plocation_elem_new(0);
52183#endif /* FREECIV_JSON_CONNECTION */
52184
52185 for (i = 0; i < real_packet->veteran_levels; i++) {
52186#ifdef FREECIV_JSON_CONNECTION
52187 /* Next array element */
52188 field_addr.sub_location->number = i;
52189#endif /* FREECIV_JSON_CONNECTION */
52190
52191 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52192 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52193 }
52194 }
52195
52196#ifdef FREECIV_JSON_CONNECTION
52197 /* Exit array. */
52198 FC_FREE(field_addr.sub_location);
52199#endif /* FREECIV_JSON_CONNECTION */
52200 }
52201 }
52202
52203 if (BV_ISSET(fields, 7)) {
52204 log_packet_detailed(" got field 'power_fact'");
52205
52206#ifdef FREECIV_JSON_CONNECTION
52207 field_addr.name = "power_fact";
52208#endif /* FREECIV_JSON_CONNECTION */
52209
52210 {
52211 int i;
52212
52213 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52214 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52215 }
52216
52217#ifdef FREECIV_JSON_CONNECTION
52218 /* Enter array. */
52219 field_addr.sub_location = plocation_elem_new(0);
52220#endif /* FREECIV_JSON_CONNECTION */
52221
52222 for (i = 0; i < real_packet->veteran_levels; i++) {
52223#ifdef FREECIV_JSON_CONNECTION
52224 /* Next array element */
52225 field_addr.sub_location->number = i;
52226#endif /* FREECIV_JSON_CONNECTION */
52227
52228 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52229 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52230 }
52231 }
52232
52233#ifdef FREECIV_JSON_CONNECTION
52234 /* Exit array. */
52235 FC_FREE(field_addr.sub_location);
52236#endif /* FREECIV_JSON_CONNECTION */
52237 }
52238 }
52239
52240 if (BV_ISSET(fields, 8)) {
52241 log_packet_detailed(" got field 'move_bonus'");
52242
52243#ifdef FREECIV_JSON_CONNECTION
52244 field_addr.name = "move_bonus";
52245#endif /* FREECIV_JSON_CONNECTION */
52246
52247 {
52248 int i;
52249
52250 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52251 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52252 }
52253
52254#ifdef FREECIV_JSON_CONNECTION
52255 /* Enter array. */
52256 field_addr.sub_location = plocation_elem_new(0);
52257#endif /* FREECIV_JSON_CONNECTION */
52258
52259 for (i = 0; i < real_packet->veteran_levels; i++) {
52260#ifdef FREECIV_JSON_CONNECTION
52261 /* Next array element */
52262 field_addr.sub_location->number = i;
52263#endif /* FREECIV_JSON_CONNECTION */
52264
52265 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52266 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52267 }
52268 }
52269
52270#ifdef FREECIV_JSON_CONNECTION
52271 /* Exit array. */
52272 FC_FREE(field_addr.sub_location);
52273#endif /* FREECIV_JSON_CONNECTION */
52274 }
52275 }
52276
52277 if (BV_ISSET(fields, 9)) {
52278 log_packet_detailed(" got field 'base_raise_chance'");
52279
52280#ifdef FREECIV_JSON_CONNECTION
52281 field_addr.name = "base_raise_chance";
52282#endif /* FREECIV_JSON_CONNECTION */
52283
52284 {
52285 int i;
52286
52287 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52288 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52289 }
52290
52291#ifdef FREECIV_JSON_CONNECTION
52292 /* Enter array. */
52293 field_addr.sub_location = plocation_elem_new(0);
52294#endif /* FREECIV_JSON_CONNECTION */
52295
52296 for (i = 0; i < real_packet->veteran_levels; i++) {
52297#ifdef FREECIV_JSON_CONNECTION
52298 /* Next array element */
52299 field_addr.sub_location->number = i;
52300#endif /* FREECIV_JSON_CONNECTION */
52301
52302 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52303 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52304 }
52305 }
52306
52307#ifdef FREECIV_JSON_CONNECTION
52308 /* Exit array. */
52309 FC_FREE(field_addr.sub_location);
52310#endif /* FREECIV_JSON_CONNECTION */
52311 }
52312 }
52313
52314 if (BV_ISSET(fields, 10)) {
52315 log_packet_detailed(" got field 'work_raise_chance'");
52316
52317#ifdef FREECIV_JSON_CONNECTION
52318 field_addr.name = "work_raise_chance";
52319#endif /* FREECIV_JSON_CONNECTION */
52320
52321 {
52322 int i;
52323
52324 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52325 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52326 }
52327
52328#ifdef FREECIV_JSON_CONNECTION
52329 /* Enter array. */
52330 field_addr.sub_location = plocation_elem_new(0);
52331#endif /* FREECIV_JSON_CONNECTION */
52332
52333 for (i = 0; i < real_packet->veteran_levels; i++) {
52334#ifdef FREECIV_JSON_CONNECTION
52335 /* Next array element */
52336 field_addr.sub_location->number = i;
52337#endif /* FREECIV_JSON_CONNECTION */
52338
52339 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52340 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52341 }
52342 }
52343
52344#ifdef FREECIV_JSON_CONNECTION
52345 /* Exit array. */
52346 FC_FREE(field_addr.sub_location);
52347#endif /* FREECIV_JSON_CONNECTION */
52348 }
52349 }
52350
52351 if (BV_ISSET(fields, 11)) {
52352 log_packet_detailed(" got field 'background_red'");
52353
52354#ifdef FREECIV_JSON_CONNECTION
52355 field_addr.name = "background_red";
52356#endif /* FREECIV_JSON_CONNECTION */
52357
52358 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52359 RECEIVE_PACKET_FIELD_ERROR(background_red);
52360 }
52361 }
52362
52363 if (BV_ISSET(fields, 12)) {
52364 log_packet_detailed(" got field 'background_green'");
52365
52366#ifdef FREECIV_JSON_CONNECTION
52367 field_addr.name = "background_green";
52368#endif /* FREECIV_JSON_CONNECTION */
52369
52370 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52371 RECEIVE_PACKET_FIELD_ERROR(background_green);
52372 }
52373 }
52374
52375 if (BV_ISSET(fields, 13)) {
52376 log_packet_detailed(" got field 'background_blue'");
52377
52378#ifdef FREECIV_JSON_CONNECTION
52379 field_addr.name = "background_blue";
52380#endif /* FREECIV_JSON_CONNECTION */
52381
52382 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52383 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52384 }
52385 }
52386
52387 if (nullptr == old) {
52388 old = fc_malloc(sizeof(*old));
52390 *old = *real_packet;
52392 } else {
52393 *old = *real_packet;
52394 }
52395
52396#else /* FREECIV_DELTA_PROTOCOL */
52397#ifdef FREECIV_JSON_CONNECTION
52398 field_addr.name = "default_specialist";
52399#endif /* FREECIV_JSON_CONNECTION */
52400
52401 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
52403 }
52404
52405#ifdef FREECIV_JSON_CONNECTION
52406 field_addr.name = "global_init_techs_count";
52407#endif /* FREECIV_JSON_CONNECTION */
52408
52409 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
52410 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
52411 }
52412
52413#ifdef FREECIV_JSON_CONNECTION
52414 field_addr.name = "global_init_techs";
52415#endif /* FREECIV_JSON_CONNECTION */
52416
52417 {
52418 int i;
52419
52420 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
52421 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
52422 }
52423
52424#ifdef FREECIV_JSON_CONNECTION
52425 /* Enter array. */
52426 field_addr.sub_location = plocation_elem_new(0);
52427#endif /* FREECIV_JSON_CONNECTION */
52428
52429 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52430#ifdef FREECIV_JSON_CONNECTION
52431 /* Next array element */
52432 field_addr.sub_location->number = i;
52433#endif /* FREECIV_JSON_CONNECTION */
52434
52435 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
52436 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
52437 }
52438 }
52439
52440#ifdef FREECIV_JSON_CONNECTION
52441 /* Exit array. */
52442 FC_FREE(field_addr.sub_location);
52443#endif /* FREECIV_JSON_CONNECTION */
52444 }
52445
52446#ifdef FREECIV_JSON_CONNECTION
52447 field_addr.name = "global_init_buildings_count";
52448#endif /* FREECIV_JSON_CONNECTION */
52449
52450 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
52451 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
52452 }
52453
52454#ifdef FREECIV_JSON_CONNECTION
52455 field_addr.name = "global_init_buildings";
52456#endif /* FREECIV_JSON_CONNECTION */
52457
52458 {
52459 int i;
52460
52461 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
52462 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
52463 }
52464
52465#ifdef FREECIV_JSON_CONNECTION
52466 /* Enter array. */
52467 field_addr.sub_location = plocation_elem_new(0);
52468#endif /* FREECIV_JSON_CONNECTION */
52469
52470 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52471#ifdef FREECIV_JSON_CONNECTION
52472 /* Next array element */
52473 field_addr.sub_location->number = i;
52474#endif /* FREECIV_JSON_CONNECTION */
52475
52476 {
52477 int readin;
52478
52479 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52480 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52481 }
52482 real_packet->global_init_buildings[i] = readin;
52483 }
52484 }
52485
52486#ifdef FREECIV_JSON_CONNECTION
52487 /* Exit array. */
52488 FC_FREE(field_addr.sub_location);
52489#endif /* FREECIV_JSON_CONNECTION */
52490 }
52491
52492#ifdef FREECIV_JSON_CONNECTION
52493 field_addr.name = "veteran_levels";
52494#endif /* FREECIV_JSON_CONNECTION */
52495
52496 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52497 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52498 }
52499
52500#ifdef FREECIV_JSON_CONNECTION
52501 field_addr.name = "veteran_name";
52502#endif /* FREECIV_JSON_CONNECTION */
52503
52504 {
52505 int i;
52506
52507 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52508 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52509 }
52510
52511#ifdef FREECIV_JSON_CONNECTION
52512 /* Enter array. */
52513 field_addr.sub_location = plocation_elem_new(0);
52514#endif /* FREECIV_JSON_CONNECTION */
52515
52516 for (i = 0; i < real_packet->veteran_levels; i++) {
52517#ifdef FREECIV_JSON_CONNECTION
52518 /* Next array element */
52519 field_addr.sub_location->number = i;
52520#endif /* FREECIV_JSON_CONNECTION */
52521
52522 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52523 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52524 }
52525 }
52526
52527#ifdef FREECIV_JSON_CONNECTION
52528 /* Exit array. */
52529 FC_FREE(field_addr.sub_location);
52530#endif /* FREECIV_JSON_CONNECTION */
52531 }
52532
52533#ifdef FREECIV_JSON_CONNECTION
52534 field_addr.name = "power_fact";
52535#endif /* FREECIV_JSON_CONNECTION */
52536
52537 {
52538 int i;
52539
52540 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52541 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52542 }
52543
52544#ifdef FREECIV_JSON_CONNECTION
52545 /* Enter array. */
52546 field_addr.sub_location = plocation_elem_new(0);
52547#endif /* FREECIV_JSON_CONNECTION */
52548
52549 for (i = 0; i < real_packet->veteran_levels; i++) {
52550#ifdef FREECIV_JSON_CONNECTION
52551 /* Next array element */
52552 field_addr.sub_location->number = i;
52553#endif /* FREECIV_JSON_CONNECTION */
52554
52555 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52556 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52557 }
52558 }
52559
52560#ifdef FREECIV_JSON_CONNECTION
52561 /* Exit array. */
52562 FC_FREE(field_addr.sub_location);
52563#endif /* FREECIV_JSON_CONNECTION */
52564 }
52565
52566#ifdef FREECIV_JSON_CONNECTION
52567 field_addr.name = "move_bonus";
52568#endif /* FREECIV_JSON_CONNECTION */
52569
52570 {
52571 int i;
52572
52573 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52574 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52575 }
52576
52577#ifdef FREECIV_JSON_CONNECTION
52578 /* Enter array. */
52579 field_addr.sub_location = plocation_elem_new(0);
52580#endif /* FREECIV_JSON_CONNECTION */
52581
52582 for (i = 0; i < real_packet->veteran_levels; i++) {
52583#ifdef FREECIV_JSON_CONNECTION
52584 /* Next array element */
52585 field_addr.sub_location->number = i;
52586#endif /* FREECIV_JSON_CONNECTION */
52587
52588 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52589 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52590 }
52591 }
52592
52593#ifdef FREECIV_JSON_CONNECTION
52594 /* Exit array. */
52595 FC_FREE(field_addr.sub_location);
52596#endif /* FREECIV_JSON_CONNECTION */
52597 }
52598
52599#ifdef FREECIV_JSON_CONNECTION
52600 field_addr.name = "base_raise_chance";
52601#endif /* FREECIV_JSON_CONNECTION */
52602
52603 {
52604 int i;
52605
52606 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52607 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52608 }
52609
52610#ifdef FREECIV_JSON_CONNECTION
52611 /* Enter array. */
52612 field_addr.sub_location = plocation_elem_new(0);
52613#endif /* FREECIV_JSON_CONNECTION */
52614
52615 for (i = 0; i < real_packet->veteran_levels; i++) {
52616#ifdef FREECIV_JSON_CONNECTION
52617 /* Next array element */
52618 field_addr.sub_location->number = i;
52619#endif /* FREECIV_JSON_CONNECTION */
52620
52621 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52622 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52623 }
52624 }
52625
52626#ifdef FREECIV_JSON_CONNECTION
52627 /* Exit array. */
52628 FC_FREE(field_addr.sub_location);
52629#endif /* FREECIV_JSON_CONNECTION */
52630 }
52631
52632#ifdef FREECIV_JSON_CONNECTION
52633 field_addr.name = "work_raise_chance";
52634#endif /* FREECIV_JSON_CONNECTION */
52635
52636 {
52637 int i;
52638
52639 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52640 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52641 }
52642
52643#ifdef FREECIV_JSON_CONNECTION
52644 /* Enter array. */
52645 field_addr.sub_location = plocation_elem_new(0);
52646#endif /* FREECIV_JSON_CONNECTION */
52647
52648 for (i = 0; i < real_packet->veteran_levels; i++) {
52649#ifdef FREECIV_JSON_CONNECTION
52650 /* Next array element */
52651 field_addr.sub_location->number = i;
52652#endif /* FREECIV_JSON_CONNECTION */
52653
52654 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52655 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52656 }
52657 }
52658
52659#ifdef FREECIV_JSON_CONNECTION
52660 /* Exit array. */
52661 FC_FREE(field_addr.sub_location);
52662#endif /* FREECIV_JSON_CONNECTION */
52663 }
52664
52665#ifdef FREECIV_JSON_CONNECTION
52666 field_addr.name = "background_red";
52667#endif /* FREECIV_JSON_CONNECTION */
52668
52669 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52670 RECEIVE_PACKET_FIELD_ERROR(background_red);
52671 }
52672
52673#ifdef FREECIV_JSON_CONNECTION
52674 field_addr.name = "background_green";
52675#endif /* FREECIV_JSON_CONNECTION */
52676
52677 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52678 RECEIVE_PACKET_FIELD_ERROR(background_green);
52679 }
52680
52681#ifdef FREECIV_JSON_CONNECTION
52682 field_addr.name = "background_blue";
52683#endif /* FREECIV_JSON_CONNECTION */
52684
52685 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52686 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52687 }
52688#endif /* FREECIV_DELTA_PROTOCOL */
52689
52691#undef FREE_PACKET_STRUCT
52692}
52693
52694static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
52695{
52696 const struct packet_ruleset_game *real_packet = packet;
52697 int e;
52699
52700 log_packet_detailed("packet_ruleset_game_100: sending info about ()");
52701
52702#ifdef FREECIV_DELTA_PROTOCOL
52704 struct packet_ruleset_game *old;
52705 bool differ;
52706 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GAME;
52707
52708 if (nullptr == *hash) {
52710 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
52711 }
52712 BV_CLR_ALL(fields);
52713
52714 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52715 old = fc_malloc(sizeof(*old));
52716 /* temporary bitcopy just to insert correctly */
52717 *old = *real_packet;
52720 }
52721
52722 differ = (old->default_specialist != real_packet->default_specialist);
52723 if (differ) {
52724 BV_SET(fields, 0);
52725 }
52726
52727 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52728 if (differ) {
52729 BV_SET(fields, 1);
52730 }
52731
52732 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52733 if (!differ) {
52734 int i;
52735
52736 for (i = 0; i < old->global_init_techs_count; i++) {
52737 differ = (old->global_init_techs[i] != real_packet->global_init_techs[i]);
52738 if (differ) {
52739 break;
52740 }
52741 }
52742 }
52743 if (differ) {
52744 BV_SET(fields, 2);
52745 }
52746
52747 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52748 if (differ) {
52749 BV_SET(fields, 3);
52750 }
52751
52752 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52753 if (!differ) {
52754 int i;
52755
52756 for (i = 0; i < old->global_init_buildings_count; i++) {
52757 differ = (old->global_init_buildings[i] != real_packet->global_init_buildings[i]);
52758 if (differ) {
52759 break;
52760 }
52761 }
52762 }
52763 if (differ) {
52764 BV_SET(fields, 4);
52765 }
52766
52767 differ = (old->veteran_levels != real_packet->veteran_levels);
52768 if (differ) {
52769 BV_SET(fields, 5);
52770 }
52771
52772 differ = (old->veteran_levels != real_packet->veteran_levels);
52773 if (!differ) {
52774 int i;
52775
52776 for (i = 0; i < old->veteran_levels; i++) {
52777 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
52778 if (differ) {
52779 break;
52780 }
52781 }
52782 }
52783 if (differ) {
52784 BV_SET(fields, 6);
52785 }
52786
52787 differ = (old->veteran_levels != real_packet->veteran_levels);
52788 if (!differ) {
52789 int i;
52790
52791 for (i = 0; i < old->veteran_levels; i++) {
52792 differ = (old->power_fact[i] != real_packet->power_fact[i]);
52793 if (differ) {
52794 break;
52795 }
52796 }
52797 }
52798 if (differ) {
52799 BV_SET(fields, 7);
52800 }
52801
52802 differ = (old->veteran_levels != real_packet->veteran_levels);
52803 if (!differ) {
52804 int i;
52805
52806 for (i = 0; i < old->veteran_levels; i++) {
52807 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
52808 if (differ) {
52809 break;
52810 }
52811 }
52812 }
52813 if (differ) {
52814 BV_SET(fields, 8);
52815 }
52816
52817 differ = (old->veteran_levels != real_packet->veteran_levels);
52818 if (!differ) {
52819 int i;
52820
52821 for (i = 0; i < old->veteran_levels; i++) {
52822 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
52823 if (differ) {
52824 break;
52825 }
52826 }
52827 }
52828 if (differ) {
52829 BV_SET(fields, 9);
52830 }
52831
52832 differ = (old->veteran_levels != real_packet->veteran_levels);
52833 if (!differ) {
52834 int i;
52835
52836 for (i = 0; i < old->veteran_levels; i++) {
52837 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
52838 if (differ) {
52839 break;
52840 }
52841 }
52842 }
52843 if (differ) {
52844 BV_SET(fields, 10);
52845 }
52846
52847 differ = (old->background_red != real_packet->background_red);
52848 if (differ) {
52849 BV_SET(fields, 11);
52850 }
52851
52852 differ = (old->background_green != real_packet->background_green);
52853 if (differ) {
52854 BV_SET(fields, 12);
52855 }
52856
52857 differ = (old->background_blue != real_packet->background_blue);
52858 if (differ) {
52859 BV_SET(fields, 13);
52860 }
52861#endif /* FREECIV_DELTA_PROTOCOL */
52862
52863#ifdef FREECIV_JSON_CONNECTION
52864 struct plocation field_addr;
52865 {
52866 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
52869 }
52870#endif /* FREECIV_JSON_CONNECTION */
52871
52872#ifdef FREECIV_DELTA_PROTOCOL
52873#ifdef FREECIV_JSON_CONNECTION
52874 field_addr.name = "fields";
52875#endif /* FREECIV_JSON_CONNECTION */
52876 e = 0;
52877 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52878 if (e) {
52879 log_packet_detailed("fields bitvector error detected");
52880 }
52881
52882 if (BV_ISSET(fields, 0)) {
52883 log_packet_detailed(" field 'default_specialist' has changed");
52884
52885#ifdef FREECIV_JSON_CONNECTION
52886 field_addr.name = "default_specialist";
52887#endif /* FREECIV_JSON_CONNECTION */
52888 e = 0;
52889
52890 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
52891
52892 if (e) {
52893 log_packet_detailed("'default_specialist' field error detected");
52894 }
52895 }
52896
52897 if (BV_ISSET(fields, 1)) {
52898 log_packet_detailed(" field 'global_init_techs_count' has changed");
52899
52900#ifdef FREECIV_JSON_CONNECTION
52901 field_addr.name = "global_init_techs_count";
52902#endif /* FREECIV_JSON_CONNECTION */
52903 e = 0;
52904
52905 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
52906
52907 if (e) {
52908 log_packet_detailed("'global_init_techs_count' field error detected");
52909 }
52910 }
52911
52912 if (BV_ISSET(fields, 2)) {
52913 log_packet_detailed(" field 'global_init_techs' has changed");
52914
52915#ifdef FREECIV_JSON_CONNECTION
52916 field_addr.name = "global_init_techs";
52917#endif /* FREECIV_JSON_CONNECTION */
52918 e = 0;
52919
52920 {
52921 int i;
52922
52923#ifdef FREECIV_JSON_CONNECTION
52924 /* Create the array. */
52925 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
52926
52927 /* Enter array. */
52928 field_addr.sub_location = plocation_elem_new(0);
52929#endif /* FREECIV_JSON_CONNECTION */
52930
52931 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52932#ifdef FREECIV_JSON_CONNECTION
52933 /* Next array element. */
52934 field_addr.sub_location->number = i;
52935#endif /* FREECIV_JSON_CONNECTION */
52936
52937 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
52938 }
52939
52940#ifdef FREECIV_JSON_CONNECTION
52941 /* Exit array. */
52942 FC_FREE(field_addr.sub_location);
52943#endif /* FREECIV_JSON_CONNECTION */
52944 }
52945
52946 if (e) {
52947 log_packet_detailed("'global_init_techs' field error detected");
52948 }
52949 }
52950
52951 if (BV_ISSET(fields, 3)) {
52952 log_packet_detailed(" field 'global_init_buildings_count' has changed");
52953
52954#ifdef FREECIV_JSON_CONNECTION
52955 field_addr.name = "global_init_buildings_count";
52956#endif /* FREECIV_JSON_CONNECTION */
52957 e = 0;
52958
52959 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
52960
52961 if (e) {
52962 log_packet_detailed("'global_init_buildings_count' field error detected");
52963 }
52964 }
52965
52966 if (BV_ISSET(fields, 4)) {
52967 log_packet_detailed(" field 'global_init_buildings' has changed");
52968
52969#ifdef FREECIV_JSON_CONNECTION
52970 field_addr.name = "global_init_buildings";
52971#endif /* FREECIV_JSON_CONNECTION */
52972 e = 0;
52973
52974 {
52975 int i;
52976
52977#ifdef FREECIV_JSON_CONNECTION
52978 /* Create the array. */
52979 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
52980
52981 /* Enter array. */
52982 field_addr.sub_location = plocation_elem_new(0);
52983#endif /* FREECIV_JSON_CONNECTION */
52984
52985 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52986#ifdef FREECIV_JSON_CONNECTION
52987 /* Next array element. */
52988 field_addr.sub_location->number = i;
52989#endif /* FREECIV_JSON_CONNECTION */
52990
52991 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
52992 }
52993
52994#ifdef FREECIV_JSON_CONNECTION
52995 /* Exit array. */
52996 FC_FREE(field_addr.sub_location);
52997#endif /* FREECIV_JSON_CONNECTION */
52998 }
52999
53000 if (e) {
53001 log_packet_detailed("'global_init_buildings' field error detected");
53002 }
53003 }
53004
53005 if (BV_ISSET(fields, 5)) {
53006 log_packet_detailed(" field 'veteran_levels' has changed");
53007
53008#ifdef FREECIV_JSON_CONNECTION
53009 field_addr.name = "veteran_levels";
53010#endif /* FREECIV_JSON_CONNECTION */
53011 e = 0;
53012
53013 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
53014
53015 if (e) {
53016 log_packet_detailed("'veteran_levels' field error detected");
53017 }
53018 }
53019
53020 if (BV_ISSET(fields, 6)) {
53021 log_packet_detailed(" field 'veteran_name' has changed");
53022
53023#ifdef FREECIV_JSON_CONNECTION
53024 field_addr.name = "veteran_name";
53025#endif /* FREECIV_JSON_CONNECTION */
53026 e = 0;
53027
53028 {
53029 int i;
53030
53031#ifdef FREECIV_JSON_CONNECTION
53032 /* Create the array. */
53033 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53034
53035 /* Enter array. */
53036 field_addr.sub_location = plocation_elem_new(0);
53037#endif /* FREECIV_JSON_CONNECTION */
53038
53039 for (i = 0; i < real_packet->veteran_levels; i++) {
53040#ifdef FREECIV_JSON_CONNECTION
53041 /* Next array element. */
53042 field_addr.sub_location->number = i;
53043#endif /* FREECIV_JSON_CONNECTION */
53044
53045 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
53046 }
53047
53048#ifdef FREECIV_JSON_CONNECTION
53049 /* Exit array. */
53050 FC_FREE(field_addr.sub_location);
53051#endif /* FREECIV_JSON_CONNECTION */
53052 }
53053
53054 if (e) {
53055 log_packet_detailed("'veteran_name' field error detected");
53056 }
53057 }
53058
53059 if (BV_ISSET(fields, 7)) {
53060 log_packet_detailed(" field 'power_fact' has changed");
53061
53062#ifdef FREECIV_JSON_CONNECTION
53063 field_addr.name = "power_fact";
53064#endif /* FREECIV_JSON_CONNECTION */
53065 e = 0;
53066
53067 {
53068 int i;
53069
53070#ifdef FREECIV_JSON_CONNECTION
53071 /* Create the array. */
53072 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53073
53074 /* Enter array. */
53075 field_addr.sub_location = plocation_elem_new(0);
53076#endif /* FREECIV_JSON_CONNECTION */
53077
53078 for (i = 0; i < real_packet->veteran_levels; i++) {
53079#ifdef FREECIV_JSON_CONNECTION
53080 /* Next array element. */
53081 field_addr.sub_location->number = i;
53082#endif /* FREECIV_JSON_CONNECTION */
53083
53084 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
53085 }
53086
53087#ifdef FREECIV_JSON_CONNECTION
53088 /* Exit array. */
53089 FC_FREE(field_addr.sub_location);
53090#endif /* FREECIV_JSON_CONNECTION */
53091 }
53092
53093 if (e) {
53094 log_packet_detailed("'power_fact' field error detected");
53095 }
53096 }
53097
53098 if (BV_ISSET(fields, 8)) {
53099 log_packet_detailed(" field 'move_bonus' has changed");
53100
53101#ifdef FREECIV_JSON_CONNECTION
53102 field_addr.name = "move_bonus";
53103#endif /* FREECIV_JSON_CONNECTION */
53104 e = 0;
53105
53106 {
53107 int i;
53108
53109#ifdef FREECIV_JSON_CONNECTION
53110 /* Create the array. */
53111 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53112
53113 /* Enter array. */
53114 field_addr.sub_location = plocation_elem_new(0);
53115#endif /* FREECIV_JSON_CONNECTION */
53116
53117 for (i = 0; i < real_packet->veteran_levels; i++) {
53118#ifdef FREECIV_JSON_CONNECTION
53119 /* Next array element. */
53120 field_addr.sub_location->number = i;
53121#endif /* FREECIV_JSON_CONNECTION */
53122
53123 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
53124 }
53125
53126#ifdef FREECIV_JSON_CONNECTION
53127 /* Exit array. */
53128 FC_FREE(field_addr.sub_location);
53129#endif /* FREECIV_JSON_CONNECTION */
53130 }
53131
53132 if (e) {
53133 log_packet_detailed("'move_bonus' field error detected");
53134 }
53135 }
53136
53137 if (BV_ISSET(fields, 9)) {
53138 log_packet_detailed(" field 'base_raise_chance' has changed");
53139
53140#ifdef FREECIV_JSON_CONNECTION
53141 field_addr.name = "base_raise_chance";
53142#endif /* FREECIV_JSON_CONNECTION */
53143 e = 0;
53144
53145 {
53146 int i;
53147
53148#ifdef FREECIV_JSON_CONNECTION
53149 /* Create the array. */
53150 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53151
53152 /* Enter array. */
53153 field_addr.sub_location = plocation_elem_new(0);
53154#endif /* FREECIV_JSON_CONNECTION */
53155
53156 for (i = 0; i < real_packet->veteran_levels; i++) {
53157#ifdef FREECIV_JSON_CONNECTION
53158 /* Next array element. */
53159 field_addr.sub_location->number = i;
53160#endif /* FREECIV_JSON_CONNECTION */
53161
53162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53163 }
53164
53165#ifdef FREECIV_JSON_CONNECTION
53166 /* Exit array. */
53167 FC_FREE(field_addr.sub_location);
53168#endif /* FREECIV_JSON_CONNECTION */
53169 }
53170
53171 if (e) {
53172 log_packet_detailed("'base_raise_chance' field error detected");
53173 }
53174 }
53175
53176 if (BV_ISSET(fields, 10)) {
53177 log_packet_detailed(" field 'work_raise_chance' has changed");
53178
53179#ifdef FREECIV_JSON_CONNECTION
53180 field_addr.name = "work_raise_chance";
53181#endif /* FREECIV_JSON_CONNECTION */
53182 e = 0;
53183
53184 {
53185 int i;
53186
53187#ifdef FREECIV_JSON_CONNECTION
53188 /* Create the array. */
53189 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53190
53191 /* Enter array. */
53192 field_addr.sub_location = plocation_elem_new(0);
53193#endif /* FREECIV_JSON_CONNECTION */
53194
53195 for (i = 0; i < real_packet->veteran_levels; i++) {
53196#ifdef FREECIV_JSON_CONNECTION
53197 /* Next array element. */
53198 field_addr.sub_location->number = i;
53199#endif /* FREECIV_JSON_CONNECTION */
53200
53201 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53202 }
53203
53204#ifdef FREECIV_JSON_CONNECTION
53205 /* Exit array. */
53206 FC_FREE(field_addr.sub_location);
53207#endif /* FREECIV_JSON_CONNECTION */
53208 }
53209
53210 if (e) {
53211 log_packet_detailed("'work_raise_chance' field error detected");
53212 }
53213 }
53214
53215 if (BV_ISSET(fields, 11)) {
53216 log_packet_detailed(" field 'background_red' has changed");
53217
53218#ifdef FREECIV_JSON_CONNECTION
53219 field_addr.name = "background_red";
53220#endif /* FREECIV_JSON_CONNECTION */
53221 e = 0;
53222
53223 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53224
53225 if (e) {
53226 log_packet_detailed("'background_red' field error detected");
53227 }
53228 }
53229
53230 if (BV_ISSET(fields, 12)) {
53231 log_packet_detailed(" field 'background_green' has changed");
53232
53233#ifdef FREECIV_JSON_CONNECTION
53234 field_addr.name = "background_green";
53235#endif /* FREECIV_JSON_CONNECTION */
53236 e = 0;
53237
53238 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53239
53240 if (e) {
53241 log_packet_detailed("'background_green' field error detected");
53242 }
53243 }
53244
53245 if (BV_ISSET(fields, 13)) {
53246 log_packet_detailed(" field 'background_blue' has changed");
53247
53248#ifdef FREECIV_JSON_CONNECTION
53249 field_addr.name = "background_blue";
53250#endif /* FREECIV_JSON_CONNECTION */
53251 e = 0;
53252
53253 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53254
53255 if (e) {
53256 log_packet_detailed("'background_blue' field error detected");
53257 }
53258 }
53259
53260 *old = *real_packet;
53261
53262#else /* FREECIV_DELTA_PROTOCOL */
53263#ifdef FREECIV_JSON_CONNECTION
53264 field_addr.name = "default_specialist";
53265#endif /* FREECIV_JSON_CONNECTION */
53266 e = 0;
53267
53268 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
53269
53270 if (e) {
53271 log_packet_detailed("'default_specialist' field error detected");
53272 }
53273
53274#ifdef FREECIV_JSON_CONNECTION
53275 field_addr.name = "global_init_techs_count";
53276#endif /* FREECIV_JSON_CONNECTION */
53277 e = 0;
53278
53279 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
53280
53281 if (e) {
53282 log_packet_detailed("'global_init_techs_count' field error detected");
53283 }
53284
53285#ifdef FREECIV_JSON_CONNECTION
53286 field_addr.name = "global_init_techs";
53287#endif /* FREECIV_JSON_CONNECTION */
53288 e = 0;
53289
53290 {
53291 int i;
53292
53293#ifdef FREECIV_JSON_CONNECTION
53294 /* Create the array. */
53295 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
53296
53297 /* Enter array. */
53298 field_addr.sub_location = plocation_elem_new(0);
53299#endif /* FREECIV_JSON_CONNECTION */
53300
53301 for (i = 0; i < real_packet->global_init_techs_count; i++) {
53302#ifdef FREECIV_JSON_CONNECTION
53303 /* Next array element. */
53304 field_addr.sub_location->number = i;
53305#endif /* FREECIV_JSON_CONNECTION */
53306
53307 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
53308 }
53309
53310#ifdef FREECIV_JSON_CONNECTION
53311 /* Exit array. */
53312 FC_FREE(field_addr.sub_location);
53313#endif /* FREECIV_JSON_CONNECTION */
53314 }
53315
53316 if (e) {
53317 log_packet_detailed("'global_init_techs' field error detected");
53318 }
53319
53320#ifdef FREECIV_JSON_CONNECTION
53321 field_addr.name = "global_init_buildings_count";
53322#endif /* FREECIV_JSON_CONNECTION */
53323 e = 0;
53324
53325 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
53326
53327 if (e) {
53328 log_packet_detailed("'global_init_buildings_count' field error detected");
53329 }
53330
53331#ifdef FREECIV_JSON_CONNECTION
53332 field_addr.name = "global_init_buildings";
53333#endif /* FREECIV_JSON_CONNECTION */
53334 e = 0;
53335
53336 {
53337 int i;
53338
53339#ifdef FREECIV_JSON_CONNECTION
53340 /* Create the array. */
53341 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
53342
53343 /* Enter array. */
53344 field_addr.sub_location = plocation_elem_new(0);
53345#endif /* FREECIV_JSON_CONNECTION */
53346
53347 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
53348#ifdef FREECIV_JSON_CONNECTION
53349 /* Next array element. */
53350 field_addr.sub_location->number = i;
53351#endif /* FREECIV_JSON_CONNECTION */
53352
53353 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
53354 }
53355
53356#ifdef FREECIV_JSON_CONNECTION
53357 /* Exit array. */
53358 FC_FREE(field_addr.sub_location);
53359#endif /* FREECIV_JSON_CONNECTION */
53360 }
53361
53362 if (e) {
53363 log_packet_detailed("'global_init_buildings' field error detected");
53364 }
53365
53366#ifdef FREECIV_JSON_CONNECTION
53367 field_addr.name = "veteran_levels";
53368#endif /* FREECIV_JSON_CONNECTION */
53369 e = 0;
53370
53371 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
53372
53373 if (e) {
53374 log_packet_detailed("'veteran_levels' field error detected");
53375 }
53376
53377#ifdef FREECIV_JSON_CONNECTION
53378 field_addr.name = "veteran_name";
53379#endif /* FREECIV_JSON_CONNECTION */
53380 e = 0;
53381
53382 {
53383 int i;
53384
53385#ifdef FREECIV_JSON_CONNECTION
53386 /* Create the array. */
53387 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53388
53389 /* Enter array. */
53390 field_addr.sub_location = plocation_elem_new(0);
53391#endif /* FREECIV_JSON_CONNECTION */
53392
53393 for (i = 0; i < real_packet->veteran_levels; i++) {
53394#ifdef FREECIV_JSON_CONNECTION
53395 /* Next array element. */
53396 field_addr.sub_location->number = i;
53397#endif /* FREECIV_JSON_CONNECTION */
53398
53399 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
53400 }
53401
53402#ifdef FREECIV_JSON_CONNECTION
53403 /* Exit array. */
53404 FC_FREE(field_addr.sub_location);
53405#endif /* FREECIV_JSON_CONNECTION */
53406 }
53407
53408 if (e) {
53409 log_packet_detailed("'veteran_name' field error detected");
53410 }
53411
53412#ifdef FREECIV_JSON_CONNECTION
53413 field_addr.name = "power_fact";
53414#endif /* FREECIV_JSON_CONNECTION */
53415 e = 0;
53416
53417 {
53418 int i;
53419
53420#ifdef FREECIV_JSON_CONNECTION
53421 /* Create the array. */
53422 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53423
53424 /* Enter array. */
53425 field_addr.sub_location = plocation_elem_new(0);
53426#endif /* FREECIV_JSON_CONNECTION */
53427
53428 for (i = 0; i < real_packet->veteran_levels; i++) {
53429#ifdef FREECIV_JSON_CONNECTION
53430 /* Next array element. */
53431 field_addr.sub_location->number = i;
53432#endif /* FREECIV_JSON_CONNECTION */
53433
53434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
53435 }
53436
53437#ifdef FREECIV_JSON_CONNECTION
53438 /* Exit array. */
53439 FC_FREE(field_addr.sub_location);
53440#endif /* FREECIV_JSON_CONNECTION */
53441 }
53442
53443 if (e) {
53444 log_packet_detailed("'power_fact' field error detected");
53445 }
53446
53447#ifdef FREECIV_JSON_CONNECTION
53448 field_addr.name = "move_bonus";
53449#endif /* FREECIV_JSON_CONNECTION */
53450 e = 0;
53451
53452 {
53453 int i;
53454
53455#ifdef FREECIV_JSON_CONNECTION
53456 /* Create the array. */
53457 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53458
53459 /* Enter array. */
53460 field_addr.sub_location = plocation_elem_new(0);
53461#endif /* FREECIV_JSON_CONNECTION */
53462
53463 for (i = 0; i < real_packet->veteran_levels; i++) {
53464#ifdef FREECIV_JSON_CONNECTION
53465 /* Next array element. */
53466 field_addr.sub_location->number = i;
53467#endif /* FREECIV_JSON_CONNECTION */
53468
53469 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
53470 }
53471
53472#ifdef FREECIV_JSON_CONNECTION
53473 /* Exit array. */
53474 FC_FREE(field_addr.sub_location);
53475#endif /* FREECIV_JSON_CONNECTION */
53476 }
53477
53478 if (e) {
53479 log_packet_detailed("'move_bonus' field error detected");
53480 }
53481
53482#ifdef FREECIV_JSON_CONNECTION
53483 field_addr.name = "base_raise_chance";
53484#endif /* FREECIV_JSON_CONNECTION */
53485 e = 0;
53486
53487 {
53488 int i;
53489
53490#ifdef FREECIV_JSON_CONNECTION
53491 /* Create the array. */
53492 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53493
53494 /* Enter array. */
53495 field_addr.sub_location = plocation_elem_new(0);
53496#endif /* FREECIV_JSON_CONNECTION */
53497
53498 for (i = 0; i < real_packet->veteran_levels; i++) {
53499#ifdef FREECIV_JSON_CONNECTION
53500 /* Next array element. */
53501 field_addr.sub_location->number = i;
53502#endif /* FREECIV_JSON_CONNECTION */
53503
53504 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53505 }
53506
53507#ifdef FREECIV_JSON_CONNECTION
53508 /* Exit array. */
53509 FC_FREE(field_addr.sub_location);
53510#endif /* FREECIV_JSON_CONNECTION */
53511 }
53512
53513 if (e) {
53514 log_packet_detailed("'base_raise_chance' field error detected");
53515 }
53516
53517#ifdef FREECIV_JSON_CONNECTION
53518 field_addr.name = "work_raise_chance";
53519#endif /* FREECIV_JSON_CONNECTION */
53520 e = 0;
53521
53522 {
53523 int i;
53524
53525#ifdef FREECIV_JSON_CONNECTION
53526 /* Create the array. */
53527 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53528
53529 /* Enter array. */
53530 field_addr.sub_location = plocation_elem_new(0);
53531#endif /* FREECIV_JSON_CONNECTION */
53532
53533 for (i = 0; i < real_packet->veteran_levels; i++) {
53534#ifdef FREECIV_JSON_CONNECTION
53535 /* Next array element. */
53536 field_addr.sub_location->number = i;
53537#endif /* FREECIV_JSON_CONNECTION */
53538
53539 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53540 }
53541
53542#ifdef FREECIV_JSON_CONNECTION
53543 /* Exit array. */
53544 FC_FREE(field_addr.sub_location);
53545#endif /* FREECIV_JSON_CONNECTION */
53546 }
53547
53548 if (e) {
53549 log_packet_detailed("'work_raise_chance' field error detected");
53550 }
53551
53552#ifdef FREECIV_JSON_CONNECTION
53553 field_addr.name = "background_red";
53554#endif /* FREECIV_JSON_CONNECTION */
53555 e = 0;
53556
53557 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53558
53559 if (e) {
53560 log_packet_detailed("'background_red' field error detected");
53561 }
53562
53563#ifdef FREECIV_JSON_CONNECTION
53564 field_addr.name = "background_green";
53565#endif /* FREECIV_JSON_CONNECTION */
53566 e = 0;
53567
53568 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53569
53570 if (e) {
53571 log_packet_detailed("'background_green' field error detected");
53572 }
53573
53574#ifdef FREECIV_JSON_CONNECTION
53575 field_addr.name = "background_blue";
53576#endif /* FREECIV_JSON_CONNECTION */
53577 e = 0;
53578
53579 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53580
53581 if (e) {
53582 log_packet_detailed("'background_blue' field error detected");
53583 }
53584#endif /* FREECIV_DELTA_PROTOCOL */
53585
53587}
53588
53590{
53591 if (!pc->used) {
53592 log_error("WARNING: trying to send data to the closed connection %s",
53594 return -1;
53595 }
53596 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GAME].packet != nullptr, -1,
53597 "Handler for PACKET_RULESET_GAME not installed");
53598 return pc->phs.handlers->send[PACKET_RULESET_GAME].packet(pc, packet);
53599}
53600
53601void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
53602{
53603 conn_list_iterate(dest, pconn) {
53606}
53607
53609{
53610 memset(packet, 0, sizeof(*packet));
53611
53612 requirement_vector_init(&packet->reqs);
53613 packet->helptext = strvec_new();
53614}
53615
53617{
53618 if (packet->helptext) {
53619 strvec_destroy(packet->helptext);
53620 packet->helptext = nullptr;
53621 }
53622 requirement_vector_free(&packet->reqs);
53623}
53624
53625static inline void destroy_packet_ruleset_specialist(void *packet)
53626{
53628 free(packet);
53629}
53630
53631#ifdef FREECIV_DELTA_PROTOCOL
53632#define hash_packet_ruleset_specialist_100 hash_const
53633#define cmp_packet_ruleset_specialist_100 cmp_const
53635#endif /* FREECIV_DELTA_PROTOCOL */
53636
53638{
53639#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_specialist(_packet)
53641
53642#ifdef FREECIV_JSON_CONNECTION
53643 struct plocation field_addr;
53644 {
53645 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
53648 }
53649#endif /* FREECIV_JSON_CONNECTION */
53650
53651 log_packet_detailed("packet_ruleset_specialist_100: got info about ()");
53652
53653#ifdef FREECIV_DELTA_PROTOCOL
53656 struct genhash **hash = pc->phs.received + PACKET_RULESET_SPECIALIST;
53657
53658 if (nullptr == *hash) {
53660 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
53661 }
53662
53663 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
53664 real_packet->id = old->id;
53665 sz_strlcpy(real_packet->plural_name, old->plural_name);
53666 sz_strlcpy(real_packet->rule_name, old->rule_name);
53667 sz_strlcpy(real_packet->short_name, old->short_name);
53668 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
53669 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
53670 requirement_vector_copy(&real_packet->reqs, &old->reqs);
53671 if (old->helptext) {
53672 strvec_copy(real_packet->helptext, old->helptext);
53673 } else {
53674 strvec_clear(real_packet->helptext);
53675 }
53676 } else {
53677 /* packet is already initialized empty */
53678 log_packet_detailed(" no old info");
53679 }
53680
53681#ifdef FREECIV_JSON_CONNECTION
53682 field_addr.name = "fields";
53683#endif /* FREECIV_JSON_CONNECTION */
53684 DIO_BV_GET(&din, &field_addr, fields);
53685
53686 if (BV_ISSET(fields, 0)) {
53687 log_packet_detailed(" got field 'id'");
53688
53689#ifdef FREECIV_JSON_CONNECTION
53690 field_addr.name = "id";
53691#endif /* FREECIV_JSON_CONNECTION */
53692
53693 {
53694 int readin;
53695
53696 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53698 }
53699 real_packet->id = readin;
53700 }
53701 }
53702
53703 if (BV_ISSET(fields, 1)) {
53704 log_packet_detailed(" got field 'plural_name'");
53705
53706#ifdef FREECIV_JSON_CONNECTION
53707 field_addr.name = "plural_name";
53708#endif /* FREECIV_JSON_CONNECTION */
53709
53710 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53711 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53712 }
53713 }
53714
53715 if (BV_ISSET(fields, 2)) {
53716 log_packet_detailed(" got field 'rule_name'");
53717
53718#ifdef FREECIV_JSON_CONNECTION
53719 field_addr.name = "rule_name";
53720#endif /* FREECIV_JSON_CONNECTION */
53721
53722 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53723 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53724 }
53725 }
53726
53727 if (BV_ISSET(fields, 3)) {
53728 log_packet_detailed(" got field 'short_name'");
53729
53730#ifdef FREECIV_JSON_CONNECTION
53731 field_addr.name = "short_name";
53732#endif /* FREECIV_JSON_CONNECTION */
53733
53734 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53735 RECEIVE_PACKET_FIELD_ERROR(short_name);
53736 }
53737 }
53738
53739 if (BV_ISSET(fields, 4)) {
53740 log_packet_detailed(" got field 'graphic_str'");
53741
53742#ifdef FREECIV_JSON_CONNECTION
53743 field_addr.name = "graphic_str";
53744#endif /* FREECIV_JSON_CONNECTION */
53745
53746 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53747 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53748 }
53749 }
53750
53751 if (BV_ISSET(fields, 5)) {
53752 log_packet_detailed(" got field 'graphic_alt'");
53753
53754#ifdef FREECIV_JSON_CONNECTION
53755 field_addr.name = "graphic_alt";
53756#endif /* FREECIV_JSON_CONNECTION */
53757
53758 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53759 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53760 }
53761 }
53762
53763 if (BV_ISSET(fields, 6)) {
53764 log_packet_detailed(" got field 'reqs'");
53765
53766#ifdef FREECIV_JSON_CONNECTION
53767 field_addr.name = "reqs";
53768#endif /* FREECIV_JSON_CONNECTION */
53769
53770 {
53771 int i;
53772
53773 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53775 }
53777
53778#ifdef FREECIV_JSON_CONNECTION
53779 /* Enter array. */
53780 field_addr.sub_location = plocation_elem_new(0);
53781#endif /* FREECIV_JSON_CONNECTION */
53782
53783 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53784#ifdef FREECIV_JSON_CONNECTION
53785 /* Next array element */
53786 field_addr.sub_location->number = i;
53787#endif /* FREECIV_JSON_CONNECTION */
53788
53789 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53791 }
53792 }
53793
53794#ifdef FREECIV_JSON_CONNECTION
53795 /* Exit array. */
53796 FC_FREE(field_addr.sub_location);
53797#endif /* FREECIV_JSON_CONNECTION */
53798 }
53799 }
53800
53801 if (BV_ISSET(fields, 7)) {
53802 log_packet_detailed(" got field 'helptext'");
53803
53804#ifdef FREECIV_JSON_CONNECTION
53805 field_addr.name = "helptext";
53806#endif /* FREECIV_JSON_CONNECTION */
53807
53808 {
53809 int i;
53810
53811 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53813 }
53814 strvec_reserve(real_packet->helptext, i);
53815
53816#ifdef FREECIV_JSON_CONNECTION
53817 /* Enter array. */
53818 field_addr.sub_location = plocation_elem_new(0);
53819#endif /* FREECIV_JSON_CONNECTION */
53820
53821 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53822#ifdef FREECIV_JSON_CONNECTION
53823 /* Next array element */
53824 field_addr.sub_location->number = i;
53825#endif /* FREECIV_JSON_CONNECTION */
53826
53827 {
53828 char readin[MAX_LEN_PACKET];
53829
53830 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53831 || !strvec_set(real_packet->helptext, i, readin)) {
53833 }
53834 }
53835 }
53836
53837#ifdef FREECIV_JSON_CONNECTION
53838 /* Exit array. */
53839 FC_FREE(field_addr.sub_location);
53840#endif /* FREECIV_JSON_CONNECTION */
53841 }
53842 }
53843
53844 if (nullptr == old) {
53845 old = fc_malloc(sizeof(*old));
53847 old->id = real_packet->id;
53848 sz_strlcpy(old->plural_name, real_packet->plural_name);
53849 sz_strlcpy(old->rule_name, real_packet->rule_name);
53850 sz_strlcpy(old->short_name, real_packet->short_name);
53851 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53852 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53853 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53854 if (real_packet->helptext) {
53855 strvec_copy(old->helptext, real_packet->helptext);
53856 } else {
53857 strvec_clear(old->helptext);
53858 }
53860 } else {
53861 old->id = real_packet->id;
53862 sz_strlcpy(old->plural_name, real_packet->plural_name);
53863 sz_strlcpy(old->rule_name, real_packet->rule_name);
53864 sz_strlcpy(old->short_name, real_packet->short_name);
53865 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53866 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53867 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53868 if (real_packet->helptext) {
53869 strvec_copy(old->helptext, real_packet->helptext);
53870 } else {
53871 strvec_clear(old->helptext);
53872 }
53873 }
53874
53875#else /* FREECIV_DELTA_PROTOCOL */
53876#ifdef FREECIV_JSON_CONNECTION
53877 field_addr.name = "id";
53878#endif /* FREECIV_JSON_CONNECTION */
53879
53880 {
53881 int readin;
53882
53883 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53885 }
53886 real_packet->id = readin;
53887 }
53888
53889#ifdef FREECIV_JSON_CONNECTION
53890 field_addr.name = "plural_name";
53891#endif /* FREECIV_JSON_CONNECTION */
53892
53893 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53894 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53895 }
53896
53897#ifdef FREECIV_JSON_CONNECTION
53898 field_addr.name = "rule_name";
53899#endif /* FREECIV_JSON_CONNECTION */
53900
53901 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53902 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53903 }
53904
53905#ifdef FREECIV_JSON_CONNECTION
53906 field_addr.name = "short_name";
53907#endif /* FREECIV_JSON_CONNECTION */
53908
53909 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53910 RECEIVE_PACKET_FIELD_ERROR(short_name);
53911 }
53912
53913#ifdef FREECIV_JSON_CONNECTION
53914 field_addr.name = "graphic_str";
53915#endif /* FREECIV_JSON_CONNECTION */
53916
53917 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53918 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53919 }
53920
53921#ifdef FREECIV_JSON_CONNECTION
53922 field_addr.name = "graphic_alt";
53923#endif /* FREECIV_JSON_CONNECTION */
53924
53925 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53926 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53927 }
53928
53929#ifdef FREECIV_JSON_CONNECTION
53930 field_addr.name = "reqs";
53931#endif /* FREECIV_JSON_CONNECTION */
53932
53933 {
53934 int i;
53935
53936 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53938 }
53940
53941#ifdef FREECIV_JSON_CONNECTION
53942 /* Enter array. */
53943 field_addr.sub_location = plocation_elem_new(0);
53944#endif /* FREECIV_JSON_CONNECTION */
53945
53946 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53947#ifdef FREECIV_JSON_CONNECTION
53948 /* Next array element */
53949 field_addr.sub_location->number = i;
53950#endif /* FREECIV_JSON_CONNECTION */
53951
53952 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53954 }
53955 }
53956
53957#ifdef FREECIV_JSON_CONNECTION
53958 /* Exit array. */
53959 FC_FREE(field_addr.sub_location);
53960#endif /* FREECIV_JSON_CONNECTION */
53961 }
53962
53963#ifdef FREECIV_JSON_CONNECTION
53964 field_addr.name = "helptext";
53965#endif /* FREECIV_JSON_CONNECTION */
53966
53967 {
53968 int i;
53969
53970 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53972 }
53973 strvec_reserve(real_packet->helptext, i);
53974
53975#ifdef FREECIV_JSON_CONNECTION
53976 /* Enter array. */
53977 field_addr.sub_location = plocation_elem_new(0);
53978#endif /* FREECIV_JSON_CONNECTION */
53979
53980 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53981#ifdef FREECIV_JSON_CONNECTION
53982 /* Next array element */
53983 field_addr.sub_location->number = i;
53984#endif /* FREECIV_JSON_CONNECTION */
53985
53986 {
53987 char readin[MAX_LEN_PACKET];
53988
53989 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53990 || !strvec_set(real_packet->helptext, i, readin)) {
53992 }
53993 }
53994 }
53995
53996#ifdef FREECIV_JSON_CONNECTION
53997 /* Exit array. */
53998 FC_FREE(field_addr.sub_location);
53999#endif /* FREECIV_JSON_CONNECTION */
54000 }
54001#endif /* FREECIV_DELTA_PROTOCOL */
54002
54004#undef FREE_PACKET_STRUCT
54005}
54006
54008{
54009 const struct packet_ruleset_specialist *real_packet = packet;
54010 int e;
54012
54013 log_packet_detailed("packet_ruleset_specialist_100: sending info about ()");
54014
54015#ifdef FREECIV_DELTA_PROTOCOL
54018 bool differ;
54019 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SPECIALIST;
54020
54021 if (nullptr == *hash) {
54023 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
54024 }
54025 BV_CLR_ALL(fields);
54026
54027 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54028 old = fc_malloc(sizeof(*old));
54029 /* temporary bitcopy just to insert correctly */
54030 *old = *real_packet;
54033 }
54034
54035 differ = (old->id != real_packet->id);
54036 if (differ) {
54037 BV_SET(fields, 0);
54038 }
54039
54040 differ = (strcmp(old->plural_name, real_packet->plural_name) != 0);
54041 if (differ) {
54042 BV_SET(fields, 1);
54043 }
54044
54045 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
54046 if (differ) {
54047 BV_SET(fields, 2);
54048 }
54049
54050 differ = (strcmp(old->short_name, real_packet->short_name) != 0);
54051 if (differ) {
54052 BV_SET(fields, 3);
54053 }
54054
54055 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
54056 if (differ) {
54057 BV_SET(fields, 4);
54058 }
54059
54060 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
54061 if (differ) {
54062 BV_SET(fields, 5);
54063 }
54064
54066 if (!differ) {
54067 int i;
54068
54069 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
54070 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
54071 if (differ) {
54072 break;
54073 }
54074 }
54075 }
54076 if (differ) {
54077 BV_SET(fields, 6);
54078 }
54079
54080 if (real_packet->helptext) {
54081 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
54082 } else {
54083 differ = (strvec_size(old->helptext) > 0);
54084 }
54085 if (differ) {
54086 BV_SET(fields, 7);
54087 }
54088#endif /* FREECIV_DELTA_PROTOCOL */
54089
54090#ifdef FREECIV_JSON_CONNECTION
54091 struct plocation field_addr;
54092 {
54093 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54096 }
54097#endif /* FREECIV_JSON_CONNECTION */
54098
54099#ifdef FREECIV_DELTA_PROTOCOL
54100#ifdef FREECIV_JSON_CONNECTION
54101 field_addr.name = "fields";
54102#endif /* FREECIV_JSON_CONNECTION */
54103 e = 0;
54104 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54105 if (e) {
54106 log_packet_detailed("fields bitvector error detected");
54107 }
54108
54109 if (BV_ISSET(fields, 0)) {
54110 log_packet_detailed(" field 'id' has changed");
54111
54112#ifdef FREECIV_JSON_CONNECTION
54113 field_addr.name = "id";
54114#endif /* FREECIV_JSON_CONNECTION */
54115 e = 0;
54116
54117 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54118
54119 if (e) {
54120 log_packet_detailed("'id' field error detected");
54121 }
54122 }
54123
54124 if (BV_ISSET(fields, 1)) {
54125 log_packet_detailed(" field 'plural_name' has changed");
54126
54127#ifdef FREECIV_JSON_CONNECTION
54128 field_addr.name = "plural_name";
54129#endif /* FREECIV_JSON_CONNECTION */
54130 e = 0;
54131
54132 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54133
54134 if (e) {
54135 log_packet_detailed("'plural_name' field error detected");
54136 }
54137 }
54138
54139 if (BV_ISSET(fields, 2)) {
54140 log_packet_detailed(" field 'rule_name' has changed");
54141
54142#ifdef FREECIV_JSON_CONNECTION
54143 field_addr.name = "rule_name";
54144#endif /* FREECIV_JSON_CONNECTION */
54145 e = 0;
54146
54147 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54148
54149 if (e) {
54150 log_packet_detailed("'rule_name' field error detected");
54151 }
54152 }
54153
54154 if (BV_ISSET(fields, 3)) {
54155 log_packet_detailed(" field 'short_name' has changed");
54156
54157#ifdef FREECIV_JSON_CONNECTION
54158 field_addr.name = "short_name";
54159#endif /* FREECIV_JSON_CONNECTION */
54160 e = 0;
54161
54162 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54163
54164 if (e) {
54165 log_packet_detailed("'short_name' field error detected");
54166 }
54167 }
54168
54169 if (BV_ISSET(fields, 4)) {
54170 log_packet_detailed(" field 'graphic_str' has changed");
54171
54172#ifdef FREECIV_JSON_CONNECTION
54173 field_addr.name = "graphic_str";
54174#endif /* FREECIV_JSON_CONNECTION */
54175 e = 0;
54176
54177 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54178
54179 if (e) {
54180 log_packet_detailed("'graphic_str' field error detected");
54181 }
54182 }
54183
54184 if (BV_ISSET(fields, 5)) {
54185 log_packet_detailed(" field 'graphic_alt' has changed");
54186
54187#ifdef FREECIV_JSON_CONNECTION
54188 field_addr.name = "graphic_alt";
54189#endif /* FREECIV_JSON_CONNECTION */
54190 e = 0;
54191
54192 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54193
54194 if (e) {
54195 log_packet_detailed("'graphic_alt' field error detected");
54196 }
54197 }
54198
54199 if (BV_ISSET(fields, 6)) {
54200 log_packet_detailed(" field 'reqs' has changed");
54201
54202#ifdef FREECIV_JSON_CONNECTION
54203 field_addr.name = "reqs";
54204#endif /* FREECIV_JSON_CONNECTION */
54205 e = 0;
54206
54207 {
54208 int i;
54209
54212
54213#ifdef FREECIV_JSON_CONNECTION
54214 /* Enter array. */
54215 field_addr.sub_location = plocation_elem_new(0);
54216#endif /* FREECIV_JSON_CONNECTION */
54217
54218 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54219#ifdef FREECIV_JSON_CONNECTION
54220 /* Next array element. */
54221 field_addr.sub_location->number = i;
54222#endif /* FREECIV_JSON_CONNECTION */
54223
54224 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54225 }
54226
54227#ifdef FREECIV_JSON_CONNECTION
54228 /* Exit array. */
54229 FC_FREE(field_addr.sub_location);
54230#endif /* FREECIV_JSON_CONNECTION */
54231 }
54232
54233 if (e) {
54234 log_packet_detailed("'reqs' field error detected");
54235 }
54236 }
54237
54238 if (BV_ISSET(fields, 7)) {
54239 log_packet_detailed(" field 'helptext' has changed");
54240
54241#ifdef FREECIV_JSON_CONNECTION
54242 field_addr.name = "helptext";
54243#endif /* FREECIV_JSON_CONNECTION */
54244 e = 0;
54245
54246 if (!real_packet->helptext) {
54247 /* Transmit null as empty */
54248 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54249 } else {
54250 int i;
54251
54253 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54254
54255#ifdef FREECIV_JSON_CONNECTION
54256 /* Enter array. */
54257 field_addr.sub_location = plocation_elem_new(0);
54258#endif /* FREECIV_JSON_CONNECTION */
54259
54260 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54261#ifdef FREECIV_JSON_CONNECTION
54262 /* Next array element. */
54263 field_addr.sub_location->number = i;
54264#endif /* FREECIV_JSON_CONNECTION */
54265
54266 {
54267 const char *pstr = strvec_get(real_packet->helptext, i);
54268
54269 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54270 }
54271 }
54272
54273#ifdef FREECIV_JSON_CONNECTION
54274 /* Exit array. */
54275 FC_FREE(field_addr.sub_location);
54276#endif /* FREECIV_JSON_CONNECTION */
54277 }
54278
54279 if (e) {
54280 log_packet_detailed("'helptext' field error detected");
54281 }
54282 }
54283
54284 old->id = real_packet->id;
54285 sz_strlcpy(old->plural_name, real_packet->plural_name);
54286 sz_strlcpy(old->rule_name, real_packet->rule_name);
54287 sz_strlcpy(old->short_name, real_packet->short_name);
54288 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
54289 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
54290 requirement_vector_copy(&old->reqs, &real_packet->reqs);
54291 if (real_packet->helptext) {
54292 strvec_copy(old->helptext, real_packet->helptext);
54293 } else {
54294 strvec_clear(old->helptext);
54295 }
54296
54297#else /* FREECIV_DELTA_PROTOCOL */
54298#ifdef FREECIV_JSON_CONNECTION
54299 field_addr.name = "id";
54300#endif /* FREECIV_JSON_CONNECTION */
54301 e = 0;
54302
54303 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54304
54305 if (e) {
54306 log_packet_detailed("'id' field error detected");
54307 }
54308
54309#ifdef FREECIV_JSON_CONNECTION
54310 field_addr.name = "plural_name";
54311#endif /* FREECIV_JSON_CONNECTION */
54312 e = 0;
54313
54314 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54315
54316 if (e) {
54317 log_packet_detailed("'plural_name' field error detected");
54318 }
54319
54320#ifdef FREECIV_JSON_CONNECTION
54321 field_addr.name = "rule_name";
54322#endif /* FREECIV_JSON_CONNECTION */
54323 e = 0;
54324
54325 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54326
54327 if (e) {
54328 log_packet_detailed("'rule_name' field error detected");
54329 }
54330
54331#ifdef FREECIV_JSON_CONNECTION
54332 field_addr.name = "short_name";
54333#endif /* FREECIV_JSON_CONNECTION */
54334 e = 0;
54335
54336 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54337
54338 if (e) {
54339 log_packet_detailed("'short_name' field error detected");
54340 }
54341
54342#ifdef FREECIV_JSON_CONNECTION
54343 field_addr.name = "graphic_str";
54344#endif /* FREECIV_JSON_CONNECTION */
54345 e = 0;
54346
54347 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54348
54349 if (e) {
54350 log_packet_detailed("'graphic_str' field error detected");
54351 }
54352
54353#ifdef FREECIV_JSON_CONNECTION
54354 field_addr.name = "graphic_alt";
54355#endif /* FREECIV_JSON_CONNECTION */
54356 e = 0;
54357
54358 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54359
54360 if (e) {
54361 log_packet_detailed("'graphic_alt' field error detected");
54362 }
54363
54364#ifdef FREECIV_JSON_CONNECTION
54365 field_addr.name = "reqs";
54366#endif /* FREECIV_JSON_CONNECTION */
54367 e = 0;
54368
54369 {
54370 int i;
54371
54374
54375#ifdef FREECIV_JSON_CONNECTION
54376 /* Enter array. */
54377 field_addr.sub_location = plocation_elem_new(0);
54378#endif /* FREECIV_JSON_CONNECTION */
54379
54380 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54381#ifdef FREECIV_JSON_CONNECTION
54382 /* Next array element. */
54383 field_addr.sub_location->number = i;
54384#endif /* FREECIV_JSON_CONNECTION */
54385
54386 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54387 }
54388
54389#ifdef FREECIV_JSON_CONNECTION
54390 /* Exit array. */
54391 FC_FREE(field_addr.sub_location);
54392#endif /* FREECIV_JSON_CONNECTION */
54393 }
54394
54395 if (e) {
54396 log_packet_detailed("'reqs' field error detected");
54397 }
54398
54399#ifdef FREECIV_JSON_CONNECTION
54400 field_addr.name = "helptext";
54401#endif /* FREECIV_JSON_CONNECTION */
54402 e = 0;
54403
54404 if (!real_packet->helptext) {
54405 /* Transmit null as empty */
54406 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54407 } else {
54408 int i;
54409
54411 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54412
54413#ifdef FREECIV_JSON_CONNECTION
54414 /* Enter array. */
54415 field_addr.sub_location = plocation_elem_new(0);
54416#endif /* FREECIV_JSON_CONNECTION */
54417
54418 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54419#ifdef FREECIV_JSON_CONNECTION
54420 /* Next array element. */
54421 field_addr.sub_location->number = i;
54422#endif /* FREECIV_JSON_CONNECTION */
54423
54424 {
54425 const char *pstr = strvec_get(real_packet->helptext, i);
54426
54427 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54428 }
54429 }
54430
54431#ifdef FREECIV_JSON_CONNECTION
54432 /* Exit array. */
54433 FC_FREE(field_addr.sub_location);
54434#endif /* FREECIV_JSON_CONNECTION */
54435 }
54436
54437 if (e) {
54438 log_packet_detailed("'helptext' field error detected");
54439 }
54440#endif /* FREECIV_DELTA_PROTOCOL */
54441
54443}
54444
54446{
54447 if (!pc->used) {
54448 log_error("WARNING: trying to send data to the closed connection %s",
54450 return -1;
54451 }
54452 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet != nullptr, -1,
54453 "Handler for PACKET_RULESET_SPECIALIST not installed");
54454 return pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet(pc, packet);
54455}
54456
54458{
54459 conn_list_iterate(dest, pconn) {
54462}
54463
54465{
54466 memset(packet, 0, sizeof(*packet));
54467}
54468
54469#define free_packet_ruleset_government_ruler_title(_packet) (void) 0
54470#define destroy_packet_ruleset_government_ruler_title free
54471
54472#ifdef FREECIV_DELTA_PROTOCOL
54473#define hash_packet_ruleset_government_ruler_title_100 hash_const
54474#define cmp_packet_ruleset_government_ruler_title_100 cmp_const
54476#endif /* FREECIV_DELTA_PROTOCOL */
54477
54479{
54480#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government_ruler_title(_packet)
54482
54483#ifdef FREECIV_JSON_CONNECTION
54484 struct plocation field_addr;
54485 {
54486 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54489 }
54490#endif /* FREECIV_JSON_CONNECTION */
54491
54492 log_packet_detailed("packet_ruleset_government_ruler_title_100: got info about ()");
54493
54494#ifdef FREECIV_DELTA_PROTOCOL
54497 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT_RULER_TITLE;
54498
54499 if (nullptr == *hash) {
54501 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54502 }
54503
54504 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54505 *real_packet = *old;
54506 } else {
54507 /* packet is already initialized empty */
54508 log_packet_detailed(" no old info");
54509 }
54510
54511#ifdef FREECIV_JSON_CONNECTION
54512 field_addr.name = "fields";
54513#endif /* FREECIV_JSON_CONNECTION */
54514 DIO_BV_GET(&din, &field_addr, fields);
54515
54516 if (BV_ISSET(fields, 0)) {
54517 log_packet_detailed(" got field 'gov'");
54518
54519#ifdef FREECIV_JSON_CONNECTION
54520 field_addr.name = "gov";
54521#endif /* FREECIV_JSON_CONNECTION */
54522
54523 {
54524 int readin;
54525
54526 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54528 }
54529 real_packet->gov = readin;
54530 }
54531 }
54532
54533 if (BV_ISSET(fields, 1)) {
54534 log_packet_detailed(" got field 'nation'");
54535
54536#ifdef FREECIV_JSON_CONNECTION
54537 field_addr.name = "nation";
54538#endif /* FREECIV_JSON_CONNECTION */
54539
54540 {
54541 int readin;
54542
54543 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54545 }
54546 real_packet->nation = readin;
54547 }
54548 }
54549
54550 if (BV_ISSET(fields, 2)) {
54551 log_packet_detailed(" got field 'male_title'");
54552
54553#ifdef FREECIV_JSON_CONNECTION
54554 field_addr.name = "male_title";
54555#endif /* FREECIV_JSON_CONNECTION */
54556
54557 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54558 RECEIVE_PACKET_FIELD_ERROR(male_title);
54559 }
54560 }
54561
54562 if (BV_ISSET(fields, 3)) {
54563 log_packet_detailed(" got field 'female_title'");
54564
54565#ifdef FREECIV_JSON_CONNECTION
54566 field_addr.name = "female_title";
54567#endif /* FREECIV_JSON_CONNECTION */
54568
54569 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54570 RECEIVE_PACKET_FIELD_ERROR(female_title);
54571 }
54572 }
54573
54574 if (nullptr == old) {
54575 old = fc_malloc(sizeof(*old));
54577 *old = *real_packet;
54579 } else {
54580 *old = *real_packet;
54581 }
54582
54583#else /* FREECIV_DELTA_PROTOCOL */
54584#ifdef FREECIV_JSON_CONNECTION
54585 field_addr.name = "gov";
54586#endif /* FREECIV_JSON_CONNECTION */
54587
54588 {
54589 int readin;
54590
54591 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54593 }
54594 real_packet->gov = readin;
54595 }
54596
54597#ifdef FREECIV_JSON_CONNECTION
54598 field_addr.name = "nation";
54599#endif /* FREECIV_JSON_CONNECTION */
54600
54601 {
54602 int readin;
54603
54604 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54606 }
54607 real_packet->nation = readin;
54608 }
54609
54610#ifdef FREECIV_JSON_CONNECTION
54611 field_addr.name = "male_title";
54612#endif /* FREECIV_JSON_CONNECTION */
54613
54614 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54615 RECEIVE_PACKET_FIELD_ERROR(male_title);
54616 }
54617
54618#ifdef FREECIV_JSON_CONNECTION
54619 field_addr.name = "female_title";
54620#endif /* FREECIV_JSON_CONNECTION */
54621
54622 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54623 RECEIVE_PACKET_FIELD_ERROR(female_title);
54624 }
54625#endif /* FREECIV_DELTA_PROTOCOL */
54626
54628#undef FREE_PACKET_STRUCT
54629}
54630
54632{
54634 int e;
54636
54637 log_packet_detailed("packet_ruleset_government_ruler_title_100: sending info about ()");
54638
54639#ifdef FREECIV_DELTA_PROTOCOL
54642 bool differ;
54644
54645 if (nullptr == *hash) {
54647 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54648 }
54649 BV_CLR_ALL(fields);
54650
54651 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54652 old = fc_malloc(sizeof(*old));
54653 /* temporary bitcopy just to insert correctly */
54654 *old = *real_packet;
54657 }
54658
54659 differ = (old->gov != real_packet->gov);
54660 if (differ) {
54661 BV_SET(fields, 0);
54662 }
54663
54664 differ = (old->nation != real_packet->nation);
54665 if (differ) {
54666 BV_SET(fields, 1);
54667 }
54668
54669 differ = (strcmp(old->male_title, real_packet->male_title) != 0);
54670 if (differ) {
54671 BV_SET(fields, 2);
54672 }
54673
54674 differ = (strcmp(old->female_title, real_packet->female_title) != 0);
54675 if (differ) {
54676 BV_SET(fields, 3);
54677 }
54678#endif /* FREECIV_DELTA_PROTOCOL */
54679
54680#ifdef FREECIV_JSON_CONNECTION
54681 struct plocation field_addr;
54682 {
54683 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54686 }
54687#endif /* FREECIV_JSON_CONNECTION */
54688
54689#ifdef FREECIV_DELTA_PROTOCOL
54690#ifdef FREECIV_JSON_CONNECTION
54691 field_addr.name = "fields";
54692#endif /* FREECIV_JSON_CONNECTION */
54693 e = 0;
54694 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54695 if (e) {
54696 log_packet_detailed("fields bitvector error detected");
54697 }
54698
54699 if (BV_ISSET(fields, 0)) {
54700 log_packet_detailed(" field 'gov' has changed");
54701
54702#ifdef FREECIV_JSON_CONNECTION
54703 field_addr.name = "gov";
54704#endif /* FREECIV_JSON_CONNECTION */
54705 e = 0;
54706
54707 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54708
54709 if (e) {
54710 log_packet_detailed("'gov' field error detected");
54711 }
54712 }
54713
54714 if (BV_ISSET(fields, 1)) {
54715 log_packet_detailed(" field 'nation' has changed");
54716
54717#ifdef FREECIV_JSON_CONNECTION
54718 field_addr.name = "nation";
54719#endif /* FREECIV_JSON_CONNECTION */
54720 e = 0;
54721
54722 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54723
54724 if (e) {
54725 log_packet_detailed("'nation' field error detected");
54726 }
54727 }
54728
54729 if (BV_ISSET(fields, 2)) {
54730 log_packet_detailed(" field 'male_title' has changed");
54731
54732#ifdef FREECIV_JSON_CONNECTION
54733 field_addr.name = "male_title";
54734#endif /* FREECIV_JSON_CONNECTION */
54735 e = 0;
54736
54737 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54738
54739 if (e) {
54740 log_packet_detailed("'male_title' field error detected");
54741 }
54742 }
54743
54744 if (BV_ISSET(fields, 3)) {
54745 log_packet_detailed(" field 'female_title' has changed");
54746
54747#ifdef FREECIV_JSON_CONNECTION
54748 field_addr.name = "female_title";
54749#endif /* FREECIV_JSON_CONNECTION */
54750 e = 0;
54751
54752 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54753
54754 if (e) {
54755 log_packet_detailed("'female_title' field error detected");
54756 }
54757 }
54758
54759 *old = *real_packet;
54760
54761#else /* FREECIV_DELTA_PROTOCOL */
54762#ifdef FREECIV_JSON_CONNECTION
54763 field_addr.name = "gov";
54764#endif /* FREECIV_JSON_CONNECTION */
54765 e = 0;
54766
54767 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54768
54769 if (e) {
54770 log_packet_detailed("'gov' field error detected");
54771 }
54772
54773#ifdef FREECIV_JSON_CONNECTION
54774 field_addr.name = "nation";
54775#endif /* FREECIV_JSON_CONNECTION */
54776 e = 0;
54777
54778 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54779
54780 if (e) {
54781 log_packet_detailed("'nation' field error detected");
54782 }
54783
54784#ifdef FREECIV_JSON_CONNECTION
54785 field_addr.name = "male_title";
54786#endif /* FREECIV_JSON_CONNECTION */
54787 e = 0;
54788
54789 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54790
54791 if (e) {
54792 log_packet_detailed("'male_title' field error detected");
54793 }
54794
54795#ifdef FREECIV_JSON_CONNECTION
54796 field_addr.name = "female_title";
54797#endif /* FREECIV_JSON_CONNECTION */
54798 e = 0;
54799
54800 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54801
54802 if (e) {
54803 log_packet_detailed("'female_title' field error detected");
54804 }
54805#endif /* FREECIV_DELTA_PROTOCOL */
54806
54808}
54809
54811{
54812 if (!pc->used) {
54813 log_error("WARNING: trying to send data to the closed connection %s",
54815 return -1;
54816 }
54817 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet != nullptr, -1,
54818 "Handler for PACKET_RULESET_GOVERNMENT_RULER_TITLE not installed");
54819 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet(pc, packet);
54820}
54821
54828
54829static inline void init_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54830{
54831 memset(packet, 0, sizeof(*packet));
54832
54834 packet->helptext = strvec_new();
54835}
54836
54837static inline void free_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54838{
54839 if (packet->helptext) {
54840 strvec_destroy(packet->helptext);
54841 packet->helptext = nullptr;
54842 }
54844}
54845
54846static inline void destroy_packet_ruleset_tech(void *packet)
54847{
54849 free(packet);
54850}
54851
54852#ifdef FREECIV_DELTA_PROTOCOL
54853#define hash_packet_ruleset_tech_100 hash_const
54854#define cmp_packet_ruleset_tech_100 cmp_const
54856#endif /* FREECIV_DELTA_PROTOCOL */
54857
54859{
54860#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech(_packet)
54862
54863#ifdef FREECIV_JSON_CONNECTION
54864 struct plocation field_addr;
54865 {
54866 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54869 }
54870#endif /* FREECIV_JSON_CONNECTION */
54871
54872 log_packet_detailed("packet_ruleset_tech_100: got info about ()");
54873
54874#ifdef FREECIV_DELTA_PROTOCOL
54876 struct packet_ruleset_tech *old;
54877 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH;
54878
54879 if (nullptr == *hash) {
54881 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
54882 }
54883
54884 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54885 real_packet->id = old->id;
54886 real_packet->root_req = old->root_req;
54887 requirement_vector_copy(&real_packet->research_reqs, &old->research_reqs);
54888 real_packet->tclass = old->tclass;
54889 real_packet->removed = old->removed;
54890 real_packet->flags = old->flags;
54891 real_packet->cost = old->cost;
54892 real_packet->num_reqs = old->num_reqs;
54893 sz_strlcpy(real_packet->name, old->name);
54894 sz_strlcpy(real_packet->rule_name, old->rule_name);
54895 if (old->helptext) {
54896 strvec_copy(real_packet->helptext, old->helptext);
54897 } else {
54898 strvec_clear(real_packet->helptext);
54899 }
54900 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
54901 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
54902 } else {
54903 /* packet is already initialized empty */
54904 log_packet_detailed(" no old info");
54905 }
54906
54907#ifdef FREECIV_JSON_CONNECTION
54908 field_addr.name = "fields";
54909#endif /* FREECIV_JSON_CONNECTION */
54910 DIO_BV_GET(&din, &field_addr, fields);
54911
54912 if (BV_ISSET(fields, 0)) {
54913 log_packet_detailed(" got field 'id'");
54914
54915#ifdef FREECIV_JSON_CONNECTION
54916 field_addr.name = "id";
54917#endif /* FREECIV_JSON_CONNECTION */
54918
54919 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
54921 }
54922 }
54923
54924 if (BV_ISSET(fields, 1)) {
54925 log_packet_detailed(" got field 'root_req'");
54926
54927#ifdef FREECIV_JSON_CONNECTION
54928 field_addr.name = "root_req";
54929#endif /* FREECIV_JSON_CONNECTION */
54930
54931 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
54933 }
54934 }
54935
54936 if (BV_ISSET(fields, 2)) {
54937 log_packet_detailed(" got field 'research_reqs'");
54938
54939#ifdef FREECIV_JSON_CONNECTION
54940 field_addr.name = "research_reqs";
54941#endif /* FREECIV_JSON_CONNECTION */
54942
54943 {
54944 int i;
54945
54946 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
54947 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54948 }
54949 requirement_vector_reserve(&real_packet->research_reqs, i);
54950
54951#ifdef FREECIV_JSON_CONNECTION
54952 /* Enter array. */
54953 field_addr.sub_location = plocation_elem_new(0);
54954#endif /* FREECIV_JSON_CONNECTION */
54955
54956 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
54957#ifdef FREECIV_JSON_CONNECTION
54958 /* Next array element */
54959 field_addr.sub_location->number = i;
54960#endif /* FREECIV_JSON_CONNECTION */
54961
54962 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
54963 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54964 }
54965 }
54966
54967#ifdef FREECIV_JSON_CONNECTION
54968 /* Exit array. */
54969 FC_FREE(field_addr.sub_location);
54970#endif /* FREECIV_JSON_CONNECTION */
54971 }
54972 }
54973
54974 if (BV_ISSET(fields, 3)) {
54975 log_packet_detailed(" got field 'tclass'");
54976
54977#ifdef FREECIV_JSON_CONNECTION
54978 field_addr.name = "tclass";
54979#endif /* FREECIV_JSON_CONNECTION */
54980
54981 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
54983 }
54984 }
54985
54986 real_packet->removed = BV_ISSET(fields, 4);
54987
54988 if (BV_ISSET(fields, 5)) {
54989 log_packet_detailed(" got field 'flags'");
54990
54991#ifdef FREECIV_JSON_CONNECTION
54992 field_addr.name = "flags";
54993#endif /* FREECIV_JSON_CONNECTION */
54994
54995 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
54997 }
54998 }
54999
55000 if (BV_ISSET(fields, 6)) {
55001 log_packet_detailed(" got field 'cost'");
55002
55003#ifdef FREECIV_JSON_CONNECTION
55004 field_addr.name = "cost";
55005#endif /* FREECIV_JSON_CONNECTION */
55006
55007 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
55009 }
55010 }
55011
55012 if (BV_ISSET(fields, 7)) {
55013 log_packet_detailed(" got field 'num_reqs'");
55014
55015#ifdef FREECIV_JSON_CONNECTION
55016 field_addr.name = "num_reqs";
55017#endif /* FREECIV_JSON_CONNECTION */
55018
55019 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
55021 }
55022 }
55023
55024 if (BV_ISSET(fields, 8)) {
55025 log_packet_detailed(" got field 'name'");
55026
55027#ifdef FREECIV_JSON_CONNECTION
55028 field_addr.name = "name";
55029#endif /* FREECIV_JSON_CONNECTION */
55030
55031 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55033 }
55034 }
55035
55036 if (BV_ISSET(fields, 9)) {
55037 log_packet_detailed(" got field 'rule_name'");
55038
55039#ifdef FREECIV_JSON_CONNECTION
55040 field_addr.name = "rule_name";
55041#endif /* FREECIV_JSON_CONNECTION */
55042
55043 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55044 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55045 }
55046 }
55047
55048 if (BV_ISSET(fields, 10)) {
55049 log_packet_detailed(" got field 'helptext'");
55050
55051#ifdef FREECIV_JSON_CONNECTION
55052 field_addr.name = "helptext";
55053#endif /* FREECIV_JSON_CONNECTION */
55054
55055 {
55056 int i;
55057
55058 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55060 }
55061 strvec_reserve(real_packet->helptext, i);
55062
55063#ifdef FREECIV_JSON_CONNECTION
55064 /* Enter array. */
55065 field_addr.sub_location = plocation_elem_new(0);
55066#endif /* FREECIV_JSON_CONNECTION */
55067
55068 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55069#ifdef FREECIV_JSON_CONNECTION
55070 /* Next array element */
55071 field_addr.sub_location->number = i;
55072#endif /* FREECIV_JSON_CONNECTION */
55073
55074 {
55075 char readin[MAX_LEN_PACKET];
55076
55077 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
55078 || !strvec_set(real_packet->helptext, i, readin)) {
55080 }
55081 }
55082 }
55083
55084#ifdef FREECIV_JSON_CONNECTION
55085 /* Exit array. */
55086 FC_FREE(field_addr.sub_location);
55087#endif /* FREECIV_JSON_CONNECTION */
55088 }
55089 }
55090
55091 if (BV_ISSET(fields, 11)) {
55092 log_packet_detailed(" got field 'graphic_str'");
55093
55094#ifdef FREECIV_JSON_CONNECTION
55095 field_addr.name = "graphic_str";
55096#endif /* FREECIV_JSON_CONNECTION */
55097
55098 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55099 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55100 }
55101 }
55102
55103 if (BV_ISSET(fields, 12)) {
55104 log_packet_detailed(" got field 'graphic_alt'");
55105
55106#ifdef FREECIV_JSON_CONNECTION
55107 field_addr.name = "graphic_alt";
55108#endif /* FREECIV_JSON_CONNECTION */
55109
55110 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55111 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55112 }
55113 }
55114
55115 if (nullptr == old) {
55116 old = fc_malloc(sizeof(*old));
55118 old->id = real_packet->id;
55119 old->root_req = real_packet->root_req;
55120 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55121 old->tclass = real_packet->tclass;
55122 old->removed = real_packet->removed;
55123 old->flags = real_packet->flags;
55124 old->cost = real_packet->cost;
55125 old->num_reqs = real_packet->num_reqs;
55126 sz_strlcpy(old->name, real_packet->name);
55127 sz_strlcpy(old->rule_name, real_packet->rule_name);
55128 if (real_packet->helptext) {
55129 strvec_copy(old->helptext, real_packet->helptext);
55130 } else {
55131 strvec_clear(old->helptext);
55132 }
55133 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55134 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55136 } else {
55137 old->id = real_packet->id;
55138 old->root_req = real_packet->root_req;
55139 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55140 old->tclass = real_packet->tclass;
55141 old->removed = real_packet->removed;
55142 old->flags = real_packet->flags;
55143 old->cost = real_packet->cost;
55144 old->num_reqs = real_packet->num_reqs;
55145 sz_strlcpy(old->name, real_packet->name);
55146 sz_strlcpy(old->rule_name, real_packet->rule_name);
55147 if (real_packet->helptext) {
55148 strvec_copy(old->helptext, real_packet->helptext);
55149 } else {
55150 strvec_clear(old->helptext);
55151 }
55152 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55153 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55154 }
55155
55156#else /* FREECIV_DELTA_PROTOCOL */
55157#ifdef FREECIV_JSON_CONNECTION
55158 field_addr.name = "id";
55159#endif /* FREECIV_JSON_CONNECTION */
55160
55161 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55163 }
55164
55165#ifdef FREECIV_JSON_CONNECTION
55166 field_addr.name = "root_req";
55167#endif /* FREECIV_JSON_CONNECTION */
55168
55169 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
55171 }
55172
55173#ifdef FREECIV_JSON_CONNECTION
55174 field_addr.name = "research_reqs";
55175#endif /* FREECIV_JSON_CONNECTION */
55176
55177 {
55178 int i;
55179
55180 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55181 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55182 }
55183 requirement_vector_reserve(&real_packet->research_reqs, i);
55184
55185#ifdef FREECIV_JSON_CONNECTION
55186 /* Enter array. */
55187 field_addr.sub_location = plocation_elem_new(0);
55188#endif /* FREECIV_JSON_CONNECTION */
55189
55190 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55191#ifdef FREECIV_JSON_CONNECTION
55192 /* Next array element */
55193 field_addr.sub_location->number = i;
55194#endif /* FREECIV_JSON_CONNECTION */
55195
55196 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
55197 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55198 }
55199 }
55200
55201#ifdef FREECIV_JSON_CONNECTION
55202 /* Exit array. */
55203 FC_FREE(field_addr.sub_location);
55204#endif /* FREECIV_JSON_CONNECTION */
55205 }
55206
55207#ifdef FREECIV_JSON_CONNECTION
55208 field_addr.name = "tclass";
55209#endif /* FREECIV_JSON_CONNECTION */
55210
55211 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
55213 }
55214
55215#ifdef FREECIV_JSON_CONNECTION
55216 field_addr.name = "removed";
55217#endif /* FREECIV_JSON_CONNECTION */
55218
55219 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removed)) {
55221 }
55222
55223#ifdef FREECIV_JSON_CONNECTION
55224 field_addr.name = "flags";
55225#endif /* FREECIV_JSON_CONNECTION */
55226
55227 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
55229 }
55230
55231#ifdef FREECIV_JSON_CONNECTION
55232 field_addr.name = "cost";
55233#endif /* FREECIV_JSON_CONNECTION */
55234
55235 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
55237 }
55238
55239#ifdef FREECIV_JSON_CONNECTION
55240 field_addr.name = "num_reqs";
55241#endif /* FREECIV_JSON_CONNECTION */
55242
55243 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
55245 }
55246
55247#ifdef FREECIV_JSON_CONNECTION
55248 field_addr.name = "name";
55249#endif /* FREECIV_JSON_CONNECTION */
55250
55251 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55253 }
55254
55255#ifdef FREECIV_JSON_CONNECTION
55256 field_addr.name = "rule_name";
55257#endif /* FREECIV_JSON_CONNECTION */
55258
55259 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55260 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55261 }
55262
55263#ifdef FREECIV_JSON_CONNECTION
55264 field_addr.name = "helptext";
55265#endif /* FREECIV_JSON_CONNECTION */
55266
55267 {
55268 int i;
55269
55270 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55272 }
55273 strvec_reserve(real_packet->helptext, i);
55274
55275#ifdef FREECIV_JSON_CONNECTION
55276 /* Enter array. */
55277 field_addr.sub_location = plocation_elem_new(0);
55278#endif /* FREECIV_JSON_CONNECTION */
55279
55280 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55281#ifdef FREECIV_JSON_CONNECTION
55282 /* Next array element */
55283 field_addr.sub_location->number = i;
55284#endif /* FREECIV_JSON_CONNECTION */
55285
55286 {
55287 char readin[MAX_LEN_PACKET];
55288
55289 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
55290 || !strvec_set(real_packet->helptext, i, readin)) {
55292 }
55293 }
55294 }
55295
55296#ifdef FREECIV_JSON_CONNECTION
55297 /* Exit array. */
55298 FC_FREE(field_addr.sub_location);
55299#endif /* FREECIV_JSON_CONNECTION */
55300 }
55301
55302#ifdef FREECIV_JSON_CONNECTION
55303 field_addr.name = "graphic_str";
55304#endif /* FREECIV_JSON_CONNECTION */
55305
55306 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55307 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55308 }
55309
55310#ifdef FREECIV_JSON_CONNECTION
55311 field_addr.name = "graphic_alt";
55312#endif /* FREECIV_JSON_CONNECTION */
55313
55314 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55315 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55316 }
55317#endif /* FREECIV_DELTA_PROTOCOL */
55318
55320#undef FREE_PACKET_STRUCT
55321}
55322
55323static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
55324{
55325 const struct packet_ruleset_tech *real_packet = packet;
55326 int e;
55328
55329 log_packet_detailed("packet_ruleset_tech_100: sending info about ()");
55330
55331#ifdef FREECIV_DELTA_PROTOCOL
55333 struct packet_ruleset_tech *old;
55334 bool differ;
55335 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH;
55336
55337 if (nullptr == *hash) {
55339 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
55340 }
55341 BV_CLR_ALL(fields);
55342
55343 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55344 old = fc_malloc(sizeof(*old));
55345 /* temporary bitcopy just to insert correctly */
55346 *old = *real_packet;
55349 }
55350
55351 differ = (old->id != real_packet->id);
55352 if (differ) {
55353 BV_SET(fields, 0);
55354 }
55355
55356 differ = (old->root_req != real_packet->root_req);
55357 if (differ) {
55358 BV_SET(fields, 1);
55359 }
55360
55361 differ = (requirement_vector_size(&old->research_reqs) != requirement_vector_size(&real_packet->research_reqs));
55362 if (!differ) {
55363 int i;
55364
55365 for (i = 0; i < requirement_vector_size(&old->research_reqs); i++) {
55366 differ = !are_requirements_equal(&old->research_reqs.p[i], &real_packet->research_reqs.p[i]);
55367 if (differ) {
55368 break;
55369 }
55370 }
55371 }
55372 if (differ) {
55373 BV_SET(fields, 2);
55374 }
55375
55376 differ = (old->tclass != real_packet->tclass);
55377 if (differ) {
55378 BV_SET(fields, 3);
55379 }
55380
55381 /* folded into head */
55382 if (real_packet->removed) {
55383 BV_SET(fields, 4);
55384 }
55385
55386 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
55387 if (differ) {
55388 BV_SET(fields, 5);
55389 }
55390
55391 differ = ((int) (old->cost * 100) != (int) (real_packet->cost * 100));
55392 if (differ) {
55393 BV_SET(fields, 6);
55394 }
55395
55396 differ = (old->num_reqs != real_packet->num_reqs);
55397 if (differ) {
55398 BV_SET(fields, 7);
55399 }
55400
55401 differ = (strcmp(old->name, real_packet->name) != 0);
55402 if (differ) {
55403 BV_SET(fields, 8);
55404 }
55405
55406 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55407 if (differ) {
55408 BV_SET(fields, 9);
55409 }
55410
55411 if (real_packet->helptext) {
55412 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
55413 } else {
55414 differ = (strvec_size(old->helptext) > 0);
55415 }
55416 if (differ) {
55417 BV_SET(fields, 10);
55418 }
55419
55420 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
55421 if (differ) {
55422 BV_SET(fields, 11);
55423 }
55424
55425 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
55426 if (differ) {
55427 BV_SET(fields, 12);
55428 }
55429#endif /* FREECIV_DELTA_PROTOCOL */
55430
55431#ifdef FREECIV_JSON_CONNECTION
55432 struct plocation field_addr;
55433 {
55434 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55437 }
55438#endif /* FREECIV_JSON_CONNECTION */
55439
55440#ifdef FREECIV_DELTA_PROTOCOL
55441#ifdef FREECIV_JSON_CONNECTION
55442 field_addr.name = "fields";
55443#endif /* FREECIV_JSON_CONNECTION */
55444 e = 0;
55445 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55446 if (e) {
55447 log_packet_detailed("fields bitvector error detected");
55448 }
55449
55450 if (BV_ISSET(fields, 0)) {
55451 log_packet_detailed(" field 'id' has changed");
55452
55453#ifdef FREECIV_JSON_CONNECTION
55454 field_addr.name = "id";
55455#endif /* FREECIV_JSON_CONNECTION */
55456 e = 0;
55457
55458 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55459
55460 if (e) {
55461 log_packet_detailed("'id' field error detected");
55462 }
55463 }
55464
55465 if (BV_ISSET(fields, 1)) {
55466 log_packet_detailed(" field 'root_req' has changed");
55467
55468#ifdef FREECIV_JSON_CONNECTION
55469 field_addr.name = "root_req";
55470#endif /* FREECIV_JSON_CONNECTION */
55471 e = 0;
55472
55473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55474
55475 if (e) {
55476 log_packet_detailed("'root_req' field error detected");
55477 }
55478 }
55479
55480 if (BV_ISSET(fields, 2)) {
55481 log_packet_detailed(" field 'research_reqs' has changed");
55482
55483#ifdef FREECIV_JSON_CONNECTION
55484 field_addr.name = "research_reqs";
55485#endif /* FREECIV_JSON_CONNECTION */
55486 e = 0;
55487
55488 {
55489 int i;
55490
55493
55494#ifdef FREECIV_JSON_CONNECTION
55495 /* Enter array. */
55496 field_addr.sub_location = plocation_elem_new(0);
55497#endif /* FREECIV_JSON_CONNECTION */
55498
55499 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55500#ifdef FREECIV_JSON_CONNECTION
55501 /* Next array element. */
55502 field_addr.sub_location->number = i;
55503#endif /* FREECIV_JSON_CONNECTION */
55504
55505 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55506 }
55507
55508#ifdef FREECIV_JSON_CONNECTION
55509 /* Exit array. */
55510 FC_FREE(field_addr.sub_location);
55511#endif /* FREECIV_JSON_CONNECTION */
55512 }
55513
55514 if (e) {
55515 log_packet_detailed("'research_reqs' field error detected");
55516 }
55517 }
55518
55519 if (BV_ISSET(fields, 3)) {
55520 log_packet_detailed(" field 'tclass' has changed");
55521
55522#ifdef FREECIV_JSON_CONNECTION
55523 field_addr.name = "tclass";
55524#endif /* FREECIV_JSON_CONNECTION */
55525 e = 0;
55526
55527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55528
55529 if (e) {
55530 log_packet_detailed("'tclass' field error detected");
55531 }
55532 }
55533
55534 /* field 4 is folded into the header */
55535
55536 if (BV_ISSET(fields, 5)) {
55537 log_packet_detailed(" field 'flags' has changed");
55538
55539#ifdef FREECIV_JSON_CONNECTION
55540 field_addr.name = "flags";
55541#endif /* FREECIV_JSON_CONNECTION */
55542 e = 0;
55543
55544 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55545
55546 if (e) {
55547 log_packet_detailed("'flags' field error detected");
55548 }
55549 }
55550
55551 if (BV_ISSET(fields, 6)) {
55552 log_packet_detailed(" field 'cost' has changed");
55553
55554#ifdef FREECIV_JSON_CONNECTION
55555 field_addr.name = "cost";
55556#endif /* FREECIV_JSON_CONNECTION */
55557 e = 0;
55558
55559 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55560
55561 if (e) {
55562 log_packet_detailed("'cost' field error detected");
55563 }
55564 }
55565
55566 if (BV_ISSET(fields, 7)) {
55567 log_packet_detailed(" field 'num_reqs' has changed");
55568
55569#ifdef FREECIV_JSON_CONNECTION
55570 field_addr.name = "num_reqs";
55571#endif /* FREECIV_JSON_CONNECTION */
55572 e = 0;
55573
55574 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55575
55576 if (e) {
55577 log_packet_detailed("'num_reqs' field error detected");
55578 }
55579 }
55580
55581 if (BV_ISSET(fields, 8)) {
55582 log_packet_detailed(" field 'name' has changed");
55583
55584#ifdef FREECIV_JSON_CONNECTION
55585 field_addr.name = "name";
55586#endif /* FREECIV_JSON_CONNECTION */
55587 e = 0;
55588
55589 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55590
55591 if (e) {
55592 log_packet_detailed("'name' field error detected");
55593 }
55594 }
55595
55596 if (BV_ISSET(fields, 9)) {
55597 log_packet_detailed(" field 'rule_name' has changed");
55598
55599#ifdef FREECIV_JSON_CONNECTION
55600 field_addr.name = "rule_name";
55601#endif /* FREECIV_JSON_CONNECTION */
55602 e = 0;
55603
55604 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55605
55606 if (e) {
55607 log_packet_detailed("'rule_name' field error detected");
55608 }
55609 }
55610
55611 if (BV_ISSET(fields, 10)) {
55612 log_packet_detailed(" field 'helptext' has changed");
55613
55614#ifdef FREECIV_JSON_CONNECTION
55615 field_addr.name = "helptext";
55616#endif /* FREECIV_JSON_CONNECTION */
55617 e = 0;
55618
55619 if (!real_packet->helptext) {
55620 /* Transmit null as empty */
55621 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55622 } else {
55623 int i;
55624
55626 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55627
55628#ifdef FREECIV_JSON_CONNECTION
55629 /* Enter array. */
55630 field_addr.sub_location = plocation_elem_new(0);
55631#endif /* FREECIV_JSON_CONNECTION */
55632
55633 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55634#ifdef FREECIV_JSON_CONNECTION
55635 /* Next array element. */
55636 field_addr.sub_location->number = i;
55637#endif /* FREECIV_JSON_CONNECTION */
55638
55639 {
55640 const char *pstr = strvec_get(real_packet->helptext, i);
55641
55642 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55643 }
55644 }
55645
55646#ifdef FREECIV_JSON_CONNECTION
55647 /* Exit array. */
55648 FC_FREE(field_addr.sub_location);
55649#endif /* FREECIV_JSON_CONNECTION */
55650 }
55651
55652 if (e) {
55653 log_packet_detailed("'helptext' field error detected");
55654 }
55655 }
55656
55657 if (BV_ISSET(fields, 11)) {
55658 log_packet_detailed(" field 'graphic_str' has changed");
55659
55660#ifdef FREECIV_JSON_CONNECTION
55661 field_addr.name = "graphic_str";
55662#endif /* FREECIV_JSON_CONNECTION */
55663 e = 0;
55664
55665 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55666
55667 if (e) {
55668 log_packet_detailed("'graphic_str' field error detected");
55669 }
55670 }
55671
55672 if (BV_ISSET(fields, 12)) {
55673 log_packet_detailed(" field 'graphic_alt' has changed");
55674
55675#ifdef FREECIV_JSON_CONNECTION
55676 field_addr.name = "graphic_alt";
55677#endif /* FREECIV_JSON_CONNECTION */
55678 e = 0;
55679
55680 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55681
55682 if (e) {
55683 log_packet_detailed("'graphic_alt' field error detected");
55684 }
55685 }
55686
55687 old->id = real_packet->id;
55688 old->root_req = real_packet->root_req;
55689 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55690 old->tclass = real_packet->tclass;
55691 old->removed = real_packet->removed;
55692 old->flags = real_packet->flags;
55693 old->cost = real_packet->cost;
55694 old->num_reqs = real_packet->num_reqs;
55695 sz_strlcpy(old->name, real_packet->name);
55696 sz_strlcpy(old->rule_name, real_packet->rule_name);
55697 if (real_packet->helptext) {
55698 strvec_copy(old->helptext, real_packet->helptext);
55699 } else {
55700 strvec_clear(old->helptext);
55701 }
55702 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55703 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55704
55705#else /* FREECIV_DELTA_PROTOCOL */
55706#ifdef FREECIV_JSON_CONNECTION
55707 field_addr.name = "id";
55708#endif /* FREECIV_JSON_CONNECTION */
55709 e = 0;
55710
55711 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55712
55713 if (e) {
55714 log_packet_detailed("'id' field error detected");
55715 }
55716
55717#ifdef FREECIV_JSON_CONNECTION
55718 field_addr.name = "root_req";
55719#endif /* FREECIV_JSON_CONNECTION */
55720 e = 0;
55721
55722 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55723
55724 if (e) {
55725 log_packet_detailed("'root_req' field error detected");
55726 }
55727
55728#ifdef FREECIV_JSON_CONNECTION
55729 field_addr.name = "research_reqs";
55730#endif /* FREECIV_JSON_CONNECTION */
55731 e = 0;
55732
55733 {
55734 int i;
55735
55738
55739#ifdef FREECIV_JSON_CONNECTION
55740 /* Enter array. */
55741 field_addr.sub_location = plocation_elem_new(0);
55742#endif /* FREECIV_JSON_CONNECTION */
55743
55744 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55745#ifdef FREECIV_JSON_CONNECTION
55746 /* Next array element. */
55747 field_addr.sub_location->number = i;
55748#endif /* FREECIV_JSON_CONNECTION */
55749
55750 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55751 }
55752
55753#ifdef FREECIV_JSON_CONNECTION
55754 /* Exit array. */
55755 FC_FREE(field_addr.sub_location);
55756#endif /* FREECIV_JSON_CONNECTION */
55757 }
55758
55759 if (e) {
55760 log_packet_detailed("'research_reqs' field error detected");
55761 }
55762
55763#ifdef FREECIV_JSON_CONNECTION
55764 field_addr.name = "tclass";
55765#endif /* FREECIV_JSON_CONNECTION */
55766 e = 0;
55767
55768 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55769
55770 if (e) {
55771 log_packet_detailed("'tclass' field error detected");
55772 }
55773
55774#ifdef FREECIV_JSON_CONNECTION
55775 field_addr.name = "removed";
55776#endif /* FREECIV_JSON_CONNECTION */
55777 e = 0;
55778
55779 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removed);
55780
55781 if (e) {
55782 log_packet_detailed("'removed' field error detected");
55783 }
55784
55785#ifdef FREECIV_JSON_CONNECTION
55786 field_addr.name = "flags";
55787#endif /* FREECIV_JSON_CONNECTION */
55788 e = 0;
55789
55790 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55791
55792 if (e) {
55793 log_packet_detailed("'flags' field error detected");
55794 }
55795
55796#ifdef FREECIV_JSON_CONNECTION
55797 field_addr.name = "cost";
55798#endif /* FREECIV_JSON_CONNECTION */
55799 e = 0;
55800
55801 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55802
55803 if (e) {
55804 log_packet_detailed("'cost' field error detected");
55805 }
55806
55807#ifdef FREECIV_JSON_CONNECTION
55808 field_addr.name = "num_reqs";
55809#endif /* FREECIV_JSON_CONNECTION */
55810 e = 0;
55811
55812 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55813
55814 if (e) {
55815 log_packet_detailed("'num_reqs' field error detected");
55816 }
55817
55818#ifdef FREECIV_JSON_CONNECTION
55819 field_addr.name = "name";
55820#endif /* FREECIV_JSON_CONNECTION */
55821 e = 0;
55822
55823 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55824
55825 if (e) {
55826 log_packet_detailed("'name' field error detected");
55827 }
55828
55829#ifdef FREECIV_JSON_CONNECTION
55830 field_addr.name = "rule_name";
55831#endif /* FREECIV_JSON_CONNECTION */
55832 e = 0;
55833
55834 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55835
55836 if (e) {
55837 log_packet_detailed("'rule_name' field error detected");
55838 }
55839
55840#ifdef FREECIV_JSON_CONNECTION
55841 field_addr.name = "helptext";
55842#endif /* FREECIV_JSON_CONNECTION */
55843 e = 0;
55844
55845 if (!real_packet->helptext) {
55846 /* Transmit null as empty */
55847 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55848 } else {
55849 int i;
55850
55852 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55853
55854#ifdef FREECIV_JSON_CONNECTION
55855 /* Enter array. */
55856 field_addr.sub_location = plocation_elem_new(0);
55857#endif /* FREECIV_JSON_CONNECTION */
55858
55859 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55860#ifdef FREECIV_JSON_CONNECTION
55861 /* Next array element. */
55862 field_addr.sub_location->number = i;
55863#endif /* FREECIV_JSON_CONNECTION */
55864
55865 {
55866 const char *pstr = strvec_get(real_packet->helptext, i);
55867
55868 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55869 }
55870 }
55871
55872#ifdef FREECIV_JSON_CONNECTION
55873 /* Exit array. */
55874 FC_FREE(field_addr.sub_location);
55875#endif /* FREECIV_JSON_CONNECTION */
55876 }
55877
55878 if (e) {
55879 log_packet_detailed("'helptext' field error detected");
55880 }
55881
55882#ifdef FREECIV_JSON_CONNECTION
55883 field_addr.name = "graphic_str";
55884#endif /* FREECIV_JSON_CONNECTION */
55885 e = 0;
55886
55887 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55888
55889 if (e) {
55890 log_packet_detailed("'graphic_str' field error detected");
55891 }
55892
55893#ifdef FREECIV_JSON_CONNECTION
55894 field_addr.name = "graphic_alt";
55895#endif /* FREECIV_JSON_CONNECTION */
55896 e = 0;
55897
55898 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55899
55900 if (e) {
55901 log_packet_detailed("'graphic_alt' field error detected");
55902 }
55903#endif /* FREECIV_DELTA_PROTOCOL */
55904
55906}
55907
55909{
55910 if (!pc->used) {
55911 log_error("WARNING: trying to send data to the closed connection %s",
55913 return -1;
55914 }
55915 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH].packet != nullptr, -1,
55916 "Handler for PACKET_RULESET_TECH not installed");
55917 return pc->phs.handlers->send[PACKET_RULESET_TECH].packet(pc, packet);
55918}
55919
55920void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
55921{
55922 conn_list_iterate(dest, pconn) {
55925}
55926
55928{
55929 memset(packet, 0, sizeof(*packet));
55930}
55931
55932#define free_packet_ruleset_tech_class(_packet) (void) 0
55933#define destroy_packet_ruleset_tech_class free
55934
55935#ifdef FREECIV_DELTA_PROTOCOL
55936#define hash_packet_ruleset_tech_class_100 hash_const
55937#define cmp_packet_ruleset_tech_class_100 cmp_const
55939#endif /* FREECIV_DELTA_PROTOCOL */
55940
55942{
55943#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_class(_packet)
55945
55946#ifdef FREECIV_JSON_CONNECTION
55947 struct plocation field_addr;
55948 {
55949 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55952 }
55953#endif /* FREECIV_JSON_CONNECTION */
55954
55955 log_packet_detailed("packet_ruleset_tech_class_100: got info about ()");
55956
55957#ifdef FREECIV_DELTA_PROTOCOL
55960 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_CLASS;
55961
55962 if (nullptr == *hash) {
55964 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
55965 }
55966
55967 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55968 *real_packet = *old;
55969 } else {
55970 /* packet is already initialized empty */
55971 log_packet_detailed(" no old info");
55972 }
55973
55974#ifdef FREECIV_JSON_CONNECTION
55975 field_addr.name = "fields";
55976#endif /* FREECIV_JSON_CONNECTION */
55977 DIO_BV_GET(&din, &field_addr, fields);
55978
55979 if (BV_ISSET(fields, 0)) {
55980 log_packet_detailed(" got field 'id'");
55981
55982#ifdef FREECIV_JSON_CONNECTION
55983 field_addr.name = "id";
55984#endif /* FREECIV_JSON_CONNECTION */
55985
55986 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55988 }
55989 }
55990
55991 if (BV_ISSET(fields, 1)) {
55992 log_packet_detailed(" got field 'name'");
55993
55994#ifdef FREECIV_JSON_CONNECTION
55995 field_addr.name = "name";
55996#endif /* FREECIV_JSON_CONNECTION */
55997
55998 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56000 }
56001 }
56002
56003 if (BV_ISSET(fields, 2)) {
56004 log_packet_detailed(" got field 'rule_name'");
56005
56006#ifdef FREECIV_JSON_CONNECTION
56007 field_addr.name = "rule_name";
56008#endif /* FREECIV_JSON_CONNECTION */
56009
56010 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56011 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56012 }
56013 }
56014
56015 if (BV_ISSET(fields, 3)) {
56016 log_packet_detailed(" got field 'cost_pct'");
56017
56018#ifdef FREECIV_JSON_CONNECTION
56019 field_addr.name = "cost_pct";
56020#endif /* FREECIV_JSON_CONNECTION */
56021
56022 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
56024 }
56025 }
56026
56027 if (nullptr == old) {
56028 old = fc_malloc(sizeof(*old));
56030 *old = *real_packet;
56032 } else {
56033 *old = *real_packet;
56034 }
56035
56036#else /* FREECIV_DELTA_PROTOCOL */
56037#ifdef FREECIV_JSON_CONNECTION
56038 field_addr.name = "id";
56039#endif /* FREECIV_JSON_CONNECTION */
56040
56041 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
56043 }
56044
56045#ifdef FREECIV_JSON_CONNECTION
56046 field_addr.name = "name";
56047#endif /* FREECIV_JSON_CONNECTION */
56048
56049 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56051 }
56052
56053#ifdef FREECIV_JSON_CONNECTION
56054 field_addr.name = "rule_name";
56055#endif /* FREECIV_JSON_CONNECTION */
56056
56057 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56058 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56059 }
56060
56061#ifdef FREECIV_JSON_CONNECTION
56062 field_addr.name = "cost_pct";
56063#endif /* FREECIV_JSON_CONNECTION */
56064
56065 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
56067 }
56068#endif /* FREECIV_DELTA_PROTOCOL */
56069
56071#undef FREE_PACKET_STRUCT
56072}
56073
56075{
56076 const struct packet_ruleset_tech_class *real_packet = packet;
56077 int e;
56079
56080 log_packet_detailed("packet_ruleset_tech_class_100: sending info about ()");
56081
56082#ifdef FREECIV_DELTA_PROTOCOL
56085 bool differ;
56086 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_CLASS;
56087
56088 if (nullptr == *hash) {
56090 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
56091 }
56092 BV_CLR_ALL(fields);
56093
56094 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56095 old = fc_malloc(sizeof(*old));
56096 /* temporary bitcopy just to insert correctly */
56097 *old = *real_packet;
56100 }
56101
56102 differ = (old->id != real_packet->id);
56103 if (differ) {
56104 BV_SET(fields, 0);
56105 }
56106
56107 differ = (strcmp(old->name, real_packet->name) != 0);
56108 if (differ) {
56109 BV_SET(fields, 1);
56110 }
56111
56112 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
56113 if (differ) {
56114 BV_SET(fields, 2);
56115 }
56116
56117 differ = (old->cost_pct != real_packet->cost_pct);
56118 if (differ) {
56119 BV_SET(fields, 3);
56120 }
56121#endif /* FREECIV_DELTA_PROTOCOL */
56122
56123#ifdef FREECIV_JSON_CONNECTION
56124 struct plocation field_addr;
56125 {
56126 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56129 }
56130#endif /* FREECIV_JSON_CONNECTION */
56131
56132#ifdef FREECIV_DELTA_PROTOCOL
56133#ifdef FREECIV_JSON_CONNECTION
56134 field_addr.name = "fields";
56135#endif /* FREECIV_JSON_CONNECTION */
56136 e = 0;
56137 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56138 if (e) {
56139 log_packet_detailed("fields bitvector error detected");
56140 }
56141
56142 if (BV_ISSET(fields, 0)) {
56143 log_packet_detailed(" field 'id' has changed");
56144
56145#ifdef FREECIV_JSON_CONNECTION
56146 field_addr.name = "id";
56147#endif /* FREECIV_JSON_CONNECTION */
56148 e = 0;
56149
56150 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56151
56152 if (e) {
56153 log_packet_detailed("'id' field error detected");
56154 }
56155 }
56156
56157 if (BV_ISSET(fields, 1)) {
56158 log_packet_detailed(" field 'name' has changed");
56159
56160#ifdef FREECIV_JSON_CONNECTION
56161 field_addr.name = "name";
56162#endif /* FREECIV_JSON_CONNECTION */
56163 e = 0;
56164
56165 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56166
56167 if (e) {
56168 log_packet_detailed("'name' field error detected");
56169 }
56170 }
56171
56172 if (BV_ISSET(fields, 2)) {
56173 log_packet_detailed(" field 'rule_name' has changed");
56174
56175#ifdef FREECIV_JSON_CONNECTION
56176 field_addr.name = "rule_name";
56177#endif /* FREECIV_JSON_CONNECTION */
56178 e = 0;
56179
56180 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56181
56182 if (e) {
56183 log_packet_detailed("'rule_name' field error detected");
56184 }
56185 }
56186
56187 if (BV_ISSET(fields, 3)) {
56188 log_packet_detailed(" field 'cost_pct' has changed");
56189
56190#ifdef FREECIV_JSON_CONNECTION
56191 field_addr.name = "cost_pct";
56192#endif /* FREECIV_JSON_CONNECTION */
56193 e = 0;
56194
56195 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56196
56197 if (e) {
56198 log_packet_detailed("'cost_pct' field error detected");
56199 }
56200 }
56201
56202 *old = *real_packet;
56203
56204#else /* FREECIV_DELTA_PROTOCOL */
56205#ifdef FREECIV_JSON_CONNECTION
56206 field_addr.name = "id";
56207#endif /* FREECIV_JSON_CONNECTION */
56208 e = 0;
56209
56210 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56211
56212 if (e) {
56213 log_packet_detailed("'id' field error detected");
56214 }
56215
56216#ifdef FREECIV_JSON_CONNECTION
56217 field_addr.name = "name";
56218#endif /* FREECIV_JSON_CONNECTION */
56219 e = 0;
56220
56221 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56222
56223 if (e) {
56224 log_packet_detailed("'name' field error detected");
56225 }
56226
56227#ifdef FREECIV_JSON_CONNECTION
56228 field_addr.name = "rule_name";
56229#endif /* FREECIV_JSON_CONNECTION */
56230 e = 0;
56231
56232 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56233
56234 if (e) {
56235 log_packet_detailed("'rule_name' field error detected");
56236 }
56237
56238#ifdef FREECIV_JSON_CONNECTION
56239 field_addr.name = "cost_pct";
56240#endif /* FREECIV_JSON_CONNECTION */
56241 e = 0;
56242
56243 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56244
56245 if (e) {
56246 log_packet_detailed("'cost_pct' field error detected");
56247 }
56248#endif /* FREECIV_DELTA_PROTOCOL */
56249
56251}
56252
56254{
56255 if (!pc->used) {
56256 log_error("WARNING: trying to send data to the closed connection %s",
56258 return -1;
56259 }
56260 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet != nullptr, -1,
56261 "Handler for PACKET_RULESET_TECH_CLASS not installed");
56262 return pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet(pc, packet);
56263}
56264
56266{
56267 conn_list_iterate(dest, pconn) {
56270}
56271
56273{
56274 memset(packet, 0, sizeof(*packet));
56275}
56276
56277#define free_packet_ruleset_tech_flag(_packet) (void) 0
56278#define destroy_packet_ruleset_tech_flag free
56279
56280#ifdef FREECIV_DELTA_PROTOCOL
56281#define hash_packet_ruleset_tech_flag_100 hash_const
56282#define cmp_packet_ruleset_tech_flag_100 cmp_const
56284#endif /* FREECIV_DELTA_PROTOCOL */
56285
56287{
56288#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_flag(_packet)
56290
56291#ifdef FREECIV_JSON_CONNECTION
56292 struct plocation field_addr;
56293 {
56294 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56297 }
56298#endif /* FREECIV_JSON_CONNECTION */
56299
56300 log_packet_detailed("packet_ruleset_tech_flag_100: got info about ()");
56301
56302#ifdef FREECIV_DELTA_PROTOCOL
56305 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_FLAG;
56306
56307 if (nullptr == *hash) {
56309 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56310 }
56311
56312 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56313 *real_packet = *old;
56314 } else {
56315 /* packet is already initialized empty */
56316 log_packet_detailed(" no old info");
56317 }
56318
56319#ifdef FREECIV_JSON_CONNECTION
56320 field_addr.name = "fields";
56321#endif /* FREECIV_JSON_CONNECTION */
56322 DIO_BV_GET(&din, &field_addr, fields);
56323
56324 if (BV_ISSET(fields, 0)) {
56325 log_packet_detailed(" got field 'id'");
56326
56327#ifdef FREECIV_JSON_CONNECTION
56328 field_addr.name = "id";
56329#endif /* FREECIV_JSON_CONNECTION */
56330
56331 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56333 }
56334 }
56335
56336 if (BV_ISSET(fields, 1)) {
56337 log_packet_detailed(" got field 'name'");
56338
56339#ifdef FREECIV_JSON_CONNECTION
56340 field_addr.name = "name";
56341#endif /* FREECIV_JSON_CONNECTION */
56342
56343 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56345 }
56346 }
56347
56348 if (BV_ISSET(fields, 2)) {
56349 log_packet_detailed(" got field 'helptxt'");
56350
56351#ifdef FREECIV_JSON_CONNECTION
56352 field_addr.name = "helptxt";
56353#endif /* FREECIV_JSON_CONNECTION */
56354
56355 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56357 }
56358 }
56359
56360 if (nullptr == old) {
56361 old = fc_malloc(sizeof(*old));
56363 *old = *real_packet;
56365 } else {
56366 *old = *real_packet;
56367 }
56368
56369#else /* FREECIV_DELTA_PROTOCOL */
56370#ifdef FREECIV_JSON_CONNECTION
56371 field_addr.name = "id";
56372#endif /* FREECIV_JSON_CONNECTION */
56373
56374 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56376 }
56377
56378#ifdef FREECIV_JSON_CONNECTION
56379 field_addr.name = "name";
56380#endif /* FREECIV_JSON_CONNECTION */
56381
56382 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56384 }
56385
56386#ifdef FREECIV_JSON_CONNECTION
56387 field_addr.name = "helptxt";
56388#endif /* FREECIV_JSON_CONNECTION */
56389
56390 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56392 }
56393#endif /* FREECIV_DELTA_PROTOCOL */
56394
56396#undef FREE_PACKET_STRUCT
56397}
56398
56400{
56401 const struct packet_ruleset_tech_flag *real_packet = packet;
56402 int e;
56404
56405 log_packet_detailed("packet_ruleset_tech_flag_100: sending info about ()");
56406
56407#ifdef FREECIV_DELTA_PROTOCOL
56410 bool differ;
56411 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_FLAG;
56412
56413 if (nullptr == *hash) {
56415 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56416 }
56417 BV_CLR_ALL(fields);
56418
56419 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56420 old = fc_malloc(sizeof(*old));
56421 /* temporary bitcopy just to insert correctly */
56422 *old = *real_packet;
56425 }
56426
56427 differ = (old->id != real_packet->id);
56428 if (differ) {
56429 BV_SET(fields, 0);
56430 }
56431
56432 differ = (strcmp(old->name, real_packet->name) != 0);
56433 if (differ) {
56434 BV_SET(fields, 1);
56435 }
56436
56437 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
56438 if (differ) {
56439 BV_SET(fields, 2);
56440 }
56441#endif /* FREECIV_DELTA_PROTOCOL */
56442
56443#ifdef FREECIV_JSON_CONNECTION
56444 struct plocation field_addr;
56445 {
56446 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56449 }
56450#endif /* FREECIV_JSON_CONNECTION */
56451
56452#ifdef FREECIV_DELTA_PROTOCOL
56453#ifdef FREECIV_JSON_CONNECTION
56454 field_addr.name = "fields";
56455#endif /* FREECIV_JSON_CONNECTION */
56456 e = 0;
56457 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56458 if (e) {
56459 log_packet_detailed("fields bitvector error detected");
56460 }
56461
56462 if (BV_ISSET(fields, 0)) {
56463 log_packet_detailed(" field 'id' has changed");
56464
56465#ifdef FREECIV_JSON_CONNECTION
56466 field_addr.name = "id";
56467#endif /* FREECIV_JSON_CONNECTION */
56468 e = 0;
56469
56470 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56471
56472 if (e) {
56473 log_packet_detailed("'id' field error detected");
56474 }
56475 }
56476
56477 if (BV_ISSET(fields, 1)) {
56478 log_packet_detailed(" field 'name' has changed");
56479
56480#ifdef FREECIV_JSON_CONNECTION
56481 field_addr.name = "name";
56482#endif /* FREECIV_JSON_CONNECTION */
56483 e = 0;
56484
56485 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56486
56487 if (e) {
56488 log_packet_detailed("'name' field error detected");
56489 }
56490 }
56491
56492 if (BV_ISSET(fields, 2)) {
56493 log_packet_detailed(" field 'helptxt' has changed");
56494
56495#ifdef FREECIV_JSON_CONNECTION
56496 field_addr.name = "helptxt";
56497#endif /* FREECIV_JSON_CONNECTION */
56498 e = 0;
56499
56500 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56501
56502 if (e) {
56503 log_packet_detailed("'helptxt' field error detected");
56504 }
56505 }
56506
56507 *old = *real_packet;
56508
56509#else /* FREECIV_DELTA_PROTOCOL */
56510#ifdef FREECIV_JSON_CONNECTION
56511 field_addr.name = "id";
56512#endif /* FREECIV_JSON_CONNECTION */
56513 e = 0;
56514
56515 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56516
56517 if (e) {
56518 log_packet_detailed("'id' field error detected");
56519 }
56520
56521#ifdef FREECIV_JSON_CONNECTION
56522 field_addr.name = "name";
56523#endif /* FREECIV_JSON_CONNECTION */
56524 e = 0;
56525
56526 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56527
56528 if (e) {
56529 log_packet_detailed("'name' field error detected");
56530 }
56531
56532#ifdef FREECIV_JSON_CONNECTION
56533 field_addr.name = "helptxt";
56534#endif /* FREECIV_JSON_CONNECTION */
56535 e = 0;
56536
56537 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56538
56539 if (e) {
56540 log_packet_detailed("'helptxt' field error detected");
56541 }
56542#endif /* FREECIV_DELTA_PROTOCOL */
56543
56545}
56546
56548{
56549 if (!pc->used) {
56550 log_error("WARNING: trying to send data to the closed connection %s",
56552 return -1;
56553 }
56554 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet != nullptr, -1,
56555 "Handler for PACKET_RULESET_TECH_FLAG not installed");
56556 return pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet(pc, packet);
56557}
56558
56560{
56561 conn_list_iterate(dest, pconn) {
56564}
56565
56567{
56568 memset(packet, 0, sizeof(*packet));
56569
56570 requirement_vector_init(&packet->reqs);
56571 packet->helptext = strvec_new();
56572}
56573
56575{
56576 if (packet->helptext) {
56577 strvec_destroy(packet->helptext);
56578 packet->helptext = nullptr;
56579 }
56580 requirement_vector_free(&packet->reqs);
56581}
56582
56583static inline void destroy_packet_ruleset_government(void *packet)
56584{
56586 free(packet);
56587}
56588
56589#ifdef FREECIV_DELTA_PROTOCOL
56590#define hash_packet_ruleset_government_100 hash_const
56591#define cmp_packet_ruleset_government_100 cmp_const
56593#endif /* FREECIV_DELTA_PROTOCOL */
56594
56596{
56597#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government(_packet)
56599
56600#ifdef FREECIV_JSON_CONNECTION
56601 struct plocation field_addr;
56602 {
56603 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56606 }
56607#endif /* FREECIV_JSON_CONNECTION */
56608
56609 log_packet_detailed("packet_ruleset_government_100: got info about ()");
56610
56611#ifdef FREECIV_DELTA_PROTOCOL
56614 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT;
56615
56616 if (nullptr == *hash) {
56618 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
56619 }
56620
56621 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56622 real_packet->id = old->id;
56623 requirement_vector_copy(&real_packet->reqs, &old->reqs);
56624 sz_strlcpy(real_packet->name, old->name);
56625 sz_strlcpy(real_packet->rule_name, old->rule_name);
56626 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
56627 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
56628 sz_strlcpy(real_packet->sound_str, old->sound_str);
56629 sz_strlcpy(real_packet->sound_alt, old->sound_alt);
56630 sz_strlcpy(real_packet->sound_alt2, old->sound_alt2);
56631 real_packet->flags = old->flags;
56632 if (old->helptext) {
56633 strvec_copy(real_packet->helptext, old->helptext);
56634 } else {
56635 strvec_clear(real_packet->helptext);
56636 }
56637 } else {
56638 /* packet is already initialized empty */
56639 log_packet_detailed(" no old info");
56640 }
56641
56642#ifdef FREECIV_JSON_CONNECTION
56643 field_addr.name = "fields";
56644#endif /* FREECIV_JSON_CONNECTION */
56645 DIO_BV_GET(&din, &field_addr, fields);
56646
56647 if (BV_ISSET(fields, 0)) {
56648 log_packet_detailed(" got field 'id'");
56649
56650#ifdef FREECIV_JSON_CONNECTION
56651 field_addr.name = "id";
56652#endif /* FREECIV_JSON_CONNECTION */
56653
56654 {
56655 int readin;
56656
56657 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56659 }
56660 real_packet->id = readin;
56661 }
56662 }
56663
56664 if (BV_ISSET(fields, 1)) {
56665 log_packet_detailed(" got field 'reqs'");
56666
56667#ifdef FREECIV_JSON_CONNECTION
56668 field_addr.name = "reqs";
56669#endif /* FREECIV_JSON_CONNECTION */
56670
56671 {
56672 int i;
56673
56674 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56676 }
56678
56679#ifdef FREECIV_JSON_CONNECTION
56680 /* Enter array. */
56681 field_addr.sub_location = plocation_elem_new(0);
56682#endif /* FREECIV_JSON_CONNECTION */
56683
56684 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56685#ifdef FREECIV_JSON_CONNECTION
56686 /* Next array element */
56687 field_addr.sub_location->number = i;
56688#endif /* FREECIV_JSON_CONNECTION */
56689
56690 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56692 }
56693 }
56694
56695#ifdef FREECIV_JSON_CONNECTION
56696 /* Exit array. */
56697 FC_FREE(field_addr.sub_location);
56698#endif /* FREECIV_JSON_CONNECTION */
56699 }
56700 }
56701
56702 if (BV_ISSET(fields, 2)) {
56703 log_packet_detailed(" got field 'name'");
56704
56705#ifdef FREECIV_JSON_CONNECTION
56706 field_addr.name = "name";
56707#endif /* FREECIV_JSON_CONNECTION */
56708
56709 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56711 }
56712 }
56713
56714 if (BV_ISSET(fields, 3)) {
56715 log_packet_detailed(" got field 'rule_name'");
56716
56717#ifdef FREECIV_JSON_CONNECTION
56718 field_addr.name = "rule_name";
56719#endif /* FREECIV_JSON_CONNECTION */
56720
56721 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56722 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56723 }
56724 }
56725
56726 if (BV_ISSET(fields, 4)) {
56727 log_packet_detailed(" got field 'graphic_str'");
56728
56729#ifdef FREECIV_JSON_CONNECTION
56730 field_addr.name = "graphic_str";
56731#endif /* FREECIV_JSON_CONNECTION */
56732
56733 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56734 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56735 }
56736 }
56737
56738 if (BV_ISSET(fields, 5)) {
56739 log_packet_detailed(" got field 'graphic_alt'");
56740
56741#ifdef FREECIV_JSON_CONNECTION
56742 field_addr.name = "graphic_alt";
56743#endif /* FREECIV_JSON_CONNECTION */
56744
56745 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56746 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56747 }
56748 }
56749
56750 if (BV_ISSET(fields, 6)) {
56751 log_packet_detailed(" got field 'sound_str'");
56752
56753#ifdef FREECIV_JSON_CONNECTION
56754 field_addr.name = "sound_str";
56755#endif /* FREECIV_JSON_CONNECTION */
56756
56757 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56758 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56759 }
56760 }
56761
56762 if (BV_ISSET(fields, 7)) {
56763 log_packet_detailed(" got field 'sound_alt'");
56764
56765#ifdef FREECIV_JSON_CONNECTION
56766 field_addr.name = "sound_alt";
56767#endif /* FREECIV_JSON_CONNECTION */
56768
56769 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56770 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56771 }
56772 }
56773
56774 if (BV_ISSET(fields, 8)) {
56775 log_packet_detailed(" got field 'sound_alt2'");
56776
56777#ifdef FREECIV_JSON_CONNECTION
56778 field_addr.name = "sound_alt2";
56779#endif /* FREECIV_JSON_CONNECTION */
56780
56781 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56782 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56783 }
56784 }
56785
56786 if (BV_ISSET(fields, 9)) {
56787 log_packet_detailed(" got field 'flags'");
56788
56789#ifdef FREECIV_JSON_CONNECTION
56790 field_addr.name = "flags";
56791#endif /* FREECIV_JSON_CONNECTION */
56792
56793 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
56795 }
56796 }
56797
56798 if (BV_ISSET(fields, 10)) {
56799 log_packet_detailed(" got field 'helptext'");
56800
56801#ifdef FREECIV_JSON_CONNECTION
56802 field_addr.name = "helptext";
56803#endif /* FREECIV_JSON_CONNECTION */
56804
56805 {
56806 int i;
56807
56808 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56810 }
56811 strvec_reserve(real_packet->helptext, i);
56812
56813#ifdef FREECIV_JSON_CONNECTION
56814 /* Enter array. */
56815 field_addr.sub_location = plocation_elem_new(0);
56816#endif /* FREECIV_JSON_CONNECTION */
56817
56818 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
56819#ifdef FREECIV_JSON_CONNECTION
56820 /* Next array element */
56821 field_addr.sub_location->number = i;
56822#endif /* FREECIV_JSON_CONNECTION */
56823
56824 {
56825 char readin[MAX_LEN_PACKET];
56826
56827 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
56828 || !strvec_set(real_packet->helptext, i, readin)) {
56830 }
56831 }
56832 }
56833
56834#ifdef FREECIV_JSON_CONNECTION
56835 /* Exit array. */
56836 FC_FREE(field_addr.sub_location);
56837#endif /* FREECIV_JSON_CONNECTION */
56838 }
56839 }
56840
56841 if (nullptr == old) {
56842 old = fc_malloc(sizeof(*old));
56844 old->id = real_packet->id;
56845 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56846 sz_strlcpy(old->name, real_packet->name);
56847 sz_strlcpy(old->rule_name, real_packet->rule_name);
56848 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56849 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56850 sz_strlcpy(old->sound_str, real_packet->sound_str);
56851 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56852 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56853 old->flags = real_packet->flags;
56854 if (real_packet->helptext) {
56855 strvec_copy(old->helptext, real_packet->helptext);
56856 } else {
56857 strvec_clear(old->helptext);
56858 }
56860 } else {
56861 old->id = real_packet->id;
56862 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56863 sz_strlcpy(old->name, real_packet->name);
56864 sz_strlcpy(old->rule_name, real_packet->rule_name);
56865 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56866 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56867 sz_strlcpy(old->sound_str, real_packet->sound_str);
56868 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56869 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56870 old->flags = real_packet->flags;
56871 if (real_packet->helptext) {
56872 strvec_copy(old->helptext, real_packet->helptext);
56873 } else {
56874 strvec_clear(old->helptext);
56875 }
56876 }
56877
56878#else /* FREECIV_DELTA_PROTOCOL */
56879#ifdef FREECIV_JSON_CONNECTION
56880 field_addr.name = "id";
56881#endif /* FREECIV_JSON_CONNECTION */
56882
56883 {
56884 int readin;
56885
56886 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56888 }
56889 real_packet->id = readin;
56890 }
56891
56892#ifdef FREECIV_JSON_CONNECTION
56893 field_addr.name = "reqs";
56894#endif /* FREECIV_JSON_CONNECTION */
56895
56896 {
56897 int i;
56898
56899 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56901 }
56903
56904#ifdef FREECIV_JSON_CONNECTION
56905 /* Enter array. */
56906 field_addr.sub_location = plocation_elem_new(0);
56907#endif /* FREECIV_JSON_CONNECTION */
56908
56909 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56910#ifdef FREECIV_JSON_CONNECTION
56911 /* Next array element */
56912 field_addr.sub_location->number = i;
56913#endif /* FREECIV_JSON_CONNECTION */
56914
56915 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56917 }
56918 }
56919
56920#ifdef FREECIV_JSON_CONNECTION
56921 /* Exit array. */
56922 FC_FREE(field_addr.sub_location);
56923#endif /* FREECIV_JSON_CONNECTION */
56924 }
56925
56926#ifdef FREECIV_JSON_CONNECTION
56927 field_addr.name = "name";
56928#endif /* FREECIV_JSON_CONNECTION */
56929
56930 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56932 }
56933
56934#ifdef FREECIV_JSON_CONNECTION
56935 field_addr.name = "rule_name";
56936#endif /* FREECIV_JSON_CONNECTION */
56937
56938 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56939 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56940 }
56941
56942#ifdef FREECIV_JSON_CONNECTION
56943 field_addr.name = "graphic_str";
56944#endif /* FREECIV_JSON_CONNECTION */
56945
56946 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56947 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56948 }
56949
56950#ifdef FREECIV_JSON_CONNECTION
56951 field_addr.name = "graphic_alt";
56952#endif /* FREECIV_JSON_CONNECTION */
56953
56954 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56955 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56956 }
56957
56958#ifdef FREECIV_JSON_CONNECTION
56959 field_addr.name = "sound_str";
56960#endif /* FREECIV_JSON_CONNECTION */
56961
56962 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56963 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56964 }
56965
56966#ifdef FREECIV_JSON_CONNECTION
56967 field_addr.name = "sound_alt";
56968#endif /* FREECIV_JSON_CONNECTION */
56969
56970 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56971 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56972 }
56973
56974#ifdef FREECIV_JSON_CONNECTION
56975 field_addr.name = "sound_alt2";
56976#endif /* FREECIV_JSON_CONNECTION */
56977
56978 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56979 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56980 }
56981
56982#ifdef FREECIV_JSON_CONNECTION
56983 field_addr.name = "flags";
56984#endif /* FREECIV_JSON_CONNECTION */
56985
56986 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
56988 }
56989
56990#ifdef FREECIV_JSON_CONNECTION
56991 field_addr.name = "helptext";
56992#endif /* FREECIV_JSON_CONNECTION */
56993
56994 {
56995 int i;
56996
56997 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56999 }
57000 strvec_reserve(real_packet->helptext, i);
57001
57002#ifdef FREECIV_JSON_CONNECTION
57003 /* Enter array. */
57004 field_addr.sub_location = plocation_elem_new(0);
57005#endif /* FREECIV_JSON_CONNECTION */
57006
57007 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57008#ifdef FREECIV_JSON_CONNECTION
57009 /* Next array element */
57010 field_addr.sub_location->number = i;
57011#endif /* FREECIV_JSON_CONNECTION */
57012
57013 {
57014 char readin[MAX_LEN_PACKET];
57015
57016 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
57017 || !strvec_set(real_packet->helptext, i, readin)) {
57019 }
57020 }
57021 }
57022
57023#ifdef FREECIV_JSON_CONNECTION
57024 /* Exit array. */
57025 FC_FREE(field_addr.sub_location);
57026#endif /* FREECIV_JSON_CONNECTION */
57027 }
57028#endif /* FREECIV_DELTA_PROTOCOL */
57029
57031#undef FREE_PACKET_STRUCT
57032}
57033
57035{
57036 const struct packet_ruleset_government *real_packet = packet;
57037 int e;
57039
57040 log_packet_detailed("packet_ruleset_government_100: sending info about ()");
57041
57042#ifdef FREECIV_DELTA_PROTOCOL
57045 bool differ;
57046 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOVERNMENT;
57047
57048 if (nullptr == *hash) {
57050 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
57051 }
57052 BV_CLR_ALL(fields);
57053
57054 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57055 old = fc_malloc(sizeof(*old));
57056 /* temporary bitcopy just to insert correctly */
57057 *old = *real_packet;
57060 }
57061
57062 differ = (old->id != real_packet->id);
57063 if (differ) {
57064 BV_SET(fields, 0);
57065 }
57066
57068 if (!differ) {
57069 int i;
57070
57071 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
57072 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
57073 if (differ) {
57074 break;
57075 }
57076 }
57077 }
57078 if (differ) {
57079 BV_SET(fields, 1);
57080 }
57081
57082 differ = (strcmp(old->name, real_packet->name) != 0);
57083 if (differ) {
57084 BV_SET(fields, 2);
57085 }
57086
57087 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
57088 if (differ) {
57089 BV_SET(fields, 3);
57090 }
57091
57092 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
57093 if (differ) {
57094 BV_SET(fields, 4);
57095 }
57096
57097 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
57098 if (differ) {
57099 BV_SET(fields, 5);
57100 }
57101
57102 differ = (strcmp(old->sound_str, real_packet->sound_str) != 0);
57103 if (differ) {
57104 BV_SET(fields, 6);
57105 }
57106
57107 differ = (strcmp(old->sound_alt, real_packet->sound_alt) != 0);
57108 if (differ) {
57109 BV_SET(fields, 7);
57110 }
57111
57112 differ = (strcmp(old->sound_alt2, real_packet->sound_alt2) != 0);
57113 if (differ) {
57114 BV_SET(fields, 8);
57115 }
57116
57117 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
57118 if (differ) {
57119 BV_SET(fields, 9);
57120 }
57121
57122 if (real_packet->helptext) {
57123 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
57124 } else {
57125 differ = (strvec_size(old->helptext) > 0);
57126 }
57127 if (differ) {
57128 BV_SET(fields, 10);
57129 }
57130#endif /* FREECIV_DELTA_PROTOCOL */
57131
57132#ifdef FREECIV_JSON_CONNECTION
57133 struct plocation field_addr;
57134 {
57135 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57138 }
57139#endif /* FREECIV_JSON_CONNECTION */
57140
57141#ifdef FREECIV_DELTA_PROTOCOL
57142#ifdef FREECIV_JSON_CONNECTION
57143 field_addr.name = "fields";
57144#endif /* FREECIV_JSON_CONNECTION */
57145 e = 0;
57146 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57147 if (e) {
57148 log_packet_detailed("fields bitvector error detected");
57149 }
57150
57151 if (BV_ISSET(fields, 0)) {
57152 log_packet_detailed(" field 'id' has changed");
57153
57154#ifdef FREECIV_JSON_CONNECTION
57155 field_addr.name = "id";
57156#endif /* FREECIV_JSON_CONNECTION */
57157 e = 0;
57158
57159 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57160
57161 if (e) {
57162 log_packet_detailed("'id' field error detected");
57163 }
57164 }
57165
57166 if (BV_ISSET(fields, 1)) {
57167 log_packet_detailed(" field 'reqs' has changed");
57168
57169#ifdef FREECIV_JSON_CONNECTION
57170 field_addr.name = "reqs";
57171#endif /* FREECIV_JSON_CONNECTION */
57172 e = 0;
57173
57174 {
57175 int i;
57176
57179
57180#ifdef FREECIV_JSON_CONNECTION
57181 /* Enter array. */
57182 field_addr.sub_location = plocation_elem_new(0);
57183#endif /* FREECIV_JSON_CONNECTION */
57184
57185 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57186#ifdef FREECIV_JSON_CONNECTION
57187 /* Next array element. */
57188 field_addr.sub_location->number = i;
57189#endif /* FREECIV_JSON_CONNECTION */
57190
57191 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57192 }
57193
57194#ifdef FREECIV_JSON_CONNECTION
57195 /* Exit array. */
57196 FC_FREE(field_addr.sub_location);
57197#endif /* FREECIV_JSON_CONNECTION */
57198 }
57199
57200 if (e) {
57201 log_packet_detailed("'reqs' field error detected");
57202 }
57203 }
57204
57205 if (BV_ISSET(fields, 2)) {
57206 log_packet_detailed(" field 'name' has changed");
57207
57208#ifdef FREECIV_JSON_CONNECTION
57209 field_addr.name = "name";
57210#endif /* FREECIV_JSON_CONNECTION */
57211 e = 0;
57212
57213 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57214
57215 if (e) {
57216 log_packet_detailed("'name' field error detected");
57217 }
57218 }
57219
57220 if (BV_ISSET(fields, 3)) {
57221 log_packet_detailed(" field 'rule_name' has changed");
57222
57223#ifdef FREECIV_JSON_CONNECTION
57224 field_addr.name = "rule_name";
57225#endif /* FREECIV_JSON_CONNECTION */
57226 e = 0;
57227
57228 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57229
57230 if (e) {
57231 log_packet_detailed("'rule_name' field error detected");
57232 }
57233 }
57234
57235 if (BV_ISSET(fields, 4)) {
57236 log_packet_detailed(" field 'graphic_str' has changed");
57237
57238#ifdef FREECIV_JSON_CONNECTION
57239 field_addr.name = "graphic_str";
57240#endif /* FREECIV_JSON_CONNECTION */
57241 e = 0;
57242
57243 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57244
57245 if (e) {
57246 log_packet_detailed("'graphic_str' field error detected");
57247 }
57248 }
57249
57250 if (BV_ISSET(fields, 5)) {
57251 log_packet_detailed(" field 'graphic_alt' has changed");
57252
57253#ifdef FREECIV_JSON_CONNECTION
57254 field_addr.name = "graphic_alt";
57255#endif /* FREECIV_JSON_CONNECTION */
57256 e = 0;
57257
57258 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57259
57260 if (e) {
57261 log_packet_detailed("'graphic_alt' field error detected");
57262 }
57263 }
57264
57265 if (BV_ISSET(fields, 6)) {
57266 log_packet_detailed(" field 'sound_str' has changed");
57267
57268#ifdef FREECIV_JSON_CONNECTION
57269 field_addr.name = "sound_str";
57270#endif /* FREECIV_JSON_CONNECTION */
57271 e = 0;
57272
57273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57274
57275 if (e) {
57276 log_packet_detailed("'sound_str' field error detected");
57277 }
57278 }
57279
57280 if (BV_ISSET(fields, 7)) {
57281 log_packet_detailed(" field 'sound_alt' has changed");
57282
57283#ifdef FREECIV_JSON_CONNECTION
57284 field_addr.name = "sound_alt";
57285#endif /* FREECIV_JSON_CONNECTION */
57286 e = 0;
57287
57288 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57289
57290 if (e) {
57291 log_packet_detailed("'sound_alt' field error detected");
57292 }
57293 }
57294
57295 if (BV_ISSET(fields, 8)) {
57296 log_packet_detailed(" field 'sound_alt2' has changed");
57297
57298#ifdef FREECIV_JSON_CONNECTION
57299 field_addr.name = "sound_alt2";
57300#endif /* FREECIV_JSON_CONNECTION */
57301 e = 0;
57302
57303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57304
57305 if (e) {
57306 log_packet_detailed("'sound_alt2' field error detected");
57307 }
57308 }
57309
57310 if (BV_ISSET(fields, 9)) {
57311 log_packet_detailed(" field 'flags' has changed");
57312
57313#ifdef FREECIV_JSON_CONNECTION
57314 field_addr.name = "flags";
57315#endif /* FREECIV_JSON_CONNECTION */
57316 e = 0;
57317
57318 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
57319
57320 if (e) {
57321 log_packet_detailed("'flags' field error detected");
57322 }
57323 }
57324
57325 if (BV_ISSET(fields, 10)) {
57326 log_packet_detailed(" field 'helptext' has changed");
57327
57328#ifdef FREECIV_JSON_CONNECTION
57329 field_addr.name = "helptext";
57330#endif /* FREECIV_JSON_CONNECTION */
57331 e = 0;
57332
57333 if (!real_packet->helptext) {
57334 /* Transmit null as empty */
57335 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57336 } else {
57337 int i;
57338
57340 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57341
57342#ifdef FREECIV_JSON_CONNECTION
57343 /* Enter array. */
57344 field_addr.sub_location = plocation_elem_new(0);
57345#endif /* FREECIV_JSON_CONNECTION */
57346
57347 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57348#ifdef FREECIV_JSON_CONNECTION
57349 /* Next array element. */
57350 field_addr.sub_location->number = i;
57351#endif /* FREECIV_JSON_CONNECTION */
57352
57353 {
57354 const char *pstr = strvec_get(real_packet->helptext, i);
57355
57356 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57357 }
57358 }
57359
57360#ifdef FREECIV_JSON_CONNECTION
57361 /* Exit array. */
57362 FC_FREE(field_addr.sub_location);
57363#endif /* FREECIV_JSON_CONNECTION */
57364 }
57365
57366 if (e) {
57367 log_packet_detailed("'helptext' field error detected");
57368 }
57369 }
57370
57371 old->id = real_packet->id;
57372 requirement_vector_copy(&old->reqs, &real_packet->reqs);
57373 sz_strlcpy(old->name, real_packet->name);
57374 sz_strlcpy(old->rule_name, real_packet->rule_name);
57375 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
57376 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
57377 sz_strlcpy(old->sound_str, real_packet->sound_str);
57378 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
57379 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
57380 old->flags = real_packet->flags;
57381 if (real_packet->helptext) {
57382 strvec_copy(old->helptext, real_packet->helptext);
57383 } else {
57384 strvec_clear(old->helptext);
57385 }
57386
57387#else /* FREECIV_DELTA_PROTOCOL */
57388#ifdef FREECIV_JSON_CONNECTION
57389 field_addr.name = "id";
57390#endif /* FREECIV_JSON_CONNECTION */
57391 e = 0;
57392
57393 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57394
57395 if (e) {
57396 log_packet_detailed("'id' field error detected");
57397 }
57398
57399#ifdef FREECIV_JSON_CONNECTION
57400 field_addr.name = "reqs";
57401#endif /* FREECIV_JSON_CONNECTION */
57402 e = 0;
57403
57404 {
57405 int i;
57406
57409
57410#ifdef FREECIV_JSON_CONNECTION
57411 /* Enter array. */
57412 field_addr.sub_location = plocation_elem_new(0);
57413#endif /* FREECIV_JSON_CONNECTION */
57414
57415 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57416#ifdef FREECIV_JSON_CONNECTION
57417 /* Next array element. */
57418 field_addr.sub_location->number = i;
57419#endif /* FREECIV_JSON_CONNECTION */
57420
57421 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57422 }
57423
57424#ifdef FREECIV_JSON_CONNECTION
57425 /* Exit array. */
57426 FC_FREE(field_addr.sub_location);
57427#endif /* FREECIV_JSON_CONNECTION */
57428 }
57429
57430 if (e) {
57431 log_packet_detailed("'reqs' field error detected");
57432 }
57433
57434#ifdef FREECIV_JSON_CONNECTION
57435 field_addr.name = "name";
57436#endif /* FREECIV_JSON_CONNECTION */
57437 e = 0;
57438
57439 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57440
57441 if (e) {
57442 log_packet_detailed("'name' field error detected");
57443 }
57444
57445#ifdef FREECIV_JSON_CONNECTION
57446 field_addr.name = "rule_name";
57447#endif /* FREECIV_JSON_CONNECTION */
57448 e = 0;
57449
57450 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57451
57452 if (e) {
57453 log_packet_detailed("'rule_name' field error detected");
57454 }
57455
57456#ifdef FREECIV_JSON_CONNECTION
57457 field_addr.name = "graphic_str";
57458#endif /* FREECIV_JSON_CONNECTION */
57459 e = 0;
57460
57461 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57462
57463 if (e) {
57464 log_packet_detailed("'graphic_str' field error detected");
57465 }
57466
57467#ifdef FREECIV_JSON_CONNECTION
57468 field_addr.name = "graphic_alt";
57469#endif /* FREECIV_JSON_CONNECTION */
57470 e = 0;
57471
57472 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57473
57474 if (e) {
57475 log_packet_detailed("'graphic_alt' field error detected");
57476 }
57477
57478#ifdef FREECIV_JSON_CONNECTION
57479 field_addr.name = "sound_str";
57480#endif /* FREECIV_JSON_CONNECTION */
57481 e = 0;
57482
57483 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57484
57485 if (e) {
57486 log_packet_detailed("'sound_str' field error detected");
57487 }
57488
57489#ifdef FREECIV_JSON_CONNECTION
57490 field_addr.name = "sound_alt";
57491#endif /* FREECIV_JSON_CONNECTION */
57492 e = 0;
57493
57494 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57495
57496 if (e) {
57497 log_packet_detailed("'sound_alt' field error detected");
57498 }
57499
57500#ifdef FREECIV_JSON_CONNECTION
57501 field_addr.name = "sound_alt2";
57502#endif /* FREECIV_JSON_CONNECTION */
57503 e = 0;
57504
57505 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57506
57507 if (e) {
57508 log_packet_detailed("'sound_alt2' field error detected");
57509 }
57510
57511#ifdef FREECIV_JSON_CONNECTION
57512 field_addr.name = "flags";
57513#endif /* FREECIV_JSON_CONNECTION */
57514 e = 0;
57515
57516 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
57517
57518 if (e) {
57519 log_packet_detailed("'flags' field error detected");
57520 }
57521
57522#ifdef FREECIV_JSON_CONNECTION
57523 field_addr.name = "helptext";
57524#endif /* FREECIV_JSON_CONNECTION */
57525 e = 0;
57526
57527 if (!real_packet->helptext) {
57528 /* Transmit null as empty */
57529 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57530 } else {
57531 int i;
57532
57534 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57535
57536#ifdef FREECIV_JSON_CONNECTION
57537 /* Enter array. */
57538 field_addr.sub_location = plocation_elem_new(0);
57539#endif /* FREECIV_JSON_CONNECTION */
57540
57541 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57542#ifdef FREECIV_JSON_CONNECTION
57543 /* Next array element. */
57544 field_addr.sub_location->number = i;
57545#endif /* FREECIV_JSON_CONNECTION */
57546
57547 {
57548 const char *pstr = strvec_get(real_packet->helptext, i);
57549
57550 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57551 }
57552 }
57553
57554#ifdef FREECIV_JSON_CONNECTION
57555 /* Exit array. */
57556 FC_FREE(field_addr.sub_location);
57557#endif /* FREECIV_JSON_CONNECTION */
57558 }
57559
57560 if (e) {
57561 log_packet_detailed("'helptext' field error detected");
57562 }
57563#endif /* FREECIV_DELTA_PROTOCOL */
57564
57566}
57567
57569{
57570 if (!pc->used) {
57571 log_error("WARNING: trying to send data to the closed connection %s",
57573 return -1;
57574 }
57575 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet != nullptr, -1,
57576 "Handler for PACKET_RULESET_GOVERNMENT not installed");
57577 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet(pc, packet);
57578}
57579
57581{
57582 conn_list_iterate(dest, pconn) {
57585}
57586
57588{
57589 memset(packet, 0, sizeof(*packet));
57590}
57591
57592#define free_packet_ruleset_gov_flag(_packet) (void) 0
57593#define destroy_packet_ruleset_gov_flag free
57594
57595#ifdef FREECIV_DELTA_PROTOCOL
57596#define hash_packet_ruleset_gov_flag_100 hash_const
57597#define cmp_packet_ruleset_gov_flag_100 cmp_const
57599#endif /* FREECIV_DELTA_PROTOCOL */
57600
57602{
57603#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_gov_flag(_packet)
57605
57606#ifdef FREECIV_JSON_CONNECTION
57607 struct plocation field_addr;
57608 {
57609 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57612 }
57613#endif /* FREECIV_JSON_CONNECTION */
57614
57615 log_packet_detailed("packet_ruleset_gov_flag_100: got info about ()");
57616
57617#ifdef FREECIV_DELTA_PROTOCOL
57620 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOV_FLAG;
57621
57622 if (nullptr == *hash) {
57624 nullptr, nullptr, nullptr, destroy_packet_ruleset_gov_flag);
57625 }
57626
57627 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57628 *real_packet = *old;
57629 } else {
57630 /* packet is already initialized empty */
57631 log_packet_detailed(" no old info");
57632 }
57633
57634#ifdef FREECIV_JSON_CONNECTION
57635 field_addr.name = "fields";
57636#endif /* FREECIV_JSON_CONNECTION */
57637 DIO_BV_GET(&din, &field_addr, fields);
57638
57639 if (BV_ISSET(fields, 0)) {
57640 log_packet_detailed(" got field 'id'");
57641
57642#ifdef FREECIV_JSON_CONNECTION
57643 field_addr.name = "id";
57644#endif /* FREECIV_JSON_CONNECTION */
57645
57646 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
57648 }
57649 }
57650
57651 if (BV_ISSET(fields, 1)) {
57652 log_packet_detailed(" got field 'name'");
57653
57654#ifdef FREECIV_JSON_CONNECTION
57655 field_addr.name = "name";
57656#endif /* FREECIV_JSON_CONNECTION */
57657
57658 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
57660 }
57661 }
57662
57663 if (BV_ISSET(fields, 2)) {
57664 log_packet_detailed(" got field 'helptxt'");
57665
57666#ifdef FREECIV_JSON_CONNECTION
57667 field_addr.name = "helptxt";
57668#endif /* FREECIV_JSON_CONNECTION */
57669
57670 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
57672 }
57673 }
57674
57675 if (nullptr == old) {
57676 old = fc_malloc(sizeof(*old));
57678 *old = *real_packet;
57680 } else {
57681 *old = *real_packet;
57682 }
57683
57684#else /* FREECIV_DELTA_PROTOCOL */
57685#ifdef FREECIV_JSON_CONNECTION
57686 field_addr.name = "id";
57687#endif /* FREECIV_JSON_CONNECTION */
57688
57689 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
57691 }
57692
57693#ifdef FREECIV_JSON_CONNECTION
57694 field_addr.name = "name";
57695#endif /* FREECIV_JSON_CONNECTION */
57696
57697 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
57699 }
57700
57701#ifdef FREECIV_JSON_CONNECTION
57702 field_addr.name = "helptxt";
57703#endif /* FREECIV_JSON_CONNECTION */
57704
57705 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
57707 }
57708#endif /* FREECIV_DELTA_PROTOCOL */
57709
57711#undef FREE_PACKET_STRUCT
57712}
57713
57715{
57716 const struct packet_ruleset_gov_flag *real_packet = packet;
57717 int e;
57719
57720 log_packet_detailed("packet_ruleset_gov_flag_100: sending info about ()");
57721
57722#ifdef FREECIV_DELTA_PROTOCOL
57725 bool differ;
57726 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOV_FLAG;
57727
57728 if (nullptr == *hash) {
57730 nullptr, nullptr, nullptr, destroy_packet_ruleset_gov_flag);
57731 }
57732 BV_CLR_ALL(fields);
57733
57734 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57735 old = fc_malloc(sizeof(*old));
57736 /* temporary bitcopy just to insert correctly */
57737 *old = *real_packet;
57740 }
57741
57742 differ = (old->id != real_packet->id);
57743 if (differ) {
57744 BV_SET(fields, 0);
57745 }
57746
57747 differ = (strcmp(old->name, real_packet->name) != 0);
57748 if (differ) {
57749 BV_SET(fields, 1);
57750 }
57751
57752 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
57753 if (differ) {
57754 BV_SET(fields, 2);
57755 }
57756#endif /* FREECIV_DELTA_PROTOCOL */
57757
57758#ifdef FREECIV_JSON_CONNECTION
57759 struct plocation field_addr;
57760 {
57761 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57764 }
57765#endif /* FREECIV_JSON_CONNECTION */
57766
57767#ifdef FREECIV_DELTA_PROTOCOL
57768#ifdef FREECIV_JSON_CONNECTION
57769 field_addr.name = "fields";
57770#endif /* FREECIV_JSON_CONNECTION */
57771 e = 0;
57772 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57773 if (e) {
57774 log_packet_detailed("fields bitvector error detected");
57775 }
57776
57777 if (BV_ISSET(fields, 0)) {
57778 log_packet_detailed(" field 'id' has changed");
57779
57780#ifdef FREECIV_JSON_CONNECTION
57781 field_addr.name = "id";
57782#endif /* FREECIV_JSON_CONNECTION */
57783 e = 0;
57784
57785 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
57786
57787 if (e) {
57788 log_packet_detailed("'id' field error detected");
57789 }
57790 }
57791
57792 if (BV_ISSET(fields, 1)) {
57793 log_packet_detailed(" field 'name' has changed");
57794
57795#ifdef FREECIV_JSON_CONNECTION
57796 field_addr.name = "name";
57797#endif /* FREECIV_JSON_CONNECTION */
57798 e = 0;
57799
57800 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57801
57802 if (e) {
57803 log_packet_detailed("'name' field error detected");
57804 }
57805 }
57806
57807 if (BV_ISSET(fields, 2)) {
57808 log_packet_detailed(" field 'helptxt' has changed");
57809
57810#ifdef FREECIV_JSON_CONNECTION
57811 field_addr.name = "helptxt";
57812#endif /* FREECIV_JSON_CONNECTION */
57813 e = 0;
57814
57815 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
57816
57817 if (e) {
57818 log_packet_detailed("'helptxt' field error detected");
57819 }
57820 }
57821
57822 *old = *real_packet;
57823
57824#else /* FREECIV_DELTA_PROTOCOL */
57825#ifdef FREECIV_JSON_CONNECTION
57826 field_addr.name = "id";
57827#endif /* FREECIV_JSON_CONNECTION */
57828 e = 0;
57829
57830 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
57831
57832 if (e) {
57833 log_packet_detailed("'id' field error detected");
57834 }
57835
57836#ifdef FREECIV_JSON_CONNECTION
57837 field_addr.name = "name";
57838#endif /* FREECIV_JSON_CONNECTION */
57839 e = 0;
57840
57841 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57842
57843 if (e) {
57844 log_packet_detailed("'name' field error detected");
57845 }
57846
57847#ifdef FREECIV_JSON_CONNECTION
57848 field_addr.name = "helptxt";
57849#endif /* FREECIV_JSON_CONNECTION */
57850 e = 0;
57851
57852 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
57853
57854 if (e) {
57855 log_packet_detailed("'helptxt' field error detected");
57856 }
57857#endif /* FREECIV_DELTA_PROTOCOL */
57858
57860}
57861
57863{
57864 if (!pc->used) {
57865 log_error("WARNING: trying to send data to the closed connection %s",
57867 return -1;
57868 }
57869 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOV_FLAG].packet != nullptr, -1,
57870 "Handler for PACKET_RULESET_GOV_FLAG not installed");
57871 return pc->phs.handlers->send[PACKET_RULESET_GOV_FLAG].packet(pc, packet);
57872}
57873
57875{
57876 conn_list_iterate(dest, pconn) {
57879}
57880
57882{
57883 memset(packet, 0, sizeof(*packet));
57884}
57885
57886#define free_packet_ruleset_terrain_control(_packet) (void) 0
57887#define destroy_packet_ruleset_terrain_control free
57888
57889#ifdef FREECIV_DELTA_PROTOCOL
57890#define hash_packet_ruleset_terrain_control_100 hash_const
57891#define cmp_packet_ruleset_terrain_control_100 cmp_const
57893#endif /* FREECIV_DELTA_PROTOCOL */
57894
57896{
57897#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_control(_packet)
57899
57900#ifdef FREECIV_JSON_CONNECTION
57901 struct plocation field_addr;
57902 {
57903 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57906 }
57907#endif /* FREECIV_JSON_CONNECTION */
57908
57909 log_packet_detailed("packet_ruleset_terrain_control_100: got info about ()");
57910
57911#ifdef FREECIV_DELTA_PROTOCOL
57914 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_CONTROL;
57915
57916 if (nullptr == *hash) {
57918 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
57919 }
57920
57921 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57922 *real_packet = *old;
57923 } else {
57924 /* packet is already initialized empty */
57925 log_packet_detailed(" no old info");
57926 }
57927
57928#ifdef FREECIV_JSON_CONNECTION
57929 field_addr.name = "fields";
57930#endif /* FREECIV_JSON_CONNECTION */
57931 DIO_BV_GET(&din, &field_addr, fields);
57932
57933 if (BV_ISSET(fields, 0)) {
57934 log_packet_detailed(" got field 'ocean_reclaim_requirement_pct'");
57935
57936#ifdef FREECIV_JSON_CONNECTION
57937 field_addr.name = "ocean_reclaim_requirement_pct";
57938#endif /* FREECIV_JSON_CONNECTION */
57939
57940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
57941 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
57942 }
57943 }
57944
57945 if (BV_ISSET(fields, 1)) {
57946 log_packet_detailed(" got field 'land_channel_requirement_pct'");
57947
57948#ifdef FREECIV_JSON_CONNECTION
57949 field_addr.name = "land_channel_requirement_pct";
57950#endif /* FREECIV_JSON_CONNECTION */
57951
57952 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
57953 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
57954 }
57955 }
57956
57957 if (BV_ISSET(fields, 2)) {
57958 log_packet_detailed(" got field 'terrain_thaw_requirement_pct'");
57959
57960#ifdef FREECIV_JSON_CONNECTION
57961 field_addr.name = "terrain_thaw_requirement_pct";
57962#endif /* FREECIV_JSON_CONNECTION */
57963
57964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
57965 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
57966 }
57967 }
57968
57969 if (BV_ISSET(fields, 3)) {
57970 log_packet_detailed(" got field 'terrain_freeze_requirement_pct'");
57971
57972#ifdef FREECIV_JSON_CONNECTION
57973 field_addr.name = "terrain_freeze_requirement_pct";
57974#endif /* FREECIV_JSON_CONNECTION */
57975
57976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
57977 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
57978 }
57979 }
57980
57981 if (BV_ISSET(fields, 4)) {
57982 log_packet_detailed(" got field 'lake_max_size'");
57983
57984#ifdef FREECIV_JSON_CONNECTION
57985 field_addr.name = "lake_max_size";
57986#endif /* FREECIV_JSON_CONNECTION */
57987
57988 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
57989 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
57990 }
57991 }
57992
57993 if (BV_ISSET(fields, 5)) {
57994 log_packet_detailed(" got field 'min_start_native_area'");
57995
57996#ifdef FREECIV_JSON_CONNECTION
57997 field_addr.name = "min_start_native_area";
57998#endif /* FREECIV_JSON_CONNECTION */
57999
58000 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
58001 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
58002 }
58003 }
58004
58005 if (BV_ISSET(fields, 6)) {
58006 log_packet_detailed(" got field 'move_fragments'");
58007
58008#ifdef FREECIV_JSON_CONNECTION
58009 field_addr.name = "move_fragments";
58010#endif /* FREECIV_JSON_CONNECTION */
58011
58012 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
58013 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
58014 }
58015 }
58016
58017 if (BV_ISSET(fields, 7)) {
58018 log_packet_detailed(" got field 'igter_cost'");
58019
58020#ifdef FREECIV_JSON_CONNECTION
58021 field_addr.name = "igter_cost";
58022#endif /* FREECIV_JSON_CONNECTION */
58023
58024 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
58025 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
58026 }
58027 }
58028
58029 real_packet->pythagorean_diagonal = BV_ISSET(fields, 8);
58030
58031 real_packet->infrapoints = BV_ISSET(fields, 9);
58032
58033 if (BV_ISSET(fields, 10)) {
58034 log_packet_detailed(" got field 'gui_type_base0'");
58035
58036#ifdef FREECIV_JSON_CONNECTION
58037 field_addr.name = "gui_type_base0";
58038#endif /* FREECIV_JSON_CONNECTION */
58039
58040 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
58041 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
58042 }
58043 }
58044
58045 if (BV_ISSET(fields, 11)) {
58046 log_packet_detailed(" got field 'gui_type_base1'");
58047
58048#ifdef FREECIV_JSON_CONNECTION
58049 field_addr.name = "gui_type_base1";
58050#endif /* FREECIV_JSON_CONNECTION */
58051
58052 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
58053 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
58054 }
58055 }
58056
58057 if (nullptr == old) {
58058 old = fc_malloc(sizeof(*old));
58060 *old = *real_packet;
58062 } else {
58063 *old = *real_packet;
58064 }
58065
58066#else /* FREECIV_DELTA_PROTOCOL */
58067#ifdef FREECIV_JSON_CONNECTION
58068 field_addr.name = "ocean_reclaim_requirement_pct";
58069#endif /* FREECIV_JSON_CONNECTION */
58070
58071 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
58072 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
58073 }
58074
58075#ifdef FREECIV_JSON_CONNECTION
58076 field_addr.name = "land_channel_requirement_pct";
58077#endif /* FREECIV_JSON_CONNECTION */
58078
58079 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
58080 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
58081 }
58082
58083#ifdef FREECIV_JSON_CONNECTION
58084 field_addr.name = "terrain_thaw_requirement_pct";
58085#endif /* FREECIV_JSON_CONNECTION */
58086
58087 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
58088 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
58089 }
58090
58091#ifdef FREECIV_JSON_CONNECTION
58092 field_addr.name = "terrain_freeze_requirement_pct";
58093#endif /* FREECIV_JSON_CONNECTION */
58094
58095 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
58096 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
58097 }
58098
58099#ifdef FREECIV_JSON_CONNECTION
58100 field_addr.name = "lake_max_size";
58101#endif /* FREECIV_JSON_CONNECTION */
58102
58103 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
58104 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
58105 }
58106
58107#ifdef FREECIV_JSON_CONNECTION
58108 field_addr.name = "min_start_native_area";
58109#endif /* FREECIV_JSON_CONNECTION */
58110
58111 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
58112 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
58113 }
58114
58115#ifdef FREECIV_JSON_CONNECTION
58116 field_addr.name = "move_fragments";
58117#endif /* FREECIV_JSON_CONNECTION */
58118
58119 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
58120 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
58121 }
58122
58123#ifdef FREECIV_JSON_CONNECTION
58124 field_addr.name = "igter_cost";
58125#endif /* FREECIV_JSON_CONNECTION */
58126
58127 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
58128 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
58129 }
58130
58131#ifdef FREECIV_JSON_CONNECTION
58132 field_addr.name = "pythagorean_diagonal";
58133#endif /* FREECIV_JSON_CONNECTION */
58134
58135 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pythagorean_diagonal)) {
58136 RECEIVE_PACKET_FIELD_ERROR(pythagorean_diagonal);
58137 }
58138
58139#ifdef FREECIV_JSON_CONNECTION
58140 field_addr.name = "infrapoints";
58141#endif /* FREECIV_JSON_CONNECTION */
58142
58143 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->infrapoints)) {
58144 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
58145 }
58146
58147#ifdef FREECIV_JSON_CONNECTION
58148 field_addr.name = "gui_type_base0";
58149#endif /* FREECIV_JSON_CONNECTION */
58150
58151 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
58152 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
58153 }
58154
58155#ifdef FREECIV_JSON_CONNECTION
58156 field_addr.name = "gui_type_base1";
58157#endif /* FREECIV_JSON_CONNECTION */
58158
58159 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
58160 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
58161 }
58162#endif /* FREECIV_DELTA_PROTOCOL */
58163
58165#undef FREE_PACKET_STRUCT
58166}
58167
58169{
58170 const struct packet_ruleset_terrain_control *real_packet = packet;
58171 int e;
58173
58174 log_packet_detailed("packet_ruleset_terrain_control_100: sending info about ()");
58175
58176#ifdef FREECIV_DELTA_PROTOCOL
58179 bool differ;
58180 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_CONTROL;
58181
58182 if (nullptr == *hash) {
58184 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
58185 }
58186 BV_CLR_ALL(fields);
58187
58188 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58189 old = fc_malloc(sizeof(*old));
58190 /* temporary bitcopy just to insert correctly */
58191 *old = *real_packet;
58194 }
58195
58196 differ = (old->ocean_reclaim_requirement_pct != real_packet->ocean_reclaim_requirement_pct);
58197 if (differ) {
58198 BV_SET(fields, 0);
58199 }
58200
58201 differ = (old->land_channel_requirement_pct != real_packet->land_channel_requirement_pct);
58202 if (differ) {
58203 BV_SET(fields, 1);
58204 }
58205
58206 differ = (old->terrain_thaw_requirement_pct != real_packet->terrain_thaw_requirement_pct);
58207 if (differ) {
58208 BV_SET(fields, 2);
58209 }
58210
58211 differ = (old->terrain_freeze_requirement_pct != real_packet->terrain_freeze_requirement_pct);
58212 if (differ) {
58213 BV_SET(fields, 3);
58214 }
58215
58216 differ = (old->lake_max_size != real_packet->lake_max_size);
58217 if (differ) {
58218 BV_SET(fields, 4);
58219 }
58220
58221 differ = (old->min_start_native_area != real_packet->min_start_native_area);
58222 if (differ) {
58223 BV_SET(fields, 5);
58224 }
58225
58226 differ = (old->move_fragments != real_packet->move_fragments);
58227 if (differ) {
58228 BV_SET(fields, 6);
58229 }
58230
58231 differ = (old->igter_cost != real_packet->igter_cost);
58232 if (differ) {
58233 BV_SET(fields, 7);
58234 }
58235
58236 /* folded into head */
58237 if (real_packet->pythagorean_diagonal) {
58238 BV_SET(fields, 8);
58239 }
58240
58241 /* folded into head */
58242 if (real_packet->infrapoints) {
58243 BV_SET(fields, 9);
58244 }
58245
58246 differ = (strcmp(old->gui_type_base0, real_packet->gui_type_base0) != 0);
58247 if (differ) {
58248 BV_SET(fields, 10);
58249 }
58250
58251 differ = (strcmp(old->gui_type_base1, real_packet->gui_type_base1) != 0);
58252 if (differ) {
58253 BV_SET(fields, 11);
58254 }
58255#endif /* FREECIV_DELTA_PROTOCOL */
58256
58257#ifdef FREECIV_JSON_CONNECTION
58258 struct plocation field_addr;
58259 {
58260 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58263 }
58264#endif /* FREECIV_JSON_CONNECTION */
58265
58266#ifdef FREECIV_DELTA_PROTOCOL
58267#ifdef FREECIV_JSON_CONNECTION
58268 field_addr.name = "fields";
58269#endif /* FREECIV_JSON_CONNECTION */
58270 e = 0;
58271 e |= DIO_BV_PUT(&dout, &field_addr, fields);
58272 if (e) {
58273 log_packet_detailed("fields bitvector error detected");
58274 }
58275
58276 if (BV_ISSET(fields, 0)) {
58277 log_packet_detailed(" field 'ocean_reclaim_requirement_pct' has changed");
58278
58279#ifdef FREECIV_JSON_CONNECTION
58280 field_addr.name = "ocean_reclaim_requirement_pct";
58281#endif /* FREECIV_JSON_CONNECTION */
58282 e = 0;
58283
58284 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
58285
58286 if (e) {
58287 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
58288 }
58289 }
58290
58291 if (BV_ISSET(fields, 1)) {
58292 log_packet_detailed(" field 'land_channel_requirement_pct' has changed");
58293
58294#ifdef FREECIV_JSON_CONNECTION
58295 field_addr.name = "land_channel_requirement_pct";
58296#endif /* FREECIV_JSON_CONNECTION */
58297 e = 0;
58298
58299 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
58300
58301 if (e) {
58302 log_packet_detailed("'land_channel_requirement_pct' field error detected");
58303 }
58304 }
58305
58306 if (BV_ISSET(fields, 2)) {
58307 log_packet_detailed(" field 'terrain_thaw_requirement_pct' has changed");
58308
58309#ifdef FREECIV_JSON_CONNECTION
58310 field_addr.name = "terrain_thaw_requirement_pct";
58311#endif /* FREECIV_JSON_CONNECTION */
58312 e = 0;
58313
58314 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
58315
58316 if (e) {
58317 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
58318 }
58319 }
58320
58321 if (BV_ISSET(fields, 3)) {
58322 log_packet_detailed(" field 'terrain_freeze_requirement_pct' has changed");
58323
58324#ifdef FREECIV_JSON_CONNECTION
58325 field_addr.name = "terrain_freeze_requirement_pct";
58326#endif /* FREECIV_JSON_CONNECTION */
58327 e = 0;
58328
58329 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
58330
58331 if (e) {
58332 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
58333 }
58334 }
58335
58336 if (BV_ISSET(fields, 4)) {
58337 log_packet_detailed(" field 'lake_max_size' has changed");
58338
58339#ifdef FREECIV_JSON_CONNECTION
58340 field_addr.name = "lake_max_size";
58341#endif /* FREECIV_JSON_CONNECTION */
58342 e = 0;
58343
58344 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
58345
58346 if (e) {
58347 log_packet_detailed("'lake_max_size' field error detected");
58348 }
58349 }
58350
58351 if (BV_ISSET(fields, 5)) {
58352 log_packet_detailed(" field 'min_start_native_area' has changed");
58353
58354#ifdef FREECIV_JSON_CONNECTION
58355 field_addr.name = "min_start_native_area";
58356#endif /* FREECIV_JSON_CONNECTION */
58357 e = 0;
58358
58359 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
58360
58361 if (e) {
58362 log_packet_detailed("'min_start_native_area' field error detected");
58363 }
58364 }
58365
58366 if (BV_ISSET(fields, 6)) {
58367 log_packet_detailed(" field 'move_fragments' has changed");
58368
58369#ifdef FREECIV_JSON_CONNECTION
58370 field_addr.name = "move_fragments";
58371#endif /* FREECIV_JSON_CONNECTION */
58372 e = 0;
58373
58374 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
58375
58376 if (e) {
58377 log_packet_detailed("'move_fragments' field error detected");
58378 }
58379 }
58380
58381 if (BV_ISSET(fields, 7)) {
58382 log_packet_detailed(" field 'igter_cost' has changed");
58383
58384#ifdef FREECIV_JSON_CONNECTION
58385 field_addr.name = "igter_cost";
58386#endif /* FREECIV_JSON_CONNECTION */
58387 e = 0;
58388
58389 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
58390
58391 if (e) {
58392 log_packet_detailed("'igter_cost' field error detected");
58393 }
58394 }
58395
58396 /* field 8 is folded into the header */
58397
58398 /* field 9 is folded into the header */
58399
58400 if (BV_ISSET(fields, 10)) {
58401 log_packet_detailed(" field 'gui_type_base0' has changed");
58402
58403#ifdef FREECIV_JSON_CONNECTION
58404 field_addr.name = "gui_type_base0";
58405#endif /* FREECIV_JSON_CONNECTION */
58406 e = 0;
58407
58408 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
58409
58410 if (e) {
58411 log_packet_detailed("'gui_type_base0' field error detected");
58412 }
58413 }
58414
58415 if (BV_ISSET(fields, 11)) {
58416 log_packet_detailed(" field 'gui_type_base1' has changed");
58417
58418#ifdef FREECIV_JSON_CONNECTION
58419 field_addr.name = "gui_type_base1";
58420#endif /* FREECIV_JSON_CONNECTION */
58421 e = 0;
58422
58423 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
58424
58425 if (e) {
58426 log_packet_detailed("'gui_type_base1' field error detected");
58427 }
58428 }
58429
58430 *old = *real_packet;
58431
58432#else /* FREECIV_DELTA_PROTOCOL */
58433#ifdef FREECIV_JSON_CONNECTION
58434 field_addr.name = "ocean_reclaim_requirement_pct";
58435#endif /* FREECIV_JSON_CONNECTION */
58436 e = 0;
58437
58438 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
58439
58440 if (e) {
58441 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
58442 }
58443
58444#ifdef FREECIV_JSON_CONNECTION
58445 field_addr.name = "land_channel_requirement_pct";
58446#endif /* FREECIV_JSON_CONNECTION */
58447 e = 0;
58448
58449 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
58450
58451 if (e) {
58452 log_packet_detailed("'land_channel_requirement_pct' field error detected");
58453 }
58454
58455#ifdef FREECIV_JSON_CONNECTION
58456 field_addr.name = "terrain_thaw_requirement_pct";
58457#endif /* FREECIV_JSON_CONNECTION */
58458 e = 0;
58459
58460 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
58461
58462 if (e) {
58463 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
58464 }
58465
58466#ifdef FREECIV_JSON_CONNECTION
58467 field_addr.name = "terrain_freeze_requirement_pct";
58468#endif /* FREECIV_JSON_CONNECTION */
58469 e = 0;
58470
58471 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
58472
58473 if (e) {
58474 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
58475 }
58476
58477#ifdef FREECIV_JSON_CONNECTION
58478 field_addr.name = "lake_max_size";
58479#endif /* FREECIV_JSON_CONNECTION */
58480 e = 0;
58481
58482 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
58483
58484 if (e) {
58485 log_packet_detailed("'lake_max_size' field error detected");
58486 }
58487
58488#ifdef FREECIV_JSON_CONNECTION
58489 field_addr.name = "min_start_native_area";
58490#endif /* FREECIV_JSON_CONNECTION */
58491 e = 0;
58492
58493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
58494
58495 if (e) {
58496 log_packet_detailed("'min_start_native_area' field error detected");
58497 }
58498
58499#ifdef FREECIV_JSON_CONNECTION
58500 field_addr.name = "move_fragments";
58501#endif /* FREECIV_JSON_CONNECTION */
58502 e = 0;
58503
58504 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
58505
58506 if (e) {
58507 log_packet_detailed("'move_fragments' field error detected");
58508 }
58509
58510#ifdef FREECIV_JSON_CONNECTION
58511 field_addr.name = "igter_cost";
58512#endif /* FREECIV_JSON_CONNECTION */
58513 e = 0;
58514
58515 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
58516
58517 if (e) {
58518 log_packet_detailed("'igter_cost' field error detected");
58519 }
58520
58521#ifdef FREECIV_JSON_CONNECTION
58522 field_addr.name = "pythagorean_diagonal";
58523#endif /* FREECIV_JSON_CONNECTION */
58524 e = 0;
58525
58526 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pythagorean_diagonal);
58527
58528 if (e) {
58529 log_packet_detailed("'pythagorean_diagonal' field error detected");
58530 }
58531
58532#ifdef FREECIV_JSON_CONNECTION
58533 field_addr.name = "infrapoints";
58534#endif /* FREECIV_JSON_CONNECTION */
58535 e = 0;
58536
58537 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->infrapoints);
58538
58539 if (e) {
58540 log_packet_detailed("'infrapoints' field error detected");
58541 }
58542
58543#ifdef FREECIV_JSON_CONNECTION
58544 field_addr.name = "gui_type_base0";
58545#endif /* FREECIV_JSON_CONNECTION */
58546 e = 0;
58547
58548 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
58549
58550 if (e) {
58551 log_packet_detailed("'gui_type_base0' field error detected");
58552 }
58553
58554#ifdef FREECIV_JSON_CONNECTION
58555 field_addr.name = "gui_type_base1";
58556#endif /* FREECIV_JSON_CONNECTION */
58557 e = 0;
58558
58559 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
58560
58561 if (e) {
58562 log_packet_detailed("'gui_type_base1' field error detected");
58563 }
58564#endif /* FREECIV_DELTA_PROTOCOL */
58565
58567}
58568
58570{
58571 if (!pc->used) {
58572 log_error("WARNING: trying to send data to the closed connection %s",
58574 return -1;
58575 }
58576 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet != nullptr, -1,
58577 "Handler for PACKET_RULESET_TERRAIN_CONTROL not installed");
58578 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet(pc, packet);
58579}
58580
58587
58588static inline void init_packet_rulesets_ready(struct packet_rulesets_ready *packet)
58589{
58590 memset(packet, 0, sizeof(*packet));
58591}
58592
58593#define free_packet_rulesets_ready(_packet) (void) 0
58594#define destroy_packet_rulesets_ready free
58595
58597{
58598#define FREE_PACKET_STRUCT(_packet) free_packet_rulesets_ready(_packet)
58600
58601 log_packet_detailed("packet_rulesets_ready_100: got info about ()");
58602
58603 real_packet->__dummy = 0xff;
58604
58606#undef FREE_PACKET_STRUCT
58607}
58608
58610{
58612
58613 log_packet_detailed("packet_rulesets_ready_100: sending info about ()");
58614
58616}
58617
58619{
58620 if (!pc->used) {
58621 log_error("WARNING: trying to send data to the closed connection %s",
58623 return -1;
58624 }
58625 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet != nullptr, -1,
58626 "Handler for PACKET_RULESETS_READY not installed");
58627 return pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet(pc);
58628}
58629
58636
58638{
58639 memset(packet, 0, sizeof(*packet));
58640}
58641
58642#define free_packet_ruleset_nation_sets(_packet) (void) 0
58643#define destroy_packet_ruleset_nation_sets free
58644
58645#ifdef FREECIV_DELTA_PROTOCOL
58646#define hash_packet_ruleset_nation_sets_100 hash_const
58647#define cmp_packet_ruleset_nation_sets_100 cmp_const
58649#endif /* FREECIV_DELTA_PROTOCOL */
58650
58652{
58653#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_sets(_packet)
58655
58656#ifdef FREECIV_JSON_CONNECTION
58657 struct plocation field_addr;
58658 {
58659 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58662 }
58663#endif /* FREECIV_JSON_CONNECTION */
58664
58665 log_packet_detailed("packet_ruleset_nation_sets_100: got info about ()");
58666
58667#ifdef FREECIV_DELTA_PROTOCOL
58670 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_SETS;
58671
58672 if (nullptr == *hash) {
58674 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58675 }
58676
58677 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58678 *real_packet = *old;
58679 } else {
58680 /* packet is already initialized empty */
58681 log_packet_detailed(" no old info");
58682 }
58683
58684#ifdef FREECIV_JSON_CONNECTION
58685 field_addr.name = "fields";
58686#endif /* FREECIV_JSON_CONNECTION */
58687 DIO_BV_GET(&din, &field_addr, fields);
58688
58689 if (BV_ISSET(fields, 0)) {
58690 log_packet_detailed(" got field 'nsets'");
58691
58692#ifdef FREECIV_JSON_CONNECTION
58693 field_addr.name = "nsets";
58694#endif /* FREECIV_JSON_CONNECTION */
58695
58696 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58698 }
58699 }
58700
58701 if (BV_ISSET(fields, 1)) {
58702 log_packet_detailed(" got field 'names'");
58703
58704#ifdef FREECIV_JSON_CONNECTION
58705 field_addr.name = "names";
58706#endif /* FREECIV_JSON_CONNECTION */
58707
58708 {
58709 int i;
58710
58711 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58712 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58713 }
58714
58715#ifdef FREECIV_JSON_CONNECTION
58716 /* Enter array. */
58717 field_addr.sub_location = plocation_elem_new(0);
58718#endif /* FREECIV_JSON_CONNECTION */
58719
58720 for (i = 0; i < real_packet->nsets; i++) {
58721#ifdef FREECIV_JSON_CONNECTION
58722 /* Next array element */
58723 field_addr.sub_location->number = i;
58724#endif /* FREECIV_JSON_CONNECTION */
58725
58726 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58728 }
58729 }
58730
58731#ifdef FREECIV_JSON_CONNECTION
58732 /* Exit array. */
58733 FC_FREE(field_addr.sub_location);
58734#endif /* FREECIV_JSON_CONNECTION */
58735 }
58736 }
58737
58738 if (BV_ISSET(fields, 2)) {
58739 log_packet_detailed(" got field 'rule_names'");
58740
58741#ifdef FREECIV_JSON_CONNECTION
58742 field_addr.name = "rule_names";
58743#endif /* FREECIV_JSON_CONNECTION */
58744
58745 {
58746 int i;
58747
58748 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58749 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58750 }
58751
58752#ifdef FREECIV_JSON_CONNECTION
58753 /* Enter array. */
58754 field_addr.sub_location = plocation_elem_new(0);
58755#endif /* FREECIV_JSON_CONNECTION */
58756
58757 for (i = 0; i < real_packet->nsets; i++) {
58758#ifdef FREECIV_JSON_CONNECTION
58759 /* Next array element */
58760 field_addr.sub_location->number = i;
58761#endif /* FREECIV_JSON_CONNECTION */
58762
58763 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58764 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58765 }
58766 }
58767
58768#ifdef FREECIV_JSON_CONNECTION
58769 /* Exit array. */
58770 FC_FREE(field_addr.sub_location);
58771#endif /* FREECIV_JSON_CONNECTION */
58772 }
58773 }
58774
58775 if (BV_ISSET(fields, 3)) {
58776 log_packet_detailed(" got field 'descriptions'");
58777
58778#ifdef FREECIV_JSON_CONNECTION
58779 field_addr.name = "descriptions";
58780#endif /* FREECIV_JSON_CONNECTION */
58781
58782 {
58783 int i;
58784
58785 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58786 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58787 }
58788
58789#ifdef FREECIV_JSON_CONNECTION
58790 /* Enter array. */
58791 field_addr.sub_location = plocation_elem_new(0);
58792#endif /* FREECIV_JSON_CONNECTION */
58793
58794 for (i = 0; i < real_packet->nsets; i++) {
58795#ifdef FREECIV_JSON_CONNECTION
58796 /* Next array element */
58797 field_addr.sub_location->number = i;
58798#endif /* FREECIV_JSON_CONNECTION */
58799
58800 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58801 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58802 }
58803 }
58804
58805#ifdef FREECIV_JSON_CONNECTION
58806 /* Exit array. */
58807 FC_FREE(field_addr.sub_location);
58808#endif /* FREECIV_JSON_CONNECTION */
58809 }
58810 }
58811
58812 if (nullptr == old) {
58813 old = fc_malloc(sizeof(*old));
58815 *old = *real_packet;
58817 } else {
58818 *old = *real_packet;
58819 }
58820
58821#else /* FREECIV_DELTA_PROTOCOL */
58822#ifdef FREECIV_JSON_CONNECTION
58823 field_addr.name = "nsets";
58824#endif /* FREECIV_JSON_CONNECTION */
58825
58826 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58828 }
58829
58830#ifdef FREECIV_JSON_CONNECTION
58831 field_addr.name = "names";
58832#endif /* FREECIV_JSON_CONNECTION */
58833
58834 {
58835 int i;
58836
58837 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58838 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58839 }
58840
58841#ifdef FREECIV_JSON_CONNECTION
58842 /* Enter array. */
58843 field_addr.sub_location = plocation_elem_new(0);
58844#endif /* FREECIV_JSON_CONNECTION */
58845
58846 for (i = 0; i < real_packet->nsets; i++) {
58847#ifdef FREECIV_JSON_CONNECTION
58848 /* Next array element */
58849 field_addr.sub_location->number = i;
58850#endif /* FREECIV_JSON_CONNECTION */
58851
58852 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58854 }
58855 }
58856
58857#ifdef FREECIV_JSON_CONNECTION
58858 /* Exit array. */
58859 FC_FREE(field_addr.sub_location);
58860#endif /* FREECIV_JSON_CONNECTION */
58861 }
58862
58863#ifdef FREECIV_JSON_CONNECTION
58864 field_addr.name = "rule_names";
58865#endif /* FREECIV_JSON_CONNECTION */
58866
58867 {
58868 int i;
58869
58870 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58871 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58872 }
58873
58874#ifdef FREECIV_JSON_CONNECTION
58875 /* Enter array. */
58876 field_addr.sub_location = plocation_elem_new(0);
58877#endif /* FREECIV_JSON_CONNECTION */
58878
58879 for (i = 0; i < real_packet->nsets; i++) {
58880#ifdef FREECIV_JSON_CONNECTION
58881 /* Next array element */
58882 field_addr.sub_location->number = i;
58883#endif /* FREECIV_JSON_CONNECTION */
58884
58885 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58886 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58887 }
58888 }
58889
58890#ifdef FREECIV_JSON_CONNECTION
58891 /* Exit array. */
58892 FC_FREE(field_addr.sub_location);
58893#endif /* FREECIV_JSON_CONNECTION */
58894 }
58895
58896#ifdef FREECIV_JSON_CONNECTION
58897 field_addr.name = "descriptions";
58898#endif /* FREECIV_JSON_CONNECTION */
58899
58900 {
58901 int i;
58902
58903 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58904 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58905 }
58906
58907#ifdef FREECIV_JSON_CONNECTION
58908 /* Enter array. */
58909 field_addr.sub_location = plocation_elem_new(0);
58910#endif /* FREECIV_JSON_CONNECTION */
58911
58912 for (i = 0; i < real_packet->nsets; i++) {
58913#ifdef FREECIV_JSON_CONNECTION
58914 /* Next array element */
58915 field_addr.sub_location->number = i;
58916#endif /* FREECIV_JSON_CONNECTION */
58917
58918 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58919 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58920 }
58921 }
58922
58923#ifdef FREECIV_JSON_CONNECTION
58924 /* Exit array. */
58925 FC_FREE(field_addr.sub_location);
58926#endif /* FREECIV_JSON_CONNECTION */
58927 }
58928#endif /* FREECIV_DELTA_PROTOCOL */
58929
58931#undef FREE_PACKET_STRUCT
58932}
58933
58935{
58936 const struct packet_ruleset_nation_sets *real_packet = packet;
58937 int e;
58939
58940 log_packet_detailed("packet_ruleset_nation_sets_100: sending info about ()");
58941
58942#ifdef FREECIV_DELTA_PROTOCOL
58945 bool differ;
58946 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_SETS;
58947
58948 if (nullptr == *hash) {
58950 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58951 }
58952 BV_CLR_ALL(fields);
58953
58954 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58955 old = fc_malloc(sizeof(*old));
58956 /* temporary bitcopy just to insert correctly */
58957 *old = *real_packet;
58960 }
58961
58962 differ = (old->nsets != real_packet->nsets);
58963 if (differ) {
58964 BV_SET(fields, 0);
58965 }
58966
58967 differ = (old->nsets != real_packet->nsets);
58968 if (!differ) {
58969 int i;
58970
58971 for (i = 0; i < old->nsets; i++) {
58972 differ = (strcmp(old->names[i], real_packet->names[i]) != 0);
58973 if (differ) {
58974 break;
58975 }
58976 }
58977 }
58978 if (differ) {
58979 BV_SET(fields, 1);
58980 }
58981
58982 differ = (old->nsets != real_packet->nsets);
58983 if (!differ) {
58984 int i;
58985
58986 for (i = 0; i < old->nsets; i++) {
58987 differ = (strcmp(old->rule_names[i], real_packet->rule_names[i]) != 0);
58988 if (differ) {
58989 break;
58990 }
58991 }
58992 }
58993 if (differ) {
58994 BV_SET(fields, 2);
58995 }
58996
58997 differ = (old->nsets != real_packet->nsets);
58998 if (!differ) {
58999 int i;
59000
59001 for (i = 0; i < old->nsets; i++) {
59002 differ = (strcmp(old->descriptions[i], real_packet->descriptions[i]) != 0);
59003 if (differ) {
59004 break;
59005 }
59006 }
59007 }
59008 if (differ) {
59009 BV_SET(fields, 3);
59010 }
59011#endif /* FREECIV_DELTA_PROTOCOL */
59012
59013#ifdef FREECIV_JSON_CONNECTION
59014 struct plocation field_addr;
59015 {
59016 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59019 }
59020#endif /* FREECIV_JSON_CONNECTION */
59021
59022#ifdef FREECIV_DELTA_PROTOCOL
59023#ifdef FREECIV_JSON_CONNECTION
59024 field_addr.name = "fields";
59025#endif /* FREECIV_JSON_CONNECTION */
59026 e = 0;
59027 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59028 if (e) {
59029 log_packet_detailed("fields bitvector error detected");
59030 }
59031
59032 if (BV_ISSET(fields, 0)) {
59033 log_packet_detailed(" field 'nsets' has changed");
59034
59035#ifdef FREECIV_JSON_CONNECTION
59036 field_addr.name = "nsets";
59037#endif /* FREECIV_JSON_CONNECTION */
59038 e = 0;
59039
59040 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
59041
59042 if (e) {
59043 log_packet_detailed("'nsets' field error detected");
59044 }
59045 }
59046
59047 if (BV_ISSET(fields, 1)) {
59048 log_packet_detailed(" field 'names' has changed");
59049
59050#ifdef FREECIV_JSON_CONNECTION
59051 field_addr.name = "names";
59052#endif /* FREECIV_JSON_CONNECTION */
59053 e = 0;
59054
59055 {
59056 int i;
59057
59058#ifdef FREECIV_JSON_CONNECTION
59059 /* Create the array. */
59060 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59061
59062 /* Enter array. */
59063 field_addr.sub_location = plocation_elem_new(0);
59064#endif /* FREECIV_JSON_CONNECTION */
59065
59066 for (i = 0; i < real_packet->nsets; i++) {
59067#ifdef FREECIV_JSON_CONNECTION
59068 /* Next array element. */
59069 field_addr.sub_location->number = i;
59070#endif /* FREECIV_JSON_CONNECTION */
59071
59072 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
59073 }
59074
59075#ifdef FREECIV_JSON_CONNECTION
59076 /* Exit array. */
59077 FC_FREE(field_addr.sub_location);
59078#endif /* FREECIV_JSON_CONNECTION */
59079 }
59080
59081 if (e) {
59082 log_packet_detailed("'names' field error detected");
59083 }
59084 }
59085
59086 if (BV_ISSET(fields, 2)) {
59087 log_packet_detailed(" field 'rule_names' has changed");
59088
59089#ifdef FREECIV_JSON_CONNECTION
59090 field_addr.name = "rule_names";
59091#endif /* FREECIV_JSON_CONNECTION */
59092 e = 0;
59093
59094 {
59095 int i;
59096
59097#ifdef FREECIV_JSON_CONNECTION
59098 /* Create the array. */
59099 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59100
59101 /* Enter array. */
59102 field_addr.sub_location = plocation_elem_new(0);
59103#endif /* FREECIV_JSON_CONNECTION */
59104
59105 for (i = 0; i < real_packet->nsets; i++) {
59106#ifdef FREECIV_JSON_CONNECTION
59107 /* Next array element. */
59108 field_addr.sub_location->number = i;
59109#endif /* FREECIV_JSON_CONNECTION */
59110
59111 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
59112 }
59113
59114#ifdef FREECIV_JSON_CONNECTION
59115 /* Exit array. */
59116 FC_FREE(field_addr.sub_location);
59117#endif /* FREECIV_JSON_CONNECTION */
59118 }
59119
59120 if (e) {
59121 log_packet_detailed("'rule_names' field error detected");
59122 }
59123 }
59124
59125 if (BV_ISSET(fields, 3)) {
59126 log_packet_detailed(" field 'descriptions' has changed");
59127
59128#ifdef FREECIV_JSON_CONNECTION
59129 field_addr.name = "descriptions";
59130#endif /* FREECIV_JSON_CONNECTION */
59131 e = 0;
59132
59133 {
59134 int i;
59135
59136#ifdef FREECIV_JSON_CONNECTION
59137 /* Create the array. */
59138 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59139
59140 /* Enter array. */
59141 field_addr.sub_location = plocation_elem_new(0);
59142#endif /* FREECIV_JSON_CONNECTION */
59143
59144 for (i = 0; i < real_packet->nsets; i++) {
59145#ifdef FREECIV_JSON_CONNECTION
59146 /* Next array element. */
59147 field_addr.sub_location->number = i;
59148#endif /* FREECIV_JSON_CONNECTION */
59149
59150 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
59151 }
59152
59153#ifdef FREECIV_JSON_CONNECTION
59154 /* Exit array. */
59155 FC_FREE(field_addr.sub_location);
59156#endif /* FREECIV_JSON_CONNECTION */
59157 }
59158
59159 if (e) {
59160 log_packet_detailed("'descriptions' field error detected");
59161 }
59162 }
59163
59164 *old = *real_packet;
59165
59166#else /* FREECIV_DELTA_PROTOCOL */
59167#ifdef FREECIV_JSON_CONNECTION
59168 field_addr.name = "nsets";
59169#endif /* FREECIV_JSON_CONNECTION */
59170 e = 0;
59171
59172 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
59173
59174 if (e) {
59175 log_packet_detailed("'nsets' field error detected");
59176 }
59177
59178#ifdef FREECIV_JSON_CONNECTION
59179 field_addr.name = "names";
59180#endif /* FREECIV_JSON_CONNECTION */
59181 e = 0;
59182
59183 {
59184 int i;
59185
59186#ifdef FREECIV_JSON_CONNECTION
59187 /* Create the array. */
59188 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59189
59190 /* Enter array. */
59191 field_addr.sub_location = plocation_elem_new(0);
59192#endif /* FREECIV_JSON_CONNECTION */
59193
59194 for (i = 0; i < real_packet->nsets; i++) {
59195#ifdef FREECIV_JSON_CONNECTION
59196 /* Next array element. */
59197 field_addr.sub_location->number = i;
59198#endif /* FREECIV_JSON_CONNECTION */
59199
59200 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
59201 }
59202
59203#ifdef FREECIV_JSON_CONNECTION
59204 /* Exit array. */
59205 FC_FREE(field_addr.sub_location);
59206#endif /* FREECIV_JSON_CONNECTION */
59207 }
59208
59209 if (e) {
59210 log_packet_detailed("'names' field error detected");
59211 }
59212
59213#ifdef FREECIV_JSON_CONNECTION
59214 field_addr.name = "rule_names";
59215#endif /* FREECIV_JSON_CONNECTION */
59216 e = 0;
59217
59218 {
59219 int i;
59220
59221#ifdef FREECIV_JSON_CONNECTION
59222 /* Create the array. */
59223 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59224
59225 /* Enter array. */
59226 field_addr.sub_location = plocation_elem_new(0);
59227#endif /* FREECIV_JSON_CONNECTION */
59228
59229 for (i = 0; i < real_packet->nsets; i++) {
59230#ifdef FREECIV_JSON_CONNECTION
59231 /* Next array element. */
59232 field_addr.sub_location->number = i;
59233#endif /* FREECIV_JSON_CONNECTION */
59234
59235 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
59236 }
59237
59238#ifdef FREECIV_JSON_CONNECTION
59239 /* Exit array. */
59240 FC_FREE(field_addr.sub_location);
59241#endif /* FREECIV_JSON_CONNECTION */
59242 }
59243
59244 if (e) {
59245 log_packet_detailed("'rule_names' field error detected");
59246 }
59247
59248#ifdef FREECIV_JSON_CONNECTION
59249 field_addr.name = "descriptions";
59250#endif /* FREECIV_JSON_CONNECTION */
59251 e = 0;
59252
59253 {
59254 int i;
59255
59256#ifdef FREECIV_JSON_CONNECTION
59257 /* Create the array. */
59258 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
59259
59260 /* Enter array. */
59261 field_addr.sub_location = plocation_elem_new(0);
59262#endif /* FREECIV_JSON_CONNECTION */
59263
59264 for (i = 0; i < real_packet->nsets; i++) {
59265#ifdef FREECIV_JSON_CONNECTION
59266 /* Next array element. */
59267 field_addr.sub_location->number = i;
59268#endif /* FREECIV_JSON_CONNECTION */
59269
59270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
59271 }
59272
59273#ifdef FREECIV_JSON_CONNECTION
59274 /* Exit array. */
59275 FC_FREE(field_addr.sub_location);
59276#endif /* FREECIV_JSON_CONNECTION */
59277 }
59278
59279 if (e) {
59280 log_packet_detailed("'descriptions' field error detected");
59281 }
59282#endif /* FREECIV_DELTA_PROTOCOL */
59283
59285}
59286
59288{
59289 if (!pc->used) {
59290 log_error("WARNING: trying to send data to the closed connection %s",
59292 return -1;
59293 }
59294 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet != nullptr, -1,
59295 "Handler for PACKET_RULESET_NATION_SETS not installed");
59296 return pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet(pc, packet);
59297}
59298
59300{
59301 conn_list_iterate(dest, pconn) {
59304}
59305
59307{
59308 memset(packet, 0, sizeof(*packet));
59309}
59310
59311#define free_packet_ruleset_nation_groups(_packet) (void) 0
59312#define destroy_packet_ruleset_nation_groups free
59313
59314#ifdef FREECIV_DELTA_PROTOCOL
59315#define hash_packet_ruleset_nation_groups_100 hash_const
59316#define cmp_packet_ruleset_nation_groups_100 cmp_const
59318#endif /* FREECIV_DELTA_PROTOCOL */
59319
59321{
59322#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_groups(_packet)
59324
59325#ifdef FREECIV_JSON_CONNECTION
59326 struct plocation field_addr;
59327 {
59328 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59331 }
59332#endif /* FREECIV_JSON_CONNECTION */
59333
59334 log_packet_detailed("packet_ruleset_nation_groups_100: got info about ()");
59335
59336#ifdef FREECIV_DELTA_PROTOCOL
59339 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_GROUPS;
59340
59341 if (nullptr == *hash) {
59343 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
59344 }
59345
59346 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59347 *real_packet = *old;
59348 } else {
59349 /* packet is already initialized empty */
59350 log_packet_detailed(" no old info");
59351 }
59352
59353#ifdef FREECIV_JSON_CONNECTION
59354 field_addr.name = "fields";
59355#endif /* FREECIV_JSON_CONNECTION */
59356 DIO_BV_GET(&din, &field_addr, fields);
59357
59358 if (BV_ISSET(fields, 0)) {
59359 log_packet_detailed(" got field 'ngroups'");
59360
59361#ifdef FREECIV_JSON_CONNECTION
59362 field_addr.name = "ngroups";
59363#endif /* FREECIV_JSON_CONNECTION */
59364
59365 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
59367 }
59368 }
59369
59370 if (BV_ISSET(fields, 1)) {
59371 log_packet_detailed(" got field 'groups'");
59372
59373#ifdef FREECIV_JSON_CONNECTION
59374 field_addr.name = "groups";
59375#endif /* FREECIV_JSON_CONNECTION */
59376
59377 {
59378 int i;
59379
59380 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59381 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59382 }
59383
59384#ifdef FREECIV_JSON_CONNECTION
59385 /* Enter array. */
59386 field_addr.sub_location = plocation_elem_new(0);
59387#endif /* FREECIV_JSON_CONNECTION */
59388
59389 for (i = 0; i < real_packet->ngroups; i++) {
59390#ifdef FREECIV_JSON_CONNECTION
59391 /* Next array element */
59392 field_addr.sub_location->number = i;
59393#endif /* FREECIV_JSON_CONNECTION */
59394
59395 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
59397 }
59398 }
59399
59400#ifdef FREECIV_JSON_CONNECTION
59401 /* Exit array. */
59402 FC_FREE(field_addr.sub_location);
59403#endif /* FREECIV_JSON_CONNECTION */
59404 }
59405 }
59406
59407 if (BV_ISSET(fields, 2)) {
59408 log_packet_detailed(" got field 'hidden'");
59409
59410#ifdef FREECIV_JSON_CONNECTION
59411 field_addr.name = "hidden";
59412#endif /* FREECIV_JSON_CONNECTION */
59413
59414 {
59415 int i;
59416
59417 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59418 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
59419 }
59420
59421#ifdef FREECIV_JSON_CONNECTION
59422 /* Enter array. */
59423 field_addr.sub_location = plocation_elem_new(0);
59424#endif /* FREECIV_JSON_CONNECTION */
59425
59426 for (i = 0; i < real_packet->ngroups; i++) {
59427#ifdef FREECIV_JSON_CONNECTION
59428 /* Next array element */
59429 field_addr.sub_location->number = i;
59430#endif /* FREECIV_JSON_CONNECTION */
59431
59432 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
59434 }
59435 }
59436
59437#ifdef FREECIV_JSON_CONNECTION
59438 /* Exit array. */
59439 FC_FREE(field_addr.sub_location);
59440#endif /* FREECIV_JSON_CONNECTION */
59441 }
59442 }
59443
59444 if (nullptr == old) {
59445 old = fc_malloc(sizeof(*old));
59447 *old = *real_packet;
59449 } else {
59450 *old = *real_packet;
59451 }
59452
59453#else /* FREECIV_DELTA_PROTOCOL */
59454#ifdef FREECIV_JSON_CONNECTION
59455 field_addr.name = "ngroups";
59456#endif /* FREECIV_JSON_CONNECTION */
59457
59458 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
59460 }
59461
59462#ifdef FREECIV_JSON_CONNECTION
59463 field_addr.name = "groups";
59464#endif /* FREECIV_JSON_CONNECTION */
59465
59466 {
59467 int i;
59468
59469 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59470 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59471 }
59472
59473#ifdef FREECIV_JSON_CONNECTION
59474 /* Enter array. */
59475 field_addr.sub_location = plocation_elem_new(0);
59476#endif /* FREECIV_JSON_CONNECTION */
59477
59478 for (i = 0; i < real_packet->ngroups; i++) {
59479#ifdef FREECIV_JSON_CONNECTION
59480 /* Next array element */
59481 field_addr.sub_location->number = i;
59482#endif /* FREECIV_JSON_CONNECTION */
59483
59484 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
59486 }
59487 }
59488
59489#ifdef FREECIV_JSON_CONNECTION
59490 /* Exit array. */
59491 FC_FREE(field_addr.sub_location);
59492#endif /* FREECIV_JSON_CONNECTION */
59493 }
59494
59495#ifdef FREECIV_JSON_CONNECTION
59496 field_addr.name = "hidden";
59497#endif /* FREECIV_JSON_CONNECTION */
59498
59499 {
59500 int i;
59501
59502 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59503 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
59504 }
59505
59506#ifdef FREECIV_JSON_CONNECTION
59507 /* Enter array. */
59508 field_addr.sub_location = plocation_elem_new(0);
59509#endif /* FREECIV_JSON_CONNECTION */
59510
59511 for (i = 0; i < real_packet->ngroups; i++) {
59512#ifdef FREECIV_JSON_CONNECTION
59513 /* Next array element */
59514 field_addr.sub_location->number = i;
59515#endif /* FREECIV_JSON_CONNECTION */
59516
59517 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
59519 }
59520 }
59521
59522#ifdef FREECIV_JSON_CONNECTION
59523 /* Exit array. */
59524 FC_FREE(field_addr.sub_location);
59525#endif /* FREECIV_JSON_CONNECTION */
59526 }
59527#endif /* FREECIV_DELTA_PROTOCOL */
59528
59530#undef FREE_PACKET_STRUCT
59531}
59532
59534{
59535 const struct packet_ruleset_nation_groups *real_packet = packet;
59536 int e;
59538
59539 log_packet_detailed("packet_ruleset_nation_groups_100: sending info about ()");
59540
59541#ifdef FREECIV_DELTA_PROTOCOL
59544 bool differ;
59545 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_GROUPS;
59546
59547 if (nullptr == *hash) {
59549 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
59550 }
59551 BV_CLR_ALL(fields);
59552
59553 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59554 old = fc_malloc(sizeof(*old));
59555 /* temporary bitcopy just to insert correctly */
59556 *old = *real_packet;
59559 }
59560
59561 differ = (old->ngroups != real_packet->ngroups);
59562 if (differ) {
59563 BV_SET(fields, 0);
59564 }
59565
59566 differ = (old->ngroups != real_packet->ngroups);
59567 if (!differ) {
59568 int i;
59569
59570 for (i = 0; i < old->ngroups; i++) {
59571 differ = (strcmp(old->groups[i], real_packet->groups[i]) != 0);
59572 if (differ) {
59573 break;
59574 }
59575 }
59576 }
59577 if (differ) {
59578 BV_SET(fields, 1);
59579 }
59580
59581 differ = (old->ngroups != real_packet->ngroups);
59582 if (!differ) {
59583 int i;
59584
59585 for (i = 0; i < old->ngroups; i++) {
59586 differ = (old->hidden[i] != real_packet->hidden[i]);
59587 if (differ) {
59588 break;
59589 }
59590 }
59591 }
59592 if (differ) {
59593 BV_SET(fields, 2);
59594 }
59595#endif /* FREECIV_DELTA_PROTOCOL */
59596
59597#ifdef FREECIV_JSON_CONNECTION
59598 struct plocation field_addr;
59599 {
59600 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59603 }
59604#endif /* FREECIV_JSON_CONNECTION */
59605
59606#ifdef FREECIV_DELTA_PROTOCOL
59607#ifdef FREECIV_JSON_CONNECTION
59608 field_addr.name = "fields";
59609#endif /* FREECIV_JSON_CONNECTION */
59610 e = 0;
59611 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59612 if (e) {
59613 log_packet_detailed("fields bitvector error detected");
59614 }
59615
59616 if (BV_ISSET(fields, 0)) {
59617 log_packet_detailed(" field 'ngroups' has changed");
59618
59619#ifdef FREECIV_JSON_CONNECTION
59620 field_addr.name = "ngroups";
59621#endif /* FREECIV_JSON_CONNECTION */
59622 e = 0;
59623
59624 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59625
59626 if (e) {
59627 log_packet_detailed("'ngroups' field error detected");
59628 }
59629 }
59630
59631 if (BV_ISSET(fields, 1)) {
59632 log_packet_detailed(" field 'groups' has changed");
59633
59634#ifdef FREECIV_JSON_CONNECTION
59635 field_addr.name = "groups";
59636#endif /* FREECIV_JSON_CONNECTION */
59637 e = 0;
59638
59639 {
59640 int i;
59641
59642#ifdef FREECIV_JSON_CONNECTION
59643 /* Create the array. */
59644 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59645
59646 /* Enter array. */
59647 field_addr.sub_location = plocation_elem_new(0);
59648#endif /* FREECIV_JSON_CONNECTION */
59649
59650 for (i = 0; i < real_packet->ngroups; i++) {
59651#ifdef FREECIV_JSON_CONNECTION
59652 /* Next array element. */
59653 field_addr.sub_location->number = i;
59654#endif /* FREECIV_JSON_CONNECTION */
59655
59656 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59657 }
59658
59659#ifdef FREECIV_JSON_CONNECTION
59660 /* Exit array. */
59661 FC_FREE(field_addr.sub_location);
59662#endif /* FREECIV_JSON_CONNECTION */
59663 }
59664
59665 if (e) {
59666 log_packet_detailed("'groups' field error detected");
59667 }
59668 }
59669
59670 if (BV_ISSET(fields, 2)) {
59671 log_packet_detailed(" field 'hidden' has changed");
59672
59673#ifdef FREECIV_JSON_CONNECTION
59674 field_addr.name = "hidden";
59675#endif /* FREECIV_JSON_CONNECTION */
59676 e = 0;
59677
59678 {
59679 int i;
59680
59681#ifdef FREECIV_JSON_CONNECTION
59682 /* Create the array. */
59683 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59684
59685 /* Enter array. */
59686 field_addr.sub_location = plocation_elem_new(0);
59687#endif /* FREECIV_JSON_CONNECTION */
59688
59689 for (i = 0; i < real_packet->ngroups; i++) {
59690#ifdef FREECIV_JSON_CONNECTION
59691 /* Next array element. */
59692 field_addr.sub_location->number = i;
59693#endif /* FREECIV_JSON_CONNECTION */
59694
59695 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59696 }
59697
59698#ifdef FREECIV_JSON_CONNECTION
59699 /* Exit array. */
59700 FC_FREE(field_addr.sub_location);
59701#endif /* FREECIV_JSON_CONNECTION */
59702 }
59703
59704 if (e) {
59705 log_packet_detailed("'hidden' field error detected");
59706 }
59707 }
59708
59709 *old = *real_packet;
59710
59711#else /* FREECIV_DELTA_PROTOCOL */
59712#ifdef FREECIV_JSON_CONNECTION
59713 field_addr.name = "ngroups";
59714#endif /* FREECIV_JSON_CONNECTION */
59715 e = 0;
59716
59717 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59718
59719 if (e) {
59720 log_packet_detailed("'ngroups' field error detected");
59721 }
59722
59723#ifdef FREECIV_JSON_CONNECTION
59724 field_addr.name = "groups";
59725#endif /* FREECIV_JSON_CONNECTION */
59726 e = 0;
59727
59728 {
59729 int i;
59730
59731#ifdef FREECIV_JSON_CONNECTION
59732 /* Create the array. */
59733 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59734
59735 /* Enter array. */
59736 field_addr.sub_location = plocation_elem_new(0);
59737#endif /* FREECIV_JSON_CONNECTION */
59738
59739 for (i = 0; i < real_packet->ngroups; i++) {
59740#ifdef FREECIV_JSON_CONNECTION
59741 /* Next array element. */
59742 field_addr.sub_location->number = i;
59743#endif /* FREECIV_JSON_CONNECTION */
59744
59745 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59746 }
59747
59748#ifdef FREECIV_JSON_CONNECTION
59749 /* Exit array. */
59750 FC_FREE(field_addr.sub_location);
59751#endif /* FREECIV_JSON_CONNECTION */
59752 }
59753
59754 if (e) {
59755 log_packet_detailed("'groups' field error detected");
59756 }
59757
59758#ifdef FREECIV_JSON_CONNECTION
59759 field_addr.name = "hidden";
59760#endif /* FREECIV_JSON_CONNECTION */
59761 e = 0;
59762
59763 {
59764 int i;
59765
59766#ifdef FREECIV_JSON_CONNECTION
59767 /* Create the array. */
59768 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59769
59770 /* Enter array. */
59771 field_addr.sub_location = plocation_elem_new(0);
59772#endif /* FREECIV_JSON_CONNECTION */
59773
59774 for (i = 0; i < real_packet->ngroups; i++) {
59775#ifdef FREECIV_JSON_CONNECTION
59776 /* Next array element. */
59777 field_addr.sub_location->number = i;
59778#endif /* FREECIV_JSON_CONNECTION */
59779
59780 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59781 }
59782
59783#ifdef FREECIV_JSON_CONNECTION
59784 /* Exit array. */
59785 FC_FREE(field_addr.sub_location);
59786#endif /* FREECIV_JSON_CONNECTION */
59787 }
59788
59789 if (e) {
59790 log_packet_detailed("'hidden' field error detected");
59791 }
59792#endif /* FREECIV_DELTA_PROTOCOL */
59793
59795}
59796
59798{
59799 if (!pc->used) {
59800 log_error("WARNING: trying to send data to the closed connection %s",
59802 return -1;
59803 }
59804 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet != nullptr, -1,
59805 "Handler for PACKET_RULESET_NATION_GROUPS not installed");
59806 return pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet(pc, packet);
59807}
59808
59815
59816static inline void init_packet_ruleset_nation(struct packet_ruleset_nation *packet)
59817{
59818 memset(packet, 0, sizeof(*packet));
59819}
59820
59821#define free_packet_ruleset_nation(_packet) (void) 0
59822#define destroy_packet_ruleset_nation free
59823
59824#ifdef FREECIV_DELTA_PROTOCOL
59826{
59827 const struct packet_ruleset_nation *key = (const struct packet_ruleset_nation *) vkey;
59828 genhash_val_t result = 0;
59829
59830 result += key->id;
59831
59832 result &= 0xFFFFFFFF;
59833 return result;
59834}
59835
59836static bool cmp_packet_ruleset_nation_100(const void *vkey1, const void *vkey2)
59837{
59838 const struct packet_ruleset_nation *old = (const struct packet_ruleset_nation *) vkey1;
59839 const struct packet_ruleset_nation *real_packet = (const struct packet_ruleset_nation *) vkey2;
59840 bool differ;
59841
59842 differ = (old->id != real_packet->id);
59843
59844 return !differ;
59845}
59847#endif /* FREECIV_DELTA_PROTOCOL */
59848
59850{
59851#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation(_packet)
59853
59854#ifdef FREECIV_JSON_CONNECTION
59855 struct plocation field_addr;
59856 {
59857 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59860 }
59861#endif /* FREECIV_JSON_CONNECTION */
59862
59863#ifdef FREECIV_JSON_CONNECTION
59864 field_addr.name = "id";
59865#endif /* FREECIV_JSON_CONNECTION */
59866
59867 {
59868 int readin;
59869
59870 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
59872 }
59873 real_packet->id = readin;
59874 }
59875
59876 log_packet_detailed("packet_ruleset_nation_100: got info about (%d)",
59877 real_packet->id);
59878
59879#ifdef FREECIV_DELTA_PROTOCOL
59881 struct packet_ruleset_nation *old;
59882 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION;
59883
59884 if (nullptr == *hash) {
59886 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
59887 }
59888
59889 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59890 *real_packet = *old;
59891 } else {
59892 /* packet is already initialized empty */
59893 log_packet_detailed(" no old info");
59894 }
59895
59896#ifdef FREECIV_JSON_CONNECTION
59897 field_addr.name = "fields";
59898#endif /* FREECIV_JSON_CONNECTION */
59899 DIO_BV_GET(&din, &field_addr, fields);
59900
59901 if (BV_ISSET(fields, 0)) {
59902 log_packet_detailed(" got field 'translation_domain'");
59903
59904#ifdef FREECIV_JSON_CONNECTION
59905 field_addr.name = "translation_domain";
59906#endif /* FREECIV_JSON_CONNECTION */
59907
59908 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
59909 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
59910 }
59911 }
59912
59913 if (BV_ISSET(fields, 1)) {
59914 log_packet_detailed(" got field 'adjective'");
59915
59916#ifdef FREECIV_JSON_CONNECTION
59917 field_addr.name = "adjective";
59918#endif /* FREECIV_JSON_CONNECTION */
59919
59920 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
59921 RECEIVE_PACKET_FIELD_ERROR(adjective);
59922 }
59923 }
59924
59925 if (BV_ISSET(fields, 2)) {
59926 log_packet_detailed(" got field 'rule_name'");
59927
59928#ifdef FREECIV_JSON_CONNECTION
59929 field_addr.name = "rule_name";
59930#endif /* FREECIV_JSON_CONNECTION */
59931
59932 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59933 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59934 }
59935 }
59936
59937 if (BV_ISSET(fields, 3)) {
59938 log_packet_detailed(" got field 'noun_plural'");
59939
59940#ifdef FREECIV_JSON_CONNECTION
59941 field_addr.name = "noun_plural";
59942#endif /* FREECIV_JSON_CONNECTION */
59943
59944 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
59945 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
59946 }
59947 }
59948
59949 if (BV_ISSET(fields, 4)) {
59950 log_packet_detailed(" got field 'graphic_str'");
59951
59952#ifdef FREECIV_JSON_CONNECTION
59953 field_addr.name = "graphic_str";
59954#endif /* FREECIV_JSON_CONNECTION */
59955
59956 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59957 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59958 }
59959 }
59960
59961 if (BV_ISSET(fields, 5)) {
59962 log_packet_detailed(" got field 'graphic_alt'");
59963
59964#ifdef FREECIV_JSON_CONNECTION
59965 field_addr.name = "graphic_alt";
59966#endif /* FREECIV_JSON_CONNECTION */
59967
59968 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59969 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59970 }
59971 }
59972
59973 if (BV_ISSET(fields, 6)) {
59974 log_packet_detailed(" got field 'legend'");
59975
59976#ifdef FREECIV_JSON_CONNECTION
59977 field_addr.name = "legend";
59978#endif /* FREECIV_JSON_CONNECTION */
59979
59980 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
59982 }
59983 }
59984
59985 if (BV_ISSET(fields, 7)) {
59986 log_packet_detailed(" got field 'style'");
59987
59988#ifdef FREECIV_JSON_CONNECTION
59989 field_addr.name = "style";
59990#endif /* FREECIV_JSON_CONNECTION */
59991
59992 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
59994 }
59995 }
59996
59997 if (BV_ISSET(fields, 8)) {
59998 log_packet_detailed(" got field 'leader_count'");
59999
60000#ifdef FREECIV_JSON_CONNECTION
60001 field_addr.name = "leader_count";
60002#endif /* FREECIV_JSON_CONNECTION */
60003
60004 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
60005 RECEIVE_PACKET_FIELD_ERROR(leader_count);
60006 }
60007 }
60008
60009 if (BV_ISSET(fields, 9)) {
60010 log_packet_detailed(" got field 'leader_name'");
60011
60012#ifdef FREECIV_JSON_CONNECTION
60013 field_addr.name = "leader_name";
60014#endif /* FREECIV_JSON_CONNECTION */
60015
60016 {
60017 int i;
60018
60019 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60020 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
60021 }
60022
60023#ifdef FREECIV_JSON_CONNECTION
60024 /* Enter array. */
60025 field_addr.sub_location = plocation_elem_new(0);
60026#endif /* FREECIV_JSON_CONNECTION */
60027
60028 for (i = 0; i < real_packet->leader_count; i++) {
60029#ifdef FREECIV_JSON_CONNECTION
60030 /* Next array element */
60031 field_addr.sub_location->number = i;
60032#endif /* FREECIV_JSON_CONNECTION */
60033
60034 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
60036 }
60037 }
60038
60039#ifdef FREECIV_JSON_CONNECTION
60040 /* Exit array. */
60041 FC_FREE(field_addr.sub_location);
60042#endif /* FREECIV_JSON_CONNECTION */
60043 }
60044 }
60045
60046 if (BV_ISSET(fields, 10)) {
60047 log_packet_detailed(" got field 'leader_is_male'");
60048
60049#ifdef FREECIV_JSON_CONNECTION
60050 field_addr.name = "leader_is_male";
60051#endif /* FREECIV_JSON_CONNECTION */
60052
60053 {
60054 int i;
60055
60056 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60057 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
60058 }
60059
60060#ifdef FREECIV_JSON_CONNECTION
60061 /* Enter array. */
60062 field_addr.sub_location = plocation_elem_new(0);
60063#endif /* FREECIV_JSON_CONNECTION */
60064
60065 for (i = 0; i < real_packet->leader_count; i++) {
60066#ifdef FREECIV_JSON_CONNECTION
60067 /* Next array element */
60068 field_addr.sub_location->number = i;
60069#endif /* FREECIV_JSON_CONNECTION */
60070
60071 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
60072 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
60073 }
60074 }
60075
60076#ifdef FREECIV_JSON_CONNECTION
60077 /* Exit array. */
60078 FC_FREE(field_addr.sub_location);
60079#endif /* FREECIV_JSON_CONNECTION */
60080 }
60081 }
60082
60083 real_packet->is_playable = BV_ISSET(fields, 11);
60084
60085 if (BV_ISSET(fields, 12)) {
60086 log_packet_detailed(" got field 'barbarian_type'");
60087
60088#ifdef FREECIV_JSON_CONNECTION
60089 field_addr.name = "barbarian_type";
60090#endif /* FREECIV_JSON_CONNECTION */
60091
60092 {
60093 int readin;
60094
60095 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60096 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
60097 }
60098 real_packet->barbarian_type = readin;
60099 }
60100 }
60101
60102 if (BV_ISSET(fields, 13)) {
60103 log_packet_detailed(" got field 'nsets'");
60104
60105#ifdef FREECIV_JSON_CONNECTION
60106 field_addr.name = "nsets";
60107#endif /* FREECIV_JSON_CONNECTION */
60108
60109 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
60111 }
60112 }
60113
60114 if (BV_ISSET(fields, 14)) {
60115 log_packet_detailed(" got field 'sets'");
60116
60117#ifdef FREECIV_JSON_CONNECTION
60118 field_addr.name = "sets";
60119#endif /* FREECIV_JSON_CONNECTION */
60120
60121 {
60122 int i;
60123
60124 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
60125 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
60126 }
60127
60128#ifdef FREECIV_JSON_CONNECTION
60129 /* Enter array. */
60130 field_addr.sub_location = plocation_elem_new(0);
60131#endif /* FREECIV_JSON_CONNECTION */
60132
60133 for (i = 0; i < real_packet->nsets; i++) {
60134#ifdef FREECIV_JSON_CONNECTION
60135 /* Next array element */
60136 field_addr.sub_location->number = i;
60137#endif /* FREECIV_JSON_CONNECTION */
60138
60139 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
60141 }
60142 }
60143
60144#ifdef FREECIV_JSON_CONNECTION
60145 /* Exit array. */
60146 FC_FREE(field_addr.sub_location);
60147#endif /* FREECIV_JSON_CONNECTION */
60148 }
60149 }
60150
60151 if (BV_ISSET(fields, 15)) {
60152 log_packet_detailed(" got field 'ngroups'");
60153
60154#ifdef FREECIV_JSON_CONNECTION
60155 field_addr.name = "ngroups";
60156#endif /* FREECIV_JSON_CONNECTION */
60157
60158 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
60160 }
60161 }
60162
60163 if (BV_ISSET(fields, 16)) {
60164 log_packet_detailed(" got field 'groups'");
60165
60166#ifdef FREECIV_JSON_CONNECTION
60167 field_addr.name = "groups";
60168#endif /* FREECIV_JSON_CONNECTION */
60169
60170 {
60171 int i;
60172
60173 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
60174 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
60175 }
60176
60177#ifdef FREECIV_JSON_CONNECTION
60178 /* Enter array. */
60179 field_addr.sub_location = plocation_elem_new(0);
60180#endif /* FREECIV_JSON_CONNECTION */
60181
60182 for (i = 0; i < real_packet->ngroups; i++) {
60183#ifdef FREECIV_JSON_CONNECTION
60184 /* Next array element */
60185 field_addr.sub_location->number = i;
60186#endif /* FREECIV_JSON_CONNECTION */
60187
60188 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
60190 }
60191 }
60192
60193#ifdef FREECIV_JSON_CONNECTION
60194 /* Exit array. */
60195 FC_FREE(field_addr.sub_location);
60196#endif /* FREECIV_JSON_CONNECTION */
60197 }
60198 }
60199
60200 if (BV_ISSET(fields, 17)) {
60201 log_packet_detailed(" got field 'init_government_id'");
60202
60203#ifdef FREECIV_JSON_CONNECTION
60204 field_addr.name = "init_government_id";
60205#endif /* FREECIV_JSON_CONNECTION */
60206
60207 {
60208 int readin;
60209
60210 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
60211 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
60212 }
60213 real_packet->init_government_id = readin;
60214 }
60215 }
60216
60217 if (BV_ISSET(fields, 18)) {
60218 log_packet_detailed(" got field 'init_techs_count'");
60219
60220#ifdef FREECIV_JSON_CONNECTION
60221 field_addr.name = "init_techs_count";
60222#endif /* FREECIV_JSON_CONNECTION */
60223
60224 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
60225 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
60226 }
60227 }
60228
60229 if (BV_ISSET(fields, 19)) {
60230 log_packet_detailed(" got field 'init_techs'");
60231
60232#ifdef FREECIV_JSON_CONNECTION
60233 field_addr.name = "init_techs";
60234#endif /* FREECIV_JSON_CONNECTION */
60235
60236 {
60237 int i;
60238
60239 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
60240 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
60241 }
60242
60243#ifdef FREECIV_JSON_CONNECTION
60244 /* Enter array. */
60245 field_addr.sub_location = plocation_elem_new(0);
60246#endif /* FREECIV_JSON_CONNECTION */
60247
60248 for (i = 0; i < real_packet->init_techs_count; i++) {
60249#ifdef FREECIV_JSON_CONNECTION
60250 /* Next array element */
60251 field_addr.sub_location->number = i;
60252#endif /* FREECIV_JSON_CONNECTION */
60253
60254 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
60255 RECEIVE_PACKET_FIELD_ERROR(init_techs);
60256 }
60257 }
60258
60259#ifdef FREECIV_JSON_CONNECTION
60260 /* Exit array. */
60261 FC_FREE(field_addr.sub_location);
60262#endif /* FREECIV_JSON_CONNECTION */
60263 }
60264 }
60265
60266 if (BV_ISSET(fields, 20)) {
60267 log_packet_detailed(" got field 'init_units_count'");
60268
60269#ifdef FREECIV_JSON_CONNECTION
60270 field_addr.name = "init_units_count";
60271#endif /* FREECIV_JSON_CONNECTION */
60272
60273 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
60274 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
60275 }
60276 }
60277
60278 if (BV_ISSET(fields, 21)) {
60279 log_packet_detailed(" got field 'init_units'");
60280
60281#ifdef FREECIV_JSON_CONNECTION
60282 field_addr.name = "init_units";
60283#endif /* FREECIV_JSON_CONNECTION */
60284
60285 {
60286 int i;
60287
60288 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
60289 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
60290 }
60291
60292#ifdef FREECIV_JSON_CONNECTION
60293 /* Enter array. */
60294 field_addr.sub_location = plocation_elem_new(0);
60295#endif /* FREECIV_JSON_CONNECTION */
60296
60297 for (i = 0; i < real_packet->init_units_count; i++) {
60298#ifdef FREECIV_JSON_CONNECTION
60299 /* Next array element */
60300 field_addr.sub_location->number = i;
60301#endif /* FREECIV_JSON_CONNECTION */
60302
60303 {
60304 int readin;
60305
60306 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
60307 RECEIVE_PACKET_FIELD_ERROR(init_units);
60308 }
60309 real_packet->init_units[i] = readin;
60310 }
60311 }
60312
60313#ifdef FREECIV_JSON_CONNECTION
60314 /* Exit array. */
60315 FC_FREE(field_addr.sub_location);
60316#endif /* FREECIV_JSON_CONNECTION */
60317 }
60318 }
60319
60320 if (BV_ISSET(fields, 22)) {
60321 log_packet_detailed(" got field 'init_buildings_count'");
60322
60323#ifdef FREECIV_JSON_CONNECTION
60324 field_addr.name = "init_buildings_count";
60325#endif /* FREECIV_JSON_CONNECTION */
60326
60327 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
60328 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
60329 }
60330 }
60331
60332 if (BV_ISSET(fields, 23)) {
60333 log_packet_detailed(" got field 'init_buildings'");
60334
60335#ifdef FREECIV_JSON_CONNECTION
60336 field_addr.name = "init_buildings";
60337#endif /* FREECIV_JSON_CONNECTION */
60338
60339 {
60340 int i;
60341
60342 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
60343 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
60344 }
60345
60346#ifdef FREECIV_JSON_CONNECTION
60347 /* Enter array. */
60348 field_addr.sub_location = plocation_elem_new(0);
60349#endif /* FREECIV_JSON_CONNECTION */
60350
60351 for (i = 0; i < real_packet->init_buildings_count; i++) {
60352#ifdef FREECIV_JSON_CONNECTION
60353 /* Next array element */
60354 field_addr.sub_location->number = i;
60355#endif /* FREECIV_JSON_CONNECTION */
60356
60357 {
60358 int readin;
60359
60360 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60361 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
60362 }
60363 real_packet->init_buildings[i] = readin;
60364 }
60365 }
60366
60367#ifdef FREECIV_JSON_CONNECTION
60368 /* Exit array. */
60369 FC_FREE(field_addr.sub_location);
60370#endif /* FREECIV_JSON_CONNECTION */
60371 }
60372 }
60373
60374 if (nullptr == old) {
60375 old = fc_malloc(sizeof(*old));
60377 *old = *real_packet;
60379 } else {
60380 *old = *real_packet;
60381 }
60382
60383#else /* FREECIV_DELTA_PROTOCOL */
60384#ifdef FREECIV_JSON_CONNECTION
60385 field_addr.name = "translation_domain";
60386#endif /* FREECIV_JSON_CONNECTION */
60387
60388 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
60389 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
60390 }
60391
60392#ifdef FREECIV_JSON_CONNECTION
60393 field_addr.name = "adjective";
60394#endif /* FREECIV_JSON_CONNECTION */
60395
60396 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
60397 RECEIVE_PACKET_FIELD_ERROR(adjective);
60398 }
60399
60400#ifdef FREECIV_JSON_CONNECTION
60401 field_addr.name = "rule_name";
60402#endif /* FREECIV_JSON_CONNECTION */
60403
60404 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
60405 RECEIVE_PACKET_FIELD_ERROR(rule_name);
60406 }
60407
60408#ifdef FREECIV_JSON_CONNECTION
60409 field_addr.name = "noun_plural";
60410#endif /* FREECIV_JSON_CONNECTION */
60411
60412 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
60413 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
60414 }
60415
60416#ifdef FREECIV_JSON_CONNECTION
60417 field_addr.name = "graphic_str";
60418#endif /* FREECIV_JSON_CONNECTION */
60419
60420 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
60421 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
60422 }
60423
60424#ifdef FREECIV_JSON_CONNECTION
60425 field_addr.name = "graphic_alt";
60426#endif /* FREECIV_JSON_CONNECTION */
60427
60428 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
60429 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
60430 }
60431
60432#ifdef FREECIV_JSON_CONNECTION
60433 field_addr.name = "legend";
60434#endif /* FREECIV_JSON_CONNECTION */
60435
60436 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
60438 }
60439
60440#ifdef FREECIV_JSON_CONNECTION
60441 field_addr.name = "style";
60442#endif /* FREECIV_JSON_CONNECTION */
60443
60444 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
60446 }
60447
60448#ifdef FREECIV_JSON_CONNECTION
60449 field_addr.name = "leader_count";
60450#endif /* FREECIV_JSON_CONNECTION */
60451
60452 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
60453 RECEIVE_PACKET_FIELD_ERROR(leader_count);
60454 }
60455
60456#ifdef FREECIV_JSON_CONNECTION
60457 field_addr.name = "leader_name";
60458#endif /* FREECIV_JSON_CONNECTION */
60459
60460 {
60461 int i;
60462
60463 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60464 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
60465 }
60466
60467#ifdef FREECIV_JSON_CONNECTION
60468 /* Enter array. */
60469 field_addr.sub_location = plocation_elem_new(0);
60470#endif /* FREECIV_JSON_CONNECTION */
60471
60472 for (i = 0; i < real_packet->leader_count; i++) {
60473#ifdef FREECIV_JSON_CONNECTION
60474 /* Next array element */
60475 field_addr.sub_location->number = i;
60476#endif /* FREECIV_JSON_CONNECTION */
60477
60478 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
60480 }
60481 }
60482
60483#ifdef FREECIV_JSON_CONNECTION
60484 /* Exit array. */
60485 FC_FREE(field_addr.sub_location);
60486#endif /* FREECIV_JSON_CONNECTION */
60487 }
60488
60489#ifdef FREECIV_JSON_CONNECTION
60490 field_addr.name = "leader_is_male";
60491#endif /* FREECIV_JSON_CONNECTION */
60492
60493 {
60494 int i;
60495
60496 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60497 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
60498 }
60499
60500#ifdef FREECIV_JSON_CONNECTION
60501 /* Enter array. */
60502 field_addr.sub_location = plocation_elem_new(0);
60503#endif /* FREECIV_JSON_CONNECTION */
60504
60505 for (i = 0; i < real_packet->leader_count; i++) {
60506#ifdef FREECIV_JSON_CONNECTION
60507 /* Next array element */
60508 field_addr.sub_location->number = i;
60509#endif /* FREECIV_JSON_CONNECTION */
60510
60511 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
60512 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
60513 }
60514 }
60515
60516#ifdef FREECIV_JSON_CONNECTION
60517 /* Exit array. */
60518 FC_FREE(field_addr.sub_location);
60519#endif /* FREECIV_JSON_CONNECTION */
60520 }
60521
60522#ifdef FREECIV_JSON_CONNECTION
60523 field_addr.name = "is_playable";
60524#endif /* FREECIV_JSON_CONNECTION */
60525
60526 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_playable)) {
60527 RECEIVE_PACKET_FIELD_ERROR(is_playable);
60528 }
60529
60530#ifdef FREECIV_JSON_CONNECTION
60531 field_addr.name = "barbarian_type";
60532#endif /* FREECIV_JSON_CONNECTION */
60533
60534 {
60535 int readin;
60536
60537 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60538 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
60539 }
60540 real_packet->barbarian_type = readin;
60541 }
60542
60543#ifdef FREECIV_JSON_CONNECTION
60544 field_addr.name = "nsets";
60545#endif /* FREECIV_JSON_CONNECTION */
60546
60547 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
60549 }
60550
60551#ifdef FREECIV_JSON_CONNECTION
60552 field_addr.name = "sets";
60553#endif /* FREECIV_JSON_CONNECTION */
60554
60555 {
60556 int i;
60557
60558 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
60559 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
60560 }
60561
60562#ifdef FREECIV_JSON_CONNECTION
60563 /* Enter array. */
60564 field_addr.sub_location = plocation_elem_new(0);
60565#endif /* FREECIV_JSON_CONNECTION */
60566
60567 for (i = 0; i < real_packet->nsets; i++) {
60568#ifdef FREECIV_JSON_CONNECTION
60569 /* Next array element */
60570 field_addr.sub_location->number = i;
60571#endif /* FREECIV_JSON_CONNECTION */
60572
60573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
60575 }
60576 }
60577
60578#ifdef FREECIV_JSON_CONNECTION
60579 /* Exit array. */
60580 FC_FREE(field_addr.sub_location);
60581#endif /* FREECIV_JSON_CONNECTION */
60582 }
60583
60584#ifdef FREECIV_JSON_CONNECTION
60585 field_addr.name = "ngroups";
60586#endif /* FREECIV_JSON_CONNECTION */
60587
60588 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
60590 }
60591
60592#ifdef FREECIV_JSON_CONNECTION
60593 field_addr.name = "groups";
60594#endif /* FREECIV_JSON_CONNECTION */
60595
60596 {
60597 int i;
60598
60599 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
60600 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
60601 }
60602
60603#ifdef FREECIV_JSON_CONNECTION
60604 /* Enter array. */
60605 field_addr.sub_location = plocation_elem_new(0);
60606#endif /* FREECIV_JSON_CONNECTION */
60607
60608 for (i = 0; i < real_packet->ngroups; i++) {
60609#ifdef FREECIV_JSON_CONNECTION
60610 /* Next array element */
60611 field_addr.sub_location->number = i;
60612#endif /* FREECIV_JSON_CONNECTION */
60613
60614 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
60616 }
60617 }
60618
60619#ifdef FREECIV_JSON_CONNECTION
60620 /* Exit array. */
60621 FC_FREE(field_addr.sub_location);
60622#endif /* FREECIV_JSON_CONNECTION */
60623 }
60624
60625#ifdef FREECIV_JSON_CONNECTION
60626 field_addr.name = "init_government_id";
60627#endif /* FREECIV_JSON_CONNECTION */
60628
60629 {
60630 int readin;
60631
60632 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
60633 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
60634 }
60635 real_packet->init_government_id = readin;
60636 }
60637
60638#ifdef FREECIV_JSON_CONNECTION
60639 field_addr.name = "init_techs_count";
60640#endif /* FREECIV_JSON_CONNECTION */
60641
60642 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
60643 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
60644 }
60645
60646#ifdef FREECIV_JSON_CONNECTION
60647 field_addr.name = "init_techs";
60648#endif /* FREECIV_JSON_CONNECTION */
60649
60650 {
60651 int i;
60652
60653 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
60654 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
60655 }
60656
60657#ifdef FREECIV_JSON_CONNECTION
60658 /* Enter array. */
60659 field_addr.sub_location = plocation_elem_new(0);
60660#endif /* FREECIV_JSON_CONNECTION */
60661
60662 for (i = 0; i < real_packet->init_techs_count; i++) {
60663#ifdef FREECIV_JSON_CONNECTION
60664 /* Next array element */
60665 field_addr.sub_location->number = i;
60666#endif /* FREECIV_JSON_CONNECTION */
60667
60668 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
60669 RECEIVE_PACKET_FIELD_ERROR(init_techs);
60670 }
60671 }
60672
60673#ifdef FREECIV_JSON_CONNECTION
60674 /* Exit array. */
60675 FC_FREE(field_addr.sub_location);
60676#endif /* FREECIV_JSON_CONNECTION */
60677 }
60678
60679#ifdef FREECIV_JSON_CONNECTION
60680 field_addr.name = "init_units_count";
60681#endif /* FREECIV_JSON_CONNECTION */
60682
60683 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
60684 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
60685 }
60686
60687#ifdef FREECIV_JSON_CONNECTION
60688 field_addr.name = "init_units";
60689#endif /* FREECIV_JSON_CONNECTION */
60690
60691 {
60692 int i;
60693
60694 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
60695 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
60696 }
60697
60698#ifdef FREECIV_JSON_CONNECTION
60699 /* Enter array. */
60700 field_addr.sub_location = plocation_elem_new(0);
60701#endif /* FREECIV_JSON_CONNECTION */
60702
60703 for (i = 0; i < real_packet->init_units_count; i++) {
60704#ifdef FREECIV_JSON_CONNECTION
60705 /* Next array element */
60706 field_addr.sub_location->number = i;
60707#endif /* FREECIV_JSON_CONNECTION */
60708
60709 {
60710 int readin;
60711
60712 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
60713 RECEIVE_PACKET_FIELD_ERROR(init_units);
60714 }
60715 real_packet->init_units[i] = readin;
60716 }
60717 }
60718
60719#ifdef FREECIV_JSON_CONNECTION
60720 /* Exit array. */
60721 FC_FREE(field_addr.sub_location);
60722#endif /* FREECIV_JSON_CONNECTION */
60723 }
60724
60725#ifdef FREECIV_JSON_CONNECTION
60726 field_addr.name = "init_buildings_count";
60727#endif /* FREECIV_JSON_CONNECTION */
60728
60729 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
60730 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
60731 }
60732
60733#ifdef FREECIV_JSON_CONNECTION
60734 field_addr.name = "init_buildings";
60735#endif /* FREECIV_JSON_CONNECTION */
60736
60737 {
60738 int i;
60739
60740 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
60741 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
60742 }
60743
60744#ifdef FREECIV_JSON_CONNECTION
60745 /* Enter array. */
60746 field_addr.sub_location = plocation_elem_new(0);
60747#endif /* FREECIV_JSON_CONNECTION */
60748
60749 for (i = 0; i < real_packet->init_buildings_count; i++) {
60750#ifdef FREECIV_JSON_CONNECTION
60751 /* Next array element */
60752 field_addr.sub_location->number = i;
60753#endif /* FREECIV_JSON_CONNECTION */
60754
60755 {
60756 int readin;
60757
60758 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60759 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
60760 }
60761 real_packet->init_buildings[i] = readin;
60762 }
60763 }
60764
60765#ifdef FREECIV_JSON_CONNECTION
60766 /* Exit array. */
60767 FC_FREE(field_addr.sub_location);
60768#endif /* FREECIV_JSON_CONNECTION */
60769 }
60770#endif /* FREECIV_DELTA_PROTOCOL */
60771
60773#undef FREE_PACKET_STRUCT
60774}
60775
60777{
60778 const struct packet_ruleset_nation *real_packet = packet;
60779 int e;
60781
60782 log_packet_detailed("packet_ruleset_nation_100: sending info about (%d)",
60783 real_packet->id);
60784
60785#ifdef FREECIV_DELTA_PROTOCOL
60787 struct packet_ruleset_nation *old;
60788 bool differ;
60789 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION;
60790
60791 if (nullptr == *hash) {
60793 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
60794 }
60795 BV_CLR_ALL(fields);
60796
60797 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
60798 old = fc_malloc(sizeof(*old));
60799 /* temporary bitcopy just to insert correctly */
60800 *old = *real_packet;
60803 }
60804
60805 differ = (strcmp(old->translation_domain, real_packet->translation_domain) != 0);
60806 if (differ) {
60807 BV_SET(fields, 0);
60808 }
60809
60810 differ = (strcmp(old->adjective, real_packet->adjective) != 0);
60811 if (differ) {
60812 BV_SET(fields, 1);
60813 }
60814
60815 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
60816 if (differ) {
60817 BV_SET(fields, 2);
60818 }
60819
60820 differ = (strcmp(old->noun_plural, real_packet->noun_plural) != 0);
60821 if (differ) {
60822 BV_SET(fields, 3);
60823 }
60824
60825 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
60826 if (differ) {
60827 BV_SET(fields, 4);
60828 }
60829
60830 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
60831 if (differ) {
60832 BV_SET(fields, 5);
60833 }
60834
60835 differ = (strcmp(old->legend, real_packet->legend) != 0);
60836 if (differ) {
60837 BV_SET(fields, 6);
60838 }
60839
60840 differ = (old->style != real_packet->style);
60841 if (differ) {
60842 BV_SET(fields, 7);
60843 }
60844
60845 differ = (old->leader_count != real_packet->leader_count);
60846 if (differ) {
60847 BV_SET(fields, 8);
60848 }
60849
60850 differ = (old->leader_count != real_packet->leader_count);
60851 if (!differ) {
60852 int i;
60853
60854 for (i = 0; i < old->leader_count; i++) {
60855 differ = (strcmp(old->leader_name[i], real_packet->leader_name[i]) != 0);
60856 if (differ) {
60857 break;
60858 }
60859 }
60860 }
60861 if (differ) {
60862 BV_SET(fields, 9);
60863 }
60864
60865 differ = (old->leader_count != real_packet->leader_count);
60866 if (!differ) {
60867 int i;
60868
60869 for (i = 0; i < old->leader_count; i++) {
60870 differ = (old->leader_is_male[i] != real_packet->leader_is_male[i]);
60871 if (differ) {
60872 break;
60873 }
60874 }
60875 }
60876 if (differ) {
60877 BV_SET(fields, 10);
60878 }
60879
60880 /* folded into head */
60881 if (real_packet->is_playable) {
60882 BV_SET(fields, 11);
60883 }
60884
60885 differ = (old->barbarian_type != real_packet->barbarian_type);
60886 if (differ) {
60887 BV_SET(fields, 12);
60888 }
60889
60890 differ = (old->nsets != real_packet->nsets);
60891 if (differ) {
60892 BV_SET(fields, 13);
60893 }
60894
60895 differ = (old->nsets != real_packet->nsets);
60896 if (!differ) {
60897 int i;
60898
60899 for (i = 0; i < old->nsets; i++) {
60900 differ = (old->sets[i] != real_packet->sets[i]);
60901 if (differ) {
60902 break;
60903 }
60904 }
60905 }
60906 if (differ) {
60907 BV_SET(fields, 14);
60908 }
60909
60910 differ = (old->ngroups != real_packet->ngroups);
60911 if (differ) {
60912 BV_SET(fields, 15);
60913 }
60914
60915 differ = (old->ngroups != real_packet->ngroups);
60916 if (!differ) {
60917 int i;
60918
60919 for (i = 0; i < old->ngroups; i++) {
60920 differ = (old->groups[i] != real_packet->groups[i]);
60921 if (differ) {
60922 break;
60923 }
60924 }
60925 }
60926 if (differ) {
60927 BV_SET(fields, 16);
60928 }
60929
60930 differ = (old->init_government_id != real_packet->init_government_id);
60931 if (differ) {
60932 BV_SET(fields, 17);
60933 }
60934
60935 differ = (old->init_techs_count != real_packet->init_techs_count);
60936 if (differ) {
60937 BV_SET(fields, 18);
60938 }
60939
60940 differ = (old->init_techs_count != real_packet->init_techs_count);
60941 if (!differ) {
60942 int i;
60943
60944 for (i = 0; i < old->init_techs_count; i++) {
60945 differ = (old->init_techs[i] != real_packet->init_techs[i]);
60946 if (differ) {
60947 break;
60948 }
60949 }
60950 }
60951 if (differ) {
60952 BV_SET(fields, 19);
60953 }
60954
60955 differ = (old->init_units_count != real_packet->init_units_count);
60956 if (differ) {
60957 BV_SET(fields, 20);
60958 }
60959
60960 differ = (old->init_units_count != real_packet->init_units_count);
60961 if (!differ) {
60962 int i;
60963
60964 for (i = 0; i < old->init_units_count; i++) {
60965 differ = (old->init_units[i] != real_packet->init_units[i]);
60966 if (differ) {
60967 break;
60968 }
60969 }
60970 }
60971 if (differ) {
60972 BV_SET(fields, 21);
60973 }
60974
60975 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60976 if (differ) {
60977 BV_SET(fields, 22);
60978 }
60979
60980 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60981 if (!differ) {
60982 int i;
60983
60984 for (i = 0; i < old->init_buildings_count; i++) {
60985 differ = (old->init_buildings[i] != real_packet->init_buildings[i]);
60986 if (differ) {
60987 break;
60988 }
60989 }
60990 }
60991 if (differ) {
60992 BV_SET(fields, 23);
60993 }
60994#endif /* FREECIV_DELTA_PROTOCOL */
60995
60996#ifdef FREECIV_JSON_CONNECTION
60997 struct plocation field_addr;
60998 {
60999 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61002 }
61003#endif /* FREECIV_JSON_CONNECTION */
61004
61005#ifdef FREECIV_JSON_CONNECTION
61006 field_addr.name = "id";
61007#endif /* FREECIV_JSON_CONNECTION */
61008 e = 0;
61009
61010 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
61011
61012 if (e) {
61013 log_packet_detailed("'id' field error detected");
61014 }
61015
61016#ifdef FREECIV_DELTA_PROTOCOL
61017#ifdef FREECIV_JSON_CONNECTION
61018 field_addr.name = "fields";
61019#endif /* FREECIV_JSON_CONNECTION */
61020 e = 0;
61021 e |= DIO_BV_PUT(&dout, &field_addr, fields);
61022 if (e) {
61023 log_packet_detailed("fields bitvector error detected");
61024 }
61025
61026 if (BV_ISSET(fields, 0)) {
61027 log_packet_detailed(" field 'translation_domain' has changed");
61028
61029#ifdef FREECIV_JSON_CONNECTION
61030 field_addr.name = "translation_domain";
61031#endif /* FREECIV_JSON_CONNECTION */
61032 e = 0;
61033
61034 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
61035
61036 if (e) {
61037 log_packet_detailed("'translation_domain' field error detected");
61038 }
61039 }
61040
61041 if (BV_ISSET(fields, 1)) {
61042 log_packet_detailed(" field 'adjective' has changed");
61043
61044#ifdef FREECIV_JSON_CONNECTION
61045 field_addr.name = "adjective";
61046#endif /* FREECIV_JSON_CONNECTION */
61047 e = 0;
61048
61049 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
61050
61051 if (e) {
61052 log_packet_detailed("'adjective' field error detected");
61053 }
61054 }
61055
61056 if (BV_ISSET(fields, 2)) {
61057 log_packet_detailed(" field 'rule_name' has changed");
61058
61059#ifdef FREECIV_JSON_CONNECTION
61060 field_addr.name = "rule_name";
61061#endif /* FREECIV_JSON_CONNECTION */
61062 e = 0;
61063
61064 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61065
61066 if (e) {
61067 log_packet_detailed("'rule_name' field error detected");
61068 }
61069 }
61070
61071 if (BV_ISSET(fields, 3)) {
61072 log_packet_detailed(" field 'noun_plural' has changed");
61073
61074#ifdef FREECIV_JSON_CONNECTION
61075 field_addr.name = "noun_plural";
61076#endif /* FREECIV_JSON_CONNECTION */
61077 e = 0;
61078
61079 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
61080
61081 if (e) {
61082 log_packet_detailed("'noun_plural' field error detected");
61083 }
61084 }
61085
61086 if (BV_ISSET(fields, 4)) {
61087 log_packet_detailed(" field 'graphic_str' has changed");
61088
61089#ifdef FREECIV_JSON_CONNECTION
61090 field_addr.name = "graphic_str";
61091#endif /* FREECIV_JSON_CONNECTION */
61092 e = 0;
61093
61094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61095
61096 if (e) {
61097 log_packet_detailed("'graphic_str' field error detected");
61098 }
61099 }
61100
61101 if (BV_ISSET(fields, 5)) {
61102 log_packet_detailed(" field 'graphic_alt' has changed");
61103
61104#ifdef FREECIV_JSON_CONNECTION
61105 field_addr.name = "graphic_alt";
61106#endif /* FREECIV_JSON_CONNECTION */
61107 e = 0;
61108
61109 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61110
61111 if (e) {
61112 log_packet_detailed("'graphic_alt' field error detected");
61113 }
61114 }
61115
61116 if (BV_ISSET(fields, 6)) {
61117 log_packet_detailed(" field 'legend' has changed");
61118
61119#ifdef FREECIV_JSON_CONNECTION
61120 field_addr.name = "legend";
61121#endif /* FREECIV_JSON_CONNECTION */
61122 e = 0;
61123
61124 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
61125
61126 if (e) {
61127 log_packet_detailed("'legend' field error detected");
61128 }
61129 }
61130
61131 if (BV_ISSET(fields, 7)) {
61132 log_packet_detailed(" field 'style' has changed");
61133
61134#ifdef FREECIV_JSON_CONNECTION
61135 field_addr.name = "style";
61136#endif /* FREECIV_JSON_CONNECTION */
61137 e = 0;
61138
61139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
61140
61141 if (e) {
61142 log_packet_detailed("'style' field error detected");
61143 }
61144 }
61145
61146 if (BV_ISSET(fields, 8)) {
61147 log_packet_detailed(" field 'leader_count' has changed");
61148
61149#ifdef FREECIV_JSON_CONNECTION
61150 field_addr.name = "leader_count";
61151#endif /* FREECIV_JSON_CONNECTION */
61152 e = 0;
61153
61154 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
61155
61156 if (e) {
61157 log_packet_detailed("'leader_count' field error detected");
61158 }
61159 }
61160
61161 if (BV_ISSET(fields, 9)) {
61162 log_packet_detailed(" field 'leader_name' has changed");
61163
61164#ifdef FREECIV_JSON_CONNECTION
61165 field_addr.name = "leader_name";
61166#endif /* FREECIV_JSON_CONNECTION */
61167 e = 0;
61168
61169 {
61170 int i;
61171
61172#ifdef FREECIV_JSON_CONNECTION
61173 /* Create the array. */
61174 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61175
61176 /* Enter array. */
61177 field_addr.sub_location = plocation_elem_new(0);
61178#endif /* FREECIV_JSON_CONNECTION */
61179
61180 for (i = 0; i < real_packet->leader_count; i++) {
61181#ifdef FREECIV_JSON_CONNECTION
61182 /* Next array element. */
61183 field_addr.sub_location->number = i;
61184#endif /* FREECIV_JSON_CONNECTION */
61185
61186 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
61187 }
61188
61189#ifdef FREECIV_JSON_CONNECTION
61190 /* Exit array. */
61191 FC_FREE(field_addr.sub_location);
61192#endif /* FREECIV_JSON_CONNECTION */
61193 }
61194
61195 if (e) {
61196 log_packet_detailed("'leader_name' field error detected");
61197 }
61198 }
61199
61200 if (BV_ISSET(fields, 10)) {
61201 log_packet_detailed(" field 'leader_is_male' has changed");
61202
61203#ifdef FREECIV_JSON_CONNECTION
61204 field_addr.name = "leader_is_male";
61205#endif /* FREECIV_JSON_CONNECTION */
61206 e = 0;
61207
61208 {
61209 int i;
61210
61211#ifdef FREECIV_JSON_CONNECTION
61212 /* Create the array. */
61213 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61214
61215 /* Enter array. */
61216 field_addr.sub_location = plocation_elem_new(0);
61217#endif /* FREECIV_JSON_CONNECTION */
61218
61219 for (i = 0; i < real_packet->leader_count; i++) {
61220#ifdef FREECIV_JSON_CONNECTION
61221 /* Next array element. */
61222 field_addr.sub_location->number = i;
61223#endif /* FREECIV_JSON_CONNECTION */
61224
61225 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
61226 }
61227
61228#ifdef FREECIV_JSON_CONNECTION
61229 /* Exit array. */
61230 FC_FREE(field_addr.sub_location);
61231#endif /* FREECIV_JSON_CONNECTION */
61232 }
61233
61234 if (e) {
61235 log_packet_detailed("'leader_is_male' field error detected");
61236 }
61237 }
61238
61239 /* field 11 is folded into the header */
61240
61241 if (BV_ISSET(fields, 12)) {
61242 log_packet_detailed(" field 'barbarian_type' has changed");
61243
61244#ifdef FREECIV_JSON_CONNECTION
61245 field_addr.name = "barbarian_type";
61246#endif /* FREECIV_JSON_CONNECTION */
61247 e = 0;
61248
61249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
61250
61251 if (e) {
61252 log_packet_detailed("'barbarian_type' field error detected");
61253 }
61254 }
61255
61256 if (BV_ISSET(fields, 13)) {
61257 log_packet_detailed(" field 'nsets' has changed");
61258
61259#ifdef FREECIV_JSON_CONNECTION
61260 field_addr.name = "nsets";
61261#endif /* FREECIV_JSON_CONNECTION */
61262 e = 0;
61263
61264 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
61265
61266 if (e) {
61267 log_packet_detailed("'nsets' field error detected");
61268 }
61269 }
61270
61271 if (BV_ISSET(fields, 14)) {
61272 log_packet_detailed(" field 'sets' has changed");
61273
61274#ifdef FREECIV_JSON_CONNECTION
61275 field_addr.name = "sets";
61276#endif /* FREECIV_JSON_CONNECTION */
61277 e = 0;
61278
61279 {
61280 int i;
61281
61282#ifdef FREECIV_JSON_CONNECTION
61283 /* Create the array. */
61284 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
61285
61286 /* Enter array. */
61287 field_addr.sub_location = plocation_elem_new(0);
61288#endif /* FREECIV_JSON_CONNECTION */
61289
61290 for (i = 0; i < real_packet->nsets; i++) {
61291#ifdef FREECIV_JSON_CONNECTION
61292 /* Next array element. */
61293 field_addr.sub_location->number = i;
61294#endif /* FREECIV_JSON_CONNECTION */
61295
61296 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
61297 }
61298
61299#ifdef FREECIV_JSON_CONNECTION
61300 /* Exit array. */
61301 FC_FREE(field_addr.sub_location);
61302#endif /* FREECIV_JSON_CONNECTION */
61303 }
61304
61305 if (e) {
61306 log_packet_detailed("'sets' field error detected");
61307 }
61308 }
61309
61310 if (BV_ISSET(fields, 15)) {
61311 log_packet_detailed(" field 'ngroups' has changed");
61312
61313#ifdef FREECIV_JSON_CONNECTION
61314 field_addr.name = "ngroups";
61315#endif /* FREECIV_JSON_CONNECTION */
61316 e = 0;
61317
61318 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
61319
61320 if (e) {
61321 log_packet_detailed("'ngroups' field error detected");
61322 }
61323 }
61324
61325 if (BV_ISSET(fields, 16)) {
61326 log_packet_detailed(" field 'groups' has changed");
61327
61328#ifdef FREECIV_JSON_CONNECTION
61329 field_addr.name = "groups";
61330#endif /* FREECIV_JSON_CONNECTION */
61331 e = 0;
61332
61333 {
61334 int i;
61335
61336#ifdef FREECIV_JSON_CONNECTION
61337 /* Create the array. */
61338 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
61339
61340 /* Enter array. */
61341 field_addr.sub_location = plocation_elem_new(0);
61342#endif /* FREECIV_JSON_CONNECTION */
61343
61344 for (i = 0; i < real_packet->ngroups; i++) {
61345#ifdef FREECIV_JSON_CONNECTION
61346 /* Next array element. */
61347 field_addr.sub_location->number = i;
61348#endif /* FREECIV_JSON_CONNECTION */
61349
61350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
61351 }
61352
61353#ifdef FREECIV_JSON_CONNECTION
61354 /* Exit array. */
61355 FC_FREE(field_addr.sub_location);
61356#endif /* FREECIV_JSON_CONNECTION */
61357 }
61358
61359 if (e) {
61360 log_packet_detailed("'groups' field error detected");
61361 }
61362 }
61363
61364 if (BV_ISSET(fields, 17)) {
61365 log_packet_detailed(" field 'init_government_id' has changed");
61366
61367#ifdef FREECIV_JSON_CONNECTION
61368 field_addr.name = "init_government_id";
61369#endif /* FREECIV_JSON_CONNECTION */
61370 e = 0;
61371
61372 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
61373
61374 if (e) {
61375 log_packet_detailed("'init_government_id' field error detected");
61376 }
61377 }
61378
61379 if (BV_ISSET(fields, 18)) {
61380 log_packet_detailed(" field 'init_techs_count' has changed");
61381
61382#ifdef FREECIV_JSON_CONNECTION
61383 field_addr.name = "init_techs_count";
61384#endif /* FREECIV_JSON_CONNECTION */
61385 e = 0;
61386
61387 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
61388
61389 if (e) {
61390 log_packet_detailed("'init_techs_count' field error detected");
61391 }
61392 }
61393
61394 if (BV_ISSET(fields, 19)) {
61395 log_packet_detailed(" field 'init_techs' has changed");
61396
61397#ifdef FREECIV_JSON_CONNECTION
61398 field_addr.name = "init_techs";
61399#endif /* FREECIV_JSON_CONNECTION */
61400 e = 0;
61401
61402 {
61403 int i;
61404
61405#ifdef FREECIV_JSON_CONNECTION
61406 /* Create the array. */
61407 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
61408
61409 /* Enter array. */
61410 field_addr.sub_location = plocation_elem_new(0);
61411#endif /* FREECIV_JSON_CONNECTION */
61412
61413 for (i = 0; i < real_packet->init_techs_count; i++) {
61414#ifdef FREECIV_JSON_CONNECTION
61415 /* Next array element. */
61416 field_addr.sub_location->number = i;
61417#endif /* FREECIV_JSON_CONNECTION */
61418
61419 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
61420 }
61421
61422#ifdef FREECIV_JSON_CONNECTION
61423 /* Exit array. */
61424 FC_FREE(field_addr.sub_location);
61425#endif /* FREECIV_JSON_CONNECTION */
61426 }
61427
61428 if (e) {
61429 log_packet_detailed("'init_techs' field error detected");
61430 }
61431 }
61432
61433 if (BV_ISSET(fields, 20)) {
61434 log_packet_detailed(" field 'init_units_count' has changed");
61435
61436#ifdef FREECIV_JSON_CONNECTION
61437 field_addr.name = "init_units_count";
61438#endif /* FREECIV_JSON_CONNECTION */
61439 e = 0;
61440
61441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
61442
61443 if (e) {
61444 log_packet_detailed("'init_units_count' field error detected");
61445 }
61446 }
61447
61448 if (BV_ISSET(fields, 21)) {
61449 log_packet_detailed(" field 'init_units' has changed");
61450
61451#ifdef FREECIV_JSON_CONNECTION
61452 field_addr.name = "init_units";
61453#endif /* FREECIV_JSON_CONNECTION */
61454 e = 0;
61455
61456 {
61457 int i;
61458
61459#ifdef FREECIV_JSON_CONNECTION
61460 /* Create the array. */
61461 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
61462
61463 /* Enter array. */
61464 field_addr.sub_location = plocation_elem_new(0);
61465#endif /* FREECIV_JSON_CONNECTION */
61466
61467 for (i = 0; i < real_packet->init_units_count; i++) {
61468#ifdef FREECIV_JSON_CONNECTION
61469 /* Next array element. */
61470 field_addr.sub_location->number = i;
61471#endif /* FREECIV_JSON_CONNECTION */
61472
61473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
61474 }
61475
61476#ifdef FREECIV_JSON_CONNECTION
61477 /* Exit array. */
61478 FC_FREE(field_addr.sub_location);
61479#endif /* FREECIV_JSON_CONNECTION */
61480 }
61481
61482 if (e) {
61483 log_packet_detailed("'init_units' field error detected");
61484 }
61485 }
61486
61487 if (BV_ISSET(fields, 22)) {
61488 log_packet_detailed(" field 'init_buildings_count' has changed");
61489
61490#ifdef FREECIV_JSON_CONNECTION
61491 field_addr.name = "init_buildings_count";
61492#endif /* FREECIV_JSON_CONNECTION */
61493 e = 0;
61494
61495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61496
61497 if (e) {
61498 log_packet_detailed("'init_buildings_count' field error detected");
61499 }
61500 }
61501
61502 if (BV_ISSET(fields, 23)) {
61503 log_packet_detailed(" field 'init_buildings' has changed");
61504
61505#ifdef FREECIV_JSON_CONNECTION
61506 field_addr.name = "init_buildings";
61507#endif /* FREECIV_JSON_CONNECTION */
61508 e = 0;
61509
61510 {
61511 int i;
61512
61513#ifdef FREECIV_JSON_CONNECTION
61514 /* Create the array. */
61515 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61516
61517 /* Enter array. */
61518 field_addr.sub_location = plocation_elem_new(0);
61519#endif /* FREECIV_JSON_CONNECTION */
61520
61521 for (i = 0; i < real_packet->init_buildings_count; i++) {
61522#ifdef FREECIV_JSON_CONNECTION
61523 /* Next array element. */
61524 field_addr.sub_location->number = i;
61525#endif /* FREECIV_JSON_CONNECTION */
61526
61527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61528 }
61529
61530#ifdef FREECIV_JSON_CONNECTION
61531 /* Exit array. */
61532 FC_FREE(field_addr.sub_location);
61533#endif /* FREECIV_JSON_CONNECTION */
61534 }
61535
61536 if (e) {
61537 log_packet_detailed("'init_buildings' field error detected");
61538 }
61539 }
61540
61541 *old = *real_packet;
61542
61543#else /* FREECIV_DELTA_PROTOCOL */
61544#ifdef FREECIV_JSON_CONNECTION
61545 field_addr.name = "translation_domain";
61546#endif /* FREECIV_JSON_CONNECTION */
61547 e = 0;
61548
61549 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
61550
61551 if (e) {
61552 log_packet_detailed("'translation_domain' field error detected");
61553 }
61554
61555#ifdef FREECIV_JSON_CONNECTION
61556 field_addr.name = "adjective";
61557#endif /* FREECIV_JSON_CONNECTION */
61558 e = 0;
61559
61560 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
61561
61562 if (e) {
61563 log_packet_detailed("'adjective' field error detected");
61564 }
61565
61566#ifdef FREECIV_JSON_CONNECTION
61567 field_addr.name = "rule_name";
61568#endif /* FREECIV_JSON_CONNECTION */
61569 e = 0;
61570
61571 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61572
61573 if (e) {
61574 log_packet_detailed("'rule_name' field error detected");
61575 }
61576
61577#ifdef FREECIV_JSON_CONNECTION
61578 field_addr.name = "noun_plural";
61579#endif /* FREECIV_JSON_CONNECTION */
61580 e = 0;
61581
61582 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
61583
61584 if (e) {
61585 log_packet_detailed("'noun_plural' field error detected");
61586 }
61587
61588#ifdef FREECIV_JSON_CONNECTION
61589 field_addr.name = "graphic_str";
61590#endif /* FREECIV_JSON_CONNECTION */
61591 e = 0;
61592
61593 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61594
61595 if (e) {
61596 log_packet_detailed("'graphic_str' field error detected");
61597 }
61598
61599#ifdef FREECIV_JSON_CONNECTION
61600 field_addr.name = "graphic_alt";
61601#endif /* FREECIV_JSON_CONNECTION */
61602 e = 0;
61603
61604 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61605
61606 if (e) {
61607 log_packet_detailed("'graphic_alt' field error detected");
61608 }
61609
61610#ifdef FREECIV_JSON_CONNECTION
61611 field_addr.name = "legend";
61612#endif /* FREECIV_JSON_CONNECTION */
61613 e = 0;
61614
61615 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
61616
61617 if (e) {
61618 log_packet_detailed("'legend' field error detected");
61619 }
61620
61621#ifdef FREECIV_JSON_CONNECTION
61622 field_addr.name = "style";
61623#endif /* FREECIV_JSON_CONNECTION */
61624 e = 0;
61625
61626 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
61627
61628 if (e) {
61629 log_packet_detailed("'style' field error detected");
61630 }
61631
61632#ifdef FREECIV_JSON_CONNECTION
61633 field_addr.name = "leader_count";
61634#endif /* FREECIV_JSON_CONNECTION */
61635 e = 0;
61636
61637 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
61638
61639 if (e) {
61640 log_packet_detailed("'leader_count' field error detected");
61641 }
61642
61643#ifdef FREECIV_JSON_CONNECTION
61644 field_addr.name = "leader_name";
61645#endif /* FREECIV_JSON_CONNECTION */
61646 e = 0;
61647
61648 {
61649 int i;
61650
61651#ifdef FREECIV_JSON_CONNECTION
61652 /* Create the array. */
61653 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61654
61655 /* Enter array. */
61656 field_addr.sub_location = plocation_elem_new(0);
61657#endif /* FREECIV_JSON_CONNECTION */
61658
61659 for (i = 0; i < real_packet->leader_count; i++) {
61660#ifdef FREECIV_JSON_CONNECTION
61661 /* Next array element. */
61662 field_addr.sub_location->number = i;
61663#endif /* FREECIV_JSON_CONNECTION */
61664
61665 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
61666 }
61667
61668#ifdef FREECIV_JSON_CONNECTION
61669 /* Exit array. */
61670 FC_FREE(field_addr.sub_location);
61671#endif /* FREECIV_JSON_CONNECTION */
61672 }
61673
61674 if (e) {
61675 log_packet_detailed("'leader_name' field error detected");
61676 }
61677
61678#ifdef FREECIV_JSON_CONNECTION
61679 field_addr.name = "leader_is_male";
61680#endif /* FREECIV_JSON_CONNECTION */
61681 e = 0;
61682
61683 {
61684 int i;
61685
61686#ifdef FREECIV_JSON_CONNECTION
61687 /* Create the array. */
61688 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61689
61690 /* Enter array. */
61691 field_addr.sub_location = plocation_elem_new(0);
61692#endif /* FREECIV_JSON_CONNECTION */
61693
61694 for (i = 0; i < real_packet->leader_count; i++) {
61695#ifdef FREECIV_JSON_CONNECTION
61696 /* Next array element. */
61697 field_addr.sub_location->number = i;
61698#endif /* FREECIV_JSON_CONNECTION */
61699
61700 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
61701 }
61702
61703#ifdef FREECIV_JSON_CONNECTION
61704 /* Exit array. */
61705 FC_FREE(field_addr.sub_location);
61706#endif /* FREECIV_JSON_CONNECTION */
61707 }
61708
61709 if (e) {
61710 log_packet_detailed("'leader_is_male' field error detected");
61711 }
61712
61713#ifdef FREECIV_JSON_CONNECTION
61714 field_addr.name = "is_playable";
61715#endif /* FREECIV_JSON_CONNECTION */
61716 e = 0;
61717
61718 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_playable);
61719
61720 if (e) {
61721 log_packet_detailed("'is_playable' field error detected");
61722 }
61723
61724#ifdef FREECIV_JSON_CONNECTION
61725 field_addr.name = "barbarian_type";
61726#endif /* FREECIV_JSON_CONNECTION */
61727 e = 0;
61728
61729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
61730
61731 if (e) {
61732 log_packet_detailed("'barbarian_type' field error detected");
61733 }
61734
61735#ifdef FREECIV_JSON_CONNECTION
61736 field_addr.name = "nsets";
61737#endif /* FREECIV_JSON_CONNECTION */
61738 e = 0;
61739
61740 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
61741
61742 if (e) {
61743 log_packet_detailed("'nsets' field error detected");
61744 }
61745
61746#ifdef FREECIV_JSON_CONNECTION
61747 field_addr.name = "sets";
61748#endif /* FREECIV_JSON_CONNECTION */
61749 e = 0;
61750
61751 {
61752 int i;
61753
61754#ifdef FREECIV_JSON_CONNECTION
61755 /* Create the array. */
61756 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
61757
61758 /* Enter array. */
61759 field_addr.sub_location = plocation_elem_new(0);
61760#endif /* FREECIV_JSON_CONNECTION */
61761
61762 for (i = 0; i < real_packet->nsets; i++) {
61763#ifdef FREECIV_JSON_CONNECTION
61764 /* Next array element. */
61765 field_addr.sub_location->number = i;
61766#endif /* FREECIV_JSON_CONNECTION */
61767
61768 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
61769 }
61770
61771#ifdef FREECIV_JSON_CONNECTION
61772 /* Exit array. */
61773 FC_FREE(field_addr.sub_location);
61774#endif /* FREECIV_JSON_CONNECTION */
61775 }
61776
61777 if (e) {
61778 log_packet_detailed("'sets' field error detected");
61779 }
61780
61781#ifdef FREECIV_JSON_CONNECTION
61782 field_addr.name = "ngroups";
61783#endif /* FREECIV_JSON_CONNECTION */
61784 e = 0;
61785
61786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
61787
61788 if (e) {
61789 log_packet_detailed("'ngroups' field error detected");
61790 }
61791
61792#ifdef FREECIV_JSON_CONNECTION
61793 field_addr.name = "groups";
61794#endif /* FREECIV_JSON_CONNECTION */
61795 e = 0;
61796
61797 {
61798 int i;
61799
61800#ifdef FREECIV_JSON_CONNECTION
61801 /* Create the array. */
61802 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
61803
61804 /* Enter array. */
61805 field_addr.sub_location = plocation_elem_new(0);
61806#endif /* FREECIV_JSON_CONNECTION */
61807
61808 for (i = 0; i < real_packet->ngroups; i++) {
61809#ifdef FREECIV_JSON_CONNECTION
61810 /* Next array element. */
61811 field_addr.sub_location->number = i;
61812#endif /* FREECIV_JSON_CONNECTION */
61813
61814 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
61815 }
61816
61817#ifdef FREECIV_JSON_CONNECTION
61818 /* Exit array. */
61819 FC_FREE(field_addr.sub_location);
61820#endif /* FREECIV_JSON_CONNECTION */
61821 }
61822
61823 if (e) {
61824 log_packet_detailed("'groups' field error detected");
61825 }
61826
61827#ifdef FREECIV_JSON_CONNECTION
61828 field_addr.name = "init_government_id";
61829#endif /* FREECIV_JSON_CONNECTION */
61830 e = 0;
61831
61832 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
61833
61834 if (e) {
61835 log_packet_detailed("'init_government_id' field error detected");
61836 }
61837
61838#ifdef FREECIV_JSON_CONNECTION
61839 field_addr.name = "init_techs_count";
61840#endif /* FREECIV_JSON_CONNECTION */
61841 e = 0;
61842
61843 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
61844
61845 if (e) {
61846 log_packet_detailed("'init_techs_count' field error detected");
61847 }
61848
61849#ifdef FREECIV_JSON_CONNECTION
61850 field_addr.name = "init_techs";
61851#endif /* FREECIV_JSON_CONNECTION */
61852 e = 0;
61853
61854 {
61855 int i;
61856
61857#ifdef FREECIV_JSON_CONNECTION
61858 /* Create the array. */
61859 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
61860
61861 /* Enter array. */
61862 field_addr.sub_location = plocation_elem_new(0);
61863#endif /* FREECIV_JSON_CONNECTION */
61864
61865 for (i = 0; i < real_packet->init_techs_count; i++) {
61866#ifdef FREECIV_JSON_CONNECTION
61867 /* Next array element. */
61868 field_addr.sub_location->number = i;
61869#endif /* FREECIV_JSON_CONNECTION */
61870
61871 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
61872 }
61873
61874#ifdef FREECIV_JSON_CONNECTION
61875 /* Exit array. */
61876 FC_FREE(field_addr.sub_location);
61877#endif /* FREECIV_JSON_CONNECTION */
61878 }
61879
61880 if (e) {
61881 log_packet_detailed("'init_techs' field error detected");
61882 }
61883
61884#ifdef FREECIV_JSON_CONNECTION
61885 field_addr.name = "init_units_count";
61886#endif /* FREECIV_JSON_CONNECTION */
61887 e = 0;
61888
61889 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
61890
61891 if (e) {
61892 log_packet_detailed("'init_units_count' field error detected");
61893 }
61894
61895#ifdef FREECIV_JSON_CONNECTION
61896 field_addr.name = "init_units";
61897#endif /* FREECIV_JSON_CONNECTION */
61898 e = 0;
61899
61900 {
61901 int i;
61902
61903#ifdef FREECIV_JSON_CONNECTION
61904 /* Create the array. */
61905 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
61906
61907 /* Enter array. */
61908 field_addr.sub_location = plocation_elem_new(0);
61909#endif /* FREECIV_JSON_CONNECTION */
61910
61911 for (i = 0; i < real_packet->init_units_count; i++) {
61912#ifdef FREECIV_JSON_CONNECTION
61913 /* Next array element. */
61914 field_addr.sub_location->number = i;
61915#endif /* FREECIV_JSON_CONNECTION */
61916
61917 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
61918 }
61919
61920#ifdef FREECIV_JSON_CONNECTION
61921 /* Exit array. */
61922 FC_FREE(field_addr.sub_location);
61923#endif /* FREECIV_JSON_CONNECTION */
61924 }
61925
61926 if (e) {
61927 log_packet_detailed("'init_units' field error detected");
61928 }
61929
61930#ifdef FREECIV_JSON_CONNECTION
61931 field_addr.name = "init_buildings_count";
61932#endif /* FREECIV_JSON_CONNECTION */
61933 e = 0;
61934
61935 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61936
61937 if (e) {
61938 log_packet_detailed("'init_buildings_count' field error detected");
61939 }
61940
61941#ifdef FREECIV_JSON_CONNECTION
61942 field_addr.name = "init_buildings";
61943#endif /* FREECIV_JSON_CONNECTION */
61944 e = 0;
61945
61946 {
61947 int i;
61948
61949#ifdef FREECIV_JSON_CONNECTION
61950 /* Create the array. */
61951 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61952
61953 /* Enter array. */
61954 field_addr.sub_location = plocation_elem_new(0);
61955#endif /* FREECIV_JSON_CONNECTION */
61956
61957 for (i = 0; i < real_packet->init_buildings_count; i++) {
61958#ifdef FREECIV_JSON_CONNECTION
61959 /* Next array element. */
61960 field_addr.sub_location->number = i;
61961#endif /* FREECIV_JSON_CONNECTION */
61962
61963 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61964 }
61965
61966#ifdef FREECIV_JSON_CONNECTION
61967 /* Exit array. */
61968 FC_FREE(field_addr.sub_location);
61969#endif /* FREECIV_JSON_CONNECTION */
61970 }
61971
61972 if (e) {
61973 log_packet_detailed("'init_buildings' field error detected");
61974 }
61975#endif /* FREECIV_DELTA_PROTOCOL */
61976
61978}
61979
61981{
61982 if (!pc->used) {
61983 log_error("WARNING: trying to send data to the closed connection %s",
61985 return -1;
61986 }
61987 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION].packet != nullptr, -1,
61988 "Handler for PACKET_RULESET_NATION not installed");
61989 return pc->phs.handlers->send[PACKET_RULESET_NATION].packet(pc, packet);
61990}
61991
61992void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
61993{
61994 conn_list_iterate(dest, pconn) {
61997}
61998
62000{
62001 memset(packet, 0, sizeof(*packet));
62002}
62003
62004#define free_packet_nation_availability(_packet) (void) 0
62005#define destroy_packet_nation_availability free
62006
62007#ifdef FREECIV_DELTA_PROTOCOL
62008#define hash_packet_nation_availability_100 hash_const
62009#define cmp_packet_nation_availability_100 cmp_const
62011#endif /* FREECIV_DELTA_PROTOCOL */
62012
62014{
62015#define FREE_PACKET_STRUCT(_packet) free_packet_nation_availability(_packet)
62017
62018#ifdef FREECIV_JSON_CONNECTION
62019 struct plocation field_addr;
62020 {
62021 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62024 }
62025#endif /* FREECIV_JSON_CONNECTION */
62026
62027 log_packet_detailed("packet_nation_availability_100: got info about ()");
62028
62029#ifdef FREECIV_DELTA_PROTOCOL
62032 struct genhash **hash = pc->phs.received + PACKET_NATION_AVAILABILITY;
62033
62034 if (nullptr == *hash) {
62036 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
62037 }
62038
62039 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62040 *real_packet = *old;
62041 } else {
62042 /* packet is already initialized empty */
62043 log_packet_detailed(" no old info");
62044 }
62045
62046#ifdef FREECIV_JSON_CONNECTION
62047 field_addr.name = "fields";
62048#endif /* FREECIV_JSON_CONNECTION */
62049 DIO_BV_GET(&din, &field_addr, fields);
62050
62051 if (BV_ISSET(fields, 0)) {
62052 log_packet_detailed(" got field 'ncount'");
62053
62054#ifdef FREECIV_JSON_CONNECTION
62055 field_addr.name = "ncount";
62056#endif /* FREECIV_JSON_CONNECTION */
62057
62058 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
62060 }
62061 }
62062
62063 if (BV_ISSET(fields, 1)) {
62064 log_packet_detailed(" got field 'is_pickable'");
62065
62066#ifdef FREECIV_JSON_CONNECTION
62067 field_addr.name = "is_pickable";
62068#endif /* FREECIV_JSON_CONNECTION */
62069
62070 {
62071 int i;
62072
62073 if (real_packet->ncount > MAX_NUM_NATIONS) {
62074 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
62075 }
62076
62077#ifdef FREECIV_JSON_CONNECTION
62078 /* Enter array. */
62079 field_addr.sub_location = plocation_elem_new(0);
62080#endif /* FREECIV_JSON_CONNECTION */
62081
62082 for (i = 0; i < real_packet->ncount; i++) {
62083#ifdef FREECIV_JSON_CONNECTION
62084 /* Next array element */
62085 field_addr.sub_location->number = i;
62086#endif /* FREECIV_JSON_CONNECTION */
62087
62088 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
62089 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
62090 }
62091 }
62092
62093#ifdef FREECIV_JSON_CONNECTION
62094 /* Exit array. */
62095 FC_FREE(field_addr.sub_location);
62096#endif /* FREECIV_JSON_CONNECTION */
62097 }
62098 }
62099
62100 real_packet->nationset_change = BV_ISSET(fields, 2);
62101
62102 if (nullptr == old) {
62103 old = fc_malloc(sizeof(*old));
62105 *old = *real_packet;
62107 } else {
62108 *old = *real_packet;
62109 }
62110
62111#else /* FREECIV_DELTA_PROTOCOL */
62112#ifdef FREECIV_JSON_CONNECTION
62113 field_addr.name = "ncount";
62114#endif /* FREECIV_JSON_CONNECTION */
62115
62116 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
62118 }
62119
62120#ifdef FREECIV_JSON_CONNECTION
62121 field_addr.name = "is_pickable";
62122#endif /* FREECIV_JSON_CONNECTION */
62123
62124 {
62125 int i;
62126
62127 if (real_packet->ncount > MAX_NUM_NATIONS) {
62128 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
62129 }
62130
62131#ifdef FREECIV_JSON_CONNECTION
62132 /* Enter array. */
62133 field_addr.sub_location = plocation_elem_new(0);
62134#endif /* FREECIV_JSON_CONNECTION */
62135
62136 for (i = 0; i < real_packet->ncount; i++) {
62137#ifdef FREECIV_JSON_CONNECTION
62138 /* Next array element */
62139 field_addr.sub_location->number = i;
62140#endif /* FREECIV_JSON_CONNECTION */
62141
62142 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
62143 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
62144 }
62145 }
62146
62147#ifdef FREECIV_JSON_CONNECTION
62148 /* Exit array. */
62149 FC_FREE(field_addr.sub_location);
62150#endif /* FREECIV_JSON_CONNECTION */
62151 }
62152
62153#ifdef FREECIV_JSON_CONNECTION
62154 field_addr.name = "nationset_change";
62155#endif /* FREECIV_JSON_CONNECTION */
62156
62157 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nationset_change)) {
62158 RECEIVE_PACKET_FIELD_ERROR(nationset_change);
62159 }
62160#endif /* FREECIV_DELTA_PROTOCOL */
62161
62163#undef FREE_PACKET_STRUCT
62164}
62165
62167{
62168 const struct packet_nation_availability *real_packet = packet;
62169 int e;
62171
62172 log_packet_detailed("packet_nation_availability_100: sending info about ()");
62173
62174#ifdef FREECIV_DELTA_PROTOCOL
62177 bool differ;
62178 struct genhash **hash = pc->phs.sent + PACKET_NATION_AVAILABILITY;
62179
62180 if (nullptr == *hash) {
62182 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
62183 }
62184 BV_CLR_ALL(fields);
62185
62186 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62187 old = fc_malloc(sizeof(*old));
62188 /* temporary bitcopy just to insert correctly */
62189 *old = *real_packet;
62192 }
62193
62194 differ = (old->ncount != real_packet->ncount);
62195 if (differ) {
62196 BV_SET(fields, 0);
62197 }
62198
62199 differ = (old->ncount != real_packet->ncount);
62200 if (!differ) {
62201 int i;
62202
62203 for (i = 0; i < old->ncount; i++) {
62204 differ = (old->is_pickable[i] != real_packet->is_pickable[i]);
62205 if (differ) {
62206 break;
62207 }
62208 }
62209 }
62210 if (differ) {
62211 BV_SET(fields, 1);
62212 }
62213
62214 /* folded into head */
62215 if (real_packet->nationset_change) {
62216 BV_SET(fields, 2);
62217 }
62218#endif /* FREECIV_DELTA_PROTOCOL */
62219
62220#ifdef FREECIV_JSON_CONNECTION
62221 struct plocation field_addr;
62222 {
62223 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62226 }
62227#endif /* FREECIV_JSON_CONNECTION */
62228
62229#ifdef FREECIV_DELTA_PROTOCOL
62230#ifdef FREECIV_JSON_CONNECTION
62231 field_addr.name = "fields";
62232#endif /* FREECIV_JSON_CONNECTION */
62233 e = 0;
62234 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62235 if (e) {
62236 log_packet_detailed("fields bitvector error detected");
62237 }
62238
62239 if (BV_ISSET(fields, 0)) {
62240 log_packet_detailed(" field 'ncount' has changed");
62241
62242#ifdef FREECIV_JSON_CONNECTION
62243 field_addr.name = "ncount";
62244#endif /* FREECIV_JSON_CONNECTION */
62245 e = 0;
62246
62247 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
62248
62249 if (e) {
62250 log_packet_detailed("'ncount' field error detected");
62251 }
62252 }
62253
62254 if (BV_ISSET(fields, 1)) {
62255 log_packet_detailed(" field 'is_pickable' has changed");
62256
62257#ifdef FREECIV_JSON_CONNECTION
62258 field_addr.name = "is_pickable";
62259#endif /* FREECIV_JSON_CONNECTION */
62260 e = 0;
62261
62262 {
62263 int i;
62264
62265#ifdef FREECIV_JSON_CONNECTION
62266 /* Create the array. */
62267 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
62268
62269 /* Enter array. */
62270 field_addr.sub_location = plocation_elem_new(0);
62271#endif /* FREECIV_JSON_CONNECTION */
62272
62273 for (i = 0; i < real_packet->ncount; i++) {
62274#ifdef FREECIV_JSON_CONNECTION
62275 /* Next array element. */
62276 field_addr.sub_location->number = i;
62277#endif /* FREECIV_JSON_CONNECTION */
62278
62279 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
62280 }
62281
62282#ifdef FREECIV_JSON_CONNECTION
62283 /* Exit array. */
62284 FC_FREE(field_addr.sub_location);
62285#endif /* FREECIV_JSON_CONNECTION */
62286 }
62287
62288 if (e) {
62289 log_packet_detailed("'is_pickable' field error detected");
62290 }
62291 }
62292
62293 /* field 2 is folded into the header */
62294
62295 *old = *real_packet;
62296
62297#else /* FREECIV_DELTA_PROTOCOL */
62298#ifdef FREECIV_JSON_CONNECTION
62299 field_addr.name = "ncount";
62300#endif /* FREECIV_JSON_CONNECTION */
62301 e = 0;
62302
62303 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
62304
62305 if (e) {
62306 log_packet_detailed("'ncount' field error detected");
62307 }
62308
62309#ifdef FREECIV_JSON_CONNECTION
62310 field_addr.name = "is_pickable";
62311#endif /* FREECIV_JSON_CONNECTION */
62312 e = 0;
62313
62314 {
62315 int i;
62316
62317#ifdef FREECIV_JSON_CONNECTION
62318 /* Create the array. */
62319 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
62320
62321 /* Enter array. */
62322 field_addr.sub_location = plocation_elem_new(0);
62323#endif /* FREECIV_JSON_CONNECTION */
62324
62325 for (i = 0; i < real_packet->ncount; i++) {
62326#ifdef FREECIV_JSON_CONNECTION
62327 /* Next array element. */
62328 field_addr.sub_location->number = i;
62329#endif /* FREECIV_JSON_CONNECTION */
62330
62331 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
62332 }
62333
62334#ifdef FREECIV_JSON_CONNECTION
62335 /* Exit array. */
62336 FC_FREE(field_addr.sub_location);
62337#endif /* FREECIV_JSON_CONNECTION */
62338 }
62339
62340 if (e) {
62341 log_packet_detailed("'is_pickable' field error detected");
62342 }
62343
62344#ifdef FREECIV_JSON_CONNECTION
62345 field_addr.name = "nationset_change";
62346#endif /* FREECIV_JSON_CONNECTION */
62347 e = 0;
62348
62349 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nationset_change);
62350
62351 if (e) {
62352 log_packet_detailed("'nationset_change' field error detected");
62353 }
62354#endif /* FREECIV_DELTA_PROTOCOL */
62355
62357}
62358
62360{
62361 if (!pc->used) {
62362 log_error("WARNING: trying to send data to the closed connection %s",
62364 return -1;
62365 }
62366 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet != nullptr, -1,
62367 "Handler for PACKET_NATION_AVAILABILITY not installed");
62368 return pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet(pc, packet);
62369}
62370
62372{
62373 conn_list_iterate(dest, pconn) {
62376}
62377
62378static inline void init_packet_ruleset_style(struct packet_ruleset_style *packet)
62379{
62380 memset(packet, 0, sizeof(*packet));
62381}
62382
62383#define free_packet_ruleset_style(_packet) (void) 0
62384#define destroy_packet_ruleset_style free
62385
62386#ifdef FREECIV_DELTA_PROTOCOL
62387#define hash_packet_ruleset_style_100 hash_const
62388#define cmp_packet_ruleset_style_100 cmp_const
62390#endif /* FREECIV_DELTA_PROTOCOL */
62391
62393{
62394#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_style(_packet)
62396
62397#ifdef FREECIV_JSON_CONNECTION
62398 struct plocation field_addr;
62399 {
62400 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62403 }
62404#endif /* FREECIV_JSON_CONNECTION */
62405
62406 log_packet_detailed("packet_ruleset_style_100: got info about ()");
62407
62408#ifdef FREECIV_DELTA_PROTOCOL
62410 struct packet_ruleset_style *old;
62411 struct genhash **hash = pc->phs.received + PACKET_RULESET_STYLE;
62412
62413 if (nullptr == *hash) {
62415 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
62416 }
62417
62418 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62419 *real_packet = *old;
62420 } else {
62421 /* packet is already initialized empty */
62422 log_packet_detailed(" no old info");
62423 }
62424
62425#ifdef FREECIV_JSON_CONNECTION
62426 field_addr.name = "fields";
62427#endif /* FREECIV_JSON_CONNECTION */
62428 DIO_BV_GET(&din, &field_addr, fields);
62429
62430 if (BV_ISSET(fields, 0)) {
62431 log_packet_detailed(" got field 'id'");
62432
62433#ifdef FREECIV_JSON_CONNECTION
62434 field_addr.name = "id";
62435#endif /* FREECIV_JSON_CONNECTION */
62436
62437 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62439 }
62440 }
62441
62442 if (BV_ISSET(fields, 1)) {
62443 log_packet_detailed(" got field 'name'");
62444
62445#ifdef FREECIV_JSON_CONNECTION
62446 field_addr.name = "name";
62447#endif /* FREECIV_JSON_CONNECTION */
62448
62449 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62451 }
62452 }
62453
62454 if (BV_ISSET(fields, 2)) {
62455 log_packet_detailed(" got field 'rule_name'");
62456
62457#ifdef FREECIV_JSON_CONNECTION
62458 field_addr.name = "rule_name";
62459#endif /* FREECIV_JSON_CONNECTION */
62460
62461 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62462 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62463 }
62464 }
62465
62466 if (nullptr == old) {
62467 old = fc_malloc(sizeof(*old));
62469 *old = *real_packet;
62471 } else {
62472 *old = *real_packet;
62473 }
62474
62475#else /* FREECIV_DELTA_PROTOCOL */
62476#ifdef FREECIV_JSON_CONNECTION
62477 field_addr.name = "id";
62478#endif /* FREECIV_JSON_CONNECTION */
62479
62480 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62482 }
62483
62484#ifdef FREECIV_JSON_CONNECTION
62485 field_addr.name = "name";
62486#endif /* FREECIV_JSON_CONNECTION */
62487
62488 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62490 }
62491
62492#ifdef FREECIV_JSON_CONNECTION
62493 field_addr.name = "rule_name";
62494#endif /* FREECIV_JSON_CONNECTION */
62495
62496 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62497 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62498 }
62499#endif /* FREECIV_DELTA_PROTOCOL */
62500
62502#undef FREE_PACKET_STRUCT
62503}
62504
62505static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
62506{
62507 const struct packet_ruleset_style *real_packet = packet;
62508 int e;
62510
62511 log_packet_detailed("packet_ruleset_style_100: sending info about ()");
62512
62513#ifdef FREECIV_DELTA_PROTOCOL
62515 struct packet_ruleset_style *old;
62516 bool differ;
62517 struct genhash **hash = pc->phs.sent + PACKET_RULESET_STYLE;
62518
62519 if (nullptr == *hash) {
62521 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
62522 }
62523 BV_CLR_ALL(fields);
62524
62525 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62526 old = fc_malloc(sizeof(*old));
62527 /* temporary bitcopy just to insert correctly */
62528 *old = *real_packet;
62531 }
62532
62533 differ = (old->id != real_packet->id);
62534 if (differ) {
62535 BV_SET(fields, 0);
62536 }
62537
62538 differ = (strcmp(old->name, real_packet->name) != 0);
62539 if (differ) {
62540 BV_SET(fields, 1);
62541 }
62542
62543 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62544 if (differ) {
62545 BV_SET(fields, 2);
62546 }
62547#endif /* FREECIV_DELTA_PROTOCOL */
62548
62549#ifdef FREECIV_JSON_CONNECTION
62550 struct plocation field_addr;
62551 {
62552 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62555 }
62556#endif /* FREECIV_JSON_CONNECTION */
62557
62558#ifdef FREECIV_DELTA_PROTOCOL
62559#ifdef FREECIV_JSON_CONNECTION
62560 field_addr.name = "fields";
62561#endif /* FREECIV_JSON_CONNECTION */
62562 e = 0;
62563 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62564 if (e) {
62565 log_packet_detailed("fields bitvector error detected");
62566 }
62567
62568 if (BV_ISSET(fields, 0)) {
62569 log_packet_detailed(" field 'id' has changed");
62570
62571#ifdef FREECIV_JSON_CONNECTION
62572 field_addr.name = "id";
62573#endif /* FREECIV_JSON_CONNECTION */
62574 e = 0;
62575
62576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62577
62578 if (e) {
62579 log_packet_detailed("'id' field error detected");
62580 }
62581 }
62582
62583 if (BV_ISSET(fields, 1)) {
62584 log_packet_detailed(" field 'name' has changed");
62585
62586#ifdef FREECIV_JSON_CONNECTION
62587 field_addr.name = "name";
62588#endif /* FREECIV_JSON_CONNECTION */
62589 e = 0;
62590
62591 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62592
62593 if (e) {
62594 log_packet_detailed("'name' field error detected");
62595 }
62596 }
62597
62598 if (BV_ISSET(fields, 2)) {
62599 log_packet_detailed(" field 'rule_name' has changed");
62600
62601#ifdef FREECIV_JSON_CONNECTION
62602 field_addr.name = "rule_name";
62603#endif /* FREECIV_JSON_CONNECTION */
62604 e = 0;
62605
62606 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62607
62608 if (e) {
62609 log_packet_detailed("'rule_name' field error detected");
62610 }
62611 }
62612
62613 *old = *real_packet;
62614
62615#else /* FREECIV_DELTA_PROTOCOL */
62616#ifdef FREECIV_JSON_CONNECTION
62617 field_addr.name = "id";
62618#endif /* FREECIV_JSON_CONNECTION */
62619 e = 0;
62620
62621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62622
62623 if (e) {
62624 log_packet_detailed("'id' field error detected");
62625 }
62626
62627#ifdef FREECIV_JSON_CONNECTION
62628 field_addr.name = "name";
62629#endif /* FREECIV_JSON_CONNECTION */
62630 e = 0;
62631
62632 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62633
62634 if (e) {
62635 log_packet_detailed("'name' field error detected");
62636 }
62637
62638#ifdef FREECIV_JSON_CONNECTION
62639 field_addr.name = "rule_name";
62640#endif /* FREECIV_JSON_CONNECTION */
62641 e = 0;
62642
62643 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62644
62645 if (e) {
62646 log_packet_detailed("'rule_name' field error detected");
62647 }
62648#endif /* FREECIV_DELTA_PROTOCOL */
62649
62651}
62652
62654{
62655 if (!pc->used) {
62656 log_error("WARNING: trying to send data to the closed connection %s",
62658 return -1;
62659 }
62660 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_STYLE].packet != nullptr, -1,
62661 "Handler for PACKET_RULESET_STYLE not installed");
62662 return pc->phs.handlers->send[PACKET_RULESET_STYLE].packet(pc, packet);
62663}
62664
62665void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
62666{
62667 conn_list_iterate(dest, pconn) {
62670}
62671
62672static inline void init_packet_ruleset_city(struct packet_ruleset_city *packet)
62673{
62674 memset(packet, 0, sizeof(*packet));
62675
62676 requirement_vector_init(&packet->reqs);
62677}
62678
62679static inline void free_packet_ruleset_city(struct packet_ruleset_city *packet)
62680{
62681 requirement_vector_free(&packet->reqs);
62682}
62683
62684static inline void destroy_packet_ruleset_city(void *packet)
62685{
62687 free(packet);
62688}
62689
62690#ifdef FREECIV_DELTA_PROTOCOL
62691#define hash_packet_ruleset_city_100 hash_const
62692#define cmp_packet_ruleset_city_100 cmp_const
62694#endif /* FREECIV_DELTA_PROTOCOL */
62695
62697{
62698#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_city(_packet)
62700
62701#ifdef FREECIV_JSON_CONNECTION
62702 struct plocation field_addr;
62703 {
62704 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62707 }
62708#endif /* FREECIV_JSON_CONNECTION */
62709
62710 log_packet_detailed("packet_ruleset_city_100: got info about ()");
62711
62712#ifdef FREECIV_DELTA_PROTOCOL
62714 struct packet_ruleset_city *old;
62715 struct genhash **hash = pc->phs.received + PACKET_RULESET_CITY;
62716
62717 if (nullptr == *hash) {
62719 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62720 }
62721
62722 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62723 real_packet->style_id = old->style_id;
62724 sz_strlcpy(real_packet->name, old->name);
62725 sz_strlcpy(real_packet->rule_name, old->rule_name);
62726 sz_strlcpy(real_packet->citizens_graphic, old->citizens_graphic);
62727 requirement_vector_copy(&real_packet->reqs, &old->reqs);
62728 sz_strlcpy(real_packet->graphic, old->graphic);
62729 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
62730 } else {
62731 /* packet is already initialized empty */
62732 log_packet_detailed(" no old info");
62733 }
62734
62735#ifdef FREECIV_JSON_CONNECTION
62736 field_addr.name = "fields";
62737#endif /* FREECIV_JSON_CONNECTION */
62738 DIO_BV_GET(&din, &field_addr, fields);
62739
62740 if (BV_ISSET(fields, 0)) {
62741 log_packet_detailed(" got field 'style_id'");
62742
62743#ifdef FREECIV_JSON_CONNECTION
62744 field_addr.name = "style_id";
62745#endif /* FREECIV_JSON_CONNECTION */
62746
62747 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62749 }
62750 }
62751
62752 if (BV_ISSET(fields, 1)) {
62753 log_packet_detailed(" got field 'name'");
62754
62755#ifdef FREECIV_JSON_CONNECTION
62756 field_addr.name = "name";
62757#endif /* FREECIV_JSON_CONNECTION */
62758
62759 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62761 }
62762 }
62763
62764 if (BV_ISSET(fields, 2)) {
62765 log_packet_detailed(" got field 'rule_name'");
62766
62767#ifdef FREECIV_JSON_CONNECTION
62768 field_addr.name = "rule_name";
62769#endif /* FREECIV_JSON_CONNECTION */
62770
62771 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62772 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62773 }
62774 }
62775
62776 if (BV_ISSET(fields, 3)) {
62777 log_packet_detailed(" got field 'citizens_graphic'");
62778
62779#ifdef FREECIV_JSON_CONNECTION
62780 field_addr.name = "citizens_graphic";
62781#endif /* FREECIV_JSON_CONNECTION */
62782
62783 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62784 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62785 }
62786 }
62787
62788 if (BV_ISSET(fields, 4)) {
62789 log_packet_detailed(" got field 'reqs'");
62790
62791#ifdef FREECIV_JSON_CONNECTION
62792 field_addr.name = "reqs";
62793#endif /* FREECIV_JSON_CONNECTION */
62794
62795 {
62796 int i;
62797
62798 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62800 }
62802
62803#ifdef FREECIV_JSON_CONNECTION
62804 /* Enter array. */
62805 field_addr.sub_location = plocation_elem_new(0);
62806#endif /* FREECIV_JSON_CONNECTION */
62807
62808 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62809#ifdef FREECIV_JSON_CONNECTION
62810 /* Next array element */
62811 field_addr.sub_location->number = i;
62812#endif /* FREECIV_JSON_CONNECTION */
62813
62814 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62816 }
62817 }
62818
62819#ifdef FREECIV_JSON_CONNECTION
62820 /* Exit array. */
62821 FC_FREE(field_addr.sub_location);
62822#endif /* FREECIV_JSON_CONNECTION */
62823 }
62824 }
62825
62826 if (BV_ISSET(fields, 5)) {
62827 log_packet_detailed(" got field 'graphic'");
62828
62829#ifdef FREECIV_JSON_CONNECTION
62830 field_addr.name = "graphic";
62831#endif /* FREECIV_JSON_CONNECTION */
62832
62833 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62835 }
62836 }
62837
62838 if (BV_ISSET(fields, 6)) {
62839 log_packet_detailed(" got field 'graphic_alt'");
62840
62841#ifdef FREECIV_JSON_CONNECTION
62842 field_addr.name = "graphic_alt";
62843#endif /* FREECIV_JSON_CONNECTION */
62844
62845 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62846 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62847 }
62848 }
62849
62850 if (nullptr == old) {
62851 old = fc_malloc(sizeof(*old));
62853 old->style_id = real_packet->style_id;
62854 sz_strlcpy(old->name, real_packet->name);
62855 sz_strlcpy(old->rule_name, real_packet->rule_name);
62856 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62857 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62858 sz_strlcpy(old->graphic, real_packet->graphic);
62859 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62861 } else {
62862 old->style_id = real_packet->style_id;
62863 sz_strlcpy(old->name, real_packet->name);
62864 sz_strlcpy(old->rule_name, real_packet->rule_name);
62865 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62866 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62867 sz_strlcpy(old->graphic, real_packet->graphic);
62868 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62869 }
62870
62871#else /* FREECIV_DELTA_PROTOCOL */
62872#ifdef FREECIV_JSON_CONNECTION
62873 field_addr.name = "style_id";
62874#endif /* FREECIV_JSON_CONNECTION */
62875
62876 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62878 }
62879
62880#ifdef FREECIV_JSON_CONNECTION
62881 field_addr.name = "name";
62882#endif /* FREECIV_JSON_CONNECTION */
62883
62884 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62886 }
62887
62888#ifdef FREECIV_JSON_CONNECTION
62889 field_addr.name = "rule_name";
62890#endif /* FREECIV_JSON_CONNECTION */
62891
62892 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62893 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62894 }
62895
62896#ifdef FREECIV_JSON_CONNECTION
62897 field_addr.name = "citizens_graphic";
62898#endif /* FREECIV_JSON_CONNECTION */
62899
62900 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62901 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62902 }
62903
62904#ifdef FREECIV_JSON_CONNECTION
62905 field_addr.name = "reqs";
62906#endif /* FREECIV_JSON_CONNECTION */
62907
62908 {
62909 int i;
62910
62911 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62913 }
62915
62916#ifdef FREECIV_JSON_CONNECTION
62917 /* Enter array. */
62918 field_addr.sub_location = plocation_elem_new(0);
62919#endif /* FREECIV_JSON_CONNECTION */
62920
62921 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62922#ifdef FREECIV_JSON_CONNECTION
62923 /* Next array element */
62924 field_addr.sub_location->number = i;
62925#endif /* FREECIV_JSON_CONNECTION */
62926
62927 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62929 }
62930 }
62931
62932#ifdef FREECIV_JSON_CONNECTION
62933 /* Exit array. */
62934 FC_FREE(field_addr.sub_location);
62935#endif /* FREECIV_JSON_CONNECTION */
62936 }
62937
62938#ifdef FREECIV_JSON_CONNECTION
62939 field_addr.name = "graphic";
62940#endif /* FREECIV_JSON_CONNECTION */
62941
62942 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62944 }
62945
62946#ifdef FREECIV_JSON_CONNECTION
62947 field_addr.name = "graphic_alt";
62948#endif /* FREECIV_JSON_CONNECTION */
62949
62950 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62951 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62952 }
62953#endif /* FREECIV_DELTA_PROTOCOL */
62954
62956#undef FREE_PACKET_STRUCT
62957}
62958
62959static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
62960{
62961 const struct packet_ruleset_city *real_packet = packet;
62962 int e;
62964
62965 log_packet_detailed("packet_ruleset_city_100: sending info about ()");
62966
62967#ifdef FREECIV_DELTA_PROTOCOL
62969 struct packet_ruleset_city *old;
62970 bool differ;
62971 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CITY;
62972
62973 if (nullptr == *hash) {
62975 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62976 }
62977 BV_CLR_ALL(fields);
62978
62979 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62980 old = fc_malloc(sizeof(*old));
62981 /* temporary bitcopy just to insert correctly */
62982 *old = *real_packet;
62985 }
62986
62987 differ = (old->style_id != real_packet->style_id);
62988 if (differ) {
62989 BV_SET(fields, 0);
62990 }
62991
62992 differ = (strcmp(old->name, real_packet->name) != 0);
62993 if (differ) {
62994 BV_SET(fields, 1);
62995 }
62996
62997 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62998 if (differ) {
62999 BV_SET(fields, 2);
63000 }
63001
63002 differ = (strcmp(old->citizens_graphic, real_packet->citizens_graphic) != 0);
63003 if (differ) {
63004 BV_SET(fields, 3);
63005 }
63006
63008 if (!differ) {
63009 int i;
63010
63011 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
63012 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
63013 if (differ) {
63014 break;
63015 }
63016 }
63017 }
63018 if (differ) {
63019 BV_SET(fields, 4);
63020 }
63021
63022 differ = (strcmp(old->graphic, real_packet->graphic) != 0);
63023 if (differ) {
63024 BV_SET(fields, 5);
63025 }
63026
63027 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
63028 if (differ) {
63029 BV_SET(fields, 6);
63030 }
63031#endif /* FREECIV_DELTA_PROTOCOL */
63032
63033#ifdef FREECIV_JSON_CONNECTION
63034 struct plocation field_addr;
63035 {
63036 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
63039 }
63040#endif /* FREECIV_JSON_CONNECTION */
63041
63042#ifdef FREECIV_DELTA_PROTOCOL
63043#ifdef FREECIV_JSON_CONNECTION
63044 field_addr.name = "fields";
63045#endif /* FREECIV_JSON_CONNECTION */
63046 e = 0;
63047 e |= DIO_BV_PUT(&dout, &field_addr, fields);
63048 if (e) {
63049 log_packet_detailed("fields bitvector error detected");
63050 }
63051
63052 if (BV_ISSET(fields, 0)) {
63053 log_packet_detailed(" field 'style_id' has changed");
63054
63055#ifdef FREECIV_JSON_CONNECTION
63056 field_addr.name = "style_id";
63057#endif /* FREECIV_JSON_CONNECTION */
63058 e = 0;
63059
63060 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
63061
63062 if (e) {
63063 log_packet_detailed("'style_id' field error detected");
63064 }
63065 }
63066
63067 if (BV_ISSET(fields, 1)) {
63068 log_packet_detailed(" field 'name' has changed");
63069
63070#ifdef FREECIV_JSON_CONNECTION
63071 field_addr.name = "name";
63072#endif /* FREECIV_JSON_CONNECTION */
63073 e = 0;
63074
63075 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63076
63077 if (e) {
63078 log_packet_detailed("'name' field error detected");
63079 }
63080 }
63081
63082 if (BV_ISSET(fields, 2)) {
63083 log_packet_detailed(" field 'rule_name' has changed");
63084
63085#ifdef FREECIV_JSON_CONNECTION
63086 field_addr.name = "rule_name";
63087#endif /* FREECIV_JSON_CONNECTION */
63088 e = 0;
63089
63090 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63091
63092 if (e) {
63093 log_packet_detailed("'rule_name' field error detected");
63094 }
63095 }
63096
63097 if (BV_ISSET(fields, 3)) {
63098 log_packet_detailed(" field 'citizens_graphic' has changed");
63099
63100#ifdef FREECIV_JSON_CONNECTION
63101 field_addr.name = "citizens_graphic";
63102#endif /* FREECIV_JSON_CONNECTION */
63103 e = 0;
63104
63105 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
63106
63107 if (e) {
63108 log_packet_detailed("'citizens_graphic' field error detected");
63109 }
63110 }
63111
63112 if (BV_ISSET(fields, 4)) {
63113 log_packet_detailed(" field 'reqs' has changed");
63114
63115#ifdef FREECIV_JSON_CONNECTION
63116 field_addr.name = "reqs";
63117#endif /* FREECIV_JSON_CONNECTION */
63118 e = 0;
63119
63120 {
63121 int i;
63122
63125
63126#ifdef FREECIV_JSON_CONNECTION
63127 /* Enter array. */
63128 field_addr.sub_location = plocation_elem_new(0);
63129#endif /* FREECIV_JSON_CONNECTION */
63130
63131 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63132#ifdef FREECIV_JSON_CONNECTION
63133 /* Next array element. */
63134 field_addr.sub_location->number = i;
63135#endif /* FREECIV_JSON_CONNECTION */
63136
63137 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
63138 }
63139
63140#ifdef FREECIV_JSON_CONNECTION
63141 /* Exit array. */
63142 FC_FREE(field_addr.sub_location);
63143#endif /* FREECIV_JSON_CONNECTION */
63144 }
63145
63146 if (e) {
63147 log_packet_detailed("'reqs' field error detected");
63148 }
63149 }
63150
63151 if (BV_ISSET(fields, 5)) {
63152 log_packet_detailed(" field 'graphic' has changed");
63153
63154#ifdef FREECIV_JSON_CONNECTION
63155 field_addr.name = "graphic";
63156#endif /* FREECIV_JSON_CONNECTION */
63157 e = 0;
63158
63159 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
63160
63161 if (e) {
63162 log_packet_detailed("'graphic' field error detected");
63163 }
63164 }
63165
63166 if (BV_ISSET(fields, 6)) {
63167 log_packet_detailed(" field 'graphic_alt' has changed");
63168
63169#ifdef FREECIV_JSON_CONNECTION
63170 field_addr.name = "graphic_alt";
63171#endif /* FREECIV_JSON_CONNECTION */
63172 e = 0;
63173
63174 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
63175
63176 if (e) {
63177 log_packet_detailed("'graphic_alt' field error detected");
63178 }
63179 }
63180
63181 old->style_id = real_packet->style_id;
63182 sz_strlcpy(old->name, real_packet->name);
63183 sz_strlcpy(old->rule_name, real_packet->rule_name);
63184 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
63185 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63186 sz_strlcpy(old->graphic, real_packet->graphic);
63187 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63188
63189#else /* FREECIV_DELTA_PROTOCOL */
63190#ifdef FREECIV_JSON_CONNECTION
63191 field_addr.name = "style_id";
63192#endif /* FREECIV_JSON_CONNECTION */
63193 e = 0;
63194
63195 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
63196
63197 if (e) {
63198 log_packet_detailed("'style_id' field error detected");
63199 }
63200
63201#ifdef FREECIV_JSON_CONNECTION
63202 field_addr.name = "name";
63203#endif /* FREECIV_JSON_CONNECTION */
63204 e = 0;
63205
63206 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63207
63208 if (e) {
63209 log_packet_detailed("'name' field error detected");
63210 }
63211
63212#ifdef FREECIV_JSON_CONNECTION
63213 field_addr.name = "rule_name";
63214#endif /* FREECIV_JSON_CONNECTION */
63215 e = 0;
63216
63217 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63218
63219 if (e) {
63220 log_packet_detailed("'rule_name' field error detected");
63221 }
63222
63223#ifdef FREECIV_JSON_CONNECTION
63224 field_addr.name = "citizens_graphic";
63225#endif /* FREECIV_JSON_CONNECTION */
63226 e = 0;
63227
63228 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
63229
63230 if (e) {
63231 log_packet_detailed("'citizens_graphic' field error detected");
63232 }
63233
63234#ifdef FREECIV_JSON_CONNECTION
63235 field_addr.name = "reqs";
63236#endif /* FREECIV_JSON_CONNECTION */
63237 e = 0;
63238
63239 {
63240 int i;
63241
63244
63245#ifdef FREECIV_JSON_CONNECTION
63246 /* Enter array. */
63247 field_addr.sub_location = plocation_elem_new(0);
63248#endif /* FREECIV_JSON_CONNECTION */
63249
63250 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63251#ifdef FREECIV_JSON_CONNECTION
63252 /* Next array element. */
63253 field_addr.sub_location->number = i;
63254#endif /* FREECIV_JSON_CONNECTION */
63255
63256 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
63257 }
63258
63259#ifdef FREECIV_JSON_CONNECTION
63260 /* Exit array. */
63261 FC_FREE(field_addr.sub_location);
63262#endif /* FREECIV_JSON_CONNECTION */
63263 }
63264
63265 if (e) {
63266 log_packet_detailed("'reqs' field error detected");
63267 }
63268
63269#ifdef FREECIV_JSON_CONNECTION
63270 field_addr.name = "graphic";
63271#endif /* FREECIV_JSON_CONNECTION */
63272 e = 0;
63273
63274 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
63275
63276 if (e) {
63277 log_packet_detailed("'graphic' field error detected");
63278 }
63279
63280#ifdef FREECIV_JSON_CONNECTION
63281 field_addr.name = "graphic_alt";
63282#endif /* FREECIV_JSON_CONNECTION */
63283 e = 0;
63284
63285 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
63286
63287 if (e) {
63288 log_packet_detailed("'graphic_alt' field error detected");
63289 }
63290#endif /* FREECIV_DELTA_PROTOCOL */
63291
63293}
63294
63296{
63297 if (!pc->used) {
63298 log_error("WARNING: trying to send data to the closed connection %s",
63300 return -1;
63301 }
63302 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CITY].packet != nullptr, -1,
63303 "Handler for PACKET_RULESET_CITY not installed");
63304 return pc->phs.handlers->send[PACKET_RULESET_CITY].packet(pc, packet);
63305}
63306
63307void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
63308{
63309 conn_list_iterate(dest, pconn) {
63312}
63313
63315{
63316 memset(packet, 0, sizeof(*packet));
63317
63318 requirement_vector_init(&packet->reqs);
63320 packet->helptext = strvec_new();
63321}
63322
63324{
63325 if (packet->helptext) {
63326 strvec_destroy(packet->helptext);
63327 packet->helptext = nullptr;
63328 }
63330 requirement_vector_free(&packet->reqs);
63331}
63332
63333static inline void destroy_packet_ruleset_building(void *packet)
63334{
63336 free(packet);
63337}
63338
63339#ifdef FREECIV_DELTA_PROTOCOL
63340#define hash_packet_ruleset_building_100 hash_const
63341#define cmp_packet_ruleset_building_100 cmp_const
63343#endif /* FREECIV_DELTA_PROTOCOL */
63344
63346{
63347#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_building(_packet)
63349
63350#ifdef FREECIV_JSON_CONNECTION
63351 struct plocation field_addr;
63352 {
63353 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
63356 }
63357#endif /* FREECIV_JSON_CONNECTION */
63358
63359 log_packet_detailed("packet_ruleset_building_100: got info about ()");
63360
63361#ifdef FREECIV_DELTA_PROTOCOL
63364 struct genhash **hash = pc->phs.received + PACKET_RULESET_BUILDING;
63365
63366 if (nullptr == *hash) {
63368 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
63369 }
63370
63371 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
63372 real_packet->id = old->id;
63373 real_packet->genus = old->genus;
63374 sz_strlcpy(real_packet->name, old->name);
63375 sz_strlcpy(real_packet->rule_name, old->rule_name);
63376 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
63377 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
63378 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
63379 requirement_vector_copy(&real_packet->reqs, &old->reqs);
63380 requirement_vector_copy(&real_packet->obs_reqs, &old->obs_reqs);
63381 real_packet->build_cost = old->build_cost;
63382 real_packet->upkeep = old->upkeep;
63383 real_packet->sabotage = old->sabotage;
63384 real_packet->flags = old->flags;
63385 sz_strlcpy(real_packet->soundtag, old->soundtag);
63386 sz_strlcpy(real_packet->soundtag_alt, old->soundtag_alt);
63387 sz_strlcpy(real_packet->soundtag_alt2, old->soundtag_alt2);
63388 if (old->helptext) {
63389 strvec_copy(real_packet->helptext, old->helptext);
63390 } else {
63391 strvec_clear(real_packet->helptext);
63392 }
63393 } else {
63394 /* packet is already initialized empty */
63395 log_packet_detailed(" no old info");
63396 }
63397
63398#ifdef FREECIV_JSON_CONNECTION
63399 field_addr.name = "fields";
63400#endif /* FREECIV_JSON_CONNECTION */
63401 DIO_BV_GET(&din, &field_addr, fields);
63402
63403 if (BV_ISSET(fields, 0)) {
63404 log_packet_detailed(" got field 'id'");
63405
63406#ifdef FREECIV_JSON_CONNECTION
63407 field_addr.name = "id";
63408#endif /* FREECIV_JSON_CONNECTION */
63409
63410 {
63411 int readin;
63412
63413 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63415 }
63416 real_packet->id = readin;
63417 }
63418 }
63419
63420 if (BV_ISSET(fields, 1)) {
63421 log_packet_detailed(" got field 'genus'");
63422
63423#ifdef FREECIV_JSON_CONNECTION
63424 field_addr.name = "genus";
63425#endif /* FREECIV_JSON_CONNECTION */
63426
63427 {
63428 int readin;
63429
63430 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63432 }
63433 real_packet->genus = readin;
63434 }
63435 }
63436
63437 if (BV_ISSET(fields, 2)) {
63438 log_packet_detailed(" got field 'name'");
63439
63440#ifdef FREECIV_JSON_CONNECTION
63441 field_addr.name = "name";
63442#endif /* FREECIV_JSON_CONNECTION */
63443
63444 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63446 }
63447 }
63448
63449 if (BV_ISSET(fields, 3)) {
63450 log_packet_detailed(" got field 'rule_name'");
63451
63452#ifdef FREECIV_JSON_CONNECTION
63453 field_addr.name = "rule_name";
63454#endif /* FREECIV_JSON_CONNECTION */
63455
63456 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63457 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63458 }
63459 }
63460
63461 if (BV_ISSET(fields, 4)) {
63462 log_packet_detailed(" got field 'graphic_str'");
63463
63464#ifdef FREECIV_JSON_CONNECTION
63465 field_addr.name = "graphic_str";
63466#endif /* FREECIV_JSON_CONNECTION */
63467
63468 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63469 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63470 }
63471 }
63472
63473 if (BV_ISSET(fields, 5)) {
63474 log_packet_detailed(" got field 'graphic_alt'");
63475
63476#ifdef FREECIV_JSON_CONNECTION
63477 field_addr.name = "graphic_alt";
63478#endif /* FREECIV_JSON_CONNECTION */
63479
63480 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63481 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63482 }
63483 }
63484
63485 if (BV_ISSET(fields, 6)) {
63486 log_packet_detailed(" got field 'graphic_alt2'");
63487
63488#ifdef FREECIV_JSON_CONNECTION
63489 field_addr.name = "graphic_alt2";
63490#endif /* FREECIV_JSON_CONNECTION */
63491
63492 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63493 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63494 }
63495 }
63496
63497 if (BV_ISSET(fields, 7)) {
63498 log_packet_detailed(" got field 'reqs'");
63499
63500#ifdef FREECIV_JSON_CONNECTION
63501 field_addr.name = "reqs";
63502#endif /* FREECIV_JSON_CONNECTION */
63503
63504 {
63505 int i;
63506
63507 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63509 }
63511
63512#ifdef FREECIV_JSON_CONNECTION
63513 /* Enter array. */
63514 field_addr.sub_location = plocation_elem_new(0);
63515#endif /* FREECIV_JSON_CONNECTION */
63516
63517 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63518#ifdef FREECIV_JSON_CONNECTION
63519 /* Next array element */
63520 field_addr.sub_location->number = i;
63521#endif /* FREECIV_JSON_CONNECTION */
63522
63523 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63525 }
63526 }
63527
63528#ifdef FREECIV_JSON_CONNECTION
63529 /* Exit array. */
63530 FC_FREE(field_addr.sub_location);
63531#endif /* FREECIV_JSON_CONNECTION */
63532 }
63533 }
63534
63535 if (BV_ISSET(fields, 8)) {
63536 log_packet_detailed(" got field 'obs_reqs'");
63537
63538#ifdef FREECIV_JSON_CONNECTION
63539 field_addr.name = "obs_reqs";
63540#endif /* FREECIV_JSON_CONNECTION */
63541
63542 {
63543 int i;
63544
63545 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63547 }
63549
63550#ifdef FREECIV_JSON_CONNECTION
63551 /* Enter array. */
63552 field_addr.sub_location = plocation_elem_new(0);
63553#endif /* FREECIV_JSON_CONNECTION */
63554
63555 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63556#ifdef FREECIV_JSON_CONNECTION
63557 /* Next array element */
63558 field_addr.sub_location->number = i;
63559#endif /* FREECIV_JSON_CONNECTION */
63560
63561 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63563 }
63564 }
63565
63566#ifdef FREECIV_JSON_CONNECTION
63567 /* Exit array. */
63568 FC_FREE(field_addr.sub_location);
63569#endif /* FREECIV_JSON_CONNECTION */
63570 }
63571 }
63572
63573 if (BV_ISSET(fields, 9)) {
63574 log_packet_detailed(" got field 'build_cost'");
63575
63576#ifdef FREECIV_JSON_CONNECTION
63577 field_addr.name = "build_cost";
63578#endif /* FREECIV_JSON_CONNECTION */
63579
63580 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63581 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63582 }
63583 }
63584
63585 if (BV_ISSET(fields, 10)) {
63586 log_packet_detailed(" got field 'upkeep'");
63587
63588#ifdef FREECIV_JSON_CONNECTION
63589 field_addr.name = "upkeep";
63590#endif /* FREECIV_JSON_CONNECTION */
63591
63592 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63594 }
63595 }
63596
63597 if (BV_ISSET(fields, 11)) {
63598 log_packet_detailed(" got field 'sabotage'");
63599
63600#ifdef FREECIV_JSON_CONNECTION
63601 field_addr.name = "sabotage";
63602#endif /* FREECIV_JSON_CONNECTION */
63603
63604 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63606 }
63607 }
63608
63609 if (BV_ISSET(fields, 12)) {
63610 log_packet_detailed(" got field 'flags'");
63611
63612#ifdef FREECIV_JSON_CONNECTION
63613 field_addr.name = "flags";
63614#endif /* FREECIV_JSON_CONNECTION */
63615
63616 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63618 }
63619 }
63620
63621 if (BV_ISSET(fields, 13)) {
63622 log_packet_detailed(" got field 'soundtag'");
63623
63624#ifdef FREECIV_JSON_CONNECTION
63625 field_addr.name = "soundtag";
63626#endif /* FREECIV_JSON_CONNECTION */
63627
63628 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63630 }
63631 }
63632
63633 if (BV_ISSET(fields, 14)) {
63634 log_packet_detailed(" got field 'soundtag_alt'");
63635
63636#ifdef FREECIV_JSON_CONNECTION
63637 field_addr.name = "soundtag_alt";
63638#endif /* FREECIV_JSON_CONNECTION */
63639
63640 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63641 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63642 }
63643 }
63644
63645 if (BV_ISSET(fields, 15)) {
63646 log_packet_detailed(" got field 'soundtag_alt2'");
63647
63648#ifdef FREECIV_JSON_CONNECTION
63649 field_addr.name = "soundtag_alt2";
63650#endif /* FREECIV_JSON_CONNECTION */
63651
63652 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63653 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63654 }
63655 }
63656
63657 if (BV_ISSET(fields, 16)) {
63658 log_packet_detailed(" got field 'helptext'");
63659
63660#ifdef FREECIV_JSON_CONNECTION
63661 field_addr.name = "helptext";
63662#endif /* FREECIV_JSON_CONNECTION */
63663
63664 {
63665 int i;
63666
63667 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63669 }
63670 strvec_reserve(real_packet->helptext, i);
63671
63672#ifdef FREECIV_JSON_CONNECTION
63673 /* Enter array. */
63674 field_addr.sub_location = plocation_elem_new(0);
63675#endif /* FREECIV_JSON_CONNECTION */
63676
63677 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63678#ifdef FREECIV_JSON_CONNECTION
63679 /* Next array element */
63680 field_addr.sub_location->number = i;
63681#endif /* FREECIV_JSON_CONNECTION */
63682
63683 {
63684 char readin[MAX_LEN_PACKET];
63685
63686 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63687 || !strvec_set(real_packet->helptext, i, readin)) {
63689 }
63690 }
63691 }
63692
63693#ifdef FREECIV_JSON_CONNECTION
63694 /* Exit array. */
63695 FC_FREE(field_addr.sub_location);
63696#endif /* FREECIV_JSON_CONNECTION */
63697 }
63698 }
63699
63700 if (nullptr == old) {
63701 old = fc_malloc(sizeof(*old));
63703 old->id = real_packet->id;
63704 old->genus = real_packet->genus;
63705 sz_strlcpy(old->name, real_packet->name);
63706 sz_strlcpy(old->rule_name, real_packet->rule_name);
63707 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63708 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63709 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63710 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63711 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63712 old->build_cost = real_packet->build_cost;
63713 old->upkeep = real_packet->upkeep;
63714 old->sabotage = real_packet->sabotage;
63715 old->flags = real_packet->flags;
63716 sz_strlcpy(old->soundtag, real_packet->soundtag);
63717 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63718 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63719 if (real_packet->helptext) {
63720 strvec_copy(old->helptext, real_packet->helptext);
63721 } else {
63722 strvec_clear(old->helptext);
63723 }
63725 } else {
63726 old->id = real_packet->id;
63727 old->genus = real_packet->genus;
63728 sz_strlcpy(old->name, real_packet->name);
63729 sz_strlcpy(old->rule_name, real_packet->rule_name);
63730 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63731 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63732 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63733 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63734 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63735 old->build_cost = real_packet->build_cost;
63736 old->upkeep = real_packet->upkeep;
63737 old->sabotage = real_packet->sabotage;
63738 old->flags = real_packet->flags;
63739 sz_strlcpy(old->soundtag, real_packet->soundtag);
63740 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63741 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63742 if (real_packet->helptext) {
63743 strvec_copy(old->helptext, real_packet->helptext);
63744 } else {
63745 strvec_clear(old->helptext);
63746 }
63747 }
63748
63749#else /* FREECIV_DELTA_PROTOCOL */
63750#ifdef FREECIV_JSON_CONNECTION
63751 field_addr.name = "id";
63752#endif /* FREECIV_JSON_CONNECTION */
63753
63754 {
63755 int readin;
63756
63757 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63759 }
63760 real_packet->id = readin;
63761 }
63762
63763#ifdef FREECIV_JSON_CONNECTION
63764 field_addr.name = "genus";
63765#endif /* FREECIV_JSON_CONNECTION */
63766
63767 {
63768 int readin;
63769
63770 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63772 }
63773 real_packet->genus = readin;
63774 }
63775
63776#ifdef FREECIV_JSON_CONNECTION
63777 field_addr.name = "name";
63778#endif /* FREECIV_JSON_CONNECTION */
63779
63780 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63782 }
63783
63784#ifdef FREECIV_JSON_CONNECTION
63785 field_addr.name = "rule_name";
63786#endif /* FREECIV_JSON_CONNECTION */
63787
63788 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63789 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63790 }
63791
63792#ifdef FREECIV_JSON_CONNECTION
63793 field_addr.name = "graphic_str";
63794#endif /* FREECIV_JSON_CONNECTION */
63795
63796 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63797 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63798 }
63799
63800#ifdef FREECIV_JSON_CONNECTION
63801 field_addr.name = "graphic_alt";
63802#endif /* FREECIV_JSON_CONNECTION */
63803
63804 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63805 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63806 }
63807
63808#ifdef FREECIV_JSON_CONNECTION
63809 field_addr.name = "graphic_alt2";
63810#endif /* FREECIV_JSON_CONNECTION */
63811
63812 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63813 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63814 }
63815
63816#ifdef FREECIV_JSON_CONNECTION
63817 field_addr.name = "reqs";
63818#endif /* FREECIV_JSON_CONNECTION */
63819
63820 {
63821 int i;
63822
63823 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63825 }
63827
63828#ifdef FREECIV_JSON_CONNECTION
63829 /* Enter array. */
63830 field_addr.sub_location = plocation_elem_new(0);
63831#endif /* FREECIV_JSON_CONNECTION */
63832
63833 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63834#ifdef FREECIV_JSON_CONNECTION
63835 /* Next array element */
63836 field_addr.sub_location->number = i;
63837#endif /* FREECIV_JSON_CONNECTION */
63838
63839 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63841 }
63842 }
63843
63844#ifdef FREECIV_JSON_CONNECTION
63845 /* Exit array. */
63846 FC_FREE(field_addr.sub_location);
63847#endif /* FREECIV_JSON_CONNECTION */
63848 }
63849
63850#ifdef FREECIV_JSON_CONNECTION
63851 field_addr.name = "obs_reqs";
63852#endif /* FREECIV_JSON_CONNECTION */
63853
63854 {
63855 int i;
63856
63857 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63859 }
63861
63862#ifdef FREECIV_JSON_CONNECTION
63863 /* Enter array. */
63864 field_addr.sub_location = plocation_elem_new(0);
63865#endif /* FREECIV_JSON_CONNECTION */
63866
63867 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63868#ifdef FREECIV_JSON_CONNECTION
63869 /* Next array element */
63870 field_addr.sub_location->number = i;
63871#endif /* FREECIV_JSON_CONNECTION */
63872
63873 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63875 }
63876 }
63877
63878#ifdef FREECIV_JSON_CONNECTION
63879 /* Exit array. */
63880 FC_FREE(field_addr.sub_location);
63881#endif /* FREECIV_JSON_CONNECTION */
63882 }
63883
63884#ifdef FREECIV_JSON_CONNECTION
63885 field_addr.name = "build_cost";
63886#endif /* FREECIV_JSON_CONNECTION */
63887
63888 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63889 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63890 }
63891
63892#ifdef FREECIV_JSON_CONNECTION
63893 field_addr.name = "upkeep";
63894#endif /* FREECIV_JSON_CONNECTION */
63895
63896 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63898 }
63899
63900#ifdef FREECIV_JSON_CONNECTION
63901 field_addr.name = "sabotage";
63902#endif /* FREECIV_JSON_CONNECTION */
63903
63904 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63906 }
63907
63908#ifdef FREECIV_JSON_CONNECTION
63909 field_addr.name = "flags";
63910#endif /* FREECIV_JSON_CONNECTION */
63911
63912 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63914 }
63915
63916#ifdef FREECIV_JSON_CONNECTION
63917 field_addr.name = "soundtag";
63918#endif /* FREECIV_JSON_CONNECTION */
63919
63920 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63922 }
63923
63924#ifdef FREECIV_JSON_CONNECTION
63925 field_addr.name = "soundtag_alt";
63926#endif /* FREECIV_JSON_CONNECTION */
63927
63928 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63929 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63930 }
63931
63932#ifdef FREECIV_JSON_CONNECTION
63933 field_addr.name = "soundtag_alt2";
63934#endif /* FREECIV_JSON_CONNECTION */
63935
63936 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63937 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63938 }
63939
63940#ifdef FREECIV_JSON_CONNECTION
63941 field_addr.name = "helptext";
63942#endif /* FREECIV_JSON_CONNECTION */
63943
63944 {
63945 int i;
63946
63947 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63949 }
63950 strvec_reserve(real_packet->helptext, i);
63951
63952#ifdef FREECIV_JSON_CONNECTION
63953 /* Enter array. */
63954 field_addr.sub_location = plocation_elem_new(0);
63955#endif /* FREECIV_JSON_CONNECTION */
63956
63957 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63958#ifdef FREECIV_JSON_CONNECTION
63959 /* Next array element */
63960 field_addr.sub_location->number = i;
63961#endif /* FREECIV_JSON_CONNECTION */
63962
63963 {
63964 char readin[MAX_LEN_PACKET];
63965
63966 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63967 || !strvec_set(real_packet->helptext, i, readin)) {
63969 }
63970 }
63971 }
63972
63973#ifdef FREECIV_JSON_CONNECTION
63974 /* Exit array. */
63975 FC_FREE(field_addr.sub_location);
63976#endif /* FREECIV_JSON_CONNECTION */
63977 }
63978#endif /* FREECIV_DELTA_PROTOCOL */
63979
63981#undef FREE_PACKET_STRUCT
63982}
63983
63985{
63986 const struct packet_ruleset_building *real_packet = packet;
63987 int e;
63989
63990 log_packet_detailed("packet_ruleset_building_100: sending info about ()");
63991
63992#ifdef FREECIV_DELTA_PROTOCOL
63995 bool differ;
63996 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BUILDING;
63997
63998 if (nullptr == *hash) {
64000 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
64001 }
64002 BV_CLR_ALL(fields);
64003
64004 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64005 old = fc_malloc(sizeof(*old));
64006 /* temporary bitcopy just to insert correctly */
64007 *old = *real_packet;
64010 }
64011
64012 differ = (old->id != real_packet->id);
64013 if (differ) {
64014 BV_SET(fields, 0);
64015 }
64016
64017 differ = (old->genus != real_packet->genus);
64018 if (differ) {
64019 BV_SET(fields, 1);
64020 }
64021
64022 differ = (strcmp(old->name, real_packet->name) != 0);
64023 if (differ) {
64024 BV_SET(fields, 2);
64025 }
64026
64027 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
64028 if (differ) {
64029 BV_SET(fields, 3);
64030 }
64031
64032 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
64033 if (differ) {
64034 BV_SET(fields, 4);
64035 }
64036
64037 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
64038 if (differ) {
64039 BV_SET(fields, 5);
64040 }
64041
64042 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
64043 if (differ) {
64044 BV_SET(fields, 6);
64045 }
64046
64048 if (!differ) {
64049 int i;
64050
64051 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
64052 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
64053 if (differ) {
64054 break;
64055 }
64056 }
64057 }
64058 if (differ) {
64059 BV_SET(fields, 7);
64060 }
64061
64063 if (!differ) {
64064 int i;
64065
64066 for (i = 0; i < requirement_vector_size(&old->obs_reqs); i++) {
64067 differ = !are_requirements_equal(&old->obs_reqs.p[i], &real_packet->obs_reqs.p[i]);
64068 if (differ) {
64069 break;
64070 }
64071 }
64072 }
64073 if (differ) {
64074 BV_SET(fields, 8);
64075 }
64076
64077 differ = (old->build_cost != real_packet->build_cost);
64078 if (differ) {
64079 BV_SET(fields, 9);
64080 }
64081
64082 differ = (old->upkeep != real_packet->upkeep);
64083 if (differ) {
64084 BV_SET(fields, 10);
64085 }
64086
64087 differ = (old->sabotage != real_packet->sabotage);
64088 if (differ) {
64089 BV_SET(fields, 11);
64090 }
64091
64092 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
64093 if (differ) {
64094 BV_SET(fields, 12);
64095 }
64096
64097 differ = (strcmp(old->soundtag, real_packet->soundtag) != 0);
64098 if (differ) {
64099 BV_SET(fields, 13);
64100 }
64101
64102 differ = (strcmp(old->soundtag_alt, real_packet->soundtag_alt) != 0);
64103 if (differ) {
64104 BV_SET(fields, 14);
64105 }
64106
64107 differ = (strcmp(old->soundtag_alt2, real_packet->soundtag_alt2) != 0);
64108 if (differ) {
64109 BV_SET(fields, 15);
64110 }
64111
64112 if (real_packet->helptext) {
64113 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
64114 } else {
64115 differ = (strvec_size(old->helptext) > 0);
64116 }
64117 if (differ) {
64118 BV_SET(fields, 16);
64119 }
64120#endif /* FREECIV_DELTA_PROTOCOL */
64121
64122#ifdef FREECIV_JSON_CONNECTION
64123 struct plocation field_addr;
64124 {
64125 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64128 }
64129#endif /* FREECIV_JSON_CONNECTION */
64130
64131#ifdef FREECIV_DELTA_PROTOCOL
64132#ifdef FREECIV_JSON_CONNECTION
64133 field_addr.name = "fields";
64134#endif /* FREECIV_JSON_CONNECTION */
64135 e = 0;
64136 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64137 if (e) {
64138 log_packet_detailed("fields bitvector error detected");
64139 }
64140
64141 if (BV_ISSET(fields, 0)) {
64142 log_packet_detailed(" field 'id' has changed");
64143
64144#ifdef FREECIV_JSON_CONNECTION
64145 field_addr.name = "id";
64146#endif /* FREECIV_JSON_CONNECTION */
64147 e = 0;
64148
64149 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64150
64151 if (e) {
64152 log_packet_detailed("'id' field error detected");
64153 }
64154 }
64155
64156 if (BV_ISSET(fields, 1)) {
64157 log_packet_detailed(" field 'genus' has changed");
64158
64159#ifdef FREECIV_JSON_CONNECTION
64160 field_addr.name = "genus";
64161#endif /* FREECIV_JSON_CONNECTION */
64162 e = 0;
64163
64164 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
64165
64166 if (e) {
64167 log_packet_detailed("'genus' field error detected");
64168 }
64169 }
64170
64171 if (BV_ISSET(fields, 2)) {
64172 log_packet_detailed(" field 'name' has changed");
64173
64174#ifdef FREECIV_JSON_CONNECTION
64175 field_addr.name = "name";
64176#endif /* FREECIV_JSON_CONNECTION */
64177 e = 0;
64178
64179 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64180
64181 if (e) {
64182 log_packet_detailed("'name' field error detected");
64183 }
64184 }
64185
64186 if (BV_ISSET(fields, 3)) {
64187 log_packet_detailed(" field 'rule_name' has changed");
64188
64189#ifdef FREECIV_JSON_CONNECTION
64190 field_addr.name = "rule_name";
64191#endif /* FREECIV_JSON_CONNECTION */
64192 e = 0;
64193
64194 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64195
64196 if (e) {
64197 log_packet_detailed("'rule_name' field error detected");
64198 }
64199 }
64200
64201 if (BV_ISSET(fields, 4)) {
64202 log_packet_detailed(" field 'graphic_str' has changed");
64203
64204#ifdef FREECIV_JSON_CONNECTION
64205 field_addr.name = "graphic_str";
64206#endif /* FREECIV_JSON_CONNECTION */
64207 e = 0;
64208
64209 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64210
64211 if (e) {
64212 log_packet_detailed("'graphic_str' field error detected");
64213 }
64214 }
64215
64216 if (BV_ISSET(fields, 5)) {
64217 log_packet_detailed(" field 'graphic_alt' has changed");
64218
64219#ifdef FREECIV_JSON_CONNECTION
64220 field_addr.name = "graphic_alt";
64221#endif /* FREECIV_JSON_CONNECTION */
64222 e = 0;
64223
64224 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64225
64226 if (e) {
64227 log_packet_detailed("'graphic_alt' field error detected");
64228 }
64229 }
64230
64231 if (BV_ISSET(fields, 6)) {
64232 log_packet_detailed(" field 'graphic_alt2' has changed");
64233
64234#ifdef FREECIV_JSON_CONNECTION
64235 field_addr.name = "graphic_alt2";
64236#endif /* FREECIV_JSON_CONNECTION */
64237 e = 0;
64238
64239 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
64240
64241 if (e) {
64242 log_packet_detailed("'graphic_alt2' field error detected");
64243 }
64244 }
64245
64246 if (BV_ISSET(fields, 7)) {
64247 log_packet_detailed(" field 'reqs' has changed");
64248
64249#ifdef FREECIV_JSON_CONNECTION
64250 field_addr.name = "reqs";
64251#endif /* FREECIV_JSON_CONNECTION */
64252 e = 0;
64253
64254 {
64255 int i;
64256
64259
64260#ifdef FREECIV_JSON_CONNECTION
64261 /* Enter array. */
64262 field_addr.sub_location = plocation_elem_new(0);
64263#endif /* FREECIV_JSON_CONNECTION */
64264
64265 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
64266#ifdef FREECIV_JSON_CONNECTION
64267 /* Next array element. */
64268 field_addr.sub_location->number = i;
64269#endif /* FREECIV_JSON_CONNECTION */
64270
64271 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
64272 }
64273
64274#ifdef FREECIV_JSON_CONNECTION
64275 /* Exit array. */
64276 FC_FREE(field_addr.sub_location);
64277#endif /* FREECIV_JSON_CONNECTION */
64278 }
64279
64280 if (e) {
64281 log_packet_detailed("'reqs' field error detected");
64282 }
64283 }
64284
64285 if (BV_ISSET(fields, 8)) {
64286 log_packet_detailed(" field 'obs_reqs' has changed");
64287
64288#ifdef FREECIV_JSON_CONNECTION
64289 field_addr.name = "obs_reqs";
64290#endif /* FREECIV_JSON_CONNECTION */
64291 e = 0;
64292
64293 {
64294 int i;
64295
64298
64299#ifdef FREECIV_JSON_CONNECTION
64300 /* Enter array. */
64301 field_addr.sub_location = plocation_elem_new(0);
64302#endif /* FREECIV_JSON_CONNECTION */
64303
64304 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
64305#ifdef FREECIV_JSON_CONNECTION
64306 /* Next array element. */
64307 field_addr.sub_location->number = i;
64308#endif /* FREECIV_JSON_CONNECTION */
64309
64310 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
64311 }
64312
64313#ifdef FREECIV_JSON_CONNECTION
64314 /* Exit array. */
64315 FC_FREE(field_addr.sub_location);
64316#endif /* FREECIV_JSON_CONNECTION */
64317 }
64318
64319 if (e) {
64320 log_packet_detailed("'obs_reqs' field error detected");
64321 }
64322 }
64323
64324 if (BV_ISSET(fields, 9)) {
64325 log_packet_detailed(" field 'build_cost' has changed");
64326
64327#ifdef FREECIV_JSON_CONNECTION
64328 field_addr.name = "build_cost";
64329#endif /* FREECIV_JSON_CONNECTION */
64330 e = 0;
64331
64332 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
64333
64334 if (e) {
64335 log_packet_detailed("'build_cost' field error detected");
64336 }
64337 }
64338
64339 if (BV_ISSET(fields, 10)) {
64340 log_packet_detailed(" field 'upkeep' has changed");
64341
64342#ifdef FREECIV_JSON_CONNECTION
64343 field_addr.name = "upkeep";
64344#endif /* FREECIV_JSON_CONNECTION */
64345 e = 0;
64346
64347 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
64348
64349 if (e) {
64350 log_packet_detailed("'upkeep' field error detected");
64351 }
64352 }
64353
64354 if (BV_ISSET(fields, 11)) {
64355 log_packet_detailed(" field 'sabotage' has changed");
64356
64357#ifdef FREECIV_JSON_CONNECTION
64358 field_addr.name = "sabotage";
64359#endif /* FREECIV_JSON_CONNECTION */
64360 e = 0;
64361
64362 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
64363
64364 if (e) {
64365 log_packet_detailed("'sabotage' field error detected");
64366 }
64367 }
64368
64369 if (BV_ISSET(fields, 12)) {
64370 log_packet_detailed(" field 'flags' has changed");
64371
64372#ifdef FREECIV_JSON_CONNECTION
64373 field_addr.name = "flags";
64374#endif /* FREECIV_JSON_CONNECTION */
64375 e = 0;
64376
64377 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
64378
64379 if (e) {
64380 log_packet_detailed("'flags' field error detected");
64381 }
64382 }
64383
64384 if (BV_ISSET(fields, 13)) {
64385 log_packet_detailed(" field 'soundtag' has changed");
64386
64387#ifdef FREECIV_JSON_CONNECTION
64388 field_addr.name = "soundtag";
64389#endif /* FREECIV_JSON_CONNECTION */
64390 e = 0;
64391
64392 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
64393
64394 if (e) {
64395 log_packet_detailed("'soundtag' field error detected");
64396 }
64397 }
64398
64399 if (BV_ISSET(fields, 14)) {
64400 log_packet_detailed(" field 'soundtag_alt' has changed");
64401
64402#ifdef FREECIV_JSON_CONNECTION
64403 field_addr.name = "soundtag_alt";
64404#endif /* FREECIV_JSON_CONNECTION */
64405 e = 0;
64406
64407 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
64408
64409 if (e) {
64410 log_packet_detailed("'soundtag_alt' field error detected");
64411 }
64412 }
64413
64414 if (BV_ISSET(fields, 15)) {
64415 log_packet_detailed(" field 'soundtag_alt2' has changed");
64416
64417#ifdef FREECIV_JSON_CONNECTION
64418 field_addr.name = "soundtag_alt2";
64419#endif /* FREECIV_JSON_CONNECTION */
64420 e = 0;
64421
64422 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
64423
64424 if (e) {
64425 log_packet_detailed("'soundtag_alt2' field error detected");
64426 }
64427 }
64428
64429 if (BV_ISSET(fields, 16)) {
64430 log_packet_detailed(" field 'helptext' has changed");
64431
64432#ifdef FREECIV_JSON_CONNECTION
64433 field_addr.name = "helptext";
64434#endif /* FREECIV_JSON_CONNECTION */
64435 e = 0;
64436
64437 if (!real_packet->helptext) {
64438 /* Transmit null as empty */
64439 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
64440 } else {
64441 int i;
64442
64444 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
64445
64446#ifdef FREECIV_JSON_CONNECTION
64447 /* Enter array. */
64448 field_addr.sub_location = plocation_elem_new(0);
64449#endif /* FREECIV_JSON_CONNECTION */
64450
64451 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
64452#ifdef FREECIV_JSON_CONNECTION
64453 /* Next array element. */
64454 field_addr.sub_location->number = i;
64455#endif /* FREECIV_JSON_CONNECTION */
64456
64457 {
64458 const char *pstr = strvec_get(real_packet->helptext, i);
64459
64460 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
64461 }
64462 }
64463
64464#ifdef FREECIV_JSON_CONNECTION
64465 /* Exit array. */
64466 FC_FREE(field_addr.sub_location);
64467#endif /* FREECIV_JSON_CONNECTION */
64468 }
64469
64470 if (e) {
64471 log_packet_detailed("'helptext' field error detected");
64472 }
64473 }
64474
64475 old->id = real_packet->id;
64476 old->genus = real_packet->genus;
64477 sz_strlcpy(old->name, real_packet->name);
64478 sz_strlcpy(old->rule_name, real_packet->rule_name);
64479 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
64480 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
64481 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
64482 requirement_vector_copy(&old->reqs, &real_packet->reqs);
64483 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
64484 old->build_cost = real_packet->build_cost;
64485 old->upkeep = real_packet->upkeep;
64486 old->sabotage = real_packet->sabotage;
64487 old->flags = real_packet->flags;
64488 sz_strlcpy(old->soundtag, real_packet->soundtag);
64489 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
64490 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
64491 if (real_packet->helptext) {
64492 strvec_copy(old->helptext, real_packet->helptext);
64493 } else {
64494 strvec_clear(old->helptext);
64495 }
64496
64497#else /* FREECIV_DELTA_PROTOCOL */
64498#ifdef FREECIV_JSON_CONNECTION
64499 field_addr.name = "id";
64500#endif /* FREECIV_JSON_CONNECTION */
64501 e = 0;
64502
64503 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64504
64505 if (e) {
64506 log_packet_detailed("'id' field error detected");
64507 }
64508
64509#ifdef FREECIV_JSON_CONNECTION
64510 field_addr.name = "genus";
64511#endif /* FREECIV_JSON_CONNECTION */
64512 e = 0;
64513
64514 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
64515
64516 if (e) {
64517 log_packet_detailed("'genus' field error detected");
64518 }
64519
64520#ifdef FREECIV_JSON_CONNECTION
64521 field_addr.name = "name";
64522#endif /* FREECIV_JSON_CONNECTION */
64523 e = 0;
64524
64525 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64526
64527 if (e) {
64528 log_packet_detailed("'name' field error detected");
64529 }
64530
64531#ifdef FREECIV_JSON_CONNECTION
64532 field_addr.name = "rule_name";
64533#endif /* FREECIV_JSON_CONNECTION */
64534 e = 0;
64535
64536 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64537
64538 if (e) {
64539 log_packet_detailed("'rule_name' field error detected");
64540 }
64541
64542#ifdef FREECIV_JSON_CONNECTION
64543 field_addr.name = "graphic_str";
64544#endif /* FREECIV_JSON_CONNECTION */
64545 e = 0;
64546
64547 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64548
64549 if (e) {
64550 log_packet_detailed("'graphic_str' field error detected");
64551 }
64552
64553#ifdef FREECIV_JSON_CONNECTION
64554 field_addr.name = "graphic_alt";
64555#endif /* FREECIV_JSON_CONNECTION */
64556 e = 0;
64557
64558 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64559
64560 if (e) {
64561 log_packet_detailed("'graphic_alt' field error detected");
64562 }
64563
64564#ifdef FREECIV_JSON_CONNECTION
64565 field_addr.name = "graphic_alt2";
64566#endif /* FREECIV_JSON_CONNECTION */
64567 e = 0;
64568
64569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
64570
64571 if (e) {
64572 log_packet_detailed("'graphic_alt2' field error detected");
64573 }
64574
64575#ifdef FREECIV_JSON_CONNECTION
64576 field_addr.name = "reqs";
64577#endif /* FREECIV_JSON_CONNECTION */
64578 e = 0;
64579
64580 {
64581 int i;
64582
64585
64586#ifdef FREECIV_JSON_CONNECTION
64587 /* Enter array. */
64588 field_addr.sub_location = plocation_elem_new(0);
64589#endif /* FREECIV_JSON_CONNECTION */
64590
64591 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
64592#ifdef FREECIV_JSON_CONNECTION
64593 /* Next array element. */
64594 field_addr.sub_location->number = i;
64595#endif /* FREECIV_JSON_CONNECTION */
64596
64597 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
64598 }
64599
64600#ifdef FREECIV_JSON_CONNECTION
64601 /* Exit array. */
64602 FC_FREE(field_addr.sub_location);
64603#endif /* FREECIV_JSON_CONNECTION */
64604 }
64605
64606 if (e) {
64607 log_packet_detailed("'reqs' field error detected");
64608 }
64609
64610#ifdef FREECIV_JSON_CONNECTION
64611 field_addr.name = "obs_reqs";
64612#endif /* FREECIV_JSON_CONNECTION */
64613 e = 0;
64614
64615 {
64616 int i;
64617
64620
64621#ifdef FREECIV_JSON_CONNECTION
64622 /* Enter array. */
64623 field_addr.sub_location = plocation_elem_new(0);
64624#endif /* FREECIV_JSON_CONNECTION */
64625
64626 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
64627#ifdef FREECIV_JSON_CONNECTION
64628 /* Next array element. */
64629 field_addr.sub_location->number = i;
64630#endif /* FREECIV_JSON_CONNECTION */
64631
64632 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
64633 }
64634
64635#ifdef FREECIV_JSON_CONNECTION
64636 /* Exit array. */
64637 FC_FREE(field_addr.sub_location);
64638#endif /* FREECIV_JSON_CONNECTION */
64639 }
64640
64641 if (e) {
64642 log_packet_detailed("'obs_reqs' field error detected");
64643 }
64644
64645#ifdef FREECIV_JSON_CONNECTION
64646 field_addr.name = "build_cost";
64647#endif /* FREECIV_JSON_CONNECTION */
64648 e = 0;
64649
64650 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
64651
64652 if (e) {
64653 log_packet_detailed("'build_cost' field error detected");
64654 }
64655
64656#ifdef FREECIV_JSON_CONNECTION
64657 field_addr.name = "upkeep";
64658#endif /* FREECIV_JSON_CONNECTION */
64659 e = 0;
64660
64661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
64662
64663 if (e) {
64664 log_packet_detailed("'upkeep' field error detected");
64665 }
64666
64667#ifdef FREECIV_JSON_CONNECTION
64668 field_addr.name = "sabotage";
64669#endif /* FREECIV_JSON_CONNECTION */
64670 e = 0;
64671
64672 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
64673
64674 if (e) {
64675 log_packet_detailed("'sabotage' field error detected");
64676 }
64677
64678#ifdef FREECIV_JSON_CONNECTION
64679 field_addr.name = "flags";
64680#endif /* FREECIV_JSON_CONNECTION */
64681 e = 0;
64682
64683 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
64684
64685 if (e) {
64686 log_packet_detailed("'flags' field error detected");
64687 }
64688
64689#ifdef FREECIV_JSON_CONNECTION
64690 field_addr.name = "soundtag";
64691#endif /* FREECIV_JSON_CONNECTION */
64692 e = 0;
64693
64694 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
64695
64696 if (e) {
64697 log_packet_detailed("'soundtag' field error detected");
64698 }
64699
64700#ifdef FREECIV_JSON_CONNECTION
64701 field_addr.name = "soundtag_alt";
64702#endif /* FREECIV_JSON_CONNECTION */
64703 e = 0;
64704
64705 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
64706
64707 if (e) {
64708 log_packet_detailed("'soundtag_alt' field error detected");
64709 }
64710
64711#ifdef FREECIV_JSON_CONNECTION
64712 field_addr.name = "soundtag_alt2";
64713#endif /* FREECIV_JSON_CONNECTION */
64714 e = 0;
64715
64716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
64717
64718 if (e) {
64719 log_packet_detailed("'soundtag_alt2' field error detected");
64720 }
64721
64722#ifdef FREECIV_JSON_CONNECTION
64723 field_addr.name = "helptext";
64724#endif /* FREECIV_JSON_CONNECTION */
64725 e = 0;
64726
64727 if (!real_packet->helptext) {
64728 /* Transmit null as empty */
64729 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
64730 } else {
64731 int i;
64732
64734 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
64735
64736#ifdef FREECIV_JSON_CONNECTION
64737 /* Enter array. */
64738 field_addr.sub_location = plocation_elem_new(0);
64739#endif /* FREECIV_JSON_CONNECTION */
64740
64741 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
64742#ifdef FREECIV_JSON_CONNECTION
64743 /* Next array element. */
64744 field_addr.sub_location->number = i;
64745#endif /* FREECIV_JSON_CONNECTION */
64746
64747 {
64748 const char *pstr = strvec_get(real_packet->helptext, i);
64749
64750 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
64751 }
64752 }
64753
64754#ifdef FREECIV_JSON_CONNECTION
64755 /* Exit array. */
64756 FC_FREE(field_addr.sub_location);
64757#endif /* FREECIV_JSON_CONNECTION */
64758 }
64759
64760 if (e) {
64761 log_packet_detailed("'helptext' field error detected");
64762 }
64763#endif /* FREECIV_DELTA_PROTOCOL */
64764
64766}
64767
64769{
64770 if (!pc->used) {
64771 log_error("WARNING: trying to send data to the closed connection %s",
64773 return -1;
64774 }
64775 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet != nullptr, -1,
64776 "Handler for PACKET_RULESET_BUILDING not installed");
64777 return pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet(pc, packet);
64778}
64779
64781{
64782 conn_list_iterate(dest, pconn) {
64785}
64786
64788{
64789 memset(packet, 0, sizeof(*packet));
64790}
64791
64792#define free_packet_ruleset_impr_flag(_packet) (void) 0
64793#define destroy_packet_ruleset_impr_flag free
64794
64795#ifdef FREECIV_DELTA_PROTOCOL
64796#define hash_packet_ruleset_impr_flag_100 hash_const
64797#define cmp_packet_ruleset_impr_flag_100 cmp_const
64799#endif /* FREECIV_DELTA_PROTOCOL */
64800
64802{
64803#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_impr_flag(_packet)
64805
64806#ifdef FREECIV_JSON_CONNECTION
64807 struct plocation field_addr;
64808 {
64809 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64812 }
64813#endif /* FREECIV_JSON_CONNECTION */
64814
64815 log_packet_detailed("packet_ruleset_impr_flag_100: got info about ()");
64816
64817#ifdef FREECIV_DELTA_PROTOCOL
64820 struct genhash **hash = pc->phs.received + PACKET_RULESET_IMPR_FLAG;
64821
64822 if (nullptr == *hash) {
64824 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64825 }
64826
64827 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64828 *real_packet = *old;
64829 } else {
64830 /* packet is already initialized empty */
64831 log_packet_detailed(" no old info");
64832 }
64833
64834#ifdef FREECIV_JSON_CONNECTION
64835 field_addr.name = "fields";
64836#endif /* FREECIV_JSON_CONNECTION */
64837 DIO_BV_GET(&din, &field_addr, fields);
64838
64839 if (BV_ISSET(fields, 0)) {
64840 log_packet_detailed(" got field 'id'");
64841
64842#ifdef FREECIV_JSON_CONNECTION
64843 field_addr.name = "id";
64844#endif /* FREECIV_JSON_CONNECTION */
64845
64846 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64848 }
64849 }
64850
64851 if (BV_ISSET(fields, 1)) {
64852 log_packet_detailed(" got field 'name'");
64853
64854#ifdef FREECIV_JSON_CONNECTION
64855 field_addr.name = "name";
64856#endif /* FREECIV_JSON_CONNECTION */
64857
64858 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64860 }
64861 }
64862
64863 if (BV_ISSET(fields, 2)) {
64864 log_packet_detailed(" got field 'helptxt'");
64865
64866#ifdef FREECIV_JSON_CONNECTION
64867 field_addr.name = "helptxt";
64868#endif /* FREECIV_JSON_CONNECTION */
64869
64870 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64872 }
64873 }
64874
64875 if (nullptr == old) {
64876 old = fc_malloc(sizeof(*old));
64878 *old = *real_packet;
64880 } else {
64881 *old = *real_packet;
64882 }
64883
64884#else /* FREECIV_DELTA_PROTOCOL */
64885#ifdef FREECIV_JSON_CONNECTION
64886 field_addr.name = "id";
64887#endif /* FREECIV_JSON_CONNECTION */
64888
64889 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64891 }
64892
64893#ifdef FREECIV_JSON_CONNECTION
64894 field_addr.name = "name";
64895#endif /* FREECIV_JSON_CONNECTION */
64896
64897 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64899 }
64900
64901#ifdef FREECIV_JSON_CONNECTION
64902 field_addr.name = "helptxt";
64903#endif /* FREECIV_JSON_CONNECTION */
64904
64905 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64907 }
64908#endif /* FREECIV_DELTA_PROTOCOL */
64909
64911#undef FREE_PACKET_STRUCT
64912}
64913
64915{
64916 const struct packet_ruleset_impr_flag *real_packet = packet;
64917 int e;
64919
64920 log_packet_detailed("packet_ruleset_impr_flag_100: sending info about ()");
64921
64922#ifdef FREECIV_DELTA_PROTOCOL
64925 bool differ;
64926 struct genhash **hash = pc->phs.sent + PACKET_RULESET_IMPR_FLAG;
64927
64928 if (nullptr == *hash) {
64930 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64931 }
64932 BV_CLR_ALL(fields);
64933
64934 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64935 old = fc_malloc(sizeof(*old));
64936 /* temporary bitcopy just to insert correctly */
64937 *old = *real_packet;
64940 }
64941
64942 differ = (old->id != real_packet->id);
64943 if (differ) {
64944 BV_SET(fields, 0);
64945 }
64946
64947 differ = (strcmp(old->name, real_packet->name) != 0);
64948 if (differ) {
64949 BV_SET(fields, 1);
64950 }
64951
64952 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
64953 if (differ) {
64954 BV_SET(fields, 2);
64955 }
64956#endif /* FREECIV_DELTA_PROTOCOL */
64957
64958#ifdef FREECIV_JSON_CONNECTION
64959 struct plocation field_addr;
64960 {
64961 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64964 }
64965#endif /* FREECIV_JSON_CONNECTION */
64966
64967#ifdef FREECIV_DELTA_PROTOCOL
64968#ifdef FREECIV_JSON_CONNECTION
64969 field_addr.name = "fields";
64970#endif /* FREECIV_JSON_CONNECTION */
64971 e = 0;
64972 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64973 if (e) {
64974 log_packet_detailed("fields bitvector error detected");
64975 }
64976
64977 if (BV_ISSET(fields, 0)) {
64978 log_packet_detailed(" field 'id' has changed");
64979
64980#ifdef FREECIV_JSON_CONNECTION
64981 field_addr.name = "id";
64982#endif /* FREECIV_JSON_CONNECTION */
64983 e = 0;
64984
64985 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64986
64987 if (e) {
64988 log_packet_detailed("'id' field error detected");
64989 }
64990 }
64991
64992 if (BV_ISSET(fields, 1)) {
64993 log_packet_detailed(" field 'name' has changed");
64994
64995#ifdef FREECIV_JSON_CONNECTION
64996 field_addr.name = "name";
64997#endif /* FREECIV_JSON_CONNECTION */
64998 e = 0;
64999
65000 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
65001
65002 if (e) {
65003 log_packet_detailed("'name' field error detected");
65004 }
65005 }
65006
65007 if (BV_ISSET(fields, 2)) {
65008 log_packet_detailed(" field 'helptxt' has changed");
65009
65010#ifdef FREECIV_JSON_CONNECTION
65011 field_addr.name = "helptxt";
65012#endif /* FREECIV_JSON_CONNECTION */
65013 e = 0;
65014
65015 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
65016
65017 if (e) {
65018 log_packet_detailed("'helptxt' field error detected");
65019 }
65020 }
65021
65022 *old = *real_packet;
65023
65024#else /* FREECIV_DELTA_PROTOCOL */
65025#ifdef FREECIV_JSON_CONNECTION
65026 field_addr.name = "id";
65027#endif /* FREECIV_JSON_CONNECTION */
65028 e = 0;
65029
65030 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65031
65032 if (e) {
65033 log_packet_detailed("'id' field error detected");
65034 }
65035
65036#ifdef FREECIV_JSON_CONNECTION
65037 field_addr.name = "name";
65038#endif /* FREECIV_JSON_CONNECTION */
65039 e = 0;
65040
65041 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
65042
65043 if (e) {
65044 log_packet_detailed("'name' field error detected");
65045 }
65046
65047#ifdef FREECIV_JSON_CONNECTION
65048 field_addr.name = "helptxt";
65049#endif /* FREECIV_JSON_CONNECTION */
65050 e = 0;
65051
65052 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
65053
65054 if (e) {
65055 log_packet_detailed("'helptxt' field error detected");
65056 }
65057#endif /* FREECIV_DELTA_PROTOCOL */
65058
65060}
65061
65063{
65064 if (!pc->used) {
65065 log_error("WARNING: trying to send data to the closed connection %s",
65067 return -1;
65068 }
65069 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet != nullptr, -1,
65070 "Handler for PACKET_RULESET_IMPR_FLAG not installed");
65071 return pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet(pc, packet);
65072}
65073
65075{
65076 conn_list_iterate(dest, pconn) {
65079}
65080
65081static inline void init_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
65082{
65083 memset(packet, 0, sizeof(*packet));
65084
65085 packet->helptext = strvec_new();
65086}
65087
65088static inline void free_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
65089{
65090 if (packet->helptext) {
65091 strvec_destroy(packet->helptext);
65092 packet->helptext = nullptr;
65093 }
65094}
65095
65096static inline void destroy_packet_ruleset_terrain(void *packet)
65097{
65099 free(packet);
65100}
65101
65102#ifdef FREECIV_DELTA_PROTOCOL
65103#define hash_packet_ruleset_terrain_100 hash_const
65104#define cmp_packet_ruleset_terrain_100 cmp_const
65106#endif /* FREECIV_DELTA_PROTOCOL */
65107
65109{
65110#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain(_packet)
65112
65113#ifdef FREECIV_JSON_CONNECTION
65114 struct plocation field_addr;
65115 {
65116 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
65119 }
65120#endif /* FREECIV_JSON_CONNECTION */
65121
65122 log_packet_detailed("packet_ruleset_terrain_100: got info about ()");
65123
65124#ifdef FREECIV_DELTA_PROTOCOL
65127 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN;
65128
65129 if (nullptr == *hash) {
65131 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
65132 }
65133
65134 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65135 real_packet->id = old->id;
65136 real_packet->tclass = old->tclass;
65137 real_packet->flags = old->flags;
65138 real_packet->native_to = old->native_to;
65139 sz_strlcpy(real_packet->name, old->name);
65140 sz_strlcpy(real_packet->rule_name, old->rule_name);
65141 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
65142 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
65143 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
65144 real_packet->movement_cost = old->movement_cost;
65145 real_packet->defense_bonus = old->defense_bonus;
65146 {
65147 int i;
65148
65149 for (i = 0; i < O_LAST; i++) {
65150 real_packet->output[i] = old->output[i];
65151 }
65152 }
65153 real_packet->num_resources = old->num_resources;
65154 {
65155 int i;
65156
65157 for (i = 0; i < old->num_resources; i++) {
65158 real_packet->resources[i] = old->resources[i];
65159 }
65160 }
65161 {
65162 int i;
65163
65164 for (i = 0; i < old->num_resources; i++) {
65165 real_packet->resource_freq[i] = old->resource_freq[i];
65166 }
65167 }
65168 {
65169 int i;
65170
65171 for (i = 0; i < O_LAST; i++) {
65172 real_packet->road_output_incr_pct[i] = old->road_output_incr_pct[i];
65173 }
65174 }
65175 real_packet->base_time = old->base_time;
65176 real_packet->road_time = old->road_time;
65177 real_packet->cultivate_result = old->cultivate_result;
65178 real_packet->cultivate_time = old->cultivate_time;
65179 real_packet->plant_result = old->plant_result;
65180 real_packet->plant_time = old->plant_time;
65181 real_packet->irrigation_food_incr = old->irrigation_food_incr;
65182 real_packet->irrigation_time = old->irrigation_time;
65183 real_packet->mining_shield_incr = old->mining_shield_incr;
65184 real_packet->mining_time = old->mining_time;
65185 real_packet->animal = old->animal;
65186 real_packet->transform_result = old->transform_result;
65187 real_packet->transform_time = old->transform_time;
65188 real_packet->placing_time = old->placing_time;
65189 real_packet->pillage_time = old->pillage_time;
65190 real_packet->extra_count = old->extra_count;
65191 {
65192 int i;
65193
65194 for (i = 0; i < old->extra_count; i++) {
65195 real_packet->extra_removal_times[i] = old->extra_removal_times[i];
65196 }
65197 }
65198 real_packet->color_red = old->color_red;
65199 real_packet->color_green = old->color_green;
65200 real_packet->color_blue = old->color_blue;
65201 if (old->helptext) {
65202 strvec_copy(real_packet->helptext, old->helptext);
65203 } else {
65204 strvec_clear(real_packet->helptext);
65205 }
65206 } else {
65207 /* packet is already initialized empty */
65208 log_packet_detailed(" no old info");
65209 }
65210
65211#ifdef FREECIV_JSON_CONNECTION
65212 field_addr.name = "fields";
65213#endif /* FREECIV_JSON_CONNECTION */
65214 DIO_BV_GET(&din, &field_addr, fields);
65215
65216 if (BV_ISSET(fields, 0)) {
65217 log_packet_detailed(" got field 'id'");
65218
65219#ifdef FREECIV_JSON_CONNECTION
65220 field_addr.name = "id";
65221#endif /* FREECIV_JSON_CONNECTION */
65222
65223 {
65224 int readin;
65225
65226 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65228 }
65229 real_packet->id = readin;
65230 }
65231 }
65232
65233 if (BV_ISSET(fields, 1)) {
65234 log_packet_detailed(" got field 'tclass'");
65235
65236#ifdef FREECIV_JSON_CONNECTION
65237 field_addr.name = "tclass";
65238#endif /* FREECIV_JSON_CONNECTION */
65239
65240 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
65242 }
65243 }
65244
65245 if (BV_ISSET(fields, 2)) {
65246 log_packet_detailed(" got field 'flags'");
65247
65248#ifdef FREECIV_JSON_CONNECTION
65249 field_addr.name = "flags";
65250#endif /* FREECIV_JSON_CONNECTION */
65251
65252 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
65254 }
65255 }
65256
65257 if (BV_ISSET(fields, 3)) {
65258 log_packet_detailed(" got field 'native_to'");
65259
65260#ifdef FREECIV_JSON_CONNECTION
65261 field_addr.name = "native_to";
65262#endif /* FREECIV_JSON_CONNECTION */
65263
65264 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
65265 RECEIVE_PACKET_FIELD_ERROR(native_to);
65266 }
65267 }
65268
65269 if (BV_ISSET(fields, 4)) {
65270 log_packet_detailed(" got field 'name'");
65271
65272#ifdef FREECIV_JSON_CONNECTION
65273 field_addr.name = "name";
65274#endif /* FREECIV_JSON_CONNECTION */
65275
65276 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
65278 }
65279 }
65280
65281 if (BV_ISSET(fields, 5)) {
65282 log_packet_detailed(" got field 'rule_name'");
65283
65284#ifdef FREECIV_JSON_CONNECTION
65285 field_addr.name = "rule_name";
65286#endif /* FREECIV_JSON_CONNECTION */
65287
65288 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
65289 RECEIVE_PACKET_FIELD_ERROR(rule_name);
65290 }
65291 }
65292
65293 if (BV_ISSET(fields, 6)) {
65294 log_packet_detailed(" got field 'graphic_str'");
65295
65296#ifdef FREECIV_JSON_CONNECTION
65297 field_addr.name = "graphic_str";
65298#endif /* FREECIV_JSON_CONNECTION */
65299
65300 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
65301 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
65302 }
65303 }
65304
65305 if (BV_ISSET(fields, 7)) {
65306 log_packet_detailed(" got field 'graphic_alt'");
65307
65308#ifdef FREECIV_JSON_CONNECTION
65309 field_addr.name = "graphic_alt";
65310#endif /* FREECIV_JSON_CONNECTION */
65311
65312 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
65313 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
65314 }
65315 }
65316
65317 if (BV_ISSET(fields, 8)) {
65318 log_packet_detailed(" got field 'graphic_alt2'");
65319
65320#ifdef FREECIV_JSON_CONNECTION
65321 field_addr.name = "graphic_alt2";
65322#endif /* FREECIV_JSON_CONNECTION */
65323
65324 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
65325 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
65326 }
65327 }
65328
65329 if (BV_ISSET(fields, 9)) {
65330 log_packet_detailed(" got field 'movement_cost'");
65331
65332#ifdef FREECIV_JSON_CONNECTION
65333 field_addr.name = "movement_cost";
65334#endif /* FREECIV_JSON_CONNECTION */
65335
65336 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
65337 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
65338 }
65339 }
65340
65341 if (BV_ISSET(fields, 10)) {
65342 log_packet_detailed(" got field 'defense_bonus'");
65343
65344#ifdef FREECIV_JSON_CONNECTION
65345 field_addr.name = "defense_bonus";
65346#endif /* FREECIV_JSON_CONNECTION */
65347
65348 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
65349 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
65350 }
65351 }
65352
65353 if (BV_ISSET(fields, 11)) {
65354 log_packet_detailed(" got field 'output'");
65355
65356#ifdef FREECIV_JSON_CONNECTION
65357 field_addr.name = "output";
65358#endif /* FREECIV_JSON_CONNECTION */
65359
65360 {
65361 int i;
65362
65363
65364#ifdef FREECIV_JSON_CONNECTION
65365 /* Enter array. */
65366 field_addr.sub_location = plocation_elem_new(0);
65367#endif /* FREECIV_JSON_CONNECTION */
65368
65369 for (i = 0; i < O_LAST; i++) {
65370#ifdef FREECIV_JSON_CONNECTION
65371 /* Next array element */
65372 field_addr.sub_location->number = i;
65373#endif /* FREECIV_JSON_CONNECTION */
65374
65375 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
65377 }
65378 }
65379
65380#ifdef FREECIV_JSON_CONNECTION
65381 /* Exit array. */
65382 FC_FREE(field_addr.sub_location);
65383#endif /* FREECIV_JSON_CONNECTION */
65384 }
65385 }
65386
65387 if (BV_ISSET(fields, 12)) {
65388 log_packet_detailed(" got field 'num_resources'");
65389
65390#ifdef FREECIV_JSON_CONNECTION
65391 field_addr.name = "num_resources";
65392#endif /* FREECIV_JSON_CONNECTION */
65393
65394 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
65395 RECEIVE_PACKET_FIELD_ERROR(num_resources);
65396 }
65397 }
65398
65399 if (BV_ISSET(fields, 13)) {
65400 log_packet_detailed(" got field 'resources'");
65401
65402#ifdef FREECIV_JSON_CONNECTION
65403 field_addr.name = "resources";
65404#endif /* FREECIV_JSON_CONNECTION */
65405
65406 {
65407 int i;
65408
65409 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65410 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
65411 }
65412
65413#ifdef FREECIV_JSON_CONNECTION
65414 /* Enter array. */
65415 field_addr.sub_location = plocation_elem_new(0);
65416#endif /* FREECIV_JSON_CONNECTION */
65417
65418 for (i = 0; i < real_packet->num_resources; i++) {
65419#ifdef FREECIV_JSON_CONNECTION
65420 /* Next array element */
65421 field_addr.sub_location->number = i;
65422#endif /* FREECIV_JSON_CONNECTION */
65423
65424 {
65425 int readin;
65426
65427 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65429 }
65430 real_packet->resources[i] = readin;
65431 }
65432 }
65433
65434#ifdef FREECIV_JSON_CONNECTION
65435 /* Exit array. */
65436 FC_FREE(field_addr.sub_location);
65437#endif /* FREECIV_JSON_CONNECTION */
65438 }
65439 }
65440
65441 if (BV_ISSET(fields, 14)) {
65442 log_packet_detailed(" got field 'resource_freq'");
65443
65444#ifdef FREECIV_JSON_CONNECTION
65445 field_addr.name = "resource_freq";
65446#endif /* FREECIV_JSON_CONNECTION */
65447
65448 {
65449 int i;
65450
65451 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65452 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
65453 }
65454
65455#ifdef FREECIV_JSON_CONNECTION
65456 /* Enter array. */
65457 field_addr.sub_location = plocation_elem_new(0);
65458#endif /* FREECIV_JSON_CONNECTION */
65459
65460 for (i = 0; i < real_packet->num_resources; i++) {
65461#ifdef FREECIV_JSON_CONNECTION
65462 /* Next array element */
65463 field_addr.sub_location->number = i;
65464#endif /* FREECIV_JSON_CONNECTION */
65465
65466 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
65467 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
65468 }
65469 }
65470
65471#ifdef FREECIV_JSON_CONNECTION
65472 /* Exit array. */
65473 FC_FREE(field_addr.sub_location);
65474#endif /* FREECIV_JSON_CONNECTION */
65475 }
65476 }
65477
65478 if (BV_ISSET(fields, 15)) {
65479 log_packet_detailed(" got field 'road_output_incr_pct'");
65480
65481#ifdef FREECIV_JSON_CONNECTION
65482 field_addr.name = "road_output_incr_pct";
65483#endif /* FREECIV_JSON_CONNECTION */
65484
65485 {
65486 int i;
65487
65488
65489#ifdef FREECIV_JSON_CONNECTION
65490 /* Enter array. */
65491 field_addr.sub_location = plocation_elem_new(0);
65492#endif /* FREECIV_JSON_CONNECTION */
65493
65494 for (i = 0; i < O_LAST; i++) {
65495#ifdef FREECIV_JSON_CONNECTION
65496 /* Next array element */
65497 field_addr.sub_location->number = i;
65498#endif /* FREECIV_JSON_CONNECTION */
65499
65500 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
65501 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
65502 }
65503 }
65504
65505#ifdef FREECIV_JSON_CONNECTION
65506 /* Exit array. */
65507 FC_FREE(field_addr.sub_location);
65508#endif /* FREECIV_JSON_CONNECTION */
65509 }
65510 }
65511
65512 if (BV_ISSET(fields, 16)) {
65513 log_packet_detailed(" got field 'base_time'");
65514
65515#ifdef FREECIV_JSON_CONNECTION
65516 field_addr.name = "base_time";
65517#endif /* FREECIV_JSON_CONNECTION */
65518
65519 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
65520 RECEIVE_PACKET_FIELD_ERROR(base_time);
65521 }
65522 }
65523
65524 if (BV_ISSET(fields, 17)) {
65525 log_packet_detailed(" got field 'road_time'");
65526
65527#ifdef FREECIV_JSON_CONNECTION
65528 field_addr.name = "road_time";
65529#endif /* FREECIV_JSON_CONNECTION */
65530
65531 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
65532 RECEIVE_PACKET_FIELD_ERROR(road_time);
65533 }
65534 }
65535
65536 if (BV_ISSET(fields, 18)) {
65537 log_packet_detailed(" got field 'cultivate_result'");
65538
65539#ifdef FREECIV_JSON_CONNECTION
65540 field_addr.name = "cultivate_result";
65541#endif /* FREECIV_JSON_CONNECTION */
65542
65543 {
65544 int readin;
65545
65546 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65547 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
65548 }
65549 real_packet->cultivate_result = readin;
65550 }
65551 }
65552
65553 if (BV_ISSET(fields, 19)) {
65554 log_packet_detailed(" got field 'cultivate_time'");
65555
65556#ifdef FREECIV_JSON_CONNECTION
65557 field_addr.name = "cultivate_time";
65558#endif /* FREECIV_JSON_CONNECTION */
65559
65560 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
65561 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
65562 }
65563 }
65564
65565 if (BV_ISSET(fields, 20)) {
65566 log_packet_detailed(" got field 'plant_result'");
65567
65568#ifdef FREECIV_JSON_CONNECTION
65569 field_addr.name = "plant_result";
65570#endif /* FREECIV_JSON_CONNECTION */
65571
65572 {
65573 int readin;
65574
65575 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65576 RECEIVE_PACKET_FIELD_ERROR(plant_result);
65577 }
65578 real_packet->plant_result = readin;
65579 }
65580 }
65581
65582 if (BV_ISSET(fields, 21)) {
65583 log_packet_detailed(" got field 'plant_time'");
65584
65585#ifdef FREECIV_JSON_CONNECTION
65586 field_addr.name = "plant_time";
65587#endif /* FREECIV_JSON_CONNECTION */
65588
65589 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
65590 RECEIVE_PACKET_FIELD_ERROR(plant_time);
65591 }
65592 }
65593
65594 if (BV_ISSET(fields, 22)) {
65595 log_packet_detailed(" got field 'irrigation_food_incr'");
65596
65597#ifdef FREECIV_JSON_CONNECTION
65598 field_addr.name = "irrigation_food_incr";
65599#endif /* FREECIV_JSON_CONNECTION */
65600
65601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
65602 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
65603 }
65604 }
65605
65606 if (BV_ISSET(fields, 23)) {
65607 log_packet_detailed(" got field 'irrigation_time'");
65608
65609#ifdef FREECIV_JSON_CONNECTION
65610 field_addr.name = "irrigation_time";
65611#endif /* FREECIV_JSON_CONNECTION */
65612
65613 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
65614 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
65615 }
65616 }
65617
65618 if (BV_ISSET(fields, 24)) {
65619 log_packet_detailed(" got field 'mining_shield_incr'");
65620
65621#ifdef FREECIV_JSON_CONNECTION
65622 field_addr.name = "mining_shield_incr";
65623#endif /* FREECIV_JSON_CONNECTION */
65624
65625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
65626 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
65627 }
65628 }
65629
65630 if (BV_ISSET(fields, 25)) {
65631 log_packet_detailed(" got field 'mining_time'");
65632
65633#ifdef FREECIV_JSON_CONNECTION
65634 field_addr.name = "mining_time";
65635#endif /* FREECIV_JSON_CONNECTION */
65636
65637 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
65638 RECEIVE_PACKET_FIELD_ERROR(mining_time);
65639 }
65640 }
65641
65642 if (BV_ISSET(fields, 26)) {
65643 log_packet_detailed(" got field 'animal'");
65644
65645#ifdef FREECIV_JSON_CONNECTION
65646 field_addr.name = "animal";
65647#endif /* FREECIV_JSON_CONNECTION */
65648
65649 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
65651 }
65652 }
65653
65654 if (BV_ISSET(fields, 27)) {
65655 log_packet_detailed(" got field 'transform_result'");
65656
65657#ifdef FREECIV_JSON_CONNECTION
65658 field_addr.name = "transform_result";
65659#endif /* FREECIV_JSON_CONNECTION */
65660
65661 {
65662 int readin;
65663
65664 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65665 RECEIVE_PACKET_FIELD_ERROR(transform_result);
65666 }
65667 real_packet->transform_result = readin;
65668 }
65669 }
65670
65671 if (BV_ISSET(fields, 28)) {
65672 log_packet_detailed(" got field 'transform_time'");
65673
65674#ifdef FREECIV_JSON_CONNECTION
65675 field_addr.name = "transform_time";
65676#endif /* FREECIV_JSON_CONNECTION */
65677
65678 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
65679 RECEIVE_PACKET_FIELD_ERROR(transform_time);
65680 }
65681 }
65682
65683 if (BV_ISSET(fields, 29)) {
65684 log_packet_detailed(" got field 'placing_time'");
65685
65686#ifdef FREECIV_JSON_CONNECTION
65687 field_addr.name = "placing_time";
65688#endif /* FREECIV_JSON_CONNECTION */
65689
65690 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
65691 RECEIVE_PACKET_FIELD_ERROR(placing_time);
65692 }
65693 }
65694
65695 if (BV_ISSET(fields, 30)) {
65696 log_packet_detailed(" got field 'pillage_time'");
65697
65698#ifdef FREECIV_JSON_CONNECTION
65699 field_addr.name = "pillage_time";
65700#endif /* FREECIV_JSON_CONNECTION */
65701
65702 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
65703 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
65704 }
65705 }
65706
65707 if (BV_ISSET(fields, 31)) {
65708 log_packet_detailed(" got field 'extra_count'");
65709
65710#ifdef FREECIV_JSON_CONNECTION
65711 field_addr.name = "extra_count";
65712#endif /* FREECIV_JSON_CONNECTION */
65713
65714 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
65716 }
65717 }
65718
65719 if (BV_ISSET(fields, 32)) {
65720 log_packet_detailed(" got field 'extra_removal_times'");
65721
65722#ifdef FREECIV_JSON_CONNECTION
65723 field_addr.name = "extra_removal_times";
65724#endif /* FREECIV_JSON_CONNECTION */
65725
65726 {
65727 int i;
65728
65729 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
65730 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
65731 }
65732
65733#ifdef FREECIV_JSON_CONNECTION
65734 /* Enter array. */
65735 field_addr.sub_location = plocation_elem_new(0);
65736#endif /* FREECIV_JSON_CONNECTION */
65737
65738 for (i = 0; i < real_packet->extra_count; i++) {
65739#ifdef FREECIV_JSON_CONNECTION
65740 /* Next array element */
65741 field_addr.sub_location->number = i;
65742#endif /* FREECIV_JSON_CONNECTION */
65743
65744 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
65745 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
65746 }
65747 }
65748
65749#ifdef FREECIV_JSON_CONNECTION
65750 /* Exit array. */
65751 FC_FREE(field_addr.sub_location);
65752#endif /* FREECIV_JSON_CONNECTION */
65753 }
65754 }
65755
65756 if (BV_ISSET(fields, 33)) {
65757 log_packet_detailed(" got field 'color_red'");
65758
65759#ifdef FREECIV_JSON_CONNECTION
65760 field_addr.name = "color_red";
65761#endif /* FREECIV_JSON_CONNECTION */
65762
65763 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
65764 RECEIVE_PACKET_FIELD_ERROR(color_red);
65765 }
65766 }
65767
65768 if (BV_ISSET(fields, 34)) {
65769 log_packet_detailed(" got field 'color_green'");
65770
65771#ifdef FREECIV_JSON_CONNECTION
65772 field_addr.name = "color_green";
65773#endif /* FREECIV_JSON_CONNECTION */
65774
65775 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
65776 RECEIVE_PACKET_FIELD_ERROR(color_green);
65777 }
65778 }
65779
65780 if (BV_ISSET(fields, 35)) {
65781 log_packet_detailed(" got field 'color_blue'");
65782
65783#ifdef FREECIV_JSON_CONNECTION
65784 field_addr.name = "color_blue";
65785#endif /* FREECIV_JSON_CONNECTION */
65786
65787 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
65788 RECEIVE_PACKET_FIELD_ERROR(color_blue);
65789 }
65790 }
65791
65792 if (BV_ISSET(fields, 36)) {
65793 log_packet_detailed(" got field 'helptext'");
65794
65795#ifdef FREECIV_JSON_CONNECTION
65796 field_addr.name = "helptext";
65797#endif /* FREECIV_JSON_CONNECTION */
65798
65799 {
65800 int i;
65801
65802 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
65804 }
65805 strvec_reserve(real_packet->helptext, i);
65806
65807#ifdef FREECIV_JSON_CONNECTION
65808 /* Enter array. */
65809 field_addr.sub_location = plocation_elem_new(0);
65810#endif /* FREECIV_JSON_CONNECTION */
65811
65812 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
65813#ifdef FREECIV_JSON_CONNECTION
65814 /* Next array element */
65815 field_addr.sub_location->number = i;
65816#endif /* FREECIV_JSON_CONNECTION */
65817
65818 {
65819 char readin[MAX_LEN_PACKET];
65820
65821 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
65822 || !strvec_set(real_packet->helptext, i, readin)) {
65824 }
65825 }
65826 }
65827
65828#ifdef FREECIV_JSON_CONNECTION
65829 /* Exit array. */
65830 FC_FREE(field_addr.sub_location);
65831#endif /* FREECIV_JSON_CONNECTION */
65832 }
65833 }
65834
65835 if (nullptr == old) {
65836 old = fc_malloc(sizeof(*old));
65838 old->id = real_packet->id;
65839 old->tclass = real_packet->tclass;
65840 old->flags = real_packet->flags;
65841 old->native_to = real_packet->native_to;
65842 sz_strlcpy(old->name, real_packet->name);
65843 sz_strlcpy(old->rule_name, real_packet->rule_name);
65844 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65845 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65846 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65847 old->movement_cost = real_packet->movement_cost;
65848 old->defense_bonus = real_packet->defense_bonus;
65849 {
65850 int i;
65851
65852 for (i = 0; i < O_LAST; i++) {
65853 old->output[i] = real_packet->output[i];
65854 }
65855 }
65856 old->num_resources = real_packet->num_resources;
65857 {
65858 int i;
65859
65860 for (i = 0; i < real_packet->num_resources; i++) {
65861 old->resources[i] = real_packet->resources[i];
65862 }
65863 }
65864 {
65865 int i;
65866
65867 for (i = 0; i < real_packet->num_resources; i++) {
65868 old->resource_freq[i] = real_packet->resource_freq[i];
65869 }
65870 }
65871 {
65872 int i;
65873
65874 for (i = 0; i < O_LAST; i++) {
65875 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65876 }
65877 }
65878 old->base_time = real_packet->base_time;
65879 old->road_time = real_packet->road_time;
65880 old->cultivate_result = real_packet->cultivate_result;
65881 old->cultivate_time = real_packet->cultivate_time;
65882 old->plant_result = real_packet->plant_result;
65883 old->plant_time = real_packet->plant_time;
65884 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65885 old->irrigation_time = real_packet->irrigation_time;
65886 old->mining_shield_incr = real_packet->mining_shield_incr;
65887 old->mining_time = real_packet->mining_time;
65888 old->animal = real_packet->animal;
65889 old->transform_result = real_packet->transform_result;
65890 old->transform_time = real_packet->transform_time;
65891 old->placing_time = real_packet->placing_time;
65892 old->pillage_time = real_packet->pillage_time;
65893 old->extra_count = real_packet->extra_count;
65894 {
65895 int i;
65896
65897 for (i = 0; i < real_packet->extra_count; i++) {
65898 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65899 }
65900 }
65901 old->color_red = real_packet->color_red;
65902 old->color_green = real_packet->color_green;
65903 old->color_blue = real_packet->color_blue;
65904 if (real_packet->helptext) {
65905 strvec_copy(old->helptext, real_packet->helptext);
65906 } else {
65907 strvec_clear(old->helptext);
65908 }
65910 } else {
65911 old->id = real_packet->id;
65912 old->tclass = real_packet->tclass;
65913 old->flags = real_packet->flags;
65914 old->native_to = real_packet->native_to;
65915 sz_strlcpy(old->name, real_packet->name);
65916 sz_strlcpy(old->rule_name, real_packet->rule_name);
65917 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65918 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65919 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65920 old->movement_cost = real_packet->movement_cost;
65921 old->defense_bonus = real_packet->defense_bonus;
65922 {
65923 int i;
65924
65925 for (i = 0; i < O_LAST; i++) {
65926 old->output[i] = real_packet->output[i];
65927 }
65928 }
65929 old->num_resources = real_packet->num_resources;
65930 {
65931 int i;
65932
65933 for (i = 0; i < real_packet->num_resources; i++) {
65934 old->resources[i] = real_packet->resources[i];
65935 }
65936 }
65937 {
65938 int i;
65939
65940 for (i = 0; i < real_packet->num_resources; i++) {
65941 old->resource_freq[i] = real_packet->resource_freq[i];
65942 }
65943 }
65944 {
65945 int i;
65946
65947 for (i = 0; i < O_LAST; i++) {
65948 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65949 }
65950 }
65951 old->base_time = real_packet->base_time;
65952 old->road_time = real_packet->road_time;
65953 old->cultivate_result = real_packet->cultivate_result;
65954 old->cultivate_time = real_packet->cultivate_time;
65955 old->plant_result = real_packet->plant_result;
65956 old->plant_time = real_packet->plant_time;
65957 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65958 old->irrigation_time = real_packet->irrigation_time;
65959 old->mining_shield_incr = real_packet->mining_shield_incr;
65960 old->mining_time = real_packet->mining_time;
65961 old->animal = real_packet->animal;
65962 old->transform_result = real_packet->transform_result;
65963 old->transform_time = real_packet->transform_time;
65964 old->placing_time = real_packet->placing_time;
65965 old->pillage_time = real_packet->pillage_time;
65966 old->extra_count = real_packet->extra_count;
65967 {
65968 int i;
65969
65970 for (i = 0; i < real_packet->extra_count; i++) {
65971 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65972 }
65973 }
65974 old->color_red = real_packet->color_red;
65975 old->color_green = real_packet->color_green;
65976 old->color_blue = real_packet->color_blue;
65977 if (real_packet->helptext) {
65978 strvec_copy(old->helptext, real_packet->helptext);
65979 } else {
65980 strvec_clear(old->helptext);
65981 }
65982 }
65983
65984#else /* FREECIV_DELTA_PROTOCOL */
65985#ifdef FREECIV_JSON_CONNECTION
65986 field_addr.name = "id";
65987#endif /* FREECIV_JSON_CONNECTION */
65988
65989 {
65990 int readin;
65991
65992 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65994 }
65995 real_packet->id = readin;
65996 }
65997
65998#ifdef FREECIV_JSON_CONNECTION
65999 field_addr.name = "tclass";
66000#endif /* FREECIV_JSON_CONNECTION */
66001
66002 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
66004 }
66005
66006#ifdef FREECIV_JSON_CONNECTION
66007 field_addr.name = "flags";
66008#endif /* FREECIV_JSON_CONNECTION */
66009
66010 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
66012 }
66013
66014#ifdef FREECIV_JSON_CONNECTION
66015 field_addr.name = "native_to";
66016#endif /* FREECIV_JSON_CONNECTION */
66017
66018 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
66019 RECEIVE_PACKET_FIELD_ERROR(native_to);
66020 }
66021
66022#ifdef FREECIV_JSON_CONNECTION
66023 field_addr.name = "name";
66024#endif /* FREECIV_JSON_CONNECTION */
66025
66026 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
66028 }
66029
66030#ifdef FREECIV_JSON_CONNECTION
66031 field_addr.name = "rule_name";
66032#endif /* FREECIV_JSON_CONNECTION */
66033
66034 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
66035 RECEIVE_PACKET_FIELD_ERROR(rule_name);
66036 }
66037
66038#ifdef FREECIV_JSON_CONNECTION
66039 field_addr.name = "graphic_str";
66040#endif /* FREECIV_JSON_CONNECTION */
66041
66042 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
66043 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
66044 }
66045
66046#ifdef FREECIV_JSON_CONNECTION
66047 field_addr.name = "graphic_alt";
66048#endif /* FREECIV_JSON_CONNECTION */
66049
66050 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
66051 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
66052 }
66053
66054#ifdef FREECIV_JSON_CONNECTION
66055 field_addr.name = "graphic_alt2";
66056#endif /* FREECIV_JSON_CONNECTION */
66057
66058 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
66059 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
66060 }
66061
66062#ifdef FREECIV_JSON_CONNECTION
66063 field_addr.name = "movement_cost";
66064#endif /* FREECIV_JSON_CONNECTION */
66065
66066 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
66067 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
66068 }
66069
66070#ifdef FREECIV_JSON_CONNECTION
66071 field_addr.name = "defense_bonus";
66072#endif /* FREECIV_JSON_CONNECTION */
66073
66074 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
66075 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
66076 }
66077
66078#ifdef FREECIV_JSON_CONNECTION
66079 field_addr.name = "output";
66080#endif /* FREECIV_JSON_CONNECTION */
66081
66082 {
66083 int i;
66084
66085
66086#ifdef FREECIV_JSON_CONNECTION
66087 /* Enter array. */
66088 field_addr.sub_location = plocation_elem_new(0);
66089#endif /* FREECIV_JSON_CONNECTION */
66090
66091 for (i = 0; i < O_LAST; i++) {
66092#ifdef FREECIV_JSON_CONNECTION
66093 /* Next array element */
66094 field_addr.sub_location->number = i;
66095#endif /* FREECIV_JSON_CONNECTION */
66096
66097 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
66099 }
66100 }
66101
66102#ifdef FREECIV_JSON_CONNECTION
66103 /* Exit array. */
66104 FC_FREE(field_addr.sub_location);
66105#endif /* FREECIV_JSON_CONNECTION */
66106 }
66107
66108#ifdef FREECIV_JSON_CONNECTION
66109 field_addr.name = "num_resources";
66110#endif /* FREECIV_JSON_CONNECTION */
66111
66112 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
66113 RECEIVE_PACKET_FIELD_ERROR(num_resources);
66114 }
66115
66116#ifdef FREECIV_JSON_CONNECTION
66117 field_addr.name = "resources";
66118#endif /* FREECIV_JSON_CONNECTION */
66119
66120 {
66121 int i;
66122
66123 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
66124 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
66125 }
66126
66127#ifdef FREECIV_JSON_CONNECTION
66128 /* Enter array. */
66129 field_addr.sub_location = plocation_elem_new(0);
66130#endif /* FREECIV_JSON_CONNECTION */
66131
66132 for (i = 0; i < real_packet->num_resources; i++) {
66133#ifdef FREECIV_JSON_CONNECTION
66134 /* Next array element */
66135 field_addr.sub_location->number = i;
66136#endif /* FREECIV_JSON_CONNECTION */
66137
66138 {
66139 int readin;
66140
66141 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66143 }
66144 real_packet->resources[i] = readin;
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#ifdef FREECIV_JSON_CONNECTION
66155 field_addr.name = "resource_freq";
66156#endif /* FREECIV_JSON_CONNECTION */
66157
66158 {
66159 int i;
66160
66161 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
66162 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
66163 }
66164
66165#ifdef FREECIV_JSON_CONNECTION
66166 /* Enter array. */
66167 field_addr.sub_location = plocation_elem_new(0);
66168#endif /* FREECIV_JSON_CONNECTION */
66169
66170 for (i = 0; i < real_packet->num_resources; i++) {
66171#ifdef FREECIV_JSON_CONNECTION
66172 /* Next array element */
66173 field_addr.sub_location->number = i;
66174#endif /* FREECIV_JSON_CONNECTION */
66175
66176 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
66177 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
66178 }
66179 }
66180
66181#ifdef FREECIV_JSON_CONNECTION
66182 /* Exit array. */
66183 FC_FREE(field_addr.sub_location);
66184#endif /* FREECIV_JSON_CONNECTION */
66185 }
66186
66187#ifdef FREECIV_JSON_CONNECTION
66188 field_addr.name = "road_output_incr_pct";
66189#endif /* FREECIV_JSON_CONNECTION */
66190
66191 {
66192 int i;
66193
66194
66195#ifdef FREECIV_JSON_CONNECTION
66196 /* Enter array. */
66197 field_addr.sub_location = plocation_elem_new(0);
66198#endif /* FREECIV_JSON_CONNECTION */
66199
66200 for (i = 0; i < O_LAST; i++) {
66201#ifdef FREECIV_JSON_CONNECTION
66202 /* Next array element */
66203 field_addr.sub_location->number = i;
66204#endif /* FREECIV_JSON_CONNECTION */
66205
66206 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
66207 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
66208 }
66209 }
66210
66211#ifdef FREECIV_JSON_CONNECTION
66212 /* Exit array. */
66213 FC_FREE(field_addr.sub_location);
66214#endif /* FREECIV_JSON_CONNECTION */
66215 }
66216
66217#ifdef FREECIV_JSON_CONNECTION
66218 field_addr.name = "base_time";
66219#endif /* FREECIV_JSON_CONNECTION */
66220
66221 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
66222 RECEIVE_PACKET_FIELD_ERROR(base_time);
66223 }
66224
66225#ifdef FREECIV_JSON_CONNECTION
66226 field_addr.name = "road_time";
66227#endif /* FREECIV_JSON_CONNECTION */
66228
66229 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
66230 RECEIVE_PACKET_FIELD_ERROR(road_time);
66231 }
66232
66233#ifdef FREECIV_JSON_CONNECTION
66234 field_addr.name = "cultivate_result";
66235#endif /* FREECIV_JSON_CONNECTION */
66236
66237 {
66238 int readin;
66239
66240 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66241 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
66242 }
66243 real_packet->cultivate_result = readin;
66244 }
66245
66246#ifdef FREECIV_JSON_CONNECTION
66247 field_addr.name = "cultivate_time";
66248#endif /* FREECIV_JSON_CONNECTION */
66249
66250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
66251 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
66252 }
66253
66254#ifdef FREECIV_JSON_CONNECTION
66255 field_addr.name = "plant_result";
66256#endif /* FREECIV_JSON_CONNECTION */
66257
66258 {
66259 int readin;
66260
66261 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66262 RECEIVE_PACKET_FIELD_ERROR(plant_result);
66263 }
66264 real_packet->plant_result = readin;
66265 }
66266
66267#ifdef FREECIV_JSON_CONNECTION
66268 field_addr.name = "plant_time";
66269#endif /* FREECIV_JSON_CONNECTION */
66270
66271 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
66272 RECEIVE_PACKET_FIELD_ERROR(plant_time);
66273 }
66274
66275#ifdef FREECIV_JSON_CONNECTION
66276 field_addr.name = "irrigation_food_incr";
66277#endif /* FREECIV_JSON_CONNECTION */
66278
66279 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
66280 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
66281 }
66282
66283#ifdef FREECIV_JSON_CONNECTION
66284 field_addr.name = "irrigation_time";
66285#endif /* FREECIV_JSON_CONNECTION */
66286
66287 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
66288 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
66289 }
66290
66291#ifdef FREECIV_JSON_CONNECTION
66292 field_addr.name = "mining_shield_incr";
66293#endif /* FREECIV_JSON_CONNECTION */
66294
66295 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
66296 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
66297 }
66298
66299#ifdef FREECIV_JSON_CONNECTION
66300 field_addr.name = "mining_time";
66301#endif /* FREECIV_JSON_CONNECTION */
66302
66303 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
66304 RECEIVE_PACKET_FIELD_ERROR(mining_time);
66305 }
66306
66307#ifdef FREECIV_JSON_CONNECTION
66308 field_addr.name = "animal";
66309#endif /* FREECIV_JSON_CONNECTION */
66310
66311 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
66313 }
66314
66315#ifdef FREECIV_JSON_CONNECTION
66316 field_addr.name = "transform_result";
66317#endif /* FREECIV_JSON_CONNECTION */
66318
66319 {
66320 int readin;
66321
66322 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66323 RECEIVE_PACKET_FIELD_ERROR(transform_result);
66324 }
66325 real_packet->transform_result = readin;
66326 }
66327
66328#ifdef FREECIV_JSON_CONNECTION
66329 field_addr.name = "transform_time";
66330#endif /* FREECIV_JSON_CONNECTION */
66331
66332 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
66333 RECEIVE_PACKET_FIELD_ERROR(transform_time);
66334 }
66335
66336#ifdef FREECIV_JSON_CONNECTION
66337 field_addr.name = "placing_time";
66338#endif /* FREECIV_JSON_CONNECTION */
66339
66340 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
66341 RECEIVE_PACKET_FIELD_ERROR(placing_time);
66342 }
66343
66344#ifdef FREECIV_JSON_CONNECTION
66345 field_addr.name = "pillage_time";
66346#endif /* FREECIV_JSON_CONNECTION */
66347
66348 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
66349 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
66350 }
66351
66352#ifdef FREECIV_JSON_CONNECTION
66353 field_addr.name = "extra_count";
66354#endif /* FREECIV_JSON_CONNECTION */
66355
66356 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
66358 }
66359
66360#ifdef FREECIV_JSON_CONNECTION
66361 field_addr.name = "extra_removal_times";
66362#endif /* FREECIV_JSON_CONNECTION */
66363
66364 {
66365 int i;
66366
66367 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
66368 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
66369 }
66370
66371#ifdef FREECIV_JSON_CONNECTION
66372 /* Enter array. */
66373 field_addr.sub_location = plocation_elem_new(0);
66374#endif /* FREECIV_JSON_CONNECTION */
66375
66376 for (i = 0; i < real_packet->extra_count; i++) {
66377#ifdef FREECIV_JSON_CONNECTION
66378 /* Next array element */
66379 field_addr.sub_location->number = i;
66380#endif /* FREECIV_JSON_CONNECTION */
66381
66382 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
66383 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
66384 }
66385 }
66386
66387#ifdef FREECIV_JSON_CONNECTION
66388 /* Exit array. */
66389 FC_FREE(field_addr.sub_location);
66390#endif /* FREECIV_JSON_CONNECTION */
66391 }
66392
66393#ifdef FREECIV_JSON_CONNECTION
66394 field_addr.name = "color_red";
66395#endif /* FREECIV_JSON_CONNECTION */
66396
66397 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
66398 RECEIVE_PACKET_FIELD_ERROR(color_red);
66399 }
66400
66401#ifdef FREECIV_JSON_CONNECTION
66402 field_addr.name = "color_green";
66403#endif /* FREECIV_JSON_CONNECTION */
66404
66405 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
66406 RECEIVE_PACKET_FIELD_ERROR(color_green);
66407 }
66408
66409#ifdef FREECIV_JSON_CONNECTION
66410 field_addr.name = "color_blue";
66411#endif /* FREECIV_JSON_CONNECTION */
66412
66413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
66414 RECEIVE_PACKET_FIELD_ERROR(color_blue);
66415 }
66416
66417#ifdef FREECIV_JSON_CONNECTION
66418 field_addr.name = "helptext";
66419#endif /* FREECIV_JSON_CONNECTION */
66420
66421 {
66422 int i;
66423
66424 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
66426 }
66427 strvec_reserve(real_packet->helptext, i);
66428
66429#ifdef FREECIV_JSON_CONNECTION
66430 /* Enter array. */
66431 field_addr.sub_location = plocation_elem_new(0);
66432#endif /* FREECIV_JSON_CONNECTION */
66433
66434 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
66435#ifdef FREECIV_JSON_CONNECTION
66436 /* Next array element */
66437 field_addr.sub_location->number = i;
66438#endif /* FREECIV_JSON_CONNECTION */
66439
66440 {
66441 char readin[MAX_LEN_PACKET];
66442
66443 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
66444 || !strvec_set(real_packet->helptext, i, readin)) {
66446 }
66447 }
66448 }
66449
66450#ifdef FREECIV_JSON_CONNECTION
66451 /* Exit array. */
66452 FC_FREE(field_addr.sub_location);
66453#endif /* FREECIV_JSON_CONNECTION */
66454 }
66455#endif /* FREECIV_DELTA_PROTOCOL */
66456
66458#undef FREE_PACKET_STRUCT
66459}
66460
66462{
66463 const struct packet_ruleset_terrain *real_packet = packet;
66464 int e;
66466
66467 log_packet_detailed("packet_ruleset_terrain_100: sending info about ()");
66468
66469#ifdef FREECIV_DELTA_PROTOCOL
66472 bool differ;
66473 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN;
66474
66475 if (nullptr == *hash) {
66477 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
66478 }
66479 BV_CLR_ALL(fields);
66480
66481 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66482 old = fc_malloc(sizeof(*old));
66483 /* temporary bitcopy just to insert correctly */
66484 *old = *real_packet;
66487 }
66488
66489 differ = (old->id != real_packet->id);
66490 if (differ) {
66491 BV_SET(fields, 0);
66492 }
66493
66494 differ = (old->tclass != real_packet->tclass);
66495 if (differ) {
66496 BV_SET(fields, 1);
66497 }
66498
66499 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
66500 if (differ) {
66501 BV_SET(fields, 2);
66502 }
66503
66504 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
66505 if (differ) {
66506 BV_SET(fields, 3);
66507 }
66508
66509 differ = (strcmp(old->name, real_packet->name) != 0);
66510 if (differ) {
66511 BV_SET(fields, 4);
66512 }
66513
66514 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
66515 if (differ) {
66516 BV_SET(fields, 5);
66517 }
66518
66519 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
66520 if (differ) {
66521 BV_SET(fields, 6);
66522 }
66523
66524 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
66525 if (differ) {
66526 BV_SET(fields, 7);
66527 }
66528
66529 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
66530 if (differ) {
66531 BV_SET(fields, 8);
66532 }
66533
66534 differ = (old->movement_cost != real_packet->movement_cost);
66535 if (differ) {
66536 BV_SET(fields, 9);
66537 }
66538
66539 differ = (old->defense_bonus != real_packet->defense_bonus);
66540 if (differ) {
66541 BV_SET(fields, 10);
66542 }
66543
66544 differ = FALSE;
66545 {
66546 int i;
66547
66548 for (i = 0; i < O_LAST; i++) {
66549 differ = (old->output[i] != real_packet->output[i]);
66550 if (differ) {
66551 break;
66552 }
66553 }
66554 }
66555 if (differ) {
66556 BV_SET(fields, 11);
66557 }
66558
66559 differ = (old->num_resources != real_packet->num_resources);
66560 if (differ) {
66561 BV_SET(fields, 12);
66562 }
66563
66564 differ = (old->num_resources != real_packet->num_resources);
66565 if (!differ) {
66566 int i;
66567
66568 for (i = 0; i < old->num_resources; i++) {
66569 differ = (old->resources[i] != real_packet->resources[i]);
66570 if (differ) {
66571 break;
66572 }
66573 }
66574 }
66575 if (differ) {
66576 BV_SET(fields, 13);
66577 }
66578
66579 differ = (old->num_resources != real_packet->num_resources);
66580 if (!differ) {
66581 int i;
66582
66583 for (i = 0; i < old->num_resources; i++) {
66584 differ = (old->resource_freq[i] != real_packet->resource_freq[i]);
66585 if (differ) {
66586 break;
66587 }
66588 }
66589 }
66590 if (differ) {
66591 BV_SET(fields, 14);
66592 }
66593
66594 differ = FALSE;
66595 {
66596 int i;
66597
66598 for (i = 0; i < O_LAST; i++) {
66599 differ = (old->road_output_incr_pct[i] != real_packet->road_output_incr_pct[i]);
66600 if (differ) {
66601 break;
66602 }
66603 }
66604 }
66605 if (differ) {
66606 BV_SET(fields, 15);
66607 }
66608
66609 differ = (old->base_time != real_packet->base_time);
66610 if (differ) {
66611 BV_SET(fields, 16);
66612 }
66613
66614 differ = (old->road_time != real_packet->road_time);
66615 if (differ) {
66616 BV_SET(fields, 17);
66617 }
66618
66619 differ = (old->cultivate_result != real_packet->cultivate_result);
66620 if (differ) {
66621 BV_SET(fields, 18);
66622 }
66623
66624 differ = (old->cultivate_time != real_packet->cultivate_time);
66625 if (differ) {
66626 BV_SET(fields, 19);
66627 }
66628
66629 differ = (old->plant_result != real_packet->plant_result);
66630 if (differ) {
66631 BV_SET(fields, 20);
66632 }
66633
66634 differ = (old->plant_time != real_packet->plant_time);
66635 if (differ) {
66636 BV_SET(fields, 21);
66637 }
66638
66639 differ = (old->irrigation_food_incr != real_packet->irrigation_food_incr);
66640 if (differ) {
66641 BV_SET(fields, 22);
66642 }
66643
66644 differ = (old->irrigation_time != real_packet->irrigation_time);
66645 if (differ) {
66646 BV_SET(fields, 23);
66647 }
66648
66649 differ = (old->mining_shield_incr != real_packet->mining_shield_incr);
66650 if (differ) {
66651 BV_SET(fields, 24);
66652 }
66653
66654 differ = (old->mining_time != real_packet->mining_time);
66655 if (differ) {
66656 BV_SET(fields, 25);
66657 }
66658
66659 differ = (old->animal != real_packet->animal);
66660 if (differ) {
66661 BV_SET(fields, 26);
66662 }
66663
66664 differ = (old->transform_result != real_packet->transform_result);
66665 if (differ) {
66666 BV_SET(fields, 27);
66667 }
66668
66669 differ = (old->transform_time != real_packet->transform_time);
66670 if (differ) {
66671 BV_SET(fields, 28);
66672 }
66673
66674 differ = (old->placing_time != real_packet->placing_time);
66675 if (differ) {
66676 BV_SET(fields, 29);
66677 }
66678
66679 differ = (old->pillage_time != real_packet->pillage_time);
66680 if (differ) {
66681 BV_SET(fields, 30);
66682 }
66683
66684 differ = (old->extra_count != real_packet->extra_count);
66685 if (differ) {
66686 BV_SET(fields, 31);
66687 }
66688
66689 differ = (old->extra_count != real_packet->extra_count);
66690 if (!differ) {
66691 int i;
66692
66693 for (i = 0; i < old->extra_count; i++) {
66694 differ = (old->extra_removal_times[i] != real_packet->extra_removal_times[i]);
66695 if (differ) {
66696 break;
66697 }
66698 }
66699 }
66700 if (differ) {
66701 BV_SET(fields, 32);
66702 }
66703
66704 differ = (old->color_red != real_packet->color_red);
66705 if (differ) {
66706 BV_SET(fields, 33);
66707 }
66708
66709 differ = (old->color_green != real_packet->color_green);
66710 if (differ) {
66711 BV_SET(fields, 34);
66712 }
66713
66714 differ = (old->color_blue != real_packet->color_blue);
66715 if (differ) {
66716 BV_SET(fields, 35);
66717 }
66718
66719 if (real_packet->helptext) {
66720 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
66721 } else {
66722 differ = (strvec_size(old->helptext) > 0);
66723 }
66724 if (differ) {
66725 BV_SET(fields, 36);
66726 }
66727#endif /* FREECIV_DELTA_PROTOCOL */
66728
66729#ifdef FREECIV_JSON_CONNECTION
66730 struct plocation field_addr;
66731 {
66732 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
66735 }
66736#endif /* FREECIV_JSON_CONNECTION */
66737
66738#ifdef FREECIV_DELTA_PROTOCOL
66739#ifdef FREECIV_JSON_CONNECTION
66740 field_addr.name = "fields";
66741#endif /* FREECIV_JSON_CONNECTION */
66742 e = 0;
66743 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66744 if (e) {
66745 log_packet_detailed("fields bitvector error detected");
66746 }
66747
66748 if (BV_ISSET(fields, 0)) {
66749 log_packet_detailed(" field 'id' has changed");
66750
66751#ifdef FREECIV_JSON_CONNECTION
66752 field_addr.name = "id";
66753#endif /* FREECIV_JSON_CONNECTION */
66754 e = 0;
66755
66756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66757
66758 if (e) {
66759 log_packet_detailed("'id' field error detected");
66760 }
66761 }
66762
66763 if (BV_ISSET(fields, 1)) {
66764 log_packet_detailed(" field 'tclass' has changed");
66765
66766#ifdef FREECIV_JSON_CONNECTION
66767 field_addr.name = "tclass";
66768#endif /* FREECIV_JSON_CONNECTION */
66769 e = 0;
66770
66771 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
66772
66773 if (e) {
66774 log_packet_detailed("'tclass' field error detected");
66775 }
66776 }
66777
66778 if (BV_ISSET(fields, 2)) {
66779 log_packet_detailed(" field 'flags' has changed");
66780
66781#ifdef FREECIV_JSON_CONNECTION
66782 field_addr.name = "flags";
66783#endif /* FREECIV_JSON_CONNECTION */
66784 e = 0;
66785
66786 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
66787
66788 if (e) {
66789 log_packet_detailed("'flags' field error detected");
66790 }
66791 }
66792
66793 if (BV_ISSET(fields, 3)) {
66794 log_packet_detailed(" field 'native_to' has changed");
66795
66796#ifdef FREECIV_JSON_CONNECTION
66797 field_addr.name = "native_to";
66798#endif /* FREECIV_JSON_CONNECTION */
66799 e = 0;
66800
66801 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
66802
66803 if (e) {
66804 log_packet_detailed("'native_to' field error detected");
66805 }
66806 }
66807
66808 if (BV_ISSET(fields, 4)) {
66809 log_packet_detailed(" field 'name' has changed");
66810
66811#ifdef FREECIV_JSON_CONNECTION
66812 field_addr.name = "name";
66813#endif /* FREECIV_JSON_CONNECTION */
66814 e = 0;
66815
66816 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
66817
66818 if (e) {
66819 log_packet_detailed("'name' field error detected");
66820 }
66821 }
66822
66823 if (BV_ISSET(fields, 5)) {
66824 log_packet_detailed(" field 'rule_name' has changed");
66825
66826#ifdef FREECIV_JSON_CONNECTION
66827 field_addr.name = "rule_name";
66828#endif /* FREECIV_JSON_CONNECTION */
66829 e = 0;
66830
66831 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
66832
66833 if (e) {
66834 log_packet_detailed("'rule_name' field error detected");
66835 }
66836 }
66837
66838 if (BV_ISSET(fields, 6)) {
66839 log_packet_detailed(" field 'graphic_str' has changed");
66840
66841#ifdef FREECIV_JSON_CONNECTION
66842 field_addr.name = "graphic_str";
66843#endif /* FREECIV_JSON_CONNECTION */
66844 e = 0;
66845
66846 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
66847
66848 if (e) {
66849 log_packet_detailed("'graphic_str' field error detected");
66850 }
66851 }
66852
66853 if (BV_ISSET(fields, 7)) {
66854 log_packet_detailed(" field 'graphic_alt' has changed");
66855
66856#ifdef FREECIV_JSON_CONNECTION
66857 field_addr.name = "graphic_alt";
66858#endif /* FREECIV_JSON_CONNECTION */
66859 e = 0;
66860
66861 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
66862
66863 if (e) {
66864 log_packet_detailed("'graphic_alt' field error detected");
66865 }
66866 }
66867
66868 if (BV_ISSET(fields, 8)) {
66869 log_packet_detailed(" field 'graphic_alt2' has changed");
66870
66871#ifdef FREECIV_JSON_CONNECTION
66872 field_addr.name = "graphic_alt2";
66873#endif /* FREECIV_JSON_CONNECTION */
66874 e = 0;
66875
66876 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
66877
66878 if (e) {
66879 log_packet_detailed("'graphic_alt2' field error detected");
66880 }
66881 }
66882
66883 if (BV_ISSET(fields, 9)) {
66884 log_packet_detailed(" field 'movement_cost' has changed");
66885
66886#ifdef FREECIV_JSON_CONNECTION
66887 field_addr.name = "movement_cost";
66888#endif /* FREECIV_JSON_CONNECTION */
66889 e = 0;
66890
66891 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
66892
66893 if (e) {
66894 log_packet_detailed("'movement_cost' field error detected");
66895 }
66896 }
66897
66898 if (BV_ISSET(fields, 10)) {
66899 log_packet_detailed(" field 'defense_bonus' has changed");
66900
66901#ifdef FREECIV_JSON_CONNECTION
66902 field_addr.name = "defense_bonus";
66903#endif /* FREECIV_JSON_CONNECTION */
66904 e = 0;
66905
66906 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
66907
66908 if (e) {
66909 log_packet_detailed("'defense_bonus' field error detected");
66910 }
66911 }
66912
66913 if (BV_ISSET(fields, 11)) {
66914 log_packet_detailed(" field 'output' has changed");
66915
66916#ifdef FREECIV_JSON_CONNECTION
66917 field_addr.name = "output";
66918#endif /* FREECIV_JSON_CONNECTION */
66919 e = 0;
66920
66921 {
66922 int i;
66923
66924#ifdef FREECIV_JSON_CONNECTION
66925 /* Create the array. */
66926 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66927
66928 /* Enter array. */
66929 field_addr.sub_location = plocation_elem_new(0);
66930#endif /* FREECIV_JSON_CONNECTION */
66931
66932 for (i = 0; i < O_LAST; i++) {
66933#ifdef FREECIV_JSON_CONNECTION
66934 /* Next array element. */
66935 field_addr.sub_location->number = i;
66936#endif /* FREECIV_JSON_CONNECTION */
66937
66938 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
66939 }
66940
66941#ifdef FREECIV_JSON_CONNECTION
66942 /* Exit array. */
66943 FC_FREE(field_addr.sub_location);
66944#endif /* FREECIV_JSON_CONNECTION */
66945 }
66946
66947 if (e) {
66948 log_packet_detailed("'output' field error detected");
66949 }
66950 }
66951
66952 if (BV_ISSET(fields, 12)) {
66953 log_packet_detailed(" field 'num_resources' has changed");
66954
66955#ifdef FREECIV_JSON_CONNECTION
66956 field_addr.name = "num_resources";
66957#endif /* FREECIV_JSON_CONNECTION */
66958 e = 0;
66959
66960 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
66961
66962 if (e) {
66963 log_packet_detailed("'num_resources' field error detected");
66964 }
66965 }
66966
66967 if (BV_ISSET(fields, 13)) {
66968 log_packet_detailed(" field 'resources' has changed");
66969
66970#ifdef FREECIV_JSON_CONNECTION
66971 field_addr.name = "resources";
66972#endif /* FREECIV_JSON_CONNECTION */
66973 e = 0;
66974
66975 {
66976 int i;
66977
66978#ifdef FREECIV_JSON_CONNECTION
66979 /* Create the array. */
66980 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
66981
66982 /* Enter array. */
66983 field_addr.sub_location = plocation_elem_new(0);
66984#endif /* FREECIV_JSON_CONNECTION */
66985
66986 for (i = 0; i < real_packet->num_resources; i++) {
66987#ifdef FREECIV_JSON_CONNECTION
66988 /* Next array element. */
66989 field_addr.sub_location->number = i;
66990#endif /* FREECIV_JSON_CONNECTION */
66991
66992 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
66993 }
66994
66995#ifdef FREECIV_JSON_CONNECTION
66996 /* Exit array. */
66997 FC_FREE(field_addr.sub_location);
66998#endif /* FREECIV_JSON_CONNECTION */
66999 }
67000
67001 if (e) {
67002 log_packet_detailed("'resources' field error detected");
67003 }
67004 }
67005
67006 if (BV_ISSET(fields, 14)) {
67007 log_packet_detailed(" field 'resource_freq' has changed");
67008
67009#ifdef FREECIV_JSON_CONNECTION
67010 field_addr.name = "resource_freq";
67011#endif /* FREECIV_JSON_CONNECTION */
67012 e = 0;
67013
67014 {
67015 int i;
67016
67017#ifdef FREECIV_JSON_CONNECTION
67018 /* Create the array. */
67019 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67020
67021 /* Enter array. */
67022 field_addr.sub_location = plocation_elem_new(0);
67023#endif /* FREECIV_JSON_CONNECTION */
67024
67025 for (i = 0; i < real_packet->num_resources; i++) {
67026#ifdef FREECIV_JSON_CONNECTION
67027 /* Next array element. */
67028 field_addr.sub_location->number = i;
67029#endif /* FREECIV_JSON_CONNECTION */
67030
67031 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
67032 }
67033
67034#ifdef FREECIV_JSON_CONNECTION
67035 /* Exit array. */
67036 FC_FREE(field_addr.sub_location);
67037#endif /* FREECIV_JSON_CONNECTION */
67038 }
67039
67040 if (e) {
67041 log_packet_detailed("'resource_freq' field error detected");
67042 }
67043 }
67044
67045 if (BV_ISSET(fields, 15)) {
67046 log_packet_detailed(" field 'road_output_incr_pct' has changed");
67047
67048#ifdef FREECIV_JSON_CONNECTION
67049 field_addr.name = "road_output_incr_pct";
67050#endif /* FREECIV_JSON_CONNECTION */
67051 e = 0;
67052
67053 {
67054 int i;
67055
67056#ifdef FREECIV_JSON_CONNECTION
67057 /* Create the array. */
67058 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67059
67060 /* Enter array. */
67061 field_addr.sub_location = plocation_elem_new(0);
67062#endif /* FREECIV_JSON_CONNECTION */
67063
67064 for (i = 0; i < O_LAST; i++) {
67065#ifdef FREECIV_JSON_CONNECTION
67066 /* Next array element. */
67067 field_addr.sub_location->number = i;
67068#endif /* FREECIV_JSON_CONNECTION */
67069
67070 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
67071 }
67072
67073#ifdef FREECIV_JSON_CONNECTION
67074 /* Exit array. */
67075 FC_FREE(field_addr.sub_location);
67076#endif /* FREECIV_JSON_CONNECTION */
67077 }
67078
67079 if (e) {
67080 log_packet_detailed("'road_output_incr_pct' field error detected");
67081 }
67082 }
67083
67084 if (BV_ISSET(fields, 16)) {
67085 log_packet_detailed(" field 'base_time' has changed");
67086
67087#ifdef FREECIV_JSON_CONNECTION
67088 field_addr.name = "base_time";
67089#endif /* FREECIV_JSON_CONNECTION */
67090 e = 0;
67091
67092 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
67093
67094 if (e) {
67095 log_packet_detailed("'base_time' field error detected");
67096 }
67097 }
67098
67099 if (BV_ISSET(fields, 17)) {
67100 log_packet_detailed(" field 'road_time' has changed");
67101
67102#ifdef FREECIV_JSON_CONNECTION
67103 field_addr.name = "road_time";
67104#endif /* FREECIV_JSON_CONNECTION */
67105 e = 0;
67106
67107 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
67108
67109 if (e) {
67110 log_packet_detailed("'road_time' field error detected");
67111 }
67112 }
67113
67114 if (BV_ISSET(fields, 18)) {
67115 log_packet_detailed(" field 'cultivate_result' has changed");
67116
67117#ifdef FREECIV_JSON_CONNECTION
67118 field_addr.name = "cultivate_result";
67119#endif /* FREECIV_JSON_CONNECTION */
67120 e = 0;
67121
67122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
67123
67124 if (e) {
67125 log_packet_detailed("'cultivate_result' field error detected");
67126 }
67127 }
67128
67129 if (BV_ISSET(fields, 19)) {
67130 log_packet_detailed(" field 'cultivate_time' has changed");
67131
67132#ifdef FREECIV_JSON_CONNECTION
67133 field_addr.name = "cultivate_time";
67134#endif /* FREECIV_JSON_CONNECTION */
67135 e = 0;
67136
67137 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
67138
67139 if (e) {
67140 log_packet_detailed("'cultivate_time' field error detected");
67141 }
67142 }
67143
67144 if (BV_ISSET(fields, 20)) {
67145 log_packet_detailed(" field 'plant_result' has changed");
67146
67147#ifdef FREECIV_JSON_CONNECTION
67148 field_addr.name = "plant_result";
67149#endif /* FREECIV_JSON_CONNECTION */
67150 e = 0;
67151
67152 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
67153
67154 if (e) {
67155 log_packet_detailed("'plant_result' field error detected");
67156 }
67157 }
67158
67159 if (BV_ISSET(fields, 21)) {
67160 log_packet_detailed(" field 'plant_time' has changed");
67161
67162#ifdef FREECIV_JSON_CONNECTION
67163 field_addr.name = "plant_time";
67164#endif /* FREECIV_JSON_CONNECTION */
67165 e = 0;
67166
67167 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
67168
67169 if (e) {
67170 log_packet_detailed("'plant_time' field error detected");
67171 }
67172 }
67173
67174 if (BV_ISSET(fields, 22)) {
67175 log_packet_detailed(" field 'irrigation_food_incr' has changed");
67176
67177#ifdef FREECIV_JSON_CONNECTION
67178 field_addr.name = "irrigation_food_incr";
67179#endif /* FREECIV_JSON_CONNECTION */
67180 e = 0;
67181
67182 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
67183
67184 if (e) {
67185 log_packet_detailed("'irrigation_food_incr' field error detected");
67186 }
67187 }
67188
67189 if (BV_ISSET(fields, 23)) {
67190 log_packet_detailed(" field 'irrigation_time' has changed");
67191
67192#ifdef FREECIV_JSON_CONNECTION
67193 field_addr.name = "irrigation_time";
67194#endif /* FREECIV_JSON_CONNECTION */
67195 e = 0;
67196
67197 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
67198
67199 if (e) {
67200 log_packet_detailed("'irrigation_time' field error detected");
67201 }
67202 }
67203
67204 if (BV_ISSET(fields, 24)) {
67205 log_packet_detailed(" field 'mining_shield_incr' has changed");
67206
67207#ifdef FREECIV_JSON_CONNECTION
67208 field_addr.name = "mining_shield_incr";
67209#endif /* FREECIV_JSON_CONNECTION */
67210 e = 0;
67211
67212 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
67213
67214 if (e) {
67215 log_packet_detailed("'mining_shield_incr' field error detected");
67216 }
67217 }
67218
67219 if (BV_ISSET(fields, 25)) {
67220 log_packet_detailed(" field 'mining_time' has changed");
67221
67222#ifdef FREECIV_JSON_CONNECTION
67223 field_addr.name = "mining_time";
67224#endif /* FREECIV_JSON_CONNECTION */
67225 e = 0;
67226
67227 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
67228
67229 if (e) {
67230 log_packet_detailed("'mining_time' field error detected");
67231 }
67232 }
67233
67234 if (BV_ISSET(fields, 26)) {
67235 log_packet_detailed(" field 'animal' has changed");
67236
67237#ifdef FREECIV_JSON_CONNECTION
67238 field_addr.name = "animal";
67239#endif /* FREECIV_JSON_CONNECTION */
67240 e = 0;
67241
67242 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
67243
67244 if (e) {
67245 log_packet_detailed("'animal' field error detected");
67246 }
67247 }
67248
67249 if (BV_ISSET(fields, 27)) {
67250 log_packet_detailed(" field 'transform_result' has changed");
67251
67252#ifdef FREECIV_JSON_CONNECTION
67253 field_addr.name = "transform_result";
67254#endif /* FREECIV_JSON_CONNECTION */
67255 e = 0;
67256
67257 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
67258
67259 if (e) {
67260 log_packet_detailed("'transform_result' field error detected");
67261 }
67262 }
67263
67264 if (BV_ISSET(fields, 28)) {
67265 log_packet_detailed(" field 'transform_time' has changed");
67266
67267#ifdef FREECIV_JSON_CONNECTION
67268 field_addr.name = "transform_time";
67269#endif /* FREECIV_JSON_CONNECTION */
67270 e = 0;
67271
67272 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
67273
67274 if (e) {
67275 log_packet_detailed("'transform_time' field error detected");
67276 }
67277 }
67278
67279 if (BV_ISSET(fields, 29)) {
67280 log_packet_detailed(" field 'placing_time' has changed");
67281
67282#ifdef FREECIV_JSON_CONNECTION
67283 field_addr.name = "placing_time";
67284#endif /* FREECIV_JSON_CONNECTION */
67285 e = 0;
67286
67287 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
67288
67289 if (e) {
67290 log_packet_detailed("'placing_time' field error detected");
67291 }
67292 }
67293
67294 if (BV_ISSET(fields, 30)) {
67295 log_packet_detailed(" field 'pillage_time' has changed");
67296
67297#ifdef FREECIV_JSON_CONNECTION
67298 field_addr.name = "pillage_time";
67299#endif /* FREECIV_JSON_CONNECTION */
67300 e = 0;
67301
67302 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
67303
67304 if (e) {
67305 log_packet_detailed("'pillage_time' field error detected");
67306 }
67307 }
67308
67309 if (BV_ISSET(fields, 31)) {
67310 log_packet_detailed(" field 'extra_count' has changed");
67311
67312#ifdef FREECIV_JSON_CONNECTION
67313 field_addr.name = "extra_count";
67314#endif /* FREECIV_JSON_CONNECTION */
67315 e = 0;
67316
67317 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
67318
67319 if (e) {
67320 log_packet_detailed("'extra_count' field error detected");
67321 }
67322 }
67323
67324 if (BV_ISSET(fields, 32)) {
67325 log_packet_detailed(" field 'extra_removal_times' has changed");
67326
67327#ifdef FREECIV_JSON_CONNECTION
67328 field_addr.name = "extra_removal_times";
67329#endif /* FREECIV_JSON_CONNECTION */
67330 e = 0;
67331
67332 {
67333 int i;
67334
67335#ifdef FREECIV_JSON_CONNECTION
67336 /* Create the array. */
67337 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
67338
67339 /* Enter array. */
67340 field_addr.sub_location = plocation_elem_new(0);
67341#endif /* FREECIV_JSON_CONNECTION */
67342
67343 for (i = 0; i < real_packet->extra_count; i++) {
67344#ifdef FREECIV_JSON_CONNECTION
67345 /* Next array element. */
67346 field_addr.sub_location->number = i;
67347#endif /* FREECIV_JSON_CONNECTION */
67348
67349 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
67350 }
67351
67352#ifdef FREECIV_JSON_CONNECTION
67353 /* Exit array. */
67354 FC_FREE(field_addr.sub_location);
67355#endif /* FREECIV_JSON_CONNECTION */
67356 }
67357
67358 if (e) {
67359 log_packet_detailed("'extra_removal_times' field error detected");
67360 }
67361 }
67362
67363 if (BV_ISSET(fields, 33)) {
67364 log_packet_detailed(" field 'color_red' has changed");
67365
67366#ifdef FREECIV_JSON_CONNECTION
67367 field_addr.name = "color_red";
67368#endif /* FREECIV_JSON_CONNECTION */
67369 e = 0;
67370
67371 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
67372
67373 if (e) {
67374 log_packet_detailed("'color_red' field error detected");
67375 }
67376 }
67377
67378 if (BV_ISSET(fields, 34)) {
67379 log_packet_detailed(" field 'color_green' has changed");
67380
67381#ifdef FREECIV_JSON_CONNECTION
67382 field_addr.name = "color_green";
67383#endif /* FREECIV_JSON_CONNECTION */
67384 e = 0;
67385
67386 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
67387
67388 if (e) {
67389 log_packet_detailed("'color_green' field error detected");
67390 }
67391 }
67392
67393 if (BV_ISSET(fields, 35)) {
67394 log_packet_detailed(" field 'color_blue' has changed");
67395
67396#ifdef FREECIV_JSON_CONNECTION
67397 field_addr.name = "color_blue";
67398#endif /* FREECIV_JSON_CONNECTION */
67399 e = 0;
67400
67401 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
67402
67403 if (e) {
67404 log_packet_detailed("'color_blue' field error detected");
67405 }
67406 }
67407
67408 if (BV_ISSET(fields, 36)) {
67409 log_packet_detailed(" field 'helptext' has changed");
67410
67411#ifdef FREECIV_JSON_CONNECTION
67412 field_addr.name = "helptext";
67413#endif /* FREECIV_JSON_CONNECTION */
67414 e = 0;
67415
67416 if (!real_packet->helptext) {
67417 /* Transmit null as empty */
67418 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
67419 } else {
67420 int i;
67421
67423 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
67424
67425#ifdef FREECIV_JSON_CONNECTION
67426 /* Enter array. */
67427 field_addr.sub_location = plocation_elem_new(0);
67428#endif /* FREECIV_JSON_CONNECTION */
67429
67430 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
67431#ifdef FREECIV_JSON_CONNECTION
67432 /* Next array element. */
67433 field_addr.sub_location->number = i;
67434#endif /* FREECIV_JSON_CONNECTION */
67435
67436 {
67437 const char *pstr = strvec_get(real_packet->helptext, i);
67438
67439 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
67440 }
67441 }
67442
67443#ifdef FREECIV_JSON_CONNECTION
67444 /* Exit array. */
67445 FC_FREE(field_addr.sub_location);
67446#endif /* FREECIV_JSON_CONNECTION */
67447 }
67448
67449 if (e) {
67450 log_packet_detailed("'helptext' field error detected");
67451 }
67452 }
67453
67454 old->id = real_packet->id;
67455 old->tclass = real_packet->tclass;
67456 old->flags = real_packet->flags;
67457 old->native_to = real_packet->native_to;
67458 sz_strlcpy(old->name, real_packet->name);
67459 sz_strlcpy(old->rule_name, real_packet->rule_name);
67460 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
67461 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
67462 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
67463 old->movement_cost = real_packet->movement_cost;
67464 old->defense_bonus = real_packet->defense_bonus;
67465 {
67466 int i;
67467
67468 for (i = 0; i < O_LAST; i++) {
67469 old->output[i] = real_packet->output[i];
67470 }
67471 }
67472 old->num_resources = real_packet->num_resources;
67473 {
67474 int i;
67475
67476 for (i = 0; i < real_packet->num_resources; i++) {
67477 old->resources[i] = real_packet->resources[i];
67478 }
67479 }
67480 {
67481 int i;
67482
67483 for (i = 0; i < real_packet->num_resources; i++) {
67484 old->resource_freq[i] = real_packet->resource_freq[i];
67485 }
67486 }
67487 {
67488 int i;
67489
67490 for (i = 0; i < O_LAST; i++) {
67491 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
67492 }
67493 }
67494 old->base_time = real_packet->base_time;
67495 old->road_time = real_packet->road_time;
67496 old->cultivate_result = real_packet->cultivate_result;
67497 old->cultivate_time = real_packet->cultivate_time;
67498 old->plant_result = real_packet->plant_result;
67499 old->plant_time = real_packet->plant_time;
67500 old->irrigation_food_incr = real_packet->irrigation_food_incr;
67501 old->irrigation_time = real_packet->irrigation_time;
67502 old->mining_shield_incr = real_packet->mining_shield_incr;
67503 old->mining_time = real_packet->mining_time;
67504 old->animal = real_packet->animal;
67505 old->transform_result = real_packet->transform_result;
67506 old->transform_time = real_packet->transform_time;
67507 old->placing_time = real_packet->placing_time;
67508 old->pillage_time = real_packet->pillage_time;
67509 old->extra_count = real_packet->extra_count;
67510 {
67511 int i;
67512
67513 for (i = 0; i < real_packet->extra_count; i++) {
67514 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
67515 }
67516 }
67517 old->color_red = real_packet->color_red;
67518 old->color_green = real_packet->color_green;
67519 old->color_blue = real_packet->color_blue;
67520 if (real_packet->helptext) {
67521 strvec_copy(old->helptext, real_packet->helptext);
67522 } else {
67523 strvec_clear(old->helptext);
67524 }
67525
67526#else /* FREECIV_DELTA_PROTOCOL */
67527#ifdef FREECIV_JSON_CONNECTION
67528 field_addr.name = "id";
67529#endif /* FREECIV_JSON_CONNECTION */
67530 e = 0;
67531
67532 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67533
67534 if (e) {
67535 log_packet_detailed("'id' field error detected");
67536 }
67537
67538#ifdef FREECIV_JSON_CONNECTION
67539 field_addr.name = "tclass";
67540#endif /* FREECIV_JSON_CONNECTION */
67541 e = 0;
67542
67543 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
67544
67545 if (e) {
67546 log_packet_detailed("'tclass' field error detected");
67547 }
67548
67549#ifdef FREECIV_JSON_CONNECTION
67550 field_addr.name = "flags";
67551#endif /* FREECIV_JSON_CONNECTION */
67552 e = 0;
67553
67554 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
67555
67556 if (e) {
67557 log_packet_detailed("'flags' field error detected");
67558 }
67559
67560#ifdef FREECIV_JSON_CONNECTION
67561 field_addr.name = "native_to";
67562#endif /* FREECIV_JSON_CONNECTION */
67563 e = 0;
67564
67565 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
67566
67567 if (e) {
67568 log_packet_detailed("'native_to' field error detected");
67569 }
67570
67571#ifdef FREECIV_JSON_CONNECTION
67572 field_addr.name = "name";
67573#endif /* FREECIV_JSON_CONNECTION */
67574 e = 0;
67575
67576 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67577
67578 if (e) {
67579 log_packet_detailed("'name' field error detected");
67580 }
67581
67582#ifdef FREECIV_JSON_CONNECTION
67583 field_addr.name = "rule_name";
67584#endif /* FREECIV_JSON_CONNECTION */
67585 e = 0;
67586
67587 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67588
67589 if (e) {
67590 log_packet_detailed("'rule_name' field error detected");
67591 }
67592
67593#ifdef FREECIV_JSON_CONNECTION
67594 field_addr.name = "graphic_str";
67595#endif /* FREECIV_JSON_CONNECTION */
67596 e = 0;
67597
67598 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
67599
67600 if (e) {
67601 log_packet_detailed("'graphic_str' field error detected");
67602 }
67603
67604#ifdef FREECIV_JSON_CONNECTION
67605 field_addr.name = "graphic_alt";
67606#endif /* FREECIV_JSON_CONNECTION */
67607 e = 0;
67608
67609 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
67610
67611 if (e) {
67612 log_packet_detailed("'graphic_alt' field error detected");
67613 }
67614
67615#ifdef FREECIV_JSON_CONNECTION
67616 field_addr.name = "graphic_alt2";
67617#endif /* FREECIV_JSON_CONNECTION */
67618 e = 0;
67619
67620 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
67621
67622 if (e) {
67623 log_packet_detailed("'graphic_alt2' field error detected");
67624 }
67625
67626#ifdef FREECIV_JSON_CONNECTION
67627 field_addr.name = "movement_cost";
67628#endif /* FREECIV_JSON_CONNECTION */
67629 e = 0;
67630
67631 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
67632
67633 if (e) {
67634 log_packet_detailed("'movement_cost' field error detected");
67635 }
67636
67637#ifdef FREECIV_JSON_CONNECTION
67638 field_addr.name = "defense_bonus";
67639#endif /* FREECIV_JSON_CONNECTION */
67640 e = 0;
67641
67642 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
67643
67644 if (e) {
67645 log_packet_detailed("'defense_bonus' field error detected");
67646 }
67647
67648#ifdef FREECIV_JSON_CONNECTION
67649 field_addr.name = "output";
67650#endif /* FREECIV_JSON_CONNECTION */
67651 e = 0;
67652
67653 {
67654 int i;
67655
67656#ifdef FREECIV_JSON_CONNECTION
67657 /* Create the array. */
67658 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67659
67660 /* Enter array. */
67661 field_addr.sub_location = plocation_elem_new(0);
67662#endif /* FREECIV_JSON_CONNECTION */
67663
67664 for (i = 0; i < O_LAST; i++) {
67665#ifdef FREECIV_JSON_CONNECTION
67666 /* Next array element. */
67667 field_addr.sub_location->number = i;
67668#endif /* FREECIV_JSON_CONNECTION */
67669
67670 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
67671 }
67672
67673#ifdef FREECIV_JSON_CONNECTION
67674 /* Exit array. */
67675 FC_FREE(field_addr.sub_location);
67676#endif /* FREECIV_JSON_CONNECTION */
67677 }
67678
67679 if (e) {
67680 log_packet_detailed("'output' field error detected");
67681 }
67682
67683#ifdef FREECIV_JSON_CONNECTION
67684 field_addr.name = "num_resources";
67685#endif /* FREECIV_JSON_CONNECTION */
67686 e = 0;
67687
67688 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
67689
67690 if (e) {
67691 log_packet_detailed("'num_resources' field error detected");
67692 }
67693
67694#ifdef FREECIV_JSON_CONNECTION
67695 field_addr.name = "resources";
67696#endif /* FREECIV_JSON_CONNECTION */
67697 e = 0;
67698
67699 {
67700 int i;
67701
67702#ifdef FREECIV_JSON_CONNECTION
67703 /* Create the array. */
67704 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67705
67706 /* Enter array. */
67707 field_addr.sub_location = plocation_elem_new(0);
67708#endif /* FREECIV_JSON_CONNECTION */
67709
67710 for (i = 0; i < real_packet->num_resources; i++) {
67711#ifdef FREECIV_JSON_CONNECTION
67712 /* Next array element. */
67713 field_addr.sub_location->number = i;
67714#endif /* FREECIV_JSON_CONNECTION */
67715
67716 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
67717 }
67718
67719#ifdef FREECIV_JSON_CONNECTION
67720 /* Exit array. */
67721 FC_FREE(field_addr.sub_location);
67722#endif /* FREECIV_JSON_CONNECTION */
67723 }
67724
67725 if (e) {
67726 log_packet_detailed("'resources' field error detected");
67727 }
67728
67729#ifdef FREECIV_JSON_CONNECTION
67730 field_addr.name = "resource_freq";
67731#endif /* FREECIV_JSON_CONNECTION */
67732 e = 0;
67733
67734 {
67735 int i;
67736
67737#ifdef FREECIV_JSON_CONNECTION
67738 /* Create the array. */
67739 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67740
67741 /* Enter array. */
67742 field_addr.sub_location = plocation_elem_new(0);
67743#endif /* FREECIV_JSON_CONNECTION */
67744
67745 for (i = 0; i < real_packet->num_resources; i++) {
67746#ifdef FREECIV_JSON_CONNECTION
67747 /* Next array element. */
67748 field_addr.sub_location->number = i;
67749#endif /* FREECIV_JSON_CONNECTION */
67750
67751 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
67752 }
67753
67754#ifdef FREECIV_JSON_CONNECTION
67755 /* Exit array. */
67756 FC_FREE(field_addr.sub_location);
67757#endif /* FREECIV_JSON_CONNECTION */
67758 }
67759
67760 if (e) {
67761 log_packet_detailed("'resource_freq' field error detected");
67762 }
67763
67764#ifdef FREECIV_JSON_CONNECTION
67765 field_addr.name = "road_output_incr_pct";
67766#endif /* FREECIV_JSON_CONNECTION */
67767 e = 0;
67768
67769 {
67770 int i;
67771
67772#ifdef FREECIV_JSON_CONNECTION
67773 /* Create the array. */
67774 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67775
67776 /* Enter array. */
67777 field_addr.sub_location = plocation_elem_new(0);
67778#endif /* FREECIV_JSON_CONNECTION */
67779
67780 for (i = 0; i < O_LAST; i++) {
67781#ifdef FREECIV_JSON_CONNECTION
67782 /* Next array element. */
67783 field_addr.sub_location->number = i;
67784#endif /* FREECIV_JSON_CONNECTION */
67785
67786 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
67787 }
67788
67789#ifdef FREECIV_JSON_CONNECTION
67790 /* Exit array. */
67791 FC_FREE(field_addr.sub_location);
67792#endif /* FREECIV_JSON_CONNECTION */
67793 }
67794
67795 if (e) {
67796 log_packet_detailed("'road_output_incr_pct' field error detected");
67797 }
67798
67799#ifdef FREECIV_JSON_CONNECTION
67800 field_addr.name = "base_time";
67801#endif /* FREECIV_JSON_CONNECTION */
67802 e = 0;
67803
67804 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
67805
67806 if (e) {
67807 log_packet_detailed("'base_time' field error detected");
67808 }
67809
67810#ifdef FREECIV_JSON_CONNECTION
67811 field_addr.name = "road_time";
67812#endif /* FREECIV_JSON_CONNECTION */
67813 e = 0;
67814
67815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
67816
67817 if (e) {
67818 log_packet_detailed("'road_time' field error detected");
67819 }
67820
67821#ifdef FREECIV_JSON_CONNECTION
67822 field_addr.name = "cultivate_result";
67823#endif /* FREECIV_JSON_CONNECTION */
67824 e = 0;
67825
67826 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
67827
67828 if (e) {
67829 log_packet_detailed("'cultivate_result' field error detected");
67830 }
67831
67832#ifdef FREECIV_JSON_CONNECTION
67833 field_addr.name = "cultivate_time";
67834#endif /* FREECIV_JSON_CONNECTION */
67835 e = 0;
67836
67837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
67838
67839 if (e) {
67840 log_packet_detailed("'cultivate_time' field error detected");
67841 }
67842
67843#ifdef FREECIV_JSON_CONNECTION
67844 field_addr.name = "plant_result";
67845#endif /* FREECIV_JSON_CONNECTION */
67846 e = 0;
67847
67848 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
67849
67850 if (e) {
67851 log_packet_detailed("'plant_result' field error detected");
67852 }
67853
67854#ifdef FREECIV_JSON_CONNECTION
67855 field_addr.name = "plant_time";
67856#endif /* FREECIV_JSON_CONNECTION */
67857 e = 0;
67858
67859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
67860
67861 if (e) {
67862 log_packet_detailed("'plant_time' field error detected");
67863 }
67864
67865#ifdef FREECIV_JSON_CONNECTION
67866 field_addr.name = "irrigation_food_incr";
67867#endif /* FREECIV_JSON_CONNECTION */
67868 e = 0;
67869
67870 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
67871
67872 if (e) {
67873 log_packet_detailed("'irrigation_food_incr' field error detected");
67874 }
67875
67876#ifdef FREECIV_JSON_CONNECTION
67877 field_addr.name = "irrigation_time";
67878#endif /* FREECIV_JSON_CONNECTION */
67879 e = 0;
67880
67881 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
67882
67883 if (e) {
67884 log_packet_detailed("'irrigation_time' field error detected");
67885 }
67886
67887#ifdef FREECIV_JSON_CONNECTION
67888 field_addr.name = "mining_shield_incr";
67889#endif /* FREECIV_JSON_CONNECTION */
67890 e = 0;
67891
67892 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
67893
67894 if (e) {
67895 log_packet_detailed("'mining_shield_incr' field error detected");
67896 }
67897
67898#ifdef FREECIV_JSON_CONNECTION
67899 field_addr.name = "mining_time";
67900#endif /* FREECIV_JSON_CONNECTION */
67901 e = 0;
67902
67903 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
67904
67905 if (e) {
67906 log_packet_detailed("'mining_time' field error detected");
67907 }
67908
67909#ifdef FREECIV_JSON_CONNECTION
67910 field_addr.name = "animal";
67911#endif /* FREECIV_JSON_CONNECTION */
67912 e = 0;
67913
67914 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
67915
67916 if (e) {
67917 log_packet_detailed("'animal' field error detected");
67918 }
67919
67920#ifdef FREECIV_JSON_CONNECTION
67921 field_addr.name = "transform_result";
67922#endif /* FREECIV_JSON_CONNECTION */
67923 e = 0;
67924
67925 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
67926
67927 if (e) {
67928 log_packet_detailed("'transform_result' field error detected");
67929 }
67930
67931#ifdef FREECIV_JSON_CONNECTION
67932 field_addr.name = "transform_time";
67933#endif /* FREECIV_JSON_CONNECTION */
67934 e = 0;
67935
67936 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
67937
67938 if (e) {
67939 log_packet_detailed("'transform_time' field error detected");
67940 }
67941
67942#ifdef FREECIV_JSON_CONNECTION
67943 field_addr.name = "placing_time";
67944#endif /* FREECIV_JSON_CONNECTION */
67945 e = 0;
67946
67947 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
67948
67949 if (e) {
67950 log_packet_detailed("'placing_time' field error detected");
67951 }
67952
67953#ifdef FREECIV_JSON_CONNECTION
67954 field_addr.name = "pillage_time";
67955#endif /* FREECIV_JSON_CONNECTION */
67956 e = 0;
67957
67958 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
67959
67960 if (e) {
67961 log_packet_detailed("'pillage_time' field error detected");
67962 }
67963
67964#ifdef FREECIV_JSON_CONNECTION
67965 field_addr.name = "extra_count";
67966#endif /* FREECIV_JSON_CONNECTION */
67967 e = 0;
67968
67969 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
67970
67971 if (e) {
67972 log_packet_detailed("'extra_count' field error detected");
67973 }
67974
67975#ifdef FREECIV_JSON_CONNECTION
67976 field_addr.name = "extra_removal_times";
67977#endif /* FREECIV_JSON_CONNECTION */
67978 e = 0;
67979
67980 {
67981 int i;
67982
67983#ifdef FREECIV_JSON_CONNECTION
67984 /* Create the array. */
67985 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
67986
67987 /* Enter array. */
67988 field_addr.sub_location = plocation_elem_new(0);
67989#endif /* FREECIV_JSON_CONNECTION */
67990
67991 for (i = 0; i < real_packet->extra_count; i++) {
67992#ifdef FREECIV_JSON_CONNECTION
67993 /* Next array element. */
67994 field_addr.sub_location->number = i;
67995#endif /* FREECIV_JSON_CONNECTION */
67996
67997 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
67998 }
67999
68000#ifdef FREECIV_JSON_CONNECTION
68001 /* Exit array. */
68002 FC_FREE(field_addr.sub_location);
68003#endif /* FREECIV_JSON_CONNECTION */
68004 }
68005
68006 if (e) {
68007 log_packet_detailed("'extra_removal_times' field error detected");
68008 }
68009
68010#ifdef FREECIV_JSON_CONNECTION
68011 field_addr.name = "color_red";
68012#endif /* FREECIV_JSON_CONNECTION */
68013 e = 0;
68014
68015 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
68016
68017 if (e) {
68018 log_packet_detailed("'color_red' field error detected");
68019 }
68020
68021#ifdef FREECIV_JSON_CONNECTION
68022 field_addr.name = "color_green";
68023#endif /* FREECIV_JSON_CONNECTION */
68024 e = 0;
68025
68026 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
68027
68028 if (e) {
68029 log_packet_detailed("'color_green' field error detected");
68030 }
68031
68032#ifdef FREECIV_JSON_CONNECTION
68033 field_addr.name = "color_blue";
68034#endif /* FREECIV_JSON_CONNECTION */
68035 e = 0;
68036
68037 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
68038
68039 if (e) {
68040 log_packet_detailed("'color_blue' field error detected");
68041 }
68042
68043#ifdef FREECIV_JSON_CONNECTION
68044 field_addr.name = "helptext";
68045#endif /* FREECIV_JSON_CONNECTION */
68046 e = 0;
68047
68048 if (!real_packet->helptext) {
68049 /* Transmit null as empty */
68050 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68051 } else {
68052 int i;
68053
68055 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68056
68057#ifdef FREECIV_JSON_CONNECTION
68058 /* Enter array. */
68059 field_addr.sub_location = plocation_elem_new(0);
68060#endif /* FREECIV_JSON_CONNECTION */
68061
68062 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68063#ifdef FREECIV_JSON_CONNECTION
68064 /* Next array element. */
68065 field_addr.sub_location->number = i;
68066#endif /* FREECIV_JSON_CONNECTION */
68067
68068 {
68069 const char *pstr = strvec_get(real_packet->helptext, i);
68070
68071 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68072 }
68073 }
68074
68075#ifdef FREECIV_JSON_CONNECTION
68076 /* Exit array. */
68077 FC_FREE(field_addr.sub_location);
68078#endif /* FREECIV_JSON_CONNECTION */
68079 }
68080
68081 if (e) {
68082 log_packet_detailed("'helptext' field error detected");
68083 }
68084#endif /* FREECIV_DELTA_PROTOCOL */
68085
68087}
68088
68090{
68091 if (!pc->used) {
68092 log_error("WARNING: trying to send data to the closed connection %s",
68094 return -1;
68095 }
68096 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet != nullptr, -1,
68097 "Handler for PACKET_RULESET_TERRAIN not installed");
68098 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet(pc, packet);
68099}
68100
68101void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
68102{
68103 conn_list_iterate(dest, pconn) {
68106}
68107
68109{
68110 memset(packet, 0, sizeof(*packet));
68111}
68112
68113#define free_packet_ruleset_terrain_flag(_packet) (void) 0
68114#define destroy_packet_ruleset_terrain_flag free
68115
68116#ifdef FREECIV_DELTA_PROTOCOL
68117#define hash_packet_ruleset_terrain_flag_100 hash_const
68118#define cmp_packet_ruleset_terrain_flag_100 cmp_const
68120#endif /* FREECIV_DELTA_PROTOCOL */
68121
68123{
68124#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_flag(_packet)
68126
68127#ifdef FREECIV_JSON_CONNECTION
68128 struct plocation field_addr;
68129 {
68130 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68133 }
68134#endif /* FREECIV_JSON_CONNECTION */
68135
68136 log_packet_detailed("packet_ruleset_terrain_flag_100: got info about ()");
68137
68138#ifdef FREECIV_DELTA_PROTOCOL
68141 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_FLAG;
68142
68143 if (nullptr == *hash) {
68145 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
68146 }
68147
68148 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68149 *real_packet = *old;
68150 } else {
68151 /* packet is already initialized empty */
68152 log_packet_detailed(" no old info");
68153 }
68154
68155#ifdef FREECIV_JSON_CONNECTION
68156 field_addr.name = "fields";
68157#endif /* FREECIV_JSON_CONNECTION */
68158 DIO_BV_GET(&din, &field_addr, fields);
68159
68160 if (BV_ISSET(fields, 0)) {
68161 log_packet_detailed(" got field 'id'");
68162
68163#ifdef FREECIV_JSON_CONNECTION
68164 field_addr.name = "id";
68165#endif /* FREECIV_JSON_CONNECTION */
68166
68167 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68169 }
68170 }
68171
68172 if (BV_ISSET(fields, 1)) {
68173 log_packet_detailed(" got field 'name'");
68174
68175#ifdef FREECIV_JSON_CONNECTION
68176 field_addr.name = "name";
68177#endif /* FREECIV_JSON_CONNECTION */
68178
68179 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68181 }
68182 }
68183
68184 if (BV_ISSET(fields, 2)) {
68185 log_packet_detailed(" got field 'helptxt'");
68186
68187#ifdef FREECIV_JSON_CONNECTION
68188 field_addr.name = "helptxt";
68189#endif /* FREECIV_JSON_CONNECTION */
68190
68191 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
68193 }
68194 }
68195
68196 if (nullptr == old) {
68197 old = fc_malloc(sizeof(*old));
68199 *old = *real_packet;
68201 } else {
68202 *old = *real_packet;
68203 }
68204
68205#else /* FREECIV_DELTA_PROTOCOL */
68206#ifdef FREECIV_JSON_CONNECTION
68207 field_addr.name = "id";
68208#endif /* FREECIV_JSON_CONNECTION */
68209
68210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68212 }
68213
68214#ifdef FREECIV_JSON_CONNECTION
68215 field_addr.name = "name";
68216#endif /* FREECIV_JSON_CONNECTION */
68217
68218 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68220 }
68221
68222#ifdef FREECIV_JSON_CONNECTION
68223 field_addr.name = "helptxt";
68224#endif /* FREECIV_JSON_CONNECTION */
68225
68226 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
68228 }
68229#endif /* FREECIV_DELTA_PROTOCOL */
68230
68232#undef FREE_PACKET_STRUCT
68233}
68234
68236{
68237 const struct packet_ruleset_terrain_flag *real_packet = packet;
68238 int e;
68240
68241 log_packet_detailed("packet_ruleset_terrain_flag_100: sending info about ()");
68242
68243#ifdef FREECIV_DELTA_PROTOCOL
68246 bool differ;
68247 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_FLAG;
68248
68249 if (nullptr == *hash) {
68251 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
68252 }
68253 BV_CLR_ALL(fields);
68254
68255 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68256 old = fc_malloc(sizeof(*old));
68257 /* temporary bitcopy just to insert correctly */
68258 *old = *real_packet;
68261 }
68262
68263 differ = (old->id != real_packet->id);
68264 if (differ) {
68265 BV_SET(fields, 0);
68266 }
68267
68268 differ = (strcmp(old->name, real_packet->name) != 0);
68269 if (differ) {
68270 BV_SET(fields, 1);
68271 }
68272
68273 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
68274 if (differ) {
68275 BV_SET(fields, 2);
68276 }
68277#endif /* FREECIV_DELTA_PROTOCOL */
68278
68279#ifdef FREECIV_JSON_CONNECTION
68280 struct plocation field_addr;
68281 {
68282 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68285 }
68286#endif /* FREECIV_JSON_CONNECTION */
68287
68288#ifdef FREECIV_DELTA_PROTOCOL
68289#ifdef FREECIV_JSON_CONNECTION
68290 field_addr.name = "fields";
68291#endif /* FREECIV_JSON_CONNECTION */
68292 e = 0;
68293 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68294 if (e) {
68295 log_packet_detailed("fields bitvector error detected");
68296 }
68297
68298 if (BV_ISSET(fields, 0)) {
68299 log_packet_detailed(" field 'id' has changed");
68300
68301#ifdef FREECIV_JSON_CONNECTION
68302 field_addr.name = "id";
68303#endif /* FREECIV_JSON_CONNECTION */
68304 e = 0;
68305
68306 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68307
68308 if (e) {
68309 log_packet_detailed("'id' field error detected");
68310 }
68311 }
68312
68313 if (BV_ISSET(fields, 1)) {
68314 log_packet_detailed(" field 'name' has changed");
68315
68316#ifdef FREECIV_JSON_CONNECTION
68317 field_addr.name = "name";
68318#endif /* FREECIV_JSON_CONNECTION */
68319 e = 0;
68320
68321 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68322
68323 if (e) {
68324 log_packet_detailed("'name' field error detected");
68325 }
68326 }
68327
68328 if (BV_ISSET(fields, 2)) {
68329 log_packet_detailed(" field 'helptxt' has changed");
68330
68331#ifdef FREECIV_JSON_CONNECTION
68332 field_addr.name = "helptxt";
68333#endif /* FREECIV_JSON_CONNECTION */
68334 e = 0;
68335
68336 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
68337
68338 if (e) {
68339 log_packet_detailed("'helptxt' field error detected");
68340 }
68341 }
68342
68343 *old = *real_packet;
68344
68345#else /* FREECIV_DELTA_PROTOCOL */
68346#ifdef FREECIV_JSON_CONNECTION
68347 field_addr.name = "id";
68348#endif /* FREECIV_JSON_CONNECTION */
68349 e = 0;
68350
68351 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68352
68353 if (e) {
68354 log_packet_detailed("'id' field error detected");
68355 }
68356
68357#ifdef FREECIV_JSON_CONNECTION
68358 field_addr.name = "name";
68359#endif /* FREECIV_JSON_CONNECTION */
68360 e = 0;
68361
68362 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68363
68364 if (e) {
68365 log_packet_detailed("'name' field error detected");
68366 }
68367
68368#ifdef FREECIV_JSON_CONNECTION
68369 field_addr.name = "helptxt";
68370#endif /* FREECIV_JSON_CONNECTION */
68371 e = 0;
68372
68373 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
68374
68375 if (e) {
68376 log_packet_detailed("'helptxt' field error detected");
68377 }
68378#endif /* FREECIV_DELTA_PROTOCOL */
68379
68381}
68382
68384{
68385 if (!pc->used) {
68386 log_error("WARNING: trying to send data to the closed connection %s",
68388 return -1;
68389 }
68390 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet != nullptr, -1,
68391 "Handler for PACKET_RULESET_TERRAIN_FLAG not installed");
68392 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet(pc, packet);
68393}
68394
68396{
68397 conn_list_iterate(dest, pconn) {
68400}
68401
68403{
68404 memset(packet, 0, sizeof(*packet));
68405
68406 packet->helptext = strvec_new();
68407}
68408
68410{
68411 if (packet->helptext) {
68412 strvec_destroy(packet->helptext);
68413 packet->helptext = nullptr;
68414 }
68415}
68416
68417static inline void destroy_packet_ruleset_unit_class(void *packet)
68418{
68420 free(packet);
68421}
68422
68423#ifdef FREECIV_DELTA_PROTOCOL
68424#define hash_packet_ruleset_unit_class_100 hash_const
68425#define cmp_packet_ruleset_unit_class_100 cmp_const
68427#endif /* FREECIV_DELTA_PROTOCOL */
68428
68430{
68431#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class(_packet)
68433
68434#ifdef FREECIV_JSON_CONNECTION
68435 struct plocation field_addr;
68436 {
68437 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68440 }
68441#endif /* FREECIV_JSON_CONNECTION */
68442
68443 log_packet_detailed("packet_ruleset_unit_class_100: got info about ()");
68444
68445#ifdef FREECIV_DELTA_PROTOCOL
68448 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS;
68449
68450 if (nullptr == *hash) {
68452 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
68453 }
68454
68455 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68456 real_packet->id = old->id;
68457 sz_strlcpy(real_packet->name, old->name);
68458 sz_strlcpy(real_packet->rule_name, old->rule_name);
68459 real_packet->min_speed = old->min_speed;
68460 real_packet->hp_loss_pct = old->hp_loss_pct;
68461 real_packet->non_native_def_pct = old->non_native_def_pct;
68462 real_packet->flags = old->flags;
68463 if (old->helptext) {
68464 strvec_copy(real_packet->helptext, old->helptext);
68465 } else {
68466 strvec_clear(real_packet->helptext);
68467 }
68468 } else {
68469 /* packet is already initialized empty */
68470 log_packet_detailed(" no old info");
68471 }
68472
68473#ifdef FREECIV_JSON_CONNECTION
68474 field_addr.name = "fields";
68475#endif /* FREECIV_JSON_CONNECTION */
68476 DIO_BV_GET(&din, &field_addr, fields);
68477
68478 if (BV_ISSET(fields, 0)) {
68479 log_packet_detailed(" got field 'id'");
68480
68481#ifdef FREECIV_JSON_CONNECTION
68482 field_addr.name = "id";
68483#endif /* FREECIV_JSON_CONNECTION */
68484
68485 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68487 }
68488 }
68489
68490 if (BV_ISSET(fields, 1)) {
68491 log_packet_detailed(" got field 'name'");
68492
68493#ifdef FREECIV_JSON_CONNECTION
68494 field_addr.name = "name";
68495#endif /* FREECIV_JSON_CONNECTION */
68496
68497 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68499 }
68500 }
68501
68502 if (BV_ISSET(fields, 2)) {
68503 log_packet_detailed(" got field 'rule_name'");
68504
68505#ifdef FREECIV_JSON_CONNECTION
68506 field_addr.name = "rule_name";
68507#endif /* FREECIV_JSON_CONNECTION */
68508
68509 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68510 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68511 }
68512 }
68513
68514 if (BV_ISSET(fields, 3)) {
68515 log_packet_detailed(" got field 'min_speed'");
68516
68517#ifdef FREECIV_JSON_CONNECTION
68518 field_addr.name = "min_speed";
68519#endif /* FREECIV_JSON_CONNECTION */
68520
68521 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68522 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68523 }
68524 }
68525
68526 if (BV_ISSET(fields, 4)) {
68527 log_packet_detailed(" got field 'hp_loss_pct'");
68528
68529#ifdef FREECIV_JSON_CONNECTION
68530 field_addr.name = "hp_loss_pct";
68531#endif /* FREECIV_JSON_CONNECTION */
68532
68533 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68534 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68535 }
68536 }
68537
68538 if (BV_ISSET(fields, 5)) {
68539 log_packet_detailed(" got field 'non_native_def_pct'");
68540
68541#ifdef FREECIV_JSON_CONNECTION
68542 field_addr.name = "non_native_def_pct";
68543#endif /* FREECIV_JSON_CONNECTION */
68544
68545 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68546 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68547 }
68548 }
68549
68550 if (BV_ISSET(fields, 6)) {
68551 log_packet_detailed(" got field 'flags'");
68552
68553#ifdef FREECIV_JSON_CONNECTION
68554 field_addr.name = "flags";
68555#endif /* FREECIV_JSON_CONNECTION */
68556
68557 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68559 }
68560 }
68561
68562 if (BV_ISSET(fields, 7)) {
68563 log_packet_detailed(" got field 'helptext'");
68564
68565#ifdef FREECIV_JSON_CONNECTION
68566 field_addr.name = "helptext";
68567#endif /* FREECIV_JSON_CONNECTION */
68568
68569 {
68570 int i;
68571
68572 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68574 }
68575 strvec_reserve(real_packet->helptext, i);
68576
68577#ifdef FREECIV_JSON_CONNECTION
68578 /* Enter array. */
68579 field_addr.sub_location = plocation_elem_new(0);
68580#endif /* FREECIV_JSON_CONNECTION */
68581
68582 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68583#ifdef FREECIV_JSON_CONNECTION
68584 /* Next array element */
68585 field_addr.sub_location->number = i;
68586#endif /* FREECIV_JSON_CONNECTION */
68587
68588 {
68589 char readin[MAX_LEN_PACKET];
68590
68591 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68592 || !strvec_set(real_packet->helptext, i, readin)) {
68594 }
68595 }
68596 }
68597
68598#ifdef FREECIV_JSON_CONNECTION
68599 /* Exit array. */
68600 FC_FREE(field_addr.sub_location);
68601#endif /* FREECIV_JSON_CONNECTION */
68602 }
68603 }
68604
68605 if (nullptr == old) {
68606 old = fc_malloc(sizeof(*old));
68608 old->id = real_packet->id;
68609 sz_strlcpy(old->name, real_packet->name);
68610 sz_strlcpy(old->rule_name, real_packet->rule_name);
68611 old->min_speed = real_packet->min_speed;
68612 old->hp_loss_pct = real_packet->hp_loss_pct;
68613 old->non_native_def_pct = real_packet->non_native_def_pct;
68614 old->flags = real_packet->flags;
68615 if (real_packet->helptext) {
68616 strvec_copy(old->helptext, real_packet->helptext);
68617 } else {
68618 strvec_clear(old->helptext);
68619 }
68621 } else {
68622 old->id = real_packet->id;
68623 sz_strlcpy(old->name, real_packet->name);
68624 sz_strlcpy(old->rule_name, real_packet->rule_name);
68625 old->min_speed = real_packet->min_speed;
68626 old->hp_loss_pct = real_packet->hp_loss_pct;
68627 old->non_native_def_pct = real_packet->non_native_def_pct;
68628 old->flags = real_packet->flags;
68629 if (real_packet->helptext) {
68630 strvec_copy(old->helptext, real_packet->helptext);
68631 } else {
68632 strvec_clear(old->helptext);
68633 }
68634 }
68635
68636#else /* FREECIV_DELTA_PROTOCOL */
68637#ifdef FREECIV_JSON_CONNECTION
68638 field_addr.name = "id";
68639#endif /* FREECIV_JSON_CONNECTION */
68640
68641 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68643 }
68644
68645#ifdef FREECIV_JSON_CONNECTION
68646 field_addr.name = "name";
68647#endif /* FREECIV_JSON_CONNECTION */
68648
68649 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68651 }
68652
68653#ifdef FREECIV_JSON_CONNECTION
68654 field_addr.name = "rule_name";
68655#endif /* FREECIV_JSON_CONNECTION */
68656
68657 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68658 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68659 }
68660
68661#ifdef FREECIV_JSON_CONNECTION
68662 field_addr.name = "min_speed";
68663#endif /* FREECIV_JSON_CONNECTION */
68664
68665 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68666 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68667 }
68668
68669#ifdef FREECIV_JSON_CONNECTION
68670 field_addr.name = "hp_loss_pct";
68671#endif /* FREECIV_JSON_CONNECTION */
68672
68673 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68674 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68675 }
68676
68677#ifdef FREECIV_JSON_CONNECTION
68678 field_addr.name = "non_native_def_pct";
68679#endif /* FREECIV_JSON_CONNECTION */
68680
68681 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68682 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68683 }
68684
68685#ifdef FREECIV_JSON_CONNECTION
68686 field_addr.name = "flags";
68687#endif /* FREECIV_JSON_CONNECTION */
68688
68689 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68691 }
68692
68693#ifdef FREECIV_JSON_CONNECTION
68694 field_addr.name = "helptext";
68695#endif /* FREECIV_JSON_CONNECTION */
68696
68697 {
68698 int i;
68699
68700 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68702 }
68703 strvec_reserve(real_packet->helptext, i);
68704
68705#ifdef FREECIV_JSON_CONNECTION
68706 /* Enter array. */
68707 field_addr.sub_location = plocation_elem_new(0);
68708#endif /* FREECIV_JSON_CONNECTION */
68709
68710 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68711#ifdef FREECIV_JSON_CONNECTION
68712 /* Next array element */
68713 field_addr.sub_location->number = i;
68714#endif /* FREECIV_JSON_CONNECTION */
68715
68716 {
68717 char readin[MAX_LEN_PACKET];
68718
68719 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68720 || !strvec_set(real_packet->helptext, i, readin)) {
68722 }
68723 }
68724 }
68725
68726#ifdef FREECIV_JSON_CONNECTION
68727 /* Exit array. */
68728 FC_FREE(field_addr.sub_location);
68729#endif /* FREECIV_JSON_CONNECTION */
68730 }
68731#endif /* FREECIV_DELTA_PROTOCOL */
68732
68734#undef FREE_PACKET_STRUCT
68735}
68736
68738{
68739 const struct packet_ruleset_unit_class *real_packet = packet;
68740 int e;
68742
68743 log_packet_detailed("packet_ruleset_unit_class_100: sending info about ()");
68744
68745#ifdef FREECIV_DELTA_PROTOCOL
68748 bool differ;
68749 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS;
68750
68751 if (nullptr == *hash) {
68753 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
68754 }
68755 BV_CLR_ALL(fields);
68756
68757 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68758 old = fc_malloc(sizeof(*old));
68759 /* temporary bitcopy just to insert correctly */
68760 *old = *real_packet;
68763 }
68764
68765 differ = (old->id != real_packet->id);
68766 if (differ) {
68767 BV_SET(fields, 0);
68768 }
68769
68770 differ = (strcmp(old->name, real_packet->name) != 0);
68771 if (differ) {
68772 BV_SET(fields, 1);
68773 }
68774
68775 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
68776 if (differ) {
68777 BV_SET(fields, 2);
68778 }
68779
68780 differ = (old->min_speed != real_packet->min_speed);
68781 if (differ) {
68782 BV_SET(fields, 3);
68783 }
68784
68785 differ = (old->hp_loss_pct != real_packet->hp_loss_pct);
68786 if (differ) {
68787 BV_SET(fields, 4);
68788 }
68789
68790 differ = (old->non_native_def_pct != real_packet->non_native_def_pct);
68791 if (differ) {
68792 BV_SET(fields, 5);
68793 }
68794
68795 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
68796 if (differ) {
68797 BV_SET(fields, 6);
68798 }
68799
68800 if (real_packet->helptext) {
68801 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
68802 } else {
68803 differ = (strvec_size(old->helptext) > 0);
68804 }
68805 if (differ) {
68806 BV_SET(fields, 7);
68807 }
68808#endif /* FREECIV_DELTA_PROTOCOL */
68809
68810#ifdef FREECIV_JSON_CONNECTION
68811 struct plocation field_addr;
68812 {
68813 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68816 }
68817#endif /* FREECIV_JSON_CONNECTION */
68818
68819#ifdef FREECIV_DELTA_PROTOCOL
68820#ifdef FREECIV_JSON_CONNECTION
68821 field_addr.name = "fields";
68822#endif /* FREECIV_JSON_CONNECTION */
68823 e = 0;
68824 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68825 if (e) {
68826 log_packet_detailed("fields bitvector error detected");
68827 }
68828
68829 if (BV_ISSET(fields, 0)) {
68830 log_packet_detailed(" field 'id' has changed");
68831
68832#ifdef FREECIV_JSON_CONNECTION
68833 field_addr.name = "id";
68834#endif /* FREECIV_JSON_CONNECTION */
68835 e = 0;
68836
68837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68838
68839 if (e) {
68840 log_packet_detailed("'id' field error detected");
68841 }
68842 }
68843
68844 if (BV_ISSET(fields, 1)) {
68845 log_packet_detailed(" field 'name' has changed");
68846
68847#ifdef FREECIV_JSON_CONNECTION
68848 field_addr.name = "name";
68849#endif /* FREECIV_JSON_CONNECTION */
68850 e = 0;
68851
68852 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68853
68854 if (e) {
68855 log_packet_detailed("'name' field error detected");
68856 }
68857 }
68858
68859 if (BV_ISSET(fields, 2)) {
68860 log_packet_detailed(" field 'rule_name' has changed");
68861
68862#ifdef FREECIV_JSON_CONNECTION
68863 field_addr.name = "rule_name";
68864#endif /* FREECIV_JSON_CONNECTION */
68865 e = 0;
68866
68867 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68868
68869 if (e) {
68870 log_packet_detailed("'rule_name' field error detected");
68871 }
68872 }
68873
68874 if (BV_ISSET(fields, 3)) {
68875 log_packet_detailed(" field 'min_speed' has changed");
68876
68877#ifdef FREECIV_JSON_CONNECTION
68878 field_addr.name = "min_speed";
68879#endif /* FREECIV_JSON_CONNECTION */
68880 e = 0;
68881
68882 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
68883
68884 if (e) {
68885 log_packet_detailed("'min_speed' field error detected");
68886 }
68887 }
68888
68889 if (BV_ISSET(fields, 4)) {
68890 log_packet_detailed(" field 'hp_loss_pct' has changed");
68891
68892#ifdef FREECIV_JSON_CONNECTION
68893 field_addr.name = "hp_loss_pct";
68894#endif /* FREECIV_JSON_CONNECTION */
68895 e = 0;
68896
68897 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
68898
68899 if (e) {
68900 log_packet_detailed("'hp_loss_pct' field error detected");
68901 }
68902 }
68903
68904 if (BV_ISSET(fields, 5)) {
68905 log_packet_detailed(" field 'non_native_def_pct' has changed");
68906
68907#ifdef FREECIV_JSON_CONNECTION
68908 field_addr.name = "non_native_def_pct";
68909#endif /* FREECIV_JSON_CONNECTION */
68910 e = 0;
68911
68912 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
68913
68914 if (e) {
68915 log_packet_detailed("'non_native_def_pct' field error detected");
68916 }
68917 }
68918
68919 if (BV_ISSET(fields, 6)) {
68920 log_packet_detailed(" field 'flags' has changed");
68921
68922#ifdef FREECIV_JSON_CONNECTION
68923 field_addr.name = "flags";
68924#endif /* FREECIV_JSON_CONNECTION */
68925 e = 0;
68926
68927 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
68928
68929 if (e) {
68930 log_packet_detailed("'flags' field error detected");
68931 }
68932 }
68933
68934 if (BV_ISSET(fields, 7)) {
68935 log_packet_detailed(" field 'helptext' has changed");
68936
68937#ifdef FREECIV_JSON_CONNECTION
68938 field_addr.name = "helptext";
68939#endif /* FREECIV_JSON_CONNECTION */
68940 e = 0;
68941
68942 if (!real_packet->helptext) {
68943 /* Transmit null as empty */
68944 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68945 } else {
68946 int i;
68947
68949 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68950
68951#ifdef FREECIV_JSON_CONNECTION
68952 /* Enter array. */
68953 field_addr.sub_location = plocation_elem_new(0);
68954#endif /* FREECIV_JSON_CONNECTION */
68955
68956 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68957#ifdef FREECIV_JSON_CONNECTION
68958 /* Next array element. */
68959 field_addr.sub_location->number = i;
68960#endif /* FREECIV_JSON_CONNECTION */
68961
68962 {
68963 const char *pstr = strvec_get(real_packet->helptext, i);
68964
68965 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68966 }
68967 }
68968
68969#ifdef FREECIV_JSON_CONNECTION
68970 /* Exit array. */
68971 FC_FREE(field_addr.sub_location);
68972#endif /* FREECIV_JSON_CONNECTION */
68973 }
68974
68975 if (e) {
68976 log_packet_detailed("'helptext' field error detected");
68977 }
68978 }
68979
68980 old->id = real_packet->id;
68981 sz_strlcpy(old->name, real_packet->name);
68982 sz_strlcpy(old->rule_name, real_packet->rule_name);
68983 old->min_speed = real_packet->min_speed;
68984 old->hp_loss_pct = real_packet->hp_loss_pct;
68985 old->non_native_def_pct = real_packet->non_native_def_pct;
68986 old->flags = real_packet->flags;
68987 if (real_packet->helptext) {
68988 strvec_copy(old->helptext, real_packet->helptext);
68989 } else {
68990 strvec_clear(old->helptext);
68991 }
68992
68993#else /* FREECIV_DELTA_PROTOCOL */
68994#ifdef FREECIV_JSON_CONNECTION
68995 field_addr.name = "id";
68996#endif /* FREECIV_JSON_CONNECTION */
68997 e = 0;
68998
68999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
69000
69001 if (e) {
69002 log_packet_detailed("'id' field error detected");
69003 }
69004
69005#ifdef FREECIV_JSON_CONNECTION
69006 field_addr.name = "name";
69007#endif /* FREECIV_JSON_CONNECTION */
69008 e = 0;
69009
69010 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
69011
69012 if (e) {
69013 log_packet_detailed("'name' field error detected");
69014 }
69015
69016#ifdef FREECIV_JSON_CONNECTION
69017 field_addr.name = "rule_name";
69018#endif /* FREECIV_JSON_CONNECTION */
69019 e = 0;
69020
69021 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
69022
69023 if (e) {
69024 log_packet_detailed("'rule_name' field error detected");
69025 }
69026
69027#ifdef FREECIV_JSON_CONNECTION
69028 field_addr.name = "min_speed";
69029#endif /* FREECIV_JSON_CONNECTION */
69030 e = 0;
69031
69032 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
69033
69034 if (e) {
69035 log_packet_detailed("'min_speed' field error detected");
69036 }
69037
69038#ifdef FREECIV_JSON_CONNECTION
69039 field_addr.name = "hp_loss_pct";
69040#endif /* FREECIV_JSON_CONNECTION */
69041 e = 0;
69042
69043 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
69044
69045 if (e) {
69046 log_packet_detailed("'hp_loss_pct' field error detected");
69047 }
69048
69049#ifdef FREECIV_JSON_CONNECTION
69050 field_addr.name = "non_native_def_pct";
69051#endif /* FREECIV_JSON_CONNECTION */
69052 e = 0;
69053
69054 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
69055
69056 if (e) {
69057 log_packet_detailed("'non_native_def_pct' field error detected");
69058 }
69059
69060#ifdef FREECIV_JSON_CONNECTION
69061 field_addr.name = "flags";
69062#endif /* FREECIV_JSON_CONNECTION */
69063 e = 0;
69064
69065 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
69066
69067 if (e) {
69068 log_packet_detailed("'flags' field error detected");
69069 }
69070
69071#ifdef FREECIV_JSON_CONNECTION
69072 field_addr.name = "helptext";
69073#endif /* FREECIV_JSON_CONNECTION */
69074 e = 0;
69075
69076 if (!real_packet->helptext) {
69077 /* Transmit null as empty */
69078 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
69079 } else {
69080 int i;
69081
69083 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
69084
69085#ifdef FREECIV_JSON_CONNECTION
69086 /* Enter array. */
69087 field_addr.sub_location = plocation_elem_new(0);
69088#endif /* FREECIV_JSON_CONNECTION */
69089
69090 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69091#ifdef FREECIV_JSON_CONNECTION
69092 /* Next array element. */
69093 field_addr.sub_location->number = i;
69094#endif /* FREECIV_JSON_CONNECTION */
69095
69096 {
69097 const char *pstr = strvec_get(real_packet->helptext, i);
69098
69099 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
69100 }
69101 }
69102
69103#ifdef FREECIV_JSON_CONNECTION
69104 /* Exit array. */
69105 FC_FREE(field_addr.sub_location);
69106#endif /* FREECIV_JSON_CONNECTION */
69107 }
69108
69109 if (e) {
69110 log_packet_detailed("'helptext' field error detected");
69111 }
69112#endif /* FREECIV_DELTA_PROTOCOL */
69113
69115}
69116
69118{
69119 if (!pc->used) {
69120 log_error("WARNING: trying to send data to the closed connection %s",
69122 return -1;
69123 }
69124 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet != nullptr, -1,
69125 "Handler for PACKET_RULESET_UNIT_CLASS not installed");
69126 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet(pc, packet);
69127}
69128
69130{
69131 conn_list_iterate(dest, pconn) {
69134}
69135
69136static inline void init_packet_ruleset_extra(struct packet_ruleset_extra *packet)
69137{
69138 memset(packet, 0, sizeof(*packet));
69139
69140 requirement_vector_init(&packet->reqs);
69144 packet->helptext = strvec_new();
69145}
69146
69147static inline void free_packet_ruleset_extra(struct packet_ruleset_extra *packet)
69148{
69149 if (packet->helptext) {
69150 strvec_destroy(packet->helptext);
69151 packet->helptext = nullptr;
69152 }
69156 requirement_vector_free(&packet->reqs);
69157}
69158
69159static inline void destroy_packet_ruleset_extra(void *packet)
69160{
69162 free(packet);
69163}
69164
69165#ifdef FREECIV_DELTA_PROTOCOL
69166#define hash_packet_ruleset_extra_100 hash_const
69167#define cmp_packet_ruleset_extra_100 cmp_const
69169#endif /* FREECIV_DELTA_PROTOCOL */
69170
69172{
69173#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra(_packet)
69175
69176#ifdef FREECIV_JSON_CONNECTION
69177 struct plocation field_addr;
69178 {
69179 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
69182 }
69183#endif /* FREECIV_JSON_CONNECTION */
69184
69185 log_packet_detailed("packet_ruleset_extra_100: got info about ()");
69186
69187#ifdef FREECIV_DELTA_PROTOCOL
69189 struct packet_ruleset_extra *old;
69190 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA;
69191
69192 if (nullptr == *hash) {
69194 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
69195 }
69196
69197 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
69198 real_packet->id = old->id;
69199 sz_strlcpy(real_packet->name, old->name);
69200 sz_strlcpy(real_packet->rule_name, old->rule_name);
69201 real_packet->category = old->category;
69202 real_packet->causes = old->causes;
69203 real_packet->rmcauses = old->rmcauses;
69204 sz_strlcpy(real_packet->activity_gfx, old->activity_gfx);
69205 sz_strlcpy(real_packet->act_gfx_alt, old->act_gfx_alt);
69206 sz_strlcpy(real_packet->act_gfx_alt2, old->act_gfx_alt2);
69207 sz_strlcpy(real_packet->rmact_gfx, old->rmact_gfx);
69208 sz_strlcpy(real_packet->rmact_gfx_alt, old->rmact_gfx_alt);
69209 sz_strlcpy(real_packet->rmact_gfx_alt2, old->rmact_gfx_alt2);
69210 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
69211 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
69212 requirement_vector_copy(&real_packet->reqs, &old->reqs);
69213 requirement_vector_copy(&real_packet->rmreqs, &old->rmreqs);
69214 real_packet->appearance_chance = old->appearance_chance;
69215 requirement_vector_copy(&real_packet->appearance_reqs, &old->appearance_reqs);
69216 real_packet->disappearance_chance = old->disappearance_chance;
69217 requirement_vector_copy(&real_packet->disappearance_reqs, &old->disappearance_reqs);
69218 real_packet->visibility_req = old->visibility_req;
69219 real_packet->buildable = old->buildable;
69220 real_packet->generated = old->generated;
69221 real_packet->build_time = old->build_time;
69222 real_packet->build_time_factor = old->build_time_factor;
69223 real_packet->removal_time = old->removal_time;
69224 real_packet->removal_time_factor = old->removal_time_factor;
69225 real_packet->infracost = old->infracost;
69226 real_packet->defense_bonus = old->defense_bonus;
69227 real_packet->eus = old->eus;
69228 real_packet->native_to = old->native_to;
69229 real_packet->flags = old->flags;
69230 real_packet->hidden_by = old->hidden_by;
69231 real_packet->bridged_over = old->bridged_over;
69232 real_packet->conflicts = old->conflicts;
69233 real_packet->no_aggr_near_city = old->no_aggr_near_city;
69234 if (old->helptext) {
69235 strvec_copy(real_packet->helptext, old->helptext);
69236 } else {
69237 strvec_clear(real_packet->helptext);
69238 }
69239 } else {
69240 /* packet is already initialized empty */
69241 log_packet_detailed(" no old info");
69242 }
69243
69244#ifdef FREECIV_JSON_CONNECTION
69245 field_addr.name = "fields";
69246#endif /* FREECIV_JSON_CONNECTION */
69247 DIO_BV_GET(&din, &field_addr, fields);
69248
69249 if (BV_ISSET(fields, 0)) {
69250 log_packet_detailed(" got field 'id'");
69251
69252#ifdef FREECIV_JSON_CONNECTION
69253 field_addr.name = "id";
69254#endif /* FREECIV_JSON_CONNECTION */
69255
69256 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69258 }
69259 }
69260
69261 if (BV_ISSET(fields, 1)) {
69262 log_packet_detailed(" got field 'name'");
69263
69264#ifdef FREECIV_JSON_CONNECTION
69265 field_addr.name = "name";
69266#endif /* FREECIV_JSON_CONNECTION */
69267
69268 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69270 }
69271 }
69272
69273 if (BV_ISSET(fields, 2)) {
69274 log_packet_detailed(" got field 'rule_name'");
69275
69276#ifdef FREECIV_JSON_CONNECTION
69277 field_addr.name = "rule_name";
69278#endif /* FREECIV_JSON_CONNECTION */
69279
69280 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
69281 RECEIVE_PACKET_FIELD_ERROR(rule_name);
69282 }
69283 }
69284
69285 if (BV_ISSET(fields, 3)) {
69286 log_packet_detailed(" got field 'category'");
69287
69288#ifdef FREECIV_JSON_CONNECTION
69289 field_addr.name = "category";
69290#endif /* FREECIV_JSON_CONNECTION */
69291
69292 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
69294 }
69295 }
69296
69297 if (BV_ISSET(fields, 4)) {
69298 log_packet_detailed(" got field 'causes'");
69299
69300#ifdef FREECIV_JSON_CONNECTION
69301 field_addr.name = "causes";
69302#endif /* FREECIV_JSON_CONNECTION */
69303
69304 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
69306 }
69307 }
69308
69309 if (BV_ISSET(fields, 5)) {
69310 log_packet_detailed(" got field 'rmcauses'");
69311
69312#ifdef FREECIV_JSON_CONNECTION
69313 field_addr.name = "rmcauses";
69314#endif /* FREECIV_JSON_CONNECTION */
69315
69316 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
69318 }
69319 }
69320
69321 if (BV_ISSET(fields, 6)) {
69322 log_packet_detailed(" got field 'activity_gfx'");
69323
69324#ifdef FREECIV_JSON_CONNECTION
69325 field_addr.name = "activity_gfx";
69326#endif /* FREECIV_JSON_CONNECTION */
69327
69328 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
69329 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
69330 }
69331 }
69332
69333 if (BV_ISSET(fields, 7)) {
69334 log_packet_detailed(" got field 'act_gfx_alt'");
69335
69336#ifdef FREECIV_JSON_CONNECTION
69337 field_addr.name = "act_gfx_alt";
69338#endif /* FREECIV_JSON_CONNECTION */
69339
69340 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
69341 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
69342 }
69343 }
69344
69345 if (BV_ISSET(fields, 8)) {
69346 log_packet_detailed(" got field 'act_gfx_alt2'");
69347
69348#ifdef FREECIV_JSON_CONNECTION
69349 field_addr.name = "act_gfx_alt2";
69350#endif /* FREECIV_JSON_CONNECTION */
69351
69352 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
69353 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
69354 }
69355 }
69356
69357 if (BV_ISSET(fields, 9)) {
69358 log_packet_detailed(" got field 'rmact_gfx'");
69359
69360#ifdef FREECIV_JSON_CONNECTION
69361 field_addr.name = "rmact_gfx";
69362#endif /* FREECIV_JSON_CONNECTION */
69363
69364 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
69365 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
69366 }
69367 }
69368
69369 if (BV_ISSET(fields, 10)) {
69370 log_packet_detailed(" got field 'rmact_gfx_alt'");
69371
69372#ifdef FREECIV_JSON_CONNECTION
69373 field_addr.name = "rmact_gfx_alt";
69374#endif /* FREECIV_JSON_CONNECTION */
69375
69376 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
69377 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
69378 }
69379 }
69380
69381 if (BV_ISSET(fields, 11)) {
69382 log_packet_detailed(" got field 'rmact_gfx_alt2'");
69383
69384#ifdef FREECIV_JSON_CONNECTION
69385 field_addr.name = "rmact_gfx_alt2";
69386#endif /* FREECIV_JSON_CONNECTION */
69387
69388 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
69389 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
69390 }
69391 }
69392
69393 if (BV_ISSET(fields, 12)) {
69394 log_packet_detailed(" got field 'graphic_str'");
69395
69396#ifdef FREECIV_JSON_CONNECTION
69397 field_addr.name = "graphic_str";
69398#endif /* FREECIV_JSON_CONNECTION */
69399
69400 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
69401 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
69402 }
69403 }
69404
69405 if (BV_ISSET(fields, 13)) {
69406 log_packet_detailed(" got field 'graphic_alt'");
69407
69408#ifdef FREECIV_JSON_CONNECTION
69409 field_addr.name = "graphic_alt";
69410#endif /* FREECIV_JSON_CONNECTION */
69411
69412 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
69413 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
69414 }
69415 }
69416
69417 if (BV_ISSET(fields, 14)) {
69418 log_packet_detailed(" got field 'reqs'");
69419
69420#ifdef FREECIV_JSON_CONNECTION
69421 field_addr.name = "reqs";
69422#endif /* FREECIV_JSON_CONNECTION */
69423
69424 {
69425 int i;
69426
69427 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69429 }
69431
69432#ifdef FREECIV_JSON_CONNECTION
69433 /* Enter array. */
69434 field_addr.sub_location = plocation_elem_new(0);
69435#endif /* FREECIV_JSON_CONNECTION */
69436
69437 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
69438#ifdef FREECIV_JSON_CONNECTION
69439 /* Next array element */
69440 field_addr.sub_location->number = i;
69441#endif /* FREECIV_JSON_CONNECTION */
69442
69443 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
69445 }
69446 }
69447
69448#ifdef FREECIV_JSON_CONNECTION
69449 /* Exit array. */
69450 FC_FREE(field_addr.sub_location);
69451#endif /* FREECIV_JSON_CONNECTION */
69452 }
69453 }
69454
69455 if (BV_ISSET(fields, 15)) {
69456 log_packet_detailed(" got field 'rmreqs'");
69457
69458#ifdef FREECIV_JSON_CONNECTION
69459 field_addr.name = "rmreqs";
69460#endif /* FREECIV_JSON_CONNECTION */
69461
69462 {
69463 int i;
69464
69465 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69467 }
69469
69470#ifdef FREECIV_JSON_CONNECTION
69471 /* Enter array. */
69472 field_addr.sub_location = plocation_elem_new(0);
69473#endif /* FREECIV_JSON_CONNECTION */
69474
69475 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
69476#ifdef FREECIV_JSON_CONNECTION
69477 /* Next array element */
69478 field_addr.sub_location->number = i;
69479#endif /* FREECIV_JSON_CONNECTION */
69480
69481 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
69483 }
69484 }
69485
69486#ifdef FREECIV_JSON_CONNECTION
69487 /* Exit array. */
69488 FC_FREE(field_addr.sub_location);
69489#endif /* FREECIV_JSON_CONNECTION */
69490 }
69491 }
69492
69493 if (BV_ISSET(fields, 16)) {
69494 log_packet_detailed(" got field 'appearance_chance'");
69495
69496#ifdef FREECIV_JSON_CONNECTION
69497 field_addr.name = "appearance_chance";
69498#endif /* FREECIV_JSON_CONNECTION */
69499
69500 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
69501 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
69502 }
69503 }
69504
69505 if (BV_ISSET(fields, 17)) {
69506 log_packet_detailed(" got field 'appearance_reqs'");
69507
69508#ifdef FREECIV_JSON_CONNECTION
69509 field_addr.name = "appearance_reqs";
69510#endif /* FREECIV_JSON_CONNECTION */
69511
69512 {
69513 int i;
69514
69515 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69516 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69517 }
69518 requirement_vector_reserve(&real_packet->appearance_reqs, i);
69519
69520#ifdef FREECIV_JSON_CONNECTION
69521 /* Enter array. */
69522 field_addr.sub_location = plocation_elem_new(0);
69523#endif /* FREECIV_JSON_CONNECTION */
69524
69525 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
69526#ifdef FREECIV_JSON_CONNECTION
69527 /* Next array element */
69528 field_addr.sub_location->number = i;
69529#endif /* FREECIV_JSON_CONNECTION */
69530
69531 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
69532 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69533 }
69534 }
69535
69536#ifdef FREECIV_JSON_CONNECTION
69537 /* Exit array. */
69538 FC_FREE(field_addr.sub_location);
69539#endif /* FREECIV_JSON_CONNECTION */
69540 }
69541 }
69542
69543 if (BV_ISSET(fields, 18)) {
69544 log_packet_detailed(" got field 'disappearance_chance'");
69545
69546#ifdef FREECIV_JSON_CONNECTION
69547 field_addr.name = "disappearance_chance";
69548#endif /* FREECIV_JSON_CONNECTION */
69549
69550 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
69551 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
69552 }
69553 }
69554
69555 if (BV_ISSET(fields, 19)) {
69556 log_packet_detailed(" got field 'disappearance_reqs'");
69557
69558#ifdef FREECIV_JSON_CONNECTION
69559 field_addr.name = "disappearance_reqs";
69560#endif /* FREECIV_JSON_CONNECTION */
69561
69562 {
69563 int i;
69564
69565 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69566 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69567 }
69568 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
69569
69570#ifdef FREECIV_JSON_CONNECTION
69571 /* Enter array. */
69572 field_addr.sub_location = plocation_elem_new(0);
69573#endif /* FREECIV_JSON_CONNECTION */
69574
69575 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
69576#ifdef FREECIV_JSON_CONNECTION
69577 /* Next array element */
69578 field_addr.sub_location->number = i;
69579#endif /* FREECIV_JSON_CONNECTION */
69580
69581 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
69582 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69583 }
69584 }
69585
69586#ifdef FREECIV_JSON_CONNECTION
69587 /* Exit array. */
69588 FC_FREE(field_addr.sub_location);
69589#endif /* FREECIV_JSON_CONNECTION */
69590 }
69591 }
69592
69593 if (BV_ISSET(fields, 20)) {
69594 log_packet_detailed(" got field 'visibility_req'");
69595
69596#ifdef FREECIV_JSON_CONNECTION
69597 field_addr.name = "visibility_req";
69598#endif /* FREECIV_JSON_CONNECTION */
69599
69600 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
69601 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
69602 }
69603 }
69604
69605 real_packet->buildable = BV_ISSET(fields, 21);
69606
69607 real_packet->generated = BV_ISSET(fields, 22);
69608
69609 if (BV_ISSET(fields, 23)) {
69610 log_packet_detailed(" got field 'build_time'");
69611
69612#ifdef FREECIV_JSON_CONNECTION
69613 field_addr.name = "build_time";
69614#endif /* FREECIV_JSON_CONNECTION */
69615
69616 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
69617 RECEIVE_PACKET_FIELD_ERROR(build_time);
69618 }
69619 }
69620
69621 if (BV_ISSET(fields, 24)) {
69622 log_packet_detailed(" got field 'build_time_factor'");
69623
69624#ifdef FREECIV_JSON_CONNECTION
69625 field_addr.name = "build_time_factor";
69626#endif /* FREECIV_JSON_CONNECTION */
69627
69628 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
69629 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
69630 }
69631 }
69632
69633 if (BV_ISSET(fields, 25)) {
69634 log_packet_detailed(" got field 'removal_time'");
69635
69636#ifdef FREECIV_JSON_CONNECTION
69637 field_addr.name = "removal_time";
69638#endif /* FREECIV_JSON_CONNECTION */
69639
69640 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
69641 RECEIVE_PACKET_FIELD_ERROR(removal_time);
69642 }
69643 }
69644
69645 if (BV_ISSET(fields, 26)) {
69646 log_packet_detailed(" got field 'removal_time_factor'");
69647
69648#ifdef FREECIV_JSON_CONNECTION
69649 field_addr.name = "removal_time_factor";
69650#endif /* FREECIV_JSON_CONNECTION */
69651
69652 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
69653 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
69654 }
69655 }
69656
69657 if (BV_ISSET(fields, 27)) {
69658 log_packet_detailed(" got field 'infracost'");
69659
69660#ifdef FREECIV_JSON_CONNECTION
69661 field_addr.name = "infracost";
69662#endif /* FREECIV_JSON_CONNECTION */
69663
69664 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
69665 RECEIVE_PACKET_FIELD_ERROR(infracost);
69666 }
69667 }
69668
69669 if (BV_ISSET(fields, 28)) {
69670 log_packet_detailed(" got field 'defense_bonus'");
69671
69672#ifdef FREECIV_JSON_CONNECTION
69673 field_addr.name = "defense_bonus";
69674#endif /* FREECIV_JSON_CONNECTION */
69675
69676 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
69677 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
69678 }
69679 }
69680
69681 if (BV_ISSET(fields, 29)) {
69682 log_packet_detailed(" got field 'eus'");
69683
69684#ifdef FREECIV_JSON_CONNECTION
69685 field_addr.name = "eus";
69686#endif /* FREECIV_JSON_CONNECTION */
69687
69688 {
69689 int readin;
69690
69691 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69693 }
69694 real_packet->eus = readin;
69695 }
69696 }
69697
69698 if (BV_ISSET(fields, 30)) {
69699 log_packet_detailed(" got field 'native_to'");
69700
69701#ifdef FREECIV_JSON_CONNECTION
69702 field_addr.name = "native_to";
69703#endif /* FREECIV_JSON_CONNECTION */
69704
69705 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
69706 RECEIVE_PACKET_FIELD_ERROR(native_to);
69707 }
69708 }
69709
69710 if (BV_ISSET(fields, 31)) {
69711 log_packet_detailed(" got field 'flags'");
69712
69713#ifdef FREECIV_JSON_CONNECTION
69714 field_addr.name = "flags";
69715#endif /* FREECIV_JSON_CONNECTION */
69716
69717 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
69719 }
69720 }
69721
69722 if (BV_ISSET(fields, 32)) {
69723 log_packet_detailed(" got field 'hidden_by'");
69724
69725#ifdef FREECIV_JSON_CONNECTION
69726 field_addr.name = "hidden_by";
69727#endif /* FREECIV_JSON_CONNECTION */
69728
69729 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
69730 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
69731 }
69732 }
69733
69734 if (BV_ISSET(fields, 33)) {
69735 log_packet_detailed(" got field 'bridged_over'");
69736
69737#ifdef FREECIV_JSON_CONNECTION
69738 field_addr.name = "bridged_over";
69739#endif /* FREECIV_JSON_CONNECTION */
69740
69741 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
69742 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
69743 }
69744 }
69745
69746 if (BV_ISSET(fields, 34)) {
69747 log_packet_detailed(" got field 'conflicts'");
69748
69749#ifdef FREECIV_JSON_CONNECTION
69750 field_addr.name = "conflicts";
69751#endif /* FREECIV_JSON_CONNECTION */
69752
69753 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
69754 RECEIVE_PACKET_FIELD_ERROR(conflicts);
69755 }
69756 }
69757
69758 if (BV_ISSET(fields, 35)) {
69759 log_packet_detailed(" got field 'no_aggr_near_city'");
69760
69761#ifdef FREECIV_JSON_CONNECTION
69762 field_addr.name = "no_aggr_near_city";
69763#endif /* FREECIV_JSON_CONNECTION */
69764
69765 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
69766 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
69767 }
69768 }
69769
69770 if (BV_ISSET(fields, 36)) {
69771 log_packet_detailed(" got field 'helptext'");
69772
69773#ifdef FREECIV_JSON_CONNECTION
69774 field_addr.name = "helptext";
69775#endif /* FREECIV_JSON_CONNECTION */
69776
69777 {
69778 int i;
69779
69780 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69782 }
69783 strvec_reserve(real_packet->helptext, i);
69784
69785#ifdef FREECIV_JSON_CONNECTION
69786 /* Enter array. */
69787 field_addr.sub_location = plocation_elem_new(0);
69788#endif /* FREECIV_JSON_CONNECTION */
69789
69790 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69791#ifdef FREECIV_JSON_CONNECTION
69792 /* Next array element */
69793 field_addr.sub_location->number = i;
69794#endif /* FREECIV_JSON_CONNECTION */
69795
69796 {
69797 char readin[MAX_LEN_PACKET];
69798
69799 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
69800 || !strvec_set(real_packet->helptext, i, readin)) {
69802 }
69803 }
69804 }
69805
69806#ifdef FREECIV_JSON_CONNECTION
69807 /* Exit array. */
69808 FC_FREE(field_addr.sub_location);
69809#endif /* FREECIV_JSON_CONNECTION */
69810 }
69811 }
69812
69813 if (nullptr == old) {
69814 old = fc_malloc(sizeof(*old));
69816 old->id = real_packet->id;
69817 sz_strlcpy(old->name, real_packet->name);
69818 sz_strlcpy(old->rule_name, real_packet->rule_name);
69819 old->category = real_packet->category;
69820 old->causes = real_packet->causes;
69821 old->rmcauses = real_packet->rmcauses;
69822 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69823 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69824 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69825 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69826 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69827 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69828 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69829 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69830 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69831 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69832 old->appearance_chance = real_packet->appearance_chance;
69833 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69834 old->disappearance_chance = real_packet->disappearance_chance;
69835 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69836 old->visibility_req = real_packet->visibility_req;
69837 old->buildable = real_packet->buildable;
69838 old->generated = real_packet->generated;
69839 old->build_time = real_packet->build_time;
69840 old->build_time_factor = real_packet->build_time_factor;
69841 old->removal_time = real_packet->removal_time;
69842 old->removal_time_factor = real_packet->removal_time_factor;
69843 old->infracost = real_packet->infracost;
69844 old->defense_bonus = real_packet->defense_bonus;
69845 old->eus = real_packet->eus;
69846 old->native_to = real_packet->native_to;
69847 old->flags = real_packet->flags;
69848 old->hidden_by = real_packet->hidden_by;
69849 old->bridged_over = real_packet->bridged_over;
69850 old->conflicts = real_packet->conflicts;
69851 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69852 if (real_packet->helptext) {
69853 strvec_copy(old->helptext, real_packet->helptext);
69854 } else {
69855 strvec_clear(old->helptext);
69856 }
69858 } else {
69859 old->id = real_packet->id;
69860 sz_strlcpy(old->name, real_packet->name);
69861 sz_strlcpy(old->rule_name, real_packet->rule_name);
69862 old->category = real_packet->category;
69863 old->causes = real_packet->causes;
69864 old->rmcauses = real_packet->rmcauses;
69865 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69866 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69867 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69868 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69869 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69870 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69871 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69872 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69873 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69874 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69875 old->appearance_chance = real_packet->appearance_chance;
69876 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69877 old->disappearance_chance = real_packet->disappearance_chance;
69878 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69879 old->visibility_req = real_packet->visibility_req;
69880 old->buildable = real_packet->buildable;
69881 old->generated = real_packet->generated;
69882 old->build_time = real_packet->build_time;
69883 old->build_time_factor = real_packet->build_time_factor;
69884 old->removal_time = real_packet->removal_time;
69885 old->removal_time_factor = real_packet->removal_time_factor;
69886 old->infracost = real_packet->infracost;
69887 old->defense_bonus = real_packet->defense_bonus;
69888 old->eus = real_packet->eus;
69889 old->native_to = real_packet->native_to;
69890 old->flags = real_packet->flags;
69891 old->hidden_by = real_packet->hidden_by;
69892 old->bridged_over = real_packet->bridged_over;
69893 old->conflicts = real_packet->conflicts;
69894 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69895 if (real_packet->helptext) {
69896 strvec_copy(old->helptext, real_packet->helptext);
69897 } else {
69898 strvec_clear(old->helptext);
69899 }
69900 }
69901
69902#else /* FREECIV_DELTA_PROTOCOL */
69903#ifdef FREECIV_JSON_CONNECTION
69904 field_addr.name = "id";
69905#endif /* FREECIV_JSON_CONNECTION */
69906
69907 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69909 }
69910
69911#ifdef FREECIV_JSON_CONNECTION
69912 field_addr.name = "name";
69913#endif /* FREECIV_JSON_CONNECTION */
69914
69915 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69917 }
69918
69919#ifdef FREECIV_JSON_CONNECTION
69920 field_addr.name = "rule_name";
69921#endif /* FREECIV_JSON_CONNECTION */
69922
69923 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
69924 RECEIVE_PACKET_FIELD_ERROR(rule_name);
69925 }
69926
69927#ifdef FREECIV_JSON_CONNECTION
69928 field_addr.name = "category";
69929#endif /* FREECIV_JSON_CONNECTION */
69930
69931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
69933 }
69934
69935#ifdef FREECIV_JSON_CONNECTION
69936 field_addr.name = "causes";
69937#endif /* FREECIV_JSON_CONNECTION */
69938
69939 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
69941 }
69942
69943#ifdef FREECIV_JSON_CONNECTION
69944 field_addr.name = "rmcauses";
69945#endif /* FREECIV_JSON_CONNECTION */
69946
69947 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
69949 }
69950
69951#ifdef FREECIV_JSON_CONNECTION
69952 field_addr.name = "activity_gfx";
69953#endif /* FREECIV_JSON_CONNECTION */
69954
69955 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
69956 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
69957 }
69958
69959#ifdef FREECIV_JSON_CONNECTION
69960 field_addr.name = "act_gfx_alt";
69961#endif /* FREECIV_JSON_CONNECTION */
69962
69963 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
69964 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
69965 }
69966
69967#ifdef FREECIV_JSON_CONNECTION
69968 field_addr.name = "act_gfx_alt2";
69969#endif /* FREECIV_JSON_CONNECTION */
69970
69971 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
69972 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
69973 }
69974
69975#ifdef FREECIV_JSON_CONNECTION
69976 field_addr.name = "rmact_gfx";
69977#endif /* FREECIV_JSON_CONNECTION */
69978
69979 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
69980 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
69981 }
69982
69983#ifdef FREECIV_JSON_CONNECTION
69984 field_addr.name = "rmact_gfx_alt";
69985#endif /* FREECIV_JSON_CONNECTION */
69986
69987 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
69988 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
69989 }
69990
69991#ifdef FREECIV_JSON_CONNECTION
69992 field_addr.name = "rmact_gfx_alt2";
69993#endif /* FREECIV_JSON_CONNECTION */
69994
69995 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
69996 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
69997 }
69998
69999#ifdef FREECIV_JSON_CONNECTION
70000 field_addr.name = "graphic_str";
70001#endif /* FREECIV_JSON_CONNECTION */
70002
70003 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
70004 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
70005 }
70006
70007#ifdef FREECIV_JSON_CONNECTION
70008 field_addr.name = "graphic_alt";
70009#endif /* FREECIV_JSON_CONNECTION */
70010
70011 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
70012 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
70013 }
70014
70015#ifdef FREECIV_JSON_CONNECTION
70016 field_addr.name = "reqs";
70017#endif /* FREECIV_JSON_CONNECTION */
70018
70019 {
70020 int i;
70021
70022 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
70024 }
70026
70027#ifdef FREECIV_JSON_CONNECTION
70028 /* Enter array. */
70029 field_addr.sub_location = plocation_elem_new(0);
70030#endif /* FREECIV_JSON_CONNECTION */
70031
70032 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
70033#ifdef FREECIV_JSON_CONNECTION
70034 /* Next array element */
70035 field_addr.sub_location->number = i;
70036#endif /* FREECIV_JSON_CONNECTION */
70037
70038 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
70040 }
70041 }
70042
70043#ifdef FREECIV_JSON_CONNECTION
70044 /* Exit array. */
70045 FC_FREE(field_addr.sub_location);
70046#endif /* FREECIV_JSON_CONNECTION */
70047 }
70048
70049#ifdef FREECIV_JSON_CONNECTION
70050 field_addr.name = "rmreqs";
70051#endif /* FREECIV_JSON_CONNECTION */
70052
70053 {
70054 int i;
70055
70056 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
70058 }
70060
70061#ifdef FREECIV_JSON_CONNECTION
70062 /* Enter array. */
70063 field_addr.sub_location = plocation_elem_new(0);
70064#endif /* FREECIV_JSON_CONNECTION */
70065
70066 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
70067#ifdef FREECIV_JSON_CONNECTION
70068 /* Next array element */
70069 field_addr.sub_location->number = i;
70070#endif /* FREECIV_JSON_CONNECTION */
70071
70072 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
70074 }
70075 }
70076
70077#ifdef FREECIV_JSON_CONNECTION
70078 /* Exit array. */
70079 FC_FREE(field_addr.sub_location);
70080#endif /* FREECIV_JSON_CONNECTION */
70081 }
70082
70083#ifdef FREECIV_JSON_CONNECTION
70084 field_addr.name = "appearance_chance";
70085#endif /* FREECIV_JSON_CONNECTION */
70086
70087 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
70088 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
70089 }
70090
70091#ifdef FREECIV_JSON_CONNECTION
70092 field_addr.name = "appearance_reqs";
70093#endif /* FREECIV_JSON_CONNECTION */
70094
70095 {
70096 int i;
70097
70098 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
70099 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
70100 }
70101 requirement_vector_reserve(&real_packet->appearance_reqs, i);
70102
70103#ifdef FREECIV_JSON_CONNECTION
70104 /* Enter array. */
70105 field_addr.sub_location = plocation_elem_new(0);
70106#endif /* FREECIV_JSON_CONNECTION */
70107
70108 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
70109#ifdef FREECIV_JSON_CONNECTION
70110 /* Next array element */
70111 field_addr.sub_location->number = i;
70112#endif /* FREECIV_JSON_CONNECTION */
70113
70114 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
70115 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
70116 }
70117 }
70118
70119#ifdef FREECIV_JSON_CONNECTION
70120 /* Exit array. */
70121 FC_FREE(field_addr.sub_location);
70122#endif /* FREECIV_JSON_CONNECTION */
70123 }
70124
70125#ifdef FREECIV_JSON_CONNECTION
70126 field_addr.name = "disappearance_chance";
70127#endif /* FREECIV_JSON_CONNECTION */
70128
70129 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
70130 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
70131 }
70132
70133#ifdef FREECIV_JSON_CONNECTION
70134 field_addr.name = "disappearance_reqs";
70135#endif /* FREECIV_JSON_CONNECTION */
70136
70137 {
70138 int i;
70139
70140 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
70141 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
70142 }
70143 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
70144
70145#ifdef FREECIV_JSON_CONNECTION
70146 /* Enter array. */
70147 field_addr.sub_location = plocation_elem_new(0);
70148#endif /* FREECIV_JSON_CONNECTION */
70149
70150 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
70151#ifdef FREECIV_JSON_CONNECTION
70152 /* Next array element */
70153 field_addr.sub_location->number = i;
70154#endif /* FREECIV_JSON_CONNECTION */
70155
70156 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
70157 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
70158 }
70159 }
70160
70161#ifdef FREECIV_JSON_CONNECTION
70162 /* Exit array. */
70163 FC_FREE(field_addr.sub_location);
70164#endif /* FREECIV_JSON_CONNECTION */
70165 }
70166
70167#ifdef FREECIV_JSON_CONNECTION
70168 field_addr.name = "visibility_req";
70169#endif /* FREECIV_JSON_CONNECTION */
70170
70171 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
70172 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
70173 }
70174
70175#ifdef FREECIV_JSON_CONNECTION
70176 field_addr.name = "buildable";
70177#endif /* FREECIV_JSON_CONNECTION */
70178
70179 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->buildable)) {
70180 RECEIVE_PACKET_FIELD_ERROR(buildable);
70181 }
70182
70183#ifdef FREECIV_JSON_CONNECTION
70184 field_addr.name = "generated";
70185#endif /* FREECIV_JSON_CONNECTION */
70186
70187 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->generated)) {
70188 RECEIVE_PACKET_FIELD_ERROR(generated);
70189 }
70190
70191#ifdef FREECIV_JSON_CONNECTION
70192 field_addr.name = "build_time";
70193#endif /* FREECIV_JSON_CONNECTION */
70194
70195 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
70196 RECEIVE_PACKET_FIELD_ERROR(build_time);
70197 }
70198
70199#ifdef FREECIV_JSON_CONNECTION
70200 field_addr.name = "build_time_factor";
70201#endif /* FREECIV_JSON_CONNECTION */
70202
70203 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
70204 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
70205 }
70206
70207#ifdef FREECIV_JSON_CONNECTION
70208 field_addr.name = "removal_time";
70209#endif /* FREECIV_JSON_CONNECTION */
70210
70211 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
70212 RECEIVE_PACKET_FIELD_ERROR(removal_time);
70213 }
70214
70215#ifdef FREECIV_JSON_CONNECTION
70216 field_addr.name = "removal_time_factor";
70217#endif /* FREECIV_JSON_CONNECTION */
70218
70219 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
70220 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
70221 }
70222
70223#ifdef FREECIV_JSON_CONNECTION
70224 field_addr.name = "infracost";
70225#endif /* FREECIV_JSON_CONNECTION */
70226
70227 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
70228 RECEIVE_PACKET_FIELD_ERROR(infracost);
70229 }
70230
70231#ifdef FREECIV_JSON_CONNECTION
70232 field_addr.name = "defense_bonus";
70233#endif /* FREECIV_JSON_CONNECTION */
70234
70235 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
70236 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
70237 }
70238
70239#ifdef FREECIV_JSON_CONNECTION
70240 field_addr.name = "eus";
70241#endif /* FREECIV_JSON_CONNECTION */
70242
70243 {
70244 int readin;
70245
70246 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
70248 }
70249 real_packet->eus = readin;
70250 }
70251
70252#ifdef FREECIV_JSON_CONNECTION
70253 field_addr.name = "native_to";
70254#endif /* FREECIV_JSON_CONNECTION */
70255
70256 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
70257 RECEIVE_PACKET_FIELD_ERROR(native_to);
70258 }
70259
70260#ifdef FREECIV_JSON_CONNECTION
70261 field_addr.name = "flags";
70262#endif /* FREECIV_JSON_CONNECTION */
70263
70264 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
70266 }
70267
70268#ifdef FREECIV_JSON_CONNECTION
70269 field_addr.name = "hidden_by";
70270#endif /* FREECIV_JSON_CONNECTION */
70271
70272 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
70273 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
70274 }
70275
70276#ifdef FREECIV_JSON_CONNECTION
70277 field_addr.name = "bridged_over";
70278#endif /* FREECIV_JSON_CONNECTION */
70279
70280 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
70281 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
70282 }
70283
70284#ifdef FREECIV_JSON_CONNECTION
70285 field_addr.name = "conflicts";
70286#endif /* FREECIV_JSON_CONNECTION */
70287
70288 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
70289 RECEIVE_PACKET_FIELD_ERROR(conflicts);
70290 }
70291
70292#ifdef FREECIV_JSON_CONNECTION
70293 field_addr.name = "no_aggr_near_city";
70294#endif /* FREECIV_JSON_CONNECTION */
70295
70296 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
70297 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
70298 }
70299
70300#ifdef FREECIV_JSON_CONNECTION
70301 field_addr.name = "helptext";
70302#endif /* FREECIV_JSON_CONNECTION */
70303
70304 {
70305 int i;
70306
70307 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
70309 }
70310 strvec_reserve(real_packet->helptext, i);
70311
70312#ifdef FREECIV_JSON_CONNECTION
70313 /* Enter array. */
70314 field_addr.sub_location = plocation_elem_new(0);
70315#endif /* FREECIV_JSON_CONNECTION */
70316
70317 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
70318#ifdef FREECIV_JSON_CONNECTION
70319 /* Next array element */
70320 field_addr.sub_location->number = i;
70321#endif /* FREECIV_JSON_CONNECTION */
70322
70323 {
70324 char readin[MAX_LEN_PACKET];
70325
70326 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
70327 || !strvec_set(real_packet->helptext, i, readin)) {
70329 }
70330 }
70331 }
70332
70333#ifdef FREECIV_JSON_CONNECTION
70334 /* Exit array. */
70335 FC_FREE(field_addr.sub_location);
70336#endif /* FREECIV_JSON_CONNECTION */
70337 }
70338#endif /* FREECIV_DELTA_PROTOCOL */
70339
70341#undef FREE_PACKET_STRUCT
70342}
70343
70344static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
70345{
70346 const struct packet_ruleset_extra *real_packet = packet;
70347 int e;
70349
70350 log_packet_detailed("packet_ruleset_extra_100: sending info about ()");
70351
70352#ifdef FREECIV_DELTA_PROTOCOL
70354 struct packet_ruleset_extra *old;
70355 bool differ;
70356 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA;
70357
70358 if (nullptr == *hash) {
70360 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
70361 }
70362 BV_CLR_ALL(fields);
70363
70364 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70365 old = fc_malloc(sizeof(*old));
70366 /* temporary bitcopy just to insert correctly */
70367 *old = *real_packet;
70370 }
70371
70372 differ = (old->id != real_packet->id);
70373 if (differ) {
70374 BV_SET(fields, 0);
70375 }
70376
70377 differ = (strcmp(old->name, real_packet->name) != 0);
70378 if (differ) {
70379 BV_SET(fields, 1);
70380 }
70381
70382 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
70383 if (differ) {
70384 BV_SET(fields, 2);
70385 }
70386
70387 differ = (old->category != real_packet->category);
70388 if (differ) {
70389 BV_SET(fields, 3);
70390 }
70391
70392 differ = !BV_ARE_EQUAL(old->causes, real_packet->causes);
70393 if (differ) {
70394 BV_SET(fields, 4);
70395 }
70396
70397 differ = !BV_ARE_EQUAL(old->rmcauses, real_packet->rmcauses);
70398 if (differ) {
70399 BV_SET(fields, 5);
70400 }
70401
70402 differ = (strcmp(old->activity_gfx, real_packet->activity_gfx) != 0);
70403 if (differ) {
70404 BV_SET(fields, 6);
70405 }
70406
70407 differ = (strcmp(old->act_gfx_alt, real_packet->act_gfx_alt) != 0);
70408 if (differ) {
70409 BV_SET(fields, 7);
70410 }
70411
70412 differ = (strcmp(old->act_gfx_alt2, real_packet->act_gfx_alt2) != 0);
70413 if (differ) {
70414 BV_SET(fields, 8);
70415 }
70416
70417 differ = (strcmp(old->rmact_gfx, real_packet->rmact_gfx) != 0);
70418 if (differ) {
70419 BV_SET(fields, 9);
70420 }
70421
70422 differ = (strcmp(old->rmact_gfx_alt, real_packet->rmact_gfx_alt) != 0);
70423 if (differ) {
70424 BV_SET(fields, 10);
70425 }
70426
70427 differ = (strcmp(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2) != 0);
70428 if (differ) {
70429 BV_SET(fields, 11);
70430 }
70431
70432 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
70433 if (differ) {
70434 BV_SET(fields, 12);
70435 }
70436
70437 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
70438 if (differ) {
70439 BV_SET(fields, 13);
70440 }
70441
70443 if (!differ) {
70444 int i;
70445
70446 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
70447 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
70448 if (differ) {
70449 break;
70450 }
70451 }
70452 }
70453 if (differ) {
70454 BV_SET(fields, 14);
70455 }
70456
70458 if (!differ) {
70459 int i;
70460
70461 for (i = 0; i < requirement_vector_size(&old->rmreqs); i++) {
70462 differ = !are_requirements_equal(&old->rmreqs.p[i], &real_packet->rmreqs.p[i]);
70463 if (differ) {
70464 break;
70465 }
70466 }
70467 }
70468 if (differ) {
70469 BV_SET(fields, 15);
70470 }
70471
70472 differ = (old->appearance_chance != real_packet->appearance_chance);
70473 if (differ) {
70474 BV_SET(fields, 16);
70475 }
70476
70477 differ = (requirement_vector_size(&old->appearance_reqs) != requirement_vector_size(&real_packet->appearance_reqs));
70478 if (!differ) {
70479 int i;
70480
70481 for (i = 0; i < requirement_vector_size(&old->appearance_reqs); i++) {
70482 differ = !are_requirements_equal(&old->appearance_reqs.p[i], &real_packet->appearance_reqs.p[i]);
70483 if (differ) {
70484 break;
70485 }
70486 }
70487 }
70488 if (differ) {
70489 BV_SET(fields, 17);
70490 }
70491
70492 differ = (old->disappearance_chance != real_packet->disappearance_chance);
70493 if (differ) {
70494 BV_SET(fields, 18);
70495 }
70496
70497 differ = (requirement_vector_size(&old->disappearance_reqs) != requirement_vector_size(&real_packet->disappearance_reqs));
70498 if (!differ) {
70499 int i;
70500
70501 for (i = 0; i < requirement_vector_size(&old->disappearance_reqs); i++) {
70502 differ = !are_requirements_equal(&old->disappearance_reqs.p[i], &real_packet->disappearance_reqs.p[i]);
70503 if (differ) {
70504 break;
70505 }
70506 }
70507 }
70508 if (differ) {
70509 BV_SET(fields, 19);
70510 }
70511
70512 differ = (old->visibility_req != real_packet->visibility_req);
70513 if (differ) {
70514 BV_SET(fields, 20);
70515 }
70516
70517 /* folded into head */
70518 if (real_packet->buildable) {
70519 BV_SET(fields, 21);
70520 }
70521
70522 /* folded into head */
70523 if (real_packet->generated) {
70524 BV_SET(fields, 22);
70525 }
70526
70527 differ = (old->build_time != real_packet->build_time);
70528 if (differ) {
70529 BV_SET(fields, 23);
70530 }
70531
70532 differ = (old->build_time_factor != real_packet->build_time_factor);
70533 if (differ) {
70534 BV_SET(fields, 24);
70535 }
70536
70537 differ = (old->removal_time != real_packet->removal_time);
70538 if (differ) {
70539 BV_SET(fields, 25);
70540 }
70541
70542 differ = (old->removal_time_factor != real_packet->removal_time_factor);
70543 if (differ) {
70544 BV_SET(fields, 26);
70545 }
70546
70547 differ = (old->infracost != real_packet->infracost);
70548 if (differ) {
70549 BV_SET(fields, 27);
70550 }
70551
70552 differ = (old->defense_bonus != real_packet->defense_bonus);
70553 if (differ) {
70554 BV_SET(fields, 28);
70555 }
70556
70557 differ = (old->eus != real_packet->eus);
70558 if (differ) {
70559 BV_SET(fields, 29);
70560 }
70561
70562 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
70563 if (differ) {
70564 BV_SET(fields, 30);
70565 }
70566
70567 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
70568 if (differ) {
70569 BV_SET(fields, 31);
70570 }
70571
70572 differ = !BV_ARE_EQUAL(old->hidden_by, real_packet->hidden_by);
70573 if (differ) {
70574 BV_SET(fields, 32);
70575 }
70576
70577 differ = !BV_ARE_EQUAL(old->bridged_over, real_packet->bridged_over);
70578 if (differ) {
70579 BV_SET(fields, 33);
70580 }
70581
70582 differ = !BV_ARE_EQUAL(old->conflicts, real_packet->conflicts);
70583 if (differ) {
70584 BV_SET(fields, 34);
70585 }
70586
70587 differ = (old->no_aggr_near_city != real_packet->no_aggr_near_city);
70588 if (differ) {
70589 BV_SET(fields, 35);
70590 }
70591
70592 if (real_packet->helptext) {
70593 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
70594 } else {
70595 differ = (strvec_size(old->helptext) > 0);
70596 }
70597 if (differ) {
70598 BV_SET(fields, 36);
70599 }
70600#endif /* FREECIV_DELTA_PROTOCOL */
70601
70602#ifdef FREECIV_JSON_CONNECTION
70603 struct plocation field_addr;
70604 {
70605 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
70608 }
70609#endif /* FREECIV_JSON_CONNECTION */
70610
70611#ifdef FREECIV_DELTA_PROTOCOL
70612#ifdef FREECIV_JSON_CONNECTION
70613 field_addr.name = "fields";
70614#endif /* FREECIV_JSON_CONNECTION */
70615 e = 0;
70616 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70617 if (e) {
70618 log_packet_detailed("fields bitvector error detected");
70619 }
70620
70621 if (BV_ISSET(fields, 0)) {
70622 log_packet_detailed(" field 'id' has changed");
70623
70624#ifdef FREECIV_JSON_CONNECTION
70625 field_addr.name = "id";
70626#endif /* FREECIV_JSON_CONNECTION */
70627 e = 0;
70628
70629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70630
70631 if (e) {
70632 log_packet_detailed("'id' field error detected");
70633 }
70634 }
70635
70636 if (BV_ISSET(fields, 1)) {
70637 log_packet_detailed(" field 'name' has changed");
70638
70639#ifdef FREECIV_JSON_CONNECTION
70640 field_addr.name = "name";
70641#endif /* FREECIV_JSON_CONNECTION */
70642 e = 0;
70643
70644 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70645
70646 if (e) {
70647 log_packet_detailed("'name' field error detected");
70648 }
70649 }
70650
70651 if (BV_ISSET(fields, 2)) {
70652 log_packet_detailed(" field 'rule_name' has changed");
70653
70654#ifdef FREECIV_JSON_CONNECTION
70655 field_addr.name = "rule_name";
70656#endif /* FREECIV_JSON_CONNECTION */
70657 e = 0;
70658
70659 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70660
70661 if (e) {
70662 log_packet_detailed("'rule_name' field error detected");
70663 }
70664 }
70665
70666 if (BV_ISSET(fields, 3)) {
70667 log_packet_detailed(" field 'category' has changed");
70668
70669#ifdef FREECIV_JSON_CONNECTION
70670 field_addr.name = "category";
70671#endif /* FREECIV_JSON_CONNECTION */
70672 e = 0;
70673
70674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
70675
70676 if (e) {
70677 log_packet_detailed("'category' field error detected");
70678 }
70679 }
70680
70681 if (BV_ISSET(fields, 4)) {
70682 log_packet_detailed(" field 'causes' has changed");
70683
70684#ifdef FREECIV_JSON_CONNECTION
70685 field_addr.name = "causes";
70686#endif /* FREECIV_JSON_CONNECTION */
70687 e = 0;
70688
70689 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
70690
70691 if (e) {
70692 log_packet_detailed("'causes' field error detected");
70693 }
70694 }
70695
70696 if (BV_ISSET(fields, 5)) {
70697 log_packet_detailed(" field 'rmcauses' has changed");
70698
70699#ifdef FREECIV_JSON_CONNECTION
70700 field_addr.name = "rmcauses";
70701#endif /* FREECIV_JSON_CONNECTION */
70702 e = 0;
70703
70704 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
70705
70706 if (e) {
70707 log_packet_detailed("'rmcauses' field error detected");
70708 }
70709 }
70710
70711 if (BV_ISSET(fields, 6)) {
70712 log_packet_detailed(" field 'activity_gfx' has changed");
70713
70714#ifdef FREECIV_JSON_CONNECTION
70715 field_addr.name = "activity_gfx";
70716#endif /* FREECIV_JSON_CONNECTION */
70717 e = 0;
70718
70719 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
70720
70721 if (e) {
70722 log_packet_detailed("'activity_gfx' field error detected");
70723 }
70724 }
70725
70726 if (BV_ISSET(fields, 7)) {
70727 log_packet_detailed(" field 'act_gfx_alt' has changed");
70728
70729#ifdef FREECIV_JSON_CONNECTION
70730 field_addr.name = "act_gfx_alt";
70731#endif /* FREECIV_JSON_CONNECTION */
70732 e = 0;
70733
70734 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
70735
70736 if (e) {
70737 log_packet_detailed("'act_gfx_alt' field error detected");
70738 }
70739 }
70740
70741 if (BV_ISSET(fields, 8)) {
70742 log_packet_detailed(" field 'act_gfx_alt2' has changed");
70743
70744#ifdef FREECIV_JSON_CONNECTION
70745 field_addr.name = "act_gfx_alt2";
70746#endif /* FREECIV_JSON_CONNECTION */
70747 e = 0;
70748
70749 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
70750
70751 if (e) {
70752 log_packet_detailed("'act_gfx_alt2' field error detected");
70753 }
70754 }
70755
70756 if (BV_ISSET(fields, 9)) {
70757 log_packet_detailed(" field 'rmact_gfx' has changed");
70758
70759#ifdef FREECIV_JSON_CONNECTION
70760 field_addr.name = "rmact_gfx";
70761#endif /* FREECIV_JSON_CONNECTION */
70762 e = 0;
70763
70764 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
70765
70766 if (e) {
70767 log_packet_detailed("'rmact_gfx' field error detected");
70768 }
70769 }
70770
70771 if (BV_ISSET(fields, 10)) {
70772 log_packet_detailed(" field 'rmact_gfx_alt' has changed");
70773
70774#ifdef FREECIV_JSON_CONNECTION
70775 field_addr.name = "rmact_gfx_alt";
70776#endif /* FREECIV_JSON_CONNECTION */
70777 e = 0;
70778
70779 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
70780
70781 if (e) {
70782 log_packet_detailed("'rmact_gfx_alt' field error detected");
70783 }
70784 }
70785
70786 if (BV_ISSET(fields, 11)) {
70787 log_packet_detailed(" field 'rmact_gfx_alt2' has changed");
70788
70789#ifdef FREECIV_JSON_CONNECTION
70790 field_addr.name = "rmact_gfx_alt2";
70791#endif /* FREECIV_JSON_CONNECTION */
70792 e = 0;
70793
70794 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
70795
70796 if (e) {
70797 log_packet_detailed("'rmact_gfx_alt2' field error detected");
70798 }
70799 }
70800
70801 if (BV_ISSET(fields, 12)) {
70802 log_packet_detailed(" field 'graphic_str' has changed");
70803
70804#ifdef FREECIV_JSON_CONNECTION
70805 field_addr.name = "graphic_str";
70806#endif /* FREECIV_JSON_CONNECTION */
70807 e = 0;
70808
70809 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
70810
70811 if (e) {
70812 log_packet_detailed("'graphic_str' field error detected");
70813 }
70814 }
70815
70816 if (BV_ISSET(fields, 13)) {
70817 log_packet_detailed(" field 'graphic_alt' has changed");
70818
70819#ifdef FREECIV_JSON_CONNECTION
70820 field_addr.name = "graphic_alt";
70821#endif /* FREECIV_JSON_CONNECTION */
70822 e = 0;
70823
70824 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
70825
70826 if (e) {
70827 log_packet_detailed("'graphic_alt' field error detected");
70828 }
70829 }
70830
70831 if (BV_ISSET(fields, 14)) {
70832 log_packet_detailed(" field 'reqs' has changed");
70833
70834#ifdef FREECIV_JSON_CONNECTION
70835 field_addr.name = "reqs";
70836#endif /* FREECIV_JSON_CONNECTION */
70837 e = 0;
70838
70839 {
70840 int i;
70841
70844
70845#ifdef FREECIV_JSON_CONNECTION
70846 /* Enter array. */
70847 field_addr.sub_location = plocation_elem_new(0);
70848#endif /* FREECIV_JSON_CONNECTION */
70849
70850 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
70851#ifdef FREECIV_JSON_CONNECTION
70852 /* Next array element. */
70853 field_addr.sub_location->number = i;
70854#endif /* FREECIV_JSON_CONNECTION */
70855
70856 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
70857 }
70858
70859#ifdef FREECIV_JSON_CONNECTION
70860 /* Exit array. */
70861 FC_FREE(field_addr.sub_location);
70862#endif /* FREECIV_JSON_CONNECTION */
70863 }
70864
70865 if (e) {
70866 log_packet_detailed("'reqs' field error detected");
70867 }
70868 }
70869
70870 if (BV_ISSET(fields, 15)) {
70871 log_packet_detailed(" field 'rmreqs' has changed");
70872
70873#ifdef FREECIV_JSON_CONNECTION
70874 field_addr.name = "rmreqs";
70875#endif /* FREECIV_JSON_CONNECTION */
70876 e = 0;
70877
70878 {
70879 int i;
70880
70883
70884#ifdef FREECIV_JSON_CONNECTION
70885 /* Enter array. */
70886 field_addr.sub_location = plocation_elem_new(0);
70887#endif /* FREECIV_JSON_CONNECTION */
70888
70889 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
70890#ifdef FREECIV_JSON_CONNECTION
70891 /* Next array element. */
70892 field_addr.sub_location->number = i;
70893#endif /* FREECIV_JSON_CONNECTION */
70894
70895 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
70896 }
70897
70898#ifdef FREECIV_JSON_CONNECTION
70899 /* Exit array. */
70900 FC_FREE(field_addr.sub_location);
70901#endif /* FREECIV_JSON_CONNECTION */
70902 }
70903
70904 if (e) {
70905 log_packet_detailed("'rmreqs' field error detected");
70906 }
70907 }
70908
70909 if (BV_ISSET(fields, 16)) {
70910 log_packet_detailed(" field 'appearance_chance' has changed");
70911
70912#ifdef FREECIV_JSON_CONNECTION
70913 field_addr.name = "appearance_chance";
70914#endif /* FREECIV_JSON_CONNECTION */
70915 e = 0;
70916
70917 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
70918
70919 if (e) {
70920 log_packet_detailed("'appearance_chance' field error detected");
70921 }
70922 }
70923
70924 if (BV_ISSET(fields, 17)) {
70925 log_packet_detailed(" field 'appearance_reqs' has changed");
70926
70927#ifdef FREECIV_JSON_CONNECTION
70928 field_addr.name = "appearance_reqs";
70929#endif /* FREECIV_JSON_CONNECTION */
70930 e = 0;
70931
70932 {
70933 int i;
70934
70936 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
70937
70938#ifdef FREECIV_JSON_CONNECTION
70939 /* Enter array. */
70940 field_addr.sub_location = plocation_elem_new(0);
70941#endif /* FREECIV_JSON_CONNECTION */
70942
70943 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
70944#ifdef FREECIV_JSON_CONNECTION
70945 /* Next array element. */
70946 field_addr.sub_location->number = i;
70947#endif /* FREECIV_JSON_CONNECTION */
70948
70949 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
70950 }
70951
70952#ifdef FREECIV_JSON_CONNECTION
70953 /* Exit array. */
70954 FC_FREE(field_addr.sub_location);
70955#endif /* FREECIV_JSON_CONNECTION */
70956 }
70957
70958 if (e) {
70959 log_packet_detailed("'appearance_reqs' field error detected");
70960 }
70961 }
70962
70963 if (BV_ISSET(fields, 18)) {
70964 log_packet_detailed(" field 'disappearance_chance' has changed");
70965
70966#ifdef FREECIV_JSON_CONNECTION
70967 field_addr.name = "disappearance_chance";
70968#endif /* FREECIV_JSON_CONNECTION */
70969 e = 0;
70970
70971 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
70972
70973 if (e) {
70974 log_packet_detailed("'disappearance_chance' field error detected");
70975 }
70976 }
70977
70978 if (BV_ISSET(fields, 19)) {
70979 log_packet_detailed(" field 'disappearance_reqs' has changed");
70980
70981#ifdef FREECIV_JSON_CONNECTION
70982 field_addr.name = "disappearance_reqs";
70983#endif /* FREECIV_JSON_CONNECTION */
70984 e = 0;
70985
70986 {
70987 int i;
70988
70990 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
70991
70992#ifdef FREECIV_JSON_CONNECTION
70993 /* Enter array. */
70994 field_addr.sub_location = plocation_elem_new(0);
70995#endif /* FREECIV_JSON_CONNECTION */
70996
70997 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
70998#ifdef FREECIV_JSON_CONNECTION
70999 /* Next array element. */
71000 field_addr.sub_location->number = i;
71001#endif /* FREECIV_JSON_CONNECTION */
71002
71003 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
71004 }
71005
71006#ifdef FREECIV_JSON_CONNECTION
71007 /* Exit array. */
71008 FC_FREE(field_addr.sub_location);
71009#endif /* FREECIV_JSON_CONNECTION */
71010 }
71011
71012 if (e) {
71013 log_packet_detailed("'disappearance_reqs' field error detected");
71014 }
71015 }
71016
71017 if (BV_ISSET(fields, 20)) {
71018 log_packet_detailed(" field 'visibility_req' has changed");
71019
71020#ifdef FREECIV_JSON_CONNECTION
71021 field_addr.name = "visibility_req";
71022#endif /* FREECIV_JSON_CONNECTION */
71023 e = 0;
71024
71025 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
71026
71027 if (e) {
71028 log_packet_detailed("'visibility_req' field error detected");
71029 }
71030 }
71031
71032 /* field 21 is folded into the header */
71033
71034 /* field 22 is folded into the header */
71035
71036 if (BV_ISSET(fields, 23)) {
71037 log_packet_detailed(" field 'build_time' has changed");
71038
71039#ifdef FREECIV_JSON_CONNECTION
71040 field_addr.name = "build_time";
71041#endif /* FREECIV_JSON_CONNECTION */
71042 e = 0;
71043
71044 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
71045
71046 if (e) {
71047 log_packet_detailed("'build_time' field error detected");
71048 }
71049 }
71050
71051 if (BV_ISSET(fields, 24)) {
71052 log_packet_detailed(" field 'build_time_factor' has changed");
71053
71054#ifdef FREECIV_JSON_CONNECTION
71055 field_addr.name = "build_time_factor";
71056#endif /* FREECIV_JSON_CONNECTION */
71057 e = 0;
71058
71059 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
71060
71061 if (e) {
71062 log_packet_detailed("'build_time_factor' field error detected");
71063 }
71064 }
71065
71066 if (BV_ISSET(fields, 25)) {
71067 log_packet_detailed(" field 'removal_time' has changed");
71068
71069#ifdef FREECIV_JSON_CONNECTION
71070 field_addr.name = "removal_time";
71071#endif /* FREECIV_JSON_CONNECTION */
71072 e = 0;
71073
71074 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
71075
71076 if (e) {
71077 log_packet_detailed("'removal_time' field error detected");
71078 }
71079 }
71080
71081 if (BV_ISSET(fields, 26)) {
71082 log_packet_detailed(" field 'removal_time_factor' has changed");
71083
71084#ifdef FREECIV_JSON_CONNECTION
71085 field_addr.name = "removal_time_factor";
71086#endif /* FREECIV_JSON_CONNECTION */
71087 e = 0;
71088
71089 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
71090
71091 if (e) {
71092 log_packet_detailed("'removal_time_factor' field error detected");
71093 }
71094 }
71095
71096 if (BV_ISSET(fields, 27)) {
71097 log_packet_detailed(" field 'infracost' has changed");
71098
71099#ifdef FREECIV_JSON_CONNECTION
71100 field_addr.name = "infracost";
71101#endif /* FREECIV_JSON_CONNECTION */
71102 e = 0;
71103
71104 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
71105
71106 if (e) {
71107 log_packet_detailed("'infracost' field error detected");
71108 }
71109 }
71110
71111 if (BV_ISSET(fields, 28)) {
71112 log_packet_detailed(" field 'defense_bonus' has changed");
71113
71114#ifdef FREECIV_JSON_CONNECTION
71115 field_addr.name = "defense_bonus";
71116#endif /* FREECIV_JSON_CONNECTION */
71117 e = 0;
71118
71119 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
71120
71121 if (e) {
71122 log_packet_detailed("'defense_bonus' field error detected");
71123 }
71124 }
71125
71126 if (BV_ISSET(fields, 29)) {
71127 log_packet_detailed(" field 'eus' has changed");
71128
71129#ifdef FREECIV_JSON_CONNECTION
71130 field_addr.name = "eus";
71131#endif /* FREECIV_JSON_CONNECTION */
71132 e = 0;
71133
71134 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
71135
71136 if (e) {
71137 log_packet_detailed("'eus' field error detected");
71138 }
71139 }
71140
71141 if (BV_ISSET(fields, 30)) {
71142 log_packet_detailed(" field 'native_to' has changed");
71143
71144#ifdef FREECIV_JSON_CONNECTION
71145 field_addr.name = "native_to";
71146#endif /* FREECIV_JSON_CONNECTION */
71147 e = 0;
71148
71149 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
71150
71151 if (e) {
71152 log_packet_detailed("'native_to' field error detected");
71153 }
71154 }
71155
71156 if (BV_ISSET(fields, 31)) {
71157 log_packet_detailed(" field 'flags' has changed");
71158
71159#ifdef FREECIV_JSON_CONNECTION
71160 field_addr.name = "flags";
71161#endif /* FREECIV_JSON_CONNECTION */
71162 e = 0;
71163
71164 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
71165
71166 if (e) {
71167 log_packet_detailed("'flags' field error detected");
71168 }
71169 }
71170
71171 if (BV_ISSET(fields, 32)) {
71172 log_packet_detailed(" field 'hidden_by' has changed");
71173
71174#ifdef FREECIV_JSON_CONNECTION
71175 field_addr.name = "hidden_by";
71176#endif /* FREECIV_JSON_CONNECTION */
71177 e = 0;
71178
71179 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
71180
71181 if (e) {
71182 log_packet_detailed("'hidden_by' field error detected");
71183 }
71184 }
71185
71186 if (BV_ISSET(fields, 33)) {
71187 log_packet_detailed(" field 'bridged_over' has changed");
71188
71189#ifdef FREECIV_JSON_CONNECTION
71190 field_addr.name = "bridged_over";
71191#endif /* FREECIV_JSON_CONNECTION */
71192 e = 0;
71193
71194 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
71195
71196 if (e) {
71197 log_packet_detailed("'bridged_over' field error detected");
71198 }
71199 }
71200
71201 if (BV_ISSET(fields, 34)) {
71202 log_packet_detailed(" field 'conflicts' has changed");
71203
71204#ifdef FREECIV_JSON_CONNECTION
71205 field_addr.name = "conflicts";
71206#endif /* FREECIV_JSON_CONNECTION */
71207 e = 0;
71208
71209 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
71210
71211 if (e) {
71212 log_packet_detailed("'conflicts' field error detected");
71213 }
71214 }
71215
71216 if (BV_ISSET(fields, 35)) {
71217 log_packet_detailed(" field 'no_aggr_near_city' has changed");
71218
71219#ifdef FREECIV_JSON_CONNECTION
71220 field_addr.name = "no_aggr_near_city";
71221#endif /* FREECIV_JSON_CONNECTION */
71222 e = 0;
71223
71224 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
71225
71226 if (e) {
71227 log_packet_detailed("'no_aggr_near_city' field error detected");
71228 }
71229 }
71230
71231 if (BV_ISSET(fields, 36)) {
71232 log_packet_detailed(" field 'helptext' has changed");
71233
71234#ifdef FREECIV_JSON_CONNECTION
71235 field_addr.name = "helptext";
71236#endif /* FREECIV_JSON_CONNECTION */
71237 e = 0;
71238
71239 if (!real_packet->helptext) {
71240 /* Transmit null as empty */
71241 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
71242 } else {
71243 int i;
71244
71246 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
71247
71248#ifdef FREECIV_JSON_CONNECTION
71249 /* Enter array. */
71250 field_addr.sub_location = plocation_elem_new(0);
71251#endif /* FREECIV_JSON_CONNECTION */
71252
71253 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
71254#ifdef FREECIV_JSON_CONNECTION
71255 /* Next array element. */
71256 field_addr.sub_location->number = i;
71257#endif /* FREECIV_JSON_CONNECTION */
71258
71259 {
71260 const char *pstr = strvec_get(real_packet->helptext, i);
71261
71262 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
71263 }
71264 }
71265
71266#ifdef FREECIV_JSON_CONNECTION
71267 /* Exit array. */
71268 FC_FREE(field_addr.sub_location);
71269#endif /* FREECIV_JSON_CONNECTION */
71270 }
71271
71272 if (e) {
71273 log_packet_detailed("'helptext' field error detected");
71274 }
71275 }
71276
71277 old->id = real_packet->id;
71278 sz_strlcpy(old->name, real_packet->name);
71279 sz_strlcpy(old->rule_name, real_packet->rule_name);
71280 old->category = real_packet->category;
71281 old->causes = real_packet->causes;
71282 old->rmcauses = real_packet->rmcauses;
71283 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
71284 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
71285 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
71286 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
71287 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
71288 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
71289 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
71290 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
71291 requirement_vector_copy(&old->reqs, &real_packet->reqs);
71292 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
71293 old->appearance_chance = real_packet->appearance_chance;
71294 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
71295 old->disappearance_chance = real_packet->disappearance_chance;
71296 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
71297 old->visibility_req = real_packet->visibility_req;
71298 old->buildable = real_packet->buildable;
71299 old->generated = real_packet->generated;
71300 old->build_time = real_packet->build_time;
71301 old->build_time_factor = real_packet->build_time_factor;
71302 old->removal_time = real_packet->removal_time;
71303 old->removal_time_factor = real_packet->removal_time_factor;
71304 old->infracost = real_packet->infracost;
71305 old->defense_bonus = real_packet->defense_bonus;
71306 old->eus = real_packet->eus;
71307 old->native_to = real_packet->native_to;
71308 old->flags = real_packet->flags;
71309 old->hidden_by = real_packet->hidden_by;
71310 old->bridged_over = real_packet->bridged_over;
71311 old->conflicts = real_packet->conflicts;
71312 old->no_aggr_near_city = real_packet->no_aggr_near_city;
71313 if (real_packet->helptext) {
71314 strvec_copy(old->helptext, real_packet->helptext);
71315 } else {
71316 strvec_clear(old->helptext);
71317 }
71318
71319#else /* FREECIV_DELTA_PROTOCOL */
71320#ifdef FREECIV_JSON_CONNECTION
71321 field_addr.name = "id";
71322#endif /* FREECIV_JSON_CONNECTION */
71323 e = 0;
71324
71325 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71326
71327 if (e) {
71328 log_packet_detailed("'id' field error detected");
71329 }
71330
71331#ifdef FREECIV_JSON_CONNECTION
71332 field_addr.name = "name";
71333#endif /* FREECIV_JSON_CONNECTION */
71334 e = 0;
71335
71336 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71337
71338 if (e) {
71339 log_packet_detailed("'name' field error detected");
71340 }
71341
71342#ifdef FREECIV_JSON_CONNECTION
71343 field_addr.name = "rule_name";
71344#endif /* FREECIV_JSON_CONNECTION */
71345 e = 0;
71346
71347 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
71348
71349 if (e) {
71350 log_packet_detailed("'rule_name' field error detected");
71351 }
71352
71353#ifdef FREECIV_JSON_CONNECTION
71354 field_addr.name = "category";
71355#endif /* FREECIV_JSON_CONNECTION */
71356 e = 0;
71357
71358 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
71359
71360 if (e) {
71361 log_packet_detailed("'category' field error detected");
71362 }
71363
71364#ifdef FREECIV_JSON_CONNECTION
71365 field_addr.name = "causes";
71366#endif /* FREECIV_JSON_CONNECTION */
71367 e = 0;
71368
71369 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
71370
71371 if (e) {
71372 log_packet_detailed("'causes' field error detected");
71373 }
71374
71375#ifdef FREECIV_JSON_CONNECTION
71376 field_addr.name = "rmcauses";
71377#endif /* FREECIV_JSON_CONNECTION */
71378 e = 0;
71379
71380 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
71381
71382 if (e) {
71383 log_packet_detailed("'rmcauses' field error detected");
71384 }
71385
71386#ifdef FREECIV_JSON_CONNECTION
71387 field_addr.name = "activity_gfx";
71388#endif /* FREECIV_JSON_CONNECTION */
71389 e = 0;
71390
71391 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
71392
71393 if (e) {
71394 log_packet_detailed("'activity_gfx' field error detected");
71395 }
71396
71397#ifdef FREECIV_JSON_CONNECTION
71398 field_addr.name = "act_gfx_alt";
71399#endif /* FREECIV_JSON_CONNECTION */
71400 e = 0;
71401
71402 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
71403
71404 if (e) {
71405 log_packet_detailed("'act_gfx_alt' field error detected");
71406 }
71407
71408#ifdef FREECIV_JSON_CONNECTION
71409 field_addr.name = "act_gfx_alt2";
71410#endif /* FREECIV_JSON_CONNECTION */
71411 e = 0;
71412
71413 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
71414
71415 if (e) {
71416 log_packet_detailed("'act_gfx_alt2' field error detected");
71417 }
71418
71419#ifdef FREECIV_JSON_CONNECTION
71420 field_addr.name = "rmact_gfx";
71421#endif /* FREECIV_JSON_CONNECTION */
71422 e = 0;
71423
71424 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
71425
71426 if (e) {
71427 log_packet_detailed("'rmact_gfx' field error detected");
71428 }
71429
71430#ifdef FREECIV_JSON_CONNECTION
71431 field_addr.name = "rmact_gfx_alt";
71432#endif /* FREECIV_JSON_CONNECTION */
71433 e = 0;
71434
71435 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
71436
71437 if (e) {
71438 log_packet_detailed("'rmact_gfx_alt' field error detected");
71439 }
71440
71441#ifdef FREECIV_JSON_CONNECTION
71442 field_addr.name = "rmact_gfx_alt2";
71443#endif /* FREECIV_JSON_CONNECTION */
71444 e = 0;
71445
71446 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
71447
71448 if (e) {
71449 log_packet_detailed("'rmact_gfx_alt2' field error detected");
71450 }
71451
71452#ifdef FREECIV_JSON_CONNECTION
71453 field_addr.name = "graphic_str";
71454#endif /* FREECIV_JSON_CONNECTION */
71455 e = 0;
71456
71457 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
71458
71459 if (e) {
71460 log_packet_detailed("'graphic_str' field error detected");
71461 }
71462
71463#ifdef FREECIV_JSON_CONNECTION
71464 field_addr.name = "graphic_alt";
71465#endif /* FREECIV_JSON_CONNECTION */
71466 e = 0;
71467
71468 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
71469
71470 if (e) {
71471 log_packet_detailed("'graphic_alt' field error detected");
71472 }
71473
71474#ifdef FREECIV_JSON_CONNECTION
71475 field_addr.name = "reqs";
71476#endif /* FREECIV_JSON_CONNECTION */
71477 e = 0;
71478
71479 {
71480 int i;
71481
71484
71485#ifdef FREECIV_JSON_CONNECTION
71486 /* Enter array. */
71487 field_addr.sub_location = plocation_elem_new(0);
71488#endif /* FREECIV_JSON_CONNECTION */
71489
71490 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
71491#ifdef FREECIV_JSON_CONNECTION
71492 /* Next array element. */
71493 field_addr.sub_location->number = i;
71494#endif /* FREECIV_JSON_CONNECTION */
71495
71496 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
71497 }
71498
71499#ifdef FREECIV_JSON_CONNECTION
71500 /* Exit array. */
71501 FC_FREE(field_addr.sub_location);
71502#endif /* FREECIV_JSON_CONNECTION */
71503 }
71504
71505 if (e) {
71506 log_packet_detailed("'reqs' field error detected");
71507 }
71508
71509#ifdef FREECIV_JSON_CONNECTION
71510 field_addr.name = "rmreqs";
71511#endif /* FREECIV_JSON_CONNECTION */
71512 e = 0;
71513
71514 {
71515 int i;
71516
71519
71520#ifdef FREECIV_JSON_CONNECTION
71521 /* Enter array. */
71522 field_addr.sub_location = plocation_elem_new(0);
71523#endif /* FREECIV_JSON_CONNECTION */
71524
71525 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
71526#ifdef FREECIV_JSON_CONNECTION
71527 /* Next array element. */
71528 field_addr.sub_location->number = i;
71529#endif /* FREECIV_JSON_CONNECTION */
71530
71531 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
71532 }
71533
71534#ifdef FREECIV_JSON_CONNECTION
71535 /* Exit array. */
71536 FC_FREE(field_addr.sub_location);
71537#endif /* FREECIV_JSON_CONNECTION */
71538 }
71539
71540 if (e) {
71541 log_packet_detailed("'rmreqs' field error detected");
71542 }
71543
71544#ifdef FREECIV_JSON_CONNECTION
71545 field_addr.name = "appearance_chance";
71546#endif /* FREECIV_JSON_CONNECTION */
71547 e = 0;
71548
71549 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
71550
71551 if (e) {
71552 log_packet_detailed("'appearance_chance' field error detected");
71553 }
71554
71555#ifdef FREECIV_JSON_CONNECTION
71556 field_addr.name = "appearance_reqs";
71557#endif /* FREECIV_JSON_CONNECTION */
71558 e = 0;
71559
71560 {
71561 int i;
71562
71564 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
71565
71566#ifdef FREECIV_JSON_CONNECTION
71567 /* Enter array. */
71568 field_addr.sub_location = plocation_elem_new(0);
71569#endif /* FREECIV_JSON_CONNECTION */
71570
71571 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
71572#ifdef FREECIV_JSON_CONNECTION
71573 /* Next array element. */
71574 field_addr.sub_location->number = i;
71575#endif /* FREECIV_JSON_CONNECTION */
71576
71577 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
71578 }
71579
71580#ifdef FREECIV_JSON_CONNECTION
71581 /* Exit array. */
71582 FC_FREE(field_addr.sub_location);
71583#endif /* FREECIV_JSON_CONNECTION */
71584 }
71585
71586 if (e) {
71587 log_packet_detailed("'appearance_reqs' field error detected");
71588 }
71589
71590#ifdef FREECIV_JSON_CONNECTION
71591 field_addr.name = "disappearance_chance";
71592#endif /* FREECIV_JSON_CONNECTION */
71593 e = 0;
71594
71595 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
71596
71597 if (e) {
71598 log_packet_detailed("'disappearance_chance' field error detected");
71599 }
71600
71601#ifdef FREECIV_JSON_CONNECTION
71602 field_addr.name = "disappearance_reqs";
71603#endif /* FREECIV_JSON_CONNECTION */
71604 e = 0;
71605
71606 {
71607 int i;
71608
71610 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
71611
71612#ifdef FREECIV_JSON_CONNECTION
71613 /* Enter array. */
71614 field_addr.sub_location = plocation_elem_new(0);
71615#endif /* FREECIV_JSON_CONNECTION */
71616
71617 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
71618#ifdef FREECIV_JSON_CONNECTION
71619 /* Next array element. */
71620 field_addr.sub_location->number = i;
71621#endif /* FREECIV_JSON_CONNECTION */
71622
71623 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
71624 }
71625
71626#ifdef FREECIV_JSON_CONNECTION
71627 /* Exit array. */
71628 FC_FREE(field_addr.sub_location);
71629#endif /* FREECIV_JSON_CONNECTION */
71630 }
71631
71632 if (e) {
71633 log_packet_detailed("'disappearance_reqs' field error detected");
71634 }
71635
71636#ifdef FREECIV_JSON_CONNECTION
71637 field_addr.name = "visibility_req";
71638#endif /* FREECIV_JSON_CONNECTION */
71639 e = 0;
71640
71641 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
71642
71643 if (e) {
71644 log_packet_detailed("'visibility_req' field error detected");
71645 }
71646
71647#ifdef FREECIV_JSON_CONNECTION
71648 field_addr.name = "buildable";
71649#endif /* FREECIV_JSON_CONNECTION */
71650 e = 0;
71651
71652 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->buildable);
71653
71654 if (e) {
71655 log_packet_detailed("'buildable' field error detected");
71656 }
71657
71658#ifdef FREECIV_JSON_CONNECTION
71659 field_addr.name = "generated";
71660#endif /* FREECIV_JSON_CONNECTION */
71661 e = 0;
71662
71663 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->generated);
71664
71665 if (e) {
71666 log_packet_detailed("'generated' field error detected");
71667 }
71668
71669#ifdef FREECIV_JSON_CONNECTION
71670 field_addr.name = "build_time";
71671#endif /* FREECIV_JSON_CONNECTION */
71672 e = 0;
71673
71674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
71675
71676 if (e) {
71677 log_packet_detailed("'build_time' field error detected");
71678 }
71679
71680#ifdef FREECIV_JSON_CONNECTION
71681 field_addr.name = "build_time_factor";
71682#endif /* FREECIV_JSON_CONNECTION */
71683 e = 0;
71684
71685 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
71686
71687 if (e) {
71688 log_packet_detailed("'build_time_factor' field error detected");
71689 }
71690
71691#ifdef FREECIV_JSON_CONNECTION
71692 field_addr.name = "removal_time";
71693#endif /* FREECIV_JSON_CONNECTION */
71694 e = 0;
71695
71696 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
71697
71698 if (e) {
71699 log_packet_detailed("'removal_time' field error detected");
71700 }
71701
71702#ifdef FREECIV_JSON_CONNECTION
71703 field_addr.name = "removal_time_factor";
71704#endif /* FREECIV_JSON_CONNECTION */
71705 e = 0;
71706
71707 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
71708
71709 if (e) {
71710 log_packet_detailed("'removal_time_factor' field error detected");
71711 }
71712
71713#ifdef FREECIV_JSON_CONNECTION
71714 field_addr.name = "infracost";
71715#endif /* FREECIV_JSON_CONNECTION */
71716 e = 0;
71717
71718 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
71719
71720 if (e) {
71721 log_packet_detailed("'infracost' field error detected");
71722 }
71723
71724#ifdef FREECIV_JSON_CONNECTION
71725 field_addr.name = "defense_bonus";
71726#endif /* FREECIV_JSON_CONNECTION */
71727 e = 0;
71728
71729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
71730
71731 if (e) {
71732 log_packet_detailed("'defense_bonus' field error detected");
71733 }
71734
71735#ifdef FREECIV_JSON_CONNECTION
71736 field_addr.name = "eus";
71737#endif /* FREECIV_JSON_CONNECTION */
71738 e = 0;
71739
71740 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
71741
71742 if (e) {
71743 log_packet_detailed("'eus' field error detected");
71744 }
71745
71746#ifdef FREECIV_JSON_CONNECTION
71747 field_addr.name = "native_to";
71748#endif /* FREECIV_JSON_CONNECTION */
71749 e = 0;
71750
71751 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
71752
71753 if (e) {
71754 log_packet_detailed("'native_to' field error detected");
71755 }
71756
71757#ifdef FREECIV_JSON_CONNECTION
71758 field_addr.name = "flags";
71759#endif /* FREECIV_JSON_CONNECTION */
71760 e = 0;
71761
71762 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
71763
71764 if (e) {
71765 log_packet_detailed("'flags' field error detected");
71766 }
71767
71768#ifdef FREECIV_JSON_CONNECTION
71769 field_addr.name = "hidden_by";
71770#endif /* FREECIV_JSON_CONNECTION */
71771 e = 0;
71772
71773 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
71774
71775 if (e) {
71776 log_packet_detailed("'hidden_by' field error detected");
71777 }
71778
71779#ifdef FREECIV_JSON_CONNECTION
71780 field_addr.name = "bridged_over";
71781#endif /* FREECIV_JSON_CONNECTION */
71782 e = 0;
71783
71784 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
71785
71786 if (e) {
71787 log_packet_detailed("'bridged_over' field error detected");
71788 }
71789
71790#ifdef FREECIV_JSON_CONNECTION
71791 field_addr.name = "conflicts";
71792#endif /* FREECIV_JSON_CONNECTION */
71793 e = 0;
71794
71795 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
71796
71797 if (e) {
71798 log_packet_detailed("'conflicts' field error detected");
71799 }
71800
71801#ifdef FREECIV_JSON_CONNECTION
71802 field_addr.name = "no_aggr_near_city";
71803#endif /* FREECIV_JSON_CONNECTION */
71804 e = 0;
71805
71806 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
71807
71808 if (e) {
71809 log_packet_detailed("'no_aggr_near_city' field error detected");
71810 }
71811
71812#ifdef FREECIV_JSON_CONNECTION
71813 field_addr.name = "helptext";
71814#endif /* FREECIV_JSON_CONNECTION */
71815 e = 0;
71816
71817 if (!real_packet->helptext) {
71818 /* Transmit null as empty */
71819 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
71820 } else {
71821 int i;
71822
71824 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
71825
71826#ifdef FREECIV_JSON_CONNECTION
71827 /* Enter array. */
71828 field_addr.sub_location = plocation_elem_new(0);
71829#endif /* FREECIV_JSON_CONNECTION */
71830
71831 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
71832#ifdef FREECIV_JSON_CONNECTION
71833 /* Next array element. */
71834 field_addr.sub_location->number = i;
71835#endif /* FREECIV_JSON_CONNECTION */
71836
71837 {
71838 const char *pstr = strvec_get(real_packet->helptext, i);
71839
71840 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
71841 }
71842 }
71843
71844#ifdef FREECIV_JSON_CONNECTION
71845 /* Exit array. */
71846 FC_FREE(field_addr.sub_location);
71847#endif /* FREECIV_JSON_CONNECTION */
71848 }
71849
71850 if (e) {
71851 log_packet_detailed("'helptext' field error detected");
71852 }
71853#endif /* FREECIV_DELTA_PROTOCOL */
71854
71856}
71857
71859{
71860 if (!pc->used) {
71861 log_error("WARNING: trying to send data to the closed connection %s",
71863 return -1;
71864 }
71865 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet != nullptr, -1,
71866 "Handler for PACKET_RULESET_EXTRA not installed");
71867 return pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet(pc, packet);
71868}
71869
71870void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
71871{
71872 conn_list_iterate(dest, pconn) {
71875}
71876
71878{
71879 memset(packet, 0, sizeof(*packet));
71880}
71881
71882#define free_packet_ruleset_extra_flag(_packet) (void) 0
71883#define destroy_packet_ruleset_extra_flag free
71884
71885#ifdef FREECIV_DELTA_PROTOCOL
71886#define hash_packet_ruleset_extra_flag_100 hash_const
71887#define cmp_packet_ruleset_extra_flag_100 cmp_const
71889#endif /* FREECIV_DELTA_PROTOCOL */
71890
71892{
71893#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra_flag(_packet)
71895
71896#ifdef FREECIV_JSON_CONNECTION
71897 struct plocation field_addr;
71898 {
71899 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71902 }
71903#endif /* FREECIV_JSON_CONNECTION */
71904
71905 log_packet_detailed("packet_ruleset_extra_flag_100: got info about ()");
71906
71907#ifdef FREECIV_DELTA_PROTOCOL
71910 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA_FLAG;
71911
71912 if (nullptr == *hash) {
71914 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
71915 }
71916
71917 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71918 *real_packet = *old;
71919 } else {
71920 /* packet is already initialized empty */
71921 log_packet_detailed(" no old info");
71922 }
71923
71924#ifdef FREECIV_JSON_CONNECTION
71925 field_addr.name = "fields";
71926#endif /* FREECIV_JSON_CONNECTION */
71927 DIO_BV_GET(&din, &field_addr, fields);
71928
71929 if (BV_ISSET(fields, 0)) {
71930 log_packet_detailed(" got field 'id'");
71931
71932#ifdef FREECIV_JSON_CONNECTION
71933 field_addr.name = "id";
71934#endif /* FREECIV_JSON_CONNECTION */
71935
71936 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71938 }
71939 }
71940
71941 if (BV_ISSET(fields, 1)) {
71942 log_packet_detailed(" got field 'name'");
71943
71944#ifdef FREECIV_JSON_CONNECTION
71945 field_addr.name = "name";
71946#endif /* FREECIV_JSON_CONNECTION */
71947
71948 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71950 }
71951 }
71952
71953 if (BV_ISSET(fields, 2)) {
71954 log_packet_detailed(" got field 'helptxt'");
71955
71956#ifdef FREECIV_JSON_CONNECTION
71957 field_addr.name = "helptxt";
71958#endif /* FREECIV_JSON_CONNECTION */
71959
71960 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71962 }
71963 }
71964
71965 if (nullptr == old) {
71966 old = fc_malloc(sizeof(*old));
71968 *old = *real_packet;
71970 } else {
71971 *old = *real_packet;
71972 }
71973
71974#else /* FREECIV_DELTA_PROTOCOL */
71975#ifdef FREECIV_JSON_CONNECTION
71976 field_addr.name = "id";
71977#endif /* FREECIV_JSON_CONNECTION */
71978
71979 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71981 }
71982
71983#ifdef FREECIV_JSON_CONNECTION
71984 field_addr.name = "name";
71985#endif /* FREECIV_JSON_CONNECTION */
71986
71987 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71989 }
71990
71991#ifdef FREECIV_JSON_CONNECTION
71992 field_addr.name = "helptxt";
71993#endif /* FREECIV_JSON_CONNECTION */
71994
71995 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71997 }
71998#endif /* FREECIV_DELTA_PROTOCOL */
71999
72001#undef FREE_PACKET_STRUCT
72002}
72003
72005{
72006 const struct packet_ruleset_extra_flag *real_packet = packet;
72007 int e;
72009
72010 log_packet_detailed("packet_ruleset_extra_flag_100: sending info about ()");
72011
72012#ifdef FREECIV_DELTA_PROTOCOL
72015 bool differ;
72016 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA_FLAG;
72017
72018 if (nullptr == *hash) {
72020 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
72021 }
72022 BV_CLR_ALL(fields);
72023
72024 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72025 old = fc_malloc(sizeof(*old));
72026 /* temporary bitcopy just to insert correctly */
72027 *old = *real_packet;
72030 }
72031
72032 differ = (old->id != real_packet->id);
72033 if (differ) {
72034 BV_SET(fields, 0);
72035 }
72036
72037 differ = (strcmp(old->name, real_packet->name) != 0);
72038 if (differ) {
72039 BV_SET(fields, 1);
72040 }
72041
72042 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
72043 if (differ) {
72044 BV_SET(fields, 2);
72045 }
72046#endif /* FREECIV_DELTA_PROTOCOL */
72047
72048#ifdef FREECIV_JSON_CONNECTION
72049 struct plocation field_addr;
72050 {
72051 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72054 }
72055#endif /* FREECIV_JSON_CONNECTION */
72056
72057#ifdef FREECIV_DELTA_PROTOCOL
72058#ifdef FREECIV_JSON_CONNECTION
72059 field_addr.name = "fields";
72060#endif /* FREECIV_JSON_CONNECTION */
72061 e = 0;
72062 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72063 if (e) {
72064 log_packet_detailed("fields bitvector error detected");
72065 }
72066
72067 if (BV_ISSET(fields, 0)) {
72068 log_packet_detailed(" field 'id' has changed");
72069
72070#ifdef FREECIV_JSON_CONNECTION
72071 field_addr.name = "id";
72072#endif /* FREECIV_JSON_CONNECTION */
72073 e = 0;
72074
72075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72076
72077 if (e) {
72078 log_packet_detailed("'id' field error detected");
72079 }
72080 }
72081
72082 if (BV_ISSET(fields, 1)) {
72083 log_packet_detailed(" field 'name' has changed");
72084
72085#ifdef FREECIV_JSON_CONNECTION
72086 field_addr.name = "name";
72087#endif /* FREECIV_JSON_CONNECTION */
72088 e = 0;
72089
72090 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
72091
72092 if (e) {
72093 log_packet_detailed("'name' field error detected");
72094 }
72095 }
72096
72097 if (BV_ISSET(fields, 2)) {
72098 log_packet_detailed(" field 'helptxt' has changed");
72099
72100#ifdef FREECIV_JSON_CONNECTION
72101 field_addr.name = "helptxt";
72102#endif /* FREECIV_JSON_CONNECTION */
72103 e = 0;
72104
72105 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
72106
72107 if (e) {
72108 log_packet_detailed("'helptxt' field error detected");
72109 }
72110 }
72111
72112 *old = *real_packet;
72113
72114#else /* FREECIV_DELTA_PROTOCOL */
72115#ifdef FREECIV_JSON_CONNECTION
72116 field_addr.name = "id";
72117#endif /* FREECIV_JSON_CONNECTION */
72118 e = 0;
72119
72120 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72121
72122 if (e) {
72123 log_packet_detailed("'id' field error detected");
72124 }
72125
72126#ifdef FREECIV_JSON_CONNECTION
72127 field_addr.name = "name";
72128#endif /* FREECIV_JSON_CONNECTION */
72129 e = 0;
72130
72131 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
72132
72133 if (e) {
72134 log_packet_detailed("'name' field error detected");
72135 }
72136
72137#ifdef FREECIV_JSON_CONNECTION
72138 field_addr.name = "helptxt";
72139#endif /* FREECIV_JSON_CONNECTION */
72140 e = 0;
72141
72142 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
72143
72144 if (e) {
72145 log_packet_detailed("'helptxt' field error detected");
72146 }
72147#endif /* FREECIV_DELTA_PROTOCOL */
72148
72150}
72151
72153{
72154 if (!pc->used) {
72155 log_error("WARNING: trying to send data to the closed connection %s",
72157 return -1;
72158 }
72159 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet != nullptr, -1,
72160 "Handler for PACKET_RULESET_EXTRA_FLAG not installed");
72161 return pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet(pc, packet);
72162}
72163
72165{
72166 conn_list_iterate(dest, pconn) {
72169}
72170
72171static inline void init_packet_ruleset_base(struct packet_ruleset_base *packet)
72172{
72173 memset(packet, 0, sizeof(*packet));
72174}
72175
72176#define free_packet_ruleset_base(_packet) (void) 0
72177#define destroy_packet_ruleset_base free
72178
72179#ifdef FREECIV_DELTA_PROTOCOL
72180#define hash_packet_ruleset_base_100 hash_const
72181#define cmp_packet_ruleset_base_100 cmp_const
72183#endif /* FREECIV_DELTA_PROTOCOL */
72184
72186{
72187#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_base(_packet)
72189
72190#ifdef FREECIV_JSON_CONNECTION
72191 struct plocation field_addr;
72192 {
72193 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72196 }
72197#endif /* FREECIV_JSON_CONNECTION */
72198
72199 log_packet_detailed("packet_ruleset_base_100: got info about ()");
72200
72201#ifdef FREECIV_DELTA_PROTOCOL
72203 struct packet_ruleset_base *old;
72204 struct genhash **hash = pc->phs.received + PACKET_RULESET_BASE;
72205
72206 if (nullptr == *hash) {
72208 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
72209 }
72210
72211 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72212 *real_packet = *old;
72213 } else {
72214 /* packet is already initialized empty */
72215 log_packet_detailed(" no old info");
72216 }
72217
72218#ifdef FREECIV_JSON_CONNECTION
72219 field_addr.name = "fields";
72220#endif /* FREECIV_JSON_CONNECTION */
72221 DIO_BV_GET(&din, &field_addr, fields);
72222
72223 if (BV_ISSET(fields, 0)) {
72224 log_packet_detailed(" got field 'id'");
72225
72226#ifdef FREECIV_JSON_CONNECTION
72227 field_addr.name = "id";
72228#endif /* FREECIV_JSON_CONNECTION */
72229
72230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72232 }
72233 }
72234
72235 if (BV_ISSET(fields, 1)) {
72236 log_packet_detailed(" got field 'gui_type'");
72237
72238#ifdef FREECIV_JSON_CONNECTION
72239 field_addr.name = "gui_type";
72240#endif /* FREECIV_JSON_CONNECTION */
72241
72242 {
72243 int readin;
72244
72245 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72247 }
72248 real_packet->gui_type = readin;
72249 }
72250 }
72251
72252 if (BV_ISSET(fields, 2)) {
72253 log_packet_detailed(" got field 'border_sq'");
72254
72255#ifdef FREECIV_JSON_CONNECTION
72256 field_addr.name = "border_sq";
72257#endif /* FREECIV_JSON_CONNECTION */
72258
72259 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
72260 RECEIVE_PACKET_FIELD_ERROR(border_sq);
72261 }
72262 }
72263
72264 if (BV_ISSET(fields, 3)) {
72265 log_packet_detailed(" got field 'vision_main_sq'");
72266
72267#ifdef FREECIV_JSON_CONNECTION
72268 field_addr.name = "vision_main_sq";
72269#endif /* FREECIV_JSON_CONNECTION */
72270
72271 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
72272 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
72273 }
72274 }
72275
72276 if (BV_ISSET(fields, 4)) {
72277 log_packet_detailed(" got field 'vision_invis_sq'");
72278
72279#ifdef FREECIV_JSON_CONNECTION
72280 field_addr.name = "vision_invis_sq";
72281#endif /* FREECIV_JSON_CONNECTION */
72282
72283 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
72284 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
72285 }
72286 }
72287
72288 if (BV_ISSET(fields, 5)) {
72289 log_packet_detailed(" got field 'vision_subs_sq'");
72290
72291#ifdef FREECIV_JSON_CONNECTION
72292 field_addr.name = "vision_subs_sq";
72293#endif /* FREECIV_JSON_CONNECTION */
72294
72295 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
72296 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
72297 }
72298 }
72299
72300 if (nullptr == old) {
72301 old = fc_malloc(sizeof(*old));
72303 *old = *real_packet;
72305 } else {
72306 *old = *real_packet;
72307 }
72308
72309#else /* FREECIV_DELTA_PROTOCOL */
72310#ifdef FREECIV_JSON_CONNECTION
72311 field_addr.name = "id";
72312#endif /* FREECIV_JSON_CONNECTION */
72313
72314 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72316 }
72317
72318#ifdef FREECIV_JSON_CONNECTION
72319 field_addr.name = "gui_type";
72320#endif /* FREECIV_JSON_CONNECTION */
72321
72322 {
72323 int readin;
72324
72325 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72327 }
72328 real_packet->gui_type = readin;
72329 }
72330
72331#ifdef FREECIV_JSON_CONNECTION
72332 field_addr.name = "border_sq";
72333#endif /* FREECIV_JSON_CONNECTION */
72334
72335 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
72336 RECEIVE_PACKET_FIELD_ERROR(border_sq);
72337 }
72338
72339#ifdef FREECIV_JSON_CONNECTION
72340 field_addr.name = "vision_main_sq";
72341#endif /* FREECIV_JSON_CONNECTION */
72342
72343 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
72344 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
72345 }
72346
72347#ifdef FREECIV_JSON_CONNECTION
72348 field_addr.name = "vision_invis_sq";
72349#endif /* FREECIV_JSON_CONNECTION */
72350
72351 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
72352 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
72353 }
72354
72355#ifdef FREECIV_JSON_CONNECTION
72356 field_addr.name = "vision_subs_sq";
72357#endif /* FREECIV_JSON_CONNECTION */
72358
72359 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
72360 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
72361 }
72362#endif /* FREECIV_DELTA_PROTOCOL */
72363
72365#undef FREE_PACKET_STRUCT
72366}
72367
72368static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
72369{
72370 const struct packet_ruleset_base *real_packet = packet;
72371 int e;
72373
72374 log_packet_detailed("packet_ruleset_base_100: sending info about ()");
72375
72376#ifdef FREECIV_DELTA_PROTOCOL
72378 struct packet_ruleset_base *old;
72379 bool differ;
72380 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BASE;
72381
72382 if (nullptr == *hash) {
72384 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
72385 }
72386 BV_CLR_ALL(fields);
72387
72388 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72389 old = fc_malloc(sizeof(*old));
72390 /* temporary bitcopy just to insert correctly */
72391 *old = *real_packet;
72394 }
72395
72396 differ = (old->id != real_packet->id);
72397 if (differ) {
72398 BV_SET(fields, 0);
72399 }
72400
72401 differ = (old->gui_type != real_packet->gui_type);
72402 if (differ) {
72403 BV_SET(fields, 1);
72404 }
72405
72406 differ = (old->border_sq != real_packet->border_sq);
72407 if (differ) {
72408 BV_SET(fields, 2);
72409 }
72410
72411 differ = (old->vision_main_sq != real_packet->vision_main_sq);
72412 if (differ) {
72413 BV_SET(fields, 3);
72414 }
72415
72416 differ = (old->vision_invis_sq != real_packet->vision_invis_sq);
72417 if (differ) {
72418 BV_SET(fields, 4);
72419 }
72420
72421 differ = (old->vision_subs_sq != real_packet->vision_subs_sq);
72422 if (differ) {
72423 BV_SET(fields, 5);
72424 }
72425#endif /* FREECIV_DELTA_PROTOCOL */
72426
72427#ifdef FREECIV_JSON_CONNECTION
72428 struct plocation field_addr;
72429 {
72430 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72433 }
72434#endif /* FREECIV_JSON_CONNECTION */
72435
72436#ifdef FREECIV_DELTA_PROTOCOL
72437#ifdef FREECIV_JSON_CONNECTION
72438 field_addr.name = "fields";
72439#endif /* FREECIV_JSON_CONNECTION */
72440 e = 0;
72441 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72442 if (e) {
72443 log_packet_detailed("fields bitvector error detected");
72444 }
72445
72446 if (BV_ISSET(fields, 0)) {
72447 log_packet_detailed(" field 'id' has changed");
72448
72449#ifdef FREECIV_JSON_CONNECTION
72450 field_addr.name = "id";
72451#endif /* FREECIV_JSON_CONNECTION */
72452 e = 0;
72453
72454 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72455
72456 if (e) {
72457 log_packet_detailed("'id' field error detected");
72458 }
72459 }
72460
72461 if (BV_ISSET(fields, 1)) {
72462 log_packet_detailed(" field 'gui_type' has changed");
72463
72464#ifdef FREECIV_JSON_CONNECTION
72465 field_addr.name = "gui_type";
72466#endif /* FREECIV_JSON_CONNECTION */
72467 e = 0;
72468
72469 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72470
72471 if (e) {
72472 log_packet_detailed("'gui_type' field error detected");
72473 }
72474 }
72475
72476 if (BV_ISSET(fields, 2)) {
72477 log_packet_detailed(" field 'border_sq' has changed");
72478
72479#ifdef FREECIV_JSON_CONNECTION
72480 field_addr.name = "border_sq";
72481#endif /* FREECIV_JSON_CONNECTION */
72482 e = 0;
72483
72484 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72485
72486 if (e) {
72487 log_packet_detailed("'border_sq' field error detected");
72488 }
72489 }
72490
72491 if (BV_ISSET(fields, 3)) {
72492 log_packet_detailed(" field 'vision_main_sq' has changed");
72493
72494#ifdef FREECIV_JSON_CONNECTION
72495 field_addr.name = "vision_main_sq";
72496#endif /* FREECIV_JSON_CONNECTION */
72497 e = 0;
72498
72499 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72500
72501 if (e) {
72502 log_packet_detailed("'vision_main_sq' field error detected");
72503 }
72504 }
72505
72506 if (BV_ISSET(fields, 4)) {
72507 log_packet_detailed(" field 'vision_invis_sq' has changed");
72508
72509#ifdef FREECIV_JSON_CONNECTION
72510 field_addr.name = "vision_invis_sq";
72511#endif /* FREECIV_JSON_CONNECTION */
72512 e = 0;
72513
72514 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72515
72516 if (e) {
72517 log_packet_detailed("'vision_invis_sq' field error detected");
72518 }
72519 }
72520
72521 if (BV_ISSET(fields, 5)) {
72522 log_packet_detailed(" field 'vision_subs_sq' has changed");
72523
72524#ifdef FREECIV_JSON_CONNECTION
72525 field_addr.name = "vision_subs_sq";
72526#endif /* FREECIV_JSON_CONNECTION */
72527 e = 0;
72528
72529 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72530
72531 if (e) {
72532 log_packet_detailed("'vision_subs_sq' field error detected");
72533 }
72534 }
72535
72536 *old = *real_packet;
72537
72538#else /* FREECIV_DELTA_PROTOCOL */
72539#ifdef FREECIV_JSON_CONNECTION
72540 field_addr.name = "id";
72541#endif /* FREECIV_JSON_CONNECTION */
72542 e = 0;
72543
72544 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72545
72546 if (e) {
72547 log_packet_detailed("'id' field error detected");
72548 }
72549
72550#ifdef FREECIV_JSON_CONNECTION
72551 field_addr.name = "gui_type";
72552#endif /* FREECIV_JSON_CONNECTION */
72553 e = 0;
72554
72555 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72556
72557 if (e) {
72558 log_packet_detailed("'gui_type' field error detected");
72559 }
72560
72561#ifdef FREECIV_JSON_CONNECTION
72562 field_addr.name = "border_sq";
72563#endif /* FREECIV_JSON_CONNECTION */
72564 e = 0;
72565
72566 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72567
72568 if (e) {
72569 log_packet_detailed("'border_sq' field error detected");
72570 }
72571
72572#ifdef FREECIV_JSON_CONNECTION
72573 field_addr.name = "vision_main_sq";
72574#endif /* FREECIV_JSON_CONNECTION */
72575 e = 0;
72576
72577 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72578
72579 if (e) {
72580 log_packet_detailed("'vision_main_sq' field error detected");
72581 }
72582
72583#ifdef FREECIV_JSON_CONNECTION
72584 field_addr.name = "vision_invis_sq";
72585#endif /* FREECIV_JSON_CONNECTION */
72586 e = 0;
72587
72588 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72589
72590 if (e) {
72591 log_packet_detailed("'vision_invis_sq' field error detected");
72592 }
72593
72594#ifdef FREECIV_JSON_CONNECTION
72595 field_addr.name = "vision_subs_sq";
72596#endif /* FREECIV_JSON_CONNECTION */
72597 e = 0;
72598
72599 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72600
72601 if (e) {
72602 log_packet_detailed("'vision_subs_sq' field error detected");
72603 }
72604#endif /* FREECIV_DELTA_PROTOCOL */
72605
72607}
72608
72610{
72611 if (!pc->used) {
72612 log_error("WARNING: trying to send data to the closed connection %s",
72614 return -1;
72615 }
72616 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BASE].packet != nullptr, -1,
72617 "Handler for PACKET_RULESET_BASE not installed");
72618 return pc->phs.handlers->send[PACKET_RULESET_BASE].packet(pc, packet);
72619}
72620
72621void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
72622{
72623 conn_list_iterate(dest, pconn) {
72626}
72627
72628static inline void init_packet_ruleset_road(struct packet_ruleset_road *packet)
72629{
72630 memset(packet, 0, sizeof(*packet));
72631
72633}
72634
72635static inline void free_packet_ruleset_road(struct packet_ruleset_road *packet)
72636{
72638}
72639
72640static inline void destroy_packet_ruleset_road(void *packet)
72641{
72643 free(packet);
72644}
72645
72646#ifdef FREECIV_DELTA_PROTOCOL
72647#define hash_packet_ruleset_road_100 hash_const
72648#define cmp_packet_ruleset_road_100 cmp_const
72650#endif /* FREECIV_DELTA_PROTOCOL */
72651
72653{
72654#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_road(_packet)
72656
72657#ifdef FREECIV_JSON_CONNECTION
72658 struct plocation field_addr;
72659 {
72660 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72663 }
72664#endif /* FREECIV_JSON_CONNECTION */
72665
72666 log_packet_detailed("packet_ruleset_road_100: got info about ()");
72667
72668#ifdef FREECIV_DELTA_PROTOCOL
72670 struct packet_ruleset_road *old;
72671 struct genhash **hash = pc->phs.received + PACKET_RULESET_ROAD;
72672
72673 if (nullptr == *hash) {
72675 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
72676 }
72677
72678 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72679 real_packet->id = old->id;
72680 real_packet->gui_type = old->gui_type;
72681 requirement_vector_copy(&real_packet->first_reqs, &old->first_reqs);
72682 real_packet->move_cost = old->move_cost;
72683 real_packet->move_mode = old->move_mode;
72684 {
72685 int i;
72686
72687 for (i = 0; i < O_LAST; i++) {
72688 real_packet->tile_incr_const[i] = old->tile_incr_const[i];
72689 }
72690 }
72691 {
72692 int i;
72693
72694 for (i = 0; i < O_LAST; i++) {
72695 real_packet->tile_incr[i] = old->tile_incr[i];
72696 }
72697 }
72698 {
72699 int i;
72700
72701 for (i = 0; i < O_LAST; i++) {
72702 real_packet->tile_bonus[i] = old->tile_bonus[i];
72703 }
72704 }
72705 real_packet->compat = old->compat;
72706 real_packet->integrates = old->integrates;
72707 real_packet->flags = old->flags;
72708 } else {
72709 /* packet is already initialized empty */
72710 log_packet_detailed(" no old info");
72711 }
72712
72713#ifdef FREECIV_JSON_CONNECTION
72714 field_addr.name = "fields";
72715#endif /* FREECIV_JSON_CONNECTION */
72716 DIO_BV_GET(&din, &field_addr, fields);
72717
72718 if (BV_ISSET(fields, 0)) {
72719 log_packet_detailed(" got field 'id'");
72720
72721#ifdef FREECIV_JSON_CONNECTION
72722 field_addr.name = "id";
72723#endif /* FREECIV_JSON_CONNECTION */
72724
72725 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72727 }
72728 }
72729
72730 if (BV_ISSET(fields, 1)) {
72731 log_packet_detailed(" got field 'gui_type'");
72732
72733#ifdef FREECIV_JSON_CONNECTION
72734 field_addr.name = "gui_type";
72735#endif /* FREECIV_JSON_CONNECTION */
72736
72737 {
72738 int readin;
72739
72740 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72742 }
72743 real_packet->gui_type = readin;
72744 }
72745 }
72746
72747 if (BV_ISSET(fields, 2)) {
72748 log_packet_detailed(" got field 'first_reqs'");
72749
72750#ifdef FREECIV_JSON_CONNECTION
72751 field_addr.name = "first_reqs";
72752#endif /* FREECIV_JSON_CONNECTION */
72753
72754 {
72755 int i;
72756
72757 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
72758 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72759 }
72761
72762#ifdef FREECIV_JSON_CONNECTION
72763 /* Enter array. */
72764 field_addr.sub_location = plocation_elem_new(0);
72765#endif /* FREECIV_JSON_CONNECTION */
72766
72767 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72768#ifdef FREECIV_JSON_CONNECTION
72769 /* Next array element */
72770 field_addr.sub_location->number = i;
72771#endif /* FREECIV_JSON_CONNECTION */
72772
72773 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
72774 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72775 }
72776 }
72777
72778#ifdef FREECIV_JSON_CONNECTION
72779 /* Exit array. */
72780 FC_FREE(field_addr.sub_location);
72781#endif /* FREECIV_JSON_CONNECTION */
72782 }
72783 }
72784
72785 if (BV_ISSET(fields, 3)) {
72786 log_packet_detailed(" got field 'move_cost'");
72787
72788#ifdef FREECIV_JSON_CONNECTION
72789 field_addr.name = "move_cost";
72790#endif /* FREECIV_JSON_CONNECTION */
72791
72792 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
72793 RECEIVE_PACKET_FIELD_ERROR(move_cost);
72794 }
72795 }
72796
72797 if (BV_ISSET(fields, 4)) {
72798 log_packet_detailed(" got field 'move_mode'");
72799
72800#ifdef FREECIV_JSON_CONNECTION
72801 field_addr.name = "move_mode";
72802#endif /* FREECIV_JSON_CONNECTION */
72803
72804 {
72805 int readin;
72806
72807 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72808 RECEIVE_PACKET_FIELD_ERROR(move_mode);
72809 }
72810 real_packet->move_mode = readin;
72811 }
72812 }
72813
72814 if (BV_ISSET(fields, 5)) {
72815 log_packet_detailed(" got field 'tile_incr_const'");
72816
72817#ifdef FREECIV_JSON_CONNECTION
72818 field_addr.name = "tile_incr_const";
72819#endif /* FREECIV_JSON_CONNECTION */
72820
72821 {
72822 int i;
72823
72824
72825#ifdef FREECIV_JSON_CONNECTION
72826 /* Enter array. */
72827 field_addr.sub_location = plocation_elem_new(0);
72828#endif /* FREECIV_JSON_CONNECTION */
72829
72830 for (i = 0; i < O_LAST; i++) {
72831#ifdef FREECIV_JSON_CONNECTION
72832 /* Next array element */
72833 field_addr.sub_location->number = i;
72834#endif /* FREECIV_JSON_CONNECTION */
72835
72836 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
72837 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
72838 }
72839 }
72840
72841#ifdef FREECIV_JSON_CONNECTION
72842 /* Exit array. */
72843 FC_FREE(field_addr.sub_location);
72844#endif /* FREECIV_JSON_CONNECTION */
72845 }
72846 }
72847
72848 if (BV_ISSET(fields, 6)) {
72849 log_packet_detailed(" got field 'tile_incr'");
72850
72851#ifdef FREECIV_JSON_CONNECTION
72852 field_addr.name = "tile_incr";
72853#endif /* FREECIV_JSON_CONNECTION */
72854
72855 {
72856 int i;
72857
72858
72859#ifdef FREECIV_JSON_CONNECTION
72860 /* Enter array. */
72861 field_addr.sub_location = plocation_elem_new(0);
72862#endif /* FREECIV_JSON_CONNECTION */
72863
72864 for (i = 0; i < O_LAST; i++) {
72865#ifdef FREECIV_JSON_CONNECTION
72866 /* Next array element */
72867 field_addr.sub_location->number = i;
72868#endif /* FREECIV_JSON_CONNECTION */
72869
72870 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
72871 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
72872 }
72873 }
72874
72875#ifdef FREECIV_JSON_CONNECTION
72876 /* Exit array. */
72877 FC_FREE(field_addr.sub_location);
72878#endif /* FREECIV_JSON_CONNECTION */
72879 }
72880 }
72881
72882 if (BV_ISSET(fields, 7)) {
72883 log_packet_detailed(" got field 'tile_bonus'");
72884
72885#ifdef FREECIV_JSON_CONNECTION
72886 field_addr.name = "tile_bonus";
72887#endif /* FREECIV_JSON_CONNECTION */
72888
72889 {
72890 int i;
72891
72892
72893#ifdef FREECIV_JSON_CONNECTION
72894 /* Enter array. */
72895 field_addr.sub_location = plocation_elem_new(0);
72896#endif /* FREECIV_JSON_CONNECTION */
72897
72898 for (i = 0; i < O_LAST; i++) {
72899#ifdef FREECIV_JSON_CONNECTION
72900 /* Next array element */
72901 field_addr.sub_location->number = i;
72902#endif /* FREECIV_JSON_CONNECTION */
72903
72904 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
72905 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
72906 }
72907 }
72908
72909#ifdef FREECIV_JSON_CONNECTION
72910 /* Exit array. */
72911 FC_FREE(field_addr.sub_location);
72912#endif /* FREECIV_JSON_CONNECTION */
72913 }
72914 }
72915
72916 if (BV_ISSET(fields, 8)) {
72917 log_packet_detailed(" got field 'compat'");
72918
72919#ifdef FREECIV_JSON_CONNECTION
72920 field_addr.name = "compat";
72921#endif /* FREECIV_JSON_CONNECTION */
72922
72923 {
72924 int readin;
72925
72926 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72928 }
72929 real_packet->compat = readin;
72930 }
72931 }
72932
72933 if (BV_ISSET(fields, 9)) {
72934 log_packet_detailed(" got field 'integrates'");
72935
72936#ifdef FREECIV_JSON_CONNECTION
72937 field_addr.name = "integrates";
72938#endif /* FREECIV_JSON_CONNECTION */
72939
72940 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
72941 RECEIVE_PACKET_FIELD_ERROR(integrates);
72942 }
72943 }
72944
72945 if (BV_ISSET(fields, 10)) {
72946 log_packet_detailed(" got field 'flags'");
72947
72948#ifdef FREECIV_JSON_CONNECTION
72949 field_addr.name = "flags";
72950#endif /* FREECIV_JSON_CONNECTION */
72951
72952 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
72954 }
72955 }
72956
72957 if (nullptr == old) {
72958 old = fc_malloc(sizeof(*old));
72960 old->id = real_packet->id;
72961 old->gui_type = real_packet->gui_type;
72962 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72963 old->move_cost = real_packet->move_cost;
72964 old->move_mode = real_packet->move_mode;
72965 {
72966 int i;
72967
72968 for (i = 0; i < O_LAST; i++) {
72969 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
72970 }
72971 }
72972 {
72973 int i;
72974
72975 for (i = 0; i < O_LAST; i++) {
72976 old->tile_incr[i] = real_packet->tile_incr[i];
72977 }
72978 }
72979 {
72980 int i;
72981
72982 for (i = 0; i < O_LAST; i++) {
72983 old->tile_bonus[i] = real_packet->tile_bonus[i];
72984 }
72985 }
72986 old->compat = real_packet->compat;
72987 old->integrates = real_packet->integrates;
72988 old->flags = real_packet->flags;
72990 } else {
72991 old->id = real_packet->id;
72992 old->gui_type = real_packet->gui_type;
72993 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72994 old->move_cost = real_packet->move_cost;
72995 old->move_mode = real_packet->move_mode;
72996 {
72997 int i;
72998
72999 for (i = 0; i < O_LAST; i++) {
73000 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
73001 }
73002 }
73003 {
73004 int i;
73005
73006 for (i = 0; i < O_LAST; i++) {
73007 old->tile_incr[i] = real_packet->tile_incr[i];
73008 }
73009 }
73010 {
73011 int i;
73012
73013 for (i = 0; i < O_LAST; i++) {
73014 old->tile_bonus[i] = real_packet->tile_bonus[i];
73015 }
73016 }
73017 old->compat = real_packet->compat;
73018 old->integrates = real_packet->integrates;
73019 old->flags = real_packet->flags;
73020 }
73021
73022#else /* FREECIV_DELTA_PROTOCOL */
73023#ifdef FREECIV_JSON_CONNECTION
73024 field_addr.name = "id";
73025#endif /* FREECIV_JSON_CONNECTION */
73026
73027 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73029 }
73030
73031#ifdef FREECIV_JSON_CONNECTION
73032 field_addr.name = "gui_type";
73033#endif /* FREECIV_JSON_CONNECTION */
73034
73035 {
73036 int readin;
73037
73038 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73040 }
73041 real_packet->gui_type = readin;
73042 }
73043
73044#ifdef FREECIV_JSON_CONNECTION
73045 field_addr.name = "first_reqs";
73046#endif /* FREECIV_JSON_CONNECTION */
73047
73048 {
73049 int i;
73050
73051 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73052 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
73053 }
73055
73056#ifdef FREECIV_JSON_CONNECTION
73057 /* Enter array. */
73058 field_addr.sub_location = plocation_elem_new(0);
73059#endif /* FREECIV_JSON_CONNECTION */
73060
73061 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73062#ifdef FREECIV_JSON_CONNECTION
73063 /* Next array element */
73064 field_addr.sub_location->number = i;
73065#endif /* FREECIV_JSON_CONNECTION */
73066
73067 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
73068 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
73069 }
73070 }
73071
73072#ifdef FREECIV_JSON_CONNECTION
73073 /* Exit array. */
73074 FC_FREE(field_addr.sub_location);
73075#endif /* FREECIV_JSON_CONNECTION */
73076 }
73077
73078#ifdef FREECIV_JSON_CONNECTION
73079 field_addr.name = "move_cost";
73080#endif /* FREECIV_JSON_CONNECTION */
73081
73082 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
73083 RECEIVE_PACKET_FIELD_ERROR(move_cost);
73084 }
73085
73086#ifdef FREECIV_JSON_CONNECTION
73087 field_addr.name = "move_mode";
73088#endif /* FREECIV_JSON_CONNECTION */
73089
73090 {
73091 int readin;
73092
73093 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73094 RECEIVE_PACKET_FIELD_ERROR(move_mode);
73095 }
73096 real_packet->move_mode = readin;
73097 }
73098
73099#ifdef FREECIV_JSON_CONNECTION
73100 field_addr.name = "tile_incr_const";
73101#endif /* FREECIV_JSON_CONNECTION */
73102
73103 {
73104 int i;
73105
73106
73107#ifdef FREECIV_JSON_CONNECTION
73108 /* Enter array. */
73109 field_addr.sub_location = plocation_elem_new(0);
73110#endif /* FREECIV_JSON_CONNECTION */
73111
73112 for (i = 0; i < O_LAST; i++) {
73113#ifdef FREECIV_JSON_CONNECTION
73114 /* Next array element */
73115 field_addr.sub_location->number = i;
73116#endif /* FREECIV_JSON_CONNECTION */
73117
73118 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
73119 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
73120 }
73121 }
73122
73123#ifdef FREECIV_JSON_CONNECTION
73124 /* Exit array. */
73125 FC_FREE(field_addr.sub_location);
73126#endif /* FREECIV_JSON_CONNECTION */
73127 }
73128
73129#ifdef FREECIV_JSON_CONNECTION
73130 field_addr.name = "tile_incr";
73131#endif /* FREECIV_JSON_CONNECTION */
73132
73133 {
73134 int i;
73135
73136
73137#ifdef FREECIV_JSON_CONNECTION
73138 /* Enter array. */
73139 field_addr.sub_location = plocation_elem_new(0);
73140#endif /* FREECIV_JSON_CONNECTION */
73141
73142 for (i = 0; i < O_LAST; i++) {
73143#ifdef FREECIV_JSON_CONNECTION
73144 /* Next array element */
73145 field_addr.sub_location->number = i;
73146#endif /* FREECIV_JSON_CONNECTION */
73147
73148 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
73149 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
73150 }
73151 }
73152
73153#ifdef FREECIV_JSON_CONNECTION
73154 /* Exit array. */
73155 FC_FREE(field_addr.sub_location);
73156#endif /* FREECIV_JSON_CONNECTION */
73157 }
73158
73159#ifdef FREECIV_JSON_CONNECTION
73160 field_addr.name = "tile_bonus";
73161#endif /* FREECIV_JSON_CONNECTION */
73162
73163 {
73164 int i;
73165
73166
73167#ifdef FREECIV_JSON_CONNECTION
73168 /* Enter array. */
73169 field_addr.sub_location = plocation_elem_new(0);
73170#endif /* FREECIV_JSON_CONNECTION */
73171
73172 for (i = 0; i < O_LAST; i++) {
73173#ifdef FREECIV_JSON_CONNECTION
73174 /* Next array element */
73175 field_addr.sub_location->number = i;
73176#endif /* FREECIV_JSON_CONNECTION */
73177
73178 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
73179 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
73180 }
73181 }
73182
73183#ifdef FREECIV_JSON_CONNECTION
73184 /* Exit array. */
73185 FC_FREE(field_addr.sub_location);
73186#endif /* FREECIV_JSON_CONNECTION */
73187 }
73188
73189#ifdef FREECIV_JSON_CONNECTION
73190 field_addr.name = "compat";
73191#endif /* FREECIV_JSON_CONNECTION */
73192
73193 {
73194 int readin;
73195
73196 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73198 }
73199 real_packet->compat = readin;
73200 }
73201
73202#ifdef FREECIV_JSON_CONNECTION
73203 field_addr.name = "integrates";
73204#endif /* FREECIV_JSON_CONNECTION */
73205
73206 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
73207 RECEIVE_PACKET_FIELD_ERROR(integrates);
73208 }
73209
73210#ifdef FREECIV_JSON_CONNECTION
73211 field_addr.name = "flags";
73212#endif /* FREECIV_JSON_CONNECTION */
73213
73214 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
73216 }
73217#endif /* FREECIV_DELTA_PROTOCOL */
73218
73220#undef FREE_PACKET_STRUCT
73221}
73222
73223static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
73224{
73225 const struct packet_ruleset_road *real_packet = packet;
73226 int e;
73228
73229 log_packet_detailed("packet_ruleset_road_100: sending info about ()");
73230
73231#ifdef FREECIV_DELTA_PROTOCOL
73233 struct packet_ruleset_road *old;
73234 bool differ;
73235 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ROAD;
73236
73237 if (nullptr == *hash) {
73239 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
73240 }
73241 BV_CLR_ALL(fields);
73242
73243 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
73244 old = fc_malloc(sizeof(*old));
73245 /* temporary bitcopy just to insert correctly */
73246 *old = *real_packet;
73249 }
73250
73251 differ = (old->id != real_packet->id);
73252 if (differ) {
73253 BV_SET(fields, 0);
73254 }
73255
73256 differ = (old->gui_type != real_packet->gui_type);
73257 if (differ) {
73258 BV_SET(fields, 1);
73259 }
73260
73261 differ = (requirement_vector_size(&old->first_reqs) != requirement_vector_size(&real_packet->first_reqs));
73262 if (!differ) {
73263 int i;
73264
73265 for (i = 0; i < requirement_vector_size(&old->first_reqs); i++) {
73266 differ = !are_requirements_equal(&old->first_reqs.p[i], &real_packet->first_reqs.p[i]);
73267 if (differ) {
73268 break;
73269 }
73270 }
73271 }
73272 if (differ) {
73273 BV_SET(fields, 2);
73274 }
73275
73276 differ = (old->move_cost != real_packet->move_cost);
73277 if (differ) {
73278 BV_SET(fields, 3);
73279 }
73280
73281 differ = (old->move_mode != real_packet->move_mode);
73282 if (differ) {
73283 BV_SET(fields, 4);
73284 }
73285
73286 differ = FALSE;
73287 {
73288 int i;
73289
73290 for (i = 0; i < O_LAST; i++) {
73291 differ = (old->tile_incr_const[i] != real_packet->tile_incr_const[i]);
73292 if (differ) {
73293 break;
73294 }
73295 }
73296 }
73297 if (differ) {
73298 BV_SET(fields, 5);
73299 }
73300
73301 differ = FALSE;
73302 {
73303 int i;
73304
73305 for (i = 0; i < O_LAST; i++) {
73306 differ = (old->tile_incr[i] != real_packet->tile_incr[i]);
73307 if (differ) {
73308 break;
73309 }
73310 }
73311 }
73312 if (differ) {
73313 BV_SET(fields, 6);
73314 }
73315
73316 differ = FALSE;
73317 {
73318 int i;
73319
73320 for (i = 0; i < O_LAST; i++) {
73321 differ = (old->tile_bonus[i] != real_packet->tile_bonus[i]);
73322 if (differ) {
73323 break;
73324 }
73325 }
73326 }
73327 if (differ) {
73328 BV_SET(fields, 7);
73329 }
73330
73331 differ = (old->compat != real_packet->compat);
73332 if (differ) {
73333 BV_SET(fields, 8);
73334 }
73335
73336 differ = !BV_ARE_EQUAL(old->integrates, real_packet->integrates);
73337 if (differ) {
73338 BV_SET(fields, 9);
73339 }
73340
73341 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
73342 if (differ) {
73343 BV_SET(fields, 10);
73344 }
73345#endif /* FREECIV_DELTA_PROTOCOL */
73346
73347#ifdef FREECIV_JSON_CONNECTION
73348 struct plocation field_addr;
73349 {
73350 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
73353 }
73354#endif /* FREECIV_JSON_CONNECTION */
73355
73356#ifdef FREECIV_DELTA_PROTOCOL
73357#ifdef FREECIV_JSON_CONNECTION
73358 field_addr.name = "fields";
73359#endif /* FREECIV_JSON_CONNECTION */
73360 e = 0;
73361 e |= DIO_BV_PUT(&dout, &field_addr, fields);
73362 if (e) {
73363 log_packet_detailed("fields bitvector error detected");
73364 }
73365
73366 if (BV_ISSET(fields, 0)) {
73367 log_packet_detailed(" field 'id' has changed");
73368
73369#ifdef FREECIV_JSON_CONNECTION
73370 field_addr.name = "id";
73371#endif /* FREECIV_JSON_CONNECTION */
73372 e = 0;
73373
73374 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
73375
73376 if (e) {
73377 log_packet_detailed("'id' field error detected");
73378 }
73379 }
73380
73381 if (BV_ISSET(fields, 1)) {
73382 log_packet_detailed(" field 'gui_type' has changed");
73383
73384#ifdef FREECIV_JSON_CONNECTION
73385 field_addr.name = "gui_type";
73386#endif /* FREECIV_JSON_CONNECTION */
73387 e = 0;
73388
73389 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
73390
73391 if (e) {
73392 log_packet_detailed("'gui_type' field error detected");
73393 }
73394 }
73395
73396 if (BV_ISSET(fields, 2)) {
73397 log_packet_detailed(" field 'first_reqs' has changed");
73398
73399#ifdef FREECIV_JSON_CONNECTION
73400 field_addr.name = "first_reqs";
73401#endif /* FREECIV_JSON_CONNECTION */
73402 e = 0;
73403
73404 {
73405 int i;
73406
73409
73410#ifdef FREECIV_JSON_CONNECTION
73411 /* Enter array. */
73412 field_addr.sub_location = plocation_elem_new(0);
73413#endif /* FREECIV_JSON_CONNECTION */
73414
73415 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73416#ifdef FREECIV_JSON_CONNECTION
73417 /* Next array element. */
73418 field_addr.sub_location->number = i;
73419#endif /* FREECIV_JSON_CONNECTION */
73420
73421 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
73422 }
73423
73424#ifdef FREECIV_JSON_CONNECTION
73425 /* Exit array. */
73426 FC_FREE(field_addr.sub_location);
73427#endif /* FREECIV_JSON_CONNECTION */
73428 }
73429
73430 if (e) {
73431 log_packet_detailed("'first_reqs' field error detected");
73432 }
73433 }
73434
73435 if (BV_ISSET(fields, 3)) {
73436 log_packet_detailed(" field 'move_cost' has changed");
73437
73438#ifdef FREECIV_JSON_CONNECTION
73439 field_addr.name = "move_cost";
73440#endif /* FREECIV_JSON_CONNECTION */
73441 e = 0;
73442
73443 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
73444
73445 if (e) {
73446 log_packet_detailed("'move_cost' field error detected");
73447 }
73448 }
73449
73450 if (BV_ISSET(fields, 4)) {
73451 log_packet_detailed(" field 'move_mode' has changed");
73452
73453#ifdef FREECIV_JSON_CONNECTION
73454 field_addr.name = "move_mode";
73455#endif /* FREECIV_JSON_CONNECTION */
73456 e = 0;
73457
73458 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
73459
73460 if (e) {
73461 log_packet_detailed("'move_mode' field error detected");
73462 }
73463 }
73464
73465 if (BV_ISSET(fields, 5)) {
73466 log_packet_detailed(" field 'tile_incr_const' has changed");
73467
73468#ifdef FREECIV_JSON_CONNECTION
73469 field_addr.name = "tile_incr_const";
73470#endif /* FREECIV_JSON_CONNECTION */
73471 e = 0;
73472
73473 {
73474 int i;
73475
73476#ifdef FREECIV_JSON_CONNECTION
73477 /* Create the array. */
73478 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73479
73480 /* Enter array. */
73481 field_addr.sub_location = plocation_elem_new(0);
73482#endif /* FREECIV_JSON_CONNECTION */
73483
73484 for (i = 0; i < O_LAST; i++) {
73485#ifdef FREECIV_JSON_CONNECTION
73486 /* Next array element. */
73487 field_addr.sub_location->number = i;
73488#endif /* FREECIV_JSON_CONNECTION */
73489
73490 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73491 }
73492
73493#ifdef FREECIV_JSON_CONNECTION
73494 /* Exit array. */
73495 FC_FREE(field_addr.sub_location);
73496#endif /* FREECIV_JSON_CONNECTION */
73497 }
73498
73499 if (e) {
73500 log_packet_detailed("'tile_incr_const' field error detected");
73501 }
73502 }
73503
73504 if (BV_ISSET(fields, 6)) {
73505 log_packet_detailed(" field 'tile_incr' has changed");
73506
73507#ifdef FREECIV_JSON_CONNECTION
73508 field_addr.name = "tile_incr";
73509#endif /* FREECIV_JSON_CONNECTION */
73510 e = 0;
73511
73512 {
73513 int i;
73514
73515#ifdef FREECIV_JSON_CONNECTION
73516 /* Create the array. */
73517 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73518
73519 /* Enter array. */
73520 field_addr.sub_location = plocation_elem_new(0);
73521#endif /* FREECIV_JSON_CONNECTION */
73522
73523 for (i = 0; i < O_LAST; i++) {
73524#ifdef FREECIV_JSON_CONNECTION
73525 /* Next array element. */
73526 field_addr.sub_location->number = i;
73527#endif /* FREECIV_JSON_CONNECTION */
73528
73529 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73530 }
73531
73532#ifdef FREECIV_JSON_CONNECTION
73533 /* Exit array. */
73534 FC_FREE(field_addr.sub_location);
73535#endif /* FREECIV_JSON_CONNECTION */
73536 }
73537
73538 if (e) {
73539 log_packet_detailed("'tile_incr' field error detected");
73540 }
73541 }
73542
73543 if (BV_ISSET(fields, 7)) {
73544 log_packet_detailed(" field 'tile_bonus' has changed");
73545
73546#ifdef FREECIV_JSON_CONNECTION
73547 field_addr.name = "tile_bonus";
73548#endif /* FREECIV_JSON_CONNECTION */
73549 e = 0;
73550
73551 {
73552 int i;
73553
73554#ifdef FREECIV_JSON_CONNECTION
73555 /* Create the array. */
73556 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73557
73558 /* Enter array. */
73559 field_addr.sub_location = plocation_elem_new(0);
73560#endif /* FREECIV_JSON_CONNECTION */
73561
73562 for (i = 0; i < O_LAST; i++) {
73563#ifdef FREECIV_JSON_CONNECTION
73564 /* Next array element. */
73565 field_addr.sub_location->number = i;
73566#endif /* FREECIV_JSON_CONNECTION */
73567
73568 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73569 }
73570
73571#ifdef FREECIV_JSON_CONNECTION
73572 /* Exit array. */
73573 FC_FREE(field_addr.sub_location);
73574#endif /* FREECIV_JSON_CONNECTION */
73575 }
73576
73577 if (e) {
73578 log_packet_detailed("'tile_bonus' field error detected");
73579 }
73580 }
73581
73582 if (BV_ISSET(fields, 8)) {
73583 log_packet_detailed(" field 'compat' has changed");
73584
73585#ifdef FREECIV_JSON_CONNECTION
73586 field_addr.name = "compat";
73587#endif /* FREECIV_JSON_CONNECTION */
73588 e = 0;
73589
73590 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73591
73592 if (e) {
73593 log_packet_detailed("'compat' field error detected");
73594 }
73595 }
73596
73597 if (BV_ISSET(fields, 9)) {
73598 log_packet_detailed(" field 'integrates' has changed");
73599
73600#ifdef FREECIV_JSON_CONNECTION
73601 field_addr.name = "integrates";
73602#endif /* FREECIV_JSON_CONNECTION */
73603 e = 0;
73604
73605 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73606
73607 if (e) {
73608 log_packet_detailed("'integrates' field error detected");
73609 }
73610 }
73611
73612 if (BV_ISSET(fields, 10)) {
73613 log_packet_detailed(" field 'flags' has changed");
73614
73615#ifdef FREECIV_JSON_CONNECTION
73616 field_addr.name = "flags";
73617#endif /* FREECIV_JSON_CONNECTION */
73618 e = 0;
73619
73620 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73621
73622 if (e) {
73623 log_packet_detailed("'flags' field error detected");
73624 }
73625 }
73626
73627 old->id = real_packet->id;
73628 old->gui_type = real_packet->gui_type;
73629 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
73630 old->move_cost = real_packet->move_cost;
73631 old->move_mode = real_packet->move_mode;
73632 {
73633 int i;
73634
73635 for (i = 0; i < O_LAST; i++) {
73636 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
73637 }
73638 }
73639 {
73640 int i;
73641
73642 for (i = 0; i < O_LAST; i++) {
73643 old->tile_incr[i] = real_packet->tile_incr[i];
73644 }
73645 }
73646 {
73647 int i;
73648
73649 for (i = 0; i < O_LAST; i++) {
73650 old->tile_bonus[i] = real_packet->tile_bonus[i];
73651 }
73652 }
73653 old->compat = real_packet->compat;
73654 old->integrates = real_packet->integrates;
73655 old->flags = real_packet->flags;
73656
73657#else /* FREECIV_DELTA_PROTOCOL */
73658#ifdef FREECIV_JSON_CONNECTION
73659 field_addr.name = "id";
73660#endif /* FREECIV_JSON_CONNECTION */
73661 e = 0;
73662
73663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
73664
73665 if (e) {
73666 log_packet_detailed("'id' field error detected");
73667 }
73668
73669#ifdef FREECIV_JSON_CONNECTION
73670 field_addr.name = "gui_type";
73671#endif /* FREECIV_JSON_CONNECTION */
73672 e = 0;
73673
73674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
73675
73676 if (e) {
73677 log_packet_detailed("'gui_type' field error detected");
73678 }
73679
73680#ifdef FREECIV_JSON_CONNECTION
73681 field_addr.name = "first_reqs";
73682#endif /* FREECIV_JSON_CONNECTION */
73683 e = 0;
73684
73685 {
73686 int i;
73687
73690
73691#ifdef FREECIV_JSON_CONNECTION
73692 /* Enter array. */
73693 field_addr.sub_location = plocation_elem_new(0);
73694#endif /* FREECIV_JSON_CONNECTION */
73695
73696 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73697#ifdef FREECIV_JSON_CONNECTION
73698 /* Next array element. */
73699 field_addr.sub_location->number = i;
73700#endif /* FREECIV_JSON_CONNECTION */
73701
73702 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
73703 }
73704
73705#ifdef FREECIV_JSON_CONNECTION
73706 /* Exit array. */
73707 FC_FREE(field_addr.sub_location);
73708#endif /* FREECIV_JSON_CONNECTION */
73709 }
73710
73711 if (e) {
73712 log_packet_detailed("'first_reqs' field error detected");
73713 }
73714
73715#ifdef FREECIV_JSON_CONNECTION
73716 field_addr.name = "move_cost";
73717#endif /* FREECIV_JSON_CONNECTION */
73718 e = 0;
73719
73720 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
73721
73722 if (e) {
73723 log_packet_detailed("'move_cost' field error detected");
73724 }
73725
73726#ifdef FREECIV_JSON_CONNECTION
73727 field_addr.name = "move_mode";
73728#endif /* FREECIV_JSON_CONNECTION */
73729 e = 0;
73730
73731 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
73732
73733 if (e) {
73734 log_packet_detailed("'move_mode' field error detected");
73735 }
73736
73737#ifdef FREECIV_JSON_CONNECTION
73738 field_addr.name = "tile_incr_const";
73739#endif /* FREECIV_JSON_CONNECTION */
73740 e = 0;
73741
73742 {
73743 int i;
73744
73745#ifdef FREECIV_JSON_CONNECTION
73746 /* Create the array. */
73747 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73748
73749 /* Enter array. */
73750 field_addr.sub_location = plocation_elem_new(0);
73751#endif /* FREECIV_JSON_CONNECTION */
73752
73753 for (i = 0; i < O_LAST; i++) {
73754#ifdef FREECIV_JSON_CONNECTION
73755 /* Next array element. */
73756 field_addr.sub_location->number = i;
73757#endif /* FREECIV_JSON_CONNECTION */
73758
73759 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73760 }
73761
73762#ifdef FREECIV_JSON_CONNECTION
73763 /* Exit array. */
73764 FC_FREE(field_addr.sub_location);
73765#endif /* FREECIV_JSON_CONNECTION */
73766 }
73767
73768 if (e) {
73769 log_packet_detailed("'tile_incr_const' field error detected");
73770 }
73771
73772#ifdef FREECIV_JSON_CONNECTION
73773 field_addr.name = "tile_incr";
73774#endif /* FREECIV_JSON_CONNECTION */
73775 e = 0;
73776
73777 {
73778 int i;
73779
73780#ifdef FREECIV_JSON_CONNECTION
73781 /* Create the array. */
73782 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73783
73784 /* Enter array. */
73785 field_addr.sub_location = plocation_elem_new(0);
73786#endif /* FREECIV_JSON_CONNECTION */
73787
73788 for (i = 0; i < O_LAST; i++) {
73789#ifdef FREECIV_JSON_CONNECTION
73790 /* Next array element. */
73791 field_addr.sub_location->number = i;
73792#endif /* FREECIV_JSON_CONNECTION */
73793
73794 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73795 }
73796
73797#ifdef FREECIV_JSON_CONNECTION
73798 /* Exit array. */
73799 FC_FREE(field_addr.sub_location);
73800#endif /* FREECIV_JSON_CONNECTION */
73801 }
73802
73803 if (e) {
73804 log_packet_detailed("'tile_incr' field error detected");
73805 }
73806
73807#ifdef FREECIV_JSON_CONNECTION
73808 field_addr.name = "tile_bonus";
73809#endif /* FREECIV_JSON_CONNECTION */
73810 e = 0;
73811
73812 {
73813 int i;
73814
73815#ifdef FREECIV_JSON_CONNECTION
73816 /* Create the array. */
73817 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73818
73819 /* Enter array. */
73820 field_addr.sub_location = plocation_elem_new(0);
73821#endif /* FREECIV_JSON_CONNECTION */
73822
73823 for (i = 0; i < O_LAST; i++) {
73824#ifdef FREECIV_JSON_CONNECTION
73825 /* Next array element. */
73826 field_addr.sub_location->number = i;
73827#endif /* FREECIV_JSON_CONNECTION */
73828
73829 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73830 }
73831
73832#ifdef FREECIV_JSON_CONNECTION
73833 /* Exit array. */
73834 FC_FREE(field_addr.sub_location);
73835#endif /* FREECIV_JSON_CONNECTION */
73836 }
73837
73838 if (e) {
73839 log_packet_detailed("'tile_bonus' field error detected");
73840 }
73841
73842#ifdef FREECIV_JSON_CONNECTION
73843 field_addr.name = "compat";
73844#endif /* FREECIV_JSON_CONNECTION */
73845 e = 0;
73846
73847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73848
73849 if (e) {
73850 log_packet_detailed("'compat' field error detected");
73851 }
73852
73853#ifdef FREECIV_JSON_CONNECTION
73854 field_addr.name = "integrates";
73855#endif /* FREECIV_JSON_CONNECTION */
73856 e = 0;
73857
73858 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73859
73860 if (e) {
73861 log_packet_detailed("'integrates' field error detected");
73862 }
73863
73864#ifdef FREECIV_JSON_CONNECTION
73865 field_addr.name = "flags";
73866#endif /* FREECIV_JSON_CONNECTION */
73867 e = 0;
73868
73869 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73870
73871 if (e) {
73872 log_packet_detailed("'flags' field error detected");
73873 }
73874#endif /* FREECIV_DELTA_PROTOCOL */
73875
73877}
73878
73880{
73881 if (!pc->used) {
73882 log_error("WARNING: trying to send data to the closed connection %s",
73884 return -1;
73885 }
73886 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ROAD].packet != nullptr, -1,
73887 "Handler for PACKET_RULESET_ROAD not installed");
73888 return pc->phs.handlers->send[PACKET_RULESET_ROAD].packet(pc, packet);
73889}
73890
73891void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
73892{
73893 conn_list_iterate(dest, pconn) {
73896}
73897
73898static inline void init_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73899{
73900 memset(packet, 0, sizeof(*packet));
73901
73902 requirement_vector_init(&packet->reqs);
73903 packet->helptext = strvec_new();
73904}
73905
73906static inline void free_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73907{
73908 if (packet->helptext) {
73909 strvec_destroy(packet->helptext);
73910 packet->helptext = nullptr;
73911 }
73912 requirement_vector_free(&packet->reqs);
73913}
73914
73915static inline void destroy_packet_ruleset_goods(void *packet)
73916{
73918 free(packet);
73919}
73920
73921#ifdef FREECIV_DELTA_PROTOCOL
73922#define hash_packet_ruleset_goods_100 hash_const
73923#define cmp_packet_ruleset_goods_100 cmp_const
73925#endif /* FREECIV_DELTA_PROTOCOL */
73926
73928{
73929#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_goods(_packet)
73931
73932#ifdef FREECIV_JSON_CONNECTION
73933 struct plocation field_addr;
73934 {
73935 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
73938 }
73939#endif /* FREECIV_JSON_CONNECTION */
73940
73941 log_packet_detailed("packet_ruleset_goods_100: got info about ()");
73942
73943#ifdef FREECIV_DELTA_PROTOCOL
73945 struct packet_ruleset_goods *old;
73946 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOODS;
73947
73948 if (nullptr == *hash) {
73950 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
73951 }
73952
73953 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73954 real_packet->id = old->id;
73955 sz_strlcpy(real_packet->name, old->name);
73956 sz_strlcpy(real_packet->rule_name, old->rule_name);
73957 requirement_vector_copy(&real_packet->reqs, &old->reqs);
73958 real_packet->from_pct = old->from_pct;
73959 real_packet->to_pct = old->to_pct;
73960 real_packet->onetime_pct = old->onetime_pct;
73961 real_packet->select_priority = old->select_priority;
73962 real_packet->replace_priority = old->replace_priority;
73963 real_packet->flags = old->flags;
73964 if (old->helptext) {
73965 strvec_copy(real_packet->helptext, old->helptext);
73966 } else {
73967 strvec_clear(real_packet->helptext);
73968 }
73969 } else {
73970 /* packet is already initialized empty */
73971 log_packet_detailed(" no old info");
73972 }
73973
73974#ifdef FREECIV_JSON_CONNECTION
73975 field_addr.name = "fields";
73976#endif /* FREECIV_JSON_CONNECTION */
73977 DIO_BV_GET(&din, &field_addr, fields);
73978
73979 if (BV_ISSET(fields, 0)) {
73980 log_packet_detailed(" got field 'id'");
73981
73982#ifdef FREECIV_JSON_CONNECTION
73983 field_addr.name = "id";
73984#endif /* FREECIV_JSON_CONNECTION */
73985
73986 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73988 }
73989 }
73990
73991 if (BV_ISSET(fields, 1)) {
73992 log_packet_detailed(" got field 'name'");
73993
73994#ifdef FREECIV_JSON_CONNECTION
73995 field_addr.name = "name";
73996#endif /* FREECIV_JSON_CONNECTION */
73997
73998 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74000 }
74001 }
74002
74003 if (BV_ISSET(fields, 2)) {
74004 log_packet_detailed(" got field 'rule_name'");
74005
74006#ifdef FREECIV_JSON_CONNECTION
74007 field_addr.name = "rule_name";
74008#endif /* FREECIV_JSON_CONNECTION */
74009
74010 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74011 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74012 }
74013 }
74014
74015 if (BV_ISSET(fields, 3)) {
74016 log_packet_detailed(" got field 'reqs'");
74017
74018#ifdef FREECIV_JSON_CONNECTION
74019 field_addr.name = "reqs";
74020#endif /* FREECIV_JSON_CONNECTION */
74021
74022 {
74023 int i;
74024
74025 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74027 }
74029
74030#ifdef FREECIV_JSON_CONNECTION
74031 /* Enter array. */
74032 field_addr.sub_location = plocation_elem_new(0);
74033#endif /* FREECIV_JSON_CONNECTION */
74034
74035 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74036#ifdef FREECIV_JSON_CONNECTION
74037 /* Next array element */
74038 field_addr.sub_location->number = i;
74039#endif /* FREECIV_JSON_CONNECTION */
74040
74041 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74043 }
74044 }
74045
74046#ifdef FREECIV_JSON_CONNECTION
74047 /* Exit array. */
74048 FC_FREE(field_addr.sub_location);
74049#endif /* FREECIV_JSON_CONNECTION */
74050 }
74051 }
74052
74053 if (BV_ISSET(fields, 4)) {
74054 log_packet_detailed(" got field 'from_pct'");
74055
74056#ifdef FREECIV_JSON_CONNECTION
74057 field_addr.name = "from_pct";
74058#endif /* FREECIV_JSON_CONNECTION */
74059
74060 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
74062 }
74063 }
74064
74065 if (BV_ISSET(fields, 5)) {
74066 log_packet_detailed(" got field 'to_pct'");
74067
74068#ifdef FREECIV_JSON_CONNECTION
74069 field_addr.name = "to_pct";
74070#endif /* FREECIV_JSON_CONNECTION */
74071
74072 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
74074 }
74075 }
74076
74077 if (BV_ISSET(fields, 6)) {
74078 log_packet_detailed(" got field 'onetime_pct'");
74079
74080#ifdef FREECIV_JSON_CONNECTION
74081 field_addr.name = "onetime_pct";
74082#endif /* FREECIV_JSON_CONNECTION */
74083
74084 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
74085 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
74086 }
74087 }
74088
74089 if (BV_ISSET(fields, 7)) {
74090 log_packet_detailed(" got field 'select_priority'");
74091
74092#ifdef FREECIV_JSON_CONNECTION
74093 field_addr.name = "select_priority";
74094#endif /* FREECIV_JSON_CONNECTION */
74095
74096 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
74097 RECEIVE_PACKET_FIELD_ERROR(select_priority);
74098 }
74099 }
74100
74101 if (BV_ISSET(fields, 8)) {
74102 log_packet_detailed(" got field 'replace_priority'");
74103
74104#ifdef FREECIV_JSON_CONNECTION
74105 field_addr.name = "replace_priority";
74106#endif /* FREECIV_JSON_CONNECTION */
74107
74108 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
74109 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
74110 }
74111 }
74112
74113 if (BV_ISSET(fields, 9)) {
74114 log_packet_detailed(" got field 'flags'");
74115
74116#ifdef FREECIV_JSON_CONNECTION
74117 field_addr.name = "flags";
74118#endif /* FREECIV_JSON_CONNECTION */
74119
74120 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
74122 }
74123 }
74124
74125 if (BV_ISSET(fields, 10)) {
74126 log_packet_detailed(" got field 'helptext'");
74127
74128#ifdef FREECIV_JSON_CONNECTION
74129 field_addr.name = "helptext";
74130#endif /* FREECIV_JSON_CONNECTION */
74131
74132 {
74133 int i;
74134
74135 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74137 }
74138 strvec_reserve(real_packet->helptext, i);
74139
74140#ifdef FREECIV_JSON_CONNECTION
74141 /* Enter array. */
74142 field_addr.sub_location = plocation_elem_new(0);
74143#endif /* FREECIV_JSON_CONNECTION */
74144
74145 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74146#ifdef FREECIV_JSON_CONNECTION
74147 /* Next array element */
74148 field_addr.sub_location->number = i;
74149#endif /* FREECIV_JSON_CONNECTION */
74150
74151 {
74152 char readin[MAX_LEN_PACKET];
74153
74154 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
74155 || !strvec_set(real_packet->helptext, i, readin)) {
74157 }
74158 }
74159 }
74160
74161#ifdef FREECIV_JSON_CONNECTION
74162 /* Exit array. */
74163 FC_FREE(field_addr.sub_location);
74164#endif /* FREECIV_JSON_CONNECTION */
74165 }
74166 }
74167
74168 if (nullptr == old) {
74169 old = fc_malloc(sizeof(*old));
74171 old->id = real_packet->id;
74172 sz_strlcpy(old->name, real_packet->name);
74173 sz_strlcpy(old->rule_name, real_packet->rule_name);
74174 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74175 old->from_pct = real_packet->from_pct;
74176 old->to_pct = real_packet->to_pct;
74177 old->onetime_pct = real_packet->onetime_pct;
74178 old->select_priority = real_packet->select_priority;
74179 old->replace_priority = real_packet->replace_priority;
74180 old->flags = real_packet->flags;
74181 if (real_packet->helptext) {
74182 strvec_copy(old->helptext, real_packet->helptext);
74183 } else {
74184 strvec_clear(old->helptext);
74185 }
74187 } else {
74188 old->id = real_packet->id;
74189 sz_strlcpy(old->name, real_packet->name);
74190 sz_strlcpy(old->rule_name, real_packet->rule_name);
74191 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74192 old->from_pct = real_packet->from_pct;
74193 old->to_pct = real_packet->to_pct;
74194 old->onetime_pct = real_packet->onetime_pct;
74195 old->select_priority = real_packet->select_priority;
74196 old->replace_priority = real_packet->replace_priority;
74197 old->flags = real_packet->flags;
74198 if (real_packet->helptext) {
74199 strvec_copy(old->helptext, real_packet->helptext);
74200 } else {
74201 strvec_clear(old->helptext);
74202 }
74203 }
74204
74205#else /* FREECIV_DELTA_PROTOCOL */
74206#ifdef FREECIV_JSON_CONNECTION
74207 field_addr.name = "id";
74208#endif /* FREECIV_JSON_CONNECTION */
74209
74210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74212 }
74213
74214#ifdef FREECIV_JSON_CONNECTION
74215 field_addr.name = "name";
74216#endif /* FREECIV_JSON_CONNECTION */
74217
74218 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74220 }
74221
74222#ifdef FREECIV_JSON_CONNECTION
74223 field_addr.name = "rule_name";
74224#endif /* FREECIV_JSON_CONNECTION */
74225
74226 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74227 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74228 }
74229
74230#ifdef FREECIV_JSON_CONNECTION
74231 field_addr.name = "reqs";
74232#endif /* FREECIV_JSON_CONNECTION */
74233
74234 {
74235 int i;
74236
74237 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74239 }
74241
74242#ifdef FREECIV_JSON_CONNECTION
74243 /* Enter array. */
74244 field_addr.sub_location = plocation_elem_new(0);
74245#endif /* FREECIV_JSON_CONNECTION */
74246
74247 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74248#ifdef FREECIV_JSON_CONNECTION
74249 /* Next array element */
74250 field_addr.sub_location->number = i;
74251#endif /* FREECIV_JSON_CONNECTION */
74252
74253 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74255 }
74256 }
74257
74258#ifdef FREECIV_JSON_CONNECTION
74259 /* Exit array. */
74260 FC_FREE(field_addr.sub_location);
74261#endif /* FREECIV_JSON_CONNECTION */
74262 }
74263
74264#ifdef FREECIV_JSON_CONNECTION
74265 field_addr.name = "from_pct";
74266#endif /* FREECIV_JSON_CONNECTION */
74267
74268 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
74270 }
74271
74272#ifdef FREECIV_JSON_CONNECTION
74273 field_addr.name = "to_pct";
74274#endif /* FREECIV_JSON_CONNECTION */
74275
74276 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
74278 }
74279
74280#ifdef FREECIV_JSON_CONNECTION
74281 field_addr.name = "onetime_pct";
74282#endif /* FREECIV_JSON_CONNECTION */
74283
74284 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
74285 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
74286 }
74287
74288#ifdef FREECIV_JSON_CONNECTION
74289 field_addr.name = "select_priority";
74290#endif /* FREECIV_JSON_CONNECTION */
74291
74292 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
74293 RECEIVE_PACKET_FIELD_ERROR(select_priority);
74294 }
74295
74296#ifdef FREECIV_JSON_CONNECTION
74297 field_addr.name = "replace_priority";
74298#endif /* FREECIV_JSON_CONNECTION */
74299
74300 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
74301 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
74302 }
74303
74304#ifdef FREECIV_JSON_CONNECTION
74305 field_addr.name = "flags";
74306#endif /* FREECIV_JSON_CONNECTION */
74307
74308 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
74310 }
74311
74312#ifdef FREECIV_JSON_CONNECTION
74313 field_addr.name = "helptext";
74314#endif /* FREECIV_JSON_CONNECTION */
74315
74316 {
74317 int i;
74318
74319 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74321 }
74322 strvec_reserve(real_packet->helptext, i);
74323
74324#ifdef FREECIV_JSON_CONNECTION
74325 /* Enter array. */
74326 field_addr.sub_location = plocation_elem_new(0);
74327#endif /* FREECIV_JSON_CONNECTION */
74328
74329 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74330#ifdef FREECIV_JSON_CONNECTION
74331 /* Next array element */
74332 field_addr.sub_location->number = i;
74333#endif /* FREECIV_JSON_CONNECTION */
74334
74335 {
74336 char readin[MAX_LEN_PACKET];
74337
74338 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
74339 || !strvec_set(real_packet->helptext, i, readin)) {
74341 }
74342 }
74343 }
74344
74345#ifdef FREECIV_JSON_CONNECTION
74346 /* Exit array. */
74347 FC_FREE(field_addr.sub_location);
74348#endif /* FREECIV_JSON_CONNECTION */
74349 }
74350#endif /* FREECIV_DELTA_PROTOCOL */
74351
74353#undef FREE_PACKET_STRUCT
74354}
74355
74356static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
74357{
74358 const struct packet_ruleset_goods *real_packet = packet;
74359 int e;
74361
74362 log_packet_detailed("packet_ruleset_goods_100: sending info about ()");
74363
74364#ifdef FREECIV_DELTA_PROTOCOL
74366 struct packet_ruleset_goods *old;
74367 bool differ;
74368 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOODS;
74369
74370 if (nullptr == *hash) {
74372 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
74373 }
74374 BV_CLR_ALL(fields);
74375
74376 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74377 old = fc_malloc(sizeof(*old));
74378 /* temporary bitcopy just to insert correctly */
74379 *old = *real_packet;
74382 }
74383
74384 differ = (old->id != real_packet->id);
74385 if (differ) {
74386 BV_SET(fields, 0);
74387 }
74388
74389 differ = (strcmp(old->name, real_packet->name) != 0);
74390 if (differ) {
74391 BV_SET(fields, 1);
74392 }
74393
74394 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
74395 if (differ) {
74396 BV_SET(fields, 2);
74397 }
74398
74400 if (!differ) {
74401 int i;
74402
74403 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
74404 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
74405 if (differ) {
74406 break;
74407 }
74408 }
74409 }
74410 if (differ) {
74411 BV_SET(fields, 3);
74412 }
74413
74414 differ = (old->from_pct != real_packet->from_pct);
74415 if (differ) {
74416 BV_SET(fields, 4);
74417 }
74418
74419 differ = (old->to_pct != real_packet->to_pct);
74420 if (differ) {
74421 BV_SET(fields, 5);
74422 }
74423
74424 differ = (old->onetime_pct != real_packet->onetime_pct);
74425 if (differ) {
74426 BV_SET(fields, 6);
74427 }
74428
74429 differ = (old->select_priority != real_packet->select_priority);
74430 if (differ) {
74431 BV_SET(fields, 7);
74432 }
74433
74434 differ = (old->replace_priority != real_packet->replace_priority);
74435 if (differ) {
74436 BV_SET(fields, 8);
74437 }
74438
74439 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
74440 if (differ) {
74441 BV_SET(fields, 9);
74442 }
74443
74444 if (real_packet->helptext) {
74445 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
74446 } else {
74447 differ = (strvec_size(old->helptext) > 0);
74448 }
74449 if (differ) {
74450 BV_SET(fields, 10);
74451 }
74452#endif /* FREECIV_DELTA_PROTOCOL */
74453
74454#ifdef FREECIV_JSON_CONNECTION
74455 struct plocation field_addr;
74456 {
74457 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74460 }
74461#endif /* FREECIV_JSON_CONNECTION */
74462
74463#ifdef FREECIV_DELTA_PROTOCOL
74464#ifdef FREECIV_JSON_CONNECTION
74465 field_addr.name = "fields";
74466#endif /* FREECIV_JSON_CONNECTION */
74467 e = 0;
74468 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74469 if (e) {
74470 log_packet_detailed("fields bitvector error detected");
74471 }
74472
74473 if (BV_ISSET(fields, 0)) {
74474 log_packet_detailed(" field 'id' has changed");
74475
74476#ifdef FREECIV_JSON_CONNECTION
74477 field_addr.name = "id";
74478#endif /* FREECIV_JSON_CONNECTION */
74479 e = 0;
74480
74481 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74482
74483 if (e) {
74484 log_packet_detailed("'id' field error detected");
74485 }
74486 }
74487
74488 if (BV_ISSET(fields, 1)) {
74489 log_packet_detailed(" field 'name' has changed");
74490
74491#ifdef FREECIV_JSON_CONNECTION
74492 field_addr.name = "name";
74493#endif /* FREECIV_JSON_CONNECTION */
74494 e = 0;
74495
74496 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74497
74498 if (e) {
74499 log_packet_detailed("'name' field error detected");
74500 }
74501 }
74502
74503 if (BV_ISSET(fields, 2)) {
74504 log_packet_detailed(" field 'rule_name' has changed");
74505
74506#ifdef FREECIV_JSON_CONNECTION
74507 field_addr.name = "rule_name";
74508#endif /* FREECIV_JSON_CONNECTION */
74509 e = 0;
74510
74511 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74512
74513 if (e) {
74514 log_packet_detailed("'rule_name' field error detected");
74515 }
74516 }
74517
74518 if (BV_ISSET(fields, 3)) {
74519 log_packet_detailed(" field 'reqs' has changed");
74520
74521#ifdef FREECIV_JSON_CONNECTION
74522 field_addr.name = "reqs";
74523#endif /* FREECIV_JSON_CONNECTION */
74524 e = 0;
74525
74526 {
74527 int i;
74528
74531
74532#ifdef FREECIV_JSON_CONNECTION
74533 /* Enter array. */
74534 field_addr.sub_location = plocation_elem_new(0);
74535#endif /* FREECIV_JSON_CONNECTION */
74536
74537 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74538#ifdef FREECIV_JSON_CONNECTION
74539 /* Next array element. */
74540 field_addr.sub_location->number = i;
74541#endif /* FREECIV_JSON_CONNECTION */
74542
74543 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74544 }
74545
74546#ifdef FREECIV_JSON_CONNECTION
74547 /* Exit array. */
74548 FC_FREE(field_addr.sub_location);
74549#endif /* FREECIV_JSON_CONNECTION */
74550 }
74551
74552 if (e) {
74553 log_packet_detailed("'reqs' field error detected");
74554 }
74555 }
74556
74557 if (BV_ISSET(fields, 4)) {
74558 log_packet_detailed(" field 'from_pct' has changed");
74559
74560#ifdef FREECIV_JSON_CONNECTION
74561 field_addr.name = "from_pct";
74562#endif /* FREECIV_JSON_CONNECTION */
74563 e = 0;
74564
74565 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74566
74567 if (e) {
74568 log_packet_detailed("'from_pct' field error detected");
74569 }
74570 }
74571
74572 if (BV_ISSET(fields, 5)) {
74573 log_packet_detailed(" field 'to_pct' has changed");
74574
74575#ifdef FREECIV_JSON_CONNECTION
74576 field_addr.name = "to_pct";
74577#endif /* FREECIV_JSON_CONNECTION */
74578 e = 0;
74579
74580 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74581
74582 if (e) {
74583 log_packet_detailed("'to_pct' field error detected");
74584 }
74585 }
74586
74587 if (BV_ISSET(fields, 6)) {
74588 log_packet_detailed(" field 'onetime_pct' has changed");
74589
74590#ifdef FREECIV_JSON_CONNECTION
74591 field_addr.name = "onetime_pct";
74592#endif /* FREECIV_JSON_CONNECTION */
74593 e = 0;
74594
74595 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74596
74597 if (e) {
74598 log_packet_detailed("'onetime_pct' field error detected");
74599 }
74600 }
74601
74602 if (BV_ISSET(fields, 7)) {
74603 log_packet_detailed(" field 'select_priority' has changed");
74604
74605#ifdef FREECIV_JSON_CONNECTION
74606 field_addr.name = "select_priority";
74607#endif /* FREECIV_JSON_CONNECTION */
74608 e = 0;
74609
74610 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74611
74612 if (e) {
74613 log_packet_detailed("'select_priority' field error detected");
74614 }
74615 }
74616
74617 if (BV_ISSET(fields, 8)) {
74618 log_packet_detailed(" field 'replace_priority' has changed");
74619
74620#ifdef FREECIV_JSON_CONNECTION
74621 field_addr.name = "replace_priority";
74622#endif /* FREECIV_JSON_CONNECTION */
74623 e = 0;
74624
74625 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74626
74627 if (e) {
74628 log_packet_detailed("'replace_priority' field error detected");
74629 }
74630 }
74631
74632 if (BV_ISSET(fields, 9)) {
74633 log_packet_detailed(" field 'flags' has changed");
74634
74635#ifdef FREECIV_JSON_CONNECTION
74636 field_addr.name = "flags";
74637#endif /* FREECIV_JSON_CONNECTION */
74638 e = 0;
74639
74640 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74641
74642 if (e) {
74643 log_packet_detailed("'flags' field error detected");
74644 }
74645 }
74646
74647 if (BV_ISSET(fields, 10)) {
74648 log_packet_detailed(" field 'helptext' has changed");
74649
74650#ifdef FREECIV_JSON_CONNECTION
74651 field_addr.name = "helptext";
74652#endif /* FREECIV_JSON_CONNECTION */
74653 e = 0;
74654
74655 if (!real_packet->helptext) {
74656 /* Transmit null as empty */
74657 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74658 } else {
74659 int i;
74660
74662 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74663
74664#ifdef FREECIV_JSON_CONNECTION
74665 /* Enter array. */
74666 field_addr.sub_location = plocation_elem_new(0);
74667#endif /* FREECIV_JSON_CONNECTION */
74668
74669 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74670#ifdef FREECIV_JSON_CONNECTION
74671 /* Next array element. */
74672 field_addr.sub_location->number = i;
74673#endif /* FREECIV_JSON_CONNECTION */
74674
74675 {
74676 const char *pstr = strvec_get(real_packet->helptext, i);
74677
74678 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74679 }
74680 }
74681
74682#ifdef FREECIV_JSON_CONNECTION
74683 /* Exit array. */
74684 FC_FREE(field_addr.sub_location);
74685#endif /* FREECIV_JSON_CONNECTION */
74686 }
74687
74688 if (e) {
74689 log_packet_detailed("'helptext' field error detected");
74690 }
74691 }
74692
74693 old->id = real_packet->id;
74694 sz_strlcpy(old->name, real_packet->name);
74695 sz_strlcpy(old->rule_name, real_packet->rule_name);
74696 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74697 old->from_pct = real_packet->from_pct;
74698 old->to_pct = real_packet->to_pct;
74699 old->onetime_pct = real_packet->onetime_pct;
74700 old->select_priority = real_packet->select_priority;
74701 old->replace_priority = real_packet->replace_priority;
74702 old->flags = real_packet->flags;
74703 if (real_packet->helptext) {
74704 strvec_copy(old->helptext, real_packet->helptext);
74705 } else {
74706 strvec_clear(old->helptext);
74707 }
74708
74709#else /* FREECIV_DELTA_PROTOCOL */
74710#ifdef FREECIV_JSON_CONNECTION
74711 field_addr.name = "id";
74712#endif /* FREECIV_JSON_CONNECTION */
74713 e = 0;
74714
74715 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74716
74717 if (e) {
74718 log_packet_detailed("'id' field error detected");
74719 }
74720
74721#ifdef FREECIV_JSON_CONNECTION
74722 field_addr.name = "name";
74723#endif /* FREECIV_JSON_CONNECTION */
74724 e = 0;
74725
74726 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74727
74728 if (e) {
74729 log_packet_detailed("'name' field error detected");
74730 }
74731
74732#ifdef FREECIV_JSON_CONNECTION
74733 field_addr.name = "rule_name";
74734#endif /* FREECIV_JSON_CONNECTION */
74735 e = 0;
74736
74737 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74738
74739 if (e) {
74740 log_packet_detailed("'rule_name' field error detected");
74741 }
74742
74743#ifdef FREECIV_JSON_CONNECTION
74744 field_addr.name = "reqs";
74745#endif /* FREECIV_JSON_CONNECTION */
74746 e = 0;
74747
74748 {
74749 int i;
74750
74753
74754#ifdef FREECIV_JSON_CONNECTION
74755 /* Enter array. */
74756 field_addr.sub_location = plocation_elem_new(0);
74757#endif /* FREECIV_JSON_CONNECTION */
74758
74759 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74760#ifdef FREECIV_JSON_CONNECTION
74761 /* Next array element. */
74762 field_addr.sub_location->number = i;
74763#endif /* FREECIV_JSON_CONNECTION */
74764
74765 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74766 }
74767
74768#ifdef FREECIV_JSON_CONNECTION
74769 /* Exit array. */
74770 FC_FREE(field_addr.sub_location);
74771#endif /* FREECIV_JSON_CONNECTION */
74772 }
74773
74774 if (e) {
74775 log_packet_detailed("'reqs' field error detected");
74776 }
74777
74778#ifdef FREECIV_JSON_CONNECTION
74779 field_addr.name = "from_pct";
74780#endif /* FREECIV_JSON_CONNECTION */
74781 e = 0;
74782
74783 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74784
74785 if (e) {
74786 log_packet_detailed("'from_pct' field error detected");
74787 }
74788
74789#ifdef FREECIV_JSON_CONNECTION
74790 field_addr.name = "to_pct";
74791#endif /* FREECIV_JSON_CONNECTION */
74792 e = 0;
74793
74794 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74795
74796 if (e) {
74797 log_packet_detailed("'to_pct' field error detected");
74798 }
74799
74800#ifdef FREECIV_JSON_CONNECTION
74801 field_addr.name = "onetime_pct";
74802#endif /* FREECIV_JSON_CONNECTION */
74803 e = 0;
74804
74805 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74806
74807 if (e) {
74808 log_packet_detailed("'onetime_pct' field error detected");
74809 }
74810
74811#ifdef FREECIV_JSON_CONNECTION
74812 field_addr.name = "select_priority";
74813#endif /* FREECIV_JSON_CONNECTION */
74814 e = 0;
74815
74816 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74817
74818 if (e) {
74819 log_packet_detailed("'select_priority' field error detected");
74820 }
74821
74822#ifdef FREECIV_JSON_CONNECTION
74823 field_addr.name = "replace_priority";
74824#endif /* FREECIV_JSON_CONNECTION */
74825 e = 0;
74826
74827 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74828
74829 if (e) {
74830 log_packet_detailed("'replace_priority' field error detected");
74831 }
74832
74833#ifdef FREECIV_JSON_CONNECTION
74834 field_addr.name = "flags";
74835#endif /* FREECIV_JSON_CONNECTION */
74836 e = 0;
74837
74838 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74839
74840 if (e) {
74841 log_packet_detailed("'flags' field error detected");
74842 }
74843
74844#ifdef FREECIV_JSON_CONNECTION
74845 field_addr.name = "helptext";
74846#endif /* FREECIV_JSON_CONNECTION */
74847 e = 0;
74848
74849 if (!real_packet->helptext) {
74850 /* Transmit null as empty */
74851 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74852 } else {
74853 int i;
74854
74856 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74857
74858#ifdef FREECIV_JSON_CONNECTION
74859 /* Enter array. */
74860 field_addr.sub_location = plocation_elem_new(0);
74861#endif /* FREECIV_JSON_CONNECTION */
74862
74863 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74864#ifdef FREECIV_JSON_CONNECTION
74865 /* Next array element. */
74866 field_addr.sub_location->number = i;
74867#endif /* FREECIV_JSON_CONNECTION */
74868
74869 {
74870 const char *pstr = strvec_get(real_packet->helptext, i);
74871
74872 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74873 }
74874 }
74875
74876#ifdef FREECIV_JSON_CONNECTION
74877 /* Exit array. */
74878 FC_FREE(field_addr.sub_location);
74879#endif /* FREECIV_JSON_CONNECTION */
74880 }
74881
74882 if (e) {
74883 log_packet_detailed("'helptext' field error detected");
74884 }
74885#endif /* FREECIV_DELTA_PROTOCOL */
74886
74888}
74889
74891{
74892 if (!pc->used) {
74893 log_error("WARNING: trying to send data to the closed connection %s",
74895 return -1;
74896 }
74897 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOODS].packet != nullptr, -1,
74898 "Handler for PACKET_RULESET_GOODS not installed");
74899 return pc->phs.handlers->send[PACKET_RULESET_GOODS].packet(pc, packet);
74900}
74901
74902void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
74903{
74904 conn_list_iterate(dest, pconn) {
74907}
74908
74910{
74911 memset(packet, 0, sizeof(*packet));
74912
74913 requirement_vector_init(&packet->reqs);
74914}
74915
74917{
74918 requirement_vector_free(&packet->reqs);
74919}
74920
74921static inline void destroy_packet_ruleset_disaster(void *packet)
74922{
74924 free(packet);
74925}
74926
74927#ifdef FREECIV_DELTA_PROTOCOL
74928#define hash_packet_ruleset_disaster_100 hash_const
74929#define cmp_packet_ruleset_disaster_100 cmp_const
74931#endif /* FREECIV_DELTA_PROTOCOL */
74932
74934{
74935#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_disaster(_packet)
74937
74938#ifdef FREECIV_JSON_CONNECTION
74939 struct plocation field_addr;
74940 {
74941 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74944 }
74945#endif /* FREECIV_JSON_CONNECTION */
74946
74947 log_packet_detailed("packet_ruleset_disaster_100: got info about ()");
74948
74949#ifdef FREECIV_DELTA_PROTOCOL
74952 struct genhash **hash = pc->phs.received + PACKET_RULESET_DISASTER;
74953
74954 if (nullptr == *hash) {
74956 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
74957 }
74958
74959 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74960 real_packet->id = old->id;
74961 sz_strlcpy(real_packet->name, old->name);
74962 sz_strlcpy(real_packet->rule_name, old->rule_name);
74963 requirement_vector_copy(&real_packet->reqs, &old->reqs);
74964 real_packet->frequency = old->frequency;
74965 real_packet->effects = old->effects;
74966 } else {
74967 /* packet is already initialized empty */
74968 log_packet_detailed(" no old info");
74969 }
74970
74971#ifdef FREECIV_JSON_CONNECTION
74972 field_addr.name = "fields";
74973#endif /* FREECIV_JSON_CONNECTION */
74974 DIO_BV_GET(&din, &field_addr, fields);
74975
74976 if (BV_ISSET(fields, 0)) {
74977 log_packet_detailed(" got field 'id'");
74978
74979#ifdef FREECIV_JSON_CONNECTION
74980 field_addr.name = "id";
74981#endif /* FREECIV_JSON_CONNECTION */
74982
74983 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74985 }
74986 }
74987
74988 if (BV_ISSET(fields, 1)) {
74989 log_packet_detailed(" got field 'name'");
74990
74991#ifdef FREECIV_JSON_CONNECTION
74992 field_addr.name = "name";
74993#endif /* FREECIV_JSON_CONNECTION */
74994
74995 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74997 }
74998 }
74999
75000 if (BV_ISSET(fields, 2)) {
75001 log_packet_detailed(" got field 'rule_name'");
75002
75003#ifdef FREECIV_JSON_CONNECTION
75004 field_addr.name = "rule_name";
75005#endif /* FREECIV_JSON_CONNECTION */
75006
75007 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75008 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75009 }
75010 }
75011
75012 if (BV_ISSET(fields, 3)) {
75013 log_packet_detailed(" got field 'reqs'");
75014
75015#ifdef FREECIV_JSON_CONNECTION
75016 field_addr.name = "reqs";
75017#endif /* FREECIV_JSON_CONNECTION */
75018
75019 {
75020 int i;
75021
75022 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
75024 }
75026
75027#ifdef FREECIV_JSON_CONNECTION
75028 /* Enter array. */
75029 field_addr.sub_location = plocation_elem_new(0);
75030#endif /* FREECIV_JSON_CONNECTION */
75031
75032 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
75033#ifdef FREECIV_JSON_CONNECTION
75034 /* Next array element */
75035 field_addr.sub_location->number = i;
75036#endif /* FREECIV_JSON_CONNECTION */
75037
75038 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
75040 }
75041 }
75042
75043#ifdef FREECIV_JSON_CONNECTION
75044 /* Exit array. */
75045 FC_FREE(field_addr.sub_location);
75046#endif /* FREECIV_JSON_CONNECTION */
75047 }
75048 }
75049
75050 if (BV_ISSET(fields, 4)) {
75051 log_packet_detailed(" got field 'frequency'");
75052
75053#ifdef FREECIV_JSON_CONNECTION
75054 field_addr.name = "frequency";
75055#endif /* FREECIV_JSON_CONNECTION */
75056
75057 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
75058 RECEIVE_PACKET_FIELD_ERROR(frequency);
75059 }
75060 }
75061
75062 if (BV_ISSET(fields, 5)) {
75063 log_packet_detailed(" got field 'effects'");
75064
75065#ifdef FREECIV_JSON_CONNECTION
75066 field_addr.name = "effects";
75067#endif /* FREECIV_JSON_CONNECTION */
75068
75069 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
75071 }
75072 }
75073
75074 if (nullptr == old) {
75075 old = fc_malloc(sizeof(*old));
75077 old->id = real_packet->id;
75078 sz_strlcpy(old->name, real_packet->name);
75079 sz_strlcpy(old->rule_name, real_packet->rule_name);
75080 requirement_vector_copy(&old->reqs, &real_packet->reqs);
75081 old->frequency = real_packet->frequency;
75082 old->effects = real_packet->effects;
75084 } else {
75085 old->id = real_packet->id;
75086 sz_strlcpy(old->name, real_packet->name);
75087 sz_strlcpy(old->rule_name, real_packet->rule_name);
75088 requirement_vector_copy(&old->reqs, &real_packet->reqs);
75089 old->frequency = real_packet->frequency;
75090 old->effects = real_packet->effects;
75091 }
75092
75093#else /* FREECIV_DELTA_PROTOCOL */
75094#ifdef FREECIV_JSON_CONNECTION
75095 field_addr.name = "id";
75096#endif /* FREECIV_JSON_CONNECTION */
75097
75098 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75100 }
75101
75102#ifdef FREECIV_JSON_CONNECTION
75103 field_addr.name = "name";
75104#endif /* FREECIV_JSON_CONNECTION */
75105
75106 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75108 }
75109
75110#ifdef FREECIV_JSON_CONNECTION
75111 field_addr.name = "rule_name";
75112#endif /* FREECIV_JSON_CONNECTION */
75113
75114 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75115 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75116 }
75117
75118#ifdef FREECIV_JSON_CONNECTION
75119 field_addr.name = "reqs";
75120#endif /* FREECIV_JSON_CONNECTION */
75121
75122 {
75123 int i;
75124
75125 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
75127 }
75129
75130#ifdef FREECIV_JSON_CONNECTION
75131 /* Enter array. */
75132 field_addr.sub_location = plocation_elem_new(0);
75133#endif /* FREECIV_JSON_CONNECTION */
75134
75135 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
75136#ifdef FREECIV_JSON_CONNECTION
75137 /* Next array element */
75138 field_addr.sub_location->number = i;
75139#endif /* FREECIV_JSON_CONNECTION */
75140
75141 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
75143 }
75144 }
75145
75146#ifdef FREECIV_JSON_CONNECTION
75147 /* Exit array. */
75148 FC_FREE(field_addr.sub_location);
75149#endif /* FREECIV_JSON_CONNECTION */
75150 }
75151
75152#ifdef FREECIV_JSON_CONNECTION
75153 field_addr.name = "frequency";
75154#endif /* FREECIV_JSON_CONNECTION */
75155
75156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
75157 RECEIVE_PACKET_FIELD_ERROR(frequency);
75158 }
75159
75160#ifdef FREECIV_JSON_CONNECTION
75161 field_addr.name = "effects";
75162#endif /* FREECIV_JSON_CONNECTION */
75163
75164 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
75166 }
75167#endif /* FREECIV_DELTA_PROTOCOL */
75168
75170#undef FREE_PACKET_STRUCT
75171}
75172
75174{
75175 const struct packet_ruleset_disaster *real_packet = packet;
75176 int e;
75178
75179 log_packet_detailed("packet_ruleset_disaster_100: sending info about ()");
75180
75181#ifdef FREECIV_DELTA_PROTOCOL
75184 bool differ;
75185 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DISASTER;
75186
75187 if (nullptr == *hash) {
75189 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
75190 }
75191 BV_CLR_ALL(fields);
75192
75193 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75194 old = fc_malloc(sizeof(*old));
75195 /* temporary bitcopy just to insert correctly */
75196 *old = *real_packet;
75199 }
75200
75201 differ = (old->id != real_packet->id);
75202 if (differ) {
75203 BV_SET(fields, 0);
75204 }
75205
75206 differ = (strcmp(old->name, real_packet->name) != 0);
75207 if (differ) {
75208 BV_SET(fields, 1);
75209 }
75210
75211 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
75212 if (differ) {
75213 BV_SET(fields, 2);
75214 }
75215
75217 if (!differ) {
75218 int i;
75219
75220 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
75221 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
75222 if (differ) {
75223 break;
75224 }
75225 }
75226 }
75227 if (differ) {
75228 BV_SET(fields, 3);
75229 }
75230
75231 differ = (old->frequency != real_packet->frequency);
75232 if (differ) {
75233 BV_SET(fields, 4);
75234 }
75235
75236 differ = !BV_ARE_EQUAL(old->effects, real_packet->effects);
75237 if (differ) {
75238 BV_SET(fields, 5);
75239 }
75240#endif /* FREECIV_DELTA_PROTOCOL */
75241
75242#ifdef FREECIV_JSON_CONNECTION
75243 struct plocation field_addr;
75244 {
75245 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75248 }
75249#endif /* FREECIV_JSON_CONNECTION */
75250
75251#ifdef FREECIV_DELTA_PROTOCOL
75252#ifdef FREECIV_JSON_CONNECTION
75253 field_addr.name = "fields";
75254#endif /* FREECIV_JSON_CONNECTION */
75255 e = 0;
75256 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75257 if (e) {
75258 log_packet_detailed("fields bitvector error detected");
75259 }
75260
75261 if (BV_ISSET(fields, 0)) {
75262 log_packet_detailed(" field 'id' has changed");
75263
75264#ifdef FREECIV_JSON_CONNECTION
75265 field_addr.name = "id";
75266#endif /* FREECIV_JSON_CONNECTION */
75267 e = 0;
75268
75269 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75270
75271 if (e) {
75272 log_packet_detailed("'id' field error detected");
75273 }
75274 }
75275
75276 if (BV_ISSET(fields, 1)) {
75277 log_packet_detailed(" field 'name' has changed");
75278
75279#ifdef FREECIV_JSON_CONNECTION
75280 field_addr.name = "name";
75281#endif /* FREECIV_JSON_CONNECTION */
75282 e = 0;
75283
75284 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75285
75286 if (e) {
75287 log_packet_detailed("'name' field error detected");
75288 }
75289 }
75290
75291 if (BV_ISSET(fields, 2)) {
75292 log_packet_detailed(" field 'rule_name' has changed");
75293
75294#ifdef FREECIV_JSON_CONNECTION
75295 field_addr.name = "rule_name";
75296#endif /* FREECIV_JSON_CONNECTION */
75297 e = 0;
75298
75299 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75300
75301 if (e) {
75302 log_packet_detailed("'rule_name' field error detected");
75303 }
75304 }
75305
75306 if (BV_ISSET(fields, 3)) {
75307 log_packet_detailed(" field 'reqs' has changed");
75308
75309#ifdef FREECIV_JSON_CONNECTION
75310 field_addr.name = "reqs";
75311#endif /* FREECIV_JSON_CONNECTION */
75312 e = 0;
75313
75314 {
75315 int i;
75316
75319
75320#ifdef FREECIV_JSON_CONNECTION
75321 /* Enter array. */
75322 field_addr.sub_location = plocation_elem_new(0);
75323#endif /* FREECIV_JSON_CONNECTION */
75324
75325 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
75326#ifdef FREECIV_JSON_CONNECTION
75327 /* Next array element. */
75328 field_addr.sub_location->number = i;
75329#endif /* FREECIV_JSON_CONNECTION */
75330
75331 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
75332 }
75333
75334#ifdef FREECIV_JSON_CONNECTION
75335 /* Exit array. */
75336 FC_FREE(field_addr.sub_location);
75337#endif /* FREECIV_JSON_CONNECTION */
75338 }
75339
75340 if (e) {
75341 log_packet_detailed("'reqs' field error detected");
75342 }
75343 }
75344
75345 if (BV_ISSET(fields, 4)) {
75346 log_packet_detailed(" field 'frequency' has changed");
75347
75348#ifdef FREECIV_JSON_CONNECTION
75349 field_addr.name = "frequency";
75350#endif /* FREECIV_JSON_CONNECTION */
75351 e = 0;
75352
75353 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
75354
75355 if (e) {
75356 log_packet_detailed("'frequency' field error detected");
75357 }
75358 }
75359
75360 if (BV_ISSET(fields, 5)) {
75361 log_packet_detailed(" field 'effects' has changed");
75362
75363#ifdef FREECIV_JSON_CONNECTION
75364 field_addr.name = "effects";
75365#endif /* FREECIV_JSON_CONNECTION */
75366 e = 0;
75367
75368 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
75369
75370 if (e) {
75371 log_packet_detailed("'effects' field error detected");
75372 }
75373 }
75374
75375 old->id = real_packet->id;
75376 sz_strlcpy(old->name, real_packet->name);
75377 sz_strlcpy(old->rule_name, real_packet->rule_name);
75378 requirement_vector_copy(&old->reqs, &real_packet->reqs);
75379 old->frequency = real_packet->frequency;
75380 old->effects = real_packet->effects;
75381
75382#else /* FREECIV_DELTA_PROTOCOL */
75383#ifdef FREECIV_JSON_CONNECTION
75384 field_addr.name = "id";
75385#endif /* FREECIV_JSON_CONNECTION */
75386 e = 0;
75387
75388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75389
75390 if (e) {
75391 log_packet_detailed("'id' field error detected");
75392 }
75393
75394#ifdef FREECIV_JSON_CONNECTION
75395 field_addr.name = "name";
75396#endif /* FREECIV_JSON_CONNECTION */
75397 e = 0;
75398
75399 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75400
75401 if (e) {
75402 log_packet_detailed("'name' field error detected");
75403 }
75404
75405#ifdef FREECIV_JSON_CONNECTION
75406 field_addr.name = "rule_name";
75407#endif /* FREECIV_JSON_CONNECTION */
75408 e = 0;
75409
75410 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75411
75412 if (e) {
75413 log_packet_detailed("'rule_name' field error detected");
75414 }
75415
75416#ifdef FREECIV_JSON_CONNECTION
75417 field_addr.name = "reqs";
75418#endif /* FREECIV_JSON_CONNECTION */
75419 e = 0;
75420
75421 {
75422 int i;
75423
75426
75427#ifdef FREECIV_JSON_CONNECTION
75428 /* Enter array. */
75429 field_addr.sub_location = plocation_elem_new(0);
75430#endif /* FREECIV_JSON_CONNECTION */
75431
75432 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
75433#ifdef FREECIV_JSON_CONNECTION
75434 /* Next array element. */
75435 field_addr.sub_location->number = i;
75436#endif /* FREECIV_JSON_CONNECTION */
75437
75438 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
75439 }
75440
75441#ifdef FREECIV_JSON_CONNECTION
75442 /* Exit array. */
75443 FC_FREE(field_addr.sub_location);
75444#endif /* FREECIV_JSON_CONNECTION */
75445 }
75446
75447 if (e) {
75448 log_packet_detailed("'reqs' field error detected");
75449 }
75450
75451#ifdef FREECIV_JSON_CONNECTION
75452 field_addr.name = "frequency";
75453#endif /* FREECIV_JSON_CONNECTION */
75454 e = 0;
75455
75456 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
75457
75458 if (e) {
75459 log_packet_detailed("'frequency' field error detected");
75460 }
75461
75462#ifdef FREECIV_JSON_CONNECTION
75463 field_addr.name = "effects";
75464#endif /* FREECIV_JSON_CONNECTION */
75465 e = 0;
75466
75467 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
75468
75469 if (e) {
75470 log_packet_detailed("'effects' field error detected");
75471 }
75472#endif /* FREECIV_DELTA_PROTOCOL */
75473
75475}
75476
75478{
75479 if (!pc->used) {
75480 log_error("WARNING: trying to send data to the closed connection %s",
75482 return -1;
75483 }
75484 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet != nullptr, -1,
75485 "Handler for PACKET_RULESET_DISASTER not installed");
75486 return pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet(pc, packet);
75487}
75488
75490{
75491 conn_list_iterate(dest, pconn) {
75494}
75495
75497{
75498 memset(packet, 0, sizeof(*packet));
75499}
75500
75501#define free_packet_ruleset_achievement(_packet) (void) 0
75502#define destroy_packet_ruleset_achievement free
75503
75504#ifdef FREECIV_DELTA_PROTOCOL
75505#define hash_packet_ruleset_achievement_100 hash_const
75506#define cmp_packet_ruleset_achievement_100 cmp_const
75508#endif /* FREECIV_DELTA_PROTOCOL */
75509
75511{
75512#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_achievement(_packet)
75514
75515#ifdef FREECIV_JSON_CONNECTION
75516 struct plocation field_addr;
75517 {
75518 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75521 }
75522#endif /* FREECIV_JSON_CONNECTION */
75523
75524 log_packet_detailed("packet_ruleset_achievement_100: got info about ()");
75525
75526#ifdef FREECIV_DELTA_PROTOCOL
75529 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACHIEVEMENT;
75530
75531 if (nullptr == *hash) {
75533 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75534 }
75535
75536 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75537 *real_packet = *old;
75538 } else {
75539 /* packet is already initialized empty */
75540 log_packet_detailed(" no old info");
75541 }
75542
75543#ifdef FREECIV_JSON_CONNECTION
75544 field_addr.name = "fields";
75545#endif /* FREECIV_JSON_CONNECTION */
75546 DIO_BV_GET(&din, &field_addr, fields);
75547
75548 if (BV_ISSET(fields, 0)) {
75549 log_packet_detailed(" got field 'id'");
75550
75551#ifdef FREECIV_JSON_CONNECTION
75552 field_addr.name = "id";
75553#endif /* FREECIV_JSON_CONNECTION */
75554
75555 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75557 }
75558 }
75559
75560 if (BV_ISSET(fields, 1)) {
75561 log_packet_detailed(" got field 'name'");
75562
75563#ifdef FREECIV_JSON_CONNECTION
75564 field_addr.name = "name";
75565#endif /* FREECIV_JSON_CONNECTION */
75566
75567 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75569 }
75570 }
75571
75572 if (BV_ISSET(fields, 2)) {
75573 log_packet_detailed(" got field 'rule_name'");
75574
75575#ifdef FREECIV_JSON_CONNECTION
75576 field_addr.name = "rule_name";
75577#endif /* FREECIV_JSON_CONNECTION */
75578
75579 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75580 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75581 }
75582 }
75583
75584 if (BV_ISSET(fields, 3)) {
75585 log_packet_detailed(" got field 'type'");
75586
75587#ifdef FREECIV_JSON_CONNECTION
75588 field_addr.name = "type";
75589#endif /* FREECIV_JSON_CONNECTION */
75590
75591 {
75592 int readin;
75593
75594 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75596 }
75597 real_packet->type = readin;
75598 }
75599 }
75600
75601 real_packet->unique = BV_ISSET(fields, 4);
75602
75603 if (BV_ISSET(fields, 5)) {
75604 log_packet_detailed(" got field 'value'");
75605
75606#ifdef FREECIV_JSON_CONNECTION
75607 field_addr.name = "value";
75608#endif /* FREECIV_JSON_CONNECTION */
75609
75610 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75612 }
75613 }
75614
75615 if (nullptr == old) {
75616 old = fc_malloc(sizeof(*old));
75618 *old = *real_packet;
75620 } else {
75621 *old = *real_packet;
75622 }
75623
75624#else /* FREECIV_DELTA_PROTOCOL */
75625#ifdef FREECIV_JSON_CONNECTION
75626 field_addr.name = "id";
75627#endif /* FREECIV_JSON_CONNECTION */
75628
75629 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75631 }
75632
75633#ifdef FREECIV_JSON_CONNECTION
75634 field_addr.name = "name";
75635#endif /* FREECIV_JSON_CONNECTION */
75636
75637 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75639 }
75640
75641#ifdef FREECIV_JSON_CONNECTION
75642 field_addr.name = "rule_name";
75643#endif /* FREECIV_JSON_CONNECTION */
75644
75645 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75646 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75647 }
75648
75649#ifdef FREECIV_JSON_CONNECTION
75650 field_addr.name = "type";
75651#endif /* FREECIV_JSON_CONNECTION */
75652
75653 {
75654 int readin;
75655
75656 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75658 }
75659 real_packet->type = readin;
75660 }
75661
75662#ifdef FREECIV_JSON_CONNECTION
75663 field_addr.name = "unique";
75664#endif /* FREECIV_JSON_CONNECTION */
75665
75666 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unique)) {
75668 }
75669
75670#ifdef FREECIV_JSON_CONNECTION
75671 field_addr.name = "value";
75672#endif /* FREECIV_JSON_CONNECTION */
75673
75674 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75676 }
75677#endif /* FREECIV_DELTA_PROTOCOL */
75678
75680#undef FREE_PACKET_STRUCT
75681}
75682
75684{
75685 const struct packet_ruleset_achievement *real_packet = packet;
75686 int e;
75688
75689 log_packet_detailed("packet_ruleset_achievement_100: sending info about ()");
75690
75691#ifdef FREECIV_DELTA_PROTOCOL
75694 bool differ;
75695 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACHIEVEMENT;
75696
75697 if (nullptr == *hash) {
75699 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75700 }
75701 BV_CLR_ALL(fields);
75702
75703 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75704 old = fc_malloc(sizeof(*old));
75705 /* temporary bitcopy just to insert correctly */
75706 *old = *real_packet;
75709 }
75710
75711 differ = (old->id != real_packet->id);
75712 if (differ) {
75713 BV_SET(fields, 0);
75714 }
75715
75716 differ = (strcmp(old->name, real_packet->name) != 0);
75717 if (differ) {
75718 BV_SET(fields, 1);
75719 }
75720
75721 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
75722 if (differ) {
75723 BV_SET(fields, 2);
75724 }
75725
75726 differ = (old->type != real_packet->type);
75727 if (differ) {
75728 BV_SET(fields, 3);
75729 }
75730
75731 /* folded into head */
75732 if (real_packet->unique) {
75733 BV_SET(fields, 4);
75734 }
75735
75736 differ = (old->value != real_packet->value);
75737 if (differ) {
75738 BV_SET(fields, 5);
75739 }
75740#endif /* FREECIV_DELTA_PROTOCOL */
75741
75742#ifdef FREECIV_JSON_CONNECTION
75743 struct plocation field_addr;
75744 {
75745 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75748 }
75749#endif /* FREECIV_JSON_CONNECTION */
75750
75751#ifdef FREECIV_DELTA_PROTOCOL
75752#ifdef FREECIV_JSON_CONNECTION
75753 field_addr.name = "fields";
75754#endif /* FREECIV_JSON_CONNECTION */
75755 e = 0;
75756 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75757 if (e) {
75758 log_packet_detailed("fields bitvector error detected");
75759 }
75760
75761 if (BV_ISSET(fields, 0)) {
75762 log_packet_detailed(" field 'id' has changed");
75763
75764#ifdef FREECIV_JSON_CONNECTION
75765 field_addr.name = "id";
75766#endif /* FREECIV_JSON_CONNECTION */
75767 e = 0;
75768
75769 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75770
75771 if (e) {
75772 log_packet_detailed("'id' field error detected");
75773 }
75774 }
75775
75776 if (BV_ISSET(fields, 1)) {
75777 log_packet_detailed(" field 'name' has changed");
75778
75779#ifdef FREECIV_JSON_CONNECTION
75780 field_addr.name = "name";
75781#endif /* FREECIV_JSON_CONNECTION */
75782 e = 0;
75783
75784 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75785
75786 if (e) {
75787 log_packet_detailed("'name' field error detected");
75788 }
75789 }
75790
75791 if (BV_ISSET(fields, 2)) {
75792 log_packet_detailed(" field 'rule_name' has changed");
75793
75794#ifdef FREECIV_JSON_CONNECTION
75795 field_addr.name = "rule_name";
75796#endif /* FREECIV_JSON_CONNECTION */
75797 e = 0;
75798
75799 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75800
75801 if (e) {
75802 log_packet_detailed("'rule_name' field error detected");
75803 }
75804 }
75805
75806 if (BV_ISSET(fields, 3)) {
75807 log_packet_detailed(" field 'type' has changed");
75808
75809#ifdef FREECIV_JSON_CONNECTION
75810 field_addr.name = "type";
75811#endif /* FREECIV_JSON_CONNECTION */
75812 e = 0;
75813
75814 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75815
75816 if (e) {
75817 log_packet_detailed("'type' field error detected");
75818 }
75819 }
75820
75821 /* field 4 is folded into the header */
75822
75823 if (BV_ISSET(fields, 5)) {
75824 log_packet_detailed(" field 'value' has changed");
75825
75826#ifdef FREECIV_JSON_CONNECTION
75827 field_addr.name = "value";
75828#endif /* FREECIV_JSON_CONNECTION */
75829 e = 0;
75830
75831 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75832
75833 if (e) {
75834 log_packet_detailed("'value' field error detected");
75835 }
75836 }
75837
75838 *old = *real_packet;
75839
75840#else /* FREECIV_DELTA_PROTOCOL */
75841#ifdef FREECIV_JSON_CONNECTION
75842 field_addr.name = "id";
75843#endif /* FREECIV_JSON_CONNECTION */
75844 e = 0;
75845
75846 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75847
75848 if (e) {
75849 log_packet_detailed("'id' field error detected");
75850 }
75851
75852#ifdef FREECIV_JSON_CONNECTION
75853 field_addr.name = "name";
75854#endif /* FREECIV_JSON_CONNECTION */
75855 e = 0;
75856
75857 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75858
75859 if (e) {
75860 log_packet_detailed("'name' field error detected");
75861 }
75862
75863#ifdef FREECIV_JSON_CONNECTION
75864 field_addr.name = "rule_name";
75865#endif /* FREECIV_JSON_CONNECTION */
75866 e = 0;
75867
75868 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75869
75870 if (e) {
75871 log_packet_detailed("'rule_name' field error detected");
75872 }
75873
75874#ifdef FREECIV_JSON_CONNECTION
75875 field_addr.name = "type";
75876#endif /* FREECIV_JSON_CONNECTION */
75877 e = 0;
75878
75879 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75880
75881 if (e) {
75882 log_packet_detailed("'type' field error detected");
75883 }
75884
75885#ifdef FREECIV_JSON_CONNECTION
75886 field_addr.name = "unique";
75887#endif /* FREECIV_JSON_CONNECTION */
75888 e = 0;
75889
75890 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unique);
75891
75892 if (e) {
75893 log_packet_detailed("'unique' field error detected");
75894 }
75895
75896#ifdef FREECIV_JSON_CONNECTION
75897 field_addr.name = "value";
75898#endif /* FREECIV_JSON_CONNECTION */
75899 e = 0;
75900
75901 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75902
75903 if (e) {
75904 log_packet_detailed("'value' field error detected");
75905 }
75906#endif /* FREECIV_DELTA_PROTOCOL */
75907
75909}
75910
75912{
75913 if (!pc->used) {
75914 log_error("WARNING: trying to send data to the closed connection %s",
75916 return -1;
75917 }
75918 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet != nullptr, -1,
75919 "Handler for PACKET_RULESET_ACHIEVEMENT not installed");
75920 return pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet(pc, packet);
75921}
75922
75924{
75925 conn_list_iterate(dest, pconn) {
75928}
75929
75930static inline void init_packet_ruleset_trade(struct packet_ruleset_trade *packet)
75931{
75932 memset(packet, 0, sizeof(*packet));
75933}
75934
75935#define free_packet_ruleset_trade(_packet) (void) 0
75936#define destroy_packet_ruleset_trade free
75937
75938#ifdef FREECIV_DELTA_PROTOCOL
75939#define hash_packet_ruleset_trade_100 hash_const
75940#define cmp_packet_ruleset_trade_100 cmp_const
75942#endif /* FREECIV_DELTA_PROTOCOL */
75943
75945{
75946#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_trade(_packet)
75948
75949#ifdef FREECIV_JSON_CONNECTION
75950 struct plocation field_addr;
75951 {
75952 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75955 }
75956#endif /* FREECIV_JSON_CONNECTION */
75957
75958 log_packet_detailed("packet_ruleset_trade_100: got info about ()");
75959
75960#ifdef FREECIV_DELTA_PROTOCOL
75962 struct packet_ruleset_trade *old;
75963 struct genhash **hash = pc->phs.received + PACKET_RULESET_TRADE;
75964
75965 if (nullptr == *hash) {
75967 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
75968 }
75969
75970 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75971 *real_packet = *old;
75972 } else {
75973 /* packet is already initialized empty */
75974 log_packet_detailed(" no old info");
75975 }
75976
75977#ifdef FREECIV_JSON_CONNECTION
75978 field_addr.name = "fields";
75979#endif /* FREECIV_JSON_CONNECTION */
75980 DIO_BV_GET(&din, &field_addr, fields);
75981
75982 if (BV_ISSET(fields, 0)) {
75983 log_packet_detailed(" got field 'id'");
75984
75985#ifdef FREECIV_JSON_CONNECTION
75986 field_addr.name = "id";
75987#endif /* FREECIV_JSON_CONNECTION */
75988
75989 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75991 }
75992 }
75993
75994 if (BV_ISSET(fields, 1)) {
75995 log_packet_detailed(" got field 'trade_pct'");
75996
75997#ifdef FREECIV_JSON_CONNECTION
75998 field_addr.name = "trade_pct";
75999#endif /* FREECIV_JSON_CONNECTION */
76000
76001 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
76002 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
76003 }
76004 }
76005
76006 if (BV_ISSET(fields, 2)) {
76007 log_packet_detailed(" got field 'cancelling'");
76008
76009#ifdef FREECIV_JSON_CONNECTION
76010 field_addr.name = "cancelling";
76011#endif /* FREECIV_JSON_CONNECTION */
76012
76013 {
76014 int readin;
76015
76016 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76017 RECEIVE_PACKET_FIELD_ERROR(cancelling);
76018 }
76019 real_packet->cancelling = readin;
76020 }
76021 }
76022
76023 if (BV_ISSET(fields, 3)) {
76024 log_packet_detailed(" got field 'bonus_type'");
76025
76026#ifdef FREECIV_JSON_CONNECTION
76027 field_addr.name = "bonus_type";
76028#endif /* FREECIV_JSON_CONNECTION */
76029
76030 {
76031 int readin;
76032
76033 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76034 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
76035 }
76036 real_packet->bonus_type = readin;
76037 }
76038 }
76039
76040 if (nullptr == old) {
76041 old = fc_malloc(sizeof(*old));
76043 *old = *real_packet;
76045 } else {
76046 *old = *real_packet;
76047 }
76048
76049#else /* FREECIV_DELTA_PROTOCOL */
76050#ifdef FREECIV_JSON_CONNECTION
76051 field_addr.name = "id";
76052#endif /* FREECIV_JSON_CONNECTION */
76053
76054 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
76056 }
76057
76058#ifdef FREECIV_JSON_CONNECTION
76059 field_addr.name = "trade_pct";
76060#endif /* FREECIV_JSON_CONNECTION */
76061
76062 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
76063 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
76064 }
76065
76066#ifdef FREECIV_JSON_CONNECTION
76067 field_addr.name = "cancelling";
76068#endif /* FREECIV_JSON_CONNECTION */
76069
76070 {
76071 int readin;
76072
76073 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76074 RECEIVE_PACKET_FIELD_ERROR(cancelling);
76075 }
76076 real_packet->cancelling = readin;
76077 }
76078
76079#ifdef FREECIV_JSON_CONNECTION
76080 field_addr.name = "bonus_type";
76081#endif /* FREECIV_JSON_CONNECTION */
76082
76083 {
76084 int readin;
76085
76086 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76087 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
76088 }
76089 real_packet->bonus_type = readin;
76090 }
76091#endif /* FREECIV_DELTA_PROTOCOL */
76092
76094#undef FREE_PACKET_STRUCT
76095}
76096
76097static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
76098{
76099 const struct packet_ruleset_trade *real_packet = packet;
76100 int e;
76102
76103 log_packet_detailed("packet_ruleset_trade_100: sending info about ()");
76104
76105#ifdef FREECIV_DELTA_PROTOCOL
76107 struct packet_ruleset_trade *old;
76108 bool differ;
76109 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TRADE;
76110
76111 if (nullptr == *hash) {
76113 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
76114 }
76115 BV_CLR_ALL(fields);
76116
76117 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76118 old = fc_malloc(sizeof(*old));
76119 /* temporary bitcopy just to insert correctly */
76120 *old = *real_packet;
76123 }
76124
76125 differ = (old->id != real_packet->id);
76126 if (differ) {
76127 BV_SET(fields, 0);
76128 }
76129
76130 differ = (old->trade_pct != real_packet->trade_pct);
76131 if (differ) {
76132 BV_SET(fields, 1);
76133 }
76134
76135 differ = (old->cancelling != real_packet->cancelling);
76136 if (differ) {
76137 BV_SET(fields, 2);
76138 }
76139
76140 differ = (old->bonus_type != real_packet->bonus_type);
76141 if (differ) {
76142 BV_SET(fields, 3);
76143 }
76144#endif /* FREECIV_DELTA_PROTOCOL */
76145
76146#ifdef FREECIV_JSON_CONNECTION
76147 struct plocation field_addr;
76148 {
76149 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76152 }
76153#endif /* FREECIV_JSON_CONNECTION */
76154
76155#ifdef FREECIV_DELTA_PROTOCOL
76156#ifdef FREECIV_JSON_CONNECTION
76157 field_addr.name = "fields";
76158#endif /* FREECIV_JSON_CONNECTION */
76159 e = 0;
76160 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76161 if (e) {
76162 log_packet_detailed("fields bitvector error detected");
76163 }
76164
76165 if (BV_ISSET(fields, 0)) {
76166 log_packet_detailed(" field 'id' has changed");
76167
76168#ifdef FREECIV_JSON_CONNECTION
76169 field_addr.name = "id";
76170#endif /* FREECIV_JSON_CONNECTION */
76171 e = 0;
76172
76173 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76174
76175 if (e) {
76176 log_packet_detailed("'id' field error detected");
76177 }
76178 }
76179
76180 if (BV_ISSET(fields, 1)) {
76181 log_packet_detailed(" field 'trade_pct' has changed");
76182
76183#ifdef FREECIV_JSON_CONNECTION
76184 field_addr.name = "trade_pct";
76185#endif /* FREECIV_JSON_CONNECTION */
76186 e = 0;
76187
76188 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
76189
76190 if (e) {
76191 log_packet_detailed("'trade_pct' field error detected");
76192 }
76193 }
76194
76195 if (BV_ISSET(fields, 2)) {
76196 log_packet_detailed(" field 'cancelling' has changed");
76197
76198#ifdef FREECIV_JSON_CONNECTION
76199 field_addr.name = "cancelling";
76200#endif /* FREECIV_JSON_CONNECTION */
76201 e = 0;
76202
76203 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
76204
76205 if (e) {
76206 log_packet_detailed("'cancelling' field error detected");
76207 }
76208 }
76209
76210 if (BV_ISSET(fields, 3)) {
76211 log_packet_detailed(" field 'bonus_type' has changed");
76212
76213#ifdef FREECIV_JSON_CONNECTION
76214 field_addr.name = "bonus_type";
76215#endif /* FREECIV_JSON_CONNECTION */
76216 e = 0;
76217
76218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
76219
76220 if (e) {
76221 log_packet_detailed("'bonus_type' field error detected");
76222 }
76223 }
76224
76225 *old = *real_packet;
76226
76227#else /* FREECIV_DELTA_PROTOCOL */
76228#ifdef FREECIV_JSON_CONNECTION
76229 field_addr.name = "id";
76230#endif /* FREECIV_JSON_CONNECTION */
76231 e = 0;
76232
76233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76234
76235 if (e) {
76236 log_packet_detailed("'id' field error detected");
76237 }
76238
76239#ifdef FREECIV_JSON_CONNECTION
76240 field_addr.name = "trade_pct";
76241#endif /* FREECIV_JSON_CONNECTION */
76242 e = 0;
76243
76244 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
76245
76246 if (e) {
76247 log_packet_detailed("'trade_pct' field error detected");
76248 }
76249
76250#ifdef FREECIV_JSON_CONNECTION
76251 field_addr.name = "cancelling";
76252#endif /* FREECIV_JSON_CONNECTION */
76253 e = 0;
76254
76255 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
76256
76257 if (e) {
76258 log_packet_detailed("'cancelling' field error detected");
76259 }
76260
76261#ifdef FREECIV_JSON_CONNECTION
76262 field_addr.name = "bonus_type";
76263#endif /* FREECIV_JSON_CONNECTION */
76264 e = 0;
76265
76266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
76267
76268 if (e) {
76269 log_packet_detailed("'bonus_type' field error detected");
76270 }
76271#endif /* FREECIV_DELTA_PROTOCOL */
76272
76274}
76275
76277{
76278 if (!pc->used) {
76279 log_error("WARNING: trying to send data to the closed connection %s",
76281 return -1;
76282 }
76283 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TRADE].packet != nullptr, -1,
76284 "Handler for PACKET_RULESET_TRADE not installed");
76285 return pc->phs.handlers->send[PACKET_RULESET_TRADE].packet(pc, packet);
76286}
76287
76288void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
76289{
76290 conn_list_iterate(dest, pconn) {
76293}
76294
76295static inline void init_packet_ruleset_action(struct packet_ruleset_action *packet)
76296{
76297 memset(packet, 0, sizeof(*packet));
76298}
76299
76300#define free_packet_ruleset_action(_packet) (void) 0
76301#define destroy_packet_ruleset_action free
76302
76303#ifdef FREECIV_DELTA_PROTOCOL
76304#define hash_packet_ruleset_action_100 hash_const
76305#define cmp_packet_ruleset_action_100 cmp_const
76307#endif /* FREECIV_DELTA_PROTOCOL */
76308
76310{
76311#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action(_packet)
76313
76314#ifdef FREECIV_JSON_CONNECTION
76315 struct plocation field_addr;
76316 {
76317 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76320 }
76321#endif /* FREECIV_JSON_CONNECTION */
76322
76323 log_packet_detailed("packet_ruleset_action_100: got info about ()");
76324
76325#ifdef FREECIV_DELTA_PROTOCOL
76327 struct packet_ruleset_action *old;
76328 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION;
76329
76330 if (nullptr == *hash) {
76332 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
76333 }
76334
76335 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76336 *real_packet = *old;
76337 } else {
76338 /* packet is already initialized empty */
76339 log_packet_detailed(" no old info");
76340 }
76341
76342#ifdef FREECIV_JSON_CONNECTION
76343 field_addr.name = "fields";
76344#endif /* FREECIV_JSON_CONNECTION */
76345 DIO_BV_GET(&din, &field_addr, fields);
76346
76347 if (BV_ISSET(fields, 0)) {
76348 log_packet_detailed(" got field 'id'");
76349
76350#ifdef FREECIV_JSON_CONNECTION
76351 field_addr.name = "id";
76352#endif /* FREECIV_JSON_CONNECTION */
76353
76354 {
76355 int readin;
76356
76357 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76359 }
76360 real_packet->id = readin;
76361 }
76362 }
76363
76364 if (BV_ISSET(fields, 1)) {
76365 log_packet_detailed(" got field 'ui_name'");
76366
76367#ifdef FREECIV_JSON_CONNECTION
76368 field_addr.name = "ui_name";
76369#endif /* FREECIV_JSON_CONNECTION */
76370
76371 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
76373 }
76374 }
76375
76376 real_packet->quiet = BV_ISSET(fields, 2);
76377
76378 if (BV_ISSET(fields, 3)) {
76379 log_packet_detailed(" got field 'result'");
76380
76381#ifdef FREECIV_JSON_CONNECTION
76382 field_addr.name = "result";
76383#endif /* FREECIV_JSON_CONNECTION */
76384
76385 {
76386 int readin;
76387
76388 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76390 }
76391 real_packet->result = readin;
76392 }
76393 }
76394
76395 if (BV_ISSET(fields, 4)) {
76396 log_packet_detailed(" got field 'sub_results'");
76397
76398#ifdef FREECIV_JSON_CONNECTION
76399 field_addr.name = "sub_results";
76400#endif /* FREECIV_JSON_CONNECTION */
76401
76402 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
76403 RECEIVE_PACKET_FIELD_ERROR(sub_results);
76404 }
76405 }
76406
76407 real_packet->actor_consuming_always = BV_ISSET(fields, 5);
76408
76409 if (BV_ISSET(fields, 6)) {
76410 log_packet_detailed(" got field 'act_kind'");
76411
76412#ifdef FREECIV_JSON_CONNECTION
76413 field_addr.name = "act_kind";
76414#endif /* FREECIV_JSON_CONNECTION */
76415
76416 {
76417 int readin;
76418
76419 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76421 }
76422 real_packet->act_kind = readin;
76423 }
76424 }
76425
76426 if (BV_ISSET(fields, 7)) {
76427 log_packet_detailed(" got field 'tgt_kind'");
76428
76429#ifdef FREECIV_JSON_CONNECTION
76430 field_addr.name = "tgt_kind";
76431#endif /* FREECIV_JSON_CONNECTION */
76432
76433 {
76434 int readin;
76435
76436 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76438 }
76439 real_packet->tgt_kind = readin;
76440 }
76441 }
76442
76443 if (BV_ISSET(fields, 8)) {
76444 log_packet_detailed(" got field 'sub_tgt_kind'");
76445
76446#ifdef FREECIV_JSON_CONNECTION
76447 field_addr.name = "sub_tgt_kind";
76448#endif /* FREECIV_JSON_CONNECTION */
76449
76450 {
76451 int readin;
76452
76453 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76454 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
76455 }
76456 real_packet->sub_tgt_kind = readin;
76457 }
76458 }
76459
76460 if (BV_ISSET(fields, 9)) {
76461 log_packet_detailed(" got field 'min_distance'");
76462
76463#ifdef FREECIV_JSON_CONNECTION
76464 field_addr.name = "min_distance";
76465#endif /* FREECIV_JSON_CONNECTION */
76466
76467 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
76468 RECEIVE_PACKET_FIELD_ERROR(min_distance);
76469 }
76470 }
76471
76472 if (BV_ISSET(fields, 10)) {
76473 log_packet_detailed(" got field 'max_distance'");
76474
76475#ifdef FREECIV_JSON_CONNECTION
76476 field_addr.name = "max_distance";
76477#endif /* FREECIV_JSON_CONNECTION */
76478
76479 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76480 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76481 }
76482 }
76483
76484 if (BV_ISSET(fields, 11)) {
76485 log_packet_detailed(" got field 'blocked_by'");
76486
76487#ifdef FREECIV_JSON_CONNECTION
76488 field_addr.name = "blocked_by";
76489#endif /* FREECIV_JSON_CONNECTION */
76490
76491 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76492 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76493 }
76494 }
76495
76496 if (nullptr == old) {
76497 old = fc_malloc(sizeof(*old));
76499 *old = *real_packet;
76501 } else {
76502 *old = *real_packet;
76503 }
76504
76505#else /* FREECIV_DELTA_PROTOCOL */
76506#ifdef FREECIV_JSON_CONNECTION
76507 field_addr.name = "id";
76508#endif /* FREECIV_JSON_CONNECTION */
76509
76510 {
76511 int readin;
76512
76513 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76515 }
76516 real_packet->id = readin;
76517 }
76518
76519#ifdef FREECIV_JSON_CONNECTION
76520 field_addr.name = "ui_name";
76521#endif /* FREECIV_JSON_CONNECTION */
76522
76523 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
76525 }
76526
76527#ifdef FREECIV_JSON_CONNECTION
76528 field_addr.name = "quiet";
76529#endif /* FREECIV_JSON_CONNECTION */
76530
76531 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
76533 }
76534
76535#ifdef FREECIV_JSON_CONNECTION
76536 field_addr.name = "result";
76537#endif /* FREECIV_JSON_CONNECTION */
76538
76539 {
76540 int readin;
76541
76542 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76544 }
76545 real_packet->result = readin;
76546 }
76547
76548#ifdef FREECIV_JSON_CONNECTION
76549 field_addr.name = "sub_results";
76550#endif /* FREECIV_JSON_CONNECTION */
76551
76552 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
76553 RECEIVE_PACKET_FIELD_ERROR(sub_results);
76554 }
76555
76556#ifdef FREECIV_JSON_CONNECTION
76557 field_addr.name = "actor_consuming_always";
76558#endif /* FREECIV_JSON_CONNECTION */
76559
76560 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->actor_consuming_always)) {
76561 RECEIVE_PACKET_FIELD_ERROR(actor_consuming_always);
76562 }
76563
76564#ifdef FREECIV_JSON_CONNECTION
76565 field_addr.name = "act_kind";
76566#endif /* FREECIV_JSON_CONNECTION */
76567
76568 {
76569 int readin;
76570
76571 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76573 }
76574 real_packet->act_kind = readin;
76575 }
76576
76577#ifdef FREECIV_JSON_CONNECTION
76578 field_addr.name = "tgt_kind";
76579#endif /* FREECIV_JSON_CONNECTION */
76580
76581 {
76582 int readin;
76583
76584 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76586 }
76587 real_packet->tgt_kind = readin;
76588 }
76589
76590#ifdef FREECIV_JSON_CONNECTION
76591 field_addr.name = "sub_tgt_kind";
76592#endif /* FREECIV_JSON_CONNECTION */
76593
76594 {
76595 int readin;
76596
76597 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76598 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
76599 }
76600 real_packet->sub_tgt_kind = readin;
76601 }
76602
76603#ifdef FREECIV_JSON_CONNECTION
76604 field_addr.name = "min_distance";
76605#endif /* FREECIV_JSON_CONNECTION */
76606
76607 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
76608 RECEIVE_PACKET_FIELD_ERROR(min_distance);
76609 }
76610
76611#ifdef FREECIV_JSON_CONNECTION
76612 field_addr.name = "max_distance";
76613#endif /* FREECIV_JSON_CONNECTION */
76614
76615 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76616 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76617 }
76618
76619#ifdef FREECIV_JSON_CONNECTION
76620 field_addr.name = "blocked_by";
76621#endif /* FREECIV_JSON_CONNECTION */
76622
76623 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76624 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76625 }
76626#endif /* FREECIV_DELTA_PROTOCOL */
76627
76629#undef FREE_PACKET_STRUCT
76630}
76631
76633{
76634 const struct packet_ruleset_action *real_packet = packet;
76635 int e;
76637
76638 log_packet_detailed("packet_ruleset_action_100: sending info about ()");
76639
76640#ifdef FREECIV_DELTA_PROTOCOL
76642 struct packet_ruleset_action *old;
76643 bool differ;
76644 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION;
76645
76646 if (nullptr == *hash) {
76648 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
76649 }
76650 BV_CLR_ALL(fields);
76651
76652 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76653 old = fc_malloc(sizeof(*old));
76654 /* temporary bitcopy just to insert correctly */
76655 *old = *real_packet;
76658 }
76659
76660 differ = (old->id != real_packet->id);
76661 if (differ) {
76662 BV_SET(fields, 0);
76663 }
76664
76665 differ = (strcmp(old->ui_name, real_packet->ui_name) != 0);
76666 if (differ) {
76667 BV_SET(fields, 1);
76668 }
76669
76670 /* folded into head */
76671 if (real_packet->quiet) {
76672 BV_SET(fields, 2);
76673 }
76674
76675 differ = (old->result != real_packet->result);
76676 if (differ) {
76677 BV_SET(fields, 3);
76678 }
76679
76680 differ = !BV_ARE_EQUAL(old->sub_results, real_packet->sub_results);
76681 if (differ) {
76682 BV_SET(fields, 4);
76683 }
76684
76685 /* folded into head */
76686 if (real_packet->actor_consuming_always) {
76687 BV_SET(fields, 5);
76688 }
76689
76690 differ = (old->act_kind != real_packet->act_kind);
76691 if (differ) {
76692 BV_SET(fields, 6);
76693 }
76694
76695 differ = (old->tgt_kind != real_packet->tgt_kind);
76696 if (differ) {
76697 BV_SET(fields, 7);
76698 }
76699
76700 differ = (old->sub_tgt_kind != real_packet->sub_tgt_kind);
76701 if (differ) {
76702 BV_SET(fields, 8);
76703 }
76704
76705 differ = (old->min_distance != real_packet->min_distance);
76706 if (differ) {
76707 BV_SET(fields, 9);
76708 }
76709
76710 differ = (old->max_distance != real_packet->max_distance);
76711 if (differ) {
76712 BV_SET(fields, 10);
76713 }
76714
76715 differ = !BV_ARE_EQUAL(old->blocked_by, real_packet->blocked_by);
76716 if (differ) {
76717 BV_SET(fields, 11);
76718 }
76719#endif /* FREECIV_DELTA_PROTOCOL */
76720
76721#ifdef FREECIV_JSON_CONNECTION
76722 struct plocation field_addr;
76723 {
76724 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76727 }
76728#endif /* FREECIV_JSON_CONNECTION */
76729
76730#ifdef FREECIV_DELTA_PROTOCOL
76731#ifdef FREECIV_JSON_CONNECTION
76732 field_addr.name = "fields";
76733#endif /* FREECIV_JSON_CONNECTION */
76734 e = 0;
76735 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76736 if (e) {
76737 log_packet_detailed("fields bitvector error detected");
76738 }
76739
76740 if (BV_ISSET(fields, 0)) {
76741 log_packet_detailed(" field 'id' has changed");
76742
76743#ifdef FREECIV_JSON_CONNECTION
76744 field_addr.name = "id";
76745#endif /* FREECIV_JSON_CONNECTION */
76746 e = 0;
76747
76748 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76749
76750 if (e) {
76751 log_packet_detailed("'id' field error detected");
76752 }
76753 }
76754
76755 if (BV_ISSET(fields, 1)) {
76756 log_packet_detailed(" field 'ui_name' has changed");
76757
76758#ifdef FREECIV_JSON_CONNECTION
76759 field_addr.name = "ui_name";
76760#endif /* FREECIV_JSON_CONNECTION */
76761 e = 0;
76762
76763 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76764
76765 if (e) {
76766 log_packet_detailed("'ui_name' field error detected");
76767 }
76768 }
76769
76770 /* field 2 is folded into the header */
76771
76772 if (BV_ISSET(fields, 3)) {
76773 log_packet_detailed(" field 'result' has changed");
76774
76775#ifdef FREECIV_JSON_CONNECTION
76776 field_addr.name = "result";
76777#endif /* FREECIV_JSON_CONNECTION */
76778 e = 0;
76779
76780 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76781
76782 if (e) {
76783 log_packet_detailed("'result' field error detected");
76784 }
76785 }
76786
76787 if (BV_ISSET(fields, 4)) {
76788 log_packet_detailed(" field 'sub_results' has changed");
76789
76790#ifdef FREECIV_JSON_CONNECTION
76791 field_addr.name = "sub_results";
76792#endif /* FREECIV_JSON_CONNECTION */
76793 e = 0;
76794
76795 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76796
76797 if (e) {
76798 log_packet_detailed("'sub_results' field error detected");
76799 }
76800 }
76801
76802 /* field 5 is folded into the header */
76803
76804 if (BV_ISSET(fields, 6)) {
76805 log_packet_detailed(" field 'act_kind' has changed");
76806
76807#ifdef FREECIV_JSON_CONNECTION
76808 field_addr.name = "act_kind";
76809#endif /* FREECIV_JSON_CONNECTION */
76810 e = 0;
76811
76812 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76813
76814 if (e) {
76815 log_packet_detailed("'act_kind' field error detected");
76816 }
76817 }
76818
76819 if (BV_ISSET(fields, 7)) {
76820 log_packet_detailed(" field 'tgt_kind' has changed");
76821
76822#ifdef FREECIV_JSON_CONNECTION
76823 field_addr.name = "tgt_kind";
76824#endif /* FREECIV_JSON_CONNECTION */
76825 e = 0;
76826
76827 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76828
76829 if (e) {
76830 log_packet_detailed("'tgt_kind' field error detected");
76831 }
76832 }
76833
76834 if (BV_ISSET(fields, 8)) {
76835 log_packet_detailed(" field 'sub_tgt_kind' has changed");
76836
76837#ifdef FREECIV_JSON_CONNECTION
76838 field_addr.name = "sub_tgt_kind";
76839#endif /* FREECIV_JSON_CONNECTION */
76840 e = 0;
76841
76842 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76843
76844 if (e) {
76845 log_packet_detailed("'sub_tgt_kind' field error detected");
76846 }
76847 }
76848
76849 if (BV_ISSET(fields, 9)) {
76850 log_packet_detailed(" field 'min_distance' has changed");
76851
76852#ifdef FREECIV_JSON_CONNECTION
76853 field_addr.name = "min_distance";
76854#endif /* FREECIV_JSON_CONNECTION */
76855 e = 0;
76856
76857 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
76858
76859 if (e) {
76860 log_packet_detailed("'min_distance' field error detected");
76861 }
76862 }
76863
76864 if (BV_ISSET(fields, 10)) {
76865 log_packet_detailed(" field 'max_distance' has changed");
76866
76867#ifdef FREECIV_JSON_CONNECTION
76868 field_addr.name = "max_distance";
76869#endif /* FREECIV_JSON_CONNECTION */
76870 e = 0;
76871
76872 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
76873
76874 if (e) {
76875 log_packet_detailed("'max_distance' field error detected");
76876 }
76877 }
76878
76879 if (BV_ISSET(fields, 11)) {
76880 log_packet_detailed(" field 'blocked_by' has changed");
76881
76882#ifdef FREECIV_JSON_CONNECTION
76883 field_addr.name = "blocked_by";
76884#endif /* FREECIV_JSON_CONNECTION */
76885 e = 0;
76886
76887 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
76888
76889 if (e) {
76890 log_packet_detailed("'blocked_by' field error detected");
76891 }
76892 }
76893
76894 *old = *real_packet;
76895
76896#else /* FREECIV_DELTA_PROTOCOL */
76897#ifdef FREECIV_JSON_CONNECTION
76898 field_addr.name = "id";
76899#endif /* FREECIV_JSON_CONNECTION */
76900 e = 0;
76901
76902 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76903
76904 if (e) {
76905 log_packet_detailed("'id' field error detected");
76906 }
76907
76908#ifdef FREECIV_JSON_CONNECTION
76909 field_addr.name = "ui_name";
76910#endif /* FREECIV_JSON_CONNECTION */
76911 e = 0;
76912
76913 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76914
76915 if (e) {
76916 log_packet_detailed("'ui_name' field error detected");
76917 }
76918
76919#ifdef FREECIV_JSON_CONNECTION
76920 field_addr.name = "quiet";
76921#endif /* FREECIV_JSON_CONNECTION */
76922 e = 0;
76923
76924 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
76925
76926 if (e) {
76927 log_packet_detailed("'quiet' field error detected");
76928 }
76929
76930#ifdef FREECIV_JSON_CONNECTION
76931 field_addr.name = "result";
76932#endif /* FREECIV_JSON_CONNECTION */
76933 e = 0;
76934
76935 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76936
76937 if (e) {
76938 log_packet_detailed("'result' field error detected");
76939 }
76940
76941#ifdef FREECIV_JSON_CONNECTION
76942 field_addr.name = "sub_results";
76943#endif /* FREECIV_JSON_CONNECTION */
76944 e = 0;
76945
76946 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76947
76948 if (e) {
76949 log_packet_detailed("'sub_results' field error detected");
76950 }
76951
76952#ifdef FREECIV_JSON_CONNECTION
76953 field_addr.name = "actor_consuming_always";
76954#endif /* FREECIV_JSON_CONNECTION */
76955 e = 0;
76956
76957 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->actor_consuming_always);
76958
76959 if (e) {
76960 log_packet_detailed("'actor_consuming_always' field error detected");
76961 }
76962
76963#ifdef FREECIV_JSON_CONNECTION
76964 field_addr.name = "act_kind";
76965#endif /* FREECIV_JSON_CONNECTION */
76966 e = 0;
76967
76968 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76969
76970 if (e) {
76971 log_packet_detailed("'act_kind' field error detected");
76972 }
76973
76974#ifdef FREECIV_JSON_CONNECTION
76975 field_addr.name = "tgt_kind";
76976#endif /* FREECIV_JSON_CONNECTION */
76977 e = 0;
76978
76979 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76980
76981 if (e) {
76982 log_packet_detailed("'tgt_kind' field error detected");
76983 }
76984
76985#ifdef FREECIV_JSON_CONNECTION
76986 field_addr.name = "sub_tgt_kind";
76987#endif /* FREECIV_JSON_CONNECTION */
76988 e = 0;
76989
76990 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76991
76992 if (e) {
76993 log_packet_detailed("'sub_tgt_kind' field error detected");
76994 }
76995
76996#ifdef FREECIV_JSON_CONNECTION
76997 field_addr.name = "min_distance";
76998#endif /* FREECIV_JSON_CONNECTION */
76999 e = 0;
77000
77001 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
77002
77003 if (e) {
77004 log_packet_detailed("'min_distance' field error detected");
77005 }
77006
77007#ifdef FREECIV_JSON_CONNECTION
77008 field_addr.name = "max_distance";
77009#endif /* FREECIV_JSON_CONNECTION */
77010 e = 0;
77011
77012 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
77013
77014 if (e) {
77015 log_packet_detailed("'max_distance' field error detected");
77016 }
77017
77018#ifdef FREECIV_JSON_CONNECTION
77019 field_addr.name = "blocked_by";
77020#endif /* FREECIV_JSON_CONNECTION */
77021 e = 0;
77022
77023 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
77024
77025 if (e) {
77026 log_packet_detailed("'blocked_by' field error detected");
77027 }
77028#endif /* FREECIV_DELTA_PROTOCOL */
77029
77031}
77032
77034{
77035 if (!pc->used) {
77036 log_error("WARNING: trying to send data to the closed connection %s",
77038 return -1;
77039 }
77040 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION].packet != nullptr, -1,
77041 "Handler for PACKET_RULESET_ACTION not installed");
77042 return pc->phs.handlers->send[PACKET_RULESET_ACTION].packet(pc, packet);
77043}
77044
77045void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
77046{
77047 conn_list_iterate(dest, pconn) {
77050}
77051
77053{
77054 memset(packet, 0, sizeof(*packet));
77055
77058}
77059
77061{
77064}
77065
77066static inline void destroy_packet_ruleset_action_enabler(void *packet)
77067{
77069 free(packet);
77070}
77071
77072#ifdef FREECIV_DELTA_PROTOCOL
77073#define hash_packet_ruleset_action_enabler_100 hash_const
77074#define cmp_packet_ruleset_action_enabler_100 cmp_const
77076#endif /* FREECIV_DELTA_PROTOCOL */
77077
77079{
77080#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_enabler(_packet)
77082
77083#ifdef FREECIV_JSON_CONNECTION
77084 struct plocation field_addr;
77085 {
77086 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77089 }
77090#endif /* FREECIV_JSON_CONNECTION */
77091
77092 log_packet_detailed("packet_ruleset_action_enabler_100: got info about ()");
77093
77094#ifdef FREECIV_DELTA_PROTOCOL
77097 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_ENABLER;
77098
77099 if (nullptr == *hash) {
77101 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
77102 }
77103
77104 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77105 real_packet->enabled_action = old->enabled_action;
77106 requirement_vector_copy(&real_packet->actor_reqs, &old->actor_reqs);
77107 requirement_vector_copy(&real_packet->target_reqs, &old->target_reqs);
77108 } else {
77109 /* packet is already initialized empty */
77110 log_packet_detailed(" no old info");
77111 }
77112
77113#ifdef FREECIV_JSON_CONNECTION
77114 field_addr.name = "fields";
77115#endif /* FREECIV_JSON_CONNECTION */
77116 DIO_BV_GET(&din, &field_addr, fields);
77117
77118 if (BV_ISSET(fields, 0)) {
77119 log_packet_detailed(" got field 'enabled_action'");
77120
77121#ifdef FREECIV_JSON_CONNECTION
77122 field_addr.name = "enabled_action";
77123#endif /* FREECIV_JSON_CONNECTION */
77124
77125 {
77126 int readin;
77127
77128 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77129 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
77130 }
77131 real_packet->enabled_action = readin;
77132 }
77133 }
77134
77135 if (BV_ISSET(fields, 1)) {
77136 log_packet_detailed(" got field 'actor_reqs'");
77137
77138#ifdef FREECIV_JSON_CONNECTION
77139 field_addr.name = "actor_reqs";
77140#endif /* FREECIV_JSON_CONNECTION */
77141
77142 {
77143 int i;
77144
77145 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77146 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
77147 }
77149
77150#ifdef FREECIV_JSON_CONNECTION
77151 /* Enter array. */
77152 field_addr.sub_location = plocation_elem_new(0);
77153#endif /* FREECIV_JSON_CONNECTION */
77154
77155 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77156#ifdef FREECIV_JSON_CONNECTION
77157 /* Next array element */
77158 field_addr.sub_location->number = i;
77159#endif /* FREECIV_JSON_CONNECTION */
77160
77161 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
77162 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
77163 }
77164 }
77165
77166#ifdef FREECIV_JSON_CONNECTION
77167 /* Exit array. */
77168 FC_FREE(field_addr.sub_location);
77169#endif /* FREECIV_JSON_CONNECTION */
77170 }
77171 }
77172
77173 if (BV_ISSET(fields, 2)) {
77174 log_packet_detailed(" got field 'target_reqs'");
77175
77176#ifdef FREECIV_JSON_CONNECTION
77177 field_addr.name = "target_reqs";
77178#endif /* FREECIV_JSON_CONNECTION */
77179
77180 {
77181 int i;
77182
77183 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77184 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
77185 }
77187
77188#ifdef FREECIV_JSON_CONNECTION
77189 /* Enter array. */
77190 field_addr.sub_location = plocation_elem_new(0);
77191#endif /* FREECIV_JSON_CONNECTION */
77192
77193 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77194#ifdef FREECIV_JSON_CONNECTION
77195 /* Next array element */
77196 field_addr.sub_location->number = i;
77197#endif /* FREECIV_JSON_CONNECTION */
77198
77199 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
77200 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
77201 }
77202 }
77203
77204#ifdef FREECIV_JSON_CONNECTION
77205 /* Exit array. */
77206 FC_FREE(field_addr.sub_location);
77207#endif /* FREECIV_JSON_CONNECTION */
77208 }
77209 }
77210
77211 if (nullptr == old) {
77212 old = fc_malloc(sizeof(*old));
77214 old->enabled_action = real_packet->enabled_action;
77215 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
77216 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
77218 } else {
77219 old->enabled_action = real_packet->enabled_action;
77220 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
77221 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
77222 }
77223
77224#else /* FREECIV_DELTA_PROTOCOL */
77225#ifdef FREECIV_JSON_CONNECTION
77226 field_addr.name = "enabled_action";
77227#endif /* FREECIV_JSON_CONNECTION */
77228
77229 {
77230 int readin;
77231
77232 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77233 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
77234 }
77235 real_packet->enabled_action = readin;
77236 }
77237
77238#ifdef FREECIV_JSON_CONNECTION
77239 field_addr.name = "actor_reqs";
77240#endif /* FREECIV_JSON_CONNECTION */
77241
77242 {
77243 int i;
77244
77245 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77246 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
77247 }
77249
77250#ifdef FREECIV_JSON_CONNECTION
77251 /* Enter array. */
77252 field_addr.sub_location = plocation_elem_new(0);
77253#endif /* FREECIV_JSON_CONNECTION */
77254
77255 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77256#ifdef FREECIV_JSON_CONNECTION
77257 /* Next array element */
77258 field_addr.sub_location->number = i;
77259#endif /* FREECIV_JSON_CONNECTION */
77260
77261 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
77262 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
77263 }
77264 }
77265
77266#ifdef FREECIV_JSON_CONNECTION
77267 /* Exit array. */
77268 FC_FREE(field_addr.sub_location);
77269#endif /* FREECIV_JSON_CONNECTION */
77270 }
77271
77272#ifdef FREECIV_JSON_CONNECTION
77273 field_addr.name = "target_reqs";
77274#endif /* FREECIV_JSON_CONNECTION */
77275
77276 {
77277 int i;
77278
77279 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77280 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
77281 }
77283
77284#ifdef FREECIV_JSON_CONNECTION
77285 /* Enter array. */
77286 field_addr.sub_location = plocation_elem_new(0);
77287#endif /* FREECIV_JSON_CONNECTION */
77288
77289 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77290#ifdef FREECIV_JSON_CONNECTION
77291 /* Next array element */
77292 field_addr.sub_location->number = i;
77293#endif /* FREECIV_JSON_CONNECTION */
77294
77295 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
77296 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
77297 }
77298 }
77299
77300#ifdef FREECIV_JSON_CONNECTION
77301 /* Exit array. */
77302 FC_FREE(field_addr.sub_location);
77303#endif /* FREECIV_JSON_CONNECTION */
77304 }
77305#endif /* FREECIV_DELTA_PROTOCOL */
77306
77308#undef FREE_PACKET_STRUCT
77309}
77310
77312{
77313 const struct packet_ruleset_action_enabler *real_packet = packet;
77314 int e;
77316
77317 log_packet_detailed("packet_ruleset_action_enabler_100: sending info about ()");
77318
77319#ifdef FREECIV_DELTA_PROTOCOL
77322 bool differ;
77323 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_ENABLER;
77324
77325 if (nullptr == *hash) {
77327 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
77328 }
77329 BV_CLR_ALL(fields);
77330
77331 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77332 old = fc_malloc(sizeof(*old));
77333 /* temporary bitcopy just to insert correctly */
77334 *old = *real_packet;
77337 }
77338
77339 differ = (old->enabled_action != real_packet->enabled_action);
77340 if (differ) {
77341 BV_SET(fields, 0);
77342 }
77343
77344 differ = (requirement_vector_size(&old->actor_reqs) != requirement_vector_size(&real_packet->actor_reqs));
77345 if (!differ) {
77346 int i;
77347
77348 for (i = 0; i < requirement_vector_size(&old->actor_reqs); i++) {
77349 differ = !are_requirements_equal(&old->actor_reqs.p[i], &real_packet->actor_reqs.p[i]);
77350 if (differ) {
77351 break;
77352 }
77353 }
77354 }
77355 if (differ) {
77356 BV_SET(fields, 1);
77357 }
77358
77359 differ = (requirement_vector_size(&old->target_reqs) != requirement_vector_size(&real_packet->target_reqs));
77360 if (!differ) {
77361 int i;
77362
77363 for (i = 0; i < requirement_vector_size(&old->target_reqs); i++) {
77364 differ = !are_requirements_equal(&old->target_reqs.p[i], &real_packet->target_reqs.p[i]);
77365 if (differ) {
77366 break;
77367 }
77368 }
77369 }
77370 if (differ) {
77371 BV_SET(fields, 2);
77372 }
77373#endif /* FREECIV_DELTA_PROTOCOL */
77374
77375#ifdef FREECIV_JSON_CONNECTION
77376 struct plocation field_addr;
77377 {
77378 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77381 }
77382#endif /* FREECIV_JSON_CONNECTION */
77383
77384#ifdef FREECIV_DELTA_PROTOCOL
77385#ifdef FREECIV_JSON_CONNECTION
77386 field_addr.name = "fields";
77387#endif /* FREECIV_JSON_CONNECTION */
77388 e = 0;
77389 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77390 if (e) {
77391 log_packet_detailed("fields bitvector error detected");
77392 }
77393
77394 if (BV_ISSET(fields, 0)) {
77395 log_packet_detailed(" field 'enabled_action' has changed");
77396
77397#ifdef FREECIV_JSON_CONNECTION
77398 field_addr.name = "enabled_action";
77399#endif /* FREECIV_JSON_CONNECTION */
77400 e = 0;
77401
77402 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
77403
77404 if (e) {
77405 log_packet_detailed("'enabled_action' field error detected");
77406 }
77407 }
77408
77409 if (BV_ISSET(fields, 1)) {
77410 log_packet_detailed(" field 'actor_reqs' has changed");
77411
77412#ifdef FREECIV_JSON_CONNECTION
77413 field_addr.name = "actor_reqs";
77414#endif /* FREECIV_JSON_CONNECTION */
77415 e = 0;
77416
77417 {
77418 int i;
77419
77422
77423#ifdef FREECIV_JSON_CONNECTION
77424 /* Enter array. */
77425 field_addr.sub_location = plocation_elem_new(0);
77426#endif /* FREECIV_JSON_CONNECTION */
77427
77428 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77429#ifdef FREECIV_JSON_CONNECTION
77430 /* Next array element. */
77431 field_addr.sub_location->number = i;
77432#endif /* FREECIV_JSON_CONNECTION */
77433
77434 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
77435 }
77436
77437#ifdef FREECIV_JSON_CONNECTION
77438 /* Exit array. */
77439 FC_FREE(field_addr.sub_location);
77440#endif /* FREECIV_JSON_CONNECTION */
77441 }
77442
77443 if (e) {
77444 log_packet_detailed("'actor_reqs' field error detected");
77445 }
77446 }
77447
77448 if (BV_ISSET(fields, 2)) {
77449 log_packet_detailed(" field 'target_reqs' has changed");
77450
77451#ifdef FREECIV_JSON_CONNECTION
77452 field_addr.name = "target_reqs";
77453#endif /* FREECIV_JSON_CONNECTION */
77454 e = 0;
77455
77456 {
77457 int i;
77458
77461
77462#ifdef FREECIV_JSON_CONNECTION
77463 /* Enter array. */
77464 field_addr.sub_location = plocation_elem_new(0);
77465#endif /* FREECIV_JSON_CONNECTION */
77466
77467 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77468#ifdef FREECIV_JSON_CONNECTION
77469 /* Next array element. */
77470 field_addr.sub_location->number = i;
77471#endif /* FREECIV_JSON_CONNECTION */
77472
77473 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
77474 }
77475
77476#ifdef FREECIV_JSON_CONNECTION
77477 /* Exit array. */
77478 FC_FREE(field_addr.sub_location);
77479#endif /* FREECIV_JSON_CONNECTION */
77480 }
77481
77482 if (e) {
77483 log_packet_detailed("'target_reqs' field error detected");
77484 }
77485 }
77486
77487 old->enabled_action = real_packet->enabled_action;
77488 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
77489 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
77490
77491#else /* FREECIV_DELTA_PROTOCOL */
77492#ifdef FREECIV_JSON_CONNECTION
77493 field_addr.name = "enabled_action";
77494#endif /* FREECIV_JSON_CONNECTION */
77495 e = 0;
77496
77497 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
77498
77499 if (e) {
77500 log_packet_detailed("'enabled_action' field error detected");
77501 }
77502
77503#ifdef FREECIV_JSON_CONNECTION
77504 field_addr.name = "actor_reqs";
77505#endif /* FREECIV_JSON_CONNECTION */
77506 e = 0;
77507
77508 {
77509 int i;
77510
77513
77514#ifdef FREECIV_JSON_CONNECTION
77515 /* Enter array. */
77516 field_addr.sub_location = plocation_elem_new(0);
77517#endif /* FREECIV_JSON_CONNECTION */
77518
77519 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77520#ifdef FREECIV_JSON_CONNECTION
77521 /* Next array element. */
77522 field_addr.sub_location->number = i;
77523#endif /* FREECIV_JSON_CONNECTION */
77524
77525 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
77526 }
77527
77528#ifdef FREECIV_JSON_CONNECTION
77529 /* Exit array. */
77530 FC_FREE(field_addr.sub_location);
77531#endif /* FREECIV_JSON_CONNECTION */
77532 }
77533
77534 if (e) {
77535 log_packet_detailed("'actor_reqs' field error detected");
77536 }
77537
77538#ifdef FREECIV_JSON_CONNECTION
77539 field_addr.name = "target_reqs";
77540#endif /* FREECIV_JSON_CONNECTION */
77541 e = 0;
77542
77543 {
77544 int i;
77545
77548
77549#ifdef FREECIV_JSON_CONNECTION
77550 /* Enter array. */
77551 field_addr.sub_location = plocation_elem_new(0);
77552#endif /* FREECIV_JSON_CONNECTION */
77553
77554 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77555#ifdef FREECIV_JSON_CONNECTION
77556 /* Next array element. */
77557 field_addr.sub_location->number = i;
77558#endif /* FREECIV_JSON_CONNECTION */
77559
77560 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
77561 }
77562
77563#ifdef FREECIV_JSON_CONNECTION
77564 /* Exit array. */
77565 FC_FREE(field_addr.sub_location);
77566#endif /* FREECIV_JSON_CONNECTION */
77567 }
77568
77569 if (e) {
77570 log_packet_detailed("'target_reqs' field error detected");
77571 }
77572#endif /* FREECIV_DELTA_PROTOCOL */
77573
77575}
77576
77578{
77579 if (!pc->used) {
77580 log_error("WARNING: trying to send data to the closed connection %s",
77582 return -1;
77583 }
77584 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet != nullptr, -1,
77585 "Handler for PACKET_RULESET_ACTION_ENABLER not installed");
77586 return pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet(pc, packet);
77587}
77588
77595
77597{
77598 memset(packet, 0, sizeof(*packet));
77599
77600 requirement_vector_init(&packet->reqs);
77601}
77602
77604{
77605 requirement_vector_free(&packet->reqs);
77606}
77607
77608static inline void destroy_packet_ruleset_action_auto(void *packet)
77609{
77611 free(packet);
77612}
77613
77614#ifdef FREECIV_DELTA_PROTOCOL
77615#define hash_packet_ruleset_action_auto_100 hash_const
77616#define cmp_packet_ruleset_action_auto_100 cmp_const
77618#endif /* FREECIV_DELTA_PROTOCOL */
77619
77621{
77622#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_auto(_packet)
77624
77625#ifdef FREECIV_JSON_CONNECTION
77626 struct plocation field_addr;
77627 {
77628 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77631 }
77632#endif /* FREECIV_JSON_CONNECTION */
77633
77634 log_packet_detailed("packet_ruleset_action_auto_100: got info about ()");
77635
77636#ifdef FREECIV_DELTA_PROTOCOL
77639 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_AUTO;
77640
77641 if (nullptr == *hash) {
77643 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77644 }
77645
77646 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77647 real_packet->id = old->id;
77648 real_packet->cause = old->cause;
77649 requirement_vector_copy(&real_packet->reqs, &old->reqs);
77650 real_packet->alternatives_count = old->alternatives_count;
77651 {
77652 int i;
77653
77654 for (i = 0; i < old->alternatives_count; i++) {
77655 real_packet->alternatives[i] = old->alternatives[i];
77656 }
77657 }
77658 } else {
77659 /* packet is already initialized empty */
77660 log_packet_detailed(" no old info");
77661 }
77662
77663#ifdef FREECIV_JSON_CONNECTION
77664 field_addr.name = "fields";
77665#endif /* FREECIV_JSON_CONNECTION */
77666 DIO_BV_GET(&din, &field_addr, fields);
77667
77668 if (BV_ISSET(fields, 0)) {
77669 log_packet_detailed(" got field 'id'");
77670
77671#ifdef FREECIV_JSON_CONNECTION
77672 field_addr.name = "id";
77673#endif /* FREECIV_JSON_CONNECTION */
77674
77675 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77677 }
77678 }
77679
77680 if (BV_ISSET(fields, 1)) {
77681 log_packet_detailed(" got field 'cause'");
77682
77683#ifdef FREECIV_JSON_CONNECTION
77684 field_addr.name = "cause";
77685#endif /* FREECIV_JSON_CONNECTION */
77686
77687 {
77688 int readin;
77689
77690 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77692 }
77693 real_packet->cause = readin;
77694 }
77695 }
77696
77697 if (BV_ISSET(fields, 2)) {
77698 log_packet_detailed(" got field 'reqs'");
77699
77700#ifdef FREECIV_JSON_CONNECTION
77701 field_addr.name = "reqs";
77702#endif /* FREECIV_JSON_CONNECTION */
77703
77704 {
77705 int i;
77706
77707 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77709 }
77711
77712#ifdef FREECIV_JSON_CONNECTION
77713 /* Enter array. */
77714 field_addr.sub_location = plocation_elem_new(0);
77715#endif /* FREECIV_JSON_CONNECTION */
77716
77717 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77718#ifdef FREECIV_JSON_CONNECTION
77719 /* Next array element */
77720 field_addr.sub_location->number = i;
77721#endif /* FREECIV_JSON_CONNECTION */
77722
77723 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77725 }
77726 }
77727
77728#ifdef FREECIV_JSON_CONNECTION
77729 /* Exit array. */
77730 FC_FREE(field_addr.sub_location);
77731#endif /* FREECIV_JSON_CONNECTION */
77732 }
77733 }
77734
77735 if (BV_ISSET(fields, 3)) {
77736 log_packet_detailed(" got field 'alternatives_count'");
77737
77738#ifdef FREECIV_JSON_CONNECTION
77739 field_addr.name = "alternatives_count";
77740#endif /* FREECIV_JSON_CONNECTION */
77741
77742 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77743 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77744 }
77745 }
77746
77747 if (BV_ISSET(fields, 4)) {
77748 log_packet_detailed(" got field 'alternatives'");
77749
77750#ifdef FREECIV_JSON_CONNECTION
77751 field_addr.name = "alternatives";
77752#endif /* FREECIV_JSON_CONNECTION */
77753
77754 {
77755 int i;
77756
77757 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77758 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77759 }
77760
77761#ifdef FREECIV_JSON_CONNECTION
77762 /* Enter array. */
77763 field_addr.sub_location = plocation_elem_new(0);
77764#endif /* FREECIV_JSON_CONNECTION */
77765
77766 for (i = 0; i < real_packet->alternatives_count; i++) {
77767#ifdef FREECIV_JSON_CONNECTION
77768 /* Next array element */
77769 field_addr.sub_location->number = i;
77770#endif /* FREECIV_JSON_CONNECTION */
77771
77772 {
77773 int readin;
77774
77775 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77776 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77777 }
77778 real_packet->alternatives[i] = readin;
77779 }
77780 }
77781
77782#ifdef FREECIV_JSON_CONNECTION
77783 /* Exit array. */
77784 FC_FREE(field_addr.sub_location);
77785#endif /* FREECIV_JSON_CONNECTION */
77786 }
77787 }
77788
77789 if (nullptr == old) {
77790 old = fc_malloc(sizeof(*old));
77792 old->id = real_packet->id;
77793 old->cause = real_packet->cause;
77794 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77795 old->alternatives_count = real_packet->alternatives_count;
77796 {
77797 int i;
77798
77799 for (i = 0; i < real_packet->alternatives_count; i++) {
77800 old->alternatives[i] = real_packet->alternatives[i];
77801 }
77802 }
77804 } else {
77805 old->id = real_packet->id;
77806 old->cause = real_packet->cause;
77807 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77808 old->alternatives_count = real_packet->alternatives_count;
77809 {
77810 int i;
77811
77812 for (i = 0; i < real_packet->alternatives_count; i++) {
77813 old->alternatives[i] = real_packet->alternatives[i];
77814 }
77815 }
77816 }
77817
77818#else /* FREECIV_DELTA_PROTOCOL */
77819#ifdef FREECIV_JSON_CONNECTION
77820 field_addr.name = "id";
77821#endif /* FREECIV_JSON_CONNECTION */
77822
77823 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77825 }
77826
77827#ifdef FREECIV_JSON_CONNECTION
77828 field_addr.name = "cause";
77829#endif /* FREECIV_JSON_CONNECTION */
77830
77831 {
77832 int readin;
77833
77834 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77836 }
77837 real_packet->cause = readin;
77838 }
77839
77840#ifdef FREECIV_JSON_CONNECTION
77841 field_addr.name = "reqs";
77842#endif /* FREECIV_JSON_CONNECTION */
77843
77844 {
77845 int i;
77846
77847 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77849 }
77851
77852#ifdef FREECIV_JSON_CONNECTION
77853 /* Enter array. */
77854 field_addr.sub_location = plocation_elem_new(0);
77855#endif /* FREECIV_JSON_CONNECTION */
77856
77857 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77858#ifdef FREECIV_JSON_CONNECTION
77859 /* Next array element */
77860 field_addr.sub_location->number = i;
77861#endif /* FREECIV_JSON_CONNECTION */
77862
77863 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77865 }
77866 }
77867
77868#ifdef FREECIV_JSON_CONNECTION
77869 /* Exit array. */
77870 FC_FREE(field_addr.sub_location);
77871#endif /* FREECIV_JSON_CONNECTION */
77872 }
77873
77874#ifdef FREECIV_JSON_CONNECTION
77875 field_addr.name = "alternatives_count";
77876#endif /* FREECIV_JSON_CONNECTION */
77877
77878 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77879 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77880 }
77881
77882#ifdef FREECIV_JSON_CONNECTION
77883 field_addr.name = "alternatives";
77884#endif /* FREECIV_JSON_CONNECTION */
77885
77886 {
77887 int i;
77888
77889 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77890 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77891 }
77892
77893#ifdef FREECIV_JSON_CONNECTION
77894 /* Enter array. */
77895 field_addr.sub_location = plocation_elem_new(0);
77896#endif /* FREECIV_JSON_CONNECTION */
77897
77898 for (i = 0; i < real_packet->alternatives_count; i++) {
77899#ifdef FREECIV_JSON_CONNECTION
77900 /* Next array element */
77901 field_addr.sub_location->number = i;
77902#endif /* FREECIV_JSON_CONNECTION */
77903
77904 {
77905 int readin;
77906
77907 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77908 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77909 }
77910 real_packet->alternatives[i] = readin;
77911 }
77912 }
77913
77914#ifdef FREECIV_JSON_CONNECTION
77915 /* Exit array. */
77916 FC_FREE(field_addr.sub_location);
77917#endif /* FREECIV_JSON_CONNECTION */
77918 }
77919#endif /* FREECIV_DELTA_PROTOCOL */
77920
77922#undef FREE_PACKET_STRUCT
77923}
77924
77926{
77927 const struct packet_ruleset_action_auto *real_packet = packet;
77928 int e;
77930
77931 log_packet_detailed("packet_ruleset_action_auto_100: sending info about ()");
77932
77933#ifdef FREECIV_DELTA_PROTOCOL
77936 bool differ;
77937 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_AUTO;
77938
77939 if (nullptr == *hash) {
77941 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77942 }
77943 BV_CLR_ALL(fields);
77944
77945 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77946 old = fc_malloc(sizeof(*old));
77947 /* temporary bitcopy just to insert correctly */
77948 *old = *real_packet;
77951 }
77952
77953 differ = (old->id != real_packet->id);
77954 if (differ) {
77955 BV_SET(fields, 0);
77956 }
77957
77958 differ = (old->cause != real_packet->cause);
77959 if (differ) {
77960 BV_SET(fields, 1);
77961 }
77962
77964 if (!differ) {
77965 int i;
77966
77967 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
77968 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
77969 if (differ) {
77970 break;
77971 }
77972 }
77973 }
77974 if (differ) {
77975 BV_SET(fields, 2);
77976 }
77977
77978 differ = (old->alternatives_count != real_packet->alternatives_count);
77979 if (differ) {
77980 BV_SET(fields, 3);
77981 }
77982
77983 differ = (old->alternatives_count != real_packet->alternatives_count);
77984 if (!differ) {
77985 int i;
77986
77987 for (i = 0; i < old->alternatives_count; i++) {
77988 differ = (old->alternatives[i] != real_packet->alternatives[i]);
77989 if (differ) {
77990 break;
77991 }
77992 }
77993 }
77994 if (differ) {
77995 BV_SET(fields, 4);
77996 }
77997#endif /* FREECIV_DELTA_PROTOCOL */
77998
77999#ifdef FREECIV_JSON_CONNECTION
78000 struct plocation field_addr;
78001 {
78002 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78005 }
78006#endif /* FREECIV_JSON_CONNECTION */
78007
78008#ifdef FREECIV_DELTA_PROTOCOL
78009#ifdef FREECIV_JSON_CONNECTION
78010 field_addr.name = "fields";
78011#endif /* FREECIV_JSON_CONNECTION */
78012 e = 0;
78013 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78014 if (e) {
78015 log_packet_detailed("fields bitvector error detected");
78016 }
78017
78018 if (BV_ISSET(fields, 0)) {
78019 log_packet_detailed(" field 'id' has changed");
78020
78021#ifdef FREECIV_JSON_CONNECTION
78022 field_addr.name = "id";
78023#endif /* FREECIV_JSON_CONNECTION */
78024 e = 0;
78025
78026 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78027
78028 if (e) {
78029 log_packet_detailed("'id' field error detected");
78030 }
78031 }
78032
78033 if (BV_ISSET(fields, 1)) {
78034 log_packet_detailed(" field 'cause' has changed");
78035
78036#ifdef FREECIV_JSON_CONNECTION
78037 field_addr.name = "cause";
78038#endif /* FREECIV_JSON_CONNECTION */
78039 e = 0;
78040
78041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
78042
78043 if (e) {
78044 log_packet_detailed("'cause' field error detected");
78045 }
78046 }
78047
78048 if (BV_ISSET(fields, 2)) {
78049 log_packet_detailed(" field 'reqs' has changed");
78050
78051#ifdef FREECIV_JSON_CONNECTION
78052 field_addr.name = "reqs";
78053#endif /* FREECIV_JSON_CONNECTION */
78054 e = 0;
78055
78056 {
78057 int i;
78058
78061
78062#ifdef FREECIV_JSON_CONNECTION
78063 /* Enter array. */
78064 field_addr.sub_location = plocation_elem_new(0);
78065#endif /* FREECIV_JSON_CONNECTION */
78066
78067 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78068#ifdef FREECIV_JSON_CONNECTION
78069 /* Next array element. */
78070 field_addr.sub_location->number = i;
78071#endif /* FREECIV_JSON_CONNECTION */
78072
78073 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
78074 }
78075
78076#ifdef FREECIV_JSON_CONNECTION
78077 /* Exit array. */
78078 FC_FREE(field_addr.sub_location);
78079#endif /* FREECIV_JSON_CONNECTION */
78080 }
78081
78082 if (e) {
78083 log_packet_detailed("'reqs' field error detected");
78084 }
78085 }
78086
78087 if (BV_ISSET(fields, 3)) {
78088 log_packet_detailed(" field 'alternatives_count' has changed");
78089
78090#ifdef FREECIV_JSON_CONNECTION
78091 field_addr.name = "alternatives_count";
78092#endif /* FREECIV_JSON_CONNECTION */
78093 e = 0;
78094
78095 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
78096
78097 if (e) {
78098 log_packet_detailed("'alternatives_count' field error detected");
78099 }
78100 }
78101
78102 if (BV_ISSET(fields, 4)) {
78103 log_packet_detailed(" field 'alternatives' has changed");
78104
78105#ifdef FREECIV_JSON_CONNECTION
78106 field_addr.name = "alternatives";
78107#endif /* FREECIV_JSON_CONNECTION */
78108 e = 0;
78109
78110 {
78111 int i;
78112
78113#ifdef FREECIV_JSON_CONNECTION
78114 /* Create the array. */
78115 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
78116
78117 /* Enter array. */
78118 field_addr.sub_location = plocation_elem_new(0);
78119#endif /* FREECIV_JSON_CONNECTION */
78120
78121 for (i = 0; i < real_packet->alternatives_count; i++) {
78122#ifdef FREECIV_JSON_CONNECTION
78123 /* Next array element. */
78124 field_addr.sub_location->number = i;
78125#endif /* FREECIV_JSON_CONNECTION */
78126
78127 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
78128 }
78129
78130#ifdef FREECIV_JSON_CONNECTION
78131 /* Exit array. */
78132 FC_FREE(field_addr.sub_location);
78133#endif /* FREECIV_JSON_CONNECTION */
78134 }
78135
78136 if (e) {
78137 log_packet_detailed("'alternatives' field error detected");
78138 }
78139 }
78140
78141 old->id = real_packet->id;
78142 old->cause = real_packet->cause;
78143 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78144 old->alternatives_count = real_packet->alternatives_count;
78145 {
78146 int i;
78147
78148 for (i = 0; i < real_packet->alternatives_count; i++) {
78149 old->alternatives[i] = real_packet->alternatives[i];
78150 }
78151 }
78152
78153#else /* FREECIV_DELTA_PROTOCOL */
78154#ifdef FREECIV_JSON_CONNECTION
78155 field_addr.name = "id";
78156#endif /* FREECIV_JSON_CONNECTION */
78157 e = 0;
78158
78159 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78160
78161 if (e) {
78162 log_packet_detailed("'id' field error detected");
78163 }
78164
78165#ifdef FREECIV_JSON_CONNECTION
78166 field_addr.name = "cause";
78167#endif /* FREECIV_JSON_CONNECTION */
78168 e = 0;
78169
78170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
78171
78172 if (e) {
78173 log_packet_detailed("'cause' field error detected");
78174 }
78175
78176#ifdef FREECIV_JSON_CONNECTION
78177 field_addr.name = "reqs";
78178#endif /* FREECIV_JSON_CONNECTION */
78179 e = 0;
78180
78181 {
78182 int i;
78183
78186
78187#ifdef FREECIV_JSON_CONNECTION
78188 /* Enter array. */
78189 field_addr.sub_location = plocation_elem_new(0);
78190#endif /* FREECIV_JSON_CONNECTION */
78191
78192 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78193#ifdef FREECIV_JSON_CONNECTION
78194 /* Next array element. */
78195 field_addr.sub_location->number = i;
78196#endif /* FREECIV_JSON_CONNECTION */
78197
78198 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
78199 }
78200
78201#ifdef FREECIV_JSON_CONNECTION
78202 /* Exit array. */
78203 FC_FREE(field_addr.sub_location);
78204#endif /* FREECIV_JSON_CONNECTION */
78205 }
78206
78207 if (e) {
78208 log_packet_detailed("'reqs' field error detected");
78209 }
78210
78211#ifdef FREECIV_JSON_CONNECTION
78212 field_addr.name = "alternatives_count";
78213#endif /* FREECIV_JSON_CONNECTION */
78214 e = 0;
78215
78216 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
78217
78218 if (e) {
78219 log_packet_detailed("'alternatives_count' field error detected");
78220 }
78221
78222#ifdef FREECIV_JSON_CONNECTION
78223 field_addr.name = "alternatives";
78224#endif /* FREECIV_JSON_CONNECTION */
78225 e = 0;
78226
78227 {
78228 int i;
78229
78230#ifdef FREECIV_JSON_CONNECTION
78231 /* Create the array. */
78232 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
78233
78234 /* Enter array. */
78235 field_addr.sub_location = plocation_elem_new(0);
78236#endif /* FREECIV_JSON_CONNECTION */
78237
78238 for (i = 0; i < real_packet->alternatives_count; i++) {
78239#ifdef FREECIV_JSON_CONNECTION
78240 /* Next array element. */
78241 field_addr.sub_location->number = i;
78242#endif /* FREECIV_JSON_CONNECTION */
78243
78244 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
78245 }
78246
78247#ifdef FREECIV_JSON_CONNECTION
78248 /* Exit array. */
78249 FC_FREE(field_addr.sub_location);
78250#endif /* FREECIV_JSON_CONNECTION */
78251 }
78252
78253 if (e) {
78254 log_packet_detailed("'alternatives' field error detected");
78255 }
78256#endif /* FREECIV_DELTA_PROTOCOL */
78257
78259}
78260
78262{
78263 if (!pc->used) {
78264 log_error("WARNING: trying to send data to the closed connection %s",
78266 return -1;
78267 }
78268 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet != nullptr, -1,
78269 "Handler for PACKET_RULESET_ACTION_AUTO not installed");
78270 return pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet(pc, packet);
78271}
78272
78274{
78275 conn_list_iterate(dest, pconn) {
78278}
78279
78280static inline void init_packet_ruleset_counter(struct packet_ruleset_counter *packet)
78281{
78282 memset(packet, 0, sizeof(*packet));
78283
78284 packet->helptext = strvec_new();
78285}
78286
78287static inline void free_packet_ruleset_counter(struct packet_ruleset_counter *packet)
78288{
78289 if (packet->helptext) {
78290 strvec_destroy(packet->helptext);
78291 packet->helptext = nullptr;
78292 }
78293}
78294
78295static inline void destroy_packet_ruleset_counter(void *packet)
78296{
78298 free(packet);
78299}
78300
78301#ifdef FREECIV_DELTA_PROTOCOL
78302#define hash_packet_ruleset_counter_100 hash_const
78303#define cmp_packet_ruleset_counter_100 cmp_const
78305#endif /* FREECIV_DELTA_PROTOCOL */
78306
78308{
78309#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_counter(_packet)
78311
78312#ifdef FREECIV_JSON_CONNECTION
78313 struct plocation field_addr;
78314 {
78315 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78318 }
78319#endif /* FREECIV_JSON_CONNECTION */
78320
78321 log_packet_detailed("packet_ruleset_counter_100: got info about ()");
78322
78323#ifdef FREECIV_DELTA_PROTOCOL
78326 struct genhash **hash = pc->phs.received + PACKET_RULESET_COUNTER;
78327
78328 if (nullptr == *hash) {
78330 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
78331 }
78332
78333 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78334 sz_strlcpy(real_packet->name, old->name);
78335 sz_strlcpy(real_packet->rule_name, old->rule_name);
78336 if (old->helptext) {
78337 strvec_copy(real_packet->helptext, old->helptext);
78338 } else {
78339 strvec_clear(real_packet->helptext);
78340 }
78341 real_packet->def = old->def;
78342 real_packet->checkpoint = old->checkpoint;
78343 real_packet->type = old->type;
78344 real_packet->behavior = old->behavior;
78345 } else {
78346 /* packet is already initialized empty */
78347 log_packet_detailed(" no old info");
78348 }
78349
78350#ifdef FREECIV_JSON_CONNECTION
78351 field_addr.name = "fields";
78352#endif /* FREECIV_JSON_CONNECTION */
78353 DIO_BV_GET(&din, &field_addr, fields);
78354
78355 if (BV_ISSET(fields, 0)) {
78356 log_packet_detailed(" got field 'name'");
78357
78358#ifdef FREECIV_JSON_CONNECTION
78359 field_addr.name = "name";
78360#endif /* FREECIV_JSON_CONNECTION */
78361
78362 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
78364 }
78365 }
78366
78367 if (BV_ISSET(fields, 1)) {
78368 log_packet_detailed(" got field 'rule_name'");
78369
78370#ifdef FREECIV_JSON_CONNECTION
78371 field_addr.name = "rule_name";
78372#endif /* FREECIV_JSON_CONNECTION */
78373
78374 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
78375 RECEIVE_PACKET_FIELD_ERROR(rule_name);
78376 }
78377 }
78378
78379 if (BV_ISSET(fields, 2)) {
78380 log_packet_detailed(" got field 'helptext'");
78381
78382#ifdef FREECIV_JSON_CONNECTION
78383 field_addr.name = "helptext";
78384#endif /* FREECIV_JSON_CONNECTION */
78385
78386 {
78387 int i;
78388
78389 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78391 }
78392 strvec_reserve(real_packet->helptext, i);
78393
78394#ifdef FREECIV_JSON_CONNECTION
78395 /* Enter array. */
78396 field_addr.sub_location = plocation_elem_new(0);
78397#endif /* FREECIV_JSON_CONNECTION */
78398
78399 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78400#ifdef FREECIV_JSON_CONNECTION
78401 /* Next array element */
78402 field_addr.sub_location->number = i;
78403#endif /* FREECIV_JSON_CONNECTION */
78404
78405 {
78406 char readin[MAX_LEN_PACKET];
78407
78408 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
78409 || !strvec_set(real_packet->helptext, i, readin)) {
78411 }
78412 }
78413 }
78414
78415#ifdef FREECIV_JSON_CONNECTION
78416 /* Exit array. */
78417 FC_FREE(field_addr.sub_location);
78418#endif /* FREECIV_JSON_CONNECTION */
78419 }
78420 }
78421
78422 if (BV_ISSET(fields, 3)) {
78423 log_packet_detailed(" got field 'def'");
78424
78425#ifdef FREECIV_JSON_CONNECTION
78426 field_addr.name = "def";
78427#endif /* FREECIV_JSON_CONNECTION */
78428
78429 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
78431 }
78432 }
78433
78434 if (BV_ISSET(fields, 4)) {
78435 log_packet_detailed(" got field 'checkpoint'");
78436
78437#ifdef FREECIV_JSON_CONNECTION
78438 field_addr.name = "checkpoint";
78439#endif /* FREECIV_JSON_CONNECTION */
78440
78441 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
78442 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
78443 }
78444 }
78445
78446 if (BV_ISSET(fields, 5)) {
78447 log_packet_detailed(" got field 'type'");
78448
78449#ifdef FREECIV_JSON_CONNECTION
78450 field_addr.name = "type";
78451#endif /* FREECIV_JSON_CONNECTION */
78452
78453 {
78454 int readin;
78455
78456 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78458 }
78459 real_packet->type = readin;
78460 }
78461 }
78462
78463 if (BV_ISSET(fields, 6)) {
78464 log_packet_detailed(" got field 'behavior'");
78465
78466#ifdef FREECIV_JSON_CONNECTION
78467 field_addr.name = "behavior";
78468#endif /* FREECIV_JSON_CONNECTION */
78469
78470 {
78471 int readin;
78472
78473 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78475 }
78476 real_packet->behavior = readin;
78477 }
78478 }
78479
78480 if (nullptr == old) {
78481 old = fc_malloc(sizeof(*old));
78483 sz_strlcpy(old->name, real_packet->name);
78484 sz_strlcpy(old->rule_name, real_packet->rule_name);
78485 if (real_packet->helptext) {
78486 strvec_copy(old->helptext, real_packet->helptext);
78487 } else {
78488 strvec_clear(old->helptext);
78489 }
78490 old->def = real_packet->def;
78491 old->checkpoint = real_packet->checkpoint;
78492 old->type = real_packet->type;
78493 old->behavior = real_packet->behavior;
78495 } else {
78496 sz_strlcpy(old->name, real_packet->name);
78497 sz_strlcpy(old->rule_name, real_packet->rule_name);
78498 if (real_packet->helptext) {
78499 strvec_copy(old->helptext, real_packet->helptext);
78500 } else {
78501 strvec_clear(old->helptext);
78502 }
78503 old->def = real_packet->def;
78504 old->checkpoint = real_packet->checkpoint;
78505 old->type = real_packet->type;
78506 old->behavior = real_packet->behavior;
78507 }
78508
78509#else /* FREECIV_DELTA_PROTOCOL */
78510#ifdef FREECIV_JSON_CONNECTION
78511 field_addr.name = "name";
78512#endif /* FREECIV_JSON_CONNECTION */
78513
78514 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
78516 }
78517
78518#ifdef FREECIV_JSON_CONNECTION
78519 field_addr.name = "rule_name";
78520#endif /* FREECIV_JSON_CONNECTION */
78521
78522 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
78523 RECEIVE_PACKET_FIELD_ERROR(rule_name);
78524 }
78525
78526#ifdef FREECIV_JSON_CONNECTION
78527 field_addr.name = "helptext";
78528#endif /* FREECIV_JSON_CONNECTION */
78529
78530 {
78531 int i;
78532
78533 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78535 }
78536 strvec_reserve(real_packet->helptext, i);
78537
78538#ifdef FREECIV_JSON_CONNECTION
78539 /* Enter array. */
78540 field_addr.sub_location = plocation_elem_new(0);
78541#endif /* FREECIV_JSON_CONNECTION */
78542
78543 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78544#ifdef FREECIV_JSON_CONNECTION
78545 /* Next array element */
78546 field_addr.sub_location->number = i;
78547#endif /* FREECIV_JSON_CONNECTION */
78548
78549 {
78550 char readin[MAX_LEN_PACKET];
78551
78552 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
78553 || !strvec_set(real_packet->helptext, i, readin)) {
78555 }
78556 }
78557 }
78558
78559#ifdef FREECIV_JSON_CONNECTION
78560 /* Exit array. */
78561 FC_FREE(field_addr.sub_location);
78562#endif /* FREECIV_JSON_CONNECTION */
78563 }
78564
78565#ifdef FREECIV_JSON_CONNECTION
78566 field_addr.name = "def";
78567#endif /* FREECIV_JSON_CONNECTION */
78568
78569 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
78571 }
78572
78573#ifdef FREECIV_JSON_CONNECTION
78574 field_addr.name = "checkpoint";
78575#endif /* FREECIV_JSON_CONNECTION */
78576
78577 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
78578 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
78579 }
78580
78581#ifdef FREECIV_JSON_CONNECTION
78582 field_addr.name = "type";
78583#endif /* FREECIV_JSON_CONNECTION */
78584
78585 {
78586 int readin;
78587
78588 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78590 }
78591 real_packet->type = readin;
78592 }
78593
78594#ifdef FREECIV_JSON_CONNECTION
78595 field_addr.name = "behavior";
78596#endif /* FREECIV_JSON_CONNECTION */
78597
78598 {
78599 int readin;
78600
78601 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78603 }
78604 real_packet->behavior = readin;
78605 }
78606#endif /* FREECIV_DELTA_PROTOCOL */
78607
78609#undef FREE_PACKET_STRUCT
78610}
78611
78613{
78614 const struct packet_ruleset_counter *real_packet = packet;
78615 int e;
78617
78618 log_packet_detailed("packet_ruleset_counter_100: sending info about ()");
78619
78620#ifdef FREECIV_DELTA_PROTOCOL
78623 bool differ;
78624 struct genhash **hash = pc->phs.sent + PACKET_RULESET_COUNTER;
78625
78626 if (nullptr == *hash) {
78628 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
78629 }
78630 BV_CLR_ALL(fields);
78631
78632 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78633 old = fc_malloc(sizeof(*old));
78634 /* temporary bitcopy just to insert correctly */
78635 *old = *real_packet;
78638 }
78639
78640 differ = (strcmp(old->name, real_packet->name) != 0);
78641 if (differ) {
78642 BV_SET(fields, 0);
78643 }
78644
78645 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
78646 if (differ) {
78647 BV_SET(fields, 1);
78648 }
78649
78650 if (real_packet->helptext) {
78651 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
78652 } else {
78653 differ = (strvec_size(old->helptext) > 0);
78654 }
78655 if (differ) {
78656 BV_SET(fields, 2);
78657 }
78658
78659 differ = (old->def != real_packet->def);
78660 if (differ) {
78661 BV_SET(fields, 3);
78662 }
78663
78664 differ = (old->checkpoint != real_packet->checkpoint);
78665 if (differ) {
78666 BV_SET(fields, 4);
78667 }
78668
78669 differ = (old->type != real_packet->type);
78670 if (differ) {
78671 BV_SET(fields, 5);
78672 }
78673
78674 differ = (old->behavior != real_packet->behavior);
78675 if (differ) {
78676 BV_SET(fields, 6);
78677 }
78678#endif /* FREECIV_DELTA_PROTOCOL */
78679
78680#ifdef FREECIV_JSON_CONNECTION
78681 struct plocation field_addr;
78682 {
78683 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78686 }
78687#endif /* FREECIV_JSON_CONNECTION */
78688
78689#ifdef FREECIV_DELTA_PROTOCOL
78690#ifdef FREECIV_JSON_CONNECTION
78691 field_addr.name = "fields";
78692#endif /* FREECIV_JSON_CONNECTION */
78693 e = 0;
78694 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78695 if (e) {
78696 log_packet_detailed("fields bitvector error detected");
78697 }
78698
78699 if (BV_ISSET(fields, 0)) {
78700 log_packet_detailed(" field 'name' has changed");
78701
78702#ifdef FREECIV_JSON_CONNECTION
78703 field_addr.name = "name";
78704#endif /* FREECIV_JSON_CONNECTION */
78705 e = 0;
78706
78707 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78708
78709 if (e) {
78710 log_packet_detailed("'name' field error detected");
78711 }
78712 }
78713
78714 if (BV_ISSET(fields, 1)) {
78715 log_packet_detailed(" field 'rule_name' has changed");
78716
78717#ifdef FREECIV_JSON_CONNECTION
78718 field_addr.name = "rule_name";
78719#endif /* FREECIV_JSON_CONNECTION */
78720 e = 0;
78721
78722 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78723
78724 if (e) {
78725 log_packet_detailed("'rule_name' field error detected");
78726 }
78727 }
78728
78729 if (BV_ISSET(fields, 2)) {
78730 log_packet_detailed(" field 'helptext' has changed");
78731
78732#ifdef FREECIV_JSON_CONNECTION
78733 field_addr.name = "helptext";
78734#endif /* FREECIV_JSON_CONNECTION */
78735 e = 0;
78736
78737 if (!real_packet->helptext) {
78738 /* Transmit null as empty */
78739 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78740 } else {
78741 int i;
78742
78744 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78745
78746#ifdef FREECIV_JSON_CONNECTION
78747 /* Enter array. */
78748 field_addr.sub_location = plocation_elem_new(0);
78749#endif /* FREECIV_JSON_CONNECTION */
78750
78751 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78752#ifdef FREECIV_JSON_CONNECTION
78753 /* Next array element. */
78754 field_addr.sub_location->number = i;
78755#endif /* FREECIV_JSON_CONNECTION */
78756
78757 {
78758 const char *pstr = strvec_get(real_packet->helptext, i);
78759
78760 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78761 }
78762 }
78763
78764#ifdef FREECIV_JSON_CONNECTION
78765 /* Exit array. */
78766 FC_FREE(field_addr.sub_location);
78767#endif /* FREECIV_JSON_CONNECTION */
78768 }
78769
78770 if (e) {
78771 log_packet_detailed("'helptext' field error detected");
78772 }
78773 }
78774
78775 if (BV_ISSET(fields, 3)) {
78776 log_packet_detailed(" field 'def' has changed");
78777
78778#ifdef FREECIV_JSON_CONNECTION
78779 field_addr.name = "def";
78780#endif /* FREECIV_JSON_CONNECTION */
78781 e = 0;
78782
78783 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78784
78785 if (e) {
78786 log_packet_detailed("'def' field error detected");
78787 }
78788 }
78789
78790 if (BV_ISSET(fields, 4)) {
78791 log_packet_detailed(" field 'checkpoint' has changed");
78792
78793#ifdef FREECIV_JSON_CONNECTION
78794 field_addr.name = "checkpoint";
78795#endif /* FREECIV_JSON_CONNECTION */
78796 e = 0;
78797
78798 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78799
78800 if (e) {
78801 log_packet_detailed("'checkpoint' field error detected");
78802 }
78803 }
78804
78805 if (BV_ISSET(fields, 5)) {
78806 log_packet_detailed(" field 'type' has changed");
78807
78808#ifdef FREECIV_JSON_CONNECTION
78809 field_addr.name = "type";
78810#endif /* FREECIV_JSON_CONNECTION */
78811 e = 0;
78812
78813 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78814
78815 if (e) {
78816 log_packet_detailed("'type' field error detected");
78817 }
78818 }
78819
78820 if (BV_ISSET(fields, 6)) {
78821 log_packet_detailed(" field 'behavior' has changed");
78822
78823#ifdef FREECIV_JSON_CONNECTION
78824 field_addr.name = "behavior";
78825#endif /* FREECIV_JSON_CONNECTION */
78826 e = 0;
78827
78828 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78829
78830 if (e) {
78831 log_packet_detailed("'behavior' field error detected");
78832 }
78833 }
78834
78835 sz_strlcpy(old->name, real_packet->name);
78836 sz_strlcpy(old->rule_name, real_packet->rule_name);
78837 if (real_packet->helptext) {
78838 strvec_copy(old->helptext, real_packet->helptext);
78839 } else {
78840 strvec_clear(old->helptext);
78841 }
78842 old->def = real_packet->def;
78843 old->checkpoint = real_packet->checkpoint;
78844 old->type = real_packet->type;
78845 old->behavior = real_packet->behavior;
78846
78847#else /* FREECIV_DELTA_PROTOCOL */
78848#ifdef FREECIV_JSON_CONNECTION
78849 field_addr.name = "name";
78850#endif /* FREECIV_JSON_CONNECTION */
78851 e = 0;
78852
78853 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78854
78855 if (e) {
78856 log_packet_detailed("'name' field error detected");
78857 }
78858
78859#ifdef FREECIV_JSON_CONNECTION
78860 field_addr.name = "rule_name";
78861#endif /* FREECIV_JSON_CONNECTION */
78862 e = 0;
78863
78864 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78865
78866 if (e) {
78867 log_packet_detailed("'rule_name' field error detected");
78868 }
78869
78870#ifdef FREECIV_JSON_CONNECTION
78871 field_addr.name = "helptext";
78872#endif /* FREECIV_JSON_CONNECTION */
78873 e = 0;
78874
78875 if (!real_packet->helptext) {
78876 /* Transmit null as empty */
78877 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78878 } else {
78879 int i;
78880
78882 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78883
78884#ifdef FREECIV_JSON_CONNECTION
78885 /* Enter array. */
78886 field_addr.sub_location = plocation_elem_new(0);
78887#endif /* FREECIV_JSON_CONNECTION */
78888
78889 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78890#ifdef FREECIV_JSON_CONNECTION
78891 /* Next array element. */
78892 field_addr.sub_location->number = i;
78893#endif /* FREECIV_JSON_CONNECTION */
78894
78895 {
78896 const char *pstr = strvec_get(real_packet->helptext, i);
78897
78898 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78899 }
78900 }
78901
78902#ifdef FREECIV_JSON_CONNECTION
78903 /* Exit array. */
78904 FC_FREE(field_addr.sub_location);
78905#endif /* FREECIV_JSON_CONNECTION */
78906 }
78907
78908 if (e) {
78909 log_packet_detailed("'helptext' field error detected");
78910 }
78911
78912#ifdef FREECIV_JSON_CONNECTION
78913 field_addr.name = "def";
78914#endif /* FREECIV_JSON_CONNECTION */
78915 e = 0;
78916
78917 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78918
78919 if (e) {
78920 log_packet_detailed("'def' field error detected");
78921 }
78922
78923#ifdef FREECIV_JSON_CONNECTION
78924 field_addr.name = "checkpoint";
78925#endif /* FREECIV_JSON_CONNECTION */
78926 e = 0;
78927
78928 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78929
78930 if (e) {
78931 log_packet_detailed("'checkpoint' field error detected");
78932 }
78933
78934#ifdef FREECIV_JSON_CONNECTION
78935 field_addr.name = "type";
78936#endif /* FREECIV_JSON_CONNECTION */
78937 e = 0;
78938
78939 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78940
78941 if (e) {
78942 log_packet_detailed("'type' field error detected");
78943 }
78944
78945#ifdef FREECIV_JSON_CONNECTION
78946 field_addr.name = "behavior";
78947#endif /* FREECIV_JSON_CONNECTION */
78948 e = 0;
78949
78950 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78951
78952 if (e) {
78953 log_packet_detailed("'behavior' field error detected");
78954 }
78955#endif /* FREECIV_DELTA_PROTOCOL */
78956
78958}
78959
78961{
78962 if (!pc->used) {
78963 log_error("WARNING: trying to send data to the closed connection %s",
78965 return -1;
78966 }
78967 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet != nullptr, -1,
78968 "Handler for PACKET_RULESET_COUNTER not installed");
78969 return pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet(pc, packet);
78970}
78971
78972void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
78973{
78974 conn_list_iterate(dest, pconn) {
78977}
78978
78979static inline void init_packet_ruleset_music(struct packet_ruleset_music *packet)
78980{
78981 memset(packet, 0, sizeof(*packet));
78982
78983 requirement_vector_init(&packet->reqs);
78984}
78985
78986static inline void free_packet_ruleset_music(struct packet_ruleset_music *packet)
78987{
78988 requirement_vector_free(&packet->reqs);
78989}
78990
78991static inline void destroy_packet_ruleset_music(void *packet)
78992{
78994 free(packet);
78995}
78996
78997#ifdef FREECIV_DELTA_PROTOCOL
78998#define hash_packet_ruleset_music_100 hash_const
78999#define cmp_packet_ruleset_music_100 cmp_const
79001#endif /* FREECIV_DELTA_PROTOCOL */
79002
79004{
79005#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_music(_packet)
79007
79008#ifdef FREECIV_JSON_CONNECTION
79009 struct plocation field_addr;
79010 {
79011 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79014 }
79015#endif /* FREECIV_JSON_CONNECTION */
79016
79017 log_packet_detailed("packet_ruleset_music_100: got info about ()");
79018
79019#ifdef FREECIV_DELTA_PROTOCOL
79021 struct packet_ruleset_music *old;
79022 struct genhash **hash = pc->phs.received + PACKET_RULESET_MUSIC;
79023
79024 if (nullptr == *hash) {
79026 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
79027 }
79028
79029 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79030 real_packet->id = old->id;
79031 sz_strlcpy(real_packet->music_peaceful, old->music_peaceful);
79032 sz_strlcpy(real_packet->music_combat, old->music_combat);
79033 requirement_vector_copy(&real_packet->reqs, &old->reqs);
79034 } else {
79035 /* packet is already initialized empty */
79036 log_packet_detailed(" no old info");
79037 }
79038
79039#ifdef FREECIV_JSON_CONNECTION
79040 field_addr.name = "fields";
79041#endif /* FREECIV_JSON_CONNECTION */
79042 DIO_BV_GET(&din, &field_addr, fields);
79043
79044 if (BV_ISSET(fields, 0)) {
79045 log_packet_detailed(" got field 'id'");
79046
79047#ifdef FREECIV_JSON_CONNECTION
79048 field_addr.name = "id";
79049#endif /* FREECIV_JSON_CONNECTION */
79050
79051 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
79053 }
79054 }
79055
79056 if (BV_ISSET(fields, 1)) {
79057 log_packet_detailed(" got field 'music_peaceful'");
79058
79059#ifdef FREECIV_JSON_CONNECTION
79060 field_addr.name = "music_peaceful";
79061#endif /* FREECIV_JSON_CONNECTION */
79062
79063 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
79064 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
79065 }
79066 }
79067
79068 if (BV_ISSET(fields, 2)) {
79069 log_packet_detailed(" got field 'music_combat'");
79070
79071#ifdef FREECIV_JSON_CONNECTION
79072 field_addr.name = "music_combat";
79073#endif /* FREECIV_JSON_CONNECTION */
79074
79075 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
79076 RECEIVE_PACKET_FIELD_ERROR(music_combat);
79077 }
79078 }
79079
79080 if (BV_ISSET(fields, 3)) {
79081 log_packet_detailed(" got field 'reqs'");
79082
79083#ifdef FREECIV_JSON_CONNECTION
79084 field_addr.name = "reqs";
79085#endif /* FREECIV_JSON_CONNECTION */
79086
79087 {
79088 int i;
79089
79090 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79092 }
79094
79095#ifdef FREECIV_JSON_CONNECTION
79096 /* Enter array. */
79097 field_addr.sub_location = plocation_elem_new(0);
79098#endif /* FREECIV_JSON_CONNECTION */
79099
79100 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79101#ifdef FREECIV_JSON_CONNECTION
79102 /* Next array element */
79103 field_addr.sub_location->number = i;
79104#endif /* FREECIV_JSON_CONNECTION */
79105
79106 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79108 }
79109 }
79110
79111#ifdef FREECIV_JSON_CONNECTION
79112 /* Exit array. */
79113 FC_FREE(field_addr.sub_location);
79114#endif /* FREECIV_JSON_CONNECTION */
79115 }
79116 }
79117
79118 if (nullptr == old) {
79119 old = fc_malloc(sizeof(*old));
79121 old->id = real_packet->id;
79122 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
79123 sz_strlcpy(old->music_combat, real_packet->music_combat);
79124 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79126 } else {
79127 old->id = real_packet->id;
79128 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
79129 sz_strlcpy(old->music_combat, real_packet->music_combat);
79130 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79131 }
79132
79133#else /* FREECIV_DELTA_PROTOCOL */
79134#ifdef FREECIV_JSON_CONNECTION
79135 field_addr.name = "id";
79136#endif /* FREECIV_JSON_CONNECTION */
79137
79138 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
79140 }
79141
79142#ifdef FREECIV_JSON_CONNECTION
79143 field_addr.name = "music_peaceful";
79144#endif /* FREECIV_JSON_CONNECTION */
79145
79146 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
79147 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
79148 }
79149
79150#ifdef FREECIV_JSON_CONNECTION
79151 field_addr.name = "music_combat";
79152#endif /* FREECIV_JSON_CONNECTION */
79153
79154 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
79155 RECEIVE_PACKET_FIELD_ERROR(music_combat);
79156 }
79157
79158#ifdef FREECIV_JSON_CONNECTION
79159 field_addr.name = "reqs";
79160#endif /* FREECIV_JSON_CONNECTION */
79161
79162 {
79163 int i;
79164
79165 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79167 }
79169
79170#ifdef FREECIV_JSON_CONNECTION
79171 /* Enter array. */
79172 field_addr.sub_location = plocation_elem_new(0);
79173#endif /* FREECIV_JSON_CONNECTION */
79174
79175 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79176#ifdef FREECIV_JSON_CONNECTION
79177 /* Next array element */
79178 field_addr.sub_location->number = i;
79179#endif /* FREECIV_JSON_CONNECTION */
79180
79181 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79183 }
79184 }
79185
79186#ifdef FREECIV_JSON_CONNECTION
79187 /* Exit array. */
79188 FC_FREE(field_addr.sub_location);
79189#endif /* FREECIV_JSON_CONNECTION */
79190 }
79191#endif /* FREECIV_DELTA_PROTOCOL */
79192
79194#undef FREE_PACKET_STRUCT
79195}
79196
79197static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
79198{
79199 const struct packet_ruleset_music *real_packet = packet;
79200 int e;
79202
79203 log_packet_detailed("packet_ruleset_music_100: sending info about ()");
79204
79205#ifdef FREECIV_DELTA_PROTOCOL
79207 struct packet_ruleset_music *old;
79208 bool differ;
79209 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MUSIC;
79210
79211 if (nullptr == *hash) {
79213 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
79214 }
79215 BV_CLR_ALL(fields);
79216
79217 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79218 old = fc_malloc(sizeof(*old));
79219 /* temporary bitcopy just to insert correctly */
79220 *old = *real_packet;
79223 }
79224
79225 differ = (old->id != real_packet->id);
79226 if (differ) {
79227 BV_SET(fields, 0);
79228 }
79229
79230 differ = (strcmp(old->music_peaceful, real_packet->music_peaceful) != 0);
79231 if (differ) {
79232 BV_SET(fields, 1);
79233 }
79234
79235 differ = (strcmp(old->music_combat, real_packet->music_combat) != 0);
79236 if (differ) {
79237 BV_SET(fields, 2);
79238 }
79239
79241 if (!differ) {
79242 int i;
79243
79244 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
79245 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
79246 if (differ) {
79247 break;
79248 }
79249 }
79250 }
79251 if (differ) {
79252 BV_SET(fields, 3);
79253 }
79254#endif /* FREECIV_DELTA_PROTOCOL */
79255
79256#ifdef FREECIV_JSON_CONNECTION
79257 struct plocation field_addr;
79258 {
79259 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79262 }
79263#endif /* FREECIV_JSON_CONNECTION */
79264
79265#ifdef FREECIV_DELTA_PROTOCOL
79266#ifdef FREECIV_JSON_CONNECTION
79267 field_addr.name = "fields";
79268#endif /* FREECIV_JSON_CONNECTION */
79269 e = 0;
79270 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79271 if (e) {
79272 log_packet_detailed("fields bitvector error detected");
79273 }
79274
79275 if (BV_ISSET(fields, 0)) {
79276 log_packet_detailed(" field 'id' has changed");
79277
79278#ifdef FREECIV_JSON_CONNECTION
79279 field_addr.name = "id";
79280#endif /* FREECIV_JSON_CONNECTION */
79281 e = 0;
79282
79283 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79284
79285 if (e) {
79286 log_packet_detailed("'id' field error detected");
79287 }
79288 }
79289
79290 if (BV_ISSET(fields, 1)) {
79291 log_packet_detailed(" field 'music_peaceful' has changed");
79292
79293#ifdef FREECIV_JSON_CONNECTION
79294 field_addr.name = "music_peaceful";
79295#endif /* FREECIV_JSON_CONNECTION */
79296 e = 0;
79297
79298 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
79299
79300 if (e) {
79301 log_packet_detailed("'music_peaceful' field error detected");
79302 }
79303 }
79304
79305 if (BV_ISSET(fields, 2)) {
79306 log_packet_detailed(" field 'music_combat' has changed");
79307
79308#ifdef FREECIV_JSON_CONNECTION
79309 field_addr.name = "music_combat";
79310#endif /* FREECIV_JSON_CONNECTION */
79311 e = 0;
79312
79313 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
79314
79315 if (e) {
79316 log_packet_detailed("'music_combat' field error detected");
79317 }
79318 }
79319
79320 if (BV_ISSET(fields, 3)) {
79321 log_packet_detailed(" field 'reqs' has changed");
79322
79323#ifdef FREECIV_JSON_CONNECTION
79324 field_addr.name = "reqs";
79325#endif /* FREECIV_JSON_CONNECTION */
79326 e = 0;
79327
79328 {
79329 int i;
79330
79333
79334#ifdef FREECIV_JSON_CONNECTION
79335 /* Enter array. */
79336 field_addr.sub_location = plocation_elem_new(0);
79337#endif /* FREECIV_JSON_CONNECTION */
79338
79339 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79340#ifdef FREECIV_JSON_CONNECTION
79341 /* Next array element. */
79342 field_addr.sub_location->number = i;
79343#endif /* FREECIV_JSON_CONNECTION */
79344
79345 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79346 }
79347
79348#ifdef FREECIV_JSON_CONNECTION
79349 /* Exit array. */
79350 FC_FREE(field_addr.sub_location);
79351#endif /* FREECIV_JSON_CONNECTION */
79352 }
79353
79354 if (e) {
79355 log_packet_detailed("'reqs' field error detected");
79356 }
79357 }
79358
79359 old->id = real_packet->id;
79360 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
79361 sz_strlcpy(old->music_combat, real_packet->music_combat);
79362 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79363
79364#else /* FREECIV_DELTA_PROTOCOL */
79365#ifdef FREECIV_JSON_CONNECTION
79366 field_addr.name = "id";
79367#endif /* FREECIV_JSON_CONNECTION */
79368 e = 0;
79369
79370 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79371
79372 if (e) {
79373 log_packet_detailed("'id' field error detected");
79374 }
79375
79376#ifdef FREECIV_JSON_CONNECTION
79377 field_addr.name = "music_peaceful";
79378#endif /* FREECIV_JSON_CONNECTION */
79379 e = 0;
79380
79381 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
79382
79383 if (e) {
79384 log_packet_detailed("'music_peaceful' field error detected");
79385 }
79386
79387#ifdef FREECIV_JSON_CONNECTION
79388 field_addr.name = "music_combat";
79389#endif /* FREECIV_JSON_CONNECTION */
79390 e = 0;
79391
79392 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
79393
79394 if (e) {
79395 log_packet_detailed("'music_combat' field error detected");
79396 }
79397
79398#ifdef FREECIV_JSON_CONNECTION
79399 field_addr.name = "reqs";
79400#endif /* FREECIV_JSON_CONNECTION */
79401 e = 0;
79402
79403 {
79404 int i;
79405
79408
79409#ifdef FREECIV_JSON_CONNECTION
79410 /* Enter array. */
79411 field_addr.sub_location = plocation_elem_new(0);
79412#endif /* FREECIV_JSON_CONNECTION */
79413
79414 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79415#ifdef FREECIV_JSON_CONNECTION
79416 /* Next array element. */
79417 field_addr.sub_location->number = i;
79418#endif /* FREECIV_JSON_CONNECTION */
79419
79420 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79421 }
79422
79423#ifdef FREECIV_JSON_CONNECTION
79424 /* Exit array. */
79425 FC_FREE(field_addr.sub_location);
79426#endif /* FREECIV_JSON_CONNECTION */
79427 }
79428
79429 if (e) {
79430 log_packet_detailed("'reqs' field error detected");
79431 }
79432#endif /* FREECIV_DELTA_PROTOCOL */
79433
79435}
79436
79438{
79439 if (!pc->used) {
79440 log_error("WARNING: trying to send data to the closed connection %s",
79442 return -1;
79443 }
79444 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet != nullptr, -1,
79445 "Handler for PACKET_RULESET_MUSIC not installed");
79446 return pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet(pc, packet);
79447}
79448
79449void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
79450{
79451 conn_list_iterate(dest, pconn) {
79454}
79455
79457{
79458 memset(packet, 0, sizeof(*packet));
79459
79460 requirement_vector_init(&packet->reqs);
79461 packet->helptext = strvec_new();
79462}
79463
79465{
79466 if (packet->helptext) {
79467 strvec_destroy(packet->helptext);
79468 packet->helptext = nullptr;
79469 }
79470 requirement_vector_free(&packet->reqs);
79471}
79472
79473static inline void destroy_packet_ruleset_multiplier(void *packet)
79474{
79476 free(packet);
79477}
79478
79479#ifdef FREECIV_DELTA_PROTOCOL
79480#define hash_packet_ruleset_multiplier_100 hash_const
79481#define cmp_packet_ruleset_multiplier_100 cmp_const
79483#endif /* FREECIV_DELTA_PROTOCOL */
79484
79486{
79487#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_multiplier(_packet)
79489
79490#ifdef FREECIV_JSON_CONNECTION
79491 struct plocation field_addr;
79492 {
79493 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79496 }
79497#endif /* FREECIV_JSON_CONNECTION */
79498
79499 log_packet_detailed("packet_ruleset_multiplier_100: got info about ()");
79500
79501#ifdef FREECIV_DELTA_PROTOCOL
79504 struct genhash **hash = pc->phs.received + PACKET_RULESET_MULTIPLIER;
79505
79506 if (nullptr == *hash) {
79508 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79509 }
79510
79511 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79512 real_packet->id = old->id;
79513 real_packet->start = old->start;
79514 real_packet->stop = old->stop;
79515 real_packet->step = old->step;
79516 real_packet->def = old->def;
79517 real_packet->offset = old->offset;
79518 real_packet->factor = old->factor;
79519 real_packet->minimum_turns = old->minimum_turns;
79520 sz_strlcpy(real_packet->name, old->name);
79521 sz_strlcpy(real_packet->rule_name, old->rule_name);
79522 requirement_vector_copy(&real_packet->reqs, &old->reqs);
79523 if (old->helptext) {
79524 strvec_copy(real_packet->helptext, old->helptext);
79525 } else {
79526 strvec_clear(real_packet->helptext);
79527 }
79528 } else {
79529 /* packet is already initialized empty */
79530 log_packet_detailed(" no old info");
79531 }
79532
79533#ifdef FREECIV_JSON_CONNECTION
79534 field_addr.name = "fields";
79535#endif /* FREECIV_JSON_CONNECTION */
79536 DIO_BV_GET(&din, &field_addr, fields);
79537
79538 if (BV_ISSET(fields, 0)) {
79539 log_packet_detailed(" got field 'id'");
79540
79541#ifdef FREECIV_JSON_CONNECTION
79542 field_addr.name = "id";
79543#endif /* FREECIV_JSON_CONNECTION */
79544
79545 {
79546 int readin;
79547
79548 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79550 }
79551 real_packet->id = readin;
79552 }
79553 }
79554
79555 if (BV_ISSET(fields, 1)) {
79556 log_packet_detailed(" got field 'start'");
79557
79558#ifdef FREECIV_JSON_CONNECTION
79559 field_addr.name = "start";
79560#endif /* FREECIV_JSON_CONNECTION */
79561
79562 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79564 }
79565 }
79566
79567 if (BV_ISSET(fields, 2)) {
79568 log_packet_detailed(" got field 'stop'");
79569
79570#ifdef FREECIV_JSON_CONNECTION
79571 field_addr.name = "stop";
79572#endif /* FREECIV_JSON_CONNECTION */
79573
79574 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79576 }
79577 }
79578
79579 if (BV_ISSET(fields, 3)) {
79580 log_packet_detailed(" got field 'step'");
79581
79582#ifdef FREECIV_JSON_CONNECTION
79583 field_addr.name = "step";
79584#endif /* FREECIV_JSON_CONNECTION */
79585
79586 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79588 }
79589 }
79590
79591 if (BV_ISSET(fields, 4)) {
79592 log_packet_detailed(" got field 'def'");
79593
79594#ifdef FREECIV_JSON_CONNECTION
79595 field_addr.name = "def";
79596#endif /* FREECIV_JSON_CONNECTION */
79597
79598 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79600 }
79601 }
79602
79603 if (BV_ISSET(fields, 5)) {
79604 log_packet_detailed(" got field 'offset'");
79605
79606#ifdef FREECIV_JSON_CONNECTION
79607 field_addr.name = "offset";
79608#endif /* FREECIV_JSON_CONNECTION */
79609
79610 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79612 }
79613 }
79614
79615 if (BV_ISSET(fields, 6)) {
79616 log_packet_detailed(" got field 'factor'");
79617
79618#ifdef FREECIV_JSON_CONNECTION
79619 field_addr.name = "factor";
79620#endif /* FREECIV_JSON_CONNECTION */
79621
79622 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79624 }
79625 }
79626
79627 if (BV_ISSET(fields, 7)) {
79628 log_packet_detailed(" got field 'minimum_turns'");
79629
79630#ifdef FREECIV_JSON_CONNECTION
79631 field_addr.name = "minimum_turns";
79632#endif /* FREECIV_JSON_CONNECTION */
79633
79634 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79635 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79636 }
79637 }
79638
79639 if (BV_ISSET(fields, 8)) {
79640 log_packet_detailed(" got field 'name'");
79641
79642#ifdef FREECIV_JSON_CONNECTION
79643 field_addr.name = "name";
79644#endif /* FREECIV_JSON_CONNECTION */
79645
79646 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79648 }
79649 }
79650
79651 if (BV_ISSET(fields, 9)) {
79652 log_packet_detailed(" got field 'rule_name'");
79653
79654#ifdef FREECIV_JSON_CONNECTION
79655 field_addr.name = "rule_name";
79656#endif /* FREECIV_JSON_CONNECTION */
79657
79658 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79659 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79660 }
79661 }
79662
79663 if (BV_ISSET(fields, 10)) {
79664 log_packet_detailed(" got field 'reqs'");
79665
79666#ifdef FREECIV_JSON_CONNECTION
79667 field_addr.name = "reqs";
79668#endif /* FREECIV_JSON_CONNECTION */
79669
79670 {
79671 int i;
79672
79673 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79675 }
79677
79678#ifdef FREECIV_JSON_CONNECTION
79679 /* Enter array. */
79680 field_addr.sub_location = plocation_elem_new(0);
79681#endif /* FREECIV_JSON_CONNECTION */
79682
79683 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79684#ifdef FREECIV_JSON_CONNECTION
79685 /* Next array element */
79686 field_addr.sub_location->number = i;
79687#endif /* FREECIV_JSON_CONNECTION */
79688
79689 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79691 }
79692 }
79693
79694#ifdef FREECIV_JSON_CONNECTION
79695 /* Exit array. */
79696 FC_FREE(field_addr.sub_location);
79697#endif /* FREECIV_JSON_CONNECTION */
79698 }
79699 }
79700
79701 if (BV_ISSET(fields, 11)) {
79702 log_packet_detailed(" got field 'helptext'");
79703
79704#ifdef FREECIV_JSON_CONNECTION
79705 field_addr.name = "helptext";
79706#endif /* FREECIV_JSON_CONNECTION */
79707
79708 {
79709 int i;
79710
79711 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79713 }
79714 strvec_reserve(real_packet->helptext, i);
79715
79716#ifdef FREECIV_JSON_CONNECTION
79717 /* Enter array. */
79718 field_addr.sub_location = plocation_elem_new(0);
79719#endif /* FREECIV_JSON_CONNECTION */
79720
79721 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79722#ifdef FREECIV_JSON_CONNECTION
79723 /* Next array element */
79724 field_addr.sub_location->number = i;
79725#endif /* FREECIV_JSON_CONNECTION */
79726
79727 {
79728 char readin[MAX_LEN_PACKET];
79729
79730 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79731 || !strvec_set(real_packet->helptext, i, readin)) {
79733 }
79734 }
79735 }
79736
79737#ifdef FREECIV_JSON_CONNECTION
79738 /* Exit array. */
79739 FC_FREE(field_addr.sub_location);
79740#endif /* FREECIV_JSON_CONNECTION */
79741 }
79742 }
79743
79744 if (nullptr == old) {
79745 old = fc_malloc(sizeof(*old));
79747 old->id = real_packet->id;
79748 old->start = real_packet->start;
79749 old->stop = real_packet->stop;
79750 old->step = real_packet->step;
79751 old->def = real_packet->def;
79752 old->offset = real_packet->offset;
79753 old->factor = real_packet->factor;
79754 old->minimum_turns = real_packet->minimum_turns;
79755 sz_strlcpy(old->name, real_packet->name);
79756 sz_strlcpy(old->rule_name, real_packet->rule_name);
79757 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79758 if (real_packet->helptext) {
79759 strvec_copy(old->helptext, real_packet->helptext);
79760 } else {
79761 strvec_clear(old->helptext);
79762 }
79764 } else {
79765 old->id = real_packet->id;
79766 old->start = real_packet->start;
79767 old->stop = real_packet->stop;
79768 old->step = real_packet->step;
79769 old->def = real_packet->def;
79770 old->offset = real_packet->offset;
79771 old->factor = real_packet->factor;
79772 old->minimum_turns = real_packet->minimum_turns;
79773 sz_strlcpy(old->name, real_packet->name);
79774 sz_strlcpy(old->rule_name, real_packet->rule_name);
79775 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79776 if (real_packet->helptext) {
79777 strvec_copy(old->helptext, real_packet->helptext);
79778 } else {
79779 strvec_clear(old->helptext);
79780 }
79781 }
79782
79783#else /* FREECIV_DELTA_PROTOCOL */
79784#ifdef FREECIV_JSON_CONNECTION
79785 field_addr.name = "id";
79786#endif /* FREECIV_JSON_CONNECTION */
79787
79788 {
79789 int readin;
79790
79791 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79793 }
79794 real_packet->id = readin;
79795 }
79796
79797#ifdef FREECIV_JSON_CONNECTION
79798 field_addr.name = "start";
79799#endif /* FREECIV_JSON_CONNECTION */
79800
79801 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79803 }
79804
79805#ifdef FREECIV_JSON_CONNECTION
79806 field_addr.name = "stop";
79807#endif /* FREECIV_JSON_CONNECTION */
79808
79809 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79811 }
79812
79813#ifdef FREECIV_JSON_CONNECTION
79814 field_addr.name = "step";
79815#endif /* FREECIV_JSON_CONNECTION */
79816
79817 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79819 }
79820
79821#ifdef FREECIV_JSON_CONNECTION
79822 field_addr.name = "def";
79823#endif /* FREECIV_JSON_CONNECTION */
79824
79825 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79827 }
79828
79829#ifdef FREECIV_JSON_CONNECTION
79830 field_addr.name = "offset";
79831#endif /* FREECIV_JSON_CONNECTION */
79832
79833 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79835 }
79836
79837#ifdef FREECIV_JSON_CONNECTION
79838 field_addr.name = "factor";
79839#endif /* FREECIV_JSON_CONNECTION */
79840
79841 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79843 }
79844
79845#ifdef FREECIV_JSON_CONNECTION
79846 field_addr.name = "minimum_turns";
79847#endif /* FREECIV_JSON_CONNECTION */
79848
79849 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79850 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79851 }
79852
79853#ifdef FREECIV_JSON_CONNECTION
79854 field_addr.name = "name";
79855#endif /* FREECIV_JSON_CONNECTION */
79856
79857 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79859 }
79860
79861#ifdef FREECIV_JSON_CONNECTION
79862 field_addr.name = "rule_name";
79863#endif /* FREECIV_JSON_CONNECTION */
79864
79865 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79866 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79867 }
79868
79869#ifdef FREECIV_JSON_CONNECTION
79870 field_addr.name = "reqs";
79871#endif /* FREECIV_JSON_CONNECTION */
79872
79873 {
79874 int i;
79875
79876 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79878 }
79880
79881#ifdef FREECIV_JSON_CONNECTION
79882 /* Enter array. */
79883 field_addr.sub_location = plocation_elem_new(0);
79884#endif /* FREECIV_JSON_CONNECTION */
79885
79886 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79887#ifdef FREECIV_JSON_CONNECTION
79888 /* Next array element */
79889 field_addr.sub_location->number = i;
79890#endif /* FREECIV_JSON_CONNECTION */
79891
79892 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79894 }
79895 }
79896
79897#ifdef FREECIV_JSON_CONNECTION
79898 /* Exit array. */
79899 FC_FREE(field_addr.sub_location);
79900#endif /* FREECIV_JSON_CONNECTION */
79901 }
79902
79903#ifdef FREECIV_JSON_CONNECTION
79904 field_addr.name = "helptext";
79905#endif /* FREECIV_JSON_CONNECTION */
79906
79907 {
79908 int i;
79909
79910 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79912 }
79913 strvec_reserve(real_packet->helptext, i);
79914
79915#ifdef FREECIV_JSON_CONNECTION
79916 /* Enter array. */
79917 field_addr.sub_location = plocation_elem_new(0);
79918#endif /* FREECIV_JSON_CONNECTION */
79919
79920 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79921#ifdef FREECIV_JSON_CONNECTION
79922 /* Next array element */
79923 field_addr.sub_location->number = i;
79924#endif /* FREECIV_JSON_CONNECTION */
79925
79926 {
79927 char readin[MAX_LEN_PACKET];
79928
79929 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79930 || !strvec_set(real_packet->helptext, i, readin)) {
79932 }
79933 }
79934 }
79935
79936#ifdef FREECIV_JSON_CONNECTION
79937 /* Exit array. */
79938 FC_FREE(field_addr.sub_location);
79939#endif /* FREECIV_JSON_CONNECTION */
79940 }
79941#endif /* FREECIV_DELTA_PROTOCOL */
79942
79944#undef FREE_PACKET_STRUCT
79945}
79946
79948{
79949 const struct packet_ruleset_multiplier *real_packet = packet;
79950 int e;
79952
79953 log_packet_detailed("packet_ruleset_multiplier_100: sending info about ()");
79954
79955#ifdef FREECIV_DELTA_PROTOCOL
79958 bool differ;
79959 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MULTIPLIER;
79960
79961 if (nullptr == *hash) {
79963 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79964 }
79965 BV_CLR_ALL(fields);
79966
79967 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79968 old = fc_malloc(sizeof(*old));
79969 /* temporary bitcopy just to insert correctly */
79970 *old = *real_packet;
79973 }
79974
79975 differ = (old->id != real_packet->id);
79976 if (differ) {
79977 BV_SET(fields, 0);
79978 }
79979
79980 differ = (old->start != real_packet->start);
79981 if (differ) {
79982 BV_SET(fields, 1);
79983 }
79984
79985 differ = (old->stop != real_packet->stop);
79986 if (differ) {
79987 BV_SET(fields, 2);
79988 }
79989
79990 differ = (old->step != real_packet->step);
79991 if (differ) {
79992 BV_SET(fields, 3);
79993 }
79994
79995 differ = (old->def != real_packet->def);
79996 if (differ) {
79997 BV_SET(fields, 4);
79998 }
79999
80000 differ = (old->offset != real_packet->offset);
80001 if (differ) {
80002 BV_SET(fields, 5);
80003 }
80004
80005 differ = (old->factor != real_packet->factor);
80006 if (differ) {
80007 BV_SET(fields, 6);
80008 }
80009
80010 differ = (old->minimum_turns != real_packet->minimum_turns);
80011 if (differ) {
80012 BV_SET(fields, 7);
80013 }
80014
80015 differ = (strcmp(old->name, real_packet->name) != 0);
80016 if (differ) {
80017 BV_SET(fields, 8);
80018 }
80019
80020 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
80021 if (differ) {
80022 BV_SET(fields, 9);
80023 }
80024
80026 if (!differ) {
80027 int i;
80028
80029 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
80030 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
80031 if (differ) {
80032 break;
80033 }
80034 }
80035 }
80036 if (differ) {
80037 BV_SET(fields, 10);
80038 }
80039
80040 if (real_packet->helptext) {
80041 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
80042 } else {
80043 differ = (strvec_size(old->helptext) > 0);
80044 }
80045 if (differ) {
80046 BV_SET(fields, 11);
80047 }
80048#endif /* FREECIV_DELTA_PROTOCOL */
80049
80050#ifdef FREECIV_JSON_CONNECTION
80051 struct plocation field_addr;
80052 {
80053 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80056 }
80057#endif /* FREECIV_JSON_CONNECTION */
80058
80059#ifdef FREECIV_DELTA_PROTOCOL
80060#ifdef FREECIV_JSON_CONNECTION
80061 field_addr.name = "fields";
80062#endif /* FREECIV_JSON_CONNECTION */
80063 e = 0;
80064 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80065 if (e) {
80066 log_packet_detailed("fields bitvector error detected");
80067 }
80068
80069 if (BV_ISSET(fields, 0)) {
80070 log_packet_detailed(" field 'id' has changed");
80071
80072#ifdef FREECIV_JSON_CONNECTION
80073 field_addr.name = "id";
80074#endif /* FREECIV_JSON_CONNECTION */
80075 e = 0;
80076
80077 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
80078
80079 if (e) {
80080 log_packet_detailed("'id' field error detected");
80081 }
80082 }
80083
80084 if (BV_ISSET(fields, 1)) {
80085 log_packet_detailed(" field 'start' has changed");
80086
80087#ifdef FREECIV_JSON_CONNECTION
80088 field_addr.name = "start";
80089#endif /* FREECIV_JSON_CONNECTION */
80090 e = 0;
80091
80092 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
80093
80094 if (e) {
80095 log_packet_detailed("'start' field error detected");
80096 }
80097 }
80098
80099 if (BV_ISSET(fields, 2)) {
80100 log_packet_detailed(" field 'stop' has changed");
80101
80102#ifdef FREECIV_JSON_CONNECTION
80103 field_addr.name = "stop";
80104#endif /* FREECIV_JSON_CONNECTION */
80105 e = 0;
80106
80107 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
80108
80109 if (e) {
80110 log_packet_detailed("'stop' field error detected");
80111 }
80112 }
80113
80114 if (BV_ISSET(fields, 3)) {
80115 log_packet_detailed(" field 'step' has changed");
80116
80117#ifdef FREECIV_JSON_CONNECTION
80118 field_addr.name = "step";
80119#endif /* FREECIV_JSON_CONNECTION */
80120 e = 0;
80121
80122 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
80123
80124 if (e) {
80125 log_packet_detailed("'step' field error detected");
80126 }
80127 }
80128
80129 if (BV_ISSET(fields, 4)) {
80130 log_packet_detailed(" field 'def' has changed");
80131
80132#ifdef FREECIV_JSON_CONNECTION
80133 field_addr.name = "def";
80134#endif /* FREECIV_JSON_CONNECTION */
80135 e = 0;
80136
80137 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
80138
80139 if (e) {
80140 log_packet_detailed("'def' field error detected");
80141 }
80142 }
80143
80144 if (BV_ISSET(fields, 5)) {
80145 log_packet_detailed(" field 'offset' has changed");
80146
80147#ifdef FREECIV_JSON_CONNECTION
80148 field_addr.name = "offset";
80149#endif /* FREECIV_JSON_CONNECTION */
80150 e = 0;
80151
80152 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
80153
80154 if (e) {
80155 log_packet_detailed("'offset' field error detected");
80156 }
80157 }
80158
80159 if (BV_ISSET(fields, 6)) {
80160 log_packet_detailed(" field 'factor' has changed");
80161
80162#ifdef FREECIV_JSON_CONNECTION
80163 field_addr.name = "factor";
80164#endif /* FREECIV_JSON_CONNECTION */
80165 e = 0;
80166
80167 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
80168
80169 if (e) {
80170 log_packet_detailed("'factor' field error detected");
80171 }
80172 }
80173
80174 if (BV_ISSET(fields, 7)) {
80175 log_packet_detailed(" field 'minimum_turns' has changed");
80176
80177#ifdef FREECIV_JSON_CONNECTION
80178 field_addr.name = "minimum_turns";
80179#endif /* FREECIV_JSON_CONNECTION */
80180 e = 0;
80181
80182 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
80183
80184 if (e) {
80185 log_packet_detailed("'minimum_turns' field error detected");
80186 }
80187 }
80188
80189 if (BV_ISSET(fields, 8)) {
80190 log_packet_detailed(" field 'name' has changed");
80191
80192#ifdef FREECIV_JSON_CONNECTION
80193 field_addr.name = "name";
80194#endif /* FREECIV_JSON_CONNECTION */
80195 e = 0;
80196
80197 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
80198
80199 if (e) {
80200 log_packet_detailed("'name' field error detected");
80201 }
80202 }
80203
80204 if (BV_ISSET(fields, 9)) {
80205 log_packet_detailed(" field 'rule_name' has changed");
80206
80207#ifdef FREECIV_JSON_CONNECTION
80208 field_addr.name = "rule_name";
80209#endif /* FREECIV_JSON_CONNECTION */
80210 e = 0;
80211
80212 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
80213
80214 if (e) {
80215 log_packet_detailed("'rule_name' field error detected");
80216 }
80217 }
80218
80219 if (BV_ISSET(fields, 10)) {
80220 log_packet_detailed(" field 'reqs' has changed");
80221
80222#ifdef FREECIV_JSON_CONNECTION
80223 field_addr.name = "reqs";
80224#endif /* FREECIV_JSON_CONNECTION */
80225 e = 0;
80226
80227 {
80228 int i;
80229
80232
80233#ifdef FREECIV_JSON_CONNECTION
80234 /* Enter array. */
80235 field_addr.sub_location = plocation_elem_new(0);
80236#endif /* FREECIV_JSON_CONNECTION */
80237
80238 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
80239#ifdef FREECIV_JSON_CONNECTION
80240 /* Next array element. */
80241 field_addr.sub_location->number = i;
80242#endif /* FREECIV_JSON_CONNECTION */
80243
80244 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
80245 }
80246
80247#ifdef FREECIV_JSON_CONNECTION
80248 /* Exit array. */
80249 FC_FREE(field_addr.sub_location);
80250#endif /* FREECIV_JSON_CONNECTION */
80251 }
80252
80253 if (e) {
80254 log_packet_detailed("'reqs' field error detected");
80255 }
80256 }
80257
80258 if (BV_ISSET(fields, 11)) {
80259 log_packet_detailed(" field 'helptext' has changed");
80260
80261#ifdef FREECIV_JSON_CONNECTION
80262 field_addr.name = "helptext";
80263#endif /* FREECIV_JSON_CONNECTION */
80264 e = 0;
80265
80266 if (!real_packet->helptext) {
80267 /* Transmit null as empty */
80268 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
80269 } else {
80270 int i;
80271
80273 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
80274
80275#ifdef FREECIV_JSON_CONNECTION
80276 /* Enter array. */
80277 field_addr.sub_location = plocation_elem_new(0);
80278#endif /* FREECIV_JSON_CONNECTION */
80279
80280 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
80281#ifdef FREECIV_JSON_CONNECTION
80282 /* Next array element. */
80283 field_addr.sub_location->number = i;
80284#endif /* FREECIV_JSON_CONNECTION */
80285
80286 {
80287 const char *pstr = strvec_get(real_packet->helptext, i);
80288
80289 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
80290 }
80291 }
80292
80293#ifdef FREECIV_JSON_CONNECTION
80294 /* Exit array. */
80295 FC_FREE(field_addr.sub_location);
80296#endif /* FREECIV_JSON_CONNECTION */
80297 }
80298
80299 if (e) {
80300 log_packet_detailed("'helptext' field error detected");
80301 }
80302 }
80303
80304 old->id = real_packet->id;
80305 old->start = real_packet->start;
80306 old->stop = real_packet->stop;
80307 old->step = real_packet->step;
80308 old->def = real_packet->def;
80309 old->offset = real_packet->offset;
80310 old->factor = real_packet->factor;
80311 old->minimum_turns = real_packet->minimum_turns;
80312 sz_strlcpy(old->name, real_packet->name);
80313 sz_strlcpy(old->rule_name, real_packet->rule_name);
80314 requirement_vector_copy(&old->reqs, &real_packet->reqs);
80315 if (real_packet->helptext) {
80316 strvec_copy(old->helptext, real_packet->helptext);
80317 } else {
80318 strvec_clear(old->helptext);
80319 }
80320
80321#else /* FREECIV_DELTA_PROTOCOL */
80322#ifdef FREECIV_JSON_CONNECTION
80323 field_addr.name = "id";
80324#endif /* FREECIV_JSON_CONNECTION */
80325 e = 0;
80326
80327 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
80328
80329 if (e) {
80330 log_packet_detailed("'id' field error detected");
80331 }
80332
80333#ifdef FREECIV_JSON_CONNECTION
80334 field_addr.name = "start";
80335#endif /* FREECIV_JSON_CONNECTION */
80336 e = 0;
80337
80338 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
80339
80340 if (e) {
80341 log_packet_detailed("'start' field error detected");
80342 }
80343
80344#ifdef FREECIV_JSON_CONNECTION
80345 field_addr.name = "stop";
80346#endif /* FREECIV_JSON_CONNECTION */
80347 e = 0;
80348
80349 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
80350
80351 if (e) {
80352 log_packet_detailed("'stop' field error detected");
80353 }
80354
80355#ifdef FREECIV_JSON_CONNECTION
80356 field_addr.name = "step";
80357#endif /* FREECIV_JSON_CONNECTION */
80358 e = 0;
80359
80360 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
80361
80362 if (e) {
80363 log_packet_detailed("'step' field error detected");
80364 }
80365
80366#ifdef FREECIV_JSON_CONNECTION
80367 field_addr.name = "def";
80368#endif /* FREECIV_JSON_CONNECTION */
80369 e = 0;
80370
80371 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
80372
80373 if (e) {
80374 log_packet_detailed("'def' field error detected");
80375 }
80376
80377#ifdef FREECIV_JSON_CONNECTION
80378 field_addr.name = "offset";
80379#endif /* FREECIV_JSON_CONNECTION */
80380 e = 0;
80381
80382 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
80383
80384 if (e) {
80385 log_packet_detailed("'offset' field error detected");
80386 }
80387
80388#ifdef FREECIV_JSON_CONNECTION
80389 field_addr.name = "factor";
80390#endif /* FREECIV_JSON_CONNECTION */
80391 e = 0;
80392
80393 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
80394
80395 if (e) {
80396 log_packet_detailed("'factor' field error detected");
80397 }
80398
80399#ifdef FREECIV_JSON_CONNECTION
80400 field_addr.name = "minimum_turns";
80401#endif /* FREECIV_JSON_CONNECTION */
80402 e = 0;
80403
80404 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
80405
80406 if (e) {
80407 log_packet_detailed("'minimum_turns' field error detected");
80408 }
80409
80410#ifdef FREECIV_JSON_CONNECTION
80411 field_addr.name = "name";
80412#endif /* FREECIV_JSON_CONNECTION */
80413 e = 0;
80414
80415 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
80416
80417 if (e) {
80418 log_packet_detailed("'name' field error detected");
80419 }
80420
80421#ifdef FREECIV_JSON_CONNECTION
80422 field_addr.name = "rule_name";
80423#endif /* FREECIV_JSON_CONNECTION */
80424 e = 0;
80425
80426 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
80427
80428 if (e) {
80429 log_packet_detailed("'rule_name' field error detected");
80430 }
80431
80432#ifdef FREECIV_JSON_CONNECTION
80433 field_addr.name = "reqs";
80434#endif /* FREECIV_JSON_CONNECTION */
80435 e = 0;
80436
80437 {
80438 int i;
80439
80442
80443#ifdef FREECIV_JSON_CONNECTION
80444 /* Enter array. */
80445 field_addr.sub_location = plocation_elem_new(0);
80446#endif /* FREECIV_JSON_CONNECTION */
80447
80448 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
80449#ifdef FREECIV_JSON_CONNECTION
80450 /* Next array element. */
80451 field_addr.sub_location->number = i;
80452#endif /* FREECIV_JSON_CONNECTION */
80453
80454 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
80455 }
80456
80457#ifdef FREECIV_JSON_CONNECTION
80458 /* Exit array. */
80459 FC_FREE(field_addr.sub_location);
80460#endif /* FREECIV_JSON_CONNECTION */
80461 }
80462
80463 if (e) {
80464 log_packet_detailed("'reqs' field error detected");
80465 }
80466
80467#ifdef FREECIV_JSON_CONNECTION
80468 field_addr.name = "helptext";
80469#endif /* FREECIV_JSON_CONNECTION */
80470 e = 0;
80471
80472 if (!real_packet->helptext) {
80473 /* Transmit null as empty */
80474 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
80475 } else {
80476 int i;
80477
80479 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
80480
80481#ifdef FREECIV_JSON_CONNECTION
80482 /* Enter array. */
80483 field_addr.sub_location = plocation_elem_new(0);
80484#endif /* FREECIV_JSON_CONNECTION */
80485
80486 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
80487#ifdef FREECIV_JSON_CONNECTION
80488 /* Next array element. */
80489 field_addr.sub_location->number = i;
80490#endif /* FREECIV_JSON_CONNECTION */
80491
80492 {
80493 const char *pstr = strvec_get(real_packet->helptext, i);
80494
80495 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
80496 }
80497 }
80498
80499#ifdef FREECIV_JSON_CONNECTION
80500 /* Exit array. */
80501 FC_FREE(field_addr.sub_location);
80502#endif /* FREECIV_JSON_CONNECTION */
80503 }
80504
80505 if (e) {
80506 log_packet_detailed("'helptext' field error detected");
80507 }
80508#endif /* FREECIV_DELTA_PROTOCOL */
80509
80511}
80512
80514{
80515 if (!pc->used) {
80516 log_error("WARNING: trying to send data to the closed connection %s",
80518 return -1;
80519 }
80520 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet != nullptr, -1,
80521 "Handler for PACKET_RULESET_MULTIPLIER not installed");
80522 return pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet(pc, packet);
80523}
80524
80526{
80527 conn_list_iterate(dest, pconn) {
80530}
80531
80532static inline void init_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80533{
80534 memset(packet, 0, sizeof(*packet));
80535
80539}
80540
80541static inline void free_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80542{
80546}
80547
80548static inline void destroy_packet_ruleset_clause(void *packet)
80549{
80551 free(packet);
80552}
80553
80554#ifdef FREECIV_DELTA_PROTOCOL
80555#define hash_packet_ruleset_clause_100 hash_const
80556#define cmp_packet_ruleset_clause_100 cmp_const
80558#endif /* FREECIV_DELTA_PROTOCOL */
80559
80561{
80562#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_clause(_packet)
80564
80565#ifdef FREECIV_JSON_CONNECTION
80566 struct plocation field_addr;
80567 {
80568 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80571 }
80572#endif /* FREECIV_JSON_CONNECTION */
80573
80574 log_packet_detailed("packet_ruleset_clause_100: got info about ()");
80575
80576#ifdef FREECIV_DELTA_PROTOCOL
80578 struct packet_ruleset_clause *old;
80579 struct genhash **hash = pc->phs.received + PACKET_RULESET_CLAUSE;
80580
80581 if (nullptr == *hash) {
80583 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80584 }
80585
80586 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80587 real_packet->type = old->type;
80588 real_packet->enabled = old->enabled;
80589 requirement_vector_copy(&real_packet->giver_reqs, &old->giver_reqs);
80590 requirement_vector_copy(&real_packet->receiver_reqs, &old->receiver_reqs);
80591 requirement_vector_copy(&real_packet->either_reqs, &old->either_reqs);
80592 } else {
80593 /* packet is already initialized empty */
80594 log_packet_detailed(" no old info");
80595 }
80596
80597#ifdef FREECIV_JSON_CONNECTION
80598 field_addr.name = "fields";
80599#endif /* FREECIV_JSON_CONNECTION */
80600 DIO_BV_GET(&din, &field_addr, fields);
80601
80602 if (BV_ISSET(fields, 0)) {
80603 log_packet_detailed(" got field 'type'");
80604
80605#ifdef FREECIV_JSON_CONNECTION
80606 field_addr.name = "type";
80607#endif /* FREECIV_JSON_CONNECTION */
80608
80609 {
80610 int readin;
80611
80612 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80614 }
80615 real_packet->type = readin;
80616 }
80617 }
80618
80619 real_packet->enabled = BV_ISSET(fields, 1);
80620
80621 if (BV_ISSET(fields, 2)) {
80622 log_packet_detailed(" got field 'giver_reqs'");
80623
80624#ifdef FREECIV_JSON_CONNECTION
80625 field_addr.name = "giver_reqs";
80626#endif /* FREECIV_JSON_CONNECTION */
80627
80628 {
80629 int i;
80630
80631 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80632 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80633 }
80635
80636#ifdef FREECIV_JSON_CONNECTION
80637 /* Enter array. */
80638 field_addr.sub_location = plocation_elem_new(0);
80639#endif /* FREECIV_JSON_CONNECTION */
80640
80641 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80642#ifdef FREECIV_JSON_CONNECTION
80643 /* Next array element */
80644 field_addr.sub_location->number = i;
80645#endif /* FREECIV_JSON_CONNECTION */
80646
80647 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80648 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80649 }
80650 }
80651
80652#ifdef FREECIV_JSON_CONNECTION
80653 /* Exit array. */
80654 FC_FREE(field_addr.sub_location);
80655#endif /* FREECIV_JSON_CONNECTION */
80656 }
80657 }
80658
80659 if (BV_ISSET(fields, 3)) {
80660 log_packet_detailed(" got field 'receiver_reqs'");
80661
80662#ifdef FREECIV_JSON_CONNECTION
80663 field_addr.name = "receiver_reqs";
80664#endif /* FREECIV_JSON_CONNECTION */
80665
80666 {
80667 int i;
80668
80669 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80670 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80671 }
80672 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80673
80674#ifdef FREECIV_JSON_CONNECTION
80675 /* Enter array. */
80676 field_addr.sub_location = plocation_elem_new(0);
80677#endif /* FREECIV_JSON_CONNECTION */
80678
80679 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80680#ifdef FREECIV_JSON_CONNECTION
80681 /* Next array element */
80682 field_addr.sub_location->number = i;
80683#endif /* FREECIV_JSON_CONNECTION */
80684
80685 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80686 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80687 }
80688 }
80689
80690#ifdef FREECIV_JSON_CONNECTION
80691 /* Exit array. */
80692 FC_FREE(field_addr.sub_location);
80693#endif /* FREECIV_JSON_CONNECTION */
80694 }
80695 }
80696
80697 if (BV_ISSET(fields, 4)) {
80698 log_packet_detailed(" got field 'either_reqs'");
80699
80700#ifdef FREECIV_JSON_CONNECTION
80701 field_addr.name = "either_reqs";
80702#endif /* FREECIV_JSON_CONNECTION */
80703
80704 {
80705 int i;
80706
80707 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80708 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80709 }
80711
80712#ifdef FREECIV_JSON_CONNECTION
80713 /* Enter array. */
80714 field_addr.sub_location = plocation_elem_new(0);
80715#endif /* FREECIV_JSON_CONNECTION */
80716
80717 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80718#ifdef FREECIV_JSON_CONNECTION
80719 /* Next array element */
80720 field_addr.sub_location->number = i;
80721#endif /* FREECIV_JSON_CONNECTION */
80722
80723 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80724 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80725 }
80726 }
80727
80728#ifdef FREECIV_JSON_CONNECTION
80729 /* Exit array. */
80730 FC_FREE(field_addr.sub_location);
80731#endif /* FREECIV_JSON_CONNECTION */
80732 }
80733 }
80734
80735 if (nullptr == old) {
80736 old = fc_malloc(sizeof(*old));
80738 old->type = real_packet->type;
80739 old->enabled = real_packet->enabled;
80740 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80741 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80742 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80744 } else {
80745 old->type = real_packet->type;
80746 old->enabled = real_packet->enabled;
80747 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80748 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80749 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80750 }
80751
80752#else /* FREECIV_DELTA_PROTOCOL */
80753#ifdef FREECIV_JSON_CONNECTION
80754 field_addr.name = "type";
80755#endif /* FREECIV_JSON_CONNECTION */
80756
80757 {
80758 int readin;
80759
80760 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80762 }
80763 real_packet->type = readin;
80764 }
80765
80766#ifdef FREECIV_JSON_CONNECTION
80767 field_addr.name = "enabled";
80768#endif /* FREECIV_JSON_CONNECTION */
80769
80770 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
80772 }
80773
80774#ifdef FREECIV_JSON_CONNECTION
80775 field_addr.name = "giver_reqs";
80776#endif /* FREECIV_JSON_CONNECTION */
80777
80778 {
80779 int i;
80780
80781 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80782 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80783 }
80785
80786#ifdef FREECIV_JSON_CONNECTION
80787 /* Enter array. */
80788 field_addr.sub_location = plocation_elem_new(0);
80789#endif /* FREECIV_JSON_CONNECTION */
80790
80791 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80792#ifdef FREECIV_JSON_CONNECTION
80793 /* Next array element */
80794 field_addr.sub_location->number = i;
80795#endif /* FREECIV_JSON_CONNECTION */
80796
80797 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80798 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80799 }
80800 }
80801
80802#ifdef FREECIV_JSON_CONNECTION
80803 /* Exit array. */
80804 FC_FREE(field_addr.sub_location);
80805#endif /* FREECIV_JSON_CONNECTION */
80806 }
80807
80808#ifdef FREECIV_JSON_CONNECTION
80809 field_addr.name = "receiver_reqs";
80810#endif /* FREECIV_JSON_CONNECTION */
80811
80812 {
80813 int i;
80814
80815 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80816 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80817 }
80818 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80819
80820#ifdef FREECIV_JSON_CONNECTION
80821 /* Enter array. */
80822 field_addr.sub_location = plocation_elem_new(0);
80823#endif /* FREECIV_JSON_CONNECTION */
80824
80825 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80826#ifdef FREECIV_JSON_CONNECTION
80827 /* Next array element */
80828 field_addr.sub_location->number = i;
80829#endif /* FREECIV_JSON_CONNECTION */
80830
80831 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80832 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80833 }
80834 }
80835
80836#ifdef FREECIV_JSON_CONNECTION
80837 /* Exit array. */
80838 FC_FREE(field_addr.sub_location);
80839#endif /* FREECIV_JSON_CONNECTION */
80840 }
80841
80842#ifdef FREECIV_JSON_CONNECTION
80843 field_addr.name = "either_reqs";
80844#endif /* FREECIV_JSON_CONNECTION */
80845
80846 {
80847 int i;
80848
80849 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80850 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80851 }
80853
80854#ifdef FREECIV_JSON_CONNECTION
80855 /* Enter array. */
80856 field_addr.sub_location = plocation_elem_new(0);
80857#endif /* FREECIV_JSON_CONNECTION */
80858
80859 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80860#ifdef FREECIV_JSON_CONNECTION
80861 /* Next array element */
80862 field_addr.sub_location->number = i;
80863#endif /* FREECIV_JSON_CONNECTION */
80864
80865 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80866 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80867 }
80868 }
80869
80870#ifdef FREECIV_JSON_CONNECTION
80871 /* Exit array. */
80872 FC_FREE(field_addr.sub_location);
80873#endif /* FREECIV_JSON_CONNECTION */
80874 }
80875#endif /* FREECIV_DELTA_PROTOCOL */
80876
80878#undef FREE_PACKET_STRUCT
80879}
80880
80882{
80883 const struct packet_ruleset_clause *real_packet = packet;
80884 int e;
80886
80887 log_packet_detailed("packet_ruleset_clause_100: sending info about ()");
80888
80889#ifdef FREECIV_DELTA_PROTOCOL
80891 struct packet_ruleset_clause *old;
80892 bool differ;
80893 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CLAUSE;
80894
80895 if (nullptr == *hash) {
80897 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80898 }
80899 BV_CLR_ALL(fields);
80900
80901 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80902 old = fc_malloc(sizeof(*old));
80903 /* temporary bitcopy just to insert correctly */
80904 *old = *real_packet;
80907 }
80908
80909 differ = (old->type != real_packet->type);
80910 if (differ) {
80911 BV_SET(fields, 0);
80912 }
80913
80914 /* folded into head */
80915 if (real_packet->enabled) {
80916 BV_SET(fields, 1);
80917 }
80918
80919 differ = (requirement_vector_size(&old->giver_reqs) != requirement_vector_size(&real_packet->giver_reqs));
80920 if (!differ) {
80921 int i;
80922
80923 for (i = 0; i < requirement_vector_size(&old->giver_reqs); i++) {
80924 differ = !are_requirements_equal(&old->giver_reqs.p[i], &real_packet->giver_reqs.p[i]);
80925 if (differ) {
80926 break;
80927 }
80928 }
80929 }
80930 if (differ) {
80931 BV_SET(fields, 2);
80932 }
80933
80934 differ = (requirement_vector_size(&old->receiver_reqs) != requirement_vector_size(&real_packet->receiver_reqs));
80935 if (!differ) {
80936 int i;
80937
80938 for (i = 0; i < requirement_vector_size(&old->receiver_reqs); i++) {
80939 differ = !are_requirements_equal(&old->receiver_reqs.p[i], &real_packet->receiver_reqs.p[i]);
80940 if (differ) {
80941 break;
80942 }
80943 }
80944 }
80945 if (differ) {
80946 BV_SET(fields, 3);
80947 }
80948
80949 differ = (requirement_vector_size(&old->either_reqs) != requirement_vector_size(&real_packet->either_reqs));
80950 if (!differ) {
80951 int i;
80952
80953 for (i = 0; i < requirement_vector_size(&old->either_reqs); i++) {
80954 differ = !are_requirements_equal(&old->either_reqs.p[i], &real_packet->either_reqs.p[i]);
80955 if (differ) {
80956 break;
80957 }
80958 }
80959 }
80960 if (differ) {
80961 BV_SET(fields, 4);
80962 }
80963#endif /* FREECIV_DELTA_PROTOCOL */
80964
80965#ifdef FREECIV_JSON_CONNECTION
80966 struct plocation field_addr;
80967 {
80968 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80971 }
80972#endif /* FREECIV_JSON_CONNECTION */
80973
80974#ifdef FREECIV_DELTA_PROTOCOL
80975#ifdef FREECIV_JSON_CONNECTION
80976 field_addr.name = "fields";
80977#endif /* FREECIV_JSON_CONNECTION */
80978 e = 0;
80979 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80980 if (e) {
80981 log_packet_detailed("fields bitvector error detected");
80982 }
80983
80984 if (BV_ISSET(fields, 0)) {
80985 log_packet_detailed(" field 'type' has changed");
80986
80987#ifdef FREECIV_JSON_CONNECTION
80988 field_addr.name = "type";
80989#endif /* FREECIV_JSON_CONNECTION */
80990 e = 0;
80991
80992 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
80993
80994 if (e) {
80995 log_packet_detailed("'type' field error detected");
80996 }
80997 }
80998
80999 /* field 1 is folded into the header */
81000
81001 if (BV_ISSET(fields, 2)) {
81002 log_packet_detailed(" field 'giver_reqs' has changed");
81003
81004#ifdef FREECIV_JSON_CONNECTION
81005 field_addr.name = "giver_reqs";
81006#endif /* FREECIV_JSON_CONNECTION */
81007 e = 0;
81008
81009 {
81010 int i;
81011
81014
81015#ifdef FREECIV_JSON_CONNECTION
81016 /* Enter array. */
81017 field_addr.sub_location = plocation_elem_new(0);
81018#endif /* FREECIV_JSON_CONNECTION */
81019
81020 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
81021#ifdef FREECIV_JSON_CONNECTION
81022 /* Next array element. */
81023 field_addr.sub_location->number = i;
81024#endif /* FREECIV_JSON_CONNECTION */
81025
81026 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
81027 }
81028
81029#ifdef FREECIV_JSON_CONNECTION
81030 /* Exit array. */
81031 FC_FREE(field_addr.sub_location);
81032#endif /* FREECIV_JSON_CONNECTION */
81033 }
81034
81035 if (e) {
81036 log_packet_detailed("'giver_reqs' field error detected");
81037 }
81038 }
81039
81040 if (BV_ISSET(fields, 3)) {
81041 log_packet_detailed(" field 'receiver_reqs' has changed");
81042
81043#ifdef FREECIV_JSON_CONNECTION
81044 field_addr.name = "receiver_reqs";
81045#endif /* FREECIV_JSON_CONNECTION */
81046 e = 0;
81047
81048 {
81049 int i;
81050
81053
81054#ifdef FREECIV_JSON_CONNECTION
81055 /* Enter array. */
81056 field_addr.sub_location = plocation_elem_new(0);
81057#endif /* FREECIV_JSON_CONNECTION */
81058
81059 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
81060#ifdef FREECIV_JSON_CONNECTION
81061 /* Next array element. */
81062 field_addr.sub_location->number = i;
81063#endif /* FREECIV_JSON_CONNECTION */
81064
81065 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs.p[i]);
81066 }
81067
81068#ifdef FREECIV_JSON_CONNECTION
81069 /* Exit array. */
81070 FC_FREE(field_addr.sub_location);
81071#endif /* FREECIV_JSON_CONNECTION */
81072 }
81073
81074 if (e) {
81075 log_packet_detailed("'receiver_reqs' field error detected");
81076 }
81077 }
81078
81079 if (BV_ISSET(fields, 4)) {
81080 log_packet_detailed(" field 'either_reqs' has changed");
81081
81082#ifdef FREECIV_JSON_CONNECTION
81083 field_addr.name = "either_reqs";
81084#endif /* FREECIV_JSON_CONNECTION */
81085 e = 0;
81086
81087 {
81088 int i;
81089
81092
81093#ifdef FREECIV_JSON_CONNECTION
81094 /* Enter array. */
81095 field_addr.sub_location = plocation_elem_new(0);
81096#endif /* FREECIV_JSON_CONNECTION */
81097
81098 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
81099#ifdef FREECIV_JSON_CONNECTION
81100 /* Next array element. */
81101 field_addr.sub_location->number = i;
81102#endif /* FREECIV_JSON_CONNECTION */
81103
81104 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
81105 }
81106
81107#ifdef FREECIV_JSON_CONNECTION
81108 /* Exit array. */
81109 FC_FREE(field_addr.sub_location);
81110#endif /* FREECIV_JSON_CONNECTION */
81111 }
81112
81113 if (e) {
81114 log_packet_detailed("'either_reqs' field error detected");
81115 }
81116 }
81117
81118 old->type = real_packet->type;
81119 old->enabled = real_packet->enabled;
81120 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
81121 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
81122 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
81123
81124#else /* FREECIV_DELTA_PROTOCOL */
81125#ifdef FREECIV_JSON_CONNECTION
81126 field_addr.name = "type";
81127#endif /* FREECIV_JSON_CONNECTION */
81128 e = 0;
81129
81130 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
81131
81132 if (e) {
81133 log_packet_detailed("'type' field error detected");
81134 }
81135
81136#ifdef FREECIV_JSON_CONNECTION
81137 field_addr.name = "enabled";
81138#endif /* FREECIV_JSON_CONNECTION */
81139 e = 0;
81140
81141 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
81142
81143 if (e) {
81144 log_packet_detailed("'enabled' field error detected");
81145 }
81146
81147#ifdef FREECIV_JSON_CONNECTION
81148 field_addr.name = "giver_reqs";
81149#endif /* FREECIV_JSON_CONNECTION */
81150 e = 0;
81151
81152 {
81153 int i;
81154
81157
81158#ifdef FREECIV_JSON_CONNECTION
81159 /* Enter array. */
81160 field_addr.sub_location = plocation_elem_new(0);
81161#endif /* FREECIV_JSON_CONNECTION */
81162
81163 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
81164#ifdef FREECIV_JSON_CONNECTION
81165 /* Next array element. */
81166 field_addr.sub_location->number = i;
81167#endif /* FREECIV_JSON_CONNECTION */
81168
81169 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
81170 }
81171
81172#ifdef FREECIV_JSON_CONNECTION
81173 /* Exit array. */
81174 FC_FREE(field_addr.sub_location);
81175#endif /* FREECIV_JSON_CONNECTION */
81176 }
81177
81178 if (e) {
81179 log_packet_detailed("'giver_reqs' field error detected");
81180 }
81181
81182#ifdef FREECIV_JSON_CONNECTION
81183 field_addr.name = "receiver_reqs";
81184#endif /* FREECIV_JSON_CONNECTION */
81185 e = 0;
81186
81187 {
81188 int i;
81189
81192
81193#ifdef FREECIV_JSON_CONNECTION
81194 /* Enter array. */
81195 field_addr.sub_location = plocation_elem_new(0);
81196#endif /* FREECIV_JSON_CONNECTION */
81197
81198 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
81199#ifdef FREECIV_JSON_CONNECTION
81200 /* Next array element. */
81201 field_addr.sub_location->number = i;
81202#endif /* FREECIV_JSON_CONNECTION */
81203
81204 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs.p[i]);
81205 }
81206
81207#ifdef FREECIV_JSON_CONNECTION
81208 /* Exit array. */
81209 FC_FREE(field_addr.sub_location);
81210#endif /* FREECIV_JSON_CONNECTION */
81211 }
81212
81213 if (e) {
81214 log_packet_detailed("'receiver_reqs' field error detected");
81215 }
81216
81217#ifdef FREECIV_JSON_CONNECTION
81218 field_addr.name = "either_reqs";
81219#endif /* FREECIV_JSON_CONNECTION */
81220 e = 0;
81221
81222 {
81223 int i;
81224
81227
81228#ifdef FREECIV_JSON_CONNECTION
81229 /* Enter array. */
81230 field_addr.sub_location = plocation_elem_new(0);
81231#endif /* FREECIV_JSON_CONNECTION */
81232
81233 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
81234#ifdef FREECIV_JSON_CONNECTION
81235 /* Next array element. */
81236 field_addr.sub_location->number = i;
81237#endif /* FREECIV_JSON_CONNECTION */
81238
81239 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
81240 }
81241
81242#ifdef FREECIV_JSON_CONNECTION
81243 /* Exit array. */
81244 FC_FREE(field_addr.sub_location);
81245#endif /* FREECIV_JSON_CONNECTION */
81246 }
81247
81248 if (e) {
81249 log_packet_detailed("'either_reqs' field error detected");
81250 }
81251#endif /* FREECIV_DELTA_PROTOCOL */
81252
81254}
81255
81257{
81258 if (!pc->used) {
81259 log_error("WARNING: trying to send data to the closed connection %s",
81261 return -1;
81262 }
81263 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet != nullptr, -1,
81264 "Handler for PACKET_RULESET_CLAUSE not installed");
81265 return pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet(pc, packet);
81266}
81267
81268void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
81269{
81270 conn_list_iterate(dest, pconn) {
81273}
81274
81275static inline void init_packet_ruleset_tiledef(struct packet_ruleset_tiledef *packet)
81276{
81277 memset(packet, 0, sizeof(*packet));
81278}
81279
81280#define free_packet_ruleset_tiledef(_packet) (void) 0
81281#define destroy_packet_ruleset_tiledef free
81282
81283#ifdef FREECIV_DELTA_PROTOCOL
81284#define hash_packet_ruleset_tiledef_100 hash_const
81285#define cmp_packet_ruleset_tiledef_100 cmp_const
81287#endif /* FREECIV_DELTA_PROTOCOL */
81288
81290{
81291#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tiledef(_packet)
81293
81294#ifdef FREECIV_JSON_CONNECTION
81295 struct plocation field_addr;
81296 {
81297 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
81300 }
81301#endif /* FREECIV_JSON_CONNECTION */
81302
81303 log_packet_detailed("packet_ruleset_tiledef_100: got info about ()");
81304
81305#ifdef FREECIV_DELTA_PROTOCOL
81308 struct genhash **hash = pc->phs.received + PACKET_RULESET_TILEDEF;
81309
81310 if (nullptr == *hash) {
81312 nullptr, nullptr, nullptr, destroy_packet_ruleset_tiledef);
81313 }
81314
81315 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81316 *real_packet = *old;
81317 } else {
81318 /* packet is already initialized empty */
81319 log_packet_detailed(" no old info");
81320 }
81321
81322#ifdef FREECIV_JSON_CONNECTION
81323 field_addr.name = "fields";
81324#endif /* FREECIV_JSON_CONNECTION */
81325 DIO_BV_GET(&din, &field_addr, fields);
81326
81327 if (BV_ISSET(fields, 0)) {
81328 log_packet_detailed(" got field 'id'");
81329
81330#ifdef FREECIV_JSON_CONNECTION
81331 field_addr.name = "id";
81332#endif /* FREECIV_JSON_CONNECTION */
81333
81334 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
81336 }
81337 }
81338
81339 if (BV_ISSET(fields, 1)) {
81340 log_packet_detailed(" got field 'name'");
81341
81342#ifdef FREECIV_JSON_CONNECTION
81343 field_addr.name = "name";
81344#endif /* FREECIV_JSON_CONNECTION */
81345
81346 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81348 }
81349 }
81350
81351 if (BV_ISSET(fields, 2)) {
81352 log_packet_detailed(" got field 'rule_name'");
81353
81354#ifdef FREECIV_JSON_CONNECTION
81355 field_addr.name = "rule_name";
81356#endif /* FREECIV_JSON_CONNECTION */
81357
81358 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
81359 RECEIVE_PACKET_FIELD_ERROR(rule_name);
81360 }
81361 }
81362
81363 if (BV_ISSET(fields, 3)) {
81364 log_packet_detailed(" got field 'extras'");
81365
81366#ifdef FREECIV_JSON_CONNECTION
81367 field_addr.name = "extras";
81368#endif /* FREECIV_JSON_CONNECTION */
81369
81370 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
81372 }
81373 }
81374
81375 if (nullptr == old) {
81376 old = fc_malloc(sizeof(*old));
81378 *old = *real_packet;
81380 } else {
81381 *old = *real_packet;
81382 }
81383
81384#else /* FREECIV_DELTA_PROTOCOL */
81385#ifdef FREECIV_JSON_CONNECTION
81386 field_addr.name = "id";
81387#endif /* FREECIV_JSON_CONNECTION */
81388
81389 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
81391 }
81392
81393#ifdef FREECIV_JSON_CONNECTION
81394 field_addr.name = "name";
81395#endif /* FREECIV_JSON_CONNECTION */
81396
81397 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81399 }
81400
81401#ifdef FREECIV_JSON_CONNECTION
81402 field_addr.name = "rule_name";
81403#endif /* FREECIV_JSON_CONNECTION */
81404
81405 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
81406 RECEIVE_PACKET_FIELD_ERROR(rule_name);
81407 }
81408
81409#ifdef FREECIV_JSON_CONNECTION
81410 field_addr.name = "extras";
81411#endif /* FREECIV_JSON_CONNECTION */
81412
81413 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
81415 }
81416#endif /* FREECIV_DELTA_PROTOCOL */
81417
81419#undef FREE_PACKET_STRUCT
81420}
81421
81423{
81424 const struct packet_ruleset_tiledef *real_packet = packet;
81425 int e;
81427
81428 log_packet_detailed("packet_ruleset_tiledef_100: sending info about ()");
81429
81430#ifdef FREECIV_DELTA_PROTOCOL
81433 bool differ;
81434 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TILEDEF;
81435
81436 if (nullptr == *hash) {
81438 nullptr, nullptr, nullptr, destroy_packet_ruleset_tiledef);
81439 }
81440 BV_CLR_ALL(fields);
81441
81442 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81443 old = fc_malloc(sizeof(*old));
81444 /* temporary bitcopy just to insert correctly */
81445 *old = *real_packet;
81448 }
81449
81450 differ = (old->id != real_packet->id);
81451 if (differ) {
81452 BV_SET(fields, 0);
81453 }
81454
81455 differ = (strcmp(old->name, real_packet->name) != 0);
81456 if (differ) {
81457 BV_SET(fields, 1);
81458 }
81459
81460 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
81461 if (differ) {
81462 BV_SET(fields, 2);
81463 }
81464
81465 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
81466 if (differ) {
81467 BV_SET(fields, 3);
81468 }
81469#endif /* FREECIV_DELTA_PROTOCOL */
81470
81471#ifdef FREECIV_JSON_CONNECTION
81472 struct plocation field_addr;
81473 {
81474 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
81477 }
81478#endif /* FREECIV_JSON_CONNECTION */
81479
81480#ifdef FREECIV_DELTA_PROTOCOL
81481#ifdef FREECIV_JSON_CONNECTION
81482 field_addr.name = "fields";
81483#endif /* FREECIV_JSON_CONNECTION */
81484 e = 0;
81485 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81486 if (e) {
81487 log_packet_detailed("fields bitvector error detected");
81488 }
81489
81490 if (BV_ISSET(fields, 0)) {
81491 log_packet_detailed(" field 'id' has changed");
81492
81493#ifdef FREECIV_JSON_CONNECTION
81494 field_addr.name = "id";
81495#endif /* FREECIV_JSON_CONNECTION */
81496 e = 0;
81497
81498 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
81499
81500 if (e) {
81501 log_packet_detailed("'id' field error detected");
81502 }
81503 }
81504
81505 if (BV_ISSET(fields, 1)) {
81506 log_packet_detailed(" field 'name' has changed");
81507
81508#ifdef FREECIV_JSON_CONNECTION
81509 field_addr.name = "name";
81510#endif /* FREECIV_JSON_CONNECTION */
81511 e = 0;
81512
81513 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
81514
81515 if (e) {
81516 log_packet_detailed("'name' field error detected");
81517 }
81518 }
81519
81520 if (BV_ISSET(fields, 2)) {
81521 log_packet_detailed(" field 'rule_name' has changed");
81522
81523#ifdef FREECIV_JSON_CONNECTION
81524 field_addr.name = "rule_name";
81525#endif /* FREECIV_JSON_CONNECTION */
81526 e = 0;
81527
81528 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
81529
81530 if (e) {
81531 log_packet_detailed("'rule_name' field error detected");
81532 }
81533 }
81534
81535 if (BV_ISSET(fields, 3)) {
81536 log_packet_detailed(" field 'extras' has changed");
81537
81538#ifdef FREECIV_JSON_CONNECTION
81539 field_addr.name = "extras";
81540#endif /* FREECIV_JSON_CONNECTION */
81541 e = 0;
81542
81543 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
81544
81545 if (e) {
81546 log_packet_detailed("'extras' field error detected");
81547 }
81548 }
81549
81550 *old = *real_packet;
81551
81552#else /* FREECIV_DELTA_PROTOCOL */
81553#ifdef FREECIV_JSON_CONNECTION
81554 field_addr.name = "id";
81555#endif /* FREECIV_JSON_CONNECTION */
81556 e = 0;
81557
81558 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
81559
81560 if (e) {
81561 log_packet_detailed("'id' field error detected");
81562 }
81563
81564#ifdef FREECIV_JSON_CONNECTION
81565 field_addr.name = "name";
81566#endif /* FREECIV_JSON_CONNECTION */
81567 e = 0;
81568
81569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
81570
81571 if (e) {
81572 log_packet_detailed("'name' field error detected");
81573 }
81574
81575#ifdef FREECIV_JSON_CONNECTION
81576 field_addr.name = "rule_name";
81577#endif /* FREECIV_JSON_CONNECTION */
81578 e = 0;
81579
81580 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
81581
81582 if (e) {
81583 log_packet_detailed("'rule_name' field error detected");
81584 }
81585
81586#ifdef FREECIV_JSON_CONNECTION
81587 field_addr.name = "extras";
81588#endif /* FREECIV_JSON_CONNECTION */
81589 e = 0;
81590
81591 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
81592
81593 if (e) {
81594 log_packet_detailed("'extras' field error detected");
81595 }
81596#endif /* FREECIV_DELTA_PROTOCOL */
81597
81599}
81600
81602{
81603 if (!pc->used) {
81604 log_error("WARNING: trying to send data to the closed connection %s",
81606 return -1;
81607 }
81608 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TILEDEF].packet != nullptr, -1,
81609 "Handler for PACKET_RULESET_TILEDEF not installed");
81610 return pc->phs.handlers->send[PACKET_RULESET_TILEDEF].packet(pc, packet);
81611}
81612
81613void lsend_packet_ruleset_tiledef(struct conn_list *dest, const struct packet_ruleset_tiledef *packet)
81614{
81615 conn_list_iterate(dest, pconn) {
81618}
81619
81620static inline void init_packet_ruleset_control(struct packet_ruleset_control *packet)
81621{
81622 memset(packet, 0, sizeof(*packet));
81623}
81624
81625#define free_packet_ruleset_control(_packet) (void) 0
81626#define destroy_packet_ruleset_control free
81627
81628#ifdef FREECIV_DELTA_PROTOCOL
81629#define hash_packet_ruleset_control_100 hash_const
81630#define cmp_packet_ruleset_control_100 cmp_const
81632#endif /* FREECIV_DELTA_PROTOCOL */
81633
81635{
81636#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_control(_packet)
81638
81639#ifdef FREECIV_JSON_CONNECTION
81640 struct plocation field_addr;
81641 {
81642 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
81645 }
81646#endif /* FREECIV_JSON_CONNECTION */
81647
81648 log_packet_detailed("packet_ruleset_control_100: got info about ()");
81649
81650#ifdef FREECIV_DELTA_PROTOCOL
81653 struct genhash **hash = pc->phs.received + PACKET_RULESET_CONTROL;
81654
81655 if (nullptr == *hash) {
81657 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
81658 }
81659
81660 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81661 *real_packet = *old;
81662 } else {
81663 /* packet is already initialized empty */
81664 log_packet_detailed(" no old info");
81665 }
81666
81667#ifdef FREECIV_JSON_CONNECTION
81668 field_addr.name = "fields";
81669#endif /* FREECIV_JSON_CONNECTION */
81670 DIO_BV_GET(&din, &field_addr, fields);
81671
81672 if (BV_ISSET(fields, 0)) {
81673 log_packet_detailed(" got field 'num_unit_classes'");
81674
81675#ifdef FREECIV_JSON_CONNECTION
81676 field_addr.name = "num_unit_classes";
81677#endif /* FREECIV_JSON_CONNECTION */
81678
81679 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
81680 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
81681 }
81682 }
81683
81684 if (BV_ISSET(fields, 1)) {
81685 log_packet_detailed(" got field 'num_unit_types'");
81686
81687#ifdef FREECIV_JSON_CONNECTION
81688 field_addr.name = "num_unit_types";
81689#endif /* FREECIV_JSON_CONNECTION */
81690
81691 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
81692 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
81693 }
81694 }
81695
81696 if (BV_ISSET(fields, 2)) {
81697 log_packet_detailed(" got field 'num_impr_types'");
81698
81699#ifdef FREECIV_JSON_CONNECTION
81700 field_addr.name = "num_impr_types";
81701#endif /* FREECIV_JSON_CONNECTION */
81702
81703 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
81704 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
81705 }
81706 }
81707
81708 if (BV_ISSET(fields, 3)) {
81709 log_packet_detailed(" got field 'num_tech_classes'");
81710
81711#ifdef FREECIV_JSON_CONNECTION
81712 field_addr.name = "num_tech_classes";
81713#endif /* FREECIV_JSON_CONNECTION */
81714
81715 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
81716 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
81717 }
81718 }
81719
81720 if (BV_ISSET(fields, 4)) {
81721 log_packet_detailed(" got field 'num_tech_types'");
81722
81723#ifdef FREECIV_JSON_CONNECTION
81724 field_addr.name = "num_tech_types";
81725#endif /* FREECIV_JSON_CONNECTION */
81726
81727 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
81728 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
81729 }
81730 }
81731
81732 if (BV_ISSET(fields, 5)) {
81733 log_packet_detailed(" got field 'num_extra_types'");
81734
81735#ifdef FREECIV_JSON_CONNECTION
81736 field_addr.name = "num_extra_types";
81737#endif /* FREECIV_JSON_CONNECTION */
81738
81739 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
81740 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
81741 }
81742 }
81743
81744 if (BV_ISSET(fields, 6)) {
81745 log_packet_detailed(" got field 'num_tiledef_types'");
81746
81747#ifdef FREECIV_JSON_CONNECTION
81748 field_addr.name = "num_tiledef_types";
81749#endif /* FREECIV_JSON_CONNECTION */
81750
81751 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tiledef_types)) {
81752 RECEIVE_PACKET_FIELD_ERROR(num_tiledef_types);
81753 }
81754 }
81755
81756 if (BV_ISSET(fields, 7)) {
81757 log_packet_detailed(" got field 'num_base_types'");
81758
81759#ifdef FREECIV_JSON_CONNECTION
81760 field_addr.name = "num_base_types";
81761#endif /* FREECIV_JSON_CONNECTION */
81762
81763 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
81764 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
81765 }
81766 }
81767
81768 if (BV_ISSET(fields, 8)) {
81769 log_packet_detailed(" got field 'num_road_types'");
81770
81771#ifdef FREECIV_JSON_CONNECTION
81772 field_addr.name = "num_road_types";
81773#endif /* FREECIV_JSON_CONNECTION */
81774
81775 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
81776 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
81777 }
81778 }
81779
81780 if (BV_ISSET(fields, 9)) {
81781 log_packet_detailed(" got field 'num_resource_types'");
81782
81783#ifdef FREECIV_JSON_CONNECTION
81784 field_addr.name = "num_resource_types";
81785#endif /* FREECIV_JSON_CONNECTION */
81786
81787 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
81788 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
81789 }
81790 }
81791
81792 if (BV_ISSET(fields, 10)) {
81793 log_packet_detailed(" got field 'num_goods_types'");
81794
81795#ifdef FREECIV_JSON_CONNECTION
81796 field_addr.name = "num_goods_types";
81797#endif /* FREECIV_JSON_CONNECTION */
81798
81799 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
81800 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
81801 }
81802 }
81803
81804 if (BV_ISSET(fields, 11)) {
81805 log_packet_detailed(" got field 'num_disaster_types'");
81806
81807#ifdef FREECIV_JSON_CONNECTION
81808 field_addr.name = "num_disaster_types";
81809#endif /* FREECIV_JSON_CONNECTION */
81810
81811 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
81812 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
81813 }
81814 }
81815
81816 if (BV_ISSET(fields, 12)) {
81817 log_packet_detailed(" got field 'num_achievement_types'");
81818
81819#ifdef FREECIV_JSON_CONNECTION
81820 field_addr.name = "num_achievement_types";
81821#endif /* FREECIV_JSON_CONNECTION */
81822
81823 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
81824 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
81825 }
81826 }
81827
81828 if (BV_ISSET(fields, 13)) {
81829 log_packet_detailed(" got field 'num_multipliers'");
81830
81831#ifdef FREECIV_JSON_CONNECTION
81832 field_addr.name = "num_multipliers";
81833#endif /* FREECIV_JSON_CONNECTION */
81834
81835 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
81836 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
81837 }
81838 }
81839
81840 if (BV_ISSET(fields, 14)) {
81841 log_packet_detailed(" got field 'num_styles'");
81842
81843#ifdef FREECIV_JSON_CONNECTION
81844 field_addr.name = "num_styles";
81845#endif /* FREECIV_JSON_CONNECTION */
81846
81847 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
81848 RECEIVE_PACKET_FIELD_ERROR(num_styles);
81849 }
81850 }
81851
81852 if (BV_ISSET(fields, 15)) {
81853 log_packet_detailed(" got field 'num_music_styles'");
81854
81855#ifdef FREECIV_JSON_CONNECTION
81856 field_addr.name = "num_music_styles";
81857#endif /* FREECIV_JSON_CONNECTION */
81858
81859 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
81860 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
81861 }
81862 }
81863
81864 if (BV_ISSET(fields, 16)) {
81865 log_packet_detailed(" got field 'government_count'");
81866
81867#ifdef FREECIV_JSON_CONNECTION
81868 field_addr.name = "government_count";
81869#endif /* FREECIV_JSON_CONNECTION */
81870
81871 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
81873 }
81874 }
81875
81876 if (BV_ISSET(fields, 17)) {
81877 log_packet_detailed(" got field 'nation_count'");
81878
81879#ifdef FREECIV_JSON_CONNECTION
81880 field_addr.name = "nation_count";
81881#endif /* FREECIV_JSON_CONNECTION */
81882
81883 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
81885 }
81886 }
81887
81888 if (BV_ISSET(fields, 18)) {
81889 log_packet_detailed(" got field 'num_city_styles'");
81890
81891#ifdef FREECIV_JSON_CONNECTION
81892 field_addr.name = "num_city_styles";
81893#endif /* FREECIV_JSON_CONNECTION */
81894
81895 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
81896 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
81897 }
81898 }
81899
81900 if (BV_ISSET(fields, 19)) {
81901 log_packet_detailed(" got field 'terrain_count'");
81902
81903#ifdef FREECIV_JSON_CONNECTION
81904 field_addr.name = "terrain_count";
81905#endif /* FREECIV_JSON_CONNECTION */
81906
81907 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
81909 }
81910 }
81911
81912 if (BV_ISSET(fields, 20)) {
81913 log_packet_detailed(" got field 'num_specialist_types'");
81914
81915#ifdef FREECIV_JSON_CONNECTION
81916 field_addr.name = "num_specialist_types";
81917#endif /* FREECIV_JSON_CONNECTION */
81918
81919 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
81920 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
81921 }
81922 }
81923
81924 if (BV_ISSET(fields, 21)) {
81925 log_packet_detailed(" got field 'num_normal_specialists'");
81926
81927#ifdef FREECIV_JSON_CONNECTION
81928 field_addr.name = "num_normal_specialists";
81929#endif /* FREECIV_JSON_CONNECTION */
81930
81931 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_normal_specialists)) {
81932 RECEIVE_PACKET_FIELD_ERROR(num_normal_specialists);
81933 }
81934 }
81935
81936 if (BV_ISSET(fields, 22)) {
81937 log_packet_detailed(" got field 'num_nation_groups'");
81938
81939#ifdef FREECIV_JSON_CONNECTION
81940 field_addr.name = "num_nation_groups";
81941#endif /* FREECIV_JSON_CONNECTION */
81942
81943 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
81945 }
81946 }
81947
81948 if (BV_ISSET(fields, 23)) {
81949 log_packet_detailed(" got field 'num_nation_sets'");
81950
81951#ifdef FREECIV_JSON_CONNECTION
81952 field_addr.name = "num_nation_sets";
81953#endif /* FREECIV_JSON_CONNECTION */
81954
81955 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
81957 }
81958 }
81959
81960 if (BV_ISSET(fields, 24)) {
81961 log_packet_detailed(" got field 'preferred_tileset'");
81962
81963#ifdef FREECIV_JSON_CONNECTION
81964 field_addr.name = "preferred_tileset";
81965#endif /* FREECIV_JSON_CONNECTION */
81966
81967 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
81968 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
81969 }
81970 }
81971
81972 if (BV_ISSET(fields, 25)) {
81973 log_packet_detailed(" got field 'preferred_soundset'");
81974
81975#ifdef FREECIV_JSON_CONNECTION
81976 field_addr.name = "preferred_soundset";
81977#endif /* FREECIV_JSON_CONNECTION */
81978
81979 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
81980 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
81981 }
81982 }
81983
81984 if (BV_ISSET(fields, 26)) {
81985 log_packet_detailed(" got field 'preferred_musicset'");
81986
81987#ifdef FREECIV_JSON_CONNECTION
81988 field_addr.name = "preferred_musicset";
81989#endif /* FREECIV_JSON_CONNECTION */
81990
81991 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
81992 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
81993 }
81994 }
81995
81996 real_packet->popup_tech_help = BV_ISSET(fields, 27);
81997
81998 if (BV_ISSET(fields, 28)) {
81999 log_packet_detailed(" got field 'name'");
82000
82001#ifdef FREECIV_JSON_CONNECTION
82002 field_addr.name = "name";
82003#endif /* FREECIV_JSON_CONNECTION */
82004
82005 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
82007 }
82008 }
82009
82010 if (BV_ISSET(fields, 29)) {
82011 log_packet_detailed(" got field 'version'");
82012
82013#ifdef FREECIV_JSON_CONNECTION
82014 field_addr.name = "version";
82015#endif /* FREECIV_JSON_CONNECTION */
82016
82017 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
82019 }
82020 }
82021
82022 if (BV_ISSET(fields, 30)) {
82023 log_packet_detailed(" got field 'alt_dir'");
82024
82025#ifdef FREECIV_JSON_CONNECTION
82026 field_addr.name = "alt_dir";
82027#endif /* FREECIV_JSON_CONNECTION */
82028
82029 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
82031 }
82032 }
82033
82034 if (BV_ISSET(fields, 31)) {
82035 log_packet_detailed(" got field 'desc_length'");
82036
82037#ifdef FREECIV_JSON_CONNECTION
82038 field_addr.name = "desc_length";
82039#endif /* FREECIV_JSON_CONNECTION */
82040
82041 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
82042 RECEIVE_PACKET_FIELD_ERROR(desc_length);
82043 }
82044 }
82045
82046 if (BV_ISSET(fields, 32)) {
82047 log_packet_detailed(" got field 'num_counters'");
82048
82049#ifdef FREECIV_JSON_CONNECTION
82050 field_addr.name = "num_counters";
82051#endif /* FREECIV_JSON_CONNECTION */
82052
82053 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
82054 RECEIVE_PACKET_FIELD_ERROR(num_counters);
82055 }
82056 }
82057
82058 if (nullptr == old) {
82059 old = fc_malloc(sizeof(*old));
82061 *old = *real_packet;
82063 } else {
82064 *old = *real_packet;
82065 }
82066
82067#else /* FREECIV_DELTA_PROTOCOL */
82068#ifdef FREECIV_JSON_CONNECTION
82069 field_addr.name = "num_unit_classes";
82070#endif /* FREECIV_JSON_CONNECTION */
82071
82072 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
82073 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
82074 }
82075
82076#ifdef FREECIV_JSON_CONNECTION
82077 field_addr.name = "num_unit_types";
82078#endif /* FREECIV_JSON_CONNECTION */
82079
82080 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
82081 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
82082 }
82083
82084#ifdef FREECIV_JSON_CONNECTION
82085 field_addr.name = "num_impr_types";
82086#endif /* FREECIV_JSON_CONNECTION */
82087
82088 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
82089 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
82090 }
82091
82092#ifdef FREECIV_JSON_CONNECTION
82093 field_addr.name = "num_tech_classes";
82094#endif /* FREECIV_JSON_CONNECTION */
82095
82096 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
82097 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
82098 }
82099
82100#ifdef FREECIV_JSON_CONNECTION
82101 field_addr.name = "num_tech_types";
82102#endif /* FREECIV_JSON_CONNECTION */
82103
82104 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
82105 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
82106 }
82107
82108#ifdef FREECIV_JSON_CONNECTION
82109 field_addr.name = "num_extra_types";
82110#endif /* FREECIV_JSON_CONNECTION */
82111
82112 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
82113 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
82114 }
82115
82116#ifdef FREECIV_JSON_CONNECTION
82117 field_addr.name = "num_tiledef_types";
82118#endif /* FREECIV_JSON_CONNECTION */
82119
82120 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tiledef_types)) {
82121 RECEIVE_PACKET_FIELD_ERROR(num_tiledef_types);
82122 }
82123
82124#ifdef FREECIV_JSON_CONNECTION
82125 field_addr.name = "num_base_types";
82126#endif /* FREECIV_JSON_CONNECTION */
82127
82128 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
82129 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
82130 }
82131
82132#ifdef FREECIV_JSON_CONNECTION
82133 field_addr.name = "num_road_types";
82134#endif /* FREECIV_JSON_CONNECTION */
82135
82136 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
82137 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
82138 }
82139
82140#ifdef FREECIV_JSON_CONNECTION
82141 field_addr.name = "num_resource_types";
82142#endif /* FREECIV_JSON_CONNECTION */
82143
82144 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
82145 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
82146 }
82147
82148#ifdef FREECIV_JSON_CONNECTION
82149 field_addr.name = "num_goods_types";
82150#endif /* FREECIV_JSON_CONNECTION */
82151
82152 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
82153 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
82154 }
82155
82156#ifdef FREECIV_JSON_CONNECTION
82157 field_addr.name = "num_disaster_types";
82158#endif /* FREECIV_JSON_CONNECTION */
82159
82160 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
82161 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
82162 }
82163
82164#ifdef FREECIV_JSON_CONNECTION
82165 field_addr.name = "num_achievement_types";
82166#endif /* FREECIV_JSON_CONNECTION */
82167
82168 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
82169 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
82170 }
82171
82172#ifdef FREECIV_JSON_CONNECTION
82173 field_addr.name = "num_multipliers";
82174#endif /* FREECIV_JSON_CONNECTION */
82175
82176 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
82177 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
82178 }
82179
82180#ifdef FREECIV_JSON_CONNECTION
82181 field_addr.name = "num_styles";
82182#endif /* FREECIV_JSON_CONNECTION */
82183
82184 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
82185 RECEIVE_PACKET_FIELD_ERROR(num_styles);
82186 }
82187
82188#ifdef FREECIV_JSON_CONNECTION
82189 field_addr.name = "num_music_styles";
82190#endif /* FREECIV_JSON_CONNECTION */
82191
82192 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
82193 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
82194 }
82195
82196#ifdef FREECIV_JSON_CONNECTION
82197 field_addr.name = "government_count";
82198#endif /* FREECIV_JSON_CONNECTION */
82199
82200 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
82202 }
82203
82204#ifdef FREECIV_JSON_CONNECTION
82205 field_addr.name = "nation_count";
82206#endif /* FREECIV_JSON_CONNECTION */
82207
82208 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
82210 }
82211
82212#ifdef FREECIV_JSON_CONNECTION
82213 field_addr.name = "num_city_styles";
82214#endif /* FREECIV_JSON_CONNECTION */
82215
82216 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
82217 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
82218 }
82219
82220#ifdef FREECIV_JSON_CONNECTION
82221 field_addr.name = "terrain_count";
82222#endif /* FREECIV_JSON_CONNECTION */
82223
82224 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
82226 }
82227
82228#ifdef FREECIV_JSON_CONNECTION
82229 field_addr.name = "num_specialist_types";
82230#endif /* FREECIV_JSON_CONNECTION */
82231
82232 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
82233 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
82234 }
82235
82236#ifdef FREECIV_JSON_CONNECTION
82237 field_addr.name = "num_normal_specialists";
82238#endif /* FREECIV_JSON_CONNECTION */
82239
82240 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_normal_specialists)) {
82241 RECEIVE_PACKET_FIELD_ERROR(num_normal_specialists);
82242 }
82243
82244#ifdef FREECIV_JSON_CONNECTION
82245 field_addr.name = "num_nation_groups";
82246#endif /* FREECIV_JSON_CONNECTION */
82247
82248 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
82250 }
82251
82252#ifdef FREECIV_JSON_CONNECTION
82253 field_addr.name = "num_nation_sets";
82254#endif /* FREECIV_JSON_CONNECTION */
82255
82256 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
82258 }
82259
82260#ifdef FREECIV_JSON_CONNECTION
82261 field_addr.name = "preferred_tileset";
82262#endif /* FREECIV_JSON_CONNECTION */
82263
82264 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
82265 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
82266 }
82267
82268#ifdef FREECIV_JSON_CONNECTION
82269 field_addr.name = "preferred_soundset";
82270#endif /* FREECIV_JSON_CONNECTION */
82271
82272 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
82273 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
82274 }
82275
82276#ifdef FREECIV_JSON_CONNECTION
82277 field_addr.name = "preferred_musicset";
82278#endif /* FREECIV_JSON_CONNECTION */
82279
82280 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
82281 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
82282 }
82283
82284#ifdef FREECIV_JSON_CONNECTION
82285 field_addr.name = "popup_tech_help";
82286#endif /* FREECIV_JSON_CONNECTION */
82287
82288 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->popup_tech_help)) {
82289 RECEIVE_PACKET_FIELD_ERROR(popup_tech_help);
82290 }
82291
82292#ifdef FREECIV_JSON_CONNECTION
82293 field_addr.name = "name";
82294#endif /* FREECIV_JSON_CONNECTION */
82295
82296 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
82298 }
82299
82300#ifdef FREECIV_JSON_CONNECTION
82301 field_addr.name = "version";
82302#endif /* FREECIV_JSON_CONNECTION */
82303
82304 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
82306 }
82307
82308#ifdef FREECIV_JSON_CONNECTION
82309 field_addr.name = "alt_dir";
82310#endif /* FREECIV_JSON_CONNECTION */
82311
82312 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
82314 }
82315
82316#ifdef FREECIV_JSON_CONNECTION
82317 field_addr.name = "desc_length";
82318#endif /* FREECIV_JSON_CONNECTION */
82319
82320 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
82321 RECEIVE_PACKET_FIELD_ERROR(desc_length);
82322 }
82323
82324#ifdef FREECIV_JSON_CONNECTION
82325 field_addr.name = "num_counters";
82326#endif /* FREECIV_JSON_CONNECTION */
82327
82328 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
82329 RECEIVE_PACKET_FIELD_ERROR(num_counters);
82330 }
82331#endif /* FREECIV_DELTA_PROTOCOL */
82332
82334#undef FREE_PACKET_STRUCT
82335}
82336
82338{
82339 const struct packet_ruleset_control *real_packet = packet;
82340 int e;
82342
82343 log_packet_detailed("packet_ruleset_control_100: sending info about ()");
82344
82345#ifdef FREECIV_DELTA_PROTOCOL
82348 bool differ;
82349 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CONTROL;
82350
82351 if (nullptr == *hash) {
82353 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
82354 }
82355 BV_CLR_ALL(fields);
82356
82357 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82358 old = fc_malloc(sizeof(*old));
82359 /* temporary bitcopy just to insert correctly */
82360 *old = *real_packet;
82363 }
82364
82365 differ = (old->num_unit_classes != real_packet->num_unit_classes);
82366 if (differ) {
82367 BV_SET(fields, 0);
82368 }
82369
82370 differ = (old->num_unit_types != real_packet->num_unit_types);
82371 if (differ) {
82372 BV_SET(fields, 1);
82373 }
82374
82375 differ = (old->num_impr_types != real_packet->num_impr_types);
82376 if (differ) {
82377 BV_SET(fields, 2);
82378 }
82379
82380 differ = (old->num_tech_classes != real_packet->num_tech_classes);
82381 if (differ) {
82382 BV_SET(fields, 3);
82383 }
82384
82385 differ = (old->num_tech_types != real_packet->num_tech_types);
82386 if (differ) {
82387 BV_SET(fields, 4);
82388 }
82389
82390 differ = (old->num_extra_types != real_packet->num_extra_types);
82391 if (differ) {
82392 BV_SET(fields, 5);
82393 }
82394
82395 differ = (old->num_tiledef_types != real_packet->num_tiledef_types);
82396 if (differ) {
82397 BV_SET(fields, 6);
82398 }
82399
82400 differ = (old->num_base_types != real_packet->num_base_types);
82401 if (differ) {
82402 BV_SET(fields, 7);
82403 }
82404
82405 differ = (old->num_road_types != real_packet->num_road_types);
82406 if (differ) {
82407 BV_SET(fields, 8);
82408 }
82409
82410 differ = (old->num_resource_types != real_packet->num_resource_types);
82411 if (differ) {
82412 BV_SET(fields, 9);
82413 }
82414
82415 differ = (old->num_goods_types != real_packet->num_goods_types);
82416 if (differ) {
82417 BV_SET(fields, 10);
82418 }
82419
82420 differ = (old->num_disaster_types != real_packet->num_disaster_types);
82421 if (differ) {
82422 BV_SET(fields, 11);
82423 }
82424
82425 differ = (old->num_achievement_types != real_packet->num_achievement_types);
82426 if (differ) {
82427 BV_SET(fields, 12);
82428 }
82429
82430 differ = (old->num_multipliers != real_packet->num_multipliers);
82431 if (differ) {
82432 BV_SET(fields, 13);
82433 }
82434
82435 differ = (old->num_styles != real_packet->num_styles);
82436 if (differ) {
82437 BV_SET(fields, 14);
82438 }
82439
82440 differ = (old->num_music_styles != real_packet->num_music_styles);
82441 if (differ) {
82442 BV_SET(fields, 15);
82443 }
82444
82445 differ = (old->government_count != real_packet->government_count);
82446 if (differ) {
82447 BV_SET(fields, 16);
82448 }
82449
82450 differ = (old->nation_count != real_packet->nation_count);
82451 if (differ) {
82452 BV_SET(fields, 17);
82453 }
82454
82455 differ = (old->num_city_styles != real_packet->num_city_styles);
82456 if (differ) {
82457 BV_SET(fields, 18);
82458 }
82459
82460 differ = (old->terrain_count != real_packet->terrain_count);
82461 if (differ) {
82462 BV_SET(fields, 19);
82463 }
82464
82465 differ = (old->num_specialist_types != real_packet->num_specialist_types);
82466 if (differ) {
82467 BV_SET(fields, 20);
82468 }
82469
82470 differ = (old->num_normal_specialists != real_packet->num_normal_specialists);
82471 if (differ) {
82472 BV_SET(fields, 21);
82473 }
82474
82475 differ = (old->num_nation_groups != real_packet->num_nation_groups);
82476 if (differ) {
82477 BV_SET(fields, 22);
82478 }
82479
82480 differ = (old->num_nation_sets != real_packet->num_nation_sets);
82481 if (differ) {
82482 BV_SET(fields, 23);
82483 }
82484
82485 differ = (strcmp(old->preferred_tileset, real_packet->preferred_tileset) != 0);
82486 if (differ) {
82487 BV_SET(fields, 24);
82488 }
82489
82490 differ = (strcmp(old->preferred_soundset, real_packet->preferred_soundset) != 0);
82491 if (differ) {
82492 BV_SET(fields, 25);
82493 }
82494
82495 differ = (strcmp(old->preferred_musicset, real_packet->preferred_musicset) != 0);
82496 if (differ) {
82497 BV_SET(fields, 26);
82498 }
82499
82500 /* folded into head */
82501 if (real_packet->popup_tech_help) {
82502 BV_SET(fields, 27);
82503 }
82504
82505 differ = (strcmp(old->name, real_packet->name) != 0);
82506 if (differ) {
82507 BV_SET(fields, 28);
82508 }
82509
82510 differ = (strcmp(old->version, real_packet->version) != 0);
82511 if (differ) {
82512 BV_SET(fields, 29);
82513 }
82514
82515 differ = (strcmp(old->alt_dir, real_packet->alt_dir) != 0);
82516 if (differ) {
82517 BV_SET(fields, 30);
82518 }
82519
82520 differ = (old->desc_length != real_packet->desc_length);
82521 if (differ) {
82522 BV_SET(fields, 31);
82523 }
82524
82525 differ = (old->num_counters != real_packet->num_counters);
82526 if (differ) {
82527 BV_SET(fields, 32);
82528 }
82529#endif /* FREECIV_DELTA_PROTOCOL */
82530
82531#ifdef FREECIV_JSON_CONNECTION
82532 struct plocation field_addr;
82533 {
82534 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82537 }
82538#endif /* FREECIV_JSON_CONNECTION */
82539
82540#ifdef FREECIV_DELTA_PROTOCOL
82541#ifdef FREECIV_JSON_CONNECTION
82542 field_addr.name = "fields";
82543#endif /* FREECIV_JSON_CONNECTION */
82544 e = 0;
82545 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82546 if (e) {
82547 log_packet_detailed("fields bitvector error detected");
82548 }
82549
82550 if (BV_ISSET(fields, 0)) {
82551 log_packet_detailed(" field 'num_unit_classes' has changed");
82552
82553#ifdef FREECIV_JSON_CONNECTION
82554 field_addr.name = "num_unit_classes";
82555#endif /* FREECIV_JSON_CONNECTION */
82556 e = 0;
82557
82558 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
82559
82560 if (e) {
82561 log_packet_detailed("'num_unit_classes' field error detected");
82562 }
82563 }
82564
82565 if (BV_ISSET(fields, 1)) {
82566 log_packet_detailed(" field 'num_unit_types' has changed");
82567
82568#ifdef FREECIV_JSON_CONNECTION
82569 field_addr.name = "num_unit_types";
82570#endif /* FREECIV_JSON_CONNECTION */
82571 e = 0;
82572
82573 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
82574
82575 if (e) {
82576 log_packet_detailed("'num_unit_types' field error detected");
82577 }
82578 }
82579
82580 if (BV_ISSET(fields, 2)) {
82581 log_packet_detailed(" field 'num_impr_types' has changed");
82582
82583#ifdef FREECIV_JSON_CONNECTION
82584 field_addr.name = "num_impr_types";
82585#endif /* FREECIV_JSON_CONNECTION */
82586 e = 0;
82587
82588 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
82589
82590 if (e) {
82591 log_packet_detailed("'num_impr_types' field error detected");
82592 }
82593 }
82594
82595 if (BV_ISSET(fields, 3)) {
82596 log_packet_detailed(" field 'num_tech_classes' has changed");
82597
82598#ifdef FREECIV_JSON_CONNECTION
82599 field_addr.name = "num_tech_classes";
82600#endif /* FREECIV_JSON_CONNECTION */
82601 e = 0;
82602
82603 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
82604
82605 if (e) {
82606 log_packet_detailed("'num_tech_classes' field error detected");
82607 }
82608 }
82609
82610 if (BV_ISSET(fields, 4)) {
82611 log_packet_detailed(" field 'num_tech_types' has changed");
82612
82613#ifdef FREECIV_JSON_CONNECTION
82614 field_addr.name = "num_tech_types";
82615#endif /* FREECIV_JSON_CONNECTION */
82616 e = 0;
82617
82618 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
82619
82620 if (e) {
82621 log_packet_detailed("'num_tech_types' field error detected");
82622 }
82623 }
82624
82625 if (BV_ISSET(fields, 5)) {
82626 log_packet_detailed(" field 'num_extra_types' has changed");
82627
82628#ifdef FREECIV_JSON_CONNECTION
82629 field_addr.name = "num_extra_types";
82630#endif /* FREECIV_JSON_CONNECTION */
82631 e = 0;
82632
82633 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
82634
82635 if (e) {
82636 log_packet_detailed("'num_extra_types' field error detected");
82637 }
82638 }
82639
82640 if (BV_ISSET(fields, 6)) {
82641 log_packet_detailed(" field 'num_tiledef_types' has changed");
82642
82643#ifdef FREECIV_JSON_CONNECTION
82644 field_addr.name = "num_tiledef_types";
82645#endif /* FREECIV_JSON_CONNECTION */
82646 e = 0;
82647
82648 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tiledef_types);
82649
82650 if (e) {
82651 log_packet_detailed("'num_tiledef_types' field error detected");
82652 }
82653 }
82654
82655 if (BV_ISSET(fields, 7)) {
82656 log_packet_detailed(" field 'num_base_types' has changed");
82657
82658#ifdef FREECIV_JSON_CONNECTION
82659 field_addr.name = "num_base_types";
82660#endif /* FREECIV_JSON_CONNECTION */
82661 e = 0;
82662
82663 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
82664
82665 if (e) {
82666 log_packet_detailed("'num_base_types' field error detected");
82667 }
82668 }
82669
82670 if (BV_ISSET(fields, 8)) {
82671 log_packet_detailed(" field 'num_road_types' has changed");
82672
82673#ifdef FREECIV_JSON_CONNECTION
82674 field_addr.name = "num_road_types";
82675#endif /* FREECIV_JSON_CONNECTION */
82676 e = 0;
82677
82678 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
82679
82680 if (e) {
82681 log_packet_detailed("'num_road_types' field error detected");
82682 }
82683 }
82684
82685 if (BV_ISSET(fields, 9)) {
82686 log_packet_detailed(" field 'num_resource_types' has changed");
82687
82688#ifdef FREECIV_JSON_CONNECTION
82689 field_addr.name = "num_resource_types";
82690#endif /* FREECIV_JSON_CONNECTION */
82691 e = 0;
82692
82693 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
82694
82695 if (e) {
82696 log_packet_detailed("'num_resource_types' field error detected");
82697 }
82698 }
82699
82700 if (BV_ISSET(fields, 10)) {
82701 log_packet_detailed(" field 'num_goods_types' has changed");
82702
82703#ifdef FREECIV_JSON_CONNECTION
82704 field_addr.name = "num_goods_types";
82705#endif /* FREECIV_JSON_CONNECTION */
82706 e = 0;
82707
82708 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
82709
82710 if (e) {
82711 log_packet_detailed("'num_goods_types' field error detected");
82712 }
82713 }
82714
82715 if (BV_ISSET(fields, 11)) {
82716 log_packet_detailed(" field 'num_disaster_types' has changed");
82717
82718#ifdef FREECIV_JSON_CONNECTION
82719 field_addr.name = "num_disaster_types";
82720#endif /* FREECIV_JSON_CONNECTION */
82721 e = 0;
82722
82723 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
82724
82725 if (e) {
82726 log_packet_detailed("'num_disaster_types' field error detected");
82727 }
82728 }
82729
82730 if (BV_ISSET(fields, 12)) {
82731 log_packet_detailed(" field 'num_achievement_types' has changed");
82732
82733#ifdef FREECIV_JSON_CONNECTION
82734 field_addr.name = "num_achievement_types";
82735#endif /* FREECIV_JSON_CONNECTION */
82736 e = 0;
82737
82738 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
82739
82740 if (e) {
82741 log_packet_detailed("'num_achievement_types' field error detected");
82742 }
82743 }
82744
82745 if (BV_ISSET(fields, 13)) {
82746 log_packet_detailed(" field 'num_multipliers' has changed");
82747
82748#ifdef FREECIV_JSON_CONNECTION
82749 field_addr.name = "num_multipliers";
82750#endif /* FREECIV_JSON_CONNECTION */
82751 e = 0;
82752
82753 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
82754
82755 if (e) {
82756 log_packet_detailed("'num_multipliers' field error detected");
82757 }
82758 }
82759
82760 if (BV_ISSET(fields, 14)) {
82761 log_packet_detailed(" field 'num_styles' has changed");
82762
82763#ifdef FREECIV_JSON_CONNECTION
82764 field_addr.name = "num_styles";
82765#endif /* FREECIV_JSON_CONNECTION */
82766 e = 0;
82767
82768 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
82769
82770 if (e) {
82771 log_packet_detailed("'num_styles' field error detected");
82772 }
82773 }
82774
82775 if (BV_ISSET(fields, 15)) {
82776 log_packet_detailed(" field 'num_music_styles' has changed");
82777
82778#ifdef FREECIV_JSON_CONNECTION
82779 field_addr.name = "num_music_styles";
82780#endif /* FREECIV_JSON_CONNECTION */
82781 e = 0;
82782
82783 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
82784
82785 if (e) {
82786 log_packet_detailed("'num_music_styles' field error detected");
82787 }
82788 }
82789
82790 if (BV_ISSET(fields, 16)) {
82791 log_packet_detailed(" field 'government_count' has changed");
82792
82793#ifdef FREECIV_JSON_CONNECTION
82794 field_addr.name = "government_count";
82795#endif /* FREECIV_JSON_CONNECTION */
82796 e = 0;
82797
82798 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
82799
82800 if (e) {
82801 log_packet_detailed("'government_count' field error detected");
82802 }
82803 }
82804
82805 if (BV_ISSET(fields, 17)) {
82806 log_packet_detailed(" field 'nation_count' has changed");
82807
82808#ifdef FREECIV_JSON_CONNECTION
82809 field_addr.name = "nation_count";
82810#endif /* FREECIV_JSON_CONNECTION */
82811 e = 0;
82812
82813 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
82814
82815 if (e) {
82816 log_packet_detailed("'nation_count' field error detected");
82817 }
82818 }
82819
82820 if (BV_ISSET(fields, 18)) {
82821 log_packet_detailed(" field 'num_city_styles' has changed");
82822
82823#ifdef FREECIV_JSON_CONNECTION
82824 field_addr.name = "num_city_styles";
82825#endif /* FREECIV_JSON_CONNECTION */
82826 e = 0;
82827
82828 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
82829
82830 if (e) {
82831 log_packet_detailed("'num_city_styles' field error detected");
82832 }
82833 }
82834
82835 if (BV_ISSET(fields, 19)) {
82836 log_packet_detailed(" field 'terrain_count' has changed");
82837
82838#ifdef FREECIV_JSON_CONNECTION
82839 field_addr.name = "terrain_count";
82840#endif /* FREECIV_JSON_CONNECTION */
82841 e = 0;
82842
82843 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
82844
82845 if (e) {
82846 log_packet_detailed("'terrain_count' field error detected");
82847 }
82848 }
82849
82850 if (BV_ISSET(fields, 20)) {
82851 log_packet_detailed(" field 'num_specialist_types' has changed");
82852
82853#ifdef FREECIV_JSON_CONNECTION
82854 field_addr.name = "num_specialist_types";
82855#endif /* FREECIV_JSON_CONNECTION */
82856 e = 0;
82857
82858 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
82859
82860 if (e) {
82861 log_packet_detailed("'num_specialist_types' field error detected");
82862 }
82863 }
82864
82865 if (BV_ISSET(fields, 21)) {
82866 log_packet_detailed(" field 'num_normal_specialists' has changed");
82867
82868#ifdef FREECIV_JSON_CONNECTION
82869 field_addr.name = "num_normal_specialists";
82870#endif /* FREECIV_JSON_CONNECTION */
82871 e = 0;
82872
82873 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_normal_specialists);
82874
82875 if (e) {
82876 log_packet_detailed("'num_normal_specialists' field error detected");
82877 }
82878 }
82879
82880 if (BV_ISSET(fields, 22)) {
82881 log_packet_detailed(" field 'num_nation_groups' has changed");
82882
82883#ifdef FREECIV_JSON_CONNECTION
82884 field_addr.name = "num_nation_groups";
82885#endif /* FREECIV_JSON_CONNECTION */
82886 e = 0;
82887
82888 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
82889
82890 if (e) {
82891 log_packet_detailed("'num_nation_groups' field error detected");
82892 }
82893 }
82894
82895 if (BV_ISSET(fields, 23)) {
82896 log_packet_detailed(" field 'num_nation_sets' has changed");
82897
82898#ifdef FREECIV_JSON_CONNECTION
82899 field_addr.name = "num_nation_sets";
82900#endif /* FREECIV_JSON_CONNECTION */
82901 e = 0;
82902
82903 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
82904
82905 if (e) {
82906 log_packet_detailed("'num_nation_sets' field error detected");
82907 }
82908 }
82909
82910 if (BV_ISSET(fields, 24)) {
82911 log_packet_detailed(" field 'preferred_tileset' has changed");
82912
82913#ifdef FREECIV_JSON_CONNECTION
82914 field_addr.name = "preferred_tileset";
82915#endif /* FREECIV_JSON_CONNECTION */
82916 e = 0;
82917
82918 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
82919
82920 if (e) {
82921 log_packet_detailed("'preferred_tileset' field error detected");
82922 }
82923 }
82924
82925 if (BV_ISSET(fields, 25)) {
82926 log_packet_detailed(" field 'preferred_soundset' has changed");
82927
82928#ifdef FREECIV_JSON_CONNECTION
82929 field_addr.name = "preferred_soundset";
82930#endif /* FREECIV_JSON_CONNECTION */
82931 e = 0;
82932
82933 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
82934
82935 if (e) {
82936 log_packet_detailed("'preferred_soundset' field error detected");
82937 }
82938 }
82939
82940 if (BV_ISSET(fields, 26)) {
82941 log_packet_detailed(" field 'preferred_musicset' has changed");
82942
82943#ifdef FREECIV_JSON_CONNECTION
82944 field_addr.name = "preferred_musicset";
82945#endif /* FREECIV_JSON_CONNECTION */
82946 e = 0;
82947
82948 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
82949
82950 if (e) {
82951 log_packet_detailed("'preferred_musicset' field error detected");
82952 }
82953 }
82954
82955 /* field 27 is folded into the header */
82956
82957 if (BV_ISSET(fields, 28)) {
82958 log_packet_detailed(" field 'name' has changed");
82959
82960#ifdef FREECIV_JSON_CONNECTION
82961 field_addr.name = "name";
82962#endif /* FREECIV_JSON_CONNECTION */
82963 e = 0;
82964
82965 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
82966
82967 if (e) {
82968 log_packet_detailed("'name' field error detected");
82969 }
82970 }
82971
82972 if (BV_ISSET(fields, 29)) {
82973 log_packet_detailed(" field 'version' has changed");
82974
82975#ifdef FREECIV_JSON_CONNECTION
82976 field_addr.name = "version";
82977#endif /* FREECIV_JSON_CONNECTION */
82978 e = 0;
82979
82980 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
82981
82982 if (e) {
82983 log_packet_detailed("'version' field error detected");
82984 }
82985 }
82986
82987 if (BV_ISSET(fields, 30)) {
82988 log_packet_detailed(" field 'alt_dir' has changed");
82989
82990#ifdef FREECIV_JSON_CONNECTION
82991 field_addr.name = "alt_dir";
82992#endif /* FREECIV_JSON_CONNECTION */
82993 e = 0;
82994
82995 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
82996
82997 if (e) {
82998 log_packet_detailed("'alt_dir' field error detected");
82999 }
83000 }
83001
83002 if (BV_ISSET(fields, 31)) {
83003 log_packet_detailed(" field 'desc_length' has changed");
83004
83005#ifdef FREECIV_JSON_CONNECTION
83006 field_addr.name = "desc_length";
83007#endif /* FREECIV_JSON_CONNECTION */
83008 e = 0;
83009
83010 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
83011
83012 if (e) {
83013 log_packet_detailed("'desc_length' field error detected");
83014 }
83015 }
83016
83017 if (BV_ISSET(fields, 32)) {
83018 log_packet_detailed(" field 'num_counters' has changed");
83019
83020#ifdef FREECIV_JSON_CONNECTION
83021 field_addr.name = "num_counters";
83022#endif /* FREECIV_JSON_CONNECTION */
83023 e = 0;
83024
83025 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
83026
83027 if (e) {
83028 log_packet_detailed("'num_counters' field error detected");
83029 }
83030 }
83031
83032 *old = *real_packet;
83033
83034#else /* FREECIV_DELTA_PROTOCOL */
83035#ifdef FREECIV_JSON_CONNECTION
83036 field_addr.name = "num_unit_classes";
83037#endif /* FREECIV_JSON_CONNECTION */
83038 e = 0;
83039
83040 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
83041
83042 if (e) {
83043 log_packet_detailed("'num_unit_classes' field error detected");
83044 }
83045
83046#ifdef FREECIV_JSON_CONNECTION
83047 field_addr.name = "num_unit_types";
83048#endif /* FREECIV_JSON_CONNECTION */
83049 e = 0;
83050
83051 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
83052
83053 if (e) {
83054 log_packet_detailed("'num_unit_types' field error detected");
83055 }
83056
83057#ifdef FREECIV_JSON_CONNECTION
83058 field_addr.name = "num_impr_types";
83059#endif /* FREECIV_JSON_CONNECTION */
83060 e = 0;
83061
83062 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
83063
83064 if (e) {
83065 log_packet_detailed("'num_impr_types' field error detected");
83066 }
83067
83068#ifdef FREECIV_JSON_CONNECTION
83069 field_addr.name = "num_tech_classes";
83070#endif /* FREECIV_JSON_CONNECTION */
83071 e = 0;
83072
83073 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
83074
83075 if (e) {
83076 log_packet_detailed("'num_tech_classes' field error detected");
83077 }
83078
83079#ifdef FREECIV_JSON_CONNECTION
83080 field_addr.name = "num_tech_types";
83081#endif /* FREECIV_JSON_CONNECTION */
83082 e = 0;
83083
83084 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
83085
83086 if (e) {
83087 log_packet_detailed("'num_tech_types' field error detected");
83088 }
83089
83090#ifdef FREECIV_JSON_CONNECTION
83091 field_addr.name = "num_extra_types";
83092#endif /* FREECIV_JSON_CONNECTION */
83093 e = 0;
83094
83095 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
83096
83097 if (e) {
83098 log_packet_detailed("'num_extra_types' field error detected");
83099 }
83100
83101#ifdef FREECIV_JSON_CONNECTION
83102 field_addr.name = "num_tiledef_types";
83103#endif /* FREECIV_JSON_CONNECTION */
83104 e = 0;
83105
83106 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tiledef_types);
83107
83108 if (e) {
83109 log_packet_detailed("'num_tiledef_types' field error detected");
83110 }
83111
83112#ifdef FREECIV_JSON_CONNECTION
83113 field_addr.name = "num_base_types";
83114#endif /* FREECIV_JSON_CONNECTION */
83115 e = 0;
83116
83117 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
83118
83119 if (e) {
83120 log_packet_detailed("'num_base_types' field error detected");
83121 }
83122
83123#ifdef FREECIV_JSON_CONNECTION
83124 field_addr.name = "num_road_types";
83125#endif /* FREECIV_JSON_CONNECTION */
83126 e = 0;
83127
83128 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
83129
83130 if (e) {
83131 log_packet_detailed("'num_road_types' field error detected");
83132 }
83133
83134#ifdef FREECIV_JSON_CONNECTION
83135 field_addr.name = "num_resource_types";
83136#endif /* FREECIV_JSON_CONNECTION */
83137 e = 0;
83138
83139 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
83140
83141 if (e) {
83142 log_packet_detailed("'num_resource_types' field error detected");
83143 }
83144
83145#ifdef FREECIV_JSON_CONNECTION
83146 field_addr.name = "num_goods_types";
83147#endif /* FREECIV_JSON_CONNECTION */
83148 e = 0;
83149
83150 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
83151
83152 if (e) {
83153 log_packet_detailed("'num_goods_types' field error detected");
83154 }
83155
83156#ifdef FREECIV_JSON_CONNECTION
83157 field_addr.name = "num_disaster_types";
83158#endif /* FREECIV_JSON_CONNECTION */
83159 e = 0;
83160
83161 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
83162
83163 if (e) {
83164 log_packet_detailed("'num_disaster_types' field error detected");
83165 }
83166
83167#ifdef FREECIV_JSON_CONNECTION
83168 field_addr.name = "num_achievement_types";
83169#endif /* FREECIV_JSON_CONNECTION */
83170 e = 0;
83171
83172 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
83173
83174 if (e) {
83175 log_packet_detailed("'num_achievement_types' field error detected");
83176 }
83177
83178#ifdef FREECIV_JSON_CONNECTION
83179 field_addr.name = "num_multipliers";
83180#endif /* FREECIV_JSON_CONNECTION */
83181 e = 0;
83182
83183 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
83184
83185 if (e) {
83186 log_packet_detailed("'num_multipliers' field error detected");
83187 }
83188
83189#ifdef FREECIV_JSON_CONNECTION
83190 field_addr.name = "num_styles";
83191#endif /* FREECIV_JSON_CONNECTION */
83192 e = 0;
83193
83194 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
83195
83196 if (e) {
83197 log_packet_detailed("'num_styles' field error detected");
83198 }
83199
83200#ifdef FREECIV_JSON_CONNECTION
83201 field_addr.name = "num_music_styles";
83202#endif /* FREECIV_JSON_CONNECTION */
83203 e = 0;
83204
83205 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
83206
83207 if (e) {
83208 log_packet_detailed("'num_music_styles' field error detected");
83209 }
83210
83211#ifdef FREECIV_JSON_CONNECTION
83212 field_addr.name = "government_count";
83213#endif /* FREECIV_JSON_CONNECTION */
83214 e = 0;
83215
83216 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
83217
83218 if (e) {
83219 log_packet_detailed("'government_count' field error detected");
83220 }
83221
83222#ifdef FREECIV_JSON_CONNECTION
83223 field_addr.name = "nation_count";
83224#endif /* FREECIV_JSON_CONNECTION */
83225 e = 0;
83226
83227 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
83228
83229 if (e) {
83230 log_packet_detailed("'nation_count' field error detected");
83231 }
83232
83233#ifdef FREECIV_JSON_CONNECTION
83234 field_addr.name = "num_city_styles";
83235#endif /* FREECIV_JSON_CONNECTION */
83236 e = 0;
83237
83238 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
83239
83240 if (e) {
83241 log_packet_detailed("'num_city_styles' field error detected");
83242 }
83243
83244#ifdef FREECIV_JSON_CONNECTION
83245 field_addr.name = "terrain_count";
83246#endif /* FREECIV_JSON_CONNECTION */
83247 e = 0;
83248
83249 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
83250
83251 if (e) {
83252 log_packet_detailed("'terrain_count' field error detected");
83253 }
83254
83255#ifdef FREECIV_JSON_CONNECTION
83256 field_addr.name = "num_specialist_types";
83257#endif /* FREECIV_JSON_CONNECTION */
83258 e = 0;
83259
83260 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
83261
83262 if (e) {
83263 log_packet_detailed("'num_specialist_types' field error detected");
83264 }
83265
83266#ifdef FREECIV_JSON_CONNECTION
83267 field_addr.name = "num_normal_specialists";
83268#endif /* FREECIV_JSON_CONNECTION */
83269 e = 0;
83270
83271 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_normal_specialists);
83272
83273 if (e) {
83274 log_packet_detailed("'num_normal_specialists' field error detected");
83275 }
83276
83277#ifdef FREECIV_JSON_CONNECTION
83278 field_addr.name = "num_nation_groups";
83279#endif /* FREECIV_JSON_CONNECTION */
83280 e = 0;
83281
83282 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
83283
83284 if (e) {
83285 log_packet_detailed("'num_nation_groups' field error detected");
83286 }
83287
83288#ifdef FREECIV_JSON_CONNECTION
83289 field_addr.name = "num_nation_sets";
83290#endif /* FREECIV_JSON_CONNECTION */
83291 e = 0;
83292
83293 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
83294
83295 if (e) {
83296 log_packet_detailed("'num_nation_sets' field error detected");
83297 }
83298
83299#ifdef FREECIV_JSON_CONNECTION
83300 field_addr.name = "preferred_tileset";
83301#endif /* FREECIV_JSON_CONNECTION */
83302 e = 0;
83303
83304 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
83305
83306 if (e) {
83307 log_packet_detailed("'preferred_tileset' field error detected");
83308 }
83309
83310#ifdef FREECIV_JSON_CONNECTION
83311 field_addr.name = "preferred_soundset";
83312#endif /* FREECIV_JSON_CONNECTION */
83313 e = 0;
83314
83315 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
83316
83317 if (e) {
83318 log_packet_detailed("'preferred_soundset' field error detected");
83319 }
83320
83321#ifdef FREECIV_JSON_CONNECTION
83322 field_addr.name = "preferred_musicset";
83323#endif /* FREECIV_JSON_CONNECTION */
83324 e = 0;
83325
83326 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
83327
83328 if (e) {
83329 log_packet_detailed("'preferred_musicset' field error detected");
83330 }
83331
83332#ifdef FREECIV_JSON_CONNECTION
83333 field_addr.name = "popup_tech_help";
83334#endif /* FREECIV_JSON_CONNECTION */
83335 e = 0;
83336
83337 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->popup_tech_help);
83338
83339 if (e) {
83340 log_packet_detailed("'popup_tech_help' field error detected");
83341 }
83342
83343#ifdef FREECIV_JSON_CONNECTION
83344 field_addr.name = "name";
83345#endif /* FREECIV_JSON_CONNECTION */
83346 e = 0;
83347
83348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
83349
83350 if (e) {
83351 log_packet_detailed("'name' field error detected");
83352 }
83353
83354#ifdef FREECIV_JSON_CONNECTION
83355 field_addr.name = "version";
83356#endif /* FREECIV_JSON_CONNECTION */
83357 e = 0;
83358
83359 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
83360
83361 if (e) {
83362 log_packet_detailed("'version' field error detected");
83363 }
83364
83365#ifdef FREECIV_JSON_CONNECTION
83366 field_addr.name = "alt_dir";
83367#endif /* FREECIV_JSON_CONNECTION */
83368 e = 0;
83369
83370 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
83371
83372 if (e) {
83373 log_packet_detailed("'alt_dir' field error detected");
83374 }
83375
83376#ifdef FREECIV_JSON_CONNECTION
83377 field_addr.name = "desc_length";
83378#endif /* FREECIV_JSON_CONNECTION */
83379 e = 0;
83380
83381 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
83382
83383 if (e) {
83384 log_packet_detailed("'desc_length' field error detected");
83385 }
83386
83387#ifdef FREECIV_JSON_CONNECTION
83388 field_addr.name = "num_counters";
83389#endif /* FREECIV_JSON_CONNECTION */
83390 e = 0;
83391
83392 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
83393
83394 if (e) {
83395 log_packet_detailed("'num_counters' field error detected");
83396 }
83397#endif /* FREECIV_DELTA_PROTOCOL */
83398
83400}
83401
83403{
83404 if (!pc->used) {
83405 log_error("WARNING: trying to send data to the closed connection %s",
83407 return -1;
83408 }
83409 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet != nullptr, -1,
83410 "Handler for PACKET_RULESET_CONTROL not installed");
83411 return pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet(pc, packet);
83412}
83413
83414void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
83415{
83416 conn_list_iterate(dest, pconn) {
83419}
83420
83421static inline void init_packet_ruleset_summary(struct packet_ruleset_summary *packet)
83422{
83423 memset(packet, 0, sizeof(*packet));
83424}
83425
83426#define free_packet_ruleset_summary(_packet) (void) 0
83427#define destroy_packet_ruleset_summary free
83428
83429#ifdef FREECIV_DELTA_PROTOCOL
83430#define hash_packet_ruleset_summary_100 hash_const
83431#define cmp_packet_ruleset_summary_100 cmp_const
83433#endif /* FREECIV_DELTA_PROTOCOL */
83434
83436{
83437#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_summary(_packet)
83439
83440#ifdef FREECIV_JSON_CONNECTION
83441 struct plocation field_addr;
83442 {
83443 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83446 }
83447#endif /* FREECIV_JSON_CONNECTION */
83448
83449 log_packet_detailed("packet_ruleset_summary_100: got info about ()");
83450
83451#ifdef FREECIV_DELTA_PROTOCOL
83454 struct genhash **hash = pc->phs.received + PACKET_RULESET_SUMMARY;
83455
83456 if (nullptr == *hash) {
83458 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
83459 }
83460
83461 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83462 *real_packet = *old;
83463 } else {
83464 /* packet is already initialized empty */
83465 log_packet_detailed(" no old info");
83466 }
83467
83468#ifdef FREECIV_JSON_CONNECTION
83469 field_addr.name = "fields";
83470#endif /* FREECIV_JSON_CONNECTION */
83471 DIO_BV_GET(&din, &field_addr, fields);
83472
83473 if (BV_ISSET(fields, 0)) {
83474 log_packet_detailed(" got field 'text'");
83475
83476#ifdef FREECIV_JSON_CONNECTION
83477 field_addr.name = "text";
83478#endif /* FREECIV_JSON_CONNECTION */
83479
83480 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
83482 }
83483 }
83484
83485 if (nullptr == old) {
83486 old = fc_malloc(sizeof(*old));
83488 *old = *real_packet;
83490 } else {
83491 *old = *real_packet;
83492 }
83493
83494#else /* FREECIV_DELTA_PROTOCOL */
83495#ifdef FREECIV_JSON_CONNECTION
83496 field_addr.name = "text";
83497#endif /* FREECIV_JSON_CONNECTION */
83498
83499 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
83501 }
83502#endif /* FREECIV_DELTA_PROTOCOL */
83503
83505#undef FREE_PACKET_STRUCT
83506}
83507
83509{
83510 const struct packet_ruleset_summary *real_packet = packet;
83511 int e;
83513
83514 log_packet_detailed("packet_ruleset_summary_100: sending info about ()");
83515
83516#ifdef FREECIV_DELTA_PROTOCOL
83519 bool differ;
83520 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SUMMARY;
83521
83522 if (nullptr == *hash) {
83524 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
83525 }
83526 BV_CLR_ALL(fields);
83527
83528 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83529 old = fc_malloc(sizeof(*old));
83530 /* temporary bitcopy just to insert correctly */
83531 *old = *real_packet;
83534 }
83535
83536 differ = (strcmp(old->text, real_packet->text) != 0);
83537 if (differ) {
83538 BV_SET(fields, 0);
83539 }
83540#endif /* FREECIV_DELTA_PROTOCOL */
83541
83542#ifdef FREECIV_JSON_CONNECTION
83543 struct plocation field_addr;
83544 {
83545 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83548 }
83549#endif /* FREECIV_JSON_CONNECTION */
83550
83551#ifdef FREECIV_DELTA_PROTOCOL
83552#ifdef FREECIV_JSON_CONNECTION
83553 field_addr.name = "fields";
83554#endif /* FREECIV_JSON_CONNECTION */
83555 e = 0;
83556 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83557 if (e) {
83558 log_packet_detailed("fields bitvector error detected");
83559 }
83560
83561 if (BV_ISSET(fields, 0)) {
83562 log_packet_detailed(" field 'text' has changed");
83563
83564#ifdef FREECIV_JSON_CONNECTION
83565 field_addr.name = "text";
83566#endif /* FREECIV_JSON_CONNECTION */
83567 e = 0;
83568
83569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
83570
83571 if (e) {
83572 log_packet_detailed("'text' field error detected");
83573 }
83574 }
83575
83576 *old = *real_packet;
83577
83578#else /* FREECIV_DELTA_PROTOCOL */
83579#ifdef FREECIV_JSON_CONNECTION
83580 field_addr.name = "text";
83581#endif /* FREECIV_JSON_CONNECTION */
83582 e = 0;
83583
83584 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
83585
83586 if (e) {
83587 log_packet_detailed("'text' field error detected");
83588 }
83589#endif /* FREECIV_DELTA_PROTOCOL */
83590
83592}
83593
83595{
83596 if (!pc->used) {
83597 log_error("WARNING: trying to send data to the closed connection %s",
83599 return -1;
83600 }
83601 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet != nullptr, -1,
83602 "Handler for PACKET_RULESET_SUMMARY not installed");
83603 return pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet(pc, packet);
83604}
83605
83606void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
83607{
83608 conn_list_iterate(dest, pconn) {
83611}
83612
83614{
83615 memset(packet, 0, sizeof(*packet));
83616}
83617
83618#define free_packet_ruleset_description_part(_packet) (void) 0
83619#define destroy_packet_ruleset_description_part free
83620
83621#ifdef FREECIV_DELTA_PROTOCOL
83622#define hash_packet_ruleset_description_part_100 hash_const
83623#define cmp_packet_ruleset_description_part_100 cmp_const
83625#endif /* FREECIV_DELTA_PROTOCOL */
83626
83628{
83629#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_description_part(_packet)
83631
83632#ifdef FREECIV_JSON_CONNECTION
83633 struct plocation field_addr;
83634 {
83635 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83638 }
83639#endif /* FREECIV_JSON_CONNECTION */
83640
83641 log_packet_detailed("packet_ruleset_description_part_100: got info about ()");
83642
83643#ifdef FREECIV_DELTA_PROTOCOL
83646 struct genhash **hash = pc->phs.received + PACKET_RULESET_DESCRIPTION_PART;
83647
83648 if (nullptr == *hash) {
83650 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
83651 }
83652
83653 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83654 *real_packet = *old;
83655 } else {
83656 /* packet is already initialized empty */
83657 log_packet_detailed(" no old info");
83658 }
83659
83660#ifdef FREECIV_JSON_CONNECTION
83661 field_addr.name = "fields";
83662#endif /* FREECIV_JSON_CONNECTION */
83663 DIO_BV_GET(&din, &field_addr, fields);
83664
83665 if (BV_ISSET(fields, 0)) {
83666 log_packet_detailed(" got field 'text'");
83667
83668#ifdef FREECIV_JSON_CONNECTION
83669 field_addr.name = "text";
83670#endif /* FREECIV_JSON_CONNECTION */
83671
83672 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
83674 }
83675 }
83676
83677 if (nullptr == old) {
83678 old = fc_malloc(sizeof(*old));
83680 *old = *real_packet;
83682 } else {
83683 *old = *real_packet;
83684 }
83685
83686#else /* FREECIV_DELTA_PROTOCOL */
83687#ifdef FREECIV_JSON_CONNECTION
83688 field_addr.name = "text";
83689#endif /* FREECIV_JSON_CONNECTION */
83690
83691 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
83693 }
83694#endif /* FREECIV_DELTA_PROTOCOL */
83695
83697#undef FREE_PACKET_STRUCT
83698}
83699
83701{
83702 const struct packet_ruleset_description_part *real_packet = packet;
83703 int e;
83705
83706 log_packet_detailed("packet_ruleset_description_part_100: sending info about ()");
83707
83708#ifdef FREECIV_DELTA_PROTOCOL
83711 bool differ;
83712 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DESCRIPTION_PART;
83713
83714 if (nullptr == *hash) {
83716 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
83717 }
83718 BV_CLR_ALL(fields);
83719
83720 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83721 old = fc_malloc(sizeof(*old));
83722 /* temporary bitcopy just to insert correctly */
83723 *old = *real_packet;
83726 }
83727
83728 differ = (strcmp(old->text, real_packet->text) != 0);
83729 if (differ) {
83730 BV_SET(fields, 0);
83731 }
83732#endif /* FREECIV_DELTA_PROTOCOL */
83733
83734#ifdef FREECIV_JSON_CONNECTION
83735 struct plocation field_addr;
83736 {
83737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83740 }
83741#endif /* FREECIV_JSON_CONNECTION */
83742
83743#ifdef FREECIV_DELTA_PROTOCOL
83744#ifdef FREECIV_JSON_CONNECTION
83745 field_addr.name = "fields";
83746#endif /* FREECIV_JSON_CONNECTION */
83747 e = 0;
83748 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83749 if (e) {
83750 log_packet_detailed("fields bitvector error detected");
83751 }
83752
83753 if (BV_ISSET(fields, 0)) {
83754 log_packet_detailed(" field 'text' has changed");
83755
83756#ifdef FREECIV_JSON_CONNECTION
83757 field_addr.name = "text";
83758#endif /* FREECIV_JSON_CONNECTION */
83759 e = 0;
83760
83761 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
83762
83763 if (e) {
83764 log_packet_detailed("'text' field error detected");
83765 }
83766 }
83767
83768 *old = *real_packet;
83769
83770#else /* FREECIV_DELTA_PROTOCOL */
83771#ifdef FREECIV_JSON_CONNECTION
83772 field_addr.name = "text";
83773#endif /* FREECIV_JSON_CONNECTION */
83774 e = 0;
83775
83776 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
83777
83778 if (e) {
83779 log_packet_detailed("'text' field error detected");
83780 }
83781#endif /* FREECIV_DELTA_PROTOCOL */
83782
83784}
83785
83787{
83788 if (!pc->used) {
83789 log_error("WARNING: trying to send data to the closed connection %s",
83791 return -1;
83792 }
83793 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet != nullptr, -1,
83794 "Handler for PACKET_RULESET_DESCRIPTION_PART not installed");
83795 return pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet(pc, packet);
83796}
83797
83804
83806{
83807 memset(packet, 0, sizeof(*packet));
83808}
83809
83810#define free_packet_single_want_hack_req(_packet) (void) 0
83811#define destroy_packet_single_want_hack_req free
83812
83813#ifdef FREECIV_DELTA_PROTOCOL
83814#define hash_packet_single_want_hack_req_100 hash_const
83815#define cmp_packet_single_want_hack_req_100 cmp_const
83817#endif /* FREECIV_DELTA_PROTOCOL */
83818
83820{
83821#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_req(_packet)
83823
83824#ifdef FREECIV_JSON_CONNECTION
83825 struct plocation field_addr;
83826 {
83827 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83830 }
83831#endif /* FREECIV_JSON_CONNECTION */
83832
83833 log_packet_detailed("packet_single_want_hack_req_100: got info about ()");
83834
83835#ifdef FREECIV_DELTA_PROTOCOL
83838 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REQ;
83839
83840 if (nullptr == *hash) {
83842 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
83843 }
83844
83845 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83846 *real_packet = *old;
83847 } else {
83848 /* packet is already initialized empty */
83849 log_packet_detailed(" no old info");
83850 }
83851
83852#ifdef FREECIV_JSON_CONNECTION
83853 field_addr.name = "fields";
83854#endif /* FREECIV_JSON_CONNECTION */
83855 DIO_BV_GET(&din, &field_addr, fields);
83856
83857 if (BV_ISSET(fields, 0)) {
83858 log_packet_detailed(" got field 'token'");
83859
83860#ifdef FREECIV_JSON_CONNECTION
83861 field_addr.name = "token";
83862#endif /* FREECIV_JSON_CONNECTION */
83863
83864 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
83866 }
83867 }
83868
83869 if (nullptr == old) {
83870 old = fc_malloc(sizeof(*old));
83872 *old = *real_packet;
83874 } else {
83875 *old = *real_packet;
83876 }
83877
83878#else /* FREECIV_DELTA_PROTOCOL */
83879#ifdef FREECIV_JSON_CONNECTION
83880 field_addr.name = "token";
83881#endif /* FREECIV_JSON_CONNECTION */
83882
83883 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
83885 }
83886#endif /* FREECIV_DELTA_PROTOCOL */
83887
83889#undef FREE_PACKET_STRUCT
83890}
83891
83893{
83894 const struct packet_single_want_hack_req *real_packet = packet;
83895 int e;
83897
83898 log_packet_detailed("packet_single_want_hack_req_100: sending info about ()");
83899
83900#ifdef FREECIV_DELTA_PROTOCOL
83903 bool differ;
83904 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REQ;
83905
83906 if (nullptr == *hash) {
83908 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
83909 }
83910 BV_CLR_ALL(fields);
83911
83912 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83913 old = fc_malloc(sizeof(*old));
83914 /* temporary bitcopy just to insert correctly */
83915 *old = *real_packet;
83918 }
83919
83920 differ = (strcmp(old->token, real_packet->token) != 0);
83921 if (differ) {
83922 BV_SET(fields, 0);
83923 }
83924#endif /* FREECIV_DELTA_PROTOCOL */
83925
83926#ifdef FREECIV_JSON_CONNECTION
83927 struct plocation field_addr;
83928 {
83929 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83932 }
83933#endif /* FREECIV_JSON_CONNECTION */
83934
83935#ifdef FREECIV_DELTA_PROTOCOL
83936#ifdef FREECIV_JSON_CONNECTION
83937 field_addr.name = "fields";
83938#endif /* FREECIV_JSON_CONNECTION */
83939 e = 0;
83940 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83941 if (e) {
83942 log_packet_detailed("fields bitvector error detected");
83943 }
83944
83945 if (BV_ISSET(fields, 0)) {
83946 log_packet_detailed(" field 'token' has changed");
83947
83948#ifdef FREECIV_JSON_CONNECTION
83949 field_addr.name = "token";
83950#endif /* FREECIV_JSON_CONNECTION */
83951 e = 0;
83952
83953 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83954
83955 if (e) {
83956 log_packet_detailed("'token' field error detected");
83957 }
83958 }
83959
83960 *old = *real_packet;
83961
83962#else /* FREECIV_DELTA_PROTOCOL */
83963#ifdef FREECIV_JSON_CONNECTION
83964 field_addr.name = "token";
83965#endif /* FREECIV_JSON_CONNECTION */
83966 e = 0;
83967
83968 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83969
83970 if (e) {
83971 log_packet_detailed("'token' field error detected");
83972 }
83973#endif /* FREECIV_DELTA_PROTOCOL */
83974
83976}
83977
83979{
83980 if (!pc->used) {
83981 log_error("WARNING: trying to send data to the closed connection %s",
83983 return -1;
83984 }
83985 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet != nullptr, -1,
83986 "Handler for PACKET_SINGLE_WANT_HACK_REQ not installed");
83987 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet(pc, packet);
83988}
83989
83991{
83992 memset(packet, 0, sizeof(*packet));
83993}
83994
83995#define free_packet_single_want_hack_reply(_packet) (void) 0
83996#define destroy_packet_single_want_hack_reply free
83997
83998#ifdef FREECIV_DELTA_PROTOCOL
83999#define hash_packet_single_want_hack_reply_100 hash_const
84000#define cmp_packet_single_want_hack_reply_100 cmp_const
84002#endif /* FREECIV_DELTA_PROTOCOL */
84003
84005{
84006#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_reply(_packet)
84008
84009#ifdef FREECIV_JSON_CONNECTION
84010 struct plocation field_addr;
84011 {
84012 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84015 }
84016#endif /* FREECIV_JSON_CONNECTION */
84017
84018 log_packet_detailed("packet_single_want_hack_reply_100: got info about ()");
84019
84020#ifdef FREECIV_DELTA_PROTOCOL
84023 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REPLY;
84024
84025 if (nullptr == *hash) {
84027 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
84028 }
84029
84030 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84031 *real_packet = *old;
84032 } else {
84033 /* packet is already initialized empty */
84034 log_packet_detailed(" no old info");
84035 }
84036
84037#ifdef FREECIV_JSON_CONNECTION
84038 field_addr.name = "fields";
84039#endif /* FREECIV_JSON_CONNECTION */
84040 DIO_BV_GET(&din, &field_addr, fields);
84041
84042 real_packet->you_have_hack = BV_ISSET(fields, 0);
84043
84044 if (nullptr == old) {
84045 old = fc_malloc(sizeof(*old));
84047 *old = *real_packet;
84049 } else {
84050 *old = *real_packet;
84051 }
84052
84053#else /* FREECIV_DELTA_PROTOCOL */
84054#ifdef FREECIV_JSON_CONNECTION
84055 field_addr.name = "you_have_hack";
84056#endif /* FREECIV_JSON_CONNECTION */
84057
84058 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_have_hack)) {
84059 RECEIVE_PACKET_FIELD_ERROR(you_have_hack);
84060 }
84061#endif /* FREECIV_DELTA_PROTOCOL */
84062
84064#undef FREE_PACKET_STRUCT
84065}
84066
84068{
84069 const struct packet_single_want_hack_reply *real_packet = packet;
84070 int e;
84072
84073 log_packet_detailed("packet_single_want_hack_reply_100: sending info about ()");
84074
84075#ifdef FREECIV_DELTA_PROTOCOL
84078 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REPLY;
84079
84080 if (nullptr == *hash) {
84082 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
84083 }
84084 BV_CLR_ALL(fields);
84085
84086 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84087 old = fc_malloc(sizeof(*old));
84088 /* temporary bitcopy just to insert correctly */
84089 *old = *real_packet;
84092 }
84093
84094 /* folded into head */
84095 if (real_packet->you_have_hack) {
84096 BV_SET(fields, 0);
84097 }
84098#endif /* FREECIV_DELTA_PROTOCOL */
84099
84100#ifdef FREECIV_JSON_CONNECTION
84101 struct plocation field_addr;
84102 {
84103 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84106 }
84107#endif /* FREECIV_JSON_CONNECTION */
84108
84109#ifdef FREECIV_DELTA_PROTOCOL
84110#ifdef FREECIV_JSON_CONNECTION
84111 field_addr.name = "fields";
84112#endif /* FREECIV_JSON_CONNECTION */
84113 e = 0;
84114 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84115 if (e) {
84116 log_packet_detailed("fields bitvector error detected");
84117 }
84118
84119 /* field 0 is folded into the header */
84120
84121 *old = *real_packet;
84122
84123#else /* FREECIV_DELTA_PROTOCOL */
84124#ifdef FREECIV_JSON_CONNECTION
84125 field_addr.name = "you_have_hack";
84126#endif /* FREECIV_JSON_CONNECTION */
84127 e = 0;
84128
84129 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_have_hack);
84130
84131 if (e) {
84132 log_packet_detailed("'you_have_hack' field error detected");
84133 }
84134#endif /* FREECIV_DELTA_PROTOCOL */
84135
84137}
84138
84140{
84141 if (!pc->used) {
84142 log_error("WARNING: trying to send data to the closed connection %s",
84144 return -1;
84145 }
84146 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet != nullptr, -1,
84147 "Handler for PACKET_SINGLE_WANT_HACK_REPLY not installed");
84148 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet(pc, packet);
84149}
84150
84151int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
84152{
84153 struct packet_single_want_hack_reply packet, *real_packet = &packet;
84154
84156
84158}
84159
84160static inline void init_packet_ruleset_choices(struct packet_ruleset_choices *packet)
84161{
84162 memset(packet, 0, sizeof(*packet));
84163}
84164
84165#define free_packet_ruleset_choices(_packet) (void) 0
84166#define destroy_packet_ruleset_choices free
84167
84168#ifdef FREECIV_DELTA_PROTOCOL
84169#define hash_packet_ruleset_choices_100 hash_const
84170#define cmp_packet_ruleset_choices_100 cmp_const
84172#endif /* FREECIV_DELTA_PROTOCOL */
84173
84175{
84176#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_choices(_packet)
84178
84179#ifdef FREECIV_JSON_CONNECTION
84180 struct plocation field_addr;
84181 {
84182 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84185 }
84186#endif /* FREECIV_JSON_CONNECTION */
84187
84188 log_packet_detailed("packet_ruleset_choices_100: got info about ()");
84189
84190#ifdef FREECIV_DELTA_PROTOCOL
84193 struct genhash **hash = pc->phs.received + PACKET_RULESET_CHOICES;
84194
84195 if (nullptr == *hash) {
84197 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
84198 }
84199
84200 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84201 *real_packet = *old;
84202 } else {
84203 /* packet is already initialized empty */
84204 log_packet_detailed(" no old info");
84205 }
84206
84207#ifdef FREECIV_JSON_CONNECTION
84208 field_addr.name = "fields";
84209#endif /* FREECIV_JSON_CONNECTION */
84210 DIO_BV_GET(&din, &field_addr, fields);
84211
84212 if (BV_ISSET(fields, 0)) {
84213 log_packet_detailed(" got field 'ruleset_count'");
84214
84215#ifdef FREECIV_JSON_CONNECTION
84216 field_addr.name = "ruleset_count";
84217#endif /* FREECIV_JSON_CONNECTION */
84218
84219 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
84220 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
84221 }
84222 }
84223
84224 if (BV_ISSET(fields, 1)) {
84225 log_packet_detailed(" got field 'rulesets'");
84226
84227#ifdef FREECIV_JSON_CONNECTION
84228 field_addr.name = "rulesets";
84229#endif /* FREECIV_JSON_CONNECTION */
84230
84231 {
84232 int i;
84233
84234 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
84235 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
84236 }
84237
84238#ifdef FREECIV_JSON_CONNECTION
84239 /* Enter array. */
84240 field_addr.sub_location = plocation_elem_new(0);
84241#endif /* FREECIV_JSON_CONNECTION */
84242
84243 for (i = 0; i < real_packet->ruleset_count; i++) {
84244#ifdef FREECIV_JSON_CONNECTION
84245 /* Next array element */
84246 field_addr.sub_location->number = i;
84247#endif /* FREECIV_JSON_CONNECTION */
84248
84249 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
84251 }
84252 }
84253
84254#ifdef FREECIV_JSON_CONNECTION
84255 /* Exit array. */
84256 FC_FREE(field_addr.sub_location);
84257#endif /* FREECIV_JSON_CONNECTION */
84258 }
84259 }
84260
84261 if (nullptr == old) {
84262 old = fc_malloc(sizeof(*old));
84264 *old = *real_packet;
84266 } else {
84267 *old = *real_packet;
84268 }
84269
84270#else /* FREECIV_DELTA_PROTOCOL */
84271#ifdef FREECIV_JSON_CONNECTION
84272 field_addr.name = "ruleset_count";
84273#endif /* FREECIV_JSON_CONNECTION */
84274
84275 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
84276 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
84277 }
84278
84279#ifdef FREECIV_JSON_CONNECTION
84280 field_addr.name = "rulesets";
84281#endif /* FREECIV_JSON_CONNECTION */
84282
84283 {
84284 int i;
84285
84286 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
84287 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
84288 }
84289
84290#ifdef FREECIV_JSON_CONNECTION
84291 /* Enter array. */
84292 field_addr.sub_location = plocation_elem_new(0);
84293#endif /* FREECIV_JSON_CONNECTION */
84294
84295 for (i = 0; i < real_packet->ruleset_count; i++) {
84296#ifdef FREECIV_JSON_CONNECTION
84297 /* Next array element */
84298 field_addr.sub_location->number = i;
84299#endif /* FREECIV_JSON_CONNECTION */
84300
84301 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
84303 }
84304 }
84305
84306#ifdef FREECIV_JSON_CONNECTION
84307 /* Exit array. */
84308 FC_FREE(field_addr.sub_location);
84309#endif /* FREECIV_JSON_CONNECTION */
84310 }
84311#endif /* FREECIV_DELTA_PROTOCOL */
84312
84314#undef FREE_PACKET_STRUCT
84315}
84316
84318{
84319 const struct packet_ruleset_choices *real_packet = packet;
84320 int e;
84322
84323 log_packet_detailed("packet_ruleset_choices_100: sending info about ()");
84324
84325#ifdef FREECIV_DELTA_PROTOCOL
84328 bool differ;
84329 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CHOICES;
84330
84331 if (nullptr == *hash) {
84333 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
84334 }
84335 BV_CLR_ALL(fields);
84336
84337 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84338 old = fc_malloc(sizeof(*old));
84339 /* temporary bitcopy just to insert correctly */
84340 *old = *real_packet;
84343 }
84344
84345 differ = (old->ruleset_count != real_packet->ruleset_count);
84346 if (differ) {
84347 BV_SET(fields, 0);
84348 }
84349
84350 differ = (old->ruleset_count != real_packet->ruleset_count);
84351 if (!differ) {
84352 int i;
84353
84354 for (i = 0; i < old->ruleset_count; i++) {
84355 differ = (strcmp(old->rulesets[i], real_packet->rulesets[i]) != 0);
84356 if (differ) {
84357 break;
84358 }
84359 }
84360 }
84361 if (differ) {
84362 BV_SET(fields, 1);
84363 }
84364#endif /* FREECIV_DELTA_PROTOCOL */
84365
84366#ifdef FREECIV_JSON_CONNECTION
84367 struct plocation field_addr;
84368 {
84369 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84372 }
84373#endif /* FREECIV_JSON_CONNECTION */
84374
84375#ifdef FREECIV_DELTA_PROTOCOL
84376#ifdef FREECIV_JSON_CONNECTION
84377 field_addr.name = "fields";
84378#endif /* FREECIV_JSON_CONNECTION */
84379 e = 0;
84380 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84381 if (e) {
84382 log_packet_detailed("fields bitvector error detected");
84383 }
84384
84385 if (BV_ISSET(fields, 0)) {
84386 log_packet_detailed(" field 'ruleset_count' has changed");
84387
84388#ifdef FREECIV_JSON_CONNECTION
84389 field_addr.name = "ruleset_count";
84390#endif /* FREECIV_JSON_CONNECTION */
84391 e = 0;
84392
84393 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
84394
84395 if (e) {
84396 log_packet_detailed("'ruleset_count' field error detected");
84397 }
84398 }
84399
84400 if (BV_ISSET(fields, 1)) {
84401 log_packet_detailed(" field 'rulesets' has changed");
84402
84403#ifdef FREECIV_JSON_CONNECTION
84404 field_addr.name = "rulesets";
84405#endif /* FREECIV_JSON_CONNECTION */
84406 e = 0;
84407
84408 {
84409 int i;
84410
84411#ifdef FREECIV_JSON_CONNECTION
84412 /* Create the array. */
84413 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
84414
84415 /* Enter array. */
84416 field_addr.sub_location = plocation_elem_new(0);
84417#endif /* FREECIV_JSON_CONNECTION */
84418
84419 for (i = 0; i < real_packet->ruleset_count; i++) {
84420#ifdef FREECIV_JSON_CONNECTION
84421 /* Next array element. */
84422 field_addr.sub_location->number = i;
84423#endif /* FREECIV_JSON_CONNECTION */
84424
84425 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
84426 }
84427
84428#ifdef FREECIV_JSON_CONNECTION
84429 /* Exit array. */
84430 FC_FREE(field_addr.sub_location);
84431#endif /* FREECIV_JSON_CONNECTION */
84432 }
84433
84434 if (e) {
84435 log_packet_detailed("'rulesets' field error detected");
84436 }
84437 }
84438
84439 *old = *real_packet;
84440
84441#else /* FREECIV_DELTA_PROTOCOL */
84442#ifdef FREECIV_JSON_CONNECTION
84443 field_addr.name = "ruleset_count";
84444#endif /* FREECIV_JSON_CONNECTION */
84445 e = 0;
84446
84447 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
84448
84449 if (e) {
84450 log_packet_detailed("'ruleset_count' field error detected");
84451 }
84452
84453#ifdef FREECIV_JSON_CONNECTION
84454 field_addr.name = "rulesets";
84455#endif /* FREECIV_JSON_CONNECTION */
84456 e = 0;
84457
84458 {
84459 int i;
84460
84461#ifdef FREECIV_JSON_CONNECTION
84462 /* Create the array. */
84463 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
84464
84465 /* Enter array. */
84466 field_addr.sub_location = plocation_elem_new(0);
84467#endif /* FREECIV_JSON_CONNECTION */
84468
84469 for (i = 0; i < real_packet->ruleset_count; i++) {
84470#ifdef FREECIV_JSON_CONNECTION
84471 /* Next array element. */
84472 field_addr.sub_location->number = i;
84473#endif /* FREECIV_JSON_CONNECTION */
84474
84475 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
84476 }
84477
84478#ifdef FREECIV_JSON_CONNECTION
84479 /* Exit array. */
84480 FC_FREE(field_addr.sub_location);
84481#endif /* FREECIV_JSON_CONNECTION */
84482 }
84483
84484 if (e) {
84485 log_packet_detailed("'rulesets' field error detected");
84486 }
84487#endif /* FREECIV_DELTA_PROTOCOL */
84488
84490}
84491
84493{
84494 if (!pc->used) {
84495 log_error("WARNING: trying to send data to the closed connection %s",
84497 return -1;
84498 }
84499 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet != nullptr, -1,
84500 "Handler for PACKET_RULESET_CHOICES not installed");
84501 return pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet(pc, packet);
84502}
84503
84504static inline void init_packet_ruleset_select(struct packet_ruleset_select *packet)
84505{
84506 memset(packet, 0, sizeof(*packet));
84507}
84508
84509#define free_packet_ruleset_select(_packet) (void) 0
84510#define destroy_packet_ruleset_select free
84511
84512#ifdef FREECIV_DELTA_PROTOCOL
84513#define hash_packet_ruleset_select_100 hash_const
84514#define cmp_packet_ruleset_select_100 cmp_const
84516#endif /* FREECIV_DELTA_PROTOCOL */
84517
84519{
84520#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_select(_packet)
84522
84523#ifdef FREECIV_JSON_CONNECTION
84524 struct plocation field_addr;
84525 {
84526 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84529 }
84530#endif /* FREECIV_JSON_CONNECTION */
84531
84532 log_packet_detailed("packet_ruleset_select_100: got info about ()");
84533
84534#ifdef FREECIV_DELTA_PROTOCOL
84536 struct packet_ruleset_select *old;
84537 struct genhash **hash = pc->phs.received + PACKET_RULESET_SELECT;
84538
84539 if (nullptr == *hash) {
84541 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
84542 }
84543
84544 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84545 *real_packet = *old;
84546 } else {
84547 /* packet is already initialized empty */
84548 log_packet_detailed(" no old info");
84549 }
84550
84551#ifdef FREECIV_JSON_CONNECTION
84552 field_addr.name = "fields";
84553#endif /* FREECIV_JSON_CONNECTION */
84554 DIO_BV_GET(&din, &field_addr, fields);
84555
84556 if (BV_ISSET(fields, 0)) {
84557 log_packet_detailed(" got field 'modpack'");
84558
84559#ifdef FREECIV_JSON_CONNECTION
84560 field_addr.name = "modpack";
84561#endif /* FREECIV_JSON_CONNECTION */
84562
84563 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
84565 }
84566 }
84567
84568 if (nullptr == old) {
84569 old = fc_malloc(sizeof(*old));
84571 *old = *real_packet;
84573 } else {
84574 *old = *real_packet;
84575 }
84576
84577#else /* FREECIV_DELTA_PROTOCOL */
84578#ifdef FREECIV_JSON_CONNECTION
84579 field_addr.name = "modpack";
84580#endif /* FREECIV_JSON_CONNECTION */
84581
84582 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
84584 }
84585#endif /* FREECIV_DELTA_PROTOCOL */
84586
84588#undef FREE_PACKET_STRUCT
84589}
84590
84592{
84593 const struct packet_ruleset_select *real_packet = packet;
84594 int e;
84596
84597 log_packet_detailed("packet_ruleset_select_100: sending info about ()");
84598
84599#ifdef FREECIV_DELTA_PROTOCOL
84601 struct packet_ruleset_select *old;
84602 bool differ;
84603 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SELECT;
84604
84605 if (nullptr == *hash) {
84607 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
84608 }
84609 BV_CLR_ALL(fields);
84610
84611 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84612 old = fc_malloc(sizeof(*old));
84613 /* temporary bitcopy just to insert correctly */
84614 *old = *real_packet;
84617 }
84618
84619 differ = (strcmp(old->modpack, real_packet->modpack) != 0);
84620 if (differ) {
84621 BV_SET(fields, 0);
84622 }
84623#endif /* FREECIV_DELTA_PROTOCOL */
84624
84625#ifdef FREECIV_JSON_CONNECTION
84626 struct plocation field_addr;
84627 {
84628 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84631 }
84632#endif /* FREECIV_JSON_CONNECTION */
84633
84634#ifdef FREECIV_DELTA_PROTOCOL
84635#ifdef FREECIV_JSON_CONNECTION
84636 field_addr.name = "fields";
84637#endif /* FREECIV_JSON_CONNECTION */
84638 e = 0;
84639 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84640 if (e) {
84641 log_packet_detailed("fields bitvector error detected");
84642 }
84643
84644 if (BV_ISSET(fields, 0)) {
84645 log_packet_detailed(" field 'modpack' has changed");
84646
84647#ifdef FREECIV_JSON_CONNECTION
84648 field_addr.name = "modpack";
84649#endif /* FREECIV_JSON_CONNECTION */
84650 e = 0;
84651
84652 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
84653
84654 if (e) {
84655 log_packet_detailed("'modpack' field error detected");
84656 }
84657 }
84658
84659 *old = *real_packet;
84660
84661#else /* FREECIV_DELTA_PROTOCOL */
84662#ifdef FREECIV_JSON_CONNECTION
84663 field_addr.name = "modpack";
84664#endif /* FREECIV_JSON_CONNECTION */
84665 e = 0;
84666
84667 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
84668
84669 if (e) {
84670 log_packet_detailed("'modpack' field error detected");
84671 }
84672#endif /* FREECIV_DELTA_PROTOCOL */
84673
84675}
84676
84678{
84679 if (!pc->used) {
84680 log_error("WARNING: trying to send data to the closed connection %s",
84682 return -1;
84683 }
84684 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SELECT].packet != nullptr, -1,
84685 "Handler for PACKET_RULESET_SELECT not installed");
84686 return pc->phs.handlers->send[PACKET_RULESET_SELECT].packet(pc, packet);
84687}
84688
84689static inline void init_packet_game_load(struct packet_game_load *packet)
84690{
84691 memset(packet, 0, sizeof(*packet));
84692}
84693
84694#define free_packet_game_load(_packet) (void) 0
84695#define destroy_packet_game_load free
84696
84697#ifdef FREECIV_DELTA_PROTOCOL
84698#define hash_packet_game_load_100 hash_const
84699#define cmp_packet_game_load_100 cmp_const
84701#endif /* FREECIV_DELTA_PROTOCOL */
84702
84704{
84705#define FREE_PACKET_STRUCT(_packet) free_packet_game_load(_packet)
84707
84708#ifdef FREECIV_JSON_CONNECTION
84709 struct plocation field_addr;
84710 {
84711 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84714 }
84715#endif /* FREECIV_JSON_CONNECTION */
84716
84717 log_packet_detailed("packet_game_load_100: got info about ()");
84718
84719#ifdef FREECIV_DELTA_PROTOCOL
84721 struct packet_game_load *old;
84722 struct genhash **hash = pc->phs.received + PACKET_GAME_LOAD;
84723
84724 if (nullptr == *hash) {
84726 nullptr, nullptr, nullptr, destroy_packet_game_load);
84727 }
84728
84729 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84730 *real_packet = *old;
84731 } else {
84732 /* packet is already initialized empty */
84733 log_packet_detailed(" no old info");
84734 }
84735
84736#ifdef FREECIV_JSON_CONNECTION
84737 field_addr.name = "fields";
84738#endif /* FREECIV_JSON_CONNECTION */
84739 DIO_BV_GET(&din, &field_addr, fields);
84740
84741 real_packet->load_successful = BV_ISSET(fields, 0);
84742
84743 if (BV_ISSET(fields, 1)) {
84744 log_packet_detailed(" got field 'load_filename'");
84745
84746#ifdef FREECIV_JSON_CONNECTION
84747 field_addr.name = "load_filename";
84748#endif /* FREECIV_JSON_CONNECTION */
84749
84750 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
84752 }
84753 }
84754
84755 if (nullptr == old) {
84756 old = fc_malloc(sizeof(*old));
84758 *old = *real_packet;
84760 } else {
84761 *old = *real_packet;
84762 }
84763
84764#else /* FREECIV_DELTA_PROTOCOL */
84765#ifdef FREECIV_JSON_CONNECTION
84766 field_addr.name = "load_successful";
84767#endif /* FREECIV_JSON_CONNECTION */
84768
84769 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->load_successful)) {
84770 RECEIVE_PACKET_FIELD_ERROR(load_successful);
84771 }
84772
84773#ifdef FREECIV_JSON_CONNECTION
84774 field_addr.name = "load_filename";
84775#endif /* FREECIV_JSON_CONNECTION */
84776
84777 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
84779 }
84780#endif /* FREECIV_DELTA_PROTOCOL */
84781
84783#undef FREE_PACKET_STRUCT
84784}
84785
84786static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
84787{
84788 const struct packet_game_load *real_packet = packet;
84789 int e;
84791
84792 log_packet_detailed("packet_game_load_100: sending info about ()");
84793
84794#ifdef FREECIV_DELTA_PROTOCOL
84796 struct packet_game_load *old;
84797 bool differ;
84798 struct genhash **hash = pc->phs.sent + PACKET_GAME_LOAD;
84799
84800 if (nullptr == *hash) {
84802 nullptr, nullptr, nullptr, destroy_packet_game_load);
84803 }
84804 BV_CLR_ALL(fields);
84805
84806 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84807 old = fc_malloc(sizeof(*old));
84808 /* temporary bitcopy just to insert correctly */
84809 *old = *real_packet;
84812 }
84813
84814 /* folded into head */
84815 if (real_packet->load_successful) {
84816 BV_SET(fields, 0);
84817 }
84818
84819 differ = (strcmp(old->load_filename, real_packet->load_filename) != 0);
84820 if (differ) {
84821 BV_SET(fields, 1);
84822 }
84823#endif /* FREECIV_DELTA_PROTOCOL */
84824
84825#ifdef FREECIV_JSON_CONNECTION
84826 struct plocation field_addr;
84827 {
84828 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84831 }
84832#endif /* FREECIV_JSON_CONNECTION */
84833
84834#ifdef FREECIV_DELTA_PROTOCOL
84835#ifdef FREECIV_JSON_CONNECTION
84836 field_addr.name = "fields";
84837#endif /* FREECIV_JSON_CONNECTION */
84838 e = 0;
84839 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84840 if (e) {
84841 log_packet_detailed("fields bitvector error detected");
84842 }
84843
84844 /* field 0 is folded into the header */
84845
84846 if (BV_ISSET(fields, 1)) {
84847 log_packet_detailed(" field 'load_filename' has changed");
84848
84849#ifdef FREECIV_JSON_CONNECTION
84850 field_addr.name = "load_filename";
84851#endif /* FREECIV_JSON_CONNECTION */
84852 e = 0;
84853
84854 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
84855
84856 if (e) {
84857 log_packet_detailed("'load_filename' field error detected");
84858 }
84859 }
84860
84861 *old = *real_packet;
84862
84863#else /* FREECIV_DELTA_PROTOCOL */
84864#ifdef FREECIV_JSON_CONNECTION
84865 field_addr.name = "load_successful";
84866#endif /* FREECIV_JSON_CONNECTION */
84867 e = 0;
84868
84869 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->load_successful);
84870
84871 if (e) {
84872 log_packet_detailed("'load_successful' field error detected");
84873 }
84874
84875#ifdef FREECIV_JSON_CONNECTION
84876 field_addr.name = "load_filename";
84877#endif /* FREECIV_JSON_CONNECTION */
84878 e = 0;
84879
84880 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
84881
84882 if (e) {
84883 log_packet_detailed("'load_filename' field error detected");
84884 }
84885#endif /* FREECIV_DELTA_PROTOCOL */
84886
84888}
84889
84890int send_packet_game_load(struct connection *pc, const struct packet_game_load *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_GAME_LOAD].packet != nullptr, -1,
84898 "Handler for PACKET_GAME_LOAD not installed");
84899 return pc->phs.handlers->send[PACKET_GAME_LOAD].packet(pc, packet);
84900}
84901
84902void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
84903{
84904 conn_list_iterate(dest, pconn) {
84907}
84908
84909int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
84910{
84911 struct packet_game_load packet, *real_packet = &packet;
84912
84914 sz_strlcpy(real_packet->load_filename, load_filename);
84915
84917}
84918
84920{
84921 struct packet_game_load packet, *real_packet = &packet;
84922
84924 sz_strlcpy(real_packet->load_filename, load_filename);
84925
84927}
84928
84930{
84931 memset(packet, 0, sizeof(*packet));
84932}
84933
84934#define free_packet_server_setting_control(_packet) (void) 0
84935#define destroy_packet_server_setting_control free
84936
84937#ifdef FREECIV_DELTA_PROTOCOL
84938#define hash_packet_server_setting_control_100 hash_const
84939#define cmp_packet_server_setting_control_100 cmp_const
84941#endif /* FREECIV_DELTA_PROTOCOL */
84942
84944{
84945#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_control(_packet)
84947
84948#ifdef FREECIV_JSON_CONNECTION
84949 struct plocation field_addr;
84950 {
84951 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84954 }
84955#endif /* FREECIV_JSON_CONNECTION */
84956
84957 log_packet_detailed("packet_server_setting_control_100: got info about ()");
84958
84959#ifdef FREECIV_DELTA_PROTOCOL
84962 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONTROL;
84963
84964 if (nullptr == *hash) {
84966 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
84967 }
84968
84969 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84970 *real_packet = *old;
84971 } else {
84972 /* packet is already initialized empty */
84973 log_packet_detailed(" no old info");
84974 }
84975
84976#ifdef FREECIV_JSON_CONNECTION
84977 field_addr.name = "fields";
84978#endif /* FREECIV_JSON_CONNECTION */
84979 DIO_BV_GET(&din, &field_addr, fields);
84980
84981 if (BV_ISSET(fields, 0)) {
84982 log_packet_detailed(" got field 'settings_num'");
84983
84984#ifdef FREECIV_JSON_CONNECTION
84985 field_addr.name = "settings_num";
84986#endif /* FREECIV_JSON_CONNECTION */
84987
84988 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
84989 RECEIVE_PACKET_FIELD_ERROR(settings_num);
84990 }
84991 }
84992
84993 if (BV_ISSET(fields, 1)) {
84994 log_packet_detailed(" got field 'categories_num'");
84995
84996#ifdef FREECIV_JSON_CONNECTION
84997 field_addr.name = "categories_num";
84998#endif /* FREECIV_JSON_CONNECTION */
84999
85000 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
85001 RECEIVE_PACKET_FIELD_ERROR(categories_num);
85002 }
85003 }
85004
85005 if (BV_ISSET(fields, 2)) {
85006 log_packet_detailed(" got field 'category_names'");
85007
85008#ifdef FREECIV_JSON_CONNECTION
85009 field_addr.name = "category_names";
85010#endif /* FREECIV_JSON_CONNECTION */
85011
85012 {
85013 int i;
85014
85015 if (real_packet->categories_num > 256) {
85016 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
85017 }
85018
85019#ifdef FREECIV_JSON_CONNECTION
85020 /* Enter array. */
85021 field_addr.sub_location = plocation_elem_new(0);
85022#endif /* FREECIV_JSON_CONNECTION */
85023
85024 for (i = 0; i < real_packet->categories_num; i++) {
85025#ifdef FREECIV_JSON_CONNECTION
85026 /* Next array element */
85027 field_addr.sub_location->number = i;
85028#endif /* FREECIV_JSON_CONNECTION */
85029
85030 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
85031 RECEIVE_PACKET_FIELD_ERROR(category_names);
85032 }
85033 }
85034
85035#ifdef FREECIV_JSON_CONNECTION
85036 /* Exit array. */
85037 FC_FREE(field_addr.sub_location);
85038#endif /* FREECIV_JSON_CONNECTION */
85039 }
85040 }
85041
85042 if (nullptr == old) {
85043 old = fc_malloc(sizeof(*old));
85045 *old = *real_packet;
85047 } else {
85048 *old = *real_packet;
85049 }
85050
85051#else /* FREECIV_DELTA_PROTOCOL */
85052#ifdef FREECIV_JSON_CONNECTION
85053 field_addr.name = "settings_num";
85054#endif /* FREECIV_JSON_CONNECTION */
85055
85056 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
85057 RECEIVE_PACKET_FIELD_ERROR(settings_num);
85058 }
85059
85060#ifdef FREECIV_JSON_CONNECTION
85061 field_addr.name = "categories_num";
85062#endif /* FREECIV_JSON_CONNECTION */
85063
85064 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
85065 RECEIVE_PACKET_FIELD_ERROR(categories_num);
85066 }
85067
85068#ifdef FREECIV_JSON_CONNECTION
85069 field_addr.name = "category_names";
85070#endif /* FREECIV_JSON_CONNECTION */
85071
85072 {
85073 int i;
85074
85075 if (real_packet->categories_num > 256) {
85076 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
85077 }
85078
85079#ifdef FREECIV_JSON_CONNECTION
85080 /* Enter array. */
85081 field_addr.sub_location = plocation_elem_new(0);
85082#endif /* FREECIV_JSON_CONNECTION */
85083
85084 for (i = 0; i < real_packet->categories_num; i++) {
85085#ifdef FREECIV_JSON_CONNECTION
85086 /* Next array element */
85087 field_addr.sub_location->number = i;
85088#endif /* FREECIV_JSON_CONNECTION */
85089
85090 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
85091 RECEIVE_PACKET_FIELD_ERROR(category_names);
85092 }
85093 }
85094
85095#ifdef FREECIV_JSON_CONNECTION
85096 /* Exit array. */
85097 FC_FREE(field_addr.sub_location);
85098#endif /* FREECIV_JSON_CONNECTION */
85099 }
85100#endif /* FREECIV_DELTA_PROTOCOL */
85101
85103#undef FREE_PACKET_STRUCT
85104}
85105
85107{
85108 const struct packet_server_setting_control *real_packet = packet;
85109 int e;
85111
85112 log_packet_detailed("packet_server_setting_control_100: sending info about ()");
85113
85114#ifdef FREECIV_DELTA_PROTOCOL
85117 bool differ;
85118 int different = 0;
85119 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONTROL;
85120
85121 if (nullptr == *hash) {
85123 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
85124 }
85125 BV_CLR_ALL(fields);
85126
85127 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85128 old = fc_malloc(sizeof(*old));
85129 /* temporary bitcopy just to insert correctly */
85130 *old = *real_packet;
85133 different = 1; /* Force to send. */
85134 }
85135
85136 differ = (old->settings_num != real_packet->settings_num);
85137 if (differ) {
85138 different++;
85139 BV_SET(fields, 0);
85140 }
85141
85142 differ = (old->categories_num != real_packet->categories_num);
85143 if (differ) {
85144 different++;
85145 BV_SET(fields, 1);
85146 }
85147
85148 differ = (old->categories_num != real_packet->categories_num);
85149 if (!differ) {
85150 int i;
85151
85152 for (i = 0; i < old->categories_num; i++) {
85153 differ = (strcmp(old->category_names[i], real_packet->category_names[i]) != 0);
85154 if (differ) {
85155 break;
85156 }
85157 }
85158 }
85159 if (differ) {
85160 different++;
85161 BV_SET(fields, 2);
85162 }
85163
85164 if (different == 0) {
85165 log_packet_detailed(" no change -> discard");
85167 }
85168#endif /* FREECIV_DELTA_PROTOCOL */
85169
85170#ifdef FREECIV_JSON_CONNECTION
85171 struct plocation field_addr;
85172 {
85173 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85176 }
85177#endif /* FREECIV_JSON_CONNECTION */
85178
85179#ifdef FREECIV_DELTA_PROTOCOL
85180#ifdef FREECIV_JSON_CONNECTION
85181 field_addr.name = "fields";
85182#endif /* FREECIV_JSON_CONNECTION */
85183 e = 0;
85184 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85185 if (e) {
85186 log_packet_detailed("fields bitvector error detected");
85187 }
85188
85189 if (BV_ISSET(fields, 0)) {
85190 log_packet_detailed(" field 'settings_num' has changed");
85191
85192#ifdef FREECIV_JSON_CONNECTION
85193 field_addr.name = "settings_num";
85194#endif /* FREECIV_JSON_CONNECTION */
85195 e = 0;
85196
85197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
85198
85199 if (e) {
85200 log_packet_detailed("'settings_num' field error detected");
85201 }
85202 }
85203
85204 if (BV_ISSET(fields, 1)) {
85205 log_packet_detailed(" field 'categories_num' has changed");
85206
85207#ifdef FREECIV_JSON_CONNECTION
85208 field_addr.name = "categories_num";
85209#endif /* FREECIV_JSON_CONNECTION */
85210 e = 0;
85211
85212 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
85213
85214 if (e) {
85215 log_packet_detailed("'categories_num' field error detected");
85216 }
85217 }
85218
85219 if (BV_ISSET(fields, 2)) {
85220 log_packet_detailed(" field 'category_names' has changed");
85221
85222#ifdef FREECIV_JSON_CONNECTION
85223 field_addr.name = "category_names";
85224#endif /* FREECIV_JSON_CONNECTION */
85225 e = 0;
85226
85227 {
85228 int i;
85229
85230#ifdef FREECIV_JSON_CONNECTION
85231 /* Create the array. */
85232 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
85233
85234 /* Enter array. */
85235 field_addr.sub_location = plocation_elem_new(0);
85236#endif /* FREECIV_JSON_CONNECTION */
85237
85238 for (i = 0; i < real_packet->categories_num; i++) {
85239#ifdef FREECIV_JSON_CONNECTION
85240 /* Next array element. */
85241 field_addr.sub_location->number = i;
85242#endif /* FREECIV_JSON_CONNECTION */
85243
85244 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
85245 }
85246
85247#ifdef FREECIV_JSON_CONNECTION
85248 /* Exit array. */
85249 FC_FREE(field_addr.sub_location);
85250#endif /* FREECIV_JSON_CONNECTION */
85251 }
85252
85253 if (e) {
85254 log_packet_detailed("'category_names' field error detected");
85255 }
85256 }
85257
85258 *old = *real_packet;
85259
85260#else /* FREECIV_DELTA_PROTOCOL */
85261#ifdef FREECIV_JSON_CONNECTION
85262 field_addr.name = "settings_num";
85263#endif /* FREECIV_JSON_CONNECTION */
85264 e = 0;
85265
85266 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
85267
85268 if (e) {
85269 log_packet_detailed("'settings_num' field error detected");
85270 }
85271
85272#ifdef FREECIV_JSON_CONNECTION
85273 field_addr.name = "categories_num";
85274#endif /* FREECIV_JSON_CONNECTION */
85275 e = 0;
85276
85277 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
85278
85279 if (e) {
85280 log_packet_detailed("'categories_num' field error detected");
85281 }
85282
85283#ifdef FREECIV_JSON_CONNECTION
85284 field_addr.name = "category_names";
85285#endif /* FREECIV_JSON_CONNECTION */
85286 e = 0;
85287
85288 {
85289 int i;
85290
85291#ifdef FREECIV_JSON_CONNECTION
85292 /* Create the array. */
85293 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
85294
85295 /* Enter array. */
85296 field_addr.sub_location = plocation_elem_new(0);
85297#endif /* FREECIV_JSON_CONNECTION */
85298
85299 for (i = 0; i < real_packet->categories_num; i++) {
85300#ifdef FREECIV_JSON_CONNECTION
85301 /* Next array element. */
85302 field_addr.sub_location->number = i;
85303#endif /* FREECIV_JSON_CONNECTION */
85304
85305 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
85306 }
85307
85308#ifdef FREECIV_JSON_CONNECTION
85309 /* Exit array. */
85310 FC_FREE(field_addr.sub_location);
85311#endif /* FREECIV_JSON_CONNECTION */
85312 }
85313
85314 if (e) {
85315 log_packet_detailed("'category_names' field error detected");
85316 }
85317#endif /* FREECIV_DELTA_PROTOCOL */
85318
85320}
85321
85323{
85324 if (!pc->used) {
85325 log_error("WARNING: trying to send data to the closed connection %s",
85327 return -1;
85328 }
85329 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet != nullptr, -1,
85330 "Handler for PACKET_SERVER_SETTING_CONTROL not installed");
85331 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet(pc, packet);
85332}
85333
85335{
85336 memset(packet, 0, sizeof(*packet));
85337}
85338
85339#define free_packet_server_setting_const(_packet) (void) 0
85340#define destroy_packet_server_setting_const free
85341
85342#ifdef FREECIV_DELTA_PROTOCOL
85344{
85345 const struct packet_server_setting_const *key = (const struct packet_server_setting_const *) vkey;
85346 genhash_val_t result = 0;
85347
85348 result += key->id;
85349
85350 result &= 0xFFFFFFFF;
85351 return result;
85352}
85353
85354static bool cmp_packet_server_setting_const_100(const void *vkey1, const void *vkey2)
85355{
85356 const struct packet_server_setting_const *old = (const struct packet_server_setting_const *) vkey1;
85358 bool differ;
85359
85360 differ = (old->id != real_packet->id);
85361
85362 return !differ;
85363}
85365#endif /* FREECIV_DELTA_PROTOCOL */
85366
85368{
85369#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_const(_packet)
85371
85372#ifdef FREECIV_JSON_CONNECTION
85373 struct plocation field_addr;
85374 {
85375 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85378 }
85379#endif /* FREECIV_JSON_CONNECTION */
85380
85381#ifdef FREECIV_JSON_CONNECTION
85382 field_addr.name = "id";
85383#endif /* FREECIV_JSON_CONNECTION */
85384
85385 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85387 }
85388
85389 log_packet_detailed("packet_server_setting_const_100: got info about (%d)",
85390 real_packet->id);
85391
85392#ifdef FREECIV_DELTA_PROTOCOL
85395 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONST;
85396
85397 if (nullptr == *hash) {
85399 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
85400 }
85401
85402 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85403 *real_packet = *old;
85404 } else {
85405 /* packet is already initialized empty */
85406 log_packet_detailed(" no old info");
85407 }
85408
85409#ifdef FREECIV_JSON_CONNECTION
85410 field_addr.name = "fields";
85411#endif /* FREECIV_JSON_CONNECTION */
85412 DIO_BV_GET(&din, &field_addr, fields);
85413
85414 if (BV_ISSET(fields, 0)) {
85415 log_packet_detailed(" got field 'name'");
85416
85417#ifdef FREECIV_JSON_CONNECTION
85418 field_addr.name = "name";
85419#endif /* FREECIV_JSON_CONNECTION */
85420
85421 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
85423 }
85424 }
85425
85426 if (BV_ISSET(fields, 1)) {
85427 log_packet_detailed(" got field 'short_help'");
85428
85429#ifdef FREECIV_JSON_CONNECTION
85430 field_addr.name = "short_help";
85431#endif /* FREECIV_JSON_CONNECTION */
85432
85433 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
85434 RECEIVE_PACKET_FIELD_ERROR(short_help);
85435 }
85436 }
85437
85438 if (BV_ISSET(fields, 2)) {
85439 log_packet_detailed(" got field 'extra_help'");
85440
85441#ifdef FREECIV_JSON_CONNECTION
85442 field_addr.name = "extra_help";
85443#endif /* FREECIV_JSON_CONNECTION */
85444
85445 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
85446 RECEIVE_PACKET_FIELD_ERROR(extra_help);
85447 }
85448 }
85449
85450 if (BV_ISSET(fields, 3)) {
85451 log_packet_detailed(" got field 'category'");
85452
85453#ifdef FREECIV_JSON_CONNECTION
85454 field_addr.name = "category";
85455#endif /* FREECIV_JSON_CONNECTION */
85456
85457 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
85459 }
85460 }
85461
85462 if (nullptr == old) {
85463 old = fc_malloc(sizeof(*old));
85465 *old = *real_packet;
85467 } else {
85468 *old = *real_packet;
85469 }
85470
85471#else /* FREECIV_DELTA_PROTOCOL */
85472#ifdef FREECIV_JSON_CONNECTION
85473 field_addr.name = "name";
85474#endif /* FREECIV_JSON_CONNECTION */
85475
85476 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
85478 }
85479
85480#ifdef FREECIV_JSON_CONNECTION
85481 field_addr.name = "short_help";
85482#endif /* FREECIV_JSON_CONNECTION */
85483
85484 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
85485 RECEIVE_PACKET_FIELD_ERROR(short_help);
85486 }
85487
85488#ifdef FREECIV_JSON_CONNECTION
85489 field_addr.name = "extra_help";
85490#endif /* FREECIV_JSON_CONNECTION */
85491
85492 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
85493 RECEIVE_PACKET_FIELD_ERROR(extra_help);
85494 }
85495
85496#ifdef FREECIV_JSON_CONNECTION
85497 field_addr.name = "category";
85498#endif /* FREECIV_JSON_CONNECTION */
85499
85500 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
85502 }
85503#endif /* FREECIV_DELTA_PROTOCOL */
85504
85506#undef FREE_PACKET_STRUCT
85507}
85508
85510{
85511 const struct packet_server_setting_const *real_packet = packet;
85512 int e;
85514
85515 log_packet_detailed("packet_server_setting_const_100: sending info about (%d)",
85516 real_packet->id);
85517
85518#ifdef FREECIV_DELTA_PROTOCOL
85521 bool differ;
85522 int different = 0;
85523 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONST;
85524
85525 if (nullptr == *hash) {
85527 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
85528 }
85529 BV_CLR_ALL(fields);
85530
85531 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85532 old = fc_malloc(sizeof(*old));
85533 /* temporary bitcopy just to insert correctly */
85534 *old = *real_packet;
85537 different = 1; /* Force to send. */
85538 }
85539
85540 differ = (strcmp(old->name, real_packet->name) != 0);
85541 if (differ) {
85542 different++;
85543 BV_SET(fields, 0);
85544 }
85545
85546 differ = (strcmp(old->short_help, real_packet->short_help) != 0);
85547 if (differ) {
85548 different++;
85549 BV_SET(fields, 1);
85550 }
85551
85552 differ = (strcmp(old->extra_help, real_packet->extra_help) != 0);
85553 if (differ) {
85554 different++;
85555 BV_SET(fields, 2);
85556 }
85557
85558 differ = (old->category != real_packet->category);
85559 if (differ) {
85560 different++;
85561 BV_SET(fields, 3);
85562 }
85563
85564 if (different == 0) {
85565 log_packet_detailed(" no change -> discard");
85567 }
85568#endif /* FREECIV_DELTA_PROTOCOL */
85569
85570#ifdef FREECIV_JSON_CONNECTION
85571 struct plocation field_addr;
85572 {
85573 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85576 }
85577#endif /* FREECIV_JSON_CONNECTION */
85578
85579#ifdef FREECIV_JSON_CONNECTION
85580 field_addr.name = "id";
85581#endif /* FREECIV_JSON_CONNECTION */
85582 e = 0;
85583
85584 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85585
85586 if (e) {
85587 log_packet_detailed("'id' field error detected");
85588 }
85589
85590#ifdef FREECIV_DELTA_PROTOCOL
85591#ifdef FREECIV_JSON_CONNECTION
85592 field_addr.name = "fields";
85593#endif /* FREECIV_JSON_CONNECTION */
85594 e = 0;
85595 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85596 if (e) {
85597 log_packet_detailed("fields bitvector error detected");
85598 }
85599
85600 if (BV_ISSET(fields, 0)) {
85601 log_packet_detailed(" field 'name' has changed");
85602
85603#ifdef FREECIV_JSON_CONNECTION
85604 field_addr.name = "name";
85605#endif /* FREECIV_JSON_CONNECTION */
85606 e = 0;
85607
85608 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
85609
85610 if (e) {
85611 log_packet_detailed("'name' field error detected");
85612 }
85613 }
85614
85615 if (BV_ISSET(fields, 1)) {
85616 log_packet_detailed(" field 'short_help' has changed");
85617
85618#ifdef FREECIV_JSON_CONNECTION
85619 field_addr.name = "short_help";
85620#endif /* FREECIV_JSON_CONNECTION */
85621 e = 0;
85622
85623 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
85624
85625 if (e) {
85626 log_packet_detailed("'short_help' field error detected");
85627 }
85628 }
85629
85630 if (BV_ISSET(fields, 2)) {
85631 log_packet_detailed(" field 'extra_help' has changed");
85632
85633#ifdef FREECIV_JSON_CONNECTION
85634 field_addr.name = "extra_help";
85635#endif /* FREECIV_JSON_CONNECTION */
85636 e = 0;
85637
85638 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
85639
85640 if (e) {
85641 log_packet_detailed("'extra_help' field error detected");
85642 }
85643 }
85644
85645 if (BV_ISSET(fields, 3)) {
85646 log_packet_detailed(" field 'category' has changed");
85647
85648#ifdef FREECIV_JSON_CONNECTION
85649 field_addr.name = "category";
85650#endif /* FREECIV_JSON_CONNECTION */
85651 e = 0;
85652
85653 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
85654
85655 if (e) {
85656 log_packet_detailed("'category' field error detected");
85657 }
85658 }
85659
85660 *old = *real_packet;
85661
85662#else /* FREECIV_DELTA_PROTOCOL */
85663#ifdef FREECIV_JSON_CONNECTION
85664 field_addr.name = "name";
85665#endif /* FREECIV_JSON_CONNECTION */
85666 e = 0;
85667
85668 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
85669
85670 if (e) {
85671 log_packet_detailed("'name' field error detected");
85672 }
85673
85674#ifdef FREECIV_JSON_CONNECTION
85675 field_addr.name = "short_help";
85676#endif /* FREECIV_JSON_CONNECTION */
85677 e = 0;
85678
85679 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
85680
85681 if (e) {
85682 log_packet_detailed("'short_help' field error detected");
85683 }
85684
85685#ifdef FREECIV_JSON_CONNECTION
85686 field_addr.name = "extra_help";
85687#endif /* FREECIV_JSON_CONNECTION */
85688 e = 0;
85689
85690 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
85691
85692 if (e) {
85693 log_packet_detailed("'extra_help' field error detected");
85694 }
85695
85696#ifdef FREECIV_JSON_CONNECTION
85697 field_addr.name = "category";
85698#endif /* FREECIV_JSON_CONNECTION */
85699 e = 0;
85700
85701 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
85702
85703 if (e) {
85704 log_packet_detailed("'category' field error detected");
85705 }
85706#endif /* FREECIV_DELTA_PROTOCOL */
85707
85709}
85710
85712{
85713 if (!pc->used) {
85714 log_error("WARNING: trying to send data to the closed connection %s",
85716 return -1;
85717 }
85718 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet != nullptr, -1,
85719 "Handler for PACKET_SERVER_SETTING_CONST not installed");
85720 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet(pc, packet);
85721}
85722
85724{
85725 memset(packet, 0, sizeof(*packet));
85726}
85727
85728#define free_packet_server_setting_bool(_packet) (void) 0
85729#define destroy_packet_server_setting_bool free
85730
85731#ifdef FREECIV_DELTA_PROTOCOL
85733{
85734 const struct packet_server_setting_bool *key = (const struct packet_server_setting_bool *) vkey;
85735 genhash_val_t result = 0;
85736
85737 result += key->id;
85738
85739 result &= 0xFFFFFFFF;
85740 return result;
85741}
85742
85743static bool cmp_packet_server_setting_bool_100(const void *vkey1, const void *vkey2)
85744{
85745 const struct packet_server_setting_bool *old = (const struct packet_server_setting_bool *) vkey1;
85747 bool differ;
85748
85749 differ = (old->id != real_packet->id);
85750
85751 return !differ;
85752}
85754#endif /* FREECIV_DELTA_PROTOCOL */
85755
85757{
85758#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bool(_packet)
85760
85761#ifdef FREECIV_JSON_CONNECTION
85762 struct plocation field_addr;
85763 {
85764 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85767 }
85768#endif /* FREECIV_JSON_CONNECTION */
85769
85770#ifdef FREECIV_JSON_CONNECTION
85771 field_addr.name = "id";
85772#endif /* FREECIV_JSON_CONNECTION */
85773
85774 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85776 }
85777
85778 log_packet_detailed("packet_server_setting_bool_100: got info about (%d)",
85779 real_packet->id);
85780
85781#ifdef FREECIV_DELTA_PROTOCOL
85784 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BOOL;
85785
85786 if (nullptr == *hash) {
85788 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
85789 }
85790
85791 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85792 *real_packet = *old;
85793 } else {
85794 /* packet is already initialized empty */
85795 log_packet_detailed(" no old info");
85796 }
85797
85798#ifdef FREECIV_JSON_CONNECTION
85799 field_addr.name = "fields";
85800#endif /* FREECIV_JSON_CONNECTION */
85801 DIO_BV_GET(&din, &field_addr, fields);
85802
85803 real_packet->is_visible = BV_ISSET(fields, 0);
85804
85805 real_packet->is_changeable = BV_ISSET(fields, 1);
85806
85807 real_packet->initial_setting = BV_ISSET(fields, 2);
85808
85809 if (BV_ISSET(fields, 3)) {
85810 log_packet_detailed(" got field 'setdef'");
85811
85812#ifdef FREECIV_JSON_CONNECTION
85813 field_addr.name = "setdef";
85814#endif /* FREECIV_JSON_CONNECTION */
85815
85816 {
85817 int readin;
85818
85819 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85821 }
85822 real_packet->setdef = readin;
85823 }
85824 }
85825
85826 real_packet->val = BV_ISSET(fields, 4);
85827
85828 real_packet->default_val = BV_ISSET(fields, 5);
85829
85830 if (nullptr == old) {
85831 old = fc_malloc(sizeof(*old));
85833 *old = *real_packet;
85835 } else {
85836 *old = *real_packet;
85837 }
85838
85839#else /* FREECIV_DELTA_PROTOCOL */
85840#ifdef FREECIV_JSON_CONNECTION
85841 field_addr.name = "is_visible";
85842#endif /* FREECIV_JSON_CONNECTION */
85843
85844 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85845 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85846 }
85847
85848#ifdef FREECIV_JSON_CONNECTION
85849 field_addr.name = "is_changeable";
85850#endif /* FREECIV_JSON_CONNECTION */
85851
85852 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
85853 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
85854 }
85855
85856#ifdef FREECIV_JSON_CONNECTION
85857 field_addr.name = "initial_setting";
85858#endif /* FREECIV_JSON_CONNECTION */
85859
85860 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
85861 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
85862 }
85863
85864#ifdef FREECIV_JSON_CONNECTION
85865 field_addr.name = "setdef";
85866#endif /* FREECIV_JSON_CONNECTION */
85867
85868 {
85869 int readin;
85870
85871 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85873 }
85874 real_packet->setdef = readin;
85875 }
85876
85877#ifdef FREECIV_JSON_CONNECTION
85878 field_addr.name = "val";
85879#endif /* FREECIV_JSON_CONNECTION */
85880
85881 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->val)) {
85883 }
85884
85885#ifdef FREECIV_JSON_CONNECTION
85886 field_addr.name = "default_val";
85887#endif /* FREECIV_JSON_CONNECTION */
85888
85889 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->default_val)) {
85890 RECEIVE_PACKET_FIELD_ERROR(default_val);
85891 }
85892#endif /* FREECIV_DELTA_PROTOCOL */
85893
85895#undef FREE_PACKET_STRUCT
85896}
85897
85899{
85900 const struct packet_server_setting_bool *real_packet = packet;
85901 int e;
85903
85904 log_packet_detailed("packet_server_setting_bool_100: sending info about (%d)",
85905 real_packet->id);
85906
85907#ifdef FREECIV_DELTA_PROTOCOL
85910 bool differ;
85911 int different = 0;
85912 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BOOL;
85913
85914 if (nullptr == *hash) {
85916 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
85917 }
85918 BV_CLR_ALL(fields);
85919
85920 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85921 old = fc_malloc(sizeof(*old));
85922 /* temporary bitcopy just to insert correctly */
85923 *old = *real_packet;
85926 different = 1; /* Force to send. */
85927 }
85928
85929 differ = (old->is_visible != real_packet->is_visible);
85930 if (differ) {
85931 different++;
85932 }
85933 /* folded into head */
85934 if (real_packet->is_visible) {
85935 BV_SET(fields, 0);
85936 }
85937
85938 differ = (old->is_changeable != real_packet->is_changeable);
85939 if (differ) {
85940 different++;
85941 }
85942 /* folded into head */
85943 if (real_packet->is_changeable) {
85944 BV_SET(fields, 1);
85945 }
85946
85947 differ = (old->initial_setting != real_packet->initial_setting);
85948 if (differ) {
85949 different++;
85950 }
85951 /* folded into head */
85952 if (real_packet->initial_setting) {
85953 BV_SET(fields, 2);
85954 }
85955
85956 differ = (old->setdef != real_packet->setdef);
85957 if (differ) {
85958 different++;
85959 BV_SET(fields, 3);
85960 }
85961
85962 differ = (old->val != real_packet->val);
85963 if (differ) {
85964 different++;
85965 }
85966 /* folded into head */
85967 if (real_packet->val) {
85968 BV_SET(fields, 4);
85969 }
85970
85971 differ = (old->default_val != real_packet->default_val);
85972 if (differ) {
85973 different++;
85974 }
85975 /* folded into head */
85976 if (real_packet->default_val) {
85977 BV_SET(fields, 5);
85978 }
85979
85980 if (different == 0) {
85981 log_packet_detailed(" no change -> discard");
85983 }
85984#endif /* FREECIV_DELTA_PROTOCOL */
85985
85986#ifdef FREECIV_JSON_CONNECTION
85987 struct plocation field_addr;
85988 {
85989 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85992 }
85993#endif /* FREECIV_JSON_CONNECTION */
85994
85995#ifdef FREECIV_JSON_CONNECTION
85996 field_addr.name = "id";
85997#endif /* FREECIV_JSON_CONNECTION */
85998 e = 0;
85999
86000 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86001
86002 if (e) {
86003 log_packet_detailed("'id' field error detected");
86004 }
86005
86006#ifdef FREECIV_DELTA_PROTOCOL
86007#ifdef FREECIV_JSON_CONNECTION
86008 field_addr.name = "fields";
86009#endif /* FREECIV_JSON_CONNECTION */
86010 e = 0;
86011 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86012 if (e) {
86013 log_packet_detailed("fields bitvector error detected");
86014 }
86015
86016 /* field 0 is folded into the header */
86017
86018 /* field 1 is folded into the header */
86019
86020 /* field 2 is folded into the header */
86021
86022 if (BV_ISSET(fields, 3)) {
86023 log_packet_detailed(" field 'setdef' has changed");
86024
86025#ifdef FREECIV_JSON_CONNECTION
86026 field_addr.name = "setdef";
86027#endif /* FREECIV_JSON_CONNECTION */
86028 e = 0;
86029
86030 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86031
86032 if (e) {
86033 log_packet_detailed("'setdef' field error detected");
86034 }
86035 }
86036
86037 /* field 4 is folded into the header */
86038
86039 /* field 5 is folded into the header */
86040
86041 *old = *real_packet;
86042
86043#else /* FREECIV_DELTA_PROTOCOL */
86044#ifdef FREECIV_JSON_CONNECTION
86045 field_addr.name = "is_visible";
86046#endif /* FREECIV_JSON_CONNECTION */
86047 e = 0;
86048
86049 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86050
86051 if (e) {
86052 log_packet_detailed("'is_visible' field error detected");
86053 }
86054
86055#ifdef FREECIV_JSON_CONNECTION
86056 field_addr.name = "is_changeable";
86057#endif /* FREECIV_JSON_CONNECTION */
86058 e = 0;
86059
86060 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86061
86062 if (e) {
86063 log_packet_detailed("'is_changeable' field error detected");
86064 }
86065
86066#ifdef FREECIV_JSON_CONNECTION
86067 field_addr.name = "initial_setting";
86068#endif /* FREECIV_JSON_CONNECTION */
86069 e = 0;
86070
86071 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86072
86073 if (e) {
86074 log_packet_detailed("'initial_setting' field error detected");
86075 }
86076
86077#ifdef FREECIV_JSON_CONNECTION
86078 field_addr.name = "setdef";
86079#endif /* FREECIV_JSON_CONNECTION */
86080 e = 0;
86081
86082 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86083
86084 if (e) {
86085 log_packet_detailed("'setdef' field error detected");
86086 }
86087
86088#ifdef FREECIV_JSON_CONNECTION
86089 field_addr.name = "val";
86090#endif /* FREECIV_JSON_CONNECTION */
86091 e = 0;
86092
86093 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->val);
86094
86095 if (e) {
86096 log_packet_detailed("'val' field error detected");
86097 }
86098
86099#ifdef FREECIV_JSON_CONNECTION
86100 field_addr.name = "default_val";
86101#endif /* FREECIV_JSON_CONNECTION */
86102 e = 0;
86103
86104 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->default_val);
86105
86106 if (e) {
86107 log_packet_detailed("'default_val' field error detected");
86108 }
86109#endif /* FREECIV_DELTA_PROTOCOL */
86110
86112}
86113
86115{
86116 if (!pc->used) {
86117 log_error("WARNING: trying to send data to the closed connection %s",
86119 return -1;
86120 }
86121 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet != nullptr, -1,
86122 "Handler for PACKET_SERVER_SETTING_BOOL not installed");
86123 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet(pc, packet);
86124}
86125
86127{
86128 memset(packet, 0, sizeof(*packet));
86129}
86130
86131#define free_packet_server_setting_int(_packet) (void) 0
86132#define destroy_packet_server_setting_int free
86133
86134#ifdef FREECIV_DELTA_PROTOCOL
86136{
86137 const struct packet_server_setting_int *key = (const struct packet_server_setting_int *) vkey;
86138 genhash_val_t result = 0;
86139
86140 result += key->id;
86141
86142 result &= 0xFFFFFFFF;
86143 return result;
86144}
86145
86146static bool cmp_packet_server_setting_int_100(const void *vkey1, const void *vkey2)
86147{
86148 const struct packet_server_setting_int *old = (const struct packet_server_setting_int *) vkey1;
86150 bool differ;
86151
86152 differ = (old->id != real_packet->id);
86153
86154 return !differ;
86155}
86157#endif /* FREECIV_DELTA_PROTOCOL */
86158
86160{
86161#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_int(_packet)
86163
86164#ifdef FREECIV_JSON_CONNECTION
86165 struct plocation field_addr;
86166 {
86167 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86170 }
86171#endif /* FREECIV_JSON_CONNECTION */
86172
86173#ifdef FREECIV_JSON_CONNECTION
86174 field_addr.name = "id";
86175#endif /* FREECIV_JSON_CONNECTION */
86176
86177 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
86179 }
86180
86181 log_packet_detailed("packet_server_setting_int_100: got info about (%d)",
86182 real_packet->id);
86183
86184#ifdef FREECIV_DELTA_PROTOCOL
86187 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_INT;
86188
86189 if (nullptr == *hash) {
86191 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
86192 }
86193
86194 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86195 *real_packet = *old;
86196 } else {
86197 /* packet is already initialized empty */
86198 log_packet_detailed(" no old info");
86199 }
86200
86201#ifdef FREECIV_JSON_CONNECTION
86202 field_addr.name = "fields";
86203#endif /* FREECIV_JSON_CONNECTION */
86204 DIO_BV_GET(&din, &field_addr, fields);
86205
86206 real_packet->is_visible = BV_ISSET(fields, 0);
86207
86208 real_packet->is_changeable = BV_ISSET(fields, 1);
86209
86210 real_packet->initial_setting = BV_ISSET(fields, 2);
86211
86212 if (BV_ISSET(fields, 3)) {
86213 log_packet_detailed(" got field 'setdef'");
86214
86215#ifdef FREECIV_JSON_CONNECTION
86216 field_addr.name = "setdef";
86217#endif /* FREECIV_JSON_CONNECTION */
86218
86219 {
86220 int readin;
86221
86222 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86224 }
86225 real_packet->setdef = readin;
86226 }
86227 }
86228
86229 if (BV_ISSET(fields, 4)) {
86230 log_packet_detailed(" got field 'val'");
86231
86232#ifdef FREECIV_JSON_CONNECTION
86233 field_addr.name = "val";
86234#endif /* FREECIV_JSON_CONNECTION */
86235
86236 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
86238 }
86239 }
86240
86241 if (BV_ISSET(fields, 5)) {
86242 log_packet_detailed(" got field 'default_val'");
86243
86244#ifdef FREECIV_JSON_CONNECTION
86245 field_addr.name = "default_val";
86246#endif /* FREECIV_JSON_CONNECTION */
86247
86248 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
86249 RECEIVE_PACKET_FIELD_ERROR(default_val);
86250 }
86251 }
86252
86253 if (BV_ISSET(fields, 6)) {
86254 log_packet_detailed(" got field 'min_val'");
86255
86256#ifdef FREECIV_JSON_CONNECTION
86257 field_addr.name = "min_val";
86258#endif /* FREECIV_JSON_CONNECTION */
86259
86260 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
86262 }
86263 }
86264
86265 if (BV_ISSET(fields, 7)) {
86266 log_packet_detailed(" got field 'max_val'");
86267
86268#ifdef FREECIV_JSON_CONNECTION
86269 field_addr.name = "max_val";
86270#endif /* FREECIV_JSON_CONNECTION */
86271
86272 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
86274 }
86275 }
86276
86277 if (nullptr == old) {
86278 old = fc_malloc(sizeof(*old));
86280 *old = *real_packet;
86282 } else {
86283 *old = *real_packet;
86284 }
86285
86286#else /* FREECIV_DELTA_PROTOCOL */
86287#ifdef FREECIV_JSON_CONNECTION
86288 field_addr.name = "is_visible";
86289#endif /* FREECIV_JSON_CONNECTION */
86290
86291 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
86292 RECEIVE_PACKET_FIELD_ERROR(is_visible);
86293 }
86294
86295#ifdef FREECIV_JSON_CONNECTION
86296 field_addr.name = "is_changeable";
86297#endif /* FREECIV_JSON_CONNECTION */
86298
86299 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
86300 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
86301 }
86302
86303#ifdef FREECIV_JSON_CONNECTION
86304 field_addr.name = "initial_setting";
86305#endif /* FREECIV_JSON_CONNECTION */
86306
86307 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
86308 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
86309 }
86310
86311#ifdef FREECIV_JSON_CONNECTION
86312 field_addr.name = "setdef";
86313#endif /* FREECIV_JSON_CONNECTION */
86314
86315 {
86316 int readin;
86317
86318 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86320 }
86321 real_packet->setdef = readin;
86322 }
86323
86324#ifdef FREECIV_JSON_CONNECTION
86325 field_addr.name = "val";
86326#endif /* FREECIV_JSON_CONNECTION */
86327
86328 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
86330 }
86331
86332#ifdef FREECIV_JSON_CONNECTION
86333 field_addr.name = "default_val";
86334#endif /* FREECIV_JSON_CONNECTION */
86335
86336 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
86337 RECEIVE_PACKET_FIELD_ERROR(default_val);
86338 }
86339
86340#ifdef FREECIV_JSON_CONNECTION
86341 field_addr.name = "min_val";
86342#endif /* FREECIV_JSON_CONNECTION */
86343
86344 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
86346 }
86347
86348#ifdef FREECIV_JSON_CONNECTION
86349 field_addr.name = "max_val";
86350#endif /* FREECIV_JSON_CONNECTION */
86351
86352 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
86354 }
86355#endif /* FREECIV_DELTA_PROTOCOL */
86356
86358#undef FREE_PACKET_STRUCT
86359}
86360
86362{
86363 const struct packet_server_setting_int *real_packet = packet;
86364 int e;
86366
86367 log_packet_detailed("packet_server_setting_int_100: sending info about (%d)",
86368 real_packet->id);
86369
86370#ifdef FREECIV_DELTA_PROTOCOL
86373 bool differ;
86374 int different = 0;
86375 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_INT;
86376
86377 if (nullptr == *hash) {
86379 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
86380 }
86381 BV_CLR_ALL(fields);
86382
86383 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86384 old = fc_malloc(sizeof(*old));
86385 /* temporary bitcopy just to insert correctly */
86386 *old = *real_packet;
86389 different = 1; /* Force to send. */
86390 }
86391
86392 differ = (old->is_visible != real_packet->is_visible);
86393 if (differ) {
86394 different++;
86395 }
86396 /* folded into head */
86397 if (real_packet->is_visible) {
86398 BV_SET(fields, 0);
86399 }
86400
86401 differ = (old->is_changeable != real_packet->is_changeable);
86402 if (differ) {
86403 different++;
86404 }
86405 /* folded into head */
86406 if (real_packet->is_changeable) {
86407 BV_SET(fields, 1);
86408 }
86409
86410 differ = (old->initial_setting != real_packet->initial_setting);
86411 if (differ) {
86412 different++;
86413 }
86414 /* folded into head */
86415 if (real_packet->initial_setting) {
86416 BV_SET(fields, 2);
86417 }
86418
86419 differ = (old->setdef != real_packet->setdef);
86420 if (differ) {
86421 different++;
86422 BV_SET(fields, 3);
86423 }
86424
86425 differ = (old->val != real_packet->val);
86426 if (differ) {
86427 different++;
86428 BV_SET(fields, 4);
86429 }
86430
86431 differ = (old->default_val != real_packet->default_val);
86432 if (differ) {
86433 different++;
86434 BV_SET(fields, 5);
86435 }
86436
86437 differ = (old->min_val != real_packet->min_val);
86438 if (differ) {
86439 different++;
86440 BV_SET(fields, 6);
86441 }
86442
86443 differ = (old->max_val != real_packet->max_val);
86444 if (differ) {
86445 different++;
86446 BV_SET(fields, 7);
86447 }
86448
86449 if (different == 0) {
86450 log_packet_detailed(" no change -> discard");
86452 }
86453#endif /* FREECIV_DELTA_PROTOCOL */
86454
86455#ifdef FREECIV_JSON_CONNECTION
86456 struct plocation field_addr;
86457 {
86458 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86461 }
86462#endif /* FREECIV_JSON_CONNECTION */
86463
86464#ifdef FREECIV_JSON_CONNECTION
86465 field_addr.name = "id";
86466#endif /* FREECIV_JSON_CONNECTION */
86467 e = 0;
86468
86469 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86470
86471 if (e) {
86472 log_packet_detailed("'id' field error detected");
86473 }
86474
86475#ifdef FREECIV_DELTA_PROTOCOL
86476#ifdef FREECIV_JSON_CONNECTION
86477 field_addr.name = "fields";
86478#endif /* FREECIV_JSON_CONNECTION */
86479 e = 0;
86480 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86481 if (e) {
86482 log_packet_detailed("fields bitvector error detected");
86483 }
86484
86485 /* field 0 is folded into the header */
86486
86487 /* field 1 is folded into the header */
86488
86489 /* field 2 is folded into the header */
86490
86491 if (BV_ISSET(fields, 3)) {
86492 log_packet_detailed(" field 'setdef' has changed");
86493
86494#ifdef FREECIV_JSON_CONNECTION
86495 field_addr.name = "setdef";
86496#endif /* FREECIV_JSON_CONNECTION */
86497 e = 0;
86498
86499 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86500
86501 if (e) {
86502 log_packet_detailed("'setdef' field error detected");
86503 }
86504 }
86505
86506 if (BV_ISSET(fields, 4)) {
86507 log_packet_detailed(" field 'val' has changed");
86508
86509#ifdef FREECIV_JSON_CONNECTION
86510 field_addr.name = "val";
86511#endif /* FREECIV_JSON_CONNECTION */
86512 e = 0;
86513
86514 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
86515
86516 if (e) {
86517 log_packet_detailed("'val' field error detected");
86518 }
86519 }
86520
86521 if (BV_ISSET(fields, 5)) {
86522 log_packet_detailed(" field 'default_val' has changed");
86523
86524#ifdef FREECIV_JSON_CONNECTION
86525 field_addr.name = "default_val";
86526#endif /* FREECIV_JSON_CONNECTION */
86527 e = 0;
86528
86529 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
86530
86531 if (e) {
86532 log_packet_detailed("'default_val' field error detected");
86533 }
86534 }
86535
86536 if (BV_ISSET(fields, 6)) {
86537 log_packet_detailed(" field 'min_val' has changed");
86538
86539#ifdef FREECIV_JSON_CONNECTION
86540 field_addr.name = "min_val";
86541#endif /* FREECIV_JSON_CONNECTION */
86542 e = 0;
86543
86544 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
86545
86546 if (e) {
86547 log_packet_detailed("'min_val' field error detected");
86548 }
86549 }
86550
86551 if (BV_ISSET(fields, 7)) {
86552 log_packet_detailed(" field 'max_val' has changed");
86553
86554#ifdef FREECIV_JSON_CONNECTION
86555 field_addr.name = "max_val";
86556#endif /* FREECIV_JSON_CONNECTION */
86557 e = 0;
86558
86559 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
86560
86561 if (e) {
86562 log_packet_detailed("'max_val' field error detected");
86563 }
86564 }
86565
86566 *old = *real_packet;
86567
86568#else /* FREECIV_DELTA_PROTOCOL */
86569#ifdef FREECIV_JSON_CONNECTION
86570 field_addr.name = "is_visible";
86571#endif /* FREECIV_JSON_CONNECTION */
86572 e = 0;
86573
86574 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86575
86576 if (e) {
86577 log_packet_detailed("'is_visible' field error detected");
86578 }
86579
86580#ifdef FREECIV_JSON_CONNECTION
86581 field_addr.name = "is_changeable";
86582#endif /* FREECIV_JSON_CONNECTION */
86583 e = 0;
86584
86585 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86586
86587 if (e) {
86588 log_packet_detailed("'is_changeable' field error detected");
86589 }
86590
86591#ifdef FREECIV_JSON_CONNECTION
86592 field_addr.name = "initial_setting";
86593#endif /* FREECIV_JSON_CONNECTION */
86594 e = 0;
86595
86596 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86597
86598 if (e) {
86599 log_packet_detailed("'initial_setting' field error detected");
86600 }
86601
86602#ifdef FREECIV_JSON_CONNECTION
86603 field_addr.name = "setdef";
86604#endif /* FREECIV_JSON_CONNECTION */
86605 e = 0;
86606
86607 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86608
86609 if (e) {
86610 log_packet_detailed("'setdef' field error detected");
86611 }
86612
86613#ifdef FREECIV_JSON_CONNECTION
86614 field_addr.name = "val";
86615#endif /* FREECIV_JSON_CONNECTION */
86616 e = 0;
86617
86618 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
86619
86620 if (e) {
86621 log_packet_detailed("'val' field error detected");
86622 }
86623
86624#ifdef FREECIV_JSON_CONNECTION
86625 field_addr.name = "default_val";
86626#endif /* FREECIV_JSON_CONNECTION */
86627 e = 0;
86628
86629 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
86630
86631 if (e) {
86632 log_packet_detailed("'default_val' field error detected");
86633 }
86634
86635#ifdef FREECIV_JSON_CONNECTION
86636 field_addr.name = "min_val";
86637#endif /* FREECIV_JSON_CONNECTION */
86638 e = 0;
86639
86640 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
86641
86642 if (e) {
86643 log_packet_detailed("'min_val' field error detected");
86644 }
86645
86646#ifdef FREECIV_JSON_CONNECTION
86647 field_addr.name = "max_val";
86648#endif /* FREECIV_JSON_CONNECTION */
86649 e = 0;
86650
86651 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
86652
86653 if (e) {
86654 log_packet_detailed("'max_val' field error detected");
86655 }
86656#endif /* FREECIV_DELTA_PROTOCOL */
86657
86659}
86660
86662{
86663 if (!pc->used) {
86664 log_error("WARNING: trying to send data to the closed connection %s",
86666 return -1;
86667 }
86668 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet != nullptr, -1,
86669 "Handler for PACKET_SERVER_SETTING_INT not installed");
86670 return pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet(pc, packet);
86671}
86672
86674{
86675 memset(packet, 0, sizeof(*packet));
86676}
86677
86678#define free_packet_server_setting_str(_packet) (void) 0
86679#define destroy_packet_server_setting_str free
86680
86681#ifdef FREECIV_DELTA_PROTOCOL
86683{
86684 const struct packet_server_setting_str *key = (const struct packet_server_setting_str *) vkey;
86685 genhash_val_t result = 0;
86686
86687 result += key->id;
86688
86689 result &= 0xFFFFFFFF;
86690 return result;
86691}
86692
86693static bool cmp_packet_server_setting_str_100(const void *vkey1, const void *vkey2)
86694{
86695 const struct packet_server_setting_str *old = (const struct packet_server_setting_str *) vkey1;
86697 bool differ;
86698
86699 differ = (old->id != real_packet->id);
86700
86701 return !differ;
86702}
86704#endif /* FREECIV_DELTA_PROTOCOL */
86705
86707{
86708#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_str(_packet)
86710
86711#ifdef FREECIV_JSON_CONNECTION
86712 struct plocation field_addr;
86713 {
86714 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86717 }
86718#endif /* FREECIV_JSON_CONNECTION */
86719
86720#ifdef FREECIV_JSON_CONNECTION
86721 field_addr.name = "id";
86722#endif /* FREECIV_JSON_CONNECTION */
86723
86724 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
86726 }
86727
86728 log_packet_detailed("packet_server_setting_str_100: got info about (%d)",
86729 real_packet->id);
86730
86731#ifdef FREECIV_DELTA_PROTOCOL
86734 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_STR;
86735
86736 if (nullptr == *hash) {
86738 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
86739 }
86740
86741 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86742 *real_packet = *old;
86743 } else {
86744 /* packet is already initialized empty */
86745 log_packet_detailed(" no old info");
86746 }
86747
86748#ifdef FREECIV_JSON_CONNECTION
86749 field_addr.name = "fields";
86750#endif /* FREECIV_JSON_CONNECTION */
86751 DIO_BV_GET(&din, &field_addr, fields);
86752
86753 real_packet->is_visible = BV_ISSET(fields, 0);
86754
86755 real_packet->is_changeable = BV_ISSET(fields, 1);
86756
86757 real_packet->initial_setting = BV_ISSET(fields, 2);
86758
86759 if (BV_ISSET(fields, 3)) {
86760 log_packet_detailed(" got field 'setdef'");
86761
86762#ifdef FREECIV_JSON_CONNECTION
86763 field_addr.name = "setdef";
86764#endif /* FREECIV_JSON_CONNECTION */
86765
86766 {
86767 int readin;
86768
86769 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86771 }
86772 real_packet->setdef = readin;
86773 }
86774 }
86775
86776 if (BV_ISSET(fields, 4)) {
86777 log_packet_detailed(" got field 'val'");
86778
86779#ifdef FREECIV_JSON_CONNECTION
86780 field_addr.name = "val";
86781#endif /* FREECIV_JSON_CONNECTION */
86782
86783 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
86785 }
86786 }
86787
86788 if (BV_ISSET(fields, 5)) {
86789 log_packet_detailed(" got field 'default_val'");
86790
86791#ifdef FREECIV_JSON_CONNECTION
86792 field_addr.name = "default_val";
86793#endif /* FREECIV_JSON_CONNECTION */
86794
86795 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
86796 RECEIVE_PACKET_FIELD_ERROR(default_val);
86797 }
86798 }
86799
86800 if (nullptr == old) {
86801 old = fc_malloc(sizeof(*old));
86803 *old = *real_packet;
86805 } else {
86806 *old = *real_packet;
86807 }
86808
86809#else /* FREECIV_DELTA_PROTOCOL */
86810#ifdef FREECIV_JSON_CONNECTION
86811 field_addr.name = "is_visible";
86812#endif /* FREECIV_JSON_CONNECTION */
86813
86814 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
86815 RECEIVE_PACKET_FIELD_ERROR(is_visible);
86816 }
86817
86818#ifdef FREECIV_JSON_CONNECTION
86819 field_addr.name = "is_changeable";
86820#endif /* FREECIV_JSON_CONNECTION */
86821
86822 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
86823 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
86824 }
86825
86826#ifdef FREECIV_JSON_CONNECTION
86827 field_addr.name = "initial_setting";
86828#endif /* FREECIV_JSON_CONNECTION */
86829
86830 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
86831 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
86832 }
86833
86834#ifdef FREECIV_JSON_CONNECTION
86835 field_addr.name = "setdef";
86836#endif /* FREECIV_JSON_CONNECTION */
86837
86838 {
86839 int readin;
86840
86841 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86843 }
86844 real_packet->setdef = readin;
86845 }
86846
86847#ifdef FREECIV_JSON_CONNECTION
86848 field_addr.name = "val";
86849#endif /* FREECIV_JSON_CONNECTION */
86850
86851 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
86853 }
86854
86855#ifdef FREECIV_JSON_CONNECTION
86856 field_addr.name = "default_val";
86857#endif /* FREECIV_JSON_CONNECTION */
86858
86859 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
86860 RECEIVE_PACKET_FIELD_ERROR(default_val);
86861 }
86862#endif /* FREECIV_DELTA_PROTOCOL */
86863
86865#undef FREE_PACKET_STRUCT
86866}
86867
86869{
86870 const struct packet_server_setting_str *real_packet = packet;
86871 int e;
86873
86874 log_packet_detailed("packet_server_setting_str_100: sending info about (%d)",
86875 real_packet->id);
86876
86877#ifdef FREECIV_DELTA_PROTOCOL
86880 bool differ;
86881 int different = 0;
86882 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_STR;
86883
86884 if (nullptr == *hash) {
86886 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
86887 }
86888 BV_CLR_ALL(fields);
86889
86890 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86891 old = fc_malloc(sizeof(*old));
86892 /* temporary bitcopy just to insert correctly */
86893 *old = *real_packet;
86896 different = 1; /* Force to send. */
86897 }
86898
86899 differ = (old->is_visible != real_packet->is_visible);
86900 if (differ) {
86901 different++;
86902 }
86903 /* folded into head */
86904 if (real_packet->is_visible) {
86905 BV_SET(fields, 0);
86906 }
86907
86908 differ = (old->is_changeable != real_packet->is_changeable);
86909 if (differ) {
86910 different++;
86911 }
86912 /* folded into head */
86913 if (real_packet->is_changeable) {
86914 BV_SET(fields, 1);
86915 }
86916
86917 differ = (old->initial_setting != real_packet->initial_setting);
86918 if (differ) {
86919 different++;
86920 }
86921 /* folded into head */
86922 if (real_packet->initial_setting) {
86923 BV_SET(fields, 2);
86924 }
86925
86926 differ = (old->setdef != real_packet->setdef);
86927 if (differ) {
86928 different++;
86929 BV_SET(fields, 3);
86930 }
86931
86932 differ = (strcmp(old->val, real_packet->val) != 0);
86933 if (differ) {
86934 different++;
86935 BV_SET(fields, 4);
86936 }
86937
86938 differ = (strcmp(old->default_val, real_packet->default_val) != 0);
86939 if (differ) {
86940 different++;
86941 BV_SET(fields, 5);
86942 }
86943
86944 if (different == 0) {
86945 log_packet_detailed(" no change -> discard");
86947 }
86948#endif /* FREECIV_DELTA_PROTOCOL */
86949
86950#ifdef FREECIV_JSON_CONNECTION
86951 struct plocation field_addr;
86952 {
86953 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86956 }
86957#endif /* FREECIV_JSON_CONNECTION */
86958
86959#ifdef FREECIV_JSON_CONNECTION
86960 field_addr.name = "id";
86961#endif /* FREECIV_JSON_CONNECTION */
86962 e = 0;
86963
86964 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86965
86966 if (e) {
86967 log_packet_detailed("'id' field error detected");
86968 }
86969
86970#ifdef FREECIV_DELTA_PROTOCOL
86971#ifdef FREECIV_JSON_CONNECTION
86972 field_addr.name = "fields";
86973#endif /* FREECIV_JSON_CONNECTION */
86974 e = 0;
86975 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86976 if (e) {
86977 log_packet_detailed("fields bitvector error detected");
86978 }
86979
86980 /* field 0 is folded into the header */
86981
86982 /* field 1 is folded into the header */
86983
86984 /* field 2 is folded into the header */
86985
86986 if (BV_ISSET(fields, 3)) {
86987 log_packet_detailed(" field 'setdef' has changed");
86988
86989#ifdef FREECIV_JSON_CONNECTION
86990 field_addr.name = "setdef";
86991#endif /* FREECIV_JSON_CONNECTION */
86992 e = 0;
86993
86994 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86995
86996 if (e) {
86997 log_packet_detailed("'setdef' field error detected");
86998 }
86999 }
87000
87001 if (BV_ISSET(fields, 4)) {
87002 log_packet_detailed(" field 'val' has changed");
87003
87004#ifdef FREECIV_JSON_CONNECTION
87005 field_addr.name = "val";
87006#endif /* FREECIV_JSON_CONNECTION */
87007 e = 0;
87008
87009 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
87010
87011 if (e) {
87012 log_packet_detailed("'val' field error detected");
87013 }
87014 }
87015
87016 if (BV_ISSET(fields, 5)) {
87017 log_packet_detailed(" field 'default_val' has changed");
87018
87019#ifdef FREECIV_JSON_CONNECTION
87020 field_addr.name = "default_val";
87021#endif /* FREECIV_JSON_CONNECTION */
87022 e = 0;
87023
87024 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
87025
87026 if (e) {
87027 log_packet_detailed("'default_val' field error detected");
87028 }
87029 }
87030
87031 *old = *real_packet;
87032
87033#else /* FREECIV_DELTA_PROTOCOL */
87034#ifdef FREECIV_JSON_CONNECTION
87035 field_addr.name = "is_visible";
87036#endif /* FREECIV_JSON_CONNECTION */
87037 e = 0;
87038
87039 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
87040
87041 if (e) {
87042 log_packet_detailed("'is_visible' field error detected");
87043 }
87044
87045#ifdef FREECIV_JSON_CONNECTION
87046 field_addr.name = "is_changeable";
87047#endif /* FREECIV_JSON_CONNECTION */
87048 e = 0;
87049
87050 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
87051
87052 if (e) {
87053 log_packet_detailed("'is_changeable' field error detected");
87054 }
87055
87056#ifdef FREECIV_JSON_CONNECTION
87057 field_addr.name = "initial_setting";
87058#endif /* FREECIV_JSON_CONNECTION */
87059 e = 0;
87060
87061 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
87062
87063 if (e) {
87064 log_packet_detailed("'initial_setting' field error detected");
87065 }
87066
87067#ifdef FREECIV_JSON_CONNECTION
87068 field_addr.name = "setdef";
87069#endif /* FREECIV_JSON_CONNECTION */
87070 e = 0;
87071
87072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87073
87074 if (e) {
87075 log_packet_detailed("'setdef' field error detected");
87076 }
87077
87078#ifdef FREECIV_JSON_CONNECTION
87079 field_addr.name = "val";
87080#endif /* FREECIV_JSON_CONNECTION */
87081 e = 0;
87082
87083 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
87084
87085 if (e) {
87086 log_packet_detailed("'val' field error detected");
87087 }
87088
87089#ifdef FREECIV_JSON_CONNECTION
87090 field_addr.name = "default_val";
87091#endif /* FREECIV_JSON_CONNECTION */
87092 e = 0;
87093
87094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
87095
87096 if (e) {
87097 log_packet_detailed("'default_val' field error detected");
87098 }
87099#endif /* FREECIV_DELTA_PROTOCOL */
87100
87102}
87103
87105{
87106 if (!pc->used) {
87107 log_error("WARNING: trying to send data to the closed connection %s",
87109 return -1;
87110 }
87111 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet != nullptr, -1,
87112 "Handler for PACKET_SERVER_SETTING_STR not installed");
87113 return pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet(pc, packet);
87114}
87115
87117{
87118 memset(packet, 0, sizeof(*packet));
87119}
87120
87121#define free_packet_server_setting_enum(_packet) (void) 0
87122#define destroy_packet_server_setting_enum free
87123
87124#ifdef FREECIV_DELTA_PROTOCOL
87126{
87127 const struct packet_server_setting_enum *key = (const struct packet_server_setting_enum *) vkey;
87128 genhash_val_t result = 0;
87129
87130 result += key->id;
87131
87132 result &= 0xFFFFFFFF;
87133 return result;
87134}
87135
87136static bool cmp_packet_server_setting_enum_100(const void *vkey1, const void *vkey2)
87137{
87138 const struct packet_server_setting_enum *old = (const struct packet_server_setting_enum *) vkey1;
87140 bool differ;
87141
87142 differ = (old->id != real_packet->id);
87143
87144 return !differ;
87145}
87147#endif /* FREECIV_DELTA_PROTOCOL */
87148
87150{
87151#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_enum(_packet)
87153
87154#ifdef FREECIV_JSON_CONNECTION
87155 struct plocation field_addr;
87156 {
87157 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87160 }
87161#endif /* FREECIV_JSON_CONNECTION */
87162
87163#ifdef FREECIV_JSON_CONNECTION
87164 field_addr.name = "id";
87165#endif /* FREECIV_JSON_CONNECTION */
87166
87167 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87169 }
87170
87171 log_packet_detailed("packet_server_setting_enum_100: got info about (%d)",
87172 real_packet->id);
87173
87174#ifdef FREECIV_DELTA_PROTOCOL
87177 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_ENUM;
87178
87179 if (nullptr == *hash) {
87181 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
87182 }
87183
87184 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87185 *real_packet = *old;
87186 } else {
87187 /* packet is already initialized empty */
87188 log_packet_detailed(" no old info");
87189 }
87190
87191#ifdef FREECIV_JSON_CONNECTION
87192 field_addr.name = "fields";
87193#endif /* FREECIV_JSON_CONNECTION */
87194 DIO_BV_GET(&din, &field_addr, fields);
87195
87196 real_packet->is_visible = BV_ISSET(fields, 0);
87197
87198 real_packet->is_changeable = BV_ISSET(fields, 1);
87199
87200 real_packet->initial_setting = BV_ISSET(fields, 2);
87201
87202 if (BV_ISSET(fields, 3)) {
87203 log_packet_detailed(" got field 'setdef'");
87204
87205#ifdef FREECIV_JSON_CONNECTION
87206 field_addr.name = "setdef";
87207#endif /* FREECIV_JSON_CONNECTION */
87208
87209 {
87210 int readin;
87211
87212 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87214 }
87215 real_packet->setdef = readin;
87216 }
87217 }
87218
87219 if (BV_ISSET(fields, 4)) {
87220 log_packet_detailed(" got field 'val'");
87221
87222#ifdef FREECIV_JSON_CONNECTION
87223 field_addr.name = "val";
87224#endif /* FREECIV_JSON_CONNECTION */
87225
87226 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
87228 }
87229 }
87230
87231 if (BV_ISSET(fields, 5)) {
87232 log_packet_detailed(" got field 'default_val'");
87233
87234#ifdef FREECIV_JSON_CONNECTION
87235 field_addr.name = "default_val";
87236#endif /* FREECIV_JSON_CONNECTION */
87237
87238 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
87239 RECEIVE_PACKET_FIELD_ERROR(default_val);
87240 }
87241 }
87242
87243 if (BV_ISSET(fields, 6)) {
87244 log_packet_detailed(" got field 'values_num'");
87245
87246#ifdef FREECIV_JSON_CONNECTION
87247 field_addr.name = "values_num";
87248#endif /* FREECIV_JSON_CONNECTION */
87249
87250 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
87251 RECEIVE_PACKET_FIELD_ERROR(values_num);
87252 }
87253 }
87254
87255 if (BV_ISSET(fields, 7)) {
87256 log_packet_detailed(" got field 'support_names'");
87257
87258#ifdef FREECIV_JSON_CONNECTION
87259 field_addr.name = "support_names";
87260#endif /* FREECIV_JSON_CONNECTION */
87261
87262 {
87263 int i;
87264
87265 if (real_packet->values_num > 64) {
87266 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87267 }
87268
87269#ifdef FREECIV_JSON_CONNECTION
87270 /* Enter array. */
87271 field_addr.sub_location = plocation_elem_new(0);
87272#endif /* FREECIV_JSON_CONNECTION */
87273
87274 for (i = 0; i < real_packet->values_num; i++) {
87275#ifdef FREECIV_JSON_CONNECTION
87276 /* Next array element */
87277 field_addr.sub_location->number = i;
87278#endif /* FREECIV_JSON_CONNECTION */
87279
87280 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87281 RECEIVE_PACKET_FIELD_ERROR(support_names);
87282 }
87283 }
87284
87285#ifdef FREECIV_JSON_CONNECTION
87286 /* Exit array. */
87287 FC_FREE(field_addr.sub_location);
87288#endif /* FREECIV_JSON_CONNECTION */
87289 }
87290 }
87291
87292 if (BV_ISSET(fields, 8)) {
87293 log_packet_detailed(" got field 'pretty_names'");
87294
87295#ifdef FREECIV_JSON_CONNECTION
87296 field_addr.name = "pretty_names";
87297#endif /* FREECIV_JSON_CONNECTION */
87298
87299 {
87300 int i;
87301
87302 if (real_packet->values_num > 64) {
87303 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87304 }
87305
87306#ifdef FREECIV_JSON_CONNECTION
87307 /* Enter array. */
87308 field_addr.sub_location = plocation_elem_new(0);
87309#endif /* FREECIV_JSON_CONNECTION */
87310
87311 for (i = 0; i < real_packet->values_num; i++) {
87312#ifdef FREECIV_JSON_CONNECTION
87313 /* Next array element */
87314 field_addr.sub_location->number = i;
87315#endif /* FREECIV_JSON_CONNECTION */
87316
87317 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87318 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87319 }
87320 }
87321
87322#ifdef FREECIV_JSON_CONNECTION
87323 /* Exit array. */
87324 FC_FREE(field_addr.sub_location);
87325#endif /* FREECIV_JSON_CONNECTION */
87326 }
87327 }
87328
87329 if (nullptr == old) {
87330 old = fc_malloc(sizeof(*old));
87332 *old = *real_packet;
87334 } else {
87335 *old = *real_packet;
87336 }
87337
87338#else /* FREECIV_DELTA_PROTOCOL */
87339#ifdef FREECIV_JSON_CONNECTION
87340 field_addr.name = "is_visible";
87341#endif /* FREECIV_JSON_CONNECTION */
87342
87343 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
87344 RECEIVE_PACKET_FIELD_ERROR(is_visible);
87345 }
87346
87347#ifdef FREECIV_JSON_CONNECTION
87348 field_addr.name = "is_changeable";
87349#endif /* FREECIV_JSON_CONNECTION */
87350
87351 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
87352 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
87353 }
87354
87355#ifdef FREECIV_JSON_CONNECTION
87356 field_addr.name = "initial_setting";
87357#endif /* FREECIV_JSON_CONNECTION */
87358
87359 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
87360 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
87361 }
87362
87363#ifdef FREECIV_JSON_CONNECTION
87364 field_addr.name = "setdef";
87365#endif /* FREECIV_JSON_CONNECTION */
87366
87367 {
87368 int readin;
87369
87370 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87372 }
87373 real_packet->setdef = readin;
87374 }
87375
87376#ifdef FREECIV_JSON_CONNECTION
87377 field_addr.name = "val";
87378#endif /* FREECIV_JSON_CONNECTION */
87379
87380 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
87382 }
87383
87384#ifdef FREECIV_JSON_CONNECTION
87385 field_addr.name = "default_val";
87386#endif /* FREECIV_JSON_CONNECTION */
87387
87388 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
87389 RECEIVE_PACKET_FIELD_ERROR(default_val);
87390 }
87391
87392#ifdef FREECIV_JSON_CONNECTION
87393 field_addr.name = "values_num";
87394#endif /* FREECIV_JSON_CONNECTION */
87395
87396 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
87397 RECEIVE_PACKET_FIELD_ERROR(values_num);
87398 }
87399
87400#ifdef FREECIV_JSON_CONNECTION
87401 field_addr.name = "support_names";
87402#endif /* FREECIV_JSON_CONNECTION */
87403
87404 {
87405 int i;
87406
87407 if (real_packet->values_num > 64) {
87408 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87409 }
87410
87411#ifdef FREECIV_JSON_CONNECTION
87412 /* Enter array. */
87413 field_addr.sub_location = plocation_elem_new(0);
87414#endif /* FREECIV_JSON_CONNECTION */
87415
87416 for (i = 0; i < real_packet->values_num; i++) {
87417#ifdef FREECIV_JSON_CONNECTION
87418 /* Next array element */
87419 field_addr.sub_location->number = i;
87420#endif /* FREECIV_JSON_CONNECTION */
87421
87422 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87423 RECEIVE_PACKET_FIELD_ERROR(support_names);
87424 }
87425 }
87426
87427#ifdef FREECIV_JSON_CONNECTION
87428 /* Exit array. */
87429 FC_FREE(field_addr.sub_location);
87430#endif /* FREECIV_JSON_CONNECTION */
87431 }
87432
87433#ifdef FREECIV_JSON_CONNECTION
87434 field_addr.name = "pretty_names";
87435#endif /* FREECIV_JSON_CONNECTION */
87436
87437 {
87438 int i;
87439
87440 if (real_packet->values_num > 64) {
87441 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87442 }
87443
87444#ifdef FREECIV_JSON_CONNECTION
87445 /* Enter array. */
87446 field_addr.sub_location = plocation_elem_new(0);
87447#endif /* FREECIV_JSON_CONNECTION */
87448
87449 for (i = 0; i < real_packet->values_num; i++) {
87450#ifdef FREECIV_JSON_CONNECTION
87451 /* Next array element */
87452 field_addr.sub_location->number = i;
87453#endif /* FREECIV_JSON_CONNECTION */
87454
87455 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87456 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87457 }
87458 }
87459
87460#ifdef FREECIV_JSON_CONNECTION
87461 /* Exit array. */
87462 FC_FREE(field_addr.sub_location);
87463#endif /* FREECIV_JSON_CONNECTION */
87464 }
87465#endif /* FREECIV_DELTA_PROTOCOL */
87466
87468#undef FREE_PACKET_STRUCT
87469}
87470
87472{
87473 const struct packet_server_setting_enum *real_packet = packet;
87474 int e;
87476
87477 log_packet_detailed("packet_server_setting_enum_100: sending info about (%d)",
87478 real_packet->id);
87479
87480#ifdef FREECIV_DELTA_PROTOCOL
87483 bool differ;
87484 int different = 0;
87485 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_ENUM;
87486
87487 if (nullptr == *hash) {
87489 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
87490 }
87491 BV_CLR_ALL(fields);
87492
87493 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87494 old = fc_malloc(sizeof(*old));
87495 /* temporary bitcopy just to insert correctly */
87496 *old = *real_packet;
87499 different = 1; /* Force to send. */
87500 }
87501
87502 differ = (old->is_visible != real_packet->is_visible);
87503 if (differ) {
87504 different++;
87505 }
87506 /* folded into head */
87507 if (real_packet->is_visible) {
87508 BV_SET(fields, 0);
87509 }
87510
87511 differ = (old->is_changeable != real_packet->is_changeable);
87512 if (differ) {
87513 different++;
87514 }
87515 /* folded into head */
87516 if (real_packet->is_changeable) {
87517 BV_SET(fields, 1);
87518 }
87519
87520 differ = (old->initial_setting != real_packet->initial_setting);
87521 if (differ) {
87522 different++;
87523 }
87524 /* folded into head */
87525 if (real_packet->initial_setting) {
87526 BV_SET(fields, 2);
87527 }
87528
87529 differ = (old->setdef != real_packet->setdef);
87530 if (differ) {
87531 different++;
87532 BV_SET(fields, 3);
87533 }
87534
87535 differ = (old->val != real_packet->val);
87536 if (differ) {
87537 different++;
87538 BV_SET(fields, 4);
87539 }
87540
87541 differ = (old->default_val != real_packet->default_val);
87542 if (differ) {
87543 different++;
87544 BV_SET(fields, 5);
87545 }
87546
87547 differ = (old->values_num != real_packet->values_num);
87548 if (differ) {
87549 different++;
87550 BV_SET(fields, 6);
87551 }
87552
87553 differ = (old->values_num != real_packet->values_num);
87554 if (!differ) {
87555 int i;
87556
87557 for (i = 0; i < old->values_num; i++) {
87558 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
87559 if (differ) {
87560 break;
87561 }
87562 }
87563 }
87564 if (differ) {
87565 different++;
87566 BV_SET(fields, 7);
87567 }
87568
87569 differ = (old->values_num != real_packet->values_num);
87570 if (!differ) {
87571 int i;
87572
87573 for (i = 0; i < old->values_num; i++) {
87574 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
87575 if (differ) {
87576 break;
87577 }
87578 }
87579 }
87580 if (differ) {
87581 different++;
87582 BV_SET(fields, 8);
87583 }
87584
87585 if (different == 0) {
87586 log_packet_detailed(" no change -> discard");
87588 }
87589#endif /* FREECIV_DELTA_PROTOCOL */
87590
87591#ifdef FREECIV_JSON_CONNECTION
87592 struct plocation field_addr;
87593 {
87594 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87597 }
87598#endif /* FREECIV_JSON_CONNECTION */
87599
87600#ifdef FREECIV_JSON_CONNECTION
87601 field_addr.name = "id";
87602#endif /* FREECIV_JSON_CONNECTION */
87603 e = 0;
87604
87605 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
87606
87607 if (e) {
87608 log_packet_detailed("'id' field error detected");
87609 }
87610
87611#ifdef FREECIV_DELTA_PROTOCOL
87612#ifdef FREECIV_JSON_CONNECTION
87613 field_addr.name = "fields";
87614#endif /* FREECIV_JSON_CONNECTION */
87615 e = 0;
87616 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87617 if (e) {
87618 log_packet_detailed("fields bitvector error detected");
87619 }
87620
87621 /* field 0 is folded into the header */
87622
87623 /* field 1 is folded into the header */
87624
87625 /* field 2 is folded into the header */
87626
87627 if (BV_ISSET(fields, 3)) {
87628 log_packet_detailed(" field 'setdef' has changed");
87629
87630#ifdef FREECIV_JSON_CONNECTION
87631 field_addr.name = "setdef";
87632#endif /* FREECIV_JSON_CONNECTION */
87633 e = 0;
87634
87635 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87636
87637 if (e) {
87638 log_packet_detailed("'setdef' field error detected");
87639 }
87640 }
87641
87642 if (BV_ISSET(fields, 4)) {
87643 log_packet_detailed(" field 'val' has changed");
87644
87645#ifdef FREECIV_JSON_CONNECTION
87646 field_addr.name = "val";
87647#endif /* FREECIV_JSON_CONNECTION */
87648 e = 0;
87649
87650 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
87651
87652 if (e) {
87653 log_packet_detailed("'val' field error detected");
87654 }
87655 }
87656
87657 if (BV_ISSET(fields, 5)) {
87658 log_packet_detailed(" field 'default_val' has changed");
87659
87660#ifdef FREECIV_JSON_CONNECTION
87661 field_addr.name = "default_val";
87662#endif /* FREECIV_JSON_CONNECTION */
87663 e = 0;
87664
87665 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
87666
87667 if (e) {
87668 log_packet_detailed("'default_val' field error detected");
87669 }
87670 }
87671
87672 if (BV_ISSET(fields, 6)) {
87673 log_packet_detailed(" field 'values_num' has changed");
87674
87675#ifdef FREECIV_JSON_CONNECTION
87676 field_addr.name = "values_num";
87677#endif /* FREECIV_JSON_CONNECTION */
87678 e = 0;
87679
87680 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
87681
87682 if (e) {
87683 log_packet_detailed("'values_num' field error detected");
87684 }
87685 }
87686
87687 if (BV_ISSET(fields, 7)) {
87688 log_packet_detailed(" field 'support_names' has changed");
87689
87690#ifdef FREECIV_JSON_CONNECTION
87691 field_addr.name = "support_names";
87692#endif /* FREECIV_JSON_CONNECTION */
87693 e = 0;
87694
87695 {
87696 int i;
87697
87698#ifdef FREECIV_JSON_CONNECTION
87699 /* Create the array. */
87700 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87701
87702 /* Enter array. */
87703 field_addr.sub_location = plocation_elem_new(0);
87704#endif /* FREECIV_JSON_CONNECTION */
87705
87706 for (i = 0; i < real_packet->values_num; i++) {
87707#ifdef FREECIV_JSON_CONNECTION
87708 /* Next array element. */
87709 field_addr.sub_location->number = i;
87710#endif /* FREECIV_JSON_CONNECTION */
87711
87712 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87713 }
87714
87715#ifdef FREECIV_JSON_CONNECTION
87716 /* Exit array. */
87717 FC_FREE(field_addr.sub_location);
87718#endif /* FREECIV_JSON_CONNECTION */
87719 }
87720
87721 if (e) {
87722 log_packet_detailed("'support_names' field error detected");
87723 }
87724 }
87725
87726 if (BV_ISSET(fields, 8)) {
87727 log_packet_detailed(" field 'pretty_names' has changed");
87728
87729#ifdef FREECIV_JSON_CONNECTION
87730 field_addr.name = "pretty_names";
87731#endif /* FREECIV_JSON_CONNECTION */
87732 e = 0;
87733
87734 {
87735 int i;
87736
87737#ifdef FREECIV_JSON_CONNECTION
87738 /* Create the array. */
87739 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87740
87741 /* Enter array. */
87742 field_addr.sub_location = plocation_elem_new(0);
87743#endif /* FREECIV_JSON_CONNECTION */
87744
87745 for (i = 0; i < real_packet->values_num; i++) {
87746#ifdef FREECIV_JSON_CONNECTION
87747 /* Next array element. */
87748 field_addr.sub_location->number = i;
87749#endif /* FREECIV_JSON_CONNECTION */
87750
87751 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87752 }
87753
87754#ifdef FREECIV_JSON_CONNECTION
87755 /* Exit array. */
87756 FC_FREE(field_addr.sub_location);
87757#endif /* FREECIV_JSON_CONNECTION */
87758 }
87759
87760 if (e) {
87761 log_packet_detailed("'pretty_names' field error detected");
87762 }
87763 }
87764
87765 *old = *real_packet;
87766
87767#else /* FREECIV_DELTA_PROTOCOL */
87768#ifdef FREECIV_JSON_CONNECTION
87769 field_addr.name = "is_visible";
87770#endif /* FREECIV_JSON_CONNECTION */
87771 e = 0;
87772
87773 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
87774
87775 if (e) {
87776 log_packet_detailed("'is_visible' field error detected");
87777 }
87778
87779#ifdef FREECIV_JSON_CONNECTION
87780 field_addr.name = "is_changeable";
87781#endif /* FREECIV_JSON_CONNECTION */
87782 e = 0;
87783
87784 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
87785
87786 if (e) {
87787 log_packet_detailed("'is_changeable' field error detected");
87788 }
87789
87790#ifdef FREECIV_JSON_CONNECTION
87791 field_addr.name = "initial_setting";
87792#endif /* FREECIV_JSON_CONNECTION */
87793 e = 0;
87794
87795 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
87796
87797 if (e) {
87798 log_packet_detailed("'initial_setting' field error detected");
87799 }
87800
87801#ifdef FREECIV_JSON_CONNECTION
87802 field_addr.name = "setdef";
87803#endif /* FREECIV_JSON_CONNECTION */
87804 e = 0;
87805
87806 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87807
87808 if (e) {
87809 log_packet_detailed("'setdef' field error detected");
87810 }
87811
87812#ifdef FREECIV_JSON_CONNECTION
87813 field_addr.name = "val";
87814#endif /* FREECIV_JSON_CONNECTION */
87815 e = 0;
87816
87817 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
87818
87819 if (e) {
87820 log_packet_detailed("'val' field error detected");
87821 }
87822
87823#ifdef FREECIV_JSON_CONNECTION
87824 field_addr.name = "default_val";
87825#endif /* FREECIV_JSON_CONNECTION */
87826 e = 0;
87827
87828 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
87829
87830 if (e) {
87831 log_packet_detailed("'default_val' field error detected");
87832 }
87833
87834#ifdef FREECIV_JSON_CONNECTION
87835 field_addr.name = "values_num";
87836#endif /* FREECIV_JSON_CONNECTION */
87837 e = 0;
87838
87839 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
87840
87841 if (e) {
87842 log_packet_detailed("'values_num' field error detected");
87843 }
87844
87845#ifdef FREECIV_JSON_CONNECTION
87846 field_addr.name = "support_names";
87847#endif /* FREECIV_JSON_CONNECTION */
87848 e = 0;
87849
87850 {
87851 int i;
87852
87853#ifdef FREECIV_JSON_CONNECTION
87854 /* Create the array. */
87855 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87856
87857 /* Enter array. */
87858 field_addr.sub_location = plocation_elem_new(0);
87859#endif /* FREECIV_JSON_CONNECTION */
87860
87861 for (i = 0; i < real_packet->values_num; i++) {
87862#ifdef FREECIV_JSON_CONNECTION
87863 /* Next array element. */
87864 field_addr.sub_location->number = i;
87865#endif /* FREECIV_JSON_CONNECTION */
87866
87867 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87868 }
87869
87870#ifdef FREECIV_JSON_CONNECTION
87871 /* Exit array. */
87872 FC_FREE(field_addr.sub_location);
87873#endif /* FREECIV_JSON_CONNECTION */
87874 }
87875
87876 if (e) {
87877 log_packet_detailed("'support_names' field error detected");
87878 }
87879
87880#ifdef FREECIV_JSON_CONNECTION
87881 field_addr.name = "pretty_names";
87882#endif /* FREECIV_JSON_CONNECTION */
87883 e = 0;
87884
87885 {
87886 int i;
87887
87888#ifdef FREECIV_JSON_CONNECTION
87889 /* Create the array. */
87890 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87891
87892 /* Enter array. */
87893 field_addr.sub_location = plocation_elem_new(0);
87894#endif /* FREECIV_JSON_CONNECTION */
87895
87896 for (i = 0; i < real_packet->values_num; i++) {
87897#ifdef FREECIV_JSON_CONNECTION
87898 /* Next array element. */
87899 field_addr.sub_location->number = i;
87900#endif /* FREECIV_JSON_CONNECTION */
87901
87902 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87903 }
87904
87905#ifdef FREECIV_JSON_CONNECTION
87906 /* Exit array. */
87907 FC_FREE(field_addr.sub_location);
87908#endif /* FREECIV_JSON_CONNECTION */
87909 }
87910
87911 if (e) {
87912 log_packet_detailed("'pretty_names' field error detected");
87913 }
87914#endif /* FREECIV_DELTA_PROTOCOL */
87915
87917}
87918
87920{
87921 if (!pc->used) {
87922 log_error("WARNING: trying to send data to the closed connection %s",
87924 return -1;
87925 }
87926 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet != nullptr, -1,
87927 "Handler for PACKET_SERVER_SETTING_ENUM not installed");
87928 return pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet(pc, packet);
87929}
87930
87932{
87933 memset(packet, 0, sizeof(*packet));
87934}
87935
87936#define free_packet_server_setting_bitwise(_packet) (void) 0
87937#define destroy_packet_server_setting_bitwise free
87938
87939#ifdef FREECIV_DELTA_PROTOCOL
87941{
87942 const struct packet_server_setting_bitwise *key = (const struct packet_server_setting_bitwise *) vkey;
87943 genhash_val_t result = 0;
87944
87945 result += key->id;
87946
87947 result &= 0xFFFFFFFF;
87948 return result;
87949}
87950
87951static bool cmp_packet_server_setting_bitwise_100(const void *vkey1, const void *vkey2)
87952{
87955 bool differ;
87956
87957 differ = (old->id != real_packet->id);
87958
87959 return !differ;
87960}
87962#endif /* FREECIV_DELTA_PROTOCOL */
87963
87965{
87966#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bitwise(_packet)
87968
87969#ifdef FREECIV_JSON_CONNECTION
87970 struct plocation field_addr;
87971 {
87972 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87975 }
87976#endif /* FREECIV_JSON_CONNECTION */
87977
87978#ifdef FREECIV_JSON_CONNECTION
87979 field_addr.name = "id";
87980#endif /* FREECIV_JSON_CONNECTION */
87981
87982 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87984 }
87985
87986 log_packet_detailed("packet_server_setting_bitwise_100: got info about (%d)",
87987 real_packet->id);
87988
87989#ifdef FREECIV_DELTA_PROTOCOL
87992 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BITWISE;
87993
87994 if (nullptr == *hash) {
87996 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
87997 }
87998
87999 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88000 *real_packet = *old;
88001 } else {
88002 /* packet is already initialized empty */
88003 log_packet_detailed(" no old info");
88004 }
88005
88006#ifdef FREECIV_JSON_CONNECTION
88007 field_addr.name = "fields";
88008#endif /* FREECIV_JSON_CONNECTION */
88009 DIO_BV_GET(&din, &field_addr, fields);
88010
88011 real_packet->is_visible = BV_ISSET(fields, 0);
88012
88013 real_packet->is_changeable = BV_ISSET(fields, 1);
88014
88015 real_packet->initial_setting = BV_ISSET(fields, 2);
88016
88017 if (BV_ISSET(fields, 3)) {
88018 log_packet_detailed(" got field 'setdef'");
88019
88020#ifdef FREECIV_JSON_CONNECTION
88021 field_addr.name = "setdef";
88022#endif /* FREECIV_JSON_CONNECTION */
88023
88024 {
88025 int readin;
88026
88027 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88029 }
88030 real_packet->setdef = readin;
88031 }
88032 }
88033
88034 if (BV_ISSET(fields, 4)) {
88035 log_packet_detailed(" got field 'val'");
88036
88037#ifdef FREECIV_JSON_CONNECTION
88038 field_addr.name = "val";
88039#endif /* FREECIV_JSON_CONNECTION */
88040
88041 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
88043 }
88044 }
88045
88046 if (BV_ISSET(fields, 5)) {
88047 log_packet_detailed(" got field 'default_val'");
88048
88049#ifdef FREECIV_JSON_CONNECTION
88050 field_addr.name = "default_val";
88051#endif /* FREECIV_JSON_CONNECTION */
88052
88053 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
88054 RECEIVE_PACKET_FIELD_ERROR(default_val);
88055 }
88056 }
88057
88058 if (BV_ISSET(fields, 6)) {
88059 log_packet_detailed(" got field 'bits_num'");
88060
88061#ifdef FREECIV_JSON_CONNECTION
88062 field_addr.name = "bits_num";
88063#endif /* FREECIV_JSON_CONNECTION */
88064
88065 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
88067 }
88068 }
88069
88070 if (BV_ISSET(fields, 7)) {
88071 log_packet_detailed(" got field 'support_names'");
88072
88073#ifdef FREECIV_JSON_CONNECTION
88074 field_addr.name = "support_names";
88075#endif /* FREECIV_JSON_CONNECTION */
88076
88077 {
88078 int i;
88079
88080 if (real_packet->bits_num > 64) {
88081 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
88082 }
88083
88084#ifdef FREECIV_JSON_CONNECTION
88085 /* Enter array. */
88086 field_addr.sub_location = plocation_elem_new(0);
88087#endif /* FREECIV_JSON_CONNECTION */
88088
88089 for (i = 0; i < real_packet->bits_num; i++) {
88090#ifdef FREECIV_JSON_CONNECTION
88091 /* Next array element */
88092 field_addr.sub_location->number = i;
88093#endif /* FREECIV_JSON_CONNECTION */
88094
88095 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
88096 RECEIVE_PACKET_FIELD_ERROR(support_names);
88097 }
88098 }
88099
88100#ifdef FREECIV_JSON_CONNECTION
88101 /* Exit array. */
88102 FC_FREE(field_addr.sub_location);
88103#endif /* FREECIV_JSON_CONNECTION */
88104 }
88105 }
88106
88107 if (BV_ISSET(fields, 8)) {
88108 log_packet_detailed(" got field 'pretty_names'");
88109
88110#ifdef FREECIV_JSON_CONNECTION
88111 field_addr.name = "pretty_names";
88112#endif /* FREECIV_JSON_CONNECTION */
88113
88114 {
88115 int i;
88116
88117 if (real_packet->bits_num > 64) {
88118 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
88119 }
88120
88121#ifdef FREECIV_JSON_CONNECTION
88122 /* Enter array. */
88123 field_addr.sub_location = plocation_elem_new(0);
88124#endif /* FREECIV_JSON_CONNECTION */
88125
88126 for (i = 0; i < real_packet->bits_num; i++) {
88127#ifdef FREECIV_JSON_CONNECTION
88128 /* Next array element */
88129 field_addr.sub_location->number = i;
88130#endif /* FREECIV_JSON_CONNECTION */
88131
88132 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
88133 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
88134 }
88135 }
88136
88137#ifdef FREECIV_JSON_CONNECTION
88138 /* Exit array. */
88139 FC_FREE(field_addr.sub_location);
88140#endif /* FREECIV_JSON_CONNECTION */
88141 }
88142 }
88143
88144 if (nullptr == old) {
88145 old = fc_malloc(sizeof(*old));
88147 *old = *real_packet;
88149 } else {
88150 *old = *real_packet;
88151 }
88152
88153#else /* FREECIV_DELTA_PROTOCOL */
88154#ifdef FREECIV_JSON_CONNECTION
88155 field_addr.name = "is_visible";
88156#endif /* FREECIV_JSON_CONNECTION */
88157
88158 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
88159 RECEIVE_PACKET_FIELD_ERROR(is_visible);
88160 }
88161
88162#ifdef FREECIV_JSON_CONNECTION
88163 field_addr.name = "is_changeable";
88164#endif /* FREECIV_JSON_CONNECTION */
88165
88166 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
88167 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
88168 }
88169
88170#ifdef FREECIV_JSON_CONNECTION
88171 field_addr.name = "initial_setting";
88172#endif /* FREECIV_JSON_CONNECTION */
88173
88174 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
88175 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
88176 }
88177
88178#ifdef FREECIV_JSON_CONNECTION
88179 field_addr.name = "setdef";
88180#endif /* FREECIV_JSON_CONNECTION */
88181
88182 {
88183 int readin;
88184
88185 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88187 }
88188 real_packet->setdef = readin;
88189 }
88190
88191#ifdef FREECIV_JSON_CONNECTION
88192 field_addr.name = "val";
88193#endif /* FREECIV_JSON_CONNECTION */
88194
88195 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
88197 }
88198
88199#ifdef FREECIV_JSON_CONNECTION
88200 field_addr.name = "default_val";
88201#endif /* FREECIV_JSON_CONNECTION */
88202
88203 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
88204 RECEIVE_PACKET_FIELD_ERROR(default_val);
88205 }
88206
88207#ifdef FREECIV_JSON_CONNECTION
88208 field_addr.name = "bits_num";
88209#endif /* FREECIV_JSON_CONNECTION */
88210
88211 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
88213 }
88214
88215#ifdef FREECIV_JSON_CONNECTION
88216 field_addr.name = "support_names";
88217#endif /* FREECIV_JSON_CONNECTION */
88218
88219 {
88220 int i;
88221
88222 if (real_packet->bits_num > 64) {
88223 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
88224 }
88225
88226#ifdef FREECIV_JSON_CONNECTION
88227 /* Enter array. */
88228 field_addr.sub_location = plocation_elem_new(0);
88229#endif /* FREECIV_JSON_CONNECTION */
88230
88231 for (i = 0; i < real_packet->bits_num; i++) {
88232#ifdef FREECIV_JSON_CONNECTION
88233 /* Next array element */
88234 field_addr.sub_location->number = i;
88235#endif /* FREECIV_JSON_CONNECTION */
88236
88237 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
88238 RECEIVE_PACKET_FIELD_ERROR(support_names);
88239 }
88240 }
88241
88242#ifdef FREECIV_JSON_CONNECTION
88243 /* Exit array. */
88244 FC_FREE(field_addr.sub_location);
88245#endif /* FREECIV_JSON_CONNECTION */
88246 }
88247
88248#ifdef FREECIV_JSON_CONNECTION
88249 field_addr.name = "pretty_names";
88250#endif /* FREECIV_JSON_CONNECTION */
88251
88252 {
88253 int i;
88254
88255 if (real_packet->bits_num > 64) {
88256 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
88257 }
88258
88259#ifdef FREECIV_JSON_CONNECTION
88260 /* Enter array. */
88261 field_addr.sub_location = plocation_elem_new(0);
88262#endif /* FREECIV_JSON_CONNECTION */
88263
88264 for (i = 0; i < real_packet->bits_num; i++) {
88265#ifdef FREECIV_JSON_CONNECTION
88266 /* Next array element */
88267 field_addr.sub_location->number = i;
88268#endif /* FREECIV_JSON_CONNECTION */
88269
88270 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
88271 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
88272 }
88273 }
88274
88275#ifdef FREECIV_JSON_CONNECTION
88276 /* Exit array. */
88277 FC_FREE(field_addr.sub_location);
88278#endif /* FREECIV_JSON_CONNECTION */
88279 }
88280#endif /* FREECIV_DELTA_PROTOCOL */
88281
88283#undef FREE_PACKET_STRUCT
88284}
88285
88287{
88288 const struct packet_server_setting_bitwise *real_packet = packet;
88289 int e;
88291
88292 log_packet_detailed("packet_server_setting_bitwise_100: sending info about (%d)",
88293 real_packet->id);
88294
88295#ifdef FREECIV_DELTA_PROTOCOL
88298 bool differ;
88299 int different = 0;
88300 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BITWISE;
88301
88302 if (nullptr == *hash) {
88304 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
88305 }
88306 BV_CLR_ALL(fields);
88307
88308 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88309 old = fc_malloc(sizeof(*old));
88310 /* temporary bitcopy just to insert correctly */
88311 *old = *real_packet;
88314 different = 1; /* Force to send. */
88315 }
88316
88317 differ = (old->is_visible != real_packet->is_visible);
88318 if (differ) {
88319 different++;
88320 }
88321 /* folded into head */
88322 if (real_packet->is_visible) {
88323 BV_SET(fields, 0);
88324 }
88325
88326 differ = (old->is_changeable != real_packet->is_changeable);
88327 if (differ) {
88328 different++;
88329 }
88330 /* folded into head */
88331 if (real_packet->is_changeable) {
88332 BV_SET(fields, 1);
88333 }
88334
88335 differ = (old->initial_setting != real_packet->initial_setting);
88336 if (differ) {
88337 different++;
88338 }
88339 /* folded into head */
88340 if (real_packet->initial_setting) {
88341 BV_SET(fields, 2);
88342 }
88343
88344 differ = (old->setdef != real_packet->setdef);
88345 if (differ) {
88346 different++;
88347 BV_SET(fields, 3);
88348 }
88349
88350 differ = (old->val != real_packet->val);
88351 if (differ) {
88352 different++;
88353 BV_SET(fields, 4);
88354 }
88355
88356 differ = (old->default_val != real_packet->default_val);
88357 if (differ) {
88358 different++;
88359 BV_SET(fields, 5);
88360 }
88361
88362 differ = (old->bits_num != real_packet->bits_num);
88363 if (differ) {
88364 different++;
88365 BV_SET(fields, 6);
88366 }
88367
88368 differ = (old->bits_num != real_packet->bits_num);
88369 if (!differ) {
88370 int i;
88371
88372 for (i = 0; i < old->bits_num; i++) {
88373 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
88374 if (differ) {
88375 break;
88376 }
88377 }
88378 }
88379 if (differ) {
88380 different++;
88381 BV_SET(fields, 7);
88382 }
88383
88384 differ = (old->bits_num != real_packet->bits_num);
88385 if (!differ) {
88386 int i;
88387
88388 for (i = 0; i < old->bits_num; i++) {
88389 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
88390 if (differ) {
88391 break;
88392 }
88393 }
88394 }
88395 if (differ) {
88396 different++;
88397 BV_SET(fields, 8);
88398 }
88399
88400 if (different == 0) {
88401 log_packet_detailed(" no change -> discard");
88403 }
88404#endif /* FREECIV_DELTA_PROTOCOL */
88405
88406#ifdef FREECIV_JSON_CONNECTION
88407 struct plocation field_addr;
88408 {
88409 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88412 }
88413#endif /* FREECIV_JSON_CONNECTION */
88414
88415#ifdef FREECIV_JSON_CONNECTION
88416 field_addr.name = "id";
88417#endif /* FREECIV_JSON_CONNECTION */
88418 e = 0;
88419
88420 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
88421
88422 if (e) {
88423 log_packet_detailed("'id' field error detected");
88424 }
88425
88426#ifdef FREECIV_DELTA_PROTOCOL
88427#ifdef FREECIV_JSON_CONNECTION
88428 field_addr.name = "fields";
88429#endif /* FREECIV_JSON_CONNECTION */
88430 e = 0;
88431 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88432 if (e) {
88433 log_packet_detailed("fields bitvector error detected");
88434 }
88435
88436 /* field 0 is folded into the header */
88437
88438 /* field 1 is folded into the header */
88439
88440 /* field 2 is folded into the header */
88441
88442 if (BV_ISSET(fields, 3)) {
88443 log_packet_detailed(" field 'setdef' has changed");
88444
88445#ifdef FREECIV_JSON_CONNECTION
88446 field_addr.name = "setdef";
88447#endif /* FREECIV_JSON_CONNECTION */
88448 e = 0;
88449
88450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
88451
88452 if (e) {
88453 log_packet_detailed("'setdef' field error detected");
88454 }
88455 }
88456
88457 if (BV_ISSET(fields, 4)) {
88458 log_packet_detailed(" field 'val' has changed");
88459
88460#ifdef FREECIV_JSON_CONNECTION
88461 field_addr.name = "val";
88462#endif /* FREECIV_JSON_CONNECTION */
88463 e = 0;
88464
88465 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
88466
88467 if (e) {
88468 log_packet_detailed("'val' field error detected");
88469 }
88470 }
88471
88472 if (BV_ISSET(fields, 5)) {
88473 log_packet_detailed(" field 'default_val' has changed");
88474
88475#ifdef FREECIV_JSON_CONNECTION
88476 field_addr.name = "default_val";
88477#endif /* FREECIV_JSON_CONNECTION */
88478 e = 0;
88479
88480 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
88481
88482 if (e) {
88483 log_packet_detailed("'default_val' field error detected");
88484 }
88485 }
88486
88487 if (BV_ISSET(fields, 6)) {
88488 log_packet_detailed(" field 'bits_num' has changed");
88489
88490#ifdef FREECIV_JSON_CONNECTION
88491 field_addr.name = "bits_num";
88492#endif /* FREECIV_JSON_CONNECTION */
88493 e = 0;
88494
88495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
88496
88497 if (e) {
88498 log_packet_detailed("'bits_num' field error detected");
88499 }
88500 }
88501
88502 if (BV_ISSET(fields, 7)) {
88503 log_packet_detailed(" field 'support_names' has changed");
88504
88505#ifdef FREECIV_JSON_CONNECTION
88506 field_addr.name = "support_names";
88507#endif /* FREECIV_JSON_CONNECTION */
88508 e = 0;
88509
88510 {
88511 int i;
88512
88513#ifdef FREECIV_JSON_CONNECTION
88514 /* Create the array. */
88515 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
88516
88517 /* Enter array. */
88518 field_addr.sub_location = plocation_elem_new(0);
88519#endif /* FREECIV_JSON_CONNECTION */
88520
88521 for (i = 0; i < real_packet->bits_num; i++) {
88522#ifdef FREECIV_JSON_CONNECTION
88523 /* Next array element. */
88524 field_addr.sub_location->number = i;
88525#endif /* FREECIV_JSON_CONNECTION */
88526
88527 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
88528 }
88529
88530#ifdef FREECIV_JSON_CONNECTION
88531 /* Exit array. */
88532 FC_FREE(field_addr.sub_location);
88533#endif /* FREECIV_JSON_CONNECTION */
88534 }
88535
88536 if (e) {
88537 log_packet_detailed("'support_names' field error detected");
88538 }
88539 }
88540
88541 if (BV_ISSET(fields, 8)) {
88542 log_packet_detailed(" field 'pretty_names' has changed");
88543
88544#ifdef FREECIV_JSON_CONNECTION
88545 field_addr.name = "pretty_names";
88546#endif /* FREECIV_JSON_CONNECTION */
88547 e = 0;
88548
88549 {
88550 int i;
88551
88552#ifdef FREECIV_JSON_CONNECTION
88553 /* Create the array. */
88554 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
88555
88556 /* Enter array. */
88557 field_addr.sub_location = plocation_elem_new(0);
88558#endif /* FREECIV_JSON_CONNECTION */
88559
88560 for (i = 0; i < real_packet->bits_num; i++) {
88561#ifdef FREECIV_JSON_CONNECTION
88562 /* Next array element. */
88563 field_addr.sub_location->number = i;
88564#endif /* FREECIV_JSON_CONNECTION */
88565
88566 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
88567 }
88568
88569#ifdef FREECIV_JSON_CONNECTION
88570 /* Exit array. */
88571 FC_FREE(field_addr.sub_location);
88572#endif /* FREECIV_JSON_CONNECTION */
88573 }
88574
88575 if (e) {
88576 log_packet_detailed("'pretty_names' field error detected");
88577 }
88578 }
88579
88580 *old = *real_packet;
88581
88582#else /* FREECIV_DELTA_PROTOCOL */
88583#ifdef FREECIV_JSON_CONNECTION
88584 field_addr.name = "is_visible";
88585#endif /* FREECIV_JSON_CONNECTION */
88586 e = 0;
88587
88588 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
88589
88590 if (e) {
88591 log_packet_detailed("'is_visible' field error detected");
88592 }
88593
88594#ifdef FREECIV_JSON_CONNECTION
88595 field_addr.name = "is_changeable";
88596#endif /* FREECIV_JSON_CONNECTION */
88597 e = 0;
88598
88599 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
88600
88601 if (e) {
88602 log_packet_detailed("'is_changeable' field error detected");
88603 }
88604
88605#ifdef FREECIV_JSON_CONNECTION
88606 field_addr.name = "initial_setting";
88607#endif /* FREECIV_JSON_CONNECTION */
88608 e = 0;
88609
88610 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
88611
88612 if (e) {
88613 log_packet_detailed("'initial_setting' field error detected");
88614 }
88615
88616#ifdef FREECIV_JSON_CONNECTION
88617 field_addr.name = "setdef";
88618#endif /* FREECIV_JSON_CONNECTION */
88619 e = 0;
88620
88621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
88622
88623 if (e) {
88624 log_packet_detailed("'setdef' field error detected");
88625 }
88626
88627#ifdef FREECIV_JSON_CONNECTION
88628 field_addr.name = "val";
88629#endif /* FREECIV_JSON_CONNECTION */
88630 e = 0;
88631
88632 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
88633
88634 if (e) {
88635 log_packet_detailed("'val' field error detected");
88636 }
88637
88638#ifdef FREECIV_JSON_CONNECTION
88639 field_addr.name = "default_val";
88640#endif /* FREECIV_JSON_CONNECTION */
88641 e = 0;
88642
88643 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
88644
88645 if (e) {
88646 log_packet_detailed("'default_val' field error detected");
88647 }
88648
88649#ifdef FREECIV_JSON_CONNECTION
88650 field_addr.name = "bits_num";
88651#endif /* FREECIV_JSON_CONNECTION */
88652 e = 0;
88653
88654 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
88655
88656 if (e) {
88657 log_packet_detailed("'bits_num' field error detected");
88658 }
88659
88660#ifdef FREECIV_JSON_CONNECTION
88661 field_addr.name = "support_names";
88662#endif /* FREECIV_JSON_CONNECTION */
88663 e = 0;
88664
88665 {
88666 int i;
88667
88668#ifdef FREECIV_JSON_CONNECTION
88669 /* Create the array. */
88670 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
88671
88672 /* Enter array. */
88673 field_addr.sub_location = plocation_elem_new(0);
88674#endif /* FREECIV_JSON_CONNECTION */
88675
88676 for (i = 0; i < real_packet->bits_num; i++) {
88677#ifdef FREECIV_JSON_CONNECTION
88678 /* Next array element. */
88679 field_addr.sub_location->number = i;
88680#endif /* FREECIV_JSON_CONNECTION */
88681
88682 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
88683 }
88684
88685#ifdef FREECIV_JSON_CONNECTION
88686 /* Exit array. */
88687 FC_FREE(field_addr.sub_location);
88688#endif /* FREECIV_JSON_CONNECTION */
88689 }
88690
88691 if (e) {
88692 log_packet_detailed("'support_names' field error detected");
88693 }
88694
88695#ifdef FREECIV_JSON_CONNECTION
88696 field_addr.name = "pretty_names";
88697#endif /* FREECIV_JSON_CONNECTION */
88698 e = 0;
88699
88700 {
88701 int i;
88702
88703#ifdef FREECIV_JSON_CONNECTION
88704 /* Create the array. */
88705 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
88706
88707 /* Enter array. */
88708 field_addr.sub_location = plocation_elem_new(0);
88709#endif /* FREECIV_JSON_CONNECTION */
88710
88711 for (i = 0; i < real_packet->bits_num; i++) {
88712#ifdef FREECIV_JSON_CONNECTION
88713 /* Next array element. */
88714 field_addr.sub_location->number = i;
88715#endif /* FREECIV_JSON_CONNECTION */
88716
88717 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
88718 }
88719
88720#ifdef FREECIV_JSON_CONNECTION
88721 /* Exit array. */
88722 FC_FREE(field_addr.sub_location);
88723#endif /* FREECIV_JSON_CONNECTION */
88724 }
88725
88726 if (e) {
88727 log_packet_detailed("'pretty_names' field error detected");
88728 }
88729#endif /* FREECIV_DELTA_PROTOCOL */
88730
88732}
88733
88735{
88736 if (!pc->used) {
88737 log_error("WARNING: trying to send data to the closed connection %s",
88739 return -1;
88740 }
88741 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet != nullptr, -1,
88742 "Handler for PACKET_SERVER_SETTING_BITWISE not installed");
88743 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet(pc, packet);
88744}
88745
88746static inline void init_packet_set_topology(struct packet_set_topology *packet)
88747{
88748 memset(packet, 0, sizeof(*packet));
88749}
88750
88751#define free_packet_set_topology(_packet) (void) 0
88752#define destroy_packet_set_topology free
88753
88754#ifdef FREECIV_DELTA_PROTOCOL
88755#define hash_packet_set_topology_100 hash_const
88756#define cmp_packet_set_topology_100 cmp_const
88758#endif /* FREECIV_DELTA_PROTOCOL */
88759
88761{
88762#define FREE_PACKET_STRUCT(_packet) free_packet_set_topology(_packet)
88764
88765#ifdef FREECIV_JSON_CONNECTION
88766 struct plocation field_addr;
88767 {
88768 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88771 }
88772#endif /* FREECIV_JSON_CONNECTION */
88773
88774 log_packet_detailed("packet_set_topology_100: got info about ()");
88775
88776#ifdef FREECIV_DELTA_PROTOCOL
88778 struct packet_set_topology *old;
88779 struct genhash **hash = pc->phs.received + PACKET_SET_TOPOLOGY;
88780
88781 if (nullptr == *hash) {
88783 nullptr, nullptr, nullptr, destroy_packet_set_topology);
88784 }
88785
88786 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88787 *real_packet = *old;
88788 } else {
88789 /* packet is already initialized empty */
88790 log_packet_detailed(" no old info");
88791 }
88792
88793#ifdef FREECIV_JSON_CONNECTION
88794 field_addr.name = "fields";
88795#endif /* FREECIV_JSON_CONNECTION */
88796 DIO_BV_GET(&din, &field_addr, fields);
88797
88798 if (BV_ISSET(fields, 0)) {
88799 log_packet_detailed(" got field 'topology_id'");
88800
88801#ifdef FREECIV_JSON_CONNECTION
88802 field_addr.name = "topology_id";
88803#endif /* FREECIV_JSON_CONNECTION */
88804
88805 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
88806 RECEIVE_PACKET_FIELD_ERROR(topology_id);
88807 }
88808 }
88809
88810 if (BV_ISSET(fields, 1)) {
88811 log_packet_detailed(" got field 'wrap_id'");
88812
88813#ifdef FREECIV_JSON_CONNECTION
88814 field_addr.name = "wrap_id";
88815#endif /* FREECIV_JSON_CONNECTION */
88816
88817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
88819 }
88820 }
88821
88822 if (nullptr == old) {
88823 old = fc_malloc(sizeof(*old));
88825 *old = *real_packet;
88827 } else {
88828 *old = *real_packet;
88829 }
88830
88831#else /* FREECIV_DELTA_PROTOCOL */
88832#ifdef FREECIV_JSON_CONNECTION
88833 field_addr.name = "topology_id";
88834#endif /* FREECIV_JSON_CONNECTION */
88835
88836 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
88837 RECEIVE_PACKET_FIELD_ERROR(topology_id);
88838 }
88839
88840#ifdef FREECIV_JSON_CONNECTION
88841 field_addr.name = "wrap_id";
88842#endif /* FREECIV_JSON_CONNECTION */
88843
88844 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
88846 }
88847#endif /* FREECIV_DELTA_PROTOCOL */
88848
88850#undef FREE_PACKET_STRUCT
88851}
88852
88853static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
88854{
88855 const struct packet_set_topology *real_packet = packet;
88856 int e;
88858
88859 log_packet_detailed("packet_set_topology_100: sending info about ()");
88860
88861#ifdef FREECIV_DELTA_PROTOCOL
88863 struct packet_set_topology *old;
88864 bool differ;
88865 struct genhash **hash = pc->phs.sent + PACKET_SET_TOPOLOGY;
88866
88867 if (nullptr == *hash) {
88869 nullptr, nullptr, nullptr, destroy_packet_set_topology);
88870 }
88871 BV_CLR_ALL(fields);
88872
88873 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88874 old = fc_malloc(sizeof(*old));
88875 /* temporary bitcopy just to insert correctly */
88876 *old = *real_packet;
88879 }
88880
88881 differ = (old->topology_id != real_packet->topology_id);
88882 if (differ) {
88883 BV_SET(fields, 0);
88884 }
88885
88886 differ = (old->wrap_id != real_packet->wrap_id);
88887 if (differ) {
88888 BV_SET(fields, 1);
88889 }
88890#endif /* FREECIV_DELTA_PROTOCOL */
88891
88892#ifdef FREECIV_JSON_CONNECTION
88893 struct plocation field_addr;
88894 {
88895 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88898 }
88899#endif /* FREECIV_JSON_CONNECTION */
88900
88901#ifdef FREECIV_DELTA_PROTOCOL
88902#ifdef FREECIV_JSON_CONNECTION
88903 field_addr.name = "fields";
88904#endif /* FREECIV_JSON_CONNECTION */
88905 e = 0;
88906 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88907 if (e) {
88908 log_packet_detailed("fields bitvector error detected");
88909 }
88910
88911 if (BV_ISSET(fields, 0)) {
88912 log_packet_detailed(" field 'topology_id' has changed");
88913
88914#ifdef FREECIV_JSON_CONNECTION
88915 field_addr.name = "topology_id";
88916#endif /* FREECIV_JSON_CONNECTION */
88917 e = 0;
88918
88919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
88920
88921 if (e) {
88922 log_packet_detailed("'topology_id' field error detected");
88923 }
88924 }
88925
88926 if (BV_ISSET(fields, 1)) {
88927 log_packet_detailed(" field 'wrap_id' has changed");
88928
88929#ifdef FREECIV_JSON_CONNECTION
88930 field_addr.name = "wrap_id";
88931#endif /* FREECIV_JSON_CONNECTION */
88932 e = 0;
88933
88934 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88935
88936 if (e) {
88937 log_packet_detailed("'wrap_id' field error detected");
88938 }
88939 }
88940
88941 *old = *real_packet;
88942
88943#else /* FREECIV_DELTA_PROTOCOL */
88944#ifdef FREECIV_JSON_CONNECTION
88945 field_addr.name = "topology_id";
88946#endif /* FREECIV_JSON_CONNECTION */
88947 e = 0;
88948
88949 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
88950
88951 if (e) {
88952 log_packet_detailed("'topology_id' field error detected");
88953 }
88954
88955#ifdef FREECIV_JSON_CONNECTION
88956 field_addr.name = "wrap_id";
88957#endif /* FREECIV_JSON_CONNECTION */
88958 e = 0;
88959
88960 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88961
88962 if (e) {
88963 log_packet_detailed("'wrap_id' field error detected");
88964 }
88965#endif /* FREECIV_DELTA_PROTOCOL */
88966
88968}
88969
88971{
88972 if (!pc->used) {
88973 log_error("WARNING: trying to send data to the closed connection %s",
88975 return -1;
88976 }
88977 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet != nullptr, -1,
88978 "Handler for PACKET_SET_TOPOLOGY not installed");
88979 return pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet(pc, packet);
88980}
88981
88982static inline void init_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88983{
88984 memset(packet, 0, sizeof(*packet));
88985
88986 requirement_vector_init(&packet->reqs);
88987}
88988
88989static inline void free_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88990{
88991 requirement_vector_free(&packet->reqs);
88992}
88993
88994static inline void destroy_packet_ruleset_effect(void *packet)
88995{
88997 free(packet);
88998}
88999
89000#ifdef FREECIV_DELTA_PROTOCOL
89001#define hash_packet_ruleset_effect_100 hash_const
89002#define cmp_packet_ruleset_effect_100 cmp_const
89004#endif /* FREECIV_DELTA_PROTOCOL */
89005
89007{
89008#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_effect(_packet)
89010
89011#ifdef FREECIV_JSON_CONNECTION
89012 struct plocation field_addr;
89013 {
89014 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89017 }
89018#endif /* FREECIV_JSON_CONNECTION */
89019
89020 log_packet_detailed("packet_ruleset_effect_100: got info about ()");
89021
89022#ifdef FREECIV_DELTA_PROTOCOL
89024 struct packet_ruleset_effect *old;
89025 struct genhash **hash = pc->phs.received + PACKET_RULESET_EFFECT;
89026
89027 if (nullptr == *hash) {
89029 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
89030 }
89031
89032 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89033 real_packet->effect_type = old->effect_type;
89034 real_packet->effect_value = old->effect_value;
89035 real_packet->has_multiplier = old->has_multiplier;
89036 real_packet->multiplier = old->multiplier;
89037 requirement_vector_copy(&real_packet->reqs, &old->reqs);
89038 } else {
89039 /* packet is already initialized empty */
89040 log_packet_detailed(" no old info");
89041 }
89042
89043#ifdef FREECIV_JSON_CONNECTION
89044 field_addr.name = "fields";
89045#endif /* FREECIV_JSON_CONNECTION */
89046 DIO_BV_GET(&din, &field_addr, fields);
89047
89048 if (BV_ISSET(fields, 0)) {
89049 log_packet_detailed(" got field 'effect_type'");
89050
89051#ifdef FREECIV_JSON_CONNECTION
89052 field_addr.name = "effect_type";
89053#endif /* FREECIV_JSON_CONNECTION */
89054
89055 {
89056 int readin;
89057
89058 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
89059 RECEIVE_PACKET_FIELD_ERROR(effect_type);
89060 }
89061 real_packet->effect_type = readin;
89062 }
89063 }
89064
89065 if (BV_ISSET(fields, 1)) {
89066 log_packet_detailed(" got field 'effect_value'");
89067
89068#ifdef FREECIV_JSON_CONNECTION
89069 field_addr.name = "effect_value";
89070#endif /* FREECIV_JSON_CONNECTION */
89071
89072 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
89073 RECEIVE_PACKET_FIELD_ERROR(effect_value);
89074 }
89075 }
89076
89077 real_packet->has_multiplier = BV_ISSET(fields, 2);
89078
89079 if (BV_ISSET(fields, 3)) {
89080 log_packet_detailed(" got field 'multiplier'");
89081
89082#ifdef FREECIV_JSON_CONNECTION
89083 field_addr.name = "multiplier";
89084#endif /* FREECIV_JSON_CONNECTION */
89085
89086 {
89087 int readin;
89088
89089 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
89091 }
89092 real_packet->multiplier = readin;
89093 }
89094 }
89095
89096 if (BV_ISSET(fields, 4)) {
89097 log_packet_detailed(" got field 'reqs'");
89098
89099#ifdef FREECIV_JSON_CONNECTION
89100 field_addr.name = "reqs";
89101#endif /* FREECIV_JSON_CONNECTION */
89102
89103 {
89104 int i;
89105
89106 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
89108 }
89110
89111#ifdef FREECIV_JSON_CONNECTION
89112 /* Enter array. */
89113 field_addr.sub_location = plocation_elem_new(0);
89114#endif /* FREECIV_JSON_CONNECTION */
89115
89116 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
89117#ifdef FREECIV_JSON_CONNECTION
89118 /* Next array element */
89119 field_addr.sub_location->number = i;
89120#endif /* FREECIV_JSON_CONNECTION */
89121
89122 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
89124 }
89125 }
89126
89127#ifdef FREECIV_JSON_CONNECTION
89128 /* Exit array. */
89129 FC_FREE(field_addr.sub_location);
89130#endif /* FREECIV_JSON_CONNECTION */
89131 }
89132 }
89133
89134 if (nullptr == old) {
89135 old = fc_malloc(sizeof(*old));
89137 old->effect_type = real_packet->effect_type;
89138 old->effect_value = real_packet->effect_value;
89139 old->has_multiplier = real_packet->has_multiplier;
89140 old->multiplier = real_packet->multiplier;
89141 requirement_vector_copy(&old->reqs, &real_packet->reqs);
89143 } else {
89144 old->effect_type = real_packet->effect_type;
89145 old->effect_value = real_packet->effect_value;
89146 old->has_multiplier = real_packet->has_multiplier;
89147 old->multiplier = real_packet->multiplier;
89148 requirement_vector_copy(&old->reqs, &real_packet->reqs);
89149 }
89150
89151#else /* FREECIV_DELTA_PROTOCOL */
89152#ifdef FREECIV_JSON_CONNECTION
89153 field_addr.name = "effect_type";
89154#endif /* FREECIV_JSON_CONNECTION */
89155
89156 {
89157 int readin;
89158
89159 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
89160 RECEIVE_PACKET_FIELD_ERROR(effect_type);
89161 }
89162 real_packet->effect_type = readin;
89163 }
89164
89165#ifdef FREECIV_JSON_CONNECTION
89166 field_addr.name = "effect_value";
89167#endif /* FREECIV_JSON_CONNECTION */
89168
89169 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
89170 RECEIVE_PACKET_FIELD_ERROR(effect_value);
89171 }
89172
89173#ifdef FREECIV_JSON_CONNECTION
89174 field_addr.name = "has_multiplier";
89175#endif /* FREECIV_JSON_CONNECTION */
89176
89177 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_multiplier)) {
89178 RECEIVE_PACKET_FIELD_ERROR(has_multiplier);
89179 }
89180
89181#ifdef FREECIV_JSON_CONNECTION
89182 field_addr.name = "multiplier";
89183#endif /* FREECIV_JSON_CONNECTION */
89184
89185 {
89186 int readin;
89187
89188 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
89190 }
89191 real_packet->multiplier = readin;
89192 }
89193
89194#ifdef FREECIV_JSON_CONNECTION
89195 field_addr.name = "reqs";
89196#endif /* FREECIV_JSON_CONNECTION */
89197
89198 {
89199 int i;
89200
89201 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
89203 }
89205
89206#ifdef FREECIV_JSON_CONNECTION
89207 /* Enter array. */
89208 field_addr.sub_location = plocation_elem_new(0);
89209#endif /* FREECIV_JSON_CONNECTION */
89210
89211 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
89212#ifdef FREECIV_JSON_CONNECTION
89213 /* Next array element */
89214 field_addr.sub_location->number = i;
89215#endif /* FREECIV_JSON_CONNECTION */
89216
89217 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
89219 }
89220 }
89221
89222#ifdef FREECIV_JSON_CONNECTION
89223 /* Exit array. */
89224 FC_FREE(field_addr.sub_location);
89225#endif /* FREECIV_JSON_CONNECTION */
89226 }
89227#endif /* FREECIV_DELTA_PROTOCOL */
89228
89230#undef FREE_PACKET_STRUCT
89231}
89232
89234{
89235 const struct packet_ruleset_effect *real_packet = packet;
89236 int e;
89238
89239 log_packet_detailed("packet_ruleset_effect_100: sending info about ()");
89240
89241#ifdef FREECIV_DELTA_PROTOCOL
89243 struct packet_ruleset_effect *old;
89244 bool differ;
89245 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EFFECT;
89246
89247 if (nullptr == *hash) {
89249 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
89250 }
89251 BV_CLR_ALL(fields);
89252
89253 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89254 old = fc_malloc(sizeof(*old));
89255 /* temporary bitcopy just to insert correctly */
89256 *old = *real_packet;
89259 }
89260
89261 differ = (old->effect_type != real_packet->effect_type);
89262 if (differ) {
89263 BV_SET(fields, 0);
89264 }
89265
89266 differ = (old->effect_value != real_packet->effect_value);
89267 if (differ) {
89268 BV_SET(fields, 1);
89269 }
89270
89271 /* folded into head */
89272 if (real_packet->has_multiplier) {
89273 BV_SET(fields, 2);
89274 }
89275
89276 differ = (old->multiplier != real_packet->multiplier);
89277 if (differ) {
89278 BV_SET(fields, 3);
89279 }
89280
89282 if (!differ) {
89283 int i;
89284
89285 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
89286 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
89287 if (differ) {
89288 break;
89289 }
89290 }
89291 }
89292 if (differ) {
89293 BV_SET(fields, 4);
89294 }
89295#endif /* FREECIV_DELTA_PROTOCOL */
89296
89297#ifdef FREECIV_JSON_CONNECTION
89298 struct plocation field_addr;
89299 {
89300 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89303 }
89304#endif /* FREECIV_JSON_CONNECTION */
89305
89306#ifdef FREECIV_DELTA_PROTOCOL
89307#ifdef FREECIV_JSON_CONNECTION
89308 field_addr.name = "fields";
89309#endif /* FREECIV_JSON_CONNECTION */
89310 e = 0;
89311 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89312 if (e) {
89313 log_packet_detailed("fields bitvector error detected");
89314 }
89315
89316 if (BV_ISSET(fields, 0)) {
89317 log_packet_detailed(" field 'effect_type' has changed");
89318
89319#ifdef FREECIV_JSON_CONNECTION
89320 field_addr.name = "effect_type";
89321#endif /* FREECIV_JSON_CONNECTION */
89322 e = 0;
89323
89324 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
89325
89326 if (e) {
89327 log_packet_detailed("'effect_type' field error detected");
89328 }
89329 }
89330
89331 if (BV_ISSET(fields, 1)) {
89332 log_packet_detailed(" field 'effect_value' has changed");
89333
89334#ifdef FREECIV_JSON_CONNECTION
89335 field_addr.name = "effect_value";
89336#endif /* FREECIV_JSON_CONNECTION */
89337 e = 0;
89338
89339 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
89340
89341 if (e) {
89342 log_packet_detailed("'effect_value' field error detected");
89343 }
89344 }
89345
89346 /* field 2 is folded into the header */
89347
89348 if (BV_ISSET(fields, 3)) {
89349 log_packet_detailed(" field 'multiplier' has changed");
89350
89351#ifdef FREECIV_JSON_CONNECTION
89352 field_addr.name = "multiplier";
89353#endif /* FREECIV_JSON_CONNECTION */
89354 e = 0;
89355
89356 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
89357
89358 if (e) {
89359 log_packet_detailed("'multiplier' field error detected");
89360 }
89361 }
89362
89363 if (BV_ISSET(fields, 4)) {
89364 log_packet_detailed(" field 'reqs' has changed");
89365
89366#ifdef FREECIV_JSON_CONNECTION
89367 field_addr.name = "reqs";
89368#endif /* FREECIV_JSON_CONNECTION */
89369 e = 0;
89370
89371 {
89372 int i;
89373
89376
89377#ifdef FREECIV_JSON_CONNECTION
89378 /* Enter array. */
89379 field_addr.sub_location = plocation_elem_new(0);
89380#endif /* FREECIV_JSON_CONNECTION */
89381
89382 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
89383#ifdef FREECIV_JSON_CONNECTION
89384 /* Next array element. */
89385 field_addr.sub_location->number = i;
89386#endif /* FREECIV_JSON_CONNECTION */
89387
89388 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
89389 }
89390
89391#ifdef FREECIV_JSON_CONNECTION
89392 /* Exit array. */
89393 FC_FREE(field_addr.sub_location);
89394#endif /* FREECIV_JSON_CONNECTION */
89395 }
89396
89397 if (e) {
89398 log_packet_detailed("'reqs' field error detected");
89399 }
89400 }
89401
89402 old->effect_type = real_packet->effect_type;
89403 old->effect_value = real_packet->effect_value;
89404 old->has_multiplier = real_packet->has_multiplier;
89405 old->multiplier = real_packet->multiplier;
89406 requirement_vector_copy(&old->reqs, &real_packet->reqs);
89407
89408#else /* FREECIV_DELTA_PROTOCOL */
89409#ifdef FREECIV_JSON_CONNECTION
89410 field_addr.name = "effect_type";
89411#endif /* FREECIV_JSON_CONNECTION */
89412 e = 0;
89413
89414 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
89415
89416 if (e) {
89417 log_packet_detailed("'effect_type' field error detected");
89418 }
89419
89420#ifdef FREECIV_JSON_CONNECTION
89421 field_addr.name = "effect_value";
89422#endif /* FREECIV_JSON_CONNECTION */
89423 e = 0;
89424
89425 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
89426
89427 if (e) {
89428 log_packet_detailed("'effect_value' field error detected");
89429 }
89430
89431#ifdef FREECIV_JSON_CONNECTION
89432 field_addr.name = "has_multiplier";
89433#endif /* FREECIV_JSON_CONNECTION */
89434 e = 0;
89435
89436 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_multiplier);
89437
89438 if (e) {
89439 log_packet_detailed("'has_multiplier' field error detected");
89440 }
89441
89442#ifdef FREECIV_JSON_CONNECTION
89443 field_addr.name = "multiplier";
89444#endif /* FREECIV_JSON_CONNECTION */
89445 e = 0;
89446
89447 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
89448
89449 if (e) {
89450 log_packet_detailed("'multiplier' field error detected");
89451 }
89452
89453#ifdef FREECIV_JSON_CONNECTION
89454 field_addr.name = "reqs";
89455#endif /* FREECIV_JSON_CONNECTION */
89456 e = 0;
89457
89458 {
89459 int i;
89460
89463
89464#ifdef FREECIV_JSON_CONNECTION
89465 /* Enter array. */
89466 field_addr.sub_location = plocation_elem_new(0);
89467#endif /* FREECIV_JSON_CONNECTION */
89468
89469 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
89470#ifdef FREECIV_JSON_CONNECTION
89471 /* Next array element. */
89472 field_addr.sub_location->number = i;
89473#endif /* FREECIV_JSON_CONNECTION */
89474
89475 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
89476 }
89477
89478#ifdef FREECIV_JSON_CONNECTION
89479 /* Exit array. */
89480 FC_FREE(field_addr.sub_location);
89481#endif /* FREECIV_JSON_CONNECTION */
89482 }
89483
89484 if (e) {
89485 log_packet_detailed("'reqs' field error detected");
89486 }
89487#endif /* FREECIV_DELTA_PROTOCOL */
89488
89490}
89491
89493{
89494 if (!pc->used) {
89495 log_error("WARNING: trying to send data to the closed connection %s",
89497 return -1;
89498 }
89499 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet != nullptr, -1,
89500 "Handler for PACKET_RULESET_EFFECT not installed");
89501 return pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet(pc, packet);
89502}
89503
89504void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
89505{
89506 conn_list_iterate(dest, pconn) {
89509}
89510
89512{
89513 memset(packet, 0, sizeof(*packet));
89514}
89515
89516#define free_packet_ruleset_resource(_packet) (void) 0
89517#define destroy_packet_ruleset_resource free
89518
89519#ifdef FREECIV_DELTA_PROTOCOL
89520#define hash_packet_ruleset_resource_100 hash_const
89521#define cmp_packet_ruleset_resource_100 cmp_const
89523#endif /* FREECIV_DELTA_PROTOCOL */
89524
89526{
89527#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_resource(_packet)
89529
89530#ifdef FREECIV_JSON_CONNECTION
89531 struct plocation field_addr;
89532 {
89533 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89536 }
89537#endif /* FREECIV_JSON_CONNECTION */
89538
89539 log_packet_detailed("packet_ruleset_resource_100: got info about ()");
89540
89541#ifdef FREECIV_DELTA_PROTOCOL
89544 struct genhash **hash = pc->phs.received + PACKET_RULESET_RESOURCE;
89545
89546 if (nullptr == *hash) {
89548 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
89549 }
89550
89551 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89552 *real_packet = *old;
89553 } else {
89554 /* packet is already initialized empty */
89555 log_packet_detailed(" no old info");
89556 }
89557
89558#ifdef FREECIV_JSON_CONNECTION
89559 field_addr.name = "fields";
89560#endif /* FREECIV_JSON_CONNECTION */
89561 DIO_BV_GET(&din, &field_addr, fields);
89562
89563 if (BV_ISSET(fields, 0)) {
89564 log_packet_detailed(" got field 'id'");
89565
89566#ifdef FREECIV_JSON_CONNECTION
89567 field_addr.name = "id";
89568#endif /* FREECIV_JSON_CONNECTION */
89569
89570 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
89572 }
89573 }
89574
89575 if (BV_ISSET(fields, 1)) {
89576 log_packet_detailed(" got field 'output'");
89577
89578#ifdef FREECIV_JSON_CONNECTION
89579 field_addr.name = "output";
89580#endif /* FREECIV_JSON_CONNECTION */
89581
89582 {
89583 int i;
89584
89585
89586#ifdef FREECIV_JSON_CONNECTION
89587 /* Enter array. */
89588 field_addr.sub_location = plocation_elem_new(0);
89589#endif /* FREECIV_JSON_CONNECTION */
89590
89591 for (i = 0; i < O_LAST; i++) {
89592#ifdef FREECIV_JSON_CONNECTION
89593 /* Next array element */
89594 field_addr.sub_location->number = i;
89595#endif /* FREECIV_JSON_CONNECTION */
89596
89597 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
89599 }
89600 }
89601
89602#ifdef FREECIV_JSON_CONNECTION
89603 /* Exit array. */
89604 FC_FREE(field_addr.sub_location);
89605#endif /* FREECIV_JSON_CONNECTION */
89606 }
89607 }
89608
89609 if (nullptr == old) {
89610 old = fc_malloc(sizeof(*old));
89612 *old = *real_packet;
89614 } else {
89615 *old = *real_packet;
89616 }
89617
89618#else /* FREECIV_DELTA_PROTOCOL */
89619#ifdef FREECIV_JSON_CONNECTION
89620 field_addr.name = "id";
89621#endif /* FREECIV_JSON_CONNECTION */
89622
89623 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
89625 }
89626
89627#ifdef FREECIV_JSON_CONNECTION
89628 field_addr.name = "output";
89629#endif /* FREECIV_JSON_CONNECTION */
89630
89631 {
89632 int i;
89633
89634
89635#ifdef FREECIV_JSON_CONNECTION
89636 /* Enter array. */
89637 field_addr.sub_location = plocation_elem_new(0);
89638#endif /* FREECIV_JSON_CONNECTION */
89639
89640 for (i = 0; i < O_LAST; i++) {
89641#ifdef FREECIV_JSON_CONNECTION
89642 /* Next array element */
89643 field_addr.sub_location->number = i;
89644#endif /* FREECIV_JSON_CONNECTION */
89645
89646 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
89648 }
89649 }
89650
89651#ifdef FREECIV_JSON_CONNECTION
89652 /* Exit array. */
89653 FC_FREE(field_addr.sub_location);
89654#endif /* FREECIV_JSON_CONNECTION */
89655 }
89656#endif /* FREECIV_DELTA_PROTOCOL */
89657
89659#undef FREE_PACKET_STRUCT
89660}
89661
89663{
89664 const struct packet_ruleset_resource *real_packet = packet;
89665 int e;
89667
89668 log_packet_detailed("packet_ruleset_resource_100: sending info about ()");
89669
89670#ifdef FREECIV_DELTA_PROTOCOL
89673 bool differ;
89674 struct genhash **hash = pc->phs.sent + PACKET_RULESET_RESOURCE;
89675
89676 if (nullptr == *hash) {
89678 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
89679 }
89680 BV_CLR_ALL(fields);
89681
89682 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89683 old = fc_malloc(sizeof(*old));
89684 /* temporary bitcopy just to insert correctly */
89685 *old = *real_packet;
89688 }
89689
89690 differ = (old->id != real_packet->id);
89691 if (differ) {
89692 BV_SET(fields, 0);
89693 }
89694
89695 differ = FALSE;
89696 {
89697 int i;
89698
89699 for (i = 0; i < O_LAST; i++) {
89700 differ = (old->output[i] != real_packet->output[i]);
89701 if (differ) {
89702 break;
89703 }
89704 }
89705 }
89706 if (differ) {
89707 BV_SET(fields, 1);
89708 }
89709#endif /* FREECIV_DELTA_PROTOCOL */
89710
89711#ifdef FREECIV_JSON_CONNECTION
89712 struct plocation field_addr;
89713 {
89714 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89717 }
89718#endif /* FREECIV_JSON_CONNECTION */
89719
89720#ifdef FREECIV_DELTA_PROTOCOL
89721#ifdef FREECIV_JSON_CONNECTION
89722 field_addr.name = "fields";
89723#endif /* FREECIV_JSON_CONNECTION */
89724 e = 0;
89725 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89726 if (e) {
89727 log_packet_detailed("fields bitvector error detected");
89728 }
89729
89730 if (BV_ISSET(fields, 0)) {
89731 log_packet_detailed(" field 'id' has changed");
89732
89733#ifdef FREECIV_JSON_CONNECTION
89734 field_addr.name = "id";
89735#endif /* FREECIV_JSON_CONNECTION */
89736 e = 0;
89737
89738 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
89739
89740 if (e) {
89741 log_packet_detailed("'id' field error detected");
89742 }
89743 }
89744
89745 if (BV_ISSET(fields, 1)) {
89746 log_packet_detailed(" field 'output' has changed");
89747
89748#ifdef FREECIV_JSON_CONNECTION
89749 field_addr.name = "output";
89750#endif /* FREECIV_JSON_CONNECTION */
89751 e = 0;
89752
89753 {
89754 int i;
89755
89756#ifdef FREECIV_JSON_CONNECTION
89757 /* Create the array. */
89758 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
89759
89760 /* Enter array. */
89761 field_addr.sub_location = plocation_elem_new(0);
89762#endif /* FREECIV_JSON_CONNECTION */
89763
89764 for (i = 0; i < O_LAST; i++) {
89765#ifdef FREECIV_JSON_CONNECTION
89766 /* Next array element. */
89767 field_addr.sub_location->number = i;
89768#endif /* FREECIV_JSON_CONNECTION */
89769
89770 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
89771 }
89772
89773#ifdef FREECIV_JSON_CONNECTION
89774 /* Exit array. */
89775 FC_FREE(field_addr.sub_location);
89776#endif /* FREECIV_JSON_CONNECTION */
89777 }
89778
89779 if (e) {
89780 log_packet_detailed("'output' field error detected");
89781 }
89782 }
89783
89784 *old = *real_packet;
89785
89786#else /* FREECIV_DELTA_PROTOCOL */
89787#ifdef FREECIV_JSON_CONNECTION
89788 field_addr.name = "id";
89789#endif /* FREECIV_JSON_CONNECTION */
89790 e = 0;
89791
89792 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
89793
89794 if (e) {
89795 log_packet_detailed("'id' field error detected");
89796 }
89797
89798#ifdef FREECIV_JSON_CONNECTION
89799 field_addr.name = "output";
89800#endif /* FREECIV_JSON_CONNECTION */
89801 e = 0;
89802
89803 {
89804 int i;
89805
89806#ifdef FREECIV_JSON_CONNECTION
89807 /* Create the array. */
89808 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
89809
89810 /* Enter array. */
89811 field_addr.sub_location = plocation_elem_new(0);
89812#endif /* FREECIV_JSON_CONNECTION */
89813
89814 for (i = 0; i < O_LAST; i++) {
89815#ifdef FREECIV_JSON_CONNECTION
89816 /* Next array element. */
89817 field_addr.sub_location->number = i;
89818#endif /* FREECIV_JSON_CONNECTION */
89819
89820 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
89821 }
89822
89823#ifdef FREECIV_JSON_CONNECTION
89824 /* Exit array. */
89825 FC_FREE(field_addr.sub_location);
89826#endif /* FREECIV_JSON_CONNECTION */
89827 }
89828
89829 if (e) {
89830 log_packet_detailed("'output' field error detected");
89831 }
89832#endif /* FREECIV_DELTA_PROTOCOL */
89833
89835}
89836
89838{
89839 if (!pc->used) {
89840 log_error("WARNING: trying to send data to the closed connection %s",
89842 return -1;
89843 }
89844 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet != nullptr, -1,
89845 "Handler for PACKET_RULESET_RESOURCE not installed");
89846 return pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet(pc, packet);
89847}
89848
89850{
89851 conn_list_iterate(dest, pconn) {
89854}
89855
89856static inline void init_packet_scenario_info(struct packet_scenario_info *packet)
89857{
89858 memset(packet, 0, sizeof(*packet));
89859}
89860
89861#define free_packet_scenario_info(_packet) (void) 0
89862#define destroy_packet_scenario_info free
89863
89864#ifdef FREECIV_DELTA_PROTOCOL
89865#define hash_packet_scenario_info_100 hash_const
89866#define cmp_packet_scenario_info_100 cmp_const
89868#endif /* FREECIV_DELTA_PROTOCOL */
89869
89871{
89872#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_info(_packet)
89874
89875#ifdef FREECIV_JSON_CONNECTION
89876 struct plocation field_addr;
89877 {
89878 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89881 }
89882#endif /* FREECIV_JSON_CONNECTION */
89883
89884 log_packet_detailed("packet_scenario_info_100: got info about ()");
89885
89886#ifdef FREECIV_DELTA_PROTOCOL
89888 struct packet_scenario_info *old;
89889 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_INFO;
89890
89891 if (nullptr == *hash) {
89893 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
89894 }
89895
89896 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89897 *real_packet = *old;
89898 } else {
89899 /* packet is already initialized empty */
89900 log_packet_detailed(" no old info");
89901 }
89902
89903#ifdef FREECIV_JSON_CONNECTION
89904 field_addr.name = "fields";
89905#endif /* FREECIV_JSON_CONNECTION */
89906 DIO_BV_GET(&din, &field_addr, fields);
89907
89908 real_packet->is_scenario = BV_ISSET(fields, 0);
89909
89910 if (BV_ISSET(fields, 1)) {
89911 log_packet_detailed(" got field 'name'");
89912
89913#ifdef FREECIV_JSON_CONNECTION
89914 field_addr.name = "name";
89915#endif /* FREECIV_JSON_CONNECTION */
89916
89917 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89919 }
89920 }
89921
89922 if (BV_ISSET(fields, 2)) {
89923 log_packet_detailed(" got field 'authors'");
89924
89925#ifdef FREECIV_JSON_CONNECTION
89926 field_addr.name = "authors";
89927#endif /* FREECIV_JSON_CONNECTION */
89928
89929 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
89931 }
89932 }
89933
89934 real_packet->players = BV_ISSET(fields, 3);
89935
89936 real_packet->startpos_nations = BV_ISSET(fields, 4);
89937
89938 real_packet->save_random = BV_ISSET(fields, 5);
89939
89940 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
89941
89942 real_packet->lake_flooding = BV_ISSET(fields, 7);
89943
89944 real_packet->handmade = BV_ISSET(fields, 8);
89945
89946 real_packet->allow_ai_type_fallback = BV_ISSET(fields, 9);
89947
89948 real_packet->ruleset_locked = BV_ISSET(fields, 10);
89949
89950 if (BV_ISSET(fields, 11)) {
89951 log_packet_detailed(" got field 'datafile'");
89952
89953#ifdef FREECIV_JSON_CONNECTION
89954 field_addr.name = "datafile";
89955#endif /* FREECIV_JSON_CONNECTION */
89956
89957 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
89959 }
89960 }
89961
89962 real_packet->have_resources = BV_ISSET(fields, 12);
89963
89964 if (BV_ISSET(fields, 13)) {
89965 log_packet_detailed(" got field 'req_caps'");
89966
89967#ifdef FREECIV_JSON_CONNECTION
89968 field_addr.name = "req_caps";
89969#endif /* FREECIV_JSON_CONNECTION */
89970
89971 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
89973 }
89974 }
89975
89976 if (nullptr == old) {
89977 old = fc_malloc(sizeof(*old));
89979 *old = *real_packet;
89981 } else {
89982 *old = *real_packet;
89983 }
89984
89985#else /* FREECIV_DELTA_PROTOCOL */
89986#ifdef FREECIV_JSON_CONNECTION
89987 field_addr.name = "is_scenario";
89988#endif /* FREECIV_JSON_CONNECTION */
89989
89990 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_scenario)) {
89991 RECEIVE_PACKET_FIELD_ERROR(is_scenario);
89992 }
89993
89994#ifdef FREECIV_JSON_CONNECTION
89995 field_addr.name = "name";
89996#endif /* FREECIV_JSON_CONNECTION */
89997
89998 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
90000 }
90001
90002#ifdef FREECIV_JSON_CONNECTION
90003 field_addr.name = "authors";
90004#endif /* FREECIV_JSON_CONNECTION */
90005
90006 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
90008 }
90009
90010#ifdef FREECIV_JSON_CONNECTION
90011 field_addr.name = "players";
90012#endif /* FREECIV_JSON_CONNECTION */
90013
90014 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->players)) {
90016 }
90017
90018#ifdef FREECIV_JSON_CONNECTION
90019 field_addr.name = "startpos_nations";
90020#endif /* FREECIV_JSON_CONNECTION */
90021
90022 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
90023 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
90024 }
90025
90026#ifdef FREECIV_JSON_CONNECTION
90027 field_addr.name = "save_random";
90028#endif /* FREECIV_JSON_CONNECTION */
90029
90030 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->save_random)) {
90031 RECEIVE_PACKET_FIELD_ERROR(save_random);
90032 }
90033
90034#ifdef FREECIV_JSON_CONNECTION
90035 field_addr.name = "prevent_new_cities";
90036#endif /* FREECIV_JSON_CONNECTION */
90037
90038 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
90039 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
90040 }
90041
90042#ifdef FREECIV_JSON_CONNECTION
90043 field_addr.name = "lake_flooding";
90044#endif /* FREECIV_JSON_CONNECTION */
90045
90046 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
90047 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
90048 }
90049
90050#ifdef FREECIV_JSON_CONNECTION
90051 field_addr.name = "handmade";
90052#endif /* FREECIV_JSON_CONNECTION */
90053
90054 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->handmade)) {
90056 }
90057
90058#ifdef FREECIV_JSON_CONNECTION
90059 field_addr.name = "allow_ai_type_fallback";
90060#endif /* FREECIV_JSON_CONNECTION */
90061
90062 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->allow_ai_type_fallback)) {
90063 RECEIVE_PACKET_FIELD_ERROR(allow_ai_type_fallback);
90064 }
90065
90066#ifdef FREECIV_JSON_CONNECTION
90067 field_addr.name = "ruleset_locked";
90068#endif /* FREECIV_JSON_CONNECTION */
90069
90070 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
90071 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
90072 }
90073
90074#ifdef FREECIV_JSON_CONNECTION
90075 field_addr.name = "datafile";
90076#endif /* FREECIV_JSON_CONNECTION */
90077
90078 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
90080 }
90081
90082#ifdef FREECIV_JSON_CONNECTION
90083 field_addr.name = "have_resources";
90084#endif /* FREECIV_JSON_CONNECTION */
90085
90086 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->have_resources)) {
90087 RECEIVE_PACKET_FIELD_ERROR(have_resources);
90088 }
90089
90090#ifdef FREECIV_JSON_CONNECTION
90091 field_addr.name = "req_caps";
90092#endif /* FREECIV_JSON_CONNECTION */
90093
90094 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
90096 }
90097#endif /* FREECIV_DELTA_PROTOCOL */
90098
90100#undef FREE_PACKET_STRUCT
90101}
90102
90103static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
90104{
90105 const struct packet_scenario_info *real_packet = packet;
90106 int e;
90108
90109 log_packet_detailed("packet_scenario_info_100: sending info about ()");
90110
90111#ifdef FREECIV_DELTA_PROTOCOL
90113 struct packet_scenario_info *old;
90114 bool differ;
90115 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_INFO;
90116
90117 if (nullptr == *hash) {
90119 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
90120 }
90121 BV_CLR_ALL(fields);
90122
90123 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90124 old = fc_malloc(sizeof(*old));
90125 /* temporary bitcopy just to insert correctly */
90126 *old = *real_packet;
90129 }
90130
90131 /* folded into head */
90132 if (real_packet->is_scenario) {
90133 BV_SET(fields, 0);
90134 }
90135
90136 differ = (strcmp(old->name, real_packet->name) != 0);
90137 if (differ) {
90138 BV_SET(fields, 1);
90139 }
90140
90141 differ = (strcmp(old->authors, real_packet->authors) != 0);
90142 if (differ) {
90143 BV_SET(fields, 2);
90144 }
90145
90146 /* folded into head */
90147 if (real_packet->players) {
90148 BV_SET(fields, 3);
90149 }
90150
90151 /* folded into head */
90152 if (real_packet->startpos_nations) {
90153 BV_SET(fields, 4);
90154 }
90155
90156 /* folded into head */
90157 if (real_packet->save_random) {
90158 BV_SET(fields, 5);
90159 }
90160
90161 /* folded into head */
90162 if (real_packet->prevent_new_cities) {
90163 BV_SET(fields, 6);
90164 }
90165
90166 /* folded into head */
90167 if (real_packet->lake_flooding) {
90168 BV_SET(fields, 7);
90169 }
90170
90171 /* folded into head */
90172 if (real_packet->handmade) {
90173 BV_SET(fields, 8);
90174 }
90175
90176 /* folded into head */
90177 if (real_packet->allow_ai_type_fallback) {
90178 BV_SET(fields, 9);
90179 }
90180
90181 /* folded into head */
90182 if (real_packet->ruleset_locked) {
90183 BV_SET(fields, 10);
90184 }
90185
90186 differ = (strcmp(old->datafile, real_packet->datafile) != 0);
90187 if (differ) {
90188 BV_SET(fields, 11);
90189 }
90190
90191 /* folded into head */
90192 if (real_packet->have_resources) {
90193 BV_SET(fields, 12);
90194 }
90195
90196 differ = (strcmp(old->req_caps, real_packet->req_caps) != 0);
90197 if (differ) {
90198 BV_SET(fields, 13);
90199 }
90200#endif /* FREECIV_DELTA_PROTOCOL */
90201
90202#ifdef FREECIV_JSON_CONNECTION
90203 struct plocation field_addr;
90204 {
90205 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90208 }
90209#endif /* FREECIV_JSON_CONNECTION */
90210
90211#ifdef FREECIV_DELTA_PROTOCOL
90212#ifdef FREECIV_JSON_CONNECTION
90213 field_addr.name = "fields";
90214#endif /* FREECIV_JSON_CONNECTION */
90215 e = 0;
90216 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90217 if (e) {
90218 log_packet_detailed("fields bitvector error detected");
90219 }
90220
90221 /* field 0 is folded into the header */
90222
90223 if (BV_ISSET(fields, 1)) {
90224 log_packet_detailed(" field 'name' has changed");
90225
90226#ifdef FREECIV_JSON_CONNECTION
90227 field_addr.name = "name";
90228#endif /* FREECIV_JSON_CONNECTION */
90229 e = 0;
90230
90231 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
90232
90233 if (e) {
90234 log_packet_detailed("'name' field error detected");
90235 }
90236 }
90237
90238 if (BV_ISSET(fields, 2)) {
90239 log_packet_detailed(" field 'authors' has changed");
90240
90241#ifdef FREECIV_JSON_CONNECTION
90242 field_addr.name = "authors";
90243#endif /* FREECIV_JSON_CONNECTION */
90244 e = 0;
90245
90246 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
90247
90248 if (e) {
90249 log_packet_detailed("'authors' field error detected");
90250 }
90251 }
90252
90253 /* field 3 is folded into the header */
90254
90255 /* field 4 is folded into the header */
90256
90257 /* field 5 is folded into the header */
90258
90259 /* field 6 is folded into the header */
90260
90261 /* field 7 is folded into the header */
90262
90263 /* field 8 is folded into the header */
90264
90265 /* field 9 is folded into the header */
90266
90267 /* field 10 is folded into the header */
90268
90269 if (BV_ISSET(fields, 11)) {
90270 log_packet_detailed(" field 'datafile' has changed");
90271
90272#ifdef FREECIV_JSON_CONNECTION
90273 field_addr.name = "datafile";
90274#endif /* FREECIV_JSON_CONNECTION */
90275 e = 0;
90276
90277 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
90278
90279 if (e) {
90280 log_packet_detailed("'datafile' field error detected");
90281 }
90282 }
90283
90284 /* field 12 is folded into the header */
90285
90286 if (BV_ISSET(fields, 13)) {
90287 log_packet_detailed(" field 'req_caps' has changed");
90288
90289#ifdef FREECIV_JSON_CONNECTION
90290 field_addr.name = "req_caps";
90291#endif /* FREECIV_JSON_CONNECTION */
90292 e = 0;
90293
90294 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
90295
90296 if (e) {
90297 log_packet_detailed("'req_caps' field error detected");
90298 }
90299 }
90300
90301 *old = *real_packet;
90302
90303#else /* FREECIV_DELTA_PROTOCOL */
90304#ifdef FREECIV_JSON_CONNECTION
90305 field_addr.name = "is_scenario";
90306#endif /* FREECIV_JSON_CONNECTION */
90307 e = 0;
90308
90309 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_scenario);
90310
90311 if (e) {
90312 log_packet_detailed("'is_scenario' field error detected");
90313 }
90314
90315#ifdef FREECIV_JSON_CONNECTION
90316 field_addr.name = "name";
90317#endif /* FREECIV_JSON_CONNECTION */
90318 e = 0;
90319
90320 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
90321
90322 if (e) {
90323 log_packet_detailed("'name' field error detected");
90324 }
90325
90326#ifdef FREECIV_JSON_CONNECTION
90327 field_addr.name = "authors";
90328#endif /* FREECIV_JSON_CONNECTION */
90329 e = 0;
90330
90331 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
90332
90333 if (e) {
90334 log_packet_detailed("'authors' field error detected");
90335 }
90336
90337#ifdef FREECIV_JSON_CONNECTION
90338 field_addr.name = "players";
90339#endif /* FREECIV_JSON_CONNECTION */
90340 e = 0;
90341
90342 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->players);
90343
90344 if (e) {
90345 log_packet_detailed("'players' field error detected");
90346 }
90347
90348#ifdef FREECIV_JSON_CONNECTION
90349 field_addr.name = "startpos_nations";
90350#endif /* FREECIV_JSON_CONNECTION */
90351 e = 0;
90352
90353 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
90354
90355 if (e) {
90356 log_packet_detailed("'startpos_nations' field error detected");
90357 }
90358
90359#ifdef FREECIV_JSON_CONNECTION
90360 field_addr.name = "save_random";
90361#endif /* FREECIV_JSON_CONNECTION */
90362 e = 0;
90363
90364 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->save_random);
90365
90366 if (e) {
90367 log_packet_detailed("'save_random' field error detected");
90368 }
90369
90370#ifdef FREECIV_JSON_CONNECTION
90371 field_addr.name = "prevent_new_cities";
90372#endif /* FREECIV_JSON_CONNECTION */
90373 e = 0;
90374
90375 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
90376
90377 if (e) {
90378 log_packet_detailed("'prevent_new_cities' field error detected");
90379 }
90380
90381#ifdef FREECIV_JSON_CONNECTION
90382 field_addr.name = "lake_flooding";
90383#endif /* FREECIV_JSON_CONNECTION */
90384 e = 0;
90385
90386 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
90387
90388 if (e) {
90389 log_packet_detailed("'lake_flooding' field error detected");
90390 }
90391
90392#ifdef FREECIV_JSON_CONNECTION
90393 field_addr.name = "handmade";
90394#endif /* FREECIV_JSON_CONNECTION */
90395 e = 0;
90396
90397 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->handmade);
90398
90399 if (e) {
90400 log_packet_detailed("'handmade' field error detected");
90401 }
90402
90403#ifdef FREECIV_JSON_CONNECTION
90404 field_addr.name = "allow_ai_type_fallback";
90405#endif /* FREECIV_JSON_CONNECTION */
90406 e = 0;
90407
90408 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->allow_ai_type_fallback);
90409
90410 if (e) {
90411 log_packet_detailed("'allow_ai_type_fallback' field error detected");
90412 }
90413
90414#ifdef FREECIV_JSON_CONNECTION
90415 field_addr.name = "ruleset_locked";
90416#endif /* FREECIV_JSON_CONNECTION */
90417 e = 0;
90418
90419 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
90420
90421 if (e) {
90422 log_packet_detailed("'ruleset_locked' field error detected");
90423 }
90424
90425#ifdef FREECIV_JSON_CONNECTION
90426 field_addr.name = "datafile";
90427#endif /* FREECIV_JSON_CONNECTION */
90428 e = 0;
90429
90430 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
90431
90432 if (e) {
90433 log_packet_detailed("'datafile' field error detected");
90434 }
90435
90436#ifdef FREECIV_JSON_CONNECTION
90437 field_addr.name = "have_resources";
90438#endif /* FREECIV_JSON_CONNECTION */
90439 e = 0;
90440
90441 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->have_resources);
90442
90443 if (e) {
90444 log_packet_detailed("'have_resources' field error detected");
90445 }
90446
90447#ifdef FREECIV_JSON_CONNECTION
90448 field_addr.name = "req_caps";
90449#endif /* FREECIV_JSON_CONNECTION */
90450 e = 0;
90451
90452 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
90453
90454 if (e) {
90455 log_packet_detailed("'req_caps' field error detected");
90456 }
90457#endif /* FREECIV_DELTA_PROTOCOL */
90458
90460}
90461
90463{
90464 if (!pc->used) {
90465 log_error("WARNING: trying to send data to the closed connection %s",
90467 return -1;
90468 }
90469 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet != nullptr, -1,
90470 "Handler for PACKET_SCENARIO_INFO not installed");
90471 return pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet(pc, packet);
90472}
90473
90475{
90476 memset(packet, 0, sizeof(*packet));
90477}
90478
90479#define free_packet_scenario_description(_packet) (void) 0
90480#define destroy_packet_scenario_description free
90481
90482#ifdef FREECIV_DELTA_PROTOCOL
90483#define hash_packet_scenario_description_100 hash_const
90484#define cmp_packet_scenario_description_100 cmp_const
90486#endif /* FREECIV_DELTA_PROTOCOL */
90487
90489{
90490#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_description(_packet)
90492
90493#ifdef FREECIV_JSON_CONNECTION
90494 struct plocation field_addr;
90495 {
90496 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90499 }
90500#endif /* FREECIV_JSON_CONNECTION */
90501
90502 log_packet_detailed("packet_scenario_description_100: got info about ()");
90503
90504#ifdef FREECIV_DELTA_PROTOCOL
90507 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_DESCRIPTION;
90508
90509 if (nullptr == *hash) {
90511 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
90512 }
90513
90514 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90515 *real_packet = *old;
90516 } else {
90517 /* packet is already initialized empty */
90518 log_packet_detailed(" no old info");
90519 }
90520
90521#ifdef FREECIV_JSON_CONNECTION
90522 field_addr.name = "fields";
90523#endif /* FREECIV_JSON_CONNECTION */
90524 DIO_BV_GET(&din, &field_addr, fields);
90525
90526 if (BV_ISSET(fields, 0)) {
90527 log_packet_detailed(" got field 'description'");
90528
90529#ifdef FREECIV_JSON_CONNECTION
90530 field_addr.name = "description";
90531#endif /* FREECIV_JSON_CONNECTION */
90532
90533 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
90534 RECEIVE_PACKET_FIELD_ERROR(description);
90535 }
90536 }
90537
90538 if (nullptr == old) {
90539 old = fc_malloc(sizeof(*old));
90541 *old = *real_packet;
90543 } else {
90544 *old = *real_packet;
90545 }
90546
90547#else /* FREECIV_DELTA_PROTOCOL */
90548#ifdef FREECIV_JSON_CONNECTION
90549 field_addr.name = "description";
90550#endif /* FREECIV_JSON_CONNECTION */
90551
90552 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
90553 RECEIVE_PACKET_FIELD_ERROR(description);
90554 }
90555#endif /* FREECIV_DELTA_PROTOCOL */
90556
90558#undef FREE_PACKET_STRUCT
90559}
90560
90562{
90563 const struct packet_scenario_description *real_packet = packet;
90564 int e;
90566
90567 log_packet_detailed("packet_scenario_description_100: sending info about ()");
90568
90569#ifdef FREECIV_DELTA_PROTOCOL
90572 bool differ;
90573 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_DESCRIPTION;
90574
90575 if (nullptr == *hash) {
90577 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
90578 }
90579 BV_CLR_ALL(fields);
90580
90581 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90582 old = fc_malloc(sizeof(*old));
90583 /* temporary bitcopy just to insert correctly */
90584 *old = *real_packet;
90587 }
90588
90589 differ = (strcmp(old->description, real_packet->description) != 0);
90590 if (differ) {
90591 BV_SET(fields, 0);
90592 }
90593#endif /* FREECIV_DELTA_PROTOCOL */
90594
90595#ifdef FREECIV_JSON_CONNECTION
90596 struct plocation field_addr;
90597 {
90598 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90601 }
90602#endif /* FREECIV_JSON_CONNECTION */
90603
90604#ifdef FREECIV_DELTA_PROTOCOL
90605#ifdef FREECIV_JSON_CONNECTION
90606 field_addr.name = "fields";
90607#endif /* FREECIV_JSON_CONNECTION */
90608 e = 0;
90609 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90610 if (e) {
90611 log_packet_detailed("fields bitvector error detected");
90612 }
90613
90614 if (BV_ISSET(fields, 0)) {
90615 log_packet_detailed(" field 'description' has changed");
90616
90617#ifdef FREECIV_JSON_CONNECTION
90618 field_addr.name = "description";
90619#endif /* FREECIV_JSON_CONNECTION */
90620 e = 0;
90621
90622 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
90623
90624 if (e) {
90625 log_packet_detailed("'description' field error detected");
90626 }
90627 }
90628
90629 *old = *real_packet;
90630
90631#else /* FREECIV_DELTA_PROTOCOL */
90632#ifdef FREECIV_JSON_CONNECTION
90633 field_addr.name = "description";
90634#endif /* FREECIV_JSON_CONNECTION */
90635 e = 0;
90636
90637 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
90638
90639 if (e) {
90640 log_packet_detailed("'description' field error detected");
90641 }
90642#endif /* FREECIV_DELTA_PROTOCOL */
90643
90645}
90646
90648{
90649 if (!pc->used) {
90650 log_error("WARNING: trying to send data to the closed connection %s",
90652 return -1;
90653 }
90654 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet != nullptr, -1,
90655 "Handler for PACKET_SCENARIO_DESCRIPTION not installed");
90656 return pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet(pc, packet);
90657}
90658
90659static inline void init_packet_save_scenario(struct packet_save_scenario *packet)
90660{
90661 memset(packet, 0, sizeof(*packet));
90662}
90663
90664#define free_packet_save_scenario(_packet) (void) 0
90665#define destroy_packet_save_scenario free
90666
90667#ifdef FREECIV_DELTA_PROTOCOL
90668#define hash_packet_save_scenario_100 hash_const
90669#define cmp_packet_save_scenario_100 cmp_const
90671#endif /* FREECIV_DELTA_PROTOCOL */
90672
90674{
90675#define FREE_PACKET_STRUCT(_packet) free_packet_save_scenario(_packet)
90677
90678#ifdef FREECIV_JSON_CONNECTION
90679 struct plocation field_addr;
90680 {
90681 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90684 }
90685#endif /* FREECIV_JSON_CONNECTION */
90686
90687 log_packet_detailed("packet_save_scenario_100: got info about ()");
90688
90689#ifdef FREECIV_DELTA_PROTOCOL
90691 struct packet_save_scenario *old;
90692 struct genhash **hash = pc->phs.received + PACKET_SAVE_SCENARIO;
90693
90694 if (nullptr == *hash) {
90696 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
90697 }
90698
90699 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90700 *real_packet = *old;
90701 } else {
90702 /* packet is already initialized empty */
90703 log_packet_detailed(" no old info");
90704 }
90705
90706#ifdef FREECIV_JSON_CONNECTION
90707 field_addr.name = "fields";
90708#endif /* FREECIV_JSON_CONNECTION */
90709 DIO_BV_GET(&din, &field_addr, fields);
90710
90711 if (BV_ISSET(fields, 0)) {
90712 log_packet_detailed(" got field 'name'");
90713
90714#ifdef FREECIV_JSON_CONNECTION
90715 field_addr.name = "name";
90716#endif /* FREECIV_JSON_CONNECTION */
90717
90718 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
90720 }
90721 }
90722
90723 if (nullptr == old) {
90724 old = fc_malloc(sizeof(*old));
90726 *old = *real_packet;
90728 } else {
90729 *old = *real_packet;
90730 }
90731
90732#else /* FREECIV_DELTA_PROTOCOL */
90733#ifdef FREECIV_JSON_CONNECTION
90734 field_addr.name = "name";
90735#endif /* FREECIV_JSON_CONNECTION */
90736
90737 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
90739 }
90740#endif /* FREECIV_DELTA_PROTOCOL */
90741
90743#undef FREE_PACKET_STRUCT
90744}
90745
90746static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
90747{
90748 const struct packet_save_scenario *real_packet = packet;
90749 int e;
90751
90752 log_packet_detailed("packet_save_scenario_100: sending info about ()");
90753
90754#ifdef FREECIV_DELTA_PROTOCOL
90756 struct packet_save_scenario *old;
90757 bool differ;
90758 struct genhash **hash = pc->phs.sent + PACKET_SAVE_SCENARIO;
90759
90760 if (nullptr == *hash) {
90762 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
90763 }
90764 BV_CLR_ALL(fields);
90765
90766 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90767 old = fc_malloc(sizeof(*old));
90768 /* temporary bitcopy just to insert correctly */
90769 *old = *real_packet;
90772 }
90773
90774 differ = (strcmp(old->name, real_packet->name) != 0);
90775 if (differ) {
90776 BV_SET(fields, 0);
90777 }
90778#endif /* FREECIV_DELTA_PROTOCOL */
90779
90780#ifdef FREECIV_JSON_CONNECTION
90781 struct plocation field_addr;
90782 {
90783 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90786 }
90787#endif /* FREECIV_JSON_CONNECTION */
90788
90789#ifdef FREECIV_DELTA_PROTOCOL
90790#ifdef FREECIV_JSON_CONNECTION
90791 field_addr.name = "fields";
90792#endif /* FREECIV_JSON_CONNECTION */
90793 e = 0;
90794 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90795 if (e) {
90796 log_packet_detailed("fields bitvector error detected");
90797 }
90798
90799 if (BV_ISSET(fields, 0)) {
90800 log_packet_detailed(" field 'name' has changed");
90801
90802#ifdef FREECIV_JSON_CONNECTION
90803 field_addr.name = "name";
90804#endif /* FREECIV_JSON_CONNECTION */
90805 e = 0;
90806
90807 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
90808
90809 if (e) {
90810 log_packet_detailed("'name' field error detected");
90811 }
90812 }
90813
90814 *old = *real_packet;
90815
90816#else /* FREECIV_DELTA_PROTOCOL */
90817#ifdef FREECIV_JSON_CONNECTION
90818 field_addr.name = "name";
90819#endif /* FREECIV_JSON_CONNECTION */
90820 e = 0;
90821
90822 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
90823
90824 if (e) {
90825 log_packet_detailed("'name' field error detected");
90826 }
90827#endif /* FREECIV_DELTA_PROTOCOL */
90828
90830}
90831
90833{
90834 if (!pc->used) {
90835 log_error("WARNING: trying to send data to the closed connection %s",
90837 return -1;
90838 }
90839 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet != nullptr, -1,
90840 "Handler for PACKET_SAVE_SCENARIO not installed");
90841 return pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet(pc, packet);
90842}
90843
90845{
90846 struct packet_save_scenario packet, *real_packet = &packet;
90847
90848 sz_strlcpy(real_packet->name, name);
90849
90851}
90852
90853static inline void init_packet_vote_new(struct packet_vote_new *packet)
90854{
90855 memset(packet, 0, sizeof(*packet));
90856}
90857
90858#define free_packet_vote_new(_packet) (void) 0
90859#define destroy_packet_vote_new free
90860
90861#ifdef FREECIV_DELTA_PROTOCOL
90862#define hash_packet_vote_new_100 hash_const
90863#define cmp_packet_vote_new_100 cmp_const
90865#endif /* FREECIV_DELTA_PROTOCOL */
90866
90868{
90869#define FREE_PACKET_STRUCT(_packet) free_packet_vote_new(_packet)
90871
90872#ifdef FREECIV_JSON_CONNECTION
90873 struct plocation field_addr;
90874 {
90875 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90878 }
90879#endif /* FREECIV_JSON_CONNECTION */
90880
90881 log_packet_detailed("packet_vote_new_100: got info about ()");
90882
90883#ifdef FREECIV_DELTA_PROTOCOL
90885 struct packet_vote_new *old;
90886 struct genhash **hash = pc->phs.received + PACKET_VOTE_NEW;
90887
90888 if (nullptr == *hash) {
90890 nullptr, nullptr, nullptr, destroy_packet_vote_new);
90891 }
90892
90893 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90894 *real_packet = *old;
90895 } else {
90896 /* packet is already initialized empty */
90897 log_packet_detailed(" no old info");
90898 }
90899
90900#ifdef FREECIV_JSON_CONNECTION
90901 field_addr.name = "fields";
90902#endif /* FREECIV_JSON_CONNECTION */
90903 DIO_BV_GET(&din, &field_addr, fields);
90904
90905 if (BV_ISSET(fields, 0)) {
90906 log_packet_detailed(" got field 'vote_no'");
90907
90908#ifdef FREECIV_JSON_CONNECTION
90909 field_addr.name = "vote_no";
90910#endif /* FREECIV_JSON_CONNECTION */
90911
90912 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90914 }
90915 }
90916
90917 if (BV_ISSET(fields, 1)) {
90918 log_packet_detailed(" got field 'user'");
90919
90920#ifdef FREECIV_JSON_CONNECTION
90921 field_addr.name = "user";
90922#endif /* FREECIV_JSON_CONNECTION */
90923
90924 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90926 }
90927 }
90928
90929 if (BV_ISSET(fields, 2)) {
90930 log_packet_detailed(" got field 'desc'");
90931
90932#ifdef FREECIV_JSON_CONNECTION
90933 field_addr.name = "desc";
90934#endif /* FREECIV_JSON_CONNECTION */
90935
90936 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90938 }
90939 }
90940
90941 if (BV_ISSET(fields, 3)) {
90942 log_packet_detailed(" got field 'percent_required'");
90943
90944#ifdef FREECIV_JSON_CONNECTION
90945 field_addr.name = "percent_required";
90946#endif /* FREECIV_JSON_CONNECTION */
90947
90948 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
90949 RECEIVE_PACKET_FIELD_ERROR(percent_required);
90950 }
90951 }
90952
90953 if (BV_ISSET(fields, 4)) {
90954 log_packet_detailed(" got field 'flags'");
90955
90956#ifdef FREECIV_JSON_CONNECTION
90957 field_addr.name = "flags";
90958#endif /* FREECIV_JSON_CONNECTION */
90959
90960 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
90962 }
90963 }
90964
90965 if (nullptr == old) {
90966 old = fc_malloc(sizeof(*old));
90968 *old = *real_packet;
90970 } else {
90971 *old = *real_packet;
90972 }
90973
90974#else /* FREECIV_DELTA_PROTOCOL */
90975#ifdef FREECIV_JSON_CONNECTION
90976 field_addr.name = "vote_no";
90977#endif /* FREECIV_JSON_CONNECTION */
90978
90979 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90981 }
90982
90983#ifdef FREECIV_JSON_CONNECTION
90984 field_addr.name = "user";
90985#endif /* FREECIV_JSON_CONNECTION */
90986
90987 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90989 }
90990
90991#ifdef FREECIV_JSON_CONNECTION
90992 field_addr.name = "desc";
90993#endif /* FREECIV_JSON_CONNECTION */
90994
90995 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90997 }
90998
90999#ifdef FREECIV_JSON_CONNECTION
91000 field_addr.name = "percent_required";
91001#endif /* FREECIV_JSON_CONNECTION */
91002
91003 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
91004 RECEIVE_PACKET_FIELD_ERROR(percent_required);
91005 }
91006
91007#ifdef FREECIV_JSON_CONNECTION
91008 field_addr.name = "flags";
91009#endif /* FREECIV_JSON_CONNECTION */
91010
91011 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
91013 }
91014#endif /* FREECIV_DELTA_PROTOCOL */
91015
91017#undef FREE_PACKET_STRUCT
91018}
91019
91020static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
91021{
91022 const struct packet_vote_new *real_packet = packet;
91023 int e;
91025
91026 log_packet_detailed("packet_vote_new_100: sending info about ()");
91027
91028#ifdef FREECIV_DELTA_PROTOCOL
91030 struct packet_vote_new *old;
91031 bool differ;
91032 struct genhash **hash = pc->phs.sent + PACKET_VOTE_NEW;
91033
91034 if (nullptr == *hash) {
91036 nullptr, nullptr, nullptr, destroy_packet_vote_new);
91037 }
91038 BV_CLR_ALL(fields);
91039
91040 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91041 old = fc_malloc(sizeof(*old));
91042 /* temporary bitcopy just to insert correctly */
91043 *old = *real_packet;
91046 }
91047
91048 differ = (old->vote_no != real_packet->vote_no);
91049 if (differ) {
91050 BV_SET(fields, 0);
91051 }
91052
91053 differ = (strcmp(old->user, real_packet->user) != 0);
91054 if (differ) {
91055 BV_SET(fields, 1);
91056 }
91057
91058 differ = (strcmp(old->desc, real_packet->desc) != 0);
91059 if (differ) {
91060 BV_SET(fields, 2);
91061 }
91062
91063 differ = (old->percent_required != real_packet->percent_required);
91064 if (differ) {
91065 BV_SET(fields, 3);
91066 }
91067
91068 differ = (old->flags != real_packet->flags);
91069 if (differ) {
91070 BV_SET(fields, 4);
91071 }
91072#endif /* FREECIV_DELTA_PROTOCOL */
91073
91074#ifdef FREECIV_JSON_CONNECTION
91075 struct plocation field_addr;
91076 {
91077 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91080 }
91081#endif /* FREECIV_JSON_CONNECTION */
91082
91083#ifdef FREECIV_DELTA_PROTOCOL
91084#ifdef FREECIV_JSON_CONNECTION
91085 field_addr.name = "fields";
91086#endif /* FREECIV_JSON_CONNECTION */
91087 e = 0;
91088 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91089 if (e) {
91090 log_packet_detailed("fields bitvector error detected");
91091 }
91092
91093 if (BV_ISSET(fields, 0)) {
91094 log_packet_detailed(" field 'vote_no' has changed");
91095
91096#ifdef FREECIV_JSON_CONNECTION
91097 field_addr.name = "vote_no";
91098#endif /* FREECIV_JSON_CONNECTION */
91099 e = 0;
91100
91101 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91102
91103 if (e) {
91104 log_packet_detailed("'vote_no' field error detected");
91105 }
91106 }
91107
91108 if (BV_ISSET(fields, 1)) {
91109 log_packet_detailed(" field 'user' has changed");
91110
91111#ifdef FREECIV_JSON_CONNECTION
91112 field_addr.name = "user";
91113#endif /* FREECIV_JSON_CONNECTION */
91114 e = 0;
91115
91116 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
91117
91118 if (e) {
91119 log_packet_detailed("'user' field error detected");
91120 }
91121 }
91122
91123 if (BV_ISSET(fields, 2)) {
91124 log_packet_detailed(" field 'desc' has changed");
91125
91126#ifdef FREECIV_JSON_CONNECTION
91127 field_addr.name = "desc";
91128#endif /* FREECIV_JSON_CONNECTION */
91129 e = 0;
91130
91131 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
91132
91133 if (e) {
91134 log_packet_detailed("'desc' field error detected");
91135 }
91136 }
91137
91138 if (BV_ISSET(fields, 3)) {
91139 log_packet_detailed(" field 'percent_required' has changed");
91140
91141#ifdef FREECIV_JSON_CONNECTION
91142 field_addr.name = "percent_required";
91143#endif /* FREECIV_JSON_CONNECTION */
91144 e = 0;
91145
91146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
91147
91148 if (e) {
91149 log_packet_detailed("'percent_required' field error detected");
91150 }
91151 }
91152
91153 if (BV_ISSET(fields, 4)) {
91154 log_packet_detailed(" field 'flags' has changed");
91155
91156#ifdef FREECIV_JSON_CONNECTION
91157 field_addr.name = "flags";
91158#endif /* FREECIV_JSON_CONNECTION */
91159 e = 0;
91160
91161 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
91162
91163 if (e) {
91164 log_packet_detailed("'flags' field error detected");
91165 }
91166 }
91167
91168 *old = *real_packet;
91169
91170#else /* FREECIV_DELTA_PROTOCOL */
91171#ifdef FREECIV_JSON_CONNECTION
91172 field_addr.name = "vote_no";
91173#endif /* FREECIV_JSON_CONNECTION */
91174 e = 0;
91175
91176 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91177
91178 if (e) {
91179 log_packet_detailed("'vote_no' field error detected");
91180 }
91181
91182#ifdef FREECIV_JSON_CONNECTION
91183 field_addr.name = "user";
91184#endif /* FREECIV_JSON_CONNECTION */
91185 e = 0;
91186
91187 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
91188
91189 if (e) {
91190 log_packet_detailed("'user' field error detected");
91191 }
91192
91193#ifdef FREECIV_JSON_CONNECTION
91194 field_addr.name = "desc";
91195#endif /* FREECIV_JSON_CONNECTION */
91196 e = 0;
91197
91198 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
91199
91200 if (e) {
91201 log_packet_detailed("'desc' field error detected");
91202 }
91203
91204#ifdef FREECIV_JSON_CONNECTION
91205 field_addr.name = "percent_required";
91206#endif /* FREECIV_JSON_CONNECTION */
91207 e = 0;
91208
91209 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
91210
91211 if (e) {
91212 log_packet_detailed("'percent_required' field error detected");
91213 }
91214
91215#ifdef FREECIV_JSON_CONNECTION
91216 field_addr.name = "flags";
91217#endif /* FREECIV_JSON_CONNECTION */
91218 e = 0;
91219
91220 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
91221
91222 if (e) {
91223 log_packet_detailed("'flags' field error detected");
91224 }
91225#endif /* FREECIV_DELTA_PROTOCOL */
91226
91228}
91229
91230int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
91231{
91232 if (!pc->used) {
91233 log_error("WARNING: trying to send data to the closed connection %s",
91235 return -1;
91236 }
91237 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_NEW].packet != nullptr, -1,
91238 "Handler for PACKET_VOTE_NEW not installed");
91239 return pc->phs.handlers->send[PACKET_VOTE_NEW].packet(pc, packet);
91240}
91241
91242static inline void init_packet_vote_update(struct packet_vote_update *packet)
91243{
91244 memset(packet, 0, sizeof(*packet));
91245}
91246
91247#define free_packet_vote_update(_packet) (void) 0
91248#define destroy_packet_vote_update free
91249
91250#ifdef FREECIV_DELTA_PROTOCOL
91252{
91253 const struct packet_vote_update *key = (const struct packet_vote_update *) vkey;
91254 genhash_val_t result = 0;
91255
91256 result += key->vote_no;
91257
91258 result &= 0xFFFFFFFF;
91259 return result;
91260}
91261
91262static bool cmp_packet_vote_update_100(const void *vkey1, const void *vkey2)
91263{
91264 const struct packet_vote_update *old = (const struct packet_vote_update *) vkey1;
91265 const struct packet_vote_update *real_packet = (const struct packet_vote_update *) vkey2;
91266 bool differ;
91267
91268 differ = (old->vote_no != real_packet->vote_no);
91269
91270 return !differ;
91271}
91273#endif /* FREECIV_DELTA_PROTOCOL */
91274
91276{
91277#define FREE_PACKET_STRUCT(_packet) free_packet_vote_update(_packet)
91279
91280#ifdef FREECIV_JSON_CONNECTION
91281 struct plocation field_addr;
91282 {
91283 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91286 }
91287#endif /* FREECIV_JSON_CONNECTION */
91288
91289#ifdef FREECIV_JSON_CONNECTION
91290 field_addr.name = "vote_no";
91291#endif /* FREECIV_JSON_CONNECTION */
91292
91293 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91295 }
91296
91297 log_packet_detailed("packet_vote_update_100: got info about (%d)",
91298 real_packet->vote_no);
91299
91300#ifdef FREECIV_DELTA_PROTOCOL
91302 struct packet_vote_update *old;
91303 struct genhash **hash = pc->phs.received + PACKET_VOTE_UPDATE;
91304
91305 if (nullptr == *hash) {
91307 nullptr, nullptr, nullptr, destroy_packet_vote_update);
91308 }
91309
91310 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91311 *real_packet = *old;
91312 } else {
91313 /* packet is already initialized empty */
91314 log_packet_detailed(" no old info");
91315 }
91316
91317#ifdef FREECIV_JSON_CONNECTION
91318 field_addr.name = "fields";
91319#endif /* FREECIV_JSON_CONNECTION */
91320 DIO_BV_GET(&din, &field_addr, fields);
91321
91322 if (BV_ISSET(fields, 0)) {
91323 log_packet_detailed(" got field 'yes'");
91324
91325#ifdef FREECIV_JSON_CONNECTION
91326 field_addr.name = "yes";
91327#endif /* FREECIV_JSON_CONNECTION */
91328
91329 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
91331 }
91332 }
91333
91334 if (BV_ISSET(fields, 1)) {
91335 log_packet_detailed(" got field 'no'");
91336
91337#ifdef FREECIV_JSON_CONNECTION
91338 field_addr.name = "no";
91339#endif /* FREECIV_JSON_CONNECTION */
91340
91341 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
91343 }
91344 }
91345
91346 if (BV_ISSET(fields, 2)) {
91347 log_packet_detailed(" got field 'abstain'");
91348
91349#ifdef FREECIV_JSON_CONNECTION
91350 field_addr.name = "abstain";
91351#endif /* FREECIV_JSON_CONNECTION */
91352
91353 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
91355 }
91356 }
91357
91358 if (BV_ISSET(fields, 3)) {
91359 log_packet_detailed(" got field 'num_voters'");
91360
91361#ifdef FREECIV_JSON_CONNECTION
91362 field_addr.name = "num_voters";
91363#endif /* FREECIV_JSON_CONNECTION */
91364
91365 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
91366 RECEIVE_PACKET_FIELD_ERROR(num_voters);
91367 }
91368 }
91369
91370 if (nullptr == old) {
91371 old = fc_malloc(sizeof(*old));
91373 *old = *real_packet;
91375 } else {
91376 *old = *real_packet;
91377 }
91378
91379#else /* FREECIV_DELTA_PROTOCOL */
91380#ifdef FREECIV_JSON_CONNECTION
91381 field_addr.name = "yes";
91382#endif /* FREECIV_JSON_CONNECTION */
91383
91384 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
91386 }
91387
91388#ifdef FREECIV_JSON_CONNECTION
91389 field_addr.name = "no";
91390#endif /* FREECIV_JSON_CONNECTION */
91391
91392 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
91394 }
91395
91396#ifdef FREECIV_JSON_CONNECTION
91397 field_addr.name = "abstain";
91398#endif /* FREECIV_JSON_CONNECTION */
91399
91400 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
91402 }
91403
91404#ifdef FREECIV_JSON_CONNECTION
91405 field_addr.name = "num_voters";
91406#endif /* FREECIV_JSON_CONNECTION */
91407
91408 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
91409 RECEIVE_PACKET_FIELD_ERROR(num_voters);
91410 }
91411#endif /* FREECIV_DELTA_PROTOCOL */
91412
91414#undef FREE_PACKET_STRUCT
91415}
91416
91417static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
91418{
91419 const struct packet_vote_update *real_packet = packet;
91420 int e;
91422
91423 log_packet_detailed("packet_vote_update_100: sending info about (%d)",
91424 real_packet->vote_no);
91425
91426#ifdef FREECIV_DELTA_PROTOCOL
91428 struct packet_vote_update *old;
91429 bool differ;
91430 int different = 0;
91431 struct genhash **hash = pc->phs.sent + PACKET_VOTE_UPDATE;
91432
91433 if (nullptr == *hash) {
91435 nullptr, nullptr, nullptr, destroy_packet_vote_update);
91436 }
91437 BV_CLR_ALL(fields);
91438
91439 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91440 old = fc_malloc(sizeof(*old));
91441 /* temporary bitcopy just to insert correctly */
91442 *old = *real_packet;
91445 different = 1; /* Force to send. */
91446 }
91447
91448 differ = (old->yes != real_packet->yes);
91449 if (differ) {
91450 different++;
91451 BV_SET(fields, 0);
91452 }
91453
91454 differ = (old->no != real_packet->no);
91455 if (differ) {
91456 different++;
91457 BV_SET(fields, 1);
91458 }
91459
91460 differ = (old->abstain != real_packet->abstain);
91461 if (differ) {
91462 different++;
91463 BV_SET(fields, 2);
91464 }
91465
91466 differ = (old->num_voters != real_packet->num_voters);
91467 if (differ) {
91468 different++;
91469 BV_SET(fields, 3);
91470 }
91471
91472 if (different == 0) {
91473 log_packet_detailed(" no change -> discard");
91475 }
91476#endif /* FREECIV_DELTA_PROTOCOL */
91477
91478#ifdef FREECIV_JSON_CONNECTION
91479 struct plocation field_addr;
91480 {
91481 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91484 }
91485#endif /* FREECIV_JSON_CONNECTION */
91486
91487#ifdef FREECIV_JSON_CONNECTION
91488 field_addr.name = "vote_no";
91489#endif /* FREECIV_JSON_CONNECTION */
91490 e = 0;
91491
91492 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91493
91494 if (e) {
91495 log_packet_detailed("'vote_no' field error detected");
91496 }
91497
91498#ifdef FREECIV_DELTA_PROTOCOL
91499#ifdef FREECIV_JSON_CONNECTION
91500 field_addr.name = "fields";
91501#endif /* FREECIV_JSON_CONNECTION */
91502 e = 0;
91503 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91504 if (e) {
91505 log_packet_detailed("fields bitvector error detected");
91506 }
91507
91508 if (BV_ISSET(fields, 0)) {
91509 log_packet_detailed(" field 'yes' has changed");
91510
91511#ifdef FREECIV_JSON_CONNECTION
91512 field_addr.name = "yes";
91513#endif /* FREECIV_JSON_CONNECTION */
91514 e = 0;
91515
91516 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
91517
91518 if (e) {
91519 log_packet_detailed("'yes' field error detected");
91520 }
91521 }
91522
91523 if (BV_ISSET(fields, 1)) {
91524 log_packet_detailed(" field 'no' has changed");
91525
91526#ifdef FREECIV_JSON_CONNECTION
91527 field_addr.name = "no";
91528#endif /* FREECIV_JSON_CONNECTION */
91529 e = 0;
91530
91531 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
91532
91533 if (e) {
91534 log_packet_detailed("'no' field error detected");
91535 }
91536 }
91537
91538 if (BV_ISSET(fields, 2)) {
91539 log_packet_detailed(" field 'abstain' has changed");
91540
91541#ifdef FREECIV_JSON_CONNECTION
91542 field_addr.name = "abstain";
91543#endif /* FREECIV_JSON_CONNECTION */
91544 e = 0;
91545
91546 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
91547
91548 if (e) {
91549 log_packet_detailed("'abstain' field error detected");
91550 }
91551 }
91552
91553 if (BV_ISSET(fields, 3)) {
91554 log_packet_detailed(" field 'num_voters' has changed");
91555
91556#ifdef FREECIV_JSON_CONNECTION
91557 field_addr.name = "num_voters";
91558#endif /* FREECIV_JSON_CONNECTION */
91559 e = 0;
91560
91561 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
91562
91563 if (e) {
91564 log_packet_detailed("'num_voters' field error detected");
91565 }
91566 }
91567
91568 *old = *real_packet;
91569
91570#else /* FREECIV_DELTA_PROTOCOL */
91571#ifdef FREECIV_JSON_CONNECTION
91572 field_addr.name = "yes";
91573#endif /* FREECIV_JSON_CONNECTION */
91574 e = 0;
91575
91576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
91577
91578 if (e) {
91579 log_packet_detailed("'yes' field error detected");
91580 }
91581
91582#ifdef FREECIV_JSON_CONNECTION
91583 field_addr.name = "no";
91584#endif /* FREECIV_JSON_CONNECTION */
91585 e = 0;
91586
91587 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
91588
91589 if (e) {
91590 log_packet_detailed("'no' field error detected");
91591 }
91592
91593#ifdef FREECIV_JSON_CONNECTION
91594 field_addr.name = "abstain";
91595#endif /* FREECIV_JSON_CONNECTION */
91596 e = 0;
91597
91598 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
91599
91600 if (e) {
91601 log_packet_detailed("'abstain' field error detected");
91602 }
91603
91604#ifdef FREECIV_JSON_CONNECTION
91605 field_addr.name = "num_voters";
91606#endif /* FREECIV_JSON_CONNECTION */
91607 e = 0;
91608
91609 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
91610
91611 if (e) {
91612 log_packet_detailed("'num_voters' field error detected");
91613 }
91614#endif /* FREECIV_DELTA_PROTOCOL */
91615
91617}
91618
91620{
91621 if (!pc->used) {
91622 log_error("WARNING: trying to send data to the closed connection %s",
91624 return -1;
91625 }
91626 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet != nullptr, -1,
91627 "Handler for PACKET_VOTE_UPDATE not installed");
91628 return pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet(pc, packet);
91629}
91630
91631static inline void init_packet_vote_remove(struct packet_vote_remove *packet)
91632{
91633 memset(packet, 0, sizeof(*packet));
91634}
91635
91636#define free_packet_vote_remove(_packet) (void) 0
91637#define destroy_packet_vote_remove free
91638
91639#ifdef FREECIV_DELTA_PROTOCOL
91640#define hash_packet_vote_remove_100 hash_const
91641#define cmp_packet_vote_remove_100 cmp_const
91643#endif /* FREECIV_DELTA_PROTOCOL */
91644
91646{
91647#define FREE_PACKET_STRUCT(_packet) free_packet_vote_remove(_packet)
91649
91650#ifdef FREECIV_JSON_CONNECTION
91651 struct plocation field_addr;
91652 {
91653 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91656 }
91657#endif /* FREECIV_JSON_CONNECTION */
91658
91659 log_packet_detailed("packet_vote_remove_100: got info about ()");
91660
91661#ifdef FREECIV_DELTA_PROTOCOL
91663 struct packet_vote_remove *old;
91664 struct genhash **hash = pc->phs.received + PACKET_VOTE_REMOVE;
91665
91666 if (nullptr == *hash) {
91668 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
91669 }
91670
91671 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91672 *real_packet = *old;
91673 } else {
91674 /* packet is already initialized empty */
91675 log_packet_detailed(" no old info");
91676 }
91677
91678#ifdef FREECIV_JSON_CONNECTION
91679 field_addr.name = "fields";
91680#endif /* FREECIV_JSON_CONNECTION */
91681 DIO_BV_GET(&din, &field_addr, fields);
91682
91683 if (BV_ISSET(fields, 0)) {
91684 log_packet_detailed(" got field 'vote_no'");
91685
91686#ifdef FREECIV_JSON_CONNECTION
91687 field_addr.name = "vote_no";
91688#endif /* FREECIV_JSON_CONNECTION */
91689
91690 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91692 }
91693 }
91694
91695 if (nullptr == old) {
91696 old = fc_malloc(sizeof(*old));
91698 *old = *real_packet;
91700 } else {
91701 *old = *real_packet;
91702 }
91703
91704#else /* FREECIV_DELTA_PROTOCOL */
91705#ifdef FREECIV_JSON_CONNECTION
91706 field_addr.name = "vote_no";
91707#endif /* FREECIV_JSON_CONNECTION */
91708
91709 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91711 }
91712#endif /* FREECIV_DELTA_PROTOCOL */
91713
91715#undef FREE_PACKET_STRUCT
91716}
91717
91718static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
91719{
91720 const struct packet_vote_remove *real_packet = packet;
91721 int e;
91723
91724 log_packet_detailed("packet_vote_remove_100: sending info about ()");
91725
91726#ifdef FREECIV_DELTA_PROTOCOL
91728 struct packet_vote_remove *old;
91729 bool differ;
91730 struct genhash **hash = pc->phs.sent + PACKET_VOTE_REMOVE;
91731
91732 if (nullptr == *hash) {
91734 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
91735 }
91736 BV_CLR_ALL(fields);
91737
91738 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91739 old = fc_malloc(sizeof(*old));
91740 /* temporary bitcopy just to insert correctly */
91741 *old = *real_packet;
91744 }
91745
91746 differ = (old->vote_no != real_packet->vote_no);
91747 if (differ) {
91748 BV_SET(fields, 0);
91749 }
91750#endif /* FREECIV_DELTA_PROTOCOL */
91751
91752#ifdef FREECIV_JSON_CONNECTION
91753 struct plocation field_addr;
91754 {
91755 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91758 }
91759#endif /* FREECIV_JSON_CONNECTION */
91760
91761#ifdef FREECIV_DELTA_PROTOCOL
91762#ifdef FREECIV_JSON_CONNECTION
91763 field_addr.name = "fields";
91764#endif /* FREECIV_JSON_CONNECTION */
91765 e = 0;
91766 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91767 if (e) {
91768 log_packet_detailed("fields bitvector error detected");
91769 }
91770
91771 if (BV_ISSET(fields, 0)) {
91772 log_packet_detailed(" field 'vote_no' has changed");
91773
91774#ifdef FREECIV_JSON_CONNECTION
91775 field_addr.name = "vote_no";
91776#endif /* FREECIV_JSON_CONNECTION */
91777 e = 0;
91778
91779 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91780
91781 if (e) {
91782 log_packet_detailed("'vote_no' field error detected");
91783 }
91784 }
91785
91786 *old = *real_packet;
91787
91788#else /* FREECIV_DELTA_PROTOCOL */
91789#ifdef FREECIV_JSON_CONNECTION
91790 field_addr.name = "vote_no";
91791#endif /* FREECIV_JSON_CONNECTION */
91792 e = 0;
91793
91794 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91795
91796 if (e) {
91797 log_packet_detailed("'vote_no' field error detected");
91798 }
91799#endif /* FREECIV_DELTA_PROTOCOL */
91800
91802}
91803
91805{
91806 if (!pc->used) {
91807 log_error("WARNING: trying to send data to the closed connection %s",
91809 return -1;
91810 }
91811 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet != nullptr, -1,
91812 "Handler for PACKET_VOTE_REMOVE not installed");
91813 return pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet(pc, packet);
91814}
91815
91816static inline void init_packet_vote_resolve(struct packet_vote_resolve *packet)
91817{
91818 memset(packet, 0, sizeof(*packet));
91819}
91820
91821#define free_packet_vote_resolve(_packet) (void) 0
91822#define destroy_packet_vote_resolve free
91823
91824#ifdef FREECIV_DELTA_PROTOCOL
91825#define hash_packet_vote_resolve_100 hash_const
91826#define cmp_packet_vote_resolve_100 cmp_const
91828#endif /* FREECIV_DELTA_PROTOCOL */
91829
91831{
91832#define FREE_PACKET_STRUCT(_packet) free_packet_vote_resolve(_packet)
91834
91835#ifdef FREECIV_JSON_CONNECTION
91836 struct plocation field_addr;
91837 {
91838 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91841 }
91842#endif /* FREECIV_JSON_CONNECTION */
91843
91844 log_packet_detailed("packet_vote_resolve_100: got info about ()");
91845
91846#ifdef FREECIV_DELTA_PROTOCOL
91848 struct packet_vote_resolve *old;
91849 struct genhash **hash = pc->phs.received + PACKET_VOTE_RESOLVE;
91850
91851 if (nullptr == *hash) {
91853 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
91854 }
91855
91856 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91857 *real_packet = *old;
91858 } else {
91859 /* packet is already initialized empty */
91860 log_packet_detailed(" no old info");
91861 }
91862
91863#ifdef FREECIV_JSON_CONNECTION
91864 field_addr.name = "fields";
91865#endif /* FREECIV_JSON_CONNECTION */
91866 DIO_BV_GET(&din, &field_addr, fields);
91867
91868 if (BV_ISSET(fields, 0)) {
91869 log_packet_detailed(" got field 'vote_no'");
91870
91871#ifdef FREECIV_JSON_CONNECTION
91872 field_addr.name = "vote_no";
91873#endif /* FREECIV_JSON_CONNECTION */
91874
91875 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91877 }
91878 }
91879
91880 real_packet->passed = BV_ISSET(fields, 1);
91881
91882 if (nullptr == old) {
91883 old = fc_malloc(sizeof(*old));
91885 *old = *real_packet;
91887 } else {
91888 *old = *real_packet;
91889 }
91890
91891#else /* FREECIV_DELTA_PROTOCOL */
91892#ifdef FREECIV_JSON_CONNECTION
91893 field_addr.name = "vote_no";
91894#endif /* FREECIV_JSON_CONNECTION */
91895
91896 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91898 }
91899
91900#ifdef FREECIV_JSON_CONNECTION
91901 field_addr.name = "passed";
91902#endif /* FREECIV_JSON_CONNECTION */
91903
91904 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->passed)) {
91906 }
91907#endif /* FREECIV_DELTA_PROTOCOL */
91908
91910#undef FREE_PACKET_STRUCT
91911}
91912
91913static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
91914{
91915 const struct packet_vote_resolve *real_packet = packet;
91916 int e;
91918
91919 log_packet_detailed("packet_vote_resolve_100: sending info about ()");
91920
91921#ifdef FREECIV_DELTA_PROTOCOL
91923 struct packet_vote_resolve *old;
91924 bool differ;
91925 struct genhash **hash = pc->phs.sent + PACKET_VOTE_RESOLVE;
91926
91927 if (nullptr == *hash) {
91929 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
91930 }
91931 BV_CLR_ALL(fields);
91932
91933 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91934 old = fc_malloc(sizeof(*old));
91935 /* temporary bitcopy just to insert correctly */
91936 *old = *real_packet;
91939 }
91940
91941 differ = (old->vote_no != real_packet->vote_no);
91942 if (differ) {
91943 BV_SET(fields, 0);
91944 }
91945
91946 /* folded into head */
91947 if (real_packet->passed) {
91948 BV_SET(fields, 1);
91949 }
91950#endif /* FREECIV_DELTA_PROTOCOL */
91951
91952#ifdef FREECIV_JSON_CONNECTION
91953 struct plocation field_addr;
91954 {
91955 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91958 }
91959#endif /* FREECIV_JSON_CONNECTION */
91960
91961#ifdef FREECIV_DELTA_PROTOCOL
91962#ifdef FREECIV_JSON_CONNECTION
91963 field_addr.name = "fields";
91964#endif /* FREECIV_JSON_CONNECTION */
91965 e = 0;
91966 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91967 if (e) {
91968 log_packet_detailed("fields bitvector error detected");
91969 }
91970
91971 if (BV_ISSET(fields, 0)) {
91972 log_packet_detailed(" field 'vote_no' has changed");
91973
91974#ifdef FREECIV_JSON_CONNECTION
91975 field_addr.name = "vote_no";
91976#endif /* FREECIV_JSON_CONNECTION */
91977 e = 0;
91978
91979 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91980
91981 if (e) {
91982 log_packet_detailed("'vote_no' field error detected");
91983 }
91984 }
91985
91986 /* field 1 is folded into the header */
91987
91988 *old = *real_packet;
91989
91990#else /* FREECIV_DELTA_PROTOCOL */
91991#ifdef FREECIV_JSON_CONNECTION
91992 field_addr.name = "vote_no";
91993#endif /* FREECIV_JSON_CONNECTION */
91994 e = 0;
91995
91996 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91997
91998 if (e) {
91999 log_packet_detailed("'vote_no' field error detected");
92000 }
92001
92002#ifdef FREECIV_JSON_CONNECTION
92003 field_addr.name = "passed";
92004#endif /* FREECIV_JSON_CONNECTION */
92005 e = 0;
92006
92007 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->passed);
92008
92009 if (e) {
92010 log_packet_detailed("'passed' field error detected");
92011 }
92012#endif /* FREECIV_DELTA_PROTOCOL */
92013
92015}
92016
92018{
92019 if (!pc->used) {
92020 log_error("WARNING: trying to send data to the closed connection %s",
92022 return -1;
92023 }
92024 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet != nullptr, -1,
92025 "Handler for PACKET_VOTE_RESOLVE not installed");
92026 return pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet(pc, packet);
92027}
92028
92029static inline void init_packet_vote_submit(struct packet_vote_submit *packet)
92030{
92031 memset(packet, 0, sizeof(*packet));
92032}
92033
92034#define free_packet_vote_submit(_packet) (void) 0
92035#define destroy_packet_vote_submit free
92036
92038{
92039#define FREE_PACKET_STRUCT(_packet) free_packet_vote_submit(_packet)
92041
92042#ifdef FREECIV_JSON_CONNECTION
92043 struct plocation field_addr;
92044 {
92045 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92048 }
92049#endif /* FREECIV_JSON_CONNECTION */
92050
92051 log_packet_detailed("packet_vote_submit_100: got info about ()");
92052
92053#ifdef FREECIV_JSON_CONNECTION
92054 field_addr.name = "vote_no";
92055#endif /* FREECIV_JSON_CONNECTION */
92056
92057 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
92059 }
92060
92061#ifdef FREECIV_JSON_CONNECTION
92062 field_addr.name = "value";
92063#endif /* FREECIV_JSON_CONNECTION */
92064
92065 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->value)) {
92067 }
92068
92070#undef FREE_PACKET_STRUCT
92071}
92072
92073static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
92074{
92075 const struct packet_vote_submit *real_packet = packet;
92076 int e;
92078
92079 log_packet_detailed("packet_vote_submit_100: sending info about ()");
92080
92081#ifdef FREECIV_JSON_CONNECTION
92082 struct plocation field_addr;
92083 {
92084 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92087 }
92088#endif /* FREECIV_JSON_CONNECTION */
92089
92090#ifdef FREECIV_JSON_CONNECTION
92091 field_addr.name = "vote_no";
92092#endif /* FREECIV_JSON_CONNECTION */
92093 e = 0;
92094
92095 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
92096
92097 if (e) {
92098 log_packet_detailed("'vote_no' field error detected");
92099 }
92100
92101#ifdef FREECIV_JSON_CONNECTION
92102 field_addr.name = "value";
92103#endif /* FREECIV_JSON_CONNECTION */
92104 e = 0;
92105
92106 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->value);
92107
92108 if (e) {
92109 log_packet_detailed("'value' field error detected");
92110 }
92111
92113}
92114
92116{
92117 if (!pc->used) {
92118 log_error("WARNING: trying to send data to the closed connection %s",
92120 return -1;
92121 }
92122 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet != nullptr, -1,
92123 "Handler for PACKET_VOTE_SUBMIT not installed");
92124 return pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet(pc, packet);
92125}
92126
92127static inline void init_packet_edit_mode(struct packet_edit_mode *packet)
92128{
92129 memset(packet, 0, sizeof(*packet));
92130}
92131
92132#define free_packet_edit_mode(_packet) (void) 0
92133#define destroy_packet_edit_mode free
92134
92135#ifdef FREECIV_DELTA_PROTOCOL
92136#define hash_packet_edit_mode_100 hash_const
92137#define cmp_packet_edit_mode_100 cmp_const
92139#endif /* FREECIV_DELTA_PROTOCOL */
92140
92142{
92143#define FREE_PACKET_STRUCT(_packet) free_packet_edit_mode(_packet)
92145
92146#ifdef FREECIV_JSON_CONNECTION
92147 struct plocation field_addr;
92148 {
92149 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92152 }
92153#endif /* FREECIV_JSON_CONNECTION */
92154
92155 log_packet_detailed("packet_edit_mode_100: got info about ()");
92156
92157#ifdef FREECIV_DELTA_PROTOCOL
92159 struct packet_edit_mode *old;
92160 struct genhash **hash = pc->phs.received + PACKET_EDIT_MODE;
92161
92162 if (nullptr == *hash) {
92164 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
92165 }
92166
92167 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92168 *real_packet = *old;
92169 } else {
92170 /* packet is already initialized empty */
92171 log_packet_detailed(" no old info");
92172 }
92173
92174#ifdef FREECIV_JSON_CONNECTION
92175 field_addr.name = "fields";
92176#endif /* FREECIV_JSON_CONNECTION */
92177 DIO_BV_GET(&din, &field_addr, fields);
92178
92179 real_packet->state = BV_ISSET(fields, 0);
92180
92181 if (nullptr == old) {
92182 old = fc_malloc(sizeof(*old));
92184 *old = *real_packet;
92186 } else {
92187 *old = *real_packet;
92188 }
92189
92190#else /* FREECIV_DELTA_PROTOCOL */
92191#ifdef FREECIV_JSON_CONNECTION
92192 field_addr.name = "state";
92193#endif /* FREECIV_JSON_CONNECTION */
92194
92195 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->state)) {
92197 }
92198#endif /* FREECIV_DELTA_PROTOCOL */
92199
92201#undef FREE_PACKET_STRUCT
92202}
92203
92204static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
92205{
92206 const struct packet_edit_mode *real_packet = packet;
92207 int e;
92209
92210 log_packet_detailed("packet_edit_mode_100: sending info about ()");
92211
92212#ifdef FREECIV_DELTA_PROTOCOL
92214 struct packet_edit_mode *old;
92215 struct genhash **hash = pc->phs.sent + PACKET_EDIT_MODE;
92216
92217 if (nullptr == *hash) {
92219 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
92220 }
92221 BV_CLR_ALL(fields);
92222
92223 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92224 old = fc_malloc(sizeof(*old));
92225 /* temporary bitcopy just to insert correctly */
92226 *old = *real_packet;
92229 }
92230
92231 /* folded into head */
92232 if (real_packet->state) {
92233 BV_SET(fields, 0);
92234 }
92235#endif /* FREECIV_DELTA_PROTOCOL */
92236
92237#ifdef FREECIV_JSON_CONNECTION
92238 struct plocation field_addr;
92239 {
92240 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92243 }
92244#endif /* FREECIV_JSON_CONNECTION */
92245
92246#ifdef FREECIV_DELTA_PROTOCOL
92247#ifdef FREECIV_JSON_CONNECTION
92248 field_addr.name = "fields";
92249#endif /* FREECIV_JSON_CONNECTION */
92250 e = 0;
92251 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92252 if (e) {
92253 log_packet_detailed("fields bitvector error detected");
92254 }
92255
92256 /* field 0 is folded into the header */
92257
92258 *old = *real_packet;
92259
92260#else /* FREECIV_DELTA_PROTOCOL */
92261#ifdef FREECIV_JSON_CONNECTION
92262 field_addr.name = "state";
92263#endif /* FREECIV_JSON_CONNECTION */
92264 e = 0;
92265
92266 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->state);
92267
92268 if (e) {
92269 log_packet_detailed("'state' field error detected");
92270 }
92271#endif /* FREECIV_DELTA_PROTOCOL */
92272
92274}
92275
92276int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
92277{
92278 if (!pc->used) {
92279 log_error("WARNING: trying to send data to the closed connection %s",
92281 return -1;
92282 }
92283 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_MODE].packet != nullptr, -1,
92284 "Handler for PACKET_EDIT_MODE not installed");
92285 return pc->phs.handlers->send[PACKET_EDIT_MODE].packet(pc, packet);
92286}
92287
92288int dsend_packet_edit_mode(struct connection *pc, bool state)
92289{
92290 struct packet_edit_mode packet, *real_packet = &packet;
92291
92293
92295}
92296
92298{
92299 memset(packet, 0, sizeof(*packet));
92300}
92301
92302#define free_packet_edit_recalculate_borders(_packet) (void) 0
92303#define destroy_packet_edit_recalculate_borders free
92304
92306{
92307#define FREE_PACKET_STRUCT(_packet) free_packet_edit_recalculate_borders(_packet)
92309
92310 log_packet_detailed("packet_edit_recalculate_borders_100: got info about ()");
92311
92312 real_packet->__dummy = 0xff;
92313
92315#undef FREE_PACKET_STRUCT
92316}
92317
92319{
92321
92322 log_packet_detailed("packet_edit_recalculate_borders_100: sending info about ()");
92323
92325}
92326
92328{
92329 if (!pc->used) {
92330 log_error("WARNING: trying to send data to the closed connection %s",
92332 return -1;
92333 }
92334 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet != nullptr, -1,
92335 "Handler for PACKET_EDIT_RECALCULATE_BORDERS not installed");
92336 return pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet(pc);
92337}
92338
92340{
92341 memset(packet, 0, sizeof(*packet));
92342}
92343
92344#define free_packet_edit_check_tiles(_packet) (void) 0
92345#define destroy_packet_edit_check_tiles free
92346
92348{
92349#define FREE_PACKET_STRUCT(_packet) free_packet_edit_check_tiles(_packet)
92351
92352 log_packet_detailed("packet_edit_check_tiles_100: got info about ()");
92353
92354 real_packet->__dummy = 0xff;
92355
92357#undef FREE_PACKET_STRUCT
92358}
92359
92361{
92363
92364 log_packet_detailed("packet_edit_check_tiles_100: sending info about ()");
92365
92367}
92368
92370{
92371 if (!pc->used) {
92372 log_error("WARNING: trying to send data to the closed connection %s",
92374 return -1;
92375 }
92376 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet != nullptr, -1,
92377 "Handler for PACKET_EDIT_CHECK_TILES not installed");
92378 return pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet(pc);
92379}
92380
92382{
92383 memset(packet, 0, sizeof(*packet));
92384}
92385
92386#define free_packet_edit_toggle_fogofwar(_packet) (void) 0
92387#define destroy_packet_edit_toggle_fogofwar free
92388
92389#ifdef FREECIV_DELTA_PROTOCOL
92390#define hash_packet_edit_toggle_fogofwar_100 hash_const
92391#define cmp_packet_edit_toggle_fogofwar_100 cmp_const
92393#endif /* FREECIV_DELTA_PROTOCOL */
92394
92396{
92397#define FREE_PACKET_STRUCT(_packet) free_packet_edit_toggle_fogofwar(_packet)
92399
92400#ifdef FREECIV_JSON_CONNECTION
92401 struct plocation field_addr;
92402 {
92403 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92406 }
92407#endif /* FREECIV_JSON_CONNECTION */
92408
92409 log_packet_detailed("packet_edit_toggle_fogofwar_100: got info about ()");
92410
92411#ifdef FREECIV_DELTA_PROTOCOL
92414 struct genhash **hash = pc->phs.received + PACKET_EDIT_TOGGLE_FOGOFWAR;
92415
92416 if (nullptr == *hash) {
92418 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
92419 }
92420
92421 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92422 *real_packet = *old;
92423 } else {
92424 /* packet is already initialized empty */
92425 log_packet_detailed(" no old info");
92426 }
92427
92428#ifdef FREECIV_JSON_CONNECTION
92429 field_addr.name = "fields";
92430#endif /* FREECIV_JSON_CONNECTION */
92431 DIO_BV_GET(&din, &field_addr, fields);
92432
92433 if (BV_ISSET(fields, 0)) {
92434 log_packet_detailed(" got field 'player'");
92435
92436#ifdef FREECIV_JSON_CONNECTION
92437 field_addr.name = "player";
92438#endif /* FREECIV_JSON_CONNECTION */
92439
92440 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
92442 }
92443 }
92444
92445 if (nullptr == old) {
92446 old = fc_malloc(sizeof(*old));
92448 *old = *real_packet;
92450 } else {
92451 *old = *real_packet;
92452 }
92453
92454#else /* FREECIV_DELTA_PROTOCOL */
92455#ifdef FREECIV_JSON_CONNECTION
92456 field_addr.name = "player";
92457#endif /* FREECIV_JSON_CONNECTION */
92458
92459 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
92461 }
92462#endif /* FREECIV_DELTA_PROTOCOL */
92463
92465#undef FREE_PACKET_STRUCT
92466}
92467
92469{
92470 const struct packet_edit_toggle_fogofwar *real_packet = packet;
92471 int e;
92473
92474 log_packet_detailed("packet_edit_toggle_fogofwar_100: sending info about ()");
92475
92476#ifdef FREECIV_DELTA_PROTOCOL
92479 bool differ;
92480 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TOGGLE_FOGOFWAR;
92481
92482 if (nullptr == *hash) {
92484 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
92485 }
92486 BV_CLR_ALL(fields);
92487
92488 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92489 old = fc_malloc(sizeof(*old));
92490 /* temporary bitcopy just to insert correctly */
92491 *old = *real_packet;
92494 }
92495
92496 differ = (old->player != real_packet->player);
92497 if (differ) {
92498 BV_SET(fields, 0);
92499 }
92500#endif /* FREECIV_DELTA_PROTOCOL */
92501
92502#ifdef FREECIV_JSON_CONNECTION
92503 struct plocation field_addr;
92504 {
92505 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92508 }
92509#endif /* FREECIV_JSON_CONNECTION */
92510
92511#ifdef FREECIV_DELTA_PROTOCOL
92512#ifdef FREECIV_JSON_CONNECTION
92513 field_addr.name = "fields";
92514#endif /* FREECIV_JSON_CONNECTION */
92515 e = 0;
92516 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92517 if (e) {
92518 log_packet_detailed("fields bitvector error detected");
92519 }
92520
92521 if (BV_ISSET(fields, 0)) {
92522 log_packet_detailed(" field 'player' has changed");
92523
92524#ifdef FREECIV_JSON_CONNECTION
92525 field_addr.name = "player";
92526#endif /* FREECIV_JSON_CONNECTION */
92527 e = 0;
92528
92529 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
92530
92531 if (e) {
92532 log_packet_detailed("'player' field error detected");
92533 }
92534 }
92535
92536 *old = *real_packet;
92537
92538#else /* FREECIV_DELTA_PROTOCOL */
92539#ifdef FREECIV_JSON_CONNECTION
92540 field_addr.name = "player";
92541#endif /* FREECIV_JSON_CONNECTION */
92542 e = 0;
92543
92544 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
92545
92546 if (e) {
92547 log_packet_detailed("'player' field error detected");
92548 }
92549#endif /* FREECIV_DELTA_PROTOCOL */
92550
92552}
92553
92555{
92556 if (!pc->used) {
92557 log_error("WARNING: trying to send data to the closed connection %s",
92559 return -1;
92560 }
92561 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet != nullptr, -1,
92562 "Handler for PACKET_EDIT_TOGGLE_FOGOFWAR not installed");
92563 return pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet(pc, packet);
92564}
92565
92567{
92568 struct packet_edit_toggle_fogofwar packet, *real_packet = &packet;
92569
92571
92573}
92574
92576{
92577 memset(packet, 0, sizeof(*packet));
92578}
92579
92580#define free_packet_edit_fogofwar_state(_packet) (void) 0
92581#define destroy_packet_edit_fogofwar_state free
92582
92583#ifdef FREECIV_DELTA_PROTOCOL
92584#define hash_packet_edit_fogofwar_state_100 hash_const
92585#define cmp_packet_edit_fogofwar_state_100 cmp_const
92587#endif /* FREECIV_DELTA_PROTOCOL */
92588
92590{
92591#define FREE_PACKET_STRUCT(_packet) free_packet_edit_fogofwar_state(_packet)
92593
92594#ifdef FREECIV_JSON_CONNECTION
92595 struct plocation field_addr;
92596 {
92597 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92600 }
92601#endif /* FREECIV_JSON_CONNECTION */
92602
92603 log_packet_detailed("packet_edit_fogofwar_state_100: got info about ()");
92604
92605#ifdef FREECIV_DELTA_PROTOCOL
92608 struct genhash **hash = pc->phs.received + PACKET_EDIT_FOGOFWAR_STATE;
92609
92610 if (nullptr == *hash) {
92612 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
92613 }
92614
92615 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92616 *real_packet = *old;
92617 } else {
92618 /* packet is already initialized empty */
92619 log_packet_detailed(" no old info");
92620 }
92621
92622#ifdef FREECIV_JSON_CONNECTION
92623 field_addr.name = "fields";
92624#endif /* FREECIV_JSON_CONNECTION */
92625 DIO_BV_GET(&din, &field_addr, fields);
92626
92627 real_packet->enabled = BV_ISSET(fields, 0);
92628
92629 if (nullptr == old) {
92630 old = fc_malloc(sizeof(*old));
92632 *old = *real_packet;
92634 } else {
92635 *old = *real_packet;
92636 }
92637
92638#else /* FREECIV_DELTA_PROTOCOL */
92639#ifdef FREECIV_JSON_CONNECTION
92640 field_addr.name = "enabled";
92641#endif /* FREECIV_JSON_CONNECTION */
92642
92643 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
92645 }
92646#endif /* FREECIV_DELTA_PROTOCOL */
92647
92649#undef FREE_PACKET_STRUCT
92650}
92651
92653{
92654 const struct packet_edit_fogofwar_state *real_packet = packet;
92655 int e;
92657
92658 log_packet_detailed("packet_edit_fogofwar_state_100: sending info about ()");
92659
92660#ifdef FREECIV_DELTA_PROTOCOL
92663 struct genhash **hash = pc->phs.sent + PACKET_EDIT_FOGOFWAR_STATE;
92664
92665 if (nullptr == *hash) {
92667 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
92668 }
92669 BV_CLR_ALL(fields);
92670
92671 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92672 old = fc_malloc(sizeof(*old));
92673 /* temporary bitcopy just to insert correctly */
92674 *old = *real_packet;
92677 }
92678
92679 /* folded into head */
92680 if (real_packet->enabled) {
92681 BV_SET(fields, 0);
92682 }
92683#endif /* FREECIV_DELTA_PROTOCOL */
92684
92685#ifdef FREECIV_JSON_CONNECTION
92686 struct plocation field_addr;
92687 {
92688 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92691 }
92692#endif /* FREECIV_JSON_CONNECTION */
92693
92694#ifdef FREECIV_DELTA_PROTOCOL
92695#ifdef FREECIV_JSON_CONNECTION
92696 field_addr.name = "fields";
92697#endif /* FREECIV_JSON_CONNECTION */
92698 e = 0;
92699 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92700 if (e) {
92701 log_packet_detailed("fields bitvector error detected");
92702 }
92703
92704 /* field 0 is folded into the header */
92705
92706 *old = *real_packet;
92707
92708#else /* FREECIV_DELTA_PROTOCOL */
92709#ifdef FREECIV_JSON_CONNECTION
92710 field_addr.name = "enabled";
92711#endif /* FREECIV_JSON_CONNECTION */
92712 e = 0;
92713
92714 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
92715
92716 if (e) {
92717 log_packet_detailed("'enabled' field error detected");
92718 }
92719#endif /* FREECIV_DELTA_PROTOCOL */
92720
92722}
92723
92725{
92726 if (!pc->used) {
92727 log_error("WARNING: trying to send data to the closed connection %s",
92729 return -1;
92730 }
92731 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet != nullptr, -1,
92732 "Handler for PACKET_EDIT_FOGOFWAR_STATE not installed");
92733 return pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet(pc, packet);
92734}
92735
92737{
92738 conn_list_iterate(dest, pconn) {
92741}
92742
92744{
92745 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
92746
92748
92750}
92751
92753{
92754 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
92755
92757
92759}
92760
92762{
92763 memset(packet, 0, sizeof(*packet));
92764}
92765
92766#define free_packet_edit_tile_terrain(_packet) (void) 0
92767#define destroy_packet_edit_tile_terrain free
92768
92769#ifdef FREECIV_DELTA_PROTOCOL
92771{
92772 const struct packet_edit_tile_terrain *key = (const struct packet_edit_tile_terrain *) vkey;
92773 genhash_val_t result = 0;
92774
92775 result += key->tile;
92776
92777 result &= 0xFFFFFFFF;
92778 return result;
92779}
92780
92781static bool cmp_packet_edit_tile_terrain_100(const void *vkey1, const void *vkey2)
92782{
92783 const struct packet_edit_tile_terrain *old = (const struct packet_edit_tile_terrain *) vkey1;
92784 const struct packet_edit_tile_terrain *real_packet = (const struct packet_edit_tile_terrain *) vkey2;
92785 bool differ;
92786
92787 differ = (old->tile != real_packet->tile);
92788
92789 return !differ;
92790}
92792#endif /* FREECIV_DELTA_PROTOCOL */
92793
92795{
92796#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_terrain(_packet)
92798
92799#ifdef FREECIV_JSON_CONNECTION
92800 struct plocation field_addr;
92801 {
92802 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92805 }
92806#endif /* FREECIV_JSON_CONNECTION */
92807
92808#ifdef FREECIV_JSON_CONNECTION
92809 field_addr.name = "tile";
92810#endif /* FREECIV_JSON_CONNECTION */
92811
92812 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
92814 }
92815
92816 log_packet_detailed("packet_edit_tile_terrain_100: got info about (%d)",
92817 real_packet->tile);
92818
92819#ifdef FREECIV_DELTA_PROTOCOL
92822 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_TERRAIN;
92823
92824 if (nullptr == *hash) {
92826 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
92827 }
92828
92829 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92830 *real_packet = *old;
92831 } else {
92832 /* packet is already initialized empty */
92833 log_packet_detailed(" no old info");
92834 }
92835
92836#ifdef FREECIV_JSON_CONNECTION
92837 field_addr.name = "fields";
92838#endif /* FREECIV_JSON_CONNECTION */
92839 DIO_BV_GET(&din, &field_addr, fields);
92840
92841 if (BV_ISSET(fields, 0)) {
92842 log_packet_detailed(" got field 'terrain'");
92843
92844#ifdef FREECIV_JSON_CONNECTION
92845 field_addr.name = "terrain";
92846#endif /* FREECIV_JSON_CONNECTION */
92847
92848 {
92849 int readin;
92850
92851 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92853 }
92854 real_packet->terrain = readin;
92855 }
92856 }
92857
92858 if (BV_ISSET(fields, 1)) {
92859 log_packet_detailed(" got field 'size'");
92860
92861#ifdef FREECIV_JSON_CONNECTION
92862 field_addr.name = "size";
92863#endif /* FREECIV_JSON_CONNECTION */
92864
92865 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92867 }
92868 }
92869
92870 if (nullptr == old) {
92871 old = fc_malloc(sizeof(*old));
92873 *old = *real_packet;
92875 } else {
92876 *old = *real_packet;
92877 }
92878
92879#else /* FREECIV_DELTA_PROTOCOL */
92880#ifdef FREECIV_JSON_CONNECTION
92881 field_addr.name = "terrain";
92882#endif /* FREECIV_JSON_CONNECTION */
92883
92884 {
92885 int readin;
92886
92887 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92889 }
92890 real_packet->terrain = readin;
92891 }
92892
92893#ifdef FREECIV_JSON_CONNECTION
92894 field_addr.name = "size";
92895#endif /* FREECIV_JSON_CONNECTION */
92896
92897 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92899 }
92900#endif /* FREECIV_DELTA_PROTOCOL */
92901
92903#undef FREE_PACKET_STRUCT
92904}
92905
92907{
92908 const struct packet_edit_tile_terrain *real_packet = packet;
92909 int e;
92911
92912 log_packet_detailed("packet_edit_tile_terrain_100: sending info about (%d)",
92913 real_packet->tile);
92914
92915#ifdef FREECIV_DELTA_PROTOCOL
92918 bool differ;
92919 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_TERRAIN;
92920
92921 if (nullptr == *hash) {
92923 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
92924 }
92925 BV_CLR_ALL(fields);
92926
92927 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92928 old = fc_malloc(sizeof(*old));
92929 /* temporary bitcopy just to insert correctly */
92930 *old = *real_packet;
92933 }
92934
92935 differ = (old->terrain != real_packet->terrain);
92936 if (differ) {
92937 BV_SET(fields, 0);
92938 }
92939
92940 differ = (old->size != real_packet->size);
92941 if (differ) {
92942 BV_SET(fields, 1);
92943 }
92944#endif /* FREECIV_DELTA_PROTOCOL */
92945
92946#ifdef FREECIV_JSON_CONNECTION
92947 struct plocation field_addr;
92948 {
92949 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92952 }
92953#endif /* FREECIV_JSON_CONNECTION */
92954
92955#ifdef FREECIV_JSON_CONNECTION
92956 field_addr.name = "tile";
92957#endif /* FREECIV_JSON_CONNECTION */
92958 e = 0;
92959
92960 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
92961
92962 if (e) {
92963 log_packet_detailed("'tile' field error detected");
92964 }
92965
92966#ifdef FREECIV_DELTA_PROTOCOL
92967#ifdef FREECIV_JSON_CONNECTION
92968 field_addr.name = "fields";
92969#endif /* FREECIV_JSON_CONNECTION */
92970 e = 0;
92971 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92972 if (e) {
92973 log_packet_detailed("fields bitvector error detected");
92974 }
92975
92976 if (BV_ISSET(fields, 0)) {
92977 log_packet_detailed(" field 'terrain' has changed");
92978
92979#ifdef FREECIV_JSON_CONNECTION
92980 field_addr.name = "terrain";
92981#endif /* FREECIV_JSON_CONNECTION */
92982 e = 0;
92983
92984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
92985
92986 if (e) {
92987 log_packet_detailed("'terrain' field error detected");
92988 }
92989 }
92990
92991 if (BV_ISSET(fields, 1)) {
92992 log_packet_detailed(" field 'size' has changed");
92993
92994#ifdef FREECIV_JSON_CONNECTION
92995 field_addr.name = "size";
92996#endif /* FREECIV_JSON_CONNECTION */
92997 e = 0;
92998
92999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
93000
93001 if (e) {
93002 log_packet_detailed("'size' field error detected");
93003 }
93004 }
93005
93006 *old = *real_packet;
93007
93008#else /* FREECIV_DELTA_PROTOCOL */
93009#ifdef FREECIV_JSON_CONNECTION
93010 field_addr.name = "terrain";
93011#endif /* FREECIV_JSON_CONNECTION */
93012 e = 0;
93013
93014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
93015
93016 if (e) {
93017 log_packet_detailed("'terrain' field error detected");
93018 }
93019
93020#ifdef FREECIV_JSON_CONNECTION
93021 field_addr.name = "size";
93022#endif /* FREECIV_JSON_CONNECTION */
93023 e = 0;
93024
93025 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
93026
93027 if (e) {
93028 log_packet_detailed("'size' field error detected");
93029 }
93030#endif /* FREECIV_DELTA_PROTOCOL */
93031
93033}
93034
93036{
93037 if (!pc->used) {
93038 log_error("WARNING: trying to send data to the closed connection %s",
93040 return -1;
93041 }
93042 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet != nullptr, -1,
93043 "Handler for PACKET_EDIT_TILE_TERRAIN not installed");
93044 return pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet(pc, packet);
93045}
93046
93048{
93049 struct packet_edit_tile_terrain packet, *real_packet = &packet;
93050
93052 real_packet->terrain = terrain;
93053 real_packet->size = size;
93054
93056}
93057
93058static inline void init_packet_edit_tile_extra(struct packet_edit_tile_extra *packet)
93059{
93060 memset(packet, 0, sizeof(*packet));
93061}
93062
93063#define free_packet_edit_tile_extra(_packet) (void) 0
93064#define destroy_packet_edit_tile_extra free
93065
93066#ifdef FREECIV_DELTA_PROTOCOL
93068{
93069 const struct packet_edit_tile_extra *key = (const struct packet_edit_tile_extra *) vkey;
93070 genhash_val_t result = 0;
93071
93072 result += key->tile;
93073
93074 result &= 0xFFFFFFFF;
93075 return result;
93076}
93077
93078static bool cmp_packet_edit_tile_extra_100(const void *vkey1, const void *vkey2)
93079{
93080 const struct packet_edit_tile_extra *old = (const struct packet_edit_tile_extra *) vkey1;
93081 const struct packet_edit_tile_extra *real_packet = (const struct packet_edit_tile_extra *) vkey2;
93082 bool differ;
93083
93084 differ = (old->tile != real_packet->tile);
93085
93086 return !differ;
93087}
93089#endif /* FREECIV_DELTA_PROTOCOL */
93090
93092{
93093#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_extra(_packet)
93095
93096#ifdef FREECIV_JSON_CONNECTION
93097 struct plocation field_addr;
93098 {
93099 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93102 }
93103#endif /* FREECIV_JSON_CONNECTION */
93104
93105#ifdef FREECIV_JSON_CONNECTION
93106 field_addr.name = "tile";
93107#endif /* FREECIV_JSON_CONNECTION */
93108
93109 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93111 }
93112
93113 log_packet_detailed("packet_edit_tile_extra_100: got info about (%d)",
93114 real_packet->tile);
93115
93116#ifdef FREECIV_DELTA_PROTOCOL
93119 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_EXTRA;
93120
93121 if (nullptr == *hash) {
93123 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
93124 }
93125
93126 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93127 *real_packet = *old;
93128 } else {
93129 /* packet is already initialized empty */
93130 log_packet_detailed(" no old info");
93131 }
93132
93133#ifdef FREECIV_JSON_CONNECTION
93134 field_addr.name = "fields";
93135#endif /* FREECIV_JSON_CONNECTION */
93136 DIO_BV_GET(&din, &field_addr, fields);
93137
93138 if (BV_ISSET(fields, 0)) {
93139 log_packet_detailed(" got field 'extra_type_id'");
93140
93141#ifdef FREECIV_JSON_CONNECTION
93142 field_addr.name = "extra_type_id";
93143#endif /* FREECIV_JSON_CONNECTION */
93144
93145 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
93146 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
93147 }
93148 }
93149
93150 real_packet->removal = BV_ISSET(fields, 1);
93151
93152 if (BV_ISSET(fields, 2)) {
93153 log_packet_detailed(" got field 'eowner'");
93154
93155#ifdef FREECIV_JSON_CONNECTION
93156 field_addr.name = "eowner";
93157#endif /* FREECIV_JSON_CONNECTION */
93158
93159 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93161 }
93162 }
93163
93164 if (BV_ISSET(fields, 3)) {
93165 log_packet_detailed(" got field 'size'");
93166
93167#ifdef FREECIV_JSON_CONNECTION
93168 field_addr.name = "size";
93169#endif /* FREECIV_JSON_CONNECTION */
93170
93171 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
93173 }
93174 }
93175
93176 if (nullptr == old) {
93177 old = fc_malloc(sizeof(*old));
93179 *old = *real_packet;
93181 } else {
93182 *old = *real_packet;
93183 }
93184
93185#else /* FREECIV_DELTA_PROTOCOL */
93186#ifdef FREECIV_JSON_CONNECTION
93187 field_addr.name = "extra_type_id";
93188#endif /* FREECIV_JSON_CONNECTION */
93189
93190 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
93191 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
93192 }
93193
93194#ifdef FREECIV_JSON_CONNECTION
93195 field_addr.name = "removal";
93196#endif /* FREECIV_JSON_CONNECTION */
93197
93198 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
93200 }
93201
93202#ifdef FREECIV_JSON_CONNECTION
93203 field_addr.name = "eowner";
93204#endif /* FREECIV_JSON_CONNECTION */
93205
93206 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93208 }
93209
93210#ifdef FREECIV_JSON_CONNECTION
93211 field_addr.name = "size";
93212#endif /* FREECIV_JSON_CONNECTION */
93213
93214 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
93216 }
93217#endif /* FREECIV_DELTA_PROTOCOL */
93218
93220#undef FREE_PACKET_STRUCT
93221}
93222
93224{
93225 const struct packet_edit_tile_extra *real_packet = packet;
93226 int e;
93228
93229 log_packet_detailed("packet_edit_tile_extra_100: sending info about (%d)",
93230 real_packet->tile);
93231
93232#ifdef FREECIV_DELTA_PROTOCOL
93235 bool differ;
93236 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_EXTRA;
93237
93238 if (nullptr == *hash) {
93240 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
93241 }
93242 BV_CLR_ALL(fields);
93243
93244 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93245 old = fc_malloc(sizeof(*old));
93246 /* temporary bitcopy just to insert correctly */
93247 *old = *real_packet;
93250 }
93251
93252 differ = (old->extra_type_id != real_packet->extra_type_id);
93253 if (differ) {
93254 BV_SET(fields, 0);
93255 }
93256
93257 /* folded into head */
93258 if (real_packet->removal) {
93259 BV_SET(fields, 1);
93260 }
93261
93262 differ = (old->eowner != real_packet->eowner);
93263 if (differ) {
93264 BV_SET(fields, 2);
93265 }
93266
93267 differ = (old->size != real_packet->size);
93268 if (differ) {
93269 BV_SET(fields, 3);
93270 }
93271#endif /* FREECIV_DELTA_PROTOCOL */
93272
93273#ifdef FREECIV_JSON_CONNECTION
93274 struct plocation field_addr;
93275 {
93276 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93279 }
93280#endif /* FREECIV_JSON_CONNECTION */
93281
93282#ifdef FREECIV_JSON_CONNECTION
93283 field_addr.name = "tile";
93284#endif /* FREECIV_JSON_CONNECTION */
93285 e = 0;
93286
93287 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93288
93289 if (e) {
93290 log_packet_detailed("'tile' field error detected");
93291 }
93292
93293#ifdef FREECIV_DELTA_PROTOCOL
93294#ifdef FREECIV_JSON_CONNECTION
93295 field_addr.name = "fields";
93296#endif /* FREECIV_JSON_CONNECTION */
93297 e = 0;
93298 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93299 if (e) {
93300 log_packet_detailed("fields bitvector error detected");
93301 }
93302
93303 if (BV_ISSET(fields, 0)) {
93304 log_packet_detailed(" field 'extra_type_id' has changed");
93305
93306#ifdef FREECIV_JSON_CONNECTION
93307 field_addr.name = "extra_type_id";
93308#endif /* FREECIV_JSON_CONNECTION */
93309 e = 0;
93310
93311 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
93312
93313 if (e) {
93314 log_packet_detailed("'extra_type_id' field error detected");
93315 }
93316 }
93317
93318 /* field 1 is folded into the header */
93319
93320 if (BV_ISSET(fields, 2)) {
93321 log_packet_detailed(" field 'eowner' has changed");
93322
93323#ifdef FREECIV_JSON_CONNECTION
93324 field_addr.name = "eowner";
93325#endif /* FREECIV_JSON_CONNECTION */
93326 e = 0;
93327
93328 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93329
93330 if (e) {
93331 log_packet_detailed("'eowner' field error detected");
93332 }
93333 }
93334
93335 if (BV_ISSET(fields, 3)) {
93336 log_packet_detailed(" field 'size' has changed");
93337
93338#ifdef FREECIV_JSON_CONNECTION
93339 field_addr.name = "size";
93340#endif /* FREECIV_JSON_CONNECTION */
93341 e = 0;
93342
93343 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
93344
93345 if (e) {
93346 log_packet_detailed("'size' field error detected");
93347 }
93348 }
93349
93350 *old = *real_packet;
93351
93352#else /* FREECIV_DELTA_PROTOCOL */
93353#ifdef FREECIV_JSON_CONNECTION
93354 field_addr.name = "extra_type_id";
93355#endif /* FREECIV_JSON_CONNECTION */
93356 e = 0;
93357
93358 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
93359
93360 if (e) {
93361 log_packet_detailed("'extra_type_id' field error detected");
93362 }
93363
93364#ifdef FREECIV_JSON_CONNECTION
93365 field_addr.name = "removal";
93366#endif /* FREECIV_JSON_CONNECTION */
93367 e = 0;
93368
93369 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
93370
93371 if (e) {
93372 log_packet_detailed("'removal' field error detected");
93373 }
93374
93375#ifdef FREECIV_JSON_CONNECTION
93376 field_addr.name = "eowner";
93377#endif /* FREECIV_JSON_CONNECTION */
93378 e = 0;
93379
93380 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93381
93382 if (e) {
93383 log_packet_detailed("'eowner' field error detected");
93384 }
93385
93386#ifdef FREECIV_JSON_CONNECTION
93387 field_addr.name = "size";
93388#endif /* FREECIV_JSON_CONNECTION */
93389 e = 0;
93390
93391 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
93392
93393 if (e) {
93394 log_packet_detailed("'size' field error detected");
93395 }
93396#endif /* FREECIV_DELTA_PROTOCOL */
93397
93399}
93400
93402{
93403 if (!pc->used) {
93404 log_error("WARNING: trying to send data to the closed connection %s",
93406 return -1;
93407 }
93408 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet != nullptr, -1,
93409 "Handler for PACKET_EDIT_TILE_EXTRA not installed");
93410 return pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet(pc, packet);
93411}
93412
93413int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
93414{
93415 struct packet_edit_tile_extra packet, *real_packet = &packet;
93416
93418 real_packet->extra_type_id = extra_type_id;
93419 real_packet->removal = removal;
93420 real_packet->eowner = eowner;
93421 real_packet->size = size;
93422
93424}
93425
93426static inline void init_packet_edit_startpos(struct packet_edit_startpos *packet)
93427{
93428 memset(packet, 0, sizeof(*packet));
93429}
93430
93431#define free_packet_edit_startpos(_packet) (void) 0
93432#define destroy_packet_edit_startpos free
93433
93435{
93436#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos(_packet)
93438
93439#ifdef FREECIV_JSON_CONNECTION
93440 struct plocation field_addr;
93441 {
93442 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93445 }
93446#endif /* FREECIV_JSON_CONNECTION */
93447
93448 log_packet_detailed("packet_edit_startpos_100: got info about ()");
93449
93450#ifdef FREECIV_JSON_CONNECTION
93451 field_addr.name = "id";
93452#endif /* FREECIV_JSON_CONNECTION */
93453
93454 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
93456 }
93457
93458#ifdef FREECIV_JSON_CONNECTION
93459 field_addr.name = "removal";
93460#endif /* FREECIV_JSON_CONNECTION */
93461
93462 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
93464 }
93465
93466#ifdef FREECIV_JSON_CONNECTION
93467 field_addr.name = "tag";
93468#endif /* FREECIV_JSON_CONNECTION */
93469
93470 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
93472 }
93473
93475#undef FREE_PACKET_STRUCT
93476}
93477
93478static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
93479{
93480 const struct packet_edit_startpos *real_packet = packet;
93481 int e;
93483
93484 log_packet_detailed("packet_edit_startpos_100: sending info about ()");
93485
93486#ifdef FREECIV_JSON_CONNECTION
93487 struct plocation field_addr;
93488 {
93489 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93492 }
93493#endif /* FREECIV_JSON_CONNECTION */
93494
93495#ifdef FREECIV_JSON_CONNECTION
93496 field_addr.name = "id";
93497#endif /* FREECIV_JSON_CONNECTION */
93498 e = 0;
93499
93500 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
93501
93502 if (e) {
93503 log_packet_detailed("'id' field error detected");
93504 }
93505
93506#ifdef FREECIV_JSON_CONNECTION
93507 field_addr.name = "removal";
93508#endif /* FREECIV_JSON_CONNECTION */
93509 e = 0;
93510
93511 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
93512
93513 if (e) {
93514 log_packet_detailed("'removal' field error detected");
93515 }
93516
93517#ifdef FREECIV_JSON_CONNECTION
93518 field_addr.name = "tag";
93519#endif /* FREECIV_JSON_CONNECTION */
93520 e = 0;
93521
93522 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
93523
93524 if (e) {
93525 log_packet_detailed("'tag' field error detected");
93526 }
93527
93529}
93530
93532{
93533 if (!pc->used) {
93534 log_error("WARNING: trying to send data to the closed connection %s",
93536 return -1;
93537 }
93538 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet != nullptr, -1,
93539 "Handler for PACKET_EDIT_STARTPOS not installed");
93540 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet(pc, packet);
93541}
93542
93543int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
93544{
93545 struct packet_edit_startpos packet, *real_packet = &packet;
93546
93547 real_packet->id = id;
93548 real_packet->removal = removal;
93549 real_packet->tag = tag;
93550
93552}
93553
93555{
93556 memset(packet, 0, sizeof(*packet));
93557}
93558
93559#define free_packet_edit_startpos_full(_packet) (void) 0
93560#define destroy_packet_edit_startpos_full free
93561
93563{
93564#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos_full(_packet)
93566
93567#ifdef FREECIV_JSON_CONNECTION
93568 struct plocation field_addr;
93569 {
93570 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93573 }
93574#endif /* FREECIV_JSON_CONNECTION */
93575
93576 log_packet_detailed("packet_edit_startpos_full_100: got info about ()");
93577
93578#ifdef FREECIV_JSON_CONNECTION
93579 field_addr.name = "id";
93580#endif /* FREECIV_JSON_CONNECTION */
93581
93582 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
93584 }
93585
93586#ifdef FREECIV_JSON_CONNECTION
93587 field_addr.name = "exclude";
93588#endif /* FREECIV_JSON_CONNECTION */
93589
93590 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->exclude)) {
93592 }
93593
93594#ifdef FREECIV_JSON_CONNECTION
93595 field_addr.name = "nations";
93596#endif /* FREECIV_JSON_CONNECTION */
93597
93598 if (!DIO_BV_GET(&din, &field_addr, real_packet->nations)) {
93600 }
93601
93603#undef FREE_PACKET_STRUCT
93604}
93605
93607{
93608 const struct packet_edit_startpos_full *real_packet = packet;
93609 int e;
93611
93612 log_packet_detailed("packet_edit_startpos_full_100: sending info about ()");
93613
93614#ifdef FREECIV_JSON_CONNECTION
93615 struct plocation field_addr;
93616 {
93617 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93620 }
93621#endif /* FREECIV_JSON_CONNECTION */
93622
93623#ifdef FREECIV_JSON_CONNECTION
93624 field_addr.name = "id";
93625#endif /* FREECIV_JSON_CONNECTION */
93626 e = 0;
93627
93628 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
93629
93630 if (e) {
93631 log_packet_detailed("'id' field error detected");
93632 }
93633
93634#ifdef FREECIV_JSON_CONNECTION
93635 field_addr.name = "exclude";
93636#endif /* FREECIV_JSON_CONNECTION */
93637 e = 0;
93638
93639 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->exclude);
93640
93641 if (e) {
93642 log_packet_detailed("'exclude' field error detected");
93643 }
93644
93645#ifdef FREECIV_JSON_CONNECTION
93646 field_addr.name = "nations";
93647#endif /* FREECIV_JSON_CONNECTION */
93648 e = 0;
93649
93650 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->nations);
93651
93652 if (e) {
93653 log_packet_detailed("'nations' field error detected");
93654 }
93655
93657}
93658
93660{
93661 if (!pc->used) {
93662 log_error("WARNING: trying to send data to the closed connection %s",
93664 return -1;
93665 }
93666 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet != nullptr, -1,
93667 "Handler for PACKET_EDIT_STARTPOS_FULL not installed");
93668 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet(pc, packet);
93669}
93670
93671static inline void init_packet_edit_tile(struct packet_edit_tile *packet)
93672{
93673 memset(packet, 0, sizeof(*packet));
93674}
93675
93676#define free_packet_edit_tile(_packet) (void) 0
93677#define destroy_packet_edit_tile free
93678
93679#ifdef FREECIV_DELTA_PROTOCOL
93681{
93682 const struct packet_edit_tile *key = (const struct packet_edit_tile *) vkey;
93683 genhash_val_t result = 0;
93684
93685 result += key->tile;
93686
93687 result &= 0xFFFFFFFF;
93688 return result;
93689}
93690
93691static bool cmp_packet_edit_tile_100(const void *vkey1, const void *vkey2)
93692{
93693 const struct packet_edit_tile *old = (const struct packet_edit_tile *) vkey1;
93694 const struct packet_edit_tile *real_packet = (const struct packet_edit_tile *) vkey2;
93695 bool differ;
93696
93697 differ = (old->tile != real_packet->tile);
93698
93699 return !differ;
93700}
93702#endif /* FREECIV_DELTA_PROTOCOL */
93703
93705{
93706#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile(_packet)
93708
93709#ifdef FREECIV_JSON_CONNECTION
93710 struct plocation field_addr;
93711 {
93712 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93715 }
93716#endif /* FREECIV_JSON_CONNECTION */
93717
93718#ifdef FREECIV_JSON_CONNECTION
93719 field_addr.name = "tile";
93720#endif /* FREECIV_JSON_CONNECTION */
93721
93722 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93724 }
93725
93726 log_packet_detailed("packet_edit_tile_100: got info about (%d)",
93727 real_packet->tile);
93728
93729#ifdef FREECIV_DELTA_PROTOCOL
93731 struct packet_edit_tile *old;
93732 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE;
93733
93734 if (nullptr == *hash) {
93736 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
93737 }
93738
93739 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93740 *real_packet = *old;
93741 } else {
93742 /* packet is already initialized empty */
93743 log_packet_detailed(" no old info");
93744 }
93745
93746#ifdef FREECIV_JSON_CONNECTION
93747 field_addr.name = "fields";
93748#endif /* FREECIV_JSON_CONNECTION */
93749 DIO_BV_GET(&din, &field_addr, fields);
93750
93751 if (BV_ISSET(fields, 0)) {
93752 log_packet_detailed(" got field 'extras'");
93753
93754#ifdef FREECIV_JSON_CONNECTION
93755 field_addr.name = "extras";
93756#endif /* FREECIV_JSON_CONNECTION */
93757
93758 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
93760 }
93761 }
93762
93763 if (BV_ISSET(fields, 1)) {
93764 log_packet_detailed(" got field 'resource'");
93765
93766#ifdef FREECIV_JSON_CONNECTION
93767 field_addr.name = "resource";
93768#endif /* FREECIV_JSON_CONNECTION */
93769
93770 {
93771 int readin;
93772
93773 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93775 }
93776 real_packet->resource = readin;
93777 }
93778 }
93779
93780 if (BV_ISSET(fields, 2)) {
93781 log_packet_detailed(" got field 'terrain'");
93782
93783#ifdef FREECIV_JSON_CONNECTION
93784 field_addr.name = "terrain";
93785#endif /* FREECIV_JSON_CONNECTION */
93786
93787 {
93788 int readin;
93789
93790 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93792 }
93793 real_packet->terrain = readin;
93794 }
93795 }
93796
93797 if (BV_ISSET(fields, 3)) {
93798 log_packet_detailed(" got field 'startpos_nation'");
93799
93800#ifdef FREECIV_JSON_CONNECTION
93801 field_addr.name = "startpos_nation";
93802#endif /* FREECIV_JSON_CONNECTION */
93803
93804 {
93805 int readin;
93806
93807 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
93808 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
93809 }
93810 real_packet->startpos_nation = readin;
93811 }
93812 }
93813
93814 if (BV_ISSET(fields, 4)) {
93815 log_packet_detailed(" got field 'eowner'");
93816
93817#ifdef FREECIV_JSON_CONNECTION
93818 field_addr.name = "eowner";
93819#endif /* FREECIV_JSON_CONNECTION */
93820
93821 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93823 }
93824 }
93825
93826 if (BV_ISSET(fields, 5)) {
93827 log_packet_detailed(" got field 'label'");
93828
93829#ifdef FREECIV_JSON_CONNECTION
93830 field_addr.name = "label";
93831#endif /* FREECIV_JSON_CONNECTION */
93832
93833 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
93835 }
93836 }
93837
93838 if (nullptr == old) {
93839 old = fc_malloc(sizeof(*old));
93841 *old = *real_packet;
93843 } else {
93844 *old = *real_packet;
93845 }
93846
93847#else /* FREECIV_DELTA_PROTOCOL */
93848#ifdef FREECIV_JSON_CONNECTION
93849 field_addr.name = "extras";
93850#endif /* FREECIV_JSON_CONNECTION */
93851
93852 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
93854 }
93855
93856#ifdef FREECIV_JSON_CONNECTION
93857 field_addr.name = "resource";
93858#endif /* FREECIV_JSON_CONNECTION */
93859
93860 {
93861 int readin;
93862
93863 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93865 }
93866 real_packet->resource = readin;
93867 }
93868
93869#ifdef FREECIV_JSON_CONNECTION
93870 field_addr.name = "terrain";
93871#endif /* FREECIV_JSON_CONNECTION */
93872
93873 {
93874 int readin;
93875
93876 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93878 }
93879 real_packet->terrain = readin;
93880 }
93881
93882#ifdef FREECIV_JSON_CONNECTION
93883 field_addr.name = "startpos_nation";
93884#endif /* FREECIV_JSON_CONNECTION */
93885
93886 {
93887 int readin;
93888
93889 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
93890 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
93891 }
93892 real_packet->startpos_nation = readin;
93893 }
93894
93895#ifdef FREECIV_JSON_CONNECTION
93896 field_addr.name = "eowner";
93897#endif /* FREECIV_JSON_CONNECTION */
93898
93899 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93901 }
93902
93903#ifdef FREECIV_JSON_CONNECTION
93904 field_addr.name = "label";
93905#endif /* FREECIV_JSON_CONNECTION */
93906
93907 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
93909 }
93910#endif /* FREECIV_DELTA_PROTOCOL */
93911
93913#undef FREE_PACKET_STRUCT
93914}
93915
93916static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
93917{
93918 const struct packet_edit_tile *real_packet = packet;
93919 int e;
93921
93922 log_packet_detailed("packet_edit_tile_100: sending info about (%d)",
93923 real_packet->tile);
93924
93925#ifdef FREECIV_DELTA_PROTOCOL
93927 struct packet_edit_tile *old;
93928 bool differ;
93929 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE;
93930
93931 if (nullptr == *hash) {
93933 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
93934 }
93935 BV_CLR_ALL(fields);
93936
93937 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93938 old = fc_malloc(sizeof(*old));
93939 /* temporary bitcopy just to insert correctly */
93940 *old = *real_packet;
93943 }
93944
93945 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
93946 if (differ) {
93947 BV_SET(fields, 0);
93948 }
93949
93950 differ = (old->resource != real_packet->resource);
93951 if (differ) {
93952 BV_SET(fields, 1);
93953 }
93954
93955 differ = (old->terrain != real_packet->terrain);
93956 if (differ) {
93957 BV_SET(fields, 2);
93958 }
93959
93960 differ = (old->startpos_nation != real_packet->startpos_nation);
93961 if (differ) {
93962 BV_SET(fields, 3);
93963 }
93964
93965 differ = (old->eowner != real_packet->eowner);
93966 if (differ) {
93967 BV_SET(fields, 4);
93968 }
93969
93970 differ = (strcmp(old->label, real_packet->label) != 0);
93971 if (differ) {
93972 BV_SET(fields, 5);
93973 }
93974#endif /* FREECIV_DELTA_PROTOCOL */
93975
93976#ifdef FREECIV_JSON_CONNECTION
93977 struct plocation field_addr;
93978 {
93979 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93982 }
93983#endif /* FREECIV_JSON_CONNECTION */
93984
93985#ifdef FREECIV_JSON_CONNECTION
93986 field_addr.name = "tile";
93987#endif /* FREECIV_JSON_CONNECTION */
93988 e = 0;
93989
93990 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93991
93992 if (e) {
93993 log_packet_detailed("'tile' field error detected");
93994 }
93995
93996#ifdef FREECIV_DELTA_PROTOCOL
93997#ifdef FREECIV_JSON_CONNECTION
93998 field_addr.name = "fields";
93999#endif /* FREECIV_JSON_CONNECTION */
94000 e = 0;
94001 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94002 if (e) {
94003 log_packet_detailed("fields bitvector error detected");
94004 }
94005
94006 if (BV_ISSET(fields, 0)) {
94007 log_packet_detailed(" field 'extras' has changed");
94008
94009#ifdef FREECIV_JSON_CONNECTION
94010 field_addr.name = "extras";
94011#endif /* FREECIV_JSON_CONNECTION */
94012 e = 0;
94013
94014 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
94015
94016 if (e) {
94017 log_packet_detailed("'extras' field error detected");
94018 }
94019 }
94020
94021 if (BV_ISSET(fields, 1)) {
94022 log_packet_detailed(" field 'resource' has changed");
94023
94024#ifdef FREECIV_JSON_CONNECTION
94025 field_addr.name = "resource";
94026#endif /* FREECIV_JSON_CONNECTION */
94027 e = 0;
94028
94029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
94030
94031 if (e) {
94032 log_packet_detailed("'resource' field error detected");
94033 }
94034 }
94035
94036 if (BV_ISSET(fields, 2)) {
94037 log_packet_detailed(" field 'terrain' has changed");
94038
94039#ifdef FREECIV_JSON_CONNECTION
94040 field_addr.name = "terrain";
94041#endif /* FREECIV_JSON_CONNECTION */
94042 e = 0;
94043
94044 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
94045
94046 if (e) {
94047 log_packet_detailed("'terrain' field error detected");
94048 }
94049 }
94050
94051 if (BV_ISSET(fields, 3)) {
94052 log_packet_detailed(" field 'startpos_nation' has changed");
94053
94054#ifdef FREECIV_JSON_CONNECTION
94055 field_addr.name = "startpos_nation";
94056#endif /* FREECIV_JSON_CONNECTION */
94057 e = 0;
94058
94059 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
94060
94061 if (e) {
94062 log_packet_detailed("'startpos_nation' field error detected");
94063 }
94064 }
94065
94066 if (BV_ISSET(fields, 4)) {
94067 log_packet_detailed(" field 'eowner' has changed");
94068
94069#ifdef FREECIV_JSON_CONNECTION
94070 field_addr.name = "eowner";
94071#endif /* FREECIV_JSON_CONNECTION */
94072 e = 0;
94073
94074 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
94075
94076 if (e) {
94077 log_packet_detailed("'eowner' field error detected");
94078 }
94079 }
94080
94081 if (BV_ISSET(fields, 5)) {
94082 log_packet_detailed(" field 'label' has changed");
94083
94084#ifdef FREECIV_JSON_CONNECTION
94085 field_addr.name = "label";
94086#endif /* FREECIV_JSON_CONNECTION */
94087 e = 0;
94088
94089 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
94090
94091 if (e) {
94092 log_packet_detailed("'label' field error detected");
94093 }
94094 }
94095
94096 *old = *real_packet;
94097
94098#else /* FREECIV_DELTA_PROTOCOL */
94099#ifdef FREECIV_JSON_CONNECTION
94100 field_addr.name = "extras";
94101#endif /* FREECIV_JSON_CONNECTION */
94102 e = 0;
94103
94104 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
94105
94106 if (e) {
94107 log_packet_detailed("'extras' field error detected");
94108 }
94109
94110#ifdef FREECIV_JSON_CONNECTION
94111 field_addr.name = "resource";
94112#endif /* FREECIV_JSON_CONNECTION */
94113 e = 0;
94114
94115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
94116
94117 if (e) {
94118 log_packet_detailed("'resource' field error detected");
94119 }
94120
94121#ifdef FREECIV_JSON_CONNECTION
94122 field_addr.name = "terrain";
94123#endif /* FREECIV_JSON_CONNECTION */
94124 e = 0;
94125
94126 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
94127
94128 if (e) {
94129 log_packet_detailed("'terrain' field error detected");
94130 }
94131
94132#ifdef FREECIV_JSON_CONNECTION
94133 field_addr.name = "startpos_nation";
94134#endif /* FREECIV_JSON_CONNECTION */
94135 e = 0;
94136
94137 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
94138
94139 if (e) {
94140 log_packet_detailed("'startpos_nation' field error detected");
94141 }
94142
94143#ifdef FREECIV_JSON_CONNECTION
94144 field_addr.name = "eowner";
94145#endif /* FREECIV_JSON_CONNECTION */
94146 e = 0;
94147
94148 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
94149
94150 if (e) {
94151 log_packet_detailed("'eowner' field error detected");
94152 }
94153
94154#ifdef FREECIV_JSON_CONNECTION
94155 field_addr.name = "label";
94156#endif /* FREECIV_JSON_CONNECTION */
94157 e = 0;
94158
94159 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
94160
94161 if (e) {
94162 log_packet_detailed("'label' field error detected");
94163 }
94164#endif /* FREECIV_DELTA_PROTOCOL */
94165
94167}
94168
94169int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
94170{
94171 if (!pc->used) {
94172 log_error("WARNING: trying to send data to the closed connection %s",
94174 return -1;
94175 }
94176 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE].packet != nullptr, -1,
94177 "Handler for PACKET_EDIT_TILE not installed");
94178 return pc->phs.handlers->send[PACKET_EDIT_TILE].packet(pc, packet);
94179}
94180
94182{
94183 memset(packet, 0, sizeof(*packet));
94184}
94185
94186#define free_packet_edit_unit_create(_packet) (void) 0
94187#define destroy_packet_edit_unit_create free
94188
94189#ifdef FREECIV_DELTA_PROTOCOL
94190#define hash_packet_edit_unit_create_100 hash_const
94191#define cmp_packet_edit_unit_create_100 cmp_const
94193#endif /* FREECIV_DELTA_PROTOCOL */
94194
94196{
94197#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_create(_packet)
94199
94200#ifdef FREECIV_JSON_CONNECTION
94201 struct plocation field_addr;
94202 {
94203 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94206 }
94207#endif /* FREECIV_JSON_CONNECTION */
94208
94209 log_packet_detailed("packet_edit_unit_create_100: got info about ()");
94210
94211#ifdef FREECIV_DELTA_PROTOCOL
94214 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_CREATE;
94215
94216 if (nullptr == *hash) {
94218 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
94219 }
94220
94221 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94222 *real_packet = *old;
94223 } else {
94224 /* packet is already initialized empty */
94225 log_packet_detailed(" no old info");
94226 }
94227
94228#ifdef FREECIV_JSON_CONNECTION
94229 field_addr.name = "fields";
94230#endif /* FREECIV_JSON_CONNECTION */
94231 DIO_BV_GET(&din, &field_addr, fields);
94232
94233 if (BV_ISSET(fields, 0)) {
94234 log_packet_detailed(" got field 'owner'");
94235
94236#ifdef FREECIV_JSON_CONNECTION
94237 field_addr.name = "owner";
94238#endif /* FREECIV_JSON_CONNECTION */
94239
94240 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94242 }
94243 }
94244
94245 if (BV_ISSET(fields, 1)) {
94246 log_packet_detailed(" got field 'tile'");
94247
94248#ifdef FREECIV_JSON_CONNECTION
94249 field_addr.name = "tile";
94250#endif /* FREECIV_JSON_CONNECTION */
94251
94252 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
94254 }
94255 }
94256
94257 if (BV_ISSET(fields, 2)) {
94258 log_packet_detailed(" got field 'type'");
94259
94260#ifdef FREECIV_JSON_CONNECTION
94261 field_addr.name = "type";
94262#endif /* FREECIV_JSON_CONNECTION */
94263
94264 {
94265 int readin;
94266
94267 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94269 }
94270 real_packet->type = readin;
94271 }
94272 }
94273
94274 if (BV_ISSET(fields, 3)) {
94275 log_packet_detailed(" got field 'count'");
94276
94277#ifdef FREECIV_JSON_CONNECTION
94278 field_addr.name = "count";
94279#endif /* FREECIV_JSON_CONNECTION */
94280
94281 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
94283 }
94284 }
94285
94286 if (BV_ISSET(fields, 4)) {
94287 log_packet_detailed(" got field 'tag'");
94288
94289#ifdef FREECIV_JSON_CONNECTION
94290 field_addr.name = "tag";
94291#endif /* FREECIV_JSON_CONNECTION */
94292
94293 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
94295 }
94296 }
94297
94298 if (nullptr == old) {
94299 old = fc_malloc(sizeof(*old));
94301 *old = *real_packet;
94303 } else {
94304 *old = *real_packet;
94305 }
94306
94307#else /* FREECIV_DELTA_PROTOCOL */
94308#ifdef FREECIV_JSON_CONNECTION
94309 field_addr.name = "owner";
94310#endif /* FREECIV_JSON_CONNECTION */
94311
94312 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94314 }
94315
94316#ifdef FREECIV_JSON_CONNECTION
94317 field_addr.name = "tile";
94318#endif /* FREECIV_JSON_CONNECTION */
94319
94320 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
94322 }
94323
94324#ifdef FREECIV_JSON_CONNECTION
94325 field_addr.name = "type";
94326#endif /* FREECIV_JSON_CONNECTION */
94327
94328 {
94329 int readin;
94330
94331 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94333 }
94334 real_packet->type = readin;
94335 }
94336
94337#ifdef FREECIV_JSON_CONNECTION
94338 field_addr.name = "count";
94339#endif /* FREECIV_JSON_CONNECTION */
94340
94341 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
94343 }
94344
94345#ifdef FREECIV_JSON_CONNECTION
94346 field_addr.name = "tag";
94347#endif /* FREECIV_JSON_CONNECTION */
94348
94349 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
94351 }
94352#endif /* FREECIV_DELTA_PROTOCOL */
94353
94355#undef FREE_PACKET_STRUCT
94356}
94357
94359{
94360 const struct packet_edit_unit_create *real_packet = packet;
94361 int e;
94363
94364 log_packet_detailed("packet_edit_unit_create_100: sending info about ()");
94365
94366#ifdef FREECIV_DELTA_PROTOCOL
94369 bool differ;
94370 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_CREATE;
94371
94372 if (nullptr == *hash) {
94374 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
94375 }
94376 BV_CLR_ALL(fields);
94377
94378 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94379 old = fc_malloc(sizeof(*old));
94380 /* temporary bitcopy just to insert correctly */
94381 *old = *real_packet;
94384 }
94385
94386 differ = (old->owner != real_packet->owner);
94387 if (differ) {
94388 BV_SET(fields, 0);
94389 }
94390
94391 differ = (old->tile != real_packet->tile);
94392 if (differ) {
94393 BV_SET(fields, 1);
94394 }
94395
94396 differ = (old->type != real_packet->type);
94397 if (differ) {
94398 BV_SET(fields, 2);
94399 }
94400
94401 differ = (old->count != real_packet->count);
94402 if (differ) {
94403 BV_SET(fields, 3);
94404 }
94405
94406 differ = (old->tag != real_packet->tag);
94407 if (differ) {
94408 BV_SET(fields, 4);
94409 }
94410#endif /* FREECIV_DELTA_PROTOCOL */
94411
94412#ifdef FREECIV_JSON_CONNECTION
94413 struct plocation field_addr;
94414 {
94415 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94418 }
94419#endif /* FREECIV_JSON_CONNECTION */
94420
94421#ifdef FREECIV_DELTA_PROTOCOL
94422#ifdef FREECIV_JSON_CONNECTION
94423 field_addr.name = "fields";
94424#endif /* FREECIV_JSON_CONNECTION */
94425 e = 0;
94426 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94427 if (e) {
94428 log_packet_detailed("fields bitvector error detected");
94429 }
94430
94431 if (BV_ISSET(fields, 0)) {
94432 log_packet_detailed(" field 'owner' has changed");
94433
94434#ifdef FREECIV_JSON_CONNECTION
94435 field_addr.name = "owner";
94436#endif /* FREECIV_JSON_CONNECTION */
94437 e = 0;
94438
94439 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94440
94441 if (e) {
94442 log_packet_detailed("'owner' field error detected");
94443 }
94444 }
94445
94446 if (BV_ISSET(fields, 1)) {
94447 log_packet_detailed(" field 'tile' has changed");
94448
94449#ifdef FREECIV_JSON_CONNECTION
94450 field_addr.name = "tile";
94451#endif /* FREECIV_JSON_CONNECTION */
94452 e = 0;
94453
94454 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94455
94456 if (e) {
94457 log_packet_detailed("'tile' field error detected");
94458 }
94459 }
94460
94461 if (BV_ISSET(fields, 2)) {
94462 log_packet_detailed(" field 'type' has changed");
94463
94464#ifdef FREECIV_JSON_CONNECTION
94465 field_addr.name = "type";
94466#endif /* FREECIV_JSON_CONNECTION */
94467 e = 0;
94468
94469 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94470
94471 if (e) {
94472 log_packet_detailed("'type' field error detected");
94473 }
94474 }
94475
94476 if (BV_ISSET(fields, 3)) {
94477 log_packet_detailed(" field 'count' has changed");
94478
94479#ifdef FREECIV_JSON_CONNECTION
94480 field_addr.name = "count";
94481#endif /* FREECIV_JSON_CONNECTION */
94482 e = 0;
94483
94484 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94485
94486 if (e) {
94487 log_packet_detailed("'count' field error detected");
94488 }
94489 }
94490
94491 if (BV_ISSET(fields, 4)) {
94492 log_packet_detailed(" field 'tag' has changed");
94493
94494#ifdef FREECIV_JSON_CONNECTION
94495 field_addr.name = "tag";
94496#endif /* FREECIV_JSON_CONNECTION */
94497 e = 0;
94498
94499 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
94500
94501 if (e) {
94502 log_packet_detailed("'tag' field error detected");
94503 }
94504 }
94505
94506 *old = *real_packet;
94507
94508#else /* FREECIV_DELTA_PROTOCOL */
94509#ifdef FREECIV_JSON_CONNECTION
94510 field_addr.name = "owner";
94511#endif /* FREECIV_JSON_CONNECTION */
94512 e = 0;
94513
94514 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94515
94516 if (e) {
94517 log_packet_detailed("'owner' field error detected");
94518 }
94519
94520#ifdef FREECIV_JSON_CONNECTION
94521 field_addr.name = "tile";
94522#endif /* FREECIV_JSON_CONNECTION */
94523 e = 0;
94524
94525 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94526
94527 if (e) {
94528 log_packet_detailed("'tile' field error detected");
94529 }
94530
94531#ifdef FREECIV_JSON_CONNECTION
94532 field_addr.name = "type";
94533#endif /* FREECIV_JSON_CONNECTION */
94534 e = 0;
94535
94536 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94537
94538 if (e) {
94539 log_packet_detailed("'type' field error detected");
94540 }
94541
94542#ifdef FREECIV_JSON_CONNECTION
94543 field_addr.name = "count";
94544#endif /* FREECIV_JSON_CONNECTION */
94545 e = 0;
94546
94547 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94548
94549 if (e) {
94550 log_packet_detailed("'count' field error detected");
94551 }
94552
94553#ifdef FREECIV_JSON_CONNECTION
94554 field_addr.name = "tag";
94555#endif /* FREECIV_JSON_CONNECTION */
94556 e = 0;
94557
94558 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
94559
94560 if (e) {
94561 log_packet_detailed("'tag' field error detected");
94562 }
94563#endif /* FREECIV_DELTA_PROTOCOL */
94564
94566}
94567
94569{
94570 if (!pc->used) {
94571 log_error("WARNING: trying to send data to the closed connection %s",
94573 return -1;
94574 }
94575 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet != nullptr, -1,
94576 "Handler for PACKET_EDIT_UNIT_CREATE not installed");
94577 return pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet(pc, packet);
94578}
94579
94580int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
94581{
94582 struct packet_edit_unit_create packet, *real_packet = &packet;
94583
94586 real_packet->type = type;
94587 real_packet->count = count;
94588 real_packet->tag = tag;
94589
94591}
94592
94594{
94595 memset(packet, 0, sizeof(*packet));
94596}
94597
94598#define free_packet_edit_unit_remove(_packet) (void) 0
94599#define destroy_packet_edit_unit_remove free
94600
94601#ifdef FREECIV_DELTA_PROTOCOL
94602#define hash_packet_edit_unit_remove_100 hash_const
94603#define cmp_packet_edit_unit_remove_100 cmp_const
94605#endif /* FREECIV_DELTA_PROTOCOL */
94606
94608{
94609#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove(_packet)
94611
94612#ifdef FREECIV_JSON_CONNECTION
94613 struct plocation field_addr;
94614 {
94615 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94618 }
94619#endif /* FREECIV_JSON_CONNECTION */
94620
94621 log_packet_detailed("packet_edit_unit_remove_100: got info about ()");
94622
94623#ifdef FREECIV_DELTA_PROTOCOL
94626 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE;
94627
94628 if (nullptr == *hash) {
94630 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
94631 }
94632
94633 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94634 *real_packet = *old;
94635 } else {
94636 /* packet is already initialized empty */
94637 log_packet_detailed(" no old info");
94638 }
94639
94640#ifdef FREECIV_JSON_CONNECTION
94641 field_addr.name = "fields";
94642#endif /* FREECIV_JSON_CONNECTION */
94643 DIO_BV_GET(&din, &field_addr, fields);
94644
94645 if (BV_ISSET(fields, 0)) {
94646 log_packet_detailed(" got field 'owner'");
94647
94648#ifdef FREECIV_JSON_CONNECTION
94649 field_addr.name = "owner";
94650#endif /* FREECIV_JSON_CONNECTION */
94651
94652 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94654 }
94655 }
94656
94657 if (BV_ISSET(fields, 1)) {
94658 log_packet_detailed(" got field 'tile'");
94659
94660#ifdef FREECIV_JSON_CONNECTION
94661 field_addr.name = "tile";
94662#endif /* FREECIV_JSON_CONNECTION */
94663
94664 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
94666 }
94667 }
94668
94669 if (BV_ISSET(fields, 2)) {
94670 log_packet_detailed(" got field 'type'");
94671
94672#ifdef FREECIV_JSON_CONNECTION
94673 field_addr.name = "type";
94674#endif /* FREECIV_JSON_CONNECTION */
94675
94676 {
94677 int readin;
94678
94679 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94681 }
94682 real_packet->type = readin;
94683 }
94684 }
94685
94686 if (BV_ISSET(fields, 3)) {
94687 log_packet_detailed(" got field 'count'");
94688
94689#ifdef FREECIV_JSON_CONNECTION
94690 field_addr.name = "count";
94691#endif /* FREECIV_JSON_CONNECTION */
94692
94693 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
94695 }
94696 }
94697
94698 if (nullptr == old) {
94699 old = fc_malloc(sizeof(*old));
94701 *old = *real_packet;
94703 } else {
94704 *old = *real_packet;
94705 }
94706
94707#else /* FREECIV_DELTA_PROTOCOL */
94708#ifdef FREECIV_JSON_CONNECTION
94709 field_addr.name = "owner";
94710#endif /* FREECIV_JSON_CONNECTION */
94711
94712 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94714 }
94715
94716#ifdef FREECIV_JSON_CONNECTION
94717 field_addr.name = "tile";
94718#endif /* FREECIV_JSON_CONNECTION */
94719
94720 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
94722 }
94723
94724#ifdef FREECIV_JSON_CONNECTION
94725 field_addr.name = "type";
94726#endif /* FREECIV_JSON_CONNECTION */
94727
94728 {
94729 int readin;
94730
94731 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94733 }
94734 real_packet->type = readin;
94735 }
94736
94737#ifdef FREECIV_JSON_CONNECTION
94738 field_addr.name = "count";
94739#endif /* FREECIV_JSON_CONNECTION */
94740
94741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
94743 }
94744#endif /* FREECIV_DELTA_PROTOCOL */
94745
94747#undef FREE_PACKET_STRUCT
94748}
94749
94751{
94752 const struct packet_edit_unit_remove *real_packet = packet;
94753 int e;
94755
94756 log_packet_detailed("packet_edit_unit_remove_100: sending info about ()");
94757
94758#ifdef FREECIV_DELTA_PROTOCOL
94761 bool differ;
94762 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE;
94763
94764 if (nullptr == *hash) {
94766 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
94767 }
94768 BV_CLR_ALL(fields);
94769
94770 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94771 old = fc_malloc(sizeof(*old));
94772 /* temporary bitcopy just to insert correctly */
94773 *old = *real_packet;
94776 }
94777
94778 differ = (old->owner != real_packet->owner);
94779 if (differ) {
94780 BV_SET(fields, 0);
94781 }
94782
94783 differ = (old->tile != real_packet->tile);
94784 if (differ) {
94785 BV_SET(fields, 1);
94786 }
94787
94788 differ = (old->type != real_packet->type);
94789 if (differ) {
94790 BV_SET(fields, 2);
94791 }
94792
94793 differ = (old->count != real_packet->count);
94794 if (differ) {
94795 BV_SET(fields, 3);
94796 }
94797#endif /* FREECIV_DELTA_PROTOCOL */
94798
94799#ifdef FREECIV_JSON_CONNECTION
94800 struct plocation field_addr;
94801 {
94802 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94805 }
94806#endif /* FREECIV_JSON_CONNECTION */
94807
94808#ifdef FREECIV_DELTA_PROTOCOL
94809#ifdef FREECIV_JSON_CONNECTION
94810 field_addr.name = "fields";
94811#endif /* FREECIV_JSON_CONNECTION */
94812 e = 0;
94813 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94814 if (e) {
94815 log_packet_detailed("fields bitvector error detected");
94816 }
94817
94818 if (BV_ISSET(fields, 0)) {
94819 log_packet_detailed(" field 'owner' has changed");
94820
94821#ifdef FREECIV_JSON_CONNECTION
94822 field_addr.name = "owner";
94823#endif /* FREECIV_JSON_CONNECTION */
94824 e = 0;
94825
94826 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94827
94828 if (e) {
94829 log_packet_detailed("'owner' field error detected");
94830 }
94831 }
94832
94833 if (BV_ISSET(fields, 1)) {
94834 log_packet_detailed(" field 'tile' has changed");
94835
94836#ifdef FREECIV_JSON_CONNECTION
94837 field_addr.name = "tile";
94838#endif /* FREECIV_JSON_CONNECTION */
94839 e = 0;
94840
94841 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94842
94843 if (e) {
94844 log_packet_detailed("'tile' field error detected");
94845 }
94846 }
94847
94848 if (BV_ISSET(fields, 2)) {
94849 log_packet_detailed(" field 'type' has changed");
94850
94851#ifdef FREECIV_JSON_CONNECTION
94852 field_addr.name = "type";
94853#endif /* FREECIV_JSON_CONNECTION */
94854 e = 0;
94855
94856 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94857
94858 if (e) {
94859 log_packet_detailed("'type' field error detected");
94860 }
94861 }
94862
94863 if (BV_ISSET(fields, 3)) {
94864 log_packet_detailed(" field 'count' has changed");
94865
94866#ifdef FREECIV_JSON_CONNECTION
94867 field_addr.name = "count";
94868#endif /* FREECIV_JSON_CONNECTION */
94869 e = 0;
94870
94871 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94872
94873 if (e) {
94874 log_packet_detailed("'count' field error detected");
94875 }
94876 }
94877
94878 *old = *real_packet;
94879
94880#else /* FREECIV_DELTA_PROTOCOL */
94881#ifdef FREECIV_JSON_CONNECTION
94882 field_addr.name = "owner";
94883#endif /* FREECIV_JSON_CONNECTION */
94884 e = 0;
94885
94886 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94887
94888 if (e) {
94889 log_packet_detailed("'owner' field error detected");
94890 }
94891
94892#ifdef FREECIV_JSON_CONNECTION
94893 field_addr.name = "tile";
94894#endif /* FREECIV_JSON_CONNECTION */
94895 e = 0;
94896
94897 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94898
94899 if (e) {
94900 log_packet_detailed("'tile' field error detected");
94901 }
94902
94903#ifdef FREECIV_JSON_CONNECTION
94904 field_addr.name = "type";
94905#endif /* FREECIV_JSON_CONNECTION */
94906 e = 0;
94907
94908 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94909
94910 if (e) {
94911 log_packet_detailed("'type' field error detected");
94912 }
94913
94914#ifdef FREECIV_JSON_CONNECTION
94915 field_addr.name = "count";
94916#endif /* FREECIV_JSON_CONNECTION */
94917 e = 0;
94918
94919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94920
94921 if (e) {
94922 log_packet_detailed("'count' field error detected");
94923 }
94924#endif /* FREECIV_DELTA_PROTOCOL */
94925
94927}
94928
94930{
94931 if (!pc->used) {
94932 log_error("WARNING: trying to send data to the closed connection %s",
94934 return -1;
94935 }
94936 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet != nullptr, -1,
94937 "Handler for PACKET_EDIT_UNIT_REMOVE not installed");
94938 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet(pc, packet);
94939}
94940
94942{
94943 struct packet_edit_unit_remove packet, *real_packet = &packet;
94944
94947 real_packet->type = type;
94948 real_packet->count = count;
94949
94951}
94952
94954{
94955 memset(packet, 0, sizeof(*packet));
94956}
94957
94958#define free_packet_edit_unit_remove_by_id(_packet) (void) 0
94959#define destroy_packet_edit_unit_remove_by_id free
94960
94961#ifdef FREECIV_DELTA_PROTOCOL
94962#define hash_packet_edit_unit_remove_by_id_100 hash_const
94963#define cmp_packet_edit_unit_remove_by_id_100 cmp_const
94965#endif /* FREECIV_DELTA_PROTOCOL */
94966
94968{
94969#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove_by_id(_packet)
94971
94972#ifdef FREECIV_JSON_CONNECTION
94973 struct plocation field_addr;
94974 {
94975 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94978 }
94979#endif /* FREECIV_JSON_CONNECTION */
94980
94981 log_packet_detailed("packet_edit_unit_remove_by_id_100: got info about ()");
94982
94983#ifdef FREECIV_DELTA_PROTOCOL
94986 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE_BY_ID;
94987
94988 if (nullptr == *hash) {
94990 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
94991 }
94992
94993 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94994 *real_packet = *old;
94995 } else {
94996 /* packet is already initialized empty */
94997 log_packet_detailed(" no old info");
94998 }
94999
95000#ifdef FREECIV_JSON_CONNECTION
95001 field_addr.name = "fields";
95002#endif /* FREECIV_JSON_CONNECTION */
95003 DIO_BV_GET(&din, &field_addr, fields);
95004
95005 if (BV_ISSET(fields, 0)) {
95006 log_packet_detailed(" got field 'id'");
95007
95008#ifdef FREECIV_JSON_CONNECTION
95009 field_addr.name = "id";
95010#endif /* FREECIV_JSON_CONNECTION */
95011
95012 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95014 }
95015 }
95016
95017 if (nullptr == old) {
95018 old = fc_malloc(sizeof(*old));
95020 *old = *real_packet;
95022 } else {
95023 *old = *real_packet;
95024 }
95025
95026#else /* FREECIV_DELTA_PROTOCOL */
95027#ifdef FREECIV_JSON_CONNECTION
95028 field_addr.name = "id";
95029#endif /* FREECIV_JSON_CONNECTION */
95030
95031 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95033 }
95034#endif /* FREECIV_DELTA_PROTOCOL */
95035
95037#undef FREE_PACKET_STRUCT
95038}
95039
95041{
95042 const struct packet_edit_unit_remove_by_id *real_packet = packet;
95043 int e;
95045
95046 log_packet_detailed("packet_edit_unit_remove_by_id_100: sending info about ()");
95047
95048#ifdef FREECIV_DELTA_PROTOCOL
95051 bool differ;
95052 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE_BY_ID;
95053
95054 if (nullptr == *hash) {
95056 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
95057 }
95058 BV_CLR_ALL(fields);
95059
95060 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95061 old = fc_malloc(sizeof(*old));
95062 /* temporary bitcopy just to insert correctly */
95063 *old = *real_packet;
95066 }
95067
95068 differ = (old->id != real_packet->id);
95069 if (differ) {
95070 BV_SET(fields, 0);
95071 }
95072#endif /* FREECIV_DELTA_PROTOCOL */
95073
95074#ifdef FREECIV_JSON_CONNECTION
95075 struct plocation field_addr;
95076 {
95077 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95080 }
95081#endif /* FREECIV_JSON_CONNECTION */
95082
95083#ifdef FREECIV_DELTA_PROTOCOL
95084#ifdef FREECIV_JSON_CONNECTION
95085 field_addr.name = "fields";
95086#endif /* FREECIV_JSON_CONNECTION */
95087 e = 0;
95088 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95089 if (e) {
95090 log_packet_detailed("fields bitvector error detected");
95091 }
95092
95093 if (BV_ISSET(fields, 0)) {
95094 log_packet_detailed(" field 'id' has changed");
95095
95096#ifdef FREECIV_JSON_CONNECTION
95097 field_addr.name = "id";
95098#endif /* FREECIV_JSON_CONNECTION */
95099 e = 0;
95100
95101 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95102
95103 if (e) {
95104 log_packet_detailed("'id' field error detected");
95105 }
95106 }
95107
95108 *old = *real_packet;
95109
95110#else /* FREECIV_DELTA_PROTOCOL */
95111#ifdef FREECIV_JSON_CONNECTION
95112 field_addr.name = "id";
95113#endif /* FREECIV_JSON_CONNECTION */
95114 e = 0;
95115
95116 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95117
95118 if (e) {
95119 log_packet_detailed("'id' field error detected");
95120 }
95121#endif /* FREECIV_DELTA_PROTOCOL */
95122
95124}
95125
95127{
95128 if (!pc->used) {
95129 log_error("WARNING: trying to send data to the closed connection %s",
95131 return -1;
95132 }
95133 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet != nullptr, -1,
95134 "Handler for PACKET_EDIT_UNIT_REMOVE_BY_ID not installed");
95135 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet(pc, packet);
95136}
95137
95139{
95140 struct packet_edit_unit_remove_by_id packet, *real_packet = &packet;
95141
95142 real_packet->id = id;
95143
95145}
95146
95147static inline void init_packet_edit_unit(struct packet_edit_unit *packet)
95148{
95149 memset(packet, 0, sizeof(*packet));
95150}
95151
95152#define free_packet_edit_unit(_packet) (void) 0
95153#define destroy_packet_edit_unit free
95154
95155#ifdef FREECIV_DELTA_PROTOCOL
95157{
95158 const struct packet_edit_unit *key = (const struct packet_edit_unit *) vkey;
95159 genhash_val_t result = 0;
95160
95161 result += key->id;
95162
95163 result &= 0xFFFFFFFF;
95164 return result;
95165}
95166
95167static bool cmp_packet_edit_unit_100(const void *vkey1, const void *vkey2)
95168{
95169 const struct packet_edit_unit *old = (const struct packet_edit_unit *) vkey1;
95170 const struct packet_edit_unit *real_packet = (const struct packet_edit_unit *) vkey2;
95171 bool differ;
95172
95173 differ = (old->id != real_packet->id);
95174
95175 return !differ;
95176}
95178#endif /* FREECIV_DELTA_PROTOCOL */
95179
95181{
95182#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit(_packet)
95184
95185#ifdef FREECIV_JSON_CONNECTION
95186 struct plocation field_addr;
95187 {
95188 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95191 }
95192#endif /* FREECIV_JSON_CONNECTION */
95193
95194#ifdef FREECIV_JSON_CONNECTION
95195 field_addr.name = "id";
95196#endif /* FREECIV_JSON_CONNECTION */
95197
95198 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95200 }
95201
95202 log_packet_detailed("packet_edit_unit_100: got info about (%d)",
95203 real_packet->id);
95204
95205#ifdef FREECIV_DELTA_PROTOCOL
95207 struct packet_edit_unit *old;
95208 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT;
95209
95210 if (nullptr == *hash) {
95212 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
95213 }
95214
95215 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95216 *real_packet = *old;
95217 } else {
95218 /* packet is already initialized empty */
95219 log_packet_detailed(" no old info");
95220 }
95221
95222#ifdef FREECIV_JSON_CONNECTION
95223 field_addr.name = "fields";
95224#endif /* FREECIV_JSON_CONNECTION */
95225 DIO_BV_GET(&din, &field_addr, fields);
95226
95227 if (BV_ISSET(fields, 0)) {
95228 log_packet_detailed(" got field 'utype'");
95229
95230#ifdef FREECIV_JSON_CONNECTION
95231 field_addr.name = "utype";
95232#endif /* FREECIV_JSON_CONNECTION */
95233
95234 {
95235 int readin;
95236
95237 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
95239 }
95240 real_packet->utype = readin;
95241 }
95242 }
95243
95244 if (BV_ISSET(fields, 1)) {
95245 log_packet_detailed(" got field 'owner'");
95246
95247#ifdef FREECIV_JSON_CONNECTION
95248 field_addr.name = "owner";
95249#endif /* FREECIV_JSON_CONNECTION */
95250
95251 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95253 }
95254 }
95255
95256 if (BV_ISSET(fields, 2)) {
95257 log_packet_detailed(" got field 'homecity'");
95258
95259#ifdef FREECIV_JSON_CONNECTION
95260 field_addr.name = "homecity";
95261#endif /* FREECIV_JSON_CONNECTION */
95262
95263 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
95265 }
95266 }
95267
95268 if (BV_ISSET(fields, 3)) {
95269 log_packet_detailed(" got field 'moves_left'");
95270
95271#ifdef FREECIV_JSON_CONNECTION
95272 field_addr.name = "moves_left";
95273#endif /* FREECIV_JSON_CONNECTION */
95274
95275 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
95276 RECEIVE_PACKET_FIELD_ERROR(moves_left);
95277 }
95278 }
95279
95280 if (BV_ISSET(fields, 4)) {
95281 log_packet_detailed(" got field 'hp'");
95282
95283#ifdef FREECIV_JSON_CONNECTION
95284 field_addr.name = "hp";
95285#endif /* FREECIV_JSON_CONNECTION */
95286
95287 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
95289 }
95290 }
95291
95292 if (BV_ISSET(fields, 5)) {
95293 log_packet_detailed(" got field 'veteran'");
95294
95295#ifdef FREECIV_JSON_CONNECTION
95296 field_addr.name = "veteran";
95297#endif /* FREECIV_JSON_CONNECTION */
95298
95299 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
95301 }
95302 }
95303
95304 if (BV_ISSET(fields, 6)) {
95305 log_packet_detailed(" got field 'fuel'");
95306
95307#ifdef FREECIV_JSON_CONNECTION
95308 field_addr.name = "fuel";
95309#endif /* FREECIV_JSON_CONNECTION */
95310
95311 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
95313 }
95314 }
95315
95316 if (BV_ISSET(fields, 7)) {
95317 log_packet_detailed(" got field 'activity'");
95318
95319#ifdef FREECIV_JSON_CONNECTION
95320 field_addr.name = "activity";
95321#endif /* FREECIV_JSON_CONNECTION */
95322
95323 {
95324 int readin;
95325
95326 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
95328 }
95329 real_packet->activity = readin;
95330 }
95331 }
95332
95333 if (BV_ISSET(fields, 8)) {
95334 log_packet_detailed(" got field 'activity_count'");
95335
95336#ifdef FREECIV_JSON_CONNECTION
95337 field_addr.name = "activity_count";
95338#endif /* FREECIV_JSON_CONNECTION */
95339
95340 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
95341 RECEIVE_PACKET_FIELD_ERROR(activity_count);
95342 }
95343 }
95344
95345 if (BV_ISSET(fields, 9)) {
95346 log_packet_detailed(" got field 'activity_base'");
95347
95348#ifdef FREECIV_JSON_CONNECTION
95349 field_addr.name = "activity_base";
95350#endif /* FREECIV_JSON_CONNECTION */
95351
95352 {
95353 int readin;
95354
95355 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
95356 RECEIVE_PACKET_FIELD_ERROR(activity_base);
95357 }
95358 real_packet->activity_base = readin;
95359 }
95360 }
95361
95362 real_packet->debug = BV_ISSET(fields, 10);
95363
95364 real_packet->moved = BV_ISSET(fields, 11);
95365
95366 real_packet->paradropped = BV_ISSET(fields, 12);
95367
95368 real_packet->done_moving = BV_ISSET(fields, 13);
95369
95370 if (BV_ISSET(fields, 14)) {
95371 log_packet_detailed(" got field 'transported_by'");
95372
95373#ifdef FREECIV_JSON_CONNECTION
95374 field_addr.name = "transported_by";
95375#endif /* FREECIV_JSON_CONNECTION */
95376
95377 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
95378 RECEIVE_PACKET_FIELD_ERROR(transported_by);
95379 }
95380 }
95381
95382 real_packet->stay = BV_ISSET(fields, 15);
95383
95384 if (nullptr == old) {
95385 old = fc_malloc(sizeof(*old));
95387 *old = *real_packet;
95389 } else {
95390 *old = *real_packet;
95391 }
95392
95393#else /* FREECIV_DELTA_PROTOCOL */
95394#ifdef FREECIV_JSON_CONNECTION
95395 field_addr.name = "utype";
95396#endif /* FREECIV_JSON_CONNECTION */
95397
95398 {
95399 int readin;
95400
95401 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
95403 }
95404 real_packet->utype = readin;
95405 }
95406
95407#ifdef FREECIV_JSON_CONNECTION
95408 field_addr.name = "owner";
95409#endif /* FREECIV_JSON_CONNECTION */
95410
95411 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95413 }
95414
95415#ifdef FREECIV_JSON_CONNECTION
95416 field_addr.name = "homecity";
95417#endif /* FREECIV_JSON_CONNECTION */
95418
95419 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
95421 }
95422
95423#ifdef FREECIV_JSON_CONNECTION
95424 field_addr.name = "moves_left";
95425#endif /* FREECIV_JSON_CONNECTION */
95426
95427 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
95428 RECEIVE_PACKET_FIELD_ERROR(moves_left);
95429 }
95430
95431#ifdef FREECIV_JSON_CONNECTION
95432 field_addr.name = "hp";
95433#endif /* FREECIV_JSON_CONNECTION */
95434
95435 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
95437 }
95438
95439#ifdef FREECIV_JSON_CONNECTION
95440 field_addr.name = "veteran";
95441#endif /* FREECIV_JSON_CONNECTION */
95442
95443 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
95445 }
95446
95447#ifdef FREECIV_JSON_CONNECTION
95448 field_addr.name = "fuel";
95449#endif /* FREECIV_JSON_CONNECTION */
95450
95451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
95453 }
95454
95455#ifdef FREECIV_JSON_CONNECTION
95456 field_addr.name = "activity";
95457#endif /* FREECIV_JSON_CONNECTION */
95458
95459 {
95460 int readin;
95461
95462 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
95464 }
95465 real_packet->activity = readin;
95466 }
95467
95468#ifdef FREECIV_JSON_CONNECTION
95469 field_addr.name = "activity_count";
95470#endif /* FREECIV_JSON_CONNECTION */
95471
95472 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
95473 RECEIVE_PACKET_FIELD_ERROR(activity_count);
95474 }
95475
95476#ifdef FREECIV_JSON_CONNECTION
95477 field_addr.name = "activity_base";
95478#endif /* FREECIV_JSON_CONNECTION */
95479
95480 {
95481 int readin;
95482
95483 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
95484 RECEIVE_PACKET_FIELD_ERROR(activity_base);
95485 }
95486 real_packet->activity_base = readin;
95487 }
95488
95489#ifdef FREECIV_JSON_CONNECTION
95490 field_addr.name = "debug";
95491#endif /* FREECIV_JSON_CONNECTION */
95492
95493 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
95495 }
95496
95497#ifdef FREECIV_JSON_CONNECTION
95498 field_addr.name = "moved";
95499#endif /* FREECIV_JSON_CONNECTION */
95500
95501 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->moved)) {
95503 }
95504
95505#ifdef FREECIV_JSON_CONNECTION
95506 field_addr.name = "paradropped";
95507#endif /* FREECIV_JSON_CONNECTION */
95508
95509 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
95510 RECEIVE_PACKET_FIELD_ERROR(paradropped);
95511 }
95512
95513#ifdef FREECIV_JSON_CONNECTION
95514 field_addr.name = "done_moving";
95515#endif /* FREECIV_JSON_CONNECTION */
95516
95517 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
95518 RECEIVE_PACKET_FIELD_ERROR(done_moving);
95519 }
95520
95521#ifdef FREECIV_JSON_CONNECTION
95522 field_addr.name = "transported_by";
95523#endif /* FREECIV_JSON_CONNECTION */
95524
95525 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
95526 RECEIVE_PACKET_FIELD_ERROR(transported_by);
95527 }
95528
95529#ifdef FREECIV_JSON_CONNECTION
95530 field_addr.name = "stay";
95531#endif /* FREECIV_JSON_CONNECTION */
95532
95533 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
95535 }
95536#endif /* FREECIV_DELTA_PROTOCOL */
95537
95539#undef FREE_PACKET_STRUCT
95540}
95541
95542static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
95543{
95544 const struct packet_edit_unit *real_packet = packet;
95545 int e;
95547
95548 log_packet_detailed("packet_edit_unit_100: sending info about (%d)",
95549 real_packet->id);
95550
95551#ifdef FREECIV_DELTA_PROTOCOL
95553 struct packet_edit_unit *old;
95554 bool differ;
95555 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT;
95556
95557 if (nullptr == *hash) {
95559 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
95560 }
95561 BV_CLR_ALL(fields);
95562
95563 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95564 old = fc_malloc(sizeof(*old));
95565 /* temporary bitcopy just to insert correctly */
95566 *old = *real_packet;
95569 }
95570
95571 differ = (old->utype != real_packet->utype);
95572 if (differ) {
95573 BV_SET(fields, 0);
95574 }
95575
95576 differ = (old->owner != real_packet->owner);
95577 if (differ) {
95578 BV_SET(fields, 1);
95579 }
95580
95581 differ = (old->homecity != real_packet->homecity);
95582 if (differ) {
95583 BV_SET(fields, 2);
95584 }
95585
95586 differ = (old->moves_left != real_packet->moves_left);
95587 if (differ) {
95588 BV_SET(fields, 3);
95589 }
95590
95591 differ = (old->hp != real_packet->hp);
95592 if (differ) {
95593 BV_SET(fields, 4);
95594 }
95595
95596 differ = (old->veteran != real_packet->veteran);
95597 if (differ) {
95598 BV_SET(fields, 5);
95599 }
95600
95601 differ = (old->fuel != real_packet->fuel);
95602 if (differ) {
95603 BV_SET(fields, 6);
95604 }
95605
95606 differ = (old->activity != real_packet->activity);
95607 if (differ) {
95608 BV_SET(fields, 7);
95609 }
95610
95611 differ = (old->activity_count != real_packet->activity_count);
95612 if (differ) {
95613 BV_SET(fields, 8);
95614 }
95615
95616 differ = (old->activity_base != real_packet->activity_base);
95617 if (differ) {
95618 BV_SET(fields, 9);
95619 }
95620
95621 /* folded into head */
95622 if (real_packet->debug) {
95623 BV_SET(fields, 10);
95624 }
95625
95626 /* folded into head */
95627 if (real_packet->moved) {
95628 BV_SET(fields, 11);
95629 }
95630
95631 /* folded into head */
95632 if (real_packet->paradropped) {
95633 BV_SET(fields, 12);
95634 }
95635
95636 /* folded into head */
95637 if (real_packet->done_moving) {
95638 BV_SET(fields, 13);
95639 }
95640
95641 differ = (old->transported_by != real_packet->transported_by);
95642 if (differ) {
95643 BV_SET(fields, 14);
95644 }
95645
95646 /* folded into head */
95647 if (real_packet->stay) {
95648 BV_SET(fields, 15);
95649 }
95650#endif /* FREECIV_DELTA_PROTOCOL */
95651
95652#ifdef FREECIV_JSON_CONNECTION
95653 struct plocation field_addr;
95654 {
95655 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95658 }
95659#endif /* FREECIV_JSON_CONNECTION */
95660
95661#ifdef FREECIV_JSON_CONNECTION
95662 field_addr.name = "id";
95663#endif /* FREECIV_JSON_CONNECTION */
95664 e = 0;
95665
95666 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95667
95668 if (e) {
95669 log_packet_detailed("'id' field error detected");
95670 }
95671
95672#ifdef FREECIV_DELTA_PROTOCOL
95673#ifdef FREECIV_JSON_CONNECTION
95674 field_addr.name = "fields";
95675#endif /* FREECIV_JSON_CONNECTION */
95676 e = 0;
95677 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95678 if (e) {
95679 log_packet_detailed("fields bitvector error detected");
95680 }
95681
95682 if (BV_ISSET(fields, 0)) {
95683 log_packet_detailed(" field 'utype' has changed");
95684
95685#ifdef FREECIV_JSON_CONNECTION
95686 field_addr.name = "utype";
95687#endif /* FREECIV_JSON_CONNECTION */
95688 e = 0;
95689
95690 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
95691
95692 if (e) {
95693 log_packet_detailed("'utype' field error detected");
95694 }
95695 }
95696
95697 if (BV_ISSET(fields, 1)) {
95698 log_packet_detailed(" field 'owner' has changed");
95699
95700#ifdef FREECIV_JSON_CONNECTION
95701 field_addr.name = "owner";
95702#endif /* FREECIV_JSON_CONNECTION */
95703 e = 0;
95704
95705 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95706
95707 if (e) {
95708 log_packet_detailed("'owner' field error detected");
95709 }
95710 }
95711
95712 if (BV_ISSET(fields, 2)) {
95713 log_packet_detailed(" field 'homecity' has changed");
95714
95715#ifdef FREECIV_JSON_CONNECTION
95716 field_addr.name = "homecity";
95717#endif /* FREECIV_JSON_CONNECTION */
95718 e = 0;
95719
95720 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
95721
95722 if (e) {
95723 log_packet_detailed("'homecity' field error detected");
95724 }
95725 }
95726
95727 if (BV_ISSET(fields, 3)) {
95728 log_packet_detailed(" field 'moves_left' has changed");
95729
95730#ifdef FREECIV_JSON_CONNECTION
95731 field_addr.name = "moves_left";
95732#endif /* FREECIV_JSON_CONNECTION */
95733 e = 0;
95734
95735 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
95736
95737 if (e) {
95738 log_packet_detailed("'moves_left' field error detected");
95739 }
95740 }
95741
95742 if (BV_ISSET(fields, 4)) {
95743 log_packet_detailed(" field 'hp' has changed");
95744
95745#ifdef FREECIV_JSON_CONNECTION
95746 field_addr.name = "hp";
95747#endif /* FREECIV_JSON_CONNECTION */
95748 e = 0;
95749
95750 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
95751
95752 if (e) {
95753 log_packet_detailed("'hp' field error detected");
95754 }
95755 }
95756
95757 if (BV_ISSET(fields, 5)) {
95758 log_packet_detailed(" field 'veteran' has changed");
95759
95760#ifdef FREECIV_JSON_CONNECTION
95761 field_addr.name = "veteran";
95762#endif /* FREECIV_JSON_CONNECTION */
95763 e = 0;
95764
95765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
95766
95767 if (e) {
95768 log_packet_detailed("'veteran' field error detected");
95769 }
95770 }
95771
95772 if (BV_ISSET(fields, 6)) {
95773 log_packet_detailed(" field 'fuel' has changed");
95774
95775#ifdef FREECIV_JSON_CONNECTION
95776 field_addr.name = "fuel";
95777#endif /* FREECIV_JSON_CONNECTION */
95778 e = 0;
95779
95780 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
95781
95782 if (e) {
95783 log_packet_detailed("'fuel' field error detected");
95784 }
95785 }
95786
95787 if (BV_ISSET(fields, 7)) {
95788 log_packet_detailed(" field 'activity' has changed");
95789
95790#ifdef FREECIV_JSON_CONNECTION
95791 field_addr.name = "activity";
95792#endif /* FREECIV_JSON_CONNECTION */
95793 e = 0;
95794
95795 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
95796
95797 if (e) {
95798 log_packet_detailed("'activity' field error detected");
95799 }
95800 }
95801
95802 if (BV_ISSET(fields, 8)) {
95803 log_packet_detailed(" field 'activity_count' has changed");
95804
95805#ifdef FREECIV_JSON_CONNECTION
95806 field_addr.name = "activity_count";
95807#endif /* FREECIV_JSON_CONNECTION */
95808 e = 0;
95809
95810 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
95811
95812 if (e) {
95813 log_packet_detailed("'activity_count' field error detected");
95814 }
95815 }
95816
95817 if (BV_ISSET(fields, 9)) {
95818 log_packet_detailed(" field 'activity_base' has changed");
95819
95820#ifdef FREECIV_JSON_CONNECTION
95821 field_addr.name = "activity_base";
95822#endif /* FREECIV_JSON_CONNECTION */
95823 e = 0;
95824
95825 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
95826
95827 if (e) {
95828 log_packet_detailed("'activity_base' field error detected");
95829 }
95830 }
95831
95832 /* field 10 is folded into the header */
95833
95834 /* field 11 is folded into the header */
95835
95836 /* field 12 is folded into the header */
95837
95838 /* field 13 is folded into the header */
95839
95840 if (BV_ISSET(fields, 14)) {
95841 log_packet_detailed(" field 'transported_by' has changed");
95842
95843#ifdef FREECIV_JSON_CONNECTION
95844 field_addr.name = "transported_by";
95845#endif /* FREECIV_JSON_CONNECTION */
95846 e = 0;
95847
95848 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
95849
95850 if (e) {
95851 log_packet_detailed("'transported_by' field error detected");
95852 }
95853 }
95854
95855 /* field 15 is folded into the header */
95856
95857 *old = *real_packet;
95858
95859#else /* FREECIV_DELTA_PROTOCOL */
95860#ifdef FREECIV_JSON_CONNECTION
95861 field_addr.name = "utype";
95862#endif /* FREECIV_JSON_CONNECTION */
95863 e = 0;
95864
95865 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
95866
95867 if (e) {
95868 log_packet_detailed("'utype' field error detected");
95869 }
95870
95871#ifdef FREECIV_JSON_CONNECTION
95872 field_addr.name = "owner";
95873#endif /* FREECIV_JSON_CONNECTION */
95874 e = 0;
95875
95876 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95877
95878 if (e) {
95879 log_packet_detailed("'owner' field error detected");
95880 }
95881
95882#ifdef FREECIV_JSON_CONNECTION
95883 field_addr.name = "homecity";
95884#endif /* FREECIV_JSON_CONNECTION */
95885 e = 0;
95886
95887 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
95888
95889 if (e) {
95890 log_packet_detailed("'homecity' field error detected");
95891 }
95892
95893#ifdef FREECIV_JSON_CONNECTION
95894 field_addr.name = "moves_left";
95895#endif /* FREECIV_JSON_CONNECTION */
95896 e = 0;
95897
95898 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
95899
95900 if (e) {
95901 log_packet_detailed("'moves_left' field error detected");
95902 }
95903
95904#ifdef FREECIV_JSON_CONNECTION
95905 field_addr.name = "hp";
95906#endif /* FREECIV_JSON_CONNECTION */
95907 e = 0;
95908
95909 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
95910
95911 if (e) {
95912 log_packet_detailed("'hp' field error detected");
95913 }
95914
95915#ifdef FREECIV_JSON_CONNECTION
95916 field_addr.name = "veteran";
95917#endif /* FREECIV_JSON_CONNECTION */
95918 e = 0;
95919
95920 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
95921
95922 if (e) {
95923 log_packet_detailed("'veteran' field error detected");
95924 }
95925
95926#ifdef FREECIV_JSON_CONNECTION
95927 field_addr.name = "fuel";
95928#endif /* FREECIV_JSON_CONNECTION */
95929 e = 0;
95930
95931 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
95932
95933 if (e) {
95934 log_packet_detailed("'fuel' field error detected");
95935 }
95936
95937#ifdef FREECIV_JSON_CONNECTION
95938 field_addr.name = "activity";
95939#endif /* FREECIV_JSON_CONNECTION */
95940 e = 0;
95941
95942 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
95943
95944 if (e) {
95945 log_packet_detailed("'activity' field error detected");
95946 }
95947
95948#ifdef FREECIV_JSON_CONNECTION
95949 field_addr.name = "activity_count";
95950#endif /* FREECIV_JSON_CONNECTION */
95951 e = 0;
95952
95953 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
95954
95955 if (e) {
95956 log_packet_detailed("'activity_count' field error detected");
95957 }
95958
95959#ifdef FREECIV_JSON_CONNECTION
95960 field_addr.name = "activity_base";
95961#endif /* FREECIV_JSON_CONNECTION */
95962 e = 0;
95963
95964 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
95965
95966 if (e) {
95967 log_packet_detailed("'activity_base' field error detected");
95968 }
95969
95970#ifdef FREECIV_JSON_CONNECTION
95971 field_addr.name = "debug";
95972#endif /* FREECIV_JSON_CONNECTION */
95973 e = 0;
95974
95975 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
95976
95977 if (e) {
95978 log_packet_detailed("'debug' field error detected");
95979 }
95980
95981#ifdef FREECIV_JSON_CONNECTION
95982 field_addr.name = "moved";
95983#endif /* FREECIV_JSON_CONNECTION */
95984 e = 0;
95985
95986 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->moved);
95987
95988 if (e) {
95989 log_packet_detailed("'moved' field error detected");
95990 }
95991
95992#ifdef FREECIV_JSON_CONNECTION
95993 field_addr.name = "paradropped";
95994#endif /* FREECIV_JSON_CONNECTION */
95995 e = 0;
95996
95997 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
95998
95999 if (e) {
96000 log_packet_detailed("'paradropped' field error detected");
96001 }
96002
96003#ifdef FREECIV_JSON_CONNECTION
96004 field_addr.name = "done_moving";
96005#endif /* FREECIV_JSON_CONNECTION */
96006 e = 0;
96007
96008 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
96009
96010 if (e) {
96011 log_packet_detailed("'done_moving' field error detected");
96012 }
96013
96014#ifdef FREECIV_JSON_CONNECTION
96015 field_addr.name = "transported_by";
96016#endif /* FREECIV_JSON_CONNECTION */
96017 e = 0;
96018
96019 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
96020
96021 if (e) {
96022 log_packet_detailed("'transported_by' field error detected");
96023 }
96024
96025#ifdef FREECIV_JSON_CONNECTION
96026 field_addr.name = "stay";
96027#endif /* FREECIV_JSON_CONNECTION */
96028 e = 0;
96029
96030 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
96031
96032 if (e) {
96033 log_packet_detailed("'stay' field error detected");
96034 }
96035#endif /* FREECIV_DELTA_PROTOCOL */
96036
96038}
96039
96040int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
96041{
96042 if (!pc->used) {
96043 log_error("WARNING: trying to send data to the closed connection %s",
96045 return -1;
96046 }
96047 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT].packet != nullptr, -1,
96048 "Handler for PACKET_EDIT_UNIT not installed");
96049 return pc->phs.handlers->send[PACKET_EDIT_UNIT].packet(pc, packet);
96050}
96051
96053{
96054 memset(packet, 0, sizeof(*packet));
96055}
96056
96057#define free_packet_edit_city_create(_packet) (void) 0
96058#define destroy_packet_edit_city_create free
96059
96060#ifdef FREECIV_DELTA_PROTOCOL
96061#define hash_packet_edit_city_create_100 hash_const
96062#define cmp_packet_edit_city_create_100 cmp_const
96064#endif /* FREECIV_DELTA_PROTOCOL */
96065
96067{
96068#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_create(_packet)
96070
96071#ifdef FREECIV_JSON_CONNECTION
96072 struct plocation field_addr;
96073 {
96074 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96077 }
96078#endif /* FREECIV_JSON_CONNECTION */
96079
96080 log_packet_detailed("packet_edit_city_create_100: got info about ()");
96081
96082#ifdef FREECIV_DELTA_PROTOCOL
96085 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_CREATE;
96086
96087 if (nullptr == *hash) {
96089 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
96090 }
96091
96092 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
96093 *real_packet = *old;
96094 } else {
96095 /* packet is already initialized empty */
96096 log_packet_detailed(" no old info");
96097 }
96098
96099#ifdef FREECIV_JSON_CONNECTION
96100 field_addr.name = "fields";
96101#endif /* FREECIV_JSON_CONNECTION */
96102 DIO_BV_GET(&din, &field_addr, fields);
96103
96104 if (BV_ISSET(fields, 0)) {
96105 log_packet_detailed(" got field 'owner'");
96106
96107#ifdef FREECIV_JSON_CONNECTION
96108 field_addr.name = "owner";
96109#endif /* FREECIV_JSON_CONNECTION */
96110
96111 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
96113 }
96114 }
96115
96116 if (BV_ISSET(fields, 1)) {
96117 log_packet_detailed(" got field 'tile'");
96118
96119#ifdef FREECIV_JSON_CONNECTION
96120 field_addr.name = "tile";
96121#endif /* FREECIV_JSON_CONNECTION */
96122
96123 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
96125 }
96126 }
96127
96128 if (BV_ISSET(fields, 2)) {
96129 log_packet_detailed(" got field 'size'");
96130
96131#ifdef FREECIV_JSON_CONNECTION
96132 field_addr.name = "size";
96133#endif /* FREECIV_JSON_CONNECTION */
96134
96135 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
96137 }
96138 }
96139
96140 if (BV_ISSET(fields, 3)) {
96141 log_packet_detailed(" got field 'tag'");
96142
96143#ifdef FREECIV_JSON_CONNECTION
96144 field_addr.name = "tag";
96145#endif /* FREECIV_JSON_CONNECTION */
96146
96147 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
96149 }
96150 }
96151
96152 if (nullptr == old) {
96153 old = fc_malloc(sizeof(*old));
96155 *old = *real_packet;
96157 } else {
96158 *old = *real_packet;
96159 }
96160
96161#else /* FREECIV_DELTA_PROTOCOL */
96162#ifdef FREECIV_JSON_CONNECTION
96163 field_addr.name = "owner";
96164#endif /* FREECIV_JSON_CONNECTION */
96165
96166 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
96168 }
96169
96170#ifdef FREECIV_JSON_CONNECTION
96171 field_addr.name = "tile";
96172#endif /* FREECIV_JSON_CONNECTION */
96173
96174 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
96176 }
96177
96178#ifdef FREECIV_JSON_CONNECTION
96179 field_addr.name = "size";
96180#endif /* FREECIV_JSON_CONNECTION */
96181
96182 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
96184 }
96185
96186#ifdef FREECIV_JSON_CONNECTION
96187 field_addr.name = "tag";
96188#endif /* FREECIV_JSON_CONNECTION */
96189
96190 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
96192 }
96193#endif /* FREECIV_DELTA_PROTOCOL */
96194
96196#undef FREE_PACKET_STRUCT
96197}
96198
96200{
96201 const struct packet_edit_city_create *real_packet = packet;
96202 int e;
96204
96205 log_packet_detailed("packet_edit_city_create_100: sending info about ()");
96206
96207#ifdef FREECIV_DELTA_PROTOCOL
96210 bool differ;
96211 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_CREATE;
96212
96213 if (nullptr == *hash) {
96215 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
96216 }
96217 BV_CLR_ALL(fields);
96218
96219 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
96220 old = fc_malloc(sizeof(*old));
96221 /* temporary bitcopy just to insert correctly */
96222 *old = *real_packet;
96225 }
96226
96227 differ = (old->owner != real_packet->owner);
96228 if (differ) {
96229 BV_SET(fields, 0);
96230 }
96231
96232 differ = (old->tile != real_packet->tile);
96233 if (differ) {
96234 BV_SET(fields, 1);
96235 }
96236
96237 differ = (old->size != real_packet->size);
96238 if (differ) {
96239 BV_SET(fields, 2);
96240 }
96241
96242 differ = (old->tag != real_packet->tag);
96243 if (differ) {
96244 BV_SET(fields, 3);
96245 }
96246#endif /* FREECIV_DELTA_PROTOCOL */
96247
96248#ifdef FREECIV_JSON_CONNECTION
96249 struct plocation field_addr;
96250 {
96251 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96254 }
96255#endif /* FREECIV_JSON_CONNECTION */
96256
96257#ifdef FREECIV_DELTA_PROTOCOL
96258#ifdef FREECIV_JSON_CONNECTION
96259 field_addr.name = "fields";
96260#endif /* FREECIV_JSON_CONNECTION */
96261 e = 0;
96262 e |= DIO_BV_PUT(&dout, &field_addr, fields);
96263 if (e) {
96264 log_packet_detailed("fields bitvector error detected");
96265 }
96266
96267 if (BV_ISSET(fields, 0)) {
96268 log_packet_detailed(" field 'owner' has changed");
96269
96270#ifdef FREECIV_JSON_CONNECTION
96271 field_addr.name = "owner";
96272#endif /* FREECIV_JSON_CONNECTION */
96273 e = 0;
96274
96275 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
96276
96277 if (e) {
96278 log_packet_detailed("'owner' field error detected");
96279 }
96280 }
96281
96282 if (BV_ISSET(fields, 1)) {
96283 log_packet_detailed(" field 'tile' has changed");
96284
96285#ifdef FREECIV_JSON_CONNECTION
96286 field_addr.name = "tile";
96287#endif /* FREECIV_JSON_CONNECTION */
96288 e = 0;
96289
96290 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
96291
96292 if (e) {
96293 log_packet_detailed("'tile' field error detected");
96294 }
96295 }
96296
96297 if (BV_ISSET(fields, 2)) {
96298 log_packet_detailed(" field 'size' has changed");
96299
96300#ifdef FREECIV_JSON_CONNECTION
96301 field_addr.name = "size";
96302#endif /* FREECIV_JSON_CONNECTION */
96303 e = 0;
96304
96305 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
96306
96307 if (e) {
96308 log_packet_detailed("'size' field error detected");
96309 }
96310 }
96311
96312 if (BV_ISSET(fields, 3)) {
96313 log_packet_detailed(" field 'tag' has changed");
96314
96315#ifdef FREECIV_JSON_CONNECTION
96316 field_addr.name = "tag";
96317#endif /* FREECIV_JSON_CONNECTION */
96318 e = 0;
96319
96320 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
96321
96322 if (e) {
96323 log_packet_detailed("'tag' field error detected");
96324 }
96325 }
96326
96327 *old = *real_packet;
96328
96329#else /* FREECIV_DELTA_PROTOCOL */
96330#ifdef FREECIV_JSON_CONNECTION
96331 field_addr.name = "owner";
96332#endif /* FREECIV_JSON_CONNECTION */
96333 e = 0;
96334
96335 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
96336
96337 if (e) {
96338 log_packet_detailed("'owner' field error detected");
96339 }
96340
96341#ifdef FREECIV_JSON_CONNECTION
96342 field_addr.name = "tile";
96343#endif /* FREECIV_JSON_CONNECTION */
96344 e = 0;
96345
96346 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
96347
96348 if (e) {
96349 log_packet_detailed("'tile' field error detected");
96350 }
96351
96352#ifdef FREECIV_JSON_CONNECTION
96353 field_addr.name = "size";
96354#endif /* FREECIV_JSON_CONNECTION */
96355 e = 0;
96356
96357 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
96358
96359 if (e) {
96360 log_packet_detailed("'size' field error detected");
96361 }
96362
96363#ifdef FREECIV_JSON_CONNECTION
96364 field_addr.name = "tag";
96365#endif /* FREECIV_JSON_CONNECTION */
96366 e = 0;
96367
96368 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
96369
96370 if (e) {
96371 log_packet_detailed("'tag' field error detected");
96372 }
96373#endif /* FREECIV_DELTA_PROTOCOL */
96374
96376}
96377
96379{
96380 if (!pc->used) {
96381 log_error("WARNING: trying to send data to the closed connection %s",
96383 return -1;
96384 }
96385 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet != nullptr, -1,
96386 "Handler for PACKET_EDIT_CITY_CREATE not installed");
96387 return pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet(pc, packet);
96388}
96389
96390int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
96391{
96392 struct packet_edit_city_create packet, *real_packet = &packet;
96393
96396 real_packet->size = size;
96397 real_packet->tag = tag;
96398
96400}
96401
96403{
96404 memset(packet, 0, sizeof(*packet));
96405}
96406
96407#define free_packet_edit_city_remove(_packet) (void) 0
96408#define destroy_packet_edit_city_remove free
96409
96410#ifdef FREECIV_DELTA_PROTOCOL
96411#define hash_packet_edit_city_remove_100 hash_const
96412#define cmp_packet_edit_city_remove_100 cmp_const
96414#endif /* FREECIV_DELTA_PROTOCOL */
96415
96417{
96418#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_remove(_packet)
96420
96421#ifdef FREECIV_JSON_CONNECTION
96422 struct plocation field_addr;
96423 {
96424 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96427 }
96428#endif /* FREECIV_JSON_CONNECTION */
96429
96430 log_packet_detailed("packet_edit_city_remove_100: got info about ()");
96431
96432#ifdef FREECIV_DELTA_PROTOCOL
96435 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_REMOVE;
96436
96437 if (nullptr == *hash) {
96439 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
96440 }
96441
96442 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
96443 *real_packet = *old;
96444 } else {
96445 /* packet is already initialized empty */
96446 log_packet_detailed(" no old info");
96447 }
96448
96449#ifdef FREECIV_JSON_CONNECTION
96450 field_addr.name = "fields";
96451#endif /* FREECIV_JSON_CONNECTION */
96452 DIO_BV_GET(&din, &field_addr, fields);
96453
96454 if (BV_ISSET(fields, 0)) {
96455 log_packet_detailed(" got field 'id'");
96456
96457#ifdef FREECIV_JSON_CONNECTION
96458 field_addr.name = "id";
96459#endif /* FREECIV_JSON_CONNECTION */
96460
96461 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
96463 }
96464 }
96465
96466 if (nullptr == old) {
96467 old = fc_malloc(sizeof(*old));
96469 *old = *real_packet;
96471 } else {
96472 *old = *real_packet;
96473 }
96474
96475#else /* FREECIV_DELTA_PROTOCOL */
96476#ifdef FREECIV_JSON_CONNECTION
96477 field_addr.name = "id";
96478#endif /* FREECIV_JSON_CONNECTION */
96479
96480 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
96482 }
96483#endif /* FREECIV_DELTA_PROTOCOL */
96484
96486#undef FREE_PACKET_STRUCT
96487}
96488
96490{
96491 const struct packet_edit_city_remove *real_packet = packet;
96492 int e;
96494
96495 log_packet_detailed("packet_edit_city_remove_100: sending info about ()");
96496
96497#ifdef FREECIV_DELTA_PROTOCOL
96500 bool differ;
96501 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_REMOVE;
96502
96503 if (nullptr == *hash) {
96505 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
96506 }
96507 BV_CLR_ALL(fields);
96508
96509 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
96510 old = fc_malloc(sizeof(*old));
96511 /* temporary bitcopy just to insert correctly */
96512 *old = *real_packet;
96515 }
96516
96517 differ = (old->id != real_packet->id);
96518 if (differ) {
96519 BV_SET(fields, 0);
96520 }
96521#endif /* FREECIV_DELTA_PROTOCOL */
96522
96523#ifdef FREECIV_JSON_CONNECTION
96524 struct plocation field_addr;
96525 {
96526 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96529 }
96530#endif /* FREECIV_JSON_CONNECTION */
96531
96532#ifdef FREECIV_DELTA_PROTOCOL
96533#ifdef FREECIV_JSON_CONNECTION
96534 field_addr.name = "fields";
96535#endif /* FREECIV_JSON_CONNECTION */
96536 e = 0;
96537 e |= DIO_BV_PUT(&dout, &field_addr, fields);
96538 if (e) {
96539 log_packet_detailed("fields bitvector error detected");
96540 }
96541
96542 if (BV_ISSET(fields, 0)) {
96543 log_packet_detailed(" field 'id' has changed");
96544
96545#ifdef FREECIV_JSON_CONNECTION
96546 field_addr.name = "id";
96547#endif /* FREECIV_JSON_CONNECTION */
96548 e = 0;
96549
96550 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
96551
96552 if (e) {
96553 log_packet_detailed("'id' field error detected");
96554 }
96555 }
96556
96557 *old = *real_packet;
96558
96559#else /* FREECIV_DELTA_PROTOCOL */
96560#ifdef FREECIV_JSON_CONNECTION
96561 field_addr.name = "id";
96562#endif /* FREECIV_JSON_CONNECTION */
96563 e = 0;
96564
96565 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
96566
96567 if (e) {
96568 log_packet_detailed("'id' field error detected");
96569 }
96570#endif /* FREECIV_DELTA_PROTOCOL */
96571
96573}
96574
96576{
96577 if (!pc->used) {
96578 log_error("WARNING: trying to send data to the closed connection %s",
96580 return -1;
96581 }
96582 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet != nullptr, -1,
96583 "Handler for PACKET_EDIT_CITY_REMOVE not installed");
96584 return pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet(pc, packet);
96585}
96586
96588{
96589 struct packet_edit_city_remove packet, *real_packet = &packet;
96590
96591 real_packet->id = id;
96592
96594}
96595
96596static inline void init_packet_edit_city(struct packet_edit_city *packet)
96597{
96598 memset(packet, 0, sizeof(*packet));
96599}
96600
96601#define free_packet_edit_city(_packet) (void) 0
96602#define destroy_packet_edit_city free
96603
96604#ifdef FREECIV_DELTA_PROTOCOL
96606{
96607 const struct packet_edit_city *key = (const struct packet_edit_city *) vkey;
96608 genhash_val_t result = 0;
96609
96610 result += key->id;
96611
96612 result &= 0xFFFFFFFF;
96613 return result;
96614}
96615
96616static bool cmp_packet_edit_city_100(const void *vkey1, const void *vkey2)
96617{
96618 const struct packet_edit_city *old = (const struct packet_edit_city *) vkey1;
96619 const struct packet_edit_city *real_packet = (const struct packet_edit_city *) vkey2;
96620 bool differ;
96621
96622 differ = (old->id != real_packet->id);
96623
96624 return !differ;
96625}
96627#endif /* FREECIV_DELTA_PROTOCOL */
96628
96630{
96631#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city(_packet)
96633
96634#ifdef FREECIV_JSON_CONNECTION
96635 struct plocation field_addr;
96636 {
96637 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96640 }
96641#endif /* FREECIV_JSON_CONNECTION */
96642
96643#ifdef FREECIV_JSON_CONNECTION
96644 field_addr.name = "id";
96645#endif /* FREECIV_JSON_CONNECTION */
96646
96647 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
96649 }
96650
96651 log_packet_detailed("packet_edit_city_100: got info about (%d)",
96652 real_packet->id);
96653
96654#ifdef FREECIV_DELTA_PROTOCOL
96656 struct packet_edit_city *old;
96657 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY;
96658
96659 if (nullptr == *hash) {
96661 nullptr, nullptr, nullptr, destroy_packet_edit_city);
96662 }
96663
96664 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
96665 *real_packet = *old;
96666 } else {
96667 /* packet is already initialized empty */
96668 log_packet_detailed(" no old info");
96669 }
96670
96671#ifdef FREECIV_JSON_CONNECTION
96672 field_addr.name = "fields";
96673#endif /* FREECIV_JSON_CONNECTION */
96674 DIO_BV_GET(&din, &field_addr, fields);
96675
96676 if (BV_ISSET(fields, 0)) {
96677 log_packet_detailed(" got field 'name'");
96678
96679#ifdef FREECIV_JSON_CONNECTION
96680 field_addr.name = "name";
96681#endif /* FREECIV_JSON_CONNECTION */
96682
96683 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
96685 }
96686 }
96687
96688 if (BV_ISSET(fields, 1)) {
96689 log_packet_detailed(" got field 'owner'");
96690
96691#ifdef FREECIV_JSON_CONNECTION
96692 field_addr.name = "owner";
96693#endif /* FREECIV_JSON_CONNECTION */
96694
96695 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
96697 }
96698 }
96699
96700 if (BV_ISSET(fields, 2)) {
96701 log_packet_detailed(" got field 'original'");
96702
96703#ifdef FREECIV_JSON_CONNECTION
96704 field_addr.name = "original";
96705#endif /* FREECIV_JSON_CONNECTION */
96706
96707 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
96709 }
96710 }
96711
96712 if (BV_ISSET(fields, 3)) {
96713 log_packet_detailed(" got field 'size'");
96714
96715#ifdef FREECIV_JSON_CONNECTION
96716 field_addr.name = "size";
96717#endif /* FREECIV_JSON_CONNECTION */
96718
96719 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
96721 }
96722 }
96723
96724 if (BV_ISSET(fields, 4)) {
96725 log_packet_detailed(" got field 'history'");
96726
96727#ifdef FREECIV_JSON_CONNECTION
96728 field_addr.name = "history";
96729#endif /* FREECIV_JSON_CONNECTION */
96730
96731 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
96733 }
96734 }
96735
96736 if (BV_ISSET(fields, 5)) {
96737 log_packet_detailed(" got field 'ppl_happy'");
96738
96739#ifdef FREECIV_JSON_CONNECTION
96740 field_addr.name = "ppl_happy";
96741#endif /* FREECIV_JSON_CONNECTION */
96742
96743 {
96744 int i;
96745
96746
96747#ifdef FREECIV_JSON_CONNECTION
96748 /* Enter array. */
96749 field_addr.sub_location = plocation_elem_new(0);
96750#endif /* FREECIV_JSON_CONNECTION */
96751
96752 for (i = 0; i < 5; i++) {
96753#ifdef FREECIV_JSON_CONNECTION
96754 /* Next array element */
96755 field_addr.sub_location->number = i;
96756#endif /* FREECIV_JSON_CONNECTION */
96757
96758 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
96759 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
96760 }
96761 }
96762
96763#ifdef FREECIV_JSON_CONNECTION
96764 /* Exit array. */
96765 FC_FREE(field_addr.sub_location);
96766#endif /* FREECIV_JSON_CONNECTION */
96767 }
96768 }
96769
96770 if (BV_ISSET(fields, 6)) {
96771 log_packet_detailed(" got field 'ppl_content'");
96772
96773#ifdef FREECIV_JSON_CONNECTION
96774 field_addr.name = "ppl_content";
96775#endif /* FREECIV_JSON_CONNECTION */
96776
96777 {
96778 int i;
96779
96780
96781#ifdef FREECIV_JSON_CONNECTION
96782 /* Enter array. */
96783 field_addr.sub_location = plocation_elem_new(0);
96784#endif /* FREECIV_JSON_CONNECTION */
96785
96786 for (i = 0; i < 5; i++) {
96787#ifdef FREECIV_JSON_CONNECTION
96788 /* Next array element */
96789 field_addr.sub_location->number = i;
96790#endif /* FREECIV_JSON_CONNECTION */
96791
96792 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
96793 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
96794 }
96795 }
96796
96797#ifdef FREECIV_JSON_CONNECTION
96798 /* Exit array. */
96799 FC_FREE(field_addr.sub_location);
96800#endif /* FREECIV_JSON_CONNECTION */
96801 }
96802 }
96803
96804 if (BV_ISSET(fields, 7)) {
96805 log_packet_detailed(" got field 'ppl_unhappy'");
96806
96807#ifdef FREECIV_JSON_CONNECTION
96808 field_addr.name = "ppl_unhappy";
96809#endif /* FREECIV_JSON_CONNECTION */
96810
96811 {
96812 int i;
96813
96814
96815#ifdef FREECIV_JSON_CONNECTION
96816 /* Enter array. */
96817 field_addr.sub_location = plocation_elem_new(0);
96818#endif /* FREECIV_JSON_CONNECTION */
96819
96820 for (i = 0; i < 5; i++) {
96821#ifdef FREECIV_JSON_CONNECTION
96822 /* Next array element */
96823 field_addr.sub_location->number = i;
96824#endif /* FREECIV_JSON_CONNECTION */
96825
96826 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
96827 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
96828 }
96829 }
96830
96831#ifdef FREECIV_JSON_CONNECTION
96832 /* Exit array. */
96833 FC_FREE(field_addr.sub_location);
96834#endif /* FREECIV_JSON_CONNECTION */
96835 }
96836 }
96837
96838 if (BV_ISSET(fields, 8)) {
96839 log_packet_detailed(" got field 'ppl_angry'");
96840
96841#ifdef FREECIV_JSON_CONNECTION
96842 field_addr.name = "ppl_angry";
96843#endif /* FREECIV_JSON_CONNECTION */
96844
96845 {
96846 int i;
96847
96848
96849#ifdef FREECIV_JSON_CONNECTION
96850 /* Enter array. */
96851 field_addr.sub_location = plocation_elem_new(0);
96852#endif /* FREECIV_JSON_CONNECTION */
96853
96854 for (i = 0; i < 5; i++) {
96855#ifdef FREECIV_JSON_CONNECTION
96856 /* Next array element */
96857 field_addr.sub_location->number = i;
96858#endif /* FREECIV_JSON_CONNECTION */
96859
96860 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
96861 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
96862 }
96863 }
96864
96865#ifdef FREECIV_JSON_CONNECTION
96866 /* Exit array. */
96867 FC_FREE(field_addr.sub_location);
96868#endif /* FREECIV_JSON_CONNECTION */
96869 }
96870 }
96871
96872 if (BV_ISSET(fields, 9)) {
96873 log_packet_detailed(" got field 'specialists_size'");
96874
96875#ifdef FREECIV_JSON_CONNECTION
96876 field_addr.name = "specialists_size";
96877#endif /* FREECIV_JSON_CONNECTION */
96878
96879 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
96880 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
96881 }
96882 }
96883
96884 if (BV_ISSET(fields, 10)) {
96885 log_packet_detailed(" got field 'specialists'");
96886
96887#ifdef FREECIV_JSON_CONNECTION
96888 field_addr.name = "specialists";
96889#endif /* FREECIV_JSON_CONNECTION */
96890
96891 {
96892 int i;
96893
96894 if (real_packet->specialists_size > SP_MAX) {
96895 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
96896 }
96897
96898#ifdef FREECIV_JSON_CONNECTION
96899 /* Enter array. */
96900 field_addr.sub_location = plocation_elem_new(0);
96901#endif /* FREECIV_JSON_CONNECTION */
96902
96903 for (i = 0; i < real_packet->specialists_size; i++) {
96904#ifdef FREECIV_JSON_CONNECTION
96905 /* Next array element */
96906 field_addr.sub_location->number = i;
96907#endif /* FREECIV_JSON_CONNECTION */
96908
96909 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
96911 }
96912 }
96913
96914#ifdef FREECIV_JSON_CONNECTION
96915 /* Exit array. */
96916 FC_FREE(field_addr.sub_location);
96917#endif /* FREECIV_JSON_CONNECTION */
96918 }
96919 }
96920
96921 if (BV_ISSET(fields, 11)) {
96922 log_packet_detailed(" got field 'food_stock'");
96923
96924#ifdef FREECIV_JSON_CONNECTION
96925 field_addr.name = "food_stock";
96926#endif /* FREECIV_JSON_CONNECTION */
96927
96928 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
96929 RECEIVE_PACKET_FIELD_ERROR(food_stock);
96930 }
96931 }
96932
96933 if (BV_ISSET(fields, 12)) {
96934 log_packet_detailed(" got field 'shield_stock'");
96935
96936#ifdef FREECIV_JSON_CONNECTION
96937 field_addr.name = "shield_stock";
96938#endif /* FREECIV_JSON_CONNECTION */
96939
96940 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
96941 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
96942 }
96943 }
96944
96945 real_packet->airlift = BV_ISSET(fields, 13);
96946
96947 real_packet->debug = BV_ISSET(fields, 14);
96948
96949 real_packet->did_buy = BV_ISSET(fields, 15);
96950
96951 real_packet->did_sell = BV_ISSET(fields, 16);
96952
96953 real_packet->was_happy = BV_ISSET(fields, 17);
96954
96955 real_packet->had_famine = BV_ISSET(fields, 18);
96956
96957 if (BV_ISSET(fields, 19)) {
96958 log_packet_detailed(" got field 'anarchy'");
96959
96960#ifdef FREECIV_JSON_CONNECTION
96961 field_addr.name = "anarchy";
96962#endif /* FREECIV_JSON_CONNECTION */
96963
96964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
96966 }
96967 }
96968
96969 if (BV_ISSET(fields, 20)) {
96970 log_packet_detailed(" got field 'rapture'");
96971
96972#ifdef FREECIV_JSON_CONNECTION
96973 field_addr.name = "rapture";
96974#endif /* FREECIV_JSON_CONNECTION */
96975
96976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
96978 }
96979 }
96980
96981 if (BV_ISSET(fields, 21)) {
96982 log_packet_detailed(" got field 'steal'");
96983
96984#ifdef FREECIV_JSON_CONNECTION
96985 field_addr.name = "steal";
96986#endif /* FREECIV_JSON_CONNECTION */
96987
96988 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
96990 }
96991 }
96992
96993 if (BV_ISSET(fields, 22)) {
96994 log_packet_detailed(" got field 'turn_founded'");
96995
96996#ifdef FREECIV_JSON_CONNECTION
96997 field_addr.name = "turn_founded";
96998#endif /* FREECIV_JSON_CONNECTION */
96999
97000 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
97001 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
97002 }
97003 }
97004
97005 if (BV_ISSET(fields, 23)) {
97006 log_packet_detailed(" got field 'turn_last_built'");
97007
97008#ifdef FREECIV_JSON_CONNECTION
97009 field_addr.name = "turn_last_built";
97010#endif /* FREECIV_JSON_CONNECTION */
97011
97012 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
97013 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
97014 }
97015 }
97016
97017 if (BV_ISSET(fields, 24)) {
97018 log_packet_detailed(" got field 'built'");
97019
97020#ifdef FREECIV_JSON_CONNECTION
97021 field_addr.name = "built";
97022#endif /* FREECIV_JSON_CONNECTION */
97023
97025#ifdef FREECIV_JSON_CONNECTION
97026 /* Enter array (start at initial element). */
97027 field_addr.sub_location = plocation_elem_new(0);
97028 /* Enter diff array element (start at the index address). */
97029 field_addr.sub_location->sub_location = plocation_field_new("index");
97030#endif /* FREECIV_JSON_CONNECTION */
97031
97032 while (TRUE) {
97033 int i;
97034
97035 /* Read next index */
97036#if B_LAST <= MAX_UINT8
97037 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
97038#else
97039 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
97040#endif
97042 }
97043
97044 if (i == B_LAST) {
97045 break;
97046 }
97047 if (i > B_LAST) {
97049 ": unexpected index %d "
97050 "> length %d in array diff",
97051 i,
97052 B_LAST);
97053 }
97054
97055#ifdef FREECIV_JSON_CONNECTION
97056 /* Content address. */
97057 field_addr.sub_location->sub_location->name = "data";
97058#endif /* FREECIV_JSON_CONNECTION */
97059
97060 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
97062 }
97063
97064#ifdef FREECIV_JSON_CONNECTION
97065 /* Move to the next diff array element. */
97066 field_addr.sub_location->number++;
97067 /* Back to the index address. */
97068 field_addr.sub_location->sub_location->name = "index";
97069#endif /* FREECIV_JSON_CONNECTION */
97070 }
97071
97072#ifdef FREECIV_JSON_CONNECTION
97073 /* Exit diff array element. */
97074 FC_FREE(field_addr.sub_location->sub_location);
97075 /* Exit array. */
97076 FC_FREE(field_addr.sub_location);
97077#endif /* FREECIV_JSON_CONNECTION */
97078 }
97079
97080 if (BV_ISSET(fields, 25)) {
97081 log_packet_detailed(" got field 'production_kind'");
97082
97083#ifdef FREECIV_JSON_CONNECTION
97084 field_addr.name = "production_kind";
97085#endif /* FREECIV_JSON_CONNECTION */
97086
97087 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
97088 RECEIVE_PACKET_FIELD_ERROR(production_kind);
97089 }
97090 }
97091
97092 if (BV_ISSET(fields, 26)) {
97093 log_packet_detailed(" got field 'production_value'");
97094
97095#ifdef FREECIV_JSON_CONNECTION
97096 field_addr.name = "production_value";
97097#endif /* FREECIV_JSON_CONNECTION */
97098
97099 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
97100 RECEIVE_PACKET_FIELD_ERROR(production_value);
97101 }
97102 }
97103
97104 if (nullptr == old) {
97105 old = fc_malloc(sizeof(*old));
97107 *old = *real_packet;
97109 } else {
97110 *old = *real_packet;
97111 }
97112
97113#else /* FREECIV_DELTA_PROTOCOL */
97114#ifdef FREECIV_JSON_CONNECTION
97115 field_addr.name = "name";
97116#endif /* FREECIV_JSON_CONNECTION */
97117
97118 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
97120 }
97121
97122#ifdef FREECIV_JSON_CONNECTION
97123 field_addr.name = "owner";
97124#endif /* FREECIV_JSON_CONNECTION */
97125
97126 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
97128 }
97129
97130#ifdef FREECIV_JSON_CONNECTION
97131 field_addr.name = "original";
97132#endif /* FREECIV_JSON_CONNECTION */
97133
97134 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
97136 }
97137
97138#ifdef FREECIV_JSON_CONNECTION
97139 field_addr.name = "size";
97140#endif /* FREECIV_JSON_CONNECTION */
97141
97142 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
97144 }
97145
97146#ifdef FREECIV_JSON_CONNECTION
97147 field_addr.name = "history";
97148#endif /* FREECIV_JSON_CONNECTION */
97149
97150 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
97152 }
97153
97154#ifdef FREECIV_JSON_CONNECTION
97155 field_addr.name = "ppl_happy";
97156#endif /* FREECIV_JSON_CONNECTION */
97157
97158 {
97159 int i;
97160
97161
97162#ifdef FREECIV_JSON_CONNECTION
97163 /* Enter array. */
97164 field_addr.sub_location = plocation_elem_new(0);
97165#endif /* FREECIV_JSON_CONNECTION */
97166
97167 for (i = 0; i < 5; i++) {
97168#ifdef FREECIV_JSON_CONNECTION
97169 /* Next array element */
97170 field_addr.sub_location->number = i;
97171#endif /* FREECIV_JSON_CONNECTION */
97172
97173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
97174 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
97175 }
97176 }
97177
97178#ifdef FREECIV_JSON_CONNECTION
97179 /* Exit array. */
97180 FC_FREE(field_addr.sub_location);
97181#endif /* FREECIV_JSON_CONNECTION */
97182 }
97183
97184#ifdef FREECIV_JSON_CONNECTION
97185 field_addr.name = "ppl_content";
97186#endif /* FREECIV_JSON_CONNECTION */
97187
97188 {
97189 int i;
97190
97191
97192#ifdef FREECIV_JSON_CONNECTION
97193 /* Enter array. */
97194 field_addr.sub_location = plocation_elem_new(0);
97195#endif /* FREECIV_JSON_CONNECTION */
97196
97197 for (i = 0; i < 5; i++) {
97198#ifdef FREECIV_JSON_CONNECTION
97199 /* Next array element */
97200 field_addr.sub_location->number = i;
97201#endif /* FREECIV_JSON_CONNECTION */
97202
97203 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
97204 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
97205 }
97206 }
97207
97208#ifdef FREECIV_JSON_CONNECTION
97209 /* Exit array. */
97210 FC_FREE(field_addr.sub_location);
97211#endif /* FREECIV_JSON_CONNECTION */
97212 }
97213
97214#ifdef FREECIV_JSON_CONNECTION
97215 field_addr.name = "ppl_unhappy";
97216#endif /* FREECIV_JSON_CONNECTION */
97217
97218 {
97219 int i;
97220
97221
97222#ifdef FREECIV_JSON_CONNECTION
97223 /* Enter array. */
97224 field_addr.sub_location = plocation_elem_new(0);
97225#endif /* FREECIV_JSON_CONNECTION */
97226
97227 for (i = 0; i < 5; i++) {
97228#ifdef FREECIV_JSON_CONNECTION
97229 /* Next array element */
97230 field_addr.sub_location->number = i;
97231#endif /* FREECIV_JSON_CONNECTION */
97232
97233 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
97234 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
97235 }
97236 }
97237
97238#ifdef FREECIV_JSON_CONNECTION
97239 /* Exit array. */
97240 FC_FREE(field_addr.sub_location);
97241#endif /* FREECIV_JSON_CONNECTION */
97242 }
97243
97244#ifdef FREECIV_JSON_CONNECTION
97245 field_addr.name = "ppl_angry";
97246#endif /* FREECIV_JSON_CONNECTION */
97247
97248 {
97249 int i;
97250
97251
97252#ifdef FREECIV_JSON_CONNECTION
97253 /* Enter array. */
97254 field_addr.sub_location = plocation_elem_new(0);
97255#endif /* FREECIV_JSON_CONNECTION */
97256
97257 for (i = 0; i < 5; i++) {
97258#ifdef FREECIV_JSON_CONNECTION
97259 /* Next array element */
97260 field_addr.sub_location->number = i;
97261#endif /* FREECIV_JSON_CONNECTION */
97262
97263 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
97264 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
97265 }
97266 }
97267
97268#ifdef FREECIV_JSON_CONNECTION
97269 /* Exit array. */
97270 FC_FREE(field_addr.sub_location);
97271#endif /* FREECIV_JSON_CONNECTION */
97272 }
97273
97274#ifdef FREECIV_JSON_CONNECTION
97275 field_addr.name = "specialists_size";
97276#endif /* FREECIV_JSON_CONNECTION */
97277
97278 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
97279 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
97280 }
97281
97282#ifdef FREECIV_JSON_CONNECTION
97283 field_addr.name = "specialists";
97284#endif /* FREECIV_JSON_CONNECTION */
97285
97286 {
97287 int i;
97288
97289 if (real_packet->specialists_size > SP_MAX) {
97290 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
97291 }
97292
97293#ifdef FREECIV_JSON_CONNECTION
97294 /* Enter array. */
97295 field_addr.sub_location = plocation_elem_new(0);
97296#endif /* FREECIV_JSON_CONNECTION */
97297
97298 for (i = 0; i < real_packet->specialists_size; i++) {
97299#ifdef FREECIV_JSON_CONNECTION
97300 /* Next array element */
97301 field_addr.sub_location->number = i;
97302#endif /* FREECIV_JSON_CONNECTION */
97303
97304 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
97306 }
97307 }
97308
97309#ifdef FREECIV_JSON_CONNECTION
97310 /* Exit array. */
97311 FC_FREE(field_addr.sub_location);
97312#endif /* FREECIV_JSON_CONNECTION */
97313 }
97314
97315#ifdef FREECIV_JSON_CONNECTION
97316 field_addr.name = "food_stock";
97317#endif /* FREECIV_JSON_CONNECTION */
97318
97319 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
97320 RECEIVE_PACKET_FIELD_ERROR(food_stock);
97321 }
97322
97323#ifdef FREECIV_JSON_CONNECTION
97324 field_addr.name = "shield_stock";
97325#endif /* FREECIV_JSON_CONNECTION */
97326
97327 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
97328 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
97329 }
97330
97331#ifdef FREECIV_JSON_CONNECTION
97332 field_addr.name = "airlift";
97333#endif /* FREECIV_JSON_CONNECTION */
97334
97335 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift)) {
97337 }
97338
97339#ifdef FREECIV_JSON_CONNECTION
97340 field_addr.name = "debug";
97341#endif /* FREECIV_JSON_CONNECTION */
97342
97343 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
97345 }
97346
97347#ifdef FREECIV_JSON_CONNECTION
97348 field_addr.name = "did_buy";
97349#endif /* FREECIV_JSON_CONNECTION */
97350
97351 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
97353 }
97354
97355#ifdef FREECIV_JSON_CONNECTION
97356 field_addr.name = "did_sell";
97357#endif /* FREECIV_JSON_CONNECTION */
97358
97359 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
97361 }
97362
97363#ifdef FREECIV_JSON_CONNECTION
97364 field_addr.name = "was_happy";
97365#endif /* FREECIV_JSON_CONNECTION */
97366
97367 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
97368 RECEIVE_PACKET_FIELD_ERROR(was_happy);
97369 }
97370
97371#ifdef FREECIV_JSON_CONNECTION
97372 field_addr.name = "had_famine";
97373#endif /* FREECIV_JSON_CONNECTION */
97374
97375 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
97376 RECEIVE_PACKET_FIELD_ERROR(had_famine);
97377 }
97378
97379#ifdef FREECIV_JSON_CONNECTION
97380 field_addr.name = "anarchy";
97381#endif /* FREECIV_JSON_CONNECTION */
97382
97383 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
97385 }
97386
97387#ifdef FREECIV_JSON_CONNECTION
97388 field_addr.name = "rapture";
97389#endif /* FREECIV_JSON_CONNECTION */
97390
97391 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
97393 }
97394
97395#ifdef FREECIV_JSON_CONNECTION
97396 field_addr.name = "steal";
97397#endif /* FREECIV_JSON_CONNECTION */
97398
97399 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
97401 }
97402
97403#ifdef FREECIV_JSON_CONNECTION
97404 field_addr.name = "turn_founded";
97405#endif /* FREECIV_JSON_CONNECTION */
97406
97407 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
97408 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
97409 }
97410
97411#ifdef FREECIV_JSON_CONNECTION
97412 field_addr.name = "turn_last_built";
97413#endif /* FREECIV_JSON_CONNECTION */
97414
97415 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
97416 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
97417 }
97418
97419#ifdef FREECIV_JSON_CONNECTION
97420 field_addr.name = "built";
97421#endif /* FREECIV_JSON_CONNECTION */
97422
97423 {
97424 int i;
97425
97426
97427#ifdef FREECIV_JSON_CONNECTION
97428 /* Enter array. */
97429 field_addr.sub_location = plocation_elem_new(0);
97430#endif /* FREECIV_JSON_CONNECTION */
97431
97432 for (i = 0; i < B_LAST; i++) {
97433#ifdef FREECIV_JSON_CONNECTION
97434 /* Next array element */
97435 field_addr.sub_location->number = i;
97436#endif /* FREECIV_JSON_CONNECTION */
97437
97438 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
97440 }
97441 }
97442
97443#ifdef FREECIV_JSON_CONNECTION
97444 /* Exit array. */
97445 FC_FREE(field_addr.sub_location);
97446#endif /* FREECIV_JSON_CONNECTION */
97447 }
97448
97449#ifdef FREECIV_JSON_CONNECTION
97450 field_addr.name = "production_kind";
97451#endif /* FREECIV_JSON_CONNECTION */
97452
97453 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
97454 RECEIVE_PACKET_FIELD_ERROR(production_kind);
97455 }
97456
97457#ifdef FREECIV_JSON_CONNECTION
97458 field_addr.name = "production_value";
97459#endif /* FREECIV_JSON_CONNECTION */
97460
97461 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
97462 RECEIVE_PACKET_FIELD_ERROR(production_value);
97463 }
97464#endif /* FREECIV_DELTA_PROTOCOL */
97465
97467#undef FREE_PACKET_STRUCT
97468}
97469
97470static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
97471{
97472 const struct packet_edit_city *real_packet = packet;
97473 int e;
97475
97476 log_packet_detailed("packet_edit_city_100: sending info about (%d)",
97477 real_packet->id);
97478
97479#ifdef FREECIV_DELTA_PROTOCOL
97481 struct packet_edit_city *old;
97482 bool differ;
97483 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY;
97484
97485 if (nullptr == *hash) {
97487 nullptr, nullptr, nullptr, destroy_packet_edit_city);
97488 }
97489 BV_CLR_ALL(fields);
97490
97491 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
97492 old = fc_malloc(sizeof(*old));
97493 /* temporary bitcopy just to insert correctly */
97494 *old = *real_packet;
97497 }
97498
97499 differ = (strcmp(old->name, real_packet->name) != 0);
97500 if (differ) {
97501 BV_SET(fields, 0);
97502 }
97503
97504 differ = (old->owner != real_packet->owner);
97505 if (differ) {
97506 BV_SET(fields, 1);
97507 }
97508
97509 differ = (old->original != real_packet->original);
97510 if (differ) {
97511 BV_SET(fields, 2);
97512 }
97513
97514 differ = (old->size != real_packet->size);
97515 if (differ) {
97516 BV_SET(fields, 3);
97517 }
97518
97519 differ = (old->history != real_packet->history);
97520 if (differ) {
97521 BV_SET(fields, 4);
97522 }
97523
97524 differ = FALSE;
97525 {
97526 int i;
97527
97528 for (i = 0; i < 5; i++) {
97529 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
97530 if (differ) {
97531 break;
97532 }
97533 }
97534 }
97535 if (differ) {
97536 BV_SET(fields, 5);
97537 }
97538
97539 differ = FALSE;
97540 {
97541 int i;
97542
97543 for (i = 0; i < 5; i++) {
97544 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
97545 if (differ) {
97546 break;
97547 }
97548 }
97549 }
97550 if (differ) {
97551 BV_SET(fields, 6);
97552 }
97553
97554 differ = FALSE;
97555 {
97556 int i;
97557
97558 for (i = 0; i < 5; i++) {
97559 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
97560 if (differ) {
97561 break;
97562 }
97563 }
97564 }
97565 if (differ) {
97566 BV_SET(fields, 7);
97567 }
97568
97569 differ = FALSE;
97570 {
97571 int i;
97572
97573 for (i = 0; i < 5; i++) {
97574 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
97575 if (differ) {
97576 break;
97577 }
97578 }
97579 }
97580 if (differ) {
97581 BV_SET(fields, 8);
97582 }
97583
97584 differ = (old->specialists_size != real_packet->specialists_size);
97585 if (differ) {
97586 BV_SET(fields, 9);
97587 }
97588
97589 differ = (old->specialists_size != real_packet->specialists_size);
97590 if (!differ) {
97591 int i;
97592
97593 for (i = 0; i < old->specialists_size; i++) {
97594 differ = (old->specialists[i] != real_packet->specialists[i]);
97595 if (differ) {
97596 break;
97597 }
97598 }
97599 }
97600 if (differ) {
97601 BV_SET(fields, 10);
97602 }
97603
97604 differ = (old->food_stock != real_packet->food_stock);
97605 if (differ) {
97606 BV_SET(fields, 11);
97607 }
97608
97609 differ = (old->shield_stock != real_packet->shield_stock);
97610 if (differ) {
97611 BV_SET(fields, 12);
97612 }
97613
97614 /* folded into head */
97615 if (real_packet->airlift) {
97616 BV_SET(fields, 13);
97617 }
97618
97619 /* folded into head */
97620 if (real_packet->debug) {
97621 BV_SET(fields, 14);
97622 }
97623
97624 /* folded into head */
97625 if (real_packet->did_buy) {
97626 BV_SET(fields, 15);
97627 }
97628
97629 /* folded into head */
97630 if (real_packet->did_sell) {
97631 BV_SET(fields, 16);
97632 }
97633
97634 /* folded into head */
97635 if (real_packet->was_happy) {
97636 BV_SET(fields, 17);
97637 }
97638
97639 /* folded into head */
97640 if (real_packet->had_famine) {
97641 BV_SET(fields, 18);
97642 }
97643
97644 differ = (old->anarchy != real_packet->anarchy);
97645 if (differ) {
97646 BV_SET(fields, 19);
97647 }
97648
97649 differ = (old->rapture != real_packet->rapture);
97650 if (differ) {
97651 BV_SET(fields, 20);
97652 }
97653
97654 differ = (old->steal != real_packet->steal);
97655 if (differ) {
97656 BV_SET(fields, 21);
97657 }
97658
97659 differ = (old->turn_founded != real_packet->turn_founded);
97660 if (differ) {
97661 BV_SET(fields, 22);
97662 }
97663
97664 differ = (old->turn_last_built != real_packet->turn_last_built);
97665 if (differ) {
97666 BV_SET(fields, 23);
97667 }
97668
97669 differ = FALSE;
97670 {
97671 int i;
97672
97673 for (i = 0; i < B_LAST; i++) {
97674 differ = (old->built[i] != real_packet->built[i]);
97675 if (differ) {
97676 break;
97677 }
97678 }
97679 }
97680 if (differ) {
97681 BV_SET(fields, 24);
97682 }
97683
97684 differ = (old->production_kind != real_packet->production_kind);
97685 if (differ) {
97686 BV_SET(fields, 25);
97687 }
97688
97689 differ = (old->production_value != real_packet->production_value);
97690 if (differ) {
97691 BV_SET(fields, 26);
97692 }
97693#endif /* FREECIV_DELTA_PROTOCOL */
97694
97695#ifdef FREECIV_JSON_CONNECTION
97696 struct plocation field_addr;
97697 {
97698 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
97701 }
97702#endif /* FREECIV_JSON_CONNECTION */
97703
97704#ifdef FREECIV_JSON_CONNECTION
97705 field_addr.name = "id";
97706#endif /* FREECIV_JSON_CONNECTION */
97707 e = 0;
97708
97709 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
97710
97711 if (e) {
97712 log_packet_detailed("'id' field error detected");
97713 }
97714
97715#ifdef FREECIV_DELTA_PROTOCOL
97716#ifdef FREECIV_JSON_CONNECTION
97717 field_addr.name = "fields";
97718#endif /* FREECIV_JSON_CONNECTION */
97719 e = 0;
97720 e |= DIO_BV_PUT(&dout, &field_addr, fields);
97721 if (e) {
97722 log_packet_detailed("fields bitvector error detected");
97723 }
97724
97725 if (BV_ISSET(fields, 0)) {
97726 log_packet_detailed(" field 'name' has changed");
97727
97728#ifdef FREECIV_JSON_CONNECTION
97729 field_addr.name = "name";
97730#endif /* FREECIV_JSON_CONNECTION */
97731 e = 0;
97732
97733 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
97734
97735 if (e) {
97736 log_packet_detailed("'name' field error detected");
97737 }
97738 }
97739
97740 if (BV_ISSET(fields, 1)) {
97741 log_packet_detailed(" field 'owner' has changed");
97742
97743#ifdef FREECIV_JSON_CONNECTION
97744 field_addr.name = "owner";
97745#endif /* FREECIV_JSON_CONNECTION */
97746 e = 0;
97747
97748 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
97749
97750 if (e) {
97751 log_packet_detailed("'owner' field error detected");
97752 }
97753 }
97754
97755 if (BV_ISSET(fields, 2)) {
97756 log_packet_detailed(" field 'original' has changed");
97757
97758#ifdef FREECIV_JSON_CONNECTION
97759 field_addr.name = "original";
97760#endif /* FREECIV_JSON_CONNECTION */
97761 e = 0;
97762
97763 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
97764
97765 if (e) {
97766 log_packet_detailed("'original' field error detected");
97767 }
97768 }
97769
97770 if (BV_ISSET(fields, 3)) {
97771 log_packet_detailed(" field 'size' has changed");
97772
97773#ifdef FREECIV_JSON_CONNECTION
97774 field_addr.name = "size";
97775#endif /* FREECIV_JSON_CONNECTION */
97776 e = 0;
97777
97778 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
97779
97780 if (e) {
97781 log_packet_detailed("'size' field error detected");
97782 }
97783 }
97784
97785 if (BV_ISSET(fields, 4)) {
97786 log_packet_detailed(" field 'history' has changed");
97787
97788#ifdef FREECIV_JSON_CONNECTION
97789 field_addr.name = "history";
97790#endif /* FREECIV_JSON_CONNECTION */
97791 e = 0;
97792
97793 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
97794
97795 if (e) {
97796 log_packet_detailed("'history' field error detected");
97797 }
97798 }
97799
97800 if (BV_ISSET(fields, 5)) {
97801 log_packet_detailed(" field 'ppl_happy' has changed");
97802
97803#ifdef FREECIV_JSON_CONNECTION
97804 field_addr.name = "ppl_happy";
97805#endif /* FREECIV_JSON_CONNECTION */
97806 e = 0;
97807
97808 {
97809 int i;
97810
97811#ifdef FREECIV_JSON_CONNECTION
97812 /* Create the array. */
97813 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97814
97815 /* Enter array. */
97816 field_addr.sub_location = plocation_elem_new(0);
97817#endif /* FREECIV_JSON_CONNECTION */
97818
97819 for (i = 0; i < 5; i++) {
97820#ifdef FREECIV_JSON_CONNECTION
97821 /* Next array element. */
97822 field_addr.sub_location->number = i;
97823#endif /* FREECIV_JSON_CONNECTION */
97824
97825 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
97826 }
97827
97828#ifdef FREECIV_JSON_CONNECTION
97829 /* Exit array. */
97830 FC_FREE(field_addr.sub_location);
97831#endif /* FREECIV_JSON_CONNECTION */
97832 }
97833
97834 if (e) {
97835 log_packet_detailed("'ppl_happy' field error detected");
97836 }
97837 }
97838
97839 if (BV_ISSET(fields, 6)) {
97840 log_packet_detailed(" field 'ppl_content' has changed");
97841
97842#ifdef FREECIV_JSON_CONNECTION
97843 field_addr.name = "ppl_content";
97844#endif /* FREECIV_JSON_CONNECTION */
97845 e = 0;
97846
97847 {
97848 int i;
97849
97850#ifdef FREECIV_JSON_CONNECTION
97851 /* Create the array. */
97852 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97853
97854 /* Enter array. */
97855 field_addr.sub_location = plocation_elem_new(0);
97856#endif /* FREECIV_JSON_CONNECTION */
97857
97858 for (i = 0; i < 5; i++) {
97859#ifdef FREECIV_JSON_CONNECTION
97860 /* Next array element. */
97861 field_addr.sub_location->number = i;
97862#endif /* FREECIV_JSON_CONNECTION */
97863
97864 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
97865 }
97866
97867#ifdef FREECIV_JSON_CONNECTION
97868 /* Exit array. */
97869 FC_FREE(field_addr.sub_location);
97870#endif /* FREECIV_JSON_CONNECTION */
97871 }
97872
97873 if (e) {
97874 log_packet_detailed("'ppl_content' field error detected");
97875 }
97876 }
97877
97878 if (BV_ISSET(fields, 7)) {
97879 log_packet_detailed(" field 'ppl_unhappy' has changed");
97880
97881#ifdef FREECIV_JSON_CONNECTION
97882 field_addr.name = "ppl_unhappy";
97883#endif /* FREECIV_JSON_CONNECTION */
97884 e = 0;
97885
97886 {
97887 int i;
97888
97889#ifdef FREECIV_JSON_CONNECTION
97890 /* Create the array. */
97891 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97892
97893 /* Enter array. */
97894 field_addr.sub_location = plocation_elem_new(0);
97895#endif /* FREECIV_JSON_CONNECTION */
97896
97897 for (i = 0; i < 5; i++) {
97898#ifdef FREECIV_JSON_CONNECTION
97899 /* Next array element. */
97900 field_addr.sub_location->number = i;
97901#endif /* FREECIV_JSON_CONNECTION */
97902
97903 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
97904 }
97905
97906#ifdef FREECIV_JSON_CONNECTION
97907 /* Exit array. */
97908 FC_FREE(field_addr.sub_location);
97909#endif /* FREECIV_JSON_CONNECTION */
97910 }
97911
97912 if (e) {
97913 log_packet_detailed("'ppl_unhappy' field error detected");
97914 }
97915 }
97916
97917 if (BV_ISSET(fields, 8)) {
97918 log_packet_detailed(" field 'ppl_angry' has changed");
97919
97920#ifdef FREECIV_JSON_CONNECTION
97921 field_addr.name = "ppl_angry";
97922#endif /* FREECIV_JSON_CONNECTION */
97923 e = 0;
97924
97925 {
97926 int i;
97927
97928#ifdef FREECIV_JSON_CONNECTION
97929 /* Create the array. */
97930 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97931
97932 /* Enter array. */
97933 field_addr.sub_location = plocation_elem_new(0);
97934#endif /* FREECIV_JSON_CONNECTION */
97935
97936 for (i = 0; i < 5; i++) {
97937#ifdef FREECIV_JSON_CONNECTION
97938 /* Next array element. */
97939 field_addr.sub_location->number = i;
97940#endif /* FREECIV_JSON_CONNECTION */
97941
97942 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
97943 }
97944
97945#ifdef FREECIV_JSON_CONNECTION
97946 /* Exit array. */
97947 FC_FREE(field_addr.sub_location);
97948#endif /* FREECIV_JSON_CONNECTION */
97949 }
97950
97951 if (e) {
97952 log_packet_detailed("'ppl_angry' field error detected");
97953 }
97954 }
97955
97956 if (BV_ISSET(fields, 9)) {
97957 log_packet_detailed(" field 'specialists_size' has changed");
97958
97959#ifdef FREECIV_JSON_CONNECTION
97960 field_addr.name = "specialists_size";
97961#endif /* FREECIV_JSON_CONNECTION */
97962 e = 0;
97963
97964 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
97965
97966 if (e) {
97967 log_packet_detailed("'specialists_size' field error detected");
97968 }
97969 }
97970
97971 if (BV_ISSET(fields, 10)) {
97972 log_packet_detailed(" field 'specialists' has changed");
97973
97974#ifdef FREECIV_JSON_CONNECTION
97975 field_addr.name = "specialists";
97976#endif /* FREECIV_JSON_CONNECTION */
97977 e = 0;
97978
97979 {
97980 int i;
97981
97982#ifdef FREECIV_JSON_CONNECTION
97983 /* Create the array. */
97984 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
97985
97986 /* Enter array. */
97987 field_addr.sub_location = plocation_elem_new(0);
97988#endif /* FREECIV_JSON_CONNECTION */
97989
97990 for (i = 0; i < real_packet->specialists_size; i++) {
97991#ifdef FREECIV_JSON_CONNECTION
97992 /* Next array element. */
97993 field_addr.sub_location->number = i;
97994#endif /* FREECIV_JSON_CONNECTION */
97995
97996 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
97997 }
97998
97999#ifdef FREECIV_JSON_CONNECTION
98000 /* Exit array. */
98001 FC_FREE(field_addr.sub_location);
98002#endif /* FREECIV_JSON_CONNECTION */
98003 }
98004
98005 if (e) {
98006 log_packet_detailed("'specialists' field error detected");
98007 }
98008 }
98009
98010 if (BV_ISSET(fields, 11)) {
98011 log_packet_detailed(" field 'food_stock' has changed");
98012
98013#ifdef FREECIV_JSON_CONNECTION
98014 field_addr.name = "food_stock";
98015#endif /* FREECIV_JSON_CONNECTION */
98016 e = 0;
98017
98018 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
98019
98020 if (e) {
98021 log_packet_detailed("'food_stock' field error detected");
98022 }
98023 }
98024
98025 if (BV_ISSET(fields, 12)) {
98026 log_packet_detailed(" field 'shield_stock' has changed");
98027
98028#ifdef FREECIV_JSON_CONNECTION
98029 field_addr.name = "shield_stock";
98030#endif /* FREECIV_JSON_CONNECTION */
98031 e = 0;
98032
98033 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
98034
98035 if (e) {
98036 log_packet_detailed("'shield_stock' field error detected");
98037 }
98038 }
98039
98040 /* field 13 is folded into the header */
98041
98042 /* field 14 is folded into the header */
98043
98044 /* field 15 is folded into the header */
98045
98046 /* field 16 is folded into the header */
98047
98048 /* field 17 is folded into the header */
98049
98050 /* field 18 is folded into the header */
98051
98052 if (BV_ISSET(fields, 19)) {
98053 log_packet_detailed(" field 'anarchy' has changed");
98054
98055#ifdef FREECIV_JSON_CONNECTION
98056 field_addr.name = "anarchy";
98057#endif /* FREECIV_JSON_CONNECTION */
98058 e = 0;
98059
98060 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
98061
98062 if (e) {
98063 log_packet_detailed("'anarchy' field error detected");
98064 }
98065 }
98066
98067 if (BV_ISSET(fields, 20)) {
98068 log_packet_detailed(" field 'rapture' has changed");
98069
98070#ifdef FREECIV_JSON_CONNECTION
98071 field_addr.name = "rapture";
98072#endif /* FREECIV_JSON_CONNECTION */
98073 e = 0;
98074
98075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
98076
98077 if (e) {
98078 log_packet_detailed("'rapture' field error detected");
98079 }
98080 }
98081
98082 if (BV_ISSET(fields, 21)) {
98083 log_packet_detailed(" field 'steal' has changed");
98084
98085#ifdef FREECIV_JSON_CONNECTION
98086 field_addr.name = "steal";
98087#endif /* FREECIV_JSON_CONNECTION */
98088 e = 0;
98089
98090 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
98091
98092 if (e) {
98093 log_packet_detailed("'steal' field error detected");
98094 }
98095 }
98096
98097 if (BV_ISSET(fields, 22)) {
98098 log_packet_detailed(" field 'turn_founded' has changed");
98099
98100#ifdef FREECIV_JSON_CONNECTION
98101 field_addr.name = "turn_founded";
98102#endif /* FREECIV_JSON_CONNECTION */
98103 e = 0;
98104
98105 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
98106
98107 if (e) {
98108 log_packet_detailed("'turn_founded' field error detected");
98109 }
98110 }
98111
98112 if (BV_ISSET(fields, 23)) {
98113 log_packet_detailed(" field 'turn_last_built' has changed");
98114
98115#ifdef FREECIV_JSON_CONNECTION
98116 field_addr.name = "turn_last_built";
98117#endif /* FREECIV_JSON_CONNECTION */
98118 e = 0;
98119
98120 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
98121
98122 if (e) {
98123 log_packet_detailed("'turn_last_built' field error detected");
98124 }
98125 }
98126
98127 if (BV_ISSET(fields, 24)) {
98128 log_packet_detailed(" field 'built' has changed");
98129
98130#ifdef FREECIV_JSON_CONNECTION
98131 field_addr.name = "built";
98132#endif /* FREECIV_JSON_CONNECTION */
98133 e = 0;
98134
98135 {
98136 int i;
98137
98139
98140#ifdef FREECIV_JSON_CONNECTION
98141 size_t count_i = 0;
98142
98143 /* Create the array. */
98144 e |= DIO_PUT(farray, &dout, &field_addr, 0);
98145
98146 /* Enter array. */
98147 field_addr.sub_location = plocation_elem_new(0);
98148#endif /* FREECIV_JSON_CONNECTION */
98149
98150 for (i = 0; i < B_LAST; i++) {
98151 differ = (old->built[i] != real_packet->built[i]);
98152
98153 if (!differ) {
98154 continue;
98155 }
98156
98157#ifdef FREECIV_JSON_CONNECTION
98158 /* Append next diff array element. */
98159 field_addr.sub_location->number = -1;
98160
98161 /* Create the diff array element. */
98162 e |= DIO_PUT(object, &dout, &field_addr);
98163
98164 /* Enter diff array element (start at the index address). */
98165 field_addr.sub_location->number = count_i++;
98166 field_addr.sub_location->sub_location = plocation_field_new("index");
98167#endif /* FREECIV_JSON_CONNECTION */
98168
98169 /* Write the index */
98170#if B_LAST <= MAX_UINT8
98171 e |= DIO_PUT(uint8, &dout, &field_addr, i);
98172#else
98173 e |= DIO_PUT(uint16, &dout, &field_addr, i);
98174#endif
98175
98176#ifdef FREECIV_JSON_CONNECTION
98177 /* Content address. */
98178 field_addr.sub_location->sub_location->name = "data";
98179#endif /* FREECIV_JSON_CONNECTION */
98180
98181 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
98182
98183#ifdef FREECIV_JSON_CONNECTION
98184 /* Exit diff array element. */
98185 FC_FREE(field_addr.sub_location->sub_location);
98186#endif /* FREECIV_JSON_CONNECTION */
98187 }
98188
98189#ifdef FREECIV_JSON_CONNECTION
98190 /* Append diff array element. */
98191 field_addr.sub_location->number = -1;
98192
98193 /* Create the terminating diff array element. */
98194 e |= DIO_PUT(object, &dout, &field_addr);
98195
98196 /* Enter diff array element (start at the index address). */
98197 field_addr.sub_location->number = count_i;
98198 field_addr.sub_location->sub_location = plocation_field_new("index");
98199#endif /* FREECIV_JSON_CONNECTION */
98200
98201 /* Write the sentinel value */
98202#if B_LAST <= MAX_UINT8
98203 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
98204#else
98205 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
98206#endif
98207
98208#ifdef FREECIV_JSON_CONNECTION
98209 /* Exit diff array element. */
98210 FC_FREE(field_addr.sub_location->sub_location);
98211 /* Exit array. */
98212 FC_FREE(field_addr.sub_location);
98213#endif /* FREECIV_JSON_CONNECTION */
98214 }
98215
98216 if (e) {
98217 log_packet_detailed("'built' field error detected");
98218 }
98219 }
98220
98221 if (BV_ISSET(fields, 25)) {
98222 log_packet_detailed(" field 'production_kind' has changed");
98223
98224#ifdef FREECIV_JSON_CONNECTION
98225 field_addr.name = "production_kind";
98226#endif /* FREECIV_JSON_CONNECTION */
98227 e = 0;
98228
98229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
98230
98231 if (e) {
98232 log_packet_detailed("'production_kind' field error detected");
98233 }
98234 }
98235
98236 if (BV_ISSET(fields, 26)) {
98237 log_packet_detailed(" field 'production_value' has changed");
98238
98239#ifdef FREECIV_JSON_CONNECTION
98240 field_addr.name = "production_value";
98241#endif /* FREECIV_JSON_CONNECTION */
98242 e = 0;
98243
98244 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
98245
98246 if (e) {
98247 log_packet_detailed("'production_value' field error detected");
98248 }
98249 }
98250
98251 *old = *real_packet;
98252
98253#else /* FREECIV_DELTA_PROTOCOL */
98254#ifdef FREECIV_JSON_CONNECTION
98255 field_addr.name = "name";
98256#endif /* FREECIV_JSON_CONNECTION */
98257 e = 0;
98258
98259 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
98260
98261 if (e) {
98262 log_packet_detailed("'name' field error detected");
98263 }
98264
98265#ifdef FREECIV_JSON_CONNECTION
98266 field_addr.name = "owner";
98267#endif /* FREECIV_JSON_CONNECTION */
98268 e = 0;
98269
98270 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
98271
98272 if (e) {
98273 log_packet_detailed("'owner' field error detected");
98274 }
98275
98276#ifdef FREECIV_JSON_CONNECTION
98277 field_addr.name = "original";
98278#endif /* FREECIV_JSON_CONNECTION */
98279 e = 0;
98280
98281 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
98282
98283 if (e) {
98284 log_packet_detailed("'original' field error detected");
98285 }
98286
98287#ifdef FREECIV_JSON_CONNECTION
98288 field_addr.name = "size";
98289#endif /* FREECIV_JSON_CONNECTION */
98290 e = 0;
98291
98292 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
98293
98294 if (e) {
98295 log_packet_detailed("'size' field error detected");
98296 }
98297
98298#ifdef FREECIV_JSON_CONNECTION
98299 field_addr.name = "history";
98300#endif /* FREECIV_JSON_CONNECTION */
98301 e = 0;
98302
98303 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
98304
98305 if (e) {
98306 log_packet_detailed("'history' field error detected");
98307 }
98308
98309#ifdef FREECIV_JSON_CONNECTION
98310 field_addr.name = "ppl_happy";
98311#endif /* FREECIV_JSON_CONNECTION */
98312 e = 0;
98313
98314 {
98315 int i;
98316
98317#ifdef FREECIV_JSON_CONNECTION
98318 /* Create the array. */
98319 e |= DIO_PUT(farray, &dout, &field_addr, 5);
98320
98321 /* Enter array. */
98322 field_addr.sub_location = plocation_elem_new(0);
98323#endif /* FREECIV_JSON_CONNECTION */
98324
98325 for (i = 0; i < 5; i++) {
98326#ifdef FREECIV_JSON_CONNECTION
98327 /* Next array element. */
98328 field_addr.sub_location->number = i;
98329#endif /* FREECIV_JSON_CONNECTION */
98330
98331 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
98332 }
98333
98334#ifdef FREECIV_JSON_CONNECTION
98335 /* Exit array. */
98336 FC_FREE(field_addr.sub_location);
98337#endif /* FREECIV_JSON_CONNECTION */
98338 }
98339
98340 if (e) {
98341 log_packet_detailed("'ppl_happy' field error detected");
98342 }
98343
98344#ifdef FREECIV_JSON_CONNECTION
98345 field_addr.name = "ppl_content";
98346#endif /* FREECIV_JSON_CONNECTION */
98347 e = 0;
98348
98349 {
98350 int i;
98351
98352#ifdef FREECIV_JSON_CONNECTION
98353 /* Create the array. */
98354 e |= DIO_PUT(farray, &dout, &field_addr, 5);
98355
98356 /* Enter array. */
98357 field_addr.sub_location = plocation_elem_new(0);
98358#endif /* FREECIV_JSON_CONNECTION */
98359
98360 for (i = 0; i < 5; i++) {
98361#ifdef FREECIV_JSON_CONNECTION
98362 /* Next array element. */
98363 field_addr.sub_location->number = i;
98364#endif /* FREECIV_JSON_CONNECTION */
98365
98366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
98367 }
98368
98369#ifdef FREECIV_JSON_CONNECTION
98370 /* Exit array. */
98371 FC_FREE(field_addr.sub_location);
98372#endif /* FREECIV_JSON_CONNECTION */
98373 }
98374
98375 if (e) {
98376 log_packet_detailed("'ppl_content' field error detected");
98377 }
98378
98379#ifdef FREECIV_JSON_CONNECTION
98380 field_addr.name = "ppl_unhappy";
98381#endif /* FREECIV_JSON_CONNECTION */
98382 e = 0;
98383
98384 {
98385 int i;
98386
98387#ifdef FREECIV_JSON_CONNECTION
98388 /* Create the array. */
98389 e |= DIO_PUT(farray, &dout, &field_addr, 5);
98390
98391 /* Enter array. */
98392 field_addr.sub_location = plocation_elem_new(0);
98393#endif /* FREECIV_JSON_CONNECTION */
98394
98395 for (i = 0; i < 5; i++) {
98396#ifdef FREECIV_JSON_CONNECTION
98397 /* Next array element. */
98398 field_addr.sub_location->number = i;
98399#endif /* FREECIV_JSON_CONNECTION */
98400
98401 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
98402 }
98403
98404#ifdef FREECIV_JSON_CONNECTION
98405 /* Exit array. */
98406 FC_FREE(field_addr.sub_location);
98407#endif /* FREECIV_JSON_CONNECTION */
98408 }
98409
98410 if (e) {
98411 log_packet_detailed("'ppl_unhappy' field error detected");
98412 }
98413
98414#ifdef FREECIV_JSON_CONNECTION
98415 field_addr.name = "ppl_angry";
98416#endif /* FREECIV_JSON_CONNECTION */
98417 e = 0;
98418
98419 {
98420 int i;
98421
98422#ifdef FREECIV_JSON_CONNECTION
98423 /* Create the array. */
98424 e |= DIO_PUT(farray, &dout, &field_addr, 5);
98425
98426 /* Enter array. */
98427 field_addr.sub_location = plocation_elem_new(0);
98428#endif /* FREECIV_JSON_CONNECTION */
98429
98430 for (i = 0; i < 5; i++) {
98431#ifdef FREECIV_JSON_CONNECTION
98432 /* Next array element. */
98433 field_addr.sub_location->number = i;
98434#endif /* FREECIV_JSON_CONNECTION */
98435
98436 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
98437 }
98438
98439#ifdef FREECIV_JSON_CONNECTION
98440 /* Exit array. */
98441 FC_FREE(field_addr.sub_location);
98442#endif /* FREECIV_JSON_CONNECTION */
98443 }
98444
98445 if (e) {
98446 log_packet_detailed("'ppl_angry' field error detected");
98447 }
98448
98449#ifdef FREECIV_JSON_CONNECTION
98450 field_addr.name = "specialists_size";
98451#endif /* FREECIV_JSON_CONNECTION */
98452 e = 0;
98453
98454 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
98455
98456 if (e) {
98457 log_packet_detailed("'specialists_size' field error detected");
98458 }
98459
98460#ifdef FREECIV_JSON_CONNECTION
98461 field_addr.name = "specialists";
98462#endif /* FREECIV_JSON_CONNECTION */
98463 e = 0;
98464
98465 {
98466 int i;
98467
98468#ifdef FREECIV_JSON_CONNECTION
98469 /* Create the array. */
98470 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
98471
98472 /* Enter array. */
98473 field_addr.sub_location = plocation_elem_new(0);
98474#endif /* FREECIV_JSON_CONNECTION */
98475
98476 for (i = 0; i < real_packet->specialists_size; i++) {
98477#ifdef FREECIV_JSON_CONNECTION
98478 /* Next array element. */
98479 field_addr.sub_location->number = i;
98480#endif /* FREECIV_JSON_CONNECTION */
98481
98482 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
98483 }
98484
98485#ifdef FREECIV_JSON_CONNECTION
98486 /* Exit array. */
98487 FC_FREE(field_addr.sub_location);
98488#endif /* FREECIV_JSON_CONNECTION */
98489 }
98490
98491 if (e) {
98492 log_packet_detailed("'specialists' field error detected");
98493 }
98494
98495#ifdef FREECIV_JSON_CONNECTION
98496 field_addr.name = "food_stock";
98497#endif /* FREECIV_JSON_CONNECTION */
98498 e = 0;
98499
98500 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
98501
98502 if (e) {
98503 log_packet_detailed("'food_stock' field error detected");
98504 }
98505
98506#ifdef FREECIV_JSON_CONNECTION
98507 field_addr.name = "shield_stock";
98508#endif /* FREECIV_JSON_CONNECTION */
98509 e = 0;
98510
98511 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
98512
98513 if (e) {
98514 log_packet_detailed("'shield_stock' field error detected");
98515 }
98516
98517#ifdef FREECIV_JSON_CONNECTION
98518 field_addr.name = "airlift";
98519#endif /* FREECIV_JSON_CONNECTION */
98520 e = 0;
98521
98522 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift);
98523
98524 if (e) {
98525 log_packet_detailed("'airlift' field error detected");
98526 }
98527
98528#ifdef FREECIV_JSON_CONNECTION
98529 field_addr.name = "debug";
98530#endif /* FREECIV_JSON_CONNECTION */
98531 e = 0;
98532
98533 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
98534
98535 if (e) {
98536 log_packet_detailed("'debug' field error detected");
98537 }
98538
98539#ifdef FREECIV_JSON_CONNECTION
98540 field_addr.name = "did_buy";
98541#endif /* FREECIV_JSON_CONNECTION */
98542 e = 0;
98543
98544 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
98545
98546 if (e) {
98547 log_packet_detailed("'did_buy' field error detected");
98548 }
98549
98550#ifdef FREECIV_JSON_CONNECTION
98551 field_addr.name = "did_sell";
98552#endif /* FREECIV_JSON_CONNECTION */
98553 e = 0;
98554
98555 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
98556
98557 if (e) {
98558 log_packet_detailed("'did_sell' field error detected");
98559 }
98560
98561#ifdef FREECIV_JSON_CONNECTION
98562 field_addr.name = "was_happy";
98563#endif /* FREECIV_JSON_CONNECTION */
98564 e = 0;
98565
98566 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
98567
98568 if (e) {
98569 log_packet_detailed("'was_happy' field error detected");
98570 }
98571
98572#ifdef FREECIV_JSON_CONNECTION
98573 field_addr.name = "had_famine";
98574#endif /* FREECIV_JSON_CONNECTION */
98575 e = 0;
98576
98577 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
98578
98579 if (e) {
98580 log_packet_detailed("'had_famine' field error detected");
98581 }
98582
98583#ifdef FREECIV_JSON_CONNECTION
98584 field_addr.name = "anarchy";
98585#endif /* FREECIV_JSON_CONNECTION */
98586 e = 0;
98587
98588 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
98589
98590 if (e) {
98591 log_packet_detailed("'anarchy' field error detected");
98592 }
98593
98594#ifdef FREECIV_JSON_CONNECTION
98595 field_addr.name = "rapture";
98596#endif /* FREECIV_JSON_CONNECTION */
98597 e = 0;
98598
98599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
98600
98601 if (e) {
98602 log_packet_detailed("'rapture' field error detected");
98603 }
98604
98605#ifdef FREECIV_JSON_CONNECTION
98606 field_addr.name = "steal";
98607#endif /* FREECIV_JSON_CONNECTION */
98608 e = 0;
98609
98610 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
98611
98612 if (e) {
98613 log_packet_detailed("'steal' field error detected");
98614 }
98615
98616#ifdef FREECIV_JSON_CONNECTION
98617 field_addr.name = "turn_founded";
98618#endif /* FREECIV_JSON_CONNECTION */
98619 e = 0;
98620
98621 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
98622
98623 if (e) {
98624 log_packet_detailed("'turn_founded' field error detected");
98625 }
98626
98627#ifdef FREECIV_JSON_CONNECTION
98628 field_addr.name = "turn_last_built";
98629#endif /* FREECIV_JSON_CONNECTION */
98630 e = 0;
98631
98632 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
98633
98634 if (e) {
98635 log_packet_detailed("'turn_last_built' field error detected");
98636 }
98637
98638#ifdef FREECIV_JSON_CONNECTION
98639 field_addr.name = "built";
98640#endif /* FREECIV_JSON_CONNECTION */
98641 e = 0;
98642
98643 {
98644 int i;
98645
98646#ifdef FREECIV_JSON_CONNECTION
98647 /* Create the array. */
98648 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
98649
98650 /* Enter array. */
98651 field_addr.sub_location = plocation_elem_new(0);
98652#endif /* FREECIV_JSON_CONNECTION */
98653
98654 for (i = 0; i < B_LAST; i++) {
98655#ifdef FREECIV_JSON_CONNECTION
98656 /* Next array element. */
98657 field_addr.sub_location->number = i;
98658#endif /* FREECIV_JSON_CONNECTION */
98659
98660 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
98661 }
98662
98663#ifdef FREECIV_JSON_CONNECTION
98664 /* Exit array. */
98665 FC_FREE(field_addr.sub_location);
98666#endif /* FREECIV_JSON_CONNECTION */
98667 }
98668
98669 if (e) {
98670 log_packet_detailed("'built' field error detected");
98671 }
98672
98673#ifdef FREECIV_JSON_CONNECTION
98674 field_addr.name = "production_kind";
98675#endif /* FREECIV_JSON_CONNECTION */
98676 e = 0;
98677
98678 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
98679
98680 if (e) {
98681 log_packet_detailed("'production_kind' field error detected");
98682 }
98683
98684#ifdef FREECIV_JSON_CONNECTION
98685 field_addr.name = "production_value";
98686#endif /* FREECIV_JSON_CONNECTION */
98687 e = 0;
98688
98689 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
98690
98691 if (e) {
98692 log_packet_detailed("'production_value' field error detected");
98693 }
98694#endif /* FREECIV_DELTA_PROTOCOL */
98695
98697}
98698
98699int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
98700{
98701 if (!pc->used) {
98702 log_error("WARNING: trying to send data to the closed connection %s",
98704 return -1;
98705 }
98706 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY].packet != nullptr, -1,
98707 "Handler for PACKET_EDIT_CITY not installed");
98708 return pc->phs.handlers->send[PACKET_EDIT_CITY].packet(pc, packet);
98709}
98710
98712{
98713 memset(packet, 0, sizeof(*packet));
98714}
98715
98716#define free_packet_edit_player_create(_packet) (void) 0
98717#define destroy_packet_edit_player_create free
98718
98719#ifdef FREECIV_DELTA_PROTOCOL
98720#define hash_packet_edit_player_create_100 hash_const
98721#define cmp_packet_edit_player_create_100 cmp_const
98723#endif /* FREECIV_DELTA_PROTOCOL */
98724
98726{
98727#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_create(_packet)
98729
98730#ifdef FREECIV_JSON_CONNECTION
98731 struct plocation field_addr;
98732 {
98733 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98736 }
98737#endif /* FREECIV_JSON_CONNECTION */
98738
98739 log_packet_detailed("packet_edit_player_create_100: got info about ()");
98740
98741#ifdef FREECIV_DELTA_PROTOCOL
98744 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_CREATE;
98745
98746 if (nullptr == *hash) {
98748 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
98749 }
98750
98751 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98752 *real_packet = *old;
98753 } else {
98754 /* packet is already initialized empty */
98755 log_packet_detailed(" no old info");
98756 }
98757
98758#ifdef FREECIV_JSON_CONNECTION
98759 field_addr.name = "fields";
98760#endif /* FREECIV_JSON_CONNECTION */
98761 DIO_BV_GET(&din, &field_addr, fields);
98762
98763 if (BV_ISSET(fields, 0)) {
98764 log_packet_detailed(" got field 'tag'");
98765
98766#ifdef FREECIV_JSON_CONNECTION
98767 field_addr.name = "tag";
98768#endif /* FREECIV_JSON_CONNECTION */
98769
98770 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
98772 }
98773 }
98774
98775 if (nullptr == old) {
98776 old = fc_malloc(sizeof(*old));
98778 *old = *real_packet;
98780 } else {
98781 *old = *real_packet;
98782 }
98783
98784#else /* FREECIV_DELTA_PROTOCOL */
98785#ifdef FREECIV_JSON_CONNECTION
98786 field_addr.name = "tag";
98787#endif /* FREECIV_JSON_CONNECTION */
98788
98789 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
98791 }
98792#endif /* FREECIV_DELTA_PROTOCOL */
98793
98795#undef FREE_PACKET_STRUCT
98796}
98797
98799{
98800 const struct packet_edit_player_create *real_packet = packet;
98801 int e;
98803
98804 log_packet_detailed("packet_edit_player_create_100: sending info about ()");
98805
98806#ifdef FREECIV_DELTA_PROTOCOL
98809 bool differ;
98810 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_CREATE;
98811
98812 if (nullptr == *hash) {
98814 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
98815 }
98816 BV_CLR_ALL(fields);
98817
98818 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
98819 old = fc_malloc(sizeof(*old));
98820 /* temporary bitcopy just to insert correctly */
98821 *old = *real_packet;
98824 }
98825
98826 differ = (old->tag != real_packet->tag);
98827 if (differ) {
98828 BV_SET(fields, 0);
98829 }
98830#endif /* FREECIV_DELTA_PROTOCOL */
98831
98832#ifdef FREECIV_JSON_CONNECTION
98833 struct plocation field_addr;
98834 {
98835 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98838 }
98839#endif /* FREECIV_JSON_CONNECTION */
98840
98841#ifdef FREECIV_DELTA_PROTOCOL
98842#ifdef FREECIV_JSON_CONNECTION
98843 field_addr.name = "fields";
98844#endif /* FREECIV_JSON_CONNECTION */
98845 e = 0;
98846 e |= DIO_BV_PUT(&dout, &field_addr, fields);
98847 if (e) {
98848 log_packet_detailed("fields bitvector error detected");
98849 }
98850
98851 if (BV_ISSET(fields, 0)) {
98852 log_packet_detailed(" field 'tag' has changed");
98853
98854#ifdef FREECIV_JSON_CONNECTION
98855 field_addr.name = "tag";
98856#endif /* FREECIV_JSON_CONNECTION */
98857 e = 0;
98858
98859 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
98860
98861 if (e) {
98862 log_packet_detailed("'tag' field error detected");
98863 }
98864 }
98865
98866 *old = *real_packet;
98867
98868#else /* FREECIV_DELTA_PROTOCOL */
98869#ifdef FREECIV_JSON_CONNECTION
98870 field_addr.name = "tag";
98871#endif /* FREECIV_JSON_CONNECTION */
98872 e = 0;
98873
98874 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
98875
98876 if (e) {
98877 log_packet_detailed("'tag' field error detected");
98878 }
98879#endif /* FREECIV_DELTA_PROTOCOL */
98880
98882}
98883
98885{
98886 if (!pc->used) {
98887 log_error("WARNING: trying to send data to the closed connection %s",
98889 return -1;
98890 }
98891 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet != nullptr, -1,
98892 "Handler for PACKET_EDIT_PLAYER_CREATE not installed");
98893 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet(pc, packet);
98894}
98895
98897{
98898 struct packet_edit_player_create packet, *real_packet = &packet;
98899
98900 real_packet->tag = tag;
98901
98903}
98904
98906{
98907 memset(packet, 0, sizeof(*packet));
98908}
98909
98910#define free_packet_edit_player_remove(_packet) (void) 0
98911#define destroy_packet_edit_player_remove free
98912
98913#ifdef FREECIV_DELTA_PROTOCOL
98914#define hash_packet_edit_player_remove_100 hash_const
98915#define cmp_packet_edit_player_remove_100 cmp_const
98917#endif /* FREECIV_DELTA_PROTOCOL */
98918
98920{
98921#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_remove(_packet)
98923
98924#ifdef FREECIV_JSON_CONNECTION
98925 struct plocation field_addr;
98926 {
98927 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98930 }
98931#endif /* FREECIV_JSON_CONNECTION */
98932
98933 log_packet_detailed("packet_edit_player_remove_100: got info about ()");
98934
98935#ifdef FREECIV_DELTA_PROTOCOL
98938 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_REMOVE;
98939
98940 if (nullptr == *hash) {
98942 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
98943 }
98944
98945 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98946 *real_packet = *old;
98947 } else {
98948 /* packet is already initialized empty */
98949 log_packet_detailed(" no old info");
98950 }
98951
98952#ifdef FREECIV_JSON_CONNECTION
98953 field_addr.name = "fields";
98954#endif /* FREECIV_JSON_CONNECTION */
98955 DIO_BV_GET(&din, &field_addr, fields);
98956
98957 if (BV_ISSET(fields, 0)) {
98958 log_packet_detailed(" got field 'id'");
98959
98960#ifdef FREECIV_JSON_CONNECTION
98961 field_addr.name = "id";
98962#endif /* FREECIV_JSON_CONNECTION */
98963
98964 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98966 }
98967 }
98968
98969 if (nullptr == old) {
98970 old = fc_malloc(sizeof(*old));
98972 *old = *real_packet;
98974 } else {
98975 *old = *real_packet;
98976 }
98977
98978#else /* FREECIV_DELTA_PROTOCOL */
98979#ifdef FREECIV_JSON_CONNECTION
98980 field_addr.name = "id";
98981#endif /* FREECIV_JSON_CONNECTION */
98982
98983 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98985 }
98986#endif /* FREECIV_DELTA_PROTOCOL */
98987
98989#undef FREE_PACKET_STRUCT
98990}
98991
98993{
98994 const struct packet_edit_player_remove *real_packet = packet;
98995 int e;
98997
98998 log_packet_detailed("packet_edit_player_remove_100: sending info about ()");
98999
99000#ifdef FREECIV_DELTA_PROTOCOL
99003 bool differ;
99004 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_REMOVE;
99005
99006 if (nullptr == *hash) {
99008 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
99009 }
99010 BV_CLR_ALL(fields);
99011
99012 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
99013 old = fc_malloc(sizeof(*old));
99014 /* temporary bitcopy just to insert correctly */
99015 *old = *real_packet;
99018 }
99019
99020 differ = (old->id != real_packet->id);
99021 if (differ) {
99022 BV_SET(fields, 0);
99023 }
99024#endif /* FREECIV_DELTA_PROTOCOL */
99025
99026#ifdef FREECIV_JSON_CONNECTION
99027 struct plocation field_addr;
99028 {
99029 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99032 }
99033#endif /* FREECIV_JSON_CONNECTION */
99034
99035#ifdef FREECIV_DELTA_PROTOCOL
99036#ifdef FREECIV_JSON_CONNECTION
99037 field_addr.name = "fields";
99038#endif /* FREECIV_JSON_CONNECTION */
99039 e = 0;
99040 e |= DIO_BV_PUT(&dout, &field_addr, fields);
99041 if (e) {
99042 log_packet_detailed("fields bitvector error detected");
99043 }
99044
99045 if (BV_ISSET(fields, 0)) {
99046 log_packet_detailed(" field 'id' has changed");
99047
99048#ifdef FREECIV_JSON_CONNECTION
99049 field_addr.name = "id";
99050#endif /* FREECIV_JSON_CONNECTION */
99051 e = 0;
99052
99053 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
99054
99055 if (e) {
99056 log_packet_detailed("'id' field error detected");
99057 }
99058 }
99059
99060 *old = *real_packet;
99061
99062#else /* FREECIV_DELTA_PROTOCOL */
99063#ifdef FREECIV_JSON_CONNECTION
99064 field_addr.name = "id";
99065#endif /* FREECIV_JSON_CONNECTION */
99066 e = 0;
99067
99068 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
99069
99070 if (e) {
99071 log_packet_detailed("'id' field error detected");
99072 }
99073#endif /* FREECIV_DELTA_PROTOCOL */
99074
99076}
99077
99079{
99080 if (!pc->used) {
99081 log_error("WARNING: trying to send data to the closed connection %s",
99083 return -1;
99084 }
99085 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet != nullptr, -1,
99086 "Handler for PACKET_EDIT_PLAYER_REMOVE not installed");
99087 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet(pc, packet);
99088}
99089
99091{
99092 struct packet_edit_player_remove packet, *real_packet = &packet;
99093
99094 real_packet->id = id;
99095
99097}
99098
99099static inline void init_packet_edit_player(struct packet_edit_player *packet)
99100{
99101 memset(packet, 0, sizeof(*packet));
99102}
99103
99104#define free_packet_edit_player(_packet) (void) 0
99105#define destroy_packet_edit_player free
99106
99107#ifdef FREECIV_DELTA_PROTOCOL
99109{
99110 const struct packet_edit_player *key = (const struct packet_edit_player *) vkey;
99111 genhash_val_t result = 0;
99112
99113 result += key->id;
99114
99115 result &= 0xFFFFFFFF;
99116 return result;
99117}
99118
99119static bool cmp_packet_edit_player_100(const void *vkey1, const void *vkey2)
99120{
99121 const struct packet_edit_player *old = (const struct packet_edit_player *) vkey1;
99122 const struct packet_edit_player *real_packet = (const struct packet_edit_player *) vkey2;
99123 bool differ;
99124
99125 differ = (old->id != real_packet->id);
99126
99127 return !differ;
99128}
99130#endif /* FREECIV_DELTA_PROTOCOL */
99131
99133{
99134#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player(_packet)
99136
99137#ifdef FREECIV_JSON_CONNECTION
99138 struct plocation field_addr;
99139 {
99140 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99143 }
99144#endif /* FREECIV_JSON_CONNECTION */
99145
99146#ifdef FREECIV_JSON_CONNECTION
99147 field_addr.name = "id";
99148#endif /* FREECIV_JSON_CONNECTION */
99149
99150 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
99152 }
99153
99154 log_packet_detailed("packet_edit_player_100: got info about (%d)",
99155 real_packet->id);
99156
99157#ifdef FREECIV_DELTA_PROTOCOL
99159 struct packet_edit_player *old;
99160 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER;
99161
99162 if (nullptr == *hash) {
99164 nullptr, nullptr, nullptr, destroy_packet_edit_player);
99165 }
99166
99167 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
99168 *real_packet = *old;
99169 } else {
99170 /* packet is already initialized empty */
99171 log_packet_detailed(" no old info");
99172 }
99173
99174#ifdef FREECIV_JSON_CONNECTION
99175 field_addr.name = "fields";
99176#endif /* FREECIV_JSON_CONNECTION */
99177 DIO_BV_GET(&din, &field_addr, fields);
99178
99179 if (BV_ISSET(fields, 0)) {
99180 log_packet_detailed(" got field 'name'");
99181
99182#ifdef FREECIV_JSON_CONNECTION
99183 field_addr.name = "name";
99184#endif /* FREECIV_JSON_CONNECTION */
99185
99186 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
99188 }
99189 }
99190
99191 if (BV_ISSET(fields, 1)) {
99192 log_packet_detailed(" got field 'username'");
99193
99194#ifdef FREECIV_JSON_CONNECTION
99195 field_addr.name = "username";
99196#endif /* FREECIV_JSON_CONNECTION */
99197
99198 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
99200 }
99201 }
99202
99203 if (BV_ISSET(fields, 2)) {
99204 log_packet_detailed(" got field 'ranked_username'");
99205
99206#ifdef FREECIV_JSON_CONNECTION
99207 field_addr.name = "ranked_username";
99208#endif /* FREECIV_JSON_CONNECTION */
99209
99210 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
99211 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
99212 }
99213 }
99214
99215 if (BV_ISSET(fields, 3)) {
99216 log_packet_detailed(" got field 'user_turns'");
99217
99218#ifdef FREECIV_JSON_CONNECTION
99219 field_addr.name = "user_turns";
99220#endif /* FREECIV_JSON_CONNECTION */
99221
99222 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
99223 RECEIVE_PACKET_FIELD_ERROR(user_turns);
99224 }
99225 }
99226
99227 real_packet->is_male = BV_ISSET(fields, 4);
99228
99229 if (BV_ISSET(fields, 5)) {
99230 log_packet_detailed(" got field 'government'");
99231
99232#ifdef FREECIV_JSON_CONNECTION
99233 field_addr.name = "government";
99234#endif /* FREECIV_JSON_CONNECTION */
99235
99236 {
99237 int readin;
99238
99239 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
99241 }
99242 real_packet->government = readin;
99243 }
99244 }
99245
99246 if (BV_ISSET(fields, 6)) {
99247 log_packet_detailed(" got field 'target_government'");
99248
99249#ifdef FREECIV_JSON_CONNECTION
99250 field_addr.name = "target_government";
99251#endif /* FREECIV_JSON_CONNECTION */
99252
99253 {
99254 int readin;
99255
99256 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
99257 RECEIVE_PACKET_FIELD_ERROR(target_government);
99258 }
99259 real_packet->target_government = readin;
99260 }
99261 }
99262
99263 if (BV_ISSET(fields, 7)) {
99264 log_packet_detailed(" got field 'nation'");
99265
99266#ifdef FREECIV_JSON_CONNECTION
99267 field_addr.name = "nation";
99268#endif /* FREECIV_JSON_CONNECTION */
99269
99270 {
99271 int readin;
99272
99273 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
99275 }
99276 real_packet->nation = readin;
99277 }
99278 }
99279
99280 if (BV_ISSET(fields, 8)) {
99281 log_packet_detailed(" got field 'team'");
99282
99283#ifdef FREECIV_JSON_CONNECTION
99284 field_addr.name = "team";
99285#endif /* FREECIV_JSON_CONNECTION */
99286
99287 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
99289 }
99290 }
99291
99292 real_packet->phase_done = BV_ISSET(fields, 9);
99293
99294 if (BV_ISSET(fields, 10)) {
99295 log_packet_detailed(" got field 'nturns_idle'");
99296
99297#ifdef FREECIV_JSON_CONNECTION
99298 field_addr.name = "nturns_idle";
99299#endif /* FREECIV_JSON_CONNECTION */
99300
99301 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
99302 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
99303 }
99304 }
99305
99306 real_packet->is_alive = BV_ISSET(fields, 11);
99307
99308 if (BV_ISSET(fields, 12)) {
99309 log_packet_detailed(" got field 'revolution_finishes'");
99310
99311#ifdef FREECIV_JSON_CONNECTION
99312 field_addr.name = "revolution_finishes";
99313#endif /* FREECIV_JSON_CONNECTION */
99314
99315 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
99316 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
99317 }
99318 }
99319
99320 if (BV_ISSET(fields, 13)) {
99321 log_packet_detailed(" got field 'autoselect_weight'");
99322
99323#ifdef FREECIV_JSON_CONNECTION
99324 field_addr.name = "autoselect_weight";
99325#endif /* FREECIV_JSON_CONNECTION */
99326
99327 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
99328 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
99329 }
99330 }
99331
99332 if (BV_ISSET(fields, 14)) {
99333 log_packet_detailed(" got field 'embassy'");
99334
99335#ifdef FREECIV_JSON_CONNECTION
99336 field_addr.name = "embassy";
99337#endif /* FREECIV_JSON_CONNECTION */
99338
99339 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
99341 }
99342 }
99343
99344 if (BV_ISSET(fields, 15)) {
99345 log_packet_detailed(" got field 'gold'");
99346
99347#ifdef FREECIV_JSON_CONNECTION
99348 field_addr.name = "gold";
99349#endif /* FREECIV_JSON_CONNECTION */
99350
99351 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
99353 }
99354 }
99355
99356 if (BV_ISSET(fields, 16)) {
99357 log_packet_detailed(" got field 'infrapoints'");
99358
99359#ifdef FREECIV_JSON_CONNECTION
99360 field_addr.name = "infrapoints";
99361#endif /* FREECIV_JSON_CONNECTION */
99362
99363 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
99364 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
99365 }
99366 }
99367
99368 if (BV_ISSET(fields, 17)) {
99369 log_packet_detailed(" got field 'tax'");
99370
99371#ifdef FREECIV_JSON_CONNECTION
99372 field_addr.name = "tax";
99373#endif /* FREECIV_JSON_CONNECTION */
99374
99375 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
99377 }
99378 }
99379
99380 if (BV_ISSET(fields, 18)) {
99381 log_packet_detailed(" got field 'science'");
99382
99383#ifdef FREECIV_JSON_CONNECTION
99384 field_addr.name = "science";
99385#endif /* FREECIV_JSON_CONNECTION */
99386
99387 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
99389 }
99390 }
99391
99392 if (BV_ISSET(fields, 19)) {
99393 log_packet_detailed(" got field 'luxury'");
99394
99395#ifdef FREECIV_JSON_CONNECTION
99396 field_addr.name = "luxury";
99397#endif /* FREECIV_JSON_CONNECTION */
99398
99399 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
99401 }
99402 }
99403
99404 if (BV_ISSET(fields, 20)) {
99405 log_packet_detailed(" got field 'future_tech'");
99406
99407#ifdef FREECIV_JSON_CONNECTION
99408 field_addr.name = "future_tech";
99409#endif /* FREECIV_JSON_CONNECTION */
99410
99411 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
99412 RECEIVE_PACKET_FIELD_ERROR(future_tech);
99413 }
99414 }
99415
99416 if (BV_ISSET(fields, 21)) {
99417 log_packet_detailed(" got field 'researching'");
99418
99419#ifdef FREECIV_JSON_CONNECTION
99420 field_addr.name = "researching";
99421#endif /* FREECIV_JSON_CONNECTION */
99422
99423 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
99424 RECEIVE_PACKET_FIELD_ERROR(researching);
99425 }
99426 }
99427
99428 if (BV_ISSET(fields, 22)) {
99429 log_packet_detailed(" got field 'bulbs_researched'");
99430
99431#ifdef FREECIV_JSON_CONNECTION
99432 field_addr.name = "bulbs_researched";
99433#endif /* FREECIV_JSON_CONNECTION */
99434
99435 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
99436 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
99437 }
99438 }
99439
99440 if (BV_ISSET(fields, 23)) {
99441 log_packet_detailed(" got field 'inventions'");
99442
99443#ifdef FREECIV_JSON_CONNECTION
99444 field_addr.name = "inventions";
99445#endif /* FREECIV_JSON_CONNECTION */
99446
99448#ifdef FREECIV_JSON_CONNECTION
99449 /* Enter array (start at initial element). */
99450 field_addr.sub_location = plocation_elem_new(0);
99451 /* Enter diff array element (start at the index address). */
99452 field_addr.sub_location->sub_location = plocation_field_new("index");
99453#endif /* FREECIV_JSON_CONNECTION */
99454
99455 while (TRUE) {
99456 int i;
99457
99458 /* Read next index */
99459#if A_LAST + 1 <= MAX_UINT8
99460 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
99461#else
99462 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
99463#endif
99464 RECEIVE_PACKET_FIELD_ERROR(inventions);
99465 }
99466
99467 if (i == A_LAST + 1) {
99468 break;
99469 }
99470 if (i > A_LAST + 1) {
99471 RECEIVE_PACKET_FIELD_ERROR(inventions,
99472 ": unexpected index %d "
99473 "> length %d in array diff",
99474 i,
99475 A_LAST + 1);
99476 }
99477
99478#ifdef FREECIV_JSON_CONNECTION
99479 /* Content address. */
99480 field_addr.sub_location->sub_location->name = "data";
99481#endif /* FREECIV_JSON_CONNECTION */
99482
99483 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
99484 RECEIVE_PACKET_FIELD_ERROR(inventions);
99485 }
99486
99487#ifdef FREECIV_JSON_CONNECTION
99488 /* Move to the next diff array element. */
99489 field_addr.sub_location->number++;
99490 /* Back to the index address. */
99491 field_addr.sub_location->sub_location->name = "index";
99492#endif /* FREECIV_JSON_CONNECTION */
99493 }
99494
99495#ifdef FREECIV_JSON_CONNECTION
99496 /* Exit diff array element. */
99497 FC_FREE(field_addr.sub_location->sub_location);
99498 /* Exit array. */
99499 FC_FREE(field_addr.sub_location);
99500#endif /* FREECIV_JSON_CONNECTION */
99501 }
99502
99503 real_packet->ai = BV_ISSET(fields, 24);
99504
99505 real_packet->scenario_reserved = BV_ISSET(fields, 25);
99506
99507 if (nullptr == old) {
99508 old = fc_malloc(sizeof(*old));
99510 *old = *real_packet;
99512 } else {
99513 *old = *real_packet;
99514 }
99515
99516#else /* FREECIV_DELTA_PROTOCOL */
99517#ifdef FREECIV_JSON_CONNECTION
99518 field_addr.name = "name";
99519#endif /* FREECIV_JSON_CONNECTION */
99520
99521 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
99523 }
99524
99525#ifdef FREECIV_JSON_CONNECTION
99526 field_addr.name = "username";
99527#endif /* FREECIV_JSON_CONNECTION */
99528
99529 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
99531 }
99532
99533#ifdef FREECIV_JSON_CONNECTION
99534 field_addr.name = "ranked_username";
99535#endif /* FREECIV_JSON_CONNECTION */
99536
99537 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
99538 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
99539 }
99540
99541#ifdef FREECIV_JSON_CONNECTION
99542 field_addr.name = "user_turns";
99543#endif /* FREECIV_JSON_CONNECTION */
99544
99545 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
99546 RECEIVE_PACKET_FIELD_ERROR(user_turns);
99547 }
99548
99549#ifdef FREECIV_JSON_CONNECTION
99550 field_addr.name = "is_male";
99551#endif /* FREECIV_JSON_CONNECTION */
99552
99553 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
99555 }
99556
99557#ifdef FREECIV_JSON_CONNECTION
99558 field_addr.name = "government";
99559#endif /* FREECIV_JSON_CONNECTION */
99560
99561 {
99562 int readin;
99563
99564 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
99566 }
99567 real_packet->government = readin;
99568 }
99569
99570#ifdef FREECIV_JSON_CONNECTION
99571 field_addr.name = "target_government";
99572#endif /* FREECIV_JSON_CONNECTION */
99573
99574 {
99575 int readin;
99576
99577 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
99578 RECEIVE_PACKET_FIELD_ERROR(target_government);
99579 }
99580 real_packet->target_government = readin;
99581 }
99582
99583#ifdef FREECIV_JSON_CONNECTION
99584 field_addr.name = "nation";
99585#endif /* FREECIV_JSON_CONNECTION */
99586
99587 {
99588 int readin;
99589
99590 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
99592 }
99593 real_packet->nation = readin;
99594 }
99595
99596#ifdef FREECIV_JSON_CONNECTION
99597 field_addr.name = "team";
99598#endif /* FREECIV_JSON_CONNECTION */
99599
99600 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
99602 }
99603
99604#ifdef FREECIV_JSON_CONNECTION
99605 field_addr.name = "phase_done";
99606#endif /* FREECIV_JSON_CONNECTION */
99607
99608 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
99609 RECEIVE_PACKET_FIELD_ERROR(phase_done);
99610 }
99611
99612#ifdef FREECIV_JSON_CONNECTION
99613 field_addr.name = "nturns_idle";
99614#endif /* FREECIV_JSON_CONNECTION */
99615
99616 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
99617 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
99618 }
99619
99620#ifdef FREECIV_JSON_CONNECTION
99621 field_addr.name = "is_alive";
99622#endif /* FREECIV_JSON_CONNECTION */
99623
99624 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
99626 }
99627
99628#ifdef FREECIV_JSON_CONNECTION
99629 field_addr.name = "revolution_finishes";
99630#endif /* FREECIV_JSON_CONNECTION */
99631
99632 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
99633 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
99634 }
99635
99636#ifdef FREECIV_JSON_CONNECTION
99637 field_addr.name = "autoselect_weight";
99638#endif /* FREECIV_JSON_CONNECTION */
99639
99640 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
99641 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
99642 }
99643
99644#ifdef FREECIV_JSON_CONNECTION
99645 field_addr.name = "embassy";
99646#endif /* FREECIV_JSON_CONNECTION */
99647
99648 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
99650 }
99651
99652#ifdef FREECIV_JSON_CONNECTION
99653 field_addr.name = "gold";
99654#endif /* FREECIV_JSON_CONNECTION */
99655
99656 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
99658 }
99659
99660#ifdef FREECIV_JSON_CONNECTION
99661 field_addr.name = "infrapoints";
99662#endif /* FREECIV_JSON_CONNECTION */
99663
99664 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
99665 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
99666 }
99667
99668#ifdef FREECIV_JSON_CONNECTION
99669 field_addr.name = "tax";
99670#endif /* FREECIV_JSON_CONNECTION */
99671
99672 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
99674 }
99675
99676#ifdef FREECIV_JSON_CONNECTION
99677 field_addr.name = "science";
99678#endif /* FREECIV_JSON_CONNECTION */
99679
99680 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
99682 }
99683
99684#ifdef FREECIV_JSON_CONNECTION
99685 field_addr.name = "luxury";
99686#endif /* FREECIV_JSON_CONNECTION */
99687
99688 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
99690 }
99691
99692#ifdef FREECIV_JSON_CONNECTION
99693 field_addr.name = "future_tech";
99694#endif /* FREECIV_JSON_CONNECTION */
99695
99696 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
99697 RECEIVE_PACKET_FIELD_ERROR(future_tech);
99698 }
99699
99700#ifdef FREECIV_JSON_CONNECTION
99701 field_addr.name = "researching";
99702#endif /* FREECIV_JSON_CONNECTION */
99703
99704 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
99705 RECEIVE_PACKET_FIELD_ERROR(researching);
99706 }
99707
99708#ifdef FREECIV_JSON_CONNECTION
99709 field_addr.name = "bulbs_researched";
99710#endif /* FREECIV_JSON_CONNECTION */
99711
99712 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
99713 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
99714 }
99715
99716#ifdef FREECIV_JSON_CONNECTION
99717 field_addr.name = "inventions";
99718#endif /* FREECIV_JSON_CONNECTION */
99719
99720 {
99721 int i;
99722
99723
99724#ifdef FREECIV_JSON_CONNECTION
99725 /* Enter array. */
99726 field_addr.sub_location = plocation_elem_new(0);
99727#endif /* FREECIV_JSON_CONNECTION */
99728
99729 for (i = 0; i < A_LAST + 1; i++) {
99730#ifdef FREECIV_JSON_CONNECTION
99731 /* Next array element */
99732 field_addr.sub_location->number = i;
99733#endif /* FREECIV_JSON_CONNECTION */
99734
99735 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
99736 RECEIVE_PACKET_FIELD_ERROR(inventions);
99737 }
99738 }
99739
99740#ifdef FREECIV_JSON_CONNECTION
99741 /* Exit array. */
99742 FC_FREE(field_addr.sub_location);
99743#endif /* FREECIV_JSON_CONNECTION */
99744 }
99745
99746#ifdef FREECIV_JSON_CONNECTION
99747 field_addr.name = "ai";
99748#endif /* FREECIV_JSON_CONNECTION */
99749
99750 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ai)) {
99752 }
99753
99754#ifdef FREECIV_JSON_CONNECTION
99755 field_addr.name = "scenario_reserved";
99756#endif /* FREECIV_JSON_CONNECTION */
99757
99758 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_reserved)) {
99759 RECEIVE_PACKET_FIELD_ERROR(scenario_reserved);
99760 }
99761#endif /* FREECIV_DELTA_PROTOCOL */
99762
99764#undef FREE_PACKET_STRUCT
99765}
99766
99767static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
99768{
99769 const struct packet_edit_player *real_packet = packet;
99770 int e;
99772
99773 log_packet_detailed("packet_edit_player_100: sending info about (%d)",
99774 real_packet->id);
99775
99776#ifdef FREECIV_DELTA_PROTOCOL
99778 struct packet_edit_player *old;
99779 bool differ;
99780 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER;
99781
99782 if (nullptr == *hash) {
99784 nullptr, nullptr, nullptr, destroy_packet_edit_player);
99785 }
99786 BV_CLR_ALL(fields);
99787
99788 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
99789 old = fc_malloc(sizeof(*old));
99790 /* temporary bitcopy just to insert correctly */
99791 *old = *real_packet;
99794 }
99795
99796 differ = (strcmp(old->name, real_packet->name) != 0);
99797 if (differ) {
99798 BV_SET(fields, 0);
99799 }
99800
99801 differ = (strcmp(old->username, real_packet->username) != 0);
99802 if (differ) {
99803 BV_SET(fields, 1);
99804 }
99805
99806 differ = (strcmp(old->ranked_username, real_packet->ranked_username) != 0);
99807 if (differ) {
99808 BV_SET(fields, 2);
99809 }
99810
99811 differ = (old->user_turns != real_packet->user_turns);
99812 if (differ) {
99813 BV_SET(fields, 3);
99814 }
99815
99816 /* folded into head */
99817 if (real_packet->is_male) {
99818 BV_SET(fields, 4);
99819 }
99820
99821 differ = (old->government != real_packet->government);
99822 if (differ) {
99823 BV_SET(fields, 5);
99824 }
99825
99826 differ = (old->target_government != real_packet->target_government);
99827 if (differ) {
99828 BV_SET(fields, 6);
99829 }
99830
99831 differ = (old->nation != real_packet->nation);
99832 if (differ) {
99833 BV_SET(fields, 7);
99834 }
99835
99836 differ = (old->team != real_packet->team);
99837 if (differ) {
99838 BV_SET(fields, 8);
99839 }
99840
99841 /* folded into head */
99842 if (real_packet->phase_done) {
99843 BV_SET(fields, 9);
99844 }
99845
99846 differ = (old->nturns_idle != real_packet->nturns_idle);
99847 if (differ) {
99848 BV_SET(fields, 10);
99849 }
99850
99851 /* folded into head */
99852 if (real_packet->is_alive) {
99853 BV_SET(fields, 11);
99854 }
99855
99856 differ = (old->revolution_finishes != real_packet->revolution_finishes);
99857 if (differ) {
99858 BV_SET(fields, 12);
99859 }
99860
99861 differ = (old->autoselect_weight != real_packet->autoselect_weight);
99862 if (differ) {
99863 BV_SET(fields, 13);
99864 }
99865
99866 differ = !BV_ARE_EQUAL(old->embassy, real_packet->embassy);
99867 if (differ) {
99868 BV_SET(fields, 14);
99869 }
99870
99871 differ = (old->gold != real_packet->gold);
99872 if (differ) {
99873 BV_SET(fields, 15);
99874 }
99875
99876 differ = (old->infrapoints != real_packet->infrapoints);
99877 if (differ) {
99878 BV_SET(fields, 16);
99879 }
99880
99881 differ = (old->tax != real_packet->tax);
99882 if (differ) {
99883 BV_SET(fields, 17);
99884 }
99885
99886 differ = (old->science != real_packet->science);
99887 if (differ) {
99888 BV_SET(fields, 18);
99889 }
99890
99891 differ = (old->luxury != real_packet->luxury);
99892 if (differ) {
99893 BV_SET(fields, 19);
99894 }
99895
99896 differ = (old->future_tech != real_packet->future_tech);
99897 if (differ) {
99898 BV_SET(fields, 20);
99899 }
99900
99901 differ = (old->researching != real_packet->researching);
99902 if (differ) {
99903 BV_SET(fields, 21);
99904 }
99905
99906 differ = (old->bulbs_researched != real_packet->bulbs_researched);
99907 if (differ) {
99908 BV_SET(fields, 22);
99909 }
99910
99911 differ = FALSE;
99912 {
99913 int i;
99914
99915 for (i = 0; i < A_LAST + 1; i++) {
99916 differ = (old->inventions[i] != real_packet->inventions[i]);
99917 if (differ) {
99918 break;
99919 }
99920 }
99921 }
99922 if (differ) {
99923 BV_SET(fields, 23);
99924 }
99925
99926 /* folded into head */
99927 if (real_packet->ai) {
99928 BV_SET(fields, 24);
99929 }
99930
99931 /* folded into head */
99932 if (real_packet->scenario_reserved) {
99933 BV_SET(fields, 25);
99934 }
99935#endif /* FREECIV_DELTA_PROTOCOL */
99936
99937#ifdef FREECIV_JSON_CONNECTION
99938 struct plocation field_addr;
99939 {
99940 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99943 }
99944#endif /* FREECIV_JSON_CONNECTION */
99945
99946#ifdef FREECIV_JSON_CONNECTION
99947 field_addr.name = "id";
99948#endif /* FREECIV_JSON_CONNECTION */
99949 e = 0;
99950
99951 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
99952
99953 if (e) {
99954 log_packet_detailed("'id' field error detected");
99955 }
99956
99957#ifdef FREECIV_DELTA_PROTOCOL
99958#ifdef FREECIV_JSON_CONNECTION
99959 field_addr.name = "fields";
99960#endif /* FREECIV_JSON_CONNECTION */
99961 e = 0;
99962 e |= DIO_BV_PUT(&dout, &field_addr, fields);
99963 if (e) {
99964 log_packet_detailed("fields bitvector error detected");
99965 }
99966
99967 if (BV_ISSET(fields, 0)) {
99968 log_packet_detailed(" field 'name' has changed");
99969
99970#ifdef FREECIV_JSON_CONNECTION
99971 field_addr.name = "name";
99972#endif /* FREECIV_JSON_CONNECTION */
99973 e = 0;
99974
99975 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
99976
99977 if (e) {
99978 log_packet_detailed("'name' field error detected");
99979 }
99980 }
99981
99982 if (BV_ISSET(fields, 1)) {
99983 log_packet_detailed(" field 'username' has changed");
99984
99985#ifdef FREECIV_JSON_CONNECTION
99986 field_addr.name = "username";
99987#endif /* FREECIV_JSON_CONNECTION */
99988 e = 0;
99989
99990 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
99991
99992 if (e) {
99993 log_packet_detailed("'username' field error detected");
99994 }
99995 }
99996
99997 if (BV_ISSET(fields, 2)) {
99998 log_packet_detailed(" field 'ranked_username' has changed");
99999
100000#ifdef FREECIV_JSON_CONNECTION
100001 field_addr.name = "ranked_username";
100002#endif /* FREECIV_JSON_CONNECTION */
100003 e = 0;
100004
100005 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
100006
100007 if (e) {
100008 log_packet_detailed("'ranked_username' field error detected");
100009 }
100010 }
100011
100012 if (BV_ISSET(fields, 3)) {
100013 log_packet_detailed(" field 'user_turns' has changed");
100014
100015#ifdef FREECIV_JSON_CONNECTION
100016 field_addr.name = "user_turns";
100017#endif /* FREECIV_JSON_CONNECTION */
100018 e = 0;
100019
100020 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
100021
100022 if (e) {
100023 log_packet_detailed("'user_turns' field error detected");
100024 }
100025 }
100026
100027 /* field 4 is folded into the header */
100028
100029 if (BV_ISSET(fields, 5)) {
100030 log_packet_detailed(" field 'government' has changed");
100031
100032#ifdef FREECIV_JSON_CONNECTION
100033 field_addr.name = "government";
100034#endif /* FREECIV_JSON_CONNECTION */
100035 e = 0;
100036
100037 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
100038
100039 if (e) {
100040 log_packet_detailed("'government' field error detected");
100041 }
100042 }
100043
100044 if (BV_ISSET(fields, 6)) {
100045 log_packet_detailed(" field 'target_government' has changed");
100046
100047#ifdef FREECIV_JSON_CONNECTION
100048 field_addr.name = "target_government";
100049#endif /* FREECIV_JSON_CONNECTION */
100050 e = 0;
100051
100052 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
100053
100054 if (e) {
100055 log_packet_detailed("'target_government' field error detected");
100056 }
100057 }
100058
100059 if (BV_ISSET(fields, 7)) {
100060 log_packet_detailed(" field 'nation' has changed");
100061
100062#ifdef FREECIV_JSON_CONNECTION
100063 field_addr.name = "nation";
100064#endif /* FREECIV_JSON_CONNECTION */
100065 e = 0;
100066
100067 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
100068
100069 if (e) {
100070 log_packet_detailed("'nation' field error detected");
100071 }
100072 }
100073
100074 if (BV_ISSET(fields, 8)) {
100075 log_packet_detailed(" field 'team' has changed");
100076
100077#ifdef FREECIV_JSON_CONNECTION
100078 field_addr.name = "team";
100079#endif /* FREECIV_JSON_CONNECTION */
100080 e = 0;
100081
100082 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
100083
100084 if (e) {
100085 log_packet_detailed("'team' field error detected");
100086 }
100087 }
100088
100089 /* field 9 is folded into the header */
100090
100091 if (BV_ISSET(fields, 10)) {
100092 log_packet_detailed(" field 'nturns_idle' has changed");
100093
100094#ifdef FREECIV_JSON_CONNECTION
100095 field_addr.name = "nturns_idle";
100096#endif /* FREECIV_JSON_CONNECTION */
100097 e = 0;
100098
100099 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
100100
100101 if (e) {
100102 log_packet_detailed("'nturns_idle' field error detected");
100103 }
100104 }
100105
100106 /* field 11 is folded into the header */
100107
100108 if (BV_ISSET(fields, 12)) {
100109 log_packet_detailed(" field 'revolution_finishes' has changed");
100110
100111#ifdef FREECIV_JSON_CONNECTION
100112 field_addr.name = "revolution_finishes";
100113#endif /* FREECIV_JSON_CONNECTION */
100114 e = 0;
100115
100116 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
100117
100118 if (e) {
100119 log_packet_detailed("'revolution_finishes' field error detected");
100120 }
100121 }
100122
100123 if (BV_ISSET(fields, 13)) {
100124 log_packet_detailed(" field 'autoselect_weight' has changed");
100125
100126#ifdef FREECIV_JSON_CONNECTION
100127 field_addr.name = "autoselect_weight";
100128#endif /* FREECIV_JSON_CONNECTION */
100129 e = 0;
100130
100131 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
100132
100133 if (e) {
100134 log_packet_detailed("'autoselect_weight' field error detected");
100135 }
100136 }
100137
100138 if (BV_ISSET(fields, 14)) {
100139 log_packet_detailed(" field 'embassy' has changed");
100140
100141#ifdef FREECIV_JSON_CONNECTION
100142 field_addr.name = "embassy";
100143#endif /* FREECIV_JSON_CONNECTION */
100144 e = 0;
100145
100146 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
100147
100148 if (e) {
100149 log_packet_detailed("'embassy' field error detected");
100150 }
100151 }
100152
100153 if (BV_ISSET(fields, 15)) {
100154 log_packet_detailed(" field 'gold' has changed");
100155
100156#ifdef FREECIV_JSON_CONNECTION
100157 field_addr.name = "gold";
100158#endif /* FREECIV_JSON_CONNECTION */
100159 e = 0;
100160
100161 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
100162
100163 if (e) {
100164 log_packet_detailed("'gold' field error detected");
100165 }
100166 }
100167
100168 if (BV_ISSET(fields, 16)) {
100169 log_packet_detailed(" field 'infrapoints' has changed");
100170
100171#ifdef FREECIV_JSON_CONNECTION
100172 field_addr.name = "infrapoints";
100173#endif /* FREECIV_JSON_CONNECTION */
100174 e = 0;
100175
100176 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
100177
100178 if (e) {
100179 log_packet_detailed("'infrapoints' field error detected");
100180 }
100181 }
100182
100183 if (BV_ISSET(fields, 17)) {
100184 log_packet_detailed(" field 'tax' has changed");
100185
100186#ifdef FREECIV_JSON_CONNECTION
100187 field_addr.name = "tax";
100188#endif /* FREECIV_JSON_CONNECTION */
100189 e = 0;
100190
100191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
100192
100193 if (e) {
100194 log_packet_detailed("'tax' field error detected");
100195 }
100196 }
100197
100198 if (BV_ISSET(fields, 18)) {
100199 log_packet_detailed(" field 'science' has changed");
100200
100201#ifdef FREECIV_JSON_CONNECTION
100202 field_addr.name = "science";
100203#endif /* FREECIV_JSON_CONNECTION */
100204 e = 0;
100205
100206 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
100207
100208 if (e) {
100209 log_packet_detailed("'science' field error detected");
100210 }
100211 }
100212
100213 if (BV_ISSET(fields, 19)) {
100214 log_packet_detailed(" field 'luxury' has changed");
100215
100216#ifdef FREECIV_JSON_CONNECTION
100217 field_addr.name = "luxury";
100218#endif /* FREECIV_JSON_CONNECTION */
100219 e = 0;
100220
100221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
100222
100223 if (e) {
100224 log_packet_detailed("'luxury' field error detected");
100225 }
100226 }
100227
100228 if (BV_ISSET(fields, 20)) {
100229 log_packet_detailed(" field 'future_tech' has changed");
100230
100231#ifdef FREECIV_JSON_CONNECTION
100232 field_addr.name = "future_tech";
100233#endif /* FREECIV_JSON_CONNECTION */
100234 e = 0;
100235
100236 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
100237
100238 if (e) {
100239 log_packet_detailed("'future_tech' field error detected");
100240 }
100241 }
100242
100243 if (BV_ISSET(fields, 21)) {
100244 log_packet_detailed(" field 'researching' has changed");
100245
100246#ifdef FREECIV_JSON_CONNECTION
100247 field_addr.name = "researching";
100248#endif /* FREECIV_JSON_CONNECTION */
100249 e = 0;
100250
100251 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
100252
100253 if (e) {
100254 log_packet_detailed("'researching' field error detected");
100255 }
100256 }
100257
100258 if (BV_ISSET(fields, 22)) {
100259 log_packet_detailed(" field 'bulbs_researched' has changed");
100260
100261#ifdef FREECIV_JSON_CONNECTION
100262 field_addr.name = "bulbs_researched";
100263#endif /* FREECIV_JSON_CONNECTION */
100264 e = 0;
100265
100266 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
100267
100268 if (e) {
100269 log_packet_detailed("'bulbs_researched' field error detected");
100270 }
100271 }
100272
100273 if (BV_ISSET(fields, 23)) {
100274 log_packet_detailed(" field 'inventions' has changed");
100275
100276#ifdef FREECIV_JSON_CONNECTION
100277 field_addr.name = "inventions";
100278#endif /* FREECIV_JSON_CONNECTION */
100279 e = 0;
100280
100281 {
100282 int i;
100283
100285
100286#ifdef FREECIV_JSON_CONNECTION
100287 size_t count_i = 0;
100288
100289 /* Create the array. */
100290 e |= DIO_PUT(farray, &dout, &field_addr, 0);
100291
100292 /* Enter array. */
100293 field_addr.sub_location = plocation_elem_new(0);
100294#endif /* FREECIV_JSON_CONNECTION */
100295
100296 for (i = 0; i < A_LAST + 1; i++) {
100297 differ = (old->inventions[i] != real_packet->inventions[i]);
100298
100299 if (!differ) {
100300 continue;
100301 }
100302
100303#ifdef FREECIV_JSON_CONNECTION
100304 /* Append next diff array element. */
100305 field_addr.sub_location->number = -1;
100306
100307 /* Create the diff array element. */
100308 e |= DIO_PUT(object, &dout, &field_addr);
100309
100310 /* Enter diff array element (start at the index address). */
100311 field_addr.sub_location->number = count_i++;
100312 field_addr.sub_location->sub_location = plocation_field_new("index");
100313#endif /* FREECIV_JSON_CONNECTION */
100314
100315 /* Write the index */
100316#if A_LAST + 1 <= MAX_UINT8
100317 e |= DIO_PUT(uint8, &dout, &field_addr, i);
100318#else
100319 e |= DIO_PUT(uint16, &dout, &field_addr, i);
100320#endif
100321
100322#ifdef FREECIV_JSON_CONNECTION
100323 /* Content address. */
100324 field_addr.sub_location->sub_location->name = "data";
100325#endif /* FREECIV_JSON_CONNECTION */
100326
100327 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
100328
100329#ifdef FREECIV_JSON_CONNECTION
100330 /* Exit diff array element. */
100331 FC_FREE(field_addr.sub_location->sub_location);
100332#endif /* FREECIV_JSON_CONNECTION */
100333 }
100334
100335#ifdef FREECIV_JSON_CONNECTION
100336 /* Append diff array element. */
100337 field_addr.sub_location->number = -1;
100338
100339 /* Create the terminating diff array element. */
100340 e |= DIO_PUT(object, &dout, &field_addr);
100341
100342 /* Enter diff array element (start at the index address). */
100343 field_addr.sub_location->number = count_i;
100344 field_addr.sub_location->sub_location = plocation_field_new("index");
100345#endif /* FREECIV_JSON_CONNECTION */
100346
100347 /* Write the sentinel value */
100348#if A_LAST + 1 <= MAX_UINT8
100349 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST + 1);
100350#else
100351 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST + 1);
100352#endif
100353
100354#ifdef FREECIV_JSON_CONNECTION
100355 /* Exit diff array element. */
100356 FC_FREE(field_addr.sub_location->sub_location);
100357 /* Exit array. */
100358 FC_FREE(field_addr.sub_location);
100359#endif /* FREECIV_JSON_CONNECTION */
100360 }
100361
100362 if (e) {
100363 log_packet_detailed("'inventions' field error detected");
100364 }
100365 }
100366
100367 /* field 24 is folded into the header */
100368
100369 /* field 25 is folded into the header */
100370
100371 *old = *real_packet;
100372
100373#else /* FREECIV_DELTA_PROTOCOL */
100374#ifdef FREECIV_JSON_CONNECTION
100375 field_addr.name = "name";
100376#endif /* FREECIV_JSON_CONNECTION */
100377 e = 0;
100378
100379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
100380
100381 if (e) {
100382 log_packet_detailed("'name' field error detected");
100383 }
100384
100385#ifdef FREECIV_JSON_CONNECTION
100386 field_addr.name = "username";
100387#endif /* FREECIV_JSON_CONNECTION */
100388 e = 0;
100389
100390 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
100391
100392 if (e) {
100393 log_packet_detailed("'username' field error detected");
100394 }
100395
100396#ifdef FREECIV_JSON_CONNECTION
100397 field_addr.name = "ranked_username";
100398#endif /* FREECIV_JSON_CONNECTION */
100399 e = 0;
100400
100401 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
100402
100403 if (e) {
100404 log_packet_detailed("'ranked_username' field error detected");
100405 }
100406
100407#ifdef FREECIV_JSON_CONNECTION
100408 field_addr.name = "user_turns";
100409#endif /* FREECIV_JSON_CONNECTION */
100410 e = 0;
100411
100412 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
100413
100414 if (e) {
100415 log_packet_detailed("'user_turns' field error detected");
100416 }
100417
100418#ifdef FREECIV_JSON_CONNECTION
100419 field_addr.name = "is_male";
100420#endif /* FREECIV_JSON_CONNECTION */
100421 e = 0;
100422
100423 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
100424
100425 if (e) {
100426 log_packet_detailed("'is_male' field error detected");
100427 }
100428
100429#ifdef FREECIV_JSON_CONNECTION
100430 field_addr.name = "government";
100431#endif /* FREECIV_JSON_CONNECTION */
100432 e = 0;
100433
100434 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
100435
100436 if (e) {
100437 log_packet_detailed("'government' field error detected");
100438 }
100439
100440#ifdef FREECIV_JSON_CONNECTION
100441 field_addr.name = "target_government";
100442#endif /* FREECIV_JSON_CONNECTION */
100443 e = 0;
100444
100445 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
100446
100447 if (e) {
100448 log_packet_detailed("'target_government' field error detected");
100449 }
100450
100451#ifdef FREECIV_JSON_CONNECTION
100452 field_addr.name = "nation";
100453#endif /* FREECIV_JSON_CONNECTION */
100454 e = 0;
100455
100456 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
100457
100458 if (e) {
100459 log_packet_detailed("'nation' field error detected");
100460 }
100461
100462#ifdef FREECIV_JSON_CONNECTION
100463 field_addr.name = "team";
100464#endif /* FREECIV_JSON_CONNECTION */
100465 e = 0;
100466
100467 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
100468
100469 if (e) {
100470 log_packet_detailed("'team' field error detected");
100471 }
100472
100473#ifdef FREECIV_JSON_CONNECTION
100474 field_addr.name = "phase_done";
100475#endif /* FREECIV_JSON_CONNECTION */
100476 e = 0;
100477
100478 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
100479
100480 if (e) {
100481 log_packet_detailed("'phase_done' field error detected");
100482 }
100483
100484#ifdef FREECIV_JSON_CONNECTION
100485 field_addr.name = "nturns_idle";
100486#endif /* FREECIV_JSON_CONNECTION */
100487 e = 0;
100488
100489 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
100490
100491 if (e) {
100492 log_packet_detailed("'nturns_idle' field error detected");
100493 }
100494
100495#ifdef FREECIV_JSON_CONNECTION
100496 field_addr.name = "is_alive";
100497#endif /* FREECIV_JSON_CONNECTION */
100498 e = 0;
100499
100500 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
100501
100502 if (e) {
100503 log_packet_detailed("'is_alive' field error detected");
100504 }
100505
100506#ifdef FREECIV_JSON_CONNECTION
100507 field_addr.name = "revolution_finishes";
100508#endif /* FREECIV_JSON_CONNECTION */
100509 e = 0;
100510
100511 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
100512
100513 if (e) {
100514 log_packet_detailed("'revolution_finishes' field error detected");
100515 }
100516
100517#ifdef FREECIV_JSON_CONNECTION
100518 field_addr.name = "autoselect_weight";
100519#endif /* FREECIV_JSON_CONNECTION */
100520 e = 0;
100521
100522 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
100523
100524 if (e) {
100525 log_packet_detailed("'autoselect_weight' field error detected");
100526 }
100527
100528#ifdef FREECIV_JSON_CONNECTION
100529 field_addr.name = "embassy";
100530#endif /* FREECIV_JSON_CONNECTION */
100531 e = 0;
100532
100533 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
100534
100535 if (e) {
100536 log_packet_detailed("'embassy' field error detected");
100537 }
100538
100539#ifdef FREECIV_JSON_CONNECTION
100540 field_addr.name = "gold";
100541#endif /* FREECIV_JSON_CONNECTION */
100542 e = 0;
100543
100544 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
100545
100546 if (e) {
100547 log_packet_detailed("'gold' field error detected");
100548 }
100549
100550#ifdef FREECIV_JSON_CONNECTION
100551 field_addr.name = "infrapoints";
100552#endif /* FREECIV_JSON_CONNECTION */
100553 e = 0;
100554
100555 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
100556
100557 if (e) {
100558 log_packet_detailed("'infrapoints' field error detected");
100559 }
100560
100561#ifdef FREECIV_JSON_CONNECTION
100562 field_addr.name = "tax";
100563#endif /* FREECIV_JSON_CONNECTION */
100564 e = 0;
100565
100566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
100567
100568 if (e) {
100569 log_packet_detailed("'tax' field error detected");
100570 }
100571
100572#ifdef FREECIV_JSON_CONNECTION
100573 field_addr.name = "science";
100574#endif /* FREECIV_JSON_CONNECTION */
100575 e = 0;
100576
100577 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
100578
100579 if (e) {
100580 log_packet_detailed("'science' field error detected");
100581 }
100582
100583#ifdef FREECIV_JSON_CONNECTION
100584 field_addr.name = "luxury";
100585#endif /* FREECIV_JSON_CONNECTION */
100586 e = 0;
100587
100588 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
100589
100590 if (e) {
100591 log_packet_detailed("'luxury' field error detected");
100592 }
100593
100594#ifdef FREECIV_JSON_CONNECTION
100595 field_addr.name = "future_tech";
100596#endif /* FREECIV_JSON_CONNECTION */
100597 e = 0;
100598
100599 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
100600
100601 if (e) {
100602 log_packet_detailed("'future_tech' field error detected");
100603 }
100604
100605#ifdef FREECIV_JSON_CONNECTION
100606 field_addr.name = "researching";
100607#endif /* FREECIV_JSON_CONNECTION */
100608 e = 0;
100609
100610 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
100611
100612 if (e) {
100613 log_packet_detailed("'researching' field error detected");
100614 }
100615
100616#ifdef FREECIV_JSON_CONNECTION
100617 field_addr.name = "bulbs_researched";
100618#endif /* FREECIV_JSON_CONNECTION */
100619 e = 0;
100620
100621 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
100622
100623 if (e) {
100624 log_packet_detailed("'bulbs_researched' field error detected");
100625 }
100626
100627#ifdef FREECIV_JSON_CONNECTION
100628 field_addr.name = "inventions";
100629#endif /* FREECIV_JSON_CONNECTION */
100630 e = 0;
100631
100632 {
100633 int i;
100634
100635#ifdef FREECIV_JSON_CONNECTION
100636 /* Create the array. */
100637 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST + 1);
100638
100639 /* Enter array. */
100640 field_addr.sub_location = plocation_elem_new(0);
100641#endif /* FREECIV_JSON_CONNECTION */
100642
100643 for (i = 0; i < A_LAST + 1; i++) {
100644#ifdef FREECIV_JSON_CONNECTION
100645 /* Next array element. */
100646 field_addr.sub_location->number = i;
100647#endif /* FREECIV_JSON_CONNECTION */
100648
100649 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
100650 }
100651
100652#ifdef FREECIV_JSON_CONNECTION
100653 /* Exit array. */
100654 FC_FREE(field_addr.sub_location);
100655#endif /* FREECIV_JSON_CONNECTION */
100656 }
100657
100658 if (e) {
100659 log_packet_detailed("'inventions' field error detected");
100660 }
100661
100662#ifdef FREECIV_JSON_CONNECTION
100663 field_addr.name = "ai";
100664#endif /* FREECIV_JSON_CONNECTION */
100665 e = 0;
100666
100667 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ai);
100668
100669 if (e) {
100670 log_packet_detailed("'ai' field error detected");
100671 }
100672
100673#ifdef FREECIV_JSON_CONNECTION
100674 field_addr.name = "scenario_reserved";
100675#endif /* FREECIV_JSON_CONNECTION */
100676 e = 0;
100677
100678 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_reserved);
100679
100680 if (e) {
100681 log_packet_detailed("'scenario_reserved' field error detected");
100682 }
100683#endif /* FREECIV_DELTA_PROTOCOL */
100684
100686}
100687
100689{
100690 if (!pc->used) {
100691 log_error("WARNING: trying to send data to the closed connection %s",
100693 return -1;
100694 }
100695 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet != nullptr, -1,
100696 "Handler for PACKET_EDIT_PLAYER not installed");
100697 return pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet(pc, packet);
100698}
100699
100700void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
100701{
100702 conn_list_iterate(dest, pconn) {
100705}
100706
100708{
100709 memset(packet, 0, sizeof(*packet));
100710}
100711
100712#define free_packet_edit_player_vision(_packet) (void) 0
100713#define destroy_packet_edit_player_vision free
100714
100715#ifdef FREECIV_DELTA_PROTOCOL
100716#define hash_packet_edit_player_vision_100 hash_const
100717#define cmp_packet_edit_player_vision_100 cmp_const
100719#endif /* FREECIV_DELTA_PROTOCOL */
100720
100722{
100723#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_vision(_packet)
100725
100726#ifdef FREECIV_JSON_CONNECTION
100727 struct plocation field_addr;
100728 {
100729 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100732 }
100733#endif /* FREECIV_JSON_CONNECTION */
100734
100735 log_packet_detailed("packet_edit_player_vision_100: got info about ()");
100736
100737#ifdef FREECIV_DELTA_PROTOCOL
100740 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_VISION;
100741
100742 if (nullptr == *hash) {
100744 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
100745 }
100746
100747 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100748 *real_packet = *old;
100749 } else {
100750 /* packet is already initialized empty */
100751 log_packet_detailed(" no old info");
100752 }
100753
100754#ifdef FREECIV_JSON_CONNECTION
100755 field_addr.name = "fields";
100756#endif /* FREECIV_JSON_CONNECTION */
100757 DIO_BV_GET(&din, &field_addr, fields);
100758
100759 if (BV_ISSET(fields, 0)) {
100760 log_packet_detailed(" got field 'player'");
100761
100762#ifdef FREECIV_JSON_CONNECTION
100763 field_addr.name = "player";
100764#endif /* FREECIV_JSON_CONNECTION */
100765
100766 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
100768 }
100769 }
100770
100771 if (BV_ISSET(fields, 1)) {
100772 log_packet_detailed(" got field 'tile'");
100773
100774#ifdef FREECIV_JSON_CONNECTION
100775 field_addr.name = "tile";
100776#endif /* FREECIV_JSON_CONNECTION */
100777
100778 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
100780 }
100781 }
100782
100783 real_packet->known = BV_ISSET(fields, 2);
100784
100785 if (BV_ISSET(fields, 3)) {
100786 log_packet_detailed(" got field 'size'");
100787
100788#ifdef FREECIV_JSON_CONNECTION
100789 field_addr.name = "size";
100790#endif /* FREECIV_JSON_CONNECTION */
100791
100792 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
100794 }
100795 }
100796
100797 if (nullptr == old) {
100798 old = fc_malloc(sizeof(*old));
100800 *old = *real_packet;
100802 } else {
100803 *old = *real_packet;
100804 }
100805
100806#else /* FREECIV_DELTA_PROTOCOL */
100807#ifdef FREECIV_JSON_CONNECTION
100808 field_addr.name = "player";
100809#endif /* FREECIV_JSON_CONNECTION */
100810
100811 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
100813 }
100814
100815#ifdef FREECIV_JSON_CONNECTION
100816 field_addr.name = "tile";
100817#endif /* FREECIV_JSON_CONNECTION */
100818
100819 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
100821 }
100822
100823#ifdef FREECIV_JSON_CONNECTION
100824 field_addr.name = "known";
100825#endif /* FREECIV_JSON_CONNECTION */
100826
100827 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->known)) {
100829 }
100830
100831#ifdef FREECIV_JSON_CONNECTION
100832 field_addr.name = "size";
100833#endif /* FREECIV_JSON_CONNECTION */
100834
100835 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
100837 }
100838#endif /* FREECIV_DELTA_PROTOCOL */
100839
100841#undef FREE_PACKET_STRUCT
100842}
100843
100845{
100846 const struct packet_edit_player_vision *real_packet = packet;
100847 int e;
100849
100850 log_packet_detailed("packet_edit_player_vision_100: sending info about ()");
100851
100852#ifdef FREECIV_DELTA_PROTOCOL
100855 bool differ;
100856 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_VISION;
100857
100858 if (nullptr == *hash) {
100860 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
100861 }
100862 BV_CLR_ALL(fields);
100863
100864 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100865 old = fc_malloc(sizeof(*old));
100866 /* temporary bitcopy just to insert correctly */
100867 *old = *real_packet;
100870 }
100871
100872 differ = (old->player != real_packet->player);
100873 if (differ) {
100874 BV_SET(fields, 0);
100875 }
100876
100877 differ = (old->tile != real_packet->tile);
100878 if (differ) {
100879 BV_SET(fields, 1);
100880 }
100881
100882 /* folded into head */
100883 if (real_packet->known) {
100884 BV_SET(fields, 2);
100885 }
100886
100887 differ = (old->size != real_packet->size);
100888 if (differ) {
100889 BV_SET(fields, 3);
100890 }
100891#endif /* FREECIV_DELTA_PROTOCOL */
100892
100893#ifdef FREECIV_JSON_CONNECTION
100894 struct plocation field_addr;
100895 {
100896 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100899 }
100900#endif /* FREECIV_JSON_CONNECTION */
100901
100902#ifdef FREECIV_DELTA_PROTOCOL
100903#ifdef FREECIV_JSON_CONNECTION
100904 field_addr.name = "fields";
100905#endif /* FREECIV_JSON_CONNECTION */
100906 e = 0;
100907 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100908 if (e) {
100909 log_packet_detailed("fields bitvector error detected");
100910 }
100911
100912 if (BV_ISSET(fields, 0)) {
100913 log_packet_detailed(" field 'player' has changed");
100914
100915#ifdef FREECIV_JSON_CONNECTION
100916 field_addr.name = "player";
100917#endif /* FREECIV_JSON_CONNECTION */
100918 e = 0;
100919
100920 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
100921
100922 if (e) {
100923 log_packet_detailed("'player' field error detected");
100924 }
100925 }
100926
100927 if (BV_ISSET(fields, 1)) {
100928 log_packet_detailed(" field 'tile' has changed");
100929
100930#ifdef FREECIV_JSON_CONNECTION
100931 field_addr.name = "tile";
100932#endif /* FREECIV_JSON_CONNECTION */
100933 e = 0;
100934
100935 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100936
100937 if (e) {
100938 log_packet_detailed("'tile' field error detected");
100939 }
100940 }
100941
100942 /* field 2 is folded into the header */
100943
100944 if (BV_ISSET(fields, 3)) {
100945 log_packet_detailed(" field 'size' has changed");
100946
100947#ifdef FREECIV_JSON_CONNECTION
100948 field_addr.name = "size";
100949#endif /* FREECIV_JSON_CONNECTION */
100950 e = 0;
100951
100952 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
100953
100954 if (e) {
100955 log_packet_detailed("'size' field error detected");
100956 }
100957 }
100958
100959 *old = *real_packet;
100960
100961#else /* FREECIV_DELTA_PROTOCOL */
100962#ifdef FREECIV_JSON_CONNECTION
100963 field_addr.name = "player";
100964#endif /* FREECIV_JSON_CONNECTION */
100965 e = 0;
100966
100967 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
100968
100969 if (e) {
100970 log_packet_detailed("'player' field error detected");
100971 }
100972
100973#ifdef FREECIV_JSON_CONNECTION
100974 field_addr.name = "tile";
100975#endif /* FREECIV_JSON_CONNECTION */
100976 e = 0;
100977
100978 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100979
100980 if (e) {
100981 log_packet_detailed("'tile' field error detected");
100982 }
100983
100984#ifdef FREECIV_JSON_CONNECTION
100985 field_addr.name = "known";
100986#endif /* FREECIV_JSON_CONNECTION */
100987 e = 0;
100988
100989 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->known);
100990
100991 if (e) {
100992 log_packet_detailed("'known' field error detected");
100993 }
100994
100995#ifdef FREECIV_JSON_CONNECTION
100996 field_addr.name = "size";
100997#endif /* FREECIV_JSON_CONNECTION */
100998 e = 0;
100999
101000 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
101001
101002 if (e) {
101003 log_packet_detailed("'size' field error detected");
101004 }
101005#endif /* FREECIV_DELTA_PROTOCOL */
101006
101008}
101009
101011{
101012 if (!pc->used) {
101013 log_error("WARNING: trying to send data to the closed connection %s",
101015 return -1;
101016 }
101017 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet != nullptr, -1,
101018 "Handler for PACKET_EDIT_PLAYER_VISION not installed");
101019 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet(pc, packet);
101020}
101021
101022int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
101023{
101024 struct packet_edit_player_vision packet, *real_packet = &packet;
101025
101027 real_packet->tile = tile;
101028 real_packet->known = known;
101029 real_packet->size = size;
101030
101032}
101033
101034static inline void init_packet_edit_game(struct packet_edit_game *packet)
101035{
101036 memset(packet, 0, sizeof(*packet));
101037}
101038
101039#define free_packet_edit_game(_packet) (void) 0
101040#define destroy_packet_edit_game free
101041
101042#ifdef FREECIV_DELTA_PROTOCOL
101043#define hash_packet_edit_game_100 hash_const
101044#define cmp_packet_edit_game_100 cmp_const
101046#endif /* FREECIV_DELTA_PROTOCOL */
101047
101049{
101050#define FREE_PACKET_STRUCT(_packet) free_packet_edit_game(_packet)
101052
101053#ifdef FREECIV_JSON_CONNECTION
101054 struct plocation field_addr;
101055 {
101056 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101059 }
101060#endif /* FREECIV_JSON_CONNECTION */
101061
101062 log_packet_detailed("packet_edit_game_100: got info about ()");
101063
101064#ifdef FREECIV_DELTA_PROTOCOL
101066 struct packet_edit_game *old;
101067 struct genhash **hash = pc->phs.received + PACKET_EDIT_GAME;
101068
101069 if (nullptr == *hash) {
101071 nullptr, nullptr, nullptr, destroy_packet_edit_game);
101072 }
101073
101074 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101075 *real_packet = *old;
101076 } else {
101077 /* packet is already initialized empty */
101078 log_packet_detailed(" no old info");
101079 }
101080
101081#ifdef FREECIV_JSON_CONNECTION
101082 field_addr.name = "fields";
101083#endif /* FREECIV_JSON_CONNECTION */
101084 DIO_BV_GET(&din, &field_addr, fields);
101085
101086 real_packet->scenario = BV_ISSET(fields, 0);
101087
101088 if (BV_ISSET(fields, 1)) {
101089 log_packet_detailed(" got field 'scenario_name'");
101090
101091#ifdef FREECIV_JSON_CONNECTION
101092 field_addr.name = "scenario_name";
101093#endif /* FREECIV_JSON_CONNECTION */
101094
101095 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
101096 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
101097 }
101098 }
101099
101100 if (BV_ISSET(fields, 2)) {
101101 log_packet_detailed(" got field 'scenario_authors'");
101102
101103#ifdef FREECIV_JSON_CONNECTION
101104 field_addr.name = "scenario_authors";
101105#endif /* FREECIV_JSON_CONNECTION */
101106
101107 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
101109 }
101110 }
101111
101112 real_packet->scenario_random = BV_ISSET(fields, 3);
101113
101114 real_packet->scenario_players = BV_ISSET(fields, 4);
101115
101116 real_packet->startpos_nations = BV_ISSET(fields, 5);
101117
101118 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
101119
101120 real_packet->lake_flooding = BV_ISSET(fields, 7);
101121
101122 real_packet->ruleset_locked = BV_ISSET(fields, 8);
101123
101124 if (nullptr == old) {
101125 old = fc_malloc(sizeof(*old));
101127 *old = *real_packet;
101129 } else {
101130 *old = *real_packet;
101131 }
101132
101133#else /* FREECIV_DELTA_PROTOCOL */
101134#ifdef FREECIV_JSON_CONNECTION
101135 field_addr.name = "scenario";
101136#endif /* FREECIV_JSON_CONNECTION */
101137
101138 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario)) {
101139 RECEIVE_PACKET_FIELD_ERROR(scenario);
101140 }
101141
101142#ifdef FREECIV_JSON_CONNECTION
101143 field_addr.name = "scenario_name";
101144#endif /* FREECIV_JSON_CONNECTION */
101145
101146 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
101147 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
101148 }
101149
101150#ifdef FREECIV_JSON_CONNECTION
101151 field_addr.name = "scenario_authors";
101152#endif /* FREECIV_JSON_CONNECTION */
101153
101154 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
101156 }
101157
101158#ifdef FREECIV_JSON_CONNECTION
101159 field_addr.name = "scenario_random";
101160#endif /* FREECIV_JSON_CONNECTION */
101161
101162 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_random)) {
101163 RECEIVE_PACKET_FIELD_ERROR(scenario_random);
101164 }
101165
101166#ifdef FREECIV_JSON_CONNECTION
101167 field_addr.name = "scenario_players";
101168#endif /* FREECIV_JSON_CONNECTION */
101169
101170 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_players)) {
101171 RECEIVE_PACKET_FIELD_ERROR(scenario_players);
101172 }
101173
101174#ifdef FREECIV_JSON_CONNECTION
101175 field_addr.name = "startpos_nations";
101176#endif /* FREECIV_JSON_CONNECTION */
101177
101178 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
101179 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
101180 }
101181
101182#ifdef FREECIV_JSON_CONNECTION
101183 field_addr.name = "prevent_new_cities";
101184#endif /* FREECIV_JSON_CONNECTION */
101185
101186 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
101187 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
101188 }
101189
101190#ifdef FREECIV_JSON_CONNECTION
101191 field_addr.name = "lake_flooding";
101192#endif /* FREECIV_JSON_CONNECTION */
101193
101194 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
101195 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
101196 }
101197
101198#ifdef FREECIV_JSON_CONNECTION
101199 field_addr.name = "ruleset_locked";
101200#endif /* FREECIV_JSON_CONNECTION */
101201
101202 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
101203 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
101204 }
101205#endif /* FREECIV_DELTA_PROTOCOL */
101206
101208#undef FREE_PACKET_STRUCT
101209}
101210
101211static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
101212{
101213 const struct packet_edit_game *real_packet = packet;
101214 int e;
101216
101217 log_packet_detailed("packet_edit_game_100: sending info about ()");
101218
101219#ifdef FREECIV_DELTA_PROTOCOL
101221 struct packet_edit_game *old;
101222 bool differ;
101223 struct genhash **hash = pc->phs.sent + PACKET_EDIT_GAME;
101224
101225 if (nullptr == *hash) {
101227 nullptr, nullptr, nullptr, destroy_packet_edit_game);
101228 }
101229 BV_CLR_ALL(fields);
101230
101231 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101232 old = fc_malloc(sizeof(*old));
101233 /* temporary bitcopy just to insert correctly */
101234 *old = *real_packet;
101237 }
101238
101239 /* folded into head */
101240 if (real_packet->scenario) {
101241 BV_SET(fields, 0);
101242 }
101243
101244 differ = (strcmp(old->scenario_name, real_packet->scenario_name) != 0);
101245 if (differ) {
101246 BV_SET(fields, 1);
101247 }
101248
101249 differ = (strcmp(old->scenario_authors, real_packet->scenario_authors) != 0);
101250 if (differ) {
101251 BV_SET(fields, 2);
101252 }
101253
101254 /* folded into head */
101255 if (real_packet->scenario_random) {
101256 BV_SET(fields, 3);
101257 }
101258
101259 /* folded into head */
101260 if (real_packet->scenario_players) {
101261 BV_SET(fields, 4);
101262 }
101263
101264 /* folded into head */
101265 if (real_packet->startpos_nations) {
101266 BV_SET(fields, 5);
101267 }
101268
101269 /* folded into head */
101270 if (real_packet->prevent_new_cities) {
101271 BV_SET(fields, 6);
101272 }
101273
101274 /* folded into head */
101275 if (real_packet->lake_flooding) {
101276 BV_SET(fields, 7);
101277 }
101278
101279 /* folded into head */
101280 if (real_packet->ruleset_locked) {
101281 BV_SET(fields, 8);
101282 }
101283#endif /* FREECIV_DELTA_PROTOCOL */
101284
101285#ifdef FREECIV_JSON_CONNECTION
101286 struct plocation field_addr;
101287 {
101288 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101291 }
101292#endif /* FREECIV_JSON_CONNECTION */
101293
101294#ifdef FREECIV_DELTA_PROTOCOL
101295#ifdef FREECIV_JSON_CONNECTION
101296 field_addr.name = "fields";
101297#endif /* FREECIV_JSON_CONNECTION */
101298 e = 0;
101299 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101300 if (e) {
101301 log_packet_detailed("fields bitvector error detected");
101302 }
101303
101304 /* field 0 is folded into the header */
101305
101306 if (BV_ISSET(fields, 1)) {
101307 log_packet_detailed(" field 'scenario_name' has changed");
101308
101309#ifdef FREECIV_JSON_CONNECTION
101310 field_addr.name = "scenario_name";
101311#endif /* FREECIV_JSON_CONNECTION */
101312 e = 0;
101313
101314 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
101315
101316 if (e) {
101317 log_packet_detailed("'scenario_name' field error detected");
101318 }
101319 }
101320
101321 if (BV_ISSET(fields, 2)) {
101322 log_packet_detailed(" field 'scenario_authors' has changed");
101323
101324#ifdef FREECIV_JSON_CONNECTION
101325 field_addr.name = "scenario_authors";
101326#endif /* FREECIV_JSON_CONNECTION */
101327 e = 0;
101328
101329 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
101330
101331 if (e) {
101332 log_packet_detailed("'scenario_authors' field error detected");
101333 }
101334 }
101335
101336 /* field 3 is folded into the header */
101337
101338 /* field 4 is folded into the header */
101339
101340 /* field 5 is folded into the header */
101341
101342 /* field 6 is folded into the header */
101343
101344 /* field 7 is folded into the header */
101345
101346 /* field 8 is folded into the header */
101347
101348 *old = *real_packet;
101349
101350#else /* FREECIV_DELTA_PROTOCOL */
101351#ifdef FREECIV_JSON_CONNECTION
101352 field_addr.name = "scenario";
101353#endif /* FREECIV_JSON_CONNECTION */
101354 e = 0;
101355
101356 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario);
101357
101358 if (e) {
101359 log_packet_detailed("'scenario' field error detected");
101360 }
101361
101362#ifdef FREECIV_JSON_CONNECTION
101363 field_addr.name = "scenario_name";
101364#endif /* FREECIV_JSON_CONNECTION */
101365 e = 0;
101366
101367 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
101368
101369 if (e) {
101370 log_packet_detailed("'scenario_name' field error detected");
101371 }
101372
101373#ifdef FREECIV_JSON_CONNECTION
101374 field_addr.name = "scenario_authors";
101375#endif /* FREECIV_JSON_CONNECTION */
101376 e = 0;
101377
101378 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
101379
101380 if (e) {
101381 log_packet_detailed("'scenario_authors' field error detected");
101382 }
101383
101384#ifdef FREECIV_JSON_CONNECTION
101385 field_addr.name = "scenario_random";
101386#endif /* FREECIV_JSON_CONNECTION */
101387 e = 0;
101388
101389 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_random);
101390
101391 if (e) {
101392 log_packet_detailed("'scenario_random' field error detected");
101393 }
101394
101395#ifdef FREECIV_JSON_CONNECTION
101396 field_addr.name = "scenario_players";
101397#endif /* FREECIV_JSON_CONNECTION */
101398 e = 0;
101399
101400 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_players);
101401
101402 if (e) {
101403 log_packet_detailed("'scenario_players' field error detected");
101404 }
101405
101406#ifdef FREECIV_JSON_CONNECTION
101407 field_addr.name = "startpos_nations";
101408#endif /* FREECIV_JSON_CONNECTION */
101409 e = 0;
101410
101411 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
101412
101413 if (e) {
101414 log_packet_detailed("'startpos_nations' field error detected");
101415 }
101416
101417#ifdef FREECIV_JSON_CONNECTION
101418 field_addr.name = "prevent_new_cities";
101419#endif /* FREECIV_JSON_CONNECTION */
101420 e = 0;
101421
101422 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
101423
101424 if (e) {
101425 log_packet_detailed("'prevent_new_cities' field error detected");
101426 }
101427
101428#ifdef FREECIV_JSON_CONNECTION
101429 field_addr.name = "lake_flooding";
101430#endif /* FREECIV_JSON_CONNECTION */
101431 e = 0;
101432
101433 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
101434
101435 if (e) {
101436 log_packet_detailed("'lake_flooding' field error detected");
101437 }
101438
101439#ifdef FREECIV_JSON_CONNECTION
101440 field_addr.name = "ruleset_locked";
101441#endif /* FREECIV_JSON_CONNECTION */
101442 e = 0;
101443
101444 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
101445
101446 if (e) {
101447 log_packet_detailed("'ruleset_locked' field error detected");
101448 }
101449#endif /* FREECIV_DELTA_PROTOCOL */
101450
101452}
101453
101454int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
101455{
101456 if (!pc->used) {
101457 log_error("WARNING: trying to send data to the closed connection %s",
101459 return -1;
101460 }
101461 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_GAME].packet != nullptr, -1,
101462 "Handler for PACKET_EDIT_GAME not installed");
101463 return pc->phs.handlers->send[PACKET_EDIT_GAME].packet(pc, packet);
101464}
101465
101467{
101468 memset(packet, 0, sizeof(*packet));
101469}
101470
101471#define free_packet_edit_scenario_desc(_packet) (void) 0
101472#define destroy_packet_edit_scenario_desc free
101473
101474#ifdef FREECIV_DELTA_PROTOCOL
101475#define hash_packet_edit_scenario_desc_100 hash_const
101476#define cmp_packet_edit_scenario_desc_100 cmp_const
101478#endif /* FREECIV_DELTA_PROTOCOL */
101479
101481{
101482#define FREE_PACKET_STRUCT(_packet) free_packet_edit_scenario_desc(_packet)
101484
101485#ifdef FREECIV_JSON_CONNECTION
101486 struct plocation field_addr;
101487 {
101488 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101491 }
101492#endif /* FREECIV_JSON_CONNECTION */
101493
101494 log_packet_detailed("packet_edit_scenario_desc_100: got info about ()");
101495
101496#ifdef FREECIV_DELTA_PROTOCOL
101499 struct genhash **hash = pc->phs.received + PACKET_EDIT_SCENARIO_DESC;
101500
101501 if (nullptr == *hash) {
101503 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
101504 }
101505
101506 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101507 *real_packet = *old;
101508 } else {
101509 /* packet is already initialized empty */
101510 log_packet_detailed(" no old info");
101511 }
101512
101513#ifdef FREECIV_JSON_CONNECTION
101514 field_addr.name = "fields";
101515#endif /* FREECIV_JSON_CONNECTION */
101516 DIO_BV_GET(&din, &field_addr, fields);
101517
101518 if (BV_ISSET(fields, 0)) {
101519 log_packet_detailed(" got field 'scenario_desc'");
101520
101521#ifdef FREECIV_JSON_CONNECTION
101522 field_addr.name = "scenario_desc";
101523#endif /* FREECIV_JSON_CONNECTION */
101524
101525 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
101526 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
101527 }
101528 }
101529
101530 if (nullptr == old) {
101531 old = fc_malloc(sizeof(*old));
101533 *old = *real_packet;
101535 } else {
101536 *old = *real_packet;
101537 }
101538
101539#else /* FREECIV_DELTA_PROTOCOL */
101540#ifdef FREECIV_JSON_CONNECTION
101541 field_addr.name = "scenario_desc";
101542#endif /* FREECIV_JSON_CONNECTION */
101543
101544 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
101545 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
101546 }
101547#endif /* FREECIV_DELTA_PROTOCOL */
101548
101550#undef FREE_PACKET_STRUCT
101551}
101552
101554{
101555 const struct packet_edit_scenario_desc *real_packet = packet;
101556 int e;
101558
101559 log_packet_detailed("packet_edit_scenario_desc_100: sending info about ()");
101560
101561#ifdef FREECIV_DELTA_PROTOCOL
101564 bool differ;
101565 struct genhash **hash = pc->phs.sent + PACKET_EDIT_SCENARIO_DESC;
101566
101567 if (nullptr == *hash) {
101569 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
101570 }
101571 BV_CLR_ALL(fields);
101572
101573 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101574 old = fc_malloc(sizeof(*old));
101575 /* temporary bitcopy just to insert correctly */
101576 *old = *real_packet;
101579 }
101580
101581 differ = (strcmp(old->scenario_desc, real_packet->scenario_desc) != 0);
101582 if (differ) {
101583 BV_SET(fields, 0);
101584 }
101585#endif /* FREECIV_DELTA_PROTOCOL */
101586
101587#ifdef FREECIV_JSON_CONNECTION
101588 struct plocation field_addr;
101589 {
101590 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101593 }
101594#endif /* FREECIV_JSON_CONNECTION */
101595
101596#ifdef FREECIV_DELTA_PROTOCOL
101597#ifdef FREECIV_JSON_CONNECTION
101598 field_addr.name = "fields";
101599#endif /* FREECIV_JSON_CONNECTION */
101600 e = 0;
101601 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101602 if (e) {
101603 log_packet_detailed("fields bitvector error detected");
101604 }
101605
101606 if (BV_ISSET(fields, 0)) {
101607 log_packet_detailed(" field 'scenario_desc' has changed");
101608
101609#ifdef FREECIV_JSON_CONNECTION
101610 field_addr.name = "scenario_desc";
101611#endif /* FREECIV_JSON_CONNECTION */
101612 e = 0;
101613
101614 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
101615
101616 if (e) {
101617 log_packet_detailed("'scenario_desc' field error detected");
101618 }
101619 }
101620
101621 *old = *real_packet;
101622
101623#else /* FREECIV_DELTA_PROTOCOL */
101624#ifdef FREECIV_JSON_CONNECTION
101625 field_addr.name = "scenario_desc";
101626#endif /* FREECIV_JSON_CONNECTION */
101627 e = 0;
101628
101629 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
101630
101631 if (e) {
101632 log_packet_detailed("'scenario_desc' field error detected");
101633 }
101634#endif /* FREECIV_DELTA_PROTOCOL */
101635
101637}
101638
101640{
101641 if (!pc->used) {
101642 log_error("WARNING: trying to send data to the closed connection %s",
101644 return -1;
101645 }
101646 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet != nullptr, -1,
101647 "Handler for PACKET_EDIT_SCENARIO_DESC not installed");
101648 return pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet(pc, packet);
101649}
101650
101652{
101653 memset(packet, 0, sizeof(*packet));
101654}
101655
101656#define free_packet_edit_object_created(_packet) (void) 0
101657#define destroy_packet_edit_object_created free
101658
101659#ifdef FREECIV_DELTA_PROTOCOL
101660#define hash_packet_edit_object_created_100 hash_const
101661#define cmp_packet_edit_object_created_100 cmp_const
101663#endif /* FREECIV_DELTA_PROTOCOL */
101664
101666{
101667#define FREE_PACKET_STRUCT(_packet) free_packet_edit_object_created(_packet)
101669
101670#ifdef FREECIV_JSON_CONNECTION
101671 struct plocation field_addr;
101672 {
101673 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101676 }
101677#endif /* FREECIV_JSON_CONNECTION */
101678
101679 log_packet_detailed("packet_edit_object_created_100: got info about ()");
101680
101681#ifdef FREECIV_DELTA_PROTOCOL
101684 struct genhash **hash = pc->phs.received + PACKET_EDIT_OBJECT_CREATED;
101685
101686 if (nullptr == *hash) {
101688 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
101689 }
101690
101691 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101692 *real_packet = *old;
101693 } else {
101694 /* packet is already initialized empty */
101695 log_packet_detailed(" no old info");
101696 }
101697
101698#ifdef FREECIV_JSON_CONNECTION
101699 field_addr.name = "fields";
101700#endif /* FREECIV_JSON_CONNECTION */
101701 DIO_BV_GET(&din, &field_addr, fields);
101702
101703 if (BV_ISSET(fields, 0)) {
101704 log_packet_detailed(" got field 'tag'");
101705
101706#ifdef FREECIV_JSON_CONNECTION
101707 field_addr.name = "tag";
101708#endif /* FREECIV_JSON_CONNECTION */
101709
101710 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
101712 }
101713 }
101714
101715 if (BV_ISSET(fields, 1)) {
101716 log_packet_detailed(" got field 'id'");
101717
101718#ifdef FREECIV_JSON_CONNECTION
101719 field_addr.name = "id";
101720#endif /* FREECIV_JSON_CONNECTION */
101721
101722 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
101724 }
101725 }
101726
101727 if (nullptr == old) {
101728 old = fc_malloc(sizeof(*old));
101730 *old = *real_packet;
101732 } else {
101733 *old = *real_packet;
101734 }
101735
101736#else /* FREECIV_DELTA_PROTOCOL */
101737#ifdef FREECIV_JSON_CONNECTION
101738 field_addr.name = "tag";
101739#endif /* FREECIV_JSON_CONNECTION */
101740
101741 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
101743 }
101744
101745#ifdef FREECIV_JSON_CONNECTION
101746 field_addr.name = "id";
101747#endif /* FREECIV_JSON_CONNECTION */
101748
101749 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
101751 }
101752#endif /* FREECIV_DELTA_PROTOCOL */
101753
101755#undef FREE_PACKET_STRUCT
101756}
101757
101759{
101760 const struct packet_edit_object_created *real_packet = packet;
101761 int e;
101763
101764 log_packet_detailed("packet_edit_object_created_100: sending info about ()");
101765
101766#ifdef FREECIV_DELTA_PROTOCOL
101769 bool differ;
101770 struct genhash **hash = pc->phs.sent + PACKET_EDIT_OBJECT_CREATED;
101771
101772 if (nullptr == *hash) {
101774 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
101775 }
101776 BV_CLR_ALL(fields);
101777
101778 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101779 old = fc_malloc(sizeof(*old));
101780 /* temporary bitcopy just to insert correctly */
101781 *old = *real_packet;
101784 }
101785
101786 differ = (old->tag != real_packet->tag);
101787 if (differ) {
101788 BV_SET(fields, 0);
101789 }
101790
101791 differ = (old->id != real_packet->id);
101792 if (differ) {
101793 BV_SET(fields, 1);
101794 }
101795#endif /* FREECIV_DELTA_PROTOCOL */
101796
101797#ifdef FREECIV_JSON_CONNECTION
101798 struct plocation field_addr;
101799 {
101800 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101803 }
101804#endif /* FREECIV_JSON_CONNECTION */
101805
101806#ifdef FREECIV_DELTA_PROTOCOL
101807#ifdef FREECIV_JSON_CONNECTION
101808 field_addr.name = "fields";
101809#endif /* FREECIV_JSON_CONNECTION */
101810 e = 0;
101811 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101812 if (e) {
101813 log_packet_detailed("fields bitvector error detected");
101814 }
101815
101816 if (BV_ISSET(fields, 0)) {
101817 log_packet_detailed(" field 'tag' has changed");
101818
101819#ifdef FREECIV_JSON_CONNECTION
101820 field_addr.name = "tag";
101821#endif /* FREECIV_JSON_CONNECTION */
101822 e = 0;
101823
101824 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
101825
101826 if (e) {
101827 log_packet_detailed("'tag' field error detected");
101828 }
101829 }
101830
101831 if (BV_ISSET(fields, 1)) {
101832 log_packet_detailed(" field 'id' has changed");
101833
101834#ifdef FREECIV_JSON_CONNECTION
101835 field_addr.name = "id";
101836#endif /* FREECIV_JSON_CONNECTION */
101837 e = 0;
101838
101839 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
101840
101841 if (e) {
101842 log_packet_detailed("'id' field error detected");
101843 }
101844 }
101845
101846 *old = *real_packet;
101847
101848#else /* FREECIV_DELTA_PROTOCOL */
101849#ifdef FREECIV_JSON_CONNECTION
101850 field_addr.name = "tag";
101851#endif /* FREECIV_JSON_CONNECTION */
101852 e = 0;
101853
101854 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
101855
101856 if (e) {
101857 log_packet_detailed("'tag' field error detected");
101858 }
101859
101860#ifdef FREECIV_JSON_CONNECTION
101861 field_addr.name = "id";
101862#endif /* FREECIV_JSON_CONNECTION */
101863 e = 0;
101864
101865 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
101866
101867 if (e) {
101868 log_packet_detailed("'id' field error detected");
101869 }
101870#endif /* FREECIV_DELTA_PROTOCOL */
101871
101873}
101874
101876{
101877 if (!pc->used) {
101878 log_error("WARNING: trying to send data to the closed connection %s",
101880 return -1;
101881 }
101882 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet != nullptr, -1,
101883 "Handler for PACKET_EDIT_OBJECT_CREATED not installed");
101884 return pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet(pc, packet);
101885}
101886
101888{
101889 struct packet_edit_object_created packet, *real_packet = &packet;
101890
101891 real_packet->tag = tag;
101892 real_packet->id = id;
101893
101895}
101896
101897static inline void init_packet_play_music(struct packet_play_music *packet)
101898{
101899 memset(packet, 0, sizeof(*packet));
101900}
101901
101902#define free_packet_play_music(_packet) (void) 0
101903#define destroy_packet_play_music free
101904
101905#ifdef FREECIV_DELTA_PROTOCOL
101906#define hash_packet_play_music_100 hash_const
101907#define cmp_packet_play_music_100 cmp_const
101909#endif /* FREECIV_DELTA_PROTOCOL */
101910
101912{
101913#define FREE_PACKET_STRUCT(_packet) free_packet_play_music(_packet)
101915
101916#ifdef FREECIV_JSON_CONNECTION
101917 struct plocation field_addr;
101918 {
101919 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101922 }
101923#endif /* FREECIV_JSON_CONNECTION */
101924
101925 log_packet_detailed("packet_play_music_100: got info about ()");
101926
101927#ifdef FREECIV_DELTA_PROTOCOL
101929 struct packet_play_music *old;
101930 struct genhash **hash = pc->phs.received + PACKET_PLAY_MUSIC;
101931
101932 if (nullptr == *hash) {
101934 nullptr, nullptr, nullptr, destroy_packet_play_music);
101935 }
101936
101937 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101938 *real_packet = *old;
101939 } else {
101940 /* packet is already initialized empty */
101941 log_packet_detailed(" no old info");
101942 }
101943
101944#ifdef FREECIV_JSON_CONNECTION
101945 field_addr.name = "fields";
101946#endif /* FREECIV_JSON_CONNECTION */
101947 DIO_BV_GET(&din, &field_addr, fields);
101948
101949 if (BV_ISSET(fields, 0)) {
101950 log_packet_detailed(" got field 'tag'");
101951
101952#ifdef FREECIV_JSON_CONNECTION
101953 field_addr.name = "tag";
101954#endif /* FREECIV_JSON_CONNECTION */
101955
101956 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101958 }
101959 }
101960
101961 if (nullptr == old) {
101962 old = fc_malloc(sizeof(*old));
101964 *old = *real_packet;
101966 } else {
101967 *old = *real_packet;
101968 }
101969
101970#else /* FREECIV_DELTA_PROTOCOL */
101971#ifdef FREECIV_JSON_CONNECTION
101972 field_addr.name = "tag";
101973#endif /* FREECIV_JSON_CONNECTION */
101974
101975 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101977 }
101978#endif /* FREECIV_DELTA_PROTOCOL */
101979
101981#undef FREE_PACKET_STRUCT
101982}
101983
101984static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
101985{
101986 const struct packet_play_music *real_packet = packet;
101987 int e;
101989
101990 log_packet_detailed("packet_play_music_100: sending info about ()");
101991
101992#ifdef FREECIV_DELTA_PROTOCOL
101994 struct packet_play_music *old;
101995 bool differ;
101996 struct genhash **hash = pc->phs.sent + PACKET_PLAY_MUSIC;
101997
101998 if (nullptr == *hash) {
102000 nullptr, nullptr, nullptr, destroy_packet_play_music);
102001 }
102002 BV_CLR_ALL(fields);
102003
102004 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102005 old = fc_malloc(sizeof(*old));
102006 /* temporary bitcopy just to insert correctly */
102007 *old = *real_packet;
102010 }
102011
102012 differ = (strcmp(old->tag, real_packet->tag) != 0);
102013 if (differ) {
102014 BV_SET(fields, 0);
102015 }
102016#endif /* FREECIV_DELTA_PROTOCOL */
102017
102018#ifdef FREECIV_JSON_CONNECTION
102019 struct plocation field_addr;
102020 {
102021 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102024 }
102025#endif /* FREECIV_JSON_CONNECTION */
102026
102027#ifdef FREECIV_DELTA_PROTOCOL
102028#ifdef FREECIV_JSON_CONNECTION
102029 field_addr.name = "fields";
102030#endif /* FREECIV_JSON_CONNECTION */
102031 e = 0;
102032 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102033 if (e) {
102034 log_packet_detailed("fields bitvector error detected");
102035 }
102036
102037 if (BV_ISSET(fields, 0)) {
102038 log_packet_detailed(" field 'tag' has changed");
102039
102040#ifdef FREECIV_JSON_CONNECTION
102041 field_addr.name = "tag";
102042#endif /* FREECIV_JSON_CONNECTION */
102043 e = 0;
102044
102045 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
102046
102047 if (e) {
102048 log_packet_detailed("'tag' field error detected");
102049 }
102050 }
102051
102052 *old = *real_packet;
102053
102054#else /* FREECIV_DELTA_PROTOCOL */
102055#ifdef FREECIV_JSON_CONNECTION
102056 field_addr.name = "tag";
102057#endif /* FREECIV_JSON_CONNECTION */
102058 e = 0;
102059
102060 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
102061
102062 if (e) {
102063 log_packet_detailed("'tag' field error detected");
102064 }
102065#endif /* FREECIV_DELTA_PROTOCOL */
102066
102068}
102069
102070int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
102071{
102072 if (!pc->used) {
102073 log_error("WARNING: trying to send data to the closed connection %s",
102075 return -1;
102076 }
102077 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet != nullptr, -1,
102078 "Handler for PACKET_PLAY_MUSIC not installed");
102079 return pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet(pc, packet);
102080}
102081
102082void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
102083{
102084 conn_list_iterate(dest, pconn) {
102085 send_packet_play_music(pconn, packet);
102087}
102088
102089static inline void init_packet_popup_image(struct packet_popup_image *packet)
102090{
102091 memset(packet, 0, sizeof(*packet));
102092}
102093
102094#define free_packet_popup_image(_packet) (void) 0
102095#define destroy_packet_popup_image free
102096
102097#ifdef FREECIV_DELTA_PROTOCOL
102098#define hash_packet_popup_image_100 hash_const
102099#define cmp_packet_popup_image_100 cmp_const
102101#endif /* FREECIV_DELTA_PROTOCOL */
102102
102104{
102105#define FREE_PACKET_STRUCT(_packet) free_packet_popup_image(_packet)
102107
102108#ifdef FREECIV_JSON_CONNECTION
102109 struct plocation field_addr;
102110 {
102111 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102114 }
102115#endif /* FREECIV_JSON_CONNECTION */
102116
102117 log_packet_detailed("packet_popup_image_100: got info about ()");
102118
102119#ifdef FREECIV_DELTA_PROTOCOL
102121 struct packet_popup_image *old;
102122 struct genhash **hash = pc->phs.received + PACKET_POPUP_IMAGE;
102123
102124 if (nullptr == *hash) {
102126 nullptr, nullptr, nullptr, destroy_packet_popup_image);
102127 }
102128
102129 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102130 *real_packet = *old;
102131 } else {
102132 /* packet is already initialized empty */
102133 log_packet_detailed(" no old info");
102134 }
102135
102136#ifdef FREECIV_JSON_CONNECTION
102137 field_addr.name = "fields";
102138#endif /* FREECIV_JSON_CONNECTION */
102139 DIO_BV_GET(&din, &field_addr, fields);
102140
102141 if (BV_ISSET(fields, 0)) {
102142 log_packet_detailed(" got field 'tag'");
102143
102144#ifdef FREECIV_JSON_CONNECTION
102145 field_addr.name = "tag";
102146#endif /* FREECIV_JSON_CONNECTION */
102147
102148 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
102150 }
102151 }
102152
102153 if (nullptr == old) {
102154 old = fc_malloc(sizeof(*old));
102156 *old = *real_packet;
102158 } else {
102159 *old = *real_packet;
102160 }
102161
102162#else /* FREECIV_DELTA_PROTOCOL */
102163#ifdef FREECIV_JSON_CONNECTION
102164 field_addr.name = "tag";
102165#endif /* FREECIV_JSON_CONNECTION */
102166
102167 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
102169 }
102170#endif /* FREECIV_DELTA_PROTOCOL */
102171
102173#undef FREE_PACKET_STRUCT
102174}
102175
102176static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
102177{
102178 const struct packet_popup_image *real_packet = packet;
102179 int e;
102181
102182 log_packet_detailed("packet_popup_image_100: sending info about ()");
102183
102184#ifdef FREECIV_DELTA_PROTOCOL
102186 struct packet_popup_image *old;
102187 bool differ;
102188 struct genhash **hash = pc->phs.sent + PACKET_POPUP_IMAGE;
102189
102190 if (nullptr == *hash) {
102192 nullptr, nullptr, nullptr, destroy_packet_popup_image);
102193 }
102194 BV_CLR_ALL(fields);
102195
102196 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102197 old = fc_malloc(sizeof(*old));
102198 /* temporary bitcopy just to insert correctly */
102199 *old = *real_packet;
102202 }
102203
102204 differ = (strcmp(old->tag, real_packet->tag) != 0);
102205 if (differ) {
102206 BV_SET(fields, 0);
102207 }
102208#endif /* FREECIV_DELTA_PROTOCOL */
102209
102210#ifdef FREECIV_JSON_CONNECTION
102211 struct plocation field_addr;
102212 {
102213 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102216 }
102217#endif /* FREECIV_JSON_CONNECTION */
102218
102219#ifdef FREECIV_DELTA_PROTOCOL
102220#ifdef FREECIV_JSON_CONNECTION
102221 field_addr.name = "fields";
102222#endif /* FREECIV_JSON_CONNECTION */
102223 e = 0;
102224 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102225 if (e) {
102226 log_packet_detailed("fields bitvector error detected");
102227 }
102228
102229 if (BV_ISSET(fields, 0)) {
102230 log_packet_detailed(" field 'tag' has changed");
102231
102232#ifdef FREECIV_JSON_CONNECTION
102233 field_addr.name = "tag";
102234#endif /* FREECIV_JSON_CONNECTION */
102235 e = 0;
102236
102237 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
102238
102239 if (e) {
102240 log_packet_detailed("'tag' field error detected");
102241 }
102242 }
102243
102244 *old = *real_packet;
102245
102246#else /* FREECIV_DELTA_PROTOCOL */
102247#ifdef FREECIV_JSON_CONNECTION
102248 field_addr.name = "tag";
102249#endif /* FREECIV_JSON_CONNECTION */
102250 e = 0;
102251
102252 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
102253
102254 if (e) {
102255 log_packet_detailed("'tag' field error detected");
102256 }
102257#endif /* FREECIV_DELTA_PROTOCOL */
102258
102260}
102261
102263{
102264 if (!pc->used) {
102265 log_error("WARNING: trying to send data to the closed connection %s",
102267 return -1;
102268 }
102269 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet != nullptr, -1,
102270 "Handler for PACKET_POPUP_IMAGE not installed");
102271 return pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet(pc, packet);
102272}
102273
102274void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
102275{
102276 conn_list_iterate(dest, pconn) {
102279}
102280
102281static inline void init_packet_sync_serial(struct packet_sync_serial *packet)
102282{
102283 memset(packet, 0, sizeof(*packet));
102284}
102285
102286#define free_packet_sync_serial(_packet) (void) 0
102287#define destroy_packet_sync_serial free
102288
102289#ifdef FREECIV_DELTA_PROTOCOL
102290#define hash_packet_sync_serial_100 hash_const
102291#define cmp_packet_sync_serial_100 cmp_const
102293#endif /* FREECIV_DELTA_PROTOCOL */
102294
102296{
102297#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial(_packet)
102299
102300#ifdef FREECIV_JSON_CONNECTION
102301 struct plocation field_addr;
102302 {
102303 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102306 }
102307#endif /* FREECIV_JSON_CONNECTION */
102308
102309 log_packet_detailed("packet_sync_serial_100: got info about ()");
102310
102311#ifdef FREECIV_DELTA_PROTOCOL
102313 struct packet_sync_serial *old;
102314 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL;
102315
102316 if (nullptr == *hash) {
102318 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
102319 }
102320
102321 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102322 *real_packet = *old;
102323 } else {
102324 /* packet is already initialized empty */
102325 log_packet_detailed(" no old info");
102326 }
102327
102328#ifdef FREECIV_JSON_CONNECTION
102329 field_addr.name = "fields";
102330#endif /* FREECIV_JSON_CONNECTION */
102331 DIO_BV_GET(&din, &field_addr, fields);
102332
102333 if (BV_ISSET(fields, 0)) {
102334 log_packet_detailed(" got field 'serial'");
102335
102336#ifdef FREECIV_JSON_CONNECTION
102337 field_addr.name = "serial";
102338#endif /* FREECIV_JSON_CONNECTION */
102339
102340 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
102342 }
102343 }
102344
102345 if (nullptr == old) {
102346 old = fc_malloc(sizeof(*old));
102348 *old = *real_packet;
102350 } else {
102351 *old = *real_packet;
102352 }
102353
102354#else /* FREECIV_DELTA_PROTOCOL */
102355#ifdef FREECIV_JSON_CONNECTION
102356 field_addr.name = "serial";
102357#endif /* FREECIV_JSON_CONNECTION */
102358
102359 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
102361 }
102362#endif /* FREECIV_DELTA_PROTOCOL */
102363
102365#undef FREE_PACKET_STRUCT
102366}
102367
102368static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
102369{
102370 const struct packet_sync_serial *real_packet = packet;
102371 int e;
102373
102374 log_packet_detailed("packet_sync_serial_100: sending info about ()");
102375
102376#ifdef FREECIV_DELTA_PROTOCOL
102378 struct packet_sync_serial *old;
102379 bool differ;
102380 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL;
102381
102382 if (nullptr == *hash) {
102384 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
102385 }
102386 BV_CLR_ALL(fields);
102387
102388 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102389 old = fc_malloc(sizeof(*old));
102390 /* temporary bitcopy just to insert correctly */
102391 *old = *real_packet;
102394 }
102395
102396 differ = (old->serial != real_packet->serial);
102397 if (differ) {
102398 BV_SET(fields, 0);
102399 }
102400#endif /* FREECIV_DELTA_PROTOCOL */
102401
102402#ifdef FREECIV_JSON_CONNECTION
102403 struct plocation field_addr;
102404 {
102405 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102408 }
102409#endif /* FREECIV_JSON_CONNECTION */
102410
102411#ifdef FREECIV_DELTA_PROTOCOL
102412#ifdef FREECIV_JSON_CONNECTION
102413 field_addr.name = "fields";
102414#endif /* FREECIV_JSON_CONNECTION */
102415 e = 0;
102416 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102417 if (e) {
102418 log_packet_detailed("fields bitvector error detected");
102419 }
102420
102421 if (BV_ISSET(fields, 0)) {
102422 log_packet_detailed(" field 'serial' has changed");
102423
102424#ifdef FREECIV_JSON_CONNECTION
102425 field_addr.name = "serial";
102426#endif /* FREECIV_JSON_CONNECTION */
102427 e = 0;
102428
102429 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
102430
102431 if (e) {
102432 log_packet_detailed("'serial' field error detected");
102433 }
102434 }
102435
102436 *old = *real_packet;
102437
102438#else /* FREECIV_DELTA_PROTOCOL */
102439#ifdef FREECIV_JSON_CONNECTION
102440 field_addr.name = "serial";
102441#endif /* FREECIV_JSON_CONNECTION */
102442 e = 0;
102443
102444 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
102445
102446 if (e) {
102447 log_packet_detailed("'serial' field error detected");
102448 }
102449#endif /* FREECIV_DELTA_PROTOCOL */
102450
102452}
102453
102455{
102456 if (!pc->used) {
102457 log_error("WARNING: trying to send data to the closed connection %s",
102459 return -1;
102460 }
102461 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet != nullptr, -1,
102462 "Handler for PACKET_SYNC_SERIAL not installed");
102463 return pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet(pc, packet);
102464}
102465
102467{
102468 struct packet_sync_serial packet, *real_packet = &packet;
102469
102471
102473}
102474
102476{
102477 memset(packet, 0, sizeof(*packet));
102478}
102479
102480#define free_packet_sync_serial_reply(_packet) (void) 0
102481#define destroy_packet_sync_serial_reply free
102482
102483#ifdef FREECIV_DELTA_PROTOCOL
102484#define hash_packet_sync_serial_reply_100 hash_const
102485#define cmp_packet_sync_serial_reply_100 cmp_const
102487#endif /* FREECIV_DELTA_PROTOCOL */
102488
102490{
102491#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial_reply(_packet)
102493
102494#ifdef FREECIV_JSON_CONNECTION
102495 struct plocation field_addr;
102496 {
102497 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102500 }
102501#endif /* FREECIV_JSON_CONNECTION */
102502
102503 log_packet_detailed("packet_sync_serial_reply_100: got info about ()");
102504
102505#ifdef FREECIV_DELTA_PROTOCOL
102508 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL_REPLY;
102509
102510 if (nullptr == *hash) {
102512 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
102513 }
102514
102515 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102516 *real_packet = *old;
102517 } else {
102518 /* packet is already initialized empty */
102519 log_packet_detailed(" no old info");
102520 }
102521
102522#ifdef FREECIV_JSON_CONNECTION
102523 field_addr.name = "fields";
102524#endif /* FREECIV_JSON_CONNECTION */
102525 DIO_BV_GET(&din, &field_addr, fields);
102526
102527 if (BV_ISSET(fields, 0)) {
102528 log_packet_detailed(" got field 'serial'");
102529
102530#ifdef FREECIV_JSON_CONNECTION
102531 field_addr.name = "serial";
102532#endif /* FREECIV_JSON_CONNECTION */
102533
102534 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
102536 }
102537 }
102538
102539 if (nullptr == old) {
102540 old = fc_malloc(sizeof(*old));
102542 *old = *real_packet;
102544 } else {
102545 *old = *real_packet;
102546 }
102547
102548#else /* FREECIV_DELTA_PROTOCOL */
102549#ifdef FREECIV_JSON_CONNECTION
102550 field_addr.name = "serial";
102551#endif /* FREECIV_JSON_CONNECTION */
102552
102553 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
102555 }
102556#endif /* FREECIV_DELTA_PROTOCOL */
102557
102559#undef FREE_PACKET_STRUCT
102560}
102561
102563{
102564 const struct packet_sync_serial_reply *real_packet = packet;
102565 int e;
102567
102568 log_packet_detailed("packet_sync_serial_reply_100: sending info about ()");
102569
102570#ifdef FREECIV_DELTA_PROTOCOL
102573 bool differ;
102574 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL_REPLY;
102575
102576 if (nullptr == *hash) {
102578 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
102579 }
102580 BV_CLR_ALL(fields);
102581
102582 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102583 old = fc_malloc(sizeof(*old));
102584 /* temporary bitcopy just to insert correctly */
102585 *old = *real_packet;
102588 }
102589
102590 differ = (old->serial != real_packet->serial);
102591 if (differ) {
102592 BV_SET(fields, 0);
102593 }
102594#endif /* FREECIV_DELTA_PROTOCOL */
102595
102596#ifdef FREECIV_JSON_CONNECTION
102597 struct plocation field_addr;
102598 {
102599 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102602 }
102603#endif /* FREECIV_JSON_CONNECTION */
102604
102605#ifdef FREECIV_DELTA_PROTOCOL
102606#ifdef FREECIV_JSON_CONNECTION
102607 field_addr.name = "fields";
102608#endif /* FREECIV_JSON_CONNECTION */
102609 e = 0;
102610 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102611 if (e) {
102612 log_packet_detailed("fields bitvector error detected");
102613 }
102614
102615 if (BV_ISSET(fields, 0)) {
102616 log_packet_detailed(" field 'serial' has changed");
102617
102618#ifdef FREECIV_JSON_CONNECTION
102619 field_addr.name = "serial";
102620#endif /* FREECIV_JSON_CONNECTION */
102621 e = 0;
102622
102623 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
102624
102625 if (e) {
102626 log_packet_detailed("'serial' field error detected");
102627 }
102628 }
102629
102630 *old = *real_packet;
102631
102632#else /* FREECIV_DELTA_PROTOCOL */
102633#ifdef FREECIV_JSON_CONNECTION
102634 field_addr.name = "serial";
102635#endif /* FREECIV_JSON_CONNECTION */
102636 e = 0;
102637
102638 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
102639
102640 if (e) {
102641 log_packet_detailed("'serial' field error detected");
102642 }
102643#endif /* FREECIV_DELTA_PROTOCOL */
102644
102646}
102647
102649{
102650 if (!pc->used) {
102651 log_error("WARNING: trying to send data to the closed connection %s",
102653 return -1;
102654 }
102655 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet != nullptr, -1,
102656 "Handler for PACKET_SYNC_SERIAL_REPLY not installed");
102657 return pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet(pc, packet);
102658}
102659
102661{
102662 struct packet_sync_serial_reply packet, *real_packet = &packet;
102663
102665
102667}
102668
102670{
102671 memset(packet, 0, sizeof(*packet));
102672}
102673
102674#define free_packet_web_city_info_addition(_packet) (void) 0
102675#define destroy_packet_web_city_info_addition free
102676
102677#ifdef FREECIV_DELTA_PROTOCOL
102679{
102680 const struct packet_web_city_info_addition *key = (const struct packet_web_city_info_addition *) vkey;
102681 genhash_val_t result = 0;
102682
102683 result += key->id;
102684
102685 result &= 0xFFFFFFFF;
102686 return result;
102687}
102688
102689static bool cmp_packet_web_city_info_addition_100(const void *vkey1, const void *vkey2)
102690{
102691 const struct packet_web_city_info_addition *old = (const struct packet_web_city_info_addition *) vkey1;
102693 bool differ;
102694
102695 differ = (old->id != real_packet->id);
102696
102697 return !differ;
102698}
102700#endif /* FREECIV_DELTA_PROTOCOL */
102701
102703{
102704#define FREE_PACKET_STRUCT(_packet) free_packet_web_city_info_addition(_packet)
102706
102707#ifdef FREECIV_JSON_CONNECTION
102708 struct plocation field_addr;
102709 {
102710 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102713 }
102714#endif /* FREECIV_JSON_CONNECTION */
102715
102716#ifdef FREECIV_JSON_CONNECTION
102717 field_addr.name = "id";
102718#endif /* FREECIV_JSON_CONNECTION */
102719
102720 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
102722 }
102723
102724 log_packet_detailed("packet_web_city_info_addition_100: got info about (%d)",
102725 real_packet->id);
102726
102727#ifdef FREECIV_DELTA_PROTOCOL
102730 struct genhash **hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
102731
102732 if (nullptr == *hash) {
102734 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
102735 }
102736
102737 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102738 *real_packet = *old;
102739 } else {
102740 /* packet is already initialized empty */
102741 log_packet_detailed(" no old info");
102742 }
102743
102744#ifdef FREECIV_JSON_CONNECTION
102745 field_addr.name = "fields";
102746#endif /* FREECIV_JSON_CONNECTION */
102747 DIO_BV_GET(&din, &field_addr, fields);
102748
102749 real_packet->cma_enabled = BV_ISSET(fields, 0);
102750
102751 if (BV_ISSET(fields, 1)) {
102752 log_packet_detailed(" got field 'cm_parameter'");
102753
102754#ifdef FREECIV_JSON_CONNECTION
102755 field_addr.name = "cm_parameter";
102756#endif /* FREECIV_JSON_CONNECTION */
102757
102758 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102760 }
102761 }
102762
102763 if (BV_ISSET(fields, 2)) {
102764 log_packet_detailed(" got field 'granary_size'");
102765
102766#ifdef FREECIV_JSON_CONNECTION
102767 field_addr.name = "granary_size";
102768#endif /* FREECIV_JSON_CONNECTION */
102769
102770 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
102771 RECEIVE_PACKET_FIELD_ERROR(granary_size);
102772 }
102773 }
102774
102775 if (BV_ISSET(fields, 3)) {
102776 log_packet_detailed(" got field 'granary_turns'");
102777
102778#ifdef FREECIV_JSON_CONNECTION
102779 field_addr.name = "granary_turns";
102780#endif /* FREECIV_JSON_CONNECTION */
102781
102782 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
102783 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
102784 }
102785 }
102786
102787 if (BV_ISSET(fields, 4)) {
102788 log_packet_detailed(" got field 'can_build_unit'");
102789
102790#ifdef FREECIV_JSON_CONNECTION
102791 field_addr.name = "can_build_unit";
102792#endif /* FREECIV_JSON_CONNECTION */
102793
102794 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
102795 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
102796 }
102797 }
102798
102799 if (BV_ISSET(fields, 5)) {
102800 log_packet_detailed(" got field 'can_build_improvement'");
102801
102802#ifdef FREECIV_JSON_CONNECTION
102803 field_addr.name = "can_build_improvement";
102804#endif /* FREECIV_JSON_CONNECTION */
102805
102806 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
102807 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
102808 }
102809 }
102810
102811 if (BV_ISSET(fields, 6)) {
102812 log_packet_detailed(" got field 'output_food'");
102813
102814#ifdef FREECIV_JSON_CONNECTION
102815 field_addr.name = "output_food";
102816#endif /* FREECIV_JSON_CONNECTION */
102817
102818 {
102819 int i;
102820
102821
102822#ifdef FREECIV_JSON_CONNECTION
102823 /* Enter array. */
102824 field_addr.sub_location = plocation_elem_new(0);
102825#endif /* FREECIV_JSON_CONNECTION */
102826
102827 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102828#ifdef FREECIV_JSON_CONNECTION
102829 /* Next array element */
102830 field_addr.sub_location->number = i;
102831#endif /* FREECIV_JSON_CONNECTION */
102832
102833 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
102834 RECEIVE_PACKET_FIELD_ERROR(output_food);
102835 }
102836 }
102837
102838#ifdef FREECIV_JSON_CONNECTION
102839 /* Exit array. */
102840 FC_FREE(field_addr.sub_location);
102841#endif /* FREECIV_JSON_CONNECTION */
102842 }
102843 }
102844
102845 if (BV_ISSET(fields, 7)) {
102846 log_packet_detailed(" got field 'output_shield'");
102847
102848#ifdef FREECIV_JSON_CONNECTION
102849 field_addr.name = "output_shield";
102850#endif /* FREECIV_JSON_CONNECTION */
102851
102852 {
102853 int i;
102854
102855
102856#ifdef FREECIV_JSON_CONNECTION
102857 /* Enter array. */
102858 field_addr.sub_location = plocation_elem_new(0);
102859#endif /* FREECIV_JSON_CONNECTION */
102860
102861 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102862#ifdef FREECIV_JSON_CONNECTION
102863 /* Next array element */
102864 field_addr.sub_location->number = i;
102865#endif /* FREECIV_JSON_CONNECTION */
102866
102867 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
102868 RECEIVE_PACKET_FIELD_ERROR(output_shield);
102869 }
102870 }
102871
102872#ifdef FREECIV_JSON_CONNECTION
102873 /* Exit array. */
102874 FC_FREE(field_addr.sub_location);
102875#endif /* FREECIV_JSON_CONNECTION */
102876 }
102877 }
102878
102879 if (BV_ISSET(fields, 8)) {
102880 log_packet_detailed(" got field 'output_trade'");
102881
102882#ifdef FREECIV_JSON_CONNECTION
102883 field_addr.name = "output_trade";
102884#endif /* FREECIV_JSON_CONNECTION */
102885
102886 {
102887 int i;
102888
102889
102890#ifdef FREECIV_JSON_CONNECTION
102891 /* Enter array. */
102892 field_addr.sub_location = plocation_elem_new(0);
102893#endif /* FREECIV_JSON_CONNECTION */
102894
102895 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102896#ifdef FREECIV_JSON_CONNECTION
102897 /* Next array element */
102898 field_addr.sub_location->number = i;
102899#endif /* FREECIV_JSON_CONNECTION */
102900
102901 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
102902 RECEIVE_PACKET_FIELD_ERROR(output_trade);
102903 }
102904 }
102905
102906#ifdef FREECIV_JSON_CONNECTION
102907 /* Exit array. */
102908 FC_FREE(field_addr.sub_location);
102909#endif /* FREECIV_JSON_CONNECTION */
102910 }
102911 }
102912
102913 if (nullptr == old) {
102914 old = fc_malloc(sizeof(*old));
102916 *old = *real_packet;
102918 } else {
102919 *old = *real_packet;
102920 }
102921
102922 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
102923 if (nullptr != *hash) {
102925 }
102926
102927#else /* FREECIV_DELTA_PROTOCOL */
102928#ifdef FREECIV_JSON_CONNECTION
102929 field_addr.name = "cma_enabled";
102930#endif /* FREECIV_JSON_CONNECTION */
102931
102932 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->cma_enabled)) {
102933 RECEIVE_PACKET_FIELD_ERROR(cma_enabled);
102934 }
102935
102936#ifdef FREECIV_JSON_CONNECTION
102937 field_addr.name = "cm_parameter";
102938#endif /* FREECIV_JSON_CONNECTION */
102939
102940 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102942 }
102943
102944#ifdef FREECIV_JSON_CONNECTION
102945 field_addr.name = "granary_size";
102946#endif /* FREECIV_JSON_CONNECTION */
102947
102948 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
102949 RECEIVE_PACKET_FIELD_ERROR(granary_size);
102950 }
102951
102952#ifdef FREECIV_JSON_CONNECTION
102953 field_addr.name = "granary_turns";
102954#endif /* FREECIV_JSON_CONNECTION */
102955
102956 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
102957 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
102958 }
102959
102960#ifdef FREECIV_JSON_CONNECTION
102961 field_addr.name = "can_build_unit";
102962#endif /* FREECIV_JSON_CONNECTION */
102963
102964 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
102965 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
102966 }
102967
102968#ifdef FREECIV_JSON_CONNECTION
102969 field_addr.name = "can_build_improvement";
102970#endif /* FREECIV_JSON_CONNECTION */
102971
102972 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
102973 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
102974 }
102975
102976#ifdef FREECIV_JSON_CONNECTION
102977 field_addr.name = "output_food";
102978#endif /* FREECIV_JSON_CONNECTION */
102979
102980 {
102981 int i;
102982
102983
102984#ifdef FREECIV_JSON_CONNECTION
102985 /* Enter array. */
102986 field_addr.sub_location = plocation_elem_new(0);
102987#endif /* FREECIV_JSON_CONNECTION */
102988
102989 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102990#ifdef FREECIV_JSON_CONNECTION
102991 /* Next array element */
102992 field_addr.sub_location->number = i;
102993#endif /* FREECIV_JSON_CONNECTION */
102994
102995 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
102996 RECEIVE_PACKET_FIELD_ERROR(output_food);
102997 }
102998 }
102999
103000#ifdef FREECIV_JSON_CONNECTION
103001 /* Exit array. */
103002 FC_FREE(field_addr.sub_location);
103003#endif /* FREECIV_JSON_CONNECTION */
103004 }
103005
103006#ifdef FREECIV_JSON_CONNECTION
103007 field_addr.name = "output_shield";
103008#endif /* FREECIV_JSON_CONNECTION */
103009
103010 {
103011 int i;
103012
103013
103014#ifdef FREECIV_JSON_CONNECTION
103015 /* Enter array. */
103016 field_addr.sub_location = plocation_elem_new(0);
103017#endif /* FREECIV_JSON_CONNECTION */
103018
103019 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103020#ifdef FREECIV_JSON_CONNECTION
103021 /* Next array element */
103022 field_addr.sub_location->number = i;
103023#endif /* FREECIV_JSON_CONNECTION */
103024
103025 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
103026 RECEIVE_PACKET_FIELD_ERROR(output_shield);
103027 }
103028 }
103029
103030#ifdef FREECIV_JSON_CONNECTION
103031 /* Exit array. */
103032 FC_FREE(field_addr.sub_location);
103033#endif /* FREECIV_JSON_CONNECTION */
103034 }
103035
103036#ifdef FREECIV_JSON_CONNECTION
103037 field_addr.name = "output_trade";
103038#endif /* FREECIV_JSON_CONNECTION */
103039
103040 {
103041 int i;
103042
103043
103044#ifdef FREECIV_JSON_CONNECTION
103045 /* Enter array. */
103046 field_addr.sub_location = plocation_elem_new(0);
103047#endif /* FREECIV_JSON_CONNECTION */
103048
103049 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103050#ifdef FREECIV_JSON_CONNECTION
103051 /* Next array element */
103052 field_addr.sub_location->number = i;
103053#endif /* FREECIV_JSON_CONNECTION */
103054
103055 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
103056 RECEIVE_PACKET_FIELD_ERROR(output_trade);
103057 }
103058 }
103059
103060#ifdef FREECIV_JSON_CONNECTION
103061 /* Exit array. */
103062 FC_FREE(field_addr.sub_location);
103063#endif /* FREECIV_JSON_CONNECTION */
103064 }
103065#endif /* FREECIV_DELTA_PROTOCOL */
103066
103068#undef FREE_PACKET_STRUCT
103069}
103070
103071static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
103072{
103073 const struct packet_web_city_info_addition *real_packet = packet;
103074 int e;
103076
103077 log_packet_detailed("packet_web_city_info_addition_100: sending info about (%d)",
103078 real_packet->id);
103079
103080#ifdef FREECIV_DELTA_PROTOCOL
103083 bool differ;
103084 int different = force_to_send;
103085 struct genhash **hash = pc->phs.sent + PACKET_WEB_CITY_INFO_ADDITION;
103086
103087 if (nullptr == *hash) {
103089 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
103090 }
103091 BV_CLR_ALL(fields);
103092
103093 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103094 old = fc_malloc(sizeof(*old));
103095 /* temporary bitcopy just to insert correctly */
103096 *old = *real_packet;
103099 different = 1; /* Force to send. */
103100 }
103101
103102 differ = (old->cma_enabled != real_packet->cma_enabled);
103103 if (differ) {
103104 different++;
103105 }
103106 /* folded into head */
103107 if (real_packet->cma_enabled) {
103108 BV_SET(fields, 0);
103109 }
103110
103111 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
103112 if (differ) {
103113 different++;
103114 BV_SET(fields, 1);
103115 }
103116
103117 differ = (old->granary_size != real_packet->granary_size);
103118 if (differ) {
103119 different++;
103120 BV_SET(fields, 2);
103121 }
103122
103123 differ = (old->granary_turns != real_packet->granary_turns);
103124 if (differ) {
103125 different++;
103126 BV_SET(fields, 3);
103127 }
103128
103129 differ = !BV_ARE_EQUAL(old->can_build_unit, real_packet->can_build_unit);
103130 if (differ) {
103131 different++;
103132 BV_SET(fields, 4);
103133 }
103134
103135 differ = !BV_ARE_EQUAL(old->can_build_improvement, real_packet->can_build_improvement);
103136 if (differ) {
103137 different++;
103138 BV_SET(fields, 5);
103139 }
103140
103141 differ = FALSE;
103142 {
103143 int i;
103144
103145 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103146 differ = (old->output_food[i] != real_packet->output_food[i]);
103147 if (differ) {
103148 break;
103149 }
103150 }
103151 }
103152 if (differ) {
103153 different++;
103154 BV_SET(fields, 6);
103155 }
103156
103157 differ = FALSE;
103158 {
103159 int i;
103160
103161 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103162 differ = (old->output_shield[i] != real_packet->output_shield[i]);
103163 if (differ) {
103164 break;
103165 }
103166 }
103167 }
103168 if (differ) {
103169 different++;
103170 BV_SET(fields, 7);
103171 }
103172
103173 differ = FALSE;
103174 {
103175 int i;
103176
103177 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103178 differ = (old->output_trade[i] != real_packet->output_trade[i]);
103179 if (differ) {
103180 break;
103181 }
103182 }
103183 }
103184 if (differ) {
103185 different++;
103186 BV_SET(fields, 8);
103187 }
103188
103189 if (different == 0) {
103190 log_packet_detailed(" no change -> discard");
103192 }
103193#endif /* FREECIV_DELTA_PROTOCOL */
103194
103195#ifdef FREECIV_JSON_CONNECTION
103196 struct plocation field_addr;
103197 {
103198 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103201 }
103202#endif /* FREECIV_JSON_CONNECTION */
103203
103204#ifdef FREECIV_JSON_CONNECTION
103205 field_addr.name = "id";
103206#endif /* FREECIV_JSON_CONNECTION */
103207 e = 0;
103208
103209 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103210
103211 if (e) {
103212 log_packet_detailed("'id' field error detected");
103213 }
103214
103215#ifdef FREECIV_DELTA_PROTOCOL
103216#ifdef FREECIV_JSON_CONNECTION
103217 field_addr.name = "fields";
103218#endif /* FREECIV_JSON_CONNECTION */
103219 e = 0;
103220 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103221 if (e) {
103222 log_packet_detailed("fields bitvector error detected");
103223 }
103224
103225 /* field 0 is folded into the header */
103226
103227 if (BV_ISSET(fields, 1)) {
103228 log_packet_detailed(" field 'cm_parameter' has changed");
103229
103230#ifdef FREECIV_JSON_CONNECTION
103231 field_addr.name = "cm_parameter";
103232#endif /* FREECIV_JSON_CONNECTION */
103233 e = 0;
103234
103235 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
103236
103237 if (e) {
103238 log_packet_detailed("'cm_parameter' field error detected");
103239 }
103240 }
103241
103242 if (BV_ISSET(fields, 2)) {
103243 log_packet_detailed(" field 'granary_size' has changed");
103244
103245#ifdef FREECIV_JSON_CONNECTION
103246 field_addr.name = "granary_size";
103247#endif /* FREECIV_JSON_CONNECTION */
103248 e = 0;
103249
103250 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
103251
103252 if (e) {
103253 log_packet_detailed("'granary_size' field error detected");
103254 }
103255 }
103256
103257 if (BV_ISSET(fields, 3)) {
103258 log_packet_detailed(" field 'granary_turns' has changed");
103259
103260#ifdef FREECIV_JSON_CONNECTION
103261 field_addr.name = "granary_turns";
103262#endif /* FREECIV_JSON_CONNECTION */
103263 e = 0;
103264
103265 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
103266
103267 if (e) {
103268 log_packet_detailed("'granary_turns' field error detected");
103269 }
103270 }
103271
103272 if (BV_ISSET(fields, 4)) {
103273 log_packet_detailed(" field 'can_build_unit' has changed");
103274
103275#ifdef FREECIV_JSON_CONNECTION
103276 field_addr.name = "can_build_unit";
103277#endif /* FREECIV_JSON_CONNECTION */
103278 e = 0;
103279
103280 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
103281
103282 if (e) {
103283 log_packet_detailed("'can_build_unit' field error detected");
103284 }
103285 }
103286
103287 if (BV_ISSET(fields, 5)) {
103288 log_packet_detailed(" field 'can_build_improvement' has changed");
103289
103290#ifdef FREECIV_JSON_CONNECTION
103291 field_addr.name = "can_build_improvement";
103292#endif /* FREECIV_JSON_CONNECTION */
103293 e = 0;
103294
103295 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
103296
103297 if (e) {
103298 log_packet_detailed("'can_build_improvement' field error detected");
103299 }
103300 }
103301
103302 if (BV_ISSET(fields, 6)) {
103303 log_packet_detailed(" field 'output_food' has changed");
103304
103305#ifdef FREECIV_JSON_CONNECTION
103306 field_addr.name = "output_food";
103307#endif /* FREECIV_JSON_CONNECTION */
103308 e = 0;
103309
103310 {
103311 int i;
103312
103313#ifdef FREECIV_JSON_CONNECTION
103314 /* Create the array. */
103316
103317 /* Enter array. */
103318 field_addr.sub_location = plocation_elem_new(0);
103319#endif /* FREECIV_JSON_CONNECTION */
103320
103321 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103322#ifdef FREECIV_JSON_CONNECTION
103323 /* Next array element. */
103324 field_addr.sub_location->number = i;
103325#endif /* FREECIV_JSON_CONNECTION */
103326
103327 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
103328 }
103329
103330#ifdef FREECIV_JSON_CONNECTION
103331 /* Exit array. */
103332 FC_FREE(field_addr.sub_location);
103333#endif /* FREECIV_JSON_CONNECTION */
103334 }
103335
103336 if (e) {
103337 log_packet_detailed("'output_food' field error detected");
103338 }
103339 }
103340
103341 if (BV_ISSET(fields, 7)) {
103342 log_packet_detailed(" field 'output_shield' has changed");
103343
103344#ifdef FREECIV_JSON_CONNECTION
103345 field_addr.name = "output_shield";
103346#endif /* FREECIV_JSON_CONNECTION */
103347 e = 0;
103348
103349 {
103350 int i;
103351
103352#ifdef FREECIV_JSON_CONNECTION
103353 /* Create the array. */
103355
103356 /* Enter array. */
103357 field_addr.sub_location = plocation_elem_new(0);
103358#endif /* FREECIV_JSON_CONNECTION */
103359
103360 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103361#ifdef FREECIV_JSON_CONNECTION
103362 /* Next array element. */
103363 field_addr.sub_location->number = i;
103364#endif /* FREECIV_JSON_CONNECTION */
103365
103366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
103367 }
103368
103369#ifdef FREECIV_JSON_CONNECTION
103370 /* Exit array. */
103371 FC_FREE(field_addr.sub_location);
103372#endif /* FREECIV_JSON_CONNECTION */
103373 }
103374
103375 if (e) {
103376 log_packet_detailed("'output_shield' field error detected");
103377 }
103378 }
103379
103380 if (BV_ISSET(fields, 8)) {
103381 log_packet_detailed(" field 'output_trade' has changed");
103382
103383#ifdef FREECIV_JSON_CONNECTION
103384 field_addr.name = "output_trade";
103385#endif /* FREECIV_JSON_CONNECTION */
103386 e = 0;
103387
103388 {
103389 int i;
103390
103391#ifdef FREECIV_JSON_CONNECTION
103392 /* Create the array. */
103394
103395 /* Enter array. */
103396 field_addr.sub_location = plocation_elem_new(0);
103397#endif /* FREECIV_JSON_CONNECTION */
103398
103399 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103400#ifdef FREECIV_JSON_CONNECTION
103401 /* Next array element. */
103402 field_addr.sub_location->number = i;
103403#endif /* FREECIV_JSON_CONNECTION */
103404
103405 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
103406 }
103407
103408#ifdef FREECIV_JSON_CONNECTION
103409 /* Exit array. */
103410 FC_FREE(field_addr.sub_location);
103411#endif /* FREECIV_JSON_CONNECTION */
103412 }
103413
103414 if (e) {
103415 log_packet_detailed("'output_trade' field error detected");
103416 }
103417 }
103418
103419 *old = *real_packet;
103420
103421 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
103422 if (nullptr != *hash) {
103424 }
103425
103426#else /* FREECIV_DELTA_PROTOCOL */
103427#ifdef FREECIV_JSON_CONNECTION
103428 field_addr.name = "cma_enabled";
103429#endif /* FREECIV_JSON_CONNECTION */
103430 e = 0;
103431
103432 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->cma_enabled);
103433
103434 if (e) {
103435 log_packet_detailed("'cma_enabled' field error detected");
103436 }
103437
103438#ifdef FREECIV_JSON_CONNECTION
103439 field_addr.name = "cm_parameter";
103440#endif /* FREECIV_JSON_CONNECTION */
103441 e = 0;
103442
103443 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
103444
103445 if (e) {
103446 log_packet_detailed("'cm_parameter' field error detected");
103447 }
103448
103449#ifdef FREECIV_JSON_CONNECTION
103450 field_addr.name = "granary_size";
103451#endif /* FREECIV_JSON_CONNECTION */
103452 e = 0;
103453
103454 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
103455
103456 if (e) {
103457 log_packet_detailed("'granary_size' field error detected");
103458 }
103459
103460#ifdef FREECIV_JSON_CONNECTION
103461 field_addr.name = "granary_turns";
103462#endif /* FREECIV_JSON_CONNECTION */
103463 e = 0;
103464
103465 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
103466
103467 if (e) {
103468 log_packet_detailed("'granary_turns' field error detected");
103469 }
103470
103471#ifdef FREECIV_JSON_CONNECTION
103472 field_addr.name = "can_build_unit";
103473#endif /* FREECIV_JSON_CONNECTION */
103474 e = 0;
103475
103476 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
103477
103478 if (e) {
103479 log_packet_detailed("'can_build_unit' field error detected");
103480 }
103481
103482#ifdef FREECIV_JSON_CONNECTION
103483 field_addr.name = "can_build_improvement";
103484#endif /* FREECIV_JSON_CONNECTION */
103485 e = 0;
103486
103487 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
103488
103489 if (e) {
103490 log_packet_detailed("'can_build_improvement' field error detected");
103491 }
103492
103493#ifdef FREECIV_JSON_CONNECTION
103494 field_addr.name = "output_food";
103495#endif /* FREECIV_JSON_CONNECTION */
103496 e = 0;
103497
103498 {
103499 int i;
103500
103501#ifdef FREECIV_JSON_CONNECTION
103502 /* Create the array. */
103504
103505 /* Enter array. */
103506 field_addr.sub_location = plocation_elem_new(0);
103507#endif /* FREECIV_JSON_CONNECTION */
103508
103509 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103510#ifdef FREECIV_JSON_CONNECTION
103511 /* Next array element. */
103512 field_addr.sub_location->number = i;
103513#endif /* FREECIV_JSON_CONNECTION */
103514
103515 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
103516 }
103517
103518#ifdef FREECIV_JSON_CONNECTION
103519 /* Exit array. */
103520 FC_FREE(field_addr.sub_location);
103521#endif /* FREECIV_JSON_CONNECTION */
103522 }
103523
103524 if (e) {
103525 log_packet_detailed("'output_food' field error detected");
103526 }
103527
103528#ifdef FREECIV_JSON_CONNECTION
103529 field_addr.name = "output_shield";
103530#endif /* FREECIV_JSON_CONNECTION */
103531 e = 0;
103532
103533 {
103534 int i;
103535
103536#ifdef FREECIV_JSON_CONNECTION
103537 /* Create the array. */
103539
103540 /* Enter array. */
103541 field_addr.sub_location = plocation_elem_new(0);
103542#endif /* FREECIV_JSON_CONNECTION */
103543
103544 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103545#ifdef FREECIV_JSON_CONNECTION
103546 /* Next array element. */
103547 field_addr.sub_location->number = i;
103548#endif /* FREECIV_JSON_CONNECTION */
103549
103550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
103551 }
103552
103553#ifdef FREECIV_JSON_CONNECTION
103554 /* Exit array. */
103555 FC_FREE(field_addr.sub_location);
103556#endif /* FREECIV_JSON_CONNECTION */
103557 }
103558
103559 if (e) {
103560 log_packet_detailed("'output_shield' field error detected");
103561 }
103562
103563#ifdef FREECIV_JSON_CONNECTION
103564 field_addr.name = "output_trade";
103565#endif /* FREECIV_JSON_CONNECTION */
103566 e = 0;
103567
103568 {
103569 int i;
103570
103571#ifdef FREECIV_JSON_CONNECTION
103572 /* Create the array. */
103574
103575 /* Enter array. */
103576 field_addr.sub_location = plocation_elem_new(0);
103577#endif /* FREECIV_JSON_CONNECTION */
103578
103579 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
103580#ifdef FREECIV_JSON_CONNECTION
103581 /* Next array element. */
103582 field_addr.sub_location->number = i;
103583#endif /* FREECIV_JSON_CONNECTION */
103584
103585 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
103586 }
103587
103588#ifdef FREECIV_JSON_CONNECTION
103589 /* Exit array. */
103590 FC_FREE(field_addr.sub_location);
103591#endif /* FREECIV_JSON_CONNECTION */
103592 }
103593
103594 if (e) {
103595 log_packet_detailed("'output_trade' field error detected");
103596 }
103597#endif /* FREECIV_DELTA_PROTOCOL */
103598
103600}
103601
103602int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
103603{
103604 if (!pc->used) {
103605 log_error("WARNING: trying to send data to the closed connection %s",
103607 return -1;
103608 }
103609 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send != nullptr, -1,
103610 "Handler for PACKET_WEB_CITY_INFO_ADDITION not installed");
103611 return pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send(pc, packet, force_to_send);
103612}
103613
103614void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
103615{
103616 conn_list_iterate(dest, pconn) {
103617 send_packet_web_city_info_addition(pconn, packet, force_to_send);
103619}
103620
103621static inline void init_packet_web_cma_set(struct packet_web_cma_set *packet)
103622{
103623 memset(packet, 0, sizeof(*packet));
103624}
103625
103626#define free_packet_web_cma_set(_packet) (void) 0
103627#define destroy_packet_web_cma_set free
103628
103629#ifdef FREECIV_DELTA_PROTOCOL
103631{
103632 const struct packet_web_cma_set *key = (const struct packet_web_cma_set *) vkey;
103633 genhash_val_t result = 0;
103634
103635 result += key->id;
103636
103637 result &= 0xFFFFFFFF;
103638 return result;
103639}
103640
103641static bool cmp_packet_web_cma_set_100(const void *vkey1, const void *vkey2)
103642{
103643 const struct packet_web_cma_set *old = (const struct packet_web_cma_set *) vkey1;
103644 const struct packet_web_cma_set *real_packet = (const struct packet_web_cma_set *) vkey2;
103645 bool differ;
103646
103647 differ = (old->id != real_packet->id);
103648
103649 return !differ;
103650}
103652#endif /* FREECIV_DELTA_PROTOCOL */
103653
103655{
103656#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_set(_packet)
103658
103659#ifdef FREECIV_JSON_CONNECTION
103660 struct plocation field_addr;
103661 {
103662 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103665 }
103666#endif /* FREECIV_JSON_CONNECTION */
103667
103668#ifdef FREECIV_JSON_CONNECTION
103669 field_addr.name = "id";
103670#endif /* FREECIV_JSON_CONNECTION */
103671
103672 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103674 }
103675
103676 log_packet_detailed("packet_web_cma_set_100: got info about (%d)",
103677 real_packet->id);
103678
103679#ifdef FREECIV_DELTA_PROTOCOL
103681 struct packet_web_cma_set *old;
103682 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_SET;
103683
103684 if (nullptr == *hash) {
103686 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
103687 }
103688
103689 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103690 *real_packet = *old;
103691 } else {
103692 /* packet is already initialized empty */
103693 log_packet_detailed(" no old info");
103694 }
103695
103696#ifdef FREECIV_JSON_CONNECTION
103697 field_addr.name = "fields";
103698#endif /* FREECIV_JSON_CONNECTION */
103699 DIO_BV_GET(&din, &field_addr, fields);
103700
103701 if (BV_ISSET(fields, 0)) {
103702 log_packet_detailed(" got field 'cm_parameter'");
103703
103704#ifdef FREECIV_JSON_CONNECTION
103705 field_addr.name = "cm_parameter";
103706#endif /* FREECIV_JSON_CONNECTION */
103707
103708 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
103710 }
103711 }
103712
103713 if (nullptr == old) {
103714 old = fc_malloc(sizeof(*old));
103716 *old = *real_packet;
103718 } else {
103719 *old = *real_packet;
103720 }
103721
103722#else /* FREECIV_DELTA_PROTOCOL */
103723#ifdef FREECIV_JSON_CONNECTION
103724 field_addr.name = "cm_parameter";
103725#endif /* FREECIV_JSON_CONNECTION */
103726
103727 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
103729 }
103730#endif /* FREECIV_DELTA_PROTOCOL */
103731
103733#undef FREE_PACKET_STRUCT
103734}
103735
103736static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
103737{
103738 const struct packet_web_cma_set *real_packet = packet;
103739 int e;
103741
103742 log_packet_detailed("packet_web_cma_set_100: sending info about (%d)",
103743 real_packet->id);
103744
103745#ifdef FREECIV_DELTA_PROTOCOL
103747 struct packet_web_cma_set *old;
103748 bool differ;
103749 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_SET;
103750
103751 if (nullptr == *hash) {
103753 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
103754 }
103755 BV_CLR_ALL(fields);
103756
103757 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103758 old = fc_malloc(sizeof(*old));
103759 /* temporary bitcopy just to insert correctly */
103760 *old = *real_packet;
103763 }
103764
103765 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
103766 if (differ) {
103767 BV_SET(fields, 0);
103768 }
103769#endif /* FREECIV_DELTA_PROTOCOL */
103770
103771#ifdef FREECIV_JSON_CONNECTION
103772 struct plocation field_addr;
103773 {
103774 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103777 }
103778#endif /* FREECIV_JSON_CONNECTION */
103779
103780#ifdef FREECIV_JSON_CONNECTION
103781 field_addr.name = "id";
103782#endif /* FREECIV_JSON_CONNECTION */
103783 e = 0;
103784
103785 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103786
103787 if (e) {
103788 log_packet_detailed("'id' field error detected");
103789 }
103790
103791#ifdef FREECIV_DELTA_PROTOCOL
103792#ifdef FREECIV_JSON_CONNECTION
103793 field_addr.name = "fields";
103794#endif /* FREECIV_JSON_CONNECTION */
103795 e = 0;
103796 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103797 if (e) {
103798 log_packet_detailed("fields bitvector error detected");
103799 }
103800
103801 if (BV_ISSET(fields, 0)) {
103802 log_packet_detailed(" field 'cm_parameter' has changed");
103803
103804#ifdef FREECIV_JSON_CONNECTION
103805 field_addr.name = "cm_parameter";
103806#endif /* FREECIV_JSON_CONNECTION */
103807 e = 0;
103808
103809 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
103810
103811 if (e) {
103812 log_packet_detailed("'cm_parameter' field error detected");
103813 }
103814 }
103815
103816 *old = *real_packet;
103817
103818#else /* FREECIV_DELTA_PROTOCOL */
103819#ifdef FREECIV_JSON_CONNECTION
103820 field_addr.name = "cm_parameter";
103821#endif /* FREECIV_JSON_CONNECTION */
103822 e = 0;
103823
103824 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
103825
103826 if (e) {
103827 log_packet_detailed("'cm_parameter' field error detected");
103828 }
103829#endif /* FREECIV_DELTA_PROTOCOL */
103830
103832}
103833
103835{
103836 if (!pc->used) {
103837 log_error("WARNING: trying to send data to the closed connection %s",
103839 return -1;
103840 }
103841 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet != nullptr, -1,
103842 "Handler for PACKET_WEB_CMA_SET not installed");
103843 return pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet(pc, packet);
103844}
103845
103846static inline void init_packet_web_cma_clear(struct packet_web_cma_clear *packet)
103847{
103848 memset(packet, 0, sizeof(*packet));
103849}
103850
103851#define free_packet_web_cma_clear(_packet) (void) 0
103852#define destroy_packet_web_cma_clear free
103853
103854#ifdef FREECIV_DELTA_PROTOCOL
103855#define hash_packet_web_cma_clear_100 hash_const
103856#define cmp_packet_web_cma_clear_100 cmp_const
103858#endif /* FREECIV_DELTA_PROTOCOL */
103859
103861{
103862#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_clear(_packet)
103864
103865#ifdef FREECIV_JSON_CONNECTION
103866 struct plocation field_addr;
103867 {
103868 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103871 }
103872#endif /* FREECIV_JSON_CONNECTION */
103873
103874 log_packet_detailed("packet_web_cma_clear_100: got info about ()");
103875
103876#ifdef FREECIV_DELTA_PROTOCOL
103878 struct packet_web_cma_clear *old;
103879 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_CLEAR;
103880
103881 if (nullptr == *hash) {
103883 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
103884 }
103885
103886 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103887 *real_packet = *old;
103888 } else {
103889 /* packet is already initialized empty */
103890 log_packet_detailed(" no old info");
103891 }
103892
103893#ifdef FREECIV_JSON_CONNECTION
103894 field_addr.name = "fields";
103895#endif /* FREECIV_JSON_CONNECTION */
103896 DIO_BV_GET(&din, &field_addr, fields);
103897
103898 if (BV_ISSET(fields, 0)) {
103899 log_packet_detailed(" got field 'id'");
103900
103901#ifdef FREECIV_JSON_CONNECTION
103902 field_addr.name = "id";
103903#endif /* FREECIV_JSON_CONNECTION */
103904
103905 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103907 }
103908 }
103909
103910 if (nullptr == old) {
103911 old = fc_malloc(sizeof(*old));
103913 *old = *real_packet;
103915 } else {
103916 *old = *real_packet;
103917 }
103918
103919#else /* FREECIV_DELTA_PROTOCOL */
103920#ifdef FREECIV_JSON_CONNECTION
103921 field_addr.name = "id";
103922#endif /* FREECIV_JSON_CONNECTION */
103923
103924 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103926 }
103927#endif /* FREECIV_DELTA_PROTOCOL */
103928
103930#undef FREE_PACKET_STRUCT
103931}
103932
103933static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
103934{
103935 const struct packet_web_cma_clear *real_packet = packet;
103936 int e;
103938
103939 log_packet_detailed("packet_web_cma_clear_100: sending info about ()");
103940
103941#ifdef FREECIV_DELTA_PROTOCOL
103943 struct packet_web_cma_clear *old;
103944 bool differ;
103945 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_CLEAR;
103946
103947 if (nullptr == *hash) {
103949 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
103950 }
103951 BV_CLR_ALL(fields);
103952
103953 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103954 old = fc_malloc(sizeof(*old));
103955 /* temporary bitcopy just to insert correctly */
103956 *old = *real_packet;
103959 }
103960
103961 differ = (old->id != real_packet->id);
103962 if (differ) {
103963 BV_SET(fields, 0);
103964 }
103965#endif /* FREECIV_DELTA_PROTOCOL */
103966
103967#ifdef FREECIV_JSON_CONNECTION
103968 struct plocation field_addr;
103969 {
103970 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103973 }
103974#endif /* FREECIV_JSON_CONNECTION */
103975
103976#ifdef FREECIV_DELTA_PROTOCOL
103977#ifdef FREECIV_JSON_CONNECTION
103978 field_addr.name = "fields";
103979#endif /* FREECIV_JSON_CONNECTION */
103980 e = 0;
103981 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103982 if (e) {
103983 log_packet_detailed("fields bitvector error detected");
103984 }
103985
103986 if (BV_ISSET(fields, 0)) {
103987 log_packet_detailed(" field 'id' has changed");
103988
103989#ifdef FREECIV_JSON_CONNECTION
103990 field_addr.name = "id";
103991#endif /* FREECIV_JSON_CONNECTION */
103992 e = 0;
103993
103994 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103995
103996 if (e) {
103997 log_packet_detailed("'id' field error detected");
103998 }
103999 }
104000
104001 *old = *real_packet;
104002
104003#else /* FREECIV_DELTA_PROTOCOL */
104004#ifdef FREECIV_JSON_CONNECTION
104005 field_addr.name = "id";
104006#endif /* FREECIV_JSON_CONNECTION */
104007 e = 0;
104008
104009 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
104010
104011 if (e) {
104012 log_packet_detailed("'id' field error detected");
104013 }
104014#endif /* FREECIV_DELTA_PROTOCOL */
104015
104017}
104018
104020{
104021 if (!pc->used) {
104022 log_error("WARNING: trying to send data to the closed connection %s",
104024 return -1;
104025 }
104026 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet != nullptr, -1,
104027 "Handler for PACKET_WEB_CMA_CLEAR not installed");
104028 return pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet(pc, packet);
104029}
104030
104032{
104033 memset(packet, 0, sizeof(*packet));
104034}
104035
104036#define free_packet_web_player_info_addition(_packet) (void) 0
104037#define destroy_packet_web_player_info_addition free
104038
104039#ifdef FREECIV_DELTA_PROTOCOL
104041{
104042 const struct packet_web_player_info_addition *key = (const struct packet_web_player_info_addition *) vkey;
104043 genhash_val_t result = 0;
104044
104045 result += key->playerno;
104046
104047 result &= 0xFFFFFFFF;
104048 return result;
104049}
104050
104051static bool cmp_packet_web_player_info_addition_100(const void *vkey1, const void *vkey2)
104052{
104055 bool differ;
104056
104057 differ = (old->playerno != real_packet->playerno);
104058
104059 return !differ;
104060}
104062#endif /* FREECIV_DELTA_PROTOCOL */
104063
104065{
104066#define FREE_PACKET_STRUCT(_packet) free_packet_web_player_info_addition(_packet)
104068
104069#ifdef FREECIV_JSON_CONNECTION
104070 struct plocation field_addr;
104071 {
104072 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
104075 }
104076#endif /* FREECIV_JSON_CONNECTION */
104077
104078#ifdef FREECIV_JSON_CONNECTION
104079 field_addr.name = "playerno";
104080#endif /* FREECIV_JSON_CONNECTION */
104081
104082 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
104083 RECEIVE_PACKET_FIELD_ERROR(playerno);
104084 }
104085
104086 log_packet_detailed("packet_web_player_info_addition_100: got info about (%d)",
104087 real_packet->playerno);
104088
104089#ifdef FREECIV_DELTA_PROTOCOL
104092 struct genhash **hash = pc->phs.received + PACKET_WEB_PLAYER_INFO_ADDITION;
104093
104094 if (nullptr == *hash) {
104096 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
104097 }
104098
104099 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
104100 *real_packet = *old;
104101 } else {
104102 /* packet is already initialized empty */
104103 log_packet_detailed(" no old info");
104104 }
104105
104106#ifdef FREECIV_JSON_CONNECTION
104107 field_addr.name = "fields";
104108#endif /* FREECIV_JSON_CONNECTION */
104109 DIO_BV_GET(&din, &field_addr, fields);
104110
104111 if (BV_ISSET(fields, 0)) {
104112 log_packet_detailed(" got field 'expected_income'");
104113
104114#ifdef FREECIV_JSON_CONNECTION
104115 field_addr.name = "expected_income";
104116#endif /* FREECIV_JSON_CONNECTION */
104117
104118 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
104119 RECEIVE_PACKET_FIELD_ERROR(expected_income);
104120 }
104121 }
104122
104123 if (nullptr == old) {
104124 old = fc_malloc(sizeof(*old));
104126 *old = *real_packet;
104128 } else {
104129 *old = *real_packet;
104130 }
104131
104132#else /* FREECIV_DELTA_PROTOCOL */
104133#ifdef FREECIV_JSON_CONNECTION
104134 field_addr.name = "expected_income";
104135#endif /* FREECIV_JSON_CONNECTION */
104136
104137 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
104138 RECEIVE_PACKET_FIELD_ERROR(expected_income);
104139 }
104140#endif /* FREECIV_DELTA_PROTOCOL */
104141
104143#undef FREE_PACKET_STRUCT
104144}
104145
104147{
104148 const struct packet_web_player_info_addition *real_packet = packet;
104149 int e;
104151
104152 log_packet_detailed("packet_web_player_info_addition_100: sending info about (%d)",
104153 real_packet->playerno);
104154
104155#ifdef FREECIV_DELTA_PROTOCOL
104158 bool differ;
104159 int different = 0;
104160 struct genhash **hash = pc->phs.sent + PACKET_WEB_PLAYER_INFO_ADDITION;
104161
104162 if (nullptr == *hash) {
104164 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
104165 }
104166 BV_CLR_ALL(fields);
104167
104168 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
104169 old = fc_malloc(sizeof(*old));
104170 /* temporary bitcopy just to insert correctly */
104171 *old = *real_packet;
104174 different = 1; /* Force to send. */
104175 }
104176
104177 differ = (old->expected_income != real_packet->expected_income);
104178 if (differ) {
104179 different++;
104180 BV_SET(fields, 0);
104181 }
104182
104183 if (different == 0) {
104184 log_packet_detailed(" no change -> discard");
104186 }
104187#endif /* FREECIV_DELTA_PROTOCOL */
104188
104189#ifdef FREECIV_JSON_CONNECTION
104190 struct plocation field_addr;
104191 {
104192 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
104195 }
104196#endif /* FREECIV_JSON_CONNECTION */
104197
104198#ifdef FREECIV_JSON_CONNECTION
104199 field_addr.name = "playerno";
104200#endif /* FREECIV_JSON_CONNECTION */
104201 e = 0;
104202
104203 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
104204
104205 if (e) {
104206 log_packet_detailed("'playerno' field error detected");
104207 }
104208
104209#ifdef FREECIV_DELTA_PROTOCOL
104210#ifdef FREECIV_JSON_CONNECTION
104211 field_addr.name = "fields";
104212#endif /* FREECIV_JSON_CONNECTION */
104213 e = 0;
104214 e |= DIO_BV_PUT(&dout, &field_addr, fields);
104215 if (e) {
104216 log_packet_detailed("fields bitvector error detected");
104217 }
104218
104219 if (BV_ISSET(fields, 0)) {
104220 log_packet_detailed(" field 'expected_income' has changed");
104221
104222#ifdef FREECIV_JSON_CONNECTION
104223 field_addr.name = "expected_income";
104224#endif /* FREECIV_JSON_CONNECTION */
104225 e = 0;
104226
104227 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
104228
104229 if (e) {
104230 log_packet_detailed("'expected_income' field error detected");
104231 }
104232 }
104233
104234 *old = *real_packet;
104235
104236#else /* FREECIV_DELTA_PROTOCOL */
104237#ifdef FREECIV_JSON_CONNECTION
104238 field_addr.name = "expected_income";
104239#endif /* FREECIV_JSON_CONNECTION */
104240 e = 0;
104241
104242 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
104243
104244 if (e) {
104245 log_packet_detailed("'expected_income' field error detected");
104246 }
104247#endif /* FREECIV_DELTA_PROTOCOL */
104248
104250}
104251
104253{
104254 if (!pc->used) {
104255 log_error("WARNING: trying to send data to the closed connection %s",
104257 return -1;
104258 }
104259 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet != nullptr, -1,
104260 "Handler for PACKET_WEB_PLAYER_INFO_ADDITION not installed");
104261 return pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet(pc, packet);
104262}
104263
104265{
104266 memset(packet, 0, sizeof(*packet));
104267}
104268
104269#define free_packet_web_ruleset_unit_addition(_packet) (void) 0
104270#define destroy_packet_web_ruleset_unit_addition free
104271
104272#ifdef FREECIV_DELTA_PROTOCOL
104274{
104275 const struct packet_web_ruleset_unit_addition *key = (const struct packet_web_ruleset_unit_addition *) vkey;
104276 genhash_val_t result = 0;
104277
104278 result += key->id;
104279
104280 result &= 0xFFFFFFFF;
104281 return result;
104282}
104283
104284static bool cmp_packet_web_ruleset_unit_addition_100(const void *vkey1, const void *vkey2)
104285{
104288 bool differ;
104289
104290 differ = (old->id != real_packet->id);
104291
104292 return !differ;
104293}
104295#endif /* FREECIV_DELTA_PROTOCOL */
104296
104298{
104299#define FREE_PACKET_STRUCT(_packet) free_packet_web_ruleset_unit_addition(_packet)
104301
104302#ifdef FREECIV_JSON_CONNECTION
104303 struct plocation field_addr;
104304 {
104305 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
104308 }
104309#endif /* FREECIV_JSON_CONNECTION */
104310
104311#ifdef FREECIV_JSON_CONNECTION
104312 field_addr.name = "id";
104313#endif /* FREECIV_JSON_CONNECTION */
104314
104315 {
104316 int readin;
104317
104318 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
104320 }
104321 real_packet->id = readin;
104322 }
104323
104324 log_packet_detailed("packet_web_ruleset_unit_addition_100: got info about (%d)",
104325 real_packet->id);
104326
104327#ifdef FREECIV_DELTA_PROTOCOL
104330 struct genhash **hash = pc->phs.received + PACKET_WEB_RULESET_UNIT_ADDITION;
104331
104332 if (nullptr == *hash) {
104334 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
104335 }
104336
104337 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
104338 *real_packet = *old;
104339 } else {
104340 /* packet is already initialized empty */
104341 log_packet_detailed(" no old info");
104342 }
104343
104344#ifdef FREECIV_JSON_CONNECTION
104345 field_addr.name = "fields";
104346#endif /* FREECIV_JSON_CONNECTION */
104347 DIO_BV_GET(&din, &field_addr, fields);
104348
104349 if (BV_ISSET(fields, 0)) {
104350 log_packet_detailed(" got field 'utype_actions'");
104351
104352#ifdef FREECIV_JSON_CONNECTION
104353 field_addr.name = "utype_actions";
104354#endif /* FREECIV_JSON_CONNECTION */
104355
104356 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
104357 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
104358 }
104359 }
104360
104361 if (nullptr == old) {
104362 old = fc_malloc(sizeof(*old));
104364 *old = *real_packet;
104366 } else {
104367 *old = *real_packet;
104368 }
104369
104370#else /* FREECIV_DELTA_PROTOCOL */
104371#ifdef FREECIV_JSON_CONNECTION
104372 field_addr.name = "utype_actions";
104373#endif /* FREECIV_JSON_CONNECTION */
104374
104375 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
104376 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
104377 }
104378#endif /* FREECIV_DELTA_PROTOCOL */
104379
104381#undef FREE_PACKET_STRUCT
104382}
104383
104385{
104386 const struct packet_web_ruleset_unit_addition *real_packet = packet;
104387 int e;
104389
104390 log_packet_detailed("packet_web_ruleset_unit_addition_100: sending info about (%d)",
104391 real_packet->id);
104392
104393#ifdef FREECIV_DELTA_PROTOCOL
104396 bool differ;
104397 struct genhash **hash = pc->phs.sent + PACKET_WEB_RULESET_UNIT_ADDITION;
104398
104399 if (nullptr == *hash) {
104401 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
104402 }
104403 BV_CLR_ALL(fields);
104404
104405 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
104406 old = fc_malloc(sizeof(*old));
104407 /* temporary bitcopy just to insert correctly */
104408 *old = *real_packet;
104411 }
104412
104413 differ = !BV_ARE_EQUAL(old->utype_actions, real_packet->utype_actions);
104414 if (differ) {
104415 BV_SET(fields, 0);
104416 }
104417#endif /* FREECIV_DELTA_PROTOCOL */
104418
104419#ifdef FREECIV_JSON_CONNECTION
104420 struct plocation field_addr;
104421 {
104422 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
104425 }
104426#endif /* FREECIV_JSON_CONNECTION */
104427
104428#ifdef FREECIV_JSON_CONNECTION
104429 field_addr.name = "id";
104430#endif /* FREECIV_JSON_CONNECTION */
104431 e = 0;
104432
104433 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
104434
104435 if (e) {
104436 log_packet_detailed("'id' field error detected");
104437 }
104438
104439#ifdef FREECIV_DELTA_PROTOCOL
104440#ifdef FREECIV_JSON_CONNECTION
104441 field_addr.name = "fields";
104442#endif /* FREECIV_JSON_CONNECTION */
104443 e = 0;
104444 e |= DIO_BV_PUT(&dout, &field_addr, fields);
104445 if (e) {
104446 log_packet_detailed("fields bitvector error detected");
104447 }
104448
104449 if (BV_ISSET(fields, 0)) {
104450 log_packet_detailed(" field 'utype_actions' has changed");
104451
104452#ifdef FREECIV_JSON_CONNECTION
104453 field_addr.name = "utype_actions";
104454#endif /* FREECIV_JSON_CONNECTION */
104455 e = 0;
104456
104457 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
104458
104459 if (e) {
104460 log_packet_detailed("'utype_actions' field error detected");
104461 }
104462 }
104463
104464 *old = *real_packet;
104465
104466#else /* FREECIV_DELTA_PROTOCOL */
104467#ifdef FREECIV_JSON_CONNECTION
104468 field_addr.name = "utype_actions";
104469#endif /* FREECIV_JSON_CONNECTION */
104470 e = 0;
104471
104472 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
104473
104474 if (e) {
104475 log_packet_detailed("'utype_actions' field error detected");
104476 }
104477#endif /* FREECIV_DELTA_PROTOCOL */
104478
104480}
104481
104483{
104484 if (!pc->used) {
104485 log_error("WARNING: trying to send data to the closed connection %s",
104487 return -1;
104488 }
104489 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet != nullptr, -1,
104490 "Handler for PACKET_WEB_RULESET_UNIT_ADDITION not installed");
104491 return pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet(pc, packet);
104492}
104493
104500
104502{
104503 phandlers->send[PACKET_CITY_RALLY_POINT].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_rally_point_100;
104505 phandlers->send[PACKET_WORKER_TASK].packet = (int(*)(struct connection *, const void *)) send_packet_worker_task_100;
104506 phandlers->receive[PACKET_WORKER_TASK] = (void *(*)(struct connection *)) receive_packet_worker_task_100;
104509 phandlers->send[PACKET_EDIT_STARTPOS].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_100;
104511 phandlers->send[PACKET_EDIT_STARTPOS_FULL].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_full_100;
104513 if (is_server()) {
104516 phandlers->send[PACKET_INVESTIGATE_STARTED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_started_100;
104517 phandlers->send[PACKET_INVESTIGATE_FINISHED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_finished_100;
104518 phandlers->send[PACKET_SERVER_JOIN_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_reply_100;
104519 phandlers->send[PACKET_AUTHENTICATION_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_req_100;
104521 phandlers->send[PACKET_ENDGAME_REPORT].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_report_100;
104522 phandlers->send[PACKET_ENDGAME_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_player_100;
104523 phandlers->send[PACKET_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_tile_info_100;
104524 phandlers->send[PACKET_GAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_game_info_100;
104525 phandlers->send[PACKET_CALENDAR_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_calendar_info_100;
104526 phandlers->send[PACKET_TIMEOUT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_timeout_info_100;
104527 phandlers->send[PACKET_MAP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_map_info_100;
104528 phandlers->send[PACKET_NUKE_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_nuke_tile_info_100;
104529 phandlers->send[PACKET_TEAM_NAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_team_name_info_100;
104530 phandlers->send[PACKET_ACHIEVEMENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_achievement_info_100;
104531 phandlers->send[PACKET_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_100;
104532 phandlers->send[PACKET_EARLY_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_early_chat_msg_100;
104533 phandlers->send[PACKET_CONNECT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_connect_msg_100;
104534 phandlers->send[PACKET_SERVER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_server_info_100;
104535 phandlers->send[PACKET_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_city_remove_100;
104536 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_100;
104537 phandlers->send[PACKET_CITY_NATIONALITIES].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_nationalities_100;
104538 phandlers->send[PACKET_CITY_UPDATE_COUNTERS].packet = (int(*)(struct connection *, const void *)) send_packet_city_update_counters_100;
104539 phandlers->send[PACKET_CITY_SHORT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_city_short_info_100;
104540 phandlers->send[PACKET_TRADE_ROUTE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_trade_route_info_100;
104542 phandlers->send[PACKET_CITY_SABOTAGE_LIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_sabotage_list_100;
104543 phandlers->send[PACKET_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_player_remove_100;
104544 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_100;
104545 phandlers->send[PACKET_PLAYER_DIPLSTATE].packet = (int(*)(struct connection *, const void *)) send_packet_player_diplstate_100;
104546 phandlers->send[PACKET_RESEARCH_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_research_info_100;
104547 phandlers->send[PACKET_UNKNOWN_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_unknown_research_100;
104548 phandlers->send[PACKET_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_remove_100;
104549 phandlers->send[PACKET_UNIT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_info_100;
104550 phandlers->send[PACKET_UNIT_SHORT_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_unit_short_info_100;
104551 phandlers->send[PACKET_UNIT_COMBAT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_combat_info_100;
104552 phandlers->send[PACKET_UNIT_ACTION_ANSWER].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_answer_100;
104553 phandlers->send[PACKET_UNIT_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_actions_100;
104559 phandlers->send[PACKET_PAGE_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_100;
104560 phandlers->send[PACKET_PAGE_MSG_PART].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_part_100;
104561 phandlers->send[PACKET_CONN_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_info_100;
104562 phandlers->send[PACKET_CONN_PING_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_ping_info_100;
104563 phandlers->send[PACKET_CONN_PING].no_packet = (int(*)(struct connection *)) send_packet_conn_ping_100;
104564 phandlers->send[PACKET_END_PHASE].no_packet = (int(*)(struct connection *)) send_packet_end_phase_100;
104565 phandlers->send[PACKET_START_PHASE].packet = (int(*)(struct connection *, const void *)) send_packet_start_phase_100;
104566 phandlers->send[PACKET_NEW_YEAR].packet = (int(*)(struct connection *, const void *)) send_packet_new_year_100;
104567 phandlers->send[PACKET_BEGIN_TURN].no_packet = (int(*)(struct connection *)) send_packet_begin_turn_100;
104568 phandlers->send[PACKET_END_TURN].no_packet = (int(*)(struct connection *)) send_packet_end_turn_100;
104570 phandlers->send[PACKET_THAW_CLIENT].no_packet = (int(*)(struct connection *)) send_packet_thaw_client_100;
104571 phandlers->send[PACKET_SPACESHIP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_info_100;
104572 phandlers->send[PACKET_RULESET_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_100;
104573 phandlers->send[PACKET_RULESET_UNIT_BONUS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_bonus_100;
104574 phandlers->send[PACKET_RULESET_UNIT_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_flag_100;
104576 phandlers->send[PACKET_RULESET_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_game_100;
104577 phandlers->send[PACKET_RULESET_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_specialist_100;
104579 phandlers->send[PACKET_RULESET_TECH].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_100;
104580 phandlers->send[PACKET_RULESET_TECH_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_class_100;
104581 phandlers->send[PACKET_RULESET_TECH_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_flag_100;
104582 phandlers->send[PACKET_RULESET_GOVERNMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_government_100;
104583 phandlers->send[PACKET_RULESET_GOV_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_gov_flag_100;
104586 phandlers->send[PACKET_RULESET_NATION_SETS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_sets_100;
104588 phandlers->send[PACKET_RULESET_NATION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_100;
104589 phandlers->send[PACKET_NATION_AVAILABILITY].packet = (int(*)(struct connection *, const void *)) send_packet_nation_availability_100;
104590 phandlers->send[PACKET_RULESET_STYLE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_style_100;
104591 phandlers->send[PACKET_RULESET_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_city_100;
104592 phandlers->send[PACKET_RULESET_BUILDING].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_building_100;
104593 phandlers->send[PACKET_RULESET_IMPR_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_impr_flag_100;
104594 phandlers->send[PACKET_RULESET_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_100;
104595 phandlers->send[PACKET_RULESET_TERRAIN_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_flag_100;
104596 phandlers->send[PACKET_RULESET_UNIT_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_class_100;
104597 phandlers->send[PACKET_RULESET_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_100;
104598 phandlers->send[PACKET_RULESET_EXTRA_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_flag_100;
104599 phandlers->send[PACKET_RULESET_BASE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_base_100;
104600 phandlers->send[PACKET_RULESET_ROAD].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_road_100;
104601 phandlers->send[PACKET_RULESET_GOODS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_goods_100;
104602 phandlers->send[PACKET_RULESET_DISASTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_disaster_100;
104603 phandlers->send[PACKET_RULESET_ACHIEVEMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_achievement_100;
104604 phandlers->send[PACKET_RULESET_TRADE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_trade_100;
104605 phandlers->send[PACKET_RULESET_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_100;
104607 phandlers->send[PACKET_RULESET_ACTION_AUTO].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_auto_100;
104608 phandlers->send[PACKET_RULESET_COUNTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_counter_100;
104609 phandlers->send[PACKET_RULESET_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_music_100;
104610 phandlers->send[PACKET_RULESET_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_multiplier_100;
104611 phandlers->send[PACKET_RULESET_CLAUSE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_clause_100;
104612 phandlers->send[PACKET_RULESET_TILEDEF].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tiledef_100;
104613 phandlers->send[PACKET_RULESET_CONTROL].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_control_100;
104614 phandlers->send[PACKET_RULESET_SUMMARY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_summary_100;
104617 phandlers->send[PACKET_RULESET_CHOICES].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_choices_100;
104618 phandlers->send[PACKET_GAME_LOAD].packet = (int(*)(struct connection *, const void *)) send_packet_game_load_100;
104620 phandlers->send[PACKET_SERVER_SETTING_CONST].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_const_100;
104621 phandlers->send[PACKET_SERVER_SETTING_BOOL].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_bool_100;
104622 phandlers->send[PACKET_SERVER_SETTING_INT].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_int_100;
104623 phandlers->send[PACKET_SERVER_SETTING_STR].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_str_100;
104624 phandlers->send[PACKET_SERVER_SETTING_ENUM].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_enum_100;
104626 phandlers->send[PACKET_SET_TOPOLOGY].packet = (int(*)(struct connection *, const void *)) send_packet_set_topology_100;
104627 phandlers->send[PACKET_RULESET_EFFECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_effect_100;
104628 phandlers->send[PACKET_RULESET_RESOURCE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_resource_100;
104629 phandlers->send[PACKET_SCENARIO_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_info_100;
104630 phandlers->send[PACKET_SCENARIO_DESCRIPTION].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_description_100;
104631 phandlers->send[PACKET_VOTE_NEW].packet = (int(*)(struct connection *, const void *)) send_packet_vote_new_100;
104632 phandlers->send[PACKET_VOTE_UPDATE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_update_100;
104633 phandlers->send[PACKET_VOTE_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_remove_100;
104634 phandlers->send[PACKET_VOTE_RESOLVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_resolve_100;
104635 phandlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_fogofwar_state_100;
104636 phandlers->send[PACKET_EDIT_OBJECT_CREATED].packet = (int(*)(struct connection *, const void *)) send_packet_edit_object_created_100;
104637 phandlers->send[PACKET_PLAY_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_play_music_100;
104638 phandlers->send[PACKET_POPUP_IMAGE].packet = (int(*)(struct connection *, const void *)) send_packet_popup_image_100;
104639 phandlers->send[PACKET_SYNC_SERIAL_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_reply_100;
104640 phandlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_web_city_info_addition_100;
104648 phandlers->receive[PACKET_CITY_SELL] = (void *(*)(struct connection *)) receive_packet_city_sell_100;
104649 phandlers->receive[PACKET_CITY_BUY] = (void *(*)(struct connection *)) receive_packet_city_buy_100;
104650 phandlers->receive[PACKET_CITY_CHANGE] = (void *(*)(struct connection *)) receive_packet_city_change_100;
104655 phandlers->receive[PACKET_CITY_RENAME] = (void *(*)(struct connection *)) receive_packet_city_rename_100;
104668 phandlers->receive[PACKET_UNIT_ORDERS] = (void *(*)(struct connection *)) receive_packet_unit_orders_100;
104681 phandlers->receive[PACKET_REPORT_REQ] = (void *(*)(struct connection *)) receive_packet_report_req_100;
104682 phandlers->receive[PACKET_CONN_PONG] = (void *(*)(struct connection *)) receive_packet_conn_pong_100;
104684 phandlers->receive[PACKET_CLIENT_INFO] = (void *(*)(struct connection *)) receive_packet_client_info_100;
104690 phandlers->receive[PACKET_VOTE_SUBMIT] = (void *(*)(struct connection *)) receive_packet_vote_submit_100;
104691 phandlers->receive[PACKET_EDIT_MODE] = (void *(*)(struct connection *)) receive_packet_edit_mode_100;
104697 phandlers->receive[PACKET_EDIT_TILE] = (void *(*)(struct connection *)) receive_packet_edit_tile_100;
104701 phandlers->receive[PACKET_EDIT_UNIT] = (void *(*)(struct connection *)) receive_packet_edit_unit_100;
104704 phandlers->receive[PACKET_EDIT_CITY] = (void *(*)(struct connection *)) receive_packet_edit_city_100;
104707 phandlers->receive[PACKET_EDIT_PLAYER] = (void *(*)(struct connection *)) receive_packet_edit_player_100;
104709 phandlers->receive[PACKET_EDIT_GAME] = (void *(*)(struct connection *)) receive_packet_edit_game_100;
104711 phandlers->receive[PACKET_SYNC_SERIAL] = (void *(*)(struct connection *)) receive_packet_sync_serial_100;
104712 phandlers->receive[PACKET_WEB_CMA_SET] = (void *(*)(struct connection *)) receive_packet_web_cma_set_100;
104714 } else /* not is_server() */ {
104715 phandlers->send[PACKET_SERVER_JOIN_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_req_100;
104716 phandlers->send[PACKET_AUTHENTICATION_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_reply_100;
104717 phandlers->send[PACKET_NATION_SELECT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_nation_select_req_100;
104718 phandlers->send[PACKET_PLAYER_READY].packet = (int(*)(struct connection *, const void *)) send_packet_player_ready_100;
104719 phandlers->send[PACKET_CHAT_MSG_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_req_100;
104720 phandlers->send[PACKET_CITY_SELL].packet = (int(*)(struct connection *, const void *)) send_packet_city_sell_100;
104721 phandlers->send[PACKET_CITY_BUY].packet = (int(*)(struct connection *, const void *)) send_packet_city_buy_100;
104722 phandlers->send[PACKET_CITY_CHANGE].packet = (int(*)(struct connection *, const void *)) send_packet_city_change_100;
104723 phandlers->send[PACKET_CITY_WORKLIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_worklist_100;
104724 phandlers->send[PACKET_CITY_MAKE_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_specialist_100;
104725 phandlers->send[PACKET_CITY_MAKE_WORKER].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_worker_100;
104727 phandlers->send[PACKET_CITY_RENAME].packet = (int(*)(struct connection *, const void *)) send_packet_city_rename_100;
104728 phandlers->send[PACKET_CITY_OPTIONS_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_city_options_req_100;
104729 phandlers->send[PACKET_CITY_REFRESH].packet = (int(*)(struct connection *, const void *)) send_packet_city_refresh_100;
104731 phandlers->send[PACKET_PLAYER_PHASE_DONE].packet = (int(*)(struct connection *, const void *)) send_packet_player_phase_done_100;
104732 phandlers->send[PACKET_PLAYER_RATES].packet = (int(*)(struct connection *, const void *)) send_packet_player_rates_100;
104734 phandlers->send[PACKET_PLAYER_PLACE_INFRA].packet = (int(*)(struct connection *, const void *)) send_packet_player_place_infra_100;
104736 phandlers->send[PACKET_PLAYER_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_player_multiplier_100;
104737 phandlers->send[PACKET_PLAYER_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_player_research_100;
104738 phandlers->send[PACKET_PLAYER_TECH_GOAL].packet = (int(*)(struct connection *, const void *)) send_packet_player_tech_goal_100;
104739 phandlers->send[PACKET_UNIT_SSCS_SET].packet = (int(*)(struct connection *, const void *)) send_packet_unit_sscs_set_100;
104740 phandlers->send[PACKET_UNIT_ORDERS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_orders_100;
104742 phandlers->send[PACKET_UNIT_ACTION_QUERY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_query_100;
104743 phandlers->send[PACKET_UNIT_TYPE_UPGRADE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_type_upgrade_100;
104744 phandlers->send[PACKET_UNIT_DO_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_unit_do_action_100;
104745 phandlers->send[PACKET_UNIT_GET_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_get_actions_100;
104746 phandlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_change_activity_100;
104753 phandlers->send[PACKET_REPORT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_report_req_100;
104754 phandlers->send[PACKET_CONN_PONG].no_packet = (int(*)(struct connection *)) send_packet_conn_pong_100;
104756 phandlers->send[PACKET_CLIENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_client_info_100;
104758 phandlers->send[PACKET_SPACESHIP_PLACE].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_place_100;
104759 phandlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_single_want_hack_req_100;
104760 phandlers->send[PACKET_RULESET_SELECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_select_100;
104761 phandlers->send[PACKET_SAVE_SCENARIO].packet = (int(*)(struct connection *, const void *)) send_packet_save_scenario_100;
104762 phandlers->send[PACKET_VOTE_SUBMIT].packet = (int(*)(struct connection *, const void *)) send_packet_vote_submit_100;
104763 phandlers->send[PACKET_EDIT_MODE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_mode_100;
104766 phandlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet = (int(*)(struct connection *, const void *)) send_packet_edit_toggle_fogofwar_100;
104767 phandlers->send[PACKET_EDIT_TILE_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_terrain_100;
104768 phandlers->send[PACKET_EDIT_TILE_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_extra_100;
104769 phandlers->send[PACKET_EDIT_TILE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_100;
104770 phandlers->send[PACKET_EDIT_UNIT_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_create_100;
104771 phandlers->send[PACKET_EDIT_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_remove_100;
104773 phandlers->send[PACKET_EDIT_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_100;
104774 phandlers->send[PACKET_EDIT_CITY_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_create_100;
104775 phandlers->send[PACKET_EDIT_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_remove_100;
104776 phandlers->send[PACKET_EDIT_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_100;
104777 phandlers->send[PACKET_EDIT_PLAYER_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_create_100;
104778 phandlers->send[PACKET_EDIT_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_remove_100;
104779 phandlers->send[PACKET_EDIT_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_100;
104780 phandlers->send[PACKET_EDIT_PLAYER_VISION].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_vision_100;
104781 phandlers->send[PACKET_EDIT_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_edit_game_100;
104782 phandlers->send[PACKET_EDIT_SCENARIO_DESC].packet = (int(*)(struct connection *, const void *)) send_packet_edit_scenario_desc_100;
104783 phandlers->send[PACKET_SYNC_SERIAL].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_100;
104784 phandlers->send[PACKET_WEB_CMA_SET].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_set_100;
104785 phandlers->send[PACKET_WEB_CMA_CLEAR].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_clear_100;
104795 phandlers->receive[PACKET_TILE_INFO] = (void *(*)(struct connection *)) receive_packet_tile_info_100;
104796 phandlers->receive[PACKET_GAME_INFO] = (void *(*)(struct connection *)) receive_packet_game_info_100;
104799 phandlers->receive[PACKET_MAP_INFO] = (void *(*)(struct connection *)) receive_packet_map_info_100;
104803 phandlers->receive[PACKET_CHAT_MSG] = (void *(*)(struct connection *)) receive_packet_chat_msg_100;
104805 phandlers->receive[PACKET_CONNECT_MSG] = (void *(*)(struct connection *)) receive_packet_connect_msg_100;
104806 phandlers->receive[PACKET_SERVER_INFO] = (void *(*)(struct connection *)) receive_packet_server_info_100;
104807 phandlers->receive[PACKET_CITY_REMOVE] = (void *(*)(struct connection *)) receive_packet_city_remove_100;
104808 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_100;
104816 phandlers->receive[PACKET_PLAYER_INFO] = (void *(*)(struct connection *)) receive_packet_player_info_100;
104820 phandlers->receive[PACKET_UNIT_REMOVE] = (void *(*)(struct connection *)) receive_packet_unit_remove_100;
104821 phandlers->receive[PACKET_UNIT_INFO] = (void *(*)(struct connection *)) receive_packet_unit_info_100;
104831 phandlers->receive[PACKET_PAGE_MSG] = (void *(*)(struct connection *)) receive_packet_page_msg_100;
104833 phandlers->receive[PACKET_CONN_INFO] = (void *(*)(struct connection *)) receive_packet_conn_info_100;
104835 phandlers->receive[PACKET_CONN_PING] = (void *(*)(struct connection *)) receive_packet_conn_ping_100;
104836 phandlers->receive[PACKET_END_PHASE] = (void *(*)(struct connection *)) receive_packet_end_phase_100;
104837 phandlers->receive[PACKET_START_PHASE] = (void *(*)(struct connection *)) receive_packet_start_phase_100;
104838 phandlers->receive[PACKET_NEW_YEAR] = (void *(*)(struct connection *)) receive_packet_new_year_100;
104839 phandlers->receive[PACKET_BEGIN_TURN] = (void *(*)(struct connection *)) receive_packet_begin_turn_100;
104840 phandlers->receive[PACKET_END_TURN] = (void *(*)(struct connection *)) receive_packet_end_turn_100;
104842 phandlers->receive[PACKET_THAW_CLIENT] = (void *(*)(struct connection *)) receive_packet_thaw_client_100;
104890 phandlers->receive[PACKET_GAME_LOAD] = (void *(*)(struct connection *)) receive_packet_game_load_100;
104903 phandlers->receive[PACKET_VOTE_NEW] = (void *(*)(struct connection *)) receive_packet_vote_new_100;
104904 phandlers->receive[PACKET_VOTE_UPDATE] = (void *(*)(struct connection *)) receive_packet_vote_update_100;
104905 phandlers->receive[PACKET_VOTE_REMOVE] = (void *(*)(struct connection *)) receive_packet_vote_remove_100;
104909 phandlers->receive[PACKET_PLAY_MUSIC] = (void *(*)(struct connection *)) receive_packet_play_music_100;
104910 phandlers->receive[PACKET_POPUP_IMAGE] = (void *(*)(struct connection *)) receive_packet_popup_image_100;
104915 }
104916}
104917
104919 const char *capability)
104920{
104921}
104922
104923void packet_destroy(void *packet, enum packet_type type)
104924{
104925 static void (*const destroy_handlers[PACKET_LAST])(void *packet) = {
105131 };
105132 void (*handler)(void *packet) = (type < PACKET_LAST ? destroy_handlers[type] : nullptr);
105133
105134 if (handler == nullptr) {
105135 handler = free;
105136 log_error("packet_destroy(): Invalid packet type %d", type);
105137 }
105138
105139 handler(packet);
105140}
bool are_action_probabilitys_equal(const struct act_prob *ap1, const struct act_prob *ap2)
Definition actions.c:5357
#define MAX_NUM_ACTIONS
Definition actions.h:62
#define BV_DEFINE(name, bits)
Definition bitvector.h:140
#define BV_CLR_ALL(bv)
Definition bitvector.h:103
#define BV_SET(bv, bit)
Definition bitvector.h:89
#define BV_ARE_EQUAL(vec1, vec2)
Definition bitvector.h:121
#define BV_ISSET(bv, bit)
Definition bitvector.h:86
@ FEELING_LAST
Definition city.h:283
bool cm_are_parameter_equal(const struct cm_parameter *const p1, const struct cm_parameter *const p2)
Definition cm.c:2143
char * calendar_fragments
Definition comments.c:101
char * resources
Definition comments.c:37
char * world_peace_turns
Definition comments.c:100
char * disasters
Definition comments.c:46
char * culture_migration_pml
Definition comments.c:99
char * incite_cost
Definition comments.c:76
#define ATTRIBUTE_CHUNK_SIZE
Definition conn_types.h:66
#define MAX_LEN_PACKET
Definition conn_types.h:29
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:476
#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:1838
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 @22::@23 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:90
#define MAX_VET_LEVELS
Definition fc_types.h:49
#define MAX_GRANARY_INIS
Definition fc_types.h:73
#define MAX_NUM_NATIONS
Definition fc_types.h:61
#define MAX_NUM_RULESETS
Definition fc_types.h:270
#define MAX_NUM_NATION_SETS
Definition fc_types.h:58
#define MAX_NUM_BUILDING_LIST
Definition fc_types.h:46
int Nation_type_id
Definition fc_types.h:240
int Terrain_type_id
Definition fc_types.h:233
int action_id
Definition fc_types.h:249
#define SP_MAX
Definition fc_types.h:268
int Specialist_type_id
Definition fc_types.h:235
int Government_type_id
Definition fc_types.h:241
#define MAX_CALENDAR_FRAGMENTS
Definition fc_types.h:63
#define MAX_NUM_NATION_GROUPS
Definition fc_types.h:59
#define MAX_NUM_PLAYER_SLOTS
Definition fc_types.h:32
#define MAX_NUM_LEADERS
Definition fc_types.h:57
#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:990
int Unit_type_id
Definition fc_types.h:242
#define MAX_NUM_TECH_LIST
Definition fc_types.h:44
@ O_LAST
Definition fc_types.h:102
#define MAX_CITY_TILES
Definition fc_types.h:88
#define MAX_COUNTERS
Definition fc_types.h:107
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:265
bool genhash_insert(struct genhash *pgenhash, const void *key, const void *data)
Definition genhash.c:596
bool genhash_lookup(const struct genhash *pgenhash, const void *key, void **pdata)
Definition genhash.c:668
bool genhash_remove(struct genhash *pgenhash, const void *key)
Definition genhash.c:686
unsigned int genhash_val_t
Definition genhash.h:32
Government_type_id government_count(void)
Definition government.c:73
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 log_packet_detailed
Definition log.h:139
#define fc_assert(condition)
Definition log.h:177
#define log_error(message,...)
Definition log.h:104
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:238
#define fc_assert_ret_val_msg(condition, val, message,...)
Definition log.h:209
static void init_packet_vote_update(struct packet_vote_update *packet)
#define destroy_packet_city_worklist
static int send_packet_map_info_100(struct connection *pc, const struct packet_map_info *packet)
static void init_packet_endgame_report(struct packet_endgame_report *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)
static void init_packet_authentication_req(struct packet_authentication_req *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 void init_packet_achievement_info(struct packet_achievement_info *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)
static void init_packet_processing_finished(struct packet_processing_finished *packet)
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)
#define destroy_packet_ruleset_terrain_flag
static struct packet_unit_actions * receive_packet_unit_actions_100(struct connection *pc)
static void init_packet_vote_submit(struct packet_vote_submit *packet)
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)
#define destroy_packet_end_turn
int dsend_packet_sync_serial(struct connection *pc, int serial)
#define destroy_packet_edit_recalculate_borders
static int send_packet_ruleset_terrain_100(struct connection *pc, const struct packet_ruleset_terrain *packet)
static void init_packet_ruleset_description_part(struct packet_ruleset_description_part *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:45
static void init_packet_authentication_reply(struct packet_authentication_reply *packet)
#define destroy_packet_scenario_description
#define destroy_packet_ruleset_summary
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)
static void init_packet_single_want_hack_reply(struct packet_single_want_hack_reply *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)
#define destroy_packet_edit_game
int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
static void init_packet_ruleset_tech_class(struct packet_ruleset_tech_class *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)
#define destroy_packet_server_setting_int
void lsend_packet_endgame_player(struct conn_list *dest, const struct packet_endgame_player *packet)
static void init_packet_player_diplstate(struct packet_player_diplstate *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)
#define destroy_packet_authentication_reply
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)
#define destroy_packet_popup_image
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 void init_packet_end_phase(struct packet_end_phase *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)
static void init_packet_ruleset_impr_flag(struct packet_ruleset_impr_flag *packet)
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)
#define destroy_packet_edit_player_remove
int send_packet_ruleset_unit_bonus(struct connection *pc, const struct packet_ruleset_unit_bonus *packet)
static void init_packet_ruleset_road(struct packet_ruleset_road *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)
static void init_packet_ruleset_nation_sets(struct packet_ruleset_nation_sets *packet)
int send_packet_ruleset_achievement(struct connection *pc, const struct packet_ruleset_achievement *packet)
#define destroy_packet_diplomacy_accept_treaty_req
static void init_packet_player_info(struct packet_player_info *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)
#define destroy_packet_ruleset_action
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)
static void init_packet_server_setting_bitwise(struct packet_server_setting_bitwise *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)
#define destroy_packet_edit_tile_extra
static void init_packet_edit_tile(struct packet_edit_tile *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)
static void init_packet_unit_short_info(struct packet_unit_short_info *packet)
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 void init_packet_unit_action_answer(struct packet_unit_action_answer *packet)
static struct packet_ruleset_choices * receive_packet_ruleset_choices_100(struct connection *pc)
static void init_packet_ruleset_nation_groups(struct packet_ruleset_nation_groups *packet)
static void destroy_packet_ruleset_unit_class(void *packet)
#define destroy_packet_player_info
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)
#define destroy_packet_unit_sscs_set
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)
#define destroy_packet_server_join_req
#define destroy_packet_unit_get_actions
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 void init_packet_ruleset_tech(struct packet_ruleset_tech *packet)
static void init_packet_unit_do_action(struct packet_unit_do_action *packet)
static struct packet_tile_info * receive_packet_tile_info_100(struct connection *pc)
#define destroy_packet_diplomacy_remove_clause
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)
#define destroy_packet_edit_unit_remove
void lsend_packet_ruleset_multiplier(struct conn_list *dest, const struct packet_ruleset_multiplier *packet)
#define destroy_packet_ruleset_government_ruler_title
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 void init_packet_edit_player_vision(struct packet_edit_player_vision *packet)
static struct packet_unit_do_action * receive_packet_unit_do_action_100(struct connection *pc)
static void init_packet_diplomacy_cancel_meeting_req(struct packet_diplomacy_cancel_meeting_req *packet)
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 void init_packet_server_setting_const(struct packet_server_setting_const *packet)
static void init_packet_diplomacy_accept_treaty(struct packet_diplomacy_accept_treaty *packet)
#define destroy_packet_player_change_government
static int send_packet_player_ready_100(struct connection *pc, const struct packet_player_ready *packet)
static void init_packet_city_nationalities(struct packet_city_nationalities *packet)
static int send_packet_conn_ping_100(struct connection *pc)
#define destroy_packet_edit_player_create
int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
#define destroy_packet_sync_serial_reply
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 void init_packet_ruleset_unit_bonus(struct packet_ruleset_unit_bonus *packet)
static void destroy_packet_ruleset_action_auto(void *packet)
static struct packet_ruleset_action_auto * receive_packet_ruleset_action_auto_100(struct connection *pc)
static void init_packet_edit_game(struct packet_edit_game *packet)
#define destroy_packet_vote_new
int dsend_packet_player_remove(struct connection *pc, int playerno)
static void init_packet_server_join_req(struct packet_server_join_req *packet)
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)
#define destroy_packet_city_buy
static struct packet_unit_type_upgrade * receive_packet_unit_type_upgrade_100(struct connection *pc)
static void init_packet_city_options_req(struct packet_city_options_req *packet)
static void init_packet_city_sabotage_list(struct packet_city_sabotage_list *packet)
void lsend_packet_diplomacy_cancel_meeting(struct conn_list *dest, const struct packet_diplomacy_cancel_meeting *packet)
static void init_packet_trade_route_info(struct packet_trade_route_info *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)
#define destroy_packet_diplomacy_cancel_meeting_req
#define destroy_packet_server_join_reply
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)
#define destroy_packet_ruleset_style
#define destroy_packet_nuke_tile_info
#define destroy_packet_trade_route_info
static int send_packet_server_setting_int_100(struct connection *pc, const struct packet_server_setting_int *packet)
#define destroy_packet_city_update_counters
int send_packet_unit_action_query(struct connection *pc, const struct packet_unit_action_query *packet)
static void init_packet_ruleset_extra(struct packet_ruleset_extra *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)
static void init_packet_edit_city_create(struct packet_edit_city_create *packet)
static void destroy_packet_ruleset_terrain(void *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)
#define destroy_packet_ruleset_game
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)
#define destroy_packet_server_setting_str
#define destroy_packet_server_setting_const
#define destroy_packet_unit_remove
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)
static void init_packet_sync_serial(struct packet_sync_serial *packet)
static void init_packet_begin_turn(struct packet_begin_turn *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)
#define destroy_packet_ruleset_description_part
#define destroy_packet_ruleset_unit_bonus
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)
#define destroy_packet_chat_msg_req
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)
static void init_packet_ruleset_effect(struct packet_ruleset_effect *packet)
int send_packet_ruleset_unit_flag(struct connection *pc, const struct packet_ruleset_unit_flag *packet)
static void init_packet_diplomacy_remove_clause_req(struct packet_diplomacy_remove_clause_req *packet)
static void init_packet_server_join_reply(struct packet_server_join_reply *packet)
static void init_packet_edit_unit_create(struct packet_edit_unit_create *packet)
static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
#define destroy_packet_unit_action_query
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)
#define destroy_packet_edit_player_vision
static struct packet_server_join_req * receive_packet_server_join_req_100(struct connection *pc)
#define destroy_packet_edit_city_create
void lsend_packet_begin_turn(struct conn_list *dest)
static int send_packet_thaw_client_100(struct connection *pc)
static void init_packet_map_info(struct packet_map_info *packet)
#define destroy_packet_ruleset_tiledef
int send_packet_unit_type_upgrade(struct connection *pc, const struct packet_unit_type_upgrade *packet)
#define destroy_packet_edit_tile
static void init_packet_diplomacy_init_meeting(struct packet_diplomacy_init_meeting *packet)
static struct packet_ruleset_building * receive_packet_ruleset_building_100(struct connection *pc)
static void init_packet_conn_ping(struct packet_conn_ping *packet)
static struct packet_ruleset_description_part * receive_packet_ruleset_description_part_100(struct connection *pc)
static void init_packet_player_change_government(struct packet_player_change_government *packet)
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)
#define destroy_packet_ruleset_unit_flag
int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
#define destroy_packet_player_phase_done
#define destroy_packet_edit_startpos_full
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)
static void init_packet_edit_tile_extra(struct packet_edit_tile_extra *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)
static void destroy_packet_ruleset_road(void *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 void free_packet_ruleset_effect(struct packet_ruleset_effect *packet)
static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
static void init_packet_unit_sscs_set(struct packet_unit_sscs_set *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)
#define destroy_packet_research_info
int send_packet_server_setting_const(struct connection *pc, const struct packet_server_setting_const *packet)
static void init_packet_nation_availability(struct packet_nation_availability *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)
#define destroy_packet_save_scenario
int send_packet_city_remove(struct connection *pc, const struct packet_city_remove *packet)
#define destroy_packet_worker_task
#define destroy_packet_conn_ping
static void init_packet_ruleset_city(struct packet_ruleset_city *packet)
static int send_packet_server_setting_bool_100(struct connection *pc, const struct packet_server_setting_bool *packet)
#define destroy_packet_early_chat_msg
#define destroy_packet_ruleset_choices
static int send_packet_ruleset_government_ruler_title_100(struct connection *pc, const struct packet_ruleset_government_ruler_title *packet)
#define destroy_packet_city_refresh
void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
static int send_packet_ruleset_tiledef_100(struct connection *pc, const struct packet_ruleset_tiledef *packet)
static void init_packet_diplomacy_remove_clause(struct packet_diplomacy_remove_clause *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 void init_packet_chat_msg_req(struct packet_chat_msg_req *packet)
#define destroy_packet_single_want_hack_reply
#define destroy_packet_unit_action_answer
static void init_packet_rulesets_ready(struct packet_rulesets_ready *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 void init_packet_client_info(struct packet_client_info *packet)
static void init_packet_web_city_info_addition(struct packet_web_city_info_addition *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 void init_packet_edit_mode(struct packet_edit_mode *packet)
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 void init_packet_unit_server_side_agent_set(struct packet_unit_server_side_agent_set *packet)
static int send_packet_game_info_100(struct connection *pc, const struct packet_game_info *packet)
static void init_packet_diplomacy_cancel_meeting(struct packet_diplomacy_cancel_meeting *packet)
static int send_packet_freeze_client_100(struct connection *pc)
#define destroy_packet_unit_info
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)
#define destroy_packet_ruleset_nation
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 void free_packet_ruleset_counter(struct packet_ruleset_counter *packet)
#define destroy_packet_web_player_info_addition
static void free_packet_ruleset_unit_class(struct packet_ruleset_unit_class *packet)
static void init_packet_ruleset_summary(struct packet_ruleset_summary *packet)
static void init_packet_set_topology(struct packet_set_topology *packet)
static struct packet_nation_availability * receive_packet_nation_availability_100(struct connection *pc)
static void init_packet_spaceship_launch(struct packet_spaceship_launch *packet)
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)
static void init_packet_investigate_started(struct packet_investigate_started *packet)
static void init_packet_ruleset_achievement(struct packet_ruleset_achievement *packet)
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)
#define destroy_packet_server_setting_enum
static struct packet_unit_server_side_agent_set * receive_packet_unit_server_side_agent_set_100(struct connection *pc)
#define destroy_packet_player_attribute_block
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)
#define destroy_packet_conn_pong
#define destroy_packet_player_rates
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)
#define destroy_packet_diplomacy_remove_clause_req
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)
#define destroy_packet_end_phase
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 void init_packet_ruleset_tech_flag(struct packet_ruleset_tech_flag *packet)
#define destroy_packet_player_research
static struct packet_ruleset_counter * receive_packet_ruleset_counter_100(struct connection *pc)
static void init_packet_ruleset_unit_flag(struct packet_ruleset_unit_flag *packet)
static struct packet_edit_player * receive_packet_edit_player_100(struct connection *pc)
static void init_packet_server_setting_int(struct packet_server_setting_int *packet)
static void free_packet_ruleset_road(struct packet_ruleset_road *packet)
static void init_packet_ruleset_control(struct packet_ruleset_control *packet)
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)
#define destroy_packet_ruleset_nation_groups
static void init_packet_play_music(struct packet_play_music *packet)
static struct packet_server_setting_str * receive_packet_server_setting_str_100(struct connection *pc)
#define destroy_packet_edit_unit_create
int send_packet_ruleset_base(struct connection *pc, const struct packet_ruleset_base *packet)
#define destroy_packet_unit_do_action
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)
#define destroy_packet_city_rally_point
#define destroy_packet_authentication_req
#define destroy_packet_edit_player
void dlsend_packet_unit_remove(struct conn_list *dest, int unit_id)
static void destroy_packet_ruleset_disaster(void *packet)
static void init_packet_ruleset_game(struct packet_ruleset_game *packet)
static struct packet_edit_player_vision * receive_packet_edit_player_vision_100(struct connection *pc)
static void init_packet_city_rename(struct packet_city_rename *packet)
static struct packet_nuke_tile_info * receive_packet_nuke_tile_info_100(struct connection *pc)
static void init_packet_unit_orders(struct packet_unit_orders *packet)
#define destroy_packet_ruleset_impr_flag
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)
static void init_packet_ruleset_specialist(struct packet_ruleset_specialist *packet)
#define destroy_packet_chat_msg
static void init_packet_timeout_info(struct packet_timeout_info *packet)
#define destroy_packet_diplomacy_init_meeting_req
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)
#define destroy_packet_city_short_info
static struct packet_edit_city_create * receive_packet_edit_city_create_100(struct connection *pc)
static void init_packet_ruleset_select(struct packet_ruleset_select *packet)
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 void init_packet_worker_task(struct packet_worker_task *packet)
static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
static void init_packet_edit_fogofwar_state(struct packet_edit_fogofwar_state *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)
#define destroy_packet_spaceship_place
static void init_packet_research_info(struct packet_research_info *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)
static void init_packet_ruleset_building(struct packet_ruleset_building *packet)
int send_packet_sync_serial_reply(struct connection *pc, const struct packet_sync_serial_reply *packet)
#define destroy_packet_sync_serial
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 void init_packet_ruleset_terrain(struct packet_ruleset_terrain *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 void init_packet_web_ruleset_unit_addition(struct packet_web_ruleset_unit_addition *packet)
static struct packet_investigate_started * receive_packet_investigate_started_100(struct connection *pc)
static void init_packet_unit_action_query(struct packet_unit_action_query *packet)
static void init_packet_new_year(struct packet_new_year *packet)
static int send_packet_edit_startpos_full_100(struct connection *pc, const struct packet_edit_startpos_full *packet)
#define destroy_packet_ruleset_base
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)
#define destroy_packet_thaw_client
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)
static void init_packet_edit_city(struct packet_edit_city *packet)
int send_packet_vote_submit(struct connection *pc, const struct packet_vote_submit *packet)
static void init_packet_early_chat_msg(struct packet_early_chat_msg *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 void init_packet_ruleset_terrain_flag(struct packet_ruleset_terrain_flag *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)
static void free_packet_ruleset_specialist(struct packet_ruleset_specialist *packet)
const char *const packet_functional_capability
Definition packets_gen.c:30
static void destroy_packet_ruleset_city(void *packet)
static void init_packet_unit_type_upgrade(struct packet_unit_type_upgrade *packet)
#define destroy_packet_edit_city
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)
#define destroy_packet_client_info
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)
#define destroy_packet_player_multiplier
static void init_packet_player_multiplier(struct packet_player_multiplier *packet)
static void init_packet_player_phase_done(struct packet_player_phase_done *packet)
static void init_packet_ruleset_base(struct packet_ruleset_base *packet)
#define destroy_packet_unit_type_upgrade
void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
static void init_packet_player_place_infra(struct packet_player_place_infra *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 void destroy_packet_ruleset_tech(void *packet)
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)
static void init_packet_ruleset_gov_flag(struct packet_ruleset_gov_flag *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 void free_packet_ruleset_tech(struct packet_ruleset_tech *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)
#define destroy_packet_scenario_info
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)
#define destroy_packet_vote_resolve
static void init_packet_calendar_info(struct packet_calendar_info *packet)
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 void init_packet_page_msg(struct packet_page_msg *packet)
static void init_packet_unit_info(struct packet_unit_info *packet)
static int send_packet_city_make_specialist_100(struct connection *pc, const struct packet_city_make_specialist *packet)
static void destroy_packet_ruleset_clause(void *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 void free_packet_ruleset_extra(struct packet_ruleset_extra *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)
#define destroy_packet_page_msg_part
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)
static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
#define destroy_packet_diplomacy_cancel_pact
static void init_packet_edit_player_create(struct packet_edit_player_create *packet)
int send_packet_city_refresh(struct connection *pc, const struct packet_city_refresh *packet)
static void init_packet_ruleset_multiplier(struct packet_ruleset_multiplier *packet)
#define destroy_packet_ruleset_terrain_control
static void init_packet_edit_object_created(struct packet_edit_object_created *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 void init_packet_game_info(struct packet_game_info *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)
#define destroy_packet_investigate_started
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)
static void init_packet_nation_select_req(struct packet_nation_select_req *packet)
void lsend_packet_ruleset_terrain_flag(struct conn_list *dest, const struct packet_ruleset_terrain_flag *packet)
static void init_packet_scenario_info(struct packet_scenario_info *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 void destroy_packet_ruleset_music(void *packet)
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)
#define destroy_packet_edit_startpos
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)
#define destroy_packet_ruleset_trade
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 void init_packet_client_heartbeat(struct packet_client_heartbeat *packet)
static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
#define destroy_packet_edit_mode
int send_packet_end_phase(struct connection *pc)
static void init_packet_tile_info(struct packet_tile_info *packet)
static void init_packet_end_turn(struct packet_end_turn *packet)
static void init_packet_server_setting_str(struct packet_server_setting_str *packet)
#define destroy_packet_processing_started
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 void init_packet_ruleset_unit_class_flag(struct packet_ruleset_unit_class_flag *packet)
static int send_packet_player_place_infra_100(struct connection *pc, const struct packet_player_place_infra *packet)
#define destroy_packet_ruleset_resource
void lsend_packet_ruleset_tiledef(struct conn_list *dest, const struct packet_ruleset_tiledef *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)
#define destroy_packet_unit_combat_info
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)
#define destroy_packet_ruleset_tech_flag
static int send_packet_end_turn_100(struct connection *pc)
#define destroy_packet_web_cma_set
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)
#define destroy_packet_timeout_info
static int send_packet_nuke_tile_info_100(struct connection *pc, const struct packet_nuke_tile_info *packet)
static void init_packet_server_setting_bool(struct packet_server_setting_bool *packet)
static int send_packet_server_setting_enum_100(struct connection *pc, const struct packet_server_setting_enum *packet)
#define destroy_packet_tile_info
static struct packet_ruleset_action_enabler * receive_packet_ruleset_action_enabler_100(struct connection *pc)
static void init_packet_ruleset_action_enabler(struct packet_ruleset_action_enabler *packet)
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)
#define destroy_packet_ruleset_unit_class_flag
#define destroy_packet_begin_turn
#define destroy_packet_game_load
#define destroy_packet_single_want_hack_req
#define destroy_packet_start_phase
int send_packet_ruleset_nation(struct connection *pc, const struct packet_ruleset_nation *packet)
#define destroy_packet_city_name_suggestion_info
static int send_packet_city_make_worker_100(struct connection *pc, const struct packet_city_make_worker *packet)
static void init_packet_unit_remove(struct packet_unit_remove *packet)
static int send_packet_server_shutdown_100(struct connection *pc)
int send_packet_begin_turn(struct connection *pc)
static void free_packet_ruleset_multiplier(struct packet_ruleset_multiplier *packet)
void lsend_packet_ruleset_unit_bonus(struct conn_list *dest, const struct packet_ruleset_unit_bonus *packet)
#define destroy_packet_vote_remove
#define destroy_packet_city_make_specialist
#define destroy_packet_city_rename
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)
static void destroy_packet_ruleset_goods(void *packet)
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 void init_packet_city_remove(struct packet_city_remove *packet)
static struct packet_calendar_info * receive_packet_calendar_info_100(struct connection *pc)
#define destroy_packet_ruleset_control
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 void init_packet_player_remove(struct packet_player_remove *packet)
static struct packet_web_player_info_addition * receive_packet_web_player_info_addition_100(struct connection *pc)
#define destroy_packet_connect_msg
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)
#define destroy_packet_edit_object_created
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 void init_packet_diplomacy_accept_treaty_req(struct packet_diplomacy_accept_treaty_req *packet)
#define destroy_packet_player_diplstate
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 void init_packet_server_shutdown(struct packet_server_shutdown *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 void destroy_packet_ruleset_specialist(void *packet)
#define destroy_packet_vote_update
static void init_packet_unit_get_actions(struct packet_unit_get_actions *packet)
static void init_packet_player_ready(struct packet_player_ready *packet)
static void init_packet_city_change_specialist(struct packet_city_change_specialist *packet)
#define destroy_packet_nation_select_req
#define destroy_packet_edit_city_remove
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)
#define destroy_packet_ruleset_extra_flag
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)
static void init_packet_spaceship_info(struct packet_spaceship_info *packet)
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)
static void free_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
int dsend_packet_player_change_government(struct connection *pc, Government_type_id government)
#define destroy_packet_player_tech_goal
void lsend_packet_ruleset_resource(struct conn_list *dest, const struct packet_ruleset_resource *packet)
static void destroy_packet_ruleset_effect(void *packet)
#define destroy_packet_unit_actions
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)
static void init_packet_ruleset_clause(struct packet_ruleset_clause *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)
#define destroy_packet_map_info
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)
#define destroy_packet_edit_unit
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)
#define destroy_packet_city_sell
static void init_packet_ruleset_choices(struct packet_ruleset_choices *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)
#define destroy_packet_game_info
static struct packet_edit_recalculate_borders * receive_packet_edit_recalculate_borders_100(struct connection *pc)
#define destroy_packet_set_topology
#define destroy_packet_report_req
static void init_packet_server_setting_enum(struct packet_server_setting_enum *packet)
int send_packet_map_info(struct connection *pc, const struct packet_map_info *packet)
int send_packet_ruleset_tiledef(struct connection *pc, const struct packet_ruleset_tiledef *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)
#define destroy_packet_web_cma_clear
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)
int dsend_packet_player_research(struct connection *pc, int tech)
static void init_packet_edit_player(struct packet_edit_player *packet)
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 void init_packet_edit_toggle_fogofwar(struct packet_edit_toggle_fogofwar *packet)
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 void init_packet_ruleset_goods(struct packet_ruleset_goods *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)
static void free_packet_ruleset_goods(struct packet_ruleset_goods *packet)
int dsend_packet_city_remove(struct connection *pc, int city_id)
#define destroy_packet_edit_fogofwar_state
static struct packet_investigate_finished * receive_packet_investigate_finished_100(struct connection *pc)
#define destroy_packet_diplomacy_cancel_meeting
int send_packet_nuke_tile_info(struct connection *pc, const struct packet_nuke_tile_info *packet)
#define destroy_packet_diplomacy_create_clause_req
int send_packet_ruleset_unit_class_flag(struct connection *pc, const struct packet_ruleset_unit_class_flag *packet)
static struct packet_edit_check_tiles * receive_packet_edit_check_tiles_100(struct connection *pc)
int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
static int send_packet_ruleset_specialist_100(struct connection *pc, const struct packet_ruleset_specialist *packet)
static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
static int send_packet_ruleset_extra_flag_100(struct connection *pc, const struct packet_ruleset_extra_flag *packet)
static int send_packet_ruleset_disaster_100(struct connection *pc, const struct packet_ruleset_disaster *packet)
int dsend_packet_sync_serial_reply(struct connection *pc, int serial)
static struct packet_diplomacy_cancel_meeting_req * receive_packet_diplomacy_cancel_meeting_req_100(struct connection *pc)
static void init_packet_investigate_finished(struct packet_investigate_finished *packet)
#define destroy_packet_page_msg
static void init_packet_unit_change_activity(struct packet_unit_change_activity *packet)
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)
#define destroy_packet_unit_short_info
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)
static void init_packet_nuke_tile_info(struct packet_nuke_tile_info *packet)
static void destroy_packet_ruleset_counter(void *packet)
void dlsend_packet_game_load(struct conn_list *dest, bool load_successful, const char *load_filename)
#define destroy_packet_player_ready
#define destroy_packet_rulesets_ready
int dsend_packet_edit_object_created(struct connection *pc, int tag, int id)
void lsend_packet_ruleset_gov_flag(struct conn_list *dest, const struct packet_ruleset_gov_flag *packet)
static void init_packet_ruleset_resource(struct packet_ruleset_resource *packet)
static int send_packet_ruleset_unit_flag_100(struct connection *pc, const struct packet_ruleset_unit_flag *packet)
#define destroy_packet_unit_server_side_agent_set
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)
static void init_packet_city_update_counters(struct packet_city_update_counters *packet)
#define destroy_packet_web_ruleset_unit_addition
const char * packet_name(enum packet_type type)
Definition packets_gen.c:47
static int send_packet_ruleset_multiplier_100(struct connection *pc, const struct packet_ruleset_multiplier *packet)
static void init_packet_city_buy(struct packet_city_buy *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 void init_packet_conn_info(struct packet_conn_info *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)
#define destroy_packet_city_remove
#define destroy_packet_processing_finished
static struct packet_edit_unit * receive_packet_edit_unit_100(struct connection *pc)
static void init_packet_player_attribute_chunk(struct packet_player_attribute_chunk *packet)
static struct packet_diplomacy_accept_treaty_req * receive_packet_diplomacy_accept_treaty_req_100(struct connection *pc)
static void init_packet_ruleset_nation(struct packet_ruleset_nation *packet)
static void init_packet_connect_msg(struct packet_connect_msg *packet)
#define destroy_packet_unknown_research
static struct packet_server_setting_control * receive_packet_server_setting_control_100(struct connection *pc)
#define destroy_packet_server_setting_bool
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 void init_packet_ruleset_music(struct packet_ruleset_music *packet)
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)
#define destroy_packet_city_info
void lsend_packet_nation_availability(struct conn_list *dest, const struct packet_nation_availability *packet)
static void init_packet_endgame_player(struct packet_endgame_player *packet)
static void free_packet_ruleset_government(struct packet_ruleset_government *packet)
int dsend_packet_edit_unit_remove(struct connection *pc, int owner, int tile, Unit_type_id type, int count)
#define destroy_packet_city_change
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)
#define destroy_packet_edit_tile_terrain
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 void init_packet_city_rally_point(struct packet_city_rally_point *packet)
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)
static void init_packet_web_cma_clear(struct packet_web_cma_clear *packet)
static void init_packet_diplomacy_create_clause_req(struct packet_diplomacy_create_clause_req *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)
static void init_packet_server_setting_control(struct packet_server_setting_control *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)
static void init_packet_edit_tile_terrain(struct packet_edit_tile_terrain *packet)
int send_packet_unit_change_activity(struct connection *pc, const struct packet_unit_change_activity *packet)
#define destroy_packet_city_nationalities
#define destroy_packet_web_city_info_addition
static void init_packet_city_sell(struct packet_city_sell *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)
#define destroy_packet_investigate_finished
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)
static void init_packet_ruleset_counter(struct packet_ruleset_counter *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 void init_packet_game_load(struct packet_game_load *packet)
static void init_packet_popup_image(struct packet_popup_image *packet)
static void init_packet_vote_resolve(struct packet_vote_resolve *packet)
#define destroy_packet_spaceship_info
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 void init_packet_page_msg_part(struct packet_page_msg_part *packet)
static void init_packet_chat_msg(struct packet_chat_msg *packet)
static void init_packet_edit_unit_remove(struct packet_edit_unit_remove *packet)
static struct packet_ruleset_tech_class * receive_packet_ruleset_tech_class_100(struct connection *pc)
static void init_packet_thaw_client(struct packet_thaw_client *packet)
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)
#define destroy_packet_diplomacy_create_clause
int send_packet_ruleset_effect(struct connection *pc, const struct packet_ruleset_effect *packet)
#define destroy_packet_city_make_worker
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)
#define destroy_packet_city_sabotage_list
static void init_packet_unknown_research(struct packet_unknown_research *packet)
int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
static void destroy_packet_ruleset_extra(void *packet)
static int send_packet_ruleset_summary_100(struct connection *pc, const struct packet_ruleset_summary *packet)
static void init_packet_city_short_info(struct packet_city_short_info *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)
#define destroy_packet_freeze_client
static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
static void init_packet_city_info(struct packet_city_info *packet)
void packet_destroy(void *packet, enum packet_type type)
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)
static void init_packet_edit_city_remove(struct packet_edit_city_remove *packet)
int send_packet_ruleset_unit(struct connection *pc, const struct packet_ruleset_unit *packet)
static void init_packet_city_change(struct packet_city_change *packet)
static void init_packet_single_want_hack_req(struct packet_single_want_hack_req *packet)
static void init_packet_conn_pong(struct packet_conn_pong *packet)
static int send_packet_ruleset_achievement_100(struct connection *pc, const struct packet_ruleset_achievement *packet)
#define destroy_packet_server_info
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)
static void init_packet_spaceship_place(struct packet_spaceship_place *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 void init_packet_city_make_specialist(struct packet_city_make_specialist *packet)
static void free_packet_ruleset_music(struct packet_ruleset_music *packet)
static int send_packet_investigate_started_100(struct connection *pc, const struct packet_investigate_started *packet)
#define destroy_packet_server_shutdown
#define destroy_packet_edit_toggle_fogofwar
#define destroy_packet_ruleset_achievement
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 void init_packet_ruleset_unit(struct packet_ruleset_unit *packet)
int send_packet_edit_startpos(struct connection *pc, const struct packet_edit_startpos *packet)
void lsend_packet_ruleset_tech_flag(struct conn_list *dest, const struct packet_ruleset_tech_flag *packet)
#define destroy_packet_play_music
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)
#define destroy_packet_player_remove
static void init_packet_edit_unit_remove_by_id(struct packet_edit_unit_remove_by_id *packet)
static int send_packet_server_setting_control_100(struct connection *pc, const struct packet_server_setting_control *packet)
static void init_packet_player_research(struct packet_player_research *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)
#define destroy_packet_ruleset_select
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)
static void destroy_packet_ruleset_government(void *packet)
static void init_packet_ruleset_action(struct packet_ruleset_action *packet)
static void init_packet_ruleset_terrain_control(struct packet_ruleset_terrain_control *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)
#define destroy_packet_player_attribute_chunk
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 void init_packet_ruleset_trade(struct packet_ruleset_trade *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)
#define destroy_packet_unit_change_activity
static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
static void init_packet_ruleset_style(struct packet_ruleset_style *packet)
static void init_packet_web_player_info_addition(struct packet_web_player_info_addition *packet)
#define destroy_packet_conn_ping_info
static void init_packet_edit_player_remove(struct packet_edit_player_remove *packet)
static int send_packet_rulesets_ready_100(struct connection *pc)
static void init_packet_ruleset_government_ruler_title(struct packet_ruleset_government_ruler_title *packet)
static void init_packet_player_rates(struct packet_player_rates *packet)
int send_packet_player_tech_goal(struct connection *pc, const struct packet_player_tech_goal *packet)
static void init_packet_diplomacy_create_clause(struct packet_diplomacy_create_clause *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)
#define destroy_packet_city_name_suggestion_req
static void init_packet_server_info(struct packet_server_info *packet)
static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
static void init_packet_start_phase(struct packet_start_phase *packet)
int send_packet_team_name_info(struct connection *pc, const struct packet_team_name_info *packet)
static void init_packet_city_make_worker(struct packet_city_make_worker *packet)
static struct packet_edit_tile_extra * receive_packet_edit_tile_extra_100(struct connection *pc)
#define destroy_packet_team_name_info
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)
#define destroy_packet_nation_availability
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)
static void init_packet_edit_unit(struct packet_edit_unit *packet)
int dsend_packet_edit_fogofwar_state(struct connection *pc, bool enabled)
#define destroy_packet_unit_orders
static void init_packet_web_cma_set(struct packet_web_cma_set *packet)
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)
static void destroy_packet_ruleset_building(void *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)
#define destroy_packet_edit_check_tiles
#define destroy_packet_endgame_report
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)
int send_packet_ruleset_gov_flag(struct connection *pc, const struct packet_ruleset_gov_flag *packet)
#define destroy_packet_diplomacy_init_meeting
static int send_packet_ruleset_gov_flag_100(struct connection *pc, const struct packet_ruleset_gov_flag *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)
#define destroy_packet_server_setting_control
#define destroy_packet_server_setting_bitwise
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 void free_packet_ruleset_clause(struct packet_ruleset_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)
#define destroy_packet_city_options_req
#define destroy_packet_diplomacy_accept_treaty
static void init_packet_ruleset_extra_flag(struct packet_ruleset_extra_flag *packet)
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)
static void init_packet_city_refresh(struct packet_city_refresh *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)
static void init_packet_scenario_description(struct packet_scenario_description *packet)
void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
#define destroy_packet_ruleset_nation_sets
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 void init_packet_city_name_suggestion_req(struct packet_city_name_suggestion_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)
static void free_packet_ruleset_building(struct packet_ruleset_building *packet)
void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
static void init_packet_diplomacy_init_meeting_req(struct packet_diplomacy_init_meeting_req *packet)
#define destroy_packet_endgame_player
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)
static void free_packet_ruleset_unit(struct packet_ruleset_unit *packet)
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 struct packet_ruleset_tiledef * receive_packet_ruleset_tiledef_100(struct connection *pc)
static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
static void init_packet_edit_startpos(struct packet_edit_startpos *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)
static void init_packet_unit_actions(struct packet_unit_actions *packet)
static void init_packet_vote_remove(struct packet_vote_remove *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)
static void init_packet_player_tech_goal(struct packet_player_tech_goal *packet)
#define destroy_packet_vote_submit
int send_packet_player_research(struct connection *pc, const struct packet_player_research *packet)
static void init_packet_team_name_info(struct packet_team_name_info *packet)
void lsend_packet_ruleset_impr_flag(struct conn_list *dest, const struct packet_ruleset_impr_flag *packet)
static void free_packet_ruleset_action_auto(struct packet_ruleset_action_auto *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)
#define destroy_packet_conn_info
#define destroy_packet_new_year
static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
#define destroy_packet_player_place_infra
static struct packet_ruleset_gov_flag * receive_packet_ruleset_gov_flag_100(struct connection *pc)
static void init_packet_processing_started(struct packet_processing_started *packet)
static struct packet_worker_task * receive_packet_worker_task_100(struct connection *pc)
static void init_packet_vote_new(struct packet_vote_new *packet)
static void init_packet_freeze_client(struct packet_freeze_client *packet)
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 void init_packet_diplomacy_cancel_pact(struct packet_diplomacy_cancel_pact *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)
static void destroy_packet_ruleset_multiplier(void *packet)
#define destroy_packet_ruleset_gov_flag
#define destroy_packet_calendar_info
void lsend_packet_diplomacy_init_meeting(struct conn_list *dest, const struct packet_diplomacy_init_meeting *packet)
#define destroy_packet_spaceship_launch
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)
#define destroy_packet_achievement_info
#define destroy_packet_client_heartbeat
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 void init_packet_ruleset_action_auto(struct packet_ruleset_action_auto *packet)
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)
static void free_packet_ruleset_city(struct packet_ruleset_city *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)
static void init_packet_city_worklist(struct packet_city_worklist *packet)
static void init_packet_conn_ping_info(struct packet_conn_ping_info *packet)
static void init_packet_edit_recalculate_borders(struct packet_edit_recalculate_borders *packet)
int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
static void init_packet_player_attribute_block(struct packet_player_attribute_block *packet)
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)
#define destroy_packet_edit_scenario_desc
void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
static void init_packet_report_req(struct packet_report_req *packet)
static void init_packet_ruleset_disaster(struct packet_ruleset_disaster *packet)
static void free_packet_ruleset_disaster(struct packet_ruleset_disaster *packet)
int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
static void init_packet_edit_check_tiles(struct packet_edit_check_tiles *packet)
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 void destroy_packet_ruleset_action_enabler(void *packet)
static struct packet_processing_finished * receive_packet_processing_finished_100(struct connection *pc)
static void init_packet_sync_serial_reply(struct packet_sync_serial_reply *packet)
static int send_packet_begin_turn_100(struct connection *pc)
#define destroy_packet_city_change_specialist
static void init_packet_unit_combat_info(struct packet_unit_combat_info *packet)
static void destroy_packet_ruleset_unit(void *packet)
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 void init_packet_edit_startpos_full(struct packet_edit_startpos_full *packet)
static void init_packet_city_name_suggestion_info(struct packet_city_name_suggestion_info *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)
static void init_packet_ruleset_tiledef(struct packet_ruleset_tiledef *packet)
int dsend_packet_player_ready(struct connection *pc, int player_no, bool is_ready)
static void init_packet_ruleset_government(struct packet_ruleset_government *packet)
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)
#define destroy_packet_edit_unit_remove_by_id
#define destroy_packet_ruleset_tech_class
static void init_packet_save_scenario(struct packet_save_scenario *packet)
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 void free_packet_ruleset_action_enabler(struct packet_ruleset_action_enabler *packet)
static struct packet_page_msg_part * receive_packet_page_msg_part_100(struct connection *pc)
static void init_packet_ruleset_unit_class(struct packet_ruleset_unit_class *packet)
static void init_packet_edit_scenario_desc(struct packet_edit_scenario_desc *packet)
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_GOV_FLAG
@ 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_RULESET_TILEDEF
@ 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
void nuclear_winter(int effect)
Definition maphand.c:117
void global_warming(int effect)
Definition maphand.c:104
#define FC_FREE(ptr)
Definition mem.h:41
#define fc_malloc(sz)
Definition mem.h:34
static mpgui * gui
Definition mpgui_qt.cpp:53
static mpqt_worker * worker
Definition mpgui_qt.cpp:55
static struct multiplier multipliers[MAX_NUM_MULTIPLIERS]
Definition multipliers.c:23
Nation_type_id nation_count(void)
Definition nation.c:528
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:129
#define SEND_PACKET_DISCARD()
Definition packets.h:147
#define RECEIVE_PACKET_START(packet_type, result)
Definition packets.h:150
#define SEND_PACKET_END(packet_type)
Definition packets.h:137
#define RECEIVE_PACKET_FIELD_ERROR(field,...)
Definition packets.h:176
#define RECEIVE_PACKET_END(result)
Definition packets.h:166
int parts
Definition packhand.c:133
char * lines
Definition packhand.c:132
int len
Definition packhand.c:128
bool gives_shared_tiles(const struct player *me, const struct player *them)
Definition player.c:1505
bool gives_shared_vision(const struct player *me, const struct player *them)
Definition player.c:1497
bool are_requirements_equal(const struct requirement *req1, const struct requirement *req2)
static struct compatibility compat[]
Definition savecompat.c:117
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:2511
void strvec_destroy(struct strvec *psv)
bool strvec_set(struct strvec *psv, size_t svindex, const char *string)
void strvec_reserve(struct strvec *psv, size_t reserve)
const char * strvec_get(const struct strvec *psv, size_t svindex)
void strvec_copy(struct strvec *dest, const struct strvec *src)
struct strvec * strvec_new(void)
void strvec_clear(struct strvec *psv)
size_t strvec_size(const struct strvec *psv)
bool are_strvecs_equal(const struct strvec *stv1, const struct strvec *stv2)
Definition agents.h:40
Definition city.h:318
struct tile * tile
Definition city.h:320
char capability[MAX_LEN_CAPSTR]
Definition connection.h:171
enum authentication_type type
Definition packets_gen.h:63
bv_city_options options
enum city_wl_cancel_behavior wl_cb
Terrain_type_id terrain
Nation_type_id nation_no
Definition packets_gen.h:77
Government_type_id government
enum report_type type
struct requirement_vector reqs
struct requirement_vector actor_reqs
struct requirement_vector target_reqs
struct requirement_vector reqs
struct requirement_vector obs_reqs
struct strvec * helptext
struct requirement_vector reqs
struct requirement_vector giver_reqs
struct requirement_vector receiver_reqs
struct requirement_vector either_reqs
struct strvec * helptext
struct requirement_vector reqs
struct requirement_vector reqs
struct strvec * helptext
struct requirement_vector appearance_reqs
struct requirement_vector disappearance_reqs
struct requirement_vector rmreqs
struct requirement_vector reqs
struct requirement_vector reqs
struct strvec * helptext
struct requirement_vector reqs
struct requirement_vector reqs
struct requirement_vector reqs
struct requirement_vector first_reqs
struct requirement_vector reqs
struct strvec * helptext
struct requirement_vector research_reqs
struct strvec * helptext
struct requirement_vector build_reqs
struct strvec * helptext
enum spaceship_place_type type
struct act_prob action_probabilities[MAX_NUM_ACTIONS]
enum unit_activity activity
enum server_side_agent agent
Definition team.c:40
Definition tile.h:50
Definition unit.h:140
#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:120
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:60
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