Freeciv-3.3
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 };
570
571 return (type < PACKET_LAST ? names[type] : "unknown");
572}
573
575{
576 static const bool flag[PACKET_LAST] = {
589 /* others are FALSE by default */
590 };
591
592 return (type < PACKET_LAST) && flag[type];
593}
594
596{
597 memset(packet, 0, sizeof(*packet));
598}
599
600#define free_packet_processing_started(_packet) (void) 0
601#define destroy_packet_processing_started free
602
604{
605#define FREE_PACKET_STRUCT(_packet) free_packet_processing_started(_packet)
607
608 log_packet_detailed("packet_processing_started_100: got info about ()");
609
610 real_packet->__dummy = 0xff;
611
613#undef FREE_PACKET_STRUCT
614}
615
617{
619
620 log_packet_detailed("packet_processing_started_100: sending info about ()");
621
623}
624
626{
627 if (!pc->used) {
628 log_error("WARNING: trying to send data to the closed connection %s",
630 return -1;
631 }
632 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet != nullptr, -1,
633 "Handler for PACKET_PROCESSING_STARTED not installed");
634 return pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet(pc);
635}
636
638{
639 memset(packet, 0, sizeof(*packet));
640}
641
642#define free_packet_processing_finished(_packet) (void) 0
643#define destroy_packet_processing_finished free
644
646{
647#define FREE_PACKET_STRUCT(_packet) free_packet_processing_finished(_packet)
649
650 log_packet_detailed("packet_processing_finished_100: got info about ()");
651
652 real_packet->__dummy = 0xff;
653
655#undef FREE_PACKET_STRUCT
656}
657
659{
661
662 log_packet_detailed("packet_processing_finished_100: sending info about ()");
663
665}
666
668{
669 if (!pc->used) {
670 log_error("WARNING: trying to send data to the closed connection %s",
672 return -1;
673 }
674 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet != nullptr, -1,
675 "Handler for PACKET_PROCESSING_FINISHED not installed");
676 return pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet(pc);
677}
678
680{
681 memset(packet, 0, sizeof(*packet));
682}
683
684#define free_packet_investigate_started(_packet) (void) 0
685#define destroy_packet_investigate_started free
686
687#ifdef FREECIV_DELTA_PROTOCOL
688#define hash_packet_investigate_started_100 hash_const
689#define cmp_packet_investigate_started_100 cmp_const
691#endif /* FREECIV_DELTA_PROTOCOL */
692
694{
695#define FREE_PACKET_STRUCT(_packet) free_packet_investigate_started(_packet)
697
698#ifdef FREECIV_JSON_CONNECTION
699 struct plocation field_addr;
700 {
704 }
705#endif /* FREECIV_JSON_CONNECTION */
706
707 log_packet_detailed("packet_investigate_started_100: got info about ()");
708
709#ifdef FREECIV_DELTA_PROTOCOL
712 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_STARTED;
713
714 if (nullptr == *hash) {
716 nullptr, nullptr, nullptr, destroy_packet_investigate_started);
717 }
718
719 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
720 *real_packet = *old;
721 } else {
722 /* packet is already initialized empty */
723 log_packet_detailed(" no old info");
724 }
725
726#ifdef FREECIV_JSON_CONNECTION
727 field_addr.name = "fields";
728#endif /* FREECIV_JSON_CONNECTION */
729 DIO_BV_GET(&din, &field_addr, fields);
730
731 if (BV_ISSET(fields, 0)) {
732 log_packet_detailed(" got field 'city_id'");
733
734#ifdef FREECIV_JSON_CONNECTION
735 field_addr.name = "city_id";
736#endif /* FREECIV_JSON_CONNECTION */
737
738 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
740 }
741 }
742
743 if (nullptr == old) {
744 old = fc_malloc(sizeof(*old));
746 *old = *real_packet;
748 } else {
749 *old = *real_packet;
750 }
751
752#else /* FREECIV_DELTA_PROTOCOL */
753#ifdef FREECIV_JSON_CONNECTION
754 field_addr.name = "city_id";
755#endif /* FREECIV_JSON_CONNECTION */
756
757 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
759 }
760#endif /* FREECIV_DELTA_PROTOCOL */
761
763#undef FREE_PACKET_STRUCT
764}
765
767{
768 const struct packet_investigate_started *real_packet = packet;
769 int e;
771
772 log_packet_detailed("packet_investigate_started_100: sending info about ()");
773
774#ifdef FREECIV_DELTA_PROTOCOL
777 bool differ;
778 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_STARTED;
779
780 if (nullptr == *hash) {
782 nullptr, nullptr, nullptr, destroy_packet_investigate_started);
783 }
784 BV_CLR_ALL(fields);
785
786 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
787 old = fc_malloc(sizeof(*old));
788 /* temporary bitcopy just to insert correctly */
789 *old = *real_packet;
792 }
793
794 differ = (old->city_id != real_packet->city_id);
795 if (differ) {
796 BV_SET(fields, 0);
797 }
798#endif /* FREECIV_DELTA_PROTOCOL */
799
800#ifdef FREECIV_JSON_CONNECTION
801 struct plocation field_addr;
802 {
806 }
807#endif /* FREECIV_JSON_CONNECTION */
808
809#ifdef FREECIV_DELTA_PROTOCOL
810#ifdef FREECIV_JSON_CONNECTION
811 field_addr.name = "fields";
812#endif /* FREECIV_JSON_CONNECTION */
813 e = 0;
814 e |= DIO_BV_PUT(&dout, &field_addr, fields);
815 if (e) {
816 log_packet_detailed("fields bitvector error detected");
817 }
818
819 if (BV_ISSET(fields, 0)) {
820 log_packet_detailed(" field 'city_id' has changed");
821
822#ifdef FREECIV_JSON_CONNECTION
823 field_addr.name = "city_id";
824#endif /* FREECIV_JSON_CONNECTION */
825 e = 0;
826
827 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
828
829 if (e) {
830 log_packet_detailed("'city_id' field error detected");
831 }
832 }
833
834 *old = *real_packet;
835
836#else /* FREECIV_DELTA_PROTOCOL */
837#ifdef FREECIV_JSON_CONNECTION
838 field_addr.name = "city_id";
839#endif /* FREECIV_JSON_CONNECTION */
840 e = 0;
841
842 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
843
844 if (e) {
845 log_packet_detailed("'city_id' field error detected");
846 }
847#endif /* FREECIV_DELTA_PROTOCOL */
848
850}
851
853{
854 if (!pc->used) {
855 log_error("WARNING: trying to send data to the closed connection %s",
857 return -1;
858 }
859 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet != nullptr, -1,
860 "Handler for PACKET_INVESTIGATE_STARTED not installed");
861 return pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet(pc, packet);
862}
863
870
872{
873 struct packet_investigate_started packet, *real_packet = &packet;
874
876
878}
879
888
890{
891 memset(packet, 0, sizeof(*packet));
892}
893
894#define free_packet_investigate_finished(_packet) (void) 0
895#define destroy_packet_investigate_finished free
896
897#ifdef FREECIV_DELTA_PROTOCOL
898#define hash_packet_investigate_finished_100 hash_const
899#define cmp_packet_investigate_finished_100 cmp_const
901#endif /* FREECIV_DELTA_PROTOCOL */
902
904{
905#define FREE_PACKET_STRUCT(_packet) free_packet_investigate_finished(_packet)
907
908#ifdef FREECIV_JSON_CONNECTION
909 struct plocation field_addr;
910 {
914 }
915#endif /* FREECIV_JSON_CONNECTION */
916
917 log_packet_detailed("packet_investigate_finished_100: got info about ()");
918
919#ifdef FREECIV_DELTA_PROTOCOL
922 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_FINISHED;
923
924 if (nullptr == *hash) {
926 nullptr, nullptr, nullptr, destroy_packet_investigate_finished);
927 }
928
929 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
930 *real_packet = *old;
931 } else {
932 /* packet is already initialized empty */
933 log_packet_detailed(" no old info");
934 }
935
936#ifdef FREECIV_JSON_CONNECTION
937 field_addr.name = "fields";
938#endif /* FREECIV_JSON_CONNECTION */
939 DIO_BV_GET(&din, &field_addr, fields);
940
941 if (BV_ISSET(fields, 0)) {
942 log_packet_detailed(" got field 'city_id'");
943
944#ifdef FREECIV_JSON_CONNECTION
945 field_addr.name = "city_id";
946#endif /* FREECIV_JSON_CONNECTION */
947
948 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
950 }
951 }
952
953 if (nullptr == old) {
954 old = fc_malloc(sizeof(*old));
956 *old = *real_packet;
958 } else {
959 *old = *real_packet;
960 }
961
962#else /* FREECIV_DELTA_PROTOCOL */
963#ifdef FREECIV_JSON_CONNECTION
964 field_addr.name = "city_id";
965#endif /* FREECIV_JSON_CONNECTION */
966
967 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
969 }
970#endif /* FREECIV_DELTA_PROTOCOL */
971
973#undef FREE_PACKET_STRUCT
974}
975
977{
978 const struct packet_investigate_finished *real_packet = packet;
979 int e;
981
982 log_packet_detailed("packet_investigate_finished_100: sending info about ()");
983
984#ifdef FREECIV_DELTA_PROTOCOL
987 bool differ;
988 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_FINISHED;
989
990 if (nullptr == *hash) {
992 nullptr, nullptr, nullptr, destroy_packet_investigate_finished);
993 }
994 BV_CLR_ALL(fields);
995
996 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
997 old = fc_malloc(sizeof(*old));
998 /* temporary bitcopy just to insert correctly */
999 *old = *real_packet;
1002 }
1003
1004 differ = (old->city_id != real_packet->city_id);
1005 if (differ) {
1006 BV_SET(fields, 0);
1007 }
1008#endif /* FREECIV_DELTA_PROTOCOL */
1009
1010#ifdef FREECIV_JSON_CONNECTION
1011 struct plocation field_addr;
1012 {
1013 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1016 }
1017#endif /* FREECIV_JSON_CONNECTION */
1018
1019#ifdef FREECIV_DELTA_PROTOCOL
1020#ifdef FREECIV_JSON_CONNECTION
1021 field_addr.name = "fields";
1022#endif /* FREECIV_JSON_CONNECTION */
1023 e = 0;
1024 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1025 if (e) {
1026 log_packet_detailed("fields bitvector error detected");
1027 }
1028
1029 if (BV_ISSET(fields, 0)) {
1030 log_packet_detailed(" field 'city_id' has changed");
1031
1032#ifdef FREECIV_JSON_CONNECTION
1033 field_addr.name = "city_id";
1034#endif /* FREECIV_JSON_CONNECTION */
1035 e = 0;
1036
1037 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1038
1039 if (e) {
1040 log_packet_detailed("'city_id' field error detected");
1041 }
1042 }
1043
1044 *old = *real_packet;
1045
1046#else /* FREECIV_DELTA_PROTOCOL */
1047#ifdef FREECIV_JSON_CONNECTION
1048 field_addr.name = "city_id";
1049#endif /* FREECIV_JSON_CONNECTION */
1050 e = 0;
1051
1052 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1053
1054 if (e) {
1055 log_packet_detailed("'city_id' field error detected");
1056 }
1057#endif /* FREECIV_DELTA_PROTOCOL */
1058
1060}
1061
1063{
1064 if (!pc->used) {
1065 log_error("WARNING: trying to send data to the closed connection %s",
1067 return -1;
1068 }
1069 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet != nullptr, -1,
1070 "Handler for PACKET_INVESTIGATE_FINISHED not installed");
1071 return pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet(pc, packet);
1072}
1073
1080
1082{
1083 struct packet_investigate_finished packet, *real_packet = &packet;
1084
1086
1088}
1089
1091{
1092 struct packet_investigate_finished packet, *real_packet = &packet;
1093
1095
1097}
1098
1099static inline void init_packet_server_join_req(struct packet_server_join_req *packet)
1100{
1101 memset(packet, 0, sizeof(*packet));
1102}
1103
1104#define free_packet_server_join_req(_packet) (void) 0
1105#define destroy_packet_server_join_req free
1106
1108{
1109#define FREE_PACKET_STRUCT(_packet) free_packet_server_join_req(_packet)
1111
1112#ifdef FREECIV_JSON_CONNECTION
1113 struct plocation field_addr;
1114 {
1115 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1118 }
1119#endif /* FREECIV_JSON_CONNECTION */
1120
1121 log_packet_detailed("packet_server_join_req_100: got info about ()");
1122
1123#ifdef FREECIV_JSON_CONNECTION
1124 field_addr.name = "username";
1125#endif /* FREECIV_JSON_CONNECTION */
1126
1127 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
1129 }
1130
1131#ifdef FREECIV_JSON_CONNECTION
1132 field_addr.name = "capability";
1133#endif /* FREECIV_JSON_CONNECTION */
1134
1135 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1136 RECEIVE_PACKET_FIELD_ERROR(capability);
1137 }
1138
1139#ifdef FREECIV_JSON_CONNECTION
1140 field_addr.name = "version_label";
1141#endif /* FREECIV_JSON_CONNECTION */
1142
1143 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
1144 RECEIVE_PACKET_FIELD_ERROR(version_label);
1145 }
1146
1147#ifdef FREECIV_JSON_CONNECTION
1148 field_addr.name = "major_version";
1149#endif /* FREECIV_JSON_CONNECTION */
1150
1151 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
1152 RECEIVE_PACKET_FIELD_ERROR(major_version);
1153 }
1154
1155#ifdef FREECIV_JSON_CONNECTION
1156 field_addr.name = "minor_version";
1157#endif /* FREECIV_JSON_CONNECTION */
1158
1159 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
1160 RECEIVE_PACKET_FIELD_ERROR(minor_version);
1161 }
1162
1163#ifdef FREECIV_JSON_CONNECTION
1164 field_addr.name = "patch_version";
1165#endif /* FREECIV_JSON_CONNECTION */
1166
1167 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
1168 RECEIVE_PACKET_FIELD_ERROR(patch_version);
1169 }
1170
1172#undef FREE_PACKET_STRUCT
1173}
1174
1176{
1177 const struct packet_server_join_req *real_packet = packet;
1178 int e;
1180
1181 log_packet_detailed("packet_server_join_req_100: sending info about ()");
1182
1183#ifdef FREECIV_JSON_CONNECTION
1184 struct plocation field_addr;
1185 {
1186 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1189 }
1190#endif /* FREECIV_JSON_CONNECTION */
1191
1192#ifdef FREECIV_JSON_CONNECTION
1193 field_addr.name = "username";
1194#endif /* FREECIV_JSON_CONNECTION */
1195 e = 0;
1196
1197 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
1198
1199 if (e) {
1200 log_packet_detailed("'username' field error detected");
1201 }
1202
1203#ifdef FREECIV_JSON_CONNECTION
1204 field_addr.name = "capability";
1205#endif /* FREECIV_JSON_CONNECTION */
1206 e = 0;
1207
1208 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1209
1210 if (e) {
1211 log_packet_detailed("'capability' field error detected");
1212 }
1213
1214#ifdef FREECIV_JSON_CONNECTION
1215 field_addr.name = "version_label";
1216#endif /* FREECIV_JSON_CONNECTION */
1217 e = 0;
1218
1219 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
1220
1221 if (e) {
1222 log_packet_detailed("'version_label' field error detected");
1223 }
1224
1225#ifdef FREECIV_JSON_CONNECTION
1226 field_addr.name = "major_version";
1227#endif /* FREECIV_JSON_CONNECTION */
1228 e = 0;
1229
1230 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
1231
1232 if (e) {
1233 log_packet_detailed("'major_version' field error detected");
1234 }
1235
1236#ifdef FREECIV_JSON_CONNECTION
1237 field_addr.name = "minor_version";
1238#endif /* FREECIV_JSON_CONNECTION */
1239 e = 0;
1240
1241 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
1242
1243 if (e) {
1244 log_packet_detailed("'minor_version' field error detected");
1245 }
1246
1247#ifdef FREECIV_JSON_CONNECTION
1248 field_addr.name = "patch_version";
1249#endif /* FREECIV_JSON_CONNECTION */
1250 e = 0;
1251
1252 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
1253
1254 if (e) {
1255 log_packet_detailed("'patch_version' field error detected");
1256 }
1257
1259}
1260
1262{
1263 if (!pc->used) {
1264 log_error("WARNING: trying to send data to the closed connection %s",
1266 return -1;
1267 }
1268 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet != nullptr, -1,
1269 "Handler for PACKET_SERVER_JOIN_REQ not installed");
1270 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet(pc, packet);
1271}
1272
1273int 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)
1274{
1275 struct packet_server_join_req packet, *real_packet = &packet;
1276
1277 sz_strlcpy(real_packet->username, username);
1278 sz_strlcpy(real_packet->capability, capability);
1279 sz_strlcpy(real_packet->version_label, version_label);
1280 real_packet->major_version = major_version;
1281 real_packet->minor_version = minor_version;
1282 real_packet->patch_version = patch_version;
1283
1285}
1286
1288{
1289 memset(packet, 0, sizeof(*packet));
1290}
1291
1292#define free_packet_server_join_reply(_packet) (void) 0
1293#define destroy_packet_server_join_reply free
1294
1296{
1297#define FREE_PACKET_STRUCT(_packet) free_packet_server_join_reply(_packet)
1299
1300#ifdef FREECIV_JSON_CONNECTION
1301 struct plocation field_addr;
1302 {
1303 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1306 }
1307#endif /* FREECIV_JSON_CONNECTION */
1308
1309 log_packet_detailed("packet_server_join_reply_100: got info about ()");
1310
1311#ifdef FREECIV_JSON_CONNECTION
1312 field_addr.name = "you_can_join";
1313#endif /* FREECIV_JSON_CONNECTION */
1314
1315 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_can_join)) {
1316 RECEIVE_PACKET_FIELD_ERROR(you_can_join);
1317 }
1318
1319#ifdef FREECIV_JSON_CONNECTION
1320 field_addr.name = "message";
1321#endif /* FREECIV_JSON_CONNECTION */
1322
1323 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1325 }
1326
1327#ifdef FREECIV_JSON_CONNECTION
1328 field_addr.name = "capability";
1329#endif /* FREECIV_JSON_CONNECTION */
1330
1331 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1332 RECEIVE_PACKET_FIELD_ERROR(capability);
1333 }
1334
1335#ifdef FREECIV_JSON_CONNECTION
1336 field_addr.name = "challenge_file";
1337#endif /* FREECIV_JSON_CONNECTION */
1338
1339 if (!DIO_GET(string, &din, &field_addr, real_packet->challenge_file, sizeof(real_packet->challenge_file))) {
1340 RECEIVE_PACKET_FIELD_ERROR(challenge_file);
1341 }
1342
1343#ifdef FREECIV_JSON_CONNECTION
1344 field_addr.name = "conn_id";
1345#endif /* FREECIV_JSON_CONNECTION */
1346
1347 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
1349 }
1350
1353#undef FREE_PACKET_STRUCT
1354}
1355
1357{
1358 const struct packet_server_join_reply *real_packet = packet;
1359 int e;
1361
1362 log_packet_detailed("packet_server_join_reply_100: sending info about ()");
1363
1364#ifdef FREECIV_JSON_CONNECTION
1365 struct plocation field_addr;
1366 {
1367 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1370 }
1371#endif /* FREECIV_JSON_CONNECTION */
1372
1373#ifdef FREECIV_JSON_CONNECTION
1374 field_addr.name = "you_can_join";
1375#endif /* FREECIV_JSON_CONNECTION */
1376 e = 0;
1377
1378 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_can_join);
1379
1380 if (e) {
1381 log_packet_detailed("'you_can_join' field error detected");
1382 }
1383
1384#ifdef FREECIV_JSON_CONNECTION
1385 field_addr.name = "message";
1386#endif /* FREECIV_JSON_CONNECTION */
1387 e = 0;
1388
1389 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1390
1391 if (e) {
1392 log_packet_detailed("'message' field error detected");
1393 }
1394
1395#ifdef FREECIV_JSON_CONNECTION
1396 field_addr.name = "capability";
1397#endif /* FREECIV_JSON_CONNECTION */
1398 e = 0;
1399
1400 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1401
1402 if (e) {
1403 log_packet_detailed("'capability' field error detected");
1404 }
1405
1406#ifdef FREECIV_JSON_CONNECTION
1407 field_addr.name = "challenge_file";
1408#endif /* FREECIV_JSON_CONNECTION */
1409 e = 0;
1410
1411 e |= DIO_PUT(string, &dout, &field_addr, real_packet->challenge_file);
1412
1413 if (e) {
1414 log_packet_detailed("'challenge_file' field error detected");
1415 }
1416
1417#ifdef FREECIV_JSON_CONNECTION
1418 field_addr.name = "conn_id";
1419#endif /* FREECIV_JSON_CONNECTION */
1420 e = 0;
1421
1422 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
1423
1424 if (e) {
1425 log_packet_detailed("'conn_id' field error detected");
1426 }
1427
1430}
1431
1433{
1434 if (!pc->used) {
1435 log_error("WARNING: trying to send data to the closed connection %s",
1437 return -1;
1438 }
1439 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet != nullptr, -1,
1440 "Handler for PACKET_SERVER_JOIN_REPLY not installed");
1441 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet(pc, packet);
1442}
1443
1445{
1446 memset(packet, 0, sizeof(*packet));
1447}
1448
1449#define free_packet_authentication_req(_packet) (void) 0
1450#define destroy_packet_authentication_req free
1451
1452#ifdef FREECIV_DELTA_PROTOCOL
1453#define hash_packet_authentication_req_100 hash_const
1454#define cmp_packet_authentication_req_100 cmp_const
1456#endif /* FREECIV_DELTA_PROTOCOL */
1457
1459{
1460#define FREE_PACKET_STRUCT(_packet) free_packet_authentication_req(_packet)
1462
1463#ifdef FREECIV_JSON_CONNECTION
1464 struct plocation field_addr;
1465 {
1466 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1469 }
1470#endif /* FREECIV_JSON_CONNECTION */
1471
1472 log_packet_detailed("packet_authentication_req_100: got info about ()");
1473
1474#ifdef FREECIV_DELTA_PROTOCOL
1477 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REQ;
1478
1479 if (nullptr == *hash) {
1481 nullptr, nullptr, nullptr, destroy_packet_authentication_req);
1482 }
1483
1484 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1485 *real_packet = *old;
1486 } else {
1487 /* packet is already initialized empty */
1488 log_packet_detailed(" no old info");
1489 }
1490
1491#ifdef FREECIV_JSON_CONNECTION
1492 field_addr.name = "fields";
1493#endif /* FREECIV_JSON_CONNECTION */
1494 DIO_BV_GET(&din, &field_addr, fields);
1495
1496 if (BV_ISSET(fields, 0)) {
1497 log_packet_detailed(" got field 'type'");
1498
1499#ifdef FREECIV_JSON_CONNECTION
1500 field_addr.name = "type";
1501#endif /* FREECIV_JSON_CONNECTION */
1502
1503 {
1504 int readin;
1505
1506 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1508 }
1509 real_packet->type = readin;
1510 }
1511 }
1512
1513 if (BV_ISSET(fields, 1)) {
1514 log_packet_detailed(" got field 'message'");
1515
1516#ifdef FREECIV_JSON_CONNECTION
1517 field_addr.name = "message";
1518#endif /* FREECIV_JSON_CONNECTION */
1519
1520 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1522 }
1523 }
1524
1525 if (nullptr == old) {
1526 old = fc_malloc(sizeof(*old));
1528 *old = *real_packet;
1530 } else {
1531 *old = *real_packet;
1532 }
1533
1534#else /* FREECIV_DELTA_PROTOCOL */
1535#ifdef FREECIV_JSON_CONNECTION
1536 field_addr.name = "type";
1537#endif /* FREECIV_JSON_CONNECTION */
1538
1539 {
1540 int readin;
1541
1542 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1544 }
1545 real_packet->type = readin;
1546 }
1547
1548#ifdef FREECIV_JSON_CONNECTION
1549 field_addr.name = "message";
1550#endif /* FREECIV_JSON_CONNECTION */
1551
1552 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1554 }
1555#endif /* FREECIV_DELTA_PROTOCOL */
1556
1558#undef FREE_PACKET_STRUCT
1559}
1560
1562{
1563 const struct packet_authentication_req *real_packet = packet;
1564 int e;
1566
1567 log_packet_detailed("packet_authentication_req_100: sending info about ()");
1568
1569#ifdef FREECIV_DELTA_PROTOCOL
1572 bool differ;
1573 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REQ;
1574
1575 if (nullptr == *hash) {
1577 nullptr, nullptr, nullptr, destroy_packet_authentication_req);
1578 }
1579 BV_CLR_ALL(fields);
1580
1581 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1582 old = fc_malloc(sizeof(*old));
1583 /* temporary bitcopy just to insert correctly */
1584 *old = *real_packet;
1587 }
1588
1589 differ = (old->type != real_packet->type);
1590 if (differ) {
1591 BV_SET(fields, 0);
1592 }
1593
1594 differ = (strcmp(old->message, real_packet->message) != 0);
1595 if (differ) {
1596 BV_SET(fields, 1);
1597 }
1598#endif /* FREECIV_DELTA_PROTOCOL */
1599
1600#ifdef FREECIV_JSON_CONNECTION
1601 struct plocation field_addr;
1602 {
1603 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1606 }
1607#endif /* FREECIV_JSON_CONNECTION */
1608
1609#ifdef FREECIV_DELTA_PROTOCOL
1610#ifdef FREECIV_JSON_CONNECTION
1611 field_addr.name = "fields";
1612#endif /* FREECIV_JSON_CONNECTION */
1613 e = 0;
1614 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1615 if (e) {
1616 log_packet_detailed("fields bitvector error detected");
1617 }
1618
1619 if (BV_ISSET(fields, 0)) {
1620 log_packet_detailed(" field 'type' has changed");
1621
1622#ifdef FREECIV_JSON_CONNECTION
1623 field_addr.name = "type";
1624#endif /* FREECIV_JSON_CONNECTION */
1625 e = 0;
1626
1627 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
1628
1629 if (e) {
1630 log_packet_detailed("'type' field error detected");
1631 }
1632 }
1633
1634 if (BV_ISSET(fields, 1)) {
1635 log_packet_detailed(" field 'message' has changed");
1636
1637#ifdef FREECIV_JSON_CONNECTION
1638 field_addr.name = "message";
1639#endif /* FREECIV_JSON_CONNECTION */
1640 e = 0;
1641
1642 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1643
1644 if (e) {
1645 log_packet_detailed("'message' field error detected");
1646 }
1647 }
1648
1649 *old = *real_packet;
1650
1651#else /* FREECIV_DELTA_PROTOCOL */
1652#ifdef FREECIV_JSON_CONNECTION
1653 field_addr.name = "type";
1654#endif /* FREECIV_JSON_CONNECTION */
1655 e = 0;
1656
1657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
1658
1659 if (e) {
1660 log_packet_detailed("'type' field error detected");
1661 }
1662
1663#ifdef FREECIV_JSON_CONNECTION
1664 field_addr.name = "message";
1665#endif /* FREECIV_JSON_CONNECTION */
1666 e = 0;
1667
1668 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1669
1670 if (e) {
1671 log_packet_detailed("'message' field error detected");
1672 }
1673#endif /* FREECIV_DELTA_PROTOCOL */
1674
1676}
1677
1679{
1680 if (!pc->used) {
1681 log_error("WARNING: trying to send data to the closed connection %s",
1683 return -1;
1684 }
1685 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet != nullptr, -1,
1686 "Handler for PACKET_AUTHENTICATION_REQ not installed");
1687 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet(pc, packet);
1688}
1689
1691{
1692 struct packet_authentication_req packet, *real_packet = &packet;
1693
1695 sz_strlcpy(real_packet->message, message);
1696
1698}
1699
1701{
1702 memset(packet, 0, sizeof(*packet));
1703}
1704
1705#define free_packet_authentication_reply(_packet) (void) 0
1706#define destroy_packet_authentication_reply free
1707
1708#ifdef FREECIV_DELTA_PROTOCOL
1709#define hash_packet_authentication_reply_100 hash_const
1710#define cmp_packet_authentication_reply_100 cmp_const
1712#endif /* FREECIV_DELTA_PROTOCOL */
1713
1715{
1716#define FREE_PACKET_STRUCT(_packet) free_packet_authentication_reply(_packet)
1718
1719#ifdef FREECIV_JSON_CONNECTION
1720 struct plocation field_addr;
1721 {
1722 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1725 }
1726#endif /* FREECIV_JSON_CONNECTION */
1727
1728 log_packet_detailed("packet_authentication_reply_100: got info about ()");
1729
1730#ifdef FREECIV_DELTA_PROTOCOL
1733 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REPLY;
1734
1735 if (nullptr == *hash) {
1737 nullptr, nullptr, nullptr, destroy_packet_authentication_reply);
1738 }
1739
1740 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1741 *real_packet = *old;
1742 } else {
1743 /* packet is already initialized empty */
1744 log_packet_detailed(" no old info");
1745 }
1746
1747#ifdef FREECIV_JSON_CONNECTION
1748 field_addr.name = "fields";
1749#endif /* FREECIV_JSON_CONNECTION */
1750 DIO_BV_GET(&din, &field_addr, fields);
1751
1752 if (BV_ISSET(fields, 0)) {
1753 log_packet_detailed(" got field 'password'");
1754
1755#ifdef FREECIV_JSON_CONNECTION
1756 field_addr.name = "password";
1757#endif /* FREECIV_JSON_CONNECTION */
1758
1759 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
1761 }
1762 }
1763
1764 if (nullptr == old) {
1765 old = fc_malloc(sizeof(*old));
1767 *old = *real_packet;
1769 } else {
1770 *old = *real_packet;
1771 }
1772
1773#else /* FREECIV_DELTA_PROTOCOL */
1774#ifdef FREECIV_JSON_CONNECTION
1775 field_addr.name = "password";
1776#endif /* FREECIV_JSON_CONNECTION */
1777
1778 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
1780 }
1781#endif /* FREECIV_DELTA_PROTOCOL */
1782
1784#undef FREE_PACKET_STRUCT
1785}
1786
1788{
1789 const struct packet_authentication_reply *real_packet = packet;
1790 int e;
1792
1793 log_packet_detailed("packet_authentication_reply_100: sending info about ()");
1794
1795#ifdef FREECIV_DELTA_PROTOCOL
1798 bool differ;
1799 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REPLY;
1800
1801 if (nullptr == *hash) {
1803 nullptr, nullptr, nullptr, destroy_packet_authentication_reply);
1804 }
1805 BV_CLR_ALL(fields);
1806
1807 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1808 old = fc_malloc(sizeof(*old));
1809 /* temporary bitcopy just to insert correctly */
1810 *old = *real_packet;
1813 }
1814
1815 differ = (strcmp(old->password, real_packet->password) != 0);
1816 if (differ) {
1817 BV_SET(fields, 0);
1818 }
1819#endif /* FREECIV_DELTA_PROTOCOL */
1820
1821#ifdef FREECIV_JSON_CONNECTION
1822 struct plocation field_addr;
1823 {
1824 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1827 }
1828#endif /* FREECIV_JSON_CONNECTION */
1829
1830#ifdef FREECIV_DELTA_PROTOCOL
1831#ifdef FREECIV_JSON_CONNECTION
1832 field_addr.name = "fields";
1833#endif /* FREECIV_JSON_CONNECTION */
1834 e = 0;
1835 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1836 if (e) {
1837 log_packet_detailed("fields bitvector error detected");
1838 }
1839
1840 if (BV_ISSET(fields, 0)) {
1841 log_packet_detailed(" field 'password' has changed");
1842
1843#ifdef FREECIV_JSON_CONNECTION
1844 field_addr.name = "password";
1845#endif /* FREECIV_JSON_CONNECTION */
1846 e = 0;
1847
1848 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
1849
1850 if (e) {
1851 log_packet_detailed("'password' field error detected");
1852 }
1853 }
1854
1855 *old = *real_packet;
1856
1857#else /* FREECIV_DELTA_PROTOCOL */
1858#ifdef FREECIV_JSON_CONNECTION
1859 field_addr.name = "password";
1860#endif /* FREECIV_JSON_CONNECTION */
1861 e = 0;
1862
1863 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
1864
1865 if (e) {
1866 log_packet_detailed("'password' field error detected");
1867 }
1868#endif /* FREECIV_DELTA_PROTOCOL */
1869
1871}
1872
1874{
1875 if (!pc->used) {
1876 log_error("WARNING: trying to send data to the closed connection %s",
1878 return -1;
1879 }
1880 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet != nullptr, -1,
1881 "Handler for PACKET_AUTHENTICATION_REPLY not installed");
1882 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet(pc, packet);
1883}
1884
1885static inline void init_packet_server_shutdown(struct packet_server_shutdown *packet)
1886{
1887 memset(packet, 0, sizeof(*packet));
1888}
1889
1890#define free_packet_server_shutdown(_packet) (void) 0
1891#define destroy_packet_server_shutdown free
1892
1894{
1895#define FREE_PACKET_STRUCT(_packet) free_packet_server_shutdown(_packet)
1897
1898 log_packet_detailed("packet_server_shutdown_100: got info about ()");
1899
1900 real_packet->__dummy = 0xff;
1901
1903#undef FREE_PACKET_STRUCT
1904}
1905
1907{
1909
1910 log_packet_detailed("packet_server_shutdown_100: sending info about ()");
1911
1913}
1914
1916{
1917 if (!pc->used) {
1918 log_error("WARNING: trying to send data to the closed connection %s",
1920 return -1;
1921 }
1922 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet != nullptr, -1,
1923 "Handler for PACKET_SERVER_SHUTDOWN not installed");
1924 return pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet(pc);
1925}
1926
1933
1935{
1936 memset(packet, 0, sizeof(*packet));
1937}
1938
1939#define free_packet_nation_select_req(_packet) (void) 0
1940#define destroy_packet_nation_select_req free
1941
1942#ifdef FREECIV_DELTA_PROTOCOL
1943#define hash_packet_nation_select_req_100 hash_const
1944#define cmp_packet_nation_select_req_100 cmp_const
1946#endif /* FREECIV_DELTA_PROTOCOL */
1947
1949{
1950#define FREE_PACKET_STRUCT(_packet) free_packet_nation_select_req(_packet)
1952
1953#ifdef FREECIV_JSON_CONNECTION
1954 struct plocation field_addr;
1955 {
1956 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
1959 }
1960#endif /* FREECIV_JSON_CONNECTION */
1961
1962 log_packet_detailed("packet_nation_select_req_100: got info about ()");
1963
1964#ifdef FREECIV_DELTA_PROTOCOL
1967 struct genhash **hash = pc->phs.received + PACKET_NATION_SELECT_REQ;
1968
1969 if (nullptr == *hash) {
1971 nullptr, nullptr, nullptr, destroy_packet_nation_select_req);
1972 }
1973
1974 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1975 *real_packet = *old;
1976 } else {
1977 /* packet is already initialized empty */
1978 log_packet_detailed(" no old info");
1979 }
1980
1981#ifdef FREECIV_JSON_CONNECTION
1982 field_addr.name = "fields";
1983#endif /* FREECIV_JSON_CONNECTION */
1984 DIO_BV_GET(&din, &field_addr, fields);
1985
1986 if (BV_ISSET(fields, 0)) {
1987 log_packet_detailed(" got field 'player_no'");
1988
1989#ifdef FREECIV_JSON_CONNECTION
1990 field_addr.name = "player_no";
1991#endif /* FREECIV_JSON_CONNECTION */
1992
1993 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
1994 RECEIVE_PACKET_FIELD_ERROR(player_no);
1995 }
1996 }
1997
1998 if (BV_ISSET(fields, 1)) {
1999 log_packet_detailed(" got field 'nation_no'");
2000
2001#ifdef FREECIV_JSON_CONNECTION
2002 field_addr.name = "nation_no";
2003#endif /* FREECIV_JSON_CONNECTION */
2004
2005 {
2006 int readin;
2007
2008 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2009 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2010 }
2011 real_packet->nation_no = readin;
2012 }
2013 }
2014
2015 real_packet->is_male = BV_ISSET(fields, 2);
2016
2017 if (BV_ISSET(fields, 3)) {
2018 log_packet_detailed(" got field 'name'");
2019
2020#ifdef FREECIV_JSON_CONNECTION
2021 field_addr.name = "name";
2022#endif /* FREECIV_JSON_CONNECTION */
2023
2024 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2026 }
2027 }
2028
2029 if (BV_ISSET(fields, 4)) {
2030 log_packet_detailed(" got field 'style'");
2031
2032#ifdef FREECIV_JSON_CONNECTION
2033 field_addr.name = "style";
2034#endif /* FREECIV_JSON_CONNECTION */
2035
2036 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2038 }
2039 }
2040
2041 if (nullptr == old) {
2042 old = fc_malloc(sizeof(*old));
2044 *old = *real_packet;
2046 } else {
2047 *old = *real_packet;
2048 }
2049
2050#else /* FREECIV_DELTA_PROTOCOL */
2051#ifdef FREECIV_JSON_CONNECTION
2052 field_addr.name = "player_no";
2053#endif /* FREECIV_JSON_CONNECTION */
2054
2055 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2056 RECEIVE_PACKET_FIELD_ERROR(player_no);
2057 }
2058
2059#ifdef FREECIV_JSON_CONNECTION
2060 field_addr.name = "nation_no";
2061#endif /* FREECIV_JSON_CONNECTION */
2062
2063 {
2064 int readin;
2065
2066 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2067 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2068 }
2069 real_packet->nation_no = readin;
2070 }
2071
2072#ifdef FREECIV_JSON_CONNECTION
2073 field_addr.name = "is_male";
2074#endif /* FREECIV_JSON_CONNECTION */
2075
2076 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
2078 }
2079
2080#ifdef FREECIV_JSON_CONNECTION
2081 field_addr.name = "name";
2082#endif /* FREECIV_JSON_CONNECTION */
2083
2084 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2086 }
2087
2088#ifdef FREECIV_JSON_CONNECTION
2089 field_addr.name = "style";
2090#endif /* FREECIV_JSON_CONNECTION */
2091
2092 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2094 }
2095#endif /* FREECIV_DELTA_PROTOCOL */
2096
2098#undef FREE_PACKET_STRUCT
2099}
2100
2102{
2103 const struct packet_nation_select_req *real_packet = packet;
2104 int e;
2106
2107 log_packet_detailed("packet_nation_select_req_100: sending info about ()");
2108
2109#ifdef FREECIV_DELTA_PROTOCOL
2112 bool differ;
2113 struct genhash **hash = pc->phs.sent + PACKET_NATION_SELECT_REQ;
2114
2115 if (nullptr == *hash) {
2117 nullptr, nullptr, nullptr, destroy_packet_nation_select_req);
2118 }
2119 BV_CLR_ALL(fields);
2120
2121 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2122 old = fc_malloc(sizeof(*old));
2123 /* temporary bitcopy just to insert correctly */
2124 *old = *real_packet;
2127 }
2128
2129 differ = (old->player_no != real_packet->player_no);
2130 if (differ) {
2131 BV_SET(fields, 0);
2132 }
2133
2134 differ = (old->nation_no != real_packet->nation_no);
2135 if (differ) {
2136 BV_SET(fields, 1);
2137 }
2138
2139 /* folded into head */
2140 if (real_packet->is_male) {
2141 BV_SET(fields, 2);
2142 }
2143
2144 differ = (strcmp(old->name, real_packet->name) != 0);
2145 if (differ) {
2146 BV_SET(fields, 3);
2147 }
2148
2149 differ = (old->style != real_packet->style);
2150 if (differ) {
2151 BV_SET(fields, 4);
2152 }
2153#endif /* FREECIV_DELTA_PROTOCOL */
2154
2155#ifdef FREECIV_JSON_CONNECTION
2156 struct plocation field_addr;
2157 {
2158 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2161 }
2162#endif /* FREECIV_JSON_CONNECTION */
2163
2164#ifdef FREECIV_DELTA_PROTOCOL
2165#ifdef FREECIV_JSON_CONNECTION
2166 field_addr.name = "fields";
2167#endif /* FREECIV_JSON_CONNECTION */
2168 e = 0;
2169 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2170 if (e) {
2171 log_packet_detailed("fields bitvector error detected");
2172 }
2173
2174 if (BV_ISSET(fields, 0)) {
2175 log_packet_detailed(" field 'player_no' has changed");
2176
2177#ifdef FREECIV_JSON_CONNECTION
2178 field_addr.name = "player_no";
2179#endif /* FREECIV_JSON_CONNECTION */
2180 e = 0;
2181
2182 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2183
2184 if (e) {
2185 log_packet_detailed("'player_no' field error detected");
2186 }
2187 }
2188
2189 if (BV_ISSET(fields, 1)) {
2190 log_packet_detailed(" field 'nation_no' has changed");
2191
2192#ifdef FREECIV_JSON_CONNECTION
2193 field_addr.name = "nation_no";
2194#endif /* FREECIV_JSON_CONNECTION */
2195 e = 0;
2196
2197 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2198
2199 if (e) {
2200 log_packet_detailed("'nation_no' field error detected");
2201 }
2202 }
2203
2204 /* field 2 is folded into the header */
2205
2206 if (BV_ISSET(fields, 3)) {
2207 log_packet_detailed(" field 'name' has changed");
2208
2209#ifdef FREECIV_JSON_CONNECTION
2210 field_addr.name = "name";
2211#endif /* FREECIV_JSON_CONNECTION */
2212 e = 0;
2213
2214 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2215
2216 if (e) {
2217 log_packet_detailed("'name' field error detected");
2218 }
2219 }
2220
2221 if (BV_ISSET(fields, 4)) {
2222 log_packet_detailed(" field 'style' has changed");
2223
2224#ifdef FREECIV_JSON_CONNECTION
2225 field_addr.name = "style";
2226#endif /* FREECIV_JSON_CONNECTION */
2227 e = 0;
2228
2229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2230
2231 if (e) {
2232 log_packet_detailed("'style' field error detected");
2233 }
2234 }
2235
2236 *old = *real_packet;
2237
2238#else /* FREECIV_DELTA_PROTOCOL */
2239#ifdef FREECIV_JSON_CONNECTION
2240 field_addr.name = "player_no";
2241#endif /* FREECIV_JSON_CONNECTION */
2242 e = 0;
2243
2244 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2245
2246 if (e) {
2247 log_packet_detailed("'player_no' field error detected");
2248 }
2249
2250#ifdef FREECIV_JSON_CONNECTION
2251 field_addr.name = "nation_no";
2252#endif /* FREECIV_JSON_CONNECTION */
2253 e = 0;
2254
2255 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2256
2257 if (e) {
2258 log_packet_detailed("'nation_no' field error detected");
2259 }
2260
2261#ifdef FREECIV_JSON_CONNECTION
2262 field_addr.name = "is_male";
2263#endif /* FREECIV_JSON_CONNECTION */
2264 e = 0;
2265
2266 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
2267
2268 if (e) {
2269 log_packet_detailed("'is_male' field error detected");
2270 }
2271
2272#ifdef FREECIV_JSON_CONNECTION
2273 field_addr.name = "name";
2274#endif /* FREECIV_JSON_CONNECTION */
2275 e = 0;
2276
2277 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2278
2279 if (e) {
2280 log_packet_detailed("'name' field error detected");
2281 }
2282
2283#ifdef FREECIV_JSON_CONNECTION
2284 field_addr.name = "style";
2285#endif /* FREECIV_JSON_CONNECTION */
2286 e = 0;
2287
2288 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2289
2290 if (e) {
2291 log_packet_detailed("'style' field error detected");
2292 }
2293#endif /* FREECIV_DELTA_PROTOCOL */
2294
2296}
2297
2299{
2300 if (!pc->used) {
2301 log_error("WARNING: trying to send data to the closed connection %s",
2303 return -1;
2304 }
2305 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet != nullptr, -1,
2306 "Handler for PACKET_NATION_SELECT_REQ not installed");
2307 return pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet(pc, packet);
2308}
2309
2310int dsend_packet_nation_select_req(struct connection *pc, int player_no, Nation_type_id nation_no, bool is_male, const char *name, int style)
2311{
2312 struct packet_nation_select_req packet, *real_packet = &packet;
2313
2315 real_packet->nation_no = nation_no;
2316 real_packet->is_male = is_male;
2317 sz_strlcpy(real_packet->name, name);
2318 real_packet->style = style;
2319
2321}
2322
2323static inline void init_packet_player_ready(struct packet_player_ready *packet)
2324{
2325 memset(packet, 0, sizeof(*packet));
2326}
2327
2328#define free_packet_player_ready(_packet) (void) 0
2329#define destroy_packet_player_ready free
2330
2331#ifdef FREECIV_DELTA_PROTOCOL
2332#define hash_packet_player_ready_100 hash_const
2333#define cmp_packet_player_ready_100 cmp_const
2335#endif /* FREECIV_DELTA_PROTOCOL */
2336
2338{
2339#define FREE_PACKET_STRUCT(_packet) free_packet_player_ready(_packet)
2341
2342#ifdef FREECIV_JSON_CONNECTION
2343 struct plocation field_addr;
2344 {
2345 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2348 }
2349#endif /* FREECIV_JSON_CONNECTION */
2350
2351 log_packet_detailed("packet_player_ready_100: got info about ()");
2352
2353#ifdef FREECIV_DELTA_PROTOCOL
2355 struct packet_player_ready *old;
2356 struct genhash **hash = pc->phs.received + PACKET_PLAYER_READY;
2357
2358 if (nullptr == *hash) {
2360 nullptr, nullptr, nullptr, destroy_packet_player_ready);
2361 }
2362
2363 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2364 *real_packet = *old;
2365 } else {
2366 /* packet is already initialized empty */
2367 log_packet_detailed(" no old info");
2368 }
2369
2370#ifdef FREECIV_JSON_CONNECTION
2371 field_addr.name = "fields";
2372#endif /* FREECIV_JSON_CONNECTION */
2373 DIO_BV_GET(&din, &field_addr, fields);
2374
2375 if (BV_ISSET(fields, 0)) {
2376 log_packet_detailed(" got field 'player_no'");
2377
2378#ifdef FREECIV_JSON_CONNECTION
2379 field_addr.name = "player_no";
2380#endif /* FREECIV_JSON_CONNECTION */
2381
2382 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2383 RECEIVE_PACKET_FIELD_ERROR(player_no);
2384 }
2385 }
2386
2387 real_packet->is_ready = BV_ISSET(fields, 1);
2388
2389 if (nullptr == old) {
2390 old = fc_malloc(sizeof(*old));
2392 *old = *real_packet;
2394 } else {
2395 *old = *real_packet;
2396 }
2397
2398#else /* FREECIV_DELTA_PROTOCOL */
2399#ifdef FREECIV_JSON_CONNECTION
2400 field_addr.name = "player_no";
2401#endif /* FREECIV_JSON_CONNECTION */
2402
2403 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_no)) {
2404 RECEIVE_PACKET_FIELD_ERROR(player_no);
2405 }
2406
2407#ifdef FREECIV_JSON_CONNECTION
2408 field_addr.name = "is_ready";
2409#endif /* FREECIV_JSON_CONNECTION */
2410
2411 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
2413 }
2414#endif /* FREECIV_DELTA_PROTOCOL */
2415
2417#undef FREE_PACKET_STRUCT
2418}
2419
2420static int send_packet_player_ready_100(struct connection *pc, const struct packet_player_ready *packet)
2421{
2422 const struct packet_player_ready *real_packet = packet;
2423 int e;
2425
2426 log_packet_detailed("packet_player_ready_100: sending info about ()");
2427
2428#ifdef FREECIV_DELTA_PROTOCOL
2430 struct packet_player_ready *old;
2431 bool differ;
2432 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_READY;
2433
2434 if (nullptr == *hash) {
2436 nullptr, nullptr, nullptr, destroy_packet_player_ready);
2437 }
2438 BV_CLR_ALL(fields);
2439
2440 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2441 old = fc_malloc(sizeof(*old));
2442 /* temporary bitcopy just to insert correctly */
2443 *old = *real_packet;
2446 }
2447
2448 differ = (old->player_no != real_packet->player_no);
2449 if (differ) {
2450 BV_SET(fields, 0);
2451 }
2452
2453 /* folded into head */
2454 if (real_packet->is_ready) {
2455 BV_SET(fields, 1);
2456 }
2457#endif /* FREECIV_DELTA_PROTOCOL */
2458
2459#ifdef FREECIV_JSON_CONNECTION
2460 struct plocation field_addr;
2461 {
2462 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2465 }
2466#endif /* FREECIV_JSON_CONNECTION */
2467
2468#ifdef FREECIV_DELTA_PROTOCOL
2469#ifdef FREECIV_JSON_CONNECTION
2470 field_addr.name = "fields";
2471#endif /* FREECIV_JSON_CONNECTION */
2472 e = 0;
2473 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2474 if (e) {
2475 log_packet_detailed("fields bitvector error detected");
2476 }
2477
2478 if (BV_ISSET(fields, 0)) {
2479 log_packet_detailed(" field 'player_no' has changed");
2480
2481#ifdef FREECIV_JSON_CONNECTION
2482 field_addr.name = "player_no";
2483#endif /* FREECIV_JSON_CONNECTION */
2484 e = 0;
2485
2486 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2487
2488 if (e) {
2489 log_packet_detailed("'player_no' field error detected");
2490 }
2491 }
2492
2493 /* field 1 is folded into the header */
2494
2495 *old = *real_packet;
2496
2497#else /* FREECIV_DELTA_PROTOCOL */
2498#ifdef FREECIV_JSON_CONNECTION
2499 field_addr.name = "player_no";
2500#endif /* FREECIV_JSON_CONNECTION */
2501 e = 0;
2502
2503 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_no);
2504
2505 if (e) {
2506 log_packet_detailed("'player_no' field error detected");
2507 }
2508
2509#ifdef FREECIV_JSON_CONNECTION
2510 field_addr.name = "is_ready";
2511#endif /* FREECIV_JSON_CONNECTION */
2512 e = 0;
2513
2514 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
2515
2516 if (e) {
2517 log_packet_detailed("'is_ready' field error detected");
2518 }
2519#endif /* FREECIV_DELTA_PROTOCOL */
2520
2522}
2523
2525{
2526 if (!pc->used) {
2527 log_error("WARNING: trying to send data to the closed connection %s",
2529 return -1;
2530 }
2531 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_READY].packet != nullptr, -1,
2532 "Handler for PACKET_PLAYER_READY not installed");
2533 return pc->phs.handlers->send[PACKET_PLAYER_READY].packet(pc, packet);
2534}
2535
2536int dsend_packet_player_ready(struct connection *pc, int player_no, bool is_ready)
2537{
2538 struct packet_player_ready packet, *real_packet = &packet;
2539
2541 real_packet->is_ready = is_ready;
2542
2544}
2545
2546static inline void init_packet_endgame_report(struct packet_endgame_report *packet)
2547{
2548 memset(packet, 0, sizeof(*packet));
2549}
2550
2551#define free_packet_endgame_report(_packet) (void) 0
2552#define destroy_packet_endgame_report free
2553
2555{
2556#define FREE_PACKET_STRUCT(_packet) free_packet_endgame_report(_packet)
2558
2559#ifdef FREECIV_JSON_CONNECTION
2560 struct plocation field_addr;
2561 {
2562 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2565 }
2566#endif /* FREECIV_JSON_CONNECTION */
2567
2568 log_packet_detailed("packet_endgame_report_100: got info about ()");
2569
2570#ifdef FREECIV_JSON_CONNECTION
2571 field_addr.name = "category_num";
2572#endif /* FREECIV_JSON_CONNECTION */
2573
2574 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2575 RECEIVE_PACKET_FIELD_ERROR(category_num);
2576 }
2577
2578#ifdef FREECIV_JSON_CONNECTION
2579 field_addr.name = "category_name";
2580#endif /* FREECIV_JSON_CONNECTION */
2581
2582 {
2583 int i;
2584
2585 if (real_packet->category_num > 32) {
2586 RECEIVE_PACKET_FIELD_ERROR(category_name, ": array truncated");
2587 }
2588
2589#ifdef FREECIV_JSON_CONNECTION
2590 /* Enter array. */
2591 field_addr.sub_location = plocation_elem_new(0);
2592#endif /* FREECIV_JSON_CONNECTION */
2593
2594 for (i = 0; i < real_packet->category_num; i++) {
2595#ifdef FREECIV_JSON_CONNECTION
2596 /* Next array element */
2597 field_addr.sub_location->number = i;
2598#endif /* FREECIV_JSON_CONNECTION */
2599
2600 if (!DIO_GET(string, &din, &field_addr, real_packet->category_name[i], sizeof(real_packet->category_name[i]))) {
2601 RECEIVE_PACKET_FIELD_ERROR(category_name);
2602 }
2603 }
2604
2605#ifdef FREECIV_JSON_CONNECTION
2606 /* Exit array. */
2607 FC_FREE(field_addr.sub_location);
2608#endif /* FREECIV_JSON_CONNECTION */
2609 }
2610
2611#ifdef FREECIV_JSON_CONNECTION
2612 field_addr.name = "player_num";
2613#endif /* FREECIV_JSON_CONNECTION */
2614
2615 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
2616 RECEIVE_PACKET_FIELD_ERROR(player_num);
2617 }
2618
2620#undef FREE_PACKET_STRUCT
2621}
2622
2624{
2625 const struct packet_endgame_report *real_packet = packet;
2626 int e;
2628
2629 log_packet_detailed("packet_endgame_report_100: sending info about ()");
2630
2631#ifdef FREECIV_JSON_CONNECTION
2632 struct plocation field_addr;
2633 {
2634 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2637 }
2638#endif /* FREECIV_JSON_CONNECTION */
2639
2640#ifdef FREECIV_JSON_CONNECTION
2641 field_addr.name = "category_num";
2642#endif /* FREECIV_JSON_CONNECTION */
2643 e = 0;
2644
2645 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
2646
2647 if (e) {
2648 log_packet_detailed("'category_num' field error detected");
2649 }
2650
2651#ifdef FREECIV_JSON_CONNECTION
2652 field_addr.name = "category_name";
2653#endif /* FREECIV_JSON_CONNECTION */
2654 e = 0;
2655
2656 {
2657 int i;
2658
2659#ifdef FREECIV_JSON_CONNECTION
2660 /* Create the array. */
2661 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
2662
2663 /* Enter array. */
2664 field_addr.sub_location = plocation_elem_new(0);
2665#endif /* FREECIV_JSON_CONNECTION */
2666
2667 for (i = 0; i < real_packet->category_num; i++) {
2668#ifdef FREECIV_JSON_CONNECTION
2669 /* Next array element. */
2670 field_addr.sub_location->number = i;
2671#endif /* FREECIV_JSON_CONNECTION */
2672
2673 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_name[i]);
2674 }
2675
2676#ifdef FREECIV_JSON_CONNECTION
2677 /* Exit array. */
2678 FC_FREE(field_addr.sub_location);
2679#endif /* FREECIV_JSON_CONNECTION */
2680 }
2681
2682 if (e) {
2683 log_packet_detailed("'category_name' field error detected");
2684 }
2685
2686#ifdef FREECIV_JSON_CONNECTION
2687 field_addr.name = "player_num";
2688#endif /* FREECIV_JSON_CONNECTION */
2689 e = 0;
2690
2691 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
2692
2693 if (e) {
2694 log_packet_detailed("'player_num' field error detected");
2695 }
2696
2698}
2699
2701{
2702 if (!pc->used) {
2703 log_error("WARNING: trying to send data to the closed connection %s",
2705 return -1;
2706 }
2707 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet != nullptr, -1,
2708 "Handler for PACKET_ENDGAME_REPORT not installed");
2709 return pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet(pc, packet);
2710}
2711
2712void lsend_packet_endgame_report(struct conn_list *dest, const struct packet_endgame_report *packet)
2713{
2714 conn_list_iterate(dest, pconn) {
2717}
2718
2719static inline void init_packet_endgame_player(struct packet_endgame_player *packet)
2720{
2721 memset(packet, 0, sizeof(*packet));
2722}
2723
2724#define free_packet_endgame_player(_packet) (void) 0
2725#define destroy_packet_endgame_player free
2726
2728{
2729#define FREE_PACKET_STRUCT(_packet) free_packet_endgame_player(_packet)
2731
2732#ifdef FREECIV_JSON_CONNECTION
2733 struct plocation field_addr;
2734 {
2735 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2738 }
2739#endif /* FREECIV_JSON_CONNECTION */
2740
2741 log_packet_detailed("packet_endgame_player_100: got info about ()");
2742
2743#ifdef FREECIV_JSON_CONNECTION
2744 field_addr.name = "category_num";
2745#endif /* FREECIV_JSON_CONNECTION */
2746
2747 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2748 RECEIVE_PACKET_FIELD_ERROR(category_num);
2749 }
2750
2751#ifdef FREECIV_JSON_CONNECTION
2752 field_addr.name = "player_id";
2753#endif /* FREECIV_JSON_CONNECTION */
2754
2755 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_id)) {
2756 RECEIVE_PACKET_FIELD_ERROR(player_id);
2757 }
2758
2759#ifdef FREECIV_JSON_CONNECTION
2760 field_addr.name = "score";
2761#endif /* FREECIV_JSON_CONNECTION */
2762
2763 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
2765 }
2766
2767#ifdef FREECIV_JSON_CONNECTION
2768 field_addr.name = "category_score";
2769#endif /* FREECIV_JSON_CONNECTION */
2770
2771 {
2772 int i;
2773
2774 if (real_packet->category_num > 32) {
2775 RECEIVE_PACKET_FIELD_ERROR(category_score, ": array truncated");
2776 }
2777
2778#ifdef FREECIV_JSON_CONNECTION
2779 /* Enter array. */
2780 field_addr.sub_location = plocation_elem_new(0);
2781#endif /* FREECIV_JSON_CONNECTION */
2782
2783 for (i = 0; i < real_packet->category_num; i++) {
2784#ifdef FREECIV_JSON_CONNECTION
2785 /* Next array element */
2786 field_addr.sub_location->number = i;
2787#endif /* FREECIV_JSON_CONNECTION */
2788
2789 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->category_score[i])) {
2790 RECEIVE_PACKET_FIELD_ERROR(category_score);
2791 }
2792 }
2793
2794#ifdef FREECIV_JSON_CONNECTION
2795 /* Exit array. */
2796 FC_FREE(field_addr.sub_location);
2797#endif /* FREECIV_JSON_CONNECTION */
2798 }
2799
2800#ifdef FREECIV_JSON_CONNECTION
2801 field_addr.name = "winner";
2802#endif /* FREECIV_JSON_CONNECTION */
2803
2804 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->winner)) {
2806 }
2807
2809#undef FREE_PACKET_STRUCT
2810}
2811
2813{
2814 const struct packet_endgame_player *real_packet = packet;
2815 int e;
2817
2818 log_packet_detailed("packet_endgame_player_100: sending info about ()");
2819
2820#ifdef FREECIV_JSON_CONNECTION
2821 struct plocation field_addr;
2822 {
2823 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2826 }
2827#endif /* FREECIV_JSON_CONNECTION */
2828
2829#ifdef FREECIV_JSON_CONNECTION
2830 field_addr.name = "category_num";
2831#endif /* FREECIV_JSON_CONNECTION */
2832 e = 0;
2833
2834 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
2835
2836 if (e) {
2837 log_packet_detailed("'category_num' field error detected");
2838 }
2839
2840#ifdef FREECIV_JSON_CONNECTION
2841 field_addr.name = "player_id";
2842#endif /* FREECIV_JSON_CONNECTION */
2843 e = 0;
2844
2845 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_id);
2846
2847 if (e) {
2848 log_packet_detailed("'player_id' field error detected");
2849 }
2850
2851#ifdef FREECIV_JSON_CONNECTION
2852 field_addr.name = "score";
2853#endif /* FREECIV_JSON_CONNECTION */
2854 e = 0;
2855
2856 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
2857
2858 if (e) {
2859 log_packet_detailed("'score' field error detected");
2860 }
2861
2862#ifdef FREECIV_JSON_CONNECTION
2863 field_addr.name = "category_score";
2864#endif /* FREECIV_JSON_CONNECTION */
2865 e = 0;
2866
2867 {
2868 int i;
2869
2870#ifdef FREECIV_JSON_CONNECTION
2871 /* Create the array. */
2872 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
2873
2874 /* Enter array. */
2875 field_addr.sub_location = plocation_elem_new(0);
2876#endif /* FREECIV_JSON_CONNECTION */
2877
2878 for (i = 0; i < real_packet->category_num; i++) {
2879#ifdef FREECIV_JSON_CONNECTION
2880 /* Next array element. */
2881 field_addr.sub_location->number = i;
2882#endif /* FREECIV_JSON_CONNECTION */
2883
2884 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->category_score[i]);
2885 }
2886
2887#ifdef FREECIV_JSON_CONNECTION
2888 /* Exit array. */
2889 FC_FREE(field_addr.sub_location);
2890#endif /* FREECIV_JSON_CONNECTION */
2891 }
2892
2893 if (e) {
2894 log_packet_detailed("'category_score' field error detected");
2895 }
2896
2897#ifdef FREECIV_JSON_CONNECTION
2898 field_addr.name = "winner";
2899#endif /* FREECIV_JSON_CONNECTION */
2900 e = 0;
2901
2902 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->winner);
2903
2904 if (e) {
2905 log_packet_detailed("'winner' field error detected");
2906 }
2907
2909}
2910
2912{
2913 if (!pc->used) {
2914 log_error("WARNING: trying to send data to the closed connection %s",
2916 return -1;
2917 }
2918 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet != nullptr, -1,
2919 "Handler for PACKET_ENDGAME_PLAYER not installed");
2920 return pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet(pc, packet);
2921}
2922
2923void lsend_packet_endgame_player(struct conn_list *dest, const struct packet_endgame_player *packet)
2924{
2925 conn_list_iterate(dest, pconn) {
2928}
2929
2930static inline void init_packet_tile_info(struct packet_tile_info *packet)
2931{
2932 memset(packet, 0, sizeof(*packet));
2933}
2934
2935#define free_packet_tile_info(_packet) (void) 0
2936#define destroy_packet_tile_info free
2937
2938#ifdef FREECIV_DELTA_PROTOCOL
2940{
2941 const struct packet_tile_info *key = (const struct packet_tile_info *) vkey;
2942 genhash_val_t result = 0;
2943
2944 result += key->tile;
2945
2946 result &= 0xFFFFFFFF;
2947 return result;
2948}
2949
2950static bool cmp_packet_tile_info_100(const void *vkey1, const void *vkey2)
2951{
2952 const struct packet_tile_info *old = (const struct packet_tile_info *) vkey1;
2953 const struct packet_tile_info *real_packet = (const struct packet_tile_info *) vkey2;
2954 bool differ;
2955
2956 differ = (old->tile != real_packet->tile);
2957
2958 return !differ;
2959}
2961#endif /* FREECIV_DELTA_PROTOCOL */
2962
2964{
2965#define FREE_PACKET_STRUCT(_packet) free_packet_tile_info(_packet)
2967
2968#ifdef FREECIV_JSON_CONNECTION
2969 struct plocation field_addr;
2970 {
2971 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
2974 }
2975#endif /* FREECIV_JSON_CONNECTION */
2976
2977#ifdef FREECIV_JSON_CONNECTION
2978 field_addr.name = "tile";
2979#endif /* FREECIV_JSON_CONNECTION */
2980
2981 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
2983 }
2984
2985 log_packet_detailed("packet_tile_info_100: got info about (%d)",
2986 real_packet->tile);
2987
2988#ifdef FREECIV_DELTA_PROTOCOL
2990 struct packet_tile_info *old;
2991 struct genhash **hash = pc->phs.received + PACKET_TILE_INFO;
2992
2993 if (nullptr == *hash) {
2995 nullptr, nullptr, nullptr, destroy_packet_tile_info);
2996 }
2997
2998 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2999 *real_packet = *old;
3000 } else {
3001 /* packet is already initialized empty */
3002 log_packet_detailed(" no old info");
3003 }
3004
3005#ifdef FREECIV_JSON_CONNECTION
3006 field_addr.name = "fields";
3007#endif /* FREECIV_JSON_CONNECTION */
3008 DIO_BV_GET(&din, &field_addr, fields);
3009
3010 if (BV_ISSET(fields, 0)) {
3011 log_packet_detailed(" got field 'continent'");
3012
3013#ifdef FREECIV_JSON_CONNECTION
3014 field_addr.name = "continent";
3015#endif /* FREECIV_JSON_CONNECTION */
3016
3017 {
3018 int readin;
3019
3020 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3021 RECEIVE_PACKET_FIELD_ERROR(continent);
3022 }
3023 real_packet->continent = readin;
3024 }
3025 }
3026
3027 if (BV_ISSET(fields, 1)) {
3028 log_packet_detailed(" got field 'known'");
3029
3030#ifdef FREECIV_JSON_CONNECTION
3031 field_addr.name = "known";
3032#endif /* FREECIV_JSON_CONNECTION */
3033
3034 {
3035 int readin;
3036
3037 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3039 }
3040 real_packet->known = readin;
3041 }
3042 }
3043
3044 if (BV_ISSET(fields, 2)) {
3045 log_packet_detailed(" got field 'owner'");
3046
3047#ifdef FREECIV_JSON_CONNECTION
3048 field_addr.name = "owner";
3049#endif /* FREECIV_JSON_CONNECTION */
3050
3051 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
3053 }
3054 }
3055
3056 if (BV_ISSET(fields, 3)) {
3057 log_packet_detailed(" got field 'extras_owner'");
3058
3059#ifdef FREECIV_JSON_CONNECTION
3060 field_addr.name = "extras_owner";
3061#endif /* FREECIV_JSON_CONNECTION */
3062
3063 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->extras_owner)) {
3064 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3065 }
3066 }
3067
3068 if (BV_ISSET(fields, 4)) {
3069 log_packet_detailed(" got field 'worked'");
3070
3071#ifdef FREECIV_JSON_CONNECTION
3072 field_addr.name = "worked";
3073#endif /* FREECIV_JSON_CONNECTION */
3074
3075 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3077 }
3078 }
3079
3080 if (BV_ISSET(fields, 5)) {
3081 log_packet_detailed(" got field 'terrain'");
3082
3083#ifdef FREECIV_JSON_CONNECTION
3084 field_addr.name = "terrain";
3085#endif /* FREECIV_JSON_CONNECTION */
3086
3087 {
3088 int readin;
3089
3090 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3092 }
3093 real_packet->terrain = readin;
3094 }
3095 }
3096
3097 if (BV_ISSET(fields, 6)) {
3098 log_packet_detailed(" got field 'resource'");
3099
3100#ifdef FREECIV_JSON_CONNECTION
3101 field_addr.name = "resource";
3102#endif /* FREECIV_JSON_CONNECTION */
3103
3104 {
3105 int readin;
3106
3107 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3109 }
3110 real_packet->resource = readin;
3111 }
3112 }
3113
3114 if (BV_ISSET(fields, 7)) {
3115 log_packet_detailed(" got field 'extras'");
3116
3117#ifdef FREECIV_JSON_CONNECTION
3118 field_addr.name = "extras";
3119#endif /* FREECIV_JSON_CONNECTION */
3120
3121 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3123 }
3124 }
3125
3126 if (BV_ISSET(fields, 8)) {
3127 log_packet_detailed(" got field 'placing'");
3128
3129#ifdef FREECIV_JSON_CONNECTION
3130 field_addr.name = "placing";
3131#endif /* FREECIV_JSON_CONNECTION */
3132
3133 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3135 }
3136 }
3137
3138 if (BV_ISSET(fields, 9)) {
3139 log_packet_detailed(" got field 'place_turn'");
3140
3141#ifdef FREECIV_JSON_CONNECTION
3142 field_addr.name = "place_turn";
3143#endif /* FREECIV_JSON_CONNECTION */
3144
3145 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3146 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3147 }
3148 }
3149
3150 if (BV_ISSET(fields, 10)) {
3151 log_packet_detailed(" got field 'altitude'");
3152
3153#ifdef FREECIV_JSON_CONNECTION
3154 field_addr.name = "altitude";
3155#endif /* FREECIV_JSON_CONNECTION */
3156
3157 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->altitude)) {
3159 }
3160 }
3161
3162 if (BV_ISSET(fields, 11)) {
3163 log_packet_detailed(" got field 'spec_sprite'");
3164
3165#ifdef FREECIV_JSON_CONNECTION
3166 field_addr.name = "spec_sprite";
3167#endif /* FREECIV_JSON_CONNECTION */
3168
3169 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3170 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3171 }
3172 }
3173
3174 if (BV_ISSET(fields, 12)) {
3175 log_packet_detailed(" got field 'label'");
3176
3177#ifdef FREECIV_JSON_CONNECTION
3178 field_addr.name = "label";
3179#endif /* FREECIV_JSON_CONNECTION */
3180
3181 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3183 }
3184 }
3185
3186 if (nullptr == old) {
3187 old = fc_malloc(sizeof(*old));
3189 *old = *real_packet;
3191 } else {
3192 *old = *real_packet;
3193 }
3194
3195#else /* FREECIV_DELTA_PROTOCOL */
3196#ifdef FREECIV_JSON_CONNECTION
3197 field_addr.name = "continent";
3198#endif /* FREECIV_JSON_CONNECTION */
3199
3200 {
3201 int readin;
3202
3203 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3204 RECEIVE_PACKET_FIELD_ERROR(continent);
3205 }
3206 real_packet->continent = readin;
3207 }
3208
3209#ifdef FREECIV_JSON_CONNECTION
3210 field_addr.name = "known";
3211#endif /* FREECIV_JSON_CONNECTION */
3212
3213 {
3214 int readin;
3215
3216 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3218 }
3219 real_packet->known = readin;
3220 }
3221
3222#ifdef FREECIV_JSON_CONNECTION
3223 field_addr.name = "owner";
3224#endif /* FREECIV_JSON_CONNECTION */
3225
3226 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
3228 }
3229
3230#ifdef FREECIV_JSON_CONNECTION
3231 field_addr.name = "extras_owner";
3232#endif /* FREECIV_JSON_CONNECTION */
3233
3234 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->extras_owner)) {
3235 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3236 }
3237
3238#ifdef FREECIV_JSON_CONNECTION
3239 field_addr.name = "worked";
3240#endif /* FREECIV_JSON_CONNECTION */
3241
3242 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3244 }
3245
3246#ifdef FREECIV_JSON_CONNECTION
3247 field_addr.name = "terrain";
3248#endif /* FREECIV_JSON_CONNECTION */
3249
3250 {
3251 int readin;
3252
3253 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3255 }
3256 real_packet->terrain = readin;
3257 }
3258
3259#ifdef FREECIV_JSON_CONNECTION
3260 field_addr.name = "resource";
3261#endif /* FREECIV_JSON_CONNECTION */
3262
3263 {
3264 int readin;
3265
3266 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3268 }
3269 real_packet->resource = readin;
3270 }
3271
3272#ifdef FREECIV_JSON_CONNECTION
3273 field_addr.name = "extras";
3274#endif /* FREECIV_JSON_CONNECTION */
3275
3276 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3278 }
3279
3280#ifdef FREECIV_JSON_CONNECTION
3281 field_addr.name = "placing";
3282#endif /* FREECIV_JSON_CONNECTION */
3283
3284 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3286 }
3287
3288#ifdef FREECIV_JSON_CONNECTION
3289 field_addr.name = "place_turn";
3290#endif /* FREECIV_JSON_CONNECTION */
3291
3292 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3293 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3294 }
3295
3296#ifdef FREECIV_JSON_CONNECTION
3297 field_addr.name = "altitude";
3298#endif /* FREECIV_JSON_CONNECTION */
3299
3300 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->altitude)) {
3302 }
3303
3304#ifdef FREECIV_JSON_CONNECTION
3305 field_addr.name = "spec_sprite";
3306#endif /* FREECIV_JSON_CONNECTION */
3307
3308 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3309 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3310 }
3311
3312#ifdef FREECIV_JSON_CONNECTION
3313 field_addr.name = "label";
3314#endif /* FREECIV_JSON_CONNECTION */
3315
3316 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3318 }
3319#endif /* FREECIV_DELTA_PROTOCOL */
3320
3322#undef FREE_PACKET_STRUCT
3323}
3324
3325static int send_packet_tile_info_100(struct connection *pc, const struct packet_tile_info *packet)
3326{
3327 const struct packet_tile_info *real_packet = packet;
3328 int e;
3330
3331 log_packet_detailed("packet_tile_info_100: sending info about (%d)",
3332 real_packet->tile);
3333
3334#ifdef FREECIV_DELTA_PROTOCOL
3336 struct packet_tile_info *old;
3337 bool differ;
3338 int different = 0;
3339 struct genhash **hash = pc->phs.sent + PACKET_TILE_INFO;
3340
3341 if (nullptr == *hash) {
3343 nullptr, nullptr, nullptr, destroy_packet_tile_info);
3344 }
3345 BV_CLR_ALL(fields);
3346
3347 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
3348 old = fc_malloc(sizeof(*old));
3349 /* temporary bitcopy just to insert correctly */
3350 *old = *real_packet;
3353 different = 1; /* Force to send. */
3354 }
3355
3356 differ = (old->continent != real_packet->continent);
3357 if (differ) {
3358 different++;
3359 BV_SET(fields, 0);
3360 }
3361
3362 differ = (old->known != real_packet->known);
3363 if (differ) {
3364 different++;
3365 BV_SET(fields, 1);
3366 }
3367
3368 differ = (old->owner != real_packet->owner);
3369 if (differ) {
3370 different++;
3371 BV_SET(fields, 2);
3372 }
3373
3374 differ = (old->extras_owner != real_packet->extras_owner);
3375 if (differ) {
3376 different++;
3377 BV_SET(fields, 3);
3378 }
3379
3380 differ = (old->worked != real_packet->worked);
3381 if (differ) {
3382 different++;
3383 BV_SET(fields, 4);
3384 }
3385
3386 differ = (old->terrain != real_packet->terrain);
3387 if (differ) {
3388 different++;
3389 BV_SET(fields, 5);
3390 }
3391
3392 differ = (old->resource != real_packet->resource);
3393 if (differ) {
3394 different++;
3395 BV_SET(fields, 6);
3396 }
3397
3398 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
3399 if (differ) {
3400 different++;
3401 BV_SET(fields, 7);
3402 }
3403
3404 differ = (old->placing != real_packet->placing);
3405 if (differ) {
3406 different++;
3407 BV_SET(fields, 8);
3408 }
3409
3410 differ = (old->place_turn != real_packet->place_turn);
3411 if (differ) {
3412 different++;
3413 BV_SET(fields, 9);
3414 }
3415
3416 differ = (old->altitude != real_packet->altitude);
3417 if (differ) {
3418 different++;
3419 BV_SET(fields, 10);
3420 }
3421
3422 differ = (strcmp(old->spec_sprite, real_packet->spec_sprite) != 0);
3423 if (differ) {
3424 different++;
3425 BV_SET(fields, 11);
3426 }
3427
3428 differ = (strcmp(old->label, real_packet->label) != 0);
3429 if (differ) {
3430 different++;
3431 BV_SET(fields, 12);
3432 }
3433
3434 if (different == 0) {
3435 log_packet_detailed(" no change -> discard");
3437 }
3438#endif /* FREECIV_DELTA_PROTOCOL */
3439
3440#ifdef FREECIV_JSON_CONNECTION
3441 struct plocation field_addr;
3442 {
3443 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
3446 }
3447#endif /* FREECIV_JSON_CONNECTION */
3448
3449#ifdef FREECIV_JSON_CONNECTION
3450 field_addr.name = "tile";
3451#endif /* FREECIV_JSON_CONNECTION */
3452 e = 0;
3453
3454 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
3455
3456 if (e) {
3457 log_packet_detailed("'tile' field error detected");
3458 }
3459
3460#ifdef FREECIV_DELTA_PROTOCOL
3461#ifdef FREECIV_JSON_CONNECTION
3462 field_addr.name = "fields";
3463#endif /* FREECIV_JSON_CONNECTION */
3464 e = 0;
3465 e |= DIO_BV_PUT(&dout, &field_addr, fields);
3466 if (e) {
3467 log_packet_detailed("fields bitvector error detected");
3468 }
3469
3470 if (BV_ISSET(fields, 0)) {
3471 log_packet_detailed(" field 'continent' has changed");
3472
3473#ifdef FREECIV_JSON_CONNECTION
3474 field_addr.name = "continent";
3475#endif /* FREECIV_JSON_CONNECTION */
3476 e = 0;
3477
3478 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3479
3480 if (e) {
3481 log_packet_detailed("'continent' field error detected");
3482 }
3483 }
3484
3485 if (BV_ISSET(fields, 1)) {
3486 log_packet_detailed(" field 'known' has changed");
3487
3488#ifdef FREECIV_JSON_CONNECTION
3489 field_addr.name = "known";
3490#endif /* FREECIV_JSON_CONNECTION */
3491 e = 0;
3492
3493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3494
3495 if (e) {
3496 log_packet_detailed("'known' field error detected");
3497 }
3498 }
3499
3500 if (BV_ISSET(fields, 2)) {
3501 log_packet_detailed(" field 'owner' has changed");
3502
3503#ifdef FREECIV_JSON_CONNECTION
3504 field_addr.name = "owner";
3505#endif /* FREECIV_JSON_CONNECTION */
3506 e = 0;
3507
3508 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
3509
3510 if (e) {
3511 log_packet_detailed("'owner' field error detected");
3512 }
3513 }
3514
3515 if (BV_ISSET(fields, 3)) {
3516 log_packet_detailed(" field 'extras_owner' has changed");
3517
3518#ifdef FREECIV_JSON_CONNECTION
3519 field_addr.name = "extras_owner";
3520#endif /* FREECIV_JSON_CONNECTION */
3521 e = 0;
3522
3523 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->extras_owner);
3524
3525 if (e) {
3526 log_packet_detailed("'extras_owner' field error detected");
3527 }
3528 }
3529
3530 if (BV_ISSET(fields, 4)) {
3531 log_packet_detailed(" field 'worked' has changed");
3532
3533#ifdef FREECIV_JSON_CONNECTION
3534 field_addr.name = "worked";
3535#endif /* FREECIV_JSON_CONNECTION */
3536 e = 0;
3537
3538 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3539
3540 if (e) {
3541 log_packet_detailed("'worked' field error detected");
3542 }
3543 }
3544
3545 if (BV_ISSET(fields, 5)) {
3546 log_packet_detailed(" field 'terrain' has changed");
3547
3548#ifdef FREECIV_JSON_CONNECTION
3549 field_addr.name = "terrain";
3550#endif /* FREECIV_JSON_CONNECTION */
3551 e = 0;
3552
3553 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3554
3555 if (e) {
3556 log_packet_detailed("'terrain' field error detected");
3557 }
3558 }
3559
3560 if (BV_ISSET(fields, 6)) {
3561 log_packet_detailed(" field 'resource' has changed");
3562
3563#ifdef FREECIV_JSON_CONNECTION
3564 field_addr.name = "resource";
3565#endif /* FREECIV_JSON_CONNECTION */
3566 e = 0;
3567
3568 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3569
3570 if (e) {
3571 log_packet_detailed("'resource' field error detected");
3572 }
3573 }
3574
3575 if (BV_ISSET(fields, 7)) {
3576 log_packet_detailed(" field 'extras' has changed");
3577
3578#ifdef FREECIV_JSON_CONNECTION
3579 field_addr.name = "extras";
3580#endif /* FREECIV_JSON_CONNECTION */
3581 e = 0;
3582
3583 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
3584
3585 if (e) {
3586 log_packet_detailed("'extras' field error detected");
3587 }
3588 }
3589
3590 if (BV_ISSET(fields, 8)) {
3591 log_packet_detailed(" field 'placing' has changed");
3592
3593#ifdef FREECIV_JSON_CONNECTION
3594 field_addr.name = "placing";
3595#endif /* FREECIV_JSON_CONNECTION */
3596 e = 0;
3597
3598 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3599
3600 if (e) {
3601 log_packet_detailed("'placing' field error detected");
3602 }
3603 }
3604
3605 if (BV_ISSET(fields, 9)) {
3606 log_packet_detailed(" field 'place_turn' has changed");
3607
3608#ifdef FREECIV_JSON_CONNECTION
3609 field_addr.name = "place_turn";
3610#endif /* FREECIV_JSON_CONNECTION */
3611 e = 0;
3612
3613 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3614
3615 if (e) {
3616 log_packet_detailed("'place_turn' field error detected");
3617 }
3618 }
3619
3620 if (BV_ISSET(fields, 10)) {
3621 log_packet_detailed(" field 'altitude' has changed");
3622
3623#ifdef FREECIV_JSON_CONNECTION
3624 field_addr.name = "altitude";
3625#endif /* FREECIV_JSON_CONNECTION */
3626 e = 0;
3627
3628 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->altitude);
3629
3630 if (e) {
3631 log_packet_detailed("'altitude' field error detected");
3632 }
3633 }
3634
3635 if (BV_ISSET(fields, 11)) {
3636 log_packet_detailed(" field 'spec_sprite' has changed");
3637
3638#ifdef FREECIV_JSON_CONNECTION
3639 field_addr.name = "spec_sprite";
3640#endif /* FREECIV_JSON_CONNECTION */
3641 e = 0;
3642
3643 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3644
3645 if (e) {
3646 log_packet_detailed("'spec_sprite' field error detected");
3647 }
3648 }
3649
3650 if (BV_ISSET(fields, 12)) {
3651 log_packet_detailed(" field 'label' has changed");
3652
3653#ifdef FREECIV_JSON_CONNECTION
3654 field_addr.name = "label";
3655#endif /* FREECIV_JSON_CONNECTION */
3656 e = 0;
3657
3658 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3659
3660 if (e) {
3661 log_packet_detailed("'label' field error detected");
3662 }
3663 }
3664
3665 *old = *real_packet;
3666
3667#else /* FREECIV_DELTA_PROTOCOL */
3668#ifdef FREECIV_JSON_CONNECTION
3669 field_addr.name = "continent";
3670#endif /* FREECIV_JSON_CONNECTION */
3671 e = 0;
3672
3673 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3674
3675 if (e) {
3676 log_packet_detailed("'continent' field error detected");
3677 }
3678
3679#ifdef FREECIV_JSON_CONNECTION
3680 field_addr.name = "known";
3681#endif /* FREECIV_JSON_CONNECTION */
3682 e = 0;
3683
3684 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3685
3686 if (e) {
3687 log_packet_detailed("'known' field error detected");
3688 }
3689
3690#ifdef FREECIV_JSON_CONNECTION
3691 field_addr.name = "owner";
3692#endif /* FREECIV_JSON_CONNECTION */
3693 e = 0;
3694
3695 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
3696
3697 if (e) {
3698 log_packet_detailed("'owner' field error detected");
3699 }
3700
3701#ifdef FREECIV_JSON_CONNECTION
3702 field_addr.name = "extras_owner";
3703#endif /* FREECIV_JSON_CONNECTION */
3704 e = 0;
3705
3706 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->extras_owner);
3707
3708 if (e) {
3709 log_packet_detailed("'extras_owner' field error detected");
3710 }
3711
3712#ifdef FREECIV_JSON_CONNECTION
3713 field_addr.name = "worked";
3714#endif /* FREECIV_JSON_CONNECTION */
3715 e = 0;
3716
3717 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3718
3719 if (e) {
3720 log_packet_detailed("'worked' field error detected");
3721 }
3722
3723#ifdef FREECIV_JSON_CONNECTION
3724 field_addr.name = "terrain";
3725#endif /* FREECIV_JSON_CONNECTION */
3726 e = 0;
3727
3728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3729
3730 if (e) {
3731 log_packet_detailed("'terrain' field error detected");
3732 }
3733
3734#ifdef FREECIV_JSON_CONNECTION
3735 field_addr.name = "resource";
3736#endif /* FREECIV_JSON_CONNECTION */
3737 e = 0;
3738
3739 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3740
3741 if (e) {
3742 log_packet_detailed("'resource' field error detected");
3743 }
3744
3745#ifdef FREECIV_JSON_CONNECTION
3746 field_addr.name = "extras";
3747#endif /* FREECIV_JSON_CONNECTION */
3748 e = 0;
3749
3750 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
3751
3752 if (e) {
3753 log_packet_detailed("'extras' field error detected");
3754 }
3755
3756#ifdef FREECIV_JSON_CONNECTION
3757 field_addr.name = "placing";
3758#endif /* FREECIV_JSON_CONNECTION */
3759 e = 0;
3760
3761 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3762
3763 if (e) {
3764 log_packet_detailed("'placing' field error detected");
3765 }
3766
3767#ifdef FREECIV_JSON_CONNECTION
3768 field_addr.name = "place_turn";
3769#endif /* FREECIV_JSON_CONNECTION */
3770 e = 0;
3771
3772 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3773
3774 if (e) {
3775 log_packet_detailed("'place_turn' field error detected");
3776 }
3777
3778#ifdef FREECIV_JSON_CONNECTION
3779 field_addr.name = "altitude";
3780#endif /* FREECIV_JSON_CONNECTION */
3781 e = 0;
3782
3783 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->altitude);
3784
3785 if (e) {
3786 log_packet_detailed("'altitude' field error detected");
3787 }
3788
3789#ifdef FREECIV_JSON_CONNECTION
3790 field_addr.name = "spec_sprite";
3791#endif /* FREECIV_JSON_CONNECTION */
3792 e = 0;
3793
3794 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3795
3796 if (e) {
3797 log_packet_detailed("'spec_sprite' field error detected");
3798 }
3799
3800#ifdef FREECIV_JSON_CONNECTION
3801 field_addr.name = "label";
3802#endif /* FREECIV_JSON_CONNECTION */
3803 e = 0;
3804
3805 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3806
3807 if (e) {
3808 log_packet_detailed("'label' field error detected");
3809 }
3810#endif /* FREECIV_DELTA_PROTOCOL */
3811
3813}
3814
3815int send_packet_tile_info(struct connection *pc, const struct packet_tile_info *packet)
3816{
3817 if (!pc->used) {
3818 log_error("WARNING: trying to send data to the closed connection %s",
3820 return -1;
3821 }
3822 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TILE_INFO].packet != nullptr, -1,
3823 "Handler for PACKET_TILE_INFO not installed");
3824 return pc->phs.handlers->send[PACKET_TILE_INFO].packet(pc, packet);
3825}
3826
3827void lsend_packet_tile_info(struct conn_list *dest, const struct packet_tile_info *packet)
3828{
3829 conn_list_iterate(dest, pconn) {
3832}
3833
3834static inline void init_packet_game_info(struct packet_game_info *packet)
3835{
3836 memset(packet, 0, sizeof(*packet));
3837}
3838
3839#define free_packet_game_info(_packet) (void) 0
3840#define destroy_packet_game_info free
3841
3842#ifdef FREECIV_DELTA_PROTOCOL
3843#define hash_packet_game_info_100 hash_const
3844#define cmp_packet_game_info_100 cmp_const
3846#endif /* FREECIV_DELTA_PROTOCOL */
3847
3849{
3850#define FREE_PACKET_STRUCT(_packet) free_packet_game_info(_packet)
3852
3853#ifdef FREECIV_JSON_CONNECTION
3854 struct plocation field_addr;
3855 {
3856 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
3859 }
3860#endif /* FREECIV_JSON_CONNECTION */
3861
3862 log_packet_detailed("packet_game_info_100: got info about ()");
3863
3864#ifdef FREECIV_DELTA_PROTOCOL
3866 struct packet_game_info *old;
3867 struct genhash **hash = pc->phs.received + PACKET_GAME_INFO;
3868
3869 if (nullptr == *hash) {
3871 nullptr, nullptr, nullptr, destroy_packet_game_info);
3872 }
3873
3874 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
3875 *real_packet = *old;
3876 } else {
3877 /* packet is already initialized empty */
3878 log_packet_detailed(" no old info");
3879 }
3880
3881#ifdef FREECIV_JSON_CONNECTION
3882 field_addr.name = "fields";
3883#endif /* FREECIV_JSON_CONNECTION */
3884 DIO_BV_GET(&din, &field_addr, fields);
3885
3886 if (BV_ISSET(fields, 0)) {
3887 log_packet_detailed(" got field 'add_to_size_limit'");
3888
3889#ifdef FREECIV_JSON_CONNECTION
3890 field_addr.name = "add_to_size_limit";
3891#endif /* FREECIV_JSON_CONNECTION */
3892
3893 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->add_to_size_limit)) {
3894 RECEIVE_PACKET_FIELD_ERROR(add_to_size_limit);
3895 }
3896 }
3897
3898 if (BV_ISSET(fields, 1)) {
3899 log_packet_detailed(" got field 'aifill'");
3900
3901#ifdef FREECIV_JSON_CONNECTION
3902 field_addr.name = "aifill";
3903#endif /* FREECIV_JSON_CONNECTION */
3904
3905 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->aifill)) {
3907 }
3908 }
3909
3910 if (BV_ISSET(fields, 2)) {
3911 log_packet_detailed(" got field 'persistent_ready'");
3912
3913#ifdef FREECIV_JSON_CONNECTION
3914 field_addr.name = "persistent_ready";
3915#endif /* FREECIV_JSON_CONNECTION */
3916
3917 {
3918 int readin;
3919
3920 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3921 RECEIVE_PACKET_FIELD_ERROR(persistent_ready);
3922 }
3923 real_packet->persistent_ready = readin;
3924 }
3925 }
3926
3927 if (BV_ISSET(fields, 3)) {
3928 log_packet_detailed(" got field 'airlifting_style'");
3929
3930#ifdef FREECIV_JSON_CONNECTION
3931 field_addr.name = "airlifting_style";
3932#endif /* FREECIV_JSON_CONNECTION */
3933
3934 {
3935 int readin;
3936
3937 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3938 RECEIVE_PACKET_FIELD_ERROR(airlifting_style);
3939 }
3940 real_packet->airlifting_style = readin;
3941 }
3942 }
3943
3944 real_packet->airlift_from_always_enabled = BV_ISSET(fields, 4);
3945
3946 real_packet->airlift_to_always_enabled = BV_ISSET(fields, 5);
3947
3948 if (BV_ISSET(fields, 6)) {
3949 log_packet_detailed(" got field 'angrycitizen'");
3950
3951#ifdef FREECIV_JSON_CONNECTION
3952 field_addr.name = "angrycitizen";
3953#endif /* FREECIV_JSON_CONNECTION */
3954
3955 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->angrycitizen)) {
3956 RECEIVE_PACKET_FIELD_ERROR(angrycitizen);
3957 }
3958 }
3959
3960 if (BV_ISSET(fields, 7)) {
3961 log_packet_detailed(" got field 'base_pollution'");
3962
3963#ifdef FREECIV_JSON_CONNECTION
3964 field_addr.name = "base_pollution";
3965#endif /* FREECIV_JSON_CONNECTION */
3966
3967 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->base_pollution)) {
3968 RECEIVE_PACKET_FIELD_ERROR(base_pollution);
3969 }
3970 }
3971
3972 if (BV_ISSET(fields, 8)) {
3973 log_packet_detailed(" got field 'base_tech_cost'");
3974
3975#ifdef FREECIV_JSON_CONNECTION
3976 field_addr.name = "base_tech_cost";
3977#endif /* FREECIV_JSON_CONNECTION */
3978
3979 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->base_tech_cost)) {
3980 RECEIVE_PACKET_FIELD_ERROR(base_tech_cost);
3981 }
3982 }
3983
3984 if (BV_ISSET(fields, 9)) {
3985 log_packet_detailed(" got field 'min_tech_cost'");
3986
3987#ifdef FREECIV_JSON_CONNECTION
3988 field_addr.name = "min_tech_cost";
3989#endif /* FREECIV_JSON_CONNECTION */
3990
3991 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_tech_cost)) {
3992 RECEIVE_PACKET_FIELD_ERROR(min_tech_cost);
3993 }
3994 }
3995
3996 if (BV_ISSET(fields, 10)) {
3997 log_packet_detailed(" got field 'tech_leak_pct'");
3998
3999#ifdef FREECIV_JSON_CONNECTION
4000 field_addr.name = "tech_leak_pct";
4001#endif /* FREECIV_JSON_CONNECTION */
4002
4003 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tech_leak_pct)) {
4004 RECEIVE_PACKET_FIELD_ERROR(tech_leak_pct);
4005 }
4006 }
4007
4008 if (BV_ISSET(fields, 11)) {
4009 log_packet_detailed(" got field 'border_city_radius_sq'");
4010
4011#ifdef FREECIV_JSON_CONNECTION
4012 field_addr.name = "border_city_radius_sq";
4013#endif /* FREECIV_JSON_CONNECTION */
4014
4015 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->border_city_radius_sq)) {
4016 RECEIVE_PACKET_FIELD_ERROR(border_city_radius_sq);
4017 }
4018 }
4019
4020 if (BV_ISSET(fields, 12)) {
4021 log_packet_detailed(" got field 'border_size_effect'");
4022
4023#ifdef FREECIV_JSON_CONNECTION
4024 field_addr.name = "border_size_effect";
4025#endif /* FREECIV_JSON_CONNECTION */
4026
4027 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->border_size_effect)) {
4028 RECEIVE_PACKET_FIELD_ERROR(border_size_effect);
4029 }
4030 }
4031
4032 if (BV_ISSET(fields, 13)) {
4033 log_packet_detailed(" got field 'border_city_permanent_radius_sq'");
4034
4035#ifdef FREECIV_JSON_CONNECTION
4036 field_addr.name = "border_city_permanent_radius_sq";
4037#endif /* FREECIV_JSON_CONNECTION */
4038
4039 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->border_city_permanent_radius_sq)) {
4040 RECEIVE_PACKET_FIELD_ERROR(border_city_permanent_radius_sq);
4041 }
4042 }
4043
4044 if (BV_ISSET(fields, 14)) {
4045 log_packet_detailed(" got field 'borders'");
4046
4047#ifdef FREECIV_JSON_CONNECTION
4048 field_addr.name = "borders";
4049#endif /* FREECIV_JSON_CONNECTION */
4050
4051 {
4052 int readin;
4053
4054 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4056 }
4057 real_packet->borders = readin;
4058 }
4059 }
4060
4061 if (BV_ISSET(fields, 15)) {
4062 log_packet_detailed(" got field 'base_bribe_cost'");
4063
4064#ifdef FREECIV_JSON_CONNECTION
4065 field_addr.name = "base_bribe_cost";
4066#endif /* FREECIV_JSON_CONNECTION */
4067
4068 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->base_bribe_cost)) {
4069 RECEIVE_PACKET_FIELD_ERROR(base_bribe_cost);
4070 }
4071 }
4072
4073 if (BV_ISSET(fields, 16)) {
4074 log_packet_detailed(" got field 'caravan_bonus_style'");
4075
4076#ifdef FREECIV_JSON_CONNECTION
4077 field_addr.name = "caravan_bonus_style";
4078#endif /* FREECIV_JSON_CONNECTION */
4079
4080 {
4081 int readin;
4082
4083 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4084 RECEIVE_PACKET_FIELD_ERROR(caravan_bonus_style);
4085 }
4086 real_packet->caravan_bonus_style = readin;
4087 }
4088 }
4089
4090 if (BV_ISSET(fields, 17)) {
4091 log_packet_detailed(" got field 'culture_vic_points'");
4092
4093#ifdef FREECIV_JSON_CONNECTION
4094 field_addr.name = "culture_vic_points";
4095#endif /* FREECIV_JSON_CONNECTION */
4096
4097 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture_vic_points)) {
4098 RECEIVE_PACKET_FIELD_ERROR(culture_vic_points);
4099 }
4100 }
4101
4102 if (BV_ISSET(fields, 18)) {
4103 log_packet_detailed(" got field 'culture_vic_lead'");
4104
4105#ifdef FREECIV_JSON_CONNECTION
4106 field_addr.name = "culture_vic_lead";
4107#endif /* FREECIV_JSON_CONNECTION */
4108
4109 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_vic_lead)) {
4110 RECEIVE_PACKET_FIELD_ERROR(culture_vic_lead);
4111 }
4112 }
4113
4114 if (BV_ISSET(fields, 19)) {
4115 log_packet_detailed(" got field 'culture_migration_pml'");
4116
4117#ifdef FREECIV_JSON_CONNECTION
4118 field_addr.name = "culture_migration_pml";
4119#endif /* FREECIV_JSON_CONNECTION */
4120
4121 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_migration_pml)) {
4123 }
4124 }
4125
4126 if (BV_ISSET(fields, 20)) {
4127 log_packet_detailed(" got field 'history_interest_pml'");
4128
4129#ifdef FREECIV_JSON_CONNECTION
4130 field_addr.name = "history_interest_pml";
4131#endif /* FREECIV_JSON_CONNECTION */
4132
4133 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->history_interest_pml)) {
4134 RECEIVE_PACKET_FIELD_ERROR(history_interest_pml);
4135 }
4136 }
4137
4138 if (BV_ISSET(fields, 21)) {
4139 log_packet_detailed(" got field 'world_peace_turns'");
4140
4141#ifdef FREECIV_JSON_CONNECTION
4142 field_addr.name = "world_peace_turns";
4143#endif /* FREECIV_JSON_CONNECTION */
4144
4145 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->world_peace_turns)) {
4147 }
4148 }
4149
4150 if (BV_ISSET(fields, 22)) {
4151 log_packet_detailed(" got field 'celebratesize'");
4152
4153#ifdef FREECIV_JSON_CONNECTION
4154 field_addr.name = "celebratesize";
4155#endif /* FREECIV_JSON_CONNECTION */
4156
4157 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->celebratesize)) {
4158 RECEIVE_PACKET_FIELD_ERROR(celebratesize);
4159 }
4160 }
4161
4162 real_packet->changable_tax = BV_ISSET(fields, 23);
4163
4164 if (BV_ISSET(fields, 24)) {
4165 log_packet_detailed(" got field 'pop_report_zeroes'");
4166
4167#ifdef FREECIV_JSON_CONNECTION
4168 field_addr.name = "pop_report_zeroes";
4169#endif /* FREECIV_JSON_CONNECTION */
4170
4171 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_report_zeroes)) {
4172 RECEIVE_PACKET_FIELD_ERROR(pop_report_zeroes);
4173 }
4174 }
4175
4176 real_packet->citizen_nationality = BV_ISSET(fields, 25);
4177
4178 real_packet->unit_builders_nationality = BV_ISSET(fields, 26);
4179
4180 if (BV_ISSET(fields, 27)) {
4181 log_packet_detailed(" got field 'citizen_convert_speed'");
4182
4183#ifdef FREECIV_JSON_CONNECTION
4184 field_addr.name = "citizen_convert_speed";
4185#endif /* FREECIV_JSON_CONNECTION */
4186
4187 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->citizen_convert_speed)) {
4188 RECEIVE_PACKET_FIELD_ERROR(citizen_convert_speed);
4189 }
4190 }
4191
4192 if (BV_ISSET(fields, 28)) {
4193 log_packet_detailed(" got field 'conquest_convert_pct'");
4194
4195#ifdef FREECIV_JSON_CONNECTION
4196 field_addr.name = "conquest_convert_pct";
4197#endif /* FREECIV_JSON_CONNECTION */
4198
4199 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->conquest_convert_pct)) {
4200 RECEIVE_PACKET_FIELD_ERROR(conquest_convert_pct);
4201 }
4202 }
4203
4204 if (BV_ISSET(fields, 29)) {
4205 log_packet_detailed(" got field 'citizen_partisans_pct'");
4206
4207#ifdef FREECIV_JSON_CONNECTION
4208 field_addr.name = "citizen_partisans_pct";
4209#endif /* FREECIV_JSON_CONNECTION */
4210
4211 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citizen_partisans_pct)) {
4212 RECEIVE_PACKET_FIELD_ERROR(citizen_partisans_pct);
4213 }
4214 }
4215
4216 if (BV_ISSET(fields, 30)) {
4217 log_packet_detailed(" got field 'citymindist'");
4218
4219#ifdef FREECIV_JSON_CONNECTION
4220 field_addr.name = "citymindist";
4221#endif /* FREECIV_JSON_CONNECTION */
4222
4223 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citymindist)) {
4224 RECEIVE_PACKET_FIELD_ERROR(citymindist);
4225 }
4226 }
4227
4228 if (BV_ISSET(fields, 31)) {
4229 log_packet_detailed(" got field 'cooling'");
4230
4231#ifdef FREECIV_JSON_CONNECTION
4232 field_addr.name = "cooling";
4233#endif /* FREECIV_JSON_CONNECTION */
4234
4235 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cooling)) {
4237 }
4238 }
4239
4240 if (BV_ISSET(fields, 32)) {
4241 log_packet_detailed(" got field 'coolinglevel'");
4242
4243#ifdef FREECIV_JSON_CONNECTION
4244 field_addr.name = "coolinglevel";
4245#endif /* FREECIV_JSON_CONNECTION */
4246
4247 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->coolinglevel)) {
4248 RECEIVE_PACKET_FIELD_ERROR(coolinglevel);
4249 }
4250 }
4251
4252 if (BV_ISSET(fields, 33)) {
4253 log_packet_detailed(" got field 'diplchance_initial_odds'");
4254
4255#ifdef FREECIV_JSON_CONNECTION
4256 field_addr.name = "diplchance_initial_odds";
4257#endif /* FREECIV_JSON_CONNECTION */
4258
4259 if (!DIO_BV_GET(&din, &field_addr, real_packet->diplchance_initial_odds)) {
4260 RECEIVE_PACKET_FIELD_ERROR(diplchance_initial_odds);
4261 }
4262 }
4263
4264 if (BV_ISSET(fields, 34)) {
4265 log_packet_detailed(" got field 'diplomacy'");
4266
4267#ifdef FREECIV_JSON_CONNECTION
4268 field_addr.name = "diplomacy";
4269#endif /* FREECIV_JSON_CONNECTION */
4270
4271 {
4272 int readin;
4273
4274 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4275 RECEIVE_PACKET_FIELD_ERROR(diplomacy);
4276 }
4277 real_packet->diplomacy = readin;
4278 }
4279 }
4280
4281 real_packet->fogofwar = BV_ISSET(fields, 35);
4282
4283 if (BV_ISSET(fields, 36)) {
4284 log_packet_detailed(" got field 'food_cost'");
4285
4286#ifdef FREECIV_JSON_CONNECTION
4287 field_addr.name = "food_cost";
4288#endif /* FREECIV_JSON_CONNECTION */
4289
4290 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_cost)) {
4291 RECEIVE_PACKET_FIELD_ERROR(food_cost);
4292 }
4293 }
4294
4295 if (BV_ISSET(fields, 37)) {
4296 log_packet_detailed(" got field 'foodbox'");
4297
4298#ifdef FREECIV_JSON_CONNECTION
4299 field_addr.name = "foodbox";
4300#endif /* FREECIV_JSON_CONNECTION */
4301
4302 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->foodbox)) {
4304 }
4305 }
4306
4307 if (BV_ISSET(fields, 38)) {
4308 log_packet_detailed(" got field 'forced_gold'");
4309
4310#ifdef FREECIV_JSON_CONNECTION
4311 field_addr.name = "forced_gold";
4312#endif /* FREECIV_JSON_CONNECTION */
4313
4314 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_gold)) {
4315 RECEIVE_PACKET_FIELD_ERROR(forced_gold);
4316 }
4317 }
4318
4319 if (BV_ISSET(fields, 39)) {
4320 log_packet_detailed(" got field 'forced_luxury'");
4321
4322#ifdef FREECIV_JSON_CONNECTION
4323 field_addr.name = "forced_luxury";
4324#endif /* FREECIV_JSON_CONNECTION */
4325
4326 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_luxury)) {
4327 RECEIVE_PACKET_FIELD_ERROR(forced_luxury);
4328 }
4329 }
4330
4331 if (BV_ISSET(fields, 40)) {
4332 log_packet_detailed(" got field 'forced_science'");
4333
4334#ifdef FREECIV_JSON_CONNECTION
4335 field_addr.name = "forced_science";
4336#endif /* FREECIV_JSON_CONNECTION */
4337
4338 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_science)) {
4339 RECEIVE_PACKET_FIELD_ERROR(forced_science);
4340 }
4341 }
4342
4343 if (BV_ISSET(fields, 41)) {
4344 log_packet_detailed(" got field 'fulltradesize'");
4345
4346#ifdef FREECIV_JSON_CONNECTION
4347 field_addr.name = "fulltradesize";
4348#endif /* FREECIV_JSON_CONNECTION */
4349
4350 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fulltradesize)) {
4351 RECEIVE_PACKET_FIELD_ERROR(fulltradesize);
4352 }
4353 }
4354
4355 if (BV_ISSET(fields, 42)) {
4356 log_packet_detailed(" got field 'trade_world_rel_pct'");
4357
4358#ifdef FREECIV_JSON_CONNECTION
4359 field_addr.name = "trade_world_rel_pct";
4360#endif /* FREECIV_JSON_CONNECTION */
4361
4362 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_world_rel_pct)) {
4363 RECEIVE_PACKET_FIELD_ERROR(trade_world_rel_pct);
4364 }
4365 }
4366
4367 if (BV_ISSET(fields, 43)) {
4368 log_packet_detailed(" got field 'min_trade_route_val'");
4369
4370#ifdef FREECIV_JSON_CONNECTION
4371 field_addr.name = "min_trade_route_val";
4372#endif /* FREECIV_JSON_CONNECTION */
4373
4374 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_trade_route_val)) {
4375 RECEIVE_PACKET_FIELD_ERROR(min_trade_route_val);
4376 }
4377 }
4378
4379 real_packet->reveal_trade_partner = BV_ISSET(fields, 44);
4380
4381 if (BV_ISSET(fields, 45)) {
4382 log_packet_detailed(" got field 'goods_selection'");
4383
4384#ifdef FREECIV_JSON_CONNECTION
4385 field_addr.name = "goods_selection";
4386#endif /* FREECIV_JSON_CONNECTION */
4387
4388 {
4389 int readin;
4390
4391 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4392 RECEIVE_PACKET_FIELD_ERROR(goods_selection);
4393 }
4394 real_packet->goods_selection = readin;
4395 }
4396 }
4397
4398 if (BV_ISSET(fields, 46)) {
4399 log_packet_detailed(" got field 'global_advance_count'");
4400
4401#ifdef FREECIV_JSON_CONNECTION
4402 field_addr.name = "global_advance_count";
4403#endif /* FREECIV_JSON_CONNECTION */
4404
4405 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_advance_count)) {
4406 RECEIVE_PACKET_FIELD_ERROR(global_advance_count);
4407 }
4408 }
4409
4410 if (BV_ISSET(fields, 47)) {
4411 log_packet_detailed(" got field 'global_advances'");
4412
4413#ifdef FREECIV_JSON_CONNECTION
4414 field_addr.name = "global_advances";
4415#endif /* FREECIV_JSON_CONNECTION */
4416
4418#ifdef FREECIV_JSON_CONNECTION
4419 /* Enter array (start at initial element). */
4420 field_addr.sub_location = plocation_elem_new(0);
4421 /* Enter diff array element (start at the index address). */
4422 field_addr.sub_location->sub_location = plocation_field_new("index");
4423#endif /* FREECIV_JSON_CONNECTION */
4424
4425 while (TRUE) {
4426 int i;
4427
4428 /* Read next index */
4429#if A_LAST <= MAX_UINT8
4430 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
4431#else
4432 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
4433#endif
4434 RECEIVE_PACKET_FIELD_ERROR(global_advances);
4435 }
4436
4437 if (i == A_LAST) {
4438 break;
4439 }
4440 if (i > A_LAST) {
4441 RECEIVE_PACKET_FIELD_ERROR(global_advances,
4442 ": unexpected index %d "
4443 "> length %d in array diff",
4444 i,
4445 A_LAST);
4446 }
4447
4448#ifdef FREECIV_JSON_CONNECTION
4449 /* Content address. */
4450 field_addr.sub_location->sub_location->name = "data";
4451#endif /* FREECIV_JSON_CONNECTION */
4452
4453 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_advances[i])) {
4454 RECEIVE_PACKET_FIELD_ERROR(global_advances);
4455 }
4456
4457#ifdef FREECIV_JSON_CONNECTION
4458 /* Move to the next diff array element. */
4459 field_addr.sub_location->number++;
4460 /* Back to the index address. */
4461 field_addr.sub_location->sub_location->name = "index";
4462#endif /* FREECIV_JSON_CONNECTION */
4463 }
4464
4465#ifdef FREECIV_JSON_CONNECTION
4466 /* Exit diff array element. */
4467 FC_FREE(field_addr.sub_location->sub_location);
4468 /* Exit array. */
4469 FC_FREE(field_addr.sub_location);
4470#endif /* FREECIV_JSON_CONNECTION */
4471 }
4472
4473 real_packet->global_warming = BV_ISSET(fields, 48);
4474
4475 if (BV_ISSET(fields, 49)) {
4476 log_packet_detailed(" got field 'globalwarming'");
4477
4478#ifdef FREECIV_JSON_CONNECTION
4479 field_addr.name = "globalwarming";
4480#endif /* FREECIV_JSON_CONNECTION */
4481
4482 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->globalwarming)) {
4483 RECEIVE_PACKET_FIELD_ERROR(globalwarming);
4484 }
4485 }
4486
4487 if (BV_ISSET(fields, 50)) {
4488 log_packet_detailed(" got field 'gold'");
4489
4490#ifdef FREECIV_JSON_CONNECTION
4491 field_addr.name = "gold";
4492#endif /* FREECIV_JSON_CONNECTION */
4493
4494 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
4496 }
4497 }
4498
4499 if (BV_ISSET(fields, 51)) {
4500 log_packet_detailed(" got field 'gold_upkeep_style'");
4501
4502#ifdef FREECIV_JSON_CONNECTION
4503 field_addr.name = "gold_upkeep_style";
4504#endif /* FREECIV_JSON_CONNECTION */
4505
4506 {
4507 int readin;
4508
4509 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4510 RECEIVE_PACKET_FIELD_ERROR(gold_upkeep_style);
4511 }
4512 real_packet->gold_upkeep_style = readin;
4513 }
4514 }
4515
4516 real_packet->homeless_gold_upkeep = BV_ISSET(fields, 52);
4517
4518 if (BV_ISSET(fields, 53)) {
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, 54)) {
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, 55)) {
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, 56)) {
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, 57)) {
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, 58)) {
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, 59)) {
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, 60)) {
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, 61)) {
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, 62)) {
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, 63)) {
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, 64)) {
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, 65)) {
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, 66);
4768
4769 if (BV_ISSET(fields, 67)) {
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, 68)) {
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, 69)) {
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, 70);
4806
4807 real_packet->is_new_game = BV_ISSET(fields, 71);
4808
4809 real_packet->killcitizen = BV_ISSET(fields, 72);
4810
4811 real_packet->killstack = BV_ISSET(fields, 73);
4812
4813 real_packet->only_killing_makes_veteran = BV_ISSET(fields, 74);
4814
4815 real_packet->only_real_fight_makes_veteran = BV_ISSET(fields, 75);
4816
4817 real_packet->combat_odds_scaled_veterancy = BV_ISSET(fields, 76);
4818
4819 real_packet->damage_reduces_bombard_rate = BV_ISSET(fields, 77);
4820
4821 if (BV_ISSET(fields, 78)) {
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, 79)) {
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, 80)) {
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, 81)) {
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, 82)) {
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, 83)) {
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, 84)) {
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, 85);
4928
4929 real_packet->muuk_gold_wipe = BV_ISSET(fields, 86);
4930
4931 real_packet->muuk_shield_wipe = BV_ISSET(fields, 87);
4932
4933 if (BV_ISSET(fields, 88)) {
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, 89);
4946
4947 if (BV_ISSET(fields, 90)) {
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, 91)) {
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, 92)) {
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, 93);
4989
4990 real_packet->steal_maps_reveals_all_cities = BV_ISSET(fields, 94);
4991
4992 real_packet->poison_empties_food_stock = BV_ISSET(fields, 95);
4993
4994 real_packet->tech_steal_allow_holes = BV_ISSET(fields, 96);
4995
4996 real_packet->tech_trade_allow_holes = BV_ISSET(fields, 97);
4997
4998 real_packet->tech_trade_loss_allow_holes = BV_ISSET(fields, 98);
4999
5000 real_packet->tech_parasite_allow_holes = BV_ISSET(fields, 99);
5001
5002 real_packet->tech_loss_allow_holes = BV_ISSET(fields, 100);
5003
5004 if (BV_ISSET(fields, 101)) {
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, 102)) {
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, 103);
5029
5030 real_packet->unreachable_protects = BV_ISSET(fields, 104);
5031
5032 if (BV_ISSET(fields, 105)) {
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, 106)) {
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, 107)) {
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, 108)) {
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, 109);
5091
5092 if (BV_ISSET(fields, 110)) {
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, 111)) {
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, 112)) {
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, 113)) {
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, 114)) {
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, 115)) {
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, 116)) {
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, 117)) {
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, 118)) {
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, 119)) {
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, 120);
5238
5239 if (BV_ISSET(fields, 121)) {
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, 122)) {
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, 123);
5269
5270 real_packet->trading_gold = BV_ISSET(fields, 124);
5271
5272 real_packet->trading_tech = BV_ISSET(fields, 125);
5273
5274 if (BV_ISSET(fields, 126)) {
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, 127)) {
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, 128)) {
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, 129);
5311
5312 if (BV_ISSET(fields, 130)) {
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, 131)) {
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, 132)) {
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, 133)) {
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 = "homeless_gold_upkeep";
5850#endif /* FREECIV_JSON_CONNECTION */
5851
5852 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->homeless_gold_upkeep)) {
5853 RECEIVE_PACKET_FIELD_ERROR(homeless_gold_upkeep);
5854 }
5855
5856#ifdef FREECIV_JSON_CONNECTION
5857 field_addr.name = "infrapoints";
5858#endif /* FREECIV_JSON_CONNECTION */
5859
5860 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
5861 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
5862 }
5863
5864#ifdef FREECIV_JSON_CONNECTION
5865 field_addr.name = "revolentype";
5866#endif /* FREECIV_JSON_CONNECTION */
5867
5868 {
5869 int readin;
5870
5871 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5872 RECEIVE_PACKET_FIELD_ERROR(revolentype);
5873 }
5874 real_packet->revolentype = readin;
5875 }
5876
5877#ifdef FREECIV_JSON_CONNECTION
5878 field_addr.name = "default_government_id";
5879#endif /* FREECIV_JSON_CONNECTION */
5880
5881 {
5882 int readin;
5883
5884 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5885 RECEIVE_PACKET_FIELD_ERROR(default_government_id);
5886 }
5887 real_packet->default_government_id = readin;
5888 }
5889
5890#ifdef FREECIV_JSON_CONNECTION
5891 field_addr.name = "government_during_revolution_id";
5892#endif /* FREECIV_JSON_CONNECTION */
5893
5894 {
5895 int readin;
5896
5897 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5898 RECEIVE_PACKET_FIELD_ERROR(government_during_revolution_id);
5899 }
5900 real_packet->government_during_revolution_id = readin;
5901 }
5902
5903#ifdef FREECIV_JSON_CONNECTION
5904 field_addr.name = "granary_food_inc";
5905#endif /* FREECIV_JSON_CONNECTION */
5906
5907 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_inc)) {
5908 RECEIVE_PACKET_FIELD_ERROR(granary_food_inc);
5909 }
5910
5911#ifdef FREECIV_JSON_CONNECTION
5912 field_addr.name = "granary_food_ini";
5913#endif /* FREECIV_JSON_CONNECTION */
5914
5915 {
5916 int i;
5917
5918
5919#ifdef FREECIV_JSON_CONNECTION
5920 /* Enter array. */
5921 field_addr.sub_location = plocation_elem_new(0);
5922#endif /* FREECIV_JSON_CONNECTION */
5923
5924 for (i = 0; i < MAX_GRANARY_INIS; i++) {
5925#ifdef FREECIV_JSON_CONNECTION
5926 /* Next array element */
5927 field_addr.sub_location->number = i;
5928#endif /* FREECIV_JSON_CONNECTION */
5929
5930 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_ini[i])) {
5931 RECEIVE_PACKET_FIELD_ERROR(granary_food_ini);
5932 }
5933 }
5934
5935#ifdef FREECIV_JSON_CONNECTION
5936 /* Exit array. */
5937 FC_FREE(field_addr.sub_location);
5938#endif /* FREECIV_JSON_CONNECTION */
5939 }
5940
5941#ifdef FREECIV_JSON_CONNECTION
5942 field_addr.name = "granary_num_inis";
5943#endif /* FREECIV_JSON_CONNECTION */
5944
5945 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->granary_num_inis)) {
5946 RECEIVE_PACKET_FIELD_ERROR(granary_num_inis);
5947 }
5948
5949#ifdef FREECIV_JSON_CONNECTION
5950 field_addr.name = "great_wonder_owners";
5951#endif /* FREECIV_JSON_CONNECTION */
5952
5953 {
5954 int i;
5955
5956
5957#ifdef FREECIV_JSON_CONNECTION
5958 /* Enter array. */
5959 field_addr.sub_location = plocation_elem_new(0);
5960#endif /* FREECIV_JSON_CONNECTION */
5961
5962 for (i = 0; i < B_LAST; i++) {
5963#ifdef FREECIV_JSON_CONNECTION
5964 /* Next array element */
5965 field_addr.sub_location->number = i;
5966#endif /* FREECIV_JSON_CONNECTION */
5967
5968 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->great_wonder_owners[i])) {
5969 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
5970 }
5971 }
5972
5973#ifdef FREECIV_JSON_CONNECTION
5974 /* Exit array. */
5975 FC_FREE(field_addr.sub_location);
5976#endif /* FREECIV_JSON_CONNECTION */
5977 }
5978
5979#ifdef FREECIV_JSON_CONNECTION
5980 field_addr.name = "happy_cost";
5981#endif /* FREECIV_JSON_CONNECTION */
5982
5983 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->happy_cost)) {
5984 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
5985 }
5986
5987#ifdef FREECIV_JSON_CONNECTION
5988 field_addr.name = "happyborders";
5989#endif /* FREECIV_JSON_CONNECTION */
5990
5991 {
5992 int readin;
5993
5994 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5995 RECEIVE_PACKET_FIELD_ERROR(happyborders);
5996 }
5997 real_packet->happyborders = readin;
5998 }
5999
6000#ifdef FREECIV_JSON_CONNECTION
6001 field_addr.name = "heating";
6002#endif /* FREECIV_JSON_CONNECTION */
6003
6004 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->heating)) {
6006 }
6007
6008#ifdef FREECIV_JSON_CONNECTION
6009 field_addr.name = "illness_base_factor";
6010#endif /* FREECIV_JSON_CONNECTION */
6011
6012 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_base_factor)) {
6013 RECEIVE_PACKET_FIELD_ERROR(illness_base_factor);
6014 }
6015
6016#ifdef FREECIV_JSON_CONNECTION
6017 field_addr.name = "illness_min_size";
6018#endif /* FREECIV_JSON_CONNECTION */
6019
6020 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->illness_min_size)) {
6021 RECEIVE_PACKET_FIELD_ERROR(illness_min_size);
6022 }
6023
6024#ifdef FREECIV_JSON_CONNECTION
6025 field_addr.name = "illness_on";
6026#endif /* FREECIV_JSON_CONNECTION */
6027
6028 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->illness_on)) {
6029 RECEIVE_PACKET_FIELD_ERROR(illness_on);
6030 }
6031
6032#ifdef FREECIV_JSON_CONNECTION
6033 field_addr.name = "illness_pollution_factor";
6034#endif /* FREECIV_JSON_CONNECTION */
6035
6036 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_pollution_factor)) {
6037 RECEIVE_PACKET_FIELD_ERROR(illness_pollution_factor);
6038 }
6039
6040#ifdef FREECIV_JSON_CONNECTION
6041 field_addr.name = "illness_trade_infection";
6042#endif /* FREECIV_JSON_CONNECTION */
6043
6044 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade_infection)) {
6045 RECEIVE_PACKET_FIELD_ERROR(illness_trade_infection);
6046 }
6047
6048#ifdef FREECIV_JSON_CONNECTION
6049 field_addr.name = "init_city_radius_sq";
6050#endif /* FREECIV_JSON_CONNECTION */
6051
6052 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_city_radius_sq)) {
6053 RECEIVE_PACKET_FIELD_ERROR(init_city_radius_sq);
6054 }
6055
6056#ifdef FREECIV_JSON_CONNECTION
6057 field_addr.name = "is_edit_mode";
6058#endif /* FREECIV_JSON_CONNECTION */
6059
6060 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_edit_mode)) {
6061 RECEIVE_PACKET_FIELD_ERROR(is_edit_mode);
6062 }
6063
6064#ifdef FREECIV_JSON_CONNECTION
6065 field_addr.name = "is_new_game";
6066#endif /* FREECIV_JSON_CONNECTION */
6067
6068 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_new_game)) {
6069 RECEIVE_PACKET_FIELD_ERROR(is_new_game);
6070 }
6071
6072#ifdef FREECIV_JSON_CONNECTION
6073 field_addr.name = "killcitizen";
6074#endif /* FREECIV_JSON_CONNECTION */
6075
6076 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killcitizen)) {
6077 RECEIVE_PACKET_FIELD_ERROR(killcitizen);
6078 }
6079
6080#ifdef FREECIV_JSON_CONNECTION
6081 field_addr.name = "killstack";
6082#endif /* FREECIV_JSON_CONNECTION */
6083
6084 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killstack)) {
6085 RECEIVE_PACKET_FIELD_ERROR(killstack);
6086 }
6087
6088#ifdef FREECIV_JSON_CONNECTION
6089 field_addr.name = "only_killing_makes_veteran";
6090#endif /* FREECIV_JSON_CONNECTION */
6091
6092 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_killing_makes_veteran)) {
6093 RECEIVE_PACKET_FIELD_ERROR(only_killing_makes_veteran);
6094 }
6095
6096#ifdef FREECIV_JSON_CONNECTION
6097 field_addr.name = "only_real_fight_makes_veteran";
6098#endif /* FREECIV_JSON_CONNECTION */
6099
6100 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_real_fight_makes_veteran)) {
6101 RECEIVE_PACKET_FIELD_ERROR(only_real_fight_makes_veteran);
6102 }
6103
6104#ifdef FREECIV_JSON_CONNECTION
6105 field_addr.name = "combat_odds_scaled_veterancy";
6106#endif /* FREECIV_JSON_CONNECTION */
6107
6108 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->combat_odds_scaled_veterancy)) {
6109 RECEIVE_PACKET_FIELD_ERROR(combat_odds_scaled_veterancy);
6110 }
6111
6112#ifdef FREECIV_JSON_CONNECTION
6113 field_addr.name = "damage_reduces_bombard_rate";
6114#endif /* FREECIV_JSON_CONNECTION */
6115
6116 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->damage_reduces_bombard_rate)) {
6117 RECEIVE_PACKET_FIELD_ERROR(damage_reduces_bombard_rate);
6118 }
6119
6120#ifdef FREECIV_JSON_CONNECTION
6121 field_addr.name = "low_firepower_badwallattacker";
6122#endif /* FREECIV_JSON_CONNECTION */
6123
6124 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_badwallattacker)) {
6125 RECEIVE_PACKET_FIELD_ERROR(low_firepower_badwallattacker);
6126 }
6127
6128#ifdef FREECIV_JSON_CONNECTION
6129 field_addr.name = "low_firepower_pearl_harbor";
6130#endif /* FREECIV_JSON_CONNECTION */
6131
6132 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_pearl_harbor)) {
6133 RECEIVE_PACKET_FIELD_ERROR(low_firepower_pearl_harbor);
6134 }
6135
6136#ifdef FREECIV_JSON_CONNECTION
6137 field_addr.name = "low_firepower_combat_bonus";
6138#endif /* FREECIV_JSON_CONNECTION */
6139
6140 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_combat_bonus)) {
6141 RECEIVE_PACKET_FIELD_ERROR(low_firepower_combat_bonus);
6142 }
6143
6144#ifdef FREECIV_JSON_CONNECTION
6145 field_addr.name = "low_firepower_nonnat_bombard";
6146#endif /* FREECIV_JSON_CONNECTION */
6147
6148 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_nonnat_bombard)) {
6149 RECEIVE_PACKET_FIELD_ERROR(low_firepower_nonnat_bombard);
6150 }
6151
6152#ifdef FREECIV_JSON_CONNECTION
6153 field_addr.name = "nuke_pop_loss_pct";
6154#endif /* FREECIV_JSON_CONNECTION */
6155
6156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_pop_loss_pct)) {
6157 RECEIVE_PACKET_FIELD_ERROR(nuke_pop_loss_pct);
6158 }
6159
6160#ifdef FREECIV_JSON_CONNECTION
6161 field_addr.name = "nuke_defender_survival_chance_pct";
6162#endif /* FREECIV_JSON_CONNECTION */
6163
6164 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_defender_survival_chance_pct)) {
6165 RECEIVE_PACKET_FIELD_ERROR(nuke_defender_survival_chance_pct);
6166 }
6167
6168#ifdef FREECIV_JSON_CONNECTION
6169 field_addr.name = "min_city_center_output";
6170#endif /* FREECIV_JSON_CONNECTION */
6171
6172 {
6173 int i;
6174
6175
6176#ifdef FREECIV_JSON_CONNECTION
6177 /* Enter array. */
6178 field_addr.sub_location = plocation_elem_new(0);
6179#endif /* FREECIV_JSON_CONNECTION */
6180
6181 for (i = 0; i < O_LAST; i++) {
6182#ifdef FREECIV_JSON_CONNECTION
6183 /* Next array element */
6184 field_addr.sub_location->number = i;
6185#endif /* FREECIV_JSON_CONNECTION */
6186
6187 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_city_center_output[i])) {
6188 RECEIVE_PACKET_FIELD_ERROR(min_city_center_output);
6189 }
6190 }
6191
6192#ifdef FREECIV_JSON_CONNECTION
6193 /* Exit array. */
6194 FC_FREE(field_addr.sub_location);
6195#endif /* FREECIV_JSON_CONNECTION */
6196 }
6197
6198#ifdef FREECIV_JSON_CONNECTION
6199 field_addr.name = "muuk_food_wipe";
6200#endif /* FREECIV_JSON_CONNECTION */
6201
6202 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_food_wipe)) {
6203 RECEIVE_PACKET_FIELD_ERROR(muuk_food_wipe);
6204 }
6205
6206#ifdef FREECIV_JSON_CONNECTION
6207 field_addr.name = "muuk_gold_wipe";
6208#endif /* FREECIV_JSON_CONNECTION */
6209
6210 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_gold_wipe)) {
6211 RECEIVE_PACKET_FIELD_ERROR(muuk_gold_wipe);
6212 }
6213
6214#ifdef FREECIV_JSON_CONNECTION
6215 field_addr.name = "muuk_shield_wipe";
6216#endif /* FREECIV_JSON_CONNECTION */
6217
6218 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_shield_wipe)) {
6219 RECEIVE_PACKET_FIELD_ERROR(muuk_shield_wipe);
6220 }
6221
6222#ifdef FREECIV_JSON_CONNECTION
6223 field_addr.name = "notradesize";
6224#endif /* FREECIV_JSON_CONNECTION */
6225
6226 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->notradesize)) {
6227 RECEIVE_PACKET_FIELD_ERROR(notradesize);
6228 }
6229
6230#ifdef FREECIV_JSON_CONNECTION
6231 field_addr.name = "nuclear_winter";
6232#endif /* FREECIV_JSON_CONNECTION */
6233
6234 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nuclear_winter)) {
6236 }
6237
6238#ifdef FREECIV_JSON_CONNECTION
6239 field_addr.name = "nuclearwinter";
6240#endif /* FREECIV_JSON_CONNECTION */
6241
6242 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->nuclearwinter)) {
6243 RECEIVE_PACKET_FIELD_ERROR(nuclearwinter);
6244 }
6245
6246#ifdef FREECIV_JSON_CONNECTION
6247 field_addr.name = "phase";
6248#endif /* FREECIV_JSON_CONNECTION */
6249
6250 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
6252 }
6253
6254#ifdef FREECIV_JSON_CONNECTION
6255 field_addr.name = "phase_mode";
6256#endif /* FREECIV_JSON_CONNECTION */
6257
6258 {
6259 int readin;
6260
6261 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6262 RECEIVE_PACKET_FIELD_ERROR(phase_mode);
6263 }
6264 real_packet->phase_mode = readin;
6265 }
6266
6267#ifdef FREECIV_JSON_CONNECTION
6268 field_addr.name = "pillage_select";
6269#endif /* FREECIV_JSON_CONNECTION */
6270
6271 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pillage_select)) {
6272 RECEIVE_PACKET_FIELD_ERROR(pillage_select);
6273 }
6274
6275#ifdef FREECIV_JSON_CONNECTION
6276 field_addr.name = "steal_maps_reveals_all_cities";
6277#endif /* FREECIV_JSON_CONNECTION */
6278
6279 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->steal_maps_reveals_all_cities)) {
6280 RECEIVE_PACKET_FIELD_ERROR(steal_maps_reveals_all_cities);
6281 }
6282
6283#ifdef FREECIV_JSON_CONNECTION
6284 field_addr.name = "poison_empties_food_stock";
6285#endif /* FREECIV_JSON_CONNECTION */
6286
6287 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->poison_empties_food_stock)) {
6288 RECEIVE_PACKET_FIELD_ERROR(poison_empties_food_stock);
6289 }
6290
6291#ifdef FREECIV_JSON_CONNECTION
6292 field_addr.name = "tech_steal_allow_holes";
6293#endif /* FREECIV_JSON_CONNECTION */
6294
6295 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_steal_allow_holes)) {
6296 RECEIVE_PACKET_FIELD_ERROR(tech_steal_allow_holes);
6297 }
6298
6299#ifdef FREECIV_JSON_CONNECTION
6300 field_addr.name = "tech_trade_allow_holes";
6301#endif /* FREECIV_JSON_CONNECTION */
6302
6303 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_allow_holes)) {
6304 RECEIVE_PACKET_FIELD_ERROR(tech_trade_allow_holes);
6305 }
6306
6307#ifdef FREECIV_JSON_CONNECTION
6308 field_addr.name = "tech_trade_loss_allow_holes";
6309#endif /* FREECIV_JSON_CONNECTION */
6310
6311 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_loss_allow_holes)) {
6312 RECEIVE_PACKET_FIELD_ERROR(tech_trade_loss_allow_holes);
6313 }
6314
6315#ifdef FREECIV_JSON_CONNECTION
6316 field_addr.name = "tech_parasite_allow_holes";
6317#endif /* FREECIV_JSON_CONNECTION */
6318
6319 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_parasite_allow_holes)) {
6320 RECEIVE_PACKET_FIELD_ERROR(tech_parasite_allow_holes);
6321 }
6322
6323#ifdef FREECIV_JSON_CONNECTION
6324 field_addr.name = "tech_loss_allow_holes";
6325#endif /* FREECIV_JSON_CONNECTION */
6326
6327 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_loss_allow_holes)) {
6328 RECEIVE_PACKET_FIELD_ERROR(tech_loss_allow_holes);
6329 }
6330
6331#ifdef FREECIV_JSON_CONNECTION
6332 field_addr.name = "rapturedelay";
6333#endif /* FREECIV_JSON_CONNECTION */
6334
6335 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapturedelay)) {
6336 RECEIVE_PACKET_FIELD_ERROR(rapturedelay);
6337 }
6338
6339#ifdef FREECIV_JSON_CONNECTION
6340 field_addr.name = "disasters";
6341#endif /* FREECIV_JSON_CONNECTION */
6342
6343 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disasters)) {
6345 }
6346
6347#ifdef FREECIV_JSON_CONNECTION
6348 field_addr.name = "restrictinfra";
6349#endif /* FREECIV_JSON_CONNECTION */
6350
6351 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->restrictinfra)) {
6352 RECEIVE_PACKET_FIELD_ERROR(restrictinfra);
6353 }
6354
6355#ifdef FREECIV_JSON_CONNECTION
6356 field_addr.name = "unreachable_protects";
6357#endif /* FREECIV_JSON_CONNECTION */
6358
6359 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unreachable_protects)) {
6360 RECEIVE_PACKET_FIELD_ERROR(unreachable_protects);
6361 }
6362
6363#ifdef FREECIV_JSON_CONNECTION
6364 field_addr.name = "sciencebox";
6365#endif /* FREECIV_JSON_CONNECTION */
6366
6367 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->sciencebox)) {
6368 RECEIVE_PACKET_FIELD_ERROR(sciencebox);
6369 }
6370
6371#ifdef FREECIV_JSON_CONNECTION
6372 field_addr.name = "shieldbox";
6373#endif /* FREECIV_JSON_CONNECTION */
6374
6375 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->shieldbox)) {
6376 RECEIVE_PACKET_FIELD_ERROR(shieldbox);
6377 }
6378
6379#ifdef FREECIV_JSON_CONNECTION
6380 field_addr.name = "skill_level";
6381#endif /* FREECIV_JSON_CONNECTION */
6382
6383 {
6384 int readin;
6385
6386 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6387 RECEIVE_PACKET_FIELD_ERROR(skill_level);
6388 }
6389 real_packet->skill_level = readin;
6390 }
6391
6392#ifdef FREECIV_JSON_CONNECTION
6393 field_addr.name = "victory_conditions";
6394#endif /* FREECIV_JSON_CONNECTION */
6395
6396 {
6397 int readin;
6398
6399 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6400 RECEIVE_PACKET_FIELD_ERROR(victory_conditions);
6401 }
6402 real_packet->victory_conditions = readin;
6403 }
6404
6405#ifdef FREECIV_JSON_CONNECTION
6406 field_addr.name = "team_pooled_research";
6407#endif /* FREECIV_JSON_CONNECTION */
6408
6409 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->team_pooled_research)) {
6410 RECEIVE_PACKET_FIELD_ERROR(team_pooled_research);
6411 }
6412
6413#ifdef FREECIV_JSON_CONNECTION
6414 field_addr.name = "tech";
6415#endif /* FREECIV_JSON_CONNECTION */
6416
6417 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech)) {
6419 }
6420
6421#ifdef FREECIV_JSON_CONNECTION
6422 field_addr.name = "tech_cost_style";
6423#endif /* FREECIV_JSON_CONNECTION */
6424
6425 {
6426 int readin;
6427
6428 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6429 RECEIVE_PACKET_FIELD_ERROR(tech_cost_style);
6430 }
6431 real_packet->tech_cost_style = readin;
6432 }
6433
6434#ifdef FREECIV_JSON_CONNECTION
6435 field_addr.name = "tech_leakage";
6436#endif /* FREECIV_JSON_CONNECTION */
6437
6438 {
6439 int readin;
6440
6441 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6442 RECEIVE_PACKET_FIELD_ERROR(tech_leakage);
6443 }
6444 real_packet->tech_leakage = readin;
6445 }
6446
6447#ifdef FREECIV_JSON_CONNECTION
6448 field_addr.name = "tech_upkeep_divider";
6449#endif /* FREECIV_JSON_CONNECTION */
6450
6451 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_divider)) {
6452 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_divider);
6453 }
6454
6455#ifdef FREECIV_JSON_CONNECTION
6456 field_addr.name = "tech_upkeep_style";
6457#endif /* FREECIV_JSON_CONNECTION */
6458
6459 {
6460 int readin;
6461
6462 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6463 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_style);
6464 }
6465 real_packet->tech_upkeep_style = readin;
6466 }
6467
6468#ifdef FREECIV_JSON_CONNECTION
6469 field_addr.name = "techloss_forgiveness";
6470#endif /* FREECIV_JSON_CONNECTION */
6471
6472 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->techloss_forgiveness)) {
6473 RECEIVE_PACKET_FIELD_ERROR(techloss_forgiveness);
6474 }
6475
6476#ifdef FREECIV_JSON_CONNECTION
6477 field_addr.name = "free_tech_method";
6478#endif /* FREECIV_JSON_CONNECTION */
6479
6480 {
6481 int readin;
6482
6483 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6484 RECEIVE_PACKET_FIELD_ERROR(free_tech_method);
6485 }
6486 real_packet->free_tech_method = readin;
6487 }
6488
6489#ifdef FREECIV_JSON_CONNECTION
6490 field_addr.name = "gameloss_style";
6491#endif /* FREECIV_JSON_CONNECTION */
6492
6493 {
6494 int readin;
6495
6496 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6497 RECEIVE_PACKET_FIELD_ERROR(gameloss_style);
6498 }
6499 real_packet->gameloss_style = readin;
6500 }
6501
6502#ifdef FREECIV_JSON_CONNECTION
6503 field_addr.name = "timeout";
6504#endif /* FREECIV_JSON_CONNECTION */
6505
6506 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->timeout)) {
6508 }
6509
6510#ifdef FREECIV_JSON_CONNECTION
6511 field_addr.name = "first_timeout";
6512#endif /* FREECIV_JSON_CONNECTION */
6513
6514 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->first_timeout)) {
6515 RECEIVE_PACKET_FIELD_ERROR(first_timeout);
6516 }
6517
6518#ifdef FREECIV_JSON_CONNECTION
6519 field_addr.name = "tired_attack";
6520#endif /* FREECIV_JSON_CONNECTION */
6521
6522 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tired_attack)) {
6523 RECEIVE_PACKET_FIELD_ERROR(tired_attack);
6524 }
6525
6526#ifdef FREECIV_JSON_CONNECTION
6527 field_addr.name = "trademindist";
6528#endif /* FREECIV_JSON_CONNECTION */
6529
6530 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trademindist)) {
6531 RECEIVE_PACKET_FIELD_ERROR(trademindist);
6532 }
6533
6534#ifdef FREECIV_JSON_CONNECTION
6535 field_addr.name = "trade_revenue_style";
6536#endif /* FREECIV_JSON_CONNECTION */
6537
6538 {
6539 int readin;
6540
6541 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6542 RECEIVE_PACKET_FIELD_ERROR(trade_revenue_style);
6543 }
6544 real_packet->trade_revenue_style = readin;
6545 }
6546
6547#ifdef FREECIV_JSON_CONNECTION
6548 field_addr.name = "trading_city";
6549#endif /* FREECIV_JSON_CONNECTION */
6550
6551 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_city)) {
6552 RECEIVE_PACKET_FIELD_ERROR(trading_city);
6553 }
6554
6555#ifdef FREECIV_JSON_CONNECTION
6556 field_addr.name = "trading_gold";
6557#endif /* FREECIV_JSON_CONNECTION */
6558
6559 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_gold)) {
6560 RECEIVE_PACKET_FIELD_ERROR(trading_gold);
6561 }
6562
6563#ifdef FREECIV_JSON_CONNECTION
6564 field_addr.name = "trading_tech";
6565#endif /* FREECIV_JSON_CONNECTION */
6566
6567 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_tech)) {
6568 RECEIVE_PACKET_FIELD_ERROR(trading_tech);
6569 }
6570
6571#ifdef FREECIV_JSON_CONNECTION
6572 field_addr.name = "turn";
6573#endif /* FREECIV_JSON_CONNECTION */
6574
6575 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
6577 }
6578
6579#ifdef FREECIV_JSON_CONNECTION
6580 field_addr.name = "warminglevel";
6581#endif /* FREECIV_JSON_CONNECTION */
6582
6583 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->warminglevel)) {
6584 RECEIVE_PACKET_FIELD_ERROR(warminglevel);
6585 }
6586
6587#ifdef FREECIV_JSON_CONNECTION
6588 field_addr.name = "year";
6589#endif /* FREECIV_JSON_CONNECTION */
6590
6591 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
6593 }
6594
6595#ifdef FREECIV_JSON_CONNECTION
6596 field_addr.name = "year_0_hack";
6597#endif /* FREECIV_JSON_CONNECTION */
6598
6599 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->year_0_hack)) {
6600 RECEIVE_PACKET_FIELD_ERROR(year_0_hack);
6601 }
6602
6603#ifdef FREECIV_JSON_CONNECTION
6604 field_addr.name = "top_cities_count";
6605#endif /* FREECIV_JSON_CONNECTION */
6606
6607 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->top_cities_count)) {
6608 RECEIVE_PACKET_FIELD_ERROR(top_cities_count);
6609 }
6610
6611#ifdef FREECIV_JSON_CONNECTION
6612 field_addr.name = "fragment_count";
6613#endif /* FREECIV_JSON_CONNECTION */
6614
6615 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragment_count)) {
6616 RECEIVE_PACKET_FIELD_ERROR(fragment_count);
6617 }
6618
6619#ifdef FREECIV_JSON_CONNECTION
6620 field_addr.name = "granularity";
6621#endif /* FREECIV_JSON_CONNECTION */
6622
6623 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granularity)) {
6624 RECEIVE_PACKET_FIELD_ERROR(granularity);
6625 }
6626
6627#ifdef FREECIV_JSON_CONNECTION
6628 field_addr.name = "small_wonder_visibility";
6629#endif /* FREECIV_JSON_CONNECTION */
6630
6631 {
6632 int readin;
6633
6634 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
6635 RECEIVE_PACKET_FIELD_ERROR(small_wonder_visibility);
6636 }
6637 real_packet->small_wonder_visibility = readin;
6638 }
6639#endif /* FREECIV_DELTA_PROTOCOL */
6640
6642#undef FREE_PACKET_STRUCT
6643}
6644
6645static int send_packet_game_info_100(struct connection *pc, const struct packet_game_info *packet)
6646{
6647 const struct packet_game_info *real_packet = packet;
6648 int e;
6650
6651 log_packet_detailed("packet_game_info_100: sending info about ()");
6652
6653#ifdef FREECIV_DELTA_PROTOCOL
6655 struct packet_game_info *old;
6656 bool differ;
6657 int different = 0;
6658 struct genhash **hash = pc->phs.sent + PACKET_GAME_INFO;
6659
6660 if (nullptr == *hash) {
6662 nullptr, nullptr, nullptr, destroy_packet_game_info);
6663 }
6664 BV_CLR_ALL(fields);
6665
6666 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
6667 old = fc_malloc(sizeof(*old));
6668 /* temporary bitcopy just to insert correctly */
6669 *old = *real_packet;
6672 different = 1; /* Force to send. */
6673 }
6674
6675 differ = (old->add_to_size_limit != real_packet->add_to_size_limit);
6676 if (differ) {
6677 different++;
6678 BV_SET(fields, 0);
6679 }
6680
6681 differ = (old->aifill != real_packet->aifill);
6682 if (differ) {
6683 different++;
6684 BV_SET(fields, 1);
6685 }
6686
6687 differ = (old->persistent_ready != real_packet->persistent_ready);
6688 if (differ) {
6689 different++;
6690 BV_SET(fields, 2);
6691 }
6692
6693 differ = (old->airlifting_style != real_packet->airlifting_style);
6694 if (differ) {
6695 different++;
6696 BV_SET(fields, 3);
6697 }
6698
6699 differ = (old->airlift_from_always_enabled != real_packet->airlift_from_always_enabled);
6700 if (differ) {
6701 different++;
6702 }
6703 /* folded into head */
6704 if (real_packet->airlift_from_always_enabled) {
6705 BV_SET(fields, 4);
6706 }
6707
6708 differ = (old->airlift_to_always_enabled != real_packet->airlift_to_always_enabled);
6709 if (differ) {
6710 different++;
6711 }
6712 /* folded into head */
6713 if (real_packet->airlift_to_always_enabled) {
6714 BV_SET(fields, 5);
6715 }
6716
6717 differ = (old->angrycitizen != real_packet->angrycitizen);
6718 if (differ) {
6719 different++;
6720 BV_SET(fields, 6);
6721 }
6722
6723 differ = (old->base_pollution != real_packet->base_pollution);
6724 if (differ) {
6725 different++;
6726 BV_SET(fields, 7);
6727 }
6728
6729 differ = (old->base_tech_cost != real_packet->base_tech_cost);
6730 if (differ) {
6731 different++;
6732 BV_SET(fields, 8);
6733 }
6734
6735 differ = (old->min_tech_cost != real_packet->min_tech_cost);
6736 if (differ) {
6737 different++;
6738 BV_SET(fields, 9);
6739 }
6740
6741 differ = (old->tech_leak_pct != real_packet->tech_leak_pct);
6742 if (differ) {
6743 different++;
6744 BV_SET(fields, 10);
6745 }
6746
6747 differ = (old->border_city_radius_sq != real_packet->border_city_radius_sq);
6748 if (differ) {
6749 different++;
6750 BV_SET(fields, 11);
6751 }
6752
6753 differ = (old->border_size_effect != real_packet->border_size_effect);
6754 if (differ) {
6755 different++;
6756 BV_SET(fields, 12);
6757 }
6758
6759 differ = (old->border_city_permanent_radius_sq != real_packet->border_city_permanent_radius_sq);
6760 if (differ) {
6761 different++;
6762 BV_SET(fields, 13);
6763 }
6764
6765 differ = (old->borders != real_packet->borders);
6766 if (differ) {
6767 different++;
6768 BV_SET(fields, 14);
6769 }
6770
6771 differ = (old->base_bribe_cost != real_packet->base_bribe_cost);
6772 if (differ) {
6773 different++;
6774 BV_SET(fields, 15);
6775 }
6776
6777 differ = (old->caravan_bonus_style != real_packet->caravan_bonus_style);
6778 if (differ) {
6779 different++;
6780 BV_SET(fields, 16);
6781 }
6782
6783 differ = (old->culture_vic_points != real_packet->culture_vic_points);
6784 if (differ) {
6785 different++;
6786 BV_SET(fields, 17);
6787 }
6788
6789 differ = (old->culture_vic_lead != real_packet->culture_vic_lead);
6790 if (differ) {
6791 different++;
6792 BV_SET(fields, 18);
6793 }
6794
6795 differ = (old->culture_migration_pml != real_packet->culture_migration_pml);
6796 if (differ) {
6797 different++;
6798 BV_SET(fields, 19);
6799 }
6800
6801 differ = (old->history_interest_pml != real_packet->history_interest_pml);
6802 if (differ) {
6803 different++;
6804 BV_SET(fields, 20);
6805 }
6806
6807 differ = (old->world_peace_turns != real_packet->world_peace_turns);
6808 if (differ) {
6809 different++;
6810 BV_SET(fields, 21);
6811 }
6812
6813 differ = (old->celebratesize != real_packet->celebratesize);
6814 if (differ) {
6815 different++;
6816 BV_SET(fields, 22);
6817 }
6818
6819 differ = (old->changable_tax != real_packet->changable_tax);
6820 if (differ) {
6821 different++;
6822 }
6823 /* folded into head */
6824 if (real_packet->changable_tax) {
6825 BV_SET(fields, 23);
6826 }
6827
6828 differ = (old->pop_report_zeroes != real_packet->pop_report_zeroes);
6829 if (differ) {
6830 different++;
6831 BV_SET(fields, 24);
6832 }
6833
6834 differ = (old->citizen_nationality != real_packet->citizen_nationality);
6835 if (differ) {
6836 different++;
6837 }
6838 /* folded into head */
6839 if (real_packet->citizen_nationality) {
6840 BV_SET(fields, 25);
6841 }
6842
6843 differ = (old->unit_builders_nationality != real_packet->unit_builders_nationality);
6844 if (differ) {
6845 different++;
6846 }
6847 /* folded into head */
6848 if (real_packet->unit_builders_nationality) {
6849 BV_SET(fields, 26);
6850 }
6851
6852 differ = (old->citizen_convert_speed != real_packet->citizen_convert_speed);
6853 if (differ) {
6854 different++;
6855 BV_SET(fields, 27);
6856 }
6857
6858 differ = (old->conquest_convert_pct != real_packet->conquest_convert_pct);
6859 if (differ) {
6860 different++;
6861 BV_SET(fields, 28);
6862 }
6863
6864 differ = (old->citizen_partisans_pct != real_packet->citizen_partisans_pct);
6865 if (differ) {
6866 different++;
6867 BV_SET(fields, 29);
6868 }
6869
6870 differ = (old->citymindist != real_packet->citymindist);
6871 if (differ) {
6872 different++;
6873 BV_SET(fields, 30);
6874 }
6875
6876 differ = (old->cooling != real_packet->cooling);
6877 if (differ) {
6878 different++;
6879 BV_SET(fields, 31);
6880 }
6881
6882 differ = (old->coolinglevel != real_packet->coolinglevel);
6883 if (differ) {
6884 different++;
6885 BV_SET(fields, 32);
6886 }
6887
6888 differ = !BV_ARE_EQUAL(old->diplchance_initial_odds, real_packet->diplchance_initial_odds);
6889 if (differ) {
6890 different++;
6891 BV_SET(fields, 33);
6892 }
6893
6894 differ = (old->diplomacy != real_packet->diplomacy);
6895 if (differ) {
6896 different++;
6897 BV_SET(fields, 34);
6898 }
6899
6900 differ = (old->fogofwar != real_packet->fogofwar);
6901 if (differ) {
6902 different++;
6903 }
6904 /* folded into head */
6905 if (real_packet->fogofwar) {
6906 BV_SET(fields, 35);
6907 }
6908
6909 differ = (old->food_cost != real_packet->food_cost);
6910 if (differ) {
6911 different++;
6912 BV_SET(fields, 36);
6913 }
6914
6915 differ = (old->foodbox != real_packet->foodbox);
6916 if (differ) {
6917 different++;
6918 BV_SET(fields, 37);
6919 }
6920
6921 differ = (old->forced_gold != real_packet->forced_gold);
6922 if (differ) {
6923 different++;
6924 BV_SET(fields, 38);
6925 }
6926
6927 differ = (old->forced_luxury != real_packet->forced_luxury);
6928 if (differ) {
6929 different++;
6930 BV_SET(fields, 39);
6931 }
6932
6933 differ = (old->forced_science != real_packet->forced_science);
6934 if (differ) {
6935 different++;
6936 BV_SET(fields, 40);
6937 }
6938
6939 differ = (old->fulltradesize != real_packet->fulltradesize);
6940 if (differ) {
6941 different++;
6942 BV_SET(fields, 41);
6943 }
6944
6945 differ = (old->trade_world_rel_pct != real_packet->trade_world_rel_pct);
6946 if (differ) {
6947 different++;
6948 BV_SET(fields, 42);
6949 }
6950
6951 differ = (old->min_trade_route_val != real_packet->min_trade_route_val);
6952 if (differ) {
6953 different++;
6954 BV_SET(fields, 43);
6955 }
6956
6957 differ = (old->reveal_trade_partner != real_packet->reveal_trade_partner);
6958 if (differ) {
6959 different++;
6960 }
6961 /* folded into head */
6962 if (real_packet->reveal_trade_partner) {
6963 BV_SET(fields, 44);
6964 }
6965
6966 differ = (old->goods_selection != real_packet->goods_selection);
6967 if (differ) {
6968 different++;
6969 BV_SET(fields, 45);
6970 }
6971
6972 differ = (old->global_advance_count != real_packet->global_advance_count);
6973 if (differ) {
6974 different++;
6975 BV_SET(fields, 46);
6976 }
6977
6978 differ = FALSE;
6979 {
6980 int i;
6981
6982 for (i = 0; i < A_LAST; i++) {
6983 differ = (old->global_advances[i] != real_packet->global_advances[i]);
6984 if (differ) {
6985 break;
6986 }
6987 }
6988 }
6989 if (differ) {
6990 different++;
6991 BV_SET(fields, 47);
6992 }
6993
6994 differ = (old->global_warming != real_packet->global_warming);
6995 if (differ) {
6996 different++;
6997 }
6998 /* folded into head */
6999 if (real_packet->global_warming) {
7000 BV_SET(fields, 48);
7001 }
7002
7003 differ = (old->globalwarming != real_packet->globalwarming);
7004 if (differ) {
7005 different++;
7006 BV_SET(fields, 49);
7007 }
7008
7009 differ = (old->gold != real_packet->gold);
7010 if (differ) {
7011 different++;
7012 BV_SET(fields, 50);
7013 }
7014
7015 differ = (old->gold_upkeep_style != real_packet->gold_upkeep_style);
7016 if (differ) {
7017 different++;
7018 BV_SET(fields, 51);
7019 }
7020
7021 differ = (old->homeless_gold_upkeep != real_packet->homeless_gold_upkeep);
7022 if (differ) {
7023 different++;
7024 }
7025 /* folded into head */
7026 if (real_packet->homeless_gold_upkeep) {
7027 BV_SET(fields, 52);
7028 }
7029
7030 differ = (old->infrapoints != real_packet->infrapoints);
7031 if (differ) {
7032 different++;
7033 BV_SET(fields, 53);
7034 }
7035
7036 differ = (old->revolentype != real_packet->revolentype);
7037 if (differ) {
7038 different++;
7039 BV_SET(fields, 54);
7040 }
7041
7042 differ = (old->default_government_id != real_packet->default_government_id);
7043 if (differ) {
7044 different++;
7045 BV_SET(fields, 55);
7046 }
7047
7048 differ = (old->government_during_revolution_id != real_packet->government_during_revolution_id);
7049 if (differ) {
7050 different++;
7051 BV_SET(fields, 56);
7052 }
7053
7054 differ = (old->granary_food_inc != real_packet->granary_food_inc);
7055 if (differ) {
7056 different++;
7057 BV_SET(fields, 57);
7058 }
7059
7060 differ = FALSE;
7061 {
7062 int i;
7063
7064 for (i = 0; i < MAX_GRANARY_INIS; i++) {
7065 differ = (old->granary_food_ini[i] != real_packet->granary_food_ini[i]);
7066 if (differ) {
7067 break;
7068 }
7069 }
7070 }
7071 if (differ) {
7072 different++;
7073 BV_SET(fields, 58);
7074 }
7075
7076 differ = (old->granary_num_inis != real_packet->granary_num_inis);
7077 if (differ) {
7078 different++;
7079 BV_SET(fields, 59);
7080 }
7081
7082 differ = FALSE;
7083 {
7084 int i;
7085
7086 for (i = 0; i < B_LAST; i++) {
7087 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
7088 if (differ) {
7089 break;
7090 }
7091 }
7092 }
7093 if (differ) {
7094 different++;
7095 BV_SET(fields, 60);
7096 }
7097
7098 differ = (old->happy_cost != real_packet->happy_cost);
7099 if (differ) {
7100 different++;
7101 BV_SET(fields, 61);
7102 }
7103
7104 differ = (old->happyborders != real_packet->happyborders);
7105 if (differ) {
7106 different++;
7107 BV_SET(fields, 62);
7108 }
7109
7110 differ = (old->heating != real_packet->heating);
7111 if (differ) {
7112 different++;
7113 BV_SET(fields, 63);
7114 }
7115
7116 differ = (old->illness_base_factor != real_packet->illness_base_factor);
7117 if (differ) {
7118 different++;
7119 BV_SET(fields, 64);
7120 }
7121
7122 differ = (old->illness_min_size != real_packet->illness_min_size);
7123 if (differ) {
7124 different++;
7125 BV_SET(fields, 65);
7126 }
7127
7128 differ = (old->illness_on != real_packet->illness_on);
7129 if (differ) {
7130 different++;
7131 }
7132 /* folded into head */
7133 if (real_packet->illness_on) {
7134 BV_SET(fields, 66);
7135 }
7136
7137 differ = (old->illness_pollution_factor != real_packet->illness_pollution_factor);
7138 if (differ) {
7139 different++;
7140 BV_SET(fields, 67);
7141 }
7142
7143 differ = (old->illness_trade_infection != real_packet->illness_trade_infection);
7144 if (differ) {
7145 different++;
7146 BV_SET(fields, 68);
7147 }
7148
7149 differ = (old->init_city_radius_sq != real_packet->init_city_radius_sq);
7150 if (differ) {
7151 different++;
7152 BV_SET(fields, 69);
7153 }
7154
7155 differ = (old->is_edit_mode != real_packet->is_edit_mode);
7156 if (differ) {
7157 different++;
7158 }
7159 /* folded into head */
7160 if (real_packet->is_edit_mode) {
7161 BV_SET(fields, 70);
7162 }
7163
7164 differ = (old->is_new_game != real_packet->is_new_game);
7165 if (differ) {
7166 different++;
7167 }
7168 /* folded into head */
7169 if (real_packet->is_new_game) {
7170 BV_SET(fields, 71);
7171 }
7172
7173 differ = (old->killcitizen != real_packet->killcitizen);
7174 if (differ) {
7175 different++;
7176 }
7177 /* folded into head */
7178 if (real_packet->killcitizen) {
7179 BV_SET(fields, 72);
7180 }
7181
7182 differ = (old->killstack != real_packet->killstack);
7183 if (differ) {
7184 different++;
7185 }
7186 /* folded into head */
7187 if (real_packet->killstack) {
7188 BV_SET(fields, 73);
7189 }
7190
7191 differ = (old->only_killing_makes_veteran != real_packet->only_killing_makes_veteran);
7192 if (differ) {
7193 different++;
7194 }
7195 /* folded into head */
7196 if (real_packet->only_killing_makes_veteran) {
7197 BV_SET(fields, 74);
7198 }
7199
7200 differ = (old->only_real_fight_makes_veteran != real_packet->only_real_fight_makes_veteran);
7201 if (differ) {
7202 different++;
7203 }
7204 /* folded into head */
7205 if (real_packet->only_real_fight_makes_veteran) {
7206 BV_SET(fields, 75);
7207 }
7208
7209 differ = (old->combat_odds_scaled_veterancy != real_packet->combat_odds_scaled_veterancy);
7210 if (differ) {
7211 different++;
7212 }
7213 /* folded into head */
7214 if (real_packet->combat_odds_scaled_veterancy) {
7215 BV_SET(fields, 76);
7216 }
7217
7218 differ = (old->damage_reduces_bombard_rate != real_packet->damage_reduces_bombard_rate);
7219 if (differ) {
7220 different++;
7221 }
7222 /* folded into head */
7223 if (real_packet->damage_reduces_bombard_rate) {
7224 BV_SET(fields, 77);
7225 }
7226
7227 differ = (old->low_firepower_badwallattacker != real_packet->low_firepower_badwallattacker);
7228 if (differ) {
7229 different++;
7230 BV_SET(fields, 78);
7231 }
7232
7233 differ = (old->low_firepower_pearl_harbor != real_packet->low_firepower_pearl_harbor);
7234 if (differ) {
7235 different++;
7236 BV_SET(fields, 79);
7237 }
7238
7239 differ = (old->low_firepower_combat_bonus != real_packet->low_firepower_combat_bonus);
7240 if (differ) {
7241 different++;
7242 BV_SET(fields, 80);
7243 }
7244
7245 differ = (old->low_firepower_nonnat_bombard != real_packet->low_firepower_nonnat_bombard);
7246 if (differ) {
7247 different++;
7248 BV_SET(fields, 81);
7249 }
7250
7251 differ = (old->nuke_pop_loss_pct != real_packet->nuke_pop_loss_pct);
7252 if (differ) {
7253 different++;
7254 BV_SET(fields, 82);
7255 }
7256
7257 differ = (old->nuke_defender_survival_chance_pct != real_packet->nuke_defender_survival_chance_pct);
7258 if (differ) {
7259 different++;
7260 BV_SET(fields, 83);
7261 }
7262
7263 differ = FALSE;
7264 {
7265 int i;
7266
7267 for (i = 0; i < O_LAST; i++) {
7268 differ = (old->min_city_center_output[i] != real_packet->min_city_center_output[i]);
7269 if (differ) {
7270 break;
7271 }
7272 }
7273 }
7274 if (differ) {
7275 different++;
7276 BV_SET(fields, 84);
7277 }
7278
7279 differ = (old->muuk_food_wipe != real_packet->muuk_food_wipe);
7280 if (differ) {
7281 different++;
7282 }
7283 /* folded into head */
7284 if (real_packet->muuk_food_wipe) {
7285 BV_SET(fields, 85);
7286 }
7287
7288 differ = (old->muuk_gold_wipe != real_packet->muuk_gold_wipe);
7289 if (differ) {
7290 different++;
7291 }
7292 /* folded into head */
7293 if (real_packet->muuk_gold_wipe) {
7294 BV_SET(fields, 86);
7295 }
7296
7297 differ = (old->muuk_shield_wipe != real_packet->muuk_shield_wipe);
7298 if (differ) {
7299 different++;
7300 }
7301 /* folded into head */
7302 if (real_packet->muuk_shield_wipe) {
7303 BV_SET(fields, 87);
7304 }
7305
7306 differ = (old->notradesize != real_packet->notradesize);
7307 if (differ) {
7308 different++;
7309 BV_SET(fields, 88);
7310 }
7311
7312 differ = (old->nuclear_winter != real_packet->nuclear_winter);
7313 if (differ) {
7314 different++;
7315 }
7316 /* folded into head */
7317 if (real_packet->nuclear_winter) {
7318 BV_SET(fields, 89);
7319 }
7320
7321 differ = (old->nuclearwinter != real_packet->nuclearwinter);
7322 if (differ) {
7323 different++;
7324 BV_SET(fields, 90);
7325 }
7326
7327 differ = (old->phase != real_packet->phase);
7328 if (differ) {
7329 different++;
7330 BV_SET(fields, 91);
7331 }
7332
7333 differ = (old->phase_mode != real_packet->phase_mode);
7334 if (differ) {
7335 different++;
7336 BV_SET(fields, 92);
7337 }
7338
7339 differ = (old->pillage_select != real_packet->pillage_select);
7340 if (differ) {
7341 different++;
7342 }
7343 /* folded into head */
7344 if (real_packet->pillage_select) {
7345 BV_SET(fields, 93);
7346 }
7347
7348 differ = (old->steal_maps_reveals_all_cities != real_packet->steal_maps_reveals_all_cities);
7349 if (differ) {
7350 different++;
7351 }
7352 /* folded into head */
7353 if (real_packet->steal_maps_reveals_all_cities) {
7354 BV_SET(fields, 94);
7355 }
7356
7357 differ = (old->poison_empties_food_stock != real_packet->poison_empties_food_stock);
7358 if (differ) {
7359 different++;
7360 }
7361 /* folded into head */
7362 if (real_packet->poison_empties_food_stock) {
7363 BV_SET(fields, 95);
7364 }
7365
7366 differ = (old->tech_steal_allow_holes != real_packet->tech_steal_allow_holes);
7367 if (differ) {
7368 different++;
7369 }
7370 /* folded into head */
7371 if (real_packet->tech_steal_allow_holes) {
7372 BV_SET(fields, 96);
7373 }
7374
7375 differ = (old->tech_trade_allow_holes != real_packet->tech_trade_allow_holes);
7376 if (differ) {
7377 different++;
7378 }
7379 /* folded into head */
7380 if (real_packet->tech_trade_allow_holes) {
7381 BV_SET(fields, 97);
7382 }
7383
7384 differ = (old->tech_trade_loss_allow_holes != real_packet->tech_trade_loss_allow_holes);
7385 if (differ) {
7386 different++;
7387 }
7388 /* folded into head */
7389 if (real_packet->tech_trade_loss_allow_holes) {
7390 BV_SET(fields, 98);
7391 }
7392
7393 differ = (old->tech_parasite_allow_holes != real_packet->tech_parasite_allow_holes);
7394 if (differ) {
7395 different++;
7396 }
7397 /* folded into head */
7398 if (real_packet->tech_parasite_allow_holes) {
7399 BV_SET(fields, 99);
7400 }
7401
7402 differ = (old->tech_loss_allow_holes != real_packet->tech_loss_allow_holes);
7403 if (differ) {
7404 different++;
7405 }
7406 /* folded into head */
7407 if (real_packet->tech_loss_allow_holes) {
7408 BV_SET(fields, 100);
7409 }
7410
7411 differ = (old->rapturedelay != real_packet->rapturedelay);
7412 if (differ) {
7413 different++;
7414 BV_SET(fields, 101);
7415 }
7416
7417 differ = (old->disasters != real_packet->disasters);
7418 if (differ) {
7419 different++;
7420 BV_SET(fields, 102);
7421 }
7422
7423 differ = (old->restrictinfra != real_packet->restrictinfra);
7424 if (differ) {
7425 different++;
7426 }
7427 /* folded into head */
7428 if (real_packet->restrictinfra) {
7429 BV_SET(fields, 103);
7430 }
7431
7432 differ = (old->unreachable_protects != real_packet->unreachable_protects);
7433 if (differ) {
7434 different++;
7435 }
7436 /* folded into head */
7437 if (real_packet->unreachable_protects) {
7438 BV_SET(fields, 104);
7439 }
7440
7441 differ = (old->sciencebox != real_packet->sciencebox);
7442 if (differ) {
7443 different++;
7444 BV_SET(fields, 105);
7445 }
7446
7447 differ = (old->shieldbox != real_packet->shieldbox);
7448 if (differ) {
7449 different++;
7450 BV_SET(fields, 106);
7451 }
7452
7453 differ = (old->skill_level != real_packet->skill_level);
7454 if (differ) {
7455 different++;
7456 BV_SET(fields, 107);
7457 }
7458
7459 differ = (old->victory_conditions != real_packet->victory_conditions);
7460 if (differ) {
7461 different++;
7462 BV_SET(fields, 108);
7463 }
7464
7465 differ = (old->team_pooled_research != real_packet->team_pooled_research);
7466 if (differ) {
7467 different++;
7468 }
7469 /* folded into head */
7470 if (real_packet->team_pooled_research) {
7471 BV_SET(fields, 109);
7472 }
7473
7474 differ = (old->tech != real_packet->tech);
7475 if (differ) {
7476 different++;
7477 BV_SET(fields, 110);
7478 }
7479
7480 differ = (old->tech_cost_style != real_packet->tech_cost_style);
7481 if (differ) {
7482 different++;
7483 BV_SET(fields, 111);
7484 }
7485
7486 differ = (old->tech_leakage != real_packet->tech_leakage);
7487 if (differ) {
7488 different++;
7489 BV_SET(fields, 112);
7490 }
7491
7492 differ = (old->tech_upkeep_divider != real_packet->tech_upkeep_divider);
7493 if (differ) {
7494 different++;
7495 BV_SET(fields, 113);
7496 }
7497
7498 differ = (old->tech_upkeep_style != real_packet->tech_upkeep_style);
7499 if (differ) {
7500 different++;
7501 BV_SET(fields, 114);
7502 }
7503
7504 differ = (old->techloss_forgiveness != real_packet->techloss_forgiveness);
7505 if (differ) {
7506 different++;
7507 BV_SET(fields, 115);
7508 }
7509
7510 differ = (old->free_tech_method != real_packet->free_tech_method);
7511 if (differ) {
7512 different++;
7513 BV_SET(fields, 116);
7514 }
7515
7516 differ = (old->gameloss_style != real_packet->gameloss_style);
7517 if (differ) {
7518 different++;
7519 BV_SET(fields, 117);
7520 }
7521
7522 differ = (old->timeout != real_packet->timeout);
7523 if (differ) {
7524 different++;
7525 BV_SET(fields, 118);
7526 }
7527
7528 differ = (old->first_timeout != real_packet->first_timeout);
7529 if (differ) {
7530 different++;
7531 BV_SET(fields, 119);
7532 }
7533
7534 differ = (old->tired_attack != real_packet->tired_attack);
7535 if (differ) {
7536 different++;
7537 }
7538 /* folded into head */
7539 if (real_packet->tired_attack) {
7540 BV_SET(fields, 120);
7541 }
7542
7543 differ = (old->trademindist != real_packet->trademindist);
7544 if (differ) {
7545 different++;
7546 BV_SET(fields, 121);
7547 }
7548
7549 differ = (old->trade_revenue_style != real_packet->trade_revenue_style);
7550 if (differ) {
7551 different++;
7552 BV_SET(fields, 122);
7553 }
7554
7555 differ = (old->trading_city != real_packet->trading_city);
7556 if (differ) {
7557 different++;
7558 }
7559 /* folded into head */
7560 if (real_packet->trading_city) {
7561 BV_SET(fields, 123);
7562 }
7563
7564 differ = (old->trading_gold != real_packet->trading_gold);
7565 if (differ) {
7566 different++;
7567 }
7568 /* folded into head */
7569 if (real_packet->trading_gold) {
7570 BV_SET(fields, 124);
7571 }
7572
7573 differ = (old->trading_tech != real_packet->trading_tech);
7574 if (differ) {
7575 different++;
7576 }
7577 /* folded into head */
7578 if (real_packet->trading_tech) {
7579 BV_SET(fields, 125);
7580 }
7581
7582 differ = (old->turn != real_packet->turn);
7583 if (differ) {
7584 different++;
7585 BV_SET(fields, 126);
7586 }
7587
7588 differ = (old->warminglevel != real_packet->warminglevel);
7589 if (differ) {
7590 different++;
7591 BV_SET(fields, 127);
7592 }
7593
7594 differ = (old->year != real_packet->year);
7595 if (differ) {
7596 different++;
7597 BV_SET(fields, 128);
7598 }
7599
7600 differ = (old->year_0_hack != real_packet->year_0_hack);
7601 if (differ) {
7602 different++;
7603 }
7604 /* folded into head */
7605 if (real_packet->year_0_hack) {
7606 BV_SET(fields, 129);
7607 }
7608
7609 differ = (old->top_cities_count != real_packet->top_cities_count);
7610 if (differ) {
7611 different++;
7612 BV_SET(fields, 130);
7613 }
7614
7615 differ = (old->fragment_count != real_packet->fragment_count);
7616 if (differ) {
7617 different++;
7618 BV_SET(fields, 131);
7619 }
7620
7621 differ = (old->granularity != real_packet->granularity);
7622 if (differ) {
7623 different++;
7624 BV_SET(fields, 132);
7625 }
7626
7627 differ = (old->small_wonder_visibility != real_packet->small_wonder_visibility);
7628 if (differ) {
7629 different++;
7630 BV_SET(fields, 133);
7631 }
7632
7633 if (different == 0) {
7634 log_packet_detailed(" no change -> discard");
7636 }
7637#endif /* FREECIV_DELTA_PROTOCOL */
7638
7639#ifdef FREECIV_JSON_CONNECTION
7640 struct plocation field_addr;
7641 {
7642 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
7645 }
7646#endif /* FREECIV_JSON_CONNECTION */
7647
7648#ifdef FREECIV_DELTA_PROTOCOL
7649#ifdef FREECIV_JSON_CONNECTION
7650 field_addr.name = "fields";
7651#endif /* FREECIV_JSON_CONNECTION */
7652 e = 0;
7653 e |= DIO_BV_PUT(&dout, &field_addr, fields);
7654 if (e) {
7655 log_packet_detailed("fields bitvector error detected");
7656 }
7657
7658 if (BV_ISSET(fields, 0)) {
7659 log_packet_detailed(" field 'add_to_size_limit' has changed");
7660
7661#ifdef FREECIV_JSON_CONNECTION
7662 field_addr.name = "add_to_size_limit";
7663#endif /* FREECIV_JSON_CONNECTION */
7664 e = 0;
7665
7666 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
7667
7668 if (e) {
7669 log_packet_detailed("'add_to_size_limit' field error detected");
7670 }
7671 }
7672
7673 if (BV_ISSET(fields, 1)) {
7674 log_packet_detailed(" field 'aifill' has changed");
7675
7676#ifdef FREECIV_JSON_CONNECTION
7677 field_addr.name = "aifill";
7678#endif /* FREECIV_JSON_CONNECTION */
7679 e = 0;
7680
7681 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->aifill);
7682
7683 if (e) {
7684 log_packet_detailed("'aifill' field error detected");
7685 }
7686 }
7687
7688 if (BV_ISSET(fields, 2)) {
7689 log_packet_detailed(" field 'persistent_ready' has changed");
7690
7691#ifdef FREECIV_JSON_CONNECTION
7692 field_addr.name = "persistent_ready";
7693#endif /* FREECIV_JSON_CONNECTION */
7694 e = 0;
7695
7696 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
7697
7698 if (e) {
7699 log_packet_detailed("'persistent_ready' field error detected");
7700 }
7701 }
7702
7703 if (BV_ISSET(fields, 3)) {
7704 log_packet_detailed(" field 'airlifting_style' has changed");
7705
7706#ifdef FREECIV_JSON_CONNECTION
7707 field_addr.name = "airlifting_style";
7708#endif /* FREECIV_JSON_CONNECTION */
7709 e = 0;
7710
7711 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
7712
7713 if (e) {
7714 log_packet_detailed("'airlifting_style' field error detected");
7715 }
7716 }
7717
7718 /* field 4 is folded into the header */
7719
7720 /* field 5 is folded into the header */
7721
7722 if (BV_ISSET(fields, 6)) {
7723 log_packet_detailed(" field 'angrycitizen' has changed");
7724
7725#ifdef FREECIV_JSON_CONNECTION
7726 field_addr.name = "angrycitizen";
7727#endif /* FREECIV_JSON_CONNECTION */
7728 e = 0;
7729
7730 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
7731
7732 if (e) {
7733 log_packet_detailed("'angrycitizen' field error detected");
7734 }
7735 }
7736
7737 if (BV_ISSET(fields, 7)) {
7738 log_packet_detailed(" field 'base_pollution' has changed");
7739
7740#ifdef FREECIV_JSON_CONNECTION
7741 field_addr.name = "base_pollution";
7742#endif /* FREECIV_JSON_CONNECTION */
7743 e = 0;
7744
7745 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
7746
7747 if (e) {
7748 log_packet_detailed("'base_pollution' field error detected");
7749 }
7750 }
7751
7752 if (BV_ISSET(fields, 8)) {
7753 log_packet_detailed(" field 'base_tech_cost' has changed");
7754
7755#ifdef FREECIV_JSON_CONNECTION
7756 field_addr.name = "base_tech_cost";
7757#endif /* FREECIV_JSON_CONNECTION */
7758 e = 0;
7759
7760 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
7761
7762 if (e) {
7763 log_packet_detailed("'base_tech_cost' field error detected");
7764 }
7765 }
7766
7767 if (BV_ISSET(fields, 9)) {
7768 log_packet_detailed(" field 'min_tech_cost' has changed");
7769
7770#ifdef FREECIV_JSON_CONNECTION
7771 field_addr.name = "min_tech_cost";
7772#endif /* FREECIV_JSON_CONNECTION */
7773 e = 0;
7774
7775 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
7776
7777 if (e) {
7778 log_packet_detailed("'min_tech_cost' field error detected");
7779 }
7780 }
7781
7782 if (BV_ISSET(fields, 10)) {
7783 log_packet_detailed(" field 'tech_leak_pct' has changed");
7784
7785#ifdef FREECIV_JSON_CONNECTION
7786 field_addr.name = "tech_leak_pct";
7787#endif /* FREECIV_JSON_CONNECTION */
7788 e = 0;
7789
7790 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
7791
7792 if (e) {
7793 log_packet_detailed("'tech_leak_pct' field error detected");
7794 }
7795 }
7796
7797 if (BV_ISSET(fields, 11)) {
7798 log_packet_detailed(" field 'border_city_radius_sq' has changed");
7799
7800#ifdef FREECIV_JSON_CONNECTION
7801 field_addr.name = "border_city_radius_sq";
7802#endif /* FREECIV_JSON_CONNECTION */
7803 e = 0;
7804
7805 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
7806
7807 if (e) {
7808 log_packet_detailed("'border_city_radius_sq' field error detected");
7809 }
7810 }
7811
7812 if (BV_ISSET(fields, 12)) {
7813 log_packet_detailed(" field 'border_size_effect' has changed");
7814
7815#ifdef FREECIV_JSON_CONNECTION
7816 field_addr.name = "border_size_effect";
7817#endif /* FREECIV_JSON_CONNECTION */
7818 e = 0;
7819
7820 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
7821
7822 if (e) {
7823 log_packet_detailed("'border_size_effect' field error detected");
7824 }
7825 }
7826
7827 if (BV_ISSET(fields, 13)) {
7828 log_packet_detailed(" field 'border_city_permanent_radius_sq' has changed");
7829
7830#ifdef FREECIV_JSON_CONNECTION
7831 field_addr.name = "border_city_permanent_radius_sq";
7832#endif /* FREECIV_JSON_CONNECTION */
7833 e = 0;
7834
7835 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
7836
7837 if (e) {
7838 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
7839 }
7840 }
7841
7842 if (BV_ISSET(fields, 14)) {
7843 log_packet_detailed(" field 'borders' has changed");
7844
7845#ifdef FREECIV_JSON_CONNECTION
7846 field_addr.name = "borders";
7847#endif /* FREECIV_JSON_CONNECTION */
7848 e = 0;
7849
7850 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
7851
7852 if (e) {
7853 log_packet_detailed("'borders' field error detected");
7854 }
7855 }
7856
7857 if (BV_ISSET(fields, 15)) {
7858 log_packet_detailed(" field 'base_bribe_cost' has changed");
7859
7860#ifdef FREECIV_JSON_CONNECTION
7861 field_addr.name = "base_bribe_cost";
7862#endif /* FREECIV_JSON_CONNECTION */
7863 e = 0;
7864
7865 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
7866
7867 if (e) {
7868 log_packet_detailed("'base_bribe_cost' field error detected");
7869 }
7870 }
7871
7872 if (BV_ISSET(fields, 16)) {
7873 log_packet_detailed(" field 'caravan_bonus_style' has changed");
7874
7875#ifdef FREECIV_JSON_CONNECTION
7876 field_addr.name = "caravan_bonus_style";
7877#endif /* FREECIV_JSON_CONNECTION */
7878 e = 0;
7879
7880 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
7881
7882 if (e) {
7883 log_packet_detailed("'caravan_bonus_style' field error detected");
7884 }
7885 }
7886
7887 if (BV_ISSET(fields, 17)) {
7888 log_packet_detailed(" field 'culture_vic_points' has changed");
7889
7890#ifdef FREECIV_JSON_CONNECTION
7891 field_addr.name = "culture_vic_points";
7892#endif /* FREECIV_JSON_CONNECTION */
7893 e = 0;
7894
7895 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
7896
7897 if (e) {
7898 log_packet_detailed("'culture_vic_points' field error detected");
7899 }
7900 }
7901
7902 if (BV_ISSET(fields, 18)) {
7903 log_packet_detailed(" field 'culture_vic_lead' has changed");
7904
7905#ifdef FREECIV_JSON_CONNECTION
7906 field_addr.name = "culture_vic_lead";
7907#endif /* FREECIV_JSON_CONNECTION */
7908 e = 0;
7909
7910 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
7911
7912 if (e) {
7913 log_packet_detailed("'culture_vic_lead' field error detected");
7914 }
7915 }
7916
7917 if (BV_ISSET(fields, 19)) {
7918 log_packet_detailed(" field 'culture_migration_pml' has changed");
7919
7920#ifdef FREECIV_JSON_CONNECTION
7921 field_addr.name = "culture_migration_pml";
7922#endif /* FREECIV_JSON_CONNECTION */
7923 e = 0;
7924
7925 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
7926
7927 if (e) {
7928 log_packet_detailed("'culture_migration_pml' field error detected");
7929 }
7930 }
7931
7932 if (BV_ISSET(fields, 20)) {
7933 log_packet_detailed(" field 'history_interest_pml' has changed");
7934
7935#ifdef FREECIV_JSON_CONNECTION
7936 field_addr.name = "history_interest_pml";
7937#endif /* FREECIV_JSON_CONNECTION */
7938 e = 0;
7939
7940 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
7941
7942 if (e) {
7943 log_packet_detailed("'history_interest_pml' field error detected");
7944 }
7945 }
7946
7947 if (BV_ISSET(fields, 21)) {
7948 log_packet_detailed(" field 'world_peace_turns' has changed");
7949
7950#ifdef FREECIV_JSON_CONNECTION
7951 field_addr.name = "world_peace_turns";
7952#endif /* FREECIV_JSON_CONNECTION */
7953 e = 0;
7954
7955 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->world_peace_turns);
7956
7957 if (e) {
7958 log_packet_detailed("'world_peace_turns' field error detected");
7959 }
7960 }
7961
7962 if (BV_ISSET(fields, 22)) {
7963 log_packet_detailed(" field 'celebratesize' has changed");
7964
7965#ifdef FREECIV_JSON_CONNECTION
7966 field_addr.name = "celebratesize";
7967#endif /* FREECIV_JSON_CONNECTION */
7968 e = 0;
7969
7970 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
7971
7972 if (e) {
7973 log_packet_detailed("'celebratesize' field error detected");
7974 }
7975 }
7976
7977 /* field 23 is folded into the header */
7978
7979 if (BV_ISSET(fields, 24)) {
7980 log_packet_detailed(" field 'pop_report_zeroes' has changed");
7981
7982#ifdef FREECIV_JSON_CONNECTION
7983 field_addr.name = "pop_report_zeroes";
7984#endif /* FREECIV_JSON_CONNECTION */
7985 e = 0;
7986
7987 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
7988
7989 if (e) {
7990 log_packet_detailed("'pop_report_zeroes' field error detected");
7991 }
7992 }
7993
7994 /* field 25 is folded into the header */
7995
7996 /* field 26 is folded into the header */
7997
7998 if (BV_ISSET(fields, 27)) {
7999 log_packet_detailed(" field 'citizen_convert_speed' has changed");
8000
8001#ifdef FREECIV_JSON_CONNECTION
8002 field_addr.name = "citizen_convert_speed";
8003#endif /* FREECIV_JSON_CONNECTION */
8004 e = 0;
8005
8006 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
8007
8008 if (e) {
8009 log_packet_detailed("'citizen_convert_speed' field error detected");
8010 }
8011 }
8012
8013 if (BV_ISSET(fields, 28)) {
8014 log_packet_detailed(" field 'conquest_convert_pct' has changed");
8015
8016#ifdef FREECIV_JSON_CONNECTION
8017 field_addr.name = "conquest_convert_pct";
8018#endif /* FREECIV_JSON_CONNECTION */
8019 e = 0;
8020
8021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
8022
8023 if (e) {
8024 log_packet_detailed("'conquest_convert_pct' field error detected");
8025 }
8026 }
8027
8028 if (BV_ISSET(fields, 29)) {
8029 log_packet_detailed(" field 'citizen_partisans_pct' has changed");
8030
8031#ifdef FREECIV_JSON_CONNECTION
8032 field_addr.name = "citizen_partisans_pct";
8033#endif /* FREECIV_JSON_CONNECTION */
8034 e = 0;
8035
8036 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
8037
8038 if (e) {
8039 log_packet_detailed("'citizen_partisans_pct' field error detected");
8040 }
8041 }
8042
8043 if (BV_ISSET(fields, 30)) {
8044 log_packet_detailed(" field 'citymindist' has changed");
8045
8046#ifdef FREECIV_JSON_CONNECTION
8047 field_addr.name = "citymindist";
8048#endif /* FREECIV_JSON_CONNECTION */
8049 e = 0;
8050
8051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
8052
8053 if (e) {
8054 log_packet_detailed("'citymindist' field error detected");
8055 }
8056 }
8057
8058 if (BV_ISSET(fields, 31)) {
8059 log_packet_detailed(" field 'cooling' has changed");
8060
8061#ifdef FREECIV_JSON_CONNECTION
8062 field_addr.name = "cooling";
8063#endif /* FREECIV_JSON_CONNECTION */
8064 e = 0;
8065
8066 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
8067
8068 if (e) {
8069 log_packet_detailed("'cooling' field error detected");
8070 }
8071 }
8072
8073 if (BV_ISSET(fields, 32)) {
8074 log_packet_detailed(" field 'coolinglevel' has changed");
8075
8076#ifdef FREECIV_JSON_CONNECTION
8077 field_addr.name = "coolinglevel";
8078#endif /* FREECIV_JSON_CONNECTION */
8079 e = 0;
8080
8081 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
8082
8083 if (e) {
8084 log_packet_detailed("'coolinglevel' field error detected");
8085 }
8086 }
8087
8088 if (BV_ISSET(fields, 33)) {
8089 log_packet_detailed(" field 'diplchance_initial_odds' has changed");
8090
8091#ifdef FREECIV_JSON_CONNECTION
8092 field_addr.name = "diplchance_initial_odds";
8093#endif /* FREECIV_JSON_CONNECTION */
8094 e = 0;
8095
8096 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->diplchance_initial_odds);
8097
8098 if (e) {
8099 log_packet_detailed("'diplchance_initial_odds' field error detected");
8100 }
8101 }
8102
8103 if (BV_ISSET(fields, 34)) {
8104 log_packet_detailed(" field 'diplomacy' has changed");
8105
8106#ifdef FREECIV_JSON_CONNECTION
8107 field_addr.name = "diplomacy";
8108#endif /* FREECIV_JSON_CONNECTION */
8109 e = 0;
8110
8111 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
8112
8113 if (e) {
8114 log_packet_detailed("'diplomacy' field error detected");
8115 }
8116 }
8117
8118 /* field 35 is folded into the header */
8119
8120 if (BV_ISSET(fields, 36)) {
8121 log_packet_detailed(" field 'food_cost' has changed");
8122
8123#ifdef FREECIV_JSON_CONNECTION
8124 field_addr.name = "food_cost";
8125#endif /* FREECIV_JSON_CONNECTION */
8126 e = 0;
8127
8128 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
8129
8130 if (e) {
8131 log_packet_detailed("'food_cost' field error detected");
8132 }
8133 }
8134
8135 if (BV_ISSET(fields, 37)) {
8136 log_packet_detailed(" field 'foodbox' has changed");
8137
8138#ifdef FREECIV_JSON_CONNECTION
8139 field_addr.name = "foodbox";
8140#endif /* FREECIV_JSON_CONNECTION */
8141 e = 0;
8142
8143 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
8144
8145 if (e) {
8146 log_packet_detailed("'foodbox' field error detected");
8147 }
8148 }
8149
8150 if (BV_ISSET(fields, 38)) {
8151 log_packet_detailed(" field 'forced_gold' has changed");
8152
8153#ifdef FREECIV_JSON_CONNECTION
8154 field_addr.name = "forced_gold";
8155#endif /* FREECIV_JSON_CONNECTION */
8156 e = 0;
8157
8158 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
8159
8160 if (e) {
8161 log_packet_detailed("'forced_gold' field error detected");
8162 }
8163 }
8164
8165 if (BV_ISSET(fields, 39)) {
8166 log_packet_detailed(" field 'forced_luxury' has changed");
8167
8168#ifdef FREECIV_JSON_CONNECTION
8169 field_addr.name = "forced_luxury";
8170#endif /* FREECIV_JSON_CONNECTION */
8171 e = 0;
8172
8173 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
8174
8175 if (e) {
8176 log_packet_detailed("'forced_luxury' field error detected");
8177 }
8178 }
8179
8180 if (BV_ISSET(fields, 40)) {
8181 log_packet_detailed(" field 'forced_science' has changed");
8182
8183#ifdef FREECIV_JSON_CONNECTION
8184 field_addr.name = "forced_science";
8185#endif /* FREECIV_JSON_CONNECTION */
8186 e = 0;
8187
8188 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
8189
8190 if (e) {
8191 log_packet_detailed("'forced_science' field error detected");
8192 }
8193 }
8194
8195 if (BV_ISSET(fields, 41)) {
8196 log_packet_detailed(" field 'fulltradesize' has changed");
8197
8198#ifdef FREECIV_JSON_CONNECTION
8199 field_addr.name = "fulltradesize";
8200#endif /* FREECIV_JSON_CONNECTION */
8201 e = 0;
8202
8203 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
8204
8205 if (e) {
8206 log_packet_detailed("'fulltradesize' field error detected");
8207 }
8208 }
8209
8210 if (BV_ISSET(fields, 42)) {
8211 log_packet_detailed(" field 'trade_world_rel_pct' has changed");
8212
8213#ifdef FREECIV_JSON_CONNECTION
8214 field_addr.name = "trade_world_rel_pct";
8215#endif /* FREECIV_JSON_CONNECTION */
8216 e = 0;
8217
8218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
8219
8220 if (e) {
8221 log_packet_detailed("'trade_world_rel_pct' field error detected");
8222 }
8223 }
8224
8225 if (BV_ISSET(fields, 43)) {
8226 log_packet_detailed(" field 'min_trade_route_val' has changed");
8227
8228#ifdef FREECIV_JSON_CONNECTION
8229 field_addr.name = "min_trade_route_val";
8230#endif /* FREECIV_JSON_CONNECTION */
8231 e = 0;
8232
8233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
8234
8235 if (e) {
8236 log_packet_detailed("'min_trade_route_val' field error detected");
8237 }
8238 }
8239
8240 /* field 44 is folded into the header */
8241
8242 if (BV_ISSET(fields, 45)) {
8243 log_packet_detailed(" field 'goods_selection' has changed");
8244
8245#ifdef FREECIV_JSON_CONNECTION
8246 field_addr.name = "goods_selection";
8247#endif /* FREECIV_JSON_CONNECTION */
8248 e = 0;
8249
8250 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
8251
8252 if (e) {
8253 log_packet_detailed("'goods_selection' field error detected");
8254 }
8255 }
8256
8257 if (BV_ISSET(fields, 46)) {
8258 log_packet_detailed(" field 'global_advance_count' has changed");
8259
8260#ifdef FREECIV_JSON_CONNECTION
8261 field_addr.name = "global_advance_count";
8262#endif /* FREECIV_JSON_CONNECTION */
8263 e = 0;
8264
8265 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
8266
8267 if (e) {
8268 log_packet_detailed("'global_advance_count' field error detected");
8269 }
8270 }
8271
8272 if (BV_ISSET(fields, 47)) {
8273 log_packet_detailed(" field 'global_advances' has changed");
8274
8275#ifdef FREECIV_JSON_CONNECTION
8276 field_addr.name = "global_advances";
8277#endif /* FREECIV_JSON_CONNECTION */
8278 e = 0;
8279
8280 {
8281 int i;
8282
8284
8285#ifdef FREECIV_JSON_CONNECTION
8286 size_t count_i = 0;
8287
8288 /* Create the array. */
8289 e |= DIO_PUT(farray, &dout, &field_addr, 0);
8290
8291 /* Enter array. */
8292 field_addr.sub_location = plocation_elem_new(0);
8293#endif /* FREECIV_JSON_CONNECTION */
8294
8295 for (i = 0; i < A_LAST; i++) {
8296 differ = (old->global_advances[i] != real_packet->global_advances[i]);
8297
8298 if (!differ) {
8299 continue;
8300 }
8301
8302#ifdef FREECIV_JSON_CONNECTION
8303 /* Append next diff array element. */
8304 field_addr.sub_location->number = -1;
8305
8306 /* Create the diff array element. */
8307 e |= DIO_PUT(object, &dout, &field_addr);
8308
8309 /* Enter diff array element (start at the index address). */
8310 field_addr.sub_location->number = count_i++;
8311 field_addr.sub_location->sub_location = plocation_field_new("index");
8312#endif /* FREECIV_JSON_CONNECTION */
8313
8314 /* Write the index */
8315#if A_LAST <= MAX_UINT8
8316 e |= DIO_PUT(uint8, &dout, &field_addr, i);
8317#else
8318 e |= DIO_PUT(uint16, &dout, &field_addr, i);
8319#endif
8320
8321#ifdef FREECIV_JSON_CONNECTION
8322 /* Content address. */
8323 field_addr.sub_location->sub_location->name = "data";
8324#endif /* FREECIV_JSON_CONNECTION */
8325
8326 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
8327
8328#ifdef FREECIV_JSON_CONNECTION
8329 /* Exit diff array element. */
8330 FC_FREE(field_addr.sub_location->sub_location);
8331#endif /* FREECIV_JSON_CONNECTION */
8332 }
8333
8334#ifdef FREECIV_JSON_CONNECTION
8335 /* Append diff array element. */
8336 field_addr.sub_location->number = -1;
8337
8338 /* Create the terminating diff array element. */
8339 e |= DIO_PUT(object, &dout, &field_addr);
8340
8341 /* Enter diff array element (start at the index address). */
8342 field_addr.sub_location->number = count_i;
8343 field_addr.sub_location->sub_location = plocation_field_new("index");
8344#endif /* FREECIV_JSON_CONNECTION */
8345
8346 /* Write the sentinel value */
8347#if A_LAST <= MAX_UINT8
8348 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST);
8349#else
8350 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST);
8351#endif
8352
8353#ifdef FREECIV_JSON_CONNECTION
8354 /* Exit diff array element. */
8355 FC_FREE(field_addr.sub_location->sub_location);
8356 /* Exit array. */
8357 FC_FREE(field_addr.sub_location);
8358#endif /* FREECIV_JSON_CONNECTION */
8359 }
8360
8361 if (e) {
8362 log_packet_detailed("'global_advances' field error detected");
8363 }
8364 }
8365
8366 /* field 48 is folded into the header */
8367
8368 if (BV_ISSET(fields, 49)) {
8369 log_packet_detailed(" field 'globalwarming' has changed");
8370
8371#ifdef FREECIV_JSON_CONNECTION
8372 field_addr.name = "globalwarming";
8373#endif /* FREECIV_JSON_CONNECTION */
8374 e = 0;
8375
8376 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
8377
8378 if (e) {
8379 log_packet_detailed("'globalwarming' field error detected");
8380 }
8381 }
8382
8383 if (BV_ISSET(fields, 50)) {
8384 log_packet_detailed(" field 'gold' has changed");
8385
8386#ifdef FREECIV_JSON_CONNECTION
8387 field_addr.name = "gold";
8388#endif /* FREECIV_JSON_CONNECTION */
8389 e = 0;
8390
8391 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
8392
8393 if (e) {
8394 log_packet_detailed("'gold' field error detected");
8395 }
8396 }
8397
8398 if (BV_ISSET(fields, 51)) {
8399 log_packet_detailed(" field 'gold_upkeep_style' has changed");
8400
8401#ifdef FREECIV_JSON_CONNECTION
8402 field_addr.name = "gold_upkeep_style";
8403#endif /* FREECIV_JSON_CONNECTION */
8404 e = 0;
8405
8406 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
8407
8408 if (e) {
8409 log_packet_detailed("'gold_upkeep_style' field error detected");
8410 }
8411 }
8412
8413 /* field 52 is folded into the header */
8414
8415 if (BV_ISSET(fields, 53)) {
8416 log_packet_detailed(" field 'infrapoints' has changed");
8417
8418#ifdef FREECIV_JSON_CONNECTION
8419 field_addr.name = "infrapoints";
8420#endif /* FREECIV_JSON_CONNECTION */
8421 e = 0;
8422
8423 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
8424
8425 if (e) {
8426 log_packet_detailed("'infrapoints' field error detected");
8427 }
8428 }
8429
8430 if (BV_ISSET(fields, 54)) {
8431 log_packet_detailed(" field 'revolentype' has changed");
8432
8433#ifdef FREECIV_JSON_CONNECTION
8434 field_addr.name = "revolentype";
8435#endif /* FREECIV_JSON_CONNECTION */
8436 e = 0;
8437
8438 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
8439
8440 if (e) {
8441 log_packet_detailed("'revolentype' field error detected");
8442 }
8443 }
8444
8445 if (BV_ISSET(fields, 55)) {
8446 log_packet_detailed(" field 'default_government_id' has changed");
8447
8448#ifdef FREECIV_JSON_CONNECTION
8449 field_addr.name = "default_government_id";
8450#endif /* FREECIV_JSON_CONNECTION */
8451 e = 0;
8452
8453 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
8454
8455 if (e) {
8456 log_packet_detailed("'default_government_id' field error detected");
8457 }
8458 }
8459
8460 if (BV_ISSET(fields, 56)) {
8461 log_packet_detailed(" field 'government_during_revolution_id' has changed");
8462
8463#ifdef FREECIV_JSON_CONNECTION
8464 field_addr.name = "government_during_revolution_id";
8465#endif /* FREECIV_JSON_CONNECTION */
8466 e = 0;
8467
8468 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
8469
8470 if (e) {
8471 log_packet_detailed("'government_during_revolution_id' field error detected");
8472 }
8473 }
8474
8475 if (BV_ISSET(fields, 57)) {
8476 log_packet_detailed(" field 'granary_food_inc' has changed");
8477
8478#ifdef FREECIV_JSON_CONNECTION
8479 field_addr.name = "granary_food_inc";
8480#endif /* FREECIV_JSON_CONNECTION */
8481 e = 0;
8482
8483 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
8484
8485 if (e) {
8486 log_packet_detailed("'granary_food_inc' field error detected");
8487 }
8488 }
8489
8490 if (BV_ISSET(fields, 58)) {
8491 log_packet_detailed(" field 'granary_food_ini' has changed");
8492
8493#ifdef FREECIV_JSON_CONNECTION
8494 field_addr.name = "granary_food_ini";
8495#endif /* FREECIV_JSON_CONNECTION */
8496 e = 0;
8497
8498 {
8499 int i;
8500
8501#ifdef FREECIV_JSON_CONNECTION
8502 /* Create the array. */
8504
8505 /* Enter array. */
8506 field_addr.sub_location = plocation_elem_new(0);
8507#endif /* FREECIV_JSON_CONNECTION */
8508
8509 for (i = 0; i < MAX_GRANARY_INIS; i++) {
8510#ifdef FREECIV_JSON_CONNECTION
8511 /* Next array element. */
8512 field_addr.sub_location->number = i;
8513#endif /* FREECIV_JSON_CONNECTION */
8514
8515 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
8516 }
8517
8518#ifdef FREECIV_JSON_CONNECTION
8519 /* Exit array. */
8520 FC_FREE(field_addr.sub_location);
8521#endif /* FREECIV_JSON_CONNECTION */
8522 }
8523
8524 if (e) {
8525 log_packet_detailed("'granary_food_ini' field error detected");
8526 }
8527 }
8528
8529 if (BV_ISSET(fields, 59)) {
8530 log_packet_detailed(" field 'granary_num_inis' has changed");
8531
8532#ifdef FREECIV_JSON_CONNECTION
8533 field_addr.name = "granary_num_inis";
8534#endif /* FREECIV_JSON_CONNECTION */
8535 e = 0;
8536
8537 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
8538
8539 if (e) {
8540 log_packet_detailed("'granary_num_inis' field error detected");
8541 }
8542 }
8543
8544 if (BV_ISSET(fields, 60)) {
8545 log_packet_detailed(" field 'great_wonder_owners' has changed");
8546
8547#ifdef FREECIV_JSON_CONNECTION
8548 field_addr.name = "great_wonder_owners";
8549#endif /* FREECIV_JSON_CONNECTION */
8550 e = 0;
8551
8552 {
8553 int i;
8554
8556
8557#ifdef FREECIV_JSON_CONNECTION
8558 size_t count_i = 0;
8559
8560 /* Create the array. */
8561 e |= DIO_PUT(farray, &dout, &field_addr, 0);
8562
8563 /* Enter array. */
8564 field_addr.sub_location = plocation_elem_new(0);
8565#endif /* FREECIV_JSON_CONNECTION */
8566
8567 for (i = 0; i < B_LAST; i++) {
8568 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
8569
8570 if (!differ) {
8571 continue;
8572 }
8573
8574#ifdef FREECIV_JSON_CONNECTION
8575 /* Append next diff array element. */
8576 field_addr.sub_location->number = -1;
8577
8578 /* Create the diff array element. */
8579 e |= DIO_PUT(object, &dout, &field_addr);
8580
8581 /* Enter diff array element (start at the index address). */
8582 field_addr.sub_location->number = count_i++;
8583 field_addr.sub_location->sub_location = plocation_field_new("index");
8584#endif /* FREECIV_JSON_CONNECTION */
8585
8586 /* Write the index */
8587#if B_LAST <= MAX_UINT8
8588 e |= DIO_PUT(uint8, &dout, &field_addr, i);
8589#else
8590 e |= DIO_PUT(uint16, &dout, &field_addr, i);
8591#endif
8592
8593#ifdef FREECIV_JSON_CONNECTION
8594 /* Content address. */
8595 field_addr.sub_location->sub_location->name = "data";
8596#endif /* FREECIV_JSON_CONNECTION */
8597
8598 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
8599
8600#ifdef FREECIV_JSON_CONNECTION
8601 /* Exit diff array element. */
8602 FC_FREE(field_addr.sub_location->sub_location);
8603#endif /* FREECIV_JSON_CONNECTION */
8604 }
8605
8606#ifdef FREECIV_JSON_CONNECTION
8607 /* Append diff array element. */
8608 field_addr.sub_location->number = -1;
8609
8610 /* Create the terminating diff array element. */
8611 e |= DIO_PUT(object, &dout, &field_addr);
8612
8613 /* Enter diff array element (start at the index address). */
8614 field_addr.sub_location->number = count_i;
8615 field_addr.sub_location->sub_location = plocation_field_new("index");
8616#endif /* FREECIV_JSON_CONNECTION */
8617
8618 /* Write the sentinel value */
8619#if B_LAST <= MAX_UINT8
8620 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
8621#else
8622 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
8623#endif
8624
8625#ifdef FREECIV_JSON_CONNECTION
8626 /* Exit diff array element. */
8627 FC_FREE(field_addr.sub_location->sub_location);
8628 /* Exit array. */
8629 FC_FREE(field_addr.sub_location);
8630#endif /* FREECIV_JSON_CONNECTION */
8631 }
8632
8633 if (e) {
8634 log_packet_detailed("'great_wonder_owners' field error detected");
8635 }
8636 }
8637
8638 if (BV_ISSET(fields, 61)) {
8639 log_packet_detailed(" field 'happy_cost' has changed");
8640
8641#ifdef FREECIV_JSON_CONNECTION
8642 field_addr.name = "happy_cost";
8643#endif /* FREECIV_JSON_CONNECTION */
8644 e = 0;
8645
8646 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
8647
8648 if (e) {
8649 log_packet_detailed("'happy_cost' field error detected");
8650 }
8651 }
8652
8653 if (BV_ISSET(fields, 62)) {
8654 log_packet_detailed(" field 'happyborders' has changed");
8655
8656#ifdef FREECIV_JSON_CONNECTION
8657 field_addr.name = "happyborders";
8658#endif /* FREECIV_JSON_CONNECTION */
8659 e = 0;
8660
8661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
8662
8663 if (e) {
8664 log_packet_detailed("'happyborders' field error detected");
8665 }
8666 }
8667
8668 if (BV_ISSET(fields, 63)) {
8669 log_packet_detailed(" field 'heating' has changed");
8670
8671#ifdef FREECIV_JSON_CONNECTION
8672 field_addr.name = "heating";
8673#endif /* FREECIV_JSON_CONNECTION */
8674 e = 0;
8675
8676 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
8677
8678 if (e) {
8679 log_packet_detailed("'heating' field error detected");
8680 }
8681 }
8682
8683 if (BV_ISSET(fields, 64)) {
8684 log_packet_detailed(" field 'illness_base_factor' has changed");
8685
8686#ifdef FREECIV_JSON_CONNECTION
8687 field_addr.name = "illness_base_factor";
8688#endif /* FREECIV_JSON_CONNECTION */
8689 e = 0;
8690
8691 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
8692
8693 if (e) {
8694 log_packet_detailed("'illness_base_factor' field error detected");
8695 }
8696 }
8697
8698 if (BV_ISSET(fields, 65)) {
8699 log_packet_detailed(" field 'illness_min_size' has changed");
8700
8701#ifdef FREECIV_JSON_CONNECTION
8702 field_addr.name = "illness_min_size";
8703#endif /* FREECIV_JSON_CONNECTION */
8704 e = 0;
8705
8706 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
8707
8708 if (e) {
8709 log_packet_detailed("'illness_min_size' field error detected");
8710 }
8711 }
8712
8713 /* field 66 is folded into the header */
8714
8715 if (BV_ISSET(fields, 67)) {
8716 log_packet_detailed(" field 'illness_pollution_factor' has changed");
8717
8718#ifdef FREECIV_JSON_CONNECTION
8719 field_addr.name = "illness_pollution_factor";
8720#endif /* FREECIV_JSON_CONNECTION */
8721 e = 0;
8722
8723 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
8724
8725 if (e) {
8726 log_packet_detailed("'illness_pollution_factor' field error detected");
8727 }
8728 }
8729
8730 if (BV_ISSET(fields, 68)) {
8731 log_packet_detailed(" field 'illness_trade_infection' has changed");
8732
8733#ifdef FREECIV_JSON_CONNECTION
8734 field_addr.name = "illness_trade_infection";
8735#endif /* FREECIV_JSON_CONNECTION */
8736 e = 0;
8737
8738 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
8739
8740 if (e) {
8741 log_packet_detailed("'illness_trade_infection' field error detected");
8742 }
8743 }
8744
8745 if (BV_ISSET(fields, 69)) {
8746 log_packet_detailed(" field 'init_city_radius_sq' has changed");
8747
8748#ifdef FREECIV_JSON_CONNECTION
8749 field_addr.name = "init_city_radius_sq";
8750#endif /* FREECIV_JSON_CONNECTION */
8751 e = 0;
8752
8753 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
8754
8755 if (e) {
8756 log_packet_detailed("'init_city_radius_sq' field error detected");
8757 }
8758 }
8759
8760 /* field 70 is folded into the header */
8761
8762 /* field 71 is folded into the header */
8763
8764 /* field 72 is folded into the header */
8765
8766 /* field 73 is folded into the header */
8767
8768 /* field 74 is folded into the header */
8769
8770 /* field 75 is folded into the header */
8771
8772 /* field 76 is folded into the header */
8773
8774 /* field 77 is folded into the header */
8775
8776 if (BV_ISSET(fields, 78)) {
8777 log_packet_detailed(" field 'low_firepower_badwallattacker' has changed");
8778
8779#ifdef FREECIV_JSON_CONNECTION
8780 field_addr.name = "low_firepower_badwallattacker";
8781#endif /* FREECIV_JSON_CONNECTION */
8782 e = 0;
8783
8784 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
8785
8786 if (e) {
8787 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
8788 }
8789 }
8790
8791 if (BV_ISSET(fields, 79)) {
8792 log_packet_detailed(" field 'low_firepower_pearl_harbor' has changed");
8793
8794#ifdef FREECIV_JSON_CONNECTION
8795 field_addr.name = "low_firepower_pearl_harbor";
8796#endif /* FREECIV_JSON_CONNECTION */
8797 e = 0;
8798
8799 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbor);
8800
8801 if (e) {
8802 log_packet_detailed("'low_firepower_pearl_harbor' field error detected");
8803 }
8804 }
8805
8806 if (BV_ISSET(fields, 80)) {
8807 log_packet_detailed(" field 'low_firepower_combat_bonus' has changed");
8808
8809#ifdef FREECIV_JSON_CONNECTION
8810 field_addr.name = "low_firepower_combat_bonus";
8811#endif /* FREECIV_JSON_CONNECTION */
8812 e = 0;
8813
8814 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
8815
8816 if (e) {
8817 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
8818 }
8819 }
8820
8821 if (BV_ISSET(fields, 81)) {
8822 log_packet_detailed(" field 'low_firepower_nonnat_bombard' has changed");
8823
8824#ifdef FREECIV_JSON_CONNECTION
8825 field_addr.name = "low_firepower_nonnat_bombard";
8826#endif /* FREECIV_JSON_CONNECTION */
8827 e = 0;
8828
8829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
8830
8831 if (e) {
8832 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
8833 }
8834 }
8835
8836 if (BV_ISSET(fields, 82)) {
8837 log_packet_detailed(" field 'nuke_pop_loss_pct' has changed");
8838
8839#ifdef FREECIV_JSON_CONNECTION
8840 field_addr.name = "nuke_pop_loss_pct";
8841#endif /* FREECIV_JSON_CONNECTION */
8842 e = 0;
8843
8844 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
8845
8846 if (e) {
8847 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
8848 }
8849 }
8850
8851 if (BV_ISSET(fields, 83)) {
8852 log_packet_detailed(" field 'nuke_defender_survival_chance_pct' has changed");
8853
8854#ifdef FREECIV_JSON_CONNECTION
8855 field_addr.name = "nuke_defender_survival_chance_pct";
8856#endif /* FREECIV_JSON_CONNECTION */
8857 e = 0;
8858
8859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
8860
8861 if (e) {
8862 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
8863 }
8864 }
8865
8866 if (BV_ISSET(fields, 84)) {
8867 log_packet_detailed(" field 'min_city_center_output' has changed");
8868
8869#ifdef FREECIV_JSON_CONNECTION
8870 field_addr.name = "min_city_center_output";
8871#endif /* FREECIV_JSON_CONNECTION */
8872 e = 0;
8873
8874 {
8875 int i;
8876
8877#ifdef FREECIV_JSON_CONNECTION
8878 /* Create the array. */
8879 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
8880
8881 /* Enter array. */
8882 field_addr.sub_location = plocation_elem_new(0);
8883#endif /* FREECIV_JSON_CONNECTION */
8884
8885 for (i = 0; i < O_LAST; i++) {
8886#ifdef FREECIV_JSON_CONNECTION
8887 /* Next array element. */
8888 field_addr.sub_location->number = i;
8889#endif /* FREECIV_JSON_CONNECTION */
8890
8891 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
8892 }
8893
8894#ifdef FREECIV_JSON_CONNECTION
8895 /* Exit array. */
8896 FC_FREE(field_addr.sub_location);
8897#endif /* FREECIV_JSON_CONNECTION */
8898 }
8899
8900 if (e) {
8901 log_packet_detailed("'min_city_center_output' field error detected");
8902 }
8903 }
8904
8905 /* field 85 is folded into the header */
8906
8907 /* field 86 is folded into the header */
8908
8909 /* field 87 is folded into the header */
8910
8911 if (BV_ISSET(fields, 88)) {
8912 log_packet_detailed(" field 'notradesize' has changed");
8913
8914#ifdef FREECIV_JSON_CONNECTION
8915 field_addr.name = "notradesize";
8916#endif /* FREECIV_JSON_CONNECTION */
8917 e = 0;
8918
8919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
8920
8921 if (e) {
8922 log_packet_detailed("'notradesize' field error detected");
8923 }
8924 }
8925
8926 /* field 89 is folded into the header */
8927
8928 if (BV_ISSET(fields, 90)) {
8929 log_packet_detailed(" field 'nuclearwinter' has changed");
8930
8931#ifdef FREECIV_JSON_CONNECTION
8932 field_addr.name = "nuclearwinter";
8933#endif /* FREECIV_JSON_CONNECTION */
8934 e = 0;
8935
8936 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
8937
8938 if (e) {
8939 log_packet_detailed("'nuclearwinter' field error detected");
8940 }
8941 }
8942
8943 if (BV_ISSET(fields, 91)) {
8944 log_packet_detailed(" field 'phase' has changed");
8945
8946#ifdef FREECIV_JSON_CONNECTION
8947 field_addr.name = "phase";
8948#endif /* FREECIV_JSON_CONNECTION */
8949 e = 0;
8950
8951 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
8952
8953 if (e) {
8954 log_packet_detailed("'phase' field error detected");
8955 }
8956 }
8957
8958 if (BV_ISSET(fields, 92)) {
8959 log_packet_detailed(" field 'phase_mode' has changed");
8960
8961#ifdef FREECIV_JSON_CONNECTION
8962 field_addr.name = "phase_mode";
8963#endif /* FREECIV_JSON_CONNECTION */
8964 e = 0;
8965
8966 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
8967
8968 if (e) {
8969 log_packet_detailed("'phase_mode' field error detected");
8970 }
8971 }
8972
8973 /* field 93 is folded into the header */
8974
8975 /* field 94 is folded into the header */
8976
8977 /* field 95 is folded into the header */
8978
8979 /* field 96 is folded into the header */
8980
8981 /* field 97 is folded into the header */
8982
8983 /* field 98 is folded into the header */
8984
8985 /* field 99 is folded into the header */
8986
8987 /* field 100 is folded into the header */
8988
8989 if (BV_ISSET(fields, 101)) {
8990 log_packet_detailed(" field 'rapturedelay' has changed");
8991
8992#ifdef FREECIV_JSON_CONNECTION
8993 field_addr.name = "rapturedelay";
8994#endif /* FREECIV_JSON_CONNECTION */
8995 e = 0;
8996
8997 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
8998
8999 if (e) {
9000 log_packet_detailed("'rapturedelay' field error detected");
9001 }
9002 }
9003
9004 if (BV_ISSET(fields, 102)) {
9005 log_packet_detailed(" field 'disasters' has changed");
9006
9007#ifdef FREECIV_JSON_CONNECTION
9008 field_addr.name = "disasters";
9009#endif /* FREECIV_JSON_CONNECTION */
9010 e = 0;
9011
9012 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
9013
9014 if (e) {
9015 log_packet_detailed("'disasters' field error detected");
9016 }
9017 }
9018
9019 /* field 103 is folded into the header */
9020
9021 /* field 104 is folded into the header */
9022
9023 if (BV_ISSET(fields, 105)) {
9024 log_packet_detailed(" field 'sciencebox' has changed");
9025
9026#ifdef FREECIV_JSON_CONNECTION
9027 field_addr.name = "sciencebox";
9028#endif /* FREECIV_JSON_CONNECTION */
9029 e = 0;
9030
9031 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
9032
9033 if (e) {
9034 log_packet_detailed("'sciencebox' field error detected");
9035 }
9036 }
9037
9038 if (BV_ISSET(fields, 106)) {
9039 log_packet_detailed(" field 'shieldbox' has changed");
9040
9041#ifdef FREECIV_JSON_CONNECTION
9042 field_addr.name = "shieldbox";
9043#endif /* FREECIV_JSON_CONNECTION */
9044 e = 0;
9045
9046 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
9047
9048 if (e) {
9049 log_packet_detailed("'shieldbox' field error detected");
9050 }
9051 }
9052
9053 if (BV_ISSET(fields, 107)) {
9054 log_packet_detailed(" field 'skill_level' has changed");
9055
9056#ifdef FREECIV_JSON_CONNECTION
9057 field_addr.name = "skill_level";
9058#endif /* FREECIV_JSON_CONNECTION */
9059 e = 0;
9060
9061 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
9062
9063 if (e) {
9064 log_packet_detailed("'skill_level' field error detected");
9065 }
9066 }
9067
9068 if (BV_ISSET(fields, 108)) {
9069 log_packet_detailed(" field 'victory_conditions' has changed");
9070
9071#ifdef FREECIV_JSON_CONNECTION
9072 field_addr.name = "victory_conditions";
9073#endif /* FREECIV_JSON_CONNECTION */
9074 e = 0;
9075
9076 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
9077
9078 if (e) {
9079 log_packet_detailed("'victory_conditions' field error detected");
9080 }
9081 }
9082
9083 /* field 109 is folded into the header */
9084
9085 if (BV_ISSET(fields, 110)) {
9086 log_packet_detailed(" field 'tech' has changed");
9087
9088#ifdef FREECIV_JSON_CONNECTION
9089 field_addr.name = "tech";
9090#endif /* FREECIV_JSON_CONNECTION */
9091 e = 0;
9092
9093 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
9094
9095 if (e) {
9096 log_packet_detailed("'tech' field error detected");
9097 }
9098 }
9099
9100 if (BV_ISSET(fields, 111)) {
9101 log_packet_detailed(" field 'tech_cost_style' has changed");
9102
9103#ifdef FREECIV_JSON_CONNECTION
9104 field_addr.name = "tech_cost_style";
9105#endif /* FREECIV_JSON_CONNECTION */
9106 e = 0;
9107
9108 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
9109
9110 if (e) {
9111 log_packet_detailed("'tech_cost_style' field error detected");
9112 }
9113 }
9114
9115 if (BV_ISSET(fields, 112)) {
9116 log_packet_detailed(" field 'tech_leakage' has changed");
9117
9118#ifdef FREECIV_JSON_CONNECTION
9119 field_addr.name = "tech_leakage";
9120#endif /* FREECIV_JSON_CONNECTION */
9121 e = 0;
9122
9123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
9124
9125 if (e) {
9126 log_packet_detailed("'tech_leakage' field error detected");
9127 }
9128 }
9129
9130 if (BV_ISSET(fields, 113)) {
9131 log_packet_detailed(" field 'tech_upkeep_divider' has changed");
9132
9133#ifdef FREECIV_JSON_CONNECTION
9134 field_addr.name = "tech_upkeep_divider";
9135#endif /* FREECIV_JSON_CONNECTION */
9136 e = 0;
9137
9138 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
9139
9140 if (e) {
9141 log_packet_detailed("'tech_upkeep_divider' field error detected");
9142 }
9143 }
9144
9145 if (BV_ISSET(fields, 114)) {
9146 log_packet_detailed(" field 'tech_upkeep_style' has changed");
9147
9148#ifdef FREECIV_JSON_CONNECTION
9149 field_addr.name = "tech_upkeep_style";
9150#endif /* FREECIV_JSON_CONNECTION */
9151 e = 0;
9152
9153 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
9154
9155 if (e) {
9156 log_packet_detailed("'tech_upkeep_style' field error detected");
9157 }
9158 }
9159
9160 if (BV_ISSET(fields, 115)) {
9161 log_packet_detailed(" field 'techloss_forgiveness' has changed");
9162
9163#ifdef FREECIV_JSON_CONNECTION
9164 field_addr.name = "techloss_forgiveness";
9165#endif /* FREECIV_JSON_CONNECTION */
9166 e = 0;
9167
9168 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
9169
9170 if (e) {
9171 log_packet_detailed("'techloss_forgiveness' field error detected");
9172 }
9173 }
9174
9175 if (BV_ISSET(fields, 116)) {
9176 log_packet_detailed(" field 'free_tech_method' has changed");
9177
9178#ifdef FREECIV_JSON_CONNECTION
9179 field_addr.name = "free_tech_method";
9180#endif /* FREECIV_JSON_CONNECTION */
9181 e = 0;
9182
9183 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
9184
9185 if (e) {
9186 log_packet_detailed("'free_tech_method' field error detected");
9187 }
9188 }
9189
9190 if (BV_ISSET(fields, 117)) {
9191 log_packet_detailed(" field 'gameloss_style' has changed");
9192
9193#ifdef FREECIV_JSON_CONNECTION
9194 field_addr.name = "gameloss_style";
9195#endif /* FREECIV_JSON_CONNECTION */
9196 e = 0;
9197
9198 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
9199
9200 if (e) {
9201 log_packet_detailed("'gameloss_style' field error detected");
9202 }
9203 }
9204
9205 if (BV_ISSET(fields, 118)) {
9206 log_packet_detailed(" field 'timeout' has changed");
9207
9208#ifdef FREECIV_JSON_CONNECTION
9209 field_addr.name = "timeout";
9210#endif /* FREECIV_JSON_CONNECTION */
9211 e = 0;
9212
9213 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
9214
9215 if (e) {
9216 log_packet_detailed("'timeout' field error detected");
9217 }
9218 }
9219
9220 if (BV_ISSET(fields, 119)) {
9221 log_packet_detailed(" field 'first_timeout' has changed");
9222
9223#ifdef FREECIV_JSON_CONNECTION
9224 field_addr.name = "first_timeout";
9225#endif /* FREECIV_JSON_CONNECTION */
9226 e = 0;
9227
9228 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
9229
9230 if (e) {
9231 log_packet_detailed("'first_timeout' field error detected");
9232 }
9233 }
9234
9235 /* field 120 is folded into the header */
9236
9237 if (BV_ISSET(fields, 121)) {
9238 log_packet_detailed(" field 'trademindist' has changed");
9239
9240#ifdef FREECIV_JSON_CONNECTION
9241 field_addr.name = "trademindist";
9242#endif /* FREECIV_JSON_CONNECTION */
9243 e = 0;
9244
9245 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
9246
9247 if (e) {
9248 log_packet_detailed("'trademindist' field error detected");
9249 }
9250 }
9251
9252 if (BV_ISSET(fields, 122)) {
9253 log_packet_detailed(" field 'trade_revenue_style' has changed");
9254
9255#ifdef FREECIV_JSON_CONNECTION
9256 field_addr.name = "trade_revenue_style";
9257#endif /* FREECIV_JSON_CONNECTION */
9258 e = 0;
9259
9260 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
9261
9262 if (e) {
9263 log_packet_detailed("'trade_revenue_style' field error detected");
9264 }
9265 }
9266
9267 /* field 123 is folded into the header */
9268
9269 /* field 124 is folded into the header */
9270
9271 /* field 125 is folded into the header */
9272
9273 if (BV_ISSET(fields, 126)) {
9274 log_packet_detailed(" field 'turn' has changed");
9275
9276#ifdef FREECIV_JSON_CONNECTION
9277 field_addr.name = "turn";
9278#endif /* FREECIV_JSON_CONNECTION */
9279 e = 0;
9280
9281 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
9282
9283 if (e) {
9284 log_packet_detailed("'turn' field error detected");
9285 }
9286 }
9287
9288 if (BV_ISSET(fields, 127)) {
9289 log_packet_detailed(" field 'warminglevel' has changed");
9290
9291#ifdef FREECIV_JSON_CONNECTION
9292 field_addr.name = "warminglevel";
9293#endif /* FREECIV_JSON_CONNECTION */
9294 e = 0;
9295
9296 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
9297
9298 if (e) {
9299 log_packet_detailed("'warminglevel' field error detected");
9300 }
9301 }
9302
9303 if (BV_ISSET(fields, 128)) {
9304 log_packet_detailed(" field 'year' has changed");
9305
9306#ifdef FREECIV_JSON_CONNECTION
9307 field_addr.name = "year";
9308#endif /* FREECIV_JSON_CONNECTION */
9309 e = 0;
9310
9311 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
9312
9313 if (e) {
9314 log_packet_detailed("'year' field error detected");
9315 }
9316 }
9317
9318 /* field 129 is folded into the header */
9319
9320 if (BV_ISSET(fields, 130)) {
9321 log_packet_detailed(" field 'top_cities_count' has changed");
9322
9323#ifdef FREECIV_JSON_CONNECTION
9324 field_addr.name = "top_cities_count";
9325#endif /* FREECIV_JSON_CONNECTION */
9326 e = 0;
9327
9328 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
9329
9330 if (e) {
9331 log_packet_detailed("'top_cities_count' field error detected");
9332 }
9333 }
9334
9335 if (BV_ISSET(fields, 131)) {
9336 log_packet_detailed(" field 'fragment_count' has changed");
9337
9338#ifdef FREECIV_JSON_CONNECTION
9339 field_addr.name = "fragment_count";
9340#endif /* FREECIV_JSON_CONNECTION */
9341 e = 0;
9342
9343 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
9344
9345 if (e) {
9346 log_packet_detailed("'fragment_count' field error detected");
9347 }
9348 }
9349
9350 if (BV_ISSET(fields, 132)) {
9351 log_packet_detailed(" field 'granularity' has changed");
9352
9353#ifdef FREECIV_JSON_CONNECTION
9354 field_addr.name = "granularity";
9355#endif /* FREECIV_JSON_CONNECTION */
9356 e = 0;
9357
9358 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
9359
9360 if (e) {
9361 log_packet_detailed("'granularity' field error detected");
9362 }
9363 }
9364
9365 if (BV_ISSET(fields, 133)) {
9366 log_packet_detailed(" field 'small_wonder_visibility' has changed");
9367
9368#ifdef FREECIV_JSON_CONNECTION
9369 field_addr.name = "small_wonder_visibility";
9370#endif /* FREECIV_JSON_CONNECTION */
9371 e = 0;
9372
9373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
9374
9375 if (e) {
9376 log_packet_detailed("'small_wonder_visibility' field error detected");
9377 }
9378 }
9379
9380 *old = *real_packet;
9381
9382#else /* FREECIV_DELTA_PROTOCOL */
9383#ifdef FREECIV_JSON_CONNECTION
9384 field_addr.name = "add_to_size_limit";
9385#endif /* FREECIV_JSON_CONNECTION */
9386 e = 0;
9387
9388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
9389
9390 if (e) {
9391 log_packet_detailed("'add_to_size_limit' field error detected");
9392 }
9393
9394#ifdef FREECIV_JSON_CONNECTION
9395 field_addr.name = "aifill";
9396#endif /* FREECIV_JSON_CONNECTION */
9397 e = 0;
9398
9399 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->aifill);
9400
9401 if (e) {
9402 log_packet_detailed("'aifill' field error detected");
9403 }
9404
9405#ifdef FREECIV_JSON_CONNECTION
9406 field_addr.name = "persistent_ready";
9407#endif /* FREECIV_JSON_CONNECTION */
9408 e = 0;
9409
9410 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
9411
9412 if (e) {
9413 log_packet_detailed("'persistent_ready' field error detected");
9414 }
9415
9416#ifdef FREECIV_JSON_CONNECTION
9417 field_addr.name = "airlifting_style";
9418#endif /* FREECIV_JSON_CONNECTION */
9419 e = 0;
9420
9421 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
9422
9423 if (e) {
9424 log_packet_detailed("'airlifting_style' field error detected");
9425 }
9426
9427#ifdef FREECIV_JSON_CONNECTION
9428 field_addr.name = "airlift_from_always_enabled";
9429#endif /* FREECIV_JSON_CONNECTION */
9430 e = 0;
9431
9432 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_from_always_enabled);
9433
9434 if (e) {
9435 log_packet_detailed("'airlift_from_always_enabled' field error detected");
9436 }
9437
9438#ifdef FREECIV_JSON_CONNECTION
9439 field_addr.name = "airlift_to_always_enabled";
9440#endif /* FREECIV_JSON_CONNECTION */
9441 e = 0;
9442
9443 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_to_always_enabled);
9444
9445 if (e) {
9446 log_packet_detailed("'airlift_to_always_enabled' field error detected");
9447 }
9448
9449#ifdef FREECIV_JSON_CONNECTION
9450 field_addr.name = "angrycitizen";
9451#endif /* FREECIV_JSON_CONNECTION */
9452 e = 0;
9453
9454 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
9455
9456 if (e) {
9457 log_packet_detailed("'angrycitizen' field error detected");
9458 }
9459
9460#ifdef FREECIV_JSON_CONNECTION
9461 field_addr.name = "base_pollution";
9462#endif /* FREECIV_JSON_CONNECTION */
9463 e = 0;
9464
9465 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
9466
9467 if (e) {
9468 log_packet_detailed("'base_pollution' field error detected");
9469 }
9470
9471#ifdef FREECIV_JSON_CONNECTION
9472 field_addr.name = "base_tech_cost";
9473#endif /* FREECIV_JSON_CONNECTION */
9474 e = 0;
9475
9476 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
9477
9478 if (e) {
9479 log_packet_detailed("'base_tech_cost' field error detected");
9480 }
9481
9482#ifdef FREECIV_JSON_CONNECTION
9483 field_addr.name = "min_tech_cost";
9484#endif /* FREECIV_JSON_CONNECTION */
9485 e = 0;
9486
9487 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
9488
9489 if (e) {
9490 log_packet_detailed("'min_tech_cost' field error detected");
9491 }
9492
9493#ifdef FREECIV_JSON_CONNECTION
9494 field_addr.name = "tech_leak_pct";
9495#endif /* FREECIV_JSON_CONNECTION */
9496 e = 0;
9497
9498 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
9499
9500 if (e) {
9501 log_packet_detailed("'tech_leak_pct' field error detected");
9502 }
9503
9504#ifdef FREECIV_JSON_CONNECTION
9505 field_addr.name = "border_city_radius_sq";
9506#endif /* FREECIV_JSON_CONNECTION */
9507 e = 0;
9508
9509 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
9510
9511 if (e) {
9512 log_packet_detailed("'border_city_radius_sq' field error detected");
9513 }
9514
9515#ifdef FREECIV_JSON_CONNECTION
9516 field_addr.name = "border_size_effect";
9517#endif /* FREECIV_JSON_CONNECTION */
9518 e = 0;
9519
9520 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
9521
9522 if (e) {
9523 log_packet_detailed("'border_size_effect' field error detected");
9524 }
9525
9526#ifdef FREECIV_JSON_CONNECTION
9527 field_addr.name = "border_city_permanent_radius_sq";
9528#endif /* FREECIV_JSON_CONNECTION */
9529 e = 0;
9530
9531 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
9532
9533 if (e) {
9534 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
9535 }
9536
9537#ifdef FREECIV_JSON_CONNECTION
9538 field_addr.name = "borders";
9539#endif /* FREECIV_JSON_CONNECTION */
9540 e = 0;
9541
9542 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
9543
9544 if (e) {
9545 log_packet_detailed("'borders' field error detected");
9546 }
9547
9548#ifdef FREECIV_JSON_CONNECTION
9549 field_addr.name = "base_bribe_cost";
9550#endif /* FREECIV_JSON_CONNECTION */
9551 e = 0;
9552
9553 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
9554
9555 if (e) {
9556 log_packet_detailed("'base_bribe_cost' field error detected");
9557 }
9558
9559#ifdef FREECIV_JSON_CONNECTION
9560 field_addr.name = "caravan_bonus_style";
9561#endif /* FREECIV_JSON_CONNECTION */
9562 e = 0;
9563
9564 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
9565
9566 if (e) {
9567 log_packet_detailed("'caravan_bonus_style' field error detected");
9568 }
9569
9570#ifdef FREECIV_JSON_CONNECTION
9571 field_addr.name = "culture_vic_points";
9572#endif /* FREECIV_JSON_CONNECTION */
9573 e = 0;
9574
9575 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
9576
9577 if (e) {
9578 log_packet_detailed("'culture_vic_points' field error detected");
9579 }
9580
9581#ifdef FREECIV_JSON_CONNECTION
9582 field_addr.name = "culture_vic_lead";
9583#endif /* FREECIV_JSON_CONNECTION */
9584 e = 0;
9585
9586 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
9587
9588 if (e) {
9589 log_packet_detailed("'culture_vic_lead' field error detected");
9590 }
9591
9592#ifdef FREECIV_JSON_CONNECTION
9593 field_addr.name = "culture_migration_pml";
9594#endif /* FREECIV_JSON_CONNECTION */
9595 e = 0;
9596
9597 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
9598
9599 if (e) {
9600 log_packet_detailed("'culture_migration_pml' field error detected");
9601 }
9602
9603#ifdef FREECIV_JSON_CONNECTION
9604 field_addr.name = "history_interest_pml";
9605#endif /* FREECIV_JSON_CONNECTION */
9606 e = 0;
9607
9608 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
9609
9610 if (e) {
9611 log_packet_detailed("'history_interest_pml' field error detected");
9612 }
9613
9614#ifdef FREECIV_JSON_CONNECTION
9615 field_addr.name = "world_peace_turns";
9616#endif /* FREECIV_JSON_CONNECTION */
9617 e = 0;
9618
9619 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->world_peace_turns);
9620
9621 if (e) {
9622 log_packet_detailed("'world_peace_turns' field error detected");
9623 }
9624
9625#ifdef FREECIV_JSON_CONNECTION
9626 field_addr.name = "celebratesize";
9627#endif /* FREECIV_JSON_CONNECTION */
9628 e = 0;
9629
9630 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
9631
9632 if (e) {
9633 log_packet_detailed("'celebratesize' field error detected");
9634 }
9635
9636#ifdef FREECIV_JSON_CONNECTION
9637 field_addr.name = "changable_tax";
9638#endif /* FREECIV_JSON_CONNECTION */
9639 e = 0;
9640
9641 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->changable_tax);
9642
9643 if (e) {
9644 log_packet_detailed("'changable_tax' field error detected");
9645 }
9646
9647#ifdef FREECIV_JSON_CONNECTION
9648 field_addr.name = "pop_report_zeroes";
9649#endif /* FREECIV_JSON_CONNECTION */
9650 e = 0;
9651
9652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
9653
9654 if (e) {
9655 log_packet_detailed("'pop_report_zeroes' field error detected");
9656 }
9657
9658#ifdef FREECIV_JSON_CONNECTION
9659 field_addr.name = "citizen_nationality";
9660#endif /* FREECIV_JSON_CONNECTION */
9661 e = 0;
9662
9663 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->citizen_nationality);
9664
9665 if (e) {
9666 log_packet_detailed("'citizen_nationality' field error detected");
9667 }
9668
9669#ifdef FREECIV_JSON_CONNECTION
9670 field_addr.name = "unit_builders_nationality";
9671#endif /* FREECIV_JSON_CONNECTION */
9672 e = 0;
9673
9674 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unit_builders_nationality);
9675
9676 if (e) {
9677 log_packet_detailed("'unit_builders_nationality' field error detected");
9678 }
9679
9680#ifdef FREECIV_JSON_CONNECTION
9681 field_addr.name = "citizen_convert_speed";
9682#endif /* FREECIV_JSON_CONNECTION */
9683 e = 0;
9684
9685 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
9686
9687 if (e) {
9688 log_packet_detailed("'citizen_convert_speed' field error detected");
9689 }
9690
9691#ifdef FREECIV_JSON_CONNECTION
9692 field_addr.name = "conquest_convert_pct";
9693#endif /* FREECIV_JSON_CONNECTION */
9694 e = 0;
9695
9696 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
9697
9698 if (e) {
9699 log_packet_detailed("'conquest_convert_pct' field error detected");
9700 }
9701
9702#ifdef FREECIV_JSON_CONNECTION
9703 field_addr.name = "citizen_partisans_pct";
9704#endif /* FREECIV_JSON_CONNECTION */
9705 e = 0;
9706
9707 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
9708
9709 if (e) {
9710 log_packet_detailed("'citizen_partisans_pct' field error detected");
9711 }
9712
9713#ifdef FREECIV_JSON_CONNECTION
9714 field_addr.name = "citymindist";
9715#endif /* FREECIV_JSON_CONNECTION */
9716 e = 0;
9717
9718 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
9719
9720 if (e) {
9721 log_packet_detailed("'citymindist' field error detected");
9722 }
9723
9724#ifdef FREECIV_JSON_CONNECTION
9725 field_addr.name = "cooling";
9726#endif /* FREECIV_JSON_CONNECTION */
9727 e = 0;
9728
9729 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
9730
9731 if (e) {
9732 log_packet_detailed("'cooling' field error detected");
9733 }
9734
9735#ifdef FREECIV_JSON_CONNECTION
9736 field_addr.name = "coolinglevel";
9737#endif /* FREECIV_JSON_CONNECTION */
9738 e = 0;
9739
9740 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
9741
9742 if (e) {
9743 log_packet_detailed("'coolinglevel' field error detected");
9744 }
9745
9746#ifdef FREECIV_JSON_CONNECTION
9747 field_addr.name = "diplchance_initial_odds";
9748#endif /* FREECIV_JSON_CONNECTION */
9749 e = 0;
9750
9751 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->diplchance_initial_odds);
9752
9753 if (e) {
9754 log_packet_detailed("'diplchance_initial_odds' field error detected");
9755 }
9756
9757#ifdef FREECIV_JSON_CONNECTION
9758 field_addr.name = "diplomacy";
9759#endif /* FREECIV_JSON_CONNECTION */
9760 e = 0;
9761
9762 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
9763
9764 if (e) {
9765 log_packet_detailed("'diplomacy' field error detected");
9766 }
9767
9768#ifdef FREECIV_JSON_CONNECTION
9769 field_addr.name = "fogofwar";
9770#endif /* FREECIV_JSON_CONNECTION */
9771 e = 0;
9772
9773 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->fogofwar);
9774
9775 if (e) {
9776 log_packet_detailed("'fogofwar' field error detected");
9777 }
9778
9779#ifdef FREECIV_JSON_CONNECTION
9780 field_addr.name = "food_cost";
9781#endif /* FREECIV_JSON_CONNECTION */
9782 e = 0;
9783
9784 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
9785
9786 if (e) {
9787 log_packet_detailed("'food_cost' field error detected");
9788 }
9789
9790#ifdef FREECIV_JSON_CONNECTION
9791 field_addr.name = "foodbox";
9792#endif /* FREECIV_JSON_CONNECTION */
9793 e = 0;
9794
9795 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
9796
9797 if (e) {
9798 log_packet_detailed("'foodbox' field error detected");
9799 }
9800
9801#ifdef FREECIV_JSON_CONNECTION
9802 field_addr.name = "forced_gold";
9803#endif /* FREECIV_JSON_CONNECTION */
9804 e = 0;
9805
9806 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
9807
9808 if (e) {
9809 log_packet_detailed("'forced_gold' field error detected");
9810 }
9811
9812#ifdef FREECIV_JSON_CONNECTION
9813 field_addr.name = "forced_luxury";
9814#endif /* FREECIV_JSON_CONNECTION */
9815 e = 0;
9816
9817 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
9818
9819 if (e) {
9820 log_packet_detailed("'forced_luxury' field error detected");
9821 }
9822
9823#ifdef FREECIV_JSON_CONNECTION
9824 field_addr.name = "forced_science";
9825#endif /* FREECIV_JSON_CONNECTION */
9826 e = 0;
9827
9828 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
9829
9830 if (e) {
9831 log_packet_detailed("'forced_science' field error detected");
9832 }
9833
9834#ifdef FREECIV_JSON_CONNECTION
9835 field_addr.name = "fulltradesize";
9836#endif /* FREECIV_JSON_CONNECTION */
9837 e = 0;
9838
9839 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
9840
9841 if (e) {
9842 log_packet_detailed("'fulltradesize' field error detected");
9843 }
9844
9845#ifdef FREECIV_JSON_CONNECTION
9846 field_addr.name = "trade_world_rel_pct";
9847#endif /* FREECIV_JSON_CONNECTION */
9848 e = 0;
9849
9850 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
9851
9852 if (e) {
9853 log_packet_detailed("'trade_world_rel_pct' field error detected");
9854 }
9855
9856#ifdef FREECIV_JSON_CONNECTION
9857 field_addr.name = "min_trade_route_val";
9858#endif /* FREECIV_JSON_CONNECTION */
9859 e = 0;
9860
9861 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
9862
9863 if (e) {
9864 log_packet_detailed("'min_trade_route_val' field error detected");
9865 }
9866
9867#ifdef FREECIV_JSON_CONNECTION
9868 field_addr.name = "reveal_trade_partner";
9869#endif /* FREECIV_JSON_CONNECTION */
9870 e = 0;
9871
9872 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->reveal_trade_partner);
9873
9874 if (e) {
9875 log_packet_detailed("'reveal_trade_partner' field error detected");
9876 }
9877
9878#ifdef FREECIV_JSON_CONNECTION
9879 field_addr.name = "goods_selection";
9880#endif /* FREECIV_JSON_CONNECTION */
9881 e = 0;
9882
9883 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
9884
9885 if (e) {
9886 log_packet_detailed("'goods_selection' field error detected");
9887 }
9888
9889#ifdef FREECIV_JSON_CONNECTION
9890 field_addr.name = "global_advance_count";
9891#endif /* FREECIV_JSON_CONNECTION */
9892 e = 0;
9893
9894 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
9895
9896 if (e) {
9897 log_packet_detailed("'global_advance_count' field error detected");
9898 }
9899
9900#ifdef FREECIV_JSON_CONNECTION
9901 field_addr.name = "global_advances";
9902#endif /* FREECIV_JSON_CONNECTION */
9903 e = 0;
9904
9905 {
9906 int i;
9907
9908#ifdef FREECIV_JSON_CONNECTION
9909 /* Create the array. */
9910 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST);
9911
9912 /* Enter array. */
9913 field_addr.sub_location = plocation_elem_new(0);
9914#endif /* FREECIV_JSON_CONNECTION */
9915
9916 for (i = 0; i < A_LAST; i++) {
9917#ifdef FREECIV_JSON_CONNECTION
9918 /* Next array element. */
9919 field_addr.sub_location->number = i;
9920#endif /* FREECIV_JSON_CONNECTION */
9921
9922 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
9923 }
9924
9925#ifdef FREECIV_JSON_CONNECTION
9926 /* Exit array. */
9927 FC_FREE(field_addr.sub_location);
9928#endif /* FREECIV_JSON_CONNECTION */
9929 }
9930
9931 if (e) {
9932 log_packet_detailed("'global_advances' field error detected");
9933 }
9934
9935#ifdef FREECIV_JSON_CONNECTION
9936 field_addr.name = "global_warming";
9937#endif /* FREECIV_JSON_CONNECTION */
9938 e = 0;
9939
9940 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_warming);
9941
9942 if (e) {
9943 log_packet_detailed("'global_warming' field error detected");
9944 }
9945
9946#ifdef FREECIV_JSON_CONNECTION
9947 field_addr.name = "globalwarming";
9948#endif /* FREECIV_JSON_CONNECTION */
9949 e = 0;
9950
9951 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
9952
9953 if (e) {
9954 log_packet_detailed("'globalwarming' field error detected");
9955 }
9956
9957#ifdef FREECIV_JSON_CONNECTION
9958 field_addr.name = "gold";
9959#endif /* FREECIV_JSON_CONNECTION */
9960 e = 0;
9961
9962 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
9963
9964 if (e) {
9965 log_packet_detailed("'gold' field error detected");
9966 }
9967
9968#ifdef FREECIV_JSON_CONNECTION
9969 field_addr.name = "gold_upkeep_style";
9970#endif /* FREECIV_JSON_CONNECTION */
9971 e = 0;
9972
9973 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
9974
9975 if (e) {
9976 log_packet_detailed("'gold_upkeep_style' field error detected");
9977 }
9978
9979#ifdef FREECIV_JSON_CONNECTION
9980 field_addr.name = "homeless_gold_upkeep";
9981#endif /* FREECIV_JSON_CONNECTION */
9982 e = 0;
9983
9984 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->homeless_gold_upkeep);
9985
9986 if (e) {
9987 log_packet_detailed("'homeless_gold_upkeep' field error detected");
9988 }
9989
9990#ifdef FREECIV_JSON_CONNECTION
9991 field_addr.name = "infrapoints";
9992#endif /* FREECIV_JSON_CONNECTION */
9993 e = 0;
9994
9995 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
9996
9997 if (e) {
9998 log_packet_detailed("'infrapoints' field error detected");
9999 }
10000
10001#ifdef FREECIV_JSON_CONNECTION
10002 field_addr.name = "revolentype";
10003#endif /* FREECIV_JSON_CONNECTION */
10004 e = 0;
10005
10006 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
10007
10008 if (e) {
10009 log_packet_detailed("'revolentype' field error detected");
10010 }
10011
10012#ifdef FREECIV_JSON_CONNECTION
10013 field_addr.name = "default_government_id";
10014#endif /* FREECIV_JSON_CONNECTION */
10015 e = 0;
10016
10017 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
10018
10019 if (e) {
10020 log_packet_detailed("'default_government_id' field error detected");
10021 }
10022
10023#ifdef FREECIV_JSON_CONNECTION
10024 field_addr.name = "government_during_revolution_id";
10025#endif /* FREECIV_JSON_CONNECTION */
10026 e = 0;
10027
10028 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
10029
10030 if (e) {
10031 log_packet_detailed("'government_during_revolution_id' field error detected");
10032 }
10033
10034#ifdef FREECIV_JSON_CONNECTION
10035 field_addr.name = "granary_food_inc";
10036#endif /* FREECIV_JSON_CONNECTION */
10037 e = 0;
10038
10039 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
10040
10041 if (e) {
10042 log_packet_detailed("'granary_food_inc' field error detected");
10043 }
10044
10045#ifdef FREECIV_JSON_CONNECTION
10046 field_addr.name = "granary_food_ini";
10047#endif /* FREECIV_JSON_CONNECTION */
10048 e = 0;
10049
10050 {
10051 int i;
10052
10053#ifdef FREECIV_JSON_CONNECTION
10054 /* Create the array. */
10056
10057 /* Enter array. */
10058 field_addr.sub_location = plocation_elem_new(0);
10059#endif /* FREECIV_JSON_CONNECTION */
10060
10061 for (i = 0; i < MAX_GRANARY_INIS; i++) {
10062#ifdef FREECIV_JSON_CONNECTION
10063 /* Next array element. */
10064 field_addr.sub_location->number = i;
10065#endif /* FREECIV_JSON_CONNECTION */
10066
10067 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
10068 }
10069
10070#ifdef FREECIV_JSON_CONNECTION
10071 /* Exit array. */
10072 FC_FREE(field_addr.sub_location);
10073#endif /* FREECIV_JSON_CONNECTION */
10074 }
10075
10076 if (e) {
10077 log_packet_detailed("'granary_food_ini' field error detected");
10078 }
10079
10080#ifdef FREECIV_JSON_CONNECTION
10081 field_addr.name = "granary_num_inis";
10082#endif /* FREECIV_JSON_CONNECTION */
10083 e = 0;
10084
10085 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
10086
10087 if (e) {
10088 log_packet_detailed("'granary_num_inis' field error detected");
10089 }
10090
10091#ifdef FREECIV_JSON_CONNECTION
10092 field_addr.name = "great_wonder_owners";
10093#endif /* FREECIV_JSON_CONNECTION */
10094 e = 0;
10095
10096 {
10097 int i;
10098
10099#ifdef FREECIV_JSON_CONNECTION
10100 /* Create the array. */
10101 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
10102
10103 /* Enter array. */
10104 field_addr.sub_location = plocation_elem_new(0);
10105#endif /* FREECIV_JSON_CONNECTION */
10106
10107 for (i = 0; i < B_LAST; i++) {
10108#ifdef FREECIV_JSON_CONNECTION
10109 /* Next array element. */
10110 field_addr.sub_location->number = i;
10111#endif /* FREECIV_JSON_CONNECTION */
10112
10113 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
10114 }
10115
10116#ifdef FREECIV_JSON_CONNECTION
10117 /* Exit array. */
10118 FC_FREE(field_addr.sub_location);
10119#endif /* FREECIV_JSON_CONNECTION */
10120 }
10121
10122 if (e) {
10123 log_packet_detailed("'great_wonder_owners' field error detected");
10124 }
10125
10126#ifdef FREECIV_JSON_CONNECTION
10127 field_addr.name = "happy_cost";
10128#endif /* FREECIV_JSON_CONNECTION */
10129 e = 0;
10130
10131 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
10132
10133 if (e) {
10134 log_packet_detailed("'happy_cost' field error detected");
10135 }
10136
10137#ifdef FREECIV_JSON_CONNECTION
10138 field_addr.name = "happyborders";
10139#endif /* FREECIV_JSON_CONNECTION */
10140 e = 0;
10141
10142 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
10143
10144 if (e) {
10145 log_packet_detailed("'happyborders' field error detected");
10146 }
10147
10148#ifdef FREECIV_JSON_CONNECTION
10149 field_addr.name = "heating";
10150#endif /* FREECIV_JSON_CONNECTION */
10151 e = 0;
10152
10153 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
10154
10155 if (e) {
10156 log_packet_detailed("'heating' field error detected");
10157 }
10158
10159#ifdef FREECIV_JSON_CONNECTION
10160 field_addr.name = "illness_base_factor";
10161#endif /* FREECIV_JSON_CONNECTION */
10162 e = 0;
10163
10164 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
10165
10166 if (e) {
10167 log_packet_detailed("'illness_base_factor' field error detected");
10168 }
10169
10170#ifdef FREECIV_JSON_CONNECTION
10171 field_addr.name = "illness_min_size";
10172#endif /* FREECIV_JSON_CONNECTION */
10173 e = 0;
10174
10175 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
10176
10177 if (e) {
10178 log_packet_detailed("'illness_min_size' field error detected");
10179 }
10180
10181#ifdef FREECIV_JSON_CONNECTION
10182 field_addr.name = "illness_on";
10183#endif /* FREECIV_JSON_CONNECTION */
10184 e = 0;
10185
10186 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->illness_on);
10187
10188 if (e) {
10189 log_packet_detailed("'illness_on' field error detected");
10190 }
10191
10192#ifdef FREECIV_JSON_CONNECTION
10193 field_addr.name = "illness_pollution_factor";
10194#endif /* FREECIV_JSON_CONNECTION */
10195 e = 0;
10196
10197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
10198
10199 if (e) {
10200 log_packet_detailed("'illness_pollution_factor' field error detected");
10201 }
10202
10203#ifdef FREECIV_JSON_CONNECTION
10204 field_addr.name = "illness_trade_infection";
10205#endif /* FREECIV_JSON_CONNECTION */
10206 e = 0;
10207
10208 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
10209
10210 if (e) {
10211 log_packet_detailed("'illness_trade_infection' field error detected");
10212 }
10213
10214#ifdef FREECIV_JSON_CONNECTION
10215 field_addr.name = "init_city_radius_sq";
10216#endif /* FREECIV_JSON_CONNECTION */
10217 e = 0;
10218
10219 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
10220
10221 if (e) {
10222 log_packet_detailed("'init_city_radius_sq' field error detected");
10223 }
10224
10225#ifdef FREECIV_JSON_CONNECTION
10226 field_addr.name = "is_edit_mode";
10227#endif /* FREECIV_JSON_CONNECTION */
10228 e = 0;
10229
10230 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_edit_mode);
10231
10232 if (e) {
10233 log_packet_detailed("'is_edit_mode' field error detected");
10234 }
10235
10236#ifdef FREECIV_JSON_CONNECTION
10237 field_addr.name = "is_new_game";
10238#endif /* FREECIV_JSON_CONNECTION */
10239 e = 0;
10240
10241 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_new_game);
10242
10243 if (e) {
10244 log_packet_detailed("'is_new_game' field error detected");
10245 }
10246
10247#ifdef FREECIV_JSON_CONNECTION
10248 field_addr.name = "killcitizen";
10249#endif /* FREECIV_JSON_CONNECTION */
10250 e = 0;
10251
10252 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killcitizen);
10253
10254 if (e) {
10255 log_packet_detailed("'killcitizen' field error detected");
10256 }
10257
10258#ifdef FREECIV_JSON_CONNECTION
10259 field_addr.name = "killstack";
10260#endif /* FREECIV_JSON_CONNECTION */
10261 e = 0;
10262
10263 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killstack);
10264
10265 if (e) {
10266 log_packet_detailed("'killstack' field error detected");
10267 }
10268
10269#ifdef FREECIV_JSON_CONNECTION
10270 field_addr.name = "only_killing_makes_veteran";
10271#endif /* FREECIV_JSON_CONNECTION */
10272 e = 0;
10273
10274 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_killing_makes_veteran);
10275
10276 if (e) {
10277 log_packet_detailed("'only_killing_makes_veteran' field error detected");
10278 }
10279
10280#ifdef FREECIV_JSON_CONNECTION
10281 field_addr.name = "only_real_fight_makes_veteran";
10282#endif /* FREECIV_JSON_CONNECTION */
10283 e = 0;
10284
10285 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_real_fight_makes_veteran);
10286
10287 if (e) {
10288 log_packet_detailed("'only_real_fight_makes_veteran' field error detected");
10289 }
10290
10291#ifdef FREECIV_JSON_CONNECTION
10292 field_addr.name = "combat_odds_scaled_veterancy";
10293#endif /* FREECIV_JSON_CONNECTION */
10294 e = 0;
10295
10296 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->combat_odds_scaled_veterancy);
10297
10298 if (e) {
10299 log_packet_detailed("'combat_odds_scaled_veterancy' field error detected");
10300 }
10301
10302#ifdef FREECIV_JSON_CONNECTION
10303 field_addr.name = "damage_reduces_bombard_rate";
10304#endif /* FREECIV_JSON_CONNECTION */
10305 e = 0;
10306
10307 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->damage_reduces_bombard_rate);
10308
10309 if (e) {
10310 log_packet_detailed("'damage_reduces_bombard_rate' field error detected");
10311 }
10312
10313#ifdef FREECIV_JSON_CONNECTION
10314 field_addr.name = "low_firepower_badwallattacker";
10315#endif /* FREECIV_JSON_CONNECTION */
10316 e = 0;
10317
10318 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
10319
10320 if (e) {
10321 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
10322 }
10323
10324#ifdef FREECIV_JSON_CONNECTION
10325 field_addr.name = "low_firepower_pearl_harbor";
10326#endif /* FREECIV_JSON_CONNECTION */
10327 e = 0;
10328
10329 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbor);
10330
10331 if (e) {
10332 log_packet_detailed("'low_firepower_pearl_harbor' field error detected");
10333 }
10334
10335#ifdef FREECIV_JSON_CONNECTION
10336 field_addr.name = "low_firepower_combat_bonus";
10337#endif /* FREECIV_JSON_CONNECTION */
10338 e = 0;
10339
10340 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
10341
10342 if (e) {
10343 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
10344 }
10345
10346#ifdef FREECIV_JSON_CONNECTION
10347 field_addr.name = "low_firepower_nonnat_bombard";
10348#endif /* FREECIV_JSON_CONNECTION */
10349 e = 0;
10350
10351 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
10352
10353 if (e) {
10354 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
10355 }
10356
10357#ifdef FREECIV_JSON_CONNECTION
10358 field_addr.name = "nuke_pop_loss_pct";
10359#endif /* FREECIV_JSON_CONNECTION */
10360 e = 0;
10361
10362 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
10363
10364 if (e) {
10365 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
10366 }
10367
10368#ifdef FREECIV_JSON_CONNECTION
10369 field_addr.name = "nuke_defender_survival_chance_pct";
10370#endif /* FREECIV_JSON_CONNECTION */
10371 e = 0;
10372
10373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
10374
10375 if (e) {
10376 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
10377 }
10378
10379#ifdef FREECIV_JSON_CONNECTION
10380 field_addr.name = "min_city_center_output";
10381#endif /* FREECIV_JSON_CONNECTION */
10382 e = 0;
10383
10384 {
10385 int i;
10386
10387#ifdef FREECIV_JSON_CONNECTION
10388 /* Create the array. */
10389 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
10390
10391 /* Enter array. */
10392 field_addr.sub_location = plocation_elem_new(0);
10393#endif /* FREECIV_JSON_CONNECTION */
10394
10395 for (i = 0; i < O_LAST; i++) {
10396#ifdef FREECIV_JSON_CONNECTION
10397 /* Next array element. */
10398 field_addr.sub_location->number = i;
10399#endif /* FREECIV_JSON_CONNECTION */
10400
10401 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
10402 }
10403
10404#ifdef FREECIV_JSON_CONNECTION
10405 /* Exit array. */
10406 FC_FREE(field_addr.sub_location);
10407#endif /* FREECIV_JSON_CONNECTION */
10408 }
10409
10410 if (e) {
10411 log_packet_detailed("'min_city_center_output' field error detected");
10412 }
10413
10414#ifdef FREECIV_JSON_CONNECTION
10415 field_addr.name = "muuk_food_wipe";
10416#endif /* FREECIV_JSON_CONNECTION */
10417 e = 0;
10418
10419 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_food_wipe);
10420
10421 if (e) {
10422 log_packet_detailed("'muuk_food_wipe' field error detected");
10423 }
10424
10425#ifdef FREECIV_JSON_CONNECTION
10426 field_addr.name = "muuk_gold_wipe";
10427#endif /* FREECIV_JSON_CONNECTION */
10428 e = 0;
10429
10430 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_gold_wipe);
10431
10432 if (e) {
10433 log_packet_detailed("'muuk_gold_wipe' field error detected");
10434 }
10435
10436#ifdef FREECIV_JSON_CONNECTION
10437 field_addr.name = "muuk_shield_wipe";
10438#endif /* FREECIV_JSON_CONNECTION */
10439 e = 0;
10440
10441 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_shield_wipe);
10442
10443 if (e) {
10444 log_packet_detailed("'muuk_shield_wipe' field error detected");
10445 }
10446
10447#ifdef FREECIV_JSON_CONNECTION
10448 field_addr.name = "notradesize";
10449#endif /* FREECIV_JSON_CONNECTION */
10450 e = 0;
10451
10452 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
10453
10454 if (e) {
10455 log_packet_detailed("'notradesize' field error detected");
10456 }
10457
10458#ifdef FREECIV_JSON_CONNECTION
10459 field_addr.name = "nuclear_winter";
10460#endif /* FREECIV_JSON_CONNECTION */
10461 e = 0;
10462
10463 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nuclear_winter);
10464
10465 if (e) {
10466 log_packet_detailed("'nuclear_winter' field error detected");
10467 }
10468
10469#ifdef FREECIV_JSON_CONNECTION
10470 field_addr.name = "nuclearwinter";
10471#endif /* FREECIV_JSON_CONNECTION */
10472 e = 0;
10473
10474 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
10475
10476 if (e) {
10477 log_packet_detailed("'nuclearwinter' field error detected");
10478 }
10479
10480#ifdef FREECIV_JSON_CONNECTION
10481 field_addr.name = "phase";
10482#endif /* FREECIV_JSON_CONNECTION */
10483 e = 0;
10484
10485 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
10486
10487 if (e) {
10488 log_packet_detailed("'phase' field error detected");
10489 }
10490
10491#ifdef FREECIV_JSON_CONNECTION
10492 field_addr.name = "phase_mode";
10493#endif /* FREECIV_JSON_CONNECTION */
10494 e = 0;
10495
10496 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
10497
10498 if (e) {
10499 log_packet_detailed("'phase_mode' field error detected");
10500 }
10501
10502#ifdef FREECIV_JSON_CONNECTION
10503 field_addr.name = "pillage_select";
10504#endif /* FREECIV_JSON_CONNECTION */
10505 e = 0;
10506
10507 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pillage_select);
10508
10509 if (e) {
10510 log_packet_detailed("'pillage_select' field error detected");
10511 }
10512
10513#ifdef FREECIV_JSON_CONNECTION
10514 field_addr.name = "steal_maps_reveals_all_cities";
10515#endif /* FREECIV_JSON_CONNECTION */
10516 e = 0;
10517
10518 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->steal_maps_reveals_all_cities);
10519
10520 if (e) {
10521 log_packet_detailed("'steal_maps_reveals_all_cities' field error detected");
10522 }
10523
10524#ifdef FREECIV_JSON_CONNECTION
10525 field_addr.name = "poison_empties_food_stock";
10526#endif /* FREECIV_JSON_CONNECTION */
10527 e = 0;
10528
10529 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->poison_empties_food_stock);
10530
10531 if (e) {
10532 log_packet_detailed("'poison_empties_food_stock' field error detected");
10533 }
10534
10535#ifdef FREECIV_JSON_CONNECTION
10536 field_addr.name = "tech_steal_allow_holes";
10537#endif /* FREECIV_JSON_CONNECTION */
10538 e = 0;
10539
10540 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_steal_allow_holes);
10541
10542 if (e) {
10543 log_packet_detailed("'tech_steal_allow_holes' field error detected");
10544 }
10545
10546#ifdef FREECIV_JSON_CONNECTION
10547 field_addr.name = "tech_trade_allow_holes";
10548#endif /* FREECIV_JSON_CONNECTION */
10549 e = 0;
10550
10551 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_allow_holes);
10552
10553 if (e) {
10554 log_packet_detailed("'tech_trade_allow_holes' field error detected");
10555 }
10556
10557#ifdef FREECIV_JSON_CONNECTION
10558 field_addr.name = "tech_trade_loss_allow_holes";
10559#endif /* FREECIV_JSON_CONNECTION */
10560 e = 0;
10561
10562 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_loss_allow_holes);
10563
10564 if (e) {
10565 log_packet_detailed("'tech_trade_loss_allow_holes' field error detected");
10566 }
10567
10568#ifdef FREECIV_JSON_CONNECTION
10569 field_addr.name = "tech_parasite_allow_holes";
10570#endif /* FREECIV_JSON_CONNECTION */
10571 e = 0;
10572
10573 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_parasite_allow_holes);
10574
10575 if (e) {
10576 log_packet_detailed("'tech_parasite_allow_holes' field error detected");
10577 }
10578
10579#ifdef FREECIV_JSON_CONNECTION
10580 field_addr.name = "tech_loss_allow_holes";
10581#endif /* FREECIV_JSON_CONNECTION */
10582 e = 0;
10583
10584 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_loss_allow_holes);
10585
10586 if (e) {
10587 log_packet_detailed("'tech_loss_allow_holes' field error detected");
10588 }
10589
10590#ifdef FREECIV_JSON_CONNECTION
10591 field_addr.name = "rapturedelay";
10592#endif /* FREECIV_JSON_CONNECTION */
10593 e = 0;
10594
10595 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
10596
10597 if (e) {
10598 log_packet_detailed("'rapturedelay' field error detected");
10599 }
10600
10601#ifdef FREECIV_JSON_CONNECTION
10602 field_addr.name = "disasters";
10603#endif /* FREECIV_JSON_CONNECTION */
10604 e = 0;
10605
10606 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
10607
10608 if (e) {
10609 log_packet_detailed("'disasters' field error detected");
10610 }
10611
10612#ifdef FREECIV_JSON_CONNECTION
10613 field_addr.name = "restrictinfra";
10614#endif /* FREECIV_JSON_CONNECTION */
10615 e = 0;
10616
10617 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->restrictinfra);
10618
10619 if (e) {
10620 log_packet_detailed("'restrictinfra' field error detected");
10621 }
10622
10623#ifdef FREECIV_JSON_CONNECTION
10624 field_addr.name = "unreachable_protects";
10625#endif /* FREECIV_JSON_CONNECTION */
10626 e = 0;
10627
10628 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unreachable_protects);
10629
10630 if (e) {
10631 log_packet_detailed("'unreachable_protects' field error detected");
10632 }
10633
10634#ifdef FREECIV_JSON_CONNECTION
10635 field_addr.name = "sciencebox";
10636#endif /* FREECIV_JSON_CONNECTION */
10637 e = 0;
10638
10639 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
10640
10641 if (e) {
10642 log_packet_detailed("'sciencebox' field error detected");
10643 }
10644
10645#ifdef FREECIV_JSON_CONNECTION
10646 field_addr.name = "shieldbox";
10647#endif /* FREECIV_JSON_CONNECTION */
10648 e = 0;
10649
10650 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
10651
10652 if (e) {
10653 log_packet_detailed("'shieldbox' field error detected");
10654 }
10655
10656#ifdef FREECIV_JSON_CONNECTION
10657 field_addr.name = "skill_level";
10658#endif /* FREECIV_JSON_CONNECTION */
10659 e = 0;
10660
10661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
10662
10663 if (e) {
10664 log_packet_detailed("'skill_level' field error detected");
10665 }
10666
10667#ifdef FREECIV_JSON_CONNECTION
10668 field_addr.name = "victory_conditions";
10669#endif /* FREECIV_JSON_CONNECTION */
10670 e = 0;
10671
10672 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
10673
10674 if (e) {
10675 log_packet_detailed("'victory_conditions' field error detected");
10676 }
10677
10678#ifdef FREECIV_JSON_CONNECTION
10679 field_addr.name = "team_pooled_research";
10680#endif /* FREECIV_JSON_CONNECTION */
10681 e = 0;
10682
10683 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->team_pooled_research);
10684
10685 if (e) {
10686 log_packet_detailed("'team_pooled_research' field error detected");
10687 }
10688
10689#ifdef FREECIV_JSON_CONNECTION
10690 field_addr.name = "tech";
10691#endif /* FREECIV_JSON_CONNECTION */
10692 e = 0;
10693
10694 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
10695
10696 if (e) {
10697 log_packet_detailed("'tech' field error detected");
10698 }
10699
10700#ifdef FREECIV_JSON_CONNECTION
10701 field_addr.name = "tech_cost_style";
10702#endif /* FREECIV_JSON_CONNECTION */
10703 e = 0;
10704
10705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
10706
10707 if (e) {
10708 log_packet_detailed("'tech_cost_style' field error detected");
10709 }
10710
10711#ifdef FREECIV_JSON_CONNECTION
10712 field_addr.name = "tech_leakage";
10713#endif /* FREECIV_JSON_CONNECTION */
10714 e = 0;
10715
10716 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
10717
10718 if (e) {
10719 log_packet_detailed("'tech_leakage' field error detected");
10720 }
10721
10722#ifdef FREECIV_JSON_CONNECTION
10723 field_addr.name = "tech_upkeep_divider";
10724#endif /* FREECIV_JSON_CONNECTION */
10725 e = 0;
10726
10727 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
10728
10729 if (e) {
10730 log_packet_detailed("'tech_upkeep_divider' field error detected");
10731 }
10732
10733#ifdef FREECIV_JSON_CONNECTION
10734 field_addr.name = "tech_upkeep_style";
10735#endif /* FREECIV_JSON_CONNECTION */
10736 e = 0;
10737
10738 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
10739
10740 if (e) {
10741 log_packet_detailed("'tech_upkeep_style' field error detected");
10742 }
10743
10744#ifdef FREECIV_JSON_CONNECTION
10745 field_addr.name = "techloss_forgiveness";
10746#endif /* FREECIV_JSON_CONNECTION */
10747 e = 0;
10748
10749 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
10750
10751 if (e) {
10752 log_packet_detailed("'techloss_forgiveness' field error detected");
10753 }
10754
10755#ifdef FREECIV_JSON_CONNECTION
10756 field_addr.name = "free_tech_method";
10757#endif /* FREECIV_JSON_CONNECTION */
10758 e = 0;
10759
10760 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
10761
10762 if (e) {
10763 log_packet_detailed("'free_tech_method' field error detected");
10764 }
10765
10766#ifdef FREECIV_JSON_CONNECTION
10767 field_addr.name = "gameloss_style";
10768#endif /* FREECIV_JSON_CONNECTION */
10769 e = 0;
10770
10771 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
10772
10773 if (e) {
10774 log_packet_detailed("'gameloss_style' field error detected");
10775 }
10776
10777#ifdef FREECIV_JSON_CONNECTION
10778 field_addr.name = "timeout";
10779#endif /* FREECIV_JSON_CONNECTION */
10780 e = 0;
10781
10782 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
10783
10784 if (e) {
10785 log_packet_detailed("'timeout' field error detected");
10786 }
10787
10788#ifdef FREECIV_JSON_CONNECTION
10789 field_addr.name = "first_timeout";
10790#endif /* FREECIV_JSON_CONNECTION */
10791 e = 0;
10792
10793 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
10794
10795 if (e) {
10796 log_packet_detailed("'first_timeout' field error detected");
10797 }
10798
10799#ifdef FREECIV_JSON_CONNECTION
10800 field_addr.name = "tired_attack";
10801#endif /* FREECIV_JSON_CONNECTION */
10802 e = 0;
10803
10804 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tired_attack);
10805
10806 if (e) {
10807 log_packet_detailed("'tired_attack' field error detected");
10808 }
10809
10810#ifdef FREECIV_JSON_CONNECTION
10811 field_addr.name = "trademindist";
10812#endif /* FREECIV_JSON_CONNECTION */
10813 e = 0;
10814
10815 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
10816
10817 if (e) {
10818 log_packet_detailed("'trademindist' field error detected");
10819 }
10820
10821#ifdef FREECIV_JSON_CONNECTION
10822 field_addr.name = "trade_revenue_style";
10823#endif /* FREECIV_JSON_CONNECTION */
10824 e = 0;
10825
10826 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
10827
10828 if (e) {
10829 log_packet_detailed("'trade_revenue_style' field error detected");
10830 }
10831
10832#ifdef FREECIV_JSON_CONNECTION
10833 field_addr.name = "trading_city";
10834#endif /* FREECIV_JSON_CONNECTION */
10835 e = 0;
10836
10837 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_city);
10838
10839 if (e) {
10840 log_packet_detailed("'trading_city' field error detected");
10841 }
10842
10843#ifdef FREECIV_JSON_CONNECTION
10844 field_addr.name = "trading_gold";
10845#endif /* FREECIV_JSON_CONNECTION */
10846 e = 0;
10847
10848 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_gold);
10849
10850 if (e) {
10851 log_packet_detailed("'trading_gold' field error detected");
10852 }
10853
10854#ifdef FREECIV_JSON_CONNECTION
10855 field_addr.name = "trading_tech";
10856#endif /* FREECIV_JSON_CONNECTION */
10857 e = 0;
10858
10859 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_tech);
10860
10861 if (e) {
10862 log_packet_detailed("'trading_tech' field error detected");
10863 }
10864
10865#ifdef FREECIV_JSON_CONNECTION
10866 field_addr.name = "turn";
10867#endif /* FREECIV_JSON_CONNECTION */
10868 e = 0;
10869
10870 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
10871
10872 if (e) {
10873 log_packet_detailed("'turn' field error detected");
10874 }
10875
10876#ifdef FREECIV_JSON_CONNECTION
10877 field_addr.name = "warminglevel";
10878#endif /* FREECIV_JSON_CONNECTION */
10879 e = 0;
10880
10881 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
10882
10883 if (e) {
10884 log_packet_detailed("'warminglevel' field error detected");
10885 }
10886
10887#ifdef FREECIV_JSON_CONNECTION
10888 field_addr.name = "year";
10889#endif /* FREECIV_JSON_CONNECTION */
10890 e = 0;
10891
10892 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
10893
10894 if (e) {
10895 log_packet_detailed("'year' field error detected");
10896 }
10897
10898#ifdef FREECIV_JSON_CONNECTION
10899 field_addr.name = "year_0_hack";
10900#endif /* FREECIV_JSON_CONNECTION */
10901 e = 0;
10902
10903 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->year_0_hack);
10904
10905 if (e) {
10906 log_packet_detailed("'year_0_hack' field error detected");
10907 }
10908
10909#ifdef FREECIV_JSON_CONNECTION
10910 field_addr.name = "top_cities_count";
10911#endif /* FREECIV_JSON_CONNECTION */
10912 e = 0;
10913
10914 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
10915
10916 if (e) {
10917 log_packet_detailed("'top_cities_count' field error detected");
10918 }
10919
10920#ifdef FREECIV_JSON_CONNECTION
10921 field_addr.name = "fragment_count";
10922#endif /* FREECIV_JSON_CONNECTION */
10923 e = 0;
10924
10925 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
10926
10927 if (e) {
10928 log_packet_detailed("'fragment_count' field error detected");
10929 }
10930
10931#ifdef FREECIV_JSON_CONNECTION
10932 field_addr.name = "granularity";
10933#endif /* FREECIV_JSON_CONNECTION */
10934 e = 0;
10935
10936 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
10937
10938 if (e) {
10939 log_packet_detailed("'granularity' field error detected");
10940 }
10941
10942#ifdef FREECIV_JSON_CONNECTION
10943 field_addr.name = "small_wonder_visibility";
10944#endif /* FREECIV_JSON_CONNECTION */
10945 e = 0;
10946
10947 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
10948
10949 if (e) {
10950 log_packet_detailed("'small_wonder_visibility' field error detected");
10951 }
10952#endif /* FREECIV_DELTA_PROTOCOL */
10953
10955}
10956
10957int send_packet_game_info(struct connection *pc, const struct packet_game_info *packet)
10958{
10959 if (!pc->used) {
10960 log_error("WARNING: trying to send data to the closed connection %s",
10962 return -1;
10963 }
10964 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_INFO].packet != nullptr, -1,
10965 "Handler for PACKET_GAME_INFO not installed");
10966 return pc->phs.handlers->send[PACKET_GAME_INFO].packet(pc, packet);
10967}
10968
10969static inline void init_packet_calendar_info(struct packet_calendar_info *packet)
10970{
10971 memset(packet, 0, sizeof(*packet));
10972}
10973
10974#define free_packet_calendar_info(_packet) (void) 0
10975#define destroy_packet_calendar_info free
10976
10977#ifdef FREECIV_DELTA_PROTOCOL
10978#define hash_packet_calendar_info_100 hash_const
10979#define cmp_packet_calendar_info_100 cmp_const
10981#endif /* FREECIV_DELTA_PROTOCOL */
10982
10984{
10985#define FREE_PACKET_STRUCT(_packet) free_packet_calendar_info(_packet)
10987
10988#ifdef FREECIV_JSON_CONNECTION
10989 struct plocation field_addr;
10990 {
10991 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
10994 }
10995#endif /* FREECIV_JSON_CONNECTION */
10996
10997 log_packet_detailed("packet_calendar_info_100: got info about ()");
10998
10999#ifdef FREECIV_DELTA_PROTOCOL
11001 struct packet_calendar_info *old;
11002 struct genhash **hash = pc->phs.received + PACKET_CALENDAR_INFO;
11003
11004 if (nullptr == *hash) {
11006 nullptr, nullptr, nullptr, destroy_packet_calendar_info);
11007 }
11008
11009 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11010 *real_packet = *old;
11011 } else {
11012 /* packet is already initialized empty */
11013 log_packet_detailed(" no old info");
11014 }
11015
11016#ifdef FREECIV_JSON_CONNECTION
11017 field_addr.name = "fields";
11018#endif /* FREECIV_JSON_CONNECTION */
11019 DIO_BV_GET(&din, &field_addr, fields);
11020
11021 if (BV_ISSET(fields, 0)) {
11022 log_packet_detailed(" got field 'positive_year_label'");
11023
11024#ifdef FREECIV_JSON_CONNECTION
11025 field_addr.name = "positive_year_label";
11026#endif /* FREECIV_JSON_CONNECTION */
11027
11028 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
11029 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
11030 }
11031 }
11032
11033 if (BV_ISSET(fields, 1)) {
11034 log_packet_detailed(" got field 'negative_year_label'");
11035
11036#ifdef FREECIV_JSON_CONNECTION
11037 field_addr.name = "negative_year_label";
11038#endif /* FREECIV_JSON_CONNECTION */
11039
11040 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
11041 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
11042 }
11043 }
11044
11045 if (BV_ISSET(fields, 2)) {
11046 log_packet_detailed(" got field 'calendar_fragments'");
11047
11048#ifdef FREECIV_JSON_CONNECTION
11049 field_addr.name = "calendar_fragments";
11050#endif /* FREECIV_JSON_CONNECTION */
11051
11052 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
11054 }
11055 }
11056
11057 if (BV_ISSET(fields, 3)) {
11058 log_packet_detailed(" got field 'calendar_fragment_name'");
11059
11060#ifdef FREECIV_JSON_CONNECTION
11061 field_addr.name = "calendar_fragment_name";
11062#endif /* FREECIV_JSON_CONNECTION */
11063
11064 {
11065 int i;
11066
11067
11068#ifdef FREECIV_JSON_CONNECTION
11069 /* Enter array. */
11070 field_addr.sub_location = plocation_elem_new(0);
11071#endif /* FREECIV_JSON_CONNECTION */
11072
11073 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11074#ifdef FREECIV_JSON_CONNECTION
11075 /* Next array element */
11076 field_addr.sub_location->number = i;
11077#endif /* FREECIV_JSON_CONNECTION */
11078
11079 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
11080 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
11081 }
11082 }
11083
11084#ifdef FREECIV_JSON_CONNECTION
11085 /* Exit array. */
11086 FC_FREE(field_addr.sub_location);
11087#endif /* FREECIV_JSON_CONNECTION */
11088 }
11089 }
11090
11091 real_packet->calendar_skip_0 = BV_ISSET(fields, 4);
11092
11093 if (nullptr == old) {
11094 old = fc_malloc(sizeof(*old));
11096 *old = *real_packet;
11098 } else {
11099 *old = *real_packet;
11100 }
11101
11102#else /* FREECIV_DELTA_PROTOCOL */
11103#ifdef FREECIV_JSON_CONNECTION
11104 field_addr.name = "positive_year_label";
11105#endif /* FREECIV_JSON_CONNECTION */
11106
11107 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
11108 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
11109 }
11110
11111#ifdef FREECIV_JSON_CONNECTION
11112 field_addr.name = "negative_year_label";
11113#endif /* FREECIV_JSON_CONNECTION */
11114
11115 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
11116 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
11117 }
11118
11119#ifdef FREECIV_JSON_CONNECTION
11120 field_addr.name = "calendar_fragments";
11121#endif /* FREECIV_JSON_CONNECTION */
11122
11123 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
11125 }
11126
11127#ifdef FREECIV_JSON_CONNECTION
11128 field_addr.name = "calendar_fragment_name";
11129#endif /* FREECIV_JSON_CONNECTION */
11130
11131 {
11132 int i;
11133
11134
11135#ifdef FREECIV_JSON_CONNECTION
11136 /* Enter array. */
11137 field_addr.sub_location = plocation_elem_new(0);
11138#endif /* FREECIV_JSON_CONNECTION */
11139
11140 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11141#ifdef FREECIV_JSON_CONNECTION
11142 /* Next array element */
11143 field_addr.sub_location->number = i;
11144#endif /* FREECIV_JSON_CONNECTION */
11145
11146 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
11147 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
11148 }
11149 }
11150
11151#ifdef FREECIV_JSON_CONNECTION
11152 /* Exit array. */
11153 FC_FREE(field_addr.sub_location);
11154#endif /* FREECIV_JSON_CONNECTION */
11155 }
11156
11157#ifdef FREECIV_JSON_CONNECTION
11158 field_addr.name = "calendar_skip_0";
11159#endif /* FREECIV_JSON_CONNECTION */
11160
11161 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->calendar_skip_0)) {
11162 RECEIVE_PACKET_FIELD_ERROR(calendar_skip_0);
11163 }
11164#endif /* FREECIV_DELTA_PROTOCOL */
11165
11167#undef FREE_PACKET_STRUCT
11168}
11169
11170static int send_packet_calendar_info_100(struct connection *pc, const struct packet_calendar_info *packet)
11171{
11172 const struct packet_calendar_info *real_packet = packet;
11173 int e;
11175
11176 log_packet_detailed("packet_calendar_info_100: sending info about ()");
11177
11178#ifdef FREECIV_DELTA_PROTOCOL
11180 struct packet_calendar_info *old;
11181 bool differ;
11182 int different = 0;
11183 struct genhash **hash = pc->phs.sent + PACKET_CALENDAR_INFO;
11184
11185 if (nullptr == *hash) {
11187 nullptr, nullptr, nullptr, destroy_packet_calendar_info);
11188 }
11189 BV_CLR_ALL(fields);
11190
11191 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11192 old = fc_malloc(sizeof(*old));
11193 /* temporary bitcopy just to insert correctly */
11194 *old = *real_packet;
11197 different = 1; /* Force to send. */
11198 }
11199
11200 differ = (strcmp(old->positive_year_label, real_packet->positive_year_label) != 0);
11201 if (differ) {
11202 different++;
11203 BV_SET(fields, 0);
11204 }
11205
11206 differ = (strcmp(old->negative_year_label, real_packet->negative_year_label) != 0);
11207 if (differ) {
11208 different++;
11209 BV_SET(fields, 1);
11210 }
11211
11212 differ = (old->calendar_fragments != real_packet->calendar_fragments);
11213 if (differ) {
11214 different++;
11215 BV_SET(fields, 2);
11216 }
11217
11218 differ = FALSE;
11219 {
11220 int i;
11221
11222 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11223 differ = (strcmp(old->calendar_fragment_name[i], real_packet->calendar_fragment_name[i]) != 0);
11224 if (differ) {
11225 break;
11226 }
11227 }
11228 }
11229 if (differ) {
11230 different++;
11231 BV_SET(fields, 3);
11232 }
11233
11234 differ = (old->calendar_skip_0 != real_packet->calendar_skip_0);
11235 if (differ) {
11236 different++;
11237 }
11238 /* folded into head */
11239 if (real_packet->calendar_skip_0) {
11240 BV_SET(fields, 4);
11241 }
11242
11243 if (different == 0) {
11244 log_packet_detailed(" no change -> discard");
11246 }
11247#endif /* FREECIV_DELTA_PROTOCOL */
11248
11249#ifdef FREECIV_JSON_CONNECTION
11250 struct plocation field_addr;
11251 {
11252 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11255 }
11256#endif /* FREECIV_JSON_CONNECTION */
11257
11258#ifdef FREECIV_DELTA_PROTOCOL
11259#ifdef FREECIV_JSON_CONNECTION
11260 field_addr.name = "fields";
11261#endif /* FREECIV_JSON_CONNECTION */
11262 e = 0;
11263 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11264 if (e) {
11265 log_packet_detailed("fields bitvector error detected");
11266 }
11267
11268 if (BV_ISSET(fields, 0)) {
11269 log_packet_detailed(" field 'positive_year_label' has changed");
11270
11271#ifdef FREECIV_JSON_CONNECTION
11272 field_addr.name = "positive_year_label";
11273#endif /* FREECIV_JSON_CONNECTION */
11274 e = 0;
11275
11276 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
11277
11278 if (e) {
11279 log_packet_detailed("'positive_year_label' field error detected");
11280 }
11281 }
11282
11283 if (BV_ISSET(fields, 1)) {
11284 log_packet_detailed(" field 'negative_year_label' has changed");
11285
11286#ifdef FREECIV_JSON_CONNECTION
11287 field_addr.name = "negative_year_label";
11288#endif /* FREECIV_JSON_CONNECTION */
11289 e = 0;
11290
11291 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
11292
11293 if (e) {
11294 log_packet_detailed("'negative_year_label' field error detected");
11295 }
11296 }
11297
11298 if (BV_ISSET(fields, 2)) {
11299 log_packet_detailed(" field 'calendar_fragments' has changed");
11300
11301#ifdef FREECIV_JSON_CONNECTION
11302 field_addr.name = "calendar_fragments";
11303#endif /* FREECIV_JSON_CONNECTION */
11304 e = 0;
11305
11306 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
11307
11308 if (e) {
11309 log_packet_detailed("'calendar_fragments' field error detected");
11310 }
11311 }
11312
11313 if (BV_ISSET(fields, 3)) {
11314 log_packet_detailed(" field 'calendar_fragment_name' has changed");
11315
11316#ifdef FREECIV_JSON_CONNECTION
11317 field_addr.name = "calendar_fragment_name";
11318#endif /* FREECIV_JSON_CONNECTION */
11319 e = 0;
11320
11321 {
11322 int i;
11323
11324#ifdef FREECIV_JSON_CONNECTION
11325 /* Create the array. */
11327
11328 /* Enter array. */
11329 field_addr.sub_location = plocation_elem_new(0);
11330#endif /* FREECIV_JSON_CONNECTION */
11331
11332 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11333#ifdef FREECIV_JSON_CONNECTION
11334 /* Next array element. */
11335 field_addr.sub_location->number = i;
11336#endif /* FREECIV_JSON_CONNECTION */
11337
11338 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
11339 }
11340
11341#ifdef FREECIV_JSON_CONNECTION
11342 /* Exit array. */
11343 FC_FREE(field_addr.sub_location);
11344#endif /* FREECIV_JSON_CONNECTION */
11345 }
11346
11347 if (e) {
11348 log_packet_detailed("'calendar_fragment_name' field error detected");
11349 }
11350 }
11351
11352 /* field 4 is folded into the header */
11353
11354 *old = *real_packet;
11355
11356#else /* FREECIV_DELTA_PROTOCOL */
11357#ifdef FREECIV_JSON_CONNECTION
11358 field_addr.name = "positive_year_label";
11359#endif /* FREECIV_JSON_CONNECTION */
11360 e = 0;
11361
11362 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
11363
11364 if (e) {
11365 log_packet_detailed("'positive_year_label' field error detected");
11366 }
11367
11368#ifdef FREECIV_JSON_CONNECTION
11369 field_addr.name = "negative_year_label";
11370#endif /* FREECIV_JSON_CONNECTION */
11371 e = 0;
11372
11373 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
11374
11375 if (e) {
11376 log_packet_detailed("'negative_year_label' field error detected");
11377 }
11378
11379#ifdef FREECIV_JSON_CONNECTION
11380 field_addr.name = "calendar_fragments";
11381#endif /* FREECIV_JSON_CONNECTION */
11382 e = 0;
11383
11384 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
11385
11386 if (e) {
11387 log_packet_detailed("'calendar_fragments' field error detected");
11388 }
11389
11390#ifdef FREECIV_JSON_CONNECTION
11391 field_addr.name = "calendar_fragment_name";
11392#endif /* FREECIV_JSON_CONNECTION */
11393 e = 0;
11394
11395 {
11396 int i;
11397
11398#ifdef FREECIV_JSON_CONNECTION
11399 /* Create the array. */
11401
11402 /* Enter array. */
11403 field_addr.sub_location = plocation_elem_new(0);
11404#endif /* FREECIV_JSON_CONNECTION */
11405
11406 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
11407#ifdef FREECIV_JSON_CONNECTION
11408 /* Next array element. */
11409 field_addr.sub_location->number = i;
11410#endif /* FREECIV_JSON_CONNECTION */
11411
11412 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
11413 }
11414
11415#ifdef FREECIV_JSON_CONNECTION
11416 /* Exit array. */
11417 FC_FREE(field_addr.sub_location);
11418#endif /* FREECIV_JSON_CONNECTION */
11419 }
11420
11421 if (e) {
11422 log_packet_detailed("'calendar_fragment_name' field error detected");
11423 }
11424
11425#ifdef FREECIV_JSON_CONNECTION
11426 field_addr.name = "calendar_skip_0";
11427#endif /* FREECIV_JSON_CONNECTION */
11428 e = 0;
11429
11430 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->calendar_skip_0);
11431
11432 if (e) {
11433 log_packet_detailed("'calendar_skip_0' field error detected");
11434 }
11435#endif /* FREECIV_DELTA_PROTOCOL */
11436
11438}
11439
11441{
11442 if (!pc->used) {
11443 log_error("WARNING: trying to send data to the closed connection %s",
11445 return -1;
11446 }
11447 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet != nullptr, -1,
11448 "Handler for PACKET_CALENDAR_INFO not installed");
11449 return pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet(pc, packet);
11450}
11451
11452static inline void init_packet_timeout_info(struct packet_timeout_info *packet)
11453{
11454 memset(packet, 0, sizeof(*packet));
11455}
11456
11457#define free_packet_timeout_info(_packet) (void) 0
11458#define destroy_packet_timeout_info free
11459
11460#ifdef FREECIV_DELTA_PROTOCOL
11461#define hash_packet_timeout_info_100 hash_const
11462#define cmp_packet_timeout_info_100 cmp_const
11464#endif /* FREECIV_DELTA_PROTOCOL */
11465
11467{
11468#define FREE_PACKET_STRUCT(_packet) free_packet_timeout_info(_packet)
11470
11471#ifdef FREECIV_JSON_CONNECTION
11472 struct plocation field_addr;
11473 {
11474 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11477 }
11478#endif /* FREECIV_JSON_CONNECTION */
11479
11480 log_packet_detailed("packet_timeout_info_100: got info about ()");
11481
11482#ifdef FREECIV_DELTA_PROTOCOL
11484 struct packet_timeout_info *old;
11485 struct genhash **hash = pc->phs.received + PACKET_TIMEOUT_INFO;
11486
11487 if (nullptr == *hash) {
11489 nullptr, nullptr, nullptr, destroy_packet_timeout_info);
11490 }
11491
11492 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11493 *real_packet = *old;
11494 } else {
11495 /* packet is already initialized empty */
11496 log_packet_detailed(" no old info");
11497 }
11498
11499#ifdef FREECIV_JSON_CONNECTION
11500 field_addr.name = "fields";
11501#endif /* FREECIV_JSON_CONNECTION */
11502 DIO_BV_GET(&din, &field_addr, fields);
11503
11504 if (BV_ISSET(fields, 0)) {
11505 log_packet_detailed(" got field 'seconds_to_phasedone'");
11506
11507#ifdef FREECIV_JSON_CONNECTION
11508 field_addr.name = "seconds_to_phasedone";
11509#endif /* FREECIV_JSON_CONNECTION */
11510
11511 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
11512 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
11513 }
11514 }
11515
11516 if (BV_ISSET(fields, 1)) {
11517 log_packet_detailed(" got field 'last_turn_change_time'");
11518
11519#ifdef FREECIV_JSON_CONNECTION
11520 field_addr.name = "last_turn_change_time";
11521#endif /* FREECIV_JSON_CONNECTION */
11522
11523 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
11524 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
11525 }
11526 }
11527
11528 if (nullptr == old) {
11529 old = fc_malloc(sizeof(*old));
11531 *old = *real_packet;
11533 } else {
11534 *old = *real_packet;
11535 }
11536
11537#else /* FREECIV_DELTA_PROTOCOL */
11538#ifdef FREECIV_JSON_CONNECTION
11539 field_addr.name = "seconds_to_phasedone";
11540#endif /* FREECIV_JSON_CONNECTION */
11541
11542 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
11543 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
11544 }
11545
11546#ifdef FREECIV_JSON_CONNECTION
11547 field_addr.name = "last_turn_change_time";
11548#endif /* FREECIV_JSON_CONNECTION */
11549
11550 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
11551 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
11552 }
11553#endif /* FREECIV_DELTA_PROTOCOL */
11554
11556#undef FREE_PACKET_STRUCT
11557}
11558
11559static int send_packet_timeout_info_100(struct connection *pc, const struct packet_timeout_info *packet)
11560{
11561 const struct packet_timeout_info *real_packet = packet;
11562 int e;
11564
11565 log_packet_detailed("packet_timeout_info_100: sending info about ()");
11566
11567#ifdef FREECIV_DELTA_PROTOCOL
11569 struct packet_timeout_info *old;
11570 bool differ;
11571 struct genhash **hash = pc->phs.sent + PACKET_TIMEOUT_INFO;
11572
11573 if (nullptr == *hash) {
11575 nullptr, nullptr, nullptr, destroy_packet_timeout_info);
11576 }
11577 BV_CLR_ALL(fields);
11578
11579 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11580 old = fc_malloc(sizeof(*old));
11581 /* temporary bitcopy just to insert correctly */
11582 *old = *real_packet;
11585 }
11586
11587 differ = ((int) (old->seconds_to_phasedone * 100) != (int) (real_packet->seconds_to_phasedone * 100));
11588 if (differ) {
11589 BV_SET(fields, 0);
11590 }
11591
11592 differ = ((int) (old->last_turn_change_time * 100) != (int) (real_packet->last_turn_change_time * 100));
11593 if (differ) {
11594 BV_SET(fields, 1);
11595 }
11596#endif /* FREECIV_DELTA_PROTOCOL */
11597
11598#ifdef FREECIV_JSON_CONNECTION
11599 struct plocation field_addr;
11600 {
11601 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11604 }
11605#endif /* FREECIV_JSON_CONNECTION */
11606
11607#ifdef FREECIV_DELTA_PROTOCOL
11608#ifdef FREECIV_JSON_CONNECTION
11609 field_addr.name = "fields";
11610#endif /* FREECIV_JSON_CONNECTION */
11611 e = 0;
11612 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11613 if (e) {
11614 log_packet_detailed("fields bitvector error detected");
11615 }
11616
11617 if (BV_ISSET(fields, 0)) {
11618 log_packet_detailed(" field 'seconds_to_phasedone' has changed");
11619
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
11632 if (BV_ISSET(fields, 1)) {
11633 log_packet_detailed(" field 'last_turn_change_time' has changed");
11634
11635#ifdef FREECIV_JSON_CONNECTION
11636 field_addr.name = "last_turn_change_time";
11637#endif /* FREECIV_JSON_CONNECTION */
11638 e = 0;
11639
11640 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
11641
11642 if (e) {
11643 log_packet_detailed("'last_turn_change_time' field error detected");
11644 }
11645 }
11646
11647 *old = *real_packet;
11648
11649#else /* FREECIV_DELTA_PROTOCOL */
11650#ifdef FREECIV_JSON_CONNECTION
11651 field_addr.name = "seconds_to_phasedone";
11652#endif /* FREECIV_JSON_CONNECTION */
11653 e = 0;
11654
11655 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->seconds_to_phasedone, 100);
11656
11657 if (e) {
11658 log_packet_detailed("'seconds_to_phasedone' field error detected");
11659 }
11660
11661#ifdef FREECIV_JSON_CONNECTION
11662 field_addr.name = "last_turn_change_time";
11663#endif /* FREECIV_JSON_CONNECTION */
11664 e = 0;
11665
11666 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
11667
11668 if (e) {
11669 log_packet_detailed("'last_turn_change_time' field error detected");
11670 }
11671#endif /* FREECIV_DELTA_PROTOCOL */
11672
11674}
11675
11677{
11678 if (!pc->used) {
11679 log_error("WARNING: trying to send data to the closed connection %s",
11681 return -1;
11682 }
11683 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet != nullptr, -1,
11684 "Handler for PACKET_TIMEOUT_INFO not installed");
11685 return pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet(pc, packet);
11686}
11687
11688static inline void init_packet_map_info(struct packet_map_info *packet)
11689{
11690 memset(packet, 0, sizeof(*packet));
11691}
11692
11693#define free_packet_map_info(_packet) (void) 0
11694#define destroy_packet_map_info free
11695
11696#ifdef FREECIV_DELTA_PROTOCOL
11697#define hash_packet_map_info_100 hash_const
11698#define cmp_packet_map_info_100 cmp_const
11700#endif /* FREECIV_DELTA_PROTOCOL */
11701
11703{
11704#define FREE_PACKET_STRUCT(_packet) free_packet_map_info(_packet)
11706
11707#ifdef FREECIV_JSON_CONNECTION
11708 struct plocation field_addr;
11709 {
11710 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11713 }
11714#endif /* FREECIV_JSON_CONNECTION */
11715
11716 log_packet_detailed("packet_map_info_100: got info about ()");
11717
11718#ifdef FREECIV_DELTA_PROTOCOL
11720 struct packet_map_info *old;
11721 struct genhash **hash = pc->phs.received + PACKET_MAP_INFO;
11722
11723 if (nullptr == *hash) {
11725 nullptr, nullptr, nullptr, destroy_packet_map_info);
11726 }
11727
11728 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11729 *real_packet = *old;
11730 } else {
11731 /* packet is already initialized empty */
11732 log_packet_detailed(" no old info");
11733 }
11734
11735#ifdef FREECIV_JSON_CONNECTION
11736 field_addr.name = "fields";
11737#endif /* FREECIV_JSON_CONNECTION */
11738 DIO_BV_GET(&din, &field_addr, fields);
11739
11740 if (BV_ISSET(fields, 0)) {
11741 log_packet_detailed(" got field 'xsize'");
11742
11743#ifdef FREECIV_JSON_CONNECTION
11744 field_addr.name = "xsize";
11745#endif /* FREECIV_JSON_CONNECTION */
11746
11747 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
11749 }
11750 }
11751
11752 if (BV_ISSET(fields, 1)) {
11753 log_packet_detailed(" got field 'ysize'");
11754
11755#ifdef FREECIV_JSON_CONNECTION
11756 field_addr.name = "ysize";
11757#endif /* FREECIV_JSON_CONNECTION */
11758
11759 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
11761 }
11762 }
11763
11764 if (BV_ISSET(fields, 2)) {
11765 log_packet_detailed(" got field 'topology_id'");
11766
11767#ifdef FREECIV_JSON_CONNECTION
11768 field_addr.name = "topology_id";
11769#endif /* FREECIV_JSON_CONNECTION */
11770
11771 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
11772 RECEIVE_PACKET_FIELD_ERROR(topology_id);
11773 }
11774 }
11775
11776 if (BV_ISSET(fields, 3)) {
11777 log_packet_detailed(" got field 'wrap_id'");
11778
11779#ifdef FREECIV_JSON_CONNECTION
11780 field_addr.name = "wrap_id";
11781#endif /* FREECIV_JSON_CONNECTION */
11782
11783 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
11785 }
11786 }
11787
11788 if (BV_ISSET(fields, 4)) {
11789 log_packet_detailed(" got field 'north_latitude'");
11790
11791#ifdef FREECIV_JSON_CONNECTION
11792 field_addr.name = "north_latitude";
11793#endif /* FREECIV_JSON_CONNECTION */
11794
11795 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
11796 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
11797 }
11798 }
11799
11800 if (BV_ISSET(fields, 5)) {
11801 log_packet_detailed(" got field 'south_latitude'");
11802
11803#ifdef FREECIV_JSON_CONNECTION
11804 field_addr.name = "south_latitude";
11805#endif /* FREECIV_JSON_CONNECTION */
11806
11807 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
11808 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
11809 }
11810 }
11811
11812 real_packet->altitude_info = BV_ISSET(fields, 6);
11813
11814 if (nullptr == old) {
11815 old = fc_malloc(sizeof(*old));
11817 *old = *real_packet;
11819 } else {
11820 *old = *real_packet;
11821 }
11822
11823#else /* FREECIV_DELTA_PROTOCOL */
11824#ifdef FREECIV_JSON_CONNECTION
11825 field_addr.name = "xsize";
11826#endif /* FREECIV_JSON_CONNECTION */
11827
11828 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
11830 }
11831
11832#ifdef FREECIV_JSON_CONNECTION
11833 field_addr.name = "ysize";
11834#endif /* FREECIV_JSON_CONNECTION */
11835
11836 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
11838 }
11839
11840#ifdef FREECIV_JSON_CONNECTION
11841 field_addr.name = "topology_id";
11842#endif /* FREECIV_JSON_CONNECTION */
11843
11844 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
11845 RECEIVE_PACKET_FIELD_ERROR(topology_id);
11846 }
11847
11848#ifdef FREECIV_JSON_CONNECTION
11849 field_addr.name = "wrap_id";
11850#endif /* FREECIV_JSON_CONNECTION */
11851
11852 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
11854 }
11855
11856#ifdef FREECIV_JSON_CONNECTION
11857 field_addr.name = "north_latitude";
11858#endif /* FREECIV_JSON_CONNECTION */
11859
11860 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
11861 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
11862 }
11863
11864#ifdef FREECIV_JSON_CONNECTION
11865 field_addr.name = "south_latitude";
11866#endif /* FREECIV_JSON_CONNECTION */
11867
11868 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
11869 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
11870 }
11871
11872#ifdef FREECIV_JSON_CONNECTION
11873 field_addr.name = "altitude_info";
11874#endif /* FREECIV_JSON_CONNECTION */
11875
11876 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->altitude_info)) {
11877 RECEIVE_PACKET_FIELD_ERROR(altitude_info);
11878 }
11879#endif /* FREECIV_DELTA_PROTOCOL */
11880
11882#undef FREE_PACKET_STRUCT
11883}
11884
11885static int send_packet_map_info_100(struct connection *pc, const struct packet_map_info *packet)
11886{
11887 const struct packet_map_info *real_packet = packet;
11888 int e;
11890
11891 log_packet_detailed("packet_map_info_100: sending info about ()");
11892
11893#ifdef FREECIV_DELTA_PROTOCOL
11895 struct packet_map_info *old;
11896 bool differ;
11897 struct genhash **hash = pc->phs.sent + PACKET_MAP_INFO;
11898
11899 if (nullptr == *hash) {
11901 nullptr, nullptr, nullptr, destroy_packet_map_info);
11902 }
11903 BV_CLR_ALL(fields);
11904
11905 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11906 old = fc_malloc(sizeof(*old));
11907 /* temporary bitcopy just to insert correctly */
11908 *old = *real_packet;
11911 }
11912
11913 differ = (old->xsize != real_packet->xsize);
11914 if (differ) {
11915 BV_SET(fields, 0);
11916 }
11917
11918 differ = (old->ysize != real_packet->ysize);
11919 if (differ) {
11920 BV_SET(fields, 1);
11921 }
11922
11923 differ = (old->topology_id != real_packet->topology_id);
11924 if (differ) {
11925 BV_SET(fields, 2);
11926 }
11927
11928 differ = (old->wrap_id != real_packet->wrap_id);
11929 if (differ) {
11930 BV_SET(fields, 3);
11931 }
11932
11933 differ = (old->north_latitude != real_packet->north_latitude);
11934 if (differ) {
11935 BV_SET(fields, 4);
11936 }
11937
11938 differ = (old->south_latitude != real_packet->south_latitude);
11939 if (differ) {
11940 BV_SET(fields, 5);
11941 }
11942
11943 /* folded into head */
11944 if (real_packet->altitude_info) {
11945 BV_SET(fields, 6);
11946 }
11947#endif /* FREECIV_DELTA_PROTOCOL */
11948
11949#ifdef FREECIV_JSON_CONNECTION
11950 struct plocation field_addr;
11951 {
11952 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
11955 }
11956#endif /* FREECIV_JSON_CONNECTION */
11957
11958#ifdef FREECIV_DELTA_PROTOCOL
11959#ifdef FREECIV_JSON_CONNECTION
11960 field_addr.name = "fields";
11961#endif /* FREECIV_JSON_CONNECTION */
11962 e = 0;
11963 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11964 if (e) {
11965 log_packet_detailed("fields bitvector error detected");
11966 }
11967
11968 if (BV_ISSET(fields, 0)) {
11969 log_packet_detailed(" field 'xsize' has changed");
11970
11971#ifdef FREECIV_JSON_CONNECTION
11972 field_addr.name = "xsize";
11973#endif /* FREECIV_JSON_CONNECTION */
11974 e = 0;
11975
11976 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
11977
11978 if (e) {
11979 log_packet_detailed("'xsize' field error detected");
11980 }
11981 }
11982
11983 if (BV_ISSET(fields, 1)) {
11984 log_packet_detailed(" field 'ysize' has changed");
11985
11986#ifdef FREECIV_JSON_CONNECTION
11987 field_addr.name = "ysize";
11988#endif /* FREECIV_JSON_CONNECTION */
11989 e = 0;
11990
11991 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
11992
11993 if (e) {
11994 log_packet_detailed("'ysize' field error detected");
11995 }
11996 }
11997
11998 if (BV_ISSET(fields, 2)) {
11999 log_packet_detailed(" field 'topology_id' has changed");
12000
12001#ifdef FREECIV_JSON_CONNECTION
12002 field_addr.name = "topology_id";
12003#endif /* FREECIV_JSON_CONNECTION */
12004 e = 0;
12005
12006 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
12007
12008 if (e) {
12009 log_packet_detailed("'topology_id' field error detected");
12010 }
12011 }
12012
12013 if (BV_ISSET(fields, 3)) {
12014 log_packet_detailed(" field 'wrap_id' has changed");
12015
12016#ifdef FREECIV_JSON_CONNECTION
12017 field_addr.name = "wrap_id";
12018#endif /* FREECIV_JSON_CONNECTION */
12019 e = 0;
12020
12021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
12022
12023 if (e) {
12024 log_packet_detailed("'wrap_id' field error detected");
12025 }
12026 }
12027
12028 if (BV_ISSET(fields, 4)) {
12029 log_packet_detailed(" field 'north_latitude' has changed");
12030
12031#ifdef FREECIV_JSON_CONNECTION
12032 field_addr.name = "north_latitude";
12033#endif /* FREECIV_JSON_CONNECTION */
12034 e = 0;
12035
12036 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
12037
12038 if (e) {
12039 log_packet_detailed("'north_latitude' field error detected");
12040 }
12041 }
12042
12043 if (BV_ISSET(fields, 5)) {
12044 log_packet_detailed(" field 'south_latitude' has changed");
12045
12046#ifdef FREECIV_JSON_CONNECTION
12047 field_addr.name = "south_latitude";
12048#endif /* FREECIV_JSON_CONNECTION */
12049 e = 0;
12050
12051 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
12052
12053 if (e) {
12054 log_packet_detailed("'south_latitude' field error detected");
12055 }
12056 }
12057
12058 /* field 6 is folded into the header */
12059
12060 *old = *real_packet;
12061
12062#else /* FREECIV_DELTA_PROTOCOL */
12063#ifdef FREECIV_JSON_CONNECTION
12064 field_addr.name = "xsize";
12065#endif /* FREECIV_JSON_CONNECTION */
12066 e = 0;
12067
12068 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
12069
12070 if (e) {
12071 log_packet_detailed("'xsize' field error detected");
12072 }
12073
12074#ifdef FREECIV_JSON_CONNECTION
12075 field_addr.name = "ysize";
12076#endif /* FREECIV_JSON_CONNECTION */
12077 e = 0;
12078
12079 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
12080
12081 if (e) {
12082 log_packet_detailed("'ysize' field error detected");
12083 }
12084
12085#ifdef FREECIV_JSON_CONNECTION
12086 field_addr.name = "topology_id";
12087#endif /* FREECIV_JSON_CONNECTION */
12088 e = 0;
12089
12090 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
12091
12092 if (e) {
12093 log_packet_detailed("'topology_id' field error detected");
12094 }
12095
12096#ifdef FREECIV_JSON_CONNECTION
12097 field_addr.name = "wrap_id";
12098#endif /* FREECIV_JSON_CONNECTION */
12099 e = 0;
12100
12101 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
12102
12103 if (e) {
12104 log_packet_detailed("'wrap_id' field error detected");
12105 }
12106
12107#ifdef FREECIV_JSON_CONNECTION
12108 field_addr.name = "north_latitude";
12109#endif /* FREECIV_JSON_CONNECTION */
12110 e = 0;
12111
12112 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
12113
12114 if (e) {
12115 log_packet_detailed("'north_latitude' field error detected");
12116 }
12117
12118#ifdef FREECIV_JSON_CONNECTION
12119 field_addr.name = "south_latitude";
12120#endif /* FREECIV_JSON_CONNECTION */
12121 e = 0;
12122
12123 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
12124
12125 if (e) {
12126 log_packet_detailed("'south_latitude' field error detected");
12127 }
12128
12129#ifdef FREECIV_JSON_CONNECTION
12130 field_addr.name = "altitude_info";
12131#endif /* FREECIV_JSON_CONNECTION */
12132 e = 0;
12133
12134 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->altitude_info);
12135
12136 if (e) {
12137 log_packet_detailed("'altitude_info' field error detected");
12138 }
12139#endif /* FREECIV_DELTA_PROTOCOL */
12140
12142}
12143
12144int send_packet_map_info(struct connection *pc, const struct packet_map_info *packet)
12145{
12146 if (!pc->used) {
12147 log_error("WARNING: trying to send data to the closed connection %s",
12149 return -1;
12150 }
12151 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_MAP_INFO].packet != nullptr, -1,
12152 "Handler for PACKET_MAP_INFO not installed");
12153 return pc->phs.handlers->send[PACKET_MAP_INFO].packet(pc, packet);
12154}
12155
12156void lsend_packet_map_info(struct conn_list *dest, const struct packet_map_info *packet)
12157{
12158 conn_list_iterate(dest, pconn) {
12159 send_packet_map_info(pconn, packet);
12161}
12162
12163static inline void init_packet_nuke_tile_info(struct packet_nuke_tile_info *packet)
12164{
12165 memset(packet, 0, sizeof(*packet));
12166}
12167
12168#define free_packet_nuke_tile_info(_packet) (void) 0
12169#define destroy_packet_nuke_tile_info free
12170
12171#ifdef FREECIV_DELTA_PROTOCOL
12172#define hash_packet_nuke_tile_info_100 hash_const
12173#define cmp_packet_nuke_tile_info_100 cmp_const
12175#endif /* FREECIV_DELTA_PROTOCOL */
12176
12178{
12179#define FREE_PACKET_STRUCT(_packet) free_packet_nuke_tile_info(_packet)
12181
12182#ifdef FREECIV_JSON_CONNECTION
12183 struct plocation field_addr;
12184 {
12185 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12188 }
12189#endif /* FREECIV_JSON_CONNECTION */
12190
12191 log_packet_detailed("packet_nuke_tile_info_100: got info about ()");
12192
12193#ifdef FREECIV_DELTA_PROTOCOL
12195 struct packet_nuke_tile_info *old;
12196 struct genhash **hash = pc->phs.received + PACKET_NUKE_TILE_INFO;
12197
12198 if (nullptr == *hash) {
12200 nullptr, nullptr, nullptr, destroy_packet_nuke_tile_info);
12201 }
12202
12203 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12204 *real_packet = *old;
12205 } else {
12206 /* packet is already initialized empty */
12207 log_packet_detailed(" no old info");
12208 }
12209
12210#ifdef FREECIV_JSON_CONNECTION
12211 field_addr.name = "fields";
12212#endif /* FREECIV_JSON_CONNECTION */
12213 DIO_BV_GET(&din, &field_addr, fields);
12214
12215 if (BV_ISSET(fields, 0)) {
12216 log_packet_detailed(" got field 'tile'");
12217
12218#ifdef FREECIV_JSON_CONNECTION
12219 field_addr.name = "tile";
12220#endif /* FREECIV_JSON_CONNECTION */
12221
12222 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12224 }
12225 }
12226
12227 if (nullptr == old) {
12228 old = fc_malloc(sizeof(*old));
12230 *old = *real_packet;
12232 } else {
12233 *old = *real_packet;
12234 }
12235
12236#else /* FREECIV_DELTA_PROTOCOL */
12237#ifdef FREECIV_JSON_CONNECTION
12238 field_addr.name = "tile";
12239#endif /* FREECIV_JSON_CONNECTION */
12240
12241 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12243 }
12244#endif /* FREECIV_DELTA_PROTOCOL */
12245
12247#undef FREE_PACKET_STRUCT
12248}
12249
12251{
12252 const struct packet_nuke_tile_info *real_packet = packet;
12253 int e;
12255
12256 log_packet_detailed("packet_nuke_tile_info_100: sending info about ()");
12257
12258#ifdef FREECIV_DELTA_PROTOCOL
12260 struct packet_nuke_tile_info *old;
12261 bool differ;
12262 struct genhash **hash = pc->phs.sent + PACKET_NUKE_TILE_INFO;
12263
12264 if (nullptr == *hash) {
12266 nullptr, nullptr, nullptr, destroy_packet_nuke_tile_info);
12267 }
12268 BV_CLR_ALL(fields);
12269
12270 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12271 old = fc_malloc(sizeof(*old));
12272 /* temporary bitcopy just to insert correctly */
12273 *old = *real_packet;
12276 }
12277
12278 differ = (old->tile != real_packet->tile);
12279 if (differ) {
12280 BV_SET(fields, 0);
12281 }
12282#endif /* FREECIV_DELTA_PROTOCOL */
12283
12284#ifdef FREECIV_JSON_CONNECTION
12285 struct plocation field_addr;
12286 {
12287 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12290 }
12291#endif /* FREECIV_JSON_CONNECTION */
12292
12293#ifdef FREECIV_DELTA_PROTOCOL
12294#ifdef FREECIV_JSON_CONNECTION
12295 field_addr.name = "fields";
12296#endif /* FREECIV_JSON_CONNECTION */
12297 e = 0;
12298 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12299 if (e) {
12300 log_packet_detailed("fields bitvector error detected");
12301 }
12302
12303 if (BV_ISSET(fields, 0)) {
12304 log_packet_detailed(" field 'tile' has changed");
12305
12306#ifdef FREECIV_JSON_CONNECTION
12307 field_addr.name = "tile";
12308#endif /* FREECIV_JSON_CONNECTION */
12309 e = 0;
12310
12311 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
12312
12313 if (e) {
12314 log_packet_detailed("'tile' field error detected");
12315 }
12316 }
12317
12318 *old = *real_packet;
12319
12320#else /* FREECIV_DELTA_PROTOCOL */
12321#ifdef FREECIV_JSON_CONNECTION
12322 field_addr.name = "tile";
12323#endif /* FREECIV_JSON_CONNECTION */
12324 e = 0;
12325
12326 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
12327
12328 if (e) {
12329 log_packet_detailed("'tile' field error detected");
12330 }
12331#endif /* FREECIV_DELTA_PROTOCOL */
12332
12334}
12335
12337{
12338 if (!pc->used) {
12339 log_error("WARNING: trying to send data to the closed connection %s",
12341 return -1;
12342 }
12343 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet != nullptr, -1,
12344 "Handler for PACKET_NUKE_TILE_INFO not installed");
12345 return pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet(pc, packet);
12346}
12347
12348void lsend_packet_nuke_tile_info(struct conn_list *dest, const struct packet_nuke_tile_info *packet)
12349{
12350 conn_list_iterate(dest, pconn) {
12353}
12354
12356{
12357 struct packet_nuke_tile_info packet, *real_packet = &packet;
12358
12360
12362}
12363
12365{
12366 struct packet_nuke_tile_info packet, *real_packet = &packet;
12367
12369
12371}
12372
12373static inline void init_packet_team_name_info(struct packet_team_name_info *packet)
12374{
12375 memset(packet, 0, sizeof(*packet));
12376}
12377
12378#define free_packet_team_name_info(_packet) (void) 0
12379#define destroy_packet_team_name_info free
12380
12381#ifdef FREECIV_DELTA_PROTOCOL
12383{
12384 const struct packet_team_name_info *key = (const struct packet_team_name_info *) vkey;
12385 genhash_val_t result = 0;
12386
12387 result += key->team_id;
12388
12389 result &= 0xFFFFFFFF;
12390 return result;
12391}
12392
12393static bool cmp_packet_team_name_info_100(const void *vkey1, const void *vkey2)
12394{
12395 const struct packet_team_name_info *old = (const struct packet_team_name_info *) vkey1;
12396 const struct packet_team_name_info *real_packet = (const struct packet_team_name_info *) vkey2;
12397 bool differ;
12398
12399 differ = (old->team_id != real_packet->team_id);
12400
12401 return !differ;
12402}
12404#endif /* FREECIV_DELTA_PROTOCOL */
12405
12407{
12408#define FREE_PACKET_STRUCT(_packet) free_packet_team_name_info(_packet)
12410
12411#ifdef FREECIV_JSON_CONNECTION
12412 struct plocation field_addr;
12413 {
12414 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12417 }
12418#endif /* FREECIV_JSON_CONNECTION */
12419
12420#ifdef FREECIV_JSON_CONNECTION
12421 field_addr.name = "team_id";
12422#endif /* FREECIV_JSON_CONNECTION */
12423
12424 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team_id)) {
12426 }
12427
12428 log_packet_detailed("packet_team_name_info_100: got info about (%d)",
12429 real_packet->team_id);
12430
12431#ifdef FREECIV_DELTA_PROTOCOL
12433 struct packet_team_name_info *old;
12434 struct genhash **hash = pc->phs.received + PACKET_TEAM_NAME_INFO;
12435
12436 if (nullptr == *hash) {
12438 nullptr, nullptr, nullptr, destroy_packet_team_name_info);
12439 }
12440
12441 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12442 *real_packet = *old;
12443 } else {
12444 /* packet is already initialized empty */
12445 log_packet_detailed(" no old info");
12446 }
12447
12448#ifdef FREECIV_JSON_CONNECTION
12449 field_addr.name = "fields";
12450#endif /* FREECIV_JSON_CONNECTION */
12451 DIO_BV_GET(&din, &field_addr, fields);
12452
12453 if (BV_ISSET(fields, 0)) {
12454 log_packet_detailed(" got field 'team_name'");
12455
12456#ifdef FREECIV_JSON_CONNECTION
12457 field_addr.name = "team_name";
12458#endif /* FREECIV_JSON_CONNECTION */
12459
12460 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
12461 RECEIVE_PACKET_FIELD_ERROR(team_name);
12462 }
12463 }
12464
12465 if (nullptr == old) {
12466 old = fc_malloc(sizeof(*old));
12468 *old = *real_packet;
12470 } else {
12471 *old = *real_packet;
12472 }
12473
12474#else /* FREECIV_DELTA_PROTOCOL */
12475#ifdef FREECIV_JSON_CONNECTION
12476 field_addr.name = "team_name";
12477#endif /* FREECIV_JSON_CONNECTION */
12478
12479 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
12480 RECEIVE_PACKET_FIELD_ERROR(team_name);
12481 }
12482#endif /* FREECIV_DELTA_PROTOCOL */
12483
12485#undef FREE_PACKET_STRUCT
12486}
12487
12489{
12490 const struct packet_team_name_info *real_packet = packet;
12491 int e;
12493
12494 log_packet_detailed("packet_team_name_info_100: sending info about (%d)",
12495 real_packet->team_id);
12496
12497#ifdef FREECIV_DELTA_PROTOCOL
12499 struct packet_team_name_info *old;
12500 bool differ;
12501 struct genhash **hash = pc->phs.sent + PACKET_TEAM_NAME_INFO;
12502
12503 if (nullptr == *hash) {
12505 nullptr, nullptr, nullptr, destroy_packet_team_name_info);
12506 }
12507 BV_CLR_ALL(fields);
12508
12509 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12510 old = fc_malloc(sizeof(*old));
12511 /* temporary bitcopy just to insert correctly */
12512 *old = *real_packet;
12515 }
12516
12517 differ = (strcmp(old->team_name, real_packet->team_name) != 0);
12518 if (differ) {
12519 BV_SET(fields, 0);
12520 }
12521#endif /* FREECIV_DELTA_PROTOCOL */
12522
12523#ifdef FREECIV_JSON_CONNECTION
12524 struct plocation field_addr;
12525 {
12526 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12529 }
12530#endif /* FREECIV_JSON_CONNECTION */
12531
12532#ifdef FREECIV_JSON_CONNECTION
12533 field_addr.name = "team_id";
12534#endif /* FREECIV_JSON_CONNECTION */
12535 e = 0;
12536
12537 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team_id);
12538
12539 if (e) {
12540 log_packet_detailed("'team_id' field error detected");
12541 }
12542
12543#ifdef FREECIV_DELTA_PROTOCOL
12544#ifdef FREECIV_JSON_CONNECTION
12545 field_addr.name = "fields";
12546#endif /* FREECIV_JSON_CONNECTION */
12547 e = 0;
12548 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12549 if (e) {
12550 log_packet_detailed("fields bitvector error detected");
12551 }
12552
12553 if (BV_ISSET(fields, 0)) {
12554 log_packet_detailed(" field 'team_name' has changed");
12555
12556#ifdef FREECIV_JSON_CONNECTION
12557 field_addr.name = "team_name";
12558#endif /* FREECIV_JSON_CONNECTION */
12559 e = 0;
12560
12561 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
12562
12563 if (e) {
12564 log_packet_detailed("'team_name' field error detected");
12565 }
12566 }
12567
12568 *old = *real_packet;
12569
12570#else /* FREECIV_DELTA_PROTOCOL */
12571#ifdef FREECIV_JSON_CONNECTION
12572 field_addr.name = "team_name";
12573#endif /* FREECIV_JSON_CONNECTION */
12574 e = 0;
12575
12576 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
12577
12578 if (e) {
12579 log_packet_detailed("'team_name' field error detected");
12580 }
12581#endif /* FREECIV_DELTA_PROTOCOL */
12582
12584}
12585
12587{
12588 if (!pc->used) {
12589 log_error("WARNING: trying to send data to the closed connection %s",
12591 return -1;
12592 }
12593 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet != nullptr, -1,
12594 "Handler for PACKET_TEAM_NAME_INFO not installed");
12595 return pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet(pc, packet);
12596}
12597
12598void lsend_packet_team_name_info(struct conn_list *dest, const struct packet_team_name_info *packet)
12599{
12600 conn_list_iterate(dest, pconn) {
12603}
12604
12606{
12607 memset(packet, 0, sizeof(*packet));
12608}
12609
12610#define free_packet_achievement_info(_packet) (void) 0
12611#define destroy_packet_achievement_info free
12612
12613#ifdef FREECIV_DELTA_PROTOCOL
12614#define hash_packet_achievement_info_100 hash_const
12615#define cmp_packet_achievement_info_100 cmp_const
12617#endif /* FREECIV_DELTA_PROTOCOL */
12618
12620{
12621#define FREE_PACKET_STRUCT(_packet) free_packet_achievement_info(_packet)
12623
12624#ifdef FREECIV_JSON_CONNECTION
12625 struct plocation field_addr;
12626 {
12627 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12630 }
12631#endif /* FREECIV_JSON_CONNECTION */
12632
12633 log_packet_detailed("packet_achievement_info_100: got info about ()");
12634
12635#ifdef FREECIV_DELTA_PROTOCOL
12638 struct genhash **hash = pc->phs.received + PACKET_ACHIEVEMENT_INFO;
12639
12640 if (nullptr == *hash) {
12642 nullptr, nullptr, nullptr, destroy_packet_achievement_info);
12643 }
12644
12645 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12646 *real_packet = *old;
12647 } else {
12648 /* packet is already initialized empty */
12649 log_packet_detailed(" no old info");
12650 }
12651
12652#ifdef FREECIV_JSON_CONNECTION
12653 field_addr.name = "fields";
12654#endif /* FREECIV_JSON_CONNECTION */
12655 DIO_BV_GET(&din, &field_addr, fields);
12656
12657 if (BV_ISSET(fields, 0)) {
12658 log_packet_detailed(" got field 'id'");
12659
12660#ifdef FREECIV_JSON_CONNECTION
12661 field_addr.name = "id";
12662#endif /* FREECIV_JSON_CONNECTION */
12663
12664 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
12666 }
12667 }
12668
12669 real_packet->gained = BV_ISSET(fields, 1);
12670
12671 real_packet->first = BV_ISSET(fields, 2);
12672
12673 if (nullptr == old) {
12674 old = fc_malloc(sizeof(*old));
12676 *old = *real_packet;
12678 } else {
12679 *old = *real_packet;
12680 }
12681
12682#else /* FREECIV_DELTA_PROTOCOL */
12683#ifdef FREECIV_JSON_CONNECTION
12684 field_addr.name = "id";
12685#endif /* FREECIV_JSON_CONNECTION */
12686
12687 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
12689 }
12690
12691#ifdef FREECIV_JSON_CONNECTION
12692 field_addr.name = "gained";
12693#endif /* FREECIV_JSON_CONNECTION */
12694
12695 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->gained)) {
12697 }
12698
12699#ifdef FREECIV_JSON_CONNECTION
12700 field_addr.name = "first";
12701#endif /* FREECIV_JSON_CONNECTION */
12702
12703 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->first)) {
12705 }
12706#endif /* FREECIV_DELTA_PROTOCOL */
12707
12709#undef FREE_PACKET_STRUCT
12710}
12711
12713{
12714 const struct packet_achievement_info *real_packet = packet;
12715 int e;
12717
12718 log_packet_detailed("packet_achievement_info_100: sending info about ()");
12719
12720#ifdef FREECIV_DELTA_PROTOCOL
12723 bool differ;
12724 struct genhash **hash = pc->phs.sent + PACKET_ACHIEVEMENT_INFO;
12725
12726 if (nullptr == *hash) {
12728 nullptr, nullptr, nullptr, destroy_packet_achievement_info);
12729 }
12730 BV_CLR_ALL(fields);
12731
12732 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12733 old = fc_malloc(sizeof(*old));
12734 /* temporary bitcopy just to insert correctly */
12735 *old = *real_packet;
12738 }
12739
12740 differ = (old->id != real_packet->id);
12741 if (differ) {
12742 BV_SET(fields, 0);
12743 }
12744
12745 /* folded into head */
12746 if (real_packet->gained) {
12747 BV_SET(fields, 1);
12748 }
12749
12750 /* folded into head */
12751 if (real_packet->first) {
12752 BV_SET(fields, 2);
12753 }
12754#endif /* FREECIV_DELTA_PROTOCOL */
12755
12756#ifdef FREECIV_JSON_CONNECTION
12757 struct plocation field_addr;
12758 {
12759 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12762 }
12763#endif /* FREECIV_JSON_CONNECTION */
12764
12765#ifdef FREECIV_DELTA_PROTOCOL
12766#ifdef FREECIV_JSON_CONNECTION
12767 field_addr.name = "fields";
12768#endif /* FREECIV_JSON_CONNECTION */
12769 e = 0;
12770 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12771 if (e) {
12772 log_packet_detailed("fields bitvector error detected");
12773 }
12774
12775 if (BV_ISSET(fields, 0)) {
12776 log_packet_detailed(" field 'id' has changed");
12777
12778#ifdef FREECIV_JSON_CONNECTION
12779 field_addr.name = "id";
12780#endif /* FREECIV_JSON_CONNECTION */
12781 e = 0;
12782
12783 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
12784
12785 if (e) {
12786 log_packet_detailed("'id' field error detected");
12787 }
12788 }
12789
12790 /* field 1 is folded into the header */
12791
12792 /* field 2 is folded into the header */
12793
12794 *old = *real_packet;
12795
12796#else /* FREECIV_DELTA_PROTOCOL */
12797#ifdef FREECIV_JSON_CONNECTION
12798 field_addr.name = "id";
12799#endif /* FREECIV_JSON_CONNECTION */
12800 e = 0;
12801
12802 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
12803
12804 if (e) {
12805 log_packet_detailed("'id' field error detected");
12806 }
12807
12808#ifdef FREECIV_JSON_CONNECTION
12809 field_addr.name = "gained";
12810#endif /* FREECIV_JSON_CONNECTION */
12811 e = 0;
12812
12813 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->gained);
12814
12815 if (e) {
12816 log_packet_detailed("'gained' field error detected");
12817 }
12818
12819#ifdef FREECIV_JSON_CONNECTION
12820 field_addr.name = "first";
12821#endif /* FREECIV_JSON_CONNECTION */
12822 e = 0;
12823
12824 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->first);
12825
12826 if (e) {
12827 log_packet_detailed("'first' field error detected");
12828 }
12829#endif /* FREECIV_DELTA_PROTOCOL */
12830
12832}
12833
12835{
12836 if (!pc->used) {
12837 log_error("WARNING: trying to send data to the closed connection %s",
12839 return -1;
12840 }
12841 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet != nullptr, -1,
12842 "Handler for PACKET_ACHIEVEMENT_INFO not installed");
12843 return pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet(pc, packet);
12844}
12845
12847{
12848 conn_list_iterate(dest, pconn) {
12851}
12852
12853static inline void init_packet_chat_msg(struct packet_chat_msg *packet)
12854{
12855 memset(packet, 0, sizeof(*packet));
12856}
12857
12858#define free_packet_chat_msg(_packet) (void) 0
12859#define destroy_packet_chat_msg free
12860
12861#ifdef FREECIV_DELTA_PROTOCOL
12862#define hash_packet_chat_msg_100 hash_const
12863#define cmp_packet_chat_msg_100 cmp_const
12865#endif /* FREECIV_DELTA_PROTOCOL */
12866
12868{
12869#define FREE_PACKET_STRUCT(_packet) free_packet_chat_msg(_packet)
12871
12872#ifdef FREECIV_JSON_CONNECTION
12873 struct plocation field_addr;
12874 {
12875 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
12878 }
12879#endif /* FREECIV_JSON_CONNECTION */
12880
12881 log_packet_detailed("packet_chat_msg_100: got info about ()");
12882
12883#ifdef FREECIV_DELTA_PROTOCOL
12885 struct packet_chat_msg *old;
12886 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG;
12887
12888 if (nullptr == *hash) {
12890 nullptr, nullptr, nullptr, destroy_packet_chat_msg);
12891 }
12892
12893 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12894 *real_packet = *old;
12895 } else {
12896 /* packet is already initialized empty */
12897 log_packet_detailed(" no old info");
12898 }
12899
12900#ifdef FREECIV_JSON_CONNECTION
12901 field_addr.name = "fields";
12902#endif /* FREECIV_JSON_CONNECTION */
12903 DIO_BV_GET(&din, &field_addr, fields);
12904
12905 if (BV_ISSET(fields, 0)) {
12906 log_packet_detailed(" got field 'message'");
12907
12908#ifdef FREECIV_JSON_CONNECTION
12909 field_addr.name = "message";
12910#endif /* FREECIV_JSON_CONNECTION */
12911
12912 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12914 }
12915 }
12916
12917 if (BV_ISSET(fields, 1)) {
12918 log_packet_detailed(" got field 'tile'");
12919
12920#ifdef FREECIV_JSON_CONNECTION
12921 field_addr.name = "tile";
12922#endif /* FREECIV_JSON_CONNECTION */
12923
12924 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12926 }
12927 }
12928
12929 if (BV_ISSET(fields, 2)) {
12930 log_packet_detailed(" got field 'event'");
12931
12932#ifdef FREECIV_JSON_CONNECTION
12933 field_addr.name = "event";
12934#endif /* FREECIV_JSON_CONNECTION */
12935
12936 {
12937 int readin;
12938
12939 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
12941 }
12942 real_packet->event = readin;
12943 }
12944 }
12945
12946 if (BV_ISSET(fields, 3)) {
12947 log_packet_detailed(" got field 'turn'");
12948
12949#ifdef FREECIV_JSON_CONNECTION
12950 field_addr.name = "turn";
12951#endif /* FREECIV_JSON_CONNECTION */
12952
12953 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
12955 }
12956 }
12957
12958 if (BV_ISSET(fields, 4)) {
12959 log_packet_detailed(" got field 'phase'");
12960
12961#ifdef FREECIV_JSON_CONNECTION
12962 field_addr.name = "phase";
12963#endif /* FREECIV_JSON_CONNECTION */
12964
12965 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
12967 }
12968 }
12969
12970 if (BV_ISSET(fields, 5)) {
12971 log_packet_detailed(" got field 'conn_id'");
12972
12973#ifdef FREECIV_JSON_CONNECTION
12974 field_addr.name = "conn_id";
12975#endif /* FREECIV_JSON_CONNECTION */
12976
12977 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
12979 }
12980 }
12981
12982 if (nullptr == old) {
12983 old = fc_malloc(sizeof(*old));
12985 *old = *real_packet;
12987 } else {
12988 *old = *real_packet;
12989 }
12990
12991#else /* FREECIV_DELTA_PROTOCOL */
12992#ifdef FREECIV_JSON_CONNECTION
12993 field_addr.name = "message";
12994#endif /* FREECIV_JSON_CONNECTION */
12995
12996 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12998 }
12999
13000#ifdef FREECIV_JSON_CONNECTION
13001 field_addr.name = "tile";
13002#endif /* FREECIV_JSON_CONNECTION */
13003
13004 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13006 }
13007
13008#ifdef FREECIV_JSON_CONNECTION
13009 field_addr.name = "event";
13010#endif /* FREECIV_JSON_CONNECTION */
13011
13012 {
13013 int readin;
13014
13015 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
13017 }
13018 real_packet->event = readin;
13019 }
13020
13021#ifdef FREECIV_JSON_CONNECTION
13022 field_addr.name = "turn";
13023#endif /* FREECIV_JSON_CONNECTION */
13024
13025 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
13027 }
13028
13029#ifdef FREECIV_JSON_CONNECTION
13030 field_addr.name = "phase";
13031#endif /* FREECIV_JSON_CONNECTION */
13032
13033 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13035 }
13036
13037#ifdef FREECIV_JSON_CONNECTION
13038 field_addr.name = "conn_id";
13039#endif /* FREECIV_JSON_CONNECTION */
13040
13041 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13043 }
13044#endif /* FREECIV_DELTA_PROTOCOL */
13045
13047#undef FREE_PACKET_STRUCT
13048}
13049
13050static int send_packet_chat_msg_100(struct connection *pc, const struct packet_chat_msg *packet)
13051{
13052 const struct packet_chat_msg *real_packet = packet;
13053 int e;
13055
13056 log_packet_detailed("packet_chat_msg_100: sending info about ()");
13057
13058#ifdef FREECIV_DELTA_PROTOCOL
13060 struct packet_chat_msg *old;
13061 bool differ;
13062 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG;
13063
13064 if (nullptr == *hash) {
13066 nullptr, nullptr, nullptr, destroy_packet_chat_msg);
13067 }
13068 BV_CLR_ALL(fields);
13069
13070 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13071 old = fc_malloc(sizeof(*old));
13072 /* temporary bitcopy just to insert correctly */
13073 *old = *real_packet;
13076 }
13077
13078 differ = (strcmp(old->message, real_packet->message) != 0);
13079 if (differ) {
13080 BV_SET(fields, 0);
13081 }
13082
13083 differ = (old->tile != real_packet->tile);
13084 if (differ) {
13085 BV_SET(fields, 1);
13086 }
13087
13088 differ = (old->event != real_packet->event);
13089 if (differ) {
13090 BV_SET(fields, 2);
13091 }
13092
13093 differ = (old->turn != real_packet->turn);
13094 if (differ) {
13095 BV_SET(fields, 3);
13096 }
13097
13098 differ = (old->phase != real_packet->phase);
13099 if (differ) {
13100 BV_SET(fields, 4);
13101 }
13102
13103 differ = (old->conn_id != real_packet->conn_id);
13104 if (differ) {
13105 BV_SET(fields, 5);
13106 }
13107#endif /* FREECIV_DELTA_PROTOCOL */
13108
13109#ifdef FREECIV_JSON_CONNECTION
13110 struct plocation field_addr;
13111 {
13112 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13115 }
13116#endif /* FREECIV_JSON_CONNECTION */
13117
13118#ifdef FREECIV_DELTA_PROTOCOL
13119#ifdef FREECIV_JSON_CONNECTION
13120 field_addr.name = "fields";
13121#endif /* FREECIV_JSON_CONNECTION */
13122 e = 0;
13123 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13124 if (e) {
13125 log_packet_detailed("fields bitvector error detected");
13126 }
13127
13128 if (BV_ISSET(fields, 0)) {
13129 log_packet_detailed(" field 'message' has changed");
13130
13131#ifdef FREECIV_JSON_CONNECTION
13132 field_addr.name = "message";
13133#endif /* FREECIV_JSON_CONNECTION */
13134 e = 0;
13135
13136 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13137
13138 if (e) {
13139 log_packet_detailed("'message' field error detected");
13140 }
13141 }
13142
13143 if (BV_ISSET(fields, 1)) {
13144 log_packet_detailed(" field 'tile' has changed");
13145
13146#ifdef FREECIV_JSON_CONNECTION
13147 field_addr.name = "tile";
13148#endif /* FREECIV_JSON_CONNECTION */
13149 e = 0;
13150
13151 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13152
13153 if (e) {
13154 log_packet_detailed("'tile' field error detected");
13155 }
13156 }
13157
13158 if (BV_ISSET(fields, 2)) {
13159 log_packet_detailed(" field 'event' has changed");
13160
13161#ifdef FREECIV_JSON_CONNECTION
13162 field_addr.name = "event";
13163#endif /* FREECIV_JSON_CONNECTION */
13164 e = 0;
13165
13166 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13167
13168 if (e) {
13169 log_packet_detailed("'event' field error detected");
13170 }
13171 }
13172
13173 if (BV_ISSET(fields, 3)) {
13174 log_packet_detailed(" field 'turn' has changed");
13175
13176#ifdef FREECIV_JSON_CONNECTION
13177 field_addr.name = "turn";
13178#endif /* FREECIV_JSON_CONNECTION */
13179 e = 0;
13180
13181 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13182
13183 if (e) {
13184 log_packet_detailed("'turn' field error detected");
13185 }
13186 }
13187
13188 if (BV_ISSET(fields, 4)) {
13189 log_packet_detailed(" field 'phase' has changed");
13190
13191#ifdef FREECIV_JSON_CONNECTION
13192 field_addr.name = "phase";
13193#endif /* FREECIV_JSON_CONNECTION */
13194 e = 0;
13195
13196 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13197
13198 if (e) {
13199 log_packet_detailed("'phase' field error detected");
13200 }
13201 }
13202
13203 if (BV_ISSET(fields, 5)) {
13204 log_packet_detailed(" field 'conn_id' has changed");
13205
13206#ifdef FREECIV_JSON_CONNECTION
13207 field_addr.name = "conn_id";
13208#endif /* FREECIV_JSON_CONNECTION */
13209 e = 0;
13210
13211 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13212
13213 if (e) {
13214 log_packet_detailed("'conn_id' field error detected");
13215 }
13216 }
13217
13218 *old = *real_packet;
13219
13220#else /* FREECIV_DELTA_PROTOCOL */
13221#ifdef FREECIV_JSON_CONNECTION
13222 field_addr.name = "message";
13223#endif /* FREECIV_JSON_CONNECTION */
13224 e = 0;
13225
13226 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13227
13228 if (e) {
13229 log_packet_detailed("'message' field error detected");
13230 }
13231
13232#ifdef FREECIV_JSON_CONNECTION
13233 field_addr.name = "tile";
13234#endif /* FREECIV_JSON_CONNECTION */
13235 e = 0;
13236
13237 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13238
13239 if (e) {
13240 log_packet_detailed("'tile' field error detected");
13241 }
13242
13243#ifdef FREECIV_JSON_CONNECTION
13244 field_addr.name = "event";
13245#endif /* FREECIV_JSON_CONNECTION */
13246 e = 0;
13247
13248 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13249
13250 if (e) {
13251 log_packet_detailed("'event' field error detected");
13252 }
13253
13254#ifdef FREECIV_JSON_CONNECTION
13255 field_addr.name = "turn";
13256#endif /* FREECIV_JSON_CONNECTION */
13257 e = 0;
13258
13259 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13260
13261 if (e) {
13262 log_packet_detailed("'turn' field error detected");
13263 }
13264
13265#ifdef FREECIV_JSON_CONNECTION
13266 field_addr.name = "phase";
13267#endif /* FREECIV_JSON_CONNECTION */
13268 e = 0;
13269
13270 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13271
13272 if (e) {
13273 log_packet_detailed("'phase' field error detected");
13274 }
13275
13276#ifdef FREECIV_JSON_CONNECTION
13277 field_addr.name = "conn_id";
13278#endif /* FREECIV_JSON_CONNECTION */
13279 e = 0;
13280
13281 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13282
13283 if (e) {
13284 log_packet_detailed("'conn_id' field error detected");
13285 }
13286#endif /* FREECIV_DELTA_PROTOCOL */
13287
13289}
13290
13291int send_packet_chat_msg(struct connection *pc, const struct packet_chat_msg *packet)
13292{
13293 if (!pc->used) {
13294 log_error("WARNING: trying to send data to the closed connection %s",
13296 return -1;
13297 }
13298 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG].packet != nullptr, -1,
13299 "Handler for PACKET_CHAT_MSG not installed");
13300 return pc->phs.handlers->send[PACKET_CHAT_MSG].packet(pc, packet);
13301}
13302
13303void lsend_packet_chat_msg(struct conn_list *dest, const struct packet_chat_msg *packet)
13304{
13305 conn_list_iterate(dest, pconn) {
13306 send_packet_chat_msg(pconn, packet);
13308}
13309
13310static inline void init_packet_early_chat_msg(struct packet_early_chat_msg *packet)
13311{
13312 memset(packet, 0, sizeof(*packet));
13313}
13314
13315#define free_packet_early_chat_msg(_packet) (void) 0
13316#define destroy_packet_early_chat_msg free
13317
13318#ifdef FREECIV_DELTA_PROTOCOL
13319#define hash_packet_early_chat_msg_100 hash_const
13320#define cmp_packet_early_chat_msg_100 cmp_const
13322#endif /* FREECIV_DELTA_PROTOCOL */
13323
13325{
13326#define FREE_PACKET_STRUCT(_packet) free_packet_early_chat_msg(_packet)
13328
13329#ifdef FREECIV_JSON_CONNECTION
13330 struct plocation field_addr;
13331 {
13332 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13335 }
13336#endif /* FREECIV_JSON_CONNECTION */
13337
13338 log_packet_detailed("packet_early_chat_msg_100: got info about ()");
13339
13340#ifdef FREECIV_DELTA_PROTOCOL
13342 struct packet_early_chat_msg *old;
13343 struct genhash **hash = pc->phs.received + PACKET_EARLY_CHAT_MSG;
13344
13345 if (nullptr == *hash) {
13347 nullptr, nullptr, nullptr, destroy_packet_early_chat_msg);
13348 }
13349
13350 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13351 *real_packet = *old;
13352 } else {
13353 /* packet is already initialized empty */
13354 log_packet_detailed(" no old info");
13355 }
13356
13357#ifdef FREECIV_JSON_CONNECTION
13358 field_addr.name = "fields";
13359#endif /* FREECIV_JSON_CONNECTION */
13360 DIO_BV_GET(&din, &field_addr, fields);
13361
13362 if (BV_ISSET(fields, 0)) {
13363 log_packet_detailed(" got field 'message'");
13364
13365#ifdef FREECIV_JSON_CONNECTION
13366 field_addr.name = "message";
13367#endif /* FREECIV_JSON_CONNECTION */
13368
13369 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13371 }
13372 }
13373
13374 if (BV_ISSET(fields, 1)) {
13375 log_packet_detailed(" got field 'tile'");
13376
13377#ifdef FREECIV_JSON_CONNECTION
13378 field_addr.name = "tile";
13379#endif /* FREECIV_JSON_CONNECTION */
13380
13381 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13383 }
13384 }
13385
13386 if (BV_ISSET(fields, 2)) {
13387 log_packet_detailed(" got field 'event'");
13388
13389#ifdef FREECIV_JSON_CONNECTION
13390 field_addr.name = "event";
13391#endif /* FREECIV_JSON_CONNECTION */
13392
13393 {
13394 int readin;
13395
13396 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
13398 }
13399 real_packet->event = readin;
13400 }
13401 }
13402
13403 if (BV_ISSET(fields, 3)) {
13404 log_packet_detailed(" got field 'turn'");
13405
13406#ifdef FREECIV_JSON_CONNECTION
13407 field_addr.name = "turn";
13408#endif /* FREECIV_JSON_CONNECTION */
13409
13410 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
13412 }
13413 }
13414
13415 if (BV_ISSET(fields, 4)) {
13416 log_packet_detailed(" got field 'phase'");
13417
13418#ifdef FREECIV_JSON_CONNECTION
13419 field_addr.name = "phase";
13420#endif /* FREECIV_JSON_CONNECTION */
13421
13422 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13424 }
13425 }
13426
13427 if (BV_ISSET(fields, 5)) {
13428 log_packet_detailed(" got field 'conn_id'");
13429
13430#ifdef FREECIV_JSON_CONNECTION
13431 field_addr.name = "conn_id";
13432#endif /* FREECIV_JSON_CONNECTION */
13433
13434 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13436 }
13437 }
13438
13439 if (nullptr == old) {
13440 old = fc_malloc(sizeof(*old));
13442 *old = *real_packet;
13444 } else {
13445 *old = *real_packet;
13446 }
13447
13448#else /* FREECIV_DELTA_PROTOCOL */
13449#ifdef FREECIV_JSON_CONNECTION
13450 field_addr.name = "message";
13451#endif /* FREECIV_JSON_CONNECTION */
13452
13453 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13455 }
13456
13457#ifdef FREECIV_JSON_CONNECTION
13458 field_addr.name = "tile";
13459#endif /* FREECIV_JSON_CONNECTION */
13460
13461 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13463 }
13464
13465#ifdef FREECIV_JSON_CONNECTION
13466 field_addr.name = "event";
13467#endif /* FREECIV_JSON_CONNECTION */
13468
13469 {
13470 int readin;
13471
13472 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
13474 }
13475 real_packet->event = readin;
13476 }
13477
13478#ifdef FREECIV_JSON_CONNECTION
13479 field_addr.name = "turn";
13480#endif /* FREECIV_JSON_CONNECTION */
13481
13482 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
13484 }
13485
13486#ifdef FREECIV_JSON_CONNECTION
13487 field_addr.name = "phase";
13488#endif /* FREECIV_JSON_CONNECTION */
13489
13490 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
13492 }
13493
13494#ifdef FREECIV_JSON_CONNECTION
13495 field_addr.name = "conn_id";
13496#endif /* FREECIV_JSON_CONNECTION */
13497
13498 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
13500 }
13501#endif /* FREECIV_DELTA_PROTOCOL */
13502
13504#undef FREE_PACKET_STRUCT
13505}
13506
13508{
13509 const struct packet_early_chat_msg *real_packet = packet;
13510 int e;
13512
13513 log_packet_detailed("packet_early_chat_msg_100: sending info about ()");
13514
13515#ifdef FREECIV_DELTA_PROTOCOL
13517 struct packet_early_chat_msg *old;
13518 bool differ;
13519 struct genhash **hash = pc->phs.sent + PACKET_EARLY_CHAT_MSG;
13520
13521 if (nullptr == *hash) {
13523 nullptr, nullptr, nullptr, destroy_packet_early_chat_msg);
13524 }
13525 BV_CLR_ALL(fields);
13526
13527 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13528 old = fc_malloc(sizeof(*old));
13529 /* temporary bitcopy just to insert correctly */
13530 *old = *real_packet;
13533 }
13534
13535 differ = (strcmp(old->message, real_packet->message) != 0);
13536 if (differ) {
13537 BV_SET(fields, 0);
13538 }
13539
13540 differ = (old->tile != real_packet->tile);
13541 if (differ) {
13542 BV_SET(fields, 1);
13543 }
13544
13545 differ = (old->event != real_packet->event);
13546 if (differ) {
13547 BV_SET(fields, 2);
13548 }
13549
13550 differ = (old->turn != real_packet->turn);
13551 if (differ) {
13552 BV_SET(fields, 3);
13553 }
13554
13555 differ = (old->phase != real_packet->phase);
13556 if (differ) {
13557 BV_SET(fields, 4);
13558 }
13559
13560 differ = (old->conn_id != real_packet->conn_id);
13561 if (differ) {
13562 BV_SET(fields, 5);
13563 }
13564#endif /* FREECIV_DELTA_PROTOCOL */
13565
13566#ifdef FREECIV_JSON_CONNECTION
13567 struct plocation field_addr;
13568 {
13569 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13572 }
13573#endif /* FREECIV_JSON_CONNECTION */
13574
13575#ifdef FREECIV_DELTA_PROTOCOL
13576#ifdef FREECIV_JSON_CONNECTION
13577 field_addr.name = "fields";
13578#endif /* FREECIV_JSON_CONNECTION */
13579 e = 0;
13580 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13581 if (e) {
13582 log_packet_detailed("fields bitvector error detected");
13583 }
13584
13585 if (BV_ISSET(fields, 0)) {
13586 log_packet_detailed(" field 'message' has changed");
13587
13588#ifdef FREECIV_JSON_CONNECTION
13589 field_addr.name = "message";
13590#endif /* FREECIV_JSON_CONNECTION */
13591 e = 0;
13592
13593 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13594
13595 if (e) {
13596 log_packet_detailed("'message' field error detected");
13597 }
13598 }
13599
13600 if (BV_ISSET(fields, 1)) {
13601 log_packet_detailed(" field 'tile' has changed");
13602
13603#ifdef FREECIV_JSON_CONNECTION
13604 field_addr.name = "tile";
13605#endif /* FREECIV_JSON_CONNECTION */
13606 e = 0;
13607
13608 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13609
13610 if (e) {
13611 log_packet_detailed("'tile' field error detected");
13612 }
13613 }
13614
13615 if (BV_ISSET(fields, 2)) {
13616 log_packet_detailed(" field 'event' has changed");
13617
13618#ifdef FREECIV_JSON_CONNECTION
13619 field_addr.name = "event";
13620#endif /* FREECIV_JSON_CONNECTION */
13621 e = 0;
13622
13623 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13624
13625 if (e) {
13626 log_packet_detailed("'event' field error detected");
13627 }
13628 }
13629
13630 if (BV_ISSET(fields, 3)) {
13631 log_packet_detailed(" field 'turn' has changed");
13632
13633#ifdef FREECIV_JSON_CONNECTION
13634 field_addr.name = "turn";
13635#endif /* FREECIV_JSON_CONNECTION */
13636 e = 0;
13637
13638 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13639
13640 if (e) {
13641 log_packet_detailed("'turn' field error detected");
13642 }
13643 }
13644
13645 if (BV_ISSET(fields, 4)) {
13646 log_packet_detailed(" field 'phase' has changed");
13647
13648#ifdef FREECIV_JSON_CONNECTION
13649 field_addr.name = "phase";
13650#endif /* FREECIV_JSON_CONNECTION */
13651 e = 0;
13652
13653 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13654
13655 if (e) {
13656 log_packet_detailed("'phase' field error detected");
13657 }
13658 }
13659
13660 if (BV_ISSET(fields, 5)) {
13661 log_packet_detailed(" field 'conn_id' has changed");
13662
13663#ifdef FREECIV_JSON_CONNECTION
13664 field_addr.name = "conn_id";
13665#endif /* FREECIV_JSON_CONNECTION */
13666 e = 0;
13667
13668 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13669
13670 if (e) {
13671 log_packet_detailed("'conn_id' field error detected");
13672 }
13673 }
13674
13675 *old = *real_packet;
13676
13677#else /* FREECIV_DELTA_PROTOCOL */
13678#ifdef FREECIV_JSON_CONNECTION
13679 field_addr.name = "message";
13680#endif /* FREECIV_JSON_CONNECTION */
13681 e = 0;
13682
13683 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
13684
13685 if (e) {
13686 log_packet_detailed("'message' field error detected");
13687 }
13688
13689#ifdef FREECIV_JSON_CONNECTION
13690 field_addr.name = "tile";
13691#endif /* FREECIV_JSON_CONNECTION */
13692 e = 0;
13693
13694 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
13695
13696 if (e) {
13697 log_packet_detailed("'tile' field error detected");
13698 }
13699
13700#ifdef FREECIV_JSON_CONNECTION
13701 field_addr.name = "event";
13702#endif /* FREECIV_JSON_CONNECTION */
13703 e = 0;
13704
13705 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
13706
13707 if (e) {
13708 log_packet_detailed("'event' field error detected");
13709 }
13710
13711#ifdef FREECIV_JSON_CONNECTION
13712 field_addr.name = "turn";
13713#endif /* FREECIV_JSON_CONNECTION */
13714 e = 0;
13715
13716 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
13717
13718 if (e) {
13719 log_packet_detailed("'turn' field error detected");
13720 }
13721
13722#ifdef FREECIV_JSON_CONNECTION
13723 field_addr.name = "phase";
13724#endif /* FREECIV_JSON_CONNECTION */
13725 e = 0;
13726
13727 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
13728
13729 if (e) {
13730 log_packet_detailed("'phase' field error detected");
13731 }
13732
13733#ifdef FREECIV_JSON_CONNECTION
13734 field_addr.name = "conn_id";
13735#endif /* FREECIV_JSON_CONNECTION */
13736 e = 0;
13737
13738 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
13739
13740 if (e) {
13741 log_packet_detailed("'conn_id' field error detected");
13742 }
13743#endif /* FREECIV_DELTA_PROTOCOL */
13744
13746}
13747
13749{
13750 if (!pc->used) {
13751 log_error("WARNING: trying to send data to the closed connection %s",
13753 return -1;
13754 }
13755 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet != nullptr, -1,
13756 "Handler for PACKET_EARLY_CHAT_MSG not installed");
13757 return pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet(pc, packet);
13758}
13759
13760void lsend_packet_early_chat_msg(struct conn_list *dest, const struct packet_early_chat_msg *packet)
13761{
13762 conn_list_iterate(dest, pconn) {
13765}
13766
13767static inline void init_packet_chat_msg_req(struct packet_chat_msg_req *packet)
13768{
13769 memset(packet, 0, sizeof(*packet));
13770}
13771
13772#define free_packet_chat_msg_req(_packet) (void) 0
13773#define destroy_packet_chat_msg_req free
13774
13775#ifdef FREECIV_DELTA_PROTOCOL
13776#define hash_packet_chat_msg_req_100 hash_const
13777#define cmp_packet_chat_msg_req_100 cmp_const
13779#endif /* FREECIV_DELTA_PROTOCOL */
13780
13782{
13783#define FREE_PACKET_STRUCT(_packet) free_packet_chat_msg_req(_packet)
13785
13786#ifdef FREECIV_JSON_CONNECTION
13787 struct plocation field_addr;
13788 {
13789 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13792 }
13793#endif /* FREECIV_JSON_CONNECTION */
13794
13795 log_packet_detailed("packet_chat_msg_req_100: got info about ()");
13796
13797#ifdef FREECIV_DELTA_PROTOCOL
13799 struct packet_chat_msg_req *old;
13800 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG_REQ;
13801
13802 if (nullptr == *hash) {
13804 nullptr, nullptr, nullptr, destroy_packet_chat_msg_req);
13805 }
13806
13807 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13808 *real_packet = *old;
13809 } else {
13810 /* packet is already initialized empty */
13811 log_packet_detailed(" no old info");
13812 }
13813
13814#ifdef FREECIV_JSON_CONNECTION
13815 field_addr.name = "fields";
13816#endif /* FREECIV_JSON_CONNECTION */
13817 DIO_BV_GET(&din, &field_addr, fields);
13818
13819 if (BV_ISSET(fields, 0)) {
13820 log_packet_detailed(" got field 'message'");
13821
13822#ifdef FREECIV_JSON_CONNECTION
13823 field_addr.name = "message";
13824#endif /* FREECIV_JSON_CONNECTION */
13825
13826 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13828 }
13829 }
13830
13831 if (nullptr == old) {
13832 old = fc_malloc(sizeof(*old));
13834 *old = *real_packet;
13836 } else {
13837 *old = *real_packet;
13838 }
13839
13840#else /* FREECIV_DELTA_PROTOCOL */
13841#ifdef FREECIV_JSON_CONNECTION
13842 field_addr.name = "message";
13843#endif /* FREECIV_JSON_CONNECTION */
13844
13845 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
13847 }
13848#endif /* FREECIV_DELTA_PROTOCOL */
13849
13851#undef FREE_PACKET_STRUCT
13852}
13853
13854static int send_packet_chat_msg_req_100(struct connection *pc, const struct packet_chat_msg_req *packet)
13855{
13856 const struct packet_chat_msg_req *real_packet = packet;
13857 int e;
13859
13860 log_packet_detailed("packet_chat_msg_req_100: sending info about ()");
13861
13862#ifdef FREECIV_DELTA_PROTOCOL
13864 struct packet_chat_msg_req *old;
13865 bool differ;
13866 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG_REQ;
13867
13868 if (nullptr == *hash) {
13870 nullptr, nullptr, nullptr, destroy_packet_chat_msg_req);
13871 }
13872 BV_CLR_ALL(fields);
13873
13874 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
13875 old = fc_malloc(sizeof(*old));
13876 /* temporary bitcopy just to insert correctly */
13877 *old = *real_packet;
13880 }
13881
13882 differ = (strcmp(old->message, real_packet->message) != 0);
13883 if (differ) {
13884 BV_SET(fields, 0);
13885 }
13886#endif /* FREECIV_DELTA_PROTOCOL */
13887
13888#ifdef FREECIV_JSON_CONNECTION
13889 struct plocation field_addr;
13890 {
13891 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13894 }
13895#endif /* FREECIV_JSON_CONNECTION */
13896
13897#ifdef FREECIV_DELTA_PROTOCOL
13898#ifdef FREECIV_JSON_CONNECTION
13899 field_addr.name = "fields";
13900#endif /* FREECIV_JSON_CONNECTION */
13901 e = 0;
13902 e |= DIO_BV_PUT(&dout, &field_addr, fields);
13903 if (e) {
13904 log_packet_detailed("fields bitvector error detected");
13905 }
13906
13907 if (BV_ISSET(fields, 0)) {
13908 log_packet_detailed(" field 'message' has changed");
13909
13910#ifdef FREECIV_JSON_CONNECTION
13911 field_addr.name = "message";
13912#endif /* FREECIV_JSON_CONNECTION */
13913 e = 0;
13914
13915 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
13916
13917 if (e) {
13918 log_packet_detailed("'message' field error detected");
13919 }
13920 }
13921
13922 *old = *real_packet;
13923
13924#else /* FREECIV_DELTA_PROTOCOL */
13925#ifdef FREECIV_JSON_CONNECTION
13926 field_addr.name = "message";
13927#endif /* FREECIV_JSON_CONNECTION */
13928 e = 0;
13929
13930 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
13931
13932 if (e) {
13933 log_packet_detailed("'message' field error detected");
13934 }
13935#endif /* FREECIV_DELTA_PROTOCOL */
13936
13938}
13939
13941{
13942 if (!pc->used) {
13943 log_error("WARNING: trying to send data to the closed connection %s",
13945 return -1;
13946 }
13947 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet != nullptr, -1,
13948 "Handler for PACKET_CHAT_MSG_REQ not installed");
13949 return pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet(pc, packet);
13950}
13951
13953{
13954 struct packet_chat_msg_req packet, *real_packet = &packet;
13955
13956 sz_strlcpy(real_packet->message, message);
13957
13959}
13960
13961static inline void init_packet_connect_msg(struct packet_connect_msg *packet)
13962{
13963 memset(packet, 0, sizeof(*packet));
13964}
13965
13966#define free_packet_connect_msg(_packet) (void) 0
13967#define destroy_packet_connect_msg free
13968
13969#ifdef FREECIV_DELTA_PROTOCOL
13970#define hash_packet_connect_msg_100 hash_const
13971#define cmp_packet_connect_msg_100 cmp_const
13973#endif /* FREECIV_DELTA_PROTOCOL */
13974
13976{
13977#define FREE_PACKET_STRUCT(_packet) free_packet_connect_msg(_packet)
13979
13980#ifdef FREECIV_JSON_CONNECTION
13981 struct plocation field_addr;
13982 {
13983 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
13986 }
13987#endif /* FREECIV_JSON_CONNECTION */
13988
13989 log_packet_detailed("packet_connect_msg_100: got info about ()");
13990
13991#ifdef FREECIV_DELTA_PROTOCOL
13993 struct packet_connect_msg *old;
13994 struct genhash **hash = pc->phs.received + PACKET_CONNECT_MSG;
13995
13996 if (nullptr == *hash) {
13998 nullptr, nullptr, nullptr, destroy_packet_connect_msg);
13999 }
14000
14001 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14002 *real_packet = *old;
14003 } else {
14004 /* packet is already initialized empty */
14005 log_packet_detailed(" no old info");
14006 }
14007
14008#ifdef FREECIV_JSON_CONNECTION
14009 field_addr.name = "fields";
14010#endif /* FREECIV_JSON_CONNECTION */
14011 DIO_BV_GET(&din, &field_addr, fields);
14012
14013 if (BV_ISSET(fields, 0)) {
14014 log_packet_detailed(" got field 'message'");
14015
14016#ifdef FREECIV_JSON_CONNECTION
14017 field_addr.name = "message";
14018#endif /* FREECIV_JSON_CONNECTION */
14019
14020 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
14022 }
14023 }
14024
14025 if (nullptr == old) {
14026 old = fc_malloc(sizeof(*old));
14028 *old = *real_packet;
14030 } else {
14031 *old = *real_packet;
14032 }
14033
14034#else /* FREECIV_DELTA_PROTOCOL */
14035#ifdef FREECIV_JSON_CONNECTION
14036 field_addr.name = "message";
14037#endif /* FREECIV_JSON_CONNECTION */
14038
14039 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
14041 }
14042#endif /* FREECIV_DELTA_PROTOCOL */
14043
14045#undef FREE_PACKET_STRUCT
14046}
14047
14048static int send_packet_connect_msg_100(struct connection *pc, const struct packet_connect_msg *packet)
14049{
14050 const struct packet_connect_msg *real_packet = packet;
14051 int e;
14053
14054 log_packet_detailed("packet_connect_msg_100: sending info about ()");
14055
14056#ifdef FREECIV_DELTA_PROTOCOL
14058 struct packet_connect_msg *old;
14059 bool differ;
14060 struct genhash **hash = pc->phs.sent + PACKET_CONNECT_MSG;
14061
14062 if (nullptr == *hash) {
14064 nullptr, nullptr, nullptr, destroy_packet_connect_msg);
14065 }
14066 BV_CLR_ALL(fields);
14067
14068 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14069 old = fc_malloc(sizeof(*old));
14070 /* temporary bitcopy just to insert correctly */
14071 *old = *real_packet;
14074 }
14075
14076 differ = (strcmp(old->message, real_packet->message) != 0);
14077 if (differ) {
14078 BV_SET(fields, 0);
14079 }
14080#endif /* FREECIV_DELTA_PROTOCOL */
14081
14082#ifdef FREECIV_JSON_CONNECTION
14083 struct plocation field_addr;
14084 {
14085 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14088 }
14089#endif /* FREECIV_JSON_CONNECTION */
14090
14091#ifdef FREECIV_DELTA_PROTOCOL
14092#ifdef FREECIV_JSON_CONNECTION
14093 field_addr.name = "fields";
14094#endif /* FREECIV_JSON_CONNECTION */
14095 e = 0;
14096 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14097 if (e) {
14098 log_packet_detailed("fields bitvector error detected");
14099 }
14100
14101 if (BV_ISSET(fields, 0)) {
14102 log_packet_detailed(" field 'message' has changed");
14103
14104#ifdef FREECIV_JSON_CONNECTION
14105 field_addr.name = "message";
14106#endif /* FREECIV_JSON_CONNECTION */
14107 e = 0;
14108
14109 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
14110
14111 if (e) {
14112 log_packet_detailed("'message' field error detected");
14113 }
14114 }
14115
14116 *old = *real_packet;
14117
14118#else /* FREECIV_DELTA_PROTOCOL */
14119#ifdef FREECIV_JSON_CONNECTION
14120 field_addr.name = "message";
14121#endif /* FREECIV_JSON_CONNECTION */
14122 e = 0;
14123
14124 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
14125
14126 if (e) {
14127 log_packet_detailed("'message' field error detected");
14128 }
14129#endif /* FREECIV_DELTA_PROTOCOL */
14130
14132}
14133
14135{
14136 if (!pc->used) {
14137 log_error("WARNING: trying to send data to the closed connection %s",
14139 return -1;
14140 }
14141 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONNECT_MSG].packet != nullptr, -1,
14142 "Handler for PACKET_CONNECT_MSG not installed");
14143 return pc->phs.handlers->send[PACKET_CONNECT_MSG].packet(pc, packet);
14144}
14145
14147{
14148 struct packet_connect_msg packet, *real_packet = &packet;
14149
14150 sz_strlcpy(real_packet->message, message);
14151
14153}
14154
14155static inline void init_packet_server_info(struct packet_server_info *packet)
14156{
14157 memset(packet, 0, sizeof(*packet));
14158}
14159
14160#define free_packet_server_info(_packet) (void) 0
14161#define destroy_packet_server_info free
14162
14163#ifdef FREECIV_DELTA_PROTOCOL
14164#define hash_packet_server_info_100 hash_const
14165#define cmp_packet_server_info_100 cmp_const
14167#endif /* FREECIV_DELTA_PROTOCOL */
14168
14170{
14171#define FREE_PACKET_STRUCT(_packet) free_packet_server_info(_packet)
14173
14174#ifdef FREECIV_JSON_CONNECTION
14175 struct plocation field_addr;
14176 {
14177 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14180 }
14181#endif /* FREECIV_JSON_CONNECTION */
14182
14183 log_packet_detailed("packet_server_info_100: got info about ()");
14184
14185#ifdef FREECIV_DELTA_PROTOCOL
14187 struct packet_server_info *old;
14188 struct genhash **hash = pc->phs.received + PACKET_SERVER_INFO;
14189
14190 if (nullptr == *hash) {
14192 nullptr, nullptr, nullptr, destroy_packet_server_info);
14193 }
14194
14195 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14196 *real_packet = *old;
14197 } else {
14198 /* packet is already initialized empty */
14199 log_packet_detailed(" no old info");
14200 }
14201
14202#ifdef FREECIV_JSON_CONNECTION
14203 field_addr.name = "fields";
14204#endif /* FREECIV_JSON_CONNECTION */
14205 DIO_BV_GET(&din, &field_addr, fields);
14206
14207 if (BV_ISSET(fields, 0)) {
14208 log_packet_detailed(" got field 'version_label'");
14209
14210#ifdef FREECIV_JSON_CONNECTION
14211 field_addr.name = "version_label";
14212#endif /* FREECIV_JSON_CONNECTION */
14213
14214 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
14215 RECEIVE_PACKET_FIELD_ERROR(version_label);
14216 }
14217 }
14218
14219 if (BV_ISSET(fields, 1)) {
14220 log_packet_detailed(" got field 'major_version'");
14221
14222#ifdef FREECIV_JSON_CONNECTION
14223 field_addr.name = "major_version";
14224#endif /* FREECIV_JSON_CONNECTION */
14225
14226 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
14227 RECEIVE_PACKET_FIELD_ERROR(major_version);
14228 }
14229 }
14230
14231 if (BV_ISSET(fields, 2)) {
14232 log_packet_detailed(" got field 'minor_version'");
14233
14234#ifdef FREECIV_JSON_CONNECTION
14235 field_addr.name = "minor_version";
14236#endif /* FREECIV_JSON_CONNECTION */
14237
14238 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
14239 RECEIVE_PACKET_FIELD_ERROR(minor_version);
14240 }
14241 }
14242
14243 if (BV_ISSET(fields, 3)) {
14244 log_packet_detailed(" got field 'patch_version'");
14245
14246#ifdef FREECIV_JSON_CONNECTION
14247 field_addr.name = "patch_version";
14248#endif /* FREECIV_JSON_CONNECTION */
14249
14250 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
14251 RECEIVE_PACKET_FIELD_ERROR(patch_version);
14252 }
14253 }
14254
14255 if (BV_ISSET(fields, 4)) {
14256 log_packet_detailed(" got field 'emerg_version'");
14257
14258#ifdef FREECIV_JSON_CONNECTION
14259 field_addr.name = "emerg_version";
14260#endif /* FREECIV_JSON_CONNECTION */
14261
14262 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
14263 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
14264 }
14265 }
14266
14267 if (nullptr == old) {
14268 old = fc_malloc(sizeof(*old));
14270 *old = *real_packet;
14272 } else {
14273 *old = *real_packet;
14274 }
14275
14276#else /* FREECIV_DELTA_PROTOCOL */
14277#ifdef FREECIV_JSON_CONNECTION
14278 field_addr.name = "version_label";
14279#endif /* FREECIV_JSON_CONNECTION */
14280
14281 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
14282 RECEIVE_PACKET_FIELD_ERROR(version_label);
14283 }
14284
14285#ifdef FREECIV_JSON_CONNECTION
14286 field_addr.name = "major_version";
14287#endif /* FREECIV_JSON_CONNECTION */
14288
14289 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
14290 RECEIVE_PACKET_FIELD_ERROR(major_version);
14291 }
14292
14293#ifdef FREECIV_JSON_CONNECTION
14294 field_addr.name = "minor_version";
14295#endif /* FREECIV_JSON_CONNECTION */
14296
14297 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
14298 RECEIVE_PACKET_FIELD_ERROR(minor_version);
14299 }
14300
14301#ifdef FREECIV_JSON_CONNECTION
14302 field_addr.name = "patch_version";
14303#endif /* FREECIV_JSON_CONNECTION */
14304
14305 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
14306 RECEIVE_PACKET_FIELD_ERROR(patch_version);
14307 }
14308
14309#ifdef FREECIV_JSON_CONNECTION
14310 field_addr.name = "emerg_version";
14311#endif /* FREECIV_JSON_CONNECTION */
14312
14313 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
14314 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
14315 }
14316#endif /* FREECIV_DELTA_PROTOCOL */
14317
14319#undef FREE_PACKET_STRUCT
14320}
14321
14322static int send_packet_server_info_100(struct connection *pc, const struct packet_server_info *packet)
14323{
14324 const struct packet_server_info *real_packet = packet;
14325 int e;
14327
14328 log_packet_detailed("packet_server_info_100: sending info about ()");
14329
14330#ifdef FREECIV_DELTA_PROTOCOL
14332 struct packet_server_info *old;
14333 bool differ;
14334 struct genhash **hash = pc->phs.sent + PACKET_SERVER_INFO;
14335
14336 if (nullptr == *hash) {
14338 nullptr, nullptr, nullptr, destroy_packet_server_info);
14339 }
14340 BV_CLR_ALL(fields);
14341
14342 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14343 old = fc_malloc(sizeof(*old));
14344 /* temporary bitcopy just to insert correctly */
14345 *old = *real_packet;
14348 }
14349
14350 differ = (strcmp(old->version_label, real_packet->version_label) != 0);
14351 if (differ) {
14352 BV_SET(fields, 0);
14353 }
14354
14355 differ = (old->major_version != real_packet->major_version);
14356 if (differ) {
14357 BV_SET(fields, 1);
14358 }
14359
14360 differ = (old->minor_version != real_packet->minor_version);
14361 if (differ) {
14362 BV_SET(fields, 2);
14363 }
14364
14365 differ = (old->patch_version != real_packet->patch_version);
14366 if (differ) {
14367 BV_SET(fields, 3);
14368 }
14369
14370 differ = (old->emerg_version != real_packet->emerg_version);
14371 if (differ) {
14372 BV_SET(fields, 4);
14373 }
14374#endif /* FREECIV_DELTA_PROTOCOL */
14375
14376#ifdef FREECIV_JSON_CONNECTION
14377 struct plocation field_addr;
14378 {
14379 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14382 }
14383#endif /* FREECIV_JSON_CONNECTION */
14384
14385#ifdef FREECIV_DELTA_PROTOCOL
14386#ifdef FREECIV_JSON_CONNECTION
14387 field_addr.name = "fields";
14388#endif /* FREECIV_JSON_CONNECTION */
14389 e = 0;
14390 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14391 if (e) {
14392 log_packet_detailed("fields bitvector error detected");
14393 }
14394
14395 if (BV_ISSET(fields, 0)) {
14396 log_packet_detailed(" field 'version_label' has changed");
14397
14398#ifdef FREECIV_JSON_CONNECTION
14399 field_addr.name = "version_label";
14400#endif /* FREECIV_JSON_CONNECTION */
14401 e = 0;
14402
14403 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
14404
14405 if (e) {
14406 log_packet_detailed("'version_label' field error detected");
14407 }
14408 }
14409
14410 if (BV_ISSET(fields, 1)) {
14411 log_packet_detailed(" field 'major_version' has changed");
14412
14413#ifdef FREECIV_JSON_CONNECTION
14414 field_addr.name = "major_version";
14415#endif /* FREECIV_JSON_CONNECTION */
14416 e = 0;
14417
14418 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
14419
14420 if (e) {
14421 log_packet_detailed("'major_version' field error detected");
14422 }
14423 }
14424
14425 if (BV_ISSET(fields, 2)) {
14426 log_packet_detailed(" field 'minor_version' has changed");
14427
14428#ifdef FREECIV_JSON_CONNECTION
14429 field_addr.name = "minor_version";
14430#endif /* FREECIV_JSON_CONNECTION */
14431 e = 0;
14432
14433 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
14434
14435 if (e) {
14436 log_packet_detailed("'minor_version' field error detected");
14437 }
14438 }
14439
14440 if (BV_ISSET(fields, 3)) {
14441 log_packet_detailed(" field 'patch_version' has changed");
14442
14443#ifdef FREECIV_JSON_CONNECTION
14444 field_addr.name = "patch_version";
14445#endif /* FREECIV_JSON_CONNECTION */
14446 e = 0;
14447
14448 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
14449
14450 if (e) {
14451 log_packet_detailed("'patch_version' field error detected");
14452 }
14453 }
14454
14455 if (BV_ISSET(fields, 4)) {
14456 log_packet_detailed(" field 'emerg_version' has changed");
14457
14458#ifdef FREECIV_JSON_CONNECTION
14459 field_addr.name = "emerg_version";
14460#endif /* FREECIV_JSON_CONNECTION */
14461 e = 0;
14462
14463 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
14464
14465 if (e) {
14466 log_packet_detailed("'emerg_version' field error detected");
14467 }
14468 }
14469
14470 *old = *real_packet;
14471
14472#else /* FREECIV_DELTA_PROTOCOL */
14473#ifdef FREECIV_JSON_CONNECTION
14474 field_addr.name = "version_label";
14475#endif /* FREECIV_JSON_CONNECTION */
14476 e = 0;
14477
14478 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
14479
14480 if (e) {
14481 log_packet_detailed("'version_label' field error detected");
14482 }
14483
14484#ifdef FREECIV_JSON_CONNECTION
14485 field_addr.name = "major_version";
14486#endif /* FREECIV_JSON_CONNECTION */
14487 e = 0;
14488
14489 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
14490
14491 if (e) {
14492 log_packet_detailed("'major_version' field error detected");
14493 }
14494
14495#ifdef FREECIV_JSON_CONNECTION
14496 field_addr.name = "minor_version";
14497#endif /* FREECIV_JSON_CONNECTION */
14498 e = 0;
14499
14500 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
14501
14502 if (e) {
14503 log_packet_detailed("'minor_version' field error detected");
14504 }
14505
14506#ifdef FREECIV_JSON_CONNECTION
14507 field_addr.name = "patch_version";
14508#endif /* FREECIV_JSON_CONNECTION */
14509 e = 0;
14510
14511 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
14512
14513 if (e) {
14514 log_packet_detailed("'patch_version' field error detected");
14515 }
14516
14517#ifdef FREECIV_JSON_CONNECTION
14518 field_addr.name = "emerg_version";
14519#endif /* FREECIV_JSON_CONNECTION */
14520 e = 0;
14521
14522 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
14523
14524 if (e) {
14525 log_packet_detailed("'emerg_version' field error detected");
14526 }
14527#endif /* FREECIV_DELTA_PROTOCOL */
14528
14530}
14531
14533{
14534 if (!pc->used) {
14535 log_error("WARNING: trying to send data to the closed connection %s",
14537 return -1;
14538 }
14539 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_INFO].packet != nullptr, -1,
14540 "Handler for PACKET_SERVER_INFO not installed");
14541 return pc->phs.handlers->send[PACKET_SERVER_INFO].packet(pc, packet);
14542}
14543
14544int dsend_packet_server_info(struct connection *pc, const char *version_label, int major_version, int minor_version, int patch_version, int emerg_version)
14545{
14546 struct packet_server_info packet, *real_packet = &packet;
14547
14548 sz_strlcpy(real_packet->version_label, version_label);
14549 real_packet->major_version = major_version;
14550 real_packet->minor_version = minor_version;
14551 real_packet->patch_version = patch_version;
14552 real_packet->emerg_version = emerg_version;
14553
14555}
14556
14557static inline void init_packet_city_remove(struct packet_city_remove *packet)
14558{
14559 memset(packet, 0, sizeof(*packet));
14560}
14561
14562#define free_packet_city_remove(_packet) (void) 0
14563#define destroy_packet_city_remove free
14564
14565#ifdef FREECIV_DELTA_PROTOCOL
14566#define hash_packet_city_remove_100 hash_const
14567#define cmp_packet_city_remove_100 cmp_const
14569#endif /* FREECIV_DELTA_PROTOCOL */
14570
14572{
14573#define FREE_PACKET_STRUCT(_packet) free_packet_city_remove(_packet)
14575
14576#ifdef FREECIV_JSON_CONNECTION
14577 struct plocation field_addr;
14578 {
14579 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14582 }
14583#endif /* FREECIV_JSON_CONNECTION */
14584
14585 log_packet_detailed("packet_city_remove_100: got info about ()");
14586
14587#ifdef FREECIV_DELTA_PROTOCOL
14589 struct packet_city_remove *old;
14590 struct genhash **hash = pc->phs.received + PACKET_CITY_REMOVE;
14591
14592 if (nullptr == *hash) {
14594 nullptr, nullptr, nullptr, destroy_packet_city_remove);
14595 }
14596
14597 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14598 *real_packet = *old;
14599 } else {
14600 /* packet is already initialized empty */
14601 log_packet_detailed(" no old info");
14602 }
14603
14604#ifdef FREECIV_JSON_CONNECTION
14605 field_addr.name = "fields";
14606#endif /* FREECIV_JSON_CONNECTION */
14607 DIO_BV_GET(&din, &field_addr, fields);
14608
14609 if (BV_ISSET(fields, 0)) {
14610 log_packet_detailed(" got field 'city_id'");
14611
14612#ifdef FREECIV_JSON_CONNECTION
14613 field_addr.name = "city_id";
14614#endif /* FREECIV_JSON_CONNECTION */
14615
14616 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
14618 }
14619 }
14620
14621 if (nullptr == old) {
14622 old = fc_malloc(sizeof(*old));
14624 *old = *real_packet;
14626 } else {
14627 *old = *real_packet;
14628 }
14629
14630 hash = pc->phs.received + PACKET_CITY_INFO;
14631 if (nullptr != *hash) {
14633 }
14634
14635 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
14636 if (nullptr != *hash) {
14638 }
14639
14640 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
14641 if (nullptr != *hash) {
14643 }
14644
14645 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
14646 if (nullptr != *hash) {
14648 }
14649
14650 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
14651 if (nullptr != *hash) {
14653 }
14654
14655#else /* FREECIV_DELTA_PROTOCOL */
14656#ifdef FREECIV_JSON_CONNECTION
14657 field_addr.name = "city_id";
14658#endif /* FREECIV_JSON_CONNECTION */
14659
14660 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
14662 }
14663#endif /* FREECIV_DELTA_PROTOCOL */
14664
14666#undef FREE_PACKET_STRUCT
14667}
14668
14669static int send_packet_city_remove_100(struct connection *pc, const struct packet_city_remove *packet)
14670{
14671 const struct packet_city_remove *real_packet = packet;
14672 int e;
14674
14675 log_packet_detailed("packet_city_remove_100: sending info about ()");
14676
14677#ifdef FREECIV_DELTA_PROTOCOL
14679 struct packet_city_remove *old;
14680 bool differ;
14681 struct genhash **hash = pc->phs.sent + PACKET_CITY_REMOVE;
14682
14683 if (nullptr == *hash) {
14685 nullptr, nullptr, nullptr, destroy_packet_city_remove);
14686 }
14687 BV_CLR_ALL(fields);
14688
14689 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14690 old = fc_malloc(sizeof(*old));
14691 /* temporary bitcopy just to insert correctly */
14692 *old = *real_packet;
14695 }
14696
14697 differ = (old->city_id != real_packet->city_id);
14698 if (differ) {
14699 BV_SET(fields, 0);
14700 }
14701#endif /* FREECIV_DELTA_PROTOCOL */
14702
14703#ifdef FREECIV_JSON_CONNECTION
14704 struct plocation field_addr;
14705 {
14706 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14709 }
14710#endif /* FREECIV_JSON_CONNECTION */
14711
14712#ifdef FREECIV_DELTA_PROTOCOL
14713#ifdef FREECIV_JSON_CONNECTION
14714 field_addr.name = "fields";
14715#endif /* FREECIV_JSON_CONNECTION */
14716 e = 0;
14717 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14718 if (e) {
14719 log_packet_detailed("fields bitvector error detected");
14720 }
14721
14722 if (BV_ISSET(fields, 0)) {
14723 log_packet_detailed(" field 'city_id' has changed");
14724
14725#ifdef FREECIV_JSON_CONNECTION
14726 field_addr.name = "city_id";
14727#endif /* FREECIV_JSON_CONNECTION */
14728 e = 0;
14729
14730 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
14731
14732 if (e) {
14733 log_packet_detailed("'city_id' field error detected");
14734 }
14735 }
14736
14737 *old = *real_packet;
14738
14739 hash = pc->phs.sent + PACKET_CITY_INFO;
14740 if (nullptr != *hash) {
14742 }
14743
14745 if (nullptr != *hash) {
14747 }
14748
14749 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
14750 if (nullptr != *hash) {
14752 }
14753
14754 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
14755 if (nullptr != *hash) {
14757 }
14758
14759 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
14760 if (nullptr != *hash) {
14762 }
14763
14764#else /* FREECIV_DELTA_PROTOCOL */
14765#ifdef FREECIV_JSON_CONNECTION
14766 field_addr.name = "city_id";
14767#endif /* FREECIV_JSON_CONNECTION */
14768 e = 0;
14769
14770 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
14771
14772 if (e) {
14773 log_packet_detailed("'city_id' field error detected");
14774 }
14775#endif /* FREECIV_DELTA_PROTOCOL */
14776
14778}
14779
14781{
14782 if (!pc->used) {
14783 log_error("WARNING: trying to send data to the closed connection %s",
14785 return -1;
14786 }
14787 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REMOVE].packet != nullptr, -1,
14788 "Handler for PACKET_CITY_REMOVE not installed");
14789 return pc->phs.handlers->send[PACKET_CITY_REMOVE].packet(pc, packet);
14790}
14791
14792void lsend_packet_city_remove(struct conn_list *dest, const struct packet_city_remove *packet)
14793{
14794 conn_list_iterate(dest, pconn) {
14797}
14798
14799int dsend_packet_city_remove(struct connection *pc, int city_id)
14800{
14801 struct packet_city_remove packet, *real_packet = &packet;
14802
14804
14806}
14807
14809{
14810 struct packet_city_remove packet, *real_packet = &packet;
14811
14813
14815}
14816
14817static inline void init_packet_city_info(struct packet_city_info *packet)
14818{
14819 memset(packet, 0, sizeof(*packet));
14820}
14821
14822#define free_packet_city_info(_packet) (void) 0
14823#define destroy_packet_city_info free
14824
14825#ifdef FREECIV_DELTA_PROTOCOL
14827{
14828 const struct packet_city_info *key = (const struct packet_city_info *) vkey;
14829 genhash_val_t result = 0;
14830
14831 result += key->id;
14832
14833 result &= 0xFFFFFFFF;
14834 return result;
14835}
14836
14837static bool cmp_packet_city_info_100(const void *vkey1, const void *vkey2)
14838{
14839 const struct packet_city_info *old = (const struct packet_city_info *) vkey1;
14840 const struct packet_city_info *real_packet = (const struct packet_city_info *) vkey2;
14841 bool differ;
14842
14843 differ = (old->id != real_packet->id);
14844
14845 return !differ;
14846}
14848#endif /* FREECIV_DELTA_PROTOCOL */
14849
14851{
14852#define FREE_PACKET_STRUCT(_packet) free_packet_city_info(_packet)
14854
14855#ifdef FREECIV_JSON_CONNECTION
14856 struct plocation field_addr;
14857 {
14858 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
14861 }
14862#endif /* FREECIV_JSON_CONNECTION */
14863
14864#ifdef FREECIV_JSON_CONNECTION
14865 field_addr.name = "id";
14866#endif /* FREECIV_JSON_CONNECTION */
14867
14868 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
14870 }
14871
14872 log_packet_detailed("packet_city_info_100: got info about (%d)",
14873 real_packet->id);
14874
14875#ifdef FREECIV_DELTA_PROTOCOL
14877 struct packet_city_info *old;
14878 struct genhash **hash = pc->phs.received + PACKET_CITY_INFO;
14879
14880 if (nullptr == *hash) {
14882 nullptr, nullptr, nullptr, destroy_packet_city_info);
14883 }
14884
14885 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
14886 *real_packet = *old;
14887 } else {
14888 /* packet is already initialized empty */
14889 log_packet_detailed(" no old info");
14890 }
14891
14892#ifdef FREECIV_JSON_CONNECTION
14893 field_addr.name = "fields";
14894#endif /* FREECIV_JSON_CONNECTION */
14895 DIO_BV_GET(&din, &field_addr, fields);
14896
14897 if (BV_ISSET(fields, 0)) {
14898 log_packet_detailed(" got field 'tile'");
14899
14900#ifdef FREECIV_JSON_CONNECTION
14901 field_addr.name = "tile";
14902#endif /* FREECIV_JSON_CONNECTION */
14903
14904 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
14906 }
14907 }
14908
14909 if (BV_ISSET(fields, 1)) {
14910 log_packet_detailed(" got field 'owner'");
14911
14912#ifdef FREECIV_JSON_CONNECTION
14913 field_addr.name = "owner";
14914#endif /* FREECIV_JSON_CONNECTION */
14915
14916 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
14918 }
14919 }
14920
14921 if (BV_ISSET(fields, 2)) {
14922 log_packet_detailed(" got field 'original'");
14923
14924#ifdef FREECIV_JSON_CONNECTION
14925 field_addr.name = "original";
14926#endif /* FREECIV_JSON_CONNECTION */
14927
14928 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
14930 }
14931 }
14932
14933 if (BV_ISSET(fields, 3)) {
14934 log_packet_detailed(" got field 'size'");
14935
14936#ifdef FREECIV_JSON_CONNECTION
14937 field_addr.name = "size";
14938#endif /* FREECIV_JSON_CONNECTION */
14939
14940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
14942 }
14943 }
14944
14945 if (BV_ISSET(fields, 4)) {
14946 log_packet_detailed(" got field 'city_radius_sq'");
14947
14948#ifdef FREECIV_JSON_CONNECTION
14949 field_addr.name = "city_radius_sq";
14950#endif /* FREECIV_JSON_CONNECTION */
14951
14952 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
14953 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
14954 }
14955 }
14956
14957 if (BV_ISSET(fields, 5)) {
14958 log_packet_detailed(" got field 'style'");
14959
14960#ifdef FREECIV_JSON_CONNECTION
14961 field_addr.name = "style";
14962#endif /* FREECIV_JSON_CONNECTION */
14963
14964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
14966 }
14967 }
14968
14969 if (BV_ISSET(fields, 6)) {
14970 log_packet_detailed(" got field 'capital'");
14971
14972#ifdef FREECIV_JSON_CONNECTION
14973 field_addr.name = "capital";
14974#endif /* FREECIV_JSON_CONNECTION */
14975
14976 {
14977 int readin;
14978
14979 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
14981 }
14982 real_packet->capital = readin;
14983 }
14984 }
14985
14986 if (BV_ISSET(fields, 7)) {
14987 log_packet_detailed(" got field 'ppl_happy'");
14988
14989#ifdef FREECIV_JSON_CONNECTION
14990 field_addr.name = "ppl_happy";
14991#endif /* FREECIV_JSON_CONNECTION */
14992
14993 {
14994 int i;
14995
14996
14997#ifdef FREECIV_JSON_CONNECTION
14998 /* Enter array. */
14999 field_addr.sub_location = plocation_elem_new(0);
15000#endif /* FREECIV_JSON_CONNECTION */
15001
15002 for (i = 0; i < FEELING_LAST; i++) {
15003#ifdef FREECIV_JSON_CONNECTION
15004 /* Next array element */
15005 field_addr.sub_location->number = i;
15006#endif /* FREECIV_JSON_CONNECTION */
15007
15008 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
15009 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
15010 }
15011 }
15012
15013#ifdef FREECIV_JSON_CONNECTION
15014 /* Exit array. */
15015 FC_FREE(field_addr.sub_location);
15016#endif /* FREECIV_JSON_CONNECTION */
15017 }
15018 }
15019
15020 if (BV_ISSET(fields, 8)) {
15021 log_packet_detailed(" got field 'ppl_content'");
15022
15023#ifdef FREECIV_JSON_CONNECTION
15024 field_addr.name = "ppl_content";
15025#endif /* FREECIV_JSON_CONNECTION */
15026
15027 {
15028 int i;
15029
15030
15031#ifdef FREECIV_JSON_CONNECTION
15032 /* Enter array. */
15033 field_addr.sub_location = plocation_elem_new(0);
15034#endif /* FREECIV_JSON_CONNECTION */
15035
15036 for (i = 0; i < FEELING_LAST; i++) {
15037#ifdef FREECIV_JSON_CONNECTION
15038 /* Next array element */
15039 field_addr.sub_location->number = i;
15040#endif /* FREECIV_JSON_CONNECTION */
15041
15042 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
15043 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
15044 }
15045 }
15046
15047#ifdef FREECIV_JSON_CONNECTION
15048 /* Exit array. */
15049 FC_FREE(field_addr.sub_location);
15050#endif /* FREECIV_JSON_CONNECTION */
15051 }
15052 }
15053
15054 if (BV_ISSET(fields, 9)) {
15055 log_packet_detailed(" got field 'ppl_unhappy'");
15056
15057#ifdef FREECIV_JSON_CONNECTION
15058 field_addr.name = "ppl_unhappy";
15059#endif /* FREECIV_JSON_CONNECTION */
15060
15061 {
15062 int i;
15063
15064
15065#ifdef FREECIV_JSON_CONNECTION
15066 /* Enter array. */
15067 field_addr.sub_location = plocation_elem_new(0);
15068#endif /* FREECIV_JSON_CONNECTION */
15069
15070 for (i = 0; i < FEELING_LAST; i++) {
15071#ifdef FREECIV_JSON_CONNECTION
15072 /* Next array element */
15073 field_addr.sub_location->number = i;
15074#endif /* FREECIV_JSON_CONNECTION */
15075
15076 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
15077 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
15078 }
15079 }
15080
15081#ifdef FREECIV_JSON_CONNECTION
15082 /* Exit array. */
15083 FC_FREE(field_addr.sub_location);
15084#endif /* FREECIV_JSON_CONNECTION */
15085 }
15086 }
15087
15088 if (BV_ISSET(fields, 10)) {
15089 log_packet_detailed(" got field 'ppl_angry'");
15090
15091#ifdef FREECIV_JSON_CONNECTION
15092 field_addr.name = "ppl_angry";
15093#endif /* FREECIV_JSON_CONNECTION */
15094
15095 {
15096 int i;
15097
15098
15099#ifdef FREECIV_JSON_CONNECTION
15100 /* Enter array. */
15101 field_addr.sub_location = plocation_elem_new(0);
15102#endif /* FREECIV_JSON_CONNECTION */
15103
15104 for (i = 0; i < FEELING_LAST; i++) {
15105#ifdef FREECIV_JSON_CONNECTION
15106 /* Next array element */
15107 field_addr.sub_location->number = i;
15108#endif /* FREECIV_JSON_CONNECTION */
15109
15110 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
15111 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
15112 }
15113 }
15114
15115#ifdef FREECIV_JSON_CONNECTION
15116 /* Exit array. */
15117 FC_FREE(field_addr.sub_location);
15118#endif /* FREECIV_JSON_CONNECTION */
15119 }
15120 }
15121
15122 if (BV_ISSET(fields, 11)) {
15123 log_packet_detailed(" got field 'specialists_size'");
15124
15125#ifdef FREECIV_JSON_CONNECTION
15126 field_addr.name = "specialists_size";
15127#endif /* FREECIV_JSON_CONNECTION */
15128
15129 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
15130 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
15131 }
15132 }
15133
15134 if (BV_ISSET(fields, 12)) {
15135 log_packet_detailed(" got field 'specialists'");
15136
15137#ifdef FREECIV_JSON_CONNECTION
15138 field_addr.name = "specialists";
15139#endif /* FREECIV_JSON_CONNECTION */
15140
15141 {
15142 int i;
15143
15144 if (real_packet->specialists_size > SP_MAX) {
15145 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
15146 }
15147
15148#ifdef FREECIV_JSON_CONNECTION
15149 /* Enter array. */
15150 field_addr.sub_location = plocation_elem_new(0);
15151#endif /* FREECIV_JSON_CONNECTION */
15152
15153 for (i = 0; i < real_packet->specialists_size; i++) {
15154#ifdef FREECIV_JSON_CONNECTION
15155 /* Next array element */
15156 field_addr.sub_location->number = i;
15157#endif /* FREECIV_JSON_CONNECTION */
15158
15159 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
15161 }
15162 }
15163
15164#ifdef FREECIV_JSON_CONNECTION
15165 /* Exit array. */
15166 FC_FREE(field_addr.sub_location);
15167#endif /* FREECIV_JSON_CONNECTION */
15168 }
15169 }
15170
15171 if (BV_ISSET(fields, 13)) {
15172 log_packet_detailed(" got field 'history'");
15173
15174#ifdef FREECIV_JSON_CONNECTION
15175 field_addr.name = "history";
15176#endif /* FREECIV_JSON_CONNECTION */
15177
15178 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
15180 }
15181 }
15182
15183 if (BV_ISSET(fields, 14)) {
15184 log_packet_detailed(" got field 'culture'");
15185
15186#ifdef FREECIV_JSON_CONNECTION
15187 field_addr.name = "culture";
15188#endif /* FREECIV_JSON_CONNECTION */
15189
15190 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
15192 }
15193 }
15194
15195 if (BV_ISSET(fields, 15)) {
15196 log_packet_detailed(" got field 'buy_cost'");
15197
15198#ifdef FREECIV_JSON_CONNECTION
15199 field_addr.name = "buy_cost";
15200#endif /* FREECIV_JSON_CONNECTION */
15201
15202 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
15204 }
15205 }
15206
15207 if (BV_ISSET(fields, 16)) {
15208 log_packet_detailed(" got field 'surplus'");
15209
15210#ifdef FREECIV_JSON_CONNECTION
15211 field_addr.name = "surplus";
15212#endif /* FREECIV_JSON_CONNECTION */
15213
15214 {
15215 int i;
15216
15217
15218#ifdef FREECIV_JSON_CONNECTION
15219 /* Enter array. */
15220 field_addr.sub_location = plocation_elem_new(0);
15221#endif /* FREECIV_JSON_CONNECTION */
15222
15223 for (i = 0; i < O_LAST; i++) {
15224#ifdef FREECIV_JSON_CONNECTION
15225 /* Next array element */
15226 field_addr.sub_location->number = i;
15227#endif /* FREECIV_JSON_CONNECTION */
15228
15229 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
15231 }
15232 }
15233
15234#ifdef FREECIV_JSON_CONNECTION
15235 /* Exit array. */
15236 FC_FREE(field_addr.sub_location);
15237#endif /* FREECIV_JSON_CONNECTION */
15238 }
15239 }
15240
15241 if (BV_ISSET(fields, 17)) {
15242 log_packet_detailed(" got field 'waste'");
15243
15244#ifdef FREECIV_JSON_CONNECTION
15245 field_addr.name = "waste";
15246#endif /* FREECIV_JSON_CONNECTION */
15247
15248 {
15249 int i;
15250
15251
15252#ifdef FREECIV_JSON_CONNECTION
15253 /* Enter array. */
15254 field_addr.sub_location = plocation_elem_new(0);
15255#endif /* FREECIV_JSON_CONNECTION */
15256
15257 for (i = 0; i < O_LAST; i++) {
15258#ifdef FREECIV_JSON_CONNECTION
15259 /* Next array element */
15260 field_addr.sub_location->number = i;
15261#endif /* FREECIV_JSON_CONNECTION */
15262
15263 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
15265 }
15266 }
15267
15268#ifdef FREECIV_JSON_CONNECTION
15269 /* Exit array. */
15270 FC_FREE(field_addr.sub_location);
15271#endif /* FREECIV_JSON_CONNECTION */
15272 }
15273 }
15274
15275 if (BV_ISSET(fields, 18)) {
15276 log_packet_detailed(" got field 'unhappy_penalty'");
15277
15278#ifdef FREECIV_JSON_CONNECTION
15279 field_addr.name = "unhappy_penalty";
15280#endif /* FREECIV_JSON_CONNECTION */
15281
15282 {
15283 int i;
15284
15285
15286#ifdef FREECIV_JSON_CONNECTION
15287 /* Enter array. */
15288 field_addr.sub_location = plocation_elem_new(0);
15289#endif /* FREECIV_JSON_CONNECTION */
15290
15291 for (i = 0; i < O_LAST; i++) {
15292#ifdef FREECIV_JSON_CONNECTION
15293 /* Next array element */
15294 field_addr.sub_location->number = i;
15295#endif /* FREECIV_JSON_CONNECTION */
15296
15297 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
15298 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
15299 }
15300 }
15301
15302#ifdef FREECIV_JSON_CONNECTION
15303 /* Exit array. */
15304 FC_FREE(field_addr.sub_location);
15305#endif /* FREECIV_JSON_CONNECTION */
15306 }
15307 }
15308
15309 if (BV_ISSET(fields, 19)) {
15310 log_packet_detailed(" got field 'prod'");
15311
15312#ifdef FREECIV_JSON_CONNECTION
15313 field_addr.name = "prod";
15314#endif /* FREECIV_JSON_CONNECTION */
15315
15316 {
15317 int i;
15318
15319
15320#ifdef FREECIV_JSON_CONNECTION
15321 /* Enter array. */
15322 field_addr.sub_location = plocation_elem_new(0);
15323#endif /* FREECIV_JSON_CONNECTION */
15324
15325 for (i = 0; i < O_LAST; i++) {
15326#ifdef FREECIV_JSON_CONNECTION
15327 /* Next array element */
15328 field_addr.sub_location->number = i;
15329#endif /* FREECIV_JSON_CONNECTION */
15330
15331 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
15333 }
15334 }
15335
15336#ifdef FREECIV_JSON_CONNECTION
15337 /* Exit array. */
15338 FC_FREE(field_addr.sub_location);
15339#endif /* FREECIV_JSON_CONNECTION */
15340 }
15341 }
15342
15343 if (BV_ISSET(fields, 20)) {
15344 log_packet_detailed(" got field 'citizen_base'");
15345
15346#ifdef FREECIV_JSON_CONNECTION
15347 field_addr.name = "citizen_base";
15348#endif /* FREECIV_JSON_CONNECTION */
15349
15350 {
15351 int i;
15352
15353
15354#ifdef FREECIV_JSON_CONNECTION
15355 /* Enter array. */
15356 field_addr.sub_location = plocation_elem_new(0);
15357#endif /* FREECIV_JSON_CONNECTION */
15358
15359 for (i = 0; i < O_LAST; i++) {
15360#ifdef FREECIV_JSON_CONNECTION
15361 /* Next array element */
15362 field_addr.sub_location->number = i;
15363#endif /* FREECIV_JSON_CONNECTION */
15364
15365 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
15366 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
15367 }
15368 }
15369
15370#ifdef FREECIV_JSON_CONNECTION
15371 /* Exit array. */
15372 FC_FREE(field_addr.sub_location);
15373#endif /* FREECIV_JSON_CONNECTION */
15374 }
15375 }
15376
15377 if (BV_ISSET(fields, 21)) {
15378 log_packet_detailed(" got field 'usage'");
15379
15380#ifdef FREECIV_JSON_CONNECTION
15381 field_addr.name = "usage";
15382#endif /* FREECIV_JSON_CONNECTION */
15383
15384 {
15385 int i;
15386
15387
15388#ifdef FREECIV_JSON_CONNECTION
15389 /* Enter array. */
15390 field_addr.sub_location = plocation_elem_new(0);
15391#endif /* FREECIV_JSON_CONNECTION */
15392
15393 for (i = 0; i < O_LAST; i++) {
15394#ifdef FREECIV_JSON_CONNECTION
15395 /* Next array element */
15396 field_addr.sub_location->number = i;
15397#endif /* FREECIV_JSON_CONNECTION */
15398
15399 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
15401 }
15402 }
15403
15404#ifdef FREECIV_JSON_CONNECTION
15405 /* Exit array. */
15406 FC_FREE(field_addr.sub_location);
15407#endif /* FREECIV_JSON_CONNECTION */
15408 }
15409 }
15410
15411 if (BV_ISSET(fields, 22)) {
15412 log_packet_detailed(" got field 'food_stock'");
15413
15414#ifdef FREECIV_JSON_CONNECTION
15415 field_addr.name = "food_stock";
15416#endif /* FREECIV_JSON_CONNECTION */
15417
15418 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
15419 RECEIVE_PACKET_FIELD_ERROR(food_stock);
15420 }
15421 }
15422
15423 if (BV_ISSET(fields, 23)) {
15424 log_packet_detailed(" got field 'shield_stock'");
15425
15426#ifdef FREECIV_JSON_CONNECTION
15427 field_addr.name = "shield_stock";
15428#endif /* FREECIV_JSON_CONNECTION */
15429
15430 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
15431 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
15432 }
15433 }
15434
15435 if (BV_ISSET(fields, 24)) {
15436 log_packet_detailed(" got field 'trade_route_count'");
15437
15438#ifdef FREECIV_JSON_CONNECTION
15439 field_addr.name = "trade_route_count";
15440#endif /* FREECIV_JSON_CONNECTION */
15441
15442 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
15443 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
15444 }
15445 }
15446
15447 if (BV_ISSET(fields, 25)) {
15448 log_packet_detailed(" got field 'pollution'");
15449
15450#ifdef FREECIV_JSON_CONNECTION
15451 field_addr.name = "pollution";
15452#endif /* FREECIV_JSON_CONNECTION */
15453
15454 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
15455 RECEIVE_PACKET_FIELD_ERROR(pollution);
15456 }
15457 }
15458
15459 if (BV_ISSET(fields, 26)) {
15460 log_packet_detailed(" got field 'illness_trade'");
15461
15462#ifdef FREECIV_JSON_CONNECTION
15463 field_addr.name = "illness_trade";
15464#endif /* FREECIV_JSON_CONNECTION */
15465
15466 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
15467 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
15468 }
15469 }
15470
15471 if (BV_ISSET(fields, 27)) {
15472 log_packet_detailed(" got field 'production_kind'");
15473
15474#ifdef FREECIV_JSON_CONNECTION
15475 field_addr.name = "production_kind";
15476#endif /* FREECIV_JSON_CONNECTION */
15477
15478 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
15479 RECEIVE_PACKET_FIELD_ERROR(production_kind);
15480 }
15481 }
15482
15483 if (BV_ISSET(fields, 28)) {
15484 log_packet_detailed(" got field 'production_value'");
15485
15486#ifdef FREECIV_JSON_CONNECTION
15487 field_addr.name = "production_value";
15488#endif /* FREECIV_JSON_CONNECTION */
15489
15490 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
15491 RECEIVE_PACKET_FIELD_ERROR(production_value);
15492 }
15493 }
15494
15495 if (BV_ISSET(fields, 29)) {
15496 log_packet_detailed(" got field 'turn_founded'");
15497
15498#ifdef FREECIV_JSON_CONNECTION
15499 field_addr.name = "turn_founded";
15500#endif /* FREECIV_JSON_CONNECTION */
15501
15502 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
15503 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
15504 }
15505 }
15506
15507 if (BV_ISSET(fields, 30)) {
15508 log_packet_detailed(" got field 'turn_last_built'");
15509
15510#ifdef FREECIV_JSON_CONNECTION
15511 field_addr.name = "turn_last_built";
15512#endif /* FREECIV_JSON_CONNECTION */
15513
15514 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
15515 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
15516 }
15517 }
15518
15519 if (BV_ISSET(fields, 31)) {
15520 log_packet_detailed(" got field 'changed_from_kind'");
15521
15522#ifdef FREECIV_JSON_CONNECTION
15523 field_addr.name = "changed_from_kind";
15524#endif /* FREECIV_JSON_CONNECTION */
15525
15526 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
15527 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
15528 }
15529 }
15530
15531 if (BV_ISSET(fields, 32)) {
15532 log_packet_detailed(" got field 'changed_from_value'");
15533
15534#ifdef FREECIV_JSON_CONNECTION
15535 field_addr.name = "changed_from_value";
15536#endif /* FREECIV_JSON_CONNECTION */
15537
15538 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
15539 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
15540 }
15541 }
15542
15543 if (BV_ISSET(fields, 33)) {
15544 log_packet_detailed(" got field 'before_change_shields'");
15545
15546#ifdef FREECIV_JSON_CONNECTION
15547 field_addr.name = "before_change_shields";
15548#endif /* FREECIV_JSON_CONNECTION */
15549
15550 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
15551 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
15552 }
15553 }
15554
15555 if (BV_ISSET(fields, 34)) {
15556 log_packet_detailed(" got field 'disbanded_shields'");
15557
15558#ifdef FREECIV_JSON_CONNECTION
15559 field_addr.name = "disbanded_shields";
15560#endif /* FREECIV_JSON_CONNECTION */
15561
15562 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
15563 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
15564 }
15565 }
15566
15567 if (BV_ISSET(fields, 35)) {
15568 log_packet_detailed(" got field 'caravan_shields'");
15569
15570#ifdef FREECIV_JSON_CONNECTION
15571 field_addr.name = "caravan_shields";
15572#endif /* FREECIV_JSON_CONNECTION */
15573
15574 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
15575 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
15576 }
15577 }
15578
15579 if (BV_ISSET(fields, 36)) {
15580 log_packet_detailed(" got field 'last_turns_shield_surplus'");
15581
15582#ifdef FREECIV_JSON_CONNECTION
15583 field_addr.name = "last_turns_shield_surplus";
15584#endif /* FREECIV_JSON_CONNECTION */
15585
15586 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
15587 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
15588 }
15589 }
15590
15591 if (BV_ISSET(fields, 37)) {
15592 log_packet_detailed(" got field 'airlift'");
15593
15594#ifdef FREECIV_JSON_CONNECTION
15595 field_addr.name = "airlift";
15596#endif /* FREECIV_JSON_CONNECTION */
15597
15598 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
15600 }
15601 }
15602
15603 real_packet->did_buy = BV_ISSET(fields, 38);
15604
15605 real_packet->did_sell = BV_ISSET(fields, 39);
15606
15607 real_packet->was_happy = BV_ISSET(fields, 40);
15608
15609 real_packet->had_famine = BV_ISSET(fields, 41);
15610
15611 real_packet->diplomat_investigate = BV_ISSET(fields, 42);
15612
15613 if (BV_ISSET(fields, 43)) {
15614 log_packet_detailed(" got field 'walls'");
15615
15616#ifdef FREECIV_JSON_CONNECTION
15617 field_addr.name = "walls";
15618#endif /* FREECIV_JSON_CONNECTION */
15619
15620 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
15622 }
15623 }
15624
15625 if (BV_ISSET(fields, 44)) {
15626 log_packet_detailed(" got field 'city_image'");
15627
15628#ifdef FREECIV_JSON_CONNECTION
15629 field_addr.name = "city_image";
15630#endif /* FREECIV_JSON_CONNECTION */
15631
15632 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
15633 RECEIVE_PACKET_FIELD_ERROR(city_image);
15634 }
15635 }
15636
15637 if (BV_ISSET(fields, 45)) {
15638 log_packet_detailed(" got field 'steal'");
15639
15640#ifdef FREECIV_JSON_CONNECTION
15641 field_addr.name = "steal";
15642#endif /* FREECIV_JSON_CONNECTION */
15643
15644 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
15646 }
15647 }
15648
15649 if (BV_ISSET(fields, 46)) {
15650 log_packet_detailed(" got field 'worklist'");
15651
15652#ifdef FREECIV_JSON_CONNECTION
15653 field_addr.name = "worklist";
15654#endif /* FREECIV_JSON_CONNECTION */
15655
15656 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
15658 }
15659 }
15660
15661 if (BV_ISSET(fields, 47)) {
15662 log_packet_detailed(" got field 'improvements'");
15663
15664#ifdef FREECIV_JSON_CONNECTION
15665 field_addr.name = "improvements";
15666#endif /* FREECIV_JSON_CONNECTION */
15667
15668 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
15669 RECEIVE_PACKET_FIELD_ERROR(improvements);
15670 }
15671 }
15672
15673 if (BV_ISSET(fields, 48)) {
15674 log_packet_detailed(" got field 'city_options'");
15675
15676#ifdef FREECIV_JSON_CONNECTION
15677 field_addr.name = "city_options";
15678#endif /* FREECIV_JSON_CONNECTION */
15679
15680 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
15681 RECEIVE_PACKET_FIELD_ERROR(city_options);
15682 }
15683 }
15684
15685 if (BV_ISSET(fields, 49)) {
15686 log_packet_detailed(" got field 'wl_cb'");
15687
15688#ifdef FREECIV_JSON_CONNECTION
15689 field_addr.name = "wl_cb";
15690#endif /* FREECIV_JSON_CONNECTION */
15691
15692 {
15693 int readin;
15694
15695 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15697 }
15698 real_packet->wl_cb = readin;
15699 }
15700 }
15701
15702 if (BV_ISSET(fields, 50)) {
15703 log_packet_detailed(" got field 'acquire_type'");
15704
15705#ifdef FREECIV_JSON_CONNECTION
15706 field_addr.name = "acquire_type";
15707#endif /* FREECIV_JSON_CONNECTION */
15708
15709 {
15710 int readin;
15711
15712 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15713 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
15714 }
15715 real_packet->acquire_type = readin;
15716 }
15717 }
15718
15719 if (BV_ISSET(fields, 51)) {
15720 log_packet_detailed(" got field 'name'");
15721
15722#ifdef FREECIV_JSON_CONNECTION
15723 field_addr.name = "name";
15724#endif /* FREECIV_JSON_CONNECTION */
15725
15726 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
15728 }
15729 }
15730
15731 if (nullptr == old) {
15732 old = fc_malloc(sizeof(*old));
15734 *old = *real_packet;
15736 } else {
15737 *old = *real_packet;
15738 }
15739
15740 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
15741 if (nullptr != *hash) {
15743 }
15744
15745#else /* FREECIV_DELTA_PROTOCOL */
15746#ifdef FREECIV_JSON_CONNECTION
15747 field_addr.name = "tile";
15748#endif /* FREECIV_JSON_CONNECTION */
15749
15750 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
15752 }
15753
15754#ifdef FREECIV_JSON_CONNECTION
15755 field_addr.name = "owner";
15756#endif /* FREECIV_JSON_CONNECTION */
15757
15758 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
15760 }
15761
15762#ifdef FREECIV_JSON_CONNECTION
15763 field_addr.name = "original";
15764#endif /* FREECIV_JSON_CONNECTION */
15765
15766 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
15768 }
15769
15770#ifdef FREECIV_JSON_CONNECTION
15771 field_addr.name = "size";
15772#endif /* FREECIV_JSON_CONNECTION */
15773
15774 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
15776 }
15777
15778#ifdef FREECIV_JSON_CONNECTION
15779 field_addr.name = "city_radius_sq";
15780#endif /* FREECIV_JSON_CONNECTION */
15781
15782 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
15783 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
15784 }
15785
15786#ifdef FREECIV_JSON_CONNECTION
15787 field_addr.name = "style";
15788#endif /* FREECIV_JSON_CONNECTION */
15789
15790 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
15792 }
15793
15794#ifdef FREECIV_JSON_CONNECTION
15795 field_addr.name = "capital";
15796#endif /* FREECIV_JSON_CONNECTION */
15797
15798 {
15799 int readin;
15800
15801 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15803 }
15804 real_packet->capital = readin;
15805 }
15806
15807#ifdef FREECIV_JSON_CONNECTION
15808 field_addr.name = "ppl_happy";
15809#endif /* FREECIV_JSON_CONNECTION */
15810
15811 {
15812 int i;
15813
15814
15815#ifdef FREECIV_JSON_CONNECTION
15816 /* Enter array. */
15817 field_addr.sub_location = plocation_elem_new(0);
15818#endif /* FREECIV_JSON_CONNECTION */
15819
15820 for (i = 0; i < FEELING_LAST; i++) {
15821#ifdef FREECIV_JSON_CONNECTION
15822 /* Next array element */
15823 field_addr.sub_location->number = i;
15824#endif /* FREECIV_JSON_CONNECTION */
15825
15826 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
15827 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
15828 }
15829 }
15830
15831#ifdef FREECIV_JSON_CONNECTION
15832 /* Exit array. */
15833 FC_FREE(field_addr.sub_location);
15834#endif /* FREECIV_JSON_CONNECTION */
15835 }
15836
15837#ifdef FREECIV_JSON_CONNECTION
15838 field_addr.name = "ppl_content";
15839#endif /* FREECIV_JSON_CONNECTION */
15840
15841 {
15842 int i;
15843
15844
15845#ifdef FREECIV_JSON_CONNECTION
15846 /* Enter array. */
15847 field_addr.sub_location = plocation_elem_new(0);
15848#endif /* FREECIV_JSON_CONNECTION */
15849
15850 for (i = 0; i < FEELING_LAST; i++) {
15851#ifdef FREECIV_JSON_CONNECTION
15852 /* Next array element */
15853 field_addr.sub_location->number = i;
15854#endif /* FREECIV_JSON_CONNECTION */
15855
15856 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
15857 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
15858 }
15859 }
15860
15861#ifdef FREECIV_JSON_CONNECTION
15862 /* Exit array. */
15863 FC_FREE(field_addr.sub_location);
15864#endif /* FREECIV_JSON_CONNECTION */
15865 }
15866
15867#ifdef FREECIV_JSON_CONNECTION
15868 field_addr.name = "ppl_unhappy";
15869#endif /* FREECIV_JSON_CONNECTION */
15870
15871 {
15872 int i;
15873
15874
15875#ifdef FREECIV_JSON_CONNECTION
15876 /* Enter array. */
15877 field_addr.sub_location = plocation_elem_new(0);
15878#endif /* FREECIV_JSON_CONNECTION */
15879
15880 for (i = 0; i < FEELING_LAST; i++) {
15881#ifdef FREECIV_JSON_CONNECTION
15882 /* Next array element */
15883 field_addr.sub_location->number = i;
15884#endif /* FREECIV_JSON_CONNECTION */
15885
15886 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
15887 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
15888 }
15889 }
15890
15891#ifdef FREECIV_JSON_CONNECTION
15892 /* Exit array. */
15893 FC_FREE(field_addr.sub_location);
15894#endif /* FREECIV_JSON_CONNECTION */
15895 }
15896
15897#ifdef FREECIV_JSON_CONNECTION
15898 field_addr.name = "ppl_angry";
15899#endif /* FREECIV_JSON_CONNECTION */
15900
15901 {
15902 int i;
15903
15904
15905#ifdef FREECIV_JSON_CONNECTION
15906 /* Enter array. */
15907 field_addr.sub_location = plocation_elem_new(0);
15908#endif /* FREECIV_JSON_CONNECTION */
15909
15910 for (i = 0; i < FEELING_LAST; i++) {
15911#ifdef FREECIV_JSON_CONNECTION
15912 /* Next array element */
15913 field_addr.sub_location->number = i;
15914#endif /* FREECIV_JSON_CONNECTION */
15915
15916 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
15917 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
15918 }
15919 }
15920
15921#ifdef FREECIV_JSON_CONNECTION
15922 /* Exit array. */
15923 FC_FREE(field_addr.sub_location);
15924#endif /* FREECIV_JSON_CONNECTION */
15925 }
15926
15927#ifdef FREECIV_JSON_CONNECTION
15928 field_addr.name = "specialists_size";
15929#endif /* FREECIV_JSON_CONNECTION */
15930
15931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
15932 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
15933 }
15934
15935#ifdef FREECIV_JSON_CONNECTION
15936 field_addr.name = "specialists";
15937#endif /* FREECIV_JSON_CONNECTION */
15938
15939 {
15940 int i;
15941
15942 if (real_packet->specialists_size > SP_MAX) {
15943 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
15944 }
15945
15946#ifdef FREECIV_JSON_CONNECTION
15947 /* Enter array. */
15948 field_addr.sub_location = plocation_elem_new(0);
15949#endif /* FREECIV_JSON_CONNECTION */
15950
15951 for (i = 0; i < real_packet->specialists_size; i++) {
15952#ifdef FREECIV_JSON_CONNECTION
15953 /* Next array element */
15954 field_addr.sub_location->number = i;
15955#endif /* FREECIV_JSON_CONNECTION */
15956
15957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
15959 }
15960 }
15961
15962#ifdef FREECIV_JSON_CONNECTION
15963 /* Exit array. */
15964 FC_FREE(field_addr.sub_location);
15965#endif /* FREECIV_JSON_CONNECTION */
15966 }
15967
15968#ifdef FREECIV_JSON_CONNECTION
15969 field_addr.name = "history";
15970#endif /* FREECIV_JSON_CONNECTION */
15971
15972 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
15974 }
15975
15976#ifdef FREECIV_JSON_CONNECTION
15977 field_addr.name = "culture";
15978#endif /* FREECIV_JSON_CONNECTION */
15979
15980 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
15982 }
15983
15984#ifdef FREECIV_JSON_CONNECTION
15985 field_addr.name = "buy_cost";
15986#endif /* FREECIV_JSON_CONNECTION */
15987
15988 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
15990 }
15991
15992#ifdef FREECIV_JSON_CONNECTION
15993 field_addr.name = "surplus";
15994#endif /* FREECIV_JSON_CONNECTION */
15995
15996 {
15997 int i;
15998
15999
16000#ifdef FREECIV_JSON_CONNECTION
16001 /* Enter array. */
16002 field_addr.sub_location = plocation_elem_new(0);
16003#endif /* FREECIV_JSON_CONNECTION */
16004
16005 for (i = 0; i < O_LAST; i++) {
16006#ifdef FREECIV_JSON_CONNECTION
16007 /* Next array element */
16008 field_addr.sub_location->number = i;
16009#endif /* FREECIV_JSON_CONNECTION */
16010
16011 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
16013 }
16014 }
16015
16016#ifdef FREECIV_JSON_CONNECTION
16017 /* Exit array. */
16018 FC_FREE(field_addr.sub_location);
16019#endif /* FREECIV_JSON_CONNECTION */
16020 }
16021
16022#ifdef FREECIV_JSON_CONNECTION
16023 field_addr.name = "waste";
16024#endif /* FREECIV_JSON_CONNECTION */
16025
16026 {
16027 int i;
16028
16029
16030#ifdef FREECIV_JSON_CONNECTION
16031 /* Enter array. */
16032 field_addr.sub_location = plocation_elem_new(0);
16033#endif /* FREECIV_JSON_CONNECTION */
16034
16035 for (i = 0; i < O_LAST; i++) {
16036#ifdef FREECIV_JSON_CONNECTION
16037 /* Next array element */
16038 field_addr.sub_location->number = i;
16039#endif /* FREECIV_JSON_CONNECTION */
16040
16041 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
16043 }
16044 }
16045
16046#ifdef FREECIV_JSON_CONNECTION
16047 /* Exit array. */
16048 FC_FREE(field_addr.sub_location);
16049#endif /* FREECIV_JSON_CONNECTION */
16050 }
16051
16052#ifdef FREECIV_JSON_CONNECTION
16053 field_addr.name = "unhappy_penalty";
16054#endif /* FREECIV_JSON_CONNECTION */
16055
16056 {
16057 int i;
16058
16059
16060#ifdef FREECIV_JSON_CONNECTION
16061 /* Enter array. */
16062 field_addr.sub_location = plocation_elem_new(0);
16063#endif /* FREECIV_JSON_CONNECTION */
16064
16065 for (i = 0; i < O_LAST; i++) {
16066#ifdef FREECIV_JSON_CONNECTION
16067 /* Next array element */
16068 field_addr.sub_location->number = i;
16069#endif /* FREECIV_JSON_CONNECTION */
16070
16071 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
16072 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
16073 }
16074 }
16075
16076#ifdef FREECIV_JSON_CONNECTION
16077 /* Exit array. */
16078 FC_FREE(field_addr.sub_location);
16079#endif /* FREECIV_JSON_CONNECTION */
16080 }
16081
16082#ifdef FREECIV_JSON_CONNECTION
16083 field_addr.name = "prod";
16084#endif /* FREECIV_JSON_CONNECTION */
16085
16086 {
16087 int i;
16088
16089
16090#ifdef FREECIV_JSON_CONNECTION
16091 /* Enter array. */
16092 field_addr.sub_location = plocation_elem_new(0);
16093#endif /* FREECIV_JSON_CONNECTION */
16094
16095 for (i = 0; i < O_LAST; i++) {
16096#ifdef FREECIV_JSON_CONNECTION
16097 /* Next array element */
16098 field_addr.sub_location->number = i;
16099#endif /* FREECIV_JSON_CONNECTION */
16100
16101 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
16103 }
16104 }
16105
16106#ifdef FREECIV_JSON_CONNECTION
16107 /* Exit array. */
16108 FC_FREE(field_addr.sub_location);
16109#endif /* FREECIV_JSON_CONNECTION */
16110 }
16111
16112#ifdef FREECIV_JSON_CONNECTION
16113 field_addr.name = "citizen_base";
16114#endif /* FREECIV_JSON_CONNECTION */
16115
16116 {
16117 int i;
16118
16119
16120#ifdef FREECIV_JSON_CONNECTION
16121 /* Enter array. */
16122 field_addr.sub_location = plocation_elem_new(0);
16123#endif /* FREECIV_JSON_CONNECTION */
16124
16125 for (i = 0; i < O_LAST; i++) {
16126#ifdef FREECIV_JSON_CONNECTION
16127 /* Next array element */
16128 field_addr.sub_location->number = i;
16129#endif /* FREECIV_JSON_CONNECTION */
16130
16131 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
16132 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
16133 }
16134 }
16135
16136#ifdef FREECIV_JSON_CONNECTION
16137 /* Exit array. */
16138 FC_FREE(field_addr.sub_location);
16139#endif /* FREECIV_JSON_CONNECTION */
16140 }
16141
16142#ifdef FREECIV_JSON_CONNECTION
16143 field_addr.name = "usage";
16144#endif /* FREECIV_JSON_CONNECTION */
16145
16146 {
16147 int i;
16148
16149
16150#ifdef FREECIV_JSON_CONNECTION
16151 /* Enter array. */
16152 field_addr.sub_location = plocation_elem_new(0);
16153#endif /* FREECIV_JSON_CONNECTION */
16154
16155 for (i = 0; i < O_LAST; i++) {
16156#ifdef FREECIV_JSON_CONNECTION
16157 /* Next array element */
16158 field_addr.sub_location->number = i;
16159#endif /* FREECIV_JSON_CONNECTION */
16160
16161 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
16163 }
16164 }
16165
16166#ifdef FREECIV_JSON_CONNECTION
16167 /* Exit array. */
16168 FC_FREE(field_addr.sub_location);
16169#endif /* FREECIV_JSON_CONNECTION */
16170 }
16171
16172#ifdef FREECIV_JSON_CONNECTION
16173 field_addr.name = "food_stock";
16174#endif /* FREECIV_JSON_CONNECTION */
16175
16176 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
16177 RECEIVE_PACKET_FIELD_ERROR(food_stock);
16178 }
16179
16180#ifdef FREECIV_JSON_CONNECTION
16181 field_addr.name = "shield_stock";
16182#endif /* FREECIV_JSON_CONNECTION */
16183
16184 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
16185 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
16186 }
16187
16188#ifdef FREECIV_JSON_CONNECTION
16189 field_addr.name = "trade_route_count";
16190#endif /* FREECIV_JSON_CONNECTION */
16191
16192 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
16193 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
16194 }
16195
16196#ifdef FREECIV_JSON_CONNECTION
16197 field_addr.name = "pollution";
16198#endif /* FREECIV_JSON_CONNECTION */
16199
16200 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
16201 RECEIVE_PACKET_FIELD_ERROR(pollution);
16202 }
16203
16204#ifdef FREECIV_JSON_CONNECTION
16205 field_addr.name = "illness_trade";
16206#endif /* FREECIV_JSON_CONNECTION */
16207
16208 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
16209 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
16210 }
16211
16212#ifdef FREECIV_JSON_CONNECTION
16213 field_addr.name = "production_kind";
16214#endif /* FREECIV_JSON_CONNECTION */
16215
16216 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
16217 RECEIVE_PACKET_FIELD_ERROR(production_kind);
16218 }
16219
16220#ifdef FREECIV_JSON_CONNECTION
16221 field_addr.name = "production_value";
16222#endif /* FREECIV_JSON_CONNECTION */
16223
16224 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
16225 RECEIVE_PACKET_FIELD_ERROR(production_value);
16226 }
16227
16228#ifdef FREECIV_JSON_CONNECTION
16229 field_addr.name = "turn_founded";
16230#endif /* FREECIV_JSON_CONNECTION */
16231
16232 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
16233 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
16234 }
16235
16236#ifdef FREECIV_JSON_CONNECTION
16237 field_addr.name = "turn_last_built";
16238#endif /* FREECIV_JSON_CONNECTION */
16239
16240 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
16241 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
16242 }
16243
16244#ifdef FREECIV_JSON_CONNECTION
16245 field_addr.name = "changed_from_kind";
16246#endif /* FREECIV_JSON_CONNECTION */
16247
16248 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
16249 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
16250 }
16251
16252#ifdef FREECIV_JSON_CONNECTION
16253 field_addr.name = "changed_from_value";
16254#endif /* FREECIV_JSON_CONNECTION */
16255
16256 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
16257 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
16258 }
16259
16260#ifdef FREECIV_JSON_CONNECTION
16261 field_addr.name = "before_change_shields";
16262#endif /* FREECIV_JSON_CONNECTION */
16263
16264 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
16265 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
16266 }
16267
16268#ifdef FREECIV_JSON_CONNECTION
16269 field_addr.name = "disbanded_shields";
16270#endif /* FREECIV_JSON_CONNECTION */
16271
16272 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
16273 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
16274 }
16275
16276#ifdef FREECIV_JSON_CONNECTION
16277 field_addr.name = "caravan_shields";
16278#endif /* FREECIV_JSON_CONNECTION */
16279
16280 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
16281 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
16282 }
16283
16284#ifdef FREECIV_JSON_CONNECTION
16285 field_addr.name = "last_turns_shield_surplus";
16286#endif /* FREECIV_JSON_CONNECTION */
16287
16288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
16289 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
16290 }
16291
16292#ifdef FREECIV_JSON_CONNECTION
16293 field_addr.name = "airlift";
16294#endif /* FREECIV_JSON_CONNECTION */
16295
16296 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
16298 }
16299
16300#ifdef FREECIV_JSON_CONNECTION
16301 field_addr.name = "did_buy";
16302#endif /* FREECIV_JSON_CONNECTION */
16303
16304 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
16306 }
16307
16308#ifdef FREECIV_JSON_CONNECTION
16309 field_addr.name = "did_sell";
16310#endif /* FREECIV_JSON_CONNECTION */
16311
16312 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
16314 }
16315
16316#ifdef FREECIV_JSON_CONNECTION
16317 field_addr.name = "was_happy";
16318#endif /* FREECIV_JSON_CONNECTION */
16319
16320 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
16321 RECEIVE_PACKET_FIELD_ERROR(was_happy);
16322 }
16323
16324#ifdef FREECIV_JSON_CONNECTION
16325 field_addr.name = "had_famine";
16326#endif /* FREECIV_JSON_CONNECTION */
16327
16328 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
16329 RECEIVE_PACKET_FIELD_ERROR(had_famine);
16330 }
16331
16332#ifdef FREECIV_JSON_CONNECTION
16333 field_addr.name = "diplomat_investigate";
16334#endif /* FREECIV_JSON_CONNECTION */
16335
16336 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->diplomat_investigate)) {
16338 }
16339
16340#ifdef FREECIV_JSON_CONNECTION
16341 field_addr.name = "walls";
16342#endif /* FREECIV_JSON_CONNECTION */
16343
16344 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
16346 }
16347
16348#ifdef FREECIV_JSON_CONNECTION
16349 field_addr.name = "city_image";
16350#endif /* FREECIV_JSON_CONNECTION */
16351
16352 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
16353 RECEIVE_PACKET_FIELD_ERROR(city_image);
16354 }
16355
16356#ifdef FREECIV_JSON_CONNECTION
16357 field_addr.name = "steal";
16358#endif /* FREECIV_JSON_CONNECTION */
16359
16360 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
16362 }
16363
16364#ifdef FREECIV_JSON_CONNECTION
16365 field_addr.name = "worklist";
16366#endif /* FREECIV_JSON_CONNECTION */
16367
16368 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
16370 }
16371
16372#ifdef FREECIV_JSON_CONNECTION
16373 field_addr.name = "improvements";
16374#endif /* FREECIV_JSON_CONNECTION */
16375
16376 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
16377 RECEIVE_PACKET_FIELD_ERROR(improvements);
16378 }
16379
16380#ifdef FREECIV_JSON_CONNECTION
16381 field_addr.name = "city_options";
16382#endif /* FREECIV_JSON_CONNECTION */
16383
16384 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
16385 RECEIVE_PACKET_FIELD_ERROR(city_options);
16386 }
16387
16388#ifdef FREECIV_JSON_CONNECTION
16389 field_addr.name = "wl_cb";
16390#endif /* FREECIV_JSON_CONNECTION */
16391
16392 {
16393 int readin;
16394
16395 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16397 }
16398 real_packet->wl_cb = readin;
16399 }
16400
16401#ifdef FREECIV_JSON_CONNECTION
16402 field_addr.name = "acquire_type";
16403#endif /* FREECIV_JSON_CONNECTION */
16404
16405 {
16406 int readin;
16407
16408 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16409 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
16410 }
16411 real_packet->acquire_type = readin;
16412 }
16413
16414#ifdef FREECIV_JSON_CONNECTION
16415 field_addr.name = "name";
16416#endif /* FREECIV_JSON_CONNECTION */
16417
16418 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
16420 }
16421#endif /* FREECIV_DELTA_PROTOCOL */
16422
16424#undef FREE_PACKET_STRUCT
16425}
16426
16427static int send_packet_city_info_100(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
16428{
16429 const struct packet_city_info *real_packet = packet;
16430 int e;
16432
16433 log_packet_detailed("packet_city_info_100: sending info about (%d)",
16434 real_packet->id);
16435
16436#ifdef FREECIV_DELTA_PROTOCOL
16438 struct packet_city_info *old;
16439 bool differ;
16440 int different = force_to_send;
16441 struct genhash **hash = pc->phs.sent + PACKET_CITY_INFO;
16442
16443 if (nullptr == *hash) {
16445 nullptr, nullptr, nullptr, destroy_packet_city_info);
16446 }
16447 BV_CLR_ALL(fields);
16448
16449 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
16450 old = fc_malloc(sizeof(*old));
16451 /* temporary bitcopy just to insert correctly */
16452 *old = *real_packet;
16455 different = 1; /* Force to send. */
16456 }
16457
16458 differ = (old->tile != real_packet->tile);
16459 if (differ) {
16460 different++;
16461 BV_SET(fields, 0);
16462 }
16463
16464 differ = (old->owner != real_packet->owner);
16465 if (differ) {
16466 different++;
16467 BV_SET(fields, 1);
16468 }
16469
16470 differ = (old->original != real_packet->original);
16471 if (differ) {
16472 different++;
16473 BV_SET(fields, 2);
16474 }
16475
16476 differ = (old->size != real_packet->size);
16477 if (differ) {
16478 different++;
16479 BV_SET(fields, 3);
16480 }
16481
16482 differ = (old->city_radius_sq != real_packet->city_radius_sq);
16483 if (differ) {
16484 different++;
16485 BV_SET(fields, 4);
16486 }
16487
16488 differ = (old->style != real_packet->style);
16489 if (differ) {
16490 different++;
16491 BV_SET(fields, 5);
16492 }
16493
16494 differ = (old->capital != real_packet->capital);
16495 if (differ) {
16496 different++;
16497 BV_SET(fields, 6);
16498 }
16499
16500 differ = FALSE;
16501 {
16502 int i;
16503
16504 for (i = 0; i < FEELING_LAST; i++) {
16505 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
16506 if (differ) {
16507 break;
16508 }
16509 }
16510 }
16511 if (differ) {
16512 different++;
16513 BV_SET(fields, 7);
16514 }
16515
16516 differ = FALSE;
16517 {
16518 int i;
16519
16520 for (i = 0; i < FEELING_LAST; i++) {
16521 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
16522 if (differ) {
16523 break;
16524 }
16525 }
16526 }
16527 if (differ) {
16528 different++;
16529 BV_SET(fields, 8);
16530 }
16531
16532 differ = FALSE;
16533 {
16534 int i;
16535
16536 for (i = 0; i < FEELING_LAST; i++) {
16537 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
16538 if (differ) {
16539 break;
16540 }
16541 }
16542 }
16543 if (differ) {
16544 different++;
16545 BV_SET(fields, 9);
16546 }
16547
16548 differ = FALSE;
16549 {
16550 int i;
16551
16552 for (i = 0; i < FEELING_LAST; i++) {
16553 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
16554 if (differ) {
16555 break;
16556 }
16557 }
16558 }
16559 if (differ) {
16560 different++;
16561 BV_SET(fields, 10);
16562 }
16563
16564 differ = (old->specialists_size != real_packet->specialists_size);
16565 if (differ) {
16566 different++;
16567 BV_SET(fields, 11);
16568 }
16569
16570 differ = (old->specialists_size != real_packet->specialists_size);
16571 if (!differ) {
16572 int i;
16573
16574 for (i = 0; i < old->specialists_size; i++) {
16575 differ = (old->specialists[i] != real_packet->specialists[i]);
16576 if (differ) {
16577 break;
16578 }
16579 }
16580 }
16581 if (differ) {
16582 different++;
16583 BV_SET(fields, 12);
16584 }
16585
16586 differ = (old->history != real_packet->history);
16587 if (differ) {
16588 different++;
16589 BV_SET(fields, 13);
16590 }
16591
16592 differ = (old->culture != real_packet->culture);
16593 if (differ) {
16594 different++;
16595 BV_SET(fields, 14);
16596 }
16597
16598 differ = (old->buy_cost != real_packet->buy_cost);
16599 if (differ) {
16600 different++;
16601 BV_SET(fields, 15);
16602 }
16603
16604 differ = FALSE;
16605 {
16606 int i;
16607
16608 for (i = 0; i < O_LAST; i++) {
16609 differ = (old->surplus[i] != real_packet->surplus[i]);
16610 if (differ) {
16611 break;
16612 }
16613 }
16614 }
16615 if (differ) {
16616 different++;
16617 BV_SET(fields, 16);
16618 }
16619
16620 differ = FALSE;
16621 {
16622 int i;
16623
16624 for (i = 0; i < O_LAST; i++) {
16625 differ = (old->waste[i] != real_packet->waste[i]);
16626 if (differ) {
16627 break;
16628 }
16629 }
16630 }
16631 if (differ) {
16632 different++;
16633 BV_SET(fields, 17);
16634 }
16635
16636 differ = FALSE;
16637 {
16638 int i;
16639
16640 for (i = 0; i < O_LAST; i++) {
16641 differ = (old->unhappy_penalty[i] != real_packet->unhappy_penalty[i]);
16642 if (differ) {
16643 break;
16644 }
16645 }
16646 }
16647 if (differ) {
16648 different++;
16649 BV_SET(fields, 18);
16650 }
16651
16652 differ = FALSE;
16653 {
16654 int i;
16655
16656 for (i = 0; i < O_LAST; i++) {
16657 differ = (old->prod[i] != real_packet->prod[i]);
16658 if (differ) {
16659 break;
16660 }
16661 }
16662 }
16663 if (differ) {
16664 different++;
16665 BV_SET(fields, 19);
16666 }
16667
16668 differ = FALSE;
16669 {
16670 int i;
16671
16672 for (i = 0; i < O_LAST; i++) {
16673 differ = (old->citizen_base[i] != real_packet->citizen_base[i]);
16674 if (differ) {
16675 break;
16676 }
16677 }
16678 }
16679 if (differ) {
16680 different++;
16681 BV_SET(fields, 20);
16682 }
16683
16684 differ = FALSE;
16685 {
16686 int i;
16687
16688 for (i = 0; i < O_LAST; i++) {
16689 differ = (old->usage[i] != real_packet->usage[i]);
16690 if (differ) {
16691 break;
16692 }
16693 }
16694 }
16695 if (differ) {
16696 different++;
16697 BV_SET(fields, 21);
16698 }
16699
16700 differ = (old->food_stock != real_packet->food_stock);
16701 if (differ) {
16702 different++;
16703 BV_SET(fields, 22);
16704 }
16705
16706 differ = (old->shield_stock != real_packet->shield_stock);
16707 if (differ) {
16708 different++;
16709 BV_SET(fields, 23);
16710 }
16711
16712 differ = (old->trade_route_count != real_packet->trade_route_count);
16713 if (differ) {
16714 different++;
16715 BV_SET(fields, 24);
16716 }
16717
16718 differ = (old->pollution != real_packet->pollution);
16719 if (differ) {
16720 different++;
16721 BV_SET(fields, 25);
16722 }
16723
16724 differ = (old->illness_trade != real_packet->illness_trade);
16725 if (differ) {
16726 different++;
16727 BV_SET(fields, 26);
16728 }
16729
16730 differ = (old->production_kind != real_packet->production_kind);
16731 if (differ) {
16732 different++;
16733 BV_SET(fields, 27);
16734 }
16735
16736 differ = (old->production_value != real_packet->production_value);
16737 if (differ) {
16738 different++;
16739 BV_SET(fields, 28);
16740 }
16741
16742 differ = (old->turn_founded != real_packet->turn_founded);
16743 if (differ) {
16744 different++;
16745 BV_SET(fields, 29);
16746 }
16747
16748 differ = (old->turn_last_built != real_packet->turn_last_built);
16749 if (differ) {
16750 different++;
16751 BV_SET(fields, 30);
16752 }
16753
16754 differ = (old->changed_from_kind != real_packet->changed_from_kind);
16755 if (differ) {
16756 different++;
16757 BV_SET(fields, 31);
16758 }
16759
16760 differ = (old->changed_from_value != real_packet->changed_from_value);
16761 if (differ) {
16762 different++;
16763 BV_SET(fields, 32);
16764 }
16765
16766 differ = (old->before_change_shields != real_packet->before_change_shields);
16767 if (differ) {
16768 different++;
16769 BV_SET(fields, 33);
16770 }
16771
16772 differ = (old->disbanded_shields != real_packet->disbanded_shields);
16773 if (differ) {
16774 different++;
16775 BV_SET(fields, 34);
16776 }
16777
16778 differ = (old->caravan_shields != real_packet->caravan_shields);
16779 if (differ) {
16780 different++;
16781 BV_SET(fields, 35);
16782 }
16783
16784 differ = (old->last_turns_shield_surplus != real_packet->last_turns_shield_surplus);
16785 if (differ) {
16786 different++;
16787 BV_SET(fields, 36);
16788 }
16789
16790 differ = (old->airlift != real_packet->airlift);
16791 if (differ) {
16792 different++;
16793 BV_SET(fields, 37);
16794 }
16795
16796 differ = (old->did_buy != real_packet->did_buy);
16797 if (differ) {
16798 different++;
16799 }
16800 /* folded into head */
16801 if (real_packet->did_buy) {
16802 BV_SET(fields, 38);
16803 }
16804
16805 differ = (old->did_sell != real_packet->did_sell);
16806 if (differ) {
16807 different++;
16808 }
16809 /* folded into head */
16810 if (real_packet->did_sell) {
16811 BV_SET(fields, 39);
16812 }
16813
16814 differ = (old->was_happy != real_packet->was_happy);
16815 if (differ) {
16816 different++;
16817 }
16818 /* folded into head */
16819 if (real_packet->was_happy) {
16820 BV_SET(fields, 40);
16821 }
16822
16823 differ = (old->had_famine != real_packet->had_famine);
16824 if (differ) {
16825 different++;
16826 }
16827 /* folded into head */
16828 if (real_packet->had_famine) {
16829 BV_SET(fields, 41);
16830 }
16831
16832 differ = (old->diplomat_investigate != real_packet->diplomat_investigate);
16833 if (differ) {
16834 different++;
16835 }
16836 /* folded into head */
16837 if (real_packet->diplomat_investigate) {
16838 BV_SET(fields, 42);
16839 }
16840
16841 differ = (old->walls != real_packet->walls);
16842 if (differ) {
16843 different++;
16844 BV_SET(fields, 43);
16845 }
16846
16847 differ = (old->city_image != real_packet->city_image);
16848 if (differ) {
16849 different++;
16850 BV_SET(fields, 44);
16851 }
16852
16853 differ = (old->steal != real_packet->steal);
16854 if (differ) {
16855 different++;
16856 BV_SET(fields, 45);
16857 }
16858
16859 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
16860 if (differ) {
16861 different++;
16862 BV_SET(fields, 46);
16863 }
16864
16865 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
16866 if (differ) {
16867 different++;
16868 BV_SET(fields, 47);
16869 }
16870
16871 differ = !BV_ARE_EQUAL(old->city_options, real_packet->city_options);
16872 if (differ) {
16873 different++;
16874 BV_SET(fields, 48);
16875 }
16876
16877 differ = (old->wl_cb != real_packet->wl_cb);
16878 if (differ) {
16879 different++;
16880 BV_SET(fields, 49);
16881 }
16882
16883 differ = (old->acquire_type != real_packet->acquire_type);
16884 if (differ) {
16885 different++;
16886 BV_SET(fields, 50);
16887 }
16888
16889 differ = (strcmp(old->name, real_packet->name) != 0);
16890 if (differ) {
16891 different++;
16892 BV_SET(fields, 51);
16893 }
16894
16895 if (different == 0) {
16896 log_packet_detailed(" no change -> discard");
16898 }
16899#endif /* FREECIV_DELTA_PROTOCOL */
16900
16901#ifdef FREECIV_JSON_CONNECTION
16902 struct plocation field_addr;
16903 {
16904 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
16907 }
16908#endif /* FREECIV_JSON_CONNECTION */
16909
16910#ifdef FREECIV_JSON_CONNECTION
16911 field_addr.name = "id";
16912#endif /* FREECIV_JSON_CONNECTION */
16913 e = 0;
16914
16915 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
16916
16917 if (e) {
16918 log_packet_detailed("'id' field error detected");
16919 }
16920
16921#ifdef FREECIV_DELTA_PROTOCOL
16922#ifdef FREECIV_JSON_CONNECTION
16923 field_addr.name = "fields";
16924#endif /* FREECIV_JSON_CONNECTION */
16925 e = 0;
16926 e |= DIO_BV_PUT(&dout, &field_addr, fields);
16927 if (e) {
16928 log_packet_detailed("fields bitvector error detected");
16929 }
16930
16931 if (BV_ISSET(fields, 0)) {
16932 log_packet_detailed(" field 'tile' has changed");
16933
16934#ifdef FREECIV_JSON_CONNECTION
16935 field_addr.name = "tile";
16936#endif /* FREECIV_JSON_CONNECTION */
16937 e = 0;
16938
16939 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
16940
16941 if (e) {
16942 log_packet_detailed("'tile' field error detected");
16943 }
16944 }
16945
16946 if (BV_ISSET(fields, 1)) {
16947 log_packet_detailed(" field 'owner' has changed");
16948
16949#ifdef FREECIV_JSON_CONNECTION
16950 field_addr.name = "owner";
16951#endif /* FREECIV_JSON_CONNECTION */
16952 e = 0;
16953
16954 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
16955
16956 if (e) {
16957 log_packet_detailed("'owner' field error detected");
16958 }
16959 }
16960
16961 if (BV_ISSET(fields, 2)) {
16962 log_packet_detailed(" field 'original' has changed");
16963
16964#ifdef FREECIV_JSON_CONNECTION
16965 field_addr.name = "original";
16966#endif /* FREECIV_JSON_CONNECTION */
16967 e = 0;
16968
16969 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
16970
16971 if (e) {
16972 log_packet_detailed("'original' field error detected");
16973 }
16974 }
16975
16976 if (BV_ISSET(fields, 3)) {
16977 log_packet_detailed(" field 'size' has changed");
16978
16979#ifdef FREECIV_JSON_CONNECTION
16980 field_addr.name = "size";
16981#endif /* FREECIV_JSON_CONNECTION */
16982 e = 0;
16983
16984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
16985
16986 if (e) {
16987 log_packet_detailed("'size' field error detected");
16988 }
16989 }
16990
16991 if (BV_ISSET(fields, 4)) {
16992 log_packet_detailed(" field 'city_radius_sq' has changed");
16993
16994#ifdef FREECIV_JSON_CONNECTION
16995 field_addr.name = "city_radius_sq";
16996#endif /* FREECIV_JSON_CONNECTION */
16997 e = 0;
16998
16999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
17000
17001 if (e) {
17002 log_packet_detailed("'city_radius_sq' field error detected");
17003 }
17004 }
17005
17006 if (BV_ISSET(fields, 5)) {
17007 log_packet_detailed(" field 'style' has changed");
17008
17009#ifdef FREECIV_JSON_CONNECTION
17010 field_addr.name = "style";
17011#endif /* FREECIV_JSON_CONNECTION */
17012 e = 0;
17013
17014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17015
17016 if (e) {
17017 log_packet_detailed("'style' field error detected");
17018 }
17019 }
17020
17021 if (BV_ISSET(fields, 6)) {
17022 log_packet_detailed(" field 'capital' has changed");
17023
17024#ifdef FREECIV_JSON_CONNECTION
17025 field_addr.name = "capital";
17026#endif /* FREECIV_JSON_CONNECTION */
17027 e = 0;
17028
17029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17030
17031 if (e) {
17032 log_packet_detailed("'capital' field error detected");
17033 }
17034 }
17035
17036 if (BV_ISSET(fields, 7)) {
17037 log_packet_detailed(" field 'ppl_happy' has changed");
17038
17039#ifdef FREECIV_JSON_CONNECTION
17040 field_addr.name = "ppl_happy";
17041#endif /* FREECIV_JSON_CONNECTION */
17042 e = 0;
17043
17044 {
17045 int i;
17046
17047#ifdef FREECIV_JSON_CONNECTION
17048 /* Create the array. */
17050
17051 /* Enter array. */
17052 field_addr.sub_location = plocation_elem_new(0);
17053#endif /* FREECIV_JSON_CONNECTION */
17054
17055 for (i = 0; i < FEELING_LAST; i++) {
17056#ifdef FREECIV_JSON_CONNECTION
17057 /* Next array element. */
17058 field_addr.sub_location->number = i;
17059#endif /* FREECIV_JSON_CONNECTION */
17060
17061 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
17062 }
17063
17064#ifdef FREECIV_JSON_CONNECTION
17065 /* Exit array. */
17066 FC_FREE(field_addr.sub_location);
17067#endif /* FREECIV_JSON_CONNECTION */
17068 }
17069
17070 if (e) {
17071 log_packet_detailed("'ppl_happy' field error detected");
17072 }
17073 }
17074
17075 if (BV_ISSET(fields, 8)) {
17076 log_packet_detailed(" field 'ppl_content' has changed");
17077
17078#ifdef FREECIV_JSON_CONNECTION
17079 field_addr.name = "ppl_content";
17080#endif /* FREECIV_JSON_CONNECTION */
17081 e = 0;
17082
17083 {
17084 int i;
17085
17086#ifdef FREECIV_JSON_CONNECTION
17087 /* Create the array. */
17089
17090 /* Enter array. */
17091 field_addr.sub_location = plocation_elem_new(0);
17092#endif /* FREECIV_JSON_CONNECTION */
17093
17094 for (i = 0; i < FEELING_LAST; i++) {
17095#ifdef FREECIV_JSON_CONNECTION
17096 /* Next array element. */
17097 field_addr.sub_location->number = i;
17098#endif /* FREECIV_JSON_CONNECTION */
17099
17100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
17101 }
17102
17103#ifdef FREECIV_JSON_CONNECTION
17104 /* Exit array. */
17105 FC_FREE(field_addr.sub_location);
17106#endif /* FREECIV_JSON_CONNECTION */
17107 }
17108
17109 if (e) {
17110 log_packet_detailed("'ppl_content' field error detected");
17111 }
17112 }
17113
17114 if (BV_ISSET(fields, 9)) {
17115 log_packet_detailed(" field 'ppl_unhappy' has changed");
17116
17117#ifdef FREECIV_JSON_CONNECTION
17118 field_addr.name = "ppl_unhappy";
17119#endif /* FREECIV_JSON_CONNECTION */
17120 e = 0;
17121
17122 {
17123 int i;
17124
17125#ifdef FREECIV_JSON_CONNECTION
17126 /* Create the array. */
17128
17129 /* Enter array. */
17130 field_addr.sub_location = plocation_elem_new(0);
17131#endif /* FREECIV_JSON_CONNECTION */
17132
17133 for (i = 0; i < FEELING_LAST; i++) {
17134#ifdef FREECIV_JSON_CONNECTION
17135 /* Next array element. */
17136 field_addr.sub_location->number = i;
17137#endif /* FREECIV_JSON_CONNECTION */
17138
17139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
17140 }
17141
17142#ifdef FREECIV_JSON_CONNECTION
17143 /* Exit array. */
17144 FC_FREE(field_addr.sub_location);
17145#endif /* FREECIV_JSON_CONNECTION */
17146 }
17147
17148 if (e) {
17149 log_packet_detailed("'ppl_unhappy' field error detected");
17150 }
17151 }
17152
17153 if (BV_ISSET(fields, 10)) {
17154 log_packet_detailed(" field 'ppl_angry' has changed");
17155
17156#ifdef FREECIV_JSON_CONNECTION
17157 field_addr.name = "ppl_angry";
17158#endif /* FREECIV_JSON_CONNECTION */
17159 e = 0;
17160
17161 {
17162 int i;
17163
17164#ifdef FREECIV_JSON_CONNECTION
17165 /* Create the array. */
17167
17168 /* Enter array. */
17169 field_addr.sub_location = plocation_elem_new(0);
17170#endif /* FREECIV_JSON_CONNECTION */
17171
17172 for (i = 0; i < FEELING_LAST; i++) {
17173#ifdef FREECIV_JSON_CONNECTION
17174 /* Next array element. */
17175 field_addr.sub_location->number = i;
17176#endif /* FREECIV_JSON_CONNECTION */
17177
17178 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
17179 }
17180
17181#ifdef FREECIV_JSON_CONNECTION
17182 /* Exit array. */
17183 FC_FREE(field_addr.sub_location);
17184#endif /* FREECIV_JSON_CONNECTION */
17185 }
17186
17187 if (e) {
17188 log_packet_detailed("'ppl_angry' field error detected");
17189 }
17190 }
17191
17192 if (BV_ISSET(fields, 11)) {
17193 log_packet_detailed(" field 'specialists_size' has changed");
17194
17195#ifdef FREECIV_JSON_CONNECTION
17196 field_addr.name = "specialists_size";
17197#endif /* FREECIV_JSON_CONNECTION */
17198 e = 0;
17199
17200 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
17201
17202 if (e) {
17203 log_packet_detailed("'specialists_size' field error detected");
17204 }
17205 }
17206
17207 if (BV_ISSET(fields, 12)) {
17208 log_packet_detailed(" field 'specialists' has changed");
17209
17210#ifdef FREECIV_JSON_CONNECTION
17211 field_addr.name = "specialists";
17212#endif /* FREECIV_JSON_CONNECTION */
17213 e = 0;
17214
17215 {
17216 int i;
17217
17218#ifdef FREECIV_JSON_CONNECTION
17219 /* Create the array. */
17220 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
17221
17222 /* Enter array. */
17223 field_addr.sub_location = plocation_elem_new(0);
17224#endif /* FREECIV_JSON_CONNECTION */
17225
17226 for (i = 0; i < real_packet->specialists_size; i++) {
17227#ifdef FREECIV_JSON_CONNECTION
17228 /* Next array element. */
17229 field_addr.sub_location->number = i;
17230#endif /* FREECIV_JSON_CONNECTION */
17231
17232 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
17233 }
17234
17235#ifdef FREECIV_JSON_CONNECTION
17236 /* Exit array. */
17237 FC_FREE(field_addr.sub_location);
17238#endif /* FREECIV_JSON_CONNECTION */
17239 }
17240
17241 if (e) {
17242 log_packet_detailed("'specialists' field error detected");
17243 }
17244 }
17245
17246 if (BV_ISSET(fields, 13)) {
17247 log_packet_detailed(" field 'history' has changed");
17248
17249#ifdef FREECIV_JSON_CONNECTION
17250 field_addr.name = "history";
17251#endif /* FREECIV_JSON_CONNECTION */
17252 e = 0;
17253
17254 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
17255
17256 if (e) {
17257 log_packet_detailed("'history' field error detected");
17258 }
17259 }
17260
17261 if (BV_ISSET(fields, 14)) {
17262 log_packet_detailed(" field 'culture' has changed");
17263
17264#ifdef FREECIV_JSON_CONNECTION
17265 field_addr.name = "culture";
17266#endif /* FREECIV_JSON_CONNECTION */
17267 e = 0;
17268
17269 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
17270
17271 if (e) {
17272 log_packet_detailed("'culture' field error detected");
17273 }
17274 }
17275
17276 if (BV_ISSET(fields, 15)) {
17277 log_packet_detailed(" field 'buy_cost' has changed");
17278
17279#ifdef FREECIV_JSON_CONNECTION
17280 field_addr.name = "buy_cost";
17281#endif /* FREECIV_JSON_CONNECTION */
17282 e = 0;
17283
17284 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
17285
17286 if (e) {
17287 log_packet_detailed("'buy_cost' field error detected");
17288 }
17289 }
17290
17291 if (BV_ISSET(fields, 16)) {
17292 log_packet_detailed(" field 'surplus' has changed");
17293
17294#ifdef FREECIV_JSON_CONNECTION
17295 field_addr.name = "surplus";
17296#endif /* FREECIV_JSON_CONNECTION */
17297 e = 0;
17298
17299 {
17300 int i;
17301
17302#ifdef FREECIV_JSON_CONNECTION
17303 /* Create the array. */
17304 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17305
17306 /* Enter array. */
17307 field_addr.sub_location = plocation_elem_new(0);
17308#endif /* FREECIV_JSON_CONNECTION */
17309
17310 for (i = 0; i < O_LAST; i++) {
17311#ifdef FREECIV_JSON_CONNECTION
17312 /* Next array element. */
17313 field_addr.sub_location->number = i;
17314#endif /* FREECIV_JSON_CONNECTION */
17315
17316 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
17317 }
17318
17319#ifdef FREECIV_JSON_CONNECTION
17320 /* Exit array. */
17321 FC_FREE(field_addr.sub_location);
17322#endif /* FREECIV_JSON_CONNECTION */
17323 }
17324
17325 if (e) {
17326 log_packet_detailed("'surplus' field error detected");
17327 }
17328 }
17329
17330 if (BV_ISSET(fields, 17)) {
17331 log_packet_detailed(" field 'waste' has changed");
17332
17333#ifdef FREECIV_JSON_CONNECTION
17334 field_addr.name = "waste";
17335#endif /* FREECIV_JSON_CONNECTION */
17336 e = 0;
17337
17338 {
17339 int i;
17340
17341#ifdef FREECIV_JSON_CONNECTION
17342 /* Create the array. */
17343 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17344
17345 /* Enter array. */
17346 field_addr.sub_location = plocation_elem_new(0);
17347#endif /* FREECIV_JSON_CONNECTION */
17348
17349 for (i = 0; i < O_LAST; i++) {
17350#ifdef FREECIV_JSON_CONNECTION
17351 /* Next array element. */
17352 field_addr.sub_location->number = i;
17353#endif /* FREECIV_JSON_CONNECTION */
17354
17355 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
17356 }
17357
17358#ifdef FREECIV_JSON_CONNECTION
17359 /* Exit array. */
17360 FC_FREE(field_addr.sub_location);
17361#endif /* FREECIV_JSON_CONNECTION */
17362 }
17363
17364 if (e) {
17365 log_packet_detailed("'waste' field error detected");
17366 }
17367 }
17368
17369 if (BV_ISSET(fields, 18)) {
17370 log_packet_detailed(" field 'unhappy_penalty' has changed");
17371
17372#ifdef FREECIV_JSON_CONNECTION
17373 field_addr.name = "unhappy_penalty";
17374#endif /* FREECIV_JSON_CONNECTION */
17375 e = 0;
17376
17377 {
17378 int i;
17379
17380#ifdef FREECIV_JSON_CONNECTION
17381 /* Create the array. */
17382 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17383
17384 /* Enter array. */
17385 field_addr.sub_location = plocation_elem_new(0);
17386#endif /* FREECIV_JSON_CONNECTION */
17387
17388 for (i = 0; i < O_LAST; i++) {
17389#ifdef FREECIV_JSON_CONNECTION
17390 /* Next array element. */
17391 field_addr.sub_location->number = i;
17392#endif /* FREECIV_JSON_CONNECTION */
17393
17394 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
17395 }
17396
17397#ifdef FREECIV_JSON_CONNECTION
17398 /* Exit array. */
17399 FC_FREE(field_addr.sub_location);
17400#endif /* FREECIV_JSON_CONNECTION */
17401 }
17402
17403 if (e) {
17404 log_packet_detailed("'unhappy_penalty' field error detected");
17405 }
17406 }
17407
17408 if (BV_ISSET(fields, 19)) {
17409 log_packet_detailed(" field 'prod' has changed");
17410
17411#ifdef FREECIV_JSON_CONNECTION
17412 field_addr.name = "prod";
17413#endif /* FREECIV_JSON_CONNECTION */
17414 e = 0;
17415
17416 {
17417 int i;
17418
17419#ifdef FREECIV_JSON_CONNECTION
17420 /* Create the array. */
17421 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17422
17423 /* Enter array. */
17424 field_addr.sub_location = plocation_elem_new(0);
17425#endif /* FREECIV_JSON_CONNECTION */
17426
17427 for (i = 0; i < O_LAST; i++) {
17428#ifdef FREECIV_JSON_CONNECTION
17429 /* Next array element. */
17430 field_addr.sub_location->number = i;
17431#endif /* FREECIV_JSON_CONNECTION */
17432
17433 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
17434 }
17435
17436#ifdef FREECIV_JSON_CONNECTION
17437 /* Exit array. */
17438 FC_FREE(field_addr.sub_location);
17439#endif /* FREECIV_JSON_CONNECTION */
17440 }
17441
17442 if (e) {
17443 log_packet_detailed("'prod' field error detected");
17444 }
17445 }
17446
17447 if (BV_ISSET(fields, 20)) {
17448 log_packet_detailed(" field 'citizen_base' has changed");
17449
17450#ifdef FREECIV_JSON_CONNECTION
17451 field_addr.name = "citizen_base";
17452#endif /* FREECIV_JSON_CONNECTION */
17453 e = 0;
17454
17455 {
17456 int i;
17457
17458#ifdef FREECIV_JSON_CONNECTION
17459 /* Create the array. */
17460 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17461
17462 /* Enter array. */
17463 field_addr.sub_location = plocation_elem_new(0);
17464#endif /* FREECIV_JSON_CONNECTION */
17465
17466 for (i = 0; i < O_LAST; i++) {
17467#ifdef FREECIV_JSON_CONNECTION
17468 /* Next array element. */
17469 field_addr.sub_location->number = i;
17470#endif /* FREECIV_JSON_CONNECTION */
17471
17472 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
17473 }
17474
17475#ifdef FREECIV_JSON_CONNECTION
17476 /* Exit array. */
17477 FC_FREE(field_addr.sub_location);
17478#endif /* FREECIV_JSON_CONNECTION */
17479 }
17480
17481 if (e) {
17482 log_packet_detailed("'citizen_base' field error detected");
17483 }
17484 }
17485
17486 if (BV_ISSET(fields, 21)) {
17487 log_packet_detailed(" field 'usage' has changed");
17488
17489#ifdef FREECIV_JSON_CONNECTION
17490 field_addr.name = "usage";
17491#endif /* FREECIV_JSON_CONNECTION */
17492 e = 0;
17493
17494 {
17495 int i;
17496
17497#ifdef FREECIV_JSON_CONNECTION
17498 /* Create the array. */
17499 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17500
17501 /* Enter array. */
17502 field_addr.sub_location = plocation_elem_new(0);
17503#endif /* FREECIV_JSON_CONNECTION */
17504
17505 for (i = 0; i < O_LAST; i++) {
17506#ifdef FREECIV_JSON_CONNECTION
17507 /* Next array element. */
17508 field_addr.sub_location->number = i;
17509#endif /* FREECIV_JSON_CONNECTION */
17510
17511 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
17512 }
17513
17514#ifdef FREECIV_JSON_CONNECTION
17515 /* Exit array. */
17516 FC_FREE(field_addr.sub_location);
17517#endif /* FREECIV_JSON_CONNECTION */
17518 }
17519
17520 if (e) {
17521 log_packet_detailed("'usage' field error detected");
17522 }
17523 }
17524
17525 if (BV_ISSET(fields, 22)) {
17526 log_packet_detailed(" field 'food_stock' has changed");
17527
17528#ifdef FREECIV_JSON_CONNECTION
17529 field_addr.name = "food_stock";
17530#endif /* FREECIV_JSON_CONNECTION */
17531 e = 0;
17532
17533 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
17534
17535 if (e) {
17536 log_packet_detailed("'food_stock' field error detected");
17537 }
17538 }
17539
17540 if (BV_ISSET(fields, 23)) {
17541 log_packet_detailed(" field 'shield_stock' has changed");
17542
17543#ifdef FREECIV_JSON_CONNECTION
17544 field_addr.name = "shield_stock";
17545#endif /* FREECIV_JSON_CONNECTION */
17546 e = 0;
17547
17548 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
17549
17550 if (e) {
17551 log_packet_detailed("'shield_stock' field error detected");
17552 }
17553 }
17554
17555 if (BV_ISSET(fields, 24)) {
17556 log_packet_detailed(" field 'trade_route_count' has changed");
17557
17558#ifdef FREECIV_JSON_CONNECTION
17559 field_addr.name = "trade_route_count";
17560#endif /* FREECIV_JSON_CONNECTION */
17561 e = 0;
17562
17563 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
17564
17565 if (e) {
17566 log_packet_detailed("'trade_route_count' field error detected");
17567 }
17568 }
17569
17570 if (BV_ISSET(fields, 25)) {
17571 log_packet_detailed(" field 'pollution' has changed");
17572
17573#ifdef FREECIV_JSON_CONNECTION
17574 field_addr.name = "pollution";
17575#endif /* FREECIV_JSON_CONNECTION */
17576 e = 0;
17577
17578 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
17579
17580 if (e) {
17581 log_packet_detailed("'pollution' field error detected");
17582 }
17583 }
17584
17585 if (BV_ISSET(fields, 26)) {
17586 log_packet_detailed(" field 'illness_trade' has changed");
17587
17588#ifdef FREECIV_JSON_CONNECTION
17589 field_addr.name = "illness_trade";
17590#endif /* FREECIV_JSON_CONNECTION */
17591 e = 0;
17592
17593 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
17594
17595 if (e) {
17596 log_packet_detailed("'illness_trade' field error detected");
17597 }
17598 }
17599
17600 if (BV_ISSET(fields, 27)) {
17601 log_packet_detailed(" field 'production_kind' has changed");
17602
17603#ifdef FREECIV_JSON_CONNECTION
17604 field_addr.name = "production_kind";
17605#endif /* FREECIV_JSON_CONNECTION */
17606 e = 0;
17607
17608 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
17609
17610 if (e) {
17611 log_packet_detailed("'production_kind' field error detected");
17612 }
17613 }
17614
17615 if (BV_ISSET(fields, 28)) {
17616 log_packet_detailed(" field 'production_value' has changed");
17617
17618#ifdef FREECIV_JSON_CONNECTION
17619 field_addr.name = "production_value";
17620#endif /* FREECIV_JSON_CONNECTION */
17621 e = 0;
17622
17623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
17624
17625 if (e) {
17626 log_packet_detailed("'production_value' field error detected");
17627 }
17628 }
17629
17630 if (BV_ISSET(fields, 29)) {
17631 log_packet_detailed(" field 'turn_founded' has changed");
17632
17633#ifdef FREECIV_JSON_CONNECTION
17634 field_addr.name = "turn_founded";
17635#endif /* FREECIV_JSON_CONNECTION */
17636 e = 0;
17637
17638 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
17639
17640 if (e) {
17641 log_packet_detailed("'turn_founded' field error detected");
17642 }
17643 }
17644
17645 if (BV_ISSET(fields, 30)) {
17646 log_packet_detailed(" field 'turn_last_built' has changed");
17647
17648#ifdef FREECIV_JSON_CONNECTION
17649 field_addr.name = "turn_last_built";
17650#endif /* FREECIV_JSON_CONNECTION */
17651 e = 0;
17652
17653 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
17654
17655 if (e) {
17656 log_packet_detailed("'turn_last_built' field error detected");
17657 }
17658 }
17659
17660 if (BV_ISSET(fields, 31)) {
17661 log_packet_detailed(" field 'changed_from_kind' has changed");
17662
17663#ifdef FREECIV_JSON_CONNECTION
17664 field_addr.name = "changed_from_kind";
17665#endif /* FREECIV_JSON_CONNECTION */
17666 e = 0;
17667
17668 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
17669
17670 if (e) {
17671 log_packet_detailed("'changed_from_kind' field error detected");
17672 }
17673 }
17674
17675 if (BV_ISSET(fields, 32)) {
17676 log_packet_detailed(" field 'changed_from_value' has changed");
17677
17678#ifdef FREECIV_JSON_CONNECTION
17679 field_addr.name = "changed_from_value";
17680#endif /* FREECIV_JSON_CONNECTION */
17681 e = 0;
17682
17683 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
17684
17685 if (e) {
17686 log_packet_detailed("'changed_from_value' field error detected");
17687 }
17688 }
17689
17690 if (BV_ISSET(fields, 33)) {
17691 log_packet_detailed(" field 'before_change_shields' has changed");
17692
17693#ifdef FREECIV_JSON_CONNECTION
17694 field_addr.name = "before_change_shields";
17695#endif /* FREECIV_JSON_CONNECTION */
17696 e = 0;
17697
17698 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
17699
17700 if (e) {
17701 log_packet_detailed("'before_change_shields' field error detected");
17702 }
17703 }
17704
17705 if (BV_ISSET(fields, 34)) {
17706 log_packet_detailed(" field 'disbanded_shields' has changed");
17707
17708#ifdef FREECIV_JSON_CONNECTION
17709 field_addr.name = "disbanded_shields";
17710#endif /* FREECIV_JSON_CONNECTION */
17711 e = 0;
17712
17713 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
17714
17715 if (e) {
17716 log_packet_detailed("'disbanded_shields' field error detected");
17717 }
17718 }
17719
17720 if (BV_ISSET(fields, 35)) {
17721 log_packet_detailed(" field 'caravan_shields' has changed");
17722
17723#ifdef FREECIV_JSON_CONNECTION
17724 field_addr.name = "caravan_shields";
17725#endif /* FREECIV_JSON_CONNECTION */
17726 e = 0;
17727
17728 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
17729
17730 if (e) {
17731 log_packet_detailed("'caravan_shields' field error detected");
17732 }
17733 }
17734
17735 if (BV_ISSET(fields, 36)) {
17736 log_packet_detailed(" field 'last_turns_shield_surplus' has changed");
17737
17738#ifdef FREECIV_JSON_CONNECTION
17739 field_addr.name = "last_turns_shield_surplus";
17740#endif /* FREECIV_JSON_CONNECTION */
17741 e = 0;
17742
17743 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
17744
17745 if (e) {
17746 log_packet_detailed("'last_turns_shield_surplus' field error detected");
17747 }
17748 }
17749
17750 if (BV_ISSET(fields, 37)) {
17751 log_packet_detailed(" field 'airlift' has changed");
17752
17753#ifdef FREECIV_JSON_CONNECTION
17754 field_addr.name = "airlift";
17755#endif /* FREECIV_JSON_CONNECTION */
17756 e = 0;
17757
17758 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
17759
17760 if (e) {
17761 log_packet_detailed("'airlift' field error detected");
17762 }
17763 }
17764
17765 /* field 38 is folded into the header */
17766
17767 /* field 39 is folded into the header */
17768
17769 /* field 40 is folded into the header */
17770
17771 /* field 41 is folded into the header */
17772
17773 /* field 42 is folded into the header */
17774
17775 if (BV_ISSET(fields, 43)) {
17776 log_packet_detailed(" field 'walls' has changed");
17777
17778#ifdef FREECIV_JSON_CONNECTION
17779 field_addr.name = "walls";
17780#endif /* FREECIV_JSON_CONNECTION */
17781 e = 0;
17782
17783 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
17784
17785 if (e) {
17786 log_packet_detailed("'walls' field error detected");
17787 }
17788 }
17789
17790 if (BV_ISSET(fields, 44)) {
17791 log_packet_detailed(" field 'city_image' has changed");
17792
17793#ifdef FREECIV_JSON_CONNECTION
17794 field_addr.name = "city_image";
17795#endif /* FREECIV_JSON_CONNECTION */
17796 e = 0;
17797
17798 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
17799
17800 if (e) {
17801 log_packet_detailed("'city_image' field error detected");
17802 }
17803 }
17804
17805 if (BV_ISSET(fields, 45)) {
17806 log_packet_detailed(" field 'steal' has changed");
17807
17808#ifdef FREECIV_JSON_CONNECTION
17809 field_addr.name = "steal";
17810#endif /* FREECIV_JSON_CONNECTION */
17811 e = 0;
17812
17813 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
17814
17815 if (e) {
17816 log_packet_detailed("'steal' field error detected");
17817 }
17818 }
17819
17820 if (BV_ISSET(fields, 46)) {
17821 log_packet_detailed(" field 'worklist' has changed");
17822
17823#ifdef FREECIV_JSON_CONNECTION
17824 field_addr.name = "worklist";
17825#endif /* FREECIV_JSON_CONNECTION */
17826 e = 0;
17827
17828 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
17829
17830 if (e) {
17831 log_packet_detailed("'worklist' field error detected");
17832 }
17833 }
17834
17835 if (BV_ISSET(fields, 47)) {
17836 log_packet_detailed(" field 'improvements' has changed");
17837
17838#ifdef FREECIV_JSON_CONNECTION
17839 field_addr.name = "improvements";
17840#endif /* FREECIV_JSON_CONNECTION */
17841 e = 0;
17842
17843 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
17844
17845 if (e) {
17846 log_packet_detailed("'improvements' field error detected");
17847 }
17848 }
17849
17850 if (BV_ISSET(fields, 48)) {
17851 log_packet_detailed(" field 'city_options' has changed");
17852
17853#ifdef FREECIV_JSON_CONNECTION
17854 field_addr.name = "city_options";
17855#endif /* FREECIV_JSON_CONNECTION */
17856 e = 0;
17857
17858 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
17859
17860 if (e) {
17861 log_packet_detailed("'city_options' field error detected");
17862 }
17863 }
17864
17865 if (BV_ISSET(fields, 49)) {
17866 log_packet_detailed(" field 'wl_cb' has changed");
17867
17868#ifdef FREECIV_JSON_CONNECTION
17869 field_addr.name = "wl_cb";
17870#endif /* FREECIV_JSON_CONNECTION */
17871 e = 0;
17872
17873 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
17874
17875 if (e) {
17876 log_packet_detailed("'wl_cb' field error detected");
17877 }
17878 }
17879
17880 if (BV_ISSET(fields, 50)) {
17881 log_packet_detailed(" field 'acquire_type' has changed");
17882
17883#ifdef FREECIV_JSON_CONNECTION
17884 field_addr.name = "acquire_type";
17885#endif /* FREECIV_JSON_CONNECTION */
17886 e = 0;
17887
17888 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
17889
17890 if (e) {
17891 log_packet_detailed("'acquire_type' field error detected");
17892 }
17893 }
17894
17895 if (BV_ISSET(fields, 51)) {
17896 log_packet_detailed(" field 'name' has changed");
17897
17898#ifdef FREECIV_JSON_CONNECTION
17899 field_addr.name = "name";
17900#endif /* FREECIV_JSON_CONNECTION */
17901 e = 0;
17902
17903 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
17904
17905 if (e) {
17906 log_packet_detailed("'name' field error detected");
17907 }
17908 }
17909
17910 *old = *real_packet;
17911
17912 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
17913 if (nullptr != *hash) {
17915 }
17916
17917#else /* FREECIV_DELTA_PROTOCOL */
17918#ifdef FREECIV_JSON_CONNECTION
17919 field_addr.name = "tile";
17920#endif /* FREECIV_JSON_CONNECTION */
17921 e = 0;
17922
17923 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
17924
17925 if (e) {
17926 log_packet_detailed("'tile' field error detected");
17927 }
17928
17929#ifdef FREECIV_JSON_CONNECTION
17930 field_addr.name = "owner";
17931#endif /* FREECIV_JSON_CONNECTION */
17932 e = 0;
17933
17934 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
17935
17936 if (e) {
17937 log_packet_detailed("'owner' field error detected");
17938 }
17939
17940#ifdef FREECIV_JSON_CONNECTION
17941 field_addr.name = "original";
17942#endif /* FREECIV_JSON_CONNECTION */
17943 e = 0;
17944
17945 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
17946
17947 if (e) {
17948 log_packet_detailed("'original' field error detected");
17949 }
17950
17951#ifdef FREECIV_JSON_CONNECTION
17952 field_addr.name = "size";
17953#endif /* FREECIV_JSON_CONNECTION */
17954 e = 0;
17955
17956 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
17957
17958 if (e) {
17959 log_packet_detailed("'size' field error detected");
17960 }
17961
17962#ifdef FREECIV_JSON_CONNECTION
17963 field_addr.name = "city_radius_sq";
17964#endif /* FREECIV_JSON_CONNECTION */
17965 e = 0;
17966
17967 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
17968
17969 if (e) {
17970 log_packet_detailed("'city_radius_sq' field error detected");
17971 }
17972
17973#ifdef FREECIV_JSON_CONNECTION
17974 field_addr.name = "style";
17975#endif /* FREECIV_JSON_CONNECTION */
17976 e = 0;
17977
17978 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17979
17980 if (e) {
17981 log_packet_detailed("'style' field error detected");
17982 }
17983
17984#ifdef FREECIV_JSON_CONNECTION
17985 field_addr.name = "capital";
17986#endif /* FREECIV_JSON_CONNECTION */
17987 e = 0;
17988
17989 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17990
17991 if (e) {
17992 log_packet_detailed("'capital' field error detected");
17993 }
17994
17995#ifdef FREECIV_JSON_CONNECTION
17996 field_addr.name = "ppl_happy";
17997#endif /* FREECIV_JSON_CONNECTION */
17998 e = 0;
17999
18000 {
18001 int i;
18002
18003#ifdef FREECIV_JSON_CONNECTION
18004 /* Create the array. */
18006
18007 /* Enter array. */
18008 field_addr.sub_location = plocation_elem_new(0);
18009#endif /* FREECIV_JSON_CONNECTION */
18010
18011 for (i = 0; i < FEELING_LAST; i++) {
18012#ifdef FREECIV_JSON_CONNECTION
18013 /* Next array element. */
18014 field_addr.sub_location->number = i;
18015#endif /* FREECIV_JSON_CONNECTION */
18016
18017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
18018 }
18019
18020#ifdef FREECIV_JSON_CONNECTION
18021 /* Exit array. */
18022 FC_FREE(field_addr.sub_location);
18023#endif /* FREECIV_JSON_CONNECTION */
18024 }
18025
18026 if (e) {
18027 log_packet_detailed("'ppl_happy' field error detected");
18028 }
18029
18030#ifdef FREECIV_JSON_CONNECTION
18031 field_addr.name = "ppl_content";
18032#endif /* FREECIV_JSON_CONNECTION */
18033 e = 0;
18034
18035 {
18036 int i;
18037
18038#ifdef FREECIV_JSON_CONNECTION
18039 /* Create the array. */
18041
18042 /* Enter array. */
18043 field_addr.sub_location = plocation_elem_new(0);
18044#endif /* FREECIV_JSON_CONNECTION */
18045
18046 for (i = 0; i < FEELING_LAST; i++) {
18047#ifdef FREECIV_JSON_CONNECTION
18048 /* Next array element. */
18049 field_addr.sub_location->number = i;
18050#endif /* FREECIV_JSON_CONNECTION */
18051
18052 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
18053 }
18054
18055#ifdef FREECIV_JSON_CONNECTION
18056 /* Exit array. */
18057 FC_FREE(field_addr.sub_location);
18058#endif /* FREECIV_JSON_CONNECTION */
18059 }
18060
18061 if (e) {
18062 log_packet_detailed("'ppl_content' field error detected");
18063 }
18064
18065#ifdef FREECIV_JSON_CONNECTION
18066 field_addr.name = "ppl_unhappy";
18067#endif /* FREECIV_JSON_CONNECTION */
18068 e = 0;
18069
18070 {
18071 int i;
18072
18073#ifdef FREECIV_JSON_CONNECTION
18074 /* Create the array. */
18076
18077 /* Enter array. */
18078 field_addr.sub_location = plocation_elem_new(0);
18079#endif /* FREECIV_JSON_CONNECTION */
18080
18081 for (i = 0; i < FEELING_LAST; i++) {
18082#ifdef FREECIV_JSON_CONNECTION
18083 /* Next array element. */
18084 field_addr.sub_location->number = i;
18085#endif /* FREECIV_JSON_CONNECTION */
18086
18087 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
18088 }
18089
18090#ifdef FREECIV_JSON_CONNECTION
18091 /* Exit array. */
18092 FC_FREE(field_addr.sub_location);
18093#endif /* FREECIV_JSON_CONNECTION */
18094 }
18095
18096 if (e) {
18097 log_packet_detailed("'ppl_unhappy' field error detected");
18098 }
18099
18100#ifdef FREECIV_JSON_CONNECTION
18101 field_addr.name = "ppl_angry";
18102#endif /* FREECIV_JSON_CONNECTION */
18103 e = 0;
18104
18105 {
18106 int i;
18107
18108#ifdef FREECIV_JSON_CONNECTION
18109 /* Create the array. */
18111
18112 /* Enter array. */
18113 field_addr.sub_location = plocation_elem_new(0);
18114#endif /* FREECIV_JSON_CONNECTION */
18115
18116 for (i = 0; i < FEELING_LAST; i++) {
18117#ifdef FREECIV_JSON_CONNECTION
18118 /* Next array element. */
18119 field_addr.sub_location->number = i;
18120#endif /* FREECIV_JSON_CONNECTION */
18121
18122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
18123 }
18124
18125#ifdef FREECIV_JSON_CONNECTION
18126 /* Exit array. */
18127 FC_FREE(field_addr.sub_location);
18128#endif /* FREECIV_JSON_CONNECTION */
18129 }
18130
18131 if (e) {
18132 log_packet_detailed("'ppl_angry' field error detected");
18133 }
18134
18135#ifdef FREECIV_JSON_CONNECTION
18136 field_addr.name = "specialists_size";
18137#endif /* FREECIV_JSON_CONNECTION */
18138 e = 0;
18139
18140 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
18141
18142 if (e) {
18143 log_packet_detailed("'specialists_size' field error detected");
18144 }
18145
18146#ifdef FREECIV_JSON_CONNECTION
18147 field_addr.name = "specialists";
18148#endif /* FREECIV_JSON_CONNECTION */
18149 e = 0;
18150
18151 {
18152 int i;
18153
18154#ifdef FREECIV_JSON_CONNECTION
18155 /* Create the array. */
18156 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
18157
18158 /* Enter array. */
18159 field_addr.sub_location = plocation_elem_new(0);
18160#endif /* FREECIV_JSON_CONNECTION */
18161
18162 for (i = 0; i < real_packet->specialists_size; i++) {
18163#ifdef FREECIV_JSON_CONNECTION
18164 /* Next array element. */
18165 field_addr.sub_location->number = i;
18166#endif /* FREECIV_JSON_CONNECTION */
18167
18168 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
18169 }
18170
18171#ifdef FREECIV_JSON_CONNECTION
18172 /* Exit array. */
18173 FC_FREE(field_addr.sub_location);
18174#endif /* FREECIV_JSON_CONNECTION */
18175 }
18176
18177 if (e) {
18178 log_packet_detailed("'specialists' field error detected");
18179 }
18180
18181#ifdef FREECIV_JSON_CONNECTION
18182 field_addr.name = "history";
18183#endif /* FREECIV_JSON_CONNECTION */
18184 e = 0;
18185
18186 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
18187
18188 if (e) {
18189 log_packet_detailed("'history' field error detected");
18190 }
18191
18192#ifdef FREECIV_JSON_CONNECTION
18193 field_addr.name = "culture";
18194#endif /* FREECIV_JSON_CONNECTION */
18195 e = 0;
18196
18197 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
18198
18199 if (e) {
18200 log_packet_detailed("'culture' field error detected");
18201 }
18202
18203#ifdef FREECIV_JSON_CONNECTION
18204 field_addr.name = "buy_cost";
18205#endif /* FREECIV_JSON_CONNECTION */
18206 e = 0;
18207
18208 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
18209
18210 if (e) {
18211 log_packet_detailed("'buy_cost' field error detected");
18212 }
18213
18214#ifdef FREECIV_JSON_CONNECTION
18215 field_addr.name = "surplus";
18216#endif /* FREECIV_JSON_CONNECTION */
18217 e = 0;
18218
18219 {
18220 int i;
18221
18222#ifdef FREECIV_JSON_CONNECTION
18223 /* Create the array. */
18224 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18225
18226 /* Enter array. */
18227 field_addr.sub_location = plocation_elem_new(0);
18228#endif /* FREECIV_JSON_CONNECTION */
18229
18230 for (i = 0; i < O_LAST; i++) {
18231#ifdef FREECIV_JSON_CONNECTION
18232 /* Next array element. */
18233 field_addr.sub_location->number = i;
18234#endif /* FREECIV_JSON_CONNECTION */
18235
18236 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
18237 }
18238
18239#ifdef FREECIV_JSON_CONNECTION
18240 /* Exit array. */
18241 FC_FREE(field_addr.sub_location);
18242#endif /* FREECIV_JSON_CONNECTION */
18243 }
18244
18245 if (e) {
18246 log_packet_detailed("'surplus' field error detected");
18247 }
18248
18249#ifdef FREECIV_JSON_CONNECTION
18250 field_addr.name = "waste";
18251#endif /* FREECIV_JSON_CONNECTION */
18252 e = 0;
18253
18254 {
18255 int i;
18256
18257#ifdef FREECIV_JSON_CONNECTION
18258 /* Create the array. */
18259 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18260
18261 /* Enter array. */
18262 field_addr.sub_location = plocation_elem_new(0);
18263#endif /* FREECIV_JSON_CONNECTION */
18264
18265 for (i = 0; i < O_LAST; i++) {
18266#ifdef FREECIV_JSON_CONNECTION
18267 /* Next array element. */
18268 field_addr.sub_location->number = i;
18269#endif /* FREECIV_JSON_CONNECTION */
18270
18271 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
18272 }
18273
18274#ifdef FREECIV_JSON_CONNECTION
18275 /* Exit array. */
18276 FC_FREE(field_addr.sub_location);
18277#endif /* FREECIV_JSON_CONNECTION */
18278 }
18279
18280 if (e) {
18281 log_packet_detailed("'waste' field error detected");
18282 }
18283
18284#ifdef FREECIV_JSON_CONNECTION
18285 field_addr.name = "unhappy_penalty";
18286#endif /* FREECIV_JSON_CONNECTION */
18287 e = 0;
18288
18289 {
18290 int i;
18291
18292#ifdef FREECIV_JSON_CONNECTION
18293 /* Create the array. */
18294 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18295
18296 /* Enter array. */
18297 field_addr.sub_location = plocation_elem_new(0);
18298#endif /* FREECIV_JSON_CONNECTION */
18299
18300 for (i = 0; i < O_LAST; i++) {
18301#ifdef FREECIV_JSON_CONNECTION
18302 /* Next array element. */
18303 field_addr.sub_location->number = i;
18304#endif /* FREECIV_JSON_CONNECTION */
18305
18306 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
18307 }
18308
18309#ifdef FREECIV_JSON_CONNECTION
18310 /* Exit array. */
18311 FC_FREE(field_addr.sub_location);
18312#endif /* FREECIV_JSON_CONNECTION */
18313 }
18314
18315 if (e) {
18316 log_packet_detailed("'unhappy_penalty' field error detected");
18317 }
18318
18319#ifdef FREECIV_JSON_CONNECTION
18320 field_addr.name = "prod";
18321#endif /* FREECIV_JSON_CONNECTION */
18322 e = 0;
18323
18324 {
18325 int i;
18326
18327#ifdef FREECIV_JSON_CONNECTION
18328 /* Create the array. */
18329 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18330
18331 /* Enter array. */
18332 field_addr.sub_location = plocation_elem_new(0);
18333#endif /* FREECIV_JSON_CONNECTION */
18334
18335 for (i = 0; i < O_LAST; i++) {
18336#ifdef FREECIV_JSON_CONNECTION
18337 /* Next array element. */
18338 field_addr.sub_location->number = i;
18339#endif /* FREECIV_JSON_CONNECTION */
18340
18341 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
18342 }
18343
18344#ifdef FREECIV_JSON_CONNECTION
18345 /* Exit array. */
18346 FC_FREE(field_addr.sub_location);
18347#endif /* FREECIV_JSON_CONNECTION */
18348 }
18349
18350 if (e) {
18351 log_packet_detailed("'prod' field error detected");
18352 }
18353
18354#ifdef FREECIV_JSON_CONNECTION
18355 field_addr.name = "citizen_base";
18356#endif /* FREECIV_JSON_CONNECTION */
18357 e = 0;
18358
18359 {
18360 int i;
18361
18362#ifdef FREECIV_JSON_CONNECTION
18363 /* Create the array. */
18364 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18365
18366 /* Enter array. */
18367 field_addr.sub_location = plocation_elem_new(0);
18368#endif /* FREECIV_JSON_CONNECTION */
18369
18370 for (i = 0; i < O_LAST; i++) {
18371#ifdef FREECIV_JSON_CONNECTION
18372 /* Next array element. */
18373 field_addr.sub_location->number = i;
18374#endif /* FREECIV_JSON_CONNECTION */
18375
18376 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
18377 }
18378
18379#ifdef FREECIV_JSON_CONNECTION
18380 /* Exit array. */
18381 FC_FREE(field_addr.sub_location);
18382#endif /* FREECIV_JSON_CONNECTION */
18383 }
18384
18385 if (e) {
18386 log_packet_detailed("'citizen_base' field error detected");
18387 }
18388
18389#ifdef FREECIV_JSON_CONNECTION
18390 field_addr.name = "usage";
18391#endif /* FREECIV_JSON_CONNECTION */
18392 e = 0;
18393
18394 {
18395 int i;
18396
18397#ifdef FREECIV_JSON_CONNECTION
18398 /* Create the array. */
18399 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18400
18401 /* Enter array. */
18402 field_addr.sub_location = plocation_elem_new(0);
18403#endif /* FREECIV_JSON_CONNECTION */
18404
18405 for (i = 0; i < O_LAST; i++) {
18406#ifdef FREECIV_JSON_CONNECTION
18407 /* Next array element. */
18408 field_addr.sub_location->number = i;
18409#endif /* FREECIV_JSON_CONNECTION */
18410
18411 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
18412 }
18413
18414#ifdef FREECIV_JSON_CONNECTION
18415 /* Exit array. */
18416 FC_FREE(field_addr.sub_location);
18417#endif /* FREECIV_JSON_CONNECTION */
18418 }
18419
18420 if (e) {
18421 log_packet_detailed("'usage' field error detected");
18422 }
18423
18424#ifdef FREECIV_JSON_CONNECTION
18425 field_addr.name = "food_stock";
18426#endif /* FREECIV_JSON_CONNECTION */
18427 e = 0;
18428
18429 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
18430
18431 if (e) {
18432 log_packet_detailed("'food_stock' field error detected");
18433 }
18434
18435#ifdef FREECIV_JSON_CONNECTION
18436 field_addr.name = "shield_stock";
18437#endif /* FREECIV_JSON_CONNECTION */
18438 e = 0;
18439
18440 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
18441
18442 if (e) {
18443 log_packet_detailed("'shield_stock' field error detected");
18444 }
18445
18446#ifdef FREECIV_JSON_CONNECTION
18447 field_addr.name = "trade_route_count";
18448#endif /* FREECIV_JSON_CONNECTION */
18449 e = 0;
18450
18451 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
18452
18453 if (e) {
18454 log_packet_detailed("'trade_route_count' field error detected");
18455 }
18456
18457#ifdef FREECIV_JSON_CONNECTION
18458 field_addr.name = "pollution";
18459#endif /* FREECIV_JSON_CONNECTION */
18460 e = 0;
18461
18462 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
18463
18464 if (e) {
18465 log_packet_detailed("'pollution' field error detected");
18466 }
18467
18468#ifdef FREECIV_JSON_CONNECTION
18469 field_addr.name = "illness_trade";
18470#endif /* FREECIV_JSON_CONNECTION */
18471 e = 0;
18472
18473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
18474
18475 if (e) {
18476 log_packet_detailed("'illness_trade' field error detected");
18477 }
18478
18479#ifdef FREECIV_JSON_CONNECTION
18480 field_addr.name = "production_kind";
18481#endif /* FREECIV_JSON_CONNECTION */
18482 e = 0;
18483
18484 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18485
18486 if (e) {
18487 log_packet_detailed("'production_kind' field error detected");
18488 }
18489
18490#ifdef FREECIV_JSON_CONNECTION
18491 field_addr.name = "production_value";
18492#endif /* FREECIV_JSON_CONNECTION */
18493 e = 0;
18494
18495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18496
18497 if (e) {
18498 log_packet_detailed("'production_value' field error detected");
18499 }
18500
18501#ifdef FREECIV_JSON_CONNECTION
18502 field_addr.name = "turn_founded";
18503#endif /* FREECIV_JSON_CONNECTION */
18504 e = 0;
18505
18506 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
18507
18508 if (e) {
18509 log_packet_detailed("'turn_founded' field error detected");
18510 }
18511
18512#ifdef FREECIV_JSON_CONNECTION
18513 field_addr.name = "turn_last_built";
18514#endif /* FREECIV_JSON_CONNECTION */
18515 e = 0;
18516
18517 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
18518
18519 if (e) {
18520 log_packet_detailed("'turn_last_built' field error detected");
18521 }
18522
18523#ifdef FREECIV_JSON_CONNECTION
18524 field_addr.name = "changed_from_kind";
18525#endif /* FREECIV_JSON_CONNECTION */
18526 e = 0;
18527
18528 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
18529
18530 if (e) {
18531 log_packet_detailed("'changed_from_kind' field error detected");
18532 }
18533
18534#ifdef FREECIV_JSON_CONNECTION
18535 field_addr.name = "changed_from_value";
18536#endif /* FREECIV_JSON_CONNECTION */
18537 e = 0;
18538
18539 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
18540
18541 if (e) {
18542 log_packet_detailed("'changed_from_value' field error detected");
18543 }
18544
18545#ifdef FREECIV_JSON_CONNECTION
18546 field_addr.name = "before_change_shields";
18547#endif /* FREECIV_JSON_CONNECTION */
18548 e = 0;
18549
18550 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
18551
18552 if (e) {
18553 log_packet_detailed("'before_change_shields' field error detected");
18554 }
18555
18556#ifdef FREECIV_JSON_CONNECTION
18557 field_addr.name = "disbanded_shields";
18558#endif /* FREECIV_JSON_CONNECTION */
18559 e = 0;
18560
18561 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
18562
18563 if (e) {
18564 log_packet_detailed("'disbanded_shields' field error detected");
18565 }
18566
18567#ifdef FREECIV_JSON_CONNECTION
18568 field_addr.name = "caravan_shields";
18569#endif /* FREECIV_JSON_CONNECTION */
18570 e = 0;
18571
18572 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
18573
18574 if (e) {
18575 log_packet_detailed("'caravan_shields' field error detected");
18576 }
18577
18578#ifdef FREECIV_JSON_CONNECTION
18579 field_addr.name = "last_turns_shield_surplus";
18580#endif /* FREECIV_JSON_CONNECTION */
18581 e = 0;
18582
18583 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
18584
18585 if (e) {
18586 log_packet_detailed("'last_turns_shield_surplus' field error detected");
18587 }
18588
18589#ifdef FREECIV_JSON_CONNECTION
18590 field_addr.name = "airlift";
18591#endif /* FREECIV_JSON_CONNECTION */
18592 e = 0;
18593
18594 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
18595
18596 if (e) {
18597 log_packet_detailed("'airlift' field error detected");
18598 }
18599
18600#ifdef FREECIV_JSON_CONNECTION
18601 field_addr.name = "did_buy";
18602#endif /* FREECIV_JSON_CONNECTION */
18603 e = 0;
18604
18605 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
18606
18607 if (e) {
18608 log_packet_detailed("'did_buy' field error detected");
18609 }
18610
18611#ifdef FREECIV_JSON_CONNECTION
18612 field_addr.name = "did_sell";
18613#endif /* FREECIV_JSON_CONNECTION */
18614 e = 0;
18615
18616 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
18617
18618 if (e) {
18619 log_packet_detailed("'did_sell' field error detected");
18620 }
18621
18622#ifdef FREECIV_JSON_CONNECTION
18623 field_addr.name = "was_happy";
18624#endif /* FREECIV_JSON_CONNECTION */
18625 e = 0;
18626
18627 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
18628
18629 if (e) {
18630 log_packet_detailed("'was_happy' field error detected");
18631 }
18632
18633#ifdef FREECIV_JSON_CONNECTION
18634 field_addr.name = "had_famine";
18635#endif /* FREECIV_JSON_CONNECTION */
18636 e = 0;
18637
18638 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
18639
18640 if (e) {
18641 log_packet_detailed("'had_famine' field error detected");
18642 }
18643
18644#ifdef FREECIV_JSON_CONNECTION
18645 field_addr.name = "diplomat_investigate";
18646#endif /* FREECIV_JSON_CONNECTION */
18647 e = 0;
18648
18649 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->diplomat_investigate);
18650
18651 if (e) {
18652 log_packet_detailed("'diplomat_investigate' field error detected");
18653 }
18654
18655#ifdef FREECIV_JSON_CONNECTION
18656 field_addr.name = "walls";
18657#endif /* FREECIV_JSON_CONNECTION */
18658 e = 0;
18659
18660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
18661
18662 if (e) {
18663 log_packet_detailed("'walls' field error detected");
18664 }
18665
18666#ifdef FREECIV_JSON_CONNECTION
18667 field_addr.name = "city_image";
18668#endif /* FREECIV_JSON_CONNECTION */
18669 e = 0;
18670
18671 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
18672
18673 if (e) {
18674 log_packet_detailed("'city_image' field error detected");
18675 }
18676
18677#ifdef FREECIV_JSON_CONNECTION
18678 field_addr.name = "steal";
18679#endif /* FREECIV_JSON_CONNECTION */
18680 e = 0;
18681
18682 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
18683
18684 if (e) {
18685 log_packet_detailed("'steal' field error detected");
18686 }
18687
18688#ifdef FREECIV_JSON_CONNECTION
18689 field_addr.name = "worklist";
18690#endif /* FREECIV_JSON_CONNECTION */
18691 e = 0;
18692
18693 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18694
18695 if (e) {
18696 log_packet_detailed("'worklist' field error detected");
18697 }
18698
18699#ifdef FREECIV_JSON_CONNECTION
18700 field_addr.name = "improvements";
18701#endif /* FREECIV_JSON_CONNECTION */
18702 e = 0;
18703
18704 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
18705
18706 if (e) {
18707 log_packet_detailed("'improvements' field error detected");
18708 }
18709
18710#ifdef FREECIV_JSON_CONNECTION
18711 field_addr.name = "city_options";
18712#endif /* FREECIV_JSON_CONNECTION */
18713 e = 0;
18714
18715 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
18716
18717 if (e) {
18718 log_packet_detailed("'city_options' field error detected");
18719 }
18720
18721#ifdef FREECIV_JSON_CONNECTION
18722 field_addr.name = "wl_cb";
18723#endif /* FREECIV_JSON_CONNECTION */
18724 e = 0;
18725
18726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
18727
18728 if (e) {
18729 log_packet_detailed("'wl_cb' field error detected");
18730 }
18731
18732#ifdef FREECIV_JSON_CONNECTION
18733 field_addr.name = "acquire_type";
18734#endif /* FREECIV_JSON_CONNECTION */
18735 e = 0;
18736
18737 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
18738
18739 if (e) {
18740 log_packet_detailed("'acquire_type' field error detected");
18741 }
18742
18743#ifdef FREECIV_JSON_CONNECTION
18744 field_addr.name = "name";
18745#endif /* FREECIV_JSON_CONNECTION */
18746 e = 0;
18747
18748 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
18749
18750 if (e) {
18751 log_packet_detailed("'name' field error detected");
18752 }
18753#endif /* FREECIV_DELTA_PROTOCOL */
18754
18756}
18757
18758int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
18759{
18760 if (!pc->used) {
18761 log_error("WARNING: trying to send data to the closed connection %s",
18763 return -1;
18764 }
18765 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send != nullptr, -1,
18766 "Handler for PACKET_CITY_INFO not installed");
18767 return pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send(pc, packet, force_to_send);
18768}
18769
18770void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
18771{
18772 conn_list_iterate(dest, pconn) {
18773 send_packet_city_info(pconn, packet, force_to_send);
18775}
18776
18778{
18779 memset(packet, 0, sizeof(*packet));
18780}
18781
18782#define free_packet_city_nationalities(_packet) (void) 0
18783#define destroy_packet_city_nationalities free
18784
18785#ifdef FREECIV_DELTA_PROTOCOL
18787{
18788 const struct packet_city_nationalities *key = (const struct packet_city_nationalities *) vkey;
18789 genhash_val_t result = 0;
18790
18791 result += key->id;
18792
18793 result &= 0xFFFFFFFF;
18794 return result;
18795}
18796
18797static bool cmp_packet_city_nationalities_100(const void *vkey1, const void *vkey2)
18798{
18799 const struct packet_city_nationalities *old = (const struct packet_city_nationalities *) vkey1;
18801 bool differ;
18802
18803 differ = (old->id != real_packet->id);
18804
18805 return !differ;
18806}
18808#endif /* FREECIV_DELTA_PROTOCOL */
18809
18811{
18812#define FREE_PACKET_STRUCT(_packet) free_packet_city_nationalities(_packet)
18814
18815#ifdef FREECIV_JSON_CONNECTION
18816 struct plocation field_addr;
18817 {
18818 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
18821 }
18822#endif /* FREECIV_JSON_CONNECTION */
18823
18824#ifdef FREECIV_JSON_CONNECTION
18825 field_addr.name = "id";
18826#endif /* FREECIV_JSON_CONNECTION */
18827
18828 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
18830 }
18831
18832 log_packet_detailed("packet_city_nationalities_100: got info about (%d)",
18833 real_packet->id);
18834
18835#ifdef FREECIV_DELTA_PROTOCOL
18838 struct genhash **hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
18839
18840 if (nullptr == *hash) {
18842 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
18843 }
18844
18845 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18846 *real_packet = *old;
18847 } else {
18848 /* packet is already initialized empty */
18849 log_packet_detailed(" no old info");
18850 }
18851
18852#ifdef FREECIV_JSON_CONNECTION
18853 field_addr.name = "fields";
18854#endif /* FREECIV_JSON_CONNECTION */
18855 DIO_BV_GET(&din, &field_addr, fields);
18856
18857 if (BV_ISSET(fields, 0)) {
18858 log_packet_detailed(" got field 'nationalities_count'");
18859
18860#ifdef FREECIV_JSON_CONNECTION
18861 field_addr.name = "nationalities_count";
18862#endif /* FREECIV_JSON_CONNECTION */
18863
18864 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
18865 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
18866 }
18867 }
18868
18869 if (BV_ISSET(fields, 1)) {
18870 log_packet_detailed(" got field 'nation_id'");
18871
18872#ifdef FREECIV_JSON_CONNECTION
18873 field_addr.name = "nation_id";
18874#endif /* FREECIV_JSON_CONNECTION */
18875
18876 {
18877 int i;
18878
18879 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18880 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
18881 }
18882
18883#ifdef FREECIV_JSON_CONNECTION
18884 /* Enter array. */
18885 field_addr.sub_location = plocation_elem_new(0);
18886#endif /* FREECIV_JSON_CONNECTION */
18887
18888 for (i = 0; i < real_packet->nationalities_count; i++) {
18889#ifdef FREECIV_JSON_CONNECTION
18890 /* Next array element */
18891 field_addr.sub_location->number = i;
18892#endif /* FREECIV_JSON_CONNECTION */
18893
18894 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
18895 RECEIVE_PACKET_FIELD_ERROR(nation_id);
18896 }
18897 }
18898
18899#ifdef FREECIV_JSON_CONNECTION
18900 /* Exit array. */
18901 FC_FREE(field_addr.sub_location);
18902#endif /* FREECIV_JSON_CONNECTION */
18903 }
18904 }
18905
18906 if (BV_ISSET(fields, 2)) {
18907 log_packet_detailed(" got field 'nation_citizens'");
18908
18909#ifdef FREECIV_JSON_CONNECTION
18910 field_addr.name = "nation_citizens";
18911#endif /* FREECIV_JSON_CONNECTION */
18912
18913 {
18914 int i;
18915
18916 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18917 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
18918 }
18919
18920#ifdef FREECIV_JSON_CONNECTION
18921 /* Enter array. */
18922 field_addr.sub_location = plocation_elem_new(0);
18923#endif /* FREECIV_JSON_CONNECTION */
18924
18925 for (i = 0; i < real_packet->nationalities_count; i++) {
18926#ifdef FREECIV_JSON_CONNECTION
18927 /* Next array element */
18928 field_addr.sub_location->number = i;
18929#endif /* FREECIV_JSON_CONNECTION */
18930
18931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
18932 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
18933 }
18934 }
18935
18936#ifdef FREECIV_JSON_CONNECTION
18937 /* Exit array. */
18938 FC_FREE(field_addr.sub_location);
18939#endif /* FREECIV_JSON_CONNECTION */
18940 }
18941 }
18942
18943 if (nullptr == old) {
18944 old = fc_malloc(sizeof(*old));
18946 *old = *real_packet;
18948 } else {
18949 *old = *real_packet;
18950 }
18951
18952#else /* FREECIV_DELTA_PROTOCOL */
18953#ifdef FREECIV_JSON_CONNECTION
18954 field_addr.name = "nationalities_count";
18955#endif /* FREECIV_JSON_CONNECTION */
18956
18957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
18958 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
18959 }
18960
18961#ifdef FREECIV_JSON_CONNECTION
18962 field_addr.name = "nation_id";
18963#endif /* FREECIV_JSON_CONNECTION */
18964
18965 {
18966 int i;
18967
18968 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18969 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
18970 }
18971
18972#ifdef FREECIV_JSON_CONNECTION
18973 /* Enter array. */
18974 field_addr.sub_location = plocation_elem_new(0);
18975#endif /* FREECIV_JSON_CONNECTION */
18976
18977 for (i = 0; i < real_packet->nationalities_count; i++) {
18978#ifdef FREECIV_JSON_CONNECTION
18979 /* Next array element */
18980 field_addr.sub_location->number = i;
18981#endif /* FREECIV_JSON_CONNECTION */
18982
18983 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
18984 RECEIVE_PACKET_FIELD_ERROR(nation_id);
18985 }
18986 }
18987
18988#ifdef FREECIV_JSON_CONNECTION
18989 /* Exit array. */
18990 FC_FREE(field_addr.sub_location);
18991#endif /* FREECIV_JSON_CONNECTION */
18992 }
18993
18994#ifdef FREECIV_JSON_CONNECTION
18995 field_addr.name = "nation_citizens";
18996#endif /* FREECIV_JSON_CONNECTION */
18997
18998 {
18999 int i;
19000
19001 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19002 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
19003 }
19004
19005#ifdef FREECIV_JSON_CONNECTION
19006 /* Enter array. */
19007 field_addr.sub_location = plocation_elem_new(0);
19008#endif /* FREECIV_JSON_CONNECTION */
19009
19010 for (i = 0; i < real_packet->nationalities_count; i++) {
19011#ifdef FREECIV_JSON_CONNECTION
19012 /* Next array element */
19013 field_addr.sub_location->number = i;
19014#endif /* FREECIV_JSON_CONNECTION */
19015
19016 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19017 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19018 }
19019 }
19020
19021#ifdef FREECIV_JSON_CONNECTION
19022 /* Exit array. */
19023 FC_FREE(field_addr.sub_location);
19024#endif /* FREECIV_JSON_CONNECTION */
19025 }
19026#endif /* FREECIV_DELTA_PROTOCOL */
19027
19029#undef FREE_PACKET_STRUCT
19030}
19031
19032static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19033{
19034 const struct packet_city_nationalities *real_packet = packet;
19035 int e;
19037
19038 log_packet_detailed("packet_city_nationalities_100: sending info about (%d)",
19039 real_packet->id);
19040
19041#ifdef FREECIV_DELTA_PROTOCOL
19044 bool differ;
19045 int different = force_to_send;
19046 struct genhash **hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
19047
19048 if (nullptr == *hash) {
19050 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
19051 }
19052 BV_CLR_ALL(fields);
19053
19054 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19055 old = fc_malloc(sizeof(*old));
19056 /* temporary bitcopy just to insert correctly */
19057 *old = *real_packet;
19060 different = 1; /* Force to send. */
19061 }
19062
19063 differ = (old->nationalities_count != real_packet->nationalities_count);
19064 if (differ) {
19065 different++;
19066 BV_SET(fields, 0);
19067 }
19068
19069 differ = (old->nationalities_count != real_packet->nationalities_count);
19070 if (!differ) {
19071 int i;
19072
19073 for (i = 0; i < old->nationalities_count; i++) {
19074 differ = (old->nation_id[i] != real_packet->nation_id[i]);
19075 if (differ) {
19076 break;
19077 }
19078 }
19079 }
19080 if (differ) {
19081 different++;
19082 BV_SET(fields, 1);
19083 }
19084
19085 differ = (old->nationalities_count != real_packet->nationalities_count);
19086 if (!differ) {
19087 int i;
19088
19089 for (i = 0; i < old->nationalities_count; i++) {
19090 differ = (old->nation_citizens[i] != real_packet->nation_citizens[i]);
19091 if (differ) {
19092 break;
19093 }
19094 }
19095 }
19096 if (differ) {
19097 different++;
19098 BV_SET(fields, 2);
19099 }
19100
19101 if (different == 0) {
19102 log_packet_detailed(" no change -> discard");
19104 }
19105#endif /* FREECIV_DELTA_PROTOCOL */
19106
19107#ifdef FREECIV_JSON_CONNECTION
19108 struct plocation field_addr;
19109 {
19110 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19113 }
19114#endif /* FREECIV_JSON_CONNECTION */
19115
19116#ifdef FREECIV_JSON_CONNECTION
19117 field_addr.name = "id";
19118#endif /* FREECIV_JSON_CONNECTION */
19119 e = 0;
19120
19121 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
19122
19123 if (e) {
19124 log_packet_detailed("'id' field error detected");
19125 }
19126
19127#ifdef FREECIV_DELTA_PROTOCOL
19128#ifdef FREECIV_JSON_CONNECTION
19129 field_addr.name = "fields";
19130#endif /* FREECIV_JSON_CONNECTION */
19131 e = 0;
19132 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19133 if (e) {
19134 log_packet_detailed("fields bitvector error detected");
19135 }
19136
19137 if (BV_ISSET(fields, 0)) {
19138 log_packet_detailed(" field 'nationalities_count' has changed");
19139
19140#ifdef FREECIV_JSON_CONNECTION
19141 field_addr.name = "nationalities_count";
19142#endif /* FREECIV_JSON_CONNECTION */
19143 e = 0;
19144
19145 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19146
19147 if (e) {
19148 log_packet_detailed("'nationalities_count' field error detected");
19149 }
19150 }
19151
19152 if (BV_ISSET(fields, 1)) {
19153 log_packet_detailed(" field 'nation_id' has changed");
19154
19155#ifdef FREECIV_JSON_CONNECTION
19156 field_addr.name = "nation_id";
19157#endif /* FREECIV_JSON_CONNECTION */
19158 e = 0;
19159
19160 {
19161 int i;
19162
19163#ifdef FREECIV_JSON_CONNECTION
19164 /* Create the array. */
19165 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19166
19167 /* Enter array. */
19168 field_addr.sub_location = plocation_elem_new(0);
19169#endif /* FREECIV_JSON_CONNECTION */
19170
19171 for (i = 0; i < real_packet->nationalities_count; i++) {
19172#ifdef FREECIV_JSON_CONNECTION
19173 /* Next array element. */
19174 field_addr.sub_location->number = i;
19175#endif /* FREECIV_JSON_CONNECTION */
19176
19177 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19178 }
19179
19180#ifdef FREECIV_JSON_CONNECTION
19181 /* Exit array. */
19182 FC_FREE(field_addr.sub_location);
19183#endif /* FREECIV_JSON_CONNECTION */
19184 }
19185
19186 if (e) {
19187 log_packet_detailed("'nation_id' field error detected");
19188 }
19189 }
19190
19191 if (BV_ISSET(fields, 2)) {
19192 log_packet_detailed(" field 'nation_citizens' has changed");
19193
19194#ifdef FREECIV_JSON_CONNECTION
19195 field_addr.name = "nation_citizens";
19196#endif /* FREECIV_JSON_CONNECTION */
19197 e = 0;
19198
19199 {
19200 int i;
19201
19202#ifdef FREECIV_JSON_CONNECTION
19203 /* Create the array. */
19204 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19205
19206 /* Enter array. */
19207 field_addr.sub_location = plocation_elem_new(0);
19208#endif /* FREECIV_JSON_CONNECTION */
19209
19210 for (i = 0; i < real_packet->nationalities_count; i++) {
19211#ifdef FREECIV_JSON_CONNECTION
19212 /* Next array element. */
19213 field_addr.sub_location->number = i;
19214#endif /* FREECIV_JSON_CONNECTION */
19215
19216 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19217 }
19218
19219#ifdef FREECIV_JSON_CONNECTION
19220 /* Exit array. */
19221 FC_FREE(field_addr.sub_location);
19222#endif /* FREECIV_JSON_CONNECTION */
19223 }
19224
19225 if (e) {
19226 log_packet_detailed("'nation_citizens' field error detected");
19227 }
19228 }
19229
19230 *old = *real_packet;
19231
19232#else /* FREECIV_DELTA_PROTOCOL */
19233#ifdef FREECIV_JSON_CONNECTION
19234 field_addr.name = "nationalities_count";
19235#endif /* FREECIV_JSON_CONNECTION */
19236 e = 0;
19237
19238 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19239
19240 if (e) {
19241 log_packet_detailed("'nationalities_count' field error detected");
19242 }
19243
19244#ifdef FREECIV_JSON_CONNECTION
19245 field_addr.name = "nation_id";
19246#endif /* FREECIV_JSON_CONNECTION */
19247 e = 0;
19248
19249 {
19250 int i;
19251
19252#ifdef FREECIV_JSON_CONNECTION
19253 /* Create the array. */
19254 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19255
19256 /* Enter array. */
19257 field_addr.sub_location = plocation_elem_new(0);
19258#endif /* FREECIV_JSON_CONNECTION */
19259
19260 for (i = 0; i < real_packet->nationalities_count; i++) {
19261#ifdef FREECIV_JSON_CONNECTION
19262 /* Next array element. */
19263 field_addr.sub_location->number = i;
19264#endif /* FREECIV_JSON_CONNECTION */
19265
19266 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19267 }
19268
19269#ifdef FREECIV_JSON_CONNECTION
19270 /* Exit array. */
19271 FC_FREE(field_addr.sub_location);
19272#endif /* FREECIV_JSON_CONNECTION */
19273 }
19274
19275 if (e) {
19276 log_packet_detailed("'nation_id' field error detected");
19277 }
19278
19279#ifdef FREECIV_JSON_CONNECTION
19280 field_addr.name = "nation_citizens";
19281#endif /* FREECIV_JSON_CONNECTION */
19282 e = 0;
19283
19284 {
19285 int i;
19286
19287#ifdef FREECIV_JSON_CONNECTION
19288 /* Create the array. */
19289 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19290
19291 /* Enter array. */
19292 field_addr.sub_location = plocation_elem_new(0);
19293#endif /* FREECIV_JSON_CONNECTION */
19294
19295 for (i = 0; i < real_packet->nationalities_count; i++) {
19296#ifdef FREECIV_JSON_CONNECTION
19297 /* Next array element. */
19298 field_addr.sub_location->number = i;
19299#endif /* FREECIV_JSON_CONNECTION */
19300
19301 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19302 }
19303
19304#ifdef FREECIV_JSON_CONNECTION
19305 /* Exit array. */
19306 FC_FREE(field_addr.sub_location);
19307#endif /* FREECIV_JSON_CONNECTION */
19308 }
19309
19310 if (e) {
19311 log_packet_detailed("'nation_citizens' field error detected");
19312 }
19313#endif /* FREECIV_DELTA_PROTOCOL */
19314
19316}
19317
19318int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19319{
19320 if (!pc->used) {
19321 log_error("WARNING: trying to send data to the closed connection %s",
19323 return -1;
19324 }
19325 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send != nullptr, -1,
19326 "Handler for PACKET_CITY_NATIONALITIES not installed");
19327 return pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send(pc, packet, force_to_send);
19328}
19329
19330void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
19331{
19332 conn_list_iterate(dest, pconn) {
19333 send_packet_city_nationalities(pconn, packet, force_to_send);
19335}
19336
19338{
19339 memset(packet, 0, sizeof(*packet));
19340}
19341
19342#define free_packet_city_update_counters(_packet) (void) 0
19343#define destroy_packet_city_update_counters free
19344
19345#ifdef FREECIV_DELTA_PROTOCOL
19347{
19348 const struct packet_city_update_counters *key = (const struct packet_city_update_counters *) vkey;
19349 genhash_val_t result = 0;
19350
19351 result += key->city;
19352
19353 result &= 0xFFFFFFFF;
19354 return result;
19355}
19356
19357static bool cmp_packet_city_update_counters_100(const void *vkey1, const void *vkey2)
19358{
19359 const struct packet_city_update_counters *old = (const struct packet_city_update_counters *) vkey1;
19361 bool differ;
19362
19363 differ = (old->city != real_packet->city);
19364
19365 return !differ;
19366}
19368#endif /* FREECIV_DELTA_PROTOCOL */
19369
19371{
19372#define FREE_PACKET_STRUCT(_packet) free_packet_city_update_counters(_packet)
19374
19375#ifdef FREECIV_JSON_CONNECTION
19376 struct plocation field_addr;
19377 {
19378 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19381 }
19382#endif /* FREECIV_JSON_CONNECTION */
19383
19384#ifdef FREECIV_JSON_CONNECTION
19385 field_addr.name = "city";
19386#endif /* FREECIV_JSON_CONNECTION */
19387
19388 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
19390 }
19391
19392 log_packet_detailed("packet_city_update_counters_100: got info about (%d)",
19393 real_packet->city);
19394
19395#ifdef FREECIV_DELTA_PROTOCOL
19398 struct genhash **hash = pc->phs.received + PACKET_CITY_UPDATE_COUNTERS;
19399
19400 if (nullptr == *hash) {
19402 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19403 }
19404
19405 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19406 *real_packet = *old;
19407 } else {
19408 /* packet is already initialized empty */
19409 log_packet_detailed(" no old info");
19410 }
19411
19412#ifdef FREECIV_JSON_CONNECTION
19413 field_addr.name = "fields";
19414#endif /* FREECIV_JSON_CONNECTION */
19415 DIO_BV_GET(&din, &field_addr, fields);
19416
19417 if (BV_ISSET(fields, 0)) {
19418 log_packet_detailed(" got field 'count'");
19419
19420#ifdef FREECIV_JSON_CONNECTION
19421 field_addr.name = "count";
19422#endif /* FREECIV_JSON_CONNECTION */
19423
19424 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19426 }
19427 }
19428
19429 if (BV_ISSET(fields, 1)) {
19430 log_packet_detailed(" got field 'counters'");
19431
19432#ifdef FREECIV_JSON_CONNECTION
19433 field_addr.name = "counters";
19434#endif /* FREECIV_JSON_CONNECTION */
19435
19436 {
19437 int i;
19438
19439 if (real_packet->count > MAX_COUNTERS) {
19440 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19441 }
19442
19443#ifdef FREECIV_JSON_CONNECTION
19444 /* Enter array. */
19445 field_addr.sub_location = plocation_elem_new(0);
19446#endif /* FREECIV_JSON_CONNECTION */
19447
19448 for (i = 0; i < real_packet->count; i++) {
19449#ifdef FREECIV_JSON_CONNECTION
19450 /* Next array element */
19451 field_addr.sub_location->number = i;
19452#endif /* FREECIV_JSON_CONNECTION */
19453
19454 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19456 }
19457 }
19458
19459#ifdef FREECIV_JSON_CONNECTION
19460 /* Exit array. */
19461 FC_FREE(field_addr.sub_location);
19462#endif /* FREECIV_JSON_CONNECTION */
19463 }
19464 }
19465
19466 if (nullptr == old) {
19467 old = fc_malloc(sizeof(*old));
19469 *old = *real_packet;
19471 } else {
19472 *old = *real_packet;
19473 }
19474
19475#else /* FREECIV_DELTA_PROTOCOL */
19476#ifdef FREECIV_JSON_CONNECTION
19477 field_addr.name = "count";
19478#endif /* FREECIV_JSON_CONNECTION */
19479
19480 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19482 }
19483
19484#ifdef FREECIV_JSON_CONNECTION
19485 field_addr.name = "counters";
19486#endif /* FREECIV_JSON_CONNECTION */
19487
19488 {
19489 int i;
19490
19491 if (real_packet->count > MAX_COUNTERS) {
19492 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19493 }
19494
19495#ifdef FREECIV_JSON_CONNECTION
19496 /* Enter array. */
19497 field_addr.sub_location = plocation_elem_new(0);
19498#endif /* FREECIV_JSON_CONNECTION */
19499
19500 for (i = 0; i < real_packet->count; i++) {
19501#ifdef FREECIV_JSON_CONNECTION
19502 /* Next array element */
19503 field_addr.sub_location->number = i;
19504#endif /* FREECIV_JSON_CONNECTION */
19505
19506 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19508 }
19509 }
19510
19511#ifdef FREECIV_JSON_CONNECTION
19512 /* Exit array. */
19513 FC_FREE(field_addr.sub_location);
19514#endif /* FREECIV_JSON_CONNECTION */
19515 }
19516#endif /* FREECIV_DELTA_PROTOCOL */
19517
19519#undef FREE_PACKET_STRUCT
19520}
19521
19523{
19524 const struct packet_city_update_counters *real_packet = packet;
19525 int e;
19527
19528 log_packet_detailed("packet_city_update_counters_100: sending info about (%d)",
19529 real_packet->city);
19530
19531#ifdef FREECIV_DELTA_PROTOCOL
19534 bool differ;
19535 int different = 0;
19536 struct genhash **hash = pc->phs.sent + PACKET_CITY_UPDATE_COUNTERS;
19537
19538 if (nullptr == *hash) {
19540 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19541 }
19542 BV_CLR_ALL(fields);
19543
19544 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19545 old = fc_malloc(sizeof(*old));
19546 /* temporary bitcopy just to insert correctly */
19547 *old = *real_packet;
19550 different = 1; /* Force to send. */
19551 }
19552
19553 differ = (old->count != real_packet->count);
19554 if (differ) {
19555 different++;
19556 BV_SET(fields, 0);
19557 }
19558
19559 differ = (old->count != real_packet->count);
19560 if (!differ) {
19561 int i;
19562
19563 for (i = 0; i < old->count; i++) {
19564 differ = (old->counters[i] != real_packet->counters[i]);
19565 if (differ) {
19566 break;
19567 }
19568 }
19569 }
19570 if (differ) {
19571 different++;
19572 BV_SET(fields, 1);
19573 }
19574
19575 if (different == 0) {
19576 log_packet_detailed(" no change -> discard");
19578 }
19579#endif /* FREECIV_DELTA_PROTOCOL */
19580
19581#ifdef FREECIV_JSON_CONNECTION
19582 struct plocation field_addr;
19583 {
19584 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19587 }
19588#endif /* FREECIV_JSON_CONNECTION */
19589
19590#ifdef FREECIV_JSON_CONNECTION
19591 field_addr.name = "city";
19592#endif /* FREECIV_JSON_CONNECTION */
19593 e = 0;
19594
19595 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
19596
19597 if (e) {
19598 log_packet_detailed("'city' field error detected");
19599 }
19600
19601#ifdef FREECIV_DELTA_PROTOCOL
19602#ifdef FREECIV_JSON_CONNECTION
19603 field_addr.name = "fields";
19604#endif /* FREECIV_JSON_CONNECTION */
19605 e = 0;
19606 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19607 if (e) {
19608 log_packet_detailed("fields bitvector error detected");
19609 }
19610
19611 if (BV_ISSET(fields, 0)) {
19612 log_packet_detailed(" field 'count' has changed");
19613
19614#ifdef FREECIV_JSON_CONNECTION
19615 field_addr.name = "count";
19616#endif /* FREECIV_JSON_CONNECTION */
19617 e = 0;
19618
19619 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19620
19621 if (e) {
19622 log_packet_detailed("'count' field error detected");
19623 }
19624 }
19625
19626 if (BV_ISSET(fields, 1)) {
19627 log_packet_detailed(" field 'counters' has changed");
19628
19629#ifdef FREECIV_JSON_CONNECTION
19630 field_addr.name = "counters";
19631#endif /* FREECIV_JSON_CONNECTION */
19632 e = 0;
19633
19634 {
19635 int i;
19636
19637#ifdef FREECIV_JSON_CONNECTION
19638 /* Create the array. */
19639 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19640
19641 /* Enter array. */
19642 field_addr.sub_location = plocation_elem_new(0);
19643#endif /* FREECIV_JSON_CONNECTION */
19644
19645 for (i = 0; i < real_packet->count; i++) {
19646#ifdef FREECIV_JSON_CONNECTION
19647 /* Next array element. */
19648 field_addr.sub_location->number = i;
19649#endif /* FREECIV_JSON_CONNECTION */
19650
19651 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19652 }
19653
19654#ifdef FREECIV_JSON_CONNECTION
19655 /* Exit array. */
19656 FC_FREE(field_addr.sub_location);
19657#endif /* FREECIV_JSON_CONNECTION */
19658 }
19659
19660 if (e) {
19661 log_packet_detailed("'counters' field error detected");
19662 }
19663 }
19664
19665 *old = *real_packet;
19666
19667#else /* FREECIV_DELTA_PROTOCOL */
19668#ifdef FREECIV_JSON_CONNECTION
19669 field_addr.name = "count";
19670#endif /* FREECIV_JSON_CONNECTION */
19671 e = 0;
19672
19673 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19674
19675 if (e) {
19676 log_packet_detailed("'count' field error detected");
19677 }
19678
19679#ifdef FREECIV_JSON_CONNECTION
19680 field_addr.name = "counters";
19681#endif /* FREECIV_JSON_CONNECTION */
19682 e = 0;
19683
19684 {
19685 int i;
19686
19687#ifdef FREECIV_JSON_CONNECTION
19688 /* Create the array. */
19689 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19690
19691 /* Enter array. */
19692 field_addr.sub_location = plocation_elem_new(0);
19693#endif /* FREECIV_JSON_CONNECTION */
19694
19695 for (i = 0; i < real_packet->count; i++) {
19696#ifdef FREECIV_JSON_CONNECTION
19697 /* Next array element. */
19698 field_addr.sub_location->number = i;
19699#endif /* FREECIV_JSON_CONNECTION */
19700
19701 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19702 }
19703
19704#ifdef FREECIV_JSON_CONNECTION
19705 /* Exit array. */
19706 FC_FREE(field_addr.sub_location);
19707#endif /* FREECIV_JSON_CONNECTION */
19708 }
19709
19710 if (e) {
19711 log_packet_detailed("'counters' field error detected");
19712 }
19713#endif /* FREECIV_DELTA_PROTOCOL */
19714
19716}
19717
19719{
19720 if (!pc->used) {
19721 log_error("WARNING: trying to send data to the closed connection %s",
19723 return -1;
19724 }
19725 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet != nullptr, -1,
19726 "Handler for PACKET_CITY_UPDATE_COUNTERS not installed");
19727 return pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet(pc, packet);
19728}
19729
19731{
19732 conn_list_iterate(dest, pconn) {
19735}
19736
19737static inline void init_packet_city_short_info(struct packet_city_short_info *packet)
19738{
19739 memset(packet, 0, sizeof(*packet));
19740}
19741
19742#define free_packet_city_short_info(_packet) (void) 0
19743#define destroy_packet_city_short_info free
19744
19745#ifdef FREECIV_DELTA_PROTOCOL
19747{
19748 const struct packet_city_short_info *key = (const struct packet_city_short_info *) vkey;
19749 genhash_val_t result = 0;
19750
19751 result += key->id;
19752
19753 result &= 0xFFFFFFFF;
19754 return result;
19755}
19756
19757static bool cmp_packet_city_short_info_100(const void *vkey1, const void *vkey2)
19758{
19759 const struct packet_city_short_info *old = (const struct packet_city_short_info *) vkey1;
19760 const struct packet_city_short_info *real_packet = (const struct packet_city_short_info *) vkey2;
19761 bool differ;
19762
19763 differ = (old->id != real_packet->id);
19764
19765 return !differ;
19766}
19768#endif /* FREECIV_DELTA_PROTOCOL */
19769
19771{
19772#define FREE_PACKET_STRUCT(_packet) free_packet_city_short_info(_packet)
19774
19775#ifdef FREECIV_JSON_CONNECTION
19776 struct plocation field_addr;
19777 {
19778 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19781 }
19782#endif /* FREECIV_JSON_CONNECTION */
19783
19784#ifdef FREECIV_JSON_CONNECTION
19785 field_addr.name = "id";
19786#endif /* FREECIV_JSON_CONNECTION */
19787
19788 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
19790 }
19791
19792 log_packet_detailed("packet_city_short_info_100: got info about (%d)",
19793 real_packet->id);
19794
19795#ifdef FREECIV_DELTA_PROTOCOL
19798 struct genhash **hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
19799
19800 if (nullptr == *hash) {
19802 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
19803 }
19804
19805 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19806 *real_packet = *old;
19807 } else {
19808 /* packet is already initialized empty */
19809 log_packet_detailed(" no old info");
19810 }
19811
19812#ifdef FREECIV_JSON_CONNECTION
19813 field_addr.name = "fields";
19814#endif /* FREECIV_JSON_CONNECTION */
19815 DIO_BV_GET(&din, &field_addr, fields);
19816
19817 if (BV_ISSET(fields, 0)) {
19818 log_packet_detailed(" got field 'tile'");
19819
19820#ifdef FREECIV_JSON_CONNECTION
19821 field_addr.name = "tile";
19822#endif /* FREECIV_JSON_CONNECTION */
19823
19824 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
19826 }
19827 }
19828
19829 if (BV_ISSET(fields, 1)) {
19830 log_packet_detailed(" got field 'owner'");
19831
19832#ifdef FREECIV_JSON_CONNECTION
19833 field_addr.name = "owner";
19834#endif /* FREECIV_JSON_CONNECTION */
19835
19836 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
19838 }
19839 }
19840
19841 if (BV_ISSET(fields, 2)) {
19842 log_packet_detailed(" got field 'original'");
19843
19844#ifdef FREECIV_JSON_CONNECTION
19845 field_addr.name = "original";
19846#endif /* FREECIV_JSON_CONNECTION */
19847
19848 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
19850 }
19851 }
19852
19853 if (BV_ISSET(fields, 3)) {
19854 log_packet_detailed(" got field 'size'");
19855
19856#ifdef FREECIV_JSON_CONNECTION
19857 field_addr.name = "size";
19858#endif /* FREECIV_JSON_CONNECTION */
19859
19860 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
19862 }
19863 }
19864
19865 if (BV_ISSET(fields, 4)) {
19866 log_packet_detailed(" got field 'style'");
19867
19868#ifdef FREECIV_JSON_CONNECTION
19869 field_addr.name = "style";
19870#endif /* FREECIV_JSON_CONNECTION */
19871
19872 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
19874 }
19875 }
19876
19877 if (BV_ISSET(fields, 5)) {
19878 log_packet_detailed(" got field 'capital'");
19879
19880#ifdef FREECIV_JSON_CONNECTION
19881 field_addr.name = "capital";
19882#endif /* FREECIV_JSON_CONNECTION */
19883
19884 {
19885 int readin;
19886
19887 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19889 }
19890 real_packet->capital = readin;
19891 }
19892 }
19893
19894 real_packet->occupied = BV_ISSET(fields, 6);
19895
19896 if (BV_ISSET(fields, 7)) {
19897 log_packet_detailed(" got field 'walls'");
19898
19899#ifdef FREECIV_JSON_CONNECTION
19900 field_addr.name = "walls";
19901#endif /* FREECIV_JSON_CONNECTION */
19902
19903 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
19905 }
19906 }
19907
19908 real_packet->happy = BV_ISSET(fields, 8);
19909
19910 real_packet->unhappy = BV_ISSET(fields, 9);
19911
19912 if (BV_ISSET(fields, 10)) {
19913 log_packet_detailed(" got field 'city_image'");
19914
19915#ifdef FREECIV_JSON_CONNECTION
19916 field_addr.name = "city_image";
19917#endif /* FREECIV_JSON_CONNECTION */
19918
19919 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
19920 RECEIVE_PACKET_FIELD_ERROR(city_image);
19921 }
19922 }
19923
19924 if (BV_ISSET(fields, 11)) {
19925 log_packet_detailed(" got field 'improvements'");
19926
19927#ifdef FREECIV_JSON_CONNECTION
19928 field_addr.name = "improvements";
19929#endif /* FREECIV_JSON_CONNECTION */
19930
19931 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
19932 RECEIVE_PACKET_FIELD_ERROR(improvements);
19933 }
19934 }
19935
19936 if (BV_ISSET(fields, 12)) {
19937 log_packet_detailed(" got field 'name'");
19938
19939#ifdef FREECIV_JSON_CONNECTION
19940 field_addr.name = "name";
19941#endif /* FREECIV_JSON_CONNECTION */
19942
19943 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
19945 }
19946 }
19947
19948 if (nullptr == old) {
19949 old = fc_malloc(sizeof(*old));
19951 *old = *real_packet;
19953 } else {
19954 *old = *real_packet;
19955 }
19956
19957 hash = pc->phs.received + PACKET_CITY_INFO;
19958 if (nullptr != *hash) {
19960 }
19961
19962 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
19963 if (nullptr != *hash) {
19965 }
19966
19967 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
19968 if (nullptr != *hash) {
19970 }
19971
19972 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
19973 if (nullptr != *hash) {
19975 }
19976
19977#else /* FREECIV_DELTA_PROTOCOL */
19978#ifdef FREECIV_JSON_CONNECTION
19979 field_addr.name = "tile";
19980#endif /* FREECIV_JSON_CONNECTION */
19981
19982 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
19984 }
19985
19986#ifdef FREECIV_JSON_CONNECTION
19987 field_addr.name = "owner";
19988#endif /* FREECIV_JSON_CONNECTION */
19989
19990 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
19992 }
19993
19994#ifdef FREECIV_JSON_CONNECTION
19995 field_addr.name = "original";
19996#endif /* FREECIV_JSON_CONNECTION */
19997
19998 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
20000 }
20001
20002#ifdef FREECIV_JSON_CONNECTION
20003 field_addr.name = "size";
20004#endif /* FREECIV_JSON_CONNECTION */
20005
20006 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
20008 }
20009
20010#ifdef FREECIV_JSON_CONNECTION
20011 field_addr.name = "style";
20012#endif /* FREECIV_JSON_CONNECTION */
20013
20014 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
20016 }
20017
20018#ifdef FREECIV_JSON_CONNECTION
20019 field_addr.name = "capital";
20020#endif /* FREECIV_JSON_CONNECTION */
20021
20022 {
20023 int readin;
20024
20025 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20027 }
20028 real_packet->capital = readin;
20029 }
20030
20031#ifdef FREECIV_JSON_CONNECTION
20032 field_addr.name = "occupied";
20033#endif /* FREECIV_JSON_CONNECTION */
20034
20035 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
20037 }
20038
20039#ifdef FREECIV_JSON_CONNECTION
20040 field_addr.name = "walls";
20041#endif /* FREECIV_JSON_CONNECTION */
20042
20043 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20045 }
20046
20047#ifdef FREECIV_JSON_CONNECTION
20048 field_addr.name = "happy";
20049#endif /* FREECIV_JSON_CONNECTION */
20050
20051 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->happy)) {
20053 }
20054
20055#ifdef FREECIV_JSON_CONNECTION
20056 field_addr.name = "unhappy";
20057#endif /* FREECIV_JSON_CONNECTION */
20058
20059 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unhappy)) {
20061 }
20062
20063#ifdef FREECIV_JSON_CONNECTION
20064 field_addr.name = "city_image";
20065#endif /* FREECIV_JSON_CONNECTION */
20066
20067 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20068 RECEIVE_PACKET_FIELD_ERROR(city_image);
20069 }
20070
20071#ifdef FREECIV_JSON_CONNECTION
20072 field_addr.name = "improvements";
20073#endif /* FREECIV_JSON_CONNECTION */
20074
20075 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20076 RECEIVE_PACKET_FIELD_ERROR(improvements);
20077 }
20078
20079#ifdef FREECIV_JSON_CONNECTION
20080 field_addr.name = "name";
20081#endif /* FREECIV_JSON_CONNECTION */
20082
20083 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20085 }
20086#endif /* FREECIV_DELTA_PROTOCOL */
20087
20089#undef FREE_PACKET_STRUCT
20090}
20091
20093{
20094 const struct packet_city_short_info *real_packet = packet;
20095 int e;
20097
20098 log_packet_detailed("packet_city_short_info_100: sending info about (%d)",
20099 real_packet->id);
20100
20101#ifdef FREECIV_DELTA_PROTOCOL
20104 bool differ;
20105 int different = 0;
20106 struct genhash **hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
20107
20108 if (nullptr == *hash) {
20110 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
20111 }
20112 BV_CLR_ALL(fields);
20113
20114 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20115 old = fc_malloc(sizeof(*old));
20116 /* temporary bitcopy just to insert correctly */
20117 *old = *real_packet;
20120 different = 1; /* Force to send. */
20121 }
20122
20123 differ = (old->tile != real_packet->tile);
20124 if (differ) {
20125 different++;
20126 BV_SET(fields, 0);
20127 }
20128
20129 differ = (old->owner != real_packet->owner);
20130 if (differ) {
20131 different++;
20132 BV_SET(fields, 1);
20133 }
20134
20135 differ = (old->original != real_packet->original);
20136 if (differ) {
20137 different++;
20138 BV_SET(fields, 2);
20139 }
20140
20141 differ = (old->size != real_packet->size);
20142 if (differ) {
20143 different++;
20144 BV_SET(fields, 3);
20145 }
20146
20147 differ = (old->style != real_packet->style);
20148 if (differ) {
20149 different++;
20150 BV_SET(fields, 4);
20151 }
20152
20153 differ = (old->capital != real_packet->capital);
20154 if (differ) {
20155 different++;
20156 BV_SET(fields, 5);
20157 }
20158
20159 differ = (old->occupied != real_packet->occupied);
20160 if (differ) {
20161 different++;
20162 }
20163 /* folded into head */
20164 if (real_packet->occupied) {
20165 BV_SET(fields, 6);
20166 }
20167
20168 differ = (old->walls != real_packet->walls);
20169 if (differ) {
20170 different++;
20171 BV_SET(fields, 7);
20172 }
20173
20174 differ = (old->happy != real_packet->happy);
20175 if (differ) {
20176 different++;
20177 }
20178 /* folded into head */
20179 if (real_packet->happy) {
20180 BV_SET(fields, 8);
20181 }
20182
20183 differ = (old->unhappy != real_packet->unhappy);
20184 if (differ) {
20185 different++;
20186 }
20187 /* folded into head */
20188 if (real_packet->unhappy) {
20189 BV_SET(fields, 9);
20190 }
20191
20192 differ = (old->city_image != real_packet->city_image);
20193 if (differ) {
20194 different++;
20195 BV_SET(fields, 10);
20196 }
20197
20198 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
20199 if (differ) {
20200 different++;
20201 BV_SET(fields, 11);
20202 }
20203
20204 differ = (strcmp(old->name, real_packet->name) != 0);
20205 if (differ) {
20206 different++;
20207 BV_SET(fields, 12);
20208 }
20209
20210 if (different == 0) {
20211 log_packet_detailed(" no change -> discard");
20213 }
20214#endif /* FREECIV_DELTA_PROTOCOL */
20215
20216#ifdef FREECIV_JSON_CONNECTION
20217 struct plocation field_addr;
20218 {
20219 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20222 }
20223#endif /* FREECIV_JSON_CONNECTION */
20224
20225#ifdef FREECIV_JSON_CONNECTION
20226 field_addr.name = "id";
20227#endif /* FREECIV_JSON_CONNECTION */
20228 e = 0;
20229
20230 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
20231
20232 if (e) {
20233 log_packet_detailed("'id' field error detected");
20234 }
20235
20236#ifdef FREECIV_DELTA_PROTOCOL
20237#ifdef FREECIV_JSON_CONNECTION
20238 field_addr.name = "fields";
20239#endif /* FREECIV_JSON_CONNECTION */
20240 e = 0;
20241 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20242 if (e) {
20243 log_packet_detailed("fields bitvector error detected");
20244 }
20245
20246 if (BV_ISSET(fields, 0)) {
20247 log_packet_detailed(" field 'tile' has changed");
20248
20249#ifdef FREECIV_JSON_CONNECTION
20250 field_addr.name = "tile";
20251#endif /* FREECIV_JSON_CONNECTION */
20252 e = 0;
20253
20254 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20255
20256 if (e) {
20257 log_packet_detailed("'tile' field error detected");
20258 }
20259 }
20260
20261 if (BV_ISSET(fields, 1)) {
20262 log_packet_detailed(" field 'owner' has changed");
20263
20264#ifdef FREECIV_JSON_CONNECTION
20265 field_addr.name = "owner";
20266#endif /* FREECIV_JSON_CONNECTION */
20267 e = 0;
20268
20269 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20270
20271 if (e) {
20272 log_packet_detailed("'owner' field error detected");
20273 }
20274 }
20275
20276 if (BV_ISSET(fields, 2)) {
20277 log_packet_detailed(" field 'original' has changed");
20278
20279#ifdef FREECIV_JSON_CONNECTION
20280 field_addr.name = "original";
20281#endif /* FREECIV_JSON_CONNECTION */
20282 e = 0;
20283
20284 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20285
20286 if (e) {
20287 log_packet_detailed("'original' field error detected");
20288 }
20289 }
20290
20291 if (BV_ISSET(fields, 3)) {
20292 log_packet_detailed(" field 'size' has changed");
20293
20294#ifdef FREECIV_JSON_CONNECTION
20295 field_addr.name = "size";
20296#endif /* FREECIV_JSON_CONNECTION */
20297 e = 0;
20298
20299 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20300
20301 if (e) {
20302 log_packet_detailed("'size' field error detected");
20303 }
20304 }
20305
20306 if (BV_ISSET(fields, 4)) {
20307 log_packet_detailed(" field 'style' has changed");
20308
20309#ifdef FREECIV_JSON_CONNECTION
20310 field_addr.name = "style";
20311#endif /* FREECIV_JSON_CONNECTION */
20312 e = 0;
20313
20314 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20315
20316 if (e) {
20317 log_packet_detailed("'style' field error detected");
20318 }
20319 }
20320
20321 if (BV_ISSET(fields, 5)) {
20322 log_packet_detailed(" field 'capital' has changed");
20323
20324#ifdef FREECIV_JSON_CONNECTION
20325 field_addr.name = "capital";
20326#endif /* FREECIV_JSON_CONNECTION */
20327 e = 0;
20328
20329 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20330
20331 if (e) {
20332 log_packet_detailed("'capital' field error detected");
20333 }
20334 }
20335
20336 /* field 6 is folded into the header */
20337
20338 if (BV_ISSET(fields, 7)) {
20339 log_packet_detailed(" field 'walls' has changed");
20340
20341#ifdef FREECIV_JSON_CONNECTION
20342 field_addr.name = "walls";
20343#endif /* FREECIV_JSON_CONNECTION */
20344 e = 0;
20345
20346 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20347
20348 if (e) {
20349 log_packet_detailed("'walls' field error detected");
20350 }
20351 }
20352
20353 /* field 8 is folded into the header */
20354
20355 /* field 9 is folded into the header */
20356
20357 if (BV_ISSET(fields, 10)) {
20358 log_packet_detailed(" field 'city_image' has changed");
20359
20360#ifdef FREECIV_JSON_CONNECTION
20361 field_addr.name = "city_image";
20362#endif /* FREECIV_JSON_CONNECTION */
20363 e = 0;
20364
20365 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20366
20367 if (e) {
20368 log_packet_detailed("'city_image' field error detected");
20369 }
20370 }
20371
20372 if (BV_ISSET(fields, 11)) {
20373 log_packet_detailed(" field 'improvements' has changed");
20374
20375#ifdef FREECIV_JSON_CONNECTION
20376 field_addr.name = "improvements";
20377#endif /* FREECIV_JSON_CONNECTION */
20378 e = 0;
20379
20380 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20381
20382 if (e) {
20383 log_packet_detailed("'improvements' field error detected");
20384 }
20385 }
20386
20387 if (BV_ISSET(fields, 12)) {
20388 log_packet_detailed(" field 'name' has changed");
20389
20390#ifdef FREECIV_JSON_CONNECTION
20391 field_addr.name = "name";
20392#endif /* FREECIV_JSON_CONNECTION */
20393 e = 0;
20394
20395 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20396
20397 if (e) {
20398 log_packet_detailed("'name' field error detected");
20399 }
20400 }
20401
20402 *old = *real_packet;
20403
20404 hash = pc->phs.sent + PACKET_CITY_INFO;
20405 if (nullptr != *hash) {
20407 }
20408
20410 if (nullptr != *hash) {
20412 }
20413
20414 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
20415 if (nullptr != *hash) {
20417 }
20418
20419 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
20420 if (nullptr != *hash) {
20422 }
20423
20424#else /* FREECIV_DELTA_PROTOCOL */
20425#ifdef FREECIV_JSON_CONNECTION
20426 field_addr.name = "tile";
20427#endif /* FREECIV_JSON_CONNECTION */
20428 e = 0;
20429
20430 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20431
20432 if (e) {
20433 log_packet_detailed("'tile' field error detected");
20434 }
20435
20436#ifdef FREECIV_JSON_CONNECTION
20437 field_addr.name = "owner";
20438#endif /* FREECIV_JSON_CONNECTION */
20439 e = 0;
20440
20441 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20442
20443 if (e) {
20444 log_packet_detailed("'owner' field error detected");
20445 }
20446
20447#ifdef FREECIV_JSON_CONNECTION
20448 field_addr.name = "original";
20449#endif /* FREECIV_JSON_CONNECTION */
20450 e = 0;
20451
20452 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20453
20454 if (e) {
20455 log_packet_detailed("'original' field error detected");
20456 }
20457
20458#ifdef FREECIV_JSON_CONNECTION
20459 field_addr.name = "size";
20460#endif /* FREECIV_JSON_CONNECTION */
20461 e = 0;
20462
20463 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20464
20465 if (e) {
20466 log_packet_detailed("'size' field error detected");
20467 }
20468
20469#ifdef FREECIV_JSON_CONNECTION
20470 field_addr.name = "style";
20471#endif /* FREECIV_JSON_CONNECTION */
20472 e = 0;
20473
20474 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20475
20476 if (e) {
20477 log_packet_detailed("'style' field error detected");
20478 }
20479
20480#ifdef FREECIV_JSON_CONNECTION
20481 field_addr.name = "capital";
20482#endif /* FREECIV_JSON_CONNECTION */
20483 e = 0;
20484
20485 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20486
20487 if (e) {
20488 log_packet_detailed("'capital' field error detected");
20489 }
20490
20491#ifdef FREECIV_JSON_CONNECTION
20492 field_addr.name = "occupied";
20493#endif /* FREECIV_JSON_CONNECTION */
20494 e = 0;
20495
20496 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
20497
20498 if (e) {
20499 log_packet_detailed("'occupied' field error detected");
20500 }
20501
20502#ifdef FREECIV_JSON_CONNECTION
20503 field_addr.name = "walls";
20504#endif /* FREECIV_JSON_CONNECTION */
20505 e = 0;
20506
20507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20508
20509 if (e) {
20510 log_packet_detailed("'walls' field error detected");
20511 }
20512
20513#ifdef FREECIV_JSON_CONNECTION
20514 field_addr.name = "happy";
20515#endif /* FREECIV_JSON_CONNECTION */
20516 e = 0;
20517
20518 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->happy);
20519
20520 if (e) {
20521 log_packet_detailed("'happy' field error detected");
20522 }
20523
20524#ifdef FREECIV_JSON_CONNECTION
20525 field_addr.name = "unhappy";
20526#endif /* FREECIV_JSON_CONNECTION */
20527 e = 0;
20528
20529 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unhappy);
20530
20531 if (e) {
20532 log_packet_detailed("'unhappy' field error detected");
20533 }
20534
20535#ifdef FREECIV_JSON_CONNECTION
20536 field_addr.name = "city_image";
20537#endif /* FREECIV_JSON_CONNECTION */
20538 e = 0;
20539
20540 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20541
20542 if (e) {
20543 log_packet_detailed("'city_image' field error detected");
20544 }
20545
20546#ifdef FREECIV_JSON_CONNECTION
20547 field_addr.name = "improvements";
20548#endif /* FREECIV_JSON_CONNECTION */
20549 e = 0;
20550
20551 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20552
20553 if (e) {
20554 log_packet_detailed("'improvements' field error detected");
20555 }
20556
20557#ifdef FREECIV_JSON_CONNECTION
20558 field_addr.name = "name";
20559#endif /* FREECIV_JSON_CONNECTION */
20560 e = 0;
20561
20562 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20563
20564 if (e) {
20565 log_packet_detailed("'name' field error detected");
20566 }
20567#endif /* FREECIV_DELTA_PROTOCOL */
20568
20570}
20571
20573{
20574 if (!pc->used) {
20575 log_error("WARNING: trying to send data to the closed connection %s",
20577 return -1;
20578 }
20579 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet != nullptr, -1,
20580 "Handler for PACKET_CITY_SHORT_INFO not installed");
20581 return pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet(pc, packet);
20582}
20583
20584void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
20585{
20586 conn_list_iterate(dest, pconn) {
20589}
20590
20592{
20593 memset(packet, 0, sizeof(*packet));
20594}
20595
20596#define free_packet_trade_route_info(_packet) (void) 0
20597#define destroy_packet_trade_route_info free
20598
20599#ifdef FREECIV_DELTA_PROTOCOL
20600#define hash_packet_trade_route_info_100 hash_const
20601#define cmp_packet_trade_route_info_100 cmp_const
20603#endif /* FREECIV_DELTA_PROTOCOL */
20604
20606{
20607#define FREE_PACKET_STRUCT(_packet) free_packet_trade_route_info(_packet)
20609
20610#ifdef FREECIV_JSON_CONNECTION
20611 struct plocation field_addr;
20612 {
20613 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20616 }
20617#endif /* FREECIV_JSON_CONNECTION */
20618
20619 log_packet_detailed("packet_trade_route_info_100: got info about ()");
20620
20621#ifdef FREECIV_DELTA_PROTOCOL
20624 struct genhash **hash = pc->phs.received + PACKET_TRADE_ROUTE_INFO;
20625
20626 if (nullptr == *hash) {
20628 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20629 }
20630
20631 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20632 *real_packet = *old;
20633 } else {
20634 /* packet is already initialized empty */
20635 log_packet_detailed(" no old info");
20636 }
20637
20638#ifdef FREECIV_JSON_CONNECTION
20639 field_addr.name = "fields";
20640#endif /* FREECIV_JSON_CONNECTION */
20641 DIO_BV_GET(&din, &field_addr, fields);
20642
20643 if (BV_ISSET(fields, 0)) {
20644 log_packet_detailed(" got field 'city'");
20645
20646#ifdef FREECIV_JSON_CONNECTION
20647 field_addr.name = "city";
20648#endif /* FREECIV_JSON_CONNECTION */
20649
20650 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20652 }
20653 }
20654
20655 if (BV_ISSET(fields, 1)) {
20656 log_packet_detailed(" got field 'index'");
20657
20658#ifdef FREECIV_JSON_CONNECTION
20659 field_addr.name = "index";
20660#endif /* FREECIV_JSON_CONNECTION */
20661
20662 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20664 }
20665 }
20666
20667 if (BV_ISSET(fields, 2)) {
20668 log_packet_detailed(" got field 'partner'");
20669
20670#ifdef FREECIV_JSON_CONNECTION
20671 field_addr.name = "partner";
20672#endif /* FREECIV_JSON_CONNECTION */
20673
20674 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20676 }
20677 }
20678
20679 if (BV_ISSET(fields, 3)) {
20680 log_packet_detailed(" got field 'value'");
20681
20682#ifdef FREECIV_JSON_CONNECTION
20683 field_addr.name = "value";
20684#endif /* FREECIV_JSON_CONNECTION */
20685
20686 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20688 }
20689 }
20690
20691 if (BV_ISSET(fields, 4)) {
20692 log_packet_detailed(" got field 'direction'");
20693
20694#ifdef FREECIV_JSON_CONNECTION
20695 field_addr.name = "direction";
20696#endif /* FREECIV_JSON_CONNECTION */
20697
20698 {
20699 int readin;
20700
20701 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20702 RECEIVE_PACKET_FIELD_ERROR(direction);
20703 }
20704 real_packet->direction = readin;
20705 }
20706 }
20707
20708 if (BV_ISSET(fields, 5)) {
20709 log_packet_detailed(" got field 'goods'");
20710
20711#ifdef FREECIV_JSON_CONNECTION
20712 field_addr.name = "goods";
20713#endif /* FREECIV_JSON_CONNECTION */
20714
20715 {
20716 int readin;
20717
20718 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20720 }
20721 real_packet->goods = readin;
20722 }
20723 }
20724
20725 if (nullptr == old) {
20726 old = fc_malloc(sizeof(*old));
20728 *old = *real_packet;
20730 } else {
20731 *old = *real_packet;
20732 }
20733
20734#else /* FREECIV_DELTA_PROTOCOL */
20735#ifdef FREECIV_JSON_CONNECTION
20736 field_addr.name = "city";
20737#endif /* FREECIV_JSON_CONNECTION */
20738
20739 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20741 }
20742
20743#ifdef FREECIV_JSON_CONNECTION
20744 field_addr.name = "index";
20745#endif /* FREECIV_JSON_CONNECTION */
20746
20747 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20749 }
20750
20751#ifdef FREECIV_JSON_CONNECTION
20752 field_addr.name = "partner";
20753#endif /* FREECIV_JSON_CONNECTION */
20754
20755 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20757 }
20758
20759#ifdef FREECIV_JSON_CONNECTION
20760 field_addr.name = "value";
20761#endif /* FREECIV_JSON_CONNECTION */
20762
20763 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20765 }
20766
20767#ifdef FREECIV_JSON_CONNECTION
20768 field_addr.name = "direction";
20769#endif /* FREECIV_JSON_CONNECTION */
20770
20771 {
20772 int readin;
20773
20774 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20775 RECEIVE_PACKET_FIELD_ERROR(direction);
20776 }
20777 real_packet->direction = readin;
20778 }
20779
20780#ifdef FREECIV_JSON_CONNECTION
20781 field_addr.name = "goods";
20782#endif /* FREECIV_JSON_CONNECTION */
20783
20784 {
20785 int readin;
20786
20787 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20789 }
20790 real_packet->goods = readin;
20791 }
20792#endif /* FREECIV_DELTA_PROTOCOL */
20793
20795#undef FREE_PACKET_STRUCT
20796}
20797
20799{
20800 const struct packet_trade_route_info *real_packet = packet;
20801 int e;
20803
20804 log_packet_detailed("packet_trade_route_info_100: sending info about ()");
20805
20806#ifdef FREECIV_DELTA_PROTOCOL
20809 bool differ;
20810 struct genhash **hash = pc->phs.sent + PACKET_TRADE_ROUTE_INFO;
20811
20812 if (nullptr == *hash) {
20814 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20815 }
20816 BV_CLR_ALL(fields);
20817
20818 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20819 old = fc_malloc(sizeof(*old));
20820 /* temporary bitcopy just to insert correctly */
20821 *old = *real_packet;
20824 }
20825
20826 differ = (old->city != real_packet->city);
20827 if (differ) {
20828 BV_SET(fields, 0);
20829 }
20830
20831 differ = (old->index != real_packet->index);
20832 if (differ) {
20833 BV_SET(fields, 1);
20834 }
20835
20836 differ = (old->partner != real_packet->partner);
20837 if (differ) {
20838 BV_SET(fields, 2);
20839 }
20840
20841 differ = (old->value != real_packet->value);
20842 if (differ) {
20843 BV_SET(fields, 3);
20844 }
20845
20846 differ = (old->direction != real_packet->direction);
20847 if (differ) {
20848 BV_SET(fields, 4);
20849 }
20850
20851 differ = (old->goods != real_packet->goods);
20852 if (differ) {
20853 BV_SET(fields, 5);
20854 }
20855#endif /* FREECIV_DELTA_PROTOCOL */
20856
20857#ifdef FREECIV_JSON_CONNECTION
20858 struct plocation field_addr;
20859 {
20860 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20863 }
20864#endif /* FREECIV_JSON_CONNECTION */
20865
20866#ifdef FREECIV_DELTA_PROTOCOL
20867#ifdef FREECIV_JSON_CONNECTION
20868 field_addr.name = "fields";
20869#endif /* FREECIV_JSON_CONNECTION */
20870 e = 0;
20871 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20872 if (e) {
20873 log_packet_detailed("fields bitvector error detected");
20874 }
20875
20876 if (BV_ISSET(fields, 0)) {
20877 log_packet_detailed(" field 'city' has changed");
20878
20879#ifdef FREECIV_JSON_CONNECTION
20880 field_addr.name = "city";
20881#endif /* FREECIV_JSON_CONNECTION */
20882 e = 0;
20883
20884 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20885
20886 if (e) {
20887 log_packet_detailed("'city' field error detected");
20888 }
20889 }
20890
20891 if (BV_ISSET(fields, 1)) {
20892 log_packet_detailed(" field 'index' has changed");
20893
20894#ifdef FREECIV_JSON_CONNECTION
20895 field_addr.name = "index";
20896#endif /* FREECIV_JSON_CONNECTION */
20897 e = 0;
20898
20899 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
20900
20901 if (e) {
20902 log_packet_detailed("'index' field error detected");
20903 }
20904 }
20905
20906 if (BV_ISSET(fields, 2)) {
20907 log_packet_detailed(" field 'partner' has changed");
20908
20909#ifdef FREECIV_JSON_CONNECTION
20910 field_addr.name = "partner";
20911#endif /* FREECIV_JSON_CONNECTION */
20912 e = 0;
20913
20914 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
20915
20916 if (e) {
20917 log_packet_detailed("'partner' field error detected");
20918 }
20919 }
20920
20921 if (BV_ISSET(fields, 3)) {
20922 log_packet_detailed(" field 'value' has changed");
20923
20924#ifdef FREECIV_JSON_CONNECTION
20925 field_addr.name = "value";
20926#endif /* FREECIV_JSON_CONNECTION */
20927 e = 0;
20928
20929 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
20930
20931 if (e) {
20932 log_packet_detailed("'value' field error detected");
20933 }
20934 }
20935
20936 if (BV_ISSET(fields, 4)) {
20937 log_packet_detailed(" field 'direction' has changed");
20938
20939#ifdef FREECIV_JSON_CONNECTION
20940 field_addr.name = "direction";
20941#endif /* FREECIV_JSON_CONNECTION */
20942 e = 0;
20943
20944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
20945
20946 if (e) {
20947 log_packet_detailed("'direction' field error detected");
20948 }
20949 }
20950
20951 if (BV_ISSET(fields, 5)) {
20952 log_packet_detailed(" field 'goods' has changed");
20953
20954#ifdef FREECIV_JSON_CONNECTION
20955 field_addr.name = "goods";
20956#endif /* FREECIV_JSON_CONNECTION */
20957 e = 0;
20958
20959 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
20960
20961 if (e) {
20962 log_packet_detailed("'goods' field error detected");
20963 }
20964 }
20965
20966 *old = *real_packet;
20967
20968#else /* FREECIV_DELTA_PROTOCOL */
20969#ifdef FREECIV_JSON_CONNECTION
20970 field_addr.name = "city";
20971#endif /* FREECIV_JSON_CONNECTION */
20972 e = 0;
20973
20974 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20975
20976 if (e) {
20977 log_packet_detailed("'city' field error detected");
20978 }
20979
20980#ifdef FREECIV_JSON_CONNECTION
20981 field_addr.name = "index";
20982#endif /* FREECIV_JSON_CONNECTION */
20983 e = 0;
20984
20985 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
20986
20987 if (e) {
20988 log_packet_detailed("'index' field error detected");
20989 }
20990
20991#ifdef FREECIV_JSON_CONNECTION
20992 field_addr.name = "partner";
20993#endif /* FREECIV_JSON_CONNECTION */
20994 e = 0;
20995
20996 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
20997
20998 if (e) {
20999 log_packet_detailed("'partner' field error detected");
21000 }
21001
21002#ifdef FREECIV_JSON_CONNECTION
21003 field_addr.name = "value";
21004#endif /* FREECIV_JSON_CONNECTION */
21005 e = 0;
21006
21007 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21008
21009 if (e) {
21010 log_packet_detailed("'value' field error detected");
21011 }
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#ifdef FREECIV_JSON_CONNECTION
21025 field_addr.name = "goods";
21026#endif /* FREECIV_JSON_CONNECTION */
21027 e = 0;
21028
21029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21030
21031 if (e) {
21032 log_packet_detailed("'goods' field error detected");
21033 }
21034#endif /* FREECIV_DELTA_PROTOCOL */
21035
21037}
21038
21040{
21041 if (!pc->used) {
21042 log_error("WARNING: trying to send data to the closed connection %s",
21044 return -1;
21045 }
21046 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet != nullptr, -1,
21047 "Handler for PACKET_TRADE_ROUTE_INFO not installed");
21048 return pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet(pc, packet);
21049}
21050
21052{
21053 conn_list_iterate(dest, pconn) {
21056}
21057
21058static inline void init_packet_city_sell(struct packet_city_sell *packet)
21059{
21060 memset(packet, 0, sizeof(*packet));
21061}
21062
21063#define free_packet_city_sell(_packet) (void) 0
21064#define destroy_packet_city_sell free
21065
21066#ifdef FREECIV_DELTA_PROTOCOL
21067#define hash_packet_city_sell_100 hash_const
21068#define cmp_packet_city_sell_100 cmp_const
21070#endif /* FREECIV_DELTA_PROTOCOL */
21071
21073{
21074#define FREE_PACKET_STRUCT(_packet) free_packet_city_sell(_packet)
21076
21077#ifdef FREECIV_JSON_CONNECTION
21078 struct plocation field_addr;
21079 {
21080 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21083 }
21084#endif /* FREECIV_JSON_CONNECTION */
21085
21086 log_packet_detailed("packet_city_sell_100: got info about ()");
21087
21088#ifdef FREECIV_DELTA_PROTOCOL
21090 struct packet_city_sell *old;
21091 struct genhash **hash = pc->phs.received + PACKET_CITY_SELL;
21092
21093 if (nullptr == *hash) {
21095 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21096 }
21097
21098 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21099 *real_packet = *old;
21100 } else {
21101 /* packet is already initialized empty */
21102 log_packet_detailed(" no old info");
21103 }
21104
21105#ifdef FREECIV_JSON_CONNECTION
21106 field_addr.name = "fields";
21107#endif /* FREECIV_JSON_CONNECTION */
21108 DIO_BV_GET(&din, &field_addr, fields);
21109
21110 if (BV_ISSET(fields, 0)) {
21111 log_packet_detailed(" got field 'city_id'");
21112
21113#ifdef FREECIV_JSON_CONNECTION
21114 field_addr.name = "city_id";
21115#endif /* FREECIV_JSON_CONNECTION */
21116
21117 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21119 }
21120 }
21121
21122 if (BV_ISSET(fields, 1)) {
21123 log_packet_detailed(" got field 'build_id'");
21124
21125#ifdef FREECIV_JSON_CONNECTION
21126 field_addr.name = "build_id";
21127#endif /* FREECIV_JSON_CONNECTION */
21128
21129 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21131 }
21132 }
21133
21134 if (nullptr == old) {
21135 old = fc_malloc(sizeof(*old));
21137 *old = *real_packet;
21139 } else {
21140 *old = *real_packet;
21141 }
21142
21143#else /* FREECIV_DELTA_PROTOCOL */
21144#ifdef FREECIV_JSON_CONNECTION
21145 field_addr.name = "city_id";
21146#endif /* FREECIV_JSON_CONNECTION */
21147
21148 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21150 }
21151
21152#ifdef FREECIV_JSON_CONNECTION
21153 field_addr.name = "build_id";
21154#endif /* FREECIV_JSON_CONNECTION */
21155
21156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21158 }
21159#endif /* FREECIV_DELTA_PROTOCOL */
21160
21162#undef FREE_PACKET_STRUCT
21163}
21164
21165static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
21166{
21167 const struct packet_city_sell *real_packet = packet;
21168 int e;
21170
21171 log_packet_detailed("packet_city_sell_100: sending info about ()");
21172
21173#ifdef FREECIV_DELTA_PROTOCOL
21175 struct packet_city_sell *old;
21176 bool differ;
21177 struct genhash **hash = pc->phs.sent + PACKET_CITY_SELL;
21178
21179 if (nullptr == *hash) {
21181 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21182 }
21183 BV_CLR_ALL(fields);
21184
21185 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21186 old = fc_malloc(sizeof(*old));
21187 /* temporary bitcopy just to insert correctly */
21188 *old = *real_packet;
21191 }
21192
21193 differ = (old->city_id != real_packet->city_id);
21194 if (differ) {
21195 BV_SET(fields, 0);
21196 }
21197
21198 differ = (old->build_id != real_packet->build_id);
21199 if (differ) {
21200 BV_SET(fields, 1);
21201 }
21202#endif /* FREECIV_DELTA_PROTOCOL */
21203
21204#ifdef FREECIV_JSON_CONNECTION
21205 struct plocation field_addr;
21206 {
21207 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21210 }
21211#endif /* FREECIV_JSON_CONNECTION */
21212
21213#ifdef FREECIV_DELTA_PROTOCOL
21214#ifdef FREECIV_JSON_CONNECTION
21215 field_addr.name = "fields";
21216#endif /* FREECIV_JSON_CONNECTION */
21217 e = 0;
21218 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21219 if (e) {
21220 log_packet_detailed("fields bitvector error detected");
21221 }
21222
21223 if (BV_ISSET(fields, 0)) {
21224 log_packet_detailed(" field 'city_id' has changed");
21225
21226#ifdef FREECIV_JSON_CONNECTION
21227 field_addr.name = "city_id";
21228#endif /* FREECIV_JSON_CONNECTION */
21229 e = 0;
21230
21231 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21232
21233 if (e) {
21234 log_packet_detailed("'city_id' field error detected");
21235 }
21236 }
21237
21238 if (BV_ISSET(fields, 1)) {
21239 log_packet_detailed(" field 'build_id' has changed");
21240
21241#ifdef FREECIV_JSON_CONNECTION
21242 field_addr.name = "build_id";
21243#endif /* FREECIV_JSON_CONNECTION */
21244 e = 0;
21245
21246 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21247
21248 if (e) {
21249 log_packet_detailed("'build_id' field error detected");
21250 }
21251 }
21252
21253 *old = *real_packet;
21254
21255#else /* FREECIV_DELTA_PROTOCOL */
21256#ifdef FREECIV_JSON_CONNECTION
21257 field_addr.name = "city_id";
21258#endif /* FREECIV_JSON_CONNECTION */
21259 e = 0;
21260
21261 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21262
21263 if (e) {
21264 log_packet_detailed("'city_id' field error detected");
21265 }
21266
21267#ifdef FREECIV_JSON_CONNECTION
21268 field_addr.name = "build_id";
21269#endif /* FREECIV_JSON_CONNECTION */
21270 e = 0;
21271
21272 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21273
21274 if (e) {
21275 log_packet_detailed("'build_id' field error detected");
21276 }
21277#endif /* FREECIV_DELTA_PROTOCOL */
21278
21280}
21281
21282int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
21283{
21284 if (!pc->used) {
21285 log_error("WARNING: trying to send data to the closed connection %s",
21287 return -1;
21288 }
21289 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SELL].packet != nullptr, -1,
21290 "Handler for PACKET_CITY_SELL not installed");
21291 return pc->phs.handlers->send[PACKET_CITY_SELL].packet(pc, packet);
21292}
21293
21294int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
21295{
21296 struct packet_city_sell packet, *real_packet = &packet;
21297
21299 real_packet->build_id = build_id;
21300
21302}
21303
21304static inline void init_packet_city_buy(struct packet_city_buy *packet)
21305{
21306 memset(packet, 0, sizeof(*packet));
21307}
21308
21309#define free_packet_city_buy(_packet) (void) 0
21310#define destroy_packet_city_buy free
21311
21312#ifdef FREECIV_DELTA_PROTOCOL
21313#define hash_packet_city_buy_100 hash_const
21314#define cmp_packet_city_buy_100 cmp_const
21316#endif /* FREECIV_DELTA_PROTOCOL */
21317
21319{
21320#define FREE_PACKET_STRUCT(_packet) free_packet_city_buy(_packet)
21322
21323#ifdef FREECIV_JSON_CONNECTION
21324 struct plocation field_addr;
21325 {
21326 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21329 }
21330#endif /* FREECIV_JSON_CONNECTION */
21331
21332 log_packet_detailed("packet_city_buy_100: got info about ()");
21333
21334#ifdef FREECIV_DELTA_PROTOCOL
21336 struct packet_city_buy *old;
21337 struct genhash **hash = pc->phs.received + PACKET_CITY_BUY;
21338
21339 if (nullptr == *hash) {
21341 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21342 }
21343
21344 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21345 *real_packet = *old;
21346 } else {
21347 /* packet is already initialized empty */
21348 log_packet_detailed(" no old info");
21349 }
21350
21351#ifdef FREECIV_JSON_CONNECTION
21352 field_addr.name = "fields";
21353#endif /* FREECIV_JSON_CONNECTION */
21354 DIO_BV_GET(&din, &field_addr, fields);
21355
21356 if (BV_ISSET(fields, 0)) {
21357 log_packet_detailed(" got field 'city_id'");
21358
21359#ifdef FREECIV_JSON_CONNECTION
21360 field_addr.name = "city_id";
21361#endif /* FREECIV_JSON_CONNECTION */
21362
21363 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21365 }
21366 }
21367
21368 if (nullptr == old) {
21369 old = fc_malloc(sizeof(*old));
21371 *old = *real_packet;
21373 } else {
21374 *old = *real_packet;
21375 }
21376
21377#else /* FREECIV_DELTA_PROTOCOL */
21378#ifdef FREECIV_JSON_CONNECTION
21379 field_addr.name = "city_id";
21380#endif /* FREECIV_JSON_CONNECTION */
21381
21382 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21384 }
21385#endif /* FREECIV_DELTA_PROTOCOL */
21386
21388#undef FREE_PACKET_STRUCT
21389}
21390
21391static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
21392{
21393 const struct packet_city_buy *real_packet = packet;
21394 int e;
21396
21397 log_packet_detailed("packet_city_buy_100: sending info about ()");
21398
21399#ifdef FREECIV_DELTA_PROTOCOL
21401 struct packet_city_buy *old;
21402 bool differ;
21403 struct genhash **hash = pc->phs.sent + PACKET_CITY_BUY;
21404
21405 if (nullptr == *hash) {
21407 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21408 }
21409 BV_CLR_ALL(fields);
21410
21411 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21412 old = fc_malloc(sizeof(*old));
21413 /* temporary bitcopy just to insert correctly */
21414 *old = *real_packet;
21417 }
21418
21419 differ = (old->city_id != real_packet->city_id);
21420 if (differ) {
21421 BV_SET(fields, 0);
21422 }
21423#endif /* FREECIV_DELTA_PROTOCOL */
21424
21425#ifdef FREECIV_JSON_CONNECTION
21426 struct plocation field_addr;
21427 {
21428 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21431 }
21432#endif /* FREECIV_JSON_CONNECTION */
21433
21434#ifdef FREECIV_DELTA_PROTOCOL
21435#ifdef FREECIV_JSON_CONNECTION
21436 field_addr.name = "fields";
21437#endif /* FREECIV_JSON_CONNECTION */
21438 e = 0;
21439 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21440 if (e) {
21441 log_packet_detailed("fields bitvector error detected");
21442 }
21443
21444 if (BV_ISSET(fields, 0)) {
21445 log_packet_detailed(" field 'city_id' has changed");
21446
21447#ifdef FREECIV_JSON_CONNECTION
21448 field_addr.name = "city_id";
21449#endif /* FREECIV_JSON_CONNECTION */
21450 e = 0;
21451
21452 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21453
21454 if (e) {
21455 log_packet_detailed("'city_id' field error detected");
21456 }
21457 }
21458
21459 *old = *real_packet;
21460
21461#else /* FREECIV_DELTA_PROTOCOL */
21462#ifdef FREECIV_JSON_CONNECTION
21463 field_addr.name = "city_id";
21464#endif /* FREECIV_JSON_CONNECTION */
21465 e = 0;
21466
21467 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21468
21469 if (e) {
21470 log_packet_detailed("'city_id' field error detected");
21471 }
21472#endif /* FREECIV_DELTA_PROTOCOL */
21473
21475}
21476
21477int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
21478{
21479 if (!pc->used) {
21480 log_error("WARNING: trying to send data to the closed connection %s",
21482 return -1;
21483 }
21484 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_BUY].packet != nullptr, -1,
21485 "Handler for PACKET_CITY_BUY not installed");
21486 return pc->phs.handlers->send[PACKET_CITY_BUY].packet(pc, packet);
21487}
21488
21489int dsend_packet_city_buy(struct connection *pc, int city_id)
21490{
21491 struct packet_city_buy packet, *real_packet = &packet;
21492
21494
21496}
21497
21498static inline void init_packet_city_change(struct packet_city_change *packet)
21499{
21500 memset(packet, 0, sizeof(*packet));
21501}
21502
21503#define free_packet_city_change(_packet) (void) 0
21504#define destroy_packet_city_change free
21505
21506#ifdef FREECIV_DELTA_PROTOCOL
21507#define hash_packet_city_change_100 hash_const
21508#define cmp_packet_city_change_100 cmp_const
21510#endif /* FREECIV_DELTA_PROTOCOL */
21511
21513{
21514#define FREE_PACKET_STRUCT(_packet) free_packet_city_change(_packet)
21516
21517#ifdef FREECIV_JSON_CONNECTION
21518 struct plocation field_addr;
21519 {
21520 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21523 }
21524#endif /* FREECIV_JSON_CONNECTION */
21525
21526 log_packet_detailed("packet_city_change_100: got info about ()");
21527
21528#ifdef FREECIV_DELTA_PROTOCOL
21530 struct packet_city_change *old;
21531 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE;
21532
21533 if (nullptr == *hash) {
21535 nullptr, nullptr, nullptr, destroy_packet_city_change);
21536 }
21537
21538 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21539 *real_packet = *old;
21540 } else {
21541 /* packet is already initialized empty */
21542 log_packet_detailed(" no old info");
21543 }
21544
21545#ifdef FREECIV_JSON_CONNECTION
21546 field_addr.name = "fields";
21547#endif /* FREECIV_JSON_CONNECTION */
21548 DIO_BV_GET(&din, &field_addr, fields);
21549
21550 if (BV_ISSET(fields, 0)) {
21551 log_packet_detailed(" got field 'city_id'");
21552
21553#ifdef FREECIV_JSON_CONNECTION
21554 field_addr.name = "city_id";
21555#endif /* FREECIV_JSON_CONNECTION */
21556
21557 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21559 }
21560 }
21561
21562 if (BV_ISSET(fields, 1)) {
21563 log_packet_detailed(" got field 'production_kind'");
21564
21565#ifdef FREECIV_JSON_CONNECTION
21566 field_addr.name = "production_kind";
21567#endif /* FREECIV_JSON_CONNECTION */
21568
21569 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21570 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21571 }
21572 }
21573
21574 if (BV_ISSET(fields, 2)) {
21575 log_packet_detailed(" got field 'production_value'");
21576
21577#ifdef FREECIV_JSON_CONNECTION
21578 field_addr.name = "production_value";
21579#endif /* FREECIV_JSON_CONNECTION */
21580
21581 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21582 RECEIVE_PACKET_FIELD_ERROR(production_value);
21583 }
21584 }
21585
21586 if (nullptr == old) {
21587 old = fc_malloc(sizeof(*old));
21589 *old = *real_packet;
21591 } else {
21592 *old = *real_packet;
21593 }
21594
21595#else /* FREECIV_DELTA_PROTOCOL */
21596#ifdef FREECIV_JSON_CONNECTION
21597 field_addr.name = "city_id";
21598#endif /* FREECIV_JSON_CONNECTION */
21599
21600 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21602 }
21603
21604#ifdef FREECIV_JSON_CONNECTION
21605 field_addr.name = "production_kind";
21606#endif /* FREECIV_JSON_CONNECTION */
21607
21608 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21609 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21610 }
21611
21612#ifdef FREECIV_JSON_CONNECTION
21613 field_addr.name = "production_value";
21614#endif /* FREECIV_JSON_CONNECTION */
21615
21616 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21617 RECEIVE_PACKET_FIELD_ERROR(production_value);
21618 }
21619#endif /* FREECIV_DELTA_PROTOCOL */
21620
21622#undef FREE_PACKET_STRUCT
21623}
21624
21625static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
21626{
21627 const struct packet_city_change *real_packet = packet;
21628 int e;
21630
21631 log_packet_detailed("packet_city_change_100: sending info about ()");
21632
21633#ifdef FREECIV_DELTA_PROTOCOL
21635 struct packet_city_change *old;
21636 bool differ;
21637 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE;
21638
21639 if (nullptr == *hash) {
21641 nullptr, nullptr, nullptr, destroy_packet_city_change);
21642 }
21643 BV_CLR_ALL(fields);
21644
21645 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21646 old = fc_malloc(sizeof(*old));
21647 /* temporary bitcopy just to insert correctly */
21648 *old = *real_packet;
21651 }
21652
21653 differ = (old->city_id != real_packet->city_id);
21654 if (differ) {
21655 BV_SET(fields, 0);
21656 }
21657
21658 differ = (old->production_kind != real_packet->production_kind);
21659 if (differ) {
21660 BV_SET(fields, 1);
21661 }
21662
21663 differ = (old->production_value != real_packet->production_value);
21664 if (differ) {
21665 BV_SET(fields, 2);
21666 }
21667#endif /* FREECIV_DELTA_PROTOCOL */
21668
21669#ifdef FREECIV_JSON_CONNECTION
21670 struct plocation field_addr;
21671 {
21672 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21675 }
21676#endif /* FREECIV_JSON_CONNECTION */
21677
21678#ifdef FREECIV_DELTA_PROTOCOL
21679#ifdef FREECIV_JSON_CONNECTION
21680 field_addr.name = "fields";
21681#endif /* FREECIV_JSON_CONNECTION */
21682 e = 0;
21683 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21684 if (e) {
21685 log_packet_detailed("fields bitvector error detected");
21686 }
21687
21688 if (BV_ISSET(fields, 0)) {
21689 log_packet_detailed(" field 'city_id' has changed");
21690
21691#ifdef FREECIV_JSON_CONNECTION
21692 field_addr.name = "city_id";
21693#endif /* FREECIV_JSON_CONNECTION */
21694 e = 0;
21695
21696 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21697
21698 if (e) {
21699 log_packet_detailed("'city_id' field error detected");
21700 }
21701 }
21702
21703 if (BV_ISSET(fields, 1)) {
21704 log_packet_detailed(" field 'production_kind' has changed");
21705
21706#ifdef FREECIV_JSON_CONNECTION
21707 field_addr.name = "production_kind";
21708#endif /* FREECIV_JSON_CONNECTION */
21709 e = 0;
21710
21711 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21712
21713 if (e) {
21714 log_packet_detailed("'production_kind' field error detected");
21715 }
21716 }
21717
21718 if (BV_ISSET(fields, 2)) {
21719 log_packet_detailed(" field 'production_value' has changed");
21720
21721#ifdef FREECIV_JSON_CONNECTION
21722 field_addr.name = "production_value";
21723#endif /* FREECIV_JSON_CONNECTION */
21724 e = 0;
21725
21726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21727
21728 if (e) {
21729 log_packet_detailed("'production_value' field error detected");
21730 }
21731 }
21732
21733 *old = *real_packet;
21734
21735#else /* FREECIV_DELTA_PROTOCOL */
21736#ifdef FREECIV_JSON_CONNECTION
21737 field_addr.name = "city_id";
21738#endif /* FREECIV_JSON_CONNECTION */
21739 e = 0;
21740
21741 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21742
21743 if (e) {
21744 log_packet_detailed("'city_id' field error detected");
21745 }
21746
21747#ifdef FREECIV_JSON_CONNECTION
21748 field_addr.name = "production_kind";
21749#endif /* FREECIV_JSON_CONNECTION */
21750 e = 0;
21751
21752 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21753
21754 if (e) {
21755 log_packet_detailed("'production_kind' field error detected");
21756 }
21757
21758#ifdef FREECIV_JSON_CONNECTION
21759 field_addr.name = "production_value";
21760#endif /* FREECIV_JSON_CONNECTION */
21761 e = 0;
21762
21763 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21764
21765 if (e) {
21766 log_packet_detailed("'production_value' field error detected");
21767 }
21768#endif /* FREECIV_DELTA_PROTOCOL */
21769
21771}
21772
21774{
21775 if (!pc->used) {
21776 log_error("WARNING: trying to send data to the closed connection %s",
21778 return -1;
21779 }
21780 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE].packet != nullptr, -1,
21781 "Handler for PACKET_CITY_CHANGE not installed");
21782 return pc->phs.handlers->send[PACKET_CITY_CHANGE].packet(pc, packet);
21783}
21784
21785int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
21786{
21787 struct packet_city_change packet, *real_packet = &packet;
21788
21790 real_packet->production_kind = production_kind;
21791 real_packet->production_value = production_value;
21792
21794}
21795
21796static inline void init_packet_city_worklist(struct packet_city_worklist *packet)
21797{
21798 memset(packet, 0, sizeof(*packet));
21799}
21800
21801#define free_packet_city_worklist(_packet) (void) 0
21802#define destroy_packet_city_worklist free
21803
21804#ifdef FREECIV_DELTA_PROTOCOL
21805#define hash_packet_city_worklist_100 hash_const
21806#define cmp_packet_city_worklist_100 cmp_const
21808#endif /* FREECIV_DELTA_PROTOCOL */
21809
21811{
21812#define FREE_PACKET_STRUCT(_packet) free_packet_city_worklist(_packet)
21814
21815#ifdef FREECIV_JSON_CONNECTION
21816 struct plocation field_addr;
21817 {
21818 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21821 }
21822#endif /* FREECIV_JSON_CONNECTION */
21823
21824 log_packet_detailed("packet_city_worklist_100: got info about ()");
21825
21826#ifdef FREECIV_DELTA_PROTOCOL
21828 struct packet_city_worklist *old;
21829 struct genhash **hash = pc->phs.received + PACKET_CITY_WORKLIST;
21830
21831 if (nullptr == *hash) {
21833 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
21834 }
21835
21836 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21837 *real_packet = *old;
21838 } else {
21839 /* packet is already initialized empty */
21840 log_packet_detailed(" no old info");
21841 }
21842
21843#ifdef FREECIV_JSON_CONNECTION
21844 field_addr.name = "fields";
21845#endif /* FREECIV_JSON_CONNECTION */
21846 DIO_BV_GET(&din, &field_addr, fields);
21847
21848 if (BV_ISSET(fields, 0)) {
21849 log_packet_detailed(" got field 'city_id'");
21850
21851#ifdef FREECIV_JSON_CONNECTION
21852 field_addr.name = "city_id";
21853#endif /* FREECIV_JSON_CONNECTION */
21854
21855 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21857 }
21858 }
21859
21860 if (BV_ISSET(fields, 1)) {
21861 log_packet_detailed(" got field 'worklist'");
21862
21863#ifdef FREECIV_JSON_CONNECTION
21864 field_addr.name = "worklist";
21865#endif /* FREECIV_JSON_CONNECTION */
21866
21867 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
21869 }
21870 }
21871
21872 if (nullptr == old) {
21873 old = fc_malloc(sizeof(*old));
21875 *old = *real_packet;
21877 } else {
21878 *old = *real_packet;
21879 }
21880
21881#else /* FREECIV_DELTA_PROTOCOL */
21882#ifdef FREECIV_JSON_CONNECTION
21883 field_addr.name = "city_id";
21884#endif /* FREECIV_JSON_CONNECTION */
21885
21886 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21888 }
21889
21890#ifdef FREECIV_JSON_CONNECTION
21891 field_addr.name = "worklist";
21892#endif /* FREECIV_JSON_CONNECTION */
21893
21894 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
21896 }
21897#endif /* FREECIV_DELTA_PROTOCOL */
21898
21900#undef FREE_PACKET_STRUCT
21901}
21902
21903static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
21904{
21905 const struct packet_city_worklist *real_packet = packet;
21906 int e;
21908
21909 log_packet_detailed("packet_city_worklist_100: sending info about ()");
21910
21911#ifdef FREECIV_DELTA_PROTOCOL
21913 struct packet_city_worklist *old;
21914 bool differ;
21915 struct genhash **hash = pc->phs.sent + PACKET_CITY_WORKLIST;
21916
21917 if (nullptr == *hash) {
21919 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
21920 }
21921 BV_CLR_ALL(fields);
21922
21923 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21924 old = fc_malloc(sizeof(*old));
21925 /* temporary bitcopy just to insert correctly */
21926 *old = *real_packet;
21929 }
21930
21931 differ = (old->city_id != real_packet->city_id);
21932 if (differ) {
21933 BV_SET(fields, 0);
21934 }
21935
21936 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
21937 if (differ) {
21938 BV_SET(fields, 1);
21939 }
21940#endif /* FREECIV_DELTA_PROTOCOL */
21941
21942#ifdef FREECIV_JSON_CONNECTION
21943 struct plocation field_addr;
21944 {
21945 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21948 }
21949#endif /* FREECIV_JSON_CONNECTION */
21950
21951#ifdef FREECIV_DELTA_PROTOCOL
21952#ifdef FREECIV_JSON_CONNECTION
21953 field_addr.name = "fields";
21954#endif /* FREECIV_JSON_CONNECTION */
21955 e = 0;
21956 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21957 if (e) {
21958 log_packet_detailed("fields bitvector error detected");
21959 }
21960
21961 if (BV_ISSET(fields, 0)) {
21962 log_packet_detailed(" field 'city_id' has changed");
21963
21964#ifdef FREECIV_JSON_CONNECTION
21965 field_addr.name = "city_id";
21966#endif /* FREECIV_JSON_CONNECTION */
21967 e = 0;
21968
21969 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21970
21971 if (e) {
21972 log_packet_detailed("'city_id' field error detected");
21973 }
21974 }
21975
21976 if (BV_ISSET(fields, 1)) {
21977 log_packet_detailed(" field 'worklist' has changed");
21978
21979#ifdef FREECIV_JSON_CONNECTION
21980 field_addr.name = "worklist";
21981#endif /* FREECIV_JSON_CONNECTION */
21982 e = 0;
21983
21984 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
21985
21986 if (e) {
21987 log_packet_detailed("'worklist' field error detected");
21988 }
21989 }
21990
21991 *old = *real_packet;
21992
21993#else /* FREECIV_DELTA_PROTOCOL */
21994#ifdef FREECIV_JSON_CONNECTION
21995 field_addr.name = "city_id";
21996#endif /* FREECIV_JSON_CONNECTION */
21997 e = 0;
21998
21999 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22000
22001 if (e) {
22002 log_packet_detailed("'city_id' field error detected");
22003 }
22004
22005#ifdef FREECIV_JSON_CONNECTION
22006 field_addr.name = "worklist";
22007#endif /* FREECIV_JSON_CONNECTION */
22008 e = 0;
22009
22010 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22011
22012 if (e) {
22013 log_packet_detailed("'worklist' field error detected");
22014 }
22015#endif /* FREECIV_DELTA_PROTOCOL */
22016
22018}
22019
22021{
22022 if (!pc->used) {
22023 log_error("WARNING: trying to send data to the closed connection %s",
22025 return -1;
22026 }
22027 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet != nullptr, -1,
22028 "Handler for PACKET_CITY_WORKLIST not installed");
22029 return pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet(pc, packet);
22030}
22031
22032int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
22033{
22034 struct packet_city_worklist packet, *real_packet = &packet;
22035
22037 worklist_copy(&real_packet->worklist, worklist);
22038
22040}
22041
22043{
22044 memset(packet, 0, sizeof(*packet));
22045}
22046
22047#define free_packet_city_make_specialist(_packet) (void) 0
22048#define destroy_packet_city_make_specialist free
22049
22050#ifdef FREECIV_DELTA_PROTOCOL
22051#define hash_packet_city_make_specialist_100 hash_const
22052#define cmp_packet_city_make_specialist_100 cmp_const
22054#endif /* FREECIV_DELTA_PROTOCOL */
22055
22057{
22058#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_specialist(_packet)
22060
22061#ifdef FREECIV_JSON_CONNECTION
22062 struct plocation field_addr;
22063 {
22064 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22067 }
22068#endif /* FREECIV_JSON_CONNECTION */
22069
22070 log_packet_detailed("packet_city_make_specialist_100: got info about ()");
22071
22072#ifdef FREECIV_DELTA_PROTOCOL
22075 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_SPECIALIST;
22076
22077 if (nullptr == *hash) {
22079 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22080 }
22081
22082 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22083 *real_packet = *old;
22084 } else {
22085 /* packet is already initialized empty */
22086 log_packet_detailed(" no old info");
22087 }
22088
22089#ifdef FREECIV_JSON_CONNECTION
22090 field_addr.name = "fields";
22091#endif /* FREECIV_JSON_CONNECTION */
22092 DIO_BV_GET(&din, &field_addr, fields);
22093
22094 if (BV_ISSET(fields, 0)) {
22095 log_packet_detailed(" got field 'city_id'");
22096
22097#ifdef FREECIV_JSON_CONNECTION
22098 field_addr.name = "city_id";
22099#endif /* FREECIV_JSON_CONNECTION */
22100
22101 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22103 }
22104 }
22105
22106 if (BV_ISSET(fields, 1)) {
22107 log_packet_detailed(" got field 'tile_id'");
22108
22109#ifdef FREECIV_JSON_CONNECTION
22110 field_addr.name = "tile_id";
22111#endif /* FREECIV_JSON_CONNECTION */
22112
22113 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22115 }
22116 }
22117
22118 if (nullptr == old) {
22119 old = fc_malloc(sizeof(*old));
22121 *old = *real_packet;
22123 } else {
22124 *old = *real_packet;
22125 }
22126
22127#else /* FREECIV_DELTA_PROTOCOL */
22128#ifdef FREECIV_JSON_CONNECTION
22129 field_addr.name = "city_id";
22130#endif /* FREECIV_JSON_CONNECTION */
22131
22132 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22134 }
22135
22136#ifdef FREECIV_JSON_CONNECTION
22137 field_addr.name = "tile_id";
22138#endif /* FREECIV_JSON_CONNECTION */
22139
22140 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22142 }
22143#endif /* FREECIV_DELTA_PROTOCOL */
22144
22146#undef FREE_PACKET_STRUCT
22147}
22148
22150{
22151 const struct packet_city_make_specialist *real_packet = packet;
22152 int e;
22154
22155 log_packet_detailed("packet_city_make_specialist_100: sending info about ()");
22156
22157#ifdef FREECIV_DELTA_PROTOCOL
22160 bool differ;
22161 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_SPECIALIST;
22162
22163 if (nullptr == *hash) {
22165 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22166 }
22167 BV_CLR_ALL(fields);
22168
22169 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22170 old = fc_malloc(sizeof(*old));
22171 /* temporary bitcopy just to insert correctly */
22172 *old = *real_packet;
22175 }
22176
22177 differ = (old->city_id != real_packet->city_id);
22178 if (differ) {
22179 BV_SET(fields, 0);
22180 }
22181
22182 differ = (old->tile_id != real_packet->tile_id);
22183 if (differ) {
22184 BV_SET(fields, 1);
22185 }
22186#endif /* FREECIV_DELTA_PROTOCOL */
22187
22188#ifdef FREECIV_JSON_CONNECTION
22189 struct plocation field_addr;
22190 {
22191 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22194 }
22195#endif /* FREECIV_JSON_CONNECTION */
22196
22197#ifdef FREECIV_DELTA_PROTOCOL
22198#ifdef FREECIV_JSON_CONNECTION
22199 field_addr.name = "fields";
22200#endif /* FREECIV_JSON_CONNECTION */
22201 e = 0;
22202 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22203 if (e) {
22204 log_packet_detailed("fields bitvector error detected");
22205 }
22206
22207 if (BV_ISSET(fields, 0)) {
22208 log_packet_detailed(" field 'city_id' has changed");
22209
22210#ifdef FREECIV_JSON_CONNECTION
22211 field_addr.name = "city_id";
22212#endif /* FREECIV_JSON_CONNECTION */
22213 e = 0;
22214
22215 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22216
22217 if (e) {
22218 log_packet_detailed("'city_id' field error detected");
22219 }
22220 }
22221
22222 if (BV_ISSET(fields, 1)) {
22223 log_packet_detailed(" field 'tile_id' has changed");
22224
22225#ifdef FREECIV_JSON_CONNECTION
22226 field_addr.name = "tile_id";
22227#endif /* FREECIV_JSON_CONNECTION */
22228 e = 0;
22229
22230 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22231
22232 if (e) {
22233 log_packet_detailed("'tile_id' field error detected");
22234 }
22235 }
22236
22237 *old = *real_packet;
22238
22239#else /* FREECIV_DELTA_PROTOCOL */
22240#ifdef FREECIV_JSON_CONNECTION
22241 field_addr.name = "city_id";
22242#endif /* FREECIV_JSON_CONNECTION */
22243 e = 0;
22244
22245 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22246
22247 if (e) {
22248 log_packet_detailed("'city_id' field error detected");
22249 }
22250
22251#ifdef FREECIV_JSON_CONNECTION
22252 field_addr.name = "tile_id";
22253#endif /* FREECIV_JSON_CONNECTION */
22254 e = 0;
22255
22256 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22257
22258 if (e) {
22259 log_packet_detailed("'tile_id' field error detected");
22260 }
22261#endif /* FREECIV_DELTA_PROTOCOL */
22262
22264}
22265
22267{
22268 if (!pc->used) {
22269 log_error("WARNING: trying to send data to the closed connection %s",
22271 return -1;
22272 }
22273 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet != nullptr, -1,
22274 "Handler for PACKET_CITY_MAKE_SPECIALIST not installed");
22275 return pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet(pc, packet);
22276}
22277
22278int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
22279{
22280 struct packet_city_make_specialist packet, *real_packet = &packet;
22281
22283 real_packet->tile_id = tile_id;
22284
22286}
22287
22289{
22290 memset(packet, 0, sizeof(*packet));
22291}
22292
22293#define free_packet_city_make_worker(_packet) (void) 0
22294#define destroy_packet_city_make_worker free
22295
22296#ifdef FREECIV_DELTA_PROTOCOL
22297#define hash_packet_city_make_worker_100 hash_const
22298#define cmp_packet_city_make_worker_100 cmp_const
22300#endif /* FREECIV_DELTA_PROTOCOL */
22301
22303{
22304#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_worker(_packet)
22306
22307#ifdef FREECIV_JSON_CONNECTION
22308 struct plocation field_addr;
22309 {
22310 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22313 }
22314#endif /* FREECIV_JSON_CONNECTION */
22315
22316 log_packet_detailed("packet_city_make_worker_100: got info about ()");
22317
22318#ifdef FREECIV_DELTA_PROTOCOL
22321 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_WORKER;
22322
22323 if (nullptr == *hash) {
22325 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22326 }
22327
22328 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22329 *real_packet = *old;
22330 } else {
22331 /* packet is already initialized empty */
22332 log_packet_detailed(" no old info");
22333 }
22334
22335#ifdef FREECIV_JSON_CONNECTION
22336 field_addr.name = "fields";
22337#endif /* FREECIV_JSON_CONNECTION */
22338 DIO_BV_GET(&din, &field_addr, fields);
22339
22340 if (BV_ISSET(fields, 0)) {
22341 log_packet_detailed(" got field 'city_id'");
22342
22343#ifdef FREECIV_JSON_CONNECTION
22344 field_addr.name = "city_id";
22345#endif /* FREECIV_JSON_CONNECTION */
22346
22347 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22349 }
22350 }
22351
22352 if (BV_ISSET(fields, 1)) {
22353 log_packet_detailed(" got field 'tile_id'");
22354
22355#ifdef FREECIV_JSON_CONNECTION
22356 field_addr.name = "tile_id";
22357#endif /* FREECIV_JSON_CONNECTION */
22358
22359 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22361 }
22362 }
22363
22364 if (nullptr == old) {
22365 old = fc_malloc(sizeof(*old));
22367 *old = *real_packet;
22369 } else {
22370 *old = *real_packet;
22371 }
22372
22373#else /* FREECIV_DELTA_PROTOCOL */
22374#ifdef FREECIV_JSON_CONNECTION
22375 field_addr.name = "city_id";
22376#endif /* FREECIV_JSON_CONNECTION */
22377
22378 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22380 }
22381
22382#ifdef FREECIV_JSON_CONNECTION
22383 field_addr.name = "tile_id";
22384#endif /* FREECIV_JSON_CONNECTION */
22385
22386 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22388 }
22389#endif /* FREECIV_DELTA_PROTOCOL */
22390
22392#undef FREE_PACKET_STRUCT
22393}
22394
22396{
22397 const struct packet_city_make_worker *real_packet = packet;
22398 int e;
22400
22401 log_packet_detailed("packet_city_make_worker_100: sending info about ()");
22402
22403#ifdef FREECIV_DELTA_PROTOCOL
22406 bool differ;
22407 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_WORKER;
22408
22409 if (nullptr == *hash) {
22411 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22412 }
22413 BV_CLR_ALL(fields);
22414
22415 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22416 old = fc_malloc(sizeof(*old));
22417 /* temporary bitcopy just to insert correctly */
22418 *old = *real_packet;
22421 }
22422
22423 differ = (old->city_id != real_packet->city_id);
22424 if (differ) {
22425 BV_SET(fields, 0);
22426 }
22427
22428 differ = (old->tile_id != real_packet->tile_id);
22429 if (differ) {
22430 BV_SET(fields, 1);
22431 }
22432#endif /* FREECIV_DELTA_PROTOCOL */
22433
22434#ifdef FREECIV_JSON_CONNECTION
22435 struct plocation field_addr;
22436 {
22437 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22440 }
22441#endif /* FREECIV_JSON_CONNECTION */
22442
22443#ifdef FREECIV_DELTA_PROTOCOL
22444#ifdef FREECIV_JSON_CONNECTION
22445 field_addr.name = "fields";
22446#endif /* FREECIV_JSON_CONNECTION */
22447 e = 0;
22448 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22449 if (e) {
22450 log_packet_detailed("fields bitvector error detected");
22451 }
22452
22453 if (BV_ISSET(fields, 0)) {
22454 log_packet_detailed(" field 'city_id' has changed");
22455
22456#ifdef FREECIV_JSON_CONNECTION
22457 field_addr.name = "city_id";
22458#endif /* FREECIV_JSON_CONNECTION */
22459 e = 0;
22460
22461 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22462
22463 if (e) {
22464 log_packet_detailed("'city_id' field error detected");
22465 }
22466 }
22467
22468 if (BV_ISSET(fields, 1)) {
22469 log_packet_detailed(" field 'tile_id' has changed");
22470
22471#ifdef FREECIV_JSON_CONNECTION
22472 field_addr.name = "tile_id";
22473#endif /* FREECIV_JSON_CONNECTION */
22474 e = 0;
22475
22476 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22477
22478 if (e) {
22479 log_packet_detailed("'tile_id' field error detected");
22480 }
22481 }
22482
22483 *old = *real_packet;
22484
22485#else /* FREECIV_DELTA_PROTOCOL */
22486#ifdef FREECIV_JSON_CONNECTION
22487 field_addr.name = "city_id";
22488#endif /* FREECIV_JSON_CONNECTION */
22489 e = 0;
22490
22491 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22492
22493 if (e) {
22494 log_packet_detailed("'city_id' field error detected");
22495 }
22496
22497#ifdef FREECIV_JSON_CONNECTION
22498 field_addr.name = "tile_id";
22499#endif /* FREECIV_JSON_CONNECTION */
22500 e = 0;
22501
22502 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22503
22504 if (e) {
22505 log_packet_detailed("'tile_id' field error detected");
22506 }
22507#endif /* FREECIV_DELTA_PROTOCOL */
22508
22510}
22511
22513{
22514 if (!pc->used) {
22515 log_error("WARNING: trying to send data to the closed connection %s",
22517 return -1;
22518 }
22519 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet != nullptr, -1,
22520 "Handler for PACKET_CITY_MAKE_WORKER not installed");
22521 return pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet(pc, packet);
22522}
22523
22524int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
22525{
22526 struct packet_city_make_worker packet, *real_packet = &packet;
22527
22529 real_packet->tile_id = tile_id;
22530
22532}
22533
22535{
22536 memset(packet, 0, sizeof(*packet));
22537}
22538
22539#define free_packet_city_change_specialist(_packet) (void) 0
22540#define destroy_packet_city_change_specialist free
22541
22542#ifdef FREECIV_DELTA_PROTOCOL
22543#define hash_packet_city_change_specialist_100 hash_const
22544#define cmp_packet_city_change_specialist_100 cmp_const
22546#endif /* FREECIV_DELTA_PROTOCOL */
22547
22549{
22550#define FREE_PACKET_STRUCT(_packet) free_packet_city_change_specialist(_packet)
22552
22553#ifdef FREECIV_JSON_CONNECTION
22554 struct plocation field_addr;
22555 {
22556 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22559 }
22560#endif /* FREECIV_JSON_CONNECTION */
22561
22562 log_packet_detailed("packet_city_change_specialist_100: got info about ()");
22563
22564#ifdef FREECIV_DELTA_PROTOCOL
22567 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE_SPECIALIST;
22568
22569 if (nullptr == *hash) {
22571 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22572 }
22573
22574 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22575 *real_packet = *old;
22576 } else {
22577 /* packet is already initialized empty */
22578 log_packet_detailed(" no old info");
22579 }
22580
22581#ifdef FREECIV_JSON_CONNECTION
22582 field_addr.name = "fields";
22583#endif /* FREECIV_JSON_CONNECTION */
22584 DIO_BV_GET(&din, &field_addr, fields);
22585
22586 if (BV_ISSET(fields, 0)) {
22587 log_packet_detailed(" got field 'city_id'");
22588
22589#ifdef FREECIV_JSON_CONNECTION
22590 field_addr.name = "city_id";
22591#endif /* FREECIV_JSON_CONNECTION */
22592
22593 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22595 }
22596 }
22597
22598 if (BV_ISSET(fields, 1)) {
22599 log_packet_detailed(" got field 'from'");
22600
22601#ifdef FREECIV_JSON_CONNECTION
22602 field_addr.name = "from";
22603#endif /* FREECIV_JSON_CONNECTION */
22604
22605 {
22606 int readin;
22607
22608 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22610 }
22611 real_packet->from = readin;
22612 }
22613 }
22614
22615 if (BV_ISSET(fields, 2)) {
22616 log_packet_detailed(" got field 'to'");
22617
22618#ifdef FREECIV_JSON_CONNECTION
22619 field_addr.name = "to";
22620#endif /* FREECIV_JSON_CONNECTION */
22621
22622 {
22623 int readin;
22624
22625 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22627 }
22628 real_packet->to = readin;
22629 }
22630 }
22631
22632 if (nullptr == old) {
22633 old = fc_malloc(sizeof(*old));
22635 *old = *real_packet;
22637 } else {
22638 *old = *real_packet;
22639 }
22640
22641#else /* FREECIV_DELTA_PROTOCOL */
22642#ifdef FREECIV_JSON_CONNECTION
22643 field_addr.name = "city_id";
22644#endif /* FREECIV_JSON_CONNECTION */
22645
22646 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22648 }
22649
22650#ifdef FREECIV_JSON_CONNECTION
22651 field_addr.name = "from";
22652#endif /* FREECIV_JSON_CONNECTION */
22653
22654 {
22655 int readin;
22656
22657 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22659 }
22660 real_packet->from = readin;
22661 }
22662
22663#ifdef FREECIV_JSON_CONNECTION
22664 field_addr.name = "to";
22665#endif /* FREECIV_JSON_CONNECTION */
22666
22667 {
22668 int readin;
22669
22670 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22672 }
22673 real_packet->to = readin;
22674 }
22675#endif /* FREECIV_DELTA_PROTOCOL */
22676
22678#undef FREE_PACKET_STRUCT
22679}
22680
22682{
22683 const struct packet_city_change_specialist *real_packet = packet;
22684 int e;
22686
22687 log_packet_detailed("packet_city_change_specialist_100: sending info about ()");
22688
22689#ifdef FREECIV_DELTA_PROTOCOL
22692 bool differ;
22693 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE_SPECIALIST;
22694
22695 if (nullptr == *hash) {
22697 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22698 }
22699 BV_CLR_ALL(fields);
22700
22701 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22702 old = fc_malloc(sizeof(*old));
22703 /* temporary bitcopy just to insert correctly */
22704 *old = *real_packet;
22707 }
22708
22709 differ = (old->city_id != real_packet->city_id);
22710 if (differ) {
22711 BV_SET(fields, 0);
22712 }
22713
22714 differ = (old->from != real_packet->from);
22715 if (differ) {
22716 BV_SET(fields, 1);
22717 }
22718
22719 differ = (old->to != real_packet->to);
22720 if (differ) {
22721 BV_SET(fields, 2);
22722 }
22723#endif /* FREECIV_DELTA_PROTOCOL */
22724
22725#ifdef FREECIV_JSON_CONNECTION
22726 struct plocation field_addr;
22727 {
22728 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22731 }
22732#endif /* FREECIV_JSON_CONNECTION */
22733
22734#ifdef FREECIV_DELTA_PROTOCOL
22735#ifdef FREECIV_JSON_CONNECTION
22736 field_addr.name = "fields";
22737#endif /* FREECIV_JSON_CONNECTION */
22738 e = 0;
22739 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22740 if (e) {
22741 log_packet_detailed("fields bitvector error detected");
22742 }
22743
22744 if (BV_ISSET(fields, 0)) {
22745 log_packet_detailed(" field 'city_id' has changed");
22746
22747#ifdef FREECIV_JSON_CONNECTION
22748 field_addr.name = "city_id";
22749#endif /* FREECIV_JSON_CONNECTION */
22750 e = 0;
22751
22752 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22753
22754 if (e) {
22755 log_packet_detailed("'city_id' field error detected");
22756 }
22757 }
22758
22759 if (BV_ISSET(fields, 1)) {
22760 log_packet_detailed(" field 'from' has changed");
22761
22762#ifdef FREECIV_JSON_CONNECTION
22763 field_addr.name = "from";
22764#endif /* FREECIV_JSON_CONNECTION */
22765 e = 0;
22766
22767 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22768
22769 if (e) {
22770 log_packet_detailed("'from' field error detected");
22771 }
22772 }
22773
22774 if (BV_ISSET(fields, 2)) {
22775 log_packet_detailed(" field 'to' has changed");
22776
22777#ifdef FREECIV_JSON_CONNECTION
22778 field_addr.name = "to";
22779#endif /* FREECIV_JSON_CONNECTION */
22780 e = 0;
22781
22782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22783
22784 if (e) {
22785 log_packet_detailed("'to' field error detected");
22786 }
22787 }
22788
22789 *old = *real_packet;
22790
22791#else /* FREECIV_DELTA_PROTOCOL */
22792#ifdef FREECIV_JSON_CONNECTION
22793 field_addr.name = "city_id";
22794#endif /* FREECIV_JSON_CONNECTION */
22795 e = 0;
22796
22797 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22798
22799 if (e) {
22800 log_packet_detailed("'city_id' field error detected");
22801 }
22802
22803#ifdef FREECIV_JSON_CONNECTION
22804 field_addr.name = "from";
22805#endif /* FREECIV_JSON_CONNECTION */
22806 e = 0;
22807
22808 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22809
22810 if (e) {
22811 log_packet_detailed("'from' field error detected");
22812 }
22813
22814#ifdef FREECIV_JSON_CONNECTION
22815 field_addr.name = "to";
22816#endif /* FREECIV_JSON_CONNECTION */
22817 e = 0;
22818
22819 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22820
22821 if (e) {
22822 log_packet_detailed("'to' field error detected");
22823 }
22824#endif /* FREECIV_DELTA_PROTOCOL */
22825
22827}
22828
22830{
22831 if (!pc->used) {
22832 log_error("WARNING: trying to send data to the closed connection %s",
22834 return -1;
22835 }
22836 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet != nullptr, -1,
22837 "Handler for PACKET_CITY_CHANGE_SPECIALIST not installed");
22838 return pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet(pc, packet);
22839}
22840
22842{
22843 struct packet_city_change_specialist packet, *real_packet = &packet;
22844
22846 real_packet->from = from;
22847 real_packet->to = to;
22848
22850}
22851
22852static inline void init_packet_city_rename(struct packet_city_rename *packet)
22853{
22854 memset(packet, 0, sizeof(*packet));
22855}
22856
22857#define free_packet_city_rename(_packet) (void) 0
22858#define destroy_packet_city_rename free
22859
22860#ifdef FREECIV_DELTA_PROTOCOL
22861#define hash_packet_city_rename_100 hash_const
22862#define cmp_packet_city_rename_100 cmp_const
22864#endif /* FREECIV_DELTA_PROTOCOL */
22865
22867{
22868#define FREE_PACKET_STRUCT(_packet) free_packet_city_rename(_packet)
22870
22871#ifdef FREECIV_JSON_CONNECTION
22872 struct plocation field_addr;
22873 {
22874 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22877 }
22878#endif /* FREECIV_JSON_CONNECTION */
22879
22880 log_packet_detailed("packet_city_rename_100: got info about ()");
22881
22882#ifdef FREECIV_DELTA_PROTOCOL
22884 struct packet_city_rename *old;
22885 struct genhash **hash = pc->phs.received + PACKET_CITY_RENAME;
22886
22887 if (nullptr == *hash) {
22889 nullptr, nullptr, nullptr, destroy_packet_city_rename);
22890 }
22891
22892 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22893 *real_packet = *old;
22894 } else {
22895 /* packet is already initialized empty */
22896 log_packet_detailed(" no old info");
22897 }
22898
22899#ifdef FREECIV_JSON_CONNECTION
22900 field_addr.name = "fields";
22901#endif /* FREECIV_JSON_CONNECTION */
22902 DIO_BV_GET(&din, &field_addr, fields);
22903
22904 if (BV_ISSET(fields, 0)) {
22905 log_packet_detailed(" got field 'city_id'");
22906
22907#ifdef FREECIV_JSON_CONNECTION
22908 field_addr.name = "city_id";
22909#endif /* FREECIV_JSON_CONNECTION */
22910
22911 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22913 }
22914 }
22915
22916 if (BV_ISSET(fields, 1)) {
22917 log_packet_detailed(" got field 'name'");
22918
22919#ifdef FREECIV_JSON_CONNECTION
22920 field_addr.name = "name";
22921#endif /* FREECIV_JSON_CONNECTION */
22922
22923 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
22925 }
22926 }
22927
22928 if (nullptr == old) {
22929 old = fc_malloc(sizeof(*old));
22931 *old = *real_packet;
22933 } else {
22934 *old = *real_packet;
22935 }
22936
22937#else /* FREECIV_DELTA_PROTOCOL */
22938#ifdef FREECIV_JSON_CONNECTION
22939 field_addr.name = "city_id";
22940#endif /* FREECIV_JSON_CONNECTION */
22941
22942 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22944 }
22945
22946#ifdef FREECIV_JSON_CONNECTION
22947 field_addr.name = "name";
22948#endif /* FREECIV_JSON_CONNECTION */
22949
22950 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
22952 }
22953#endif /* FREECIV_DELTA_PROTOCOL */
22954
22956#undef FREE_PACKET_STRUCT
22957}
22958
22959static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
22960{
22961 const struct packet_city_rename *real_packet = packet;
22962 int e;
22964
22965 log_packet_detailed("packet_city_rename_100: sending info about ()");
22966
22967#ifdef FREECIV_DELTA_PROTOCOL
22969 struct packet_city_rename *old;
22970 bool differ;
22971 struct genhash **hash = pc->phs.sent + PACKET_CITY_RENAME;
22972
22973 if (nullptr == *hash) {
22975 nullptr, nullptr, nullptr, destroy_packet_city_rename);
22976 }
22977 BV_CLR_ALL(fields);
22978
22979 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22980 old = fc_malloc(sizeof(*old));
22981 /* temporary bitcopy just to insert correctly */
22982 *old = *real_packet;
22985 }
22986
22987 differ = (old->city_id != real_packet->city_id);
22988 if (differ) {
22989 BV_SET(fields, 0);
22990 }
22991
22992 differ = (strcmp(old->name, real_packet->name) != 0);
22993 if (differ) {
22994 BV_SET(fields, 1);
22995 }
22996#endif /* FREECIV_DELTA_PROTOCOL */
22997
22998#ifdef FREECIV_JSON_CONNECTION
22999 struct plocation field_addr;
23000 {
23001 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23004 }
23005#endif /* FREECIV_JSON_CONNECTION */
23006
23007#ifdef FREECIV_DELTA_PROTOCOL
23008#ifdef FREECIV_JSON_CONNECTION
23009 field_addr.name = "fields";
23010#endif /* FREECIV_JSON_CONNECTION */
23011 e = 0;
23012 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23013 if (e) {
23014 log_packet_detailed("fields bitvector error detected");
23015 }
23016
23017 if (BV_ISSET(fields, 0)) {
23018 log_packet_detailed(" field 'city_id' has changed");
23019
23020#ifdef FREECIV_JSON_CONNECTION
23021 field_addr.name = "city_id";
23022#endif /* FREECIV_JSON_CONNECTION */
23023 e = 0;
23024
23025 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23026
23027 if (e) {
23028 log_packet_detailed("'city_id' field error detected");
23029 }
23030 }
23031
23032 if (BV_ISSET(fields, 1)) {
23033 log_packet_detailed(" field 'name' has changed");
23034
23035#ifdef FREECIV_JSON_CONNECTION
23036 field_addr.name = "name";
23037#endif /* FREECIV_JSON_CONNECTION */
23038 e = 0;
23039
23040 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23041
23042 if (e) {
23043 log_packet_detailed("'name' field error detected");
23044 }
23045 }
23046
23047 *old = *real_packet;
23048
23049#else /* FREECIV_DELTA_PROTOCOL */
23050#ifdef FREECIV_JSON_CONNECTION
23051 field_addr.name = "city_id";
23052#endif /* FREECIV_JSON_CONNECTION */
23053 e = 0;
23054
23055 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23056
23057 if (e) {
23058 log_packet_detailed("'city_id' field error detected");
23059 }
23060
23061#ifdef FREECIV_JSON_CONNECTION
23062 field_addr.name = "name";
23063#endif /* FREECIV_JSON_CONNECTION */
23064 e = 0;
23065
23066 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23067
23068 if (e) {
23069 log_packet_detailed("'name' field error detected");
23070 }
23071#endif /* FREECIV_DELTA_PROTOCOL */
23072
23074}
23075
23077{
23078 if (!pc->used) {
23079 log_error("WARNING: trying to send data to the closed connection %s",
23081 return -1;
23082 }
23083 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RENAME].packet != nullptr, -1,
23084 "Handler for PACKET_CITY_RENAME not installed");
23085 return pc->phs.handlers->send[PACKET_CITY_RENAME].packet(pc, packet);
23086}
23087
23088int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
23089{
23090 struct packet_city_rename packet, *real_packet = &packet;
23091
23093 sz_strlcpy(real_packet->name, name);
23094
23096}
23097
23099{
23100 memset(packet, 0, sizeof(*packet));
23101}
23102
23103#define free_packet_city_options_req(_packet) (void) 0
23104#define destroy_packet_city_options_req free
23105
23106#ifdef FREECIV_DELTA_PROTOCOL
23107#define hash_packet_city_options_req_100 hash_const
23108#define cmp_packet_city_options_req_100 cmp_const
23110#endif /* FREECIV_DELTA_PROTOCOL */
23111
23113{
23114#define FREE_PACKET_STRUCT(_packet) free_packet_city_options_req(_packet)
23116
23117#ifdef FREECIV_JSON_CONNECTION
23118 struct plocation field_addr;
23119 {
23120 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23123 }
23124#endif /* FREECIV_JSON_CONNECTION */
23125
23126 log_packet_detailed("packet_city_options_req_100: got info about ()");
23127
23128#ifdef FREECIV_DELTA_PROTOCOL
23131 struct genhash **hash = pc->phs.received + PACKET_CITY_OPTIONS_REQ;
23132
23133 if (nullptr == *hash) {
23135 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23136 }
23137
23138 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23139 *real_packet = *old;
23140 } else {
23141 /* packet is already initialized empty */
23142 log_packet_detailed(" no old info");
23143 }
23144
23145#ifdef FREECIV_JSON_CONNECTION
23146 field_addr.name = "fields";
23147#endif /* FREECIV_JSON_CONNECTION */
23148 DIO_BV_GET(&din, &field_addr, fields);
23149
23150 if (BV_ISSET(fields, 0)) {
23151 log_packet_detailed(" got field 'city_id'");
23152
23153#ifdef FREECIV_JSON_CONNECTION
23154 field_addr.name = "city_id";
23155#endif /* FREECIV_JSON_CONNECTION */
23156
23157 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23159 }
23160 }
23161
23162 if (BV_ISSET(fields, 1)) {
23163 log_packet_detailed(" got field 'options'");
23164
23165#ifdef FREECIV_JSON_CONNECTION
23166 field_addr.name = "options";
23167#endif /* FREECIV_JSON_CONNECTION */
23168
23169 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23171 }
23172 }
23173
23174 if (BV_ISSET(fields, 2)) {
23175 log_packet_detailed(" got field 'wl_cb'");
23176
23177#ifdef FREECIV_JSON_CONNECTION
23178 field_addr.name = "wl_cb";
23179#endif /* FREECIV_JSON_CONNECTION */
23180
23181 {
23182 int readin;
23183
23184 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23186 }
23187 real_packet->wl_cb = readin;
23188 }
23189 }
23190
23191 if (nullptr == old) {
23192 old = fc_malloc(sizeof(*old));
23194 *old = *real_packet;
23196 } else {
23197 *old = *real_packet;
23198 }
23199
23200#else /* FREECIV_DELTA_PROTOCOL */
23201#ifdef FREECIV_JSON_CONNECTION
23202 field_addr.name = "city_id";
23203#endif /* FREECIV_JSON_CONNECTION */
23204
23205 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23207 }
23208
23209#ifdef FREECIV_JSON_CONNECTION
23210 field_addr.name = "options";
23211#endif /* FREECIV_JSON_CONNECTION */
23212
23213 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23215 }
23216
23217#ifdef FREECIV_JSON_CONNECTION
23218 field_addr.name = "wl_cb";
23219#endif /* FREECIV_JSON_CONNECTION */
23220
23221 {
23222 int readin;
23223
23224 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23226 }
23227 real_packet->wl_cb = readin;
23228 }
23229#endif /* FREECIV_DELTA_PROTOCOL */
23230
23232#undef FREE_PACKET_STRUCT
23233}
23234
23236{
23237 const struct packet_city_options_req *real_packet = packet;
23238 int e;
23240
23241 log_packet_detailed("packet_city_options_req_100: sending info about ()");
23242
23243#ifdef FREECIV_DELTA_PROTOCOL
23246 bool differ;
23247 struct genhash **hash = pc->phs.sent + PACKET_CITY_OPTIONS_REQ;
23248
23249 if (nullptr == *hash) {
23251 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23252 }
23253 BV_CLR_ALL(fields);
23254
23255 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23256 old = fc_malloc(sizeof(*old));
23257 /* temporary bitcopy just to insert correctly */
23258 *old = *real_packet;
23261 }
23262
23263 differ = (old->city_id != real_packet->city_id);
23264 if (differ) {
23265 BV_SET(fields, 0);
23266 }
23267
23268 differ = !BV_ARE_EQUAL(old->options, real_packet->options);
23269 if (differ) {
23270 BV_SET(fields, 1);
23271 }
23272
23273 differ = (old->wl_cb != real_packet->wl_cb);
23274 if (differ) {
23275 BV_SET(fields, 2);
23276 }
23277#endif /* FREECIV_DELTA_PROTOCOL */
23278
23279#ifdef FREECIV_JSON_CONNECTION
23280 struct plocation field_addr;
23281 {
23282 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23285 }
23286#endif /* FREECIV_JSON_CONNECTION */
23287
23288#ifdef FREECIV_DELTA_PROTOCOL
23289#ifdef FREECIV_JSON_CONNECTION
23290 field_addr.name = "fields";
23291#endif /* FREECIV_JSON_CONNECTION */
23292 e = 0;
23293 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23294 if (e) {
23295 log_packet_detailed("fields bitvector error detected");
23296 }
23297
23298 if (BV_ISSET(fields, 0)) {
23299 log_packet_detailed(" field 'city_id' has changed");
23300
23301#ifdef FREECIV_JSON_CONNECTION
23302 field_addr.name = "city_id";
23303#endif /* FREECIV_JSON_CONNECTION */
23304 e = 0;
23305
23306 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23307
23308 if (e) {
23309 log_packet_detailed("'city_id' field error detected");
23310 }
23311 }
23312
23313 if (BV_ISSET(fields, 1)) {
23314 log_packet_detailed(" field 'options' has changed");
23315
23316#ifdef FREECIV_JSON_CONNECTION
23317 field_addr.name = "options";
23318#endif /* FREECIV_JSON_CONNECTION */
23319 e = 0;
23320
23321 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23322
23323 if (e) {
23324 log_packet_detailed("'options' field error detected");
23325 }
23326 }
23327
23328 if (BV_ISSET(fields, 2)) {
23329 log_packet_detailed(" field 'wl_cb' has changed");
23330
23331#ifdef FREECIV_JSON_CONNECTION
23332 field_addr.name = "wl_cb";
23333#endif /* FREECIV_JSON_CONNECTION */
23334 e = 0;
23335
23336 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23337
23338 if (e) {
23339 log_packet_detailed("'wl_cb' field error detected");
23340 }
23341 }
23342
23343 *old = *real_packet;
23344
23345#else /* FREECIV_DELTA_PROTOCOL */
23346#ifdef FREECIV_JSON_CONNECTION
23347 field_addr.name = "city_id";
23348#endif /* FREECIV_JSON_CONNECTION */
23349 e = 0;
23350
23351 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23352
23353 if (e) {
23354 log_packet_detailed("'city_id' field error detected");
23355 }
23356
23357#ifdef FREECIV_JSON_CONNECTION
23358 field_addr.name = "options";
23359#endif /* FREECIV_JSON_CONNECTION */
23360 e = 0;
23361
23362 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23363
23364 if (e) {
23365 log_packet_detailed("'options' field error detected");
23366 }
23367
23368#ifdef FREECIV_JSON_CONNECTION
23369 field_addr.name = "wl_cb";
23370#endif /* FREECIV_JSON_CONNECTION */
23371 e = 0;
23372
23373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23374
23375 if (e) {
23376 log_packet_detailed("'wl_cb' field error detected");
23377 }
23378#endif /* FREECIV_DELTA_PROTOCOL */
23379
23381}
23382
23384{
23385 if (!pc->used) {
23386 log_error("WARNING: trying to send data to the closed connection %s",
23388 return -1;
23389 }
23390 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet != nullptr, -1,
23391 "Handler for PACKET_CITY_OPTIONS_REQ not installed");
23392 return pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet(pc, packet);
23393}
23394
23396{
23397 struct packet_city_options_req packet, *real_packet = &packet;
23398
23400 real_packet->options = options;
23401 real_packet->wl_cb = wl_cb;
23402
23404}
23405
23406static inline void init_packet_city_refresh(struct packet_city_refresh *packet)
23407{
23408 memset(packet, 0, sizeof(*packet));
23409}
23410
23411#define free_packet_city_refresh(_packet) (void) 0
23412#define destroy_packet_city_refresh free
23413
23414#ifdef FREECIV_DELTA_PROTOCOL
23415#define hash_packet_city_refresh_100 hash_const
23416#define cmp_packet_city_refresh_100 cmp_const
23418#endif /* FREECIV_DELTA_PROTOCOL */
23419
23421{
23422#define FREE_PACKET_STRUCT(_packet) free_packet_city_refresh(_packet)
23424
23425#ifdef FREECIV_JSON_CONNECTION
23426 struct plocation field_addr;
23427 {
23428 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23431 }
23432#endif /* FREECIV_JSON_CONNECTION */
23433
23434 log_packet_detailed("packet_city_refresh_100: got info about ()");
23435
23436#ifdef FREECIV_DELTA_PROTOCOL
23438 struct packet_city_refresh *old;
23439 struct genhash **hash = pc->phs.received + PACKET_CITY_REFRESH;
23440
23441 if (nullptr == *hash) {
23443 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23444 }
23445
23446 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23447 *real_packet = *old;
23448 } else {
23449 /* packet is already initialized empty */
23450 log_packet_detailed(" no old info");
23451 }
23452
23453#ifdef FREECIV_JSON_CONNECTION
23454 field_addr.name = "fields";
23455#endif /* FREECIV_JSON_CONNECTION */
23456 DIO_BV_GET(&din, &field_addr, fields);
23457
23458 if (BV_ISSET(fields, 0)) {
23459 log_packet_detailed(" got field 'city_id'");
23460
23461#ifdef FREECIV_JSON_CONNECTION
23462 field_addr.name = "city_id";
23463#endif /* FREECIV_JSON_CONNECTION */
23464
23465 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23467 }
23468 }
23469
23470 if (nullptr == old) {
23471 old = fc_malloc(sizeof(*old));
23473 *old = *real_packet;
23475 } else {
23476 *old = *real_packet;
23477 }
23478
23479#else /* FREECIV_DELTA_PROTOCOL */
23480#ifdef FREECIV_JSON_CONNECTION
23481 field_addr.name = "city_id";
23482#endif /* FREECIV_JSON_CONNECTION */
23483
23484 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23486 }
23487#endif /* FREECIV_DELTA_PROTOCOL */
23488
23490#undef FREE_PACKET_STRUCT
23491}
23492
23493static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
23494{
23495 const struct packet_city_refresh *real_packet = packet;
23496 int e;
23498
23499 log_packet_detailed("packet_city_refresh_100: sending info about ()");
23500
23501#ifdef FREECIV_DELTA_PROTOCOL
23503 struct packet_city_refresh *old;
23504 bool differ;
23505 struct genhash **hash = pc->phs.sent + PACKET_CITY_REFRESH;
23506
23507 if (nullptr == *hash) {
23509 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23510 }
23511 BV_CLR_ALL(fields);
23512
23513 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23514 old = fc_malloc(sizeof(*old));
23515 /* temporary bitcopy just to insert correctly */
23516 *old = *real_packet;
23519 }
23520
23521 differ = (old->city_id != real_packet->city_id);
23522 if (differ) {
23523 BV_SET(fields, 0);
23524 }
23525#endif /* FREECIV_DELTA_PROTOCOL */
23526
23527#ifdef FREECIV_JSON_CONNECTION
23528 struct plocation field_addr;
23529 {
23530 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23533 }
23534#endif /* FREECIV_JSON_CONNECTION */
23535
23536#ifdef FREECIV_DELTA_PROTOCOL
23537#ifdef FREECIV_JSON_CONNECTION
23538 field_addr.name = "fields";
23539#endif /* FREECIV_JSON_CONNECTION */
23540 e = 0;
23541 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23542 if (e) {
23543 log_packet_detailed("fields bitvector error detected");
23544 }
23545
23546 if (BV_ISSET(fields, 0)) {
23547 log_packet_detailed(" field 'city_id' has changed");
23548
23549#ifdef FREECIV_JSON_CONNECTION
23550 field_addr.name = "city_id";
23551#endif /* FREECIV_JSON_CONNECTION */
23552 e = 0;
23553
23554 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23555
23556 if (e) {
23557 log_packet_detailed("'city_id' field error detected");
23558 }
23559 }
23560
23561 *old = *real_packet;
23562
23563#else /* FREECIV_DELTA_PROTOCOL */
23564#ifdef FREECIV_JSON_CONNECTION
23565 field_addr.name = "city_id";
23566#endif /* FREECIV_JSON_CONNECTION */
23567 e = 0;
23568
23569 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23570
23571 if (e) {
23572 log_packet_detailed("'city_id' field error detected");
23573 }
23574#endif /* FREECIV_DELTA_PROTOCOL */
23575
23577}
23578
23580{
23581 if (!pc->used) {
23582 log_error("WARNING: trying to send data to the closed connection %s",
23584 return -1;
23585 }
23586 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REFRESH].packet != nullptr, -1,
23587 "Handler for PACKET_CITY_REFRESH not installed");
23588 return pc->phs.handlers->send[PACKET_CITY_REFRESH].packet(pc, packet);
23589}
23590
23591int dsend_packet_city_refresh(struct connection *pc, int city_id)
23592{
23593 struct packet_city_refresh packet, *real_packet = &packet;
23594
23596
23598}
23599
23601{
23602 memset(packet, 0, sizeof(*packet));
23603}
23604
23605#define free_packet_city_name_suggestion_req(_packet) (void) 0
23606#define destroy_packet_city_name_suggestion_req free
23607
23608#ifdef FREECIV_DELTA_PROTOCOL
23609#define hash_packet_city_name_suggestion_req_100 hash_const
23610#define cmp_packet_city_name_suggestion_req_100 cmp_const
23612#endif /* FREECIV_DELTA_PROTOCOL */
23613
23615{
23616#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_req(_packet)
23618
23619#ifdef FREECIV_JSON_CONNECTION
23620 struct plocation field_addr;
23621 {
23622 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23625 }
23626#endif /* FREECIV_JSON_CONNECTION */
23627
23628 log_packet_detailed("packet_city_name_suggestion_req_100: got info about ()");
23629
23630#ifdef FREECIV_DELTA_PROTOCOL
23633 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_REQ;
23634
23635 if (nullptr == *hash) {
23637 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23638 }
23639
23640 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23641 *real_packet = *old;
23642 } else {
23643 /* packet is already initialized empty */
23644 log_packet_detailed(" no old info");
23645 }
23646
23647#ifdef FREECIV_JSON_CONNECTION
23648 field_addr.name = "fields";
23649#endif /* FREECIV_JSON_CONNECTION */
23650 DIO_BV_GET(&din, &field_addr, fields);
23651
23652 if (BV_ISSET(fields, 0)) {
23653 log_packet_detailed(" got field 'unit_id'");
23654
23655#ifdef FREECIV_JSON_CONNECTION
23656 field_addr.name = "unit_id";
23657#endif /* FREECIV_JSON_CONNECTION */
23658
23659 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23661 }
23662 }
23663
23664 if (nullptr == old) {
23665 old = fc_malloc(sizeof(*old));
23667 *old = *real_packet;
23669 } else {
23670 *old = *real_packet;
23671 }
23672
23673#else /* FREECIV_DELTA_PROTOCOL */
23674#ifdef FREECIV_JSON_CONNECTION
23675 field_addr.name = "unit_id";
23676#endif /* FREECIV_JSON_CONNECTION */
23677
23678 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23680 }
23681#endif /* FREECIV_DELTA_PROTOCOL */
23682
23684#undef FREE_PACKET_STRUCT
23685}
23686
23688{
23689 const struct packet_city_name_suggestion_req *real_packet = packet;
23690 int e;
23692
23693 log_packet_detailed("packet_city_name_suggestion_req_100: sending info about ()");
23694
23695#ifdef FREECIV_DELTA_PROTOCOL
23698 bool differ;
23699 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_REQ;
23700
23701 if (nullptr == *hash) {
23703 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23704 }
23705 BV_CLR_ALL(fields);
23706
23707 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23708 old = fc_malloc(sizeof(*old));
23709 /* temporary bitcopy just to insert correctly */
23710 *old = *real_packet;
23713 }
23714
23715 differ = (old->unit_id != real_packet->unit_id);
23716 if (differ) {
23717 BV_SET(fields, 0);
23718 }
23719#endif /* FREECIV_DELTA_PROTOCOL */
23720
23721#ifdef FREECIV_JSON_CONNECTION
23722 struct plocation field_addr;
23723 {
23724 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23727 }
23728#endif /* FREECIV_JSON_CONNECTION */
23729
23730#ifdef FREECIV_DELTA_PROTOCOL
23731#ifdef FREECIV_JSON_CONNECTION
23732 field_addr.name = "fields";
23733#endif /* FREECIV_JSON_CONNECTION */
23734 e = 0;
23735 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23736 if (e) {
23737 log_packet_detailed("fields bitvector error detected");
23738 }
23739
23740 if (BV_ISSET(fields, 0)) {
23741 log_packet_detailed(" field 'unit_id' has changed");
23742
23743#ifdef FREECIV_JSON_CONNECTION
23744 field_addr.name = "unit_id";
23745#endif /* FREECIV_JSON_CONNECTION */
23746 e = 0;
23747
23748 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23749
23750 if (e) {
23751 log_packet_detailed("'unit_id' field error detected");
23752 }
23753 }
23754
23755 *old = *real_packet;
23756
23757#else /* FREECIV_DELTA_PROTOCOL */
23758#ifdef FREECIV_JSON_CONNECTION
23759 field_addr.name = "unit_id";
23760#endif /* FREECIV_JSON_CONNECTION */
23761 e = 0;
23762
23763 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23764
23765 if (e) {
23766 log_packet_detailed("'unit_id' field error detected");
23767 }
23768#endif /* FREECIV_DELTA_PROTOCOL */
23769
23771}
23772
23774{
23775 if (!pc->used) {
23776 log_error("WARNING: trying to send data to the closed connection %s",
23778 return -1;
23779 }
23780 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet != nullptr, -1,
23781 "Handler for PACKET_CITY_NAME_SUGGESTION_REQ not installed");
23782 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet(pc, packet);
23783}
23784
23786{
23787 struct packet_city_name_suggestion_req packet, *real_packet = &packet;
23788
23790
23792}
23793
23795{
23796 memset(packet, 0, sizeof(*packet));
23797}
23798
23799#define free_packet_city_name_suggestion_info(_packet) (void) 0
23800#define destroy_packet_city_name_suggestion_info free
23801
23802#ifdef FREECIV_DELTA_PROTOCOL
23803#define hash_packet_city_name_suggestion_info_100 hash_const
23804#define cmp_packet_city_name_suggestion_info_100 cmp_const
23806#endif /* FREECIV_DELTA_PROTOCOL */
23807
23809{
23810#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_info(_packet)
23812
23813#ifdef FREECIV_JSON_CONNECTION
23814 struct plocation field_addr;
23815 {
23816 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23819 }
23820#endif /* FREECIV_JSON_CONNECTION */
23821
23822 log_packet_detailed("packet_city_name_suggestion_info_100: got info about ()");
23823
23824#ifdef FREECIV_DELTA_PROTOCOL
23827 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_INFO;
23828
23829 if (nullptr == *hash) {
23831 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
23832 }
23833
23834 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23835 *real_packet = *old;
23836 } else {
23837 /* packet is already initialized empty */
23838 log_packet_detailed(" no old info");
23839 }
23840
23841#ifdef FREECIV_JSON_CONNECTION
23842 field_addr.name = "fields";
23843#endif /* FREECIV_JSON_CONNECTION */
23844 DIO_BV_GET(&din, &field_addr, fields);
23845
23846 if (BV_ISSET(fields, 0)) {
23847 log_packet_detailed(" got field 'unit_id'");
23848
23849#ifdef FREECIV_JSON_CONNECTION
23850 field_addr.name = "unit_id";
23851#endif /* FREECIV_JSON_CONNECTION */
23852
23853 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23855 }
23856 }
23857
23858 if (BV_ISSET(fields, 1)) {
23859 log_packet_detailed(" got field 'name'");
23860
23861#ifdef FREECIV_JSON_CONNECTION
23862 field_addr.name = "name";
23863#endif /* FREECIV_JSON_CONNECTION */
23864
23865 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23867 }
23868 }
23869
23870 if (nullptr == old) {
23871 old = fc_malloc(sizeof(*old));
23873 *old = *real_packet;
23875 } else {
23876 *old = *real_packet;
23877 }
23878
23879#else /* FREECIV_DELTA_PROTOCOL */
23880#ifdef FREECIV_JSON_CONNECTION
23881 field_addr.name = "unit_id";
23882#endif /* FREECIV_JSON_CONNECTION */
23883
23884 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23886 }
23887
23888#ifdef FREECIV_JSON_CONNECTION
23889 field_addr.name = "name";
23890#endif /* FREECIV_JSON_CONNECTION */
23891
23892 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23894 }
23895#endif /* FREECIV_DELTA_PROTOCOL */
23896
23898#undef FREE_PACKET_STRUCT
23899}
23900
23902{
23903 const struct packet_city_name_suggestion_info *real_packet = packet;
23904 int e;
23906
23907 log_packet_detailed("packet_city_name_suggestion_info_100: sending info about ()");
23908
23909#ifdef FREECIV_DELTA_PROTOCOL
23912 bool differ;
23913 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_INFO;
23914
23915 if (nullptr == *hash) {
23917 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
23918 }
23919 BV_CLR_ALL(fields);
23920
23921 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23922 old = fc_malloc(sizeof(*old));
23923 /* temporary bitcopy just to insert correctly */
23924 *old = *real_packet;
23927 }
23928
23929 differ = (old->unit_id != real_packet->unit_id);
23930 if (differ) {
23931 BV_SET(fields, 0);
23932 }
23933
23934 differ = (strcmp(old->name, real_packet->name) != 0);
23935 if (differ) {
23936 BV_SET(fields, 1);
23937 }
23938#endif /* FREECIV_DELTA_PROTOCOL */
23939
23940#ifdef FREECIV_JSON_CONNECTION
23941 struct plocation field_addr;
23942 {
23943 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23946 }
23947#endif /* FREECIV_JSON_CONNECTION */
23948
23949#ifdef FREECIV_DELTA_PROTOCOL
23950#ifdef FREECIV_JSON_CONNECTION
23951 field_addr.name = "fields";
23952#endif /* FREECIV_JSON_CONNECTION */
23953 e = 0;
23954 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23955 if (e) {
23956 log_packet_detailed("fields bitvector error detected");
23957 }
23958
23959 if (BV_ISSET(fields, 0)) {
23960 log_packet_detailed(" field 'unit_id' has changed");
23961
23962#ifdef FREECIV_JSON_CONNECTION
23963 field_addr.name = "unit_id";
23964#endif /* FREECIV_JSON_CONNECTION */
23965 e = 0;
23966
23967 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23968
23969 if (e) {
23970 log_packet_detailed("'unit_id' field error detected");
23971 }
23972 }
23973
23974 if (BV_ISSET(fields, 1)) {
23975 log_packet_detailed(" field 'name' has changed");
23976
23977#ifdef FREECIV_JSON_CONNECTION
23978 field_addr.name = "name";
23979#endif /* FREECIV_JSON_CONNECTION */
23980 e = 0;
23981
23982 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23983
23984 if (e) {
23985 log_packet_detailed("'name' field error detected");
23986 }
23987 }
23988
23989 *old = *real_packet;
23990
23991#else /* FREECIV_DELTA_PROTOCOL */
23992#ifdef FREECIV_JSON_CONNECTION
23993 field_addr.name = "unit_id";
23994#endif /* FREECIV_JSON_CONNECTION */
23995 e = 0;
23996
23997 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23998
23999 if (e) {
24000 log_packet_detailed("'unit_id' field error detected");
24001 }
24002
24003#ifdef FREECIV_JSON_CONNECTION
24004 field_addr.name = "name";
24005#endif /* FREECIV_JSON_CONNECTION */
24006 e = 0;
24007
24008 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24009
24010 if (e) {
24011 log_packet_detailed("'name' field error detected");
24012 }
24013#endif /* FREECIV_DELTA_PROTOCOL */
24014
24016}
24017
24019{
24020 if (!pc->used) {
24021 log_error("WARNING: trying to send data to the closed connection %s",
24023 return -1;
24024 }
24025 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet != nullptr, -1,
24026 "Handler for PACKET_CITY_NAME_SUGGESTION_INFO not installed");
24027 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet(pc, packet);
24028}
24029
24036
24037int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
24038{
24039 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24040
24042 sz_strlcpy(real_packet->name, name);
24043
24045}
24046
24048{
24049 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24050
24052 sz_strlcpy(real_packet->name, name);
24053
24055}
24056
24058{
24059 memset(packet, 0, sizeof(*packet));
24060}
24061
24062#define free_packet_city_sabotage_list(_packet) (void) 0
24063#define destroy_packet_city_sabotage_list free
24064
24065#ifdef FREECIV_DELTA_PROTOCOL
24066#define hash_packet_city_sabotage_list_100 hash_const
24067#define cmp_packet_city_sabotage_list_100 cmp_const
24069#endif /* FREECIV_DELTA_PROTOCOL */
24070
24072{
24073#define FREE_PACKET_STRUCT(_packet) free_packet_city_sabotage_list(_packet)
24075
24076#ifdef FREECIV_JSON_CONNECTION
24077 struct plocation field_addr;
24078 {
24079 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24082 }
24083#endif /* FREECIV_JSON_CONNECTION */
24084
24085 log_packet_detailed("packet_city_sabotage_list_100: got info about ()");
24086
24087#ifdef FREECIV_DELTA_PROTOCOL
24090 struct genhash **hash = pc->phs.received + PACKET_CITY_SABOTAGE_LIST;
24091
24092 if (nullptr == *hash) {
24094 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24095 }
24096
24097 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24098 *real_packet = *old;
24099 } else {
24100 /* packet is already initialized empty */
24101 log_packet_detailed(" no old info");
24102 }
24103
24104#ifdef FREECIV_JSON_CONNECTION
24105 field_addr.name = "fields";
24106#endif /* FREECIV_JSON_CONNECTION */
24107 DIO_BV_GET(&din, &field_addr, fields);
24108
24109 if (BV_ISSET(fields, 0)) {
24110 log_packet_detailed(" got field 'actor_id'");
24111
24112#ifdef FREECIV_JSON_CONNECTION
24113 field_addr.name = "actor_id";
24114#endif /* FREECIV_JSON_CONNECTION */
24115
24116 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24118 }
24119 }
24120
24121 if (BV_ISSET(fields, 1)) {
24122 log_packet_detailed(" got field 'city_id'");
24123
24124#ifdef FREECIV_JSON_CONNECTION
24125 field_addr.name = "city_id";
24126#endif /* FREECIV_JSON_CONNECTION */
24127
24128 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24130 }
24131 }
24132
24133 if (BV_ISSET(fields, 2)) {
24134 log_packet_detailed(" got field 'improvements'");
24135
24136#ifdef FREECIV_JSON_CONNECTION
24137 field_addr.name = "improvements";
24138#endif /* FREECIV_JSON_CONNECTION */
24139
24140 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24141 RECEIVE_PACKET_FIELD_ERROR(improvements);
24142 }
24143 }
24144
24145 if (BV_ISSET(fields, 3)) {
24146 log_packet_detailed(" got field 'act_id'");
24147
24148#ifdef FREECIV_JSON_CONNECTION
24149 field_addr.name = "act_id";
24150#endif /* FREECIV_JSON_CONNECTION */
24151
24152 {
24153 int readin;
24154
24155 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24157 }
24158 real_packet->act_id = readin;
24159 }
24160 }
24161
24162 if (BV_ISSET(fields, 4)) {
24163 log_packet_detailed(" got field 'request_kind'");
24164
24165#ifdef FREECIV_JSON_CONNECTION
24166 field_addr.name = "request_kind";
24167#endif /* FREECIV_JSON_CONNECTION */
24168
24169 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24170 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24171 }
24172 }
24173
24174 if (nullptr == old) {
24175 old = fc_malloc(sizeof(*old));
24177 *old = *real_packet;
24179 } else {
24180 *old = *real_packet;
24181 }
24182
24183#else /* FREECIV_DELTA_PROTOCOL */
24184#ifdef FREECIV_JSON_CONNECTION
24185 field_addr.name = "actor_id";
24186#endif /* FREECIV_JSON_CONNECTION */
24187
24188 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24190 }
24191
24192#ifdef FREECIV_JSON_CONNECTION
24193 field_addr.name = "city_id";
24194#endif /* FREECIV_JSON_CONNECTION */
24195
24196 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24198 }
24199
24200#ifdef FREECIV_JSON_CONNECTION
24201 field_addr.name = "improvements";
24202#endif /* FREECIV_JSON_CONNECTION */
24203
24204 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24205 RECEIVE_PACKET_FIELD_ERROR(improvements);
24206 }
24207
24208#ifdef FREECIV_JSON_CONNECTION
24209 field_addr.name = "act_id";
24210#endif /* FREECIV_JSON_CONNECTION */
24211
24212 {
24213 int readin;
24214
24215 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24217 }
24218 real_packet->act_id = readin;
24219 }
24220
24221#ifdef FREECIV_JSON_CONNECTION
24222 field_addr.name = "request_kind";
24223#endif /* FREECIV_JSON_CONNECTION */
24224
24225 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24226 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24227 }
24228#endif /* FREECIV_DELTA_PROTOCOL */
24229
24231#undef FREE_PACKET_STRUCT
24232}
24233
24235{
24236 const struct packet_city_sabotage_list *real_packet = packet;
24237 int e;
24239
24240 log_packet_detailed("packet_city_sabotage_list_100: sending info about ()");
24241
24242#ifdef FREECIV_DELTA_PROTOCOL
24245 bool differ;
24246 struct genhash **hash = pc->phs.sent + PACKET_CITY_SABOTAGE_LIST;
24247
24248 if (nullptr == *hash) {
24250 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24251 }
24252 BV_CLR_ALL(fields);
24253
24254 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24255 old = fc_malloc(sizeof(*old));
24256 /* temporary bitcopy just to insert correctly */
24257 *old = *real_packet;
24260 }
24261
24262 differ = (old->actor_id != real_packet->actor_id);
24263 if (differ) {
24264 BV_SET(fields, 0);
24265 }
24266
24267 differ = (old->city_id != real_packet->city_id);
24268 if (differ) {
24269 BV_SET(fields, 1);
24270 }
24271
24272 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
24273 if (differ) {
24274 BV_SET(fields, 2);
24275 }
24276
24277 differ = (old->act_id != real_packet->act_id);
24278 if (differ) {
24279 BV_SET(fields, 3);
24280 }
24281
24282 differ = (old->request_kind != real_packet->request_kind);
24283 if (differ) {
24284 BV_SET(fields, 4);
24285 }
24286#endif /* FREECIV_DELTA_PROTOCOL */
24287
24288#ifdef FREECIV_JSON_CONNECTION
24289 struct plocation field_addr;
24290 {
24291 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24294 }
24295#endif /* FREECIV_JSON_CONNECTION */
24296
24297#ifdef FREECIV_DELTA_PROTOCOL
24298#ifdef FREECIV_JSON_CONNECTION
24299 field_addr.name = "fields";
24300#endif /* FREECIV_JSON_CONNECTION */
24301 e = 0;
24302 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24303 if (e) {
24304 log_packet_detailed("fields bitvector error detected");
24305 }
24306
24307 if (BV_ISSET(fields, 0)) {
24308 log_packet_detailed(" field 'actor_id' has changed");
24309
24310#ifdef FREECIV_JSON_CONNECTION
24311 field_addr.name = "actor_id";
24312#endif /* FREECIV_JSON_CONNECTION */
24313 e = 0;
24314
24315 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24316
24317 if (e) {
24318 log_packet_detailed("'actor_id' field error detected");
24319 }
24320 }
24321
24322 if (BV_ISSET(fields, 1)) {
24323 log_packet_detailed(" field 'city_id' has changed");
24324
24325#ifdef FREECIV_JSON_CONNECTION
24326 field_addr.name = "city_id";
24327#endif /* FREECIV_JSON_CONNECTION */
24328 e = 0;
24329
24330 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24331
24332 if (e) {
24333 log_packet_detailed("'city_id' field error detected");
24334 }
24335 }
24336
24337 if (BV_ISSET(fields, 2)) {
24338 log_packet_detailed(" field 'improvements' has changed");
24339
24340#ifdef FREECIV_JSON_CONNECTION
24341 field_addr.name = "improvements";
24342#endif /* FREECIV_JSON_CONNECTION */
24343 e = 0;
24344
24345 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24346
24347 if (e) {
24348 log_packet_detailed("'improvements' field error detected");
24349 }
24350 }
24351
24352 if (BV_ISSET(fields, 3)) {
24353 log_packet_detailed(" field 'act_id' has changed");
24354
24355#ifdef FREECIV_JSON_CONNECTION
24356 field_addr.name = "act_id";
24357#endif /* FREECIV_JSON_CONNECTION */
24358 e = 0;
24359
24360 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24361
24362 if (e) {
24363 log_packet_detailed("'act_id' field error detected");
24364 }
24365 }
24366
24367 if (BV_ISSET(fields, 4)) {
24368 log_packet_detailed(" field 'request_kind' has changed");
24369
24370#ifdef FREECIV_JSON_CONNECTION
24371 field_addr.name = "request_kind";
24372#endif /* FREECIV_JSON_CONNECTION */
24373 e = 0;
24374
24375 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24376
24377 if (e) {
24378 log_packet_detailed("'request_kind' field error detected");
24379 }
24380 }
24381
24382 *old = *real_packet;
24383
24384#else /* FREECIV_DELTA_PROTOCOL */
24385#ifdef FREECIV_JSON_CONNECTION
24386 field_addr.name = "actor_id";
24387#endif /* FREECIV_JSON_CONNECTION */
24388 e = 0;
24389
24390 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24391
24392 if (e) {
24393 log_packet_detailed("'actor_id' field error detected");
24394 }
24395
24396#ifdef FREECIV_JSON_CONNECTION
24397 field_addr.name = "city_id";
24398#endif /* FREECIV_JSON_CONNECTION */
24399 e = 0;
24400
24401 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24402
24403 if (e) {
24404 log_packet_detailed("'city_id' field error detected");
24405 }
24406
24407#ifdef FREECIV_JSON_CONNECTION
24408 field_addr.name = "improvements";
24409#endif /* FREECIV_JSON_CONNECTION */
24410 e = 0;
24411
24412 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24413
24414 if (e) {
24415 log_packet_detailed("'improvements' field error detected");
24416 }
24417
24418#ifdef FREECIV_JSON_CONNECTION
24419 field_addr.name = "act_id";
24420#endif /* FREECIV_JSON_CONNECTION */
24421 e = 0;
24422
24423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24424
24425 if (e) {
24426 log_packet_detailed("'act_id' field error detected");
24427 }
24428
24429#ifdef FREECIV_JSON_CONNECTION
24430 field_addr.name = "request_kind";
24431#endif /* FREECIV_JSON_CONNECTION */
24432 e = 0;
24433
24434 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24435
24436 if (e) {
24437 log_packet_detailed("'request_kind' field error detected");
24438 }
24439#endif /* FREECIV_DELTA_PROTOCOL */
24440
24442}
24443
24445{
24446 if (!pc->used) {
24447 log_error("WARNING: trying to send data to the closed connection %s",
24449 return -1;
24450 }
24451 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet != nullptr, -1,
24452 "Handler for PACKET_CITY_SABOTAGE_LIST not installed");
24453 return pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet(pc, packet);
24454}
24455
24457{
24458 conn_list_iterate(dest, pconn) {
24461}
24462
24464{
24465 memset(packet, 0, sizeof(*packet));
24466}
24467
24468#define free_packet_city_rally_point(_packet) (void) 0
24469#define destroy_packet_city_rally_point free
24470
24471#ifdef FREECIV_DELTA_PROTOCOL
24472#define hash_packet_city_rally_point_100 hash_const
24473#define cmp_packet_city_rally_point_100 cmp_const
24475#endif /* FREECIV_DELTA_PROTOCOL */
24476
24478{
24479#define FREE_PACKET_STRUCT(_packet) free_packet_city_rally_point(_packet)
24481
24482#ifdef FREECIV_JSON_CONNECTION
24483 struct plocation field_addr;
24484 {
24485 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24488 }
24489#endif /* FREECIV_JSON_CONNECTION */
24490
24491 log_packet_detailed("packet_city_rally_point_100: got info about ()");
24492
24493#ifdef FREECIV_DELTA_PROTOCOL
24496 struct genhash **hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
24497
24498 if (nullptr == *hash) {
24500 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24501 }
24502
24503 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24504 *real_packet = *old;
24505 } else {
24506 /* packet is already initialized empty */
24507 log_packet_detailed(" no old info");
24508 }
24509
24510#ifdef FREECIV_JSON_CONNECTION
24511 field_addr.name = "fields";
24512#endif /* FREECIV_JSON_CONNECTION */
24513 DIO_BV_GET(&din, &field_addr, fields);
24514
24515 if (BV_ISSET(fields, 0)) {
24516 log_packet_detailed(" got field 'id'");
24517
24518#ifdef FREECIV_JSON_CONNECTION
24519 field_addr.name = "id";
24520#endif /* FREECIV_JSON_CONNECTION */
24521
24522 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24524 }
24525 }
24526
24527 if (BV_ISSET(fields, 1)) {
24528 log_packet_detailed(" got field 'length'");
24529
24530#ifdef FREECIV_JSON_CONNECTION
24531 field_addr.name = "length";
24532#endif /* FREECIV_JSON_CONNECTION */
24533
24534 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24536 }
24537 }
24538
24539 real_packet->persistent = BV_ISSET(fields, 2);
24540
24541 real_packet->vigilant = BV_ISSET(fields, 3);
24542
24543 if (BV_ISSET(fields, 4)) {
24544 log_packet_detailed(" got field 'orders'");
24545
24546#ifdef FREECIV_JSON_CONNECTION
24547 field_addr.name = "orders";
24548#endif /* FREECIV_JSON_CONNECTION */
24549
24550 {
24551 int i;
24552
24553 if (real_packet->length > MAX_LEN_ROUTE) {
24554 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24555 }
24556
24557#ifdef FREECIV_JSON_CONNECTION
24558 /* Enter array. */
24559 field_addr.sub_location = plocation_elem_new(0);
24560#endif /* FREECIV_JSON_CONNECTION */
24561
24562 for (i = 0; i < real_packet->length; i++) {
24563#ifdef FREECIV_JSON_CONNECTION
24564 /* Next array element */
24565 field_addr.sub_location->number = i;
24566#endif /* FREECIV_JSON_CONNECTION */
24567
24568 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24570 }
24571 }
24572
24573#ifdef FREECIV_JSON_CONNECTION
24574 /* Exit array. */
24575 FC_FREE(field_addr.sub_location);
24576#endif /* FREECIV_JSON_CONNECTION */
24577 }
24578 }
24579
24580 if (nullptr == old) {
24581 old = fc_malloc(sizeof(*old));
24583 *old = *real_packet;
24585 } else {
24586 *old = *real_packet;
24587 }
24588
24589#else /* FREECIV_DELTA_PROTOCOL */
24590#ifdef FREECIV_JSON_CONNECTION
24591 field_addr.name = "id";
24592#endif /* FREECIV_JSON_CONNECTION */
24593
24594 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24596 }
24597
24598#ifdef FREECIV_JSON_CONNECTION
24599 field_addr.name = "length";
24600#endif /* FREECIV_JSON_CONNECTION */
24601
24602 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24604 }
24605
24606#ifdef FREECIV_JSON_CONNECTION
24607 field_addr.name = "persistent";
24608#endif /* FREECIV_JSON_CONNECTION */
24609
24610 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->persistent)) {
24612 }
24613
24614#ifdef FREECIV_JSON_CONNECTION
24615 field_addr.name = "vigilant";
24616#endif /* FREECIV_JSON_CONNECTION */
24617
24618 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
24620 }
24621
24622#ifdef FREECIV_JSON_CONNECTION
24623 field_addr.name = "orders";
24624#endif /* FREECIV_JSON_CONNECTION */
24625
24626 {
24627 int i;
24628
24629 if (real_packet->length > MAX_LEN_ROUTE) {
24630 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24631 }
24632
24633#ifdef FREECIV_JSON_CONNECTION
24634 /* Enter array. */
24635 field_addr.sub_location = plocation_elem_new(0);
24636#endif /* FREECIV_JSON_CONNECTION */
24637
24638 for (i = 0; i < real_packet->length; i++) {
24639#ifdef FREECIV_JSON_CONNECTION
24640 /* Next array element */
24641 field_addr.sub_location->number = i;
24642#endif /* FREECIV_JSON_CONNECTION */
24643
24644 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24646 }
24647 }
24648
24649#ifdef FREECIV_JSON_CONNECTION
24650 /* Exit array. */
24651 FC_FREE(field_addr.sub_location);
24652#endif /* FREECIV_JSON_CONNECTION */
24653 }
24654#endif /* FREECIV_DELTA_PROTOCOL */
24655
24657#undef FREE_PACKET_STRUCT
24658}
24659
24660static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24661{
24662 const struct packet_city_rally_point *real_packet = packet;
24663 int e;
24665
24666 log_packet_detailed("packet_city_rally_point_100: sending info about ()");
24667
24668#ifdef FREECIV_DELTA_PROTOCOL
24671 bool differ;
24672 int different = force_to_send;
24673 struct genhash **hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
24674
24675 if (nullptr == *hash) {
24677 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24678 }
24679 BV_CLR_ALL(fields);
24680
24681 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24682 old = fc_malloc(sizeof(*old));
24683 /* temporary bitcopy just to insert correctly */
24684 *old = *real_packet;
24687 different = 1; /* Force to send. */
24688 }
24689
24690 differ = (old->id != real_packet->id);
24691 if (differ) {
24692 different++;
24693 BV_SET(fields, 0);
24694 }
24695
24696 differ = (old->length != real_packet->length);
24697 if (differ) {
24698 different++;
24699 BV_SET(fields, 1);
24700 }
24701
24702 differ = (old->persistent != real_packet->persistent);
24703 if (differ) {
24704 different++;
24705 }
24706 /* folded into head */
24707 if (real_packet->persistent) {
24708 BV_SET(fields, 2);
24709 }
24710
24711 differ = (old->vigilant != real_packet->vigilant);
24712 if (differ) {
24713 different++;
24714 }
24715 /* folded into head */
24716 if (real_packet->vigilant) {
24717 BV_SET(fields, 3);
24718 }
24719
24720 differ = (old->length != real_packet->length);
24721 if (!differ) {
24722 int i;
24723
24724 for (i = 0; i < old->length; i++) {
24725 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
24726 if (differ) {
24727 break;
24728 }
24729 }
24730 }
24731 if (differ) {
24732 different++;
24733 BV_SET(fields, 4);
24734 }
24735
24736 if (different == 0) {
24737 log_packet_detailed(" no change -> discard");
24739 }
24740#endif /* FREECIV_DELTA_PROTOCOL */
24741
24742#ifdef FREECIV_JSON_CONNECTION
24743 struct plocation field_addr;
24744 {
24745 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24748 }
24749#endif /* FREECIV_JSON_CONNECTION */
24750
24751#ifdef FREECIV_DELTA_PROTOCOL
24752#ifdef FREECIV_JSON_CONNECTION
24753 field_addr.name = "fields";
24754#endif /* FREECIV_JSON_CONNECTION */
24755 e = 0;
24756 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24757 if (e) {
24758 log_packet_detailed("fields bitvector error detected");
24759 }
24760
24761 if (BV_ISSET(fields, 0)) {
24762 log_packet_detailed(" field 'id' has changed");
24763
24764#ifdef FREECIV_JSON_CONNECTION
24765 field_addr.name = "id";
24766#endif /* FREECIV_JSON_CONNECTION */
24767 e = 0;
24768
24769 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24770
24771 if (e) {
24772 log_packet_detailed("'id' field error detected");
24773 }
24774 }
24775
24776 if (BV_ISSET(fields, 1)) {
24777 log_packet_detailed(" field 'length' has changed");
24778
24779#ifdef FREECIV_JSON_CONNECTION
24780 field_addr.name = "length";
24781#endif /* FREECIV_JSON_CONNECTION */
24782 e = 0;
24783
24784 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24785
24786 if (e) {
24787 log_packet_detailed("'length' field error detected");
24788 }
24789 }
24790
24791 /* field 2 is folded into the header */
24792
24793 /* field 3 is folded into the header */
24794
24795 if (BV_ISSET(fields, 4)) {
24796 log_packet_detailed(" field 'orders' has changed");
24797
24798#ifdef FREECIV_JSON_CONNECTION
24799 field_addr.name = "orders";
24800#endif /* FREECIV_JSON_CONNECTION */
24801 e = 0;
24802
24803 {
24804 int i;
24805
24806#ifdef FREECIV_JSON_CONNECTION
24807 /* Create the array. */
24808 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24809
24810 /* Enter array. */
24811 field_addr.sub_location = plocation_elem_new(0);
24812#endif /* FREECIV_JSON_CONNECTION */
24813
24814 for (i = 0; i < real_packet->length; i++) {
24815#ifdef FREECIV_JSON_CONNECTION
24816 /* Next array element. */
24817 field_addr.sub_location->number = i;
24818#endif /* FREECIV_JSON_CONNECTION */
24819
24820 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24821 }
24822
24823#ifdef FREECIV_JSON_CONNECTION
24824 /* Exit array. */
24825 FC_FREE(field_addr.sub_location);
24826#endif /* FREECIV_JSON_CONNECTION */
24827 }
24828
24829 if (e) {
24830 log_packet_detailed("'orders' field error detected");
24831 }
24832 }
24833
24834 *old = *real_packet;
24835
24836#else /* FREECIV_DELTA_PROTOCOL */
24837#ifdef FREECIV_JSON_CONNECTION
24838 field_addr.name = "id";
24839#endif /* FREECIV_JSON_CONNECTION */
24840 e = 0;
24841
24842 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24843
24844 if (e) {
24845 log_packet_detailed("'id' field error detected");
24846 }
24847
24848#ifdef FREECIV_JSON_CONNECTION
24849 field_addr.name = "length";
24850#endif /* FREECIV_JSON_CONNECTION */
24851 e = 0;
24852
24853 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24854
24855 if (e) {
24856 log_packet_detailed("'length' field error detected");
24857 }
24858
24859#ifdef FREECIV_JSON_CONNECTION
24860 field_addr.name = "persistent";
24861#endif /* FREECIV_JSON_CONNECTION */
24862 e = 0;
24863
24864 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->persistent);
24865
24866 if (e) {
24867 log_packet_detailed("'persistent' field error detected");
24868 }
24869
24870#ifdef FREECIV_JSON_CONNECTION
24871 field_addr.name = "vigilant";
24872#endif /* FREECIV_JSON_CONNECTION */
24873 e = 0;
24874
24875 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
24876
24877 if (e) {
24878 log_packet_detailed("'vigilant' field error detected");
24879 }
24880
24881#ifdef FREECIV_JSON_CONNECTION
24882 field_addr.name = "orders";
24883#endif /* FREECIV_JSON_CONNECTION */
24884 e = 0;
24885
24886 {
24887 int i;
24888
24889#ifdef FREECIV_JSON_CONNECTION
24890 /* Create the array. */
24891 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24892
24893 /* Enter array. */
24894 field_addr.sub_location = plocation_elem_new(0);
24895#endif /* FREECIV_JSON_CONNECTION */
24896
24897 for (i = 0; i < real_packet->length; i++) {
24898#ifdef FREECIV_JSON_CONNECTION
24899 /* Next array element. */
24900 field_addr.sub_location->number = i;
24901#endif /* FREECIV_JSON_CONNECTION */
24902
24903 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24904 }
24905
24906#ifdef FREECIV_JSON_CONNECTION
24907 /* Exit array. */
24908 FC_FREE(field_addr.sub_location);
24909#endif /* FREECIV_JSON_CONNECTION */
24910 }
24911
24912 if (e) {
24913 log_packet_detailed("'orders' field error detected");
24914 }
24915#endif /* FREECIV_DELTA_PROTOCOL */
24916
24918}
24919
24920int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24921{
24922 if (!pc->used) {
24923 log_error("WARNING: trying to send data to the closed connection %s",
24925 return -1;
24926 }
24927 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send != nullptr, -1,
24928 "Handler for PACKET_CITY_RALLY_POINT not installed");
24929 return pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send(pc, packet, force_to_send);
24930}
24931
24932void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
24933{
24934 conn_list_iterate(dest, pconn) {
24935 send_packet_city_rally_point(pconn, packet, force_to_send);
24937}
24938
24939static inline void init_packet_worker_task(struct packet_worker_task *packet)
24940{
24941 memset(packet, 0, sizeof(*packet));
24942}
24943
24944#define free_packet_worker_task(_packet) (void) 0
24945#define destroy_packet_worker_task free
24946
24947#ifdef FREECIV_DELTA_PROTOCOL
24948#define hash_packet_worker_task_100 hash_const
24949#define cmp_packet_worker_task_100 cmp_const
24951#endif /* FREECIV_DELTA_PROTOCOL */
24952
24954{
24955#define FREE_PACKET_STRUCT(_packet) free_packet_worker_task(_packet)
24957
24958#ifdef FREECIV_JSON_CONNECTION
24959 struct plocation field_addr;
24960 {
24961 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24964 }
24965#endif /* FREECIV_JSON_CONNECTION */
24966
24967 log_packet_detailed("packet_worker_task_100: got info about ()");
24968
24969#ifdef FREECIV_DELTA_PROTOCOL
24971 struct packet_worker_task *old;
24972 struct genhash **hash = pc->phs.received + PACKET_WORKER_TASK;
24973
24974 if (nullptr == *hash) {
24976 nullptr, nullptr, nullptr, destroy_packet_worker_task);
24977 }
24978
24979 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24980 *real_packet = *old;
24981 } else {
24982 /* packet is already initialized empty */
24983 log_packet_detailed(" no old info");
24984 }
24985
24986#ifdef FREECIV_JSON_CONNECTION
24987 field_addr.name = "fields";
24988#endif /* FREECIV_JSON_CONNECTION */
24989 DIO_BV_GET(&din, &field_addr, fields);
24990
24991 if (BV_ISSET(fields, 0)) {
24992 log_packet_detailed(" got field 'city_id'");
24993
24994#ifdef FREECIV_JSON_CONNECTION
24995 field_addr.name = "city_id";
24996#endif /* FREECIV_JSON_CONNECTION */
24997
24998 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25000 }
25001 }
25002
25003 if (BV_ISSET(fields, 1)) {
25004 log_packet_detailed(" got field 'tile_id'");
25005
25006#ifdef FREECIV_JSON_CONNECTION
25007 field_addr.name = "tile_id";
25008#endif /* FREECIV_JSON_CONNECTION */
25009
25010 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25012 }
25013 }
25014
25015 if (BV_ISSET(fields, 2)) {
25016 log_packet_detailed(" got field 'activity'");
25017
25018#ifdef FREECIV_JSON_CONNECTION
25019 field_addr.name = "activity";
25020#endif /* FREECIV_JSON_CONNECTION */
25021
25022 {
25023 int readin;
25024
25025 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25027 }
25028 real_packet->activity = readin;
25029 }
25030 }
25031
25032 if (BV_ISSET(fields, 3)) {
25033 log_packet_detailed(" got field 'tgt'");
25034
25035#ifdef FREECIV_JSON_CONNECTION
25036 field_addr.name = "tgt";
25037#endif /* FREECIV_JSON_CONNECTION */
25038
25039 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25041 }
25042 }
25043
25044 if (BV_ISSET(fields, 4)) {
25045 log_packet_detailed(" got field 'want'");
25046
25047#ifdef FREECIV_JSON_CONNECTION
25048 field_addr.name = "want";
25049#endif /* FREECIV_JSON_CONNECTION */
25050
25051 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25053 }
25054 }
25055
25056 if (nullptr == old) {
25057 old = fc_malloc(sizeof(*old));
25059 *old = *real_packet;
25061 } else {
25062 *old = *real_packet;
25063 }
25064
25065#else /* FREECIV_DELTA_PROTOCOL */
25066#ifdef FREECIV_JSON_CONNECTION
25067 field_addr.name = "city_id";
25068#endif /* FREECIV_JSON_CONNECTION */
25069
25070 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25072 }
25073
25074#ifdef FREECIV_JSON_CONNECTION
25075 field_addr.name = "tile_id";
25076#endif /* FREECIV_JSON_CONNECTION */
25077
25078 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25080 }
25081
25082#ifdef FREECIV_JSON_CONNECTION
25083 field_addr.name = "activity";
25084#endif /* FREECIV_JSON_CONNECTION */
25085
25086 {
25087 int readin;
25088
25089 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25091 }
25092 real_packet->activity = readin;
25093 }
25094
25095#ifdef FREECIV_JSON_CONNECTION
25096 field_addr.name = "tgt";
25097#endif /* FREECIV_JSON_CONNECTION */
25098
25099 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25101 }
25102
25103#ifdef FREECIV_JSON_CONNECTION
25104 field_addr.name = "want";
25105#endif /* FREECIV_JSON_CONNECTION */
25106
25107 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25109 }
25110#endif /* FREECIV_DELTA_PROTOCOL */
25111
25113#undef FREE_PACKET_STRUCT
25114}
25115
25116static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
25117{
25118 const struct packet_worker_task *real_packet = packet;
25119 int e;
25121
25122 log_packet_detailed("packet_worker_task_100: sending info about ()");
25123
25124#ifdef FREECIV_DELTA_PROTOCOL
25126 struct packet_worker_task *old;
25127 bool differ;
25128 struct genhash **hash = pc->phs.sent + PACKET_WORKER_TASK;
25129
25130 if (nullptr == *hash) {
25132 nullptr, nullptr, nullptr, destroy_packet_worker_task);
25133 }
25134 BV_CLR_ALL(fields);
25135
25136 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25137 old = fc_malloc(sizeof(*old));
25138 /* temporary bitcopy just to insert correctly */
25139 *old = *real_packet;
25142 }
25143
25144 differ = (old->city_id != real_packet->city_id);
25145 if (differ) {
25146 BV_SET(fields, 0);
25147 }
25148
25149 differ = (old->tile_id != real_packet->tile_id);
25150 if (differ) {
25151 BV_SET(fields, 1);
25152 }
25153
25154 differ = (old->activity != real_packet->activity);
25155 if (differ) {
25156 BV_SET(fields, 2);
25157 }
25158
25159 differ = (old->tgt != real_packet->tgt);
25160 if (differ) {
25161 BV_SET(fields, 3);
25162 }
25163
25164 differ = (old->want != real_packet->want);
25165 if (differ) {
25166 BV_SET(fields, 4);
25167 }
25168#endif /* FREECIV_DELTA_PROTOCOL */
25169
25170#ifdef FREECIV_JSON_CONNECTION
25171 struct plocation field_addr;
25172 {
25173 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25176 }
25177#endif /* FREECIV_JSON_CONNECTION */
25178
25179#ifdef FREECIV_DELTA_PROTOCOL
25180#ifdef FREECIV_JSON_CONNECTION
25181 field_addr.name = "fields";
25182#endif /* FREECIV_JSON_CONNECTION */
25183 e = 0;
25184 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25185 if (e) {
25186 log_packet_detailed("fields bitvector error detected");
25187 }
25188
25189 if (BV_ISSET(fields, 0)) {
25190 log_packet_detailed(" field 'city_id' has changed");
25191
25192#ifdef FREECIV_JSON_CONNECTION
25193 field_addr.name = "city_id";
25194#endif /* FREECIV_JSON_CONNECTION */
25195 e = 0;
25196
25197 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25198
25199 if (e) {
25200 log_packet_detailed("'city_id' field error detected");
25201 }
25202 }
25203
25204 if (BV_ISSET(fields, 1)) {
25205 log_packet_detailed(" field 'tile_id' has changed");
25206
25207#ifdef FREECIV_JSON_CONNECTION
25208 field_addr.name = "tile_id";
25209#endif /* FREECIV_JSON_CONNECTION */
25210 e = 0;
25211
25212 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25213
25214 if (e) {
25215 log_packet_detailed("'tile_id' field error detected");
25216 }
25217 }
25218
25219 if (BV_ISSET(fields, 2)) {
25220 log_packet_detailed(" field 'activity' has changed");
25221
25222#ifdef FREECIV_JSON_CONNECTION
25223 field_addr.name = "activity";
25224#endif /* FREECIV_JSON_CONNECTION */
25225 e = 0;
25226
25227 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25228
25229 if (e) {
25230 log_packet_detailed("'activity' field error detected");
25231 }
25232 }
25233
25234 if (BV_ISSET(fields, 3)) {
25235 log_packet_detailed(" field 'tgt' has changed");
25236
25237#ifdef FREECIV_JSON_CONNECTION
25238 field_addr.name = "tgt";
25239#endif /* FREECIV_JSON_CONNECTION */
25240 e = 0;
25241
25242 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25243
25244 if (e) {
25245 log_packet_detailed("'tgt' field error detected");
25246 }
25247 }
25248
25249 if (BV_ISSET(fields, 4)) {
25250 log_packet_detailed(" field 'want' has changed");
25251
25252#ifdef FREECIV_JSON_CONNECTION
25253 field_addr.name = "want";
25254#endif /* FREECIV_JSON_CONNECTION */
25255 e = 0;
25256
25257 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25258
25259 if (e) {
25260 log_packet_detailed("'want' field error detected");
25261 }
25262 }
25263
25264 *old = *real_packet;
25265
25266#else /* FREECIV_DELTA_PROTOCOL */
25267#ifdef FREECIV_JSON_CONNECTION
25268 field_addr.name = "city_id";
25269#endif /* FREECIV_JSON_CONNECTION */
25270 e = 0;
25271
25272 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25273
25274 if (e) {
25275 log_packet_detailed("'city_id' field error detected");
25276 }
25277
25278#ifdef FREECIV_JSON_CONNECTION
25279 field_addr.name = "tile_id";
25280#endif /* FREECIV_JSON_CONNECTION */
25281 e = 0;
25282
25283 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25284
25285 if (e) {
25286 log_packet_detailed("'tile_id' field error detected");
25287 }
25288
25289#ifdef FREECIV_JSON_CONNECTION
25290 field_addr.name = "activity";
25291#endif /* FREECIV_JSON_CONNECTION */
25292 e = 0;
25293
25294 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25295
25296 if (e) {
25297 log_packet_detailed("'activity' field error detected");
25298 }
25299
25300#ifdef FREECIV_JSON_CONNECTION
25301 field_addr.name = "tgt";
25302#endif /* FREECIV_JSON_CONNECTION */
25303 e = 0;
25304
25305 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25306
25307 if (e) {
25308 log_packet_detailed("'tgt' field error detected");
25309 }
25310
25311#ifdef FREECIV_JSON_CONNECTION
25312 field_addr.name = "want";
25313#endif /* FREECIV_JSON_CONNECTION */
25314 e = 0;
25315
25316 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25317
25318 if (e) {
25319 log_packet_detailed("'want' field error detected");
25320 }
25321#endif /* FREECIV_DELTA_PROTOCOL */
25322
25324}
25325
25327{
25328 if (!pc->used) {
25329 log_error("WARNING: trying to send data to the closed connection %s",
25331 return -1;
25332 }
25333 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WORKER_TASK].packet != nullptr, -1,
25334 "Handler for PACKET_WORKER_TASK not installed");
25335 return pc->phs.handlers->send[PACKET_WORKER_TASK].packet(pc, packet);
25336}
25337
25338void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
25339{
25340 conn_list_iterate(dest, pconn) {
25343}
25344
25345static inline void init_packet_player_remove(struct packet_player_remove *packet)
25346{
25347 memset(packet, 0, sizeof(*packet));
25348}
25349
25350#define free_packet_player_remove(_packet) (void) 0
25351#define destroy_packet_player_remove free
25352
25353#ifdef FREECIV_DELTA_PROTOCOL
25354#define hash_packet_player_remove_100 hash_const
25355#define cmp_packet_player_remove_100 cmp_const
25357#endif /* FREECIV_DELTA_PROTOCOL */
25358
25360{
25361#define FREE_PACKET_STRUCT(_packet) free_packet_player_remove(_packet)
25363
25364#ifdef FREECIV_JSON_CONNECTION
25365 struct plocation field_addr;
25366 {
25367 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25370 }
25371#endif /* FREECIV_JSON_CONNECTION */
25372
25373 log_packet_detailed("packet_player_remove_100: got info about ()");
25374
25375#ifdef FREECIV_DELTA_PROTOCOL
25377 struct packet_player_remove *old;
25378 struct genhash **hash = pc->phs.received + PACKET_PLAYER_REMOVE;
25379
25380 if (nullptr == *hash) {
25382 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25383 }
25384
25385 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25386 *real_packet = *old;
25387 } else {
25388 /* packet is already initialized empty */
25389 log_packet_detailed(" no old info");
25390 }
25391
25392#ifdef FREECIV_JSON_CONNECTION
25393 field_addr.name = "fields";
25394#endif /* FREECIV_JSON_CONNECTION */
25395 DIO_BV_GET(&din, &field_addr, fields);
25396
25397 if (BV_ISSET(fields, 0)) {
25398 log_packet_detailed(" got field 'playerno'");
25399
25400#ifdef FREECIV_JSON_CONNECTION
25401 field_addr.name = "playerno";
25402#endif /* FREECIV_JSON_CONNECTION */
25403
25404 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25406 }
25407 }
25408
25409 if (nullptr == old) {
25410 old = fc_malloc(sizeof(*old));
25412 *old = *real_packet;
25414 } else {
25415 *old = *real_packet;
25416 }
25417
25418 hash = pc->phs.received + PACKET_PLAYER_INFO;
25419 if (nullptr != *hash) {
25421 }
25422
25423#else /* FREECIV_DELTA_PROTOCOL */
25424#ifdef FREECIV_JSON_CONNECTION
25425 field_addr.name = "playerno";
25426#endif /* FREECIV_JSON_CONNECTION */
25427
25428 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25430 }
25431#endif /* FREECIV_DELTA_PROTOCOL */
25432
25434#undef FREE_PACKET_STRUCT
25435}
25436
25437static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
25438{
25439 const struct packet_player_remove *real_packet = packet;
25440 int e;
25442
25443 log_packet_detailed("packet_player_remove_100: sending info about ()");
25444
25445#ifdef FREECIV_DELTA_PROTOCOL
25447 struct packet_player_remove *old;
25448 bool differ;
25449 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_REMOVE;
25450
25451 if (nullptr == *hash) {
25453 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25454 }
25455 BV_CLR_ALL(fields);
25456
25457 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25458 old = fc_malloc(sizeof(*old));
25459 /* temporary bitcopy just to insert correctly */
25460 *old = *real_packet;
25463 }
25464
25465 differ = (old->playerno != real_packet->playerno);
25466 if (differ) {
25467 BV_SET(fields, 0);
25468 }
25469#endif /* FREECIV_DELTA_PROTOCOL */
25470
25471#ifdef FREECIV_JSON_CONNECTION
25472 struct plocation field_addr;
25473 {
25474 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25477 }
25478#endif /* FREECIV_JSON_CONNECTION */
25479
25480#ifdef FREECIV_DELTA_PROTOCOL
25481#ifdef FREECIV_JSON_CONNECTION
25482 field_addr.name = "fields";
25483#endif /* FREECIV_JSON_CONNECTION */
25484 e = 0;
25485 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25486 if (e) {
25487 log_packet_detailed("fields bitvector error detected");
25488 }
25489
25490 if (BV_ISSET(fields, 0)) {
25491 log_packet_detailed(" field 'playerno' has changed");
25492
25493#ifdef FREECIV_JSON_CONNECTION
25494 field_addr.name = "playerno";
25495#endif /* FREECIV_JSON_CONNECTION */
25496 e = 0;
25497
25498 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25499
25500 if (e) {
25501 log_packet_detailed("'playerno' field error detected");
25502 }
25503 }
25504
25505 *old = *real_packet;
25506
25507 hash = pc->phs.sent + PACKET_PLAYER_INFO;
25508 if (nullptr != *hash) {
25510 }
25511
25512#else /* FREECIV_DELTA_PROTOCOL */
25513#ifdef FREECIV_JSON_CONNECTION
25514 field_addr.name = "playerno";
25515#endif /* FREECIV_JSON_CONNECTION */
25516 e = 0;
25517
25518 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25519
25520 if (e) {
25521 log_packet_detailed("'playerno' field error detected");
25522 }
25523#endif /* FREECIV_DELTA_PROTOCOL */
25524
25526}
25527
25529{
25530 if (!pc->used) {
25531 log_error("WARNING: trying to send data to the closed connection %s",
25533 return -1;
25534 }
25535 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet != nullptr, -1,
25536 "Handler for PACKET_PLAYER_REMOVE not installed");
25537 return pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet(pc, packet);
25538}
25539
25540int dsend_packet_player_remove(struct connection *pc, int playerno)
25541{
25542 struct packet_player_remove packet, *real_packet = &packet;
25543
25545
25547}
25548
25549static inline void init_packet_player_info(struct packet_player_info *packet)
25550{
25551 memset(packet, 0, sizeof(*packet));
25552}
25553
25554#define free_packet_player_info(_packet) (void) 0
25555#define destroy_packet_player_info free
25556
25557#ifdef FREECIV_DELTA_PROTOCOL
25559{
25560 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
25561 genhash_val_t result = 0;
25562
25563 result += key->playerno;
25564
25565 result &= 0xFFFFFFFF;
25566 return result;
25567}
25568
25569static bool cmp_packet_player_info_100(const void *vkey1, const void *vkey2)
25570{
25571 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
25572 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
25573 bool differ;
25574
25575 differ = (old->playerno != real_packet->playerno);
25576
25577 return !differ;
25578}
25580#endif /* FREECIV_DELTA_PROTOCOL */
25581
25583{
25584#define FREE_PACKET_STRUCT(_packet) free_packet_player_info(_packet)
25586
25587#ifdef FREECIV_JSON_CONNECTION
25588 struct plocation field_addr;
25589 {
25590 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25593 }
25594#endif /* FREECIV_JSON_CONNECTION */
25595
25596#ifdef FREECIV_JSON_CONNECTION
25597 field_addr.name = "playerno";
25598#endif /* FREECIV_JSON_CONNECTION */
25599
25600 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25602 }
25603
25604 log_packet_detailed("packet_player_info_100: got info about (%d)",
25605 real_packet->playerno);
25606
25607#ifdef FREECIV_DELTA_PROTOCOL
25609 struct packet_player_info *old;
25610 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
25611
25612 if (nullptr == *hash) {
25614 nullptr, nullptr, nullptr, destroy_packet_player_info);
25615 }
25616
25617 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25618 *real_packet = *old;
25619 } else {
25620 /* packet is already initialized empty */
25621 log_packet_detailed(" no old info");
25622 }
25623
25624#ifdef FREECIV_JSON_CONNECTION
25625 field_addr.name = "fields";
25626#endif /* FREECIV_JSON_CONNECTION */
25627 DIO_BV_GET(&din, &field_addr, fields);
25628
25629 if (BV_ISSET(fields, 0)) {
25630 log_packet_detailed(" got field 'name'");
25631
25632#ifdef FREECIV_JSON_CONNECTION
25633 field_addr.name = "name";
25634#endif /* FREECIV_JSON_CONNECTION */
25635
25636 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25638 }
25639 }
25640
25641 if (BV_ISSET(fields, 1)) {
25642 log_packet_detailed(" got field 'username'");
25643
25644#ifdef FREECIV_JSON_CONNECTION
25645 field_addr.name = "username";
25646#endif /* FREECIV_JSON_CONNECTION */
25647
25648 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25650 }
25651 }
25652
25653 real_packet->unassigned_user = BV_ISSET(fields, 2);
25654
25655 if (BV_ISSET(fields, 3)) {
25656 log_packet_detailed(" got field 'score'");
25657
25658#ifdef FREECIV_JSON_CONNECTION
25659 field_addr.name = "score";
25660#endif /* FREECIV_JSON_CONNECTION */
25661
25662 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25664 }
25665 }
25666
25667 real_packet->is_male = BV_ISSET(fields, 4);
25668
25669 real_packet->was_created = BV_ISSET(fields, 5);
25670
25671 if (BV_ISSET(fields, 6)) {
25672 log_packet_detailed(" got field 'government'");
25673
25674#ifdef FREECIV_JSON_CONNECTION
25675 field_addr.name = "government";
25676#endif /* FREECIV_JSON_CONNECTION */
25677
25678 {
25679 int readin;
25680
25681 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25683 }
25684 real_packet->government = readin;
25685 }
25686 }
25687
25688 if (BV_ISSET(fields, 7)) {
25689 log_packet_detailed(" got field 'target_government'");
25690
25691#ifdef FREECIV_JSON_CONNECTION
25692 field_addr.name = "target_government";
25693#endif /* FREECIV_JSON_CONNECTION */
25694
25695 {
25696 int readin;
25697
25698 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25699 RECEIVE_PACKET_FIELD_ERROR(target_government);
25700 }
25701 real_packet->target_government = readin;
25702 }
25703 }
25704
25705 if (BV_ISSET(fields, 8)) {
25706 log_packet_detailed(" got field 'real_embassy'");
25707
25708#ifdef FREECIV_JSON_CONNECTION
25709 field_addr.name = "real_embassy";
25710#endif /* FREECIV_JSON_CONNECTION */
25711
25712 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25713 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25714 }
25715 }
25716
25717 if (BV_ISSET(fields, 9)) {
25718 log_packet_detailed(" got field 'mood'");
25719
25720#ifdef FREECIV_JSON_CONNECTION
25721 field_addr.name = "mood";
25722#endif /* FREECIV_JSON_CONNECTION */
25723
25724 {
25725 int readin;
25726
25727 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25729 }
25730 real_packet->mood = readin;
25731 }
25732 }
25733
25734 if (BV_ISSET(fields, 10)) {
25735 log_packet_detailed(" got field 'style'");
25736
25737#ifdef FREECIV_JSON_CONNECTION
25738 field_addr.name = "style";
25739#endif /* FREECIV_JSON_CONNECTION */
25740
25741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
25743 }
25744 }
25745
25746 if (BV_ISSET(fields, 11)) {
25747 log_packet_detailed(" got field 'music_style'");
25748
25749#ifdef FREECIV_JSON_CONNECTION
25750 field_addr.name = "music_style";
25751#endif /* FREECIV_JSON_CONNECTION */
25752
25753 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
25755 }
25756 }
25757
25758 if (BV_ISSET(fields, 12)) {
25759 log_packet_detailed(" got field 'nation'");
25760
25761#ifdef FREECIV_JSON_CONNECTION
25762 field_addr.name = "nation";
25763#endif /* FREECIV_JSON_CONNECTION */
25764
25765 {
25766 int readin;
25767
25768 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
25770 }
25771 real_packet->nation = readin;
25772 }
25773 }
25774
25775 if (BV_ISSET(fields, 13)) {
25776 log_packet_detailed(" got field 'team'");
25777
25778#ifdef FREECIV_JSON_CONNECTION
25779 field_addr.name = "team";
25780#endif /* FREECIV_JSON_CONNECTION */
25781
25782 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
25784 }
25785 }
25786
25787 real_packet->is_ready = BV_ISSET(fields, 14);
25788
25789 real_packet->phase_done = BV_ISSET(fields, 15);
25790
25791 if (BV_ISSET(fields, 16)) {
25792 log_packet_detailed(" got field 'nturns_idle'");
25793
25794#ifdef FREECIV_JSON_CONNECTION
25795 field_addr.name = "nturns_idle";
25796#endif /* FREECIV_JSON_CONNECTION */
25797
25798 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
25799 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
25800 }
25801 }
25802
25803 if (BV_ISSET(fields, 17)) {
25804 log_packet_detailed(" got field 'turns_alive'");
25805
25806#ifdef FREECIV_JSON_CONNECTION
25807 field_addr.name = "turns_alive";
25808#endif /* FREECIV_JSON_CONNECTION */
25809
25810 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
25811 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
25812 }
25813 }
25814
25815 real_packet->is_alive = BV_ISSET(fields, 18);
25816
25817 if (BV_ISSET(fields, 19)) {
25818 log_packet_detailed(" got field 'autoselect_weight'");
25819
25820#ifdef FREECIV_JSON_CONNECTION
25821 field_addr.name = "autoselect_weight";
25822#endif /* FREECIV_JSON_CONNECTION */
25823
25824 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
25825 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
25826 }
25827 }
25828
25829 if (BV_ISSET(fields, 20)) {
25830 log_packet_detailed(" got field 'gold'");
25831
25832#ifdef FREECIV_JSON_CONNECTION
25833 field_addr.name = "gold";
25834#endif /* FREECIV_JSON_CONNECTION */
25835
25836 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
25838 }
25839 }
25840
25841 if (BV_ISSET(fields, 21)) {
25842 log_packet_detailed(" got field 'tax'");
25843
25844#ifdef FREECIV_JSON_CONNECTION
25845 field_addr.name = "tax";
25846#endif /* FREECIV_JSON_CONNECTION */
25847
25848 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
25850 }
25851 }
25852
25853 if (BV_ISSET(fields, 22)) {
25854 log_packet_detailed(" got field 'science'");
25855
25856#ifdef FREECIV_JSON_CONNECTION
25857 field_addr.name = "science";
25858#endif /* FREECIV_JSON_CONNECTION */
25859
25860 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
25862 }
25863 }
25864
25865 if (BV_ISSET(fields, 23)) {
25866 log_packet_detailed(" got field 'luxury'");
25867
25868#ifdef FREECIV_JSON_CONNECTION
25869 field_addr.name = "luxury";
25870#endif /* FREECIV_JSON_CONNECTION */
25871
25872 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
25874 }
25875 }
25876
25877 if (BV_ISSET(fields, 24)) {
25878 log_packet_detailed(" got field 'infrapoints'");
25879
25880#ifdef FREECIV_JSON_CONNECTION
25881 field_addr.name = "infrapoints";
25882#endif /* FREECIV_JSON_CONNECTION */
25883
25884 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
25885 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
25886 }
25887 }
25888
25889 if (BV_ISSET(fields, 25)) {
25890 log_packet_detailed(" got field 'tech_upkeep'");
25891
25892#ifdef FREECIV_JSON_CONNECTION
25893 field_addr.name = "tech_upkeep";
25894#endif /* FREECIV_JSON_CONNECTION */
25895
25896 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
25897 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
25898 }
25899 }
25900
25901 if (BV_ISSET(fields, 26)) {
25902 log_packet_detailed(" got field 'science_cost'");
25903
25904#ifdef FREECIV_JSON_CONNECTION
25905 field_addr.name = "science_cost";
25906#endif /* FREECIV_JSON_CONNECTION */
25907
25908 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
25909 RECEIVE_PACKET_FIELD_ERROR(science_cost);
25910 }
25911 }
25912
25913 real_packet->is_connected = BV_ISSET(fields, 27);
25914
25915 if (BV_ISSET(fields, 28)) {
25916 log_packet_detailed(" got field 'revolution_finishes'");
25917
25918#ifdef FREECIV_JSON_CONNECTION
25919 field_addr.name = "revolution_finishes";
25920#endif /* FREECIV_JSON_CONNECTION */
25921
25922 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
25923 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
25924 }
25925 }
25926
25927 if (BV_ISSET(fields, 29)) {
25928 log_packet_detailed(" got field 'ai_skill_level'");
25929
25930#ifdef FREECIV_JSON_CONNECTION
25931 field_addr.name = "ai_skill_level";
25932#endif /* FREECIV_JSON_CONNECTION */
25933
25934 {
25935 int readin;
25936
25937 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25938 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
25939 }
25940 real_packet->ai_skill_level = readin;
25941 }
25942 }
25943
25944 if (BV_ISSET(fields, 30)) {
25945 log_packet_detailed(" got field 'barbarian_type'");
25946
25947#ifdef FREECIV_JSON_CONNECTION
25948 field_addr.name = "barbarian_type";
25949#endif /* FREECIV_JSON_CONNECTION */
25950
25951 {
25952 int readin;
25953
25954 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25955 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
25956 }
25957 real_packet->barbarian_type = readin;
25958 }
25959 }
25960
25961 if (BV_ISSET(fields, 31)) {
25962 log_packet_detailed(" got field 'gives_shared_vision'");
25963
25964#ifdef FREECIV_JSON_CONNECTION
25965 field_addr.name = "gives_shared_vision";
25966#endif /* FREECIV_JSON_CONNECTION */
25967
25968 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
25970 }
25971 }
25972
25973 if (BV_ISSET(fields, 32)) {
25974 log_packet_detailed(" got field 'gives_shared_tiles'");
25975
25976#ifdef FREECIV_JSON_CONNECTION
25977 field_addr.name = "gives_shared_tiles";
25978#endif /* FREECIV_JSON_CONNECTION */
25979
25980 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
25982 }
25983 }
25984
25985 if (BV_ISSET(fields, 33)) {
25986 log_packet_detailed(" got field 'history'");
25987
25988#ifdef FREECIV_JSON_CONNECTION
25989 field_addr.name = "history";
25990#endif /* FREECIV_JSON_CONNECTION */
25991
25992 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
25994 }
25995 }
25996
25997 if (BV_ISSET(fields, 34)) {
25998 log_packet_detailed(" got field 'culture'");
25999
26000#ifdef FREECIV_JSON_CONNECTION
26001 field_addr.name = "culture";
26002#endif /* FREECIV_JSON_CONNECTION */
26003
26004 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26006 }
26007 }
26008
26009 if (BV_ISSET(fields, 35)) {
26010 log_packet_detailed(" got field 'love'");
26011
26012#ifdef FREECIV_JSON_CONNECTION
26013 field_addr.name = "love";
26014#endif /* FREECIV_JSON_CONNECTION */
26015
26016 {
26017 int i;
26018
26019
26020#ifdef FREECIV_JSON_CONNECTION
26021 /* Enter array. */
26022 field_addr.sub_location = plocation_elem_new(0);
26023#endif /* FREECIV_JSON_CONNECTION */
26024
26025 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26026#ifdef FREECIV_JSON_CONNECTION
26027 /* Next array element */
26028 field_addr.sub_location->number = i;
26029#endif /* FREECIV_JSON_CONNECTION */
26030
26031 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26033 }
26034 }
26035
26036#ifdef FREECIV_JSON_CONNECTION
26037 /* Exit array. */
26038 FC_FREE(field_addr.sub_location);
26039#endif /* FREECIV_JSON_CONNECTION */
26040 }
26041 }
26042
26043 real_packet->color_valid = BV_ISSET(fields, 36);
26044
26045 real_packet->color_changeable = BV_ISSET(fields, 37);
26046
26047 if (BV_ISSET(fields, 38)) {
26048 log_packet_detailed(" got field 'color_red'");
26049
26050#ifdef FREECIV_JSON_CONNECTION
26051 field_addr.name = "color_red";
26052#endif /* FREECIV_JSON_CONNECTION */
26053
26054 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26055 RECEIVE_PACKET_FIELD_ERROR(color_red);
26056 }
26057 }
26058
26059 if (BV_ISSET(fields, 39)) {
26060 log_packet_detailed(" got field 'color_green'");
26061
26062#ifdef FREECIV_JSON_CONNECTION
26063 field_addr.name = "color_green";
26064#endif /* FREECIV_JSON_CONNECTION */
26065
26066 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26067 RECEIVE_PACKET_FIELD_ERROR(color_green);
26068 }
26069 }
26070
26071 if (BV_ISSET(fields, 40)) {
26072 log_packet_detailed(" got field 'color_blue'");
26073
26074#ifdef FREECIV_JSON_CONNECTION
26075 field_addr.name = "color_blue";
26076#endif /* FREECIV_JSON_CONNECTION */
26077
26078 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26079 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26080 }
26081 }
26082
26083 if (BV_ISSET(fields, 41)) {
26084 log_packet_detailed(" got field 'flags'");
26085
26086#ifdef FREECIV_JSON_CONNECTION
26087 field_addr.name = "flags";
26088#endif /* FREECIV_JSON_CONNECTION */
26089
26090 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26092 }
26093 }
26094
26095 if (BV_ISSET(fields, 42)) {
26096 log_packet_detailed(" got field 'wonders'");
26097
26098#ifdef FREECIV_JSON_CONNECTION
26099 field_addr.name = "wonders";
26100#endif /* FREECIV_JSON_CONNECTION */
26101
26103#ifdef FREECIV_JSON_CONNECTION
26104 /* Enter array (start at initial element). */
26105 field_addr.sub_location = plocation_elem_new(0);
26106 /* Enter diff array element (start at the index address). */
26107 field_addr.sub_location->sub_location = plocation_field_new("index");
26108#endif /* FREECIV_JSON_CONNECTION */
26109
26110 while (TRUE) {
26111 int i;
26112
26113 /* Read next index */
26114#if B_LAST <= MAX_UINT8
26115 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
26116#else
26117 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
26118#endif
26120 }
26121
26122 if (i == B_LAST) {
26123 break;
26124 }
26125 if (i > B_LAST) {
26127 ": unexpected index %d "
26128 "> length %d in array diff",
26129 i,
26130 B_LAST);
26131 }
26132
26133#ifdef FREECIV_JSON_CONNECTION
26134 /* Content address. */
26135 field_addr.sub_location->sub_location->name = "data";
26136#endif /* FREECIV_JSON_CONNECTION */
26137
26138 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26140 }
26141
26142#ifdef FREECIV_JSON_CONNECTION
26143 /* Move to the next diff array element. */
26144 field_addr.sub_location->number++;
26145 /* Back to the index address. */
26146 field_addr.sub_location->sub_location->name = "index";
26147#endif /* FREECIV_JSON_CONNECTION */
26148 }
26149
26150#ifdef FREECIV_JSON_CONNECTION
26151 /* Exit diff array element. */
26152 FC_FREE(field_addr.sub_location->sub_location);
26153 /* Exit array. */
26154 FC_FREE(field_addr.sub_location);
26155#endif /* FREECIV_JSON_CONNECTION */
26156 }
26157
26158 if (BV_ISSET(fields, 43)) {
26159 log_packet_detailed(" got field 'multip_count'");
26160
26161#ifdef FREECIV_JSON_CONNECTION
26162 field_addr.name = "multip_count";
26163#endif /* FREECIV_JSON_CONNECTION */
26164
26165 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26166 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26167 }
26168 }
26169
26170 if (BV_ISSET(fields, 44)) {
26171 log_packet_detailed(" got field 'multiplier'");
26172
26173#ifdef FREECIV_JSON_CONNECTION
26174 field_addr.name = "multiplier";
26175#endif /* FREECIV_JSON_CONNECTION */
26176
26177 {
26178 int i;
26179
26180 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26181 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26182 }
26183
26184#ifdef FREECIV_JSON_CONNECTION
26185 /* Enter array. */
26186 field_addr.sub_location = plocation_elem_new(0);
26187#endif /* FREECIV_JSON_CONNECTION */
26188
26189 for (i = 0; i < real_packet->multip_count; i++) {
26190#ifdef FREECIV_JSON_CONNECTION
26191 /* Next array element */
26192 field_addr.sub_location->number = i;
26193#endif /* FREECIV_JSON_CONNECTION */
26194
26195 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26197 }
26198 }
26199
26200#ifdef FREECIV_JSON_CONNECTION
26201 /* Exit array. */
26202 FC_FREE(field_addr.sub_location);
26203#endif /* FREECIV_JSON_CONNECTION */
26204 }
26205 }
26206
26207 if (BV_ISSET(fields, 45)) {
26208 log_packet_detailed(" got field 'multiplier_target'");
26209
26210#ifdef FREECIV_JSON_CONNECTION
26211 field_addr.name = "multiplier_target";
26212#endif /* FREECIV_JSON_CONNECTION */
26213
26214 {
26215 int i;
26216
26217 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26218 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
26219 }
26220
26221#ifdef FREECIV_JSON_CONNECTION
26222 /* Enter array. */
26223 field_addr.sub_location = plocation_elem_new(0);
26224#endif /* FREECIV_JSON_CONNECTION */
26225
26226 for (i = 0; i < real_packet->multip_count; i++) {
26227#ifdef FREECIV_JSON_CONNECTION
26228 /* Next array element */
26229 field_addr.sub_location->number = i;
26230#endif /* FREECIV_JSON_CONNECTION */
26231
26232 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26233 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26234 }
26235 }
26236
26237#ifdef FREECIV_JSON_CONNECTION
26238 /* Exit array. */
26239 FC_FREE(field_addr.sub_location);
26240#endif /* FREECIV_JSON_CONNECTION */
26241 }
26242 }
26243
26244 if (BV_ISSET(fields, 46)) {
26245 log_packet_detailed(" got field 'multiplier_changed'");
26246
26247#ifdef FREECIV_JSON_CONNECTION
26248 field_addr.name = "multiplier_changed";
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_changed, ": 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(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26270 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
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 (nullptr == old) {
26282 old = fc_malloc(sizeof(*old));
26284 *old = *real_packet;
26286 } else {
26287 *old = *real_packet;
26288 }
26289
26290#else /* FREECIV_DELTA_PROTOCOL */
26291#ifdef FREECIV_JSON_CONNECTION
26292 field_addr.name = "name";
26293#endif /* FREECIV_JSON_CONNECTION */
26294
26295 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
26297 }
26298
26299#ifdef FREECIV_JSON_CONNECTION
26300 field_addr.name = "username";
26301#endif /* FREECIV_JSON_CONNECTION */
26302
26303 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
26305 }
26306
26307#ifdef FREECIV_JSON_CONNECTION
26308 field_addr.name = "unassigned_user";
26309#endif /* FREECIV_JSON_CONNECTION */
26310
26311 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
26312 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
26313 }
26314
26315#ifdef FREECIV_JSON_CONNECTION
26316 field_addr.name = "score";
26317#endif /* FREECIV_JSON_CONNECTION */
26318
26319 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
26321 }
26322
26323#ifdef FREECIV_JSON_CONNECTION
26324 field_addr.name = "is_male";
26325#endif /* FREECIV_JSON_CONNECTION */
26326
26327 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
26329 }
26330
26331#ifdef FREECIV_JSON_CONNECTION
26332 field_addr.name = "was_created";
26333#endif /* FREECIV_JSON_CONNECTION */
26334
26335 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
26336 RECEIVE_PACKET_FIELD_ERROR(was_created);
26337 }
26338
26339#ifdef FREECIV_JSON_CONNECTION
26340 field_addr.name = "government";
26341#endif /* FREECIV_JSON_CONNECTION */
26342
26343 {
26344 int readin;
26345
26346 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26348 }
26349 real_packet->government = readin;
26350 }
26351
26352#ifdef FREECIV_JSON_CONNECTION
26353 field_addr.name = "target_government";
26354#endif /* FREECIV_JSON_CONNECTION */
26355
26356 {
26357 int readin;
26358
26359 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26360 RECEIVE_PACKET_FIELD_ERROR(target_government);
26361 }
26362 real_packet->target_government = readin;
26363 }
26364
26365#ifdef FREECIV_JSON_CONNECTION
26366 field_addr.name = "real_embassy";
26367#endif /* FREECIV_JSON_CONNECTION */
26368
26369 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
26370 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
26371 }
26372
26373#ifdef FREECIV_JSON_CONNECTION
26374 field_addr.name = "mood";
26375#endif /* FREECIV_JSON_CONNECTION */
26376
26377 {
26378 int readin;
26379
26380 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26382 }
26383 real_packet->mood = readin;
26384 }
26385
26386#ifdef FREECIV_JSON_CONNECTION
26387 field_addr.name = "style";
26388#endif /* FREECIV_JSON_CONNECTION */
26389
26390 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
26392 }
26393
26394#ifdef FREECIV_JSON_CONNECTION
26395 field_addr.name = "music_style";
26396#endif /* FREECIV_JSON_CONNECTION */
26397
26398 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
26400 }
26401
26402#ifdef FREECIV_JSON_CONNECTION
26403 field_addr.name = "nation";
26404#endif /* FREECIV_JSON_CONNECTION */
26405
26406 {
26407 int readin;
26408
26409 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
26411 }
26412 real_packet->nation = readin;
26413 }
26414
26415#ifdef FREECIV_JSON_CONNECTION
26416 field_addr.name = "team";
26417#endif /* FREECIV_JSON_CONNECTION */
26418
26419 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
26421 }
26422
26423#ifdef FREECIV_JSON_CONNECTION
26424 field_addr.name = "is_ready";
26425#endif /* FREECIV_JSON_CONNECTION */
26426
26427 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
26429 }
26430
26431#ifdef FREECIV_JSON_CONNECTION
26432 field_addr.name = "phase_done";
26433#endif /* FREECIV_JSON_CONNECTION */
26434
26435 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
26436 RECEIVE_PACKET_FIELD_ERROR(phase_done);
26437 }
26438
26439#ifdef FREECIV_JSON_CONNECTION
26440 field_addr.name = "nturns_idle";
26441#endif /* FREECIV_JSON_CONNECTION */
26442
26443 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
26444 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
26445 }
26446
26447#ifdef FREECIV_JSON_CONNECTION
26448 field_addr.name = "turns_alive";
26449#endif /* FREECIV_JSON_CONNECTION */
26450
26451 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
26452 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
26453 }
26454
26455#ifdef FREECIV_JSON_CONNECTION
26456 field_addr.name = "is_alive";
26457#endif /* FREECIV_JSON_CONNECTION */
26458
26459 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
26461 }
26462
26463#ifdef FREECIV_JSON_CONNECTION
26464 field_addr.name = "autoselect_weight";
26465#endif /* FREECIV_JSON_CONNECTION */
26466
26467 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
26468 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
26469 }
26470
26471#ifdef FREECIV_JSON_CONNECTION
26472 field_addr.name = "gold";
26473#endif /* FREECIV_JSON_CONNECTION */
26474
26475 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
26477 }
26478
26479#ifdef FREECIV_JSON_CONNECTION
26480 field_addr.name = "tax";
26481#endif /* FREECIV_JSON_CONNECTION */
26482
26483 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
26485 }
26486
26487#ifdef FREECIV_JSON_CONNECTION
26488 field_addr.name = "science";
26489#endif /* FREECIV_JSON_CONNECTION */
26490
26491 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
26493 }
26494
26495#ifdef FREECIV_JSON_CONNECTION
26496 field_addr.name = "luxury";
26497#endif /* FREECIV_JSON_CONNECTION */
26498
26499 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
26501 }
26502
26503#ifdef FREECIV_JSON_CONNECTION
26504 field_addr.name = "infrapoints";
26505#endif /* FREECIV_JSON_CONNECTION */
26506
26507 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
26508 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
26509 }
26510
26511#ifdef FREECIV_JSON_CONNECTION
26512 field_addr.name = "tech_upkeep";
26513#endif /* FREECIV_JSON_CONNECTION */
26514
26515 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
26516 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
26517 }
26518
26519#ifdef FREECIV_JSON_CONNECTION
26520 field_addr.name = "science_cost";
26521#endif /* FREECIV_JSON_CONNECTION */
26522
26523 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
26524 RECEIVE_PACKET_FIELD_ERROR(science_cost);
26525 }
26526
26527#ifdef FREECIV_JSON_CONNECTION
26528 field_addr.name = "is_connected";
26529#endif /* FREECIV_JSON_CONNECTION */
26530
26531 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
26532 RECEIVE_PACKET_FIELD_ERROR(is_connected);
26533 }
26534
26535#ifdef FREECIV_JSON_CONNECTION
26536 field_addr.name = "revolution_finishes";
26537#endif /* FREECIV_JSON_CONNECTION */
26538
26539 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
26540 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
26541 }
26542
26543#ifdef FREECIV_JSON_CONNECTION
26544 field_addr.name = "ai_skill_level";
26545#endif /* FREECIV_JSON_CONNECTION */
26546
26547 {
26548 int readin;
26549
26550 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26551 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26552 }
26553 real_packet->ai_skill_level = readin;
26554 }
26555
26556#ifdef FREECIV_JSON_CONNECTION
26557 field_addr.name = "barbarian_type";
26558#endif /* FREECIV_JSON_CONNECTION */
26559
26560 {
26561 int readin;
26562
26563 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26564 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26565 }
26566 real_packet->barbarian_type = readin;
26567 }
26568
26569#ifdef FREECIV_JSON_CONNECTION
26570 field_addr.name = "gives_shared_vision";
26571#endif /* FREECIV_JSON_CONNECTION */
26572
26573 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26575 }
26576
26577#ifdef FREECIV_JSON_CONNECTION
26578 field_addr.name = "gives_shared_tiles";
26579#endif /* FREECIV_JSON_CONNECTION */
26580
26581 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26583 }
26584
26585#ifdef FREECIV_JSON_CONNECTION
26586 field_addr.name = "history";
26587#endif /* FREECIV_JSON_CONNECTION */
26588
26589 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26591 }
26592
26593#ifdef FREECIV_JSON_CONNECTION
26594 field_addr.name = "culture";
26595#endif /* FREECIV_JSON_CONNECTION */
26596
26597 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26599 }
26600
26601#ifdef FREECIV_JSON_CONNECTION
26602 field_addr.name = "love";
26603#endif /* FREECIV_JSON_CONNECTION */
26604
26605 {
26606 int i;
26607
26608
26609#ifdef FREECIV_JSON_CONNECTION
26610 /* Enter array. */
26611 field_addr.sub_location = plocation_elem_new(0);
26612#endif /* FREECIV_JSON_CONNECTION */
26613
26614 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26615#ifdef FREECIV_JSON_CONNECTION
26616 /* Next array element */
26617 field_addr.sub_location->number = i;
26618#endif /* FREECIV_JSON_CONNECTION */
26619
26620 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26622 }
26623 }
26624
26625#ifdef FREECIV_JSON_CONNECTION
26626 /* Exit array. */
26627 FC_FREE(field_addr.sub_location);
26628#endif /* FREECIV_JSON_CONNECTION */
26629 }
26630
26631#ifdef FREECIV_JSON_CONNECTION
26632 field_addr.name = "color_valid";
26633#endif /* FREECIV_JSON_CONNECTION */
26634
26635 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
26636 RECEIVE_PACKET_FIELD_ERROR(color_valid);
26637 }
26638
26639#ifdef FREECIV_JSON_CONNECTION
26640 field_addr.name = "color_changeable";
26641#endif /* FREECIV_JSON_CONNECTION */
26642
26643 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
26644 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
26645 }
26646
26647#ifdef FREECIV_JSON_CONNECTION
26648 field_addr.name = "color_red";
26649#endif /* FREECIV_JSON_CONNECTION */
26650
26651 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26652 RECEIVE_PACKET_FIELD_ERROR(color_red);
26653 }
26654
26655#ifdef FREECIV_JSON_CONNECTION
26656 field_addr.name = "color_green";
26657#endif /* FREECIV_JSON_CONNECTION */
26658
26659 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26660 RECEIVE_PACKET_FIELD_ERROR(color_green);
26661 }
26662
26663#ifdef FREECIV_JSON_CONNECTION
26664 field_addr.name = "color_blue";
26665#endif /* FREECIV_JSON_CONNECTION */
26666
26667 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26668 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26669 }
26670
26671#ifdef FREECIV_JSON_CONNECTION
26672 field_addr.name = "flags";
26673#endif /* FREECIV_JSON_CONNECTION */
26674
26675 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26677 }
26678
26679#ifdef FREECIV_JSON_CONNECTION
26680 field_addr.name = "wonders";
26681#endif /* FREECIV_JSON_CONNECTION */
26682
26683 {
26684 int i;
26685
26686
26687#ifdef FREECIV_JSON_CONNECTION
26688 /* Enter array. */
26689 field_addr.sub_location = plocation_elem_new(0);
26690#endif /* FREECIV_JSON_CONNECTION */
26691
26692 for (i = 0; i < B_LAST; i++) {
26693#ifdef FREECIV_JSON_CONNECTION
26694 /* Next array element */
26695 field_addr.sub_location->number = i;
26696#endif /* FREECIV_JSON_CONNECTION */
26697
26698 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26700 }
26701 }
26702
26703#ifdef FREECIV_JSON_CONNECTION
26704 /* Exit array. */
26705 FC_FREE(field_addr.sub_location);
26706#endif /* FREECIV_JSON_CONNECTION */
26707 }
26708
26709#ifdef FREECIV_JSON_CONNECTION
26710 field_addr.name = "multip_count";
26711#endif /* FREECIV_JSON_CONNECTION */
26712
26713 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26714 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26715 }
26716
26717#ifdef FREECIV_JSON_CONNECTION
26718 field_addr.name = "multiplier";
26719#endif /* FREECIV_JSON_CONNECTION */
26720
26721 {
26722 int i;
26723
26724 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26725 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26726 }
26727
26728#ifdef FREECIV_JSON_CONNECTION
26729 /* Enter array. */
26730 field_addr.sub_location = plocation_elem_new(0);
26731#endif /* FREECIV_JSON_CONNECTION */
26732
26733 for (i = 0; i < real_packet->multip_count; i++) {
26734#ifdef FREECIV_JSON_CONNECTION
26735 /* Next array element */
26736 field_addr.sub_location->number = i;
26737#endif /* FREECIV_JSON_CONNECTION */
26738
26739 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26741 }
26742 }
26743
26744#ifdef FREECIV_JSON_CONNECTION
26745 /* Exit array. */
26746 FC_FREE(field_addr.sub_location);
26747#endif /* FREECIV_JSON_CONNECTION */
26748 }
26749
26750#ifdef FREECIV_JSON_CONNECTION
26751 field_addr.name = "multiplier_target";
26752#endif /* FREECIV_JSON_CONNECTION */
26753
26754 {
26755 int i;
26756
26757 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26758 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
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 < real_packet->multip_count; 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->multiplier_target[i])) {
26773 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
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 = "multiplier_changed";
26785#endif /* FREECIV_JSON_CONNECTION */
26786
26787 {
26788 int i;
26789
26790 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26791 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": array truncated");
26792 }
26793
26794#ifdef FREECIV_JSON_CONNECTION
26795 /* Enter array. */
26796 field_addr.sub_location = plocation_elem_new(0);
26797#endif /* FREECIV_JSON_CONNECTION */
26798
26799 for (i = 0; i < real_packet->multip_count; i++) {
26800#ifdef FREECIV_JSON_CONNECTION
26801 /* Next array element */
26802 field_addr.sub_location->number = i;
26803#endif /* FREECIV_JSON_CONNECTION */
26804
26805 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26806 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26807 }
26808 }
26809
26810#ifdef FREECIV_JSON_CONNECTION
26811 /* Exit array. */
26812 FC_FREE(field_addr.sub_location);
26813#endif /* FREECIV_JSON_CONNECTION */
26814 }
26815#endif /* FREECIV_DELTA_PROTOCOL */
26816
26818#undef FREE_PACKET_STRUCT
26819}
26820
26821static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
26822{
26823 const struct packet_player_info *real_packet = packet;
26824 int e;
26826
26827 log_packet_detailed("packet_player_info_100: sending info about (%d)",
26828 real_packet->playerno);
26829
26830#ifdef FREECIV_DELTA_PROTOCOL
26832 struct packet_player_info *old;
26833 bool differ;
26834 int different = 0;
26835 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
26836
26837 if (nullptr == *hash) {
26839 nullptr, nullptr, nullptr, destroy_packet_player_info);
26840 }
26841 BV_CLR_ALL(fields);
26842
26843 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
26844 old = fc_malloc(sizeof(*old));
26845 /* temporary bitcopy just to insert correctly */
26846 *old = *real_packet;
26849 different = 1; /* Force to send. */
26850 }
26851
26852 differ = (strcmp(old->name, real_packet->name) != 0);
26853 if (differ) {
26854 different++;
26855 BV_SET(fields, 0);
26856 }
26857
26858 differ = (strcmp(old->username, real_packet->username) != 0);
26859 if (differ) {
26860 different++;
26861 BV_SET(fields, 1);
26862 }
26863
26864 differ = (old->unassigned_user != real_packet->unassigned_user);
26865 if (differ) {
26866 different++;
26867 }
26868 /* folded into head */
26869 if (real_packet->unassigned_user) {
26870 BV_SET(fields, 2);
26871 }
26872
26873 differ = (old->score != real_packet->score);
26874 if (differ) {
26875 different++;
26876 BV_SET(fields, 3);
26877 }
26878
26879 differ = (old->is_male != real_packet->is_male);
26880 if (differ) {
26881 different++;
26882 }
26883 /* folded into head */
26884 if (real_packet->is_male) {
26885 BV_SET(fields, 4);
26886 }
26887
26888 differ = (old->was_created != real_packet->was_created);
26889 if (differ) {
26890 different++;
26891 }
26892 /* folded into head */
26893 if (real_packet->was_created) {
26894 BV_SET(fields, 5);
26895 }
26896
26897 differ = (old->government != real_packet->government);
26898 if (differ) {
26899 different++;
26900 BV_SET(fields, 6);
26901 }
26902
26903 differ = (old->target_government != real_packet->target_government);
26904 if (differ) {
26905 different++;
26906 BV_SET(fields, 7);
26907 }
26908
26909 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
26910 if (differ) {
26911 different++;
26912 BV_SET(fields, 8);
26913 }
26914
26915 differ = (old->mood != real_packet->mood);
26916 if (differ) {
26917 different++;
26918 BV_SET(fields, 9);
26919 }
26920
26921 differ = (old->style != real_packet->style);
26922 if (differ) {
26923 different++;
26924 BV_SET(fields, 10);
26925 }
26926
26927 differ = (old->music_style != real_packet->music_style);
26928 if (differ) {
26929 different++;
26930 BV_SET(fields, 11);
26931 }
26932
26933 differ = (old->nation != real_packet->nation);
26934 if (differ) {
26935 different++;
26936 BV_SET(fields, 12);
26937 }
26938
26939 differ = (old->team != real_packet->team);
26940 if (differ) {
26941 different++;
26942 BV_SET(fields, 13);
26943 }
26944
26945 differ = (old->is_ready != real_packet->is_ready);
26946 if (differ) {
26947 different++;
26948 }
26949 /* folded into head */
26950 if (real_packet->is_ready) {
26951 BV_SET(fields, 14);
26952 }
26953
26954 differ = (old->phase_done != real_packet->phase_done);
26955 if (differ) {
26956 different++;
26957 }
26958 /* folded into head */
26959 if (real_packet->phase_done) {
26960 BV_SET(fields, 15);
26961 }
26962
26963 differ = (old->nturns_idle != real_packet->nturns_idle);
26964 if (differ) {
26965 different++;
26966 BV_SET(fields, 16);
26967 }
26968
26969 differ = (old->turns_alive != real_packet->turns_alive);
26970 if (differ) {
26971 different++;
26972 BV_SET(fields, 17);
26973 }
26974
26975 differ = (old->is_alive != real_packet->is_alive);
26976 if (differ) {
26977 different++;
26978 }
26979 /* folded into head */
26980 if (real_packet->is_alive) {
26981 BV_SET(fields, 18);
26982 }
26983
26984 differ = (old->autoselect_weight != real_packet->autoselect_weight);
26985 if (differ) {
26986 different++;
26987 BV_SET(fields, 19);
26988 }
26989
26990 differ = (old->gold != real_packet->gold);
26991 if (differ) {
26992 different++;
26993 BV_SET(fields, 20);
26994 }
26995
26996 differ = (old->tax != real_packet->tax);
26997 if (differ) {
26998 different++;
26999 BV_SET(fields, 21);
27000 }
27001
27002 differ = (old->science != real_packet->science);
27003 if (differ) {
27004 different++;
27005 BV_SET(fields, 22);
27006 }
27007
27008 differ = (old->luxury != real_packet->luxury);
27009 if (differ) {
27010 different++;
27011 BV_SET(fields, 23);
27012 }
27013
27014 differ = (old->infrapoints != real_packet->infrapoints);
27015 if (differ) {
27016 different++;
27017 BV_SET(fields, 24);
27018 }
27019
27020 differ = (old->tech_upkeep != real_packet->tech_upkeep);
27021 if (differ) {
27022 different++;
27023 BV_SET(fields, 25);
27024 }
27025
27026 differ = (old->science_cost != real_packet->science_cost);
27027 if (differ) {
27028 different++;
27029 BV_SET(fields, 26);
27030 }
27031
27032 differ = (old->is_connected != real_packet->is_connected);
27033 if (differ) {
27034 different++;
27035 }
27036 /* folded into head */
27037 if (real_packet->is_connected) {
27038 BV_SET(fields, 27);
27039 }
27040
27041 differ = (old->revolution_finishes != real_packet->revolution_finishes);
27042 if (differ) {
27043 different++;
27044 BV_SET(fields, 28);
27045 }
27046
27047 differ = (old->ai_skill_level != real_packet->ai_skill_level);
27048 if (differ) {
27049 different++;
27050 BV_SET(fields, 29);
27051 }
27052
27053 differ = (old->barbarian_type != real_packet->barbarian_type);
27054 if (differ) {
27055 different++;
27056 BV_SET(fields, 30);
27057 }
27058
27059 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
27060 if (differ) {
27061 different++;
27062 BV_SET(fields, 31);
27063 }
27064
27065 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
27066 if (differ) {
27067 different++;
27068 BV_SET(fields, 32);
27069 }
27070
27071 differ = (old->history != real_packet->history);
27072 if (differ) {
27073 different++;
27074 BV_SET(fields, 33);
27075 }
27076
27077 differ = (old->culture != real_packet->culture);
27078 if (differ) {
27079 different++;
27080 BV_SET(fields, 34);
27081 }
27082
27083 differ = FALSE;
27084 {
27085 int i;
27086
27087 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27088 differ = (old->love[i] != real_packet->love[i]);
27089 if (differ) {
27090 break;
27091 }
27092 }
27093 }
27094 if (differ) {
27095 different++;
27096 BV_SET(fields, 35);
27097 }
27098
27099 differ = (old->color_valid != real_packet->color_valid);
27100 if (differ) {
27101 different++;
27102 }
27103 /* folded into head */
27104 if (real_packet->color_valid) {
27105 BV_SET(fields, 36);
27106 }
27107
27108 differ = (old->color_changeable != real_packet->color_changeable);
27109 if (differ) {
27110 different++;
27111 }
27112 /* folded into head */
27113 if (real_packet->color_changeable) {
27114 BV_SET(fields, 37);
27115 }
27116
27117 differ = (old->color_red != real_packet->color_red);
27118 if (differ) {
27119 different++;
27120 BV_SET(fields, 38);
27121 }
27122
27123 differ = (old->color_green != real_packet->color_green);
27124 if (differ) {
27125 different++;
27126 BV_SET(fields, 39);
27127 }
27128
27129 differ = (old->color_blue != real_packet->color_blue);
27130 if (differ) {
27131 different++;
27132 BV_SET(fields, 40);
27133 }
27134
27135 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
27136 if (differ) {
27137 different++;
27138 BV_SET(fields, 41);
27139 }
27140
27141 differ = FALSE;
27142 {
27143 int i;
27144
27145 for (i = 0; i < B_LAST; i++) {
27146 differ = (old->wonders[i] != real_packet->wonders[i]);
27147 if (differ) {
27148 break;
27149 }
27150 }
27151 }
27152 if (differ) {
27153 different++;
27154 BV_SET(fields, 42);
27155 }
27156
27157 differ = (old->multip_count != real_packet->multip_count);
27158 if (differ) {
27159 different++;
27160 BV_SET(fields, 43);
27161 }
27162
27163 differ = (old->multip_count != real_packet->multip_count);
27164 if (!differ) {
27165 int i;
27166
27167 for (i = 0; i < old->multip_count; i++) {
27168 differ = (old->multiplier[i] != real_packet->multiplier[i]);
27169 if (differ) {
27170 break;
27171 }
27172 }
27173 }
27174 if (differ) {
27175 different++;
27176 BV_SET(fields, 44);
27177 }
27178
27179 differ = (old->multip_count != real_packet->multip_count);
27180 if (!differ) {
27181 int i;
27182
27183 for (i = 0; i < old->multip_count; i++) {
27184 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
27185 if (differ) {
27186 break;
27187 }
27188 }
27189 }
27190 if (differ) {
27191 different++;
27192 BV_SET(fields, 45);
27193 }
27194
27195 differ = (old->multip_count != real_packet->multip_count);
27196 if (!differ) {
27197 int i;
27198
27199 for (i = 0; i < old->multip_count; i++) {
27200 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
27201 if (differ) {
27202 break;
27203 }
27204 }
27205 }
27206 if (differ) {
27207 different++;
27208 BV_SET(fields, 46);
27209 }
27210
27211 if (different == 0) {
27212 log_packet_detailed(" no change -> discard");
27214 }
27215#endif /* FREECIV_DELTA_PROTOCOL */
27216
27217#ifdef FREECIV_JSON_CONNECTION
27218 struct plocation field_addr;
27219 {
27220 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
27223 }
27224#endif /* FREECIV_JSON_CONNECTION */
27225
27226#ifdef FREECIV_JSON_CONNECTION
27227 field_addr.name = "playerno";
27228#endif /* FREECIV_JSON_CONNECTION */
27229 e = 0;
27230
27231 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
27232
27233 if (e) {
27234 log_packet_detailed("'playerno' field error detected");
27235 }
27236
27237#ifdef FREECIV_DELTA_PROTOCOL
27238#ifdef FREECIV_JSON_CONNECTION
27239 field_addr.name = "fields";
27240#endif /* FREECIV_JSON_CONNECTION */
27241 e = 0;
27242 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27243 if (e) {
27244 log_packet_detailed("fields bitvector error detected");
27245 }
27246
27247 if (BV_ISSET(fields, 0)) {
27248 log_packet_detailed(" field 'name' has changed");
27249
27250#ifdef FREECIV_JSON_CONNECTION
27251 field_addr.name = "name";
27252#endif /* FREECIV_JSON_CONNECTION */
27253 e = 0;
27254
27255 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
27256
27257 if (e) {
27258 log_packet_detailed("'name' field error detected");
27259 }
27260 }
27261
27262 if (BV_ISSET(fields, 1)) {
27263 log_packet_detailed(" field 'username' has changed");
27264
27265#ifdef FREECIV_JSON_CONNECTION
27266 field_addr.name = "username";
27267#endif /* FREECIV_JSON_CONNECTION */
27268 e = 0;
27269
27270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
27271
27272 if (e) {
27273 log_packet_detailed("'username' field error detected");
27274 }
27275 }
27276
27277 /* field 2 is folded into the header */
27278
27279 if (BV_ISSET(fields, 3)) {
27280 log_packet_detailed(" field 'score' has changed");
27281
27282#ifdef FREECIV_JSON_CONNECTION
27283 field_addr.name = "score";
27284#endif /* FREECIV_JSON_CONNECTION */
27285 e = 0;
27286
27287 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
27288
27289 if (e) {
27290 log_packet_detailed("'score' field error detected");
27291 }
27292 }
27293
27294 /* field 4 is folded into the header */
27295
27296 /* field 5 is folded into the header */
27297
27298 if (BV_ISSET(fields, 6)) {
27299 log_packet_detailed(" field 'government' has changed");
27300
27301#ifdef FREECIV_JSON_CONNECTION
27302 field_addr.name = "government";
27303#endif /* FREECIV_JSON_CONNECTION */
27304 e = 0;
27305
27306 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27307
27308 if (e) {
27309 log_packet_detailed("'government' field error detected");
27310 }
27311 }
27312
27313 if (BV_ISSET(fields, 7)) {
27314 log_packet_detailed(" field 'target_government' has changed");
27315
27316#ifdef FREECIV_JSON_CONNECTION
27317 field_addr.name = "target_government";
27318#endif /* FREECIV_JSON_CONNECTION */
27319 e = 0;
27320
27321 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
27322
27323 if (e) {
27324 log_packet_detailed("'target_government' field error detected");
27325 }
27326 }
27327
27328 if (BV_ISSET(fields, 8)) {
27329 log_packet_detailed(" field 'real_embassy' has changed");
27330
27331#ifdef FREECIV_JSON_CONNECTION
27332 field_addr.name = "real_embassy";
27333#endif /* FREECIV_JSON_CONNECTION */
27334 e = 0;
27335
27336 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
27337
27338 if (e) {
27339 log_packet_detailed("'real_embassy' field error detected");
27340 }
27341 }
27342
27343 if (BV_ISSET(fields, 9)) {
27344 log_packet_detailed(" field 'mood' has changed");
27345
27346#ifdef FREECIV_JSON_CONNECTION
27347 field_addr.name = "mood";
27348#endif /* FREECIV_JSON_CONNECTION */
27349 e = 0;
27350
27351 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
27352
27353 if (e) {
27354 log_packet_detailed("'mood' field error detected");
27355 }
27356 }
27357
27358 if (BV_ISSET(fields, 10)) {
27359 log_packet_detailed(" field 'style' has changed");
27360
27361#ifdef FREECIV_JSON_CONNECTION
27362 field_addr.name = "style";
27363#endif /* FREECIV_JSON_CONNECTION */
27364 e = 0;
27365
27366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
27367
27368 if (e) {
27369 log_packet_detailed("'style' field error detected");
27370 }
27371 }
27372
27373 if (BV_ISSET(fields, 11)) {
27374 log_packet_detailed(" field 'music_style' has changed");
27375
27376#ifdef FREECIV_JSON_CONNECTION
27377 field_addr.name = "music_style";
27378#endif /* FREECIV_JSON_CONNECTION */
27379 e = 0;
27380
27381 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
27382
27383 if (e) {
27384 log_packet_detailed("'music_style' field error detected");
27385 }
27386 }
27387
27388 if (BV_ISSET(fields, 12)) {
27389 log_packet_detailed(" field 'nation' has changed");
27390
27391#ifdef FREECIV_JSON_CONNECTION
27392 field_addr.name = "nation";
27393#endif /* FREECIV_JSON_CONNECTION */
27394 e = 0;
27395
27396 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
27397
27398 if (e) {
27399 log_packet_detailed("'nation' field error detected");
27400 }
27401 }
27402
27403 if (BV_ISSET(fields, 13)) {
27404 log_packet_detailed(" field 'team' has changed");
27405
27406#ifdef FREECIV_JSON_CONNECTION
27407 field_addr.name = "team";
27408#endif /* FREECIV_JSON_CONNECTION */
27409 e = 0;
27410
27411 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
27412
27413 if (e) {
27414 log_packet_detailed("'team' field error detected");
27415 }
27416 }
27417
27418 /* field 14 is folded into the header */
27419
27420 /* field 15 is folded into the header */
27421
27422 if (BV_ISSET(fields, 16)) {
27423 log_packet_detailed(" field 'nturns_idle' has changed");
27424
27425#ifdef FREECIV_JSON_CONNECTION
27426 field_addr.name = "nturns_idle";
27427#endif /* FREECIV_JSON_CONNECTION */
27428 e = 0;
27429
27430 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
27431
27432 if (e) {
27433 log_packet_detailed("'nturns_idle' field error detected");
27434 }
27435 }
27436
27437 if (BV_ISSET(fields, 17)) {
27438 log_packet_detailed(" field 'turns_alive' has changed");
27439
27440#ifdef FREECIV_JSON_CONNECTION
27441 field_addr.name = "turns_alive";
27442#endif /* FREECIV_JSON_CONNECTION */
27443 e = 0;
27444
27445 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
27446
27447 if (e) {
27448 log_packet_detailed("'turns_alive' field error detected");
27449 }
27450 }
27451
27452 /* field 18 is folded into the header */
27453
27454 if (BV_ISSET(fields, 19)) {
27455 log_packet_detailed(" field 'autoselect_weight' has changed");
27456
27457#ifdef FREECIV_JSON_CONNECTION
27458 field_addr.name = "autoselect_weight";
27459#endif /* FREECIV_JSON_CONNECTION */
27460 e = 0;
27461
27462 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
27463
27464 if (e) {
27465 log_packet_detailed("'autoselect_weight' field error detected");
27466 }
27467 }
27468
27469 if (BV_ISSET(fields, 20)) {
27470 log_packet_detailed(" field 'gold' has changed");
27471
27472#ifdef FREECIV_JSON_CONNECTION
27473 field_addr.name = "gold";
27474#endif /* FREECIV_JSON_CONNECTION */
27475 e = 0;
27476
27477 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
27478
27479 if (e) {
27480 log_packet_detailed("'gold' field error detected");
27481 }
27482 }
27483
27484 if (BV_ISSET(fields, 21)) {
27485 log_packet_detailed(" field 'tax' has changed");
27486
27487#ifdef FREECIV_JSON_CONNECTION
27488 field_addr.name = "tax";
27489#endif /* FREECIV_JSON_CONNECTION */
27490 e = 0;
27491
27492 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27493
27494 if (e) {
27495 log_packet_detailed("'tax' field error detected");
27496 }
27497 }
27498
27499 if (BV_ISSET(fields, 22)) {
27500 log_packet_detailed(" field 'science' has changed");
27501
27502#ifdef FREECIV_JSON_CONNECTION
27503 field_addr.name = "science";
27504#endif /* FREECIV_JSON_CONNECTION */
27505 e = 0;
27506
27507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27508
27509 if (e) {
27510 log_packet_detailed("'science' field error detected");
27511 }
27512 }
27513
27514 if (BV_ISSET(fields, 23)) {
27515 log_packet_detailed(" field 'luxury' has changed");
27516
27517#ifdef FREECIV_JSON_CONNECTION
27518 field_addr.name = "luxury";
27519#endif /* FREECIV_JSON_CONNECTION */
27520 e = 0;
27521
27522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27523
27524 if (e) {
27525 log_packet_detailed("'luxury' field error detected");
27526 }
27527 }
27528
27529 if (BV_ISSET(fields, 24)) {
27530 log_packet_detailed(" field 'infrapoints' has changed");
27531
27532#ifdef FREECIV_JSON_CONNECTION
27533 field_addr.name = "infrapoints";
27534#endif /* FREECIV_JSON_CONNECTION */
27535 e = 0;
27536
27537 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
27538
27539 if (e) {
27540 log_packet_detailed("'infrapoints' field error detected");
27541 }
27542 }
27543
27544 if (BV_ISSET(fields, 25)) {
27545 log_packet_detailed(" field 'tech_upkeep' has changed");
27546
27547#ifdef FREECIV_JSON_CONNECTION
27548 field_addr.name = "tech_upkeep";
27549#endif /* FREECIV_JSON_CONNECTION */
27550 e = 0;
27551
27552 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
27553
27554 if (e) {
27555 log_packet_detailed("'tech_upkeep' field error detected");
27556 }
27557 }
27558
27559 if (BV_ISSET(fields, 26)) {
27560 log_packet_detailed(" field 'science_cost' has changed");
27561
27562#ifdef FREECIV_JSON_CONNECTION
27563 field_addr.name = "science_cost";
27564#endif /* FREECIV_JSON_CONNECTION */
27565 e = 0;
27566
27567 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
27568
27569 if (e) {
27570 log_packet_detailed("'science_cost' field error detected");
27571 }
27572 }
27573
27574 /* field 27 is folded into the header */
27575
27576 if (BV_ISSET(fields, 28)) {
27577 log_packet_detailed(" field 'revolution_finishes' has changed");
27578
27579#ifdef FREECIV_JSON_CONNECTION
27580 field_addr.name = "revolution_finishes";
27581#endif /* FREECIV_JSON_CONNECTION */
27582 e = 0;
27583
27584 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
27585
27586 if (e) {
27587 log_packet_detailed("'revolution_finishes' field error detected");
27588 }
27589 }
27590
27591 if (BV_ISSET(fields, 29)) {
27592 log_packet_detailed(" field 'ai_skill_level' has changed");
27593
27594#ifdef FREECIV_JSON_CONNECTION
27595 field_addr.name = "ai_skill_level";
27596#endif /* FREECIV_JSON_CONNECTION */
27597 e = 0;
27598
27599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
27600
27601 if (e) {
27602 log_packet_detailed("'ai_skill_level' field error detected");
27603 }
27604 }
27605
27606 if (BV_ISSET(fields, 30)) {
27607 log_packet_detailed(" field 'barbarian_type' has changed");
27608
27609#ifdef FREECIV_JSON_CONNECTION
27610 field_addr.name = "barbarian_type";
27611#endif /* FREECIV_JSON_CONNECTION */
27612 e = 0;
27613
27614 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
27615
27616 if (e) {
27617 log_packet_detailed("'barbarian_type' field error detected");
27618 }
27619 }
27620
27621 if (BV_ISSET(fields, 31)) {
27622 log_packet_detailed(" field 'gives_shared_vision' has changed");
27623
27624#ifdef FREECIV_JSON_CONNECTION
27625 field_addr.name = "gives_shared_vision";
27626#endif /* FREECIV_JSON_CONNECTION */
27627 e = 0;
27628
27629 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
27630
27631 if (e) {
27632 log_packet_detailed("'gives_shared_vision' field error detected");
27633 }
27634 }
27635
27636 if (BV_ISSET(fields, 32)) {
27637 log_packet_detailed(" field 'gives_shared_tiles' has changed");
27638
27639#ifdef FREECIV_JSON_CONNECTION
27640 field_addr.name = "gives_shared_tiles";
27641#endif /* FREECIV_JSON_CONNECTION */
27642 e = 0;
27643
27644 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
27645
27646 if (e) {
27647 log_packet_detailed("'gives_shared_tiles' field error detected");
27648 }
27649 }
27650
27651 if (BV_ISSET(fields, 33)) {
27652 log_packet_detailed(" field 'history' has changed");
27653
27654#ifdef FREECIV_JSON_CONNECTION
27655 field_addr.name = "history";
27656#endif /* FREECIV_JSON_CONNECTION */
27657 e = 0;
27658
27659 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
27660
27661 if (e) {
27662 log_packet_detailed("'history' field error detected");
27663 }
27664 }
27665
27666 if (BV_ISSET(fields, 34)) {
27667 log_packet_detailed(" field 'culture' has changed");
27668
27669#ifdef FREECIV_JSON_CONNECTION
27670 field_addr.name = "culture";
27671#endif /* FREECIV_JSON_CONNECTION */
27672 e = 0;
27673
27674 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
27675
27676 if (e) {
27677 log_packet_detailed("'culture' field error detected");
27678 }
27679 }
27680
27681 if (BV_ISSET(fields, 35)) {
27682 log_packet_detailed(" field 'love' has changed");
27683
27684#ifdef FREECIV_JSON_CONNECTION
27685 field_addr.name = "love";
27686#endif /* FREECIV_JSON_CONNECTION */
27687 e = 0;
27688
27689 {
27690 int i;
27691
27692#ifdef FREECIV_JSON_CONNECTION
27693 /* Create the array. */
27695
27696 /* Enter array. */
27697 field_addr.sub_location = plocation_elem_new(0);
27698#endif /* FREECIV_JSON_CONNECTION */
27699
27700 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27701#ifdef FREECIV_JSON_CONNECTION
27702 /* Next array element. */
27703 field_addr.sub_location->number = i;
27704#endif /* FREECIV_JSON_CONNECTION */
27705
27706 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
27707 }
27708
27709#ifdef FREECIV_JSON_CONNECTION
27710 /* Exit array. */
27711 FC_FREE(field_addr.sub_location);
27712#endif /* FREECIV_JSON_CONNECTION */
27713 }
27714
27715 if (e) {
27716 log_packet_detailed("'love' field error detected");
27717 }
27718 }
27719
27720 /* field 36 is folded into the header */
27721
27722 /* field 37 is folded into the header */
27723
27724 if (BV_ISSET(fields, 38)) {
27725 log_packet_detailed(" field 'color_red' has changed");
27726
27727#ifdef FREECIV_JSON_CONNECTION
27728 field_addr.name = "color_red";
27729#endif /* FREECIV_JSON_CONNECTION */
27730 e = 0;
27731
27732 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
27733
27734 if (e) {
27735 log_packet_detailed("'color_red' field error detected");
27736 }
27737 }
27738
27739 if (BV_ISSET(fields, 39)) {
27740 log_packet_detailed(" field 'color_green' has changed");
27741
27742#ifdef FREECIV_JSON_CONNECTION
27743 field_addr.name = "color_green";
27744#endif /* FREECIV_JSON_CONNECTION */
27745 e = 0;
27746
27747 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
27748
27749 if (e) {
27750 log_packet_detailed("'color_green' field error detected");
27751 }
27752 }
27753
27754 if (BV_ISSET(fields, 40)) {
27755 log_packet_detailed(" field 'color_blue' has changed");
27756
27757#ifdef FREECIV_JSON_CONNECTION
27758 field_addr.name = "color_blue";
27759#endif /* FREECIV_JSON_CONNECTION */
27760 e = 0;
27761
27762 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27763
27764 if (e) {
27765 log_packet_detailed("'color_blue' field error detected");
27766 }
27767 }
27768
27769 if (BV_ISSET(fields, 41)) {
27770 log_packet_detailed(" field 'flags' has changed");
27771
27772#ifdef FREECIV_JSON_CONNECTION
27773 field_addr.name = "flags";
27774#endif /* FREECIV_JSON_CONNECTION */
27775 e = 0;
27776
27777 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
27778
27779 if (e) {
27780 log_packet_detailed("'flags' field error detected");
27781 }
27782 }
27783
27784 if (BV_ISSET(fields, 42)) {
27785 log_packet_detailed(" field 'wonders' has changed");
27786
27787#ifdef FREECIV_JSON_CONNECTION
27788 field_addr.name = "wonders";
27789#endif /* FREECIV_JSON_CONNECTION */
27790 e = 0;
27791
27792 {
27793 int i;
27794
27796
27797#ifdef FREECIV_JSON_CONNECTION
27798 size_t count_i = 0;
27799
27800 /* Create the array. */
27801 e |= DIO_PUT(farray, &dout, &field_addr, 0);
27802
27803 /* Enter array. */
27804 field_addr.sub_location = plocation_elem_new(0);
27805#endif /* FREECIV_JSON_CONNECTION */
27806
27807 for (i = 0; i < B_LAST; i++) {
27808 differ = (old->wonders[i] != real_packet->wonders[i]);
27809
27810 if (!differ) {
27811 continue;
27812 }
27813
27814#ifdef FREECIV_JSON_CONNECTION
27815 /* Append next diff array element. */
27816 field_addr.sub_location->number = -1;
27817
27818 /* Create the diff array element. */
27819 e |= DIO_PUT(object, &dout, &field_addr);
27820
27821 /* Enter diff array element (start at the index address). */
27822 field_addr.sub_location->number = count_i++;
27823 field_addr.sub_location->sub_location = plocation_field_new("index");
27824#endif /* FREECIV_JSON_CONNECTION */
27825
27826 /* Write the index */
27827#if B_LAST <= MAX_UINT8
27828 e |= DIO_PUT(uint8, &dout, &field_addr, i);
27829#else
27830 e |= DIO_PUT(uint16, &dout, &field_addr, i);
27831#endif
27832
27833#ifdef FREECIV_JSON_CONNECTION
27834 /* Content address. */
27835 field_addr.sub_location->sub_location->name = "data";
27836#endif /* FREECIV_JSON_CONNECTION */
27837
27838 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27839
27840#ifdef FREECIV_JSON_CONNECTION
27841 /* Exit diff array element. */
27842 FC_FREE(field_addr.sub_location->sub_location);
27843#endif /* FREECIV_JSON_CONNECTION */
27844 }
27845
27846#ifdef FREECIV_JSON_CONNECTION
27847 /* Append diff array element. */
27848 field_addr.sub_location->number = -1;
27849
27850 /* Create the terminating diff array element. */
27851 e |= DIO_PUT(object, &dout, &field_addr);
27852
27853 /* Enter diff array element (start at the index address). */
27854 field_addr.sub_location->number = count_i;
27855 field_addr.sub_location->sub_location = plocation_field_new("index");
27856#endif /* FREECIV_JSON_CONNECTION */
27857
27858 /* Write the sentinel value */
27859#if B_LAST <= MAX_UINT8
27860 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
27861#else
27862 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
27863#endif
27864
27865#ifdef FREECIV_JSON_CONNECTION
27866 /* Exit diff array element. */
27867 FC_FREE(field_addr.sub_location->sub_location);
27868 /* Exit array. */
27869 FC_FREE(field_addr.sub_location);
27870#endif /* FREECIV_JSON_CONNECTION */
27871 }
27872
27873 if (e) {
27874 log_packet_detailed("'wonders' field error detected");
27875 }
27876 }
27877
27878 if (BV_ISSET(fields, 43)) {
27879 log_packet_detailed(" field 'multip_count' has changed");
27880
27881#ifdef FREECIV_JSON_CONNECTION
27882 field_addr.name = "multip_count";
27883#endif /* FREECIV_JSON_CONNECTION */
27884 e = 0;
27885
27886 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27887
27888 if (e) {
27889 log_packet_detailed("'multip_count' field error detected");
27890 }
27891 }
27892
27893 if (BV_ISSET(fields, 44)) {
27894 log_packet_detailed(" field 'multiplier' has changed");
27895
27896#ifdef FREECIV_JSON_CONNECTION
27897 field_addr.name = "multiplier";
27898#endif /* FREECIV_JSON_CONNECTION */
27899 e = 0;
27900
27901 {
27902 int i;
27903
27904#ifdef FREECIV_JSON_CONNECTION
27905 /* Create the array. */
27906 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27907
27908 /* Enter array. */
27909 field_addr.sub_location = plocation_elem_new(0);
27910#endif /* FREECIV_JSON_CONNECTION */
27911
27912 for (i = 0; i < real_packet->multip_count; i++) {
27913#ifdef FREECIV_JSON_CONNECTION
27914 /* Next array element. */
27915 field_addr.sub_location->number = i;
27916#endif /* FREECIV_JSON_CONNECTION */
27917
27918 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
27919 }
27920
27921#ifdef FREECIV_JSON_CONNECTION
27922 /* Exit array. */
27923 FC_FREE(field_addr.sub_location);
27924#endif /* FREECIV_JSON_CONNECTION */
27925 }
27926
27927 if (e) {
27928 log_packet_detailed("'multiplier' field error detected");
27929 }
27930 }
27931
27932 if (BV_ISSET(fields, 45)) {
27933 log_packet_detailed(" field 'multiplier_target' has changed");
27934
27935#ifdef FREECIV_JSON_CONNECTION
27936 field_addr.name = "multiplier_target";
27937#endif /* FREECIV_JSON_CONNECTION */
27938 e = 0;
27939
27940 {
27941 int i;
27942
27943#ifdef FREECIV_JSON_CONNECTION
27944 /* Create the array. */
27945 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27946
27947 /* Enter array. */
27948 field_addr.sub_location = plocation_elem_new(0);
27949#endif /* FREECIV_JSON_CONNECTION */
27950
27951 for (i = 0; i < real_packet->multip_count; i++) {
27952#ifdef FREECIV_JSON_CONNECTION
27953 /* Next array element. */
27954 field_addr.sub_location->number = i;
27955#endif /* FREECIV_JSON_CONNECTION */
27956
27957 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
27958 }
27959
27960#ifdef FREECIV_JSON_CONNECTION
27961 /* Exit array. */
27962 FC_FREE(field_addr.sub_location);
27963#endif /* FREECIV_JSON_CONNECTION */
27964 }
27965
27966 if (e) {
27967 log_packet_detailed("'multiplier_target' field error detected");
27968 }
27969 }
27970
27971 if (BV_ISSET(fields, 46)) {
27972 log_packet_detailed(" field 'multiplier_changed' has changed");
27973
27974#ifdef FREECIV_JSON_CONNECTION
27975 field_addr.name = "multiplier_changed";
27976#endif /* FREECIV_JSON_CONNECTION */
27977 e = 0;
27978
27979 {
27980 int i;
27981
27982#ifdef FREECIV_JSON_CONNECTION
27983 /* Create the array. */
27984 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27985
27986 /* Enter array. */
27987 field_addr.sub_location = plocation_elem_new(0);
27988#endif /* FREECIV_JSON_CONNECTION */
27989
27990 for (i = 0; i < real_packet->multip_count; i++) {
27991#ifdef FREECIV_JSON_CONNECTION
27992 /* Next array element. */
27993 field_addr.sub_location->number = i;
27994#endif /* FREECIV_JSON_CONNECTION */
27995
27996 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
27997 }
27998
27999#ifdef FREECIV_JSON_CONNECTION
28000 /* Exit array. */
28001 FC_FREE(field_addr.sub_location);
28002#endif /* FREECIV_JSON_CONNECTION */
28003 }
28004
28005 if (e) {
28006 log_packet_detailed("'multiplier_changed' field error detected");
28007 }
28008 }
28009
28010 *old = *real_packet;
28011
28012#else /* FREECIV_DELTA_PROTOCOL */
28013#ifdef FREECIV_JSON_CONNECTION
28014 field_addr.name = "name";
28015#endif /* FREECIV_JSON_CONNECTION */
28016 e = 0;
28017
28018 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
28019
28020 if (e) {
28021 log_packet_detailed("'name' field error detected");
28022 }
28023
28024#ifdef FREECIV_JSON_CONNECTION
28025 field_addr.name = "username";
28026#endif /* FREECIV_JSON_CONNECTION */
28027 e = 0;
28028
28029 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
28030
28031 if (e) {
28032 log_packet_detailed("'username' field error detected");
28033 }
28034
28035#ifdef FREECIV_JSON_CONNECTION
28036 field_addr.name = "unassigned_user";
28037#endif /* FREECIV_JSON_CONNECTION */
28038 e = 0;
28039
28040 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
28041
28042 if (e) {
28043 log_packet_detailed("'unassigned_user' field error detected");
28044 }
28045
28046#ifdef FREECIV_JSON_CONNECTION
28047 field_addr.name = "score";
28048#endif /* FREECIV_JSON_CONNECTION */
28049 e = 0;
28050
28051 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
28052
28053 if (e) {
28054 log_packet_detailed("'score' field error detected");
28055 }
28056
28057#ifdef FREECIV_JSON_CONNECTION
28058 field_addr.name = "is_male";
28059#endif /* FREECIV_JSON_CONNECTION */
28060 e = 0;
28061
28062 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
28063
28064 if (e) {
28065 log_packet_detailed("'is_male' field error detected");
28066 }
28067
28068#ifdef FREECIV_JSON_CONNECTION
28069 field_addr.name = "was_created";
28070#endif /* FREECIV_JSON_CONNECTION */
28071 e = 0;
28072
28073 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
28074
28075 if (e) {
28076 log_packet_detailed("'was_created' field error detected");
28077 }
28078
28079#ifdef FREECIV_JSON_CONNECTION
28080 field_addr.name = "government";
28081#endif /* FREECIV_JSON_CONNECTION */
28082 e = 0;
28083
28084 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
28085
28086 if (e) {
28087 log_packet_detailed("'government' field error detected");
28088 }
28089
28090#ifdef FREECIV_JSON_CONNECTION
28091 field_addr.name = "target_government";
28092#endif /* FREECIV_JSON_CONNECTION */
28093 e = 0;
28094
28095 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
28096
28097 if (e) {
28098 log_packet_detailed("'target_government' field error detected");
28099 }
28100
28101#ifdef FREECIV_JSON_CONNECTION
28102 field_addr.name = "real_embassy";
28103#endif /* FREECIV_JSON_CONNECTION */
28104 e = 0;
28105
28106 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
28107
28108 if (e) {
28109 log_packet_detailed("'real_embassy' field error detected");
28110 }
28111
28112#ifdef FREECIV_JSON_CONNECTION
28113 field_addr.name = "mood";
28114#endif /* FREECIV_JSON_CONNECTION */
28115 e = 0;
28116
28117 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
28118
28119 if (e) {
28120 log_packet_detailed("'mood' field error detected");
28121 }
28122
28123#ifdef FREECIV_JSON_CONNECTION
28124 field_addr.name = "style";
28125#endif /* FREECIV_JSON_CONNECTION */
28126 e = 0;
28127
28128 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
28129
28130 if (e) {
28131 log_packet_detailed("'style' field error detected");
28132 }
28133
28134#ifdef FREECIV_JSON_CONNECTION
28135 field_addr.name = "music_style";
28136#endif /* FREECIV_JSON_CONNECTION */
28137 e = 0;
28138
28139 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
28140
28141 if (e) {
28142 log_packet_detailed("'music_style' field error detected");
28143 }
28144
28145#ifdef FREECIV_JSON_CONNECTION
28146 field_addr.name = "nation";
28147#endif /* FREECIV_JSON_CONNECTION */
28148 e = 0;
28149
28150 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
28151
28152 if (e) {
28153 log_packet_detailed("'nation' field error detected");
28154 }
28155
28156#ifdef FREECIV_JSON_CONNECTION
28157 field_addr.name = "team";
28158#endif /* FREECIV_JSON_CONNECTION */
28159 e = 0;
28160
28161 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
28162
28163 if (e) {
28164 log_packet_detailed("'team' field error detected");
28165 }
28166
28167#ifdef FREECIV_JSON_CONNECTION
28168 field_addr.name = "is_ready";
28169#endif /* FREECIV_JSON_CONNECTION */
28170 e = 0;
28171
28172 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
28173
28174 if (e) {
28175 log_packet_detailed("'is_ready' field error detected");
28176 }
28177
28178#ifdef FREECIV_JSON_CONNECTION
28179 field_addr.name = "phase_done";
28180#endif /* FREECIV_JSON_CONNECTION */
28181 e = 0;
28182
28183 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
28184
28185 if (e) {
28186 log_packet_detailed("'phase_done' field error detected");
28187 }
28188
28189#ifdef FREECIV_JSON_CONNECTION
28190 field_addr.name = "nturns_idle";
28191#endif /* FREECIV_JSON_CONNECTION */
28192 e = 0;
28193
28194 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
28195
28196 if (e) {
28197 log_packet_detailed("'nturns_idle' field error detected");
28198 }
28199
28200#ifdef FREECIV_JSON_CONNECTION
28201 field_addr.name = "turns_alive";
28202#endif /* FREECIV_JSON_CONNECTION */
28203 e = 0;
28204
28205 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
28206
28207 if (e) {
28208 log_packet_detailed("'turns_alive' field error detected");
28209 }
28210
28211#ifdef FREECIV_JSON_CONNECTION
28212 field_addr.name = "is_alive";
28213#endif /* FREECIV_JSON_CONNECTION */
28214 e = 0;
28215
28216 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
28217
28218 if (e) {
28219 log_packet_detailed("'is_alive' field error detected");
28220 }
28221
28222#ifdef FREECIV_JSON_CONNECTION
28223 field_addr.name = "autoselect_weight";
28224#endif /* FREECIV_JSON_CONNECTION */
28225 e = 0;
28226
28227 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
28228
28229 if (e) {
28230 log_packet_detailed("'autoselect_weight' field error detected");
28231 }
28232
28233#ifdef FREECIV_JSON_CONNECTION
28234 field_addr.name = "gold";
28235#endif /* FREECIV_JSON_CONNECTION */
28236 e = 0;
28237
28238 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
28239
28240 if (e) {
28241 log_packet_detailed("'gold' field error detected");
28242 }
28243
28244#ifdef FREECIV_JSON_CONNECTION
28245 field_addr.name = "tax";
28246#endif /* FREECIV_JSON_CONNECTION */
28247 e = 0;
28248
28249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
28250
28251 if (e) {
28252 log_packet_detailed("'tax' field error detected");
28253 }
28254
28255#ifdef FREECIV_JSON_CONNECTION
28256 field_addr.name = "science";
28257#endif /* FREECIV_JSON_CONNECTION */
28258 e = 0;
28259
28260 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
28261
28262 if (e) {
28263 log_packet_detailed("'science' field error detected");
28264 }
28265
28266#ifdef FREECIV_JSON_CONNECTION
28267 field_addr.name = "luxury";
28268#endif /* FREECIV_JSON_CONNECTION */
28269 e = 0;
28270
28271 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
28272
28273 if (e) {
28274 log_packet_detailed("'luxury' field error detected");
28275 }
28276
28277#ifdef FREECIV_JSON_CONNECTION
28278 field_addr.name = "infrapoints";
28279#endif /* FREECIV_JSON_CONNECTION */
28280 e = 0;
28281
28282 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
28283
28284 if (e) {
28285 log_packet_detailed("'infrapoints' field error detected");
28286 }
28287
28288#ifdef FREECIV_JSON_CONNECTION
28289 field_addr.name = "tech_upkeep";
28290#endif /* FREECIV_JSON_CONNECTION */
28291 e = 0;
28292
28293 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
28294
28295 if (e) {
28296 log_packet_detailed("'tech_upkeep' field error detected");
28297 }
28298
28299#ifdef FREECIV_JSON_CONNECTION
28300 field_addr.name = "science_cost";
28301#endif /* FREECIV_JSON_CONNECTION */
28302 e = 0;
28303
28304 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
28305
28306 if (e) {
28307 log_packet_detailed("'science_cost' field error detected");
28308 }
28309
28310#ifdef FREECIV_JSON_CONNECTION
28311 field_addr.name = "is_connected";
28312#endif /* FREECIV_JSON_CONNECTION */
28313 e = 0;
28314
28315 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
28316
28317 if (e) {
28318 log_packet_detailed("'is_connected' field error detected");
28319 }
28320
28321#ifdef FREECIV_JSON_CONNECTION
28322 field_addr.name = "revolution_finishes";
28323#endif /* FREECIV_JSON_CONNECTION */
28324 e = 0;
28325
28326 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
28327
28328 if (e) {
28329 log_packet_detailed("'revolution_finishes' field error detected");
28330 }
28331
28332#ifdef FREECIV_JSON_CONNECTION
28333 field_addr.name = "ai_skill_level";
28334#endif /* FREECIV_JSON_CONNECTION */
28335 e = 0;
28336
28337 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
28338
28339 if (e) {
28340 log_packet_detailed("'ai_skill_level' field error detected");
28341 }
28342
28343#ifdef FREECIV_JSON_CONNECTION
28344 field_addr.name = "barbarian_type";
28345#endif /* FREECIV_JSON_CONNECTION */
28346 e = 0;
28347
28348 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
28349
28350 if (e) {
28351 log_packet_detailed("'barbarian_type' field error detected");
28352 }
28353
28354#ifdef FREECIV_JSON_CONNECTION
28355 field_addr.name = "gives_shared_vision";
28356#endif /* FREECIV_JSON_CONNECTION */
28357 e = 0;
28358
28359 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
28360
28361 if (e) {
28362 log_packet_detailed("'gives_shared_vision' field error detected");
28363 }
28364
28365#ifdef FREECIV_JSON_CONNECTION
28366 field_addr.name = "gives_shared_tiles";
28367#endif /* FREECIV_JSON_CONNECTION */
28368 e = 0;
28369
28370 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
28371
28372 if (e) {
28373 log_packet_detailed("'gives_shared_tiles' field error detected");
28374 }
28375
28376#ifdef FREECIV_JSON_CONNECTION
28377 field_addr.name = "history";
28378#endif /* FREECIV_JSON_CONNECTION */
28379 e = 0;
28380
28381 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
28382
28383 if (e) {
28384 log_packet_detailed("'history' field error detected");
28385 }
28386
28387#ifdef FREECIV_JSON_CONNECTION
28388 field_addr.name = "culture";
28389#endif /* FREECIV_JSON_CONNECTION */
28390 e = 0;
28391
28392 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
28393
28394 if (e) {
28395 log_packet_detailed("'culture' field error detected");
28396 }
28397
28398#ifdef FREECIV_JSON_CONNECTION
28399 field_addr.name = "love";
28400#endif /* FREECIV_JSON_CONNECTION */
28401 e = 0;
28402
28403 {
28404 int i;
28405
28406#ifdef FREECIV_JSON_CONNECTION
28407 /* Create the array. */
28409
28410 /* Enter array. */
28411 field_addr.sub_location = plocation_elem_new(0);
28412#endif /* FREECIV_JSON_CONNECTION */
28413
28414 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
28415#ifdef FREECIV_JSON_CONNECTION
28416 /* Next array element. */
28417 field_addr.sub_location->number = i;
28418#endif /* FREECIV_JSON_CONNECTION */
28419
28420 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
28421 }
28422
28423#ifdef FREECIV_JSON_CONNECTION
28424 /* Exit array. */
28425 FC_FREE(field_addr.sub_location);
28426#endif /* FREECIV_JSON_CONNECTION */
28427 }
28428
28429 if (e) {
28430 log_packet_detailed("'love' field error detected");
28431 }
28432
28433#ifdef FREECIV_JSON_CONNECTION
28434 field_addr.name = "color_valid";
28435#endif /* FREECIV_JSON_CONNECTION */
28436 e = 0;
28437
28438 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
28439
28440 if (e) {
28441 log_packet_detailed("'color_valid' field error detected");
28442 }
28443
28444#ifdef FREECIV_JSON_CONNECTION
28445 field_addr.name = "color_changeable";
28446#endif /* FREECIV_JSON_CONNECTION */
28447 e = 0;
28448
28449 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
28450
28451 if (e) {
28452 log_packet_detailed("'color_changeable' field error detected");
28453 }
28454
28455#ifdef FREECIV_JSON_CONNECTION
28456 field_addr.name = "color_red";
28457#endif /* FREECIV_JSON_CONNECTION */
28458 e = 0;
28459
28460 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
28461
28462 if (e) {
28463 log_packet_detailed("'color_red' field error detected");
28464 }
28465
28466#ifdef FREECIV_JSON_CONNECTION
28467 field_addr.name = "color_green";
28468#endif /* FREECIV_JSON_CONNECTION */
28469 e = 0;
28470
28471 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
28472
28473 if (e) {
28474 log_packet_detailed("'color_green' field error detected");
28475 }
28476
28477#ifdef FREECIV_JSON_CONNECTION
28478 field_addr.name = "color_blue";
28479#endif /* FREECIV_JSON_CONNECTION */
28480 e = 0;
28481
28482 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
28483
28484 if (e) {
28485 log_packet_detailed("'color_blue' field error detected");
28486 }
28487
28488#ifdef FREECIV_JSON_CONNECTION
28489 field_addr.name = "flags";
28490#endif /* FREECIV_JSON_CONNECTION */
28491 e = 0;
28492
28493 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
28494
28495 if (e) {
28496 log_packet_detailed("'flags' field error detected");
28497 }
28498
28499#ifdef FREECIV_JSON_CONNECTION
28500 field_addr.name = "wonders";
28501#endif /* FREECIV_JSON_CONNECTION */
28502 e = 0;
28503
28504 {
28505 int i;
28506
28507#ifdef FREECIV_JSON_CONNECTION
28508 /* Create the array. */
28509 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
28510
28511 /* Enter array. */
28512 field_addr.sub_location = plocation_elem_new(0);
28513#endif /* FREECIV_JSON_CONNECTION */
28514
28515 for (i = 0; i < B_LAST; i++) {
28516#ifdef FREECIV_JSON_CONNECTION
28517 /* Next array element. */
28518 field_addr.sub_location->number = i;
28519#endif /* FREECIV_JSON_CONNECTION */
28520
28521 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
28522 }
28523
28524#ifdef FREECIV_JSON_CONNECTION
28525 /* Exit array. */
28526 FC_FREE(field_addr.sub_location);
28527#endif /* FREECIV_JSON_CONNECTION */
28528 }
28529
28530 if (e) {
28531 log_packet_detailed("'wonders' field error detected");
28532 }
28533
28534#ifdef FREECIV_JSON_CONNECTION
28535 field_addr.name = "multip_count";
28536#endif /* FREECIV_JSON_CONNECTION */
28537 e = 0;
28538
28539 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
28540
28541 if (e) {
28542 log_packet_detailed("'multip_count' field error detected");
28543 }
28544
28545#ifdef FREECIV_JSON_CONNECTION
28546 field_addr.name = "multiplier";
28547#endif /* FREECIV_JSON_CONNECTION */
28548 e = 0;
28549
28550 {
28551 int i;
28552
28553#ifdef FREECIV_JSON_CONNECTION
28554 /* Create the array. */
28555 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28556
28557 /* Enter array. */
28558 field_addr.sub_location = plocation_elem_new(0);
28559#endif /* FREECIV_JSON_CONNECTION */
28560
28561 for (i = 0; i < real_packet->multip_count; i++) {
28562#ifdef FREECIV_JSON_CONNECTION
28563 /* Next array element. */
28564 field_addr.sub_location->number = i;
28565#endif /* FREECIV_JSON_CONNECTION */
28566
28567 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
28568 }
28569
28570#ifdef FREECIV_JSON_CONNECTION
28571 /* Exit array. */
28572 FC_FREE(field_addr.sub_location);
28573#endif /* FREECIV_JSON_CONNECTION */
28574 }
28575
28576 if (e) {
28577 log_packet_detailed("'multiplier' field error detected");
28578 }
28579
28580#ifdef FREECIV_JSON_CONNECTION
28581 field_addr.name = "multiplier_target";
28582#endif /* FREECIV_JSON_CONNECTION */
28583 e = 0;
28584
28585 {
28586 int i;
28587
28588#ifdef FREECIV_JSON_CONNECTION
28589 /* Create the array. */
28590 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28591
28592 /* Enter array. */
28593 field_addr.sub_location = plocation_elem_new(0);
28594#endif /* FREECIV_JSON_CONNECTION */
28595
28596 for (i = 0; i < real_packet->multip_count; i++) {
28597#ifdef FREECIV_JSON_CONNECTION
28598 /* Next array element. */
28599 field_addr.sub_location->number = i;
28600#endif /* FREECIV_JSON_CONNECTION */
28601
28602 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
28603 }
28604
28605#ifdef FREECIV_JSON_CONNECTION
28606 /* Exit array. */
28607 FC_FREE(field_addr.sub_location);
28608#endif /* FREECIV_JSON_CONNECTION */
28609 }
28610
28611 if (e) {
28612 log_packet_detailed("'multiplier_target' field error detected");
28613 }
28614
28615#ifdef FREECIV_JSON_CONNECTION
28616 field_addr.name = "multiplier_changed";
28617#endif /* FREECIV_JSON_CONNECTION */
28618 e = 0;
28619
28620 {
28621 int i;
28622
28623#ifdef FREECIV_JSON_CONNECTION
28624 /* Create the array. */
28625 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28626
28627 /* Enter array. */
28628 field_addr.sub_location = plocation_elem_new(0);
28629#endif /* FREECIV_JSON_CONNECTION */
28630
28631 for (i = 0; i < real_packet->multip_count; i++) {
28632#ifdef FREECIV_JSON_CONNECTION
28633 /* Next array element. */
28634 field_addr.sub_location->number = i;
28635#endif /* FREECIV_JSON_CONNECTION */
28636
28637 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
28638 }
28639
28640#ifdef FREECIV_JSON_CONNECTION
28641 /* Exit array. */
28642 FC_FREE(field_addr.sub_location);
28643#endif /* FREECIV_JSON_CONNECTION */
28644 }
28645
28646 if (e) {
28647 log_packet_detailed("'multiplier_changed' field error detected");
28648 }
28649#endif /* FREECIV_DELTA_PROTOCOL */
28650
28652}
28653
28655{
28656 if (!pc->used) {
28657 log_error("WARNING: trying to send data to the closed connection %s",
28659 return -1;
28660 }
28661 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_INFO].packet != nullptr, -1,
28662 "Handler for PACKET_PLAYER_INFO not installed");
28663 return pc->phs.handlers->send[PACKET_PLAYER_INFO].packet(pc, packet);
28664}
28665
28667{
28668 memset(packet, 0, sizeof(*packet));
28669}
28670
28671#define free_packet_player_phase_done(_packet) (void) 0
28672#define destroy_packet_player_phase_done free
28673
28674#ifdef FREECIV_DELTA_PROTOCOL
28675#define hash_packet_player_phase_done_100 hash_const
28676#define cmp_packet_player_phase_done_100 cmp_const
28678#endif /* FREECIV_DELTA_PROTOCOL */
28679
28681{
28682#define FREE_PACKET_STRUCT(_packet) free_packet_player_phase_done(_packet)
28684
28685#ifdef FREECIV_JSON_CONNECTION
28686 struct plocation field_addr;
28687 {
28688 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28691 }
28692#endif /* FREECIV_JSON_CONNECTION */
28693
28694 log_packet_detailed("packet_player_phase_done_100: got info about ()");
28695
28696#ifdef FREECIV_DELTA_PROTOCOL
28699 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PHASE_DONE;
28700
28701 if (nullptr == *hash) {
28703 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28704 }
28705
28706 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28707 *real_packet = *old;
28708 } else {
28709 /* packet is already initialized empty */
28710 log_packet_detailed(" no old info");
28711 }
28712
28713#ifdef FREECIV_JSON_CONNECTION
28714 field_addr.name = "fields";
28715#endif /* FREECIV_JSON_CONNECTION */
28716 DIO_BV_GET(&din, &field_addr, fields);
28717
28718 if (BV_ISSET(fields, 0)) {
28719 log_packet_detailed(" got field 'turn'");
28720
28721#ifdef FREECIV_JSON_CONNECTION
28722 field_addr.name = "turn";
28723#endif /* FREECIV_JSON_CONNECTION */
28724
28725 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28727 }
28728 }
28729
28730 if (nullptr == old) {
28731 old = fc_malloc(sizeof(*old));
28733 *old = *real_packet;
28735 } else {
28736 *old = *real_packet;
28737 }
28738
28739#else /* FREECIV_DELTA_PROTOCOL */
28740#ifdef FREECIV_JSON_CONNECTION
28741 field_addr.name = "turn";
28742#endif /* FREECIV_JSON_CONNECTION */
28743
28744 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28746 }
28747#endif /* FREECIV_DELTA_PROTOCOL */
28748
28750#undef FREE_PACKET_STRUCT
28751}
28752
28754{
28755 const struct packet_player_phase_done *real_packet = packet;
28756 int e;
28758
28759 log_packet_detailed("packet_player_phase_done_100: sending info about ()");
28760
28761#ifdef FREECIV_DELTA_PROTOCOL
28764 bool differ;
28765 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PHASE_DONE;
28766
28767 if (nullptr == *hash) {
28769 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28770 }
28771 BV_CLR_ALL(fields);
28772
28773 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28774 old = fc_malloc(sizeof(*old));
28775 /* temporary bitcopy just to insert correctly */
28776 *old = *real_packet;
28779 }
28780
28781 differ = (old->turn != real_packet->turn);
28782 if (differ) {
28783 BV_SET(fields, 0);
28784 }
28785#endif /* FREECIV_DELTA_PROTOCOL */
28786
28787#ifdef FREECIV_JSON_CONNECTION
28788 struct plocation field_addr;
28789 {
28790 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28793 }
28794#endif /* FREECIV_JSON_CONNECTION */
28795
28796#ifdef FREECIV_DELTA_PROTOCOL
28797#ifdef FREECIV_JSON_CONNECTION
28798 field_addr.name = "fields";
28799#endif /* FREECIV_JSON_CONNECTION */
28800 e = 0;
28801 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28802 if (e) {
28803 log_packet_detailed("fields bitvector error detected");
28804 }
28805
28806 if (BV_ISSET(fields, 0)) {
28807 log_packet_detailed(" field 'turn' has changed");
28808
28809#ifdef FREECIV_JSON_CONNECTION
28810 field_addr.name = "turn";
28811#endif /* FREECIV_JSON_CONNECTION */
28812 e = 0;
28813
28814 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28815
28816 if (e) {
28817 log_packet_detailed("'turn' field error detected");
28818 }
28819 }
28820
28821 *old = *real_packet;
28822
28823#else /* FREECIV_DELTA_PROTOCOL */
28824#ifdef FREECIV_JSON_CONNECTION
28825 field_addr.name = "turn";
28826#endif /* FREECIV_JSON_CONNECTION */
28827 e = 0;
28828
28829 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28830
28831 if (e) {
28832 log_packet_detailed("'turn' field error detected");
28833 }
28834#endif /* FREECIV_DELTA_PROTOCOL */
28835
28837}
28838
28840{
28841 if (!pc->used) {
28842 log_error("WARNING: trying to send data to the closed connection %s",
28844 return -1;
28845 }
28846 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet != nullptr, -1,
28847 "Handler for PACKET_PLAYER_PHASE_DONE not installed");
28848 return pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet(pc, packet);
28849}
28850
28852{
28853 struct packet_player_phase_done packet, *real_packet = &packet;
28854
28856
28858}
28859
28860static inline void init_packet_player_rates(struct packet_player_rates *packet)
28861{
28862 memset(packet, 0, sizeof(*packet));
28863}
28864
28865#define free_packet_player_rates(_packet) (void) 0
28866#define destroy_packet_player_rates free
28867
28868#ifdef FREECIV_DELTA_PROTOCOL
28869#define hash_packet_player_rates_100 hash_const
28870#define cmp_packet_player_rates_100 cmp_const
28872#endif /* FREECIV_DELTA_PROTOCOL */
28873
28875{
28876#define FREE_PACKET_STRUCT(_packet) free_packet_player_rates(_packet)
28878
28879#ifdef FREECIV_JSON_CONNECTION
28880 struct plocation field_addr;
28881 {
28882 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28885 }
28886#endif /* FREECIV_JSON_CONNECTION */
28887
28888 log_packet_detailed("packet_player_rates_100: got info about ()");
28889
28890#ifdef FREECIV_DELTA_PROTOCOL
28892 struct packet_player_rates *old;
28893 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RATES;
28894
28895 if (nullptr == *hash) {
28897 nullptr, nullptr, nullptr, destroy_packet_player_rates);
28898 }
28899
28900 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28901 *real_packet = *old;
28902 } else {
28903 /* packet is already initialized empty */
28904 log_packet_detailed(" no old info");
28905 }
28906
28907#ifdef FREECIV_JSON_CONNECTION
28908 field_addr.name = "fields";
28909#endif /* FREECIV_JSON_CONNECTION */
28910 DIO_BV_GET(&din, &field_addr, fields);
28911
28912 if (BV_ISSET(fields, 0)) {
28913 log_packet_detailed(" got field 'tax'");
28914
28915#ifdef FREECIV_JSON_CONNECTION
28916 field_addr.name = "tax";
28917#endif /* FREECIV_JSON_CONNECTION */
28918
28919 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
28921 }
28922 }
28923
28924 if (BV_ISSET(fields, 1)) {
28925 log_packet_detailed(" got field 'luxury'");
28926
28927#ifdef FREECIV_JSON_CONNECTION
28928 field_addr.name = "luxury";
28929#endif /* FREECIV_JSON_CONNECTION */
28930
28931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
28933 }
28934 }
28935
28936 if (BV_ISSET(fields, 2)) {
28937 log_packet_detailed(" got field 'science'");
28938
28939#ifdef FREECIV_JSON_CONNECTION
28940 field_addr.name = "science";
28941#endif /* FREECIV_JSON_CONNECTION */
28942
28943 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
28945 }
28946 }
28947
28948 if (nullptr == old) {
28949 old = fc_malloc(sizeof(*old));
28951 *old = *real_packet;
28953 } else {
28954 *old = *real_packet;
28955 }
28956
28957#else /* FREECIV_DELTA_PROTOCOL */
28958#ifdef FREECIV_JSON_CONNECTION
28959 field_addr.name = "tax";
28960#endif /* FREECIV_JSON_CONNECTION */
28961
28962 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
28964 }
28965
28966#ifdef FREECIV_JSON_CONNECTION
28967 field_addr.name = "luxury";
28968#endif /* FREECIV_JSON_CONNECTION */
28969
28970 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
28972 }
28973
28974#ifdef FREECIV_JSON_CONNECTION
28975 field_addr.name = "science";
28976#endif /* FREECIV_JSON_CONNECTION */
28977
28978 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
28980 }
28981#endif /* FREECIV_DELTA_PROTOCOL */
28982
28984#undef FREE_PACKET_STRUCT
28985}
28986
28987static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
28988{
28989 const struct packet_player_rates *real_packet = packet;
28990 int e;
28992
28993 log_packet_detailed("packet_player_rates_100: sending info about ()");
28994
28995#ifdef FREECIV_DELTA_PROTOCOL
28997 struct packet_player_rates *old;
28998 bool differ;
28999 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RATES;
29000
29001 if (nullptr == *hash) {
29003 nullptr, nullptr, nullptr, destroy_packet_player_rates);
29004 }
29005 BV_CLR_ALL(fields);
29006
29007 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29008 old = fc_malloc(sizeof(*old));
29009 /* temporary bitcopy just to insert correctly */
29010 *old = *real_packet;
29013 }
29014
29015 differ = (old->tax != real_packet->tax);
29016 if (differ) {
29017 BV_SET(fields, 0);
29018 }
29019
29020 differ = (old->luxury != real_packet->luxury);
29021 if (differ) {
29022 BV_SET(fields, 1);
29023 }
29024
29025 differ = (old->science != real_packet->science);
29026 if (differ) {
29027 BV_SET(fields, 2);
29028 }
29029#endif /* FREECIV_DELTA_PROTOCOL */
29030
29031#ifdef FREECIV_JSON_CONNECTION
29032 struct plocation field_addr;
29033 {
29034 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29037 }
29038#endif /* FREECIV_JSON_CONNECTION */
29039
29040#ifdef FREECIV_DELTA_PROTOCOL
29041#ifdef FREECIV_JSON_CONNECTION
29042 field_addr.name = "fields";
29043#endif /* FREECIV_JSON_CONNECTION */
29044 e = 0;
29045 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29046 if (e) {
29047 log_packet_detailed("fields bitvector error detected");
29048 }
29049
29050 if (BV_ISSET(fields, 0)) {
29051 log_packet_detailed(" field 'tax' has changed");
29052
29053#ifdef FREECIV_JSON_CONNECTION
29054 field_addr.name = "tax";
29055#endif /* FREECIV_JSON_CONNECTION */
29056 e = 0;
29057
29058 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29059
29060 if (e) {
29061 log_packet_detailed("'tax' field error detected");
29062 }
29063 }
29064
29065 if (BV_ISSET(fields, 1)) {
29066 log_packet_detailed(" field 'luxury' has changed");
29067
29068#ifdef FREECIV_JSON_CONNECTION
29069 field_addr.name = "luxury";
29070#endif /* FREECIV_JSON_CONNECTION */
29071 e = 0;
29072
29073 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29074
29075 if (e) {
29076 log_packet_detailed("'luxury' field error detected");
29077 }
29078 }
29079
29080 if (BV_ISSET(fields, 2)) {
29081 log_packet_detailed(" field 'science' has changed");
29082
29083#ifdef FREECIV_JSON_CONNECTION
29084 field_addr.name = "science";
29085#endif /* FREECIV_JSON_CONNECTION */
29086 e = 0;
29087
29088 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29089
29090 if (e) {
29091 log_packet_detailed("'science' field error detected");
29092 }
29093 }
29094
29095 *old = *real_packet;
29096
29097#else /* FREECIV_DELTA_PROTOCOL */
29098#ifdef FREECIV_JSON_CONNECTION
29099 field_addr.name = "tax";
29100#endif /* FREECIV_JSON_CONNECTION */
29101 e = 0;
29102
29103 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29104
29105 if (e) {
29106 log_packet_detailed("'tax' field error detected");
29107 }
29108
29109#ifdef FREECIV_JSON_CONNECTION
29110 field_addr.name = "luxury";
29111#endif /* FREECIV_JSON_CONNECTION */
29112 e = 0;
29113
29114 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29115
29116 if (e) {
29117 log_packet_detailed("'luxury' field error detected");
29118 }
29119
29120#ifdef FREECIV_JSON_CONNECTION
29121 field_addr.name = "science";
29122#endif /* FREECIV_JSON_CONNECTION */
29123 e = 0;
29124
29125 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29126
29127 if (e) {
29128 log_packet_detailed("'science' field error detected");
29129 }
29130#endif /* FREECIV_DELTA_PROTOCOL */
29131
29133}
29134
29136{
29137 if (!pc->used) {
29138 log_error("WARNING: trying to send data to the closed connection %s",
29140 return -1;
29141 }
29142 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RATES].packet != nullptr, -1,
29143 "Handler for PACKET_PLAYER_RATES not installed");
29144 return pc->phs.handlers->send[PACKET_PLAYER_RATES].packet(pc, packet);
29145}
29146
29147int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
29148{
29149 struct packet_player_rates packet, *real_packet = &packet;
29150
29151 real_packet->tax = tax;
29152 real_packet->luxury = luxury;
29153 real_packet->science = science;
29154
29156}
29157
29159{
29160 memset(packet, 0, sizeof(*packet));
29161}
29162
29163#define free_packet_player_change_government(_packet) (void) 0
29164#define destroy_packet_player_change_government free
29165
29166#ifdef FREECIV_DELTA_PROTOCOL
29167#define hash_packet_player_change_government_100 hash_const
29168#define cmp_packet_player_change_government_100 cmp_const
29170#endif /* FREECIV_DELTA_PROTOCOL */
29171
29173{
29174#define FREE_PACKET_STRUCT(_packet) free_packet_player_change_government(_packet)
29176
29177#ifdef FREECIV_JSON_CONNECTION
29178 struct plocation field_addr;
29179 {
29180 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29183 }
29184#endif /* FREECIV_JSON_CONNECTION */
29185
29186 log_packet_detailed("packet_player_change_government_100: got info about ()");
29187
29188#ifdef FREECIV_DELTA_PROTOCOL
29191 struct genhash **hash = pc->phs.received + PACKET_PLAYER_CHANGE_GOVERNMENT;
29192
29193 if (nullptr == *hash) {
29195 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29196 }
29197
29198 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29199 *real_packet = *old;
29200 } else {
29201 /* packet is already initialized empty */
29202 log_packet_detailed(" no old info");
29203 }
29204
29205#ifdef FREECIV_JSON_CONNECTION
29206 field_addr.name = "fields";
29207#endif /* FREECIV_JSON_CONNECTION */
29208 DIO_BV_GET(&din, &field_addr, fields);
29209
29210 if (BV_ISSET(fields, 0)) {
29211 log_packet_detailed(" got field 'government'");
29212
29213#ifdef FREECIV_JSON_CONNECTION
29214 field_addr.name = "government";
29215#endif /* FREECIV_JSON_CONNECTION */
29216
29217 {
29218 int readin;
29219
29220 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29222 }
29223 real_packet->government = readin;
29224 }
29225 }
29226
29227 if (nullptr == old) {
29228 old = fc_malloc(sizeof(*old));
29230 *old = *real_packet;
29232 } else {
29233 *old = *real_packet;
29234 }
29235
29236#else /* FREECIV_DELTA_PROTOCOL */
29237#ifdef FREECIV_JSON_CONNECTION
29238 field_addr.name = "government";
29239#endif /* FREECIV_JSON_CONNECTION */
29240
29241 {
29242 int readin;
29243
29244 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29246 }
29247 real_packet->government = readin;
29248 }
29249#endif /* FREECIV_DELTA_PROTOCOL */
29250
29252#undef FREE_PACKET_STRUCT
29253}
29254
29256{
29257 const struct packet_player_change_government *real_packet = packet;
29258 int e;
29260
29261 log_packet_detailed("packet_player_change_government_100: sending info about ()");
29262
29263#ifdef FREECIV_DELTA_PROTOCOL
29266 bool differ;
29267 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_CHANGE_GOVERNMENT;
29268
29269 if (nullptr == *hash) {
29271 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29272 }
29273 BV_CLR_ALL(fields);
29274
29275 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29276 old = fc_malloc(sizeof(*old));
29277 /* temporary bitcopy just to insert correctly */
29278 *old = *real_packet;
29281 }
29282
29283 differ = (old->government != real_packet->government);
29284 if (differ) {
29285 BV_SET(fields, 0);
29286 }
29287#endif /* FREECIV_DELTA_PROTOCOL */
29288
29289#ifdef FREECIV_JSON_CONNECTION
29290 struct plocation field_addr;
29291 {
29292 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29295 }
29296#endif /* FREECIV_JSON_CONNECTION */
29297
29298#ifdef FREECIV_DELTA_PROTOCOL
29299#ifdef FREECIV_JSON_CONNECTION
29300 field_addr.name = "fields";
29301#endif /* FREECIV_JSON_CONNECTION */
29302 e = 0;
29303 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29304 if (e) {
29305 log_packet_detailed("fields bitvector error detected");
29306 }
29307
29308 if (BV_ISSET(fields, 0)) {
29309 log_packet_detailed(" field 'government' has changed");
29310
29311#ifdef FREECIV_JSON_CONNECTION
29312 field_addr.name = "government";
29313#endif /* FREECIV_JSON_CONNECTION */
29314 e = 0;
29315
29316 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29317
29318 if (e) {
29319 log_packet_detailed("'government' field error detected");
29320 }
29321 }
29322
29323 *old = *real_packet;
29324
29325#else /* FREECIV_DELTA_PROTOCOL */
29326#ifdef FREECIV_JSON_CONNECTION
29327 field_addr.name = "government";
29328#endif /* FREECIV_JSON_CONNECTION */
29329 e = 0;
29330
29331 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29332
29333 if (e) {
29334 log_packet_detailed("'government' field error detected");
29335 }
29336#endif /* FREECIV_DELTA_PROTOCOL */
29337
29339}
29340
29342{
29343 if (!pc->used) {
29344 log_error("WARNING: trying to send data to the closed connection %s",
29346 return -1;
29347 }
29348 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet != nullptr, -1,
29349 "Handler for PACKET_PLAYER_CHANGE_GOVERNMENT not installed");
29350 return pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet(pc, packet);
29351}
29352
29361
29363{
29364 memset(packet, 0, sizeof(*packet));
29365}
29366
29367#define free_packet_player_place_infra(_packet) (void) 0
29368#define destroy_packet_player_place_infra free
29369
29370#ifdef FREECIV_DELTA_PROTOCOL
29371#define hash_packet_player_place_infra_100 hash_const
29372#define cmp_packet_player_place_infra_100 cmp_const
29374#endif /* FREECIV_DELTA_PROTOCOL */
29375
29377{
29378#define FREE_PACKET_STRUCT(_packet) free_packet_player_place_infra(_packet)
29380
29381#ifdef FREECIV_JSON_CONNECTION
29382 struct plocation field_addr;
29383 {
29384 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29387 }
29388#endif /* FREECIV_JSON_CONNECTION */
29389
29390 log_packet_detailed("packet_player_place_infra_100: got info about ()");
29391
29392#ifdef FREECIV_DELTA_PROTOCOL
29395 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PLACE_INFRA;
29396
29397 if (nullptr == *hash) {
29399 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29400 }
29401
29402 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29403 *real_packet = *old;
29404 } else {
29405 /* packet is already initialized empty */
29406 log_packet_detailed(" no old info");
29407 }
29408
29409#ifdef FREECIV_JSON_CONNECTION
29410 field_addr.name = "fields";
29411#endif /* FREECIV_JSON_CONNECTION */
29412 DIO_BV_GET(&din, &field_addr, fields);
29413
29414 if (BV_ISSET(fields, 0)) {
29415 log_packet_detailed(" got field 'tile'");
29416
29417#ifdef FREECIV_JSON_CONNECTION
29418 field_addr.name = "tile";
29419#endif /* FREECIV_JSON_CONNECTION */
29420
29421 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29423 }
29424 }
29425
29426 if (BV_ISSET(fields, 1)) {
29427 log_packet_detailed(" got field 'extra'");
29428
29429#ifdef FREECIV_JSON_CONNECTION
29430 field_addr.name = "extra";
29431#endif /* FREECIV_JSON_CONNECTION */
29432
29433 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29435 }
29436 }
29437
29438 if (nullptr == old) {
29439 old = fc_malloc(sizeof(*old));
29441 *old = *real_packet;
29443 } else {
29444 *old = *real_packet;
29445 }
29446
29447#else /* FREECIV_DELTA_PROTOCOL */
29448#ifdef FREECIV_JSON_CONNECTION
29449 field_addr.name = "tile";
29450#endif /* FREECIV_JSON_CONNECTION */
29451
29452 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29454 }
29455
29456#ifdef FREECIV_JSON_CONNECTION
29457 field_addr.name = "extra";
29458#endif /* FREECIV_JSON_CONNECTION */
29459
29460 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29462 }
29463#endif /* FREECIV_DELTA_PROTOCOL */
29464
29466#undef FREE_PACKET_STRUCT
29467}
29468
29470{
29471 const struct packet_player_place_infra *real_packet = packet;
29472 int e;
29474
29475 log_packet_detailed("packet_player_place_infra_100: sending info about ()");
29476
29477#ifdef FREECIV_DELTA_PROTOCOL
29480 bool differ;
29481 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PLACE_INFRA;
29482
29483 if (nullptr == *hash) {
29485 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29486 }
29487 BV_CLR_ALL(fields);
29488
29489 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29490 old = fc_malloc(sizeof(*old));
29491 /* temporary bitcopy just to insert correctly */
29492 *old = *real_packet;
29495 }
29496
29497 differ = (old->tile != real_packet->tile);
29498 if (differ) {
29499 BV_SET(fields, 0);
29500 }
29501
29502 differ = (old->extra != real_packet->extra);
29503 if (differ) {
29504 BV_SET(fields, 1);
29505 }
29506#endif /* FREECIV_DELTA_PROTOCOL */
29507
29508#ifdef FREECIV_JSON_CONNECTION
29509 struct plocation field_addr;
29510 {
29511 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29514 }
29515#endif /* FREECIV_JSON_CONNECTION */
29516
29517#ifdef FREECIV_DELTA_PROTOCOL
29518#ifdef FREECIV_JSON_CONNECTION
29519 field_addr.name = "fields";
29520#endif /* FREECIV_JSON_CONNECTION */
29521 e = 0;
29522 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29523 if (e) {
29524 log_packet_detailed("fields bitvector error detected");
29525 }
29526
29527 if (BV_ISSET(fields, 0)) {
29528 log_packet_detailed(" field 'tile' has changed");
29529
29530#ifdef FREECIV_JSON_CONNECTION
29531 field_addr.name = "tile";
29532#endif /* FREECIV_JSON_CONNECTION */
29533 e = 0;
29534
29535 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29536
29537 if (e) {
29538 log_packet_detailed("'tile' field error detected");
29539 }
29540 }
29541
29542 if (BV_ISSET(fields, 1)) {
29543 log_packet_detailed(" field 'extra' has changed");
29544
29545#ifdef FREECIV_JSON_CONNECTION
29546 field_addr.name = "extra";
29547#endif /* FREECIV_JSON_CONNECTION */
29548 e = 0;
29549
29550 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29551
29552 if (e) {
29553 log_packet_detailed("'extra' field error detected");
29554 }
29555 }
29556
29557 *old = *real_packet;
29558
29559#else /* FREECIV_DELTA_PROTOCOL */
29560#ifdef FREECIV_JSON_CONNECTION
29561 field_addr.name = "tile";
29562#endif /* FREECIV_JSON_CONNECTION */
29563 e = 0;
29564
29565 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29566
29567 if (e) {
29568 log_packet_detailed("'tile' field error detected");
29569 }
29570
29571#ifdef FREECIV_JSON_CONNECTION
29572 field_addr.name = "extra";
29573#endif /* FREECIV_JSON_CONNECTION */
29574 e = 0;
29575
29576 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29577
29578 if (e) {
29579 log_packet_detailed("'extra' field error detected");
29580 }
29581#endif /* FREECIV_DELTA_PROTOCOL */
29582
29584}
29585
29587{
29588 if (!pc->used) {
29589 log_error("WARNING: trying to send data to the closed connection %s",
29591 return -1;
29592 }
29593 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet != nullptr, -1,
29594 "Handler for PACKET_PLAYER_PLACE_INFRA not installed");
29595 return pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet(pc, packet);
29596}
29597
29599{
29600 struct packet_player_place_infra packet, *real_packet = &packet;
29601
29603 real_packet->extra = extra;
29604
29606}
29607
29609{
29610 memset(packet, 0, sizeof(*packet));
29611}
29612
29613#define free_packet_player_attribute_block(_packet) (void) 0
29614#define destroy_packet_player_attribute_block free
29615
29617{
29618#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_block(_packet)
29620
29621 log_packet_detailed("packet_player_attribute_block_100: got info about ()");
29622
29623 real_packet->__dummy = 0xff;
29624
29626#undef FREE_PACKET_STRUCT
29627}
29628
29630{
29632
29633 log_packet_detailed("packet_player_attribute_block_100: sending info about ()");
29634
29636}
29637
29639{
29640 if (!pc->used) {
29641 log_error("WARNING: trying to send data to the closed connection %s",
29643 return -1;
29644 }
29645 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet != nullptr, -1,
29646 "Handler for PACKET_PLAYER_ATTRIBUTE_BLOCK not installed");
29647 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet(pc);
29648}
29649
29651{
29652 memset(packet, 0, sizeof(*packet));
29653}
29654
29655#define free_packet_player_attribute_chunk(_packet) (void) 0
29656#define destroy_packet_player_attribute_chunk free
29657
29658#ifdef FREECIV_DELTA_PROTOCOL
29660{
29661 const struct packet_player_attribute_chunk *key = (const struct packet_player_attribute_chunk *) vkey;
29662 genhash_val_t result = 0;
29663
29664 result += key->offset;
29665
29666 result &= 0xFFFFFFFF;
29667 return result;
29668}
29669
29670static bool cmp_packet_player_attribute_chunk_100(const void *vkey1, const void *vkey2)
29671{
29674 bool differ;
29675
29676 differ = (old->offset != real_packet->offset);
29677
29678 return !differ;
29679}
29681#endif /* FREECIV_DELTA_PROTOCOL */
29682
29684{
29685#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_chunk(_packet)
29687
29688#ifdef FREECIV_JSON_CONNECTION
29689 struct plocation field_addr;
29690 {
29691 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29694 }
29695#endif /* FREECIV_JSON_CONNECTION */
29696
29697#ifdef FREECIV_JSON_CONNECTION
29698 field_addr.name = "offset";
29699#endif /* FREECIV_JSON_CONNECTION */
29700
29701 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
29703 }
29704
29705 log_packet_detailed("packet_player_attribute_chunk_100: got info about (%d)",
29706 real_packet->offset);
29707
29708#ifdef FREECIV_DELTA_PROTOCOL
29711 struct genhash **hash = pc->phs.received + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29712
29713 if (nullptr == *hash) {
29715 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29716 }
29717
29718 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29719 *real_packet = *old;
29720 } else {
29721 /* packet is already initialized empty */
29722 log_packet_detailed(" no old info");
29723 }
29724
29725#ifdef FREECIV_JSON_CONNECTION
29726 field_addr.name = "fields";
29727#endif /* FREECIV_JSON_CONNECTION */
29728 DIO_BV_GET(&din, &field_addr, fields);
29729
29730 if (BV_ISSET(fields, 0)) {
29731 log_packet_detailed(" got field 'total_length'");
29732
29733#ifdef FREECIV_JSON_CONNECTION
29734 field_addr.name = "total_length";
29735#endif /* FREECIV_JSON_CONNECTION */
29736
29737 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29738 RECEIVE_PACKET_FIELD_ERROR(total_length);
29739 }
29740 }
29741
29742 if (BV_ISSET(fields, 1)) {
29743 log_packet_detailed(" got field 'chunk_length'");
29744
29745#ifdef FREECIV_JSON_CONNECTION
29746 field_addr.name = "chunk_length";
29747#endif /* FREECIV_JSON_CONNECTION */
29748
29749 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29750 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29751 }
29752 }
29753
29754 if (BV_ISSET(fields, 2)) {
29755 log_packet_detailed(" got field 'data'");
29756
29757#ifdef FREECIV_JSON_CONNECTION
29758 field_addr.name = "data";
29759#endif /* FREECIV_JSON_CONNECTION */
29760
29761 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29762 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29763 }
29764 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29766 }
29767 }
29768
29769 if (nullptr == old) {
29770 old = fc_malloc(sizeof(*old));
29772 *old = *real_packet;
29774 } else {
29775 *old = *real_packet;
29776 }
29777
29778#else /* FREECIV_DELTA_PROTOCOL */
29779#ifdef FREECIV_JSON_CONNECTION
29780 field_addr.name = "total_length";
29781#endif /* FREECIV_JSON_CONNECTION */
29782
29783 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29784 RECEIVE_PACKET_FIELD_ERROR(total_length);
29785 }
29786
29787#ifdef FREECIV_JSON_CONNECTION
29788 field_addr.name = "chunk_length";
29789#endif /* FREECIV_JSON_CONNECTION */
29790
29791 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29792 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29793 }
29794
29795#ifdef FREECIV_JSON_CONNECTION
29796 field_addr.name = "data";
29797#endif /* FREECIV_JSON_CONNECTION */
29798
29799 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29800 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29801 }
29802 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29804 }
29805#endif /* FREECIV_DELTA_PROTOCOL */
29806
29808#undef FREE_PACKET_STRUCT
29809}
29810
29812{
29813 /* copy packet for pre-send */
29816 int e;
29818
29819 log_packet_detailed("packet_player_attribute_chunk_100: sending info about (%d)",
29820 real_packet->offset);
29821
29823
29824#ifdef FREECIV_DELTA_PROTOCOL
29827 bool differ;
29828 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29829
29830 if (nullptr == *hash) {
29832 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29833 }
29834 BV_CLR_ALL(fields);
29835
29836 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29837 old = fc_malloc(sizeof(*old));
29838 /* temporary bitcopy just to insert correctly */
29839 *old = *real_packet;
29842 }
29843
29844 differ = (old->total_length != real_packet->total_length);
29845 if (differ) {
29846 BV_SET(fields, 0);
29847 }
29848
29849 differ = (old->chunk_length != real_packet->chunk_length);
29850 if (differ) {
29851 BV_SET(fields, 1);
29852 }
29853
29854 differ = ((old->chunk_length != real_packet->chunk_length)
29855 || (memcmp(old->data, real_packet->data, real_packet->chunk_length) != 0));
29856 if (differ) {
29857 BV_SET(fields, 2);
29858 }
29859#endif /* FREECIV_DELTA_PROTOCOL */
29860
29861#ifdef FREECIV_JSON_CONNECTION
29862 struct plocation field_addr;
29863 {
29864 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29867 }
29868#endif /* FREECIV_JSON_CONNECTION */
29869
29870#ifdef FREECIV_JSON_CONNECTION
29871 field_addr.name = "offset";
29872#endif /* FREECIV_JSON_CONNECTION */
29873 e = 0;
29874
29875 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
29876
29877 if (e) {
29878 log_packet_detailed("'offset' field error detected");
29879 }
29880
29881#ifdef FREECIV_DELTA_PROTOCOL
29882#ifdef FREECIV_JSON_CONNECTION
29883 field_addr.name = "fields";
29884#endif /* FREECIV_JSON_CONNECTION */
29885 e = 0;
29886 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29887 if (e) {
29888 log_packet_detailed("fields bitvector error detected");
29889 }
29890
29891 if (BV_ISSET(fields, 0)) {
29892 log_packet_detailed(" field 'total_length' has changed");
29893
29894#ifdef FREECIV_JSON_CONNECTION
29895 field_addr.name = "total_length";
29896#endif /* FREECIV_JSON_CONNECTION */
29897 e = 0;
29898
29899 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
29900
29901 if (e) {
29902 log_packet_detailed("'total_length' field error detected");
29903 }
29904 }
29905
29906 if (BV_ISSET(fields, 1)) {
29907 log_packet_detailed(" field 'chunk_length' has changed");
29908
29909#ifdef FREECIV_JSON_CONNECTION
29910 field_addr.name = "chunk_length";
29911#endif /* FREECIV_JSON_CONNECTION */
29912 e = 0;
29913
29914 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
29915
29916 if (e) {
29917 log_packet_detailed("'chunk_length' field error detected");
29918 }
29919 }
29920
29921 if (BV_ISSET(fields, 2)) {
29922 log_packet_detailed(" field 'data' has changed");
29923
29924#ifdef FREECIV_JSON_CONNECTION
29925 field_addr.name = "data";
29926#endif /* FREECIV_JSON_CONNECTION */
29927 e = 0;
29928
29929 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
29930
29931 if (e) {
29932 log_packet_detailed("'data' field error detected");
29933 }
29934 }
29935
29936 *old = *real_packet;
29937
29938#else /* FREECIV_DELTA_PROTOCOL */
29939#ifdef FREECIV_JSON_CONNECTION
29940 field_addr.name = "total_length";
29941#endif /* FREECIV_JSON_CONNECTION */
29942 e = 0;
29943
29944 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
29945
29946 if (e) {
29947 log_packet_detailed("'total_length' field error detected");
29948 }
29949
29950#ifdef FREECIV_JSON_CONNECTION
29951 field_addr.name = "chunk_length";
29952#endif /* FREECIV_JSON_CONNECTION */
29953 e = 0;
29954
29955 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
29956
29957 if (e) {
29958 log_packet_detailed("'chunk_length' field error detected");
29959 }
29960
29961#ifdef FREECIV_JSON_CONNECTION
29962 field_addr.name = "data";
29963#endif /* FREECIV_JSON_CONNECTION */
29964 e = 0;
29965
29966 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
29967
29968 if (e) {
29969 log_packet_detailed("'data' field error detected");
29970 }
29971#endif /* FREECIV_DELTA_PROTOCOL */
29972
29974}
29975
29977{
29978 if (!pc->used) {
29979 log_error("WARNING: trying to send data to the closed connection %s",
29981 return -1;
29982 }
29983 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet != nullptr, -1,
29984 "Handler for PACKET_PLAYER_ATTRIBUTE_CHUNK not installed");
29985 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet(pc, packet);
29986}
29987
29989{
29990 memset(packet, 0, sizeof(*packet));
29991}
29992
29993#define free_packet_player_diplstate(_packet) (void) 0
29994#define destroy_packet_player_diplstate free
29995
29996#ifdef FREECIV_DELTA_PROTOCOL
29998{
29999 const struct packet_player_diplstate *key = (const struct packet_player_diplstate *) vkey;
30000 genhash_val_t result = 0;
30001
30002 result += key->diplstate_id;
30003
30004 result &= 0xFFFFFFFF;
30005 return result;
30006}
30007
30008static bool cmp_packet_player_diplstate_100(const void *vkey1, const void *vkey2)
30009{
30010 const struct packet_player_diplstate *old = (const struct packet_player_diplstate *) vkey1;
30011 const struct packet_player_diplstate *real_packet = (const struct packet_player_diplstate *) vkey2;
30012 bool differ;
30013
30014 differ = (old->diplstate_id != real_packet->diplstate_id);
30015
30016 return !differ;
30017}
30019#endif /* FREECIV_DELTA_PROTOCOL */
30020
30022{
30023#define FREE_PACKET_STRUCT(_packet) free_packet_player_diplstate(_packet)
30025
30026#ifdef FREECIV_JSON_CONNECTION
30027 struct plocation field_addr;
30028 {
30029 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30032 }
30033#endif /* FREECIV_JSON_CONNECTION */
30034
30035#ifdef FREECIV_JSON_CONNECTION
30036 field_addr.name = "diplstate_id";
30037#endif /* FREECIV_JSON_CONNECTION */
30038
30039 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
30040 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
30041 }
30042
30043 log_packet_detailed("packet_player_diplstate_100: got info about (%d)",
30044 real_packet->diplstate_id);
30045
30046#ifdef FREECIV_DELTA_PROTOCOL
30049 struct genhash **hash = pc->phs.received + PACKET_PLAYER_DIPLSTATE;
30050
30051 if (nullptr == *hash) {
30053 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30054 }
30055
30056 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30057 *real_packet = *old;
30058 } else {
30059 /* packet is already initialized empty */
30060 log_packet_detailed(" no old info");
30061 }
30062
30063#ifdef FREECIV_JSON_CONNECTION
30064 field_addr.name = "fields";
30065#endif /* FREECIV_JSON_CONNECTION */
30066 DIO_BV_GET(&din, &field_addr, fields);
30067
30068 if (BV_ISSET(fields, 0)) {
30069 log_packet_detailed(" got field 'plr1'");
30070
30071#ifdef FREECIV_JSON_CONNECTION
30072 field_addr.name = "plr1";
30073#endif /* FREECIV_JSON_CONNECTION */
30074
30075 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30077 }
30078 }
30079
30080 if (BV_ISSET(fields, 1)) {
30081 log_packet_detailed(" got field 'plr2'");
30082
30083#ifdef FREECIV_JSON_CONNECTION
30084 field_addr.name = "plr2";
30085#endif /* FREECIV_JSON_CONNECTION */
30086
30087 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30089 }
30090 }
30091
30092 if (BV_ISSET(fields, 2)) {
30093 log_packet_detailed(" got field 'type'");
30094
30095#ifdef FREECIV_JSON_CONNECTION
30096 field_addr.name = "type";
30097#endif /* FREECIV_JSON_CONNECTION */
30098
30099 {
30100 int readin;
30101
30102 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30104 }
30105 real_packet->type = readin;
30106 }
30107 }
30108
30109 if (BV_ISSET(fields, 3)) {
30110 log_packet_detailed(" got field 'turns_left'");
30111
30112#ifdef FREECIV_JSON_CONNECTION
30113 field_addr.name = "turns_left";
30114#endif /* FREECIV_JSON_CONNECTION */
30115
30116 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30117 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30118 }
30119 }
30120
30121 if (BV_ISSET(fields, 4)) {
30122 log_packet_detailed(" got field 'has_reason_to_cancel'");
30123
30124#ifdef FREECIV_JSON_CONNECTION
30125 field_addr.name = "has_reason_to_cancel";
30126#endif /* FREECIV_JSON_CONNECTION */
30127
30128 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30129 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30130 }
30131 }
30132
30133 if (BV_ISSET(fields, 5)) {
30134 log_packet_detailed(" got field 'contact_turns_left'");
30135
30136#ifdef FREECIV_JSON_CONNECTION
30137 field_addr.name = "contact_turns_left";
30138#endif /* FREECIV_JSON_CONNECTION */
30139
30140 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30141 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30142 }
30143 }
30144
30145 if (nullptr == old) {
30146 old = fc_malloc(sizeof(*old));
30148 *old = *real_packet;
30150 } else {
30151 *old = *real_packet;
30152 }
30153
30154#else /* FREECIV_DELTA_PROTOCOL */
30155#ifdef FREECIV_JSON_CONNECTION
30156 field_addr.name = "plr1";
30157#endif /* FREECIV_JSON_CONNECTION */
30158
30159 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30161 }
30162
30163#ifdef FREECIV_JSON_CONNECTION
30164 field_addr.name = "plr2";
30165#endif /* FREECIV_JSON_CONNECTION */
30166
30167 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30169 }
30170
30171#ifdef FREECIV_JSON_CONNECTION
30172 field_addr.name = "type";
30173#endif /* FREECIV_JSON_CONNECTION */
30174
30175 {
30176 int readin;
30177
30178 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30180 }
30181 real_packet->type = readin;
30182 }
30183
30184#ifdef FREECIV_JSON_CONNECTION
30185 field_addr.name = "turns_left";
30186#endif /* FREECIV_JSON_CONNECTION */
30187
30188 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30189 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30190 }
30191
30192#ifdef FREECIV_JSON_CONNECTION
30193 field_addr.name = "has_reason_to_cancel";
30194#endif /* FREECIV_JSON_CONNECTION */
30195
30196 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30197 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30198 }
30199
30200#ifdef FREECIV_JSON_CONNECTION
30201 field_addr.name = "contact_turns_left";
30202#endif /* FREECIV_JSON_CONNECTION */
30203
30204 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30205 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30206 }
30207#endif /* FREECIV_DELTA_PROTOCOL */
30208
30210#undef FREE_PACKET_STRUCT
30211}
30212
30214{
30215 const struct packet_player_diplstate *real_packet = packet;
30216 int e;
30218
30219 log_packet_detailed("packet_player_diplstate_100: sending info about (%d)",
30220 real_packet->diplstate_id);
30221
30222#ifdef FREECIV_DELTA_PROTOCOL
30225 bool differ;
30226 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_DIPLSTATE;
30227
30228 if (nullptr == *hash) {
30230 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30231 }
30232 BV_CLR_ALL(fields);
30233
30234 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30235 old = fc_malloc(sizeof(*old));
30236 /* temporary bitcopy just to insert correctly */
30237 *old = *real_packet;
30240 }
30241
30242 differ = (old->plr1 != real_packet->plr1);
30243 if (differ) {
30244 BV_SET(fields, 0);
30245 }
30246
30247 differ = (old->plr2 != real_packet->plr2);
30248 if (differ) {
30249 BV_SET(fields, 1);
30250 }
30251
30252 differ = (old->type != real_packet->type);
30253 if (differ) {
30254 BV_SET(fields, 2);
30255 }
30256
30257 differ = (old->turns_left != real_packet->turns_left);
30258 if (differ) {
30259 BV_SET(fields, 3);
30260 }
30261
30262 differ = (old->has_reason_to_cancel != real_packet->has_reason_to_cancel);
30263 if (differ) {
30264 BV_SET(fields, 4);
30265 }
30266
30267 differ = (old->contact_turns_left != real_packet->contact_turns_left);
30268 if (differ) {
30269 BV_SET(fields, 5);
30270 }
30271#endif /* FREECIV_DELTA_PROTOCOL */
30272
30273#ifdef FREECIV_JSON_CONNECTION
30274 struct plocation field_addr;
30275 {
30276 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30279 }
30280#endif /* FREECIV_JSON_CONNECTION */
30281
30282#ifdef FREECIV_JSON_CONNECTION
30283 field_addr.name = "diplstate_id";
30284#endif /* FREECIV_JSON_CONNECTION */
30285 e = 0;
30286
30287 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
30288
30289 if (e) {
30290 log_packet_detailed("'diplstate_id' field error detected");
30291 }
30292
30293#ifdef FREECIV_DELTA_PROTOCOL
30294#ifdef FREECIV_JSON_CONNECTION
30295 field_addr.name = "fields";
30296#endif /* FREECIV_JSON_CONNECTION */
30297 e = 0;
30298 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30299 if (e) {
30300 log_packet_detailed("fields bitvector error detected");
30301 }
30302
30303 if (BV_ISSET(fields, 0)) {
30304 log_packet_detailed(" field 'plr1' has changed");
30305
30306#ifdef FREECIV_JSON_CONNECTION
30307 field_addr.name = "plr1";
30308#endif /* FREECIV_JSON_CONNECTION */
30309 e = 0;
30310
30311 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30312
30313 if (e) {
30314 log_packet_detailed("'plr1' field error detected");
30315 }
30316 }
30317
30318 if (BV_ISSET(fields, 1)) {
30319 log_packet_detailed(" field 'plr2' has changed");
30320
30321#ifdef FREECIV_JSON_CONNECTION
30322 field_addr.name = "plr2";
30323#endif /* FREECIV_JSON_CONNECTION */
30324 e = 0;
30325
30326 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30327
30328 if (e) {
30329 log_packet_detailed("'plr2' field error detected");
30330 }
30331 }
30332
30333 if (BV_ISSET(fields, 2)) {
30334 log_packet_detailed(" field 'type' has changed");
30335
30336#ifdef FREECIV_JSON_CONNECTION
30337 field_addr.name = "type";
30338#endif /* FREECIV_JSON_CONNECTION */
30339 e = 0;
30340
30341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30342
30343 if (e) {
30344 log_packet_detailed("'type' field error detected");
30345 }
30346 }
30347
30348 if (BV_ISSET(fields, 3)) {
30349 log_packet_detailed(" field 'turns_left' has changed");
30350
30351#ifdef FREECIV_JSON_CONNECTION
30352 field_addr.name = "turns_left";
30353#endif /* FREECIV_JSON_CONNECTION */
30354 e = 0;
30355
30356 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30357
30358 if (e) {
30359 log_packet_detailed("'turns_left' field error detected");
30360 }
30361 }
30362
30363 if (BV_ISSET(fields, 4)) {
30364 log_packet_detailed(" field 'has_reason_to_cancel' has changed");
30365
30366#ifdef FREECIV_JSON_CONNECTION
30367 field_addr.name = "has_reason_to_cancel";
30368#endif /* FREECIV_JSON_CONNECTION */
30369 e = 0;
30370
30371 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
30372
30373 if (e) {
30374 log_packet_detailed("'has_reason_to_cancel' field error detected");
30375 }
30376 }
30377
30378 if (BV_ISSET(fields, 5)) {
30379 log_packet_detailed(" field 'contact_turns_left' has changed");
30380
30381#ifdef FREECIV_JSON_CONNECTION
30382 field_addr.name = "contact_turns_left";
30383#endif /* FREECIV_JSON_CONNECTION */
30384 e = 0;
30385
30386 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30387
30388 if (e) {
30389 log_packet_detailed("'contact_turns_left' field error detected");
30390 }
30391 }
30392
30393 *old = *real_packet;
30394
30395#else /* FREECIV_DELTA_PROTOCOL */
30396#ifdef FREECIV_JSON_CONNECTION
30397 field_addr.name = "plr1";
30398#endif /* FREECIV_JSON_CONNECTION */
30399 e = 0;
30400
30401 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30402
30403 if (e) {
30404 log_packet_detailed("'plr1' field error detected");
30405 }
30406
30407#ifdef FREECIV_JSON_CONNECTION
30408 field_addr.name = "plr2";
30409#endif /* FREECIV_JSON_CONNECTION */
30410 e = 0;
30411
30412 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30413
30414 if (e) {
30415 log_packet_detailed("'plr2' field error detected");
30416 }
30417
30418#ifdef FREECIV_JSON_CONNECTION
30419 field_addr.name = "type";
30420#endif /* FREECIV_JSON_CONNECTION */
30421 e = 0;
30422
30423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30424
30425 if (e) {
30426 log_packet_detailed("'type' field error detected");
30427 }
30428
30429#ifdef FREECIV_JSON_CONNECTION
30430 field_addr.name = "turns_left";
30431#endif /* FREECIV_JSON_CONNECTION */
30432 e = 0;
30433
30434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30435
30436 if (e) {
30437 log_packet_detailed("'turns_left' field error detected");
30438 }
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#ifdef FREECIV_JSON_CONNECTION
30452 field_addr.name = "contact_turns_left";
30453#endif /* FREECIV_JSON_CONNECTION */
30454 e = 0;
30455
30456 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30457
30458 if (e) {
30459 log_packet_detailed("'contact_turns_left' field error detected");
30460 }
30461#endif /* FREECIV_DELTA_PROTOCOL */
30462
30464}
30465
30467{
30468 if (!pc->used) {
30469 log_error("WARNING: trying to send data to the closed connection %s",
30471 return -1;
30472 }
30473 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet != nullptr, -1,
30474 "Handler for PACKET_PLAYER_DIPLSTATE not installed");
30475 return pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet(pc, packet);
30476}
30477
30479{
30480 memset(packet, 0, sizeof(*packet));
30481}
30482
30483#define free_packet_player_multiplier(_packet) (void) 0
30484#define destroy_packet_player_multiplier free
30485
30486#ifdef FREECIV_DELTA_PROTOCOL
30487#define hash_packet_player_multiplier_100 hash_const
30488#define cmp_packet_player_multiplier_100 cmp_const
30490#endif /* FREECIV_DELTA_PROTOCOL */
30491
30493{
30494#define FREE_PACKET_STRUCT(_packet) free_packet_player_multiplier(_packet)
30496
30497#ifdef FREECIV_JSON_CONNECTION
30498 struct plocation field_addr;
30499 {
30500 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30503 }
30504#endif /* FREECIV_JSON_CONNECTION */
30505
30506 log_packet_detailed("packet_player_multiplier_100: got info about ()");
30507
30508#ifdef FREECIV_DELTA_PROTOCOL
30511 struct genhash **hash = pc->phs.received + PACKET_PLAYER_MULTIPLIER;
30512
30513 if (nullptr == *hash) {
30515 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30516 }
30517
30518 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30519 *real_packet = *old;
30520 } else {
30521 /* packet is already initialized empty */
30522 log_packet_detailed(" no old info");
30523 }
30524
30525#ifdef FREECIV_JSON_CONNECTION
30526 field_addr.name = "fields";
30527#endif /* FREECIV_JSON_CONNECTION */
30528 DIO_BV_GET(&din, &field_addr, fields);
30529
30530 if (BV_ISSET(fields, 0)) {
30531 log_packet_detailed(" got field 'count'");
30532
30533#ifdef FREECIV_JSON_CONNECTION
30534 field_addr.name = "count";
30535#endif /* FREECIV_JSON_CONNECTION */
30536
30537 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30539 }
30540 }
30541
30542 if (BV_ISSET(fields, 1)) {
30543 log_packet_detailed(" got field 'multipliers'");
30544
30545#ifdef FREECIV_JSON_CONNECTION
30546 field_addr.name = "multipliers";
30547#endif /* FREECIV_JSON_CONNECTION */
30548
30549 {
30550 int i;
30551
30552 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30553 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30554 }
30555
30556#ifdef FREECIV_JSON_CONNECTION
30557 /* Enter array. */
30558 field_addr.sub_location = plocation_elem_new(0);
30559#endif /* FREECIV_JSON_CONNECTION */
30560
30561 for (i = 0; i < real_packet->count; i++) {
30562#ifdef FREECIV_JSON_CONNECTION
30563 /* Next array element */
30564 field_addr.sub_location->number = i;
30565#endif /* FREECIV_JSON_CONNECTION */
30566
30567 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30569 }
30570 }
30571
30572#ifdef FREECIV_JSON_CONNECTION
30573 /* Exit array. */
30574 FC_FREE(field_addr.sub_location);
30575#endif /* FREECIV_JSON_CONNECTION */
30576 }
30577 }
30578
30579 if (nullptr == old) {
30580 old = fc_malloc(sizeof(*old));
30582 *old = *real_packet;
30584 } else {
30585 *old = *real_packet;
30586 }
30587
30588#else /* FREECIV_DELTA_PROTOCOL */
30589#ifdef FREECIV_JSON_CONNECTION
30590 field_addr.name = "count";
30591#endif /* FREECIV_JSON_CONNECTION */
30592
30593 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30595 }
30596
30597#ifdef FREECIV_JSON_CONNECTION
30598 field_addr.name = "multipliers";
30599#endif /* FREECIV_JSON_CONNECTION */
30600
30601 {
30602 int i;
30603
30604 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30605 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30606 }
30607
30608#ifdef FREECIV_JSON_CONNECTION
30609 /* Enter array. */
30610 field_addr.sub_location = plocation_elem_new(0);
30611#endif /* FREECIV_JSON_CONNECTION */
30612
30613 for (i = 0; i < real_packet->count; i++) {
30614#ifdef FREECIV_JSON_CONNECTION
30615 /* Next array element */
30616 field_addr.sub_location->number = i;
30617#endif /* FREECIV_JSON_CONNECTION */
30618
30619 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30621 }
30622 }
30623
30624#ifdef FREECIV_JSON_CONNECTION
30625 /* Exit array. */
30626 FC_FREE(field_addr.sub_location);
30627#endif /* FREECIV_JSON_CONNECTION */
30628 }
30629#endif /* FREECIV_DELTA_PROTOCOL */
30630
30632#undef FREE_PACKET_STRUCT
30633}
30634
30636{
30637 const struct packet_player_multiplier *real_packet = packet;
30638 int e;
30640
30641 log_packet_detailed("packet_player_multiplier_100: sending info about ()");
30642
30643#ifdef FREECIV_DELTA_PROTOCOL
30646 bool differ;
30647 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_MULTIPLIER;
30648
30649 if (nullptr == *hash) {
30651 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30652 }
30653 BV_CLR_ALL(fields);
30654
30655 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30656 old = fc_malloc(sizeof(*old));
30657 /* temporary bitcopy just to insert correctly */
30658 *old = *real_packet;
30661 }
30662
30663 differ = (old->count != real_packet->count);
30664 if (differ) {
30665 BV_SET(fields, 0);
30666 }
30667
30668 differ = (old->count != real_packet->count);
30669 if (!differ) {
30670 int i;
30671
30672 for (i = 0; i < old->count; i++) {
30673 differ = (old->multipliers[i] != real_packet->multipliers[i]);
30674 if (differ) {
30675 break;
30676 }
30677 }
30678 }
30679 if (differ) {
30680 BV_SET(fields, 1);
30681 }
30682#endif /* FREECIV_DELTA_PROTOCOL */
30683
30684#ifdef FREECIV_JSON_CONNECTION
30685 struct plocation field_addr;
30686 {
30687 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30690 }
30691#endif /* FREECIV_JSON_CONNECTION */
30692
30693#ifdef FREECIV_DELTA_PROTOCOL
30694#ifdef FREECIV_JSON_CONNECTION
30695 field_addr.name = "fields";
30696#endif /* FREECIV_JSON_CONNECTION */
30697 e = 0;
30698 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30699 if (e) {
30700 log_packet_detailed("fields bitvector error detected");
30701 }
30702
30703 if (BV_ISSET(fields, 0)) {
30704 log_packet_detailed(" field 'count' has changed");
30705
30706#ifdef FREECIV_JSON_CONNECTION
30707 field_addr.name = "count";
30708#endif /* FREECIV_JSON_CONNECTION */
30709 e = 0;
30710
30711 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30712
30713 if (e) {
30714 log_packet_detailed("'count' field error detected");
30715 }
30716 }
30717
30718 if (BV_ISSET(fields, 1)) {
30719 log_packet_detailed(" field 'multipliers' has changed");
30720
30721#ifdef FREECIV_JSON_CONNECTION
30722 field_addr.name = "multipliers";
30723#endif /* FREECIV_JSON_CONNECTION */
30724 e = 0;
30725
30726 {
30727 int i;
30728
30729#ifdef FREECIV_JSON_CONNECTION
30730 /* Create the array. */
30731 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30732
30733 /* Enter array. */
30734 field_addr.sub_location = plocation_elem_new(0);
30735#endif /* FREECIV_JSON_CONNECTION */
30736
30737 for (i = 0; i < real_packet->count; i++) {
30738#ifdef FREECIV_JSON_CONNECTION
30739 /* Next array element. */
30740 field_addr.sub_location->number = i;
30741#endif /* FREECIV_JSON_CONNECTION */
30742
30743 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30744 }
30745
30746#ifdef FREECIV_JSON_CONNECTION
30747 /* Exit array. */
30748 FC_FREE(field_addr.sub_location);
30749#endif /* FREECIV_JSON_CONNECTION */
30750 }
30751
30752 if (e) {
30753 log_packet_detailed("'multipliers' field error detected");
30754 }
30755 }
30756
30757 *old = *real_packet;
30758
30759#else /* FREECIV_DELTA_PROTOCOL */
30760#ifdef FREECIV_JSON_CONNECTION
30761 field_addr.name = "count";
30762#endif /* FREECIV_JSON_CONNECTION */
30763 e = 0;
30764
30765 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30766
30767 if (e) {
30768 log_packet_detailed("'count' field error detected");
30769 }
30770
30771#ifdef FREECIV_JSON_CONNECTION
30772 field_addr.name = "multipliers";
30773#endif /* FREECIV_JSON_CONNECTION */
30774 e = 0;
30775
30776 {
30777 int i;
30778
30779#ifdef FREECIV_JSON_CONNECTION
30780 /* Create the array. */
30781 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30782
30783 /* Enter array. */
30784 field_addr.sub_location = plocation_elem_new(0);
30785#endif /* FREECIV_JSON_CONNECTION */
30786
30787 for (i = 0; i < real_packet->count; i++) {
30788#ifdef FREECIV_JSON_CONNECTION
30789 /* Next array element. */
30790 field_addr.sub_location->number = i;
30791#endif /* FREECIV_JSON_CONNECTION */
30792
30793 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30794 }
30795
30796#ifdef FREECIV_JSON_CONNECTION
30797 /* Exit array. */
30798 FC_FREE(field_addr.sub_location);
30799#endif /* FREECIV_JSON_CONNECTION */
30800 }
30801
30802 if (e) {
30803 log_packet_detailed("'multipliers' field error detected");
30804 }
30805#endif /* FREECIV_DELTA_PROTOCOL */
30806
30808}
30809
30811{
30812 if (!pc->used) {
30813 log_error("WARNING: trying to send data to the closed connection %s",
30815 return -1;
30816 }
30817 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet != nullptr, -1,
30818 "Handler for PACKET_PLAYER_MULTIPLIER not installed");
30819 return pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet(pc, packet);
30820}
30821
30822static inline void init_packet_research_info(struct packet_research_info *packet)
30823{
30824 memset(packet, 0, sizeof(*packet));
30825}
30826
30827#define free_packet_research_info(_packet) (void) 0
30828#define destroy_packet_research_info free
30829
30830#ifdef FREECIV_DELTA_PROTOCOL
30832{
30833 const struct packet_research_info *key = (const struct packet_research_info *) vkey;
30834 genhash_val_t result = 0;
30835
30836 result += key->id;
30837
30838 result &= 0xFFFFFFFF;
30839 return result;
30840}
30841
30842static bool cmp_packet_research_info_100(const void *vkey1, const void *vkey2)
30843{
30844 const struct packet_research_info *old = (const struct packet_research_info *) vkey1;
30845 const struct packet_research_info *real_packet = (const struct packet_research_info *) vkey2;
30846 bool differ;
30847
30848 differ = (old->id != real_packet->id);
30849
30850 return !differ;
30851}
30853#endif /* FREECIV_DELTA_PROTOCOL */
30854
30856{
30857#define FREE_PACKET_STRUCT(_packet) free_packet_research_info(_packet)
30859
30860#ifdef FREECIV_JSON_CONNECTION
30861 struct plocation field_addr;
30862 {
30863 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30866 }
30867#endif /* FREECIV_JSON_CONNECTION */
30868
30869#ifdef FREECIV_JSON_CONNECTION
30870 field_addr.name = "id";
30871#endif /* FREECIV_JSON_CONNECTION */
30872
30873 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
30875 }
30876
30877 log_packet_detailed("packet_research_info_100: got info about (%d)",
30878 real_packet->id);
30879
30880#ifdef FREECIV_DELTA_PROTOCOL
30882 struct packet_research_info *old;
30883 struct genhash **hash = pc->phs.received + PACKET_RESEARCH_INFO;
30884
30885 if (nullptr == *hash) {
30887 nullptr, nullptr, nullptr, destroy_packet_research_info);
30888 }
30889
30890 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30891 *real_packet = *old;
30892 } else {
30893 /* packet is already initialized empty */
30894 log_packet_detailed(" no old info");
30895 }
30896
30897#ifdef FREECIV_JSON_CONNECTION
30898 field_addr.name = "fields";
30899#endif /* FREECIV_JSON_CONNECTION */
30900 DIO_BV_GET(&din, &field_addr, fields);
30901
30902 if (BV_ISSET(fields, 0)) {
30903 log_packet_detailed(" got field 'techs_researched'");
30904
30905#ifdef FREECIV_JSON_CONNECTION
30906 field_addr.name = "techs_researched";
30907#endif /* FREECIV_JSON_CONNECTION */
30908
30909 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
30910 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
30911 }
30912 }
30913
30914 if (BV_ISSET(fields, 1)) {
30915 log_packet_detailed(" got field 'future_tech'");
30916
30917#ifdef FREECIV_JSON_CONNECTION
30918 field_addr.name = "future_tech";
30919#endif /* FREECIV_JSON_CONNECTION */
30920
30921 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
30922 RECEIVE_PACKET_FIELD_ERROR(future_tech);
30923 }
30924 }
30925
30926 if (BV_ISSET(fields, 2)) {
30927 log_packet_detailed(" got field 'researching'");
30928
30929#ifdef FREECIV_JSON_CONNECTION
30930 field_addr.name = "researching";
30931#endif /* FREECIV_JSON_CONNECTION */
30932
30933 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
30934 RECEIVE_PACKET_FIELD_ERROR(researching);
30935 }
30936 }
30937
30938 if (BV_ISSET(fields, 3)) {
30939 log_packet_detailed(" got field 'researching_cost'");
30940
30941#ifdef FREECIV_JSON_CONNECTION
30942 field_addr.name = "researching_cost";
30943#endif /* FREECIV_JSON_CONNECTION */
30944
30945 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
30946 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
30947 }
30948 }
30949
30950 if (BV_ISSET(fields, 4)) {
30951 log_packet_detailed(" got field 'bulbs_researched'");
30952
30953#ifdef FREECIV_JSON_CONNECTION
30954 field_addr.name = "bulbs_researched";
30955#endif /* FREECIV_JSON_CONNECTION */
30956
30957 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
30958 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
30959 }
30960 }
30961
30962 if (BV_ISSET(fields, 5)) {
30963 log_packet_detailed(" got field 'tech_goal'");
30964
30965#ifdef FREECIV_JSON_CONNECTION
30966 field_addr.name = "tech_goal";
30967#endif /* FREECIV_JSON_CONNECTION */
30968
30969 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
30970 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
30971 }
30972 }
30973
30974 if (BV_ISSET(fields, 6)) {
30975 log_packet_detailed(" got field 'total_bulbs_prod'");
30976
30977#ifdef FREECIV_JSON_CONNECTION
30978 field_addr.name = "total_bulbs_prod";
30979#endif /* FREECIV_JSON_CONNECTION */
30980
30981 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
30982 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
30983 }
30984 }
30985
30986 if (BV_ISSET(fields, 7)) {
30987 log_packet_detailed(" got field 'inventions'");
30988
30989#ifdef FREECIV_JSON_CONNECTION
30990 field_addr.name = "inventions";
30991#endif /* FREECIV_JSON_CONNECTION */
30992
30993 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
30994 RECEIVE_PACKET_FIELD_ERROR(inventions);
30995 }
30996 }
30997
30998 if (nullptr == old) {
30999 old = fc_malloc(sizeof(*old));
31001 *old = *real_packet;
31003 } else {
31004 *old = *real_packet;
31005 }
31006
31007#else /* FREECIV_DELTA_PROTOCOL */
31008#ifdef FREECIV_JSON_CONNECTION
31009 field_addr.name = "techs_researched";
31010#endif /* FREECIV_JSON_CONNECTION */
31011
31012 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
31013 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
31014 }
31015
31016#ifdef FREECIV_JSON_CONNECTION
31017 field_addr.name = "future_tech";
31018#endif /* FREECIV_JSON_CONNECTION */
31019
31020 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
31021 RECEIVE_PACKET_FIELD_ERROR(future_tech);
31022 }
31023
31024#ifdef FREECIV_JSON_CONNECTION
31025 field_addr.name = "researching";
31026#endif /* FREECIV_JSON_CONNECTION */
31027
31028 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
31029 RECEIVE_PACKET_FIELD_ERROR(researching);
31030 }
31031
31032#ifdef FREECIV_JSON_CONNECTION
31033 field_addr.name = "researching_cost";
31034#endif /* FREECIV_JSON_CONNECTION */
31035
31036 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
31037 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
31038 }
31039
31040#ifdef FREECIV_JSON_CONNECTION
31041 field_addr.name = "bulbs_researched";
31042#endif /* FREECIV_JSON_CONNECTION */
31043
31044 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
31045 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
31046 }
31047
31048#ifdef FREECIV_JSON_CONNECTION
31049 field_addr.name = "tech_goal";
31050#endif /* FREECIV_JSON_CONNECTION */
31051
31052 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
31053 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
31054 }
31055
31056#ifdef FREECIV_JSON_CONNECTION
31057 field_addr.name = "total_bulbs_prod";
31058#endif /* FREECIV_JSON_CONNECTION */
31059
31060 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
31061 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
31062 }
31063
31064#ifdef FREECIV_JSON_CONNECTION
31065 field_addr.name = "inventions";
31066#endif /* FREECIV_JSON_CONNECTION */
31067
31068 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
31069 RECEIVE_PACKET_FIELD_ERROR(inventions);
31070 }
31071#endif /* FREECIV_DELTA_PROTOCOL */
31072
31074#undef FREE_PACKET_STRUCT
31075}
31076
31077static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
31078{
31079 const struct packet_research_info *real_packet = packet;
31080 int e;
31082
31083 log_packet_detailed("packet_research_info_100: sending info about (%d)",
31084 real_packet->id);
31085
31086#ifdef FREECIV_DELTA_PROTOCOL
31088 struct packet_research_info *old;
31089 bool differ;
31090 int different = 0;
31091 struct genhash **hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31092
31093 if (nullptr == *hash) {
31095 nullptr, nullptr, nullptr, destroy_packet_research_info);
31096 }
31097 BV_CLR_ALL(fields);
31098
31099 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31100 old = fc_malloc(sizeof(*old));
31101 /* temporary bitcopy just to insert correctly */
31102 *old = *real_packet;
31105 different = 1; /* Force to send. */
31106 }
31107
31108 differ = (old->techs_researched != real_packet->techs_researched);
31109 if (differ) {
31110 different++;
31111 BV_SET(fields, 0);
31112 }
31113
31114 differ = (old->future_tech != real_packet->future_tech);
31115 if (differ) {
31116 different++;
31117 BV_SET(fields, 1);
31118 }
31119
31120 differ = (old->researching != real_packet->researching);
31121 if (differ) {
31122 different++;
31123 BV_SET(fields, 2);
31124 }
31125
31126 differ = (old->researching_cost != real_packet->researching_cost);
31127 if (differ) {
31128 different++;
31129 BV_SET(fields, 3);
31130 }
31131
31132 differ = (old->bulbs_researched != real_packet->bulbs_researched);
31133 if (differ) {
31134 different++;
31135 BV_SET(fields, 4);
31136 }
31137
31138 differ = (old->tech_goal != real_packet->tech_goal);
31139 if (differ) {
31140 different++;
31141 BV_SET(fields, 5);
31142 }
31143
31144 differ = (old->total_bulbs_prod != real_packet->total_bulbs_prod);
31145 if (differ) {
31146 different++;
31147 BV_SET(fields, 6);
31148 }
31149
31150 differ = (strcmp(old->inventions, real_packet->inventions) != 0);
31151 if (differ) {
31152 different++;
31153 BV_SET(fields, 7);
31154 }
31155
31156 if (different == 0) {
31157 log_packet_detailed(" no change -> discard");
31159 }
31160#endif /* FREECIV_DELTA_PROTOCOL */
31161
31162#ifdef FREECIV_JSON_CONNECTION
31163 struct plocation field_addr;
31164 {
31165 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31168 }
31169#endif /* FREECIV_JSON_CONNECTION */
31170
31171#ifdef FREECIV_JSON_CONNECTION
31172 field_addr.name = "id";
31173#endif /* FREECIV_JSON_CONNECTION */
31174 e = 0;
31175
31176 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31177
31178 if (e) {
31179 log_packet_detailed("'id' field error detected");
31180 }
31181
31182#ifdef FREECIV_DELTA_PROTOCOL
31183#ifdef FREECIV_JSON_CONNECTION
31184 field_addr.name = "fields";
31185#endif /* FREECIV_JSON_CONNECTION */
31186 e = 0;
31187 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31188 if (e) {
31189 log_packet_detailed("fields bitvector error detected");
31190 }
31191
31192 if (BV_ISSET(fields, 0)) {
31193 log_packet_detailed(" field 'techs_researched' has changed");
31194
31195#ifdef FREECIV_JSON_CONNECTION
31196 field_addr.name = "techs_researched";
31197#endif /* FREECIV_JSON_CONNECTION */
31198 e = 0;
31199
31200 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31201
31202 if (e) {
31203 log_packet_detailed("'techs_researched' field error detected");
31204 }
31205 }
31206
31207 if (BV_ISSET(fields, 1)) {
31208 log_packet_detailed(" field 'future_tech' has changed");
31209
31210#ifdef FREECIV_JSON_CONNECTION
31211 field_addr.name = "future_tech";
31212#endif /* FREECIV_JSON_CONNECTION */
31213 e = 0;
31214
31215 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31216
31217 if (e) {
31218 log_packet_detailed("'future_tech' field error detected");
31219 }
31220 }
31221
31222 if (BV_ISSET(fields, 2)) {
31223 log_packet_detailed(" field 'researching' has changed");
31224
31225#ifdef FREECIV_JSON_CONNECTION
31226 field_addr.name = "researching";
31227#endif /* FREECIV_JSON_CONNECTION */
31228 e = 0;
31229
31230 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31231
31232 if (e) {
31233 log_packet_detailed("'researching' field error detected");
31234 }
31235 }
31236
31237 if (BV_ISSET(fields, 3)) {
31238 log_packet_detailed(" field 'researching_cost' has changed");
31239
31240#ifdef FREECIV_JSON_CONNECTION
31241 field_addr.name = "researching_cost";
31242#endif /* FREECIV_JSON_CONNECTION */
31243 e = 0;
31244
31245 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31246
31247 if (e) {
31248 log_packet_detailed("'researching_cost' field error detected");
31249 }
31250 }
31251
31252 if (BV_ISSET(fields, 4)) {
31253 log_packet_detailed(" field 'bulbs_researched' has changed");
31254
31255#ifdef FREECIV_JSON_CONNECTION
31256 field_addr.name = "bulbs_researched";
31257#endif /* FREECIV_JSON_CONNECTION */
31258 e = 0;
31259
31260 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
31261
31262 if (e) {
31263 log_packet_detailed("'bulbs_researched' field error detected");
31264 }
31265 }
31266
31267 if (BV_ISSET(fields, 5)) {
31268 log_packet_detailed(" field 'tech_goal' has changed");
31269
31270#ifdef FREECIV_JSON_CONNECTION
31271 field_addr.name = "tech_goal";
31272#endif /* FREECIV_JSON_CONNECTION */
31273 e = 0;
31274
31275 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31276
31277 if (e) {
31278 log_packet_detailed("'tech_goal' field error detected");
31279 }
31280 }
31281
31282 if (BV_ISSET(fields, 6)) {
31283 log_packet_detailed(" field 'total_bulbs_prod' has changed");
31284
31285#ifdef FREECIV_JSON_CONNECTION
31286 field_addr.name = "total_bulbs_prod";
31287#endif /* FREECIV_JSON_CONNECTION */
31288 e = 0;
31289
31290 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31291
31292 if (e) {
31293 log_packet_detailed("'total_bulbs_prod' field error detected");
31294 }
31295 }
31296
31297 if (BV_ISSET(fields, 7)) {
31298 log_packet_detailed(" field 'inventions' has changed");
31299
31300#ifdef FREECIV_JSON_CONNECTION
31301 field_addr.name = "inventions";
31302#endif /* FREECIV_JSON_CONNECTION */
31303 e = 0;
31304
31305 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31306
31307 if (e) {
31308 log_packet_detailed("'inventions' field error detected");
31309 }
31310 }
31311
31312 *old = *real_packet;
31313
31314#else /* FREECIV_DELTA_PROTOCOL */
31315#ifdef FREECIV_JSON_CONNECTION
31316 field_addr.name = "techs_researched";
31317#endif /* FREECIV_JSON_CONNECTION */
31318 e = 0;
31319
31320 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31321
31322 if (e) {
31323 log_packet_detailed("'techs_researched' field error detected");
31324 }
31325
31326#ifdef FREECIV_JSON_CONNECTION
31327 field_addr.name = "future_tech";
31328#endif /* FREECIV_JSON_CONNECTION */
31329 e = 0;
31330
31331 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31332
31333 if (e) {
31334 log_packet_detailed("'future_tech' field error detected");
31335 }
31336
31337#ifdef FREECIV_JSON_CONNECTION
31338 field_addr.name = "researching";
31339#endif /* FREECIV_JSON_CONNECTION */
31340 e = 0;
31341
31342 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31343
31344 if (e) {
31345 log_packet_detailed("'researching' field error detected");
31346 }
31347
31348#ifdef FREECIV_JSON_CONNECTION
31349 field_addr.name = "researching_cost";
31350#endif /* FREECIV_JSON_CONNECTION */
31351 e = 0;
31352
31353 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31354
31355 if (e) {
31356 log_packet_detailed("'researching_cost' field error detected");
31357 }
31358
31359#ifdef FREECIV_JSON_CONNECTION
31360 field_addr.name = "bulbs_researched";
31361#endif /* FREECIV_JSON_CONNECTION */
31362 e = 0;
31363
31364 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
31365
31366 if (e) {
31367 log_packet_detailed("'bulbs_researched' field error detected");
31368 }
31369
31370#ifdef FREECIV_JSON_CONNECTION
31371 field_addr.name = "tech_goal";
31372#endif /* FREECIV_JSON_CONNECTION */
31373 e = 0;
31374
31375 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31376
31377 if (e) {
31378 log_packet_detailed("'tech_goal' field error detected");
31379 }
31380
31381#ifdef FREECIV_JSON_CONNECTION
31382 field_addr.name = "total_bulbs_prod";
31383#endif /* FREECIV_JSON_CONNECTION */
31384 e = 0;
31385
31386 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31387
31388 if (e) {
31389 log_packet_detailed("'total_bulbs_prod' field error detected");
31390 }
31391
31392#ifdef FREECIV_JSON_CONNECTION
31393 field_addr.name = "inventions";
31394#endif /* FREECIV_JSON_CONNECTION */
31395 e = 0;
31396
31397 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31398
31399 if (e) {
31400 log_packet_detailed("'inventions' field error detected");
31401 }
31402#endif /* FREECIV_DELTA_PROTOCOL */
31403
31405}
31406
31408{
31409 if (!pc->used) {
31410 log_error("WARNING: trying to send data to the closed connection %s",
31412 return -1;
31413 }
31414 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet != nullptr, -1,
31415 "Handler for PACKET_RESEARCH_INFO not installed");
31416 return pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet(pc, packet);
31417}
31418
31419void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
31420{
31421 conn_list_iterate(dest, pconn) {
31424}
31425
31427{
31428 memset(packet, 0, sizeof(*packet));
31429}
31430
31431#define free_packet_unknown_research(_packet) (void) 0
31432#define destroy_packet_unknown_research free
31433
31434#ifdef FREECIV_DELTA_PROTOCOL
31435#define hash_packet_unknown_research_100 hash_const
31436#define cmp_packet_unknown_research_100 cmp_const
31438#endif /* FREECIV_DELTA_PROTOCOL */
31439
31441{
31442#define FREE_PACKET_STRUCT(_packet) free_packet_unknown_research(_packet)
31444
31445#ifdef FREECIV_JSON_CONNECTION
31446 struct plocation field_addr;
31447 {
31448 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31451 }
31452#endif /* FREECIV_JSON_CONNECTION */
31453
31454 log_packet_detailed("packet_unknown_research_100: got info about ()");
31455
31456#ifdef FREECIV_DELTA_PROTOCOL
31459 struct genhash **hash = pc->phs.received + PACKET_UNKNOWN_RESEARCH;
31460
31461 if (nullptr == *hash) {
31463 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31464 }
31465
31466 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31467 *real_packet = *old;
31468 } else {
31469 /* packet is already initialized empty */
31470 log_packet_detailed(" no old info");
31471 }
31472
31473#ifdef FREECIV_JSON_CONNECTION
31474 field_addr.name = "fields";
31475#endif /* FREECIV_JSON_CONNECTION */
31476 DIO_BV_GET(&din, &field_addr, fields);
31477
31478 if (BV_ISSET(fields, 0)) {
31479 log_packet_detailed(" got field 'id'");
31480
31481#ifdef FREECIV_JSON_CONNECTION
31482 field_addr.name = "id";
31483#endif /* FREECIV_JSON_CONNECTION */
31484
31485 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31487 }
31488 }
31489
31490 if (nullptr == old) {
31491 old = fc_malloc(sizeof(*old));
31493 *old = *real_packet;
31495 } else {
31496 *old = *real_packet;
31497 }
31498
31499 hash = pc->phs.received + PACKET_RESEARCH_INFO;
31500 if (nullptr != *hash) {
31502 }
31503
31504#else /* FREECIV_DELTA_PROTOCOL */
31505#ifdef FREECIV_JSON_CONNECTION
31506 field_addr.name = "id";
31507#endif /* FREECIV_JSON_CONNECTION */
31508
31509 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31511 }
31512#endif /* FREECIV_DELTA_PROTOCOL */
31513
31515#undef FREE_PACKET_STRUCT
31516}
31517
31519{
31520 const struct packet_unknown_research *real_packet = packet;
31521 int e;
31523
31524 log_packet_detailed("packet_unknown_research_100: sending info about ()");
31525
31526#ifdef FREECIV_DELTA_PROTOCOL
31529 bool differ;
31530 int different = 0;
31531 struct genhash **hash = pc->phs.sent + PACKET_UNKNOWN_RESEARCH;
31532
31533 if (nullptr == *hash) {
31535 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31536 }
31537 BV_CLR_ALL(fields);
31538
31539 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31540 old = fc_malloc(sizeof(*old));
31541 /* temporary bitcopy just to insert correctly */
31542 *old = *real_packet;
31545 different = 1; /* Force to send. */
31546 }
31547
31548 differ = (old->id != real_packet->id);
31549 if (differ) {
31550 different++;
31551 BV_SET(fields, 0);
31552 }
31553
31554 if (different == 0) {
31555 log_packet_detailed(" no change -> discard");
31557 }
31558#endif /* FREECIV_DELTA_PROTOCOL */
31559
31560#ifdef FREECIV_JSON_CONNECTION
31561 struct plocation field_addr;
31562 {
31563 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31566 }
31567#endif /* FREECIV_JSON_CONNECTION */
31568
31569#ifdef FREECIV_DELTA_PROTOCOL
31570#ifdef FREECIV_JSON_CONNECTION
31571 field_addr.name = "fields";
31572#endif /* FREECIV_JSON_CONNECTION */
31573 e = 0;
31574 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31575 if (e) {
31576 log_packet_detailed("fields bitvector error detected");
31577 }
31578
31579 if (BV_ISSET(fields, 0)) {
31580 log_packet_detailed(" field 'id' has changed");
31581
31582#ifdef FREECIV_JSON_CONNECTION
31583 field_addr.name = "id";
31584#endif /* FREECIV_JSON_CONNECTION */
31585 e = 0;
31586
31587 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31588
31589 if (e) {
31590 log_packet_detailed("'id' field error detected");
31591 }
31592 }
31593
31594 *old = *real_packet;
31595
31596 hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31597 if (nullptr != *hash) {
31599 }
31600
31601#else /* FREECIV_DELTA_PROTOCOL */
31602#ifdef FREECIV_JSON_CONNECTION
31603 field_addr.name = "id";
31604#endif /* FREECIV_JSON_CONNECTION */
31605 e = 0;
31606
31607 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31608
31609 if (e) {
31610 log_packet_detailed("'id' field error detected");
31611 }
31612#endif /* FREECIV_DELTA_PROTOCOL */
31613
31615}
31616
31618{
31619 if (!pc->used) {
31620 log_error("WARNING: trying to send data to the closed connection %s",
31622 return -1;
31623 }
31624 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet != nullptr, -1,
31625 "Handler for PACKET_UNKNOWN_RESEARCH not installed");
31626 return pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet(pc, packet);
31627}
31628
31629static inline void init_packet_player_research(struct packet_player_research *packet)
31630{
31631 memset(packet, 0, sizeof(*packet));
31632}
31633
31634#define free_packet_player_research(_packet) (void) 0
31635#define destroy_packet_player_research free
31636
31637#ifdef FREECIV_DELTA_PROTOCOL
31638#define hash_packet_player_research_100 hash_const
31639#define cmp_packet_player_research_100 cmp_const
31641#endif /* FREECIV_DELTA_PROTOCOL */
31642
31644{
31645#define FREE_PACKET_STRUCT(_packet) free_packet_player_research(_packet)
31647
31648#ifdef FREECIV_JSON_CONNECTION
31649 struct plocation field_addr;
31650 {
31651 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31654 }
31655#endif /* FREECIV_JSON_CONNECTION */
31656
31657 log_packet_detailed("packet_player_research_100: got info about ()");
31658
31659#ifdef FREECIV_DELTA_PROTOCOL
31662 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RESEARCH;
31663
31664 if (nullptr == *hash) {
31666 nullptr, nullptr, nullptr, destroy_packet_player_research);
31667 }
31668
31669 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31670 *real_packet = *old;
31671 } else {
31672 /* packet is already initialized empty */
31673 log_packet_detailed(" no old info");
31674 }
31675
31676#ifdef FREECIV_JSON_CONNECTION
31677 field_addr.name = "fields";
31678#endif /* FREECIV_JSON_CONNECTION */
31679 DIO_BV_GET(&din, &field_addr, fields);
31680
31681 if (BV_ISSET(fields, 0)) {
31682 log_packet_detailed(" got field 'tech'");
31683
31684#ifdef FREECIV_JSON_CONNECTION
31685 field_addr.name = "tech";
31686#endif /* FREECIV_JSON_CONNECTION */
31687
31688 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31690 }
31691 }
31692
31693 if (nullptr == old) {
31694 old = fc_malloc(sizeof(*old));
31696 *old = *real_packet;
31698 } else {
31699 *old = *real_packet;
31700 }
31701
31702#else /* FREECIV_DELTA_PROTOCOL */
31703#ifdef FREECIV_JSON_CONNECTION
31704 field_addr.name = "tech";
31705#endif /* FREECIV_JSON_CONNECTION */
31706
31707 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31709 }
31710#endif /* FREECIV_DELTA_PROTOCOL */
31711
31713#undef FREE_PACKET_STRUCT
31714}
31715
31717{
31718 const struct packet_player_research *real_packet = packet;
31719 int e;
31721
31722 log_packet_detailed("packet_player_research_100: sending info about ()");
31723
31724#ifdef FREECIV_DELTA_PROTOCOL
31727 bool differ;
31728 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RESEARCH;
31729
31730 if (nullptr == *hash) {
31732 nullptr, nullptr, nullptr, destroy_packet_player_research);
31733 }
31734 BV_CLR_ALL(fields);
31735
31736 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31737 old = fc_malloc(sizeof(*old));
31738 /* temporary bitcopy just to insert correctly */
31739 *old = *real_packet;
31742 }
31743
31744 differ = (old->tech != real_packet->tech);
31745 if (differ) {
31746 BV_SET(fields, 0);
31747 }
31748#endif /* FREECIV_DELTA_PROTOCOL */
31749
31750#ifdef FREECIV_JSON_CONNECTION
31751 struct plocation field_addr;
31752 {
31753 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31756 }
31757#endif /* FREECIV_JSON_CONNECTION */
31758
31759#ifdef FREECIV_DELTA_PROTOCOL
31760#ifdef FREECIV_JSON_CONNECTION
31761 field_addr.name = "fields";
31762#endif /* FREECIV_JSON_CONNECTION */
31763 e = 0;
31764 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31765 if (e) {
31766 log_packet_detailed("fields bitvector error detected");
31767 }
31768
31769 if (BV_ISSET(fields, 0)) {
31770 log_packet_detailed(" field 'tech' has changed");
31771
31772#ifdef FREECIV_JSON_CONNECTION
31773 field_addr.name = "tech";
31774#endif /* FREECIV_JSON_CONNECTION */
31775 e = 0;
31776
31777 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31778
31779 if (e) {
31780 log_packet_detailed("'tech' field error detected");
31781 }
31782 }
31783
31784 *old = *real_packet;
31785
31786#else /* FREECIV_DELTA_PROTOCOL */
31787#ifdef FREECIV_JSON_CONNECTION
31788 field_addr.name = "tech";
31789#endif /* FREECIV_JSON_CONNECTION */
31790 e = 0;
31791
31792 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31793
31794 if (e) {
31795 log_packet_detailed("'tech' field error detected");
31796 }
31797#endif /* FREECIV_DELTA_PROTOCOL */
31798
31800}
31801
31803{
31804 if (!pc->used) {
31805 log_error("WARNING: trying to send data to the closed connection %s",
31807 return -1;
31808 }
31809 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet != nullptr, -1,
31810 "Handler for PACKET_PLAYER_RESEARCH not installed");
31811 return pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet(pc, packet);
31812}
31813
31815{
31816 struct packet_player_research packet, *real_packet = &packet;
31817
31819
31821}
31822
31824{
31825 memset(packet, 0, sizeof(*packet));
31826}
31827
31828#define free_packet_player_tech_goal(_packet) (void) 0
31829#define destroy_packet_player_tech_goal free
31830
31831#ifdef FREECIV_DELTA_PROTOCOL
31832#define hash_packet_player_tech_goal_100 hash_const
31833#define cmp_packet_player_tech_goal_100 cmp_const
31835#endif /* FREECIV_DELTA_PROTOCOL */
31836
31838{
31839#define FREE_PACKET_STRUCT(_packet) free_packet_player_tech_goal(_packet)
31841
31842#ifdef FREECIV_JSON_CONNECTION
31843 struct plocation field_addr;
31844 {
31845 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31848 }
31849#endif /* FREECIV_JSON_CONNECTION */
31850
31851 log_packet_detailed("packet_player_tech_goal_100: got info about ()");
31852
31853#ifdef FREECIV_DELTA_PROTOCOL
31856 struct genhash **hash = pc->phs.received + PACKET_PLAYER_TECH_GOAL;
31857
31858 if (nullptr == *hash) {
31860 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
31861 }
31862
31863 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31864 *real_packet = *old;
31865 } else {
31866 /* packet is already initialized empty */
31867 log_packet_detailed(" no old info");
31868 }
31869
31870#ifdef FREECIV_JSON_CONNECTION
31871 field_addr.name = "fields";
31872#endif /* FREECIV_JSON_CONNECTION */
31873 DIO_BV_GET(&din, &field_addr, fields);
31874
31875 if (BV_ISSET(fields, 0)) {
31876 log_packet_detailed(" got field 'tech'");
31877
31878#ifdef FREECIV_JSON_CONNECTION
31879 field_addr.name = "tech";
31880#endif /* FREECIV_JSON_CONNECTION */
31881
31882 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31884 }
31885 }
31886
31887 if (nullptr == old) {
31888 old = fc_malloc(sizeof(*old));
31890 *old = *real_packet;
31892 } else {
31893 *old = *real_packet;
31894 }
31895
31896#else /* FREECIV_DELTA_PROTOCOL */
31897#ifdef FREECIV_JSON_CONNECTION
31898 field_addr.name = "tech";
31899#endif /* FREECIV_JSON_CONNECTION */
31900
31901 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31903 }
31904#endif /* FREECIV_DELTA_PROTOCOL */
31905
31907#undef FREE_PACKET_STRUCT
31908}
31909
31911{
31912 const struct packet_player_tech_goal *real_packet = packet;
31913 int e;
31915
31916 log_packet_detailed("packet_player_tech_goal_100: sending info about ()");
31917
31918#ifdef FREECIV_DELTA_PROTOCOL
31921 bool differ;
31922 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_TECH_GOAL;
31923
31924 if (nullptr == *hash) {
31926 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
31927 }
31928 BV_CLR_ALL(fields);
31929
31930 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31931 old = fc_malloc(sizeof(*old));
31932 /* temporary bitcopy just to insert correctly */
31933 *old = *real_packet;
31936 }
31937
31938 differ = (old->tech != real_packet->tech);
31939 if (differ) {
31940 BV_SET(fields, 0);
31941 }
31942#endif /* FREECIV_DELTA_PROTOCOL */
31943
31944#ifdef FREECIV_JSON_CONNECTION
31945 struct plocation field_addr;
31946 {
31947 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31950 }
31951#endif /* FREECIV_JSON_CONNECTION */
31952
31953#ifdef FREECIV_DELTA_PROTOCOL
31954#ifdef FREECIV_JSON_CONNECTION
31955 field_addr.name = "fields";
31956#endif /* FREECIV_JSON_CONNECTION */
31957 e = 0;
31958 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31959 if (e) {
31960 log_packet_detailed("fields bitvector error detected");
31961 }
31962
31963 if (BV_ISSET(fields, 0)) {
31964 log_packet_detailed(" field 'tech' has changed");
31965
31966#ifdef FREECIV_JSON_CONNECTION
31967 field_addr.name = "tech";
31968#endif /* FREECIV_JSON_CONNECTION */
31969 e = 0;
31970
31971 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31972
31973 if (e) {
31974 log_packet_detailed("'tech' field error detected");
31975 }
31976 }
31977
31978 *old = *real_packet;
31979
31980#else /* FREECIV_DELTA_PROTOCOL */
31981#ifdef FREECIV_JSON_CONNECTION
31982 field_addr.name = "tech";
31983#endif /* FREECIV_JSON_CONNECTION */
31984 e = 0;
31985
31986 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31987
31988 if (e) {
31989 log_packet_detailed("'tech' field error detected");
31990 }
31991#endif /* FREECIV_DELTA_PROTOCOL */
31992
31994}
31995
31997{
31998 if (!pc->used) {
31999 log_error("WARNING: trying to send data to the closed connection %s",
32001 return -1;
32002 }
32003 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet != nullptr, -1,
32004 "Handler for PACKET_PLAYER_TECH_GOAL not installed");
32005 return pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet(pc, packet);
32006}
32007
32009{
32010 struct packet_player_tech_goal packet, *real_packet = &packet;
32011
32013
32015}
32016
32017static inline void init_packet_unit_remove(struct packet_unit_remove *packet)
32018{
32019 memset(packet, 0, sizeof(*packet));
32020}
32021
32022#define free_packet_unit_remove(_packet) (void) 0
32023#define destroy_packet_unit_remove free
32024
32025#ifdef FREECIV_DELTA_PROTOCOL
32026#define hash_packet_unit_remove_100 hash_const
32027#define cmp_packet_unit_remove_100 cmp_const
32029#endif /* FREECIV_DELTA_PROTOCOL */
32030
32032{
32033#define FREE_PACKET_STRUCT(_packet) free_packet_unit_remove(_packet)
32035
32036#ifdef FREECIV_JSON_CONNECTION
32037 struct plocation field_addr;
32038 {
32039 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32042 }
32043#endif /* FREECIV_JSON_CONNECTION */
32044
32045 log_packet_detailed("packet_unit_remove_100: got info about ()");
32046
32047#ifdef FREECIV_DELTA_PROTOCOL
32049 struct packet_unit_remove *old;
32050 struct genhash **hash = pc->phs.received + PACKET_UNIT_REMOVE;
32051
32052 if (nullptr == *hash) {
32054 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32055 }
32056
32057 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32058 *real_packet = *old;
32059 } else {
32060 /* packet is already initialized empty */
32061 log_packet_detailed(" no old info");
32062 }
32063
32064#ifdef FREECIV_JSON_CONNECTION
32065 field_addr.name = "fields";
32066#endif /* FREECIV_JSON_CONNECTION */
32067 DIO_BV_GET(&din, &field_addr, fields);
32068
32069 if (BV_ISSET(fields, 0)) {
32070 log_packet_detailed(" got field 'unit_id'");
32071
32072#ifdef FREECIV_JSON_CONNECTION
32073 field_addr.name = "unit_id";
32074#endif /* FREECIV_JSON_CONNECTION */
32075
32076 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32078 }
32079 }
32080
32081 if (nullptr == old) {
32082 old = fc_malloc(sizeof(*old));
32084 *old = *real_packet;
32086 } else {
32087 *old = *real_packet;
32088 }
32089
32090 hash = pc->phs.received + PACKET_UNIT_INFO;
32091 if (nullptr != *hash) {
32093 }
32094
32095 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32096 if (nullptr != *hash) {
32098 }
32099
32100#else /* FREECIV_DELTA_PROTOCOL */
32101#ifdef FREECIV_JSON_CONNECTION
32102 field_addr.name = "unit_id";
32103#endif /* FREECIV_JSON_CONNECTION */
32104
32105 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32107 }
32108#endif /* FREECIV_DELTA_PROTOCOL */
32109
32111#undef FREE_PACKET_STRUCT
32112}
32113
32114static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
32115{
32116 const struct packet_unit_remove *real_packet = packet;
32117 int e;
32119
32120 log_packet_detailed("packet_unit_remove_100: sending info about ()");
32121
32122#ifdef FREECIV_DELTA_PROTOCOL
32124 struct packet_unit_remove *old;
32125 bool differ;
32126 struct genhash **hash = pc->phs.sent + PACKET_UNIT_REMOVE;
32127
32128 if (nullptr == *hash) {
32130 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32131 }
32132 BV_CLR_ALL(fields);
32133
32134 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32135 old = fc_malloc(sizeof(*old));
32136 /* temporary bitcopy just to insert correctly */
32137 *old = *real_packet;
32140 }
32141
32142 differ = (old->unit_id != real_packet->unit_id);
32143 if (differ) {
32144 BV_SET(fields, 0);
32145 }
32146#endif /* FREECIV_DELTA_PROTOCOL */
32147
32148#ifdef FREECIV_JSON_CONNECTION
32149 struct plocation field_addr;
32150 {
32151 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32154 }
32155#endif /* FREECIV_JSON_CONNECTION */
32156
32157#ifdef FREECIV_DELTA_PROTOCOL
32158#ifdef FREECIV_JSON_CONNECTION
32159 field_addr.name = "fields";
32160#endif /* FREECIV_JSON_CONNECTION */
32161 e = 0;
32162 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32163 if (e) {
32164 log_packet_detailed("fields bitvector error detected");
32165 }
32166
32167 if (BV_ISSET(fields, 0)) {
32168 log_packet_detailed(" field 'unit_id' has changed");
32169
32170#ifdef FREECIV_JSON_CONNECTION
32171 field_addr.name = "unit_id";
32172#endif /* FREECIV_JSON_CONNECTION */
32173 e = 0;
32174
32175 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32176
32177 if (e) {
32178 log_packet_detailed("'unit_id' field error detected");
32179 }
32180 }
32181
32182 *old = *real_packet;
32183
32184 hash = pc->phs.sent + PACKET_UNIT_INFO;
32185 if (nullptr != *hash) {
32187 }
32188
32189 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
32190 if (nullptr != *hash) {
32192 }
32193
32194#else /* FREECIV_DELTA_PROTOCOL */
32195#ifdef FREECIV_JSON_CONNECTION
32196 field_addr.name = "unit_id";
32197#endif /* FREECIV_JSON_CONNECTION */
32198 e = 0;
32199
32200 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32201
32202 if (e) {
32203 log_packet_detailed("'unit_id' field error detected");
32204 }
32205#endif /* FREECIV_DELTA_PROTOCOL */
32206
32208}
32209
32211{
32212 if (!pc->used) {
32213 log_error("WARNING: trying to send data to the closed connection %s",
32215 return -1;
32216 }
32217 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet != nullptr, -1,
32218 "Handler for PACKET_UNIT_REMOVE not installed");
32219 return pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet(pc, packet);
32220}
32221
32222void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
32223{
32224 conn_list_iterate(dest, pconn) {
32227}
32228
32229int dsend_packet_unit_remove(struct connection *pc, int unit_id)
32230{
32231 struct packet_unit_remove packet, *real_packet = &packet;
32232
32234
32236}
32237
32239{
32240 struct packet_unit_remove packet, *real_packet = &packet;
32241
32243
32245}
32246
32247static inline void init_packet_unit_info(struct packet_unit_info *packet)
32248{
32249 memset(packet, 0, sizeof(*packet));
32250}
32251
32252#define free_packet_unit_info(_packet) (void) 0
32253#define destroy_packet_unit_info free
32254
32255#ifdef FREECIV_DELTA_PROTOCOL
32257{
32258 const struct packet_unit_info *key = (const struct packet_unit_info *) vkey;
32259 genhash_val_t result = 0;
32260
32261 result += key->id;
32262
32263 result &= 0xFFFFFFFF;
32264 return result;
32265}
32266
32267static bool cmp_packet_unit_info_100(const void *vkey1, const void *vkey2)
32268{
32269 const struct packet_unit_info *old = (const struct packet_unit_info *) vkey1;
32270 const struct packet_unit_info *real_packet = (const struct packet_unit_info *) vkey2;
32271 bool differ;
32272
32273 differ = (old->id != real_packet->id);
32274
32275 return !differ;
32276}
32278#endif /* FREECIV_DELTA_PROTOCOL */
32279
32281{
32282#define FREE_PACKET_STRUCT(_packet) free_packet_unit_info(_packet)
32284
32285#ifdef FREECIV_JSON_CONNECTION
32286 struct plocation field_addr;
32287 {
32288 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32291 }
32292#endif /* FREECIV_JSON_CONNECTION */
32293
32294#ifdef FREECIV_JSON_CONNECTION
32295 field_addr.name = "id";
32296#endif /* FREECIV_JSON_CONNECTION */
32297
32298 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
32300 }
32301
32302 log_packet_detailed("packet_unit_info_100: got info about (%d)",
32303 real_packet->id);
32304
32305#ifdef FREECIV_DELTA_PROTOCOL
32307 struct packet_unit_info *old;
32308 struct genhash **hash = pc->phs.received + PACKET_UNIT_INFO;
32309
32310 if (nullptr == *hash) {
32312 nullptr, nullptr, nullptr, destroy_packet_unit_info);
32313 }
32314
32315 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32316 *real_packet = *old;
32317 } else {
32318 /* packet is already initialized empty */
32319 log_packet_detailed(" no old info");
32320 }
32321
32322#ifdef FREECIV_JSON_CONNECTION
32323 field_addr.name = "fields";
32324#endif /* FREECIV_JSON_CONNECTION */
32325 DIO_BV_GET(&din, &field_addr, fields);
32326
32327 if (BV_ISSET(fields, 0)) {
32328 log_packet_detailed(" got field 'owner'");
32329
32330#ifdef FREECIV_JSON_CONNECTION
32331 field_addr.name = "owner";
32332#endif /* FREECIV_JSON_CONNECTION */
32333
32334 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32336 }
32337 }
32338
32339 if (BV_ISSET(fields, 1)) {
32340 log_packet_detailed(" got field 'nationality'");
32341
32342#ifdef FREECIV_JSON_CONNECTION
32343 field_addr.name = "nationality";
32344#endif /* FREECIV_JSON_CONNECTION */
32345
32346 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32347 RECEIVE_PACKET_FIELD_ERROR(nationality);
32348 }
32349 }
32350
32351 if (BV_ISSET(fields, 2)) {
32352 log_packet_detailed(" got field 'tile'");
32353
32354#ifdef FREECIV_JSON_CONNECTION
32355 field_addr.name = "tile";
32356#endif /* FREECIV_JSON_CONNECTION */
32357
32358 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32360 }
32361 }
32362
32363 if (BV_ISSET(fields, 3)) {
32364 log_packet_detailed(" got field 'facing'");
32365
32366#ifdef FREECIV_JSON_CONNECTION
32367 field_addr.name = "facing";
32368#endif /* FREECIV_JSON_CONNECTION */
32369
32370 {
32371 int readin;
32372
32373 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32375 }
32376 real_packet->facing = readin;
32377 }
32378 }
32379
32380 if (BV_ISSET(fields, 4)) {
32381 log_packet_detailed(" got field 'homecity'");
32382
32383#ifdef FREECIV_JSON_CONNECTION
32384 field_addr.name = "homecity";
32385#endif /* FREECIV_JSON_CONNECTION */
32386
32387 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32389 }
32390 }
32391
32392 if (BV_ISSET(fields, 5)) {
32393 log_packet_detailed(" got field 'upkeep'");
32394
32395#ifdef FREECIV_JSON_CONNECTION
32396 field_addr.name = "upkeep";
32397#endif /* FREECIV_JSON_CONNECTION */
32398
32399 {
32400 int i;
32401
32402
32403#ifdef FREECIV_JSON_CONNECTION
32404 /* Enter array. */
32405 field_addr.sub_location = plocation_elem_new(0);
32406#endif /* FREECIV_JSON_CONNECTION */
32407
32408 for (i = 0; i < O_LAST; i++) {
32409#ifdef FREECIV_JSON_CONNECTION
32410 /* Next array element */
32411 field_addr.sub_location->number = i;
32412#endif /* FREECIV_JSON_CONNECTION */
32413
32414 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32416 }
32417 }
32418
32419#ifdef FREECIV_JSON_CONNECTION
32420 /* Exit array. */
32421 FC_FREE(field_addr.sub_location);
32422#endif /* FREECIV_JSON_CONNECTION */
32423 }
32424 }
32425
32426 if (BV_ISSET(fields, 6)) {
32427 log_packet_detailed(" got field 'veteran'");
32428
32429#ifdef FREECIV_JSON_CONNECTION
32430 field_addr.name = "veteran";
32431#endif /* FREECIV_JSON_CONNECTION */
32432
32433 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32435 }
32436 }
32437
32438 if (BV_ISSET(fields, 7)) {
32439 log_packet_detailed(" got field 'ssa_controller'");
32440
32441#ifdef FREECIV_JSON_CONNECTION
32442 field_addr.name = "ssa_controller";
32443#endif /* FREECIV_JSON_CONNECTION */
32444
32445 {
32446 int readin;
32447
32448 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32449 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32450 }
32451 real_packet->ssa_controller = readin;
32452 }
32453 }
32454
32455 real_packet->paradropped = BV_ISSET(fields, 8);
32456
32457 real_packet->occupied = BV_ISSET(fields, 9);
32458
32459 real_packet->transported = BV_ISSET(fields, 10);
32460
32461 real_packet->done_moving = BV_ISSET(fields, 11);
32462
32463 real_packet->stay = BV_ISSET(fields, 12);
32464
32465 if (BV_ISSET(fields, 13)) {
32466 log_packet_detailed(" got field 'birth_turn'");
32467
32468#ifdef FREECIV_JSON_CONNECTION
32469 field_addr.name = "birth_turn";
32470#endif /* FREECIV_JSON_CONNECTION */
32471
32472 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
32473 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
32474 }
32475 }
32476
32477 if (BV_ISSET(fields, 14)) {
32478 log_packet_detailed(" got field 'current_form_turn'");
32479
32480#ifdef FREECIV_JSON_CONNECTION
32481 field_addr.name = "current_form_turn";
32482#endif /* FREECIV_JSON_CONNECTION */
32483
32484 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
32485 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
32486 }
32487 }
32488
32489 if (BV_ISSET(fields, 15)) {
32490 log_packet_detailed(" got field 'type'");
32491
32492#ifdef FREECIV_JSON_CONNECTION
32493 field_addr.name = "type";
32494#endif /* FREECIV_JSON_CONNECTION */
32495
32496 {
32497 int readin;
32498
32499 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32501 }
32502 real_packet->type = readin;
32503 }
32504 }
32505
32506 if (BV_ISSET(fields, 16)) {
32507 log_packet_detailed(" got field 'transported_by'");
32508
32509#ifdef FREECIV_JSON_CONNECTION
32510 field_addr.name = "transported_by";
32511#endif /* FREECIV_JSON_CONNECTION */
32512
32513 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32514 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32515 }
32516 }
32517
32518 if (BV_ISSET(fields, 17)) {
32519 log_packet_detailed(" got field 'carrying'");
32520
32521#ifdef FREECIV_JSON_CONNECTION
32522 field_addr.name = "carrying";
32523#endif /* FREECIV_JSON_CONNECTION */
32524
32525 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
32527 }
32528 }
32529
32530 if (BV_ISSET(fields, 18)) {
32531 log_packet_detailed(" got field 'movesleft'");
32532
32533#ifdef FREECIV_JSON_CONNECTION
32534 field_addr.name = "movesleft";
32535#endif /* FREECIV_JSON_CONNECTION */
32536
32537 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
32538 RECEIVE_PACKET_FIELD_ERROR(movesleft);
32539 }
32540 }
32541
32542 if (BV_ISSET(fields, 19)) {
32543 log_packet_detailed(" got field 'hp'");
32544
32545#ifdef FREECIV_JSON_CONNECTION
32546 field_addr.name = "hp";
32547#endif /* FREECIV_JSON_CONNECTION */
32548
32549 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32551 }
32552 }
32553
32554 if (BV_ISSET(fields, 20)) {
32555 log_packet_detailed(" got field 'fuel'");
32556
32557#ifdef FREECIV_JSON_CONNECTION
32558 field_addr.name = "fuel";
32559#endif /* FREECIV_JSON_CONNECTION */
32560
32561 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
32563 }
32564 }
32565
32566 if (BV_ISSET(fields, 21)) {
32567 log_packet_detailed(" got field 'activity_count'");
32568
32569#ifdef FREECIV_JSON_CONNECTION
32570 field_addr.name = "activity_count";
32571#endif /* FREECIV_JSON_CONNECTION */
32572
32573 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
32574 RECEIVE_PACKET_FIELD_ERROR(activity_count);
32575 }
32576 }
32577
32578 if (BV_ISSET(fields, 22)) {
32579 log_packet_detailed(" got field 'changed_from_count'");
32580
32581#ifdef FREECIV_JSON_CONNECTION
32582 field_addr.name = "changed_from_count";
32583#endif /* FREECIV_JSON_CONNECTION */
32584
32585 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
32586 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
32587 }
32588 }
32589
32590 if (BV_ISSET(fields, 23)) {
32591 log_packet_detailed(" got field 'goto_tile'");
32592
32593#ifdef FREECIV_JSON_CONNECTION
32594 field_addr.name = "goto_tile";
32595#endif /* FREECIV_JSON_CONNECTION */
32596
32597 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
32598 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
32599 }
32600 }
32601
32602 if (BV_ISSET(fields, 24)) {
32603 log_packet_detailed(" got field 'activity'");
32604
32605#ifdef FREECIV_JSON_CONNECTION
32606 field_addr.name = "activity";
32607#endif /* FREECIV_JSON_CONNECTION */
32608
32609 {
32610 int readin;
32611
32612 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32614 }
32615 real_packet->activity = readin;
32616 }
32617 }
32618
32619 if (BV_ISSET(fields, 25)) {
32620 log_packet_detailed(" got field 'activity_tgt'");
32621
32622#ifdef FREECIV_JSON_CONNECTION
32623 field_addr.name = "activity_tgt";
32624#endif /* FREECIV_JSON_CONNECTION */
32625
32626 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
32627 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
32628 }
32629 }
32630
32631 if (BV_ISSET(fields, 26)) {
32632 log_packet_detailed(" got field 'changed_from'");
32633
32634#ifdef FREECIV_JSON_CONNECTION
32635 field_addr.name = "changed_from";
32636#endif /* FREECIV_JSON_CONNECTION */
32637
32638 {
32639 int readin;
32640
32641 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32642 RECEIVE_PACKET_FIELD_ERROR(changed_from);
32643 }
32644 real_packet->changed_from = readin;
32645 }
32646 }
32647
32648 if (BV_ISSET(fields, 27)) {
32649 log_packet_detailed(" got field 'changed_from_tgt'");
32650
32651#ifdef FREECIV_JSON_CONNECTION
32652 field_addr.name = "changed_from_tgt";
32653#endif /* FREECIV_JSON_CONNECTION */
32654
32655 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
32656 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
32657 }
32658 }
32659
32660 if (BV_ISSET(fields, 28)) {
32661 log_packet_detailed(" got field 'battlegroup'");
32662
32663#ifdef FREECIV_JSON_CONNECTION
32664 field_addr.name = "battlegroup";
32665#endif /* FREECIV_JSON_CONNECTION */
32666
32667 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
32668 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
32669 }
32670 }
32671
32672 real_packet->has_orders = BV_ISSET(fields, 29);
32673
32674 if (BV_ISSET(fields, 30)) {
32675 log_packet_detailed(" got field 'orders_length'");
32676
32677#ifdef FREECIV_JSON_CONNECTION
32678 field_addr.name = "orders_length";
32679#endif /* FREECIV_JSON_CONNECTION */
32680
32681 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
32682 RECEIVE_PACKET_FIELD_ERROR(orders_length);
32683 }
32684 }
32685
32686 if (BV_ISSET(fields, 31)) {
32687 log_packet_detailed(" got field 'orders_index'");
32688
32689#ifdef FREECIV_JSON_CONNECTION
32690 field_addr.name = "orders_index";
32691#endif /* FREECIV_JSON_CONNECTION */
32692
32693 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
32694 RECEIVE_PACKET_FIELD_ERROR(orders_index);
32695 }
32696 }
32697
32698 real_packet->orders_repeat = BV_ISSET(fields, 32);
32699
32700 real_packet->orders_vigilant = BV_ISSET(fields, 33);
32701
32702 if (BV_ISSET(fields, 34)) {
32703 log_packet_detailed(" got field 'orders'");
32704
32705#ifdef FREECIV_JSON_CONNECTION
32706 field_addr.name = "orders";
32707#endif /* FREECIV_JSON_CONNECTION */
32708
32709 {
32710 int i;
32711
32712 if (real_packet->orders_length > MAX_LEN_ROUTE) {
32713 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
32714 }
32715
32716#ifdef FREECIV_JSON_CONNECTION
32717 /* Enter array. */
32718 field_addr.sub_location = plocation_elem_new(0);
32719#endif /* FREECIV_JSON_CONNECTION */
32720
32721 for (i = 0; i < real_packet->orders_length; i++) {
32722#ifdef FREECIV_JSON_CONNECTION
32723 /* Next array element */
32724 field_addr.sub_location->number = i;
32725#endif /* FREECIV_JSON_CONNECTION */
32726
32727 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
32729 }
32730 }
32731
32732#ifdef FREECIV_JSON_CONNECTION
32733 /* Exit array. */
32734 FC_FREE(field_addr.sub_location);
32735#endif /* FREECIV_JSON_CONNECTION */
32736 }
32737 }
32738
32739 if (BV_ISSET(fields, 35)) {
32740 log_packet_detailed(" got field 'action_decision_want'");
32741
32742#ifdef FREECIV_JSON_CONNECTION
32743 field_addr.name = "action_decision_want";
32744#endif /* FREECIV_JSON_CONNECTION */
32745
32746 {
32747 int readin;
32748
32749 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32750 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
32751 }
32752 real_packet->action_decision_want = readin;
32753 }
32754 }
32755
32756 if (BV_ISSET(fields, 36)) {
32757 log_packet_detailed(" got field 'action_decision_tile'");
32758
32759#ifdef FREECIV_JSON_CONNECTION
32760 field_addr.name = "action_decision_tile";
32761#endif /* FREECIV_JSON_CONNECTION */
32762
32763 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
32764 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
32765 }
32766 }
32767
32768 if (nullptr == old) {
32769 old = fc_malloc(sizeof(*old));
32771 *old = *real_packet;
32773 } else {
32774 *old = *real_packet;
32775 }
32776
32777 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32778 if (nullptr != *hash) {
32780 }
32781
32782#else /* FREECIV_DELTA_PROTOCOL */
32783#ifdef FREECIV_JSON_CONNECTION
32784 field_addr.name = "owner";
32785#endif /* FREECIV_JSON_CONNECTION */
32786
32787 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32789 }
32790
32791#ifdef FREECIV_JSON_CONNECTION
32792 field_addr.name = "nationality";
32793#endif /* FREECIV_JSON_CONNECTION */
32794
32795 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32796 RECEIVE_PACKET_FIELD_ERROR(nationality);
32797 }
32798
32799#ifdef FREECIV_JSON_CONNECTION
32800 field_addr.name = "tile";
32801#endif /* FREECIV_JSON_CONNECTION */
32802
32803 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32805 }
32806
32807#ifdef FREECIV_JSON_CONNECTION
32808 field_addr.name = "facing";
32809#endif /* FREECIV_JSON_CONNECTION */
32810
32811 {
32812 int readin;
32813
32814 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32816 }
32817 real_packet->facing = readin;
32818 }
32819
32820#ifdef FREECIV_JSON_CONNECTION
32821 field_addr.name = "homecity";
32822#endif /* FREECIV_JSON_CONNECTION */
32823
32824 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32826 }
32827
32828#ifdef FREECIV_JSON_CONNECTION
32829 field_addr.name = "upkeep";
32830#endif /* FREECIV_JSON_CONNECTION */
32831
32832 {
32833 int i;
32834
32835
32836#ifdef FREECIV_JSON_CONNECTION
32837 /* Enter array. */
32838 field_addr.sub_location = plocation_elem_new(0);
32839#endif /* FREECIV_JSON_CONNECTION */
32840
32841 for (i = 0; i < O_LAST; i++) {
32842#ifdef FREECIV_JSON_CONNECTION
32843 /* Next array element */
32844 field_addr.sub_location->number = i;
32845#endif /* FREECIV_JSON_CONNECTION */
32846
32847 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32849 }
32850 }
32851
32852#ifdef FREECIV_JSON_CONNECTION
32853 /* Exit array. */
32854 FC_FREE(field_addr.sub_location);
32855#endif /* FREECIV_JSON_CONNECTION */
32856 }
32857
32858#ifdef FREECIV_JSON_CONNECTION
32859 field_addr.name = "veteran";
32860#endif /* FREECIV_JSON_CONNECTION */
32861
32862 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32864 }
32865
32866#ifdef FREECIV_JSON_CONNECTION
32867 field_addr.name = "ssa_controller";
32868#endif /* FREECIV_JSON_CONNECTION */
32869
32870 {
32871 int readin;
32872
32873 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32874 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32875 }
32876 real_packet->ssa_controller = readin;
32877 }
32878
32879#ifdef FREECIV_JSON_CONNECTION
32880 field_addr.name = "paradropped";
32881#endif /* FREECIV_JSON_CONNECTION */
32882
32883 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
32884 RECEIVE_PACKET_FIELD_ERROR(paradropped);
32885 }
32886
32887#ifdef FREECIV_JSON_CONNECTION
32888 field_addr.name = "occupied";
32889#endif /* FREECIV_JSON_CONNECTION */
32890
32891 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
32893 }
32894
32895#ifdef FREECIV_JSON_CONNECTION
32896 field_addr.name = "transported";
32897#endif /* FREECIV_JSON_CONNECTION */
32898
32899 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
32900 RECEIVE_PACKET_FIELD_ERROR(transported);
32901 }
32902
32903#ifdef FREECIV_JSON_CONNECTION
32904 field_addr.name = "done_moving";
32905#endif /* FREECIV_JSON_CONNECTION */
32906
32907 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
32908 RECEIVE_PACKET_FIELD_ERROR(done_moving);
32909 }
32910
32911#ifdef FREECIV_JSON_CONNECTION
32912 field_addr.name = "stay";
32913#endif /* FREECIV_JSON_CONNECTION */
32914
32915 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
32917 }
32918
32919#ifdef FREECIV_JSON_CONNECTION
32920 field_addr.name = "birth_turn";
32921#endif /* FREECIV_JSON_CONNECTION */
32922
32923 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
32924 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
32925 }
32926
32927#ifdef FREECIV_JSON_CONNECTION
32928 field_addr.name = "current_form_turn";
32929#endif /* FREECIV_JSON_CONNECTION */
32930
32931 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
32932 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
32933 }
32934
32935#ifdef FREECIV_JSON_CONNECTION
32936 field_addr.name = "type";
32937#endif /* FREECIV_JSON_CONNECTION */
32938
32939 {
32940 int readin;
32941
32942 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32944 }
32945 real_packet->type = readin;
32946 }
32947
32948#ifdef FREECIV_JSON_CONNECTION
32949 field_addr.name = "transported_by";
32950#endif /* FREECIV_JSON_CONNECTION */
32951
32952 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32953 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32954 }
32955
32956#ifdef FREECIV_JSON_CONNECTION
32957 field_addr.name = "carrying";
32958#endif /* FREECIV_JSON_CONNECTION */
32959
32960 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
32962 }
32963
32964#ifdef FREECIV_JSON_CONNECTION
32965 field_addr.name = "movesleft";
32966#endif /* FREECIV_JSON_CONNECTION */
32967
32968 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
32969 RECEIVE_PACKET_FIELD_ERROR(movesleft);
32970 }
32971
32972#ifdef FREECIV_JSON_CONNECTION
32973 field_addr.name = "hp";
32974#endif /* FREECIV_JSON_CONNECTION */
32975
32976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32978 }
32979
32980#ifdef FREECIV_JSON_CONNECTION
32981 field_addr.name = "fuel";
32982#endif /* FREECIV_JSON_CONNECTION */
32983
32984 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
32986 }
32987
32988#ifdef FREECIV_JSON_CONNECTION
32989 field_addr.name = "activity_count";
32990#endif /* FREECIV_JSON_CONNECTION */
32991
32992 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
32993 RECEIVE_PACKET_FIELD_ERROR(activity_count);
32994 }
32995
32996#ifdef FREECIV_JSON_CONNECTION
32997 field_addr.name = "changed_from_count";
32998#endif /* FREECIV_JSON_CONNECTION */
32999
33000 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
33001 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
33002 }
33003
33004#ifdef FREECIV_JSON_CONNECTION
33005 field_addr.name = "goto_tile";
33006#endif /* FREECIV_JSON_CONNECTION */
33007
33008 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
33009 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
33010 }
33011
33012#ifdef FREECIV_JSON_CONNECTION
33013 field_addr.name = "activity";
33014#endif /* FREECIV_JSON_CONNECTION */
33015
33016 {
33017 int readin;
33018
33019 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33021 }
33022 real_packet->activity = readin;
33023 }
33024
33025#ifdef FREECIV_JSON_CONNECTION
33026 field_addr.name = "activity_tgt";
33027#endif /* FREECIV_JSON_CONNECTION */
33028
33029 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
33030 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
33031 }
33032
33033#ifdef FREECIV_JSON_CONNECTION
33034 field_addr.name = "changed_from";
33035#endif /* FREECIV_JSON_CONNECTION */
33036
33037 {
33038 int readin;
33039
33040 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33041 RECEIVE_PACKET_FIELD_ERROR(changed_from);
33042 }
33043 real_packet->changed_from = readin;
33044 }
33045
33046#ifdef FREECIV_JSON_CONNECTION
33047 field_addr.name = "changed_from_tgt";
33048#endif /* FREECIV_JSON_CONNECTION */
33049
33050 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
33051 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
33052 }
33053
33054#ifdef FREECIV_JSON_CONNECTION
33055 field_addr.name = "battlegroup";
33056#endif /* FREECIV_JSON_CONNECTION */
33057
33058 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
33059 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
33060 }
33061
33062#ifdef FREECIV_JSON_CONNECTION
33063 field_addr.name = "has_orders";
33064#endif /* FREECIV_JSON_CONNECTION */
33065
33066 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_orders)) {
33067 RECEIVE_PACKET_FIELD_ERROR(has_orders);
33068 }
33069
33070#ifdef FREECIV_JSON_CONNECTION
33071 field_addr.name = "orders_length";
33072#endif /* FREECIV_JSON_CONNECTION */
33073
33074 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
33075 RECEIVE_PACKET_FIELD_ERROR(orders_length);
33076 }
33077
33078#ifdef FREECIV_JSON_CONNECTION
33079 field_addr.name = "orders_index";
33080#endif /* FREECIV_JSON_CONNECTION */
33081
33082 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
33083 RECEIVE_PACKET_FIELD_ERROR(orders_index);
33084 }
33085
33086#ifdef FREECIV_JSON_CONNECTION
33087 field_addr.name = "orders_repeat";
33088#endif /* FREECIV_JSON_CONNECTION */
33089
33090 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_repeat)) {
33091 RECEIVE_PACKET_FIELD_ERROR(orders_repeat);
33092 }
33093
33094#ifdef FREECIV_JSON_CONNECTION
33095 field_addr.name = "orders_vigilant";
33096#endif /* FREECIV_JSON_CONNECTION */
33097
33098 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_vigilant)) {
33099 RECEIVE_PACKET_FIELD_ERROR(orders_vigilant);
33100 }
33101
33102#ifdef FREECIV_JSON_CONNECTION
33103 field_addr.name = "orders";
33104#endif /* FREECIV_JSON_CONNECTION */
33105
33106 {
33107 int i;
33108
33109 if (real_packet->orders_length > MAX_LEN_ROUTE) {
33110 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
33111 }
33112
33113#ifdef FREECIV_JSON_CONNECTION
33114 /* Enter array. */
33115 field_addr.sub_location = plocation_elem_new(0);
33116#endif /* FREECIV_JSON_CONNECTION */
33117
33118 for (i = 0; i < real_packet->orders_length; i++) {
33119#ifdef FREECIV_JSON_CONNECTION
33120 /* Next array element */
33121 field_addr.sub_location->number = i;
33122#endif /* FREECIV_JSON_CONNECTION */
33123
33124 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
33126 }
33127 }
33128
33129#ifdef FREECIV_JSON_CONNECTION
33130 /* Exit array. */
33131 FC_FREE(field_addr.sub_location);
33132#endif /* FREECIV_JSON_CONNECTION */
33133 }
33134
33135#ifdef FREECIV_JSON_CONNECTION
33136 field_addr.name = "action_decision_want";
33137#endif /* FREECIV_JSON_CONNECTION */
33138
33139 {
33140 int readin;
33141
33142 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33143 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
33144 }
33145 real_packet->action_decision_want = readin;
33146 }
33147
33148#ifdef FREECIV_JSON_CONNECTION
33149 field_addr.name = "action_decision_tile";
33150#endif /* FREECIV_JSON_CONNECTION */
33151
33152 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
33153 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
33154 }
33155#endif /* FREECIV_DELTA_PROTOCOL */
33156
33158#undef FREE_PACKET_STRUCT
33159}
33160
33161static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
33162{
33163 const struct packet_unit_info *real_packet = packet;
33164 int e;
33166
33167 log_packet_detailed("packet_unit_info_100: sending info about (%d)",
33168 real_packet->id);
33169
33170#ifdef FREECIV_DELTA_PROTOCOL
33172 struct packet_unit_info *old;
33173 bool differ;
33174 int different = 0;
33175 struct genhash **hash = pc->phs.sent + PACKET_UNIT_INFO;
33176
33177 if (nullptr == *hash) {
33179 nullptr, nullptr, nullptr, destroy_packet_unit_info);
33180 }
33181 BV_CLR_ALL(fields);
33182
33183 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33184 old = fc_malloc(sizeof(*old));
33185 /* temporary bitcopy just to insert correctly */
33186 *old = *real_packet;
33189 different = 1; /* Force to send. */
33190 }
33191
33192 differ = (old->owner != real_packet->owner);
33193 if (differ) {
33194 different++;
33195 BV_SET(fields, 0);
33196 }
33197
33198 differ = (old->nationality != real_packet->nationality);
33199 if (differ) {
33200 different++;
33201 BV_SET(fields, 1);
33202 }
33203
33204 differ = (old->tile != real_packet->tile);
33205 if (differ) {
33206 different++;
33207 BV_SET(fields, 2);
33208 }
33209
33210 differ = (old->facing != real_packet->facing);
33211 if (differ) {
33212 different++;
33213 BV_SET(fields, 3);
33214 }
33215
33216 differ = (old->homecity != real_packet->homecity);
33217 if (differ) {
33218 different++;
33219 BV_SET(fields, 4);
33220 }
33221
33222 differ = FALSE;
33223 {
33224 int i;
33225
33226 for (i = 0; i < O_LAST; i++) {
33227 differ = (old->upkeep[i] != real_packet->upkeep[i]);
33228 if (differ) {
33229 break;
33230 }
33231 }
33232 }
33233 if (differ) {
33234 different++;
33235 BV_SET(fields, 5);
33236 }
33237
33238 differ = (old->veteran != real_packet->veteran);
33239 if (differ) {
33240 different++;
33241 BV_SET(fields, 6);
33242 }
33243
33244 differ = (old->ssa_controller != real_packet->ssa_controller);
33245 if (differ) {
33246 different++;
33247 BV_SET(fields, 7);
33248 }
33249
33250 differ = (old->paradropped != real_packet->paradropped);
33251 if (differ) {
33252 different++;
33253 }
33254 /* folded into head */
33255 if (real_packet->paradropped) {
33256 BV_SET(fields, 8);
33257 }
33258
33259 differ = (old->occupied != real_packet->occupied);
33260 if (differ) {
33261 different++;
33262 }
33263 /* folded into head */
33264 if (real_packet->occupied) {
33265 BV_SET(fields, 9);
33266 }
33267
33268 differ = (old->transported != real_packet->transported);
33269 if (differ) {
33270 different++;
33271 }
33272 /* folded into head */
33273 if (real_packet->transported) {
33274 BV_SET(fields, 10);
33275 }
33276
33277 differ = (old->done_moving != real_packet->done_moving);
33278 if (differ) {
33279 different++;
33280 }
33281 /* folded into head */
33282 if (real_packet->done_moving) {
33283 BV_SET(fields, 11);
33284 }
33285
33286 differ = (old->stay != real_packet->stay);
33287 if (differ) {
33288 different++;
33289 }
33290 /* folded into head */
33291 if (real_packet->stay) {
33292 BV_SET(fields, 12);
33293 }
33294
33295 differ = (old->birth_turn != real_packet->birth_turn);
33296 if (differ) {
33297 different++;
33298 BV_SET(fields, 13);
33299 }
33300
33301 differ = (old->current_form_turn != real_packet->current_form_turn);
33302 if (differ) {
33303 different++;
33304 BV_SET(fields, 14);
33305 }
33306
33307 differ = (old->type != real_packet->type);
33308 if (differ) {
33309 different++;
33310 BV_SET(fields, 15);
33311 }
33312
33313 differ = (old->transported_by != real_packet->transported_by);
33314 if (differ) {
33315 different++;
33316 BV_SET(fields, 16);
33317 }
33318
33319 differ = (old->carrying != real_packet->carrying);
33320 if (differ) {
33321 different++;
33322 BV_SET(fields, 17);
33323 }
33324
33325 differ = (old->movesleft != real_packet->movesleft);
33326 if (differ) {
33327 different++;
33328 BV_SET(fields, 18);
33329 }
33330
33331 differ = (old->hp != real_packet->hp);
33332 if (differ) {
33333 different++;
33334 BV_SET(fields, 19);
33335 }
33336
33337 differ = (old->fuel != real_packet->fuel);
33338 if (differ) {
33339 different++;
33340 BV_SET(fields, 20);
33341 }
33342
33343 differ = (old->activity_count != real_packet->activity_count);
33344 if (differ) {
33345 different++;
33346 BV_SET(fields, 21);
33347 }
33348
33349 differ = (old->changed_from_count != real_packet->changed_from_count);
33350 if (differ) {
33351 different++;
33352 BV_SET(fields, 22);
33353 }
33354
33355 differ = (old->goto_tile != real_packet->goto_tile);
33356 if (differ) {
33357 different++;
33358 BV_SET(fields, 23);
33359 }
33360
33361 differ = (old->activity != real_packet->activity);
33362 if (differ) {
33363 different++;
33364 BV_SET(fields, 24);
33365 }
33366
33367 differ = (old->activity_tgt != real_packet->activity_tgt);
33368 if (differ) {
33369 different++;
33370 BV_SET(fields, 25);
33371 }
33372
33373 differ = (old->changed_from != real_packet->changed_from);
33374 if (differ) {
33375 different++;
33376 BV_SET(fields, 26);
33377 }
33378
33379 differ = (old->changed_from_tgt != real_packet->changed_from_tgt);
33380 if (differ) {
33381 different++;
33382 BV_SET(fields, 27);
33383 }
33384
33385 differ = (old->battlegroup != real_packet->battlegroup);
33386 if (differ) {
33387 different++;
33388 BV_SET(fields, 28);
33389 }
33390
33391 differ = (old->has_orders != real_packet->has_orders);
33392 if (differ) {
33393 different++;
33394 }
33395 /* folded into head */
33396 if (real_packet->has_orders) {
33397 BV_SET(fields, 29);
33398 }
33399
33400 differ = (old->orders_length != real_packet->orders_length);
33401 if (differ) {
33402 different++;
33403 BV_SET(fields, 30);
33404 }
33405
33406 differ = (old->orders_index != real_packet->orders_index);
33407 if (differ) {
33408 different++;
33409 BV_SET(fields, 31);
33410 }
33411
33412 differ = (old->orders_repeat != real_packet->orders_repeat);
33413 if (differ) {
33414 different++;
33415 }
33416 /* folded into head */
33417 if (real_packet->orders_repeat) {
33418 BV_SET(fields, 32);
33419 }
33420
33421 differ = (old->orders_vigilant != real_packet->orders_vigilant);
33422 if (differ) {
33423 different++;
33424 }
33425 /* folded into head */
33426 if (real_packet->orders_vigilant) {
33427 BV_SET(fields, 33);
33428 }
33429
33430 differ = (old->orders_length != real_packet->orders_length);
33431 if (!differ) {
33432 int i;
33433
33434 for (i = 0; i < old->orders_length; i++) {
33435 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
33436 if (differ) {
33437 break;
33438 }
33439 }
33440 }
33441 if (differ) {
33442 different++;
33443 BV_SET(fields, 34);
33444 }
33445
33446 differ = (old->action_decision_want != real_packet->action_decision_want);
33447 if (differ) {
33448 different++;
33449 BV_SET(fields, 35);
33450 }
33451
33452 differ = (old->action_decision_tile != real_packet->action_decision_tile);
33453 if (differ) {
33454 different++;
33455 BV_SET(fields, 36);
33456 }
33457
33458 if (different == 0) {
33459 log_packet_detailed(" no change -> discard");
33461 }
33462#endif /* FREECIV_DELTA_PROTOCOL */
33463
33464#ifdef FREECIV_JSON_CONNECTION
33465 struct plocation field_addr;
33466 {
33467 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
33470 }
33471#endif /* FREECIV_JSON_CONNECTION */
33472
33473#ifdef FREECIV_JSON_CONNECTION
33474 field_addr.name = "id";
33475#endif /* FREECIV_JSON_CONNECTION */
33476 e = 0;
33477
33478 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
33479
33480 if (e) {
33481 log_packet_detailed("'id' field error detected");
33482 }
33483
33484#ifdef FREECIV_DELTA_PROTOCOL
33485#ifdef FREECIV_JSON_CONNECTION
33486 field_addr.name = "fields";
33487#endif /* FREECIV_JSON_CONNECTION */
33488 e = 0;
33489 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33490 if (e) {
33491 log_packet_detailed("fields bitvector error detected");
33492 }
33493
33494 if (BV_ISSET(fields, 0)) {
33495 log_packet_detailed(" field 'owner' has changed");
33496
33497#ifdef FREECIV_JSON_CONNECTION
33498 field_addr.name = "owner";
33499#endif /* FREECIV_JSON_CONNECTION */
33500 e = 0;
33501
33502 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
33503
33504 if (e) {
33505 log_packet_detailed("'owner' field error detected");
33506 }
33507 }
33508
33509 if (BV_ISSET(fields, 1)) {
33510 log_packet_detailed(" field 'nationality' has changed");
33511
33512#ifdef FREECIV_JSON_CONNECTION
33513 field_addr.name = "nationality";
33514#endif /* FREECIV_JSON_CONNECTION */
33515 e = 0;
33516
33517 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
33518
33519 if (e) {
33520 log_packet_detailed("'nationality' field error detected");
33521 }
33522 }
33523
33524 if (BV_ISSET(fields, 2)) {
33525 log_packet_detailed(" field 'tile' has changed");
33526
33527#ifdef FREECIV_JSON_CONNECTION
33528 field_addr.name = "tile";
33529#endif /* FREECIV_JSON_CONNECTION */
33530 e = 0;
33531
33532 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
33533
33534 if (e) {
33535 log_packet_detailed("'tile' field error detected");
33536 }
33537 }
33538
33539 if (BV_ISSET(fields, 3)) {
33540 log_packet_detailed(" field 'facing' has changed");
33541
33542#ifdef FREECIV_JSON_CONNECTION
33543 field_addr.name = "facing";
33544#endif /* FREECIV_JSON_CONNECTION */
33545 e = 0;
33546
33547 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
33548
33549 if (e) {
33550 log_packet_detailed("'facing' field error detected");
33551 }
33552 }
33553
33554 if (BV_ISSET(fields, 4)) {
33555 log_packet_detailed(" field 'homecity' has changed");
33556
33557#ifdef FREECIV_JSON_CONNECTION
33558 field_addr.name = "homecity";
33559#endif /* FREECIV_JSON_CONNECTION */
33560 e = 0;
33561
33562 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
33563
33564 if (e) {
33565 log_packet_detailed("'homecity' field error detected");
33566 }
33567 }
33568
33569 if (BV_ISSET(fields, 5)) {
33570 log_packet_detailed(" field 'upkeep' has changed");
33571
33572#ifdef FREECIV_JSON_CONNECTION
33573 field_addr.name = "upkeep";
33574#endif /* FREECIV_JSON_CONNECTION */
33575 e = 0;
33576
33577 {
33578 int i;
33579
33580#ifdef FREECIV_JSON_CONNECTION
33581 /* Create the array. */
33582 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
33583
33584 /* Enter array. */
33585 field_addr.sub_location = plocation_elem_new(0);
33586#endif /* FREECIV_JSON_CONNECTION */
33587
33588 for (i = 0; i < O_LAST; i++) {
33589#ifdef FREECIV_JSON_CONNECTION
33590 /* Next array element. */
33591 field_addr.sub_location->number = i;
33592#endif /* FREECIV_JSON_CONNECTION */
33593
33594 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
33595 }
33596
33597#ifdef FREECIV_JSON_CONNECTION
33598 /* Exit array. */
33599 FC_FREE(field_addr.sub_location);
33600#endif /* FREECIV_JSON_CONNECTION */
33601 }
33602
33603 if (e) {
33604 log_packet_detailed("'upkeep' field error detected");
33605 }
33606 }
33607
33608 if (BV_ISSET(fields, 6)) {
33609 log_packet_detailed(" field 'veteran' has changed");
33610
33611#ifdef FREECIV_JSON_CONNECTION
33612 field_addr.name = "veteran";
33613#endif /* FREECIV_JSON_CONNECTION */
33614 e = 0;
33615
33616 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
33617
33618 if (e) {
33619 log_packet_detailed("'veteran' field error detected");
33620 }
33621 }
33622
33623 if (BV_ISSET(fields, 7)) {
33624 log_packet_detailed(" field 'ssa_controller' has changed");
33625
33626#ifdef FREECIV_JSON_CONNECTION
33627 field_addr.name = "ssa_controller";
33628#endif /* FREECIV_JSON_CONNECTION */
33629 e = 0;
33630
33631 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
33632
33633 if (e) {
33634 log_packet_detailed("'ssa_controller' field error detected");
33635 }
33636 }
33637
33638 /* field 8 is folded into the header */
33639
33640 /* field 9 is folded into the header */
33641
33642 /* field 10 is folded into the header */
33643
33644 /* field 11 is folded into the header */
33645
33646 /* field 12 is folded into the header */
33647
33648 if (BV_ISSET(fields, 13)) {
33649 log_packet_detailed(" field 'birth_turn' has changed");
33650
33651#ifdef FREECIV_JSON_CONNECTION
33652 field_addr.name = "birth_turn";
33653#endif /* FREECIV_JSON_CONNECTION */
33654 e = 0;
33655
33656 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
33657
33658 if (e) {
33659 log_packet_detailed("'birth_turn' field error detected");
33660 }
33661 }
33662
33663 if (BV_ISSET(fields, 14)) {
33664 log_packet_detailed(" field 'current_form_turn' has changed");
33665
33666#ifdef FREECIV_JSON_CONNECTION
33667 field_addr.name = "current_form_turn";
33668#endif /* FREECIV_JSON_CONNECTION */
33669 e = 0;
33670
33671 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
33672
33673 if (e) {
33674 log_packet_detailed("'current_form_turn' field error detected");
33675 }
33676 }
33677
33678 if (BV_ISSET(fields, 15)) {
33679 log_packet_detailed(" field 'type' has changed");
33680
33681#ifdef FREECIV_JSON_CONNECTION
33682 field_addr.name = "type";
33683#endif /* FREECIV_JSON_CONNECTION */
33684 e = 0;
33685
33686 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
33687
33688 if (e) {
33689 log_packet_detailed("'type' field error detected");
33690 }
33691 }
33692
33693 if (BV_ISSET(fields, 16)) {
33694 log_packet_detailed(" field 'transported_by' has changed");
33695
33696#ifdef FREECIV_JSON_CONNECTION
33697 field_addr.name = "transported_by";
33698#endif /* FREECIV_JSON_CONNECTION */
33699 e = 0;
33700
33701 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
33702
33703 if (e) {
33704 log_packet_detailed("'transported_by' field error detected");
33705 }
33706 }
33707
33708 if (BV_ISSET(fields, 17)) {
33709 log_packet_detailed(" field 'carrying' has changed");
33710
33711#ifdef FREECIV_JSON_CONNECTION
33712 field_addr.name = "carrying";
33713#endif /* FREECIV_JSON_CONNECTION */
33714 e = 0;
33715
33716 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
33717
33718 if (e) {
33719 log_packet_detailed("'carrying' field error detected");
33720 }
33721 }
33722
33723 if (BV_ISSET(fields, 18)) {
33724 log_packet_detailed(" field 'movesleft' has changed");
33725
33726#ifdef FREECIV_JSON_CONNECTION
33727 field_addr.name = "movesleft";
33728#endif /* FREECIV_JSON_CONNECTION */
33729 e = 0;
33730
33731 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
33732
33733 if (e) {
33734 log_packet_detailed("'movesleft' field error detected");
33735 }
33736 }
33737
33738 if (BV_ISSET(fields, 19)) {
33739 log_packet_detailed(" field 'hp' has changed");
33740
33741#ifdef FREECIV_JSON_CONNECTION
33742 field_addr.name = "hp";
33743#endif /* FREECIV_JSON_CONNECTION */
33744 e = 0;
33745
33746 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
33747
33748 if (e) {
33749 log_packet_detailed("'hp' field error detected");
33750 }
33751 }
33752
33753 if (BV_ISSET(fields, 20)) {
33754 log_packet_detailed(" field 'fuel' has changed");
33755
33756#ifdef FREECIV_JSON_CONNECTION
33757 field_addr.name = "fuel";
33758#endif /* FREECIV_JSON_CONNECTION */
33759 e = 0;
33760
33761 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
33762
33763 if (e) {
33764 log_packet_detailed("'fuel' field error detected");
33765 }
33766 }
33767
33768 if (BV_ISSET(fields, 21)) {
33769 log_packet_detailed(" field 'activity_count' has changed");
33770
33771#ifdef FREECIV_JSON_CONNECTION
33772 field_addr.name = "activity_count";
33773#endif /* FREECIV_JSON_CONNECTION */
33774 e = 0;
33775
33776 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
33777
33778 if (e) {
33779 log_packet_detailed("'activity_count' field error detected");
33780 }
33781 }
33782
33783 if (BV_ISSET(fields, 22)) {
33784 log_packet_detailed(" field 'changed_from_count' has changed");
33785
33786#ifdef FREECIV_JSON_CONNECTION
33787 field_addr.name = "changed_from_count";
33788#endif /* FREECIV_JSON_CONNECTION */
33789 e = 0;
33790
33791 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
33792
33793 if (e) {
33794 log_packet_detailed("'changed_from_count' field error detected");
33795 }
33796 }
33797
33798 if (BV_ISSET(fields, 23)) {
33799 log_packet_detailed(" field 'goto_tile' has changed");
33800
33801#ifdef FREECIV_JSON_CONNECTION
33802 field_addr.name = "goto_tile";
33803#endif /* FREECIV_JSON_CONNECTION */
33804 e = 0;
33805
33806 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
33807
33808 if (e) {
33809 log_packet_detailed("'goto_tile' field error detected");
33810 }
33811 }
33812
33813 if (BV_ISSET(fields, 24)) {
33814 log_packet_detailed(" field 'activity' has changed");
33815
33816#ifdef FREECIV_JSON_CONNECTION
33817 field_addr.name = "activity";
33818#endif /* FREECIV_JSON_CONNECTION */
33819 e = 0;
33820
33821 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
33822
33823 if (e) {
33824 log_packet_detailed("'activity' field error detected");
33825 }
33826 }
33827
33828 if (BV_ISSET(fields, 25)) {
33829 log_packet_detailed(" field 'activity_tgt' has changed");
33830
33831#ifdef FREECIV_JSON_CONNECTION
33832 field_addr.name = "activity_tgt";
33833#endif /* FREECIV_JSON_CONNECTION */
33834 e = 0;
33835
33836 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
33837
33838 if (e) {
33839 log_packet_detailed("'activity_tgt' field error detected");
33840 }
33841 }
33842
33843 if (BV_ISSET(fields, 26)) {
33844 log_packet_detailed(" field 'changed_from' has changed");
33845
33846#ifdef FREECIV_JSON_CONNECTION
33847 field_addr.name = "changed_from";
33848#endif /* FREECIV_JSON_CONNECTION */
33849 e = 0;
33850
33851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
33852
33853 if (e) {
33854 log_packet_detailed("'changed_from' field error detected");
33855 }
33856 }
33857
33858 if (BV_ISSET(fields, 27)) {
33859 log_packet_detailed(" field 'changed_from_tgt' has changed");
33860
33861#ifdef FREECIV_JSON_CONNECTION
33862 field_addr.name = "changed_from_tgt";
33863#endif /* FREECIV_JSON_CONNECTION */
33864 e = 0;
33865
33866 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
33867
33868 if (e) {
33869 log_packet_detailed("'changed_from_tgt' field error detected");
33870 }
33871 }
33872
33873 if (BV_ISSET(fields, 28)) {
33874 log_packet_detailed(" field 'battlegroup' has changed");
33875
33876#ifdef FREECIV_JSON_CONNECTION
33877 field_addr.name = "battlegroup";
33878#endif /* FREECIV_JSON_CONNECTION */
33879 e = 0;
33880
33881 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
33882
33883 if (e) {
33884 log_packet_detailed("'battlegroup' field error detected");
33885 }
33886 }
33887
33888 /* field 29 is folded into the header */
33889
33890 if (BV_ISSET(fields, 30)) {
33891 log_packet_detailed(" field 'orders_length' has changed");
33892
33893#ifdef FREECIV_JSON_CONNECTION
33894 field_addr.name = "orders_length";
33895#endif /* FREECIV_JSON_CONNECTION */
33896 e = 0;
33897
33898 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
33899
33900 if (e) {
33901 log_packet_detailed("'orders_length' field error detected");
33902 }
33903 }
33904
33905 if (BV_ISSET(fields, 31)) {
33906 log_packet_detailed(" field 'orders_index' has changed");
33907
33908#ifdef FREECIV_JSON_CONNECTION
33909 field_addr.name = "orders_index";
33910#endif /* FREECIV_JSON_CONNECTION */
33911 e = 0;
33912
33913 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
33914
33915 if (e) {
33916 log_packet_detailed("'orders_index' field error detected");
33917 }
33918 }
33919
33920 /* field 32 is folded into the header */
33921
33922 /* field 33 is folded into the header */
33923
33924 if (BV_ISSET(fields, 34)) {
33925 log_packet_detailed(" field 'orders' has changed");
33926
33927#ifdef FREECIV_JSON_CONNECTION
33928 field_addr.name = "orders";
33929#endif /* FREECIV_JSON_CONNECTION */
33930 e = 0;
33931
33932 {
33933 int i;
33934
33935#ifdef FREECIV_JSON_CONNECTION
33936 /* Create the array. */
33937 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
33938
33939 /* Enter array. */
33940 field_addr.sub_location = plocation_elem_new(0);
33941#endif /* FREECIV_JSON_CONNECTION */
33942
33943 for (i = 0; i < real_packet->orders_length; i++) {
33944#ifdef FREECIV_JSON_CONNECTION
33945 /* Next array element. */
33946 field_addr.sub_location->number = i;
33947#endif /* FREECIV_JSON_CONNECTION */
33948
33949 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
33950 }
33951
33952#ifdef FREECIV_JSON_CONNECTION
33953 /* Exit array. */
33954 FC_FREE(field_addr.sub_location);
33955#endif /* FREECIV_JSON_CONNECTION */
33956 }
33957
33958 if (e) {
33959 log_packet_detailed("'orders' field error detected");
33960 }
33961 }
33962
33963 if (BV_ISSET(fields, 35)) {
33964 log_packet_detailed(" field 'action_decision_want' has changed");
33965
33966#ifdef FREECIV_JSON_CONNECTION
33967 field_addr.name = "action_decision_want";
33968#endif /* FREECIV_JSON_CONNECTION */
33969 e = 0;
33970
33971 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
33972
33973 if (e) {
33974 log_packet_detailed("'action_decision_want' field error detected");
33975 }
33976 }
33977
33978 if (BV_ISSET(fields, 36)) {
33979 log_packet_detailed(" field 'action_decision_tile' has changed");
33980
33981#ifdef FREECIV_JSON_CONNECTION
33982 field_addr.name = "action_decision_tile";
33983#endif /* FREECIV_JSON_CONNECTION */
33984 e = 0;
33985
33986 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
33987
33988 if (e) {
33989 log_packet_detailed("'action_decision_tile' field error detected");
33990 }
33991 }
33992
33993 *old = *real_packet;
33994
33995 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
33996 if (nullptr != *hash) {
33998 }
33999
34000#else /* FREECIV_DELTA_PROTOCOL */
34001#ifdef FREECIV_JSON_CONNECTION
34002 field_addr.name = "owner";
34003#endif /* FREECIV_JSON_CONNECTION */
34004 e = 0;
34005
34006 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
34007
34008 if (e) {
34009 log_packet_detailed("'owner' field error detected");
34010 }
34011
34012#ifdef FREECIV_JSON_CONNECTION
34013 field_addr.name = "nationality";
34014#endif /* FREECIV_JSON_CONNECTION */
34015 e = 0;
34016
34017 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
34018
34019 if (e) {
34020 log_packet_detailed("'nationality' field error detected");
34021 }
34022
34023#ifdef FREECIV_JSON_CONNECTION
34024 field_addr.name = "tile";
34025#endif /* FREECIV_JSON_CONNECTION */
34026 e = 0;
34027
34028 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
34029
34030 if (e) {
34031 log_packet_detailed("'tile' field error detected");
34032 }
34033
34034#ifdef FREECIV_JSON_CONNECTION
34035 field_addr.name = "facing";
34036#endif /* FREECIV_JSON_CONNECTION */
34037 e = 0;
34038
34039 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
34040
34041 if (e) {
34042 log_packet_detailed("'facing' field error detected");
34043 }
34044
34045#ifdef FREECIV_JSON_CONNECTION
34046 field_addr.name = "homecity";
34047#endif /* FREECIV_JSON_CONNECTION */
34048 e = 0;
34049
34050 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
34051
34052 if (e) {
34053 log_packet_detailed("'homecity' field error detected");
34054 }
34055
34056#ifdef FREECIV_JSON_CONNECTION
34057 field_addr.name = "upkeep";
34058#endif /* FREECIV_JSON_CONNECTION */
34059 e = 0;
34060
34061 {
34062 int i;
34063
34064#ifdef FREECIV_JSON_CONNECTION
34065 /* Create the array. */
34066 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
34067
34068 /* Enter array. */
34069 field_addr.sub_location = plocation_elem_new(0);
34070#endif /* FREECIV_JSON_CONNECTION */
34071
34072 for (i = 0; i < O_LAST; i++) {
34073#ifdef FREECIV_JSON_CONNECTION
34074 /* Next array element. */
34075 field_addr.sub_location->number = i;
34076#endif /* FREECIV_JSON_CONNECTION */
34077
34078 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
34079 }
34080
34081#ifdef FREECIV_JSON_CONNECTION
34082 /* Exit array. */
34083 FC_FREE(field_addr.sub_location);
34084#endif /* FREECIV_JSON_CONNECTION */
34085 }
34086
34087 if (e) {
34088 log_packet_detailed("'upkeep' field error detected");
34089 }
34090
34091#ifdef FREECIV_JSON_CONNECTION
34092 field_addr.name = "veteran";
34093#endif /* FREECIV_JSON_CONNECTION */
34094 e = 0;
34095
34096 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
34097
34098 if (e) {
34099 log_packet_detailed("'veteran' field error detected");
34100 }
34101
34102#ifdef FREECIV_JSON_CONNECTION
34103 field_addr.name = "ssa_controller";
34104#endif /* FREECIV_JSON_CONNECTION */
34105 e = 0;
34106
34107 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
34108
34109 if (e) {
34110 log_packet_detailed("'ssa_controller' field error detected");
34111 }
34112
34113#ifdef FREECIV_JSON_CONNECTION
34114 field_addr.name = "paradropped";
34115#endif /* FREECIV_JSON_CONNECTION */
34116 e = 0;
34117
34118 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
34119
34120 if (e) {
34121 log_packet_detailed("'paradropped' field error detected");
34122 }
34123
34124#ifdef FREECIV_JSON_CONNECTION
34125 field_addr.name = "occupied";
34126#endif /* FREECIV_JSON_CONNECTION */
34127 e = 0;
34128
34129 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
34130
34131 if (e) {
34132 log_packet_detailed("'occupied' field error detected");
34133 }
34134
34135#ifdef FREECIV_JSON_CONNECTION
34136 field_addr.name = "transported";
34137#endif /* FREECIV_JSON_CONNECTION */
34138 e = 0;
34139
34140 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
34141
34142 if (e) {
34143 log_packet_detailed("'transported' field error detected");
34144 }
34145
34146#ifdef FREECIV_JSON_CONNECTION
34147 field_addr.name = "done_moving";
34148#endif /* FREECIV_JSON_CONNECTION */
34149 e = 0;
34150
34151 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
34152
34153 if (e) {
34154 log_packet_detailed("'done_moving' field error detected");
34155 }
34156
34157#ifdef FREECIV_JSON_CONNECTION
34158 field_addr.name = "stay";
34159#endif /* FREECIV_JSON_CONNECTION */
34160 e = 0;
34161
34162 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
34163
34164 if (e) {
34165 log_packet_detailed("'stay' field error detected");
34166 }
34167
34168#ifdef FREECIV_JSON_CONNECTION
34169 field_addr.name = "birth_turn";
34170#endif /* FREECIV_JSON_CONNECTION */
34171 e = 0;
34172
34173 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
34174
34175 if (e) {
34176 log_packet_detailed("'birth_turn' field error detected");
34177 }
34178
34179#ifdef FREECIV_JSON_CONNECTION
34180 field_addr.name = "current_form_turn";
34181#endif /* FREECIV_JSON_CONNECTION */
34182 e = 0;
34183
34184 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
34185
34186 if (e) {
34187 log_packet_detailed("'current_form_turn' field error detected");
34188 }
34189
34190#ifdef FREECIV_JSON_CONNECTION
34191 field_addr.name = "type";
34192#endif /* FREECIV_JSON_CONNECTION */
34193 e = 0;
34194
34195 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34196
34197 if (e) {
34198 log_packet_detailed("'type' field error detected");
34199 }
34200
34201#ifdef FREECIV_JSON_CONNECTION
34202 field_addr.name = "transported_by";
34203#endif /* FREECIV_JSON_CONNECTION */
34204 e = 0;
34205
34206 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
34207
34208 if (e) {
34209 log_packet_detailed("'transported_by' field error detected");
34210 }
34211
34212#ifdef FREECIV_JSON_CONNECTION
34213 field_addr.name = "carrying";
34214#endif /* FREECIV_JSON_CONNECTION */
34215 e = 0;
34216
34217 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
34218
34219 if (e) {
34220 log_packet_detailed("'carrying' field error detected");
34221 }
34222
34223#ifdef FREECIV_JSON_CONNECTION
34224 field_addr.name = "movesleft";
34225#endif /* FREECIV_JSON_CONNECTION */
34226 e = 0;
34227
34228 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
34229
34230 if (e) {
34231 log_packet_detailed("'movesleft' field error detected");
34232 }
34233
34234#ifdef FREECIV_JSON_CONNECTION
34235 field_addr.name = "hp";
34236#endif /* FREECIV_JSON_CONNECTION */
34237 e = 0;
34238
34239 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
34240
34241 if (e) {
34242 log_packet_detailed("'hp' field error detected");
34243 }
34244
34245#ifdef FREECIV_JSON_CONNECTION
34246 field_addr.name = "fuel";
34247#endif /* FREECIV_JSON_CONNECTION */
34248 e = 0;
34249
34250 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
34251
34252 if (e) {
34253 log_packet_detailed("'fuel' field error detected");
34254 }
34255
34256#ifdef FREECIV_JSON_CONNECTION
34257 field_addr.name = "activity_count";
34258#endif /* FREECIV_JSON_CONNECTION */
34259 e = 0;
34260
34261 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
34262
34263 if (e) {
34264 log_packet_detailed("'activity_count' field error detected");
34265 }
34266
34267#ifdef FREECIV_JSON_CONNECTION
34268 field_addr.name = "changed_from_count";
34269#endif /* FREECIV_JSON_CONNECTION */
34270 e = 0;
34271
34272 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
34273
34274 if (e) {
34275 log_packet_detailed("'changed_from_count' field error detected");
34276 }
34277
34278#ifdef FREECIV_JSON_CONNECTION
34279 field_addr.name = "goto_tile";
34280#endif /* FREECIV_JSON_CONNECTION */
34281 e = 0;
34282
34283 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
34284
34285 if (e) {
34286 log_packet_detailed("'goto_tile' field error detected");
34287 }
34288
34289#ifdef FREECIV_JSON_CONNECTION
34290 field_addr.name = "activity";
34291#endif /* FREECIV_JSON_CONNECTION */
34292 e = 0;
34293
34294 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
34295
34296 if (e) {
34297 log_packet_detailed("'activity' field error detected");
34298 }
34299
34300#ifdef FREECIV_JSON_CONNECTION
34301 field_addr.name = "activity_tgt";
34302#endif /* FREECIV_JSON_CONNECTION */
34303 e = 0;
34304
34305 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
34306
34307 if (e) {
34308 log_packet_detailed("'activity_tgt' field error detected");
34309 }
34310
34311#ifdef FREECIV_JSON_CONNECTION
34312 field_addr.name = "changed_from";
34313#endif /* FREECIV_JSON_CONNECTION */
34314 e = 0;
34315
34316 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
34317
34318 if (e) {
34319 log_packet_detailed("'changed_from' field error detected");
34320 }
34321
34322#ifdef FREECIV_JSON_CONNECTION
34323 field_addr.name = "changed_from_tgt";
34324#endif /* FREECIV_JSON_CONNECTION */
34325 e = 0;
34326
34327 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
34328
34329 if (e) {
34330 log_packet_detailed("'changed_from_tgt' field error detected");
34331 }
34332
34333#ifdef FREECIV_JSON_CONNECTION
34334 field_addr.name = "battlegroup";
34335#endif /* FREECIV_JSON_CONNECTION */
34336 e = 0;
34337
34338 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
34339
34340 if (e) {
34341 log_packet_detailed("'battlegroup' field error detected");
34342 }
34343
34344#ifdef FREECIV_JSON_CONNECTION
34345 field_addr.name = "has_orders";
34346#endif /* FREECIV_JSON_CONNECTION */
34347 e = 0;
34348
34349 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_orders);
34350
34351 if (e) {
34352 log_packet_detailed("'has_orders' field error detected");
34353 }
34354
34355#ifdef FREECIV_JSON_CONNECTION
34356 field_addr.name = "orders_length";
34357#endif /* FREECIV_JSON_CONNECTION */
34358 e = 0;
34359
34360 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
34361
34362 if (e) {
34363 log_packet_detailed("'orders_length' field error detected");
34364 }
34365
34366#ifdef FREECIV_JSON_CONNECTION
34367 field_addr.name = "orders_index";
34368#endif /* FREECIV_JSON_CONNECTION */
34369 e = 0;
34370
34371 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
34372
34373 if (e) {
34374 log_packet_detailed("'orders_index' field error detected");
34375 }
34376
34377#ifdef FREECIV_JSON_CONNECTION
34378 field_addr.name = "orders_repeat";
34379#endif /* FREECIV_JSON_CONNECTION */
34380 e = 0;
34381
34382 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_repeat);
34383
34384 if (e) {
34385 log_packet_detailed("'orders_repeat' field error detected");
34386 }
34387
34388#ifdef FREECIV_JSON_CONNECTION
34389 field_addr.name = "orders_vigilant";
34390#endif /* FREECIV_JSON_CONNECTION */
34391 e = 0;
34392
34393 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_vigilant);
34394
34395 if (e) {
34396 log_packet_detailed("'orders_vigilant' field error detected");
34397 }
34398
34399#ifdef FREECIV_JSON_CONNECTION
34400 field_addr.name = "orders";
34401#endif /* FREECIV_JSON_CONNECTION */
34402 e = 0;
34403
34404 {
34405 int i;
34406
34407#ifdef FREECIV_JSON_CONNECTION
34408 /* Create the array. */
34409 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
34410
34411 /* Enter array. */
34412 field_addr.sub_location = plocation_elem_new(0);
34413#endif /* FREECIV_JSON_CONNECTION */
34414
34415 for (i = 0; i < real_packet->orders_length; i++) {
34416#ifdef FREECIV_JSON_CONNECTION
34417 /* Next array element. */
34418 field_addr.sub_location->number = i;
34419#endif /* FREECIV_JSON_CONNECTION */
34420
34421 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
34422 }
34423
34424#ifdef FREECIV_JSON_CONNECTION
34425 /* Exit array. */
34426 FC_FREE(field_addr.sub_location);
34427#endif /* FREECIV_JSON_CONNECTION */
34428 }
34429
34430 if (e) {
34431 log_packet_detailed("'orders' field error detected");
34432 }
34433
34434#ifdef FREECIV_JSON_CONNECTION
34435 field_addr.name = "action_decision_want";
34436#endif /* FREECIV_JSON_CONNECTION */
34437 e = 0;
34438
34439 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
34440
34441 if (e) {
34442 log_packet_detailed("'action_decision_want' field error detected");
34443 }
34444
34445#ifdef FREECIV_JSON_CONNECTION
34446 field_addr.name = "action_decision_tile";
34447#endif /* FREECIV_JSON_CONNECTION */
34448 e = 0;
34449
34450 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
34451
34452 if (e) {
34453 log_packet_detailed("'action_decision_tile' field error detected");
34454 }
34455#endif /* FREECIV_DELTA_PROTOCOL */
34456
34458}
34459
34460int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
34461{
34462 if (!pc->used) {
34463 log_error("WARNING: trying to send data to the closed connection %s",
34465 return -1;
34466 }
34467 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_INFO].packet != nullptr, -1,
34468 "Handler for PACKET_UNIT_INFO not installed");
34469 return pc->phs.handlers->send[PACKET_UNIT_INFO].packet(pc, packet);
34470}
34471
34472void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
34473{
34474 conn_list_iterate(dest, pconn) {
34477}
34478
34479static inline void init_packet_unit_short_info(struct packet_unit_short_info *packet)
34480{
34481 memset(packet, 0, sizeof(*packet));
34482}
34483
34484#define free_packet_unit_short_info(_packet) (void) 0
34485#define destroy_packet_unit_short_info free
34486
34487#ifdef FREECIV_DELTA_PROTOCOL
34489{
34490 const struct packet_unit_short_info *key = (const struct packet_unit_short_info *) vkey;
34491 genhash_val_t result = 0;
34492
34493 result += key->id;
34494
34495 result &= 0xFFFFFFFF;
34496 return result;
34497}
34498
34499static bool cmp_packet_unit_short_info_100(const void *vkey1, const void *vkey2)
34500{
34501 const struct packet_unit_short_info *old = (const struct packet_unit_short_info *) vkey1;
34502 const struct packet_unit_short_info *real_packet = (const struct packet_unit_short_info *) vkey2;
34503 bool differ;
34504
34505 differ = (old->id != real_packet->id);
34506
34507 return !differ;
34508}
34510#endif /* FREECIV_DELTA_PROTOCOL */
34511
34513{
34514#define FREE_PACKET_STRUCT(_packet) free_packet_unit_short_info(_packet)
34516
34517#ifdef FREECIV_JSON_CONNECTION
34518 struct plocation field_addr;
34519 {
34520 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
34523 }
34524#endif /* FREECIV_JSON_CONNECTION */
34525
34526#ifdef FREECIV_JSON_CONNECTION
34527 field_addr.name = "id";
34528#endif /* FREECIV_JSON_CONNECTION */
34529
34530 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
34532 }
34533
34534 log_packet_detailed("packet_unit_short_info_100: got info about (%d)",
34535 real_packet->id);
34536
34537#ifdef FREECIV_DELTA_PROTOCOL
34540 struct genhash **hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
34541
34542 if (nullptr == *hash) {
34544 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34545 }
34546
34547 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34548 *real_packet = *old;
34549 } else {
34550 /* packet is already initialized empty */
34551 log_packet_detailed(" no old info");
34552 }
34553
34554#ifdef FREECIV_JSON_CONNECTION
34555 field_addr.name = "fields";
34556#endif /* FREECIV_JSON_CONNECTION */
34557 DIO_BV_GET(&din, &field_addr, fields);
34558
34559 if (BV_ISSET(fields, 0)) {
34560 log_packet_detailed(" got field 'owner'");
34561
34562#ifdef FREECIV_JSON_CONNECTION
34563 field_addr.name = "owner";
34564#endif /* FREECIV_JSON_CONNECTION */
34565
34566 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34568 }
34569 }
34570
34571 if (BV_ISSET(fields, 1)) {
34572 log_packet_detailed(" got field 'tile'");
34573
34574#ifdef FREECIV_JSON_CONNECTION
34575 field_addr.name = "tile";
34576#endif /* FREECIV_JSON_CONNECTION */
34577
34578 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34580 }
34581 }
34582
34583 if (BV_ISSET(fields, 2)) {
34584 log_packet_detailed(" got field 'facing'");
34585
34586#ifdef FREECIV_JSON_CONNECTION
34587 field_addr.name = "facing";
34588#endif /* FREECIV_JSON_CONNECTION */
34589
34590 {
34591 int readin;
34592
34593 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34595 }
34596 real_packet->facing = readin;
34597 }
34598 }
34599
34600 if (BV_ISSET(fields, 3)) {
34601 log_packet_detailed(" got field 'type'");
34602
34603#ifdef FREECIV_JSON_CONNECTION
34604 field_addr.name = "type";
34605#endif /* FREECIV_JSON_CONNECTION */
34606
34607 {
34608 int readin;
34609
34610 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34612 }
34613 real_packet->type = readin;
34614 }
34615 }
34616
34617 if (BV_ISSET(fields, 4)) {
34618 log_packet_detailed(" got field 'veteran'");
34619
34620#ifdef FREECIV_JSON_CONNECTION
34621 field_addr.name = "veteran";
34622#endif /* FREECIV_JSON_CONNECTION */
34623
34624 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34626 }
34627 }
34628
34629 real_packet->occupied = BV_ISSET(fields, 5);
34630
34631 real_packet->transported = BV_ISSET(fields, 6);
34632
34633 if (BV_ISSET(fields, 7)) {
34634 log_packet_detailed(" got field 'hp'");
34635
34636#ifdef FREECIV_JSON_CONNECTION
34637 field_addr.name = "hp";
34638#endif /* FREECIV_JSON_CONNECTION */
34639
34640 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34642 }
34643 }
34644
34645 if (BV_ISSET(fields, 8)) {
34646 log_packet_detailed(" got field 'activity'");
34647
34648#ifdef FREECIV_JSON_CONNECTION
34649 field_addr.name = "activity";
34650#endif /* FREECIV_JSON_CONNECTION */
34651
34652 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34654 }
34655 }
34656
34657 if (BV_ISSET(fields, 9)) {
34658 log_packet_detailed(" got field 'activity_tgt'");
34659
34660#ifdef FREECIV_JSON_CONNECTION
34661 field_addr.name = "activity_tgt";
34662#endif /* FREECIV_JSON_CONNECTION */
34663
34664 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34665 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34666 }
34667 }
34668
34669 if (BV_ISSET(fields, 10)) {
34670 log_packet_detailed(" got field 'transported_by'");
34671
34672#ifdef FREECIV_JSON_CONNECTION
34673 field_addr.name = "transported_by";
34674#endif /* FREECIV_JSON_CONNECTION */
34675
34676 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34677 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34678 }
34679 }
34680
34681 if (BV_ISSET(fields, 11)) {
34682 log_packet_detailed(" got field 'packet_use'");
34683
34684#ifdef FREECIV_JSON_CONNECTION
34685 field_addr.name = "packet_use";
34686#endif /* FREECIV_JSON_CONNECTION */
34687
34688 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34689 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34690 }
34691 }
34692
34693 if (BV_ISSET(fields, 12)) {
34694 log_packet_detailed(" got field 'info_city_id'");
34695
34696#ifdef FREECIV_JSON_CONNECTION
34697 field_addr.name = "info_city_id";
34698#endif /* FREECIV_JSON_CONNECTION */
34699
34700 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34701 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34702 }
34703 }
34704
34705 if (nullptr == old) {
34706 old = fc_malloc(sizeof(*old));
34708 *old = *real_packet;
34710 } else {
34711 *old = *real_packet;
34712 }
34713
34714 hash = pc->phs.received + PACKET_UNIT_INFO;
34715 if (nullptr != *hash) {
34717 }
34718
34719#else /* FREECIV_DELTA_PROTOCOL */
34720#ifdef FREECIV_JSON_CONNECTION
34721 field_addr.name = "owner";
34722#endif /* FREECIV_JSON_CONNECTION */
34723
34724 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34726 }
34727
34728#ifdef FREECIV_JSON_CONNECTION
34729 field_addr.name = "tile";
34730#endif /* FREECIV_JSON_CONNECTION */
34731
34732 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34734 }
34735
34736#ifdef FREECIV_JSON_CONNECTION
34737 field_addr.name = "facing";
34738#endif /* FREECIV_JSON_CONNECTION */
34739
34740 {
34741 int readin;
34742
34743 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34745 }
34746 real_packet->facing = readin;
34747 }
34748
34749#ifdef FREECIV_JSON_CONNECTION
34750 field_addr.name = "type";
34751#endif /* FREECIV_JSON_CONNECTION */
34752
34753 {
34754 int readin;
34755
34756 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34758 }
34759 real_packet->type = readin;
34760 }
34761
34762#ifdef FREECIV_JSON_CONNECTION
34763 field_addr.name = "veteran";
34764#endif /* FREECIV_JSON_CONNECTION */
34765
34766 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34768 }
34769
34770#ifdef FREECIV_JSON_CONNECTION
34771 field_addr.name = "occupied";
34772#endif /* FREECIV_JSON_CONNECTION */
34773
34774 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
34776 }
34777
34778#ifdef FREECIV_JSON_CONNECTION
34779 field_addr.name = "transported";
34780#endif /* FREECIV_JSON_CONNECTION */
34781
34782 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
34783 RECEIVE_PACKET_FIELD_ERROR(transported);
34784 }
34785
34786#ifdef FREECIV_JSON_CONNECTION
34787 field_addr.name = "hp";
34788#endif /* FREECIV_JSON_CONNECTION */
34789
34790 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34792 }
34793
34794#ifdef FREECIV_JSON_CONNECTION
34795 field_addr.name = "activity";
34796#endif /* FREECIV_JSON_CONNECTION */
34797
34798 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34800 }
34801
34802#ifdef FREECIV_JSON_CONNECTION
34803 field_addr.name = "activity_tgt";
34804#endif /* FREECIV_JSON_CONNECTION */
34805
34806 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34807 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34808 }
34809
34810#ifdef FREECIV_JSON_CONNECTION
34811 field_addr.name = "transported_by";
34812#endif /* FREECIV_JSON_CONNECTION */
34813
34814 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34815 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34816 }
34817
34818#ifdef FREECIV_JSON_CONNECTION
34819 field_addr.name = "packet_use";
34820#endif /* FREECIV_JSON_CONNECTION */
34821
34822 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34823 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34824 }
34825
34826#ifdef FREECIV_JSON_CONNECTION
34827 field_addr.name = "info_city_id";
34828#endif /* FREECIV_JSON_CONNECTION */
34829
34830 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34831 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34832 }
34833#endif /* FREECIV_DELTA_PROTOCOL */
34834
34836#undef FREE_PACKET_STRUCT
34837}
34838
34839static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
34840{
34841 const struct packet_unit_short_info *real_packet = packet;
34842 int e;
34844
34845 log_packet_detailed("packet_unit_short_info_100: sending info about (%d)",
34846 real_packet->id);
34847
34848#ifdef FREECIV_DELTA_PROTOCOL
34851 bool differ;
34852 int different = force_to_send;
34853 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
34854
34855 if (nullptr == *hash) {
34857 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34858 }
34859 BV_CLR_ALL(fields);
34860
34861 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34862 old = fc_malloc(sizeof(*old));
34863 /* temporary bitcopy just to insert correctly */
34864 *old = *real_packet;
34867 different = 1; /* Force to send. */
34868 }
34869
34870 differ = (old->owner != real_packet->owner);
34871 if (differ) {
34872 different++;
34873 BV_SET(fields, 0);
34874 }
34875
34876 differ = (old->tile != real_packet->tile);
34877 if (differ) {
34878 different++;
34879 BV_SET(fields, 1);
34880 }
34881
34882 differ = (old->facing != real_packet->facing);
34883 if (differ) {
34884 different++;
34885 BV_SET(fields, 2);
34886 }
34887
34888 differ = (old->type != real_packet->type);
34889 if (differ) {
34890 different++;
34891 BV_SET(fields, 3);
34892 }
34893
34894 differ = (old->veteran != real_packet->veteran);
34895 if (differ) {
34896 different++;
34897 BV_SET(fields, 4);
34898 }
34899
34900 differ = (old->occupied != real_packet->occupied);
34901 if (differ) {
34902 different++;
34903 }
34904 /* folded into head */
34905 if (real_packet->occupied) {
34906 BV_SET(fields, 5);
34907 }
34908
34909 differ = (old->transported != real_packet->transported);
34910 if (differ) {
34911 different++;
34912 }
34913 /* folded into head */
34914 if (real_packet->transported) {
34915 BV_SET(fields, 6);
34916 }
34917
34918 differ = (old->hp != real_packet->hp);
34919 if (differ) {
34920 different++;
34921 BV_SET(fields, 7);
34922 }
34923
34924 differ = (old->activity != real_packet->activity);
34925 if (differ) {
34926 different++;
34927 BV_SET(fields, 8);
34928 }
34929
34930 differ = (old->activity_tgt != real_packet->activity_tgt);
34931 if (differ) {
34932 different++;
34933 BV_SET(fields, 9);
34934 }
34935
34936 differ = (old->transported_by != real_packet->transported_by);
34937 if (differ) {
34938 different++;
34939 BV_SET(fields, 10);
34940 }
34941
34942 differ = (old->packet_use != real_packet->packet_use);
34943 if (differ) {
34944 different++;
34945 BV_SET(fields, 11);
34946 }
34947
34948 differ = (old->info_city_id != real_packet->info_city_id);
34949 if (differ) {
34950 different++;
34951 BV_SET(fields, 12);
34952 }
34953
34954 if (different == 0) {
34955 log_packet_detailed(" no change -> discard");
34957 }
34958#endif /* FREECIV_DELTA_PROTOCOL */
34959
34960#ifdef FREECIV_JSON_CONNECTION
34961 struct plocation field_addr;
34962 {
34963 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
34966 }
34967#endif /* FREECIV_JSON_CONNECTION */
34968
34969#ifdef FREECIV_JSON_CONNECTION
34970 field_addr.name = "id";
34971#endif /* FREECIV_JSON_CONNECTION */
34972 e = 0;
34973
34974 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
34975
34976 if (e) {
34977 log_packet_detailed("'id' field error detected");
34978 }
34979
34980#ifdef FREECIV_DELTA_PROTOCOL
34981#ifdef FREECIV_JSON_CONNECTION
34982 field_addr.name = "fields";
34983#endif /* FREECIV_JSON_CONNECTION */
34984 e = 0;
34985 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34986 if (e) {
34987 log_packet_detailed("fields bitvector error detected");
34988 }
34989
34990 if (BV_ISSET(fields, 0)) {
34991 log_packet_detailed(" field 'owner' has changed");
34992
34993#ifdef FREECIV_JSON_CONNECTION
34994 field_addr.name = "owner";
34995#endif /* FREECIV_JSON_CONNECTION */
34996 e = 0;
34997
34998 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
34999
35000 if (e) {
35001 log_packet_detailed("'owner' field error detected");
35002 }
35003 }
35004
35005 if (BV_ISSET(fields, 1)) {
35006 log_packet_detailed(" field 'tile' has changed");
35007
35008#ifdef FREECIV_JSON_CONNECTION
35009 field_addr.name = "tile";
35010#endif /* FREECIV_JSON_CONNECTION */
35011 e = 0;
35012
35013 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35014
35015 if (e) {
35016 log_packet_detailed("'tile' field error detected");
35017 }
35018 }
35019
35020 if (BV_ISSET(fields, 2)) {
35021 log_packet_detailed(" field 'facing' has changed");
35022
35023#ifdef FREECIV_JSON_CONNECTION
35024 field_addr.name = "facing";
35025#endif /* FREECIV_JSON_CONNECTION */
35026 e = 0;
35027
35028 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35029
35030 if (e) {
35031 log_packet_detailed("'facing' field error detected");
35032 }
35033 }
35034
35035 if (BV_ISSET(fields, 3)) {
35036 log_packet_detailed(" field 'type' has changed");
35037
35038#ifdef FREECIV_JSON_CONNECTION
35039 field_addr.name = "type";
35040#endif /* FREECIV_JSON_CONNECTION */
35041 e = 0;
35042
35043 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35044
35045 if (e) {
35046 log_packet_detailed("'type' field error detected");
35047 }
35048 }
35049
35050 if (BV_ISSET(fields, 4)) {
35051 log_packet_detailed(" field 'veteran' has changed");
35052
35053#ifdef FREECIV_JSON_CONNECTION
35054 field_addr.name = "veteran";
35055#endif /* FREECIV_JSON_CONNECTION */
35056 e = 0;
35057
35058 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35059
35060 if (e) {
35061 log_packet_detailed("'veteran' field error detected");
35062 }
35063 }
35064
35065 /* field 5 is folded into the header */
35066
35067 /* field 6 is folded into the header */
35068
35069 if (BV_ISSET(fields, 7)) {
35070 log_packet_detailed(" field 'hp' has changed");
35071
35072#ifdef FREECIV_JSON_CONNECTION
35073 field_addr.name = "hp";
35074#endif /* FREECIV_JSON_CONNECTION */
35075 e = 0;
35076
35077 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35078
35079 if (e) {
35080 log_packet_detailed("'hp' field error detected");
35081 }
35082 }
35083
35084 if (BV_ISSET(fields, 8)) {
35085 log_packet_detailed(" field 'activity' has changed");
35086
35087#ifdef FREECIV_JSON_CONNECTION
35088 field_addr.name = "activity";
35089#endif /* FREECIV_JSON_CONNECTION */
35090 e = 0;
35091
35092 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35093
35094 if (e) {
35095 log_packet_detailed("'activity' field error detected");
35096 }
35097 }
35098
35099 if (BV_ISSET(fields, 9)) {
35100 log_packet_detailed(" field 'activity_tgt' has changed");
35101
35102#ifdef FREECIV_JSON_CONNECTION
35103 field_addr.name = "activity_tgt";
35104#endif /* FREECIV_JSON_CONNECTION */
35105 e = 0;
35106
35107 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35108
35109 if (e) {
35110 log_packet_detailed("'activity_tgt' field error detected");
35111 }
35112 }
35113
35114 if (BV_ISSET(fields, 10)) {
35115 log_packet_detailed(" field 'transported_by' has changed");
35116
35117#ifdef FREECIV_JSON_CONNECTION
35118 field_addr.name = "transported_by";
35119#endif /* FREECIV_JSON_CONNECTION */
35120 e = 0;
35121
35122 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35123
35124 if (e) {
35125 log_packet_detailed("'transported_by' field error detected");
35126 }
35127 }
35128
35129 if (BV_ISSET(fields, 11)) {
35130 log_packet_detailed(" field 'packet_use' has changed");
35131
35132#ifdef FREECIV_JSON_CONNECTION
35133 field_addr.name = "packet_use";
35134#endif /* FREECIV_JSON_CONNECTION */
35135 e = 0;
35136
35137 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35138
35139 if (e) {
35140 log_packet_detailed("'packet_use' field error detected");
35141 }
35142 }
35143
35144 if (BV_ISSET(fields, 12)) {
35145 log_packet_detailed(" field 'info_city_id' has changed");
35146
35147#ifdef FREECIV_JSON_CONNECTION
35148 field_addr.name = "info_city_id";
35149#endif /* FREECIV_JSON_CONNECTION */
35150 e = 0;
35151
35152 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35153
35154 if (e) {
35155 log_packet_detailed("'info_city_id' field error detected");
35156 }
35157 }
35158
35159 *old = *real_packet;
35160
35161 hash = pc->phs.sent + PACKET_UNIT_INFO;
35162 if (nullptr != *hash) {
35164 }
35165
35166#else /* FREECIV_DELTA_PROTOCOL */
35167#ifdef FREECIV_JSON_CONNECTION
35168 field_addr.name = "owner";
35169#endif /* FREECIV_JSON_CONNECTION */
35170 e = 0;
35171
35172 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
35173
35174 if (e) {
35175 log_packet_detailed("'owner' field error detected");
35176 }
35177
35178#ifdef FREECIV_JSON_CONNECTION
35179 field_addr.name = "tile";
35180#endif /* FREECIV_JSON_CONNECTION */
35181 e = 0;
35182
35183 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35184
35185 if (e) {
35186 log_packet_detailed("'tile' field error detected");
35187 }
35188
35189#ifdef FREECIV_JSON_CONNECTION
35190 field_addr.name = "facing";
35191#endif /* FREECIV_JSON_CONNECTION */
35192 e = 0;
35193
35194 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35195
35196 if (e) {
35197 log_packet_detailed("'facing' field error detected");
35198 }
35199
35200#ifdef FREECIV_JSON_CONNECTION
35201 field_addr.name = "type";
35202#endif /* FREECIV_JSON_CONNECTION */
35203 e = 0;
35204
35205 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35206
35207 if (e) {
35208 log_packet_detailed("'type' field error detected");
35209 }
35210
35211#ifdef FREECIV_JSON_CONNECTION
35212 field_addr.name = "veteran";
35213#endif /* FREECIV_JSON_CONNECTION */
35214 e = 0;
35215
35216 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35217
35218 if (e) {
35219 log_packet_detailed("'veteran' field error detected");
35220 }
35221
35222#ifdef FREECIV_JSON_CONNECTION
35223 field_addr.name = "occupied";
35224#endif /* FREECIV_JSON_CONNECTION */
35225 e = 0;
35226
35227 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
35228
35229 if (e) {
35230 log_packet_detailed("'occupied' field error detected");
35231 }
35232
35233#ifdef FREECIV_JSON_CONNECTION
35234 field_addr.name = "transported";
35235#endif /* FREECIV_JSON_CONNECTION */
35236 e = 0;
35237
35238 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
35239
35240 if (e) {
35241 log_packet_detailed("'transported' field error detected");
35242 }
35243
35244#ifdef FREECIV_JSON_CONNECTION
35245 field_addr.name = "hp";
35246#endif /* FREECIV_JSON_CONNECTION */
35247 e = 0;
35248
35249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35250
35251 if (e) {
35252 log_packet_detailed("'hp' field error detected");
35253 }
35254
35255#ifdef FREECIV_JSON_CONNECTION
35256 field_addr.name = "activity";
35257#endif /* FREECIV_JSON_CONNECTION */
35258 e = 0;
35259
35260 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35261
35262 if (e) {
35263 log_packet_detailed("'activity' field error detected");
35264 }
35265
35266#ifdef FREECIV_JSON_CONNECTION
35267 field_addr.name = "activity_tgt";
35268#endif /* FREECIV_JSON_CONNECTION */
35269 e = 0;
35270
35271 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35272
35273 if (e) {
35274 log_packet_detailed("'activity_tgt' field error detected");
35275 }
35276
35277#ifdef FREECIV_JSON_CONNECTION
35278 field_addr.name = "transported_by";
35279#endif /* FREECIV_JSON_CONNECTION */
35280 e = 0;
35281
35282 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35283
35284 if (e) {
35285 log_packet_detailed("'transported_by' field error detected");
35286 }
35287
35288#ifdef FREECIV_JSON_CONNECTION
35289 field_addr.name = "packet_use";
35290#endif /* FREECIV_JSON_CONNECTION */
35291 e = 0;
35292
35293 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35294
35295 if (e) {
35296 log_packet_detailed("'packet_use' field error detected");
35297 }
35298
35299#ifdef FREECIV_JSON_CONNECTION
35300 field_addr.name = "info_city_id";
35301#endif /* FREECIV_JSON_CONNECTION */
35302 e = 0;
35303
35304 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35305
35306 if (e) {
35307 log_packet_detailed("'info_city_id' field error detected");
35308 }
35309#endif /* FREECIV_DELTA_PROTOCOL */
35310
35312}
35313
35314int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
35315{
35316 if (!pc->used) {
35317 log_error("WARNING: trying to send data to the closed connection %s",
35319 return -1;
35320 }
35321 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send != nullptr, -1,
35322 "Handler for PACKET_UNIT_SHORT_INFO not installed");
35323 return pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send(pc, packet, force_to_send);
35324}
35325
35326void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
35327{
35328 conn_list_iterate(dest, pconn) {
35329 send_packet_unit_short_info(pconn, packet, force_to_send);
35331}
35332
35334{
35335 memset(packet, 0, sizeof(*packet));
35336}
35337
35338#define free_packet_unit_combat_info(_packet) (void) 0
35339#define destroy_packet_unit_combat_info free
35340
35341#ifdef FREECIV_DELTA_PROTOCOL
35342#define hash_packet_unit_combat_info_100 hash_const
35343#define cmp_packet_unit_combat_info_100 cmp_const
35345#endif /* FREECIV_DELTA_PROTOCOL */
35346
35348{
35349#define FREE_PACKET_STRUCT(_packet) free_packet_unit_combat_info(_packet)
35351
35352#ifdef FREECIV_JSON_CONNECTION
35353 struct plocation field_addr;
35354 {
35355 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35358 }
35359#endif /* FREECIV_JSON_CONNECTION */
35360
35361 log_packet_detailed("packet_unit_combat_info_100: got info about ()");
35362
35363#ifdef FREECIV_DELTA_PROTOCOL
35366 struct genhash **hash = pc->phs.received + PACKET_UNIT_COMBAT_INFO;
35367
35368 if (nullptr == *hash) {
35370 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35371 }
35372
35373 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35374 *real_packet = *old;
35375 } else {
35376 /* packet is already initialized empty */
35377 log_packet_detailed(" no old info");
35378 }
35379
35380#ifdef FREECIV_JSON_CONNECTION
35381 field_addr.name = "fields";
35382#endif /* FREECIV_JSON_CONNECTION */
35383 DIO_BV_GET(&din, &field_addr, fields);
35384
35385 if (BV_ISSET(fields, 0)) {
35386 log_packet_detailed(" got field 'attacker_unit_id'");
35387
35388#ifdef FREECIV_JSON_CONNECTION
35389 field_addr.name = "attacker_unit_id";
35390#endif /* FREECIV_JSON_CONNECTION */
35391
35392 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35393 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35394 }
35395 }
35396
35397 if (BV_ISSET(fields, 1)) {
35398 log_packet_detailed(" got field 'defender_unit_id'");
35399
35400#ifdef FREECIV_JSON_CONNECTION
35401 field_addr.name = "defender_unit_id";
35402#endif /* FREECIV_JSON_CONNECTION */
35403
35404 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35405 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35406 }
35407 }
35408
35409 if (BV_ISSET(fields, 2)) {
35410 log_packet_detailed(" got field 'attacker_hp'");
35411
35412#ifdef FREECIV_JSON_CONNECTION
35413 field_addr.name = "attacker_hp";
35414#endif /* FREECIV_JSON_CONNECTION */
35415
35416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35417 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35418 }
35419 }
35420
35421 if (BV_ISSET(fields, 3)) {
35422 log_packet_detailed(" got field 'defender_hp'");
35423
35424#ifdef FREECIV_JSON_CONNECTION
35425 field_addr.name = "defender_hp";
35426#endif /* FREECIV_JSON_CONNECTION */
35427
35428 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35429 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35430 }
35431 }
35432
35433 real_packet->make_att_veteran = BV_ISSET(fields, 4);
35434
35435 real_packet->make_def_veteran = BV_ISSET(fields, 5);
35436
35437 if (nullptr == old) {
35438 old = fc_malloc(sizeof(*old));
35440 *old = *real_packet;
35442 } else {
35443 *old = *real_packet;
35444 }
35445
35446#else /* FREECIV_DELTA_PROTOCOL */
35447#ifdef FREECIV_JSON_CONNECTION
35448 field_addr.name = "attacker_unit_id";
35449#endif /* FREECIV_JSON_CONNECTION */
35450
35451 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35452 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35453 }
35454
35455#ifdef FREECIV_JSON_CONNECTION
35456 field_addr.name = "defender_unit_id";
35457#endif /* FREECIV_JSON_CONNECTION */
35458
35459 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35460 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35461 }
35462
35463#ifdef FREECIV_JSON_CONNECTION
35464 field_addr.name = "attacker_hp";
35465#endif /* FREECIV_JSON_CONNECTION */
35466
35467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35468 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35469 }
35470
35471#ifdef FREECIV_JSON_CONNECTION
35472 field_addr.name = "defender_hp";
35473#endif /* FREECIV_JSON_CONNECTION */
35474
35475 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35476 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35477 }
35478
35479#ifdef FREECIV_JSON_CONNECTION
35480 field_addr.name = "make_att_veteran";
35481#endif /* FREECIV_JSON_CONNECTION */
35482
35483 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_att_veteran)) {
35484 RECEIVE_PACKET_FIELD_ERROR(make_att_veteran);
35485 }
35486
35487#ifdef FREECIV_JSON_CONNECTION
35488 field_addr.name = "make_def_veteran";
35489#endif /* FREECIV_JSON_CONNECTION */
35490
35491 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_def_veteran)) {
35492 RECEIVE_PACKET_FIELD_ERROR(make_def_veteran);
35493 }
35494#endif /* FREECIV_DELTA_PROTOCOL */
35495
35497#undef FREE_PACKET_STRUCT
35498}
35499
35501{
35502 const struct packet_unit_combat_info *real_packet = packet;
35503 int e;
35505
35506 log_packet_detailed("packet_unit_combat_info_100: sending info about ()");
35507
35508#ifdef FREECIV_DELTA_PROTOCOL
35511 bool differ;
35512 struct genhash **hash = pc->phs.sent + PACKET_UNIT_COMBAT_INFO;
35513
35514 if (nullptr == *hash) {
35516 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35517 }
35518 BV_CLR_ALL(fields);
35519
35520 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35521 old = fc_malloc(sizeof(*old));
35522 /* temporary bitcopy just to insert correctly */
35523 *old = *real_packet;
35526 }
35527
35528 differ = (old->attacker_unit_id != real_packet->attacker_unit_id);
35529 if (differ) {
35530 BV_SET(fields, 0);
35531 }
35532
35533 differ = (old->defender_unit_id != real_packet->defender_unit_id);
35534 if (differ) {
35535 BV_SET(fields, 1);
35536 }
35537
35538 differ = (old->attacker_hp != real_packet->attacker_hp);
35539 if (differ) {
35540 BV_SET(fields, 2);
35541 }
35542
35543 differ = (old->defender_hp != real_packet->defender_hp);
35544 if (differ) {
35545 BV_SET(fields, 3);
35546 }
35547
35548 /* folded into head */
35549 if (real_packet->make_att_veteran) {
35550 BV_SET(fields, 4);
35551 }
35552
35553 /* folded into head */
35554 if (real_packet->make_def_veteran) {
35555 BV_SET(fields, 5);
35556 }
35557#endif /* FREECIV_DELTA_PROTOCOL */
35558
35559#ifdef FREECIV_JSON_CONNECTION
35560 struct plocation field_addr;
35561 {
35562 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35565 }
35566#endif /* FREECIV_JSON_CONNECTION */
35567
35568#ifdef FREECIV_DELTA_PROTOCOL
35569#ifdef FREECIV_JSON_CONNECTION
35570 field_addr.name = "fields";
35571#endif /* FREECIV_JSON_CONNECTION */
35572 e = 0;
35573 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35574 if (e) {
35575 log_packet_detailed("fields bitvector error detected");
35576 }
35577
35578 if (BV_ISSET(fields, 0)) {
35579 log_packet_detailed(" field 'attacker_unit_id' has changed");
35580
35581#ifdef FREECIV_JSON_CONNECTION
35582 field_addr.name = "attacker_unit_id";
35583#endif /* FREECIV_JSON_CONNECTION */
35584 e = 0;
35585
35586 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35587
35588 if (e) {
35589 log_packet_detailed("'attacker_unit_id' field error detected");
35590 }
35591 }
35592
35593 if (BV_ISSET(fields, 1)) {
35594 log_packet_detailed(" field 'defender_unit_id' has changed");
35595
35596#ifdef FREECIV_JSON_CONNECTION
35597 field_addr.name = "defender_unit_id";
35598#endif /* FREECIV_JSON_CONNECTION */
35599 e = 0;
35600
35601 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35602
35603 if (e) {
35604 log_packet_detailed("'defender_unit_id' field error detected");
35605 }
35606 }
35607
35608 if (BV_ISSET(fields, 2)) {
35609 log_packet_detailed(" field 'attacker_hp' has changed");
35610
35611#ifdef FREECIV_JSON_CONNECTION
35612 field_addr.name = "attacker_hp";
35613#endif /* FREECIV_JSON_CONNECTION */
35614 e = 0;
35615
35616 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35617
35618 if (e) {
35619 log_packet_detailed("'attacker_hp' field error detected");
35620 }
35621 }
35622
35623 if (BV_ISSET(fields, 3)) {
35624 log_packet_detailed(" field 'defender_hp' has changed");
35625
35626#ifdef FREECIV_JSON_CONNECTION
35627 field_addr.name = "defender_hp";
35628#endif /* FREECIV_JSON_CONNECTION */
35629 e = 0;
35630
35631 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35632
35633 if (e) {
35634 log_packet_detailed("'defender_hp' field error detected");
35635 }
35636 }
35637
35638 /* field 4 is folded into the header */
35639
35640 /* field 5 is folded into the header */
35641
35642 *old = *real_packet;
35643
35644#else /* FREECIV_DELTA_PROTOCOL */
35645#ifdef FREECIV_JSON_CONNECTION
35646 field_addr.name = "attacker_unit_id";
35647#endif /* FREECIV_JSON_CONNECTION */
35648 e = 0;
35649
35650 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35651
35652 if (e) {
35653 log_packet_detailed("'attacker_unit_id' field error detected");
35654 }
35655
35656#ifdef FREECIV_JSON_CONNECTION
35657 field_addr.name = "defender_unit_id";
35658#endif /* FREECIV_JSON_CONNECTION */
35659 e = 0;
35660
35661 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35662
35663 if (e) {
35664 log_packet_detailed("'defender_unit_id' field error detected");
35665 }
35666
35667#ifdef FREECIV_JSON_CONNECTION
35668 field_addr.name = "attacker_hp";
35669#endif /* FREECIV_JSON_CONNECTION */
35670 e = 0;
35671
35672 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35673
35674 if (e) {
35675 log_packet_detailed("'attacker_hp' field error detected");
35676 }
35677
35678#ifdef FREECIV_JSON_CONNECTION
35679 field_addr.name = "defender_hp";
35680#endif /* FREECIV_JSON_CONNECTION */
35681 e = 0;
35682
35683 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35684
35685 if (e) {
35686 log_packet_detailed("'defender_hp' field error detected");
35687 }
35688
35689#ifdef FREECIV_JSON_CONNECTION
35690 field_addr.name = "make_att_veteran";
35691#endif /* FREECIV_JSON_CONNECTION */
35692 e = 0;
35693
35694 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_att_veteran);
35695
35696 if (e) {
35697 log_packet_detailed("'make_att_veteran' field error detected");
35698 }
35699
35700#ifdef FREECIV_JSON_CONNECTION
35701 field_addr.name = "make_def_veteran";
35702#endif /* FREECIV_JSON_CONNECTION */
35703 e = 0;
35704
35705 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_def_veteran);
35706
35707 if (e) {
35708 log_packet_detailed("'make_def_veteran' field error detected");
35709 }
35710#endif /* FREECIV_DELTA_PROTOCOL */
35711
35713}
35714
35716{
35717 if (!pc->used) {
35718 log_error("WARNING: trying to send data to the closed connection %s",
35720 return -1;
35721 }
35722 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet != nullptr, -1,
35723 "Handler for PACKET_UNIT_COMBAT_INFO not installed");
35724 return pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet(pc, packet);
35725}
35726
35728{
35729 conn_list_iterate(dest, pconn) {
35732}
35733
35734static inline void init_packet_unit_sscs_set(struct packet_unit_sscs_set *packet)
35735{
35736 memset(packet, 0, sizeof(*packet));
35737}
35738
35739#define free_packet_unit_sscs_set(_packet) (void) 0
35740#define destroy_packet_unit_sscs_set free
35741
35742#ifdef FREECIV_DELTA_PROTOCOL
35743#define hash_packet_unit_sscs_set_100 hash_const
35744#define cmp_packet_unit_sscs_set_100 cmp_const
35746#endif /* FREECIV_DELTA_PROTOCOL */
35747
35749{
35750#define FREE_PACKET_STRUCT(_packet) free_packet_unit_sscs_set(_packet)
35752
35753#ifdef FREECIV_JSON_CONNECTION
35754 struct plocation field_addr;
35755 {
35756 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35759 }
35760#endif /* FREECIV_JSON_CONNECTION */
35761
35762 log_packet_detailed("packet_unit_sscs_set_100: got info about ()");
35763
35764#ifdef FREECIV_DELTA_PROTOCOL
35766 struct packet_unit_sscs_set *old;
35767 struct genhash **hash = pc->phs.received + PACKET_UNIT_SSCS_SET;
35768
35769 if (nullptr == *hash) {
35771 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35772 }
35773
35774 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35775 *real_packet = *old;
35776 } else {
35777 /* packet is already initialized empty */
35778 log_packet_detailed(" no old info");
35779 }
35780
35781#ifdef FREECIV_JSON_CONNECTION
35782 field_addr.name = "fields";
35783#endif /* FREECIV_JSON_CONNECTION */
35784 DIO_BV_GET(&din, &field_addr, fields);
35785
35786 if (BV_ISSET(fields, 0)) {
35787 log_packet_detailed(" got field 'unit_id'");
35788
35789#ifdef FREECIV_JSON_CONNECTION
35790 field_addr.name = "unit_id";
35791#endif /* FREECIV_JSON_CONNECTION */
35792
35793 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35795 }
35796 }
35797
35798 if (BV_ISSET(fields, 1)) {
35799 log_packet_detailed(" got field 'type'");
35800
35801#ifdef FREECIV_JSON_CONNECTION
35802 field_addr.name = "type";
35803#endif /* FREECIV_JSON_CONNECTION */
35804
35805 {
35806 int readin;
35807
35808 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35810 }
35811 real_packet->type = readin;
35812 }
35813 }
35814
35815 if (BV_ISSET(fields, 2)) {
35816 log_packet_detailed(" got field 'value'");
35817
35818#ifdef FREECIV_JSON_CONNECTION
35819 field_addr.name = "value";
35820#endif /* FREECIV_JSON_CONNECTION */
35821
35822 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35824 }
35825 }
35826
35827 if (nullptr == old) {
35828 old = fc_malloc(sizeof(*old));
35830 *old = *real_packet;
35832 } else {
35833 *old = *real_packet;
35834 }
35835
35836#else /* FREECIV_DELTA_PROTOCOL */
35837#ifdef FREECIV_JSON_CONNECTION
35838 field_addr.name = "unit_id";
35839#endif /* FREECIV_JSON_CONNECTION */
35840
35841 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35843 }
35844
35845#ifdef FREECIV_JSON_CONNECTION
35846 field_addr.name = "type";
35847#endif /* FREECIV_JSON_CONNECTION */
35848
35849 {
35850 int readin;
35851
35852 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35854 }
35855 real_packet->type = readin;
35856 }
35857
35858#ifdef FREECIV_JSON_CONNECTION
35859 field_addr.name = "value";
35860#endif /* FREECIV_JSON_CONNECTION */
35861
35862 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35864 }
35865#endif /* FREECIV_DELTA_PROTOCOL */
35866
35868#undef FREE_PACKET_STRUCT
35869}
35870
35871static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
35872{
35873 const struct packet_unit_sscs_set *real_packet = packet;
35874 int e;
35876
35877 log_packet_detailed("packet_unit_sscs_set_100: sending info about ()");
35878
35879#ifdef FREECIV_DELTA_PROTOCOL
35881 struct packet_unit_sscs_set *old;
35882 bool differ;
35883 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SSCS_SET;
35884
35885 if (nullptr == *hash) {
35887 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35888 }
35889 BV_CLR_ALL(fields);
35890
35891 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35892 old = fc_malloc(sizeof(*old));
35893 /* temporary bitcopy just to insert correctly */
35894 *old = *real_packet;
35897 }
35898
35899 differ = (old->unit_id != real_packet->unit_id);
35900 if (differ) {
35901 BV_SET(fields, 0);
35902 }
35903
35904 differ = (old->type != real_packet->type);
35905 if (differ) {
35906 BV_SET(fields, 1);
35907 }
35908
35909 differ = (old->value != real_packet->value);
35910 if (differ) {
35911 BV_SET(fields, 2);
35912 }
35913#endif /* FREECIV_DELTA_PROTOCOL */
35914
35915#ifdef FREECIV_JSON_CONNECTION
35916 struct plocation field_addr;
35917 {
35918 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35921 }
35922#endif /* FREECIV_JSON_CONNECTION */
35923
35924#ifdef FREECIV_DELTA_PROTOCOL
35925#ifdef FREECIV_JSON_CONNECTION
35926 field_addr.name = "fields";
35927#endif /* FREECIV_JSON_CONNECTION */
35928 e = 0;
35929 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35930 if (e) {
35931 log_packet_detailed("fields bitvector error detected");
35932 }
35933
35934 if (BV_ISSET(fields, 0)) {
35935 log_packet_detailed(" field 'unit_id' has changed");
35936
35937#ifdef FREECIV_JSON_CONNECTION
35938 field_addr.name = "unit_id";
35939#endif /* FREECIV_JSON_CONNECTION */
35940 e = 0;
35941
35942 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
35943
35944 if (e) {
35945 log_packet_detailed("'unit_id' field error detected");
35946 }
35947 }
35948
35949 if (BV_ISSET(fields, 1)) {
35950 log_packet_detailed(" field 'type' has changed");
35951
35952#ifdef FREECIV_JSON_CONNECTION
35953 field_addr.name = "type";
35954#endif /* FREECIV_JSON_CONNECTION */
35955 e = 0;
35956
35957 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
35958
35959 if (e) {
35960 log_packet_detailed("'type' field error detected");
35961 }
35962 }
35963
35964 if (BV_ISSET(fields, 2)) {
35965 log_packet_detailed(" field 'value' has changed");
35966
35967#ifdef FREECIV_JSON_CONNECTION
35968 field_addr.name = "value";
35969#endif /* FREECIV_JSON_CONNECTION */
35970 e = 0;
35971
35972 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
35973
35974 if (e) {
35975 log_packet_detailed("'value' field error detected");
35976 }
35977 }
35978
35979 *old = *real_packet;
35980
35981#else /* FREECIV_DELTA_PROTOCOL */
35982#ifdef FREECIV_JSON_CONNECTION
35983 field_addr.name = "unit_id";
35984#endif /* FREECIV_JSON_CONNECTION */
35985 e = 0;
35986
35987 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
35988
35989 if (e) {
35990 log_packet_detailed("'unit_id' field error detected");
35991 }
35992
35993#ifdef FREECIV_JSON_CONNECTION
35994 field_addr.name = "type";
35995#endif /* FREECIV_JSON_CONNECTION */
35996 e = 0;
35997
35998 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
35999
36000 if (e) {
36001 log_packet_detailed("'type' field error detected");
36002 }
36003
36004#ifdef FREECIV_JSON_CONNECTION
36005 field_addr.name = "value";
36006#endif /* FREECIV_JSON_CONNECTION */
36007 e = 0;
36008
36009 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36010
36011 if (e) {
36012 log_packet_detailed("'value' field error detected");
36013 }
36014#endif /* FREECIV_DELTA_PROTOCOL */
36015
36017}
36018
36020{
36021 if (!pc->used) {
36022 log_error("WARNING: trying to send data to the closed connection %s",
36024 return -1;
36025 }
36026 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet != nullptr, -1,
36027 "Handler for PACKET_UNIT_SSCS_SET not installed");
36028 return pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet(pc, packet);
36029}
36030
36031int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
36032{
36033 struct packet_unit_sscs_set packet, *real_packet = &packet;
36034
36036 real_packet->type = type;
36037 real_packet->value = value;
36038
36040}
36041
36042static inline void init_packet_unit_orders(struct packet_unit_orders *packet)
36043{
36044 memset(packet, 0, sizeof(*packet));
36045}
36046
36047#define free_packet_unit_orders(_packet) (void) 0
36048#define destroy_packet_unit_orders free
36049
36050#ifdef FREECIV_DELTA_PROTOCOL
36051#define hash_packet_unit_orders_100 hash_const
36052#define cmp_packet_unit_orders_100 cmp_const
36054#endif /* FREECIV_DELTA_PROTOCOL */
36055
36057{
36058#define FREE_PACKET_STRUCT(_packet) free_packet_unit_orders(_packet)
36060
36061#ifdef FREECIV_JSON_CONNECTION
36062 struct plocation field_addr;
36063 {
36064 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36067 }
36068#endif /* FREECIV_JSON_CONNECTION */
36069
36070 log_packet_detailed("packet_unit_orders_100: got info about ()");
36071
36072#ifdef FREECIV_DELTA_PROTOCOL
36074 struct packet_unit_orders *old;
36075 struct genhash **hash = pc->phs.received + PACKET_UNIT_ORDERS;
36076
36077 if (nullptr == *hash) {
36079 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36080 }
36081
36082 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36083 *real_packet = *old;
36084 } else {
36085 /* packet is already initialized empty */
36086 log_packet_detailed(" no old info");
36087 }
36088
36089#ifdef FREECIV_JSON_CONNECTION
36090 field_addr.name = "fields";
36091#endif /* FREECIV_JSON_CONNECTION */
36092 DIO_BV_GET(&din, &field_addr, fields);
36093
36094 if (BV_ISSET(fields, 0)) {
36095 log_packet_detailed(" got field 'unit_id'");
36096
36097#ifdef FREECIV_JSON_CONNECTION
36098 field_addr.name = "unit_id";
36099#endif /* FREECIV_JSON_CONNECTION */
36100
36101 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36103 }
36104 }
36105
36106 if (BV_ISSET(fields, 1)) {
36107 log_packet_detailed(" got field 'src_tile'");
36108
36109#ifdef FREECIV_JSON_CONNECTION
36110 field_addr.name = "src_tile";
36111#endif /* FREECIV_JSON_CONNECTION */
36112
36113 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36115 }
36116 }
36117
36118 if (BV_ISSET(fields, 2)) {
36119 log_packet_detailed(" got field 'length'");
36120
36121#ifdef FREECIV_JSON_CONNECTION
36122 field_addr.name = "length";
36123#endif /* FREECIV_JSON_CONNECTION */
36124
36125 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36127 }
36128 }
36129
36130 real_packet->repeat = BV_ISSET(fields, 3);
36131
36132 real_packet->vigilant = BV_ISSET(fields, 4);
36133
36134 if (BV_ISSET(fields, 5)) {
36135 log_packet_detailed(" got field 'orders'");
36136
36137#ifdef FREECIV_JSON_CONNECTION
36138 field_addr.name = "orders";
36139#endif /* FREECIV_JSON_CONNECTION */
36140
36141 {
36142 int i;
36143
36144 if (real_packet->length > MAX_LEN_ROUTE) {
36145 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36146 }
36147
36148#ifdef FREECIV_JSON_CONNECTION
36149 /* Enter array. */
36150 field_addr.sub_location = plocation_elem_new(0);
36151#endif /* FREECIV_JSON_CONNECTION */
36152
36153 for (i = 0; i < real_packet->length; i++) {
36154#ifdef FREECIV_JSON_CONNECTION
36155 /* Next array element */
36156 field_addr.sub_location->number = i;
36157#endif /* FREECIV_JSON_CONNECTION */
36158
36159 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36161 }
36162 }
36163
36164#ifdef FREECIV_JSON_CONNECTION
36165 /* Exit array. */
36166 FC_FREE(field_addr.sub_location);
36167#endif /* FREECIV_JSON_CONNECTION */
36168 }
36169 }
36170
36171 if (BV_ISSET(fields, 6)) {
36172 log_packet_detailed(" got field 'dest_tile'");
36173
36174#ifdef FREECIV_JSON_CONNECTION
36175 field_addr.name = "dest_tile";
36176#endif /* FREECIV_JSON_CONNECTION */
36177
36178 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36179 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36180 }
36181 }
36182
36183 if (nullptr == old) {
36184 old = fc_malloc(sizeof(*old));
36186 *old = *real_packet;
36188 } else {
36189 *old = *real_packet;
36190 }
36191
36192#else /* FREECIV_DELTA_PROTOCOL */
36193#ifdef FREECIV_JSON_CONNECTION
36194 field_addr.name = "unit_id";
36195#endif /* FREECIV_JSON_CONNECTION */
36196
36197 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36199 }
36200
36201#ifdef FREECIV_JSON_CONNECTION
36202 field_addr.name = "src_tile";
36203#endif /* FREECIV_JSON_CONNECTION */
36204
36205 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36207 }
36208
36209#ifdef FREECIV_JSON_CONNECTION
36210 field_addr.name = "length";
36211#endif /* FREECIV_JSON_CONNECTION */
36212
36213 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36215 }
36216
36217#ifdef FREECIV_JSON_CONNECTION
36218 field_addr.name = "repeat";
36219#endif /* FREECIV_JSON_CONNECTION */
36220
36221 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->repeat)) {
36223 }
36224
36225#ifdef FREECIV_JSON_CONNECTION
36226 field_addr.name = "vigilant";
36227#endif /* FREECIV_JSON_CONNECTION */
36228
36229 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
36231 }
36232
36233#ifdef FREECIV_JSON_CONNECTION
36234 field_addr.name = "orders";
36235#endif /* FREECIV_JSON_CONNECTION */
36236
36237 {
36238 int i;
36239
36240 if (real_packet->length > MAX_LEN_ROUTE) {
36241 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36242 }
36243
36244#ifdef FREECIV_JSON_CONNECTION
36245 /* Enter array. */
36246 field_addr.sub_location = plocation_elem_new(0);
36247#endif /* FREECIV_JSON_CONNECTION */
36248
36249 for (i = 0; i < real_packet->length; i++) {
36250#ifdef FREECIV_JSON_CONNECTION
36251 /* Next array element */
36252 field_addr.sub_location->number = i;
36253#endif /* FREECIV_JSON_CONNECTION */
36254
36255 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36257 }
36258 }
36259
36260#ifdef FREECIV_JSON_CONNECTION
36261 /* Exit array. */
36262 FC_FREE(field_addr.sub_location);
36263#endif /* FREECIV_JSON_CONNECTION */
36264 }
36265
36266#ifdef FREECIV_JSON_CONNECTION
36267 field_addr.name = "dest_tile";
36268#endif /* FREECIV_JSON_CONNECTION */
36269
36270 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36271 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36272 }
36273#endif /* FREECIV_DELTA_PROTOCOL */
36274
36276#undef FREE_PACKET_STRUCT
36277}
36278
36279static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
36280{
36281 const struct packet_unit_orders *real_packet = packet;
36282 int e;
36284
36285 log_packet_detailed("packet_unit_orders_100: sending info about ()");
36286
36287#ifdef FREECIV_DELTA_PROTOCOL
36289 struct packet_unit_orders *old;
36290 bool differ;
36291 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ORDERS;
36292
36293 if (nullptr == *hash) {
36295 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36296 }
36297 BV_CLR_ALL(fields);
36298
36299 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36300 old = fc_malloc(sizeof(*old));
36301 /* temporary bitcopy just to insert correctly */
36302 *old = *real_packet;
36305 }
36306
36307 differ = (old->unit_id != real_packet->unit_id);
36308 if (differ) {
36309 BV_SET(fields, 0);
36310 }
36311
36312 differ = (old->src_tile != real_packet->src_tile);
36313 if (differ) {
36314 BV_SET(fields, 1);
36315 }
36316
36317 differ = (old->length != real_packet->length);
36318 if (differ) {
36319 BV_SET(fields, 2);
36320 }
36321
36322 /* folded into head */
36323 if (real_packet->repeat) {
36324 BV_SET(fields, 3);
36325 }
36326
36327 /* folded into head */
36328 if (real_packet->vigilant) {
36329 BV_SET(fields, 4);
36330 }
36331
36332 differ = (old->length != real_packet->length);
36333 if (!differ) {
36334 int i;
36335
36336 for (i = 0; i < old->length; i++) {
36337 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
36338 if (differ) {
36339 break;
36340 }
36341 }
36342 }
36343 if (differ) {
36344 BV_SET(fields, 5);
36345 }
36346
36347 differ = (old->dest_tile != real_packet->dest_tile);
36348 if (differ) {
36349 BV_SET(fields, 6);
36350 }
36351#endif /* FREECIV_DELTA_PROTOCOL */
36352
36353#ifdef FREECIV_JSON_CONNECTION
36354 struct plocation field_addr;
36355 {
36356 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36359 }
36360#endif /* FREECIV_JSON_CONNECTION */
36361
36362#ifdef FREECIV_DELTA_PROTOCOL
36363#ifdef FREECIV_JSON_CONNECTION
36364 field_addr.name = "fields";
36365#endif /* FREECIV_JSON_CONNECTION */
36366 e = 0;
36367 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36368 if (e) {
36369 log_packet_detailed("fields bitvector error detected");
36370 }
36371
36372 if (BV_ISSET(fields, 0)) {
36373 log_packet_detailed(" field 'unit_id' has changed");
36374
36375#ifdef FREECIV_JSON_CONNECTION
36376 field_addr.name = "unit_id";
36377#endif /* FREECIV_JSON_CONNECTION */
36378 e = 0;
36379
36380 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36381
36382 if (e) {
36383 log_packet_detailed("'unit_id' field error detected");
36384 }
36385 }
36386
36387 if (BV_ISSET(fields, 1)) {
36388 log_packet_detailed(" field 'src_tile' has changed");
36389
36390#ifdef FREECIV_JSON_CONNECTION
36391 field_addr.name = "src_tile";
36392#endif /* FREECIV_JSON_CONNECTION */
36393 e = 0;
36394
36395 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36396
36397 if (e) {
36398 log_packet_detailed("'src_tile' field error detected");
36399 }
36400 }
36401
36402 if (BV_ISSET(fields, 2)) {
36403 log_packet_detailed(" field 'length' has changed");
36404
36405#ifdef FREECIV_JSON_CONNECTION
36406 field_addr.name = "length";
36407#endif /* FREECIV_JSON_CONNECTION */
36408 e = 0;
36409
36410 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36411
36412 if (e) {
36413 log_packet_detailed("'length' field error detected");
36414 }
36415 }
36416
36417 /* field 3 is folded into the header */
36418
36419 /* field 4 is folded into the header */
36420
36421 if (BV_ISSET(fields, 5)) {
36422 log_packet_detailed(" field 'orders' has changed");
36423
36424#ifdef FREECIV_JSON_CONNECTION
36425 field_addr.name = "orders";
36426#endif /* FREECIV_JSON_CONNECTION */
36427 e = 0;
36428
36429 {
36430 int i;
36431
36432#ifdef FREECIV_JSON_CONNECTION
36433 /* Create the array. */
36434 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36435
36436 /* Enter array. */
36437 field_addr.sub_location = plocation_elem_new(0);
36438#endif /* FREECIV_JSON_CONNECTION */
36439
36440 for (i = 0; i < real_packet->length; i++) {
36441#ifdef FREECIV_JSON_CONNECTION
36442 /* Next array element. */
36443 field_addr.sub_location->number = i;
36444#endif /* FREECIV_JSON_CONNECTION */
36445
36446 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36447 }
36448
36449#ifdef FREECIV_JSON_CONNECTION
36450 /* Exit array. */
36451 FC_FREE(field_addr.sub_location);
36452#endif /* FREECIV_JSON_CONNECTION */
36453 }
36454
36455 if (e) {
36456 log_packet_detailed("'orders' field error detected");
36457 }
36458 }
36459
36460 if (BV_ISSET(fields, 6)) {
36461 log_packet_detailed(" field 'dest_tile' has changed");
36462
36463#ifdef FREECIV_JSON_CONNECTION
36464 field_addr.name = "dest_tile";
36465#endif /* FREECIV_JSON_CONNECTION */
36466 e = 0;
36467
36468 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36469
36470 if (e) {
36471 log_packet_detailed("'dest_tile' field error detected");
36472 }
36473 }
36474
36475 *old = *real_packet;
36476
36477#else /* FREECIV_DELTA_PROTOCOL */
36478#ifdef FREECIV_JSON_CONNECTION
36479 field_addr.name = "unit_id";
36480#endif /* FREECIV_JSON_CONNECTION */
36481 e = 0;
36482
36483 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36484
36485 if (e) {
36486 log_packet_detailed("'unit_id' field error detected");
36487 }
36488
36489#ifdef FREECIV_JSON_CONNECTION
36490 field_addr.name = "src_tile";
36491#endif /* FREECIV_JSON_CONNECTION */
36492 e = 0;
36493
36494 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36495
36496 if (e) {
36497 log_packet_detailed("'src_tile' field error detected");
36498 }
36499
36500#ifdef FREECIV_JSON_CONNECTION
36501 field_addr.name = "length";
36502#endif /* FREECIV_JSON_CONNECTION */
36503 e = 0;
36504
36505 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36506
36507 if (e) {
36508 log_packet_detailed("'length' field error detected");
36509 }
36510
36511#ifdef FREECIV_JSON_CONNECTION
36512 field_addr.name = "repeat";
36513#endif /* FREECIV_JSON_CONNECTION */
36514 e = 0;
36515
36516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->repeat);
36517
36518 if (e) {
36519 log_packet_detailed("'repeat' field error detected");
36520 }
36521
36522#ifdef FREECIV_JSON_CONNECTION
36523 field_addr.name = "vigilant";
36524#endif /* FREECIV_JSON_CONNECTION */
36525 e = 0;
36526
36527 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
36528
36529 if (e) {
36530 log_packet_detailed("'vigilant' field error detected");
36531 }
36532
36533#ifdef FREECIV_JSON_CONNECTION
36534 field_addr.name = "orders";
36535#endif /* FREECIV_JSON_CONNECTION */
36536 e = 0;
36537
36538 {
36539 int i;
36540
36541#ifdef FREECIV_JSON_CONNECTION
36542 /* Create the array. */
36543 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36544
36545 /* Enter array. */
36546 field_addr.sub_location = plocation_elem_new(0);
36547#endif /* FREECIV_JSON_CONNECTION */
36548
36549 for (i = 0; i < real_packet->length; i++) {
36550#ifdef FREECIV_JSON_CONNECTION
36551 /* Next array element. */
36552 field_addr.sub_location->number = i;
36553#endif /* FREECIV_JSON_CONNECTION */
36554
36555 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36556 }
36557
36558#ifdef FREECIV_JSON_CONNECTION
36559 /* Exit array. */
36560 FC_FREE(field_addr.sub_location);
36561#endif /* FREECIV_JSON_CONNECTION */
36562 }
36563
36564 if (e) {
36565 log_packet_detailed("'orders' field error detected");
36566 }
36567
36568#ifdef FREECIV_JSON_CONNECTION
36569 field_addr.name = "dest_tile";
36570#endif /* FREECIV_JSON_CONNECTION */
36571 e = 0;
36572
36573 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36574
36575 if (e) {
36576 log_packet_detailed("'dest_tile' field error detected");
36577 }
36578#endif /* FREECIV_DELTA_PROTOCOL */
36579
36581}
36582
36584{
36585 if (!pc->used) {
36586 log_error("WARNING: trying to send data to the closed connection %s",
36588 return -1;
36589 }
36590 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet != nullptr, -1,
36591 "Handler for PACKET_UNIT_ORDERS not installed");
36592 return pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet(pc, packet);
36593}
36594
36596{
36597 memset(packet, 0, sizeof(*packet));
36598}
36599
36600#define free_packet_unit_server_side_agent_set(_packet) (void) 0
36601#define destroy_packet_unit_server_side_agent_set free
36602
36603#ifdef FREECIV_DELTA_PROTOCOL
36604#define hash_packet_unit_server_side_agent_set_100 hash_const
36605#define cmp_packet_unit_server_side_agent_set_100 cmp_const
36607#endif /* FREECIV_DELTA_PROTOCOL */
36608
36610{
36611#define FREE_PACKET_STRUCT(_packet) free_packet_unit_server_side_agent_set(_packet)
36613
36614#ifdef FREECIV_JSON_CONNECTION
36615 struct plocation field_addr;
36616 {
36617 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36620 }
36621#endif /* FREECIV_JSON_CONNECTION */
36622
36623 log_packet_detailed("packet_unit_server_side_agent_set_100: got info about ()");
36624
36625#ifdef FREECIV_DELTA_PROTOCOL
36628 struct genhash **hash = pc->phs.received + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36629
36630 if (nullptr == *hash) {
36632 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36633 }
36634
36635 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36636 *real_packet = *old;
36637 } else {
36638 /* packet is already initialized empty */
36639 log_packet_detailed(" no old info");
36640 }
36641
36642#ifdef FREECIV_JSON_CONNECTION
36643 field_addr.name = "fields";
36644#endif /* FREECIV_JSON_CONNECTION */
36645 DIO_BV_GET(&din, &field_addr, fields);
36646
36647 if (BV_ISSET(fields, 0)) {
36648 log_packet_detailed(" got field 'unit_id'");
36649
36650#ifdef FREECIV_JSON_CONNECTION
36651 field_addr.name = "unit_id";
36652#endif /* FREECIV_JSON_CONNECTION */
36653
36654 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36656 }
36657 }
36658
36659 if (BV_ISSET(fields, 1)) {
36660 log_packet_detailed(" got field 'agent'");
36661
36662#ifdef FREECIV_JSON_CONNECTION
36663 field_addr.name = "agent";
36664#endif /* FREECIV_JSON_CONNECTION */
36665
36666 {
36667 int readin;
36668
36669 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36671 }
36672 real_packet->agent = readin;
36673 }
36674 }
36675
36676 if (nullptr == old) {
36677 old = fc_malloc(sizeof(*old));
36679 *old = *real_packet;
36681 } else {
36682 *old = *real_packet;
36683 }
36684
36685#else /* FREECIV_DELTA_PROTOCOL */
36686#ifdef FREECIV_JSON_CONNECTION
36687 field_addr.name = "unit_id";
36688#endif /* FREECIV_JSON_CONNECTION */
36689
36690 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36692 }
36693
36694#ifdef FREECIV_JSON_CONNECTION
36695 field_addr.name = "agent";
36696#endif /* FREECIV_JSON_CONNECTION */
36697
36698 {
36699 int readin;
36700
36701 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36703 }
36704 real_packet->agent = readin;
36705 }
36706#endif /* FREECIV_DELTA_PROTOCOL */
36707
36709#undef FREE_PACKET_STRUCT
36710}
36711
36713{
36714 const struct packet_unit_server_side_agent_set *real_packet = packet;
36715 int e;
36717
36718 log_packet_detailed("packet_unit_server_side_agent_set_100: sending info about ()");
36719
36720#ifdef FREECIV_DELTA_PROTOCOL
36723 bool differ;
36724 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36725
36726 if (nullptr == *hash) {
36728 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36729 }
36730 BV_CLR_ALL(fields);
36731
36732 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36733 old = fc_malloc(sizeof(*old));
36734 /* temporary bitcopy just to insert correctly */
36735 *old = *real_packet;
36738 }
36739
36740 differ = (old->unit_id != real_packet->unit_id);
36741 if (differ) {
36742 BV_SET(fields, 0);
36743 }
36744
36745 differ = (old->agent != real_packet->agent);
36746 if (differ) {
36747 BV_SET(fields, 1);
36748 }
36749#endif /* FREECIV_DELTA_PROTOCOL */
36750
36751#ifdef FREECIV_JSON_CONNECTION
36752 struct plocation field_addr;
36753 {
36754 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36757 }
36758#endif /* FREECIV_JSON_CONNECTION */
36759
36760#ifdef FREECIV_DELTA_PROTOCOL
36761#ifdef FREECIV_JSON_CONNECTION
36762 field_addr.name = "fields";
36763#endif /* FREECIV_JSON_CONNECTION */
36764 e = 0;
36765 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36766 if (e) {
36767 log_packet_detailed("fields bitvector error detected");
36768 }
36769
36770 if (BV_ISSET(fields, 0)) {
36771 log_packet_detailed(" field 'unit_id' has changed");
36772
36773#ifdef FREECIV_JSON_CONNECTION
36774 field_addr.name = "unit_id";
36775#endif /* FREECIV_JSON_CONNECTION */
36776 e = 0;
36777
36778 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36779
36780 if (e) {
36781 log_packet_detailed("'unit_id' field error detected");
36782 }
36783 }
36784
36785 if (BV_ISSET(fields, 1)) {
36786 log_packet_detailed(" field 'agent' has changed");
36787
36788#ifdef FREECIV_JSON_CONNECTION
36789 field_addr.name = "agent";
36790#endif /* FREECIV_JSON_CONNECTION */
36791 e = 0;
36792
36793 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36794
36795 if (e) {
36796 log_packet_detailed("'agent' field error detected");
36797 }
36798 }
36799
36800 *old = *real_packet;
36801
36802#else /* FREECIV_DELTA_PROTOCOL */
36803#ifdef FREECIV_JSON_CONNECTION
36804 field_addr.name = "unit_id";
36805#endif /* FREECIV_JSON_CONNECTION */
36806 e = 0;
36807
36808 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36809
36810 if (e) {
36811 log_packet_detailed("'unit_id' field error detected");
36812 }
36813
36814#ifdef FREECIV_JSON_CONNECTION
36815 field_addr.name = "agent";
36816#endif /* FREECIV_JSON_CONNECTION */
36817 e = 0;
36818
36819 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36820
36821 if (e) {
36822 log_packet_detailed("'agent' field error detected");
36823 }
36824#endif /* FREECIV_DELTA_PROTOCOL */
36825
36827}
36828
36830{
36831 if (!pc->used) {
36832 log_error("WARNING: trying to send data to the closed connection %s",
36834 return -1;
36835 }
36836 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet != nullptr, -1,
36837 "Handler for PACKET_UNIT_SERVER_SIDE_AGENT_SET not installed");
36838 return pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet(pc, packet);
36839}
36840
36842{
36843 struct packet_unit_server_side_agent_set packet, *real_packet = &packet;
36844
36846 real_packet->agent = agent;
36847
36849}
36850
36852{
36853 memset(packet, 0, sizeof(*packet));
36854}
36855
36856#define free_packet_unit_action_query(_packet) (void) 0
36857#define destroy_packet_unit_action_query free
36858
36859#ifdef FREECIV_DELTA_PROTOCOL
36860#define hash_packet_unit_action_query_100 hash_const
36861#define cmp_packet_unit_action_query_100 cmp_const
36863#endif /* FREECIV_DELTA_PROTOCOL */
36864
36866{
36867#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_query(_packet)
36869
36870#ifdef FREECIV_JSON_CONNECTION
36871 struct plocation field_addr;
36872 {
36873 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36876 }
36877#endif /* FREECIV_JSON_CONNECTION */
36878
36879 log_packet_detailed("packet_unit_action_query_100: got info about ()");
36880
36881#ifdef FREECIV_DELTA_PROTOCOL
36884 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_QUERY;
36885
36886 if (nullptr == *hash) {
36888 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
36889 }
36890
36891 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36892 *real_packet = *old;
36893 } else {
36894 /* packet is already initialized empty */
36895 log_packet_detailed(" no old info");
36896 }
36897
36898#ifdef FREECIV_JSON_CONNECTION
36899 field_addr.name = "fields";
36900#endif /* FREECIV_JSON_CONNECTION */
36901 DIO_BV_GET(&din, &field_addr, fields);
36902
36903 if (BV_ISSET(fields, 0)) {
36904 log_packet_detailed(" got field 'actor_id'");
36905
36906#ifdef FREECIV_JSON_CONNECTION
36907 field_addr.name = "actor_id";
36908#endif /* FREECIV_JSON_CONNECTION */
36909
36910 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
36912 }
36913 }
36914
36915 if (BV_ISSET(fields, 1)) {
36916 log_packet_detailed(" got field 'target_id'");
36917
36918#ifdef FREECIV_JSON_CONNECTION
36919 field_addr.name = "target_id";
36920#endif /* FREECIV_JSON_CONNECTION */
36921
36922 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
36923 RECEIVE_PACKET_FIELD_ERROR(target_id);
36924 }
36925 }
36926
36927 if (BV_ISSET(fields, 2)) {
36928 log_packet_detailed(" got field 'action_type'");
36929
36930#ifdef FREECIV_JSON_CONNECTION
36931 field_addr.name = "action_type";
36932#endif /* FREECIV_JSON_CONNECTION */
36933
36934 {
36935 int readin;
36936
36937 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36938 RECEIVE_PACKET_FIELD_ERROR(action_type);
36939 }
36940 real_packet->action_type = readin;
36941 }
36942 }
36943
36944 if (BV_ISSET(fields, 3)) {
36945 log_packet_detailed(" got field 'request_kind'");
36946
36947#ifdef FREECIV_JSON_CONNECTION
36948 field_addr.name = "request_kind";
36949#endif /* FREECIV_JSON_CONNECTION */
36950
36951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
36952 RECEIVE_PACKET_FIELD_ERROR(request_kind);
36953 }
36954 }
36955
36956 if (nullptr == old) {
36957 old = fc_malloc(sizeof(*old));
36959 *old = *real_packet;
36961 } else {
36962 *old = *real_packet;
36963 }
36964
36965#else /* FREECIV_DELTA_PROTOCOL */
36966#ifdef FREECIV_JSON_CONNECTION
36967 field_addr.name = "actor_id";
36968#endif /* FREECIV_JSON_CONNECTION */
36969
36970 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
36972 }
36973
36974#ifdef FREECIV_JSON_CONNECTION
36975 field_addr.name = "target_id";
36976#endif /* FREECIV_JSON_CONNECTION */
36977
36978 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
36979 RECEIVE_PACKET_FIELD_ERROR(target_id);
36980 }
36981
36982#ifdef FREECIV_JSON_CONNECTION
36983 field_addr.name = "action_type";
36984#endif /* FREECIV_JSON_CONNECTION */
36985
36986 {
36987 int readin;
36988
36989 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36990 RECEIVE_PACKET_FIELD_ERROR(action_type);
36991 }
36992 real_packet->action_type = readin;
36993 }
36994
36995#ifdef FREECIV_JSON_CONNECTION
36996 field_addr.name = "request_kind";
36997#endif /* FREECIV_JSON_CONNECTION */
36998
36999 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37000 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37001 }
37002#endif /* FREECIV_DELTA_PROTOCOL */
37003
37005#undef FREE_PACKET_STRUCT
37006}
37007
37009{
37010 const struct packet_unit_action_query *real_packet = packet;
37011 int e;
37013
37014 log_packet_detailed("packet_unit_action_query_100: sending info about ()");
37015
37016#ifdef FREECIV_DELTA_PROTOCOL
37019 bool differ;
37020 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_QUERY;
37021
37022 if (nullptr == *hash) {
37024 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
37025 }
37026 BV_CLR_ALL(fields);
37027
37028 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37029 old = fc_malloc(sizeof(*old));
37030 /* temporary bitcopy just to insert correctly */
37031 *old = *real_packet;
37034 }
37035
37036 differ = (old->actor_id != real_packet->actor_id);
37037 if (differ) {
37038 BV_SET(fields, 0);
37039 }
37040
37041 differ = (old->target_id != real_packet->target_id);
37042 if (differ) {
37043 BV_SET(fields, 1);
37044 }
37045
37046 differ = (old->action_type != real_packet->action_type);
37047 if (differ) {
37048 BV_SET(fields, 2);
37049 }
37050
37051 differ = (old->request_kind != real_packet->request_kind);
37052 if (differ) {
37053 BV_SET(fields, 3);
37054 }
37055#endif /* FREECIV_DELTA_PROTOCOL */
37056
37057#ifdef FREECIV_JSON_CONNECTION
37058 struct plocation field_addr;
37059 {
37060 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37063 }
37064#endif /* FREECIV_JSON_CONNECTION */
37065
37066#ifdef FREECIV_DELTA_PROTOCOL
37067#ifdef FREECIV_JSON_CONNECTION
37068 field_addr.name = "fields";
37069#endif /* FREECIV_JSON_CONNECTION */
37070 e = 0;
37071 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37072 if (e) {
37073 log_packet_detailed("fields bitvector error detected");
37074 }
37075
37076 if (BV_ISSET(fields, 0)) {
37077 log_packet_detailed(" field 'actor_id' has changed");
37078
37079#ifdef FREECIV_JSON_CONNECTION
37080 field_addr.name = "actor_id";
37081#endif /* FREECIV_JSON_CONNECTION */
37082 e = 0;
37083
37084 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37085
37086 if (e) {
37087 log_packet_detailed("'actor_id' field error detected");
37088 }
37089 }
37090
37091 if (BV_ISSET(fields, 1)) {
37092 log_packet_detailed(" field 'target_id' has changed");
37093
37094#ifdef FREECIV_JSON_CONNECTION
37095 field_addr.name = "target_id";
37096#endif /* FREECIV_JSON_CONNECTION */
37097 e = 0;
37098
37099 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37100
37101 if (e) {
37102 log_packet_detailed("'target_id' field error detected");
37103 }
37104 }
37105
37106 if (BV_ISSET(fields, 2)) {
37107 log_packet_detailed(" field 'action_type' has changed");
37108
37109#ifdef FREECIV_JSON_CONNECTION
37110 field_addr.name = "action_type";
37111#endif /* FREECIV_JSON_CONNECTION */
37112 e = 0;
37113
37114 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37115
37116 if (e) {
37117 log_packet_detailed("'action_type' field error detected");
37118 }
37119 }
37120
37121 if (BV_ISSET(fields, 3)) {
37122 log_packet_detailed(" field 'request_kind' has changed");
37123
37124#ifdef FREECIV_JSON_CONNECTION
37125 field_addr.name = "request_kind";
37126#endif /* FREECIV_JSON_CONNECTION */
37127 e = 0;
37128
37129 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37130
37131 if (e) {
37132 log_packet_detailed("'request_kind' field error detected");
37133 }
37134 }
37135
37136 *old = *real_packet;
37137
37138#else /* FREECIV_DELTA_PROTOCOL */
37139#ifdef FREECIV_JSON_CONNECTION
37140 field_addr.name = "actor_id";
37141#endif /* FREECIV_JSON_CONNECTION */
37142 e = 0;
37143
37144 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37145
37146 if (e) {
37147 log_packet_detailed("'actor_id' field error detected");
37148 }
37149
37150#ifdef FREECIV_JSON_CONNECTION
37151 field_addr.name = "target_id";
37152#endif /* FREECIV_JSON_CONNECTION */
37153 e = 0;
37154
37155 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37156
37157 if (e) {
37158 log_packet_detailed("'target_id' field error detected");
37159 }
37160
37161#ifdef FREECIV_JSON_CONNECTION
37162 field_addr.name = "action_type";
37163#endif /* FREECIV_JSON_CONNECTION */
37164 e = 0;
37165
37166 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37167
37168 if (e) {
37169 log_packet_detailed("'action_type' field error detected");
37170 }
37171
37172#ifdef FREECIV_JSON_CONNECTION
37173 field_addr.name = "request_kind";
37174#endif /* FREECIV_JSON_CONNECTION */
37175 e = 0;
37176
37177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37178
37179 if (e) {
37180 log_packet_detailed("'request_kind' field error detected");
37181 }
37182#endif /* FREECIV_DELTA_PROTOCOL */
37183
37185}
37186
37188{
37189 if (!pc->used) {
37190 log_error("WARNING: trying to send data to the closed connection %s",
37192 return -1;
37193 }
37194 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet != nullptr, -1,
37195 "Handler for PACKET_UNIT_ACTION_QUERY not installed");
37196 return pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet(pc, packet);
37197}
37198
37199int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
37200{
37201 struct packet_unit_action_query packet, *real_packet = &packet;
37202
37204 real_packet->target_id = target_id;
37205 real_packet->action_type = action_type;
37206 real_packet->request_kind = request_kind;
37207
37209}
37210
37212{
37213 memset(packet, 0, sizeof(*packet));
37214}
37215
37216#define free_packet_unit_type_upgrade(_packet) (void) 0
37217#define destroy_packet_unit_type_upgrade free
37218
37219#ifdef FREECIV_DELTA_PROTOCOL
37220#define hash_packet_unit_type_upgrade_100 hash_const
37221#define cmp_packet_unit_type_upgrade_100 cmp_const
37223#endif /* FREECIV_DELTA_PROTOCOL */
37224
37226{
37227#define FREE_PACKET_STRUCT(_packet) free_packet_unit_type_upgrade(_packet)
37229
37230#ifdef FREECIV_JSON_CONNECTION
37231 struct plocation field_addr;
37232 {
37233 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37236 }
37237#endif /* FREECIV_JSON_CONNECTION */
37238
37239 log_packet_detailed("packet_unit_type_upgrade_100: got info about ()");
37240
37241#ifdef FREECIV_DELTA_PROTOCOL
37244 struct genhash **hash = pc->phs.received + PACKET_UNIT_TYPE_UPGRADE;
37245
37246 if (nullptr == *hash) {
37248 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37249 }
37250
37251 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37252 *real_packet = *old;
37253 } else {
37254 /* packet is already initialized empty */
37255 log_packet_detailed(" no old info");
37256 }
37257
37258#ifdef FREECIV_JSON_CONNECTION
37259 field_addr.name = "fields";
37260#endif /* FREECIV_JSON_CONNECTION */
37261 DIO_BV_GET(&din, &field_addr, fields);
37262
37263 if (BV_ISSET(fields, 0)) {
37264 log_packet_detailed(" got field 'type'");
37265
37266#ifdef FREECIV_JSON_CONNECTION
37267 field_addr.name = "type";
37268#endif /* FREECIV_JSON_CONNECTION */
37269
37270 {
37271 int readin;
37272
37273 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37275 }
37276 real_packet->type = readin;
37277 }
37278 }
37279
37280 if (nullptr == old) {
37281 old = fc_malloc(sizeof(*old));
37283 *old = *real_packet;
37285 } else {
37286 *old = *real_packet;
37287 }
37288
37289#else /* FREECIV_DELTA_PROTOCOL */
37290#ifdef FREECIV_JSON_CONNECTION
37291 field_addr.name = "type";
37292#endif /* FREECIV_JSON_CONNECTION */
37293
37294 {
37295 int readin;
37296
37297 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37299 }
37300 real_packet->type = readin;
37301 }
37302#endif /* FREECIV_DELTA_PROTOCOL */
37303
37305#undef FREE_PACKET_STRUCT
37306}
37307
37309{
37310 const struct packet_unit_type_upgrade *real_packet = packet;
37311 int e;
37313
37314 log_packet_detailed("packet_unit_type_upgrade_100: sending info about ()");
37315
37316#ifdef FREECIV_DELTA_PROTOCOL
37319 bool differ;
37320 struct genhash **hash = pc->phs.sent + PACKET_UNIT_TYPE_UPGRADE;
37321
37322 if (nullptr == *hash) {
37324 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37325 }
37326 BV_CLR_ALL(fields);
37327
37328 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37329 old = fc_malloc(sizeof(*old));
37330 /* temporary bitcopy just to insert correctly */
37331 *old = *real_packet;
37334 }
37335
37336 differ = (old->type != real_packet->type);
37337 if (differ) {
37338 BV_SET(fields, 0);
37339 }
37340#endif /* FREECIV_DELTA_PROTOCOL */
37341
37342#ifdef FREECIV_JSON_CONNECTION
37343 struct plocation field_addr;
37344 {
37345 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37348 }
37349#endif /* FREECIV_JSON_CONNECTION */
37350
37351#ifdef FREECIV_DELTA_PROTOCOL
37352#ifdef FREECIV_JSON_CONNECTION
37353 field_addr.name = "fields";
37354#endif /* FREECIV_JSON_CONNECTION */
37355 e = 0;
37356 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37357 if (e) {
37358 log_packet_detailed("fields bitvector error detected");
37359 }
37360
37361 if (BV_ISSET(fields, 0)) {
37362 log_packet_detailed(" field 'type' has changed");
37363
37364#ifdef FREECIV_JSON_CONNECTION
37365 field_addr.name = "type";
37366#endif /* FREECIV_JSON_CONNECTION */
37367 e = 0;
37368
37369 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37370
37371 if (e) {
37372 log_packet_detailed("'type' field error detected");
37373 }
37374 }
37375
37376 *old = *real_packet;
37377
37378#else /* FREECIV_DELTA_PROTOCOL */
37379#ifdef FREECIV_JSON_CONNECTION
37380 field_addr.name = "type";
37381#endif /* FREECIV_JSON_CONNECTION */
37382 e = 0;
37383
37384 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37385
37386 if (e) {
37387 log_packet_detailed("'type' field error detected");
37388 }
37389#endif /* FREECIV_DELTA_PROTOCOL */
37390
37392}
37393
37395{
37396 if (!pc->used) {
37397 log_error("WARNING: trying to send data to the closed connection %s",
37399 return -1;
37400 }
37401 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet != nullptr, -1,
37402 "Handler for PACKET_UNIT_TYPE_UPGRADE not installed");
37403 return pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet(pc, packet);
37404}
37405
37407{
37408 struct packet_unit_type_upgrade packet, *real_packet = &packet;
37409
37411
37413}
37414
37415static inline void init_packet_unit_do_action(struct packet_unit_do_action *packet)
37416{
37417 memset(packet, 0, sizeof(*packet));
37418}
37419
37420#define free_packet_unit_do_action(_packet) (void) 0
37421#define destroy_packet_unit_do_action free
37422
37423#ifdef FREECIV_DELTA_PROTOCOL
37424#define hash_packet_unit_do_action_100 hash_const
37425#define cmp_packet_unit_do_action_100 cmp_const
37427#endif /* FREECIV_DELTA_PROTOCOL */
37428
37430{
37431#define FREE_PACKET_STRUCT(_packet) free_packet_unit_do_action(_packet)
37433
37434#ifdef FREECIV_JSON_CONNECTION
37435 struct plocation field_addr;
37436 {
37437 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37440 }
37441#endif /* FREECIV_JSON_CONNECTION */
37442
37443 log_packet_detailed("packet_unit_do_action_100: got info about ()");
37444
37445#ifdef FREECIV_DELTA_PROTOCOL
37447 struct packet_unit_do_action *old;
37448 struct genhash **hash = pc->phs.received + PACKET_UNIT_DO_ACTION;
37449
37450 if (nullptr == *hash) {
37452 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37453 }
37454
37455 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37456 *real_packet = *old;
37457 } else {
37458 /* packet is already initialized empty */
37459 log_packet_detailed(" no old info");
37460 }
37461
37462#ifdef FREECIV_JSON_CONNECTION
37463 field_addr.name = "fields";
37464#endif /* FREECIV_JSON_CONNECTION */
37465 DIO_BV_GET(&din, &field_addr, fields);
37466
37467 if (BV_ISSET(fields, 0)) {
37468 log_packet_detailed(" got field 'actor_id'");
37469
37470#ifdef FREECIV_JSON_CONNECTION
37471 field_addr.name = "actor_id";
37472#endif /* FREECIV_JSON_CONNECTION */
37473
37474 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37476 }
37477 }
37478
37479 if (BV_ISSET(fields, 1)) {
37480 log_packet_detailed(" got field 'target_id'");
37481
37482#ifdef FREECIV_JSON_CONNECTION
37483 field_addr.name = "target_id";
37484#endif /* FREECIV_JSON_CONNECTION */
37485
37486 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37487 RECEIVE_PACKET_FIELD_ERROR(target_id);
37488 }
37489 }
37490
37491 if (BV_ISSET(fields, 2)) {
37492 log_packet_detailed(" got field 'sub_tgt_id'");
37493
37494#ifdef FREECIV_JSON_CONNECTION
37495 field_addr.name = "sub_tgt_id";
37496#endif /* FREECIV_JSON_CONNECTION */
37497
37498 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37499 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37500 }
37501 }
37502
37503 if (BV_ISSET(fields, 3)) {
37504 log_packet_detailed(" got field 'name'");
37505
37506#ifdef FREECIV_JSON_CONNECTION
37507 field_addr.name = "name";
37508#endif /* FREECIV_JSON_CONNECTION */
37509
37510 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37512 }
37513 }
37514
37515 if (BV_ISSET(fields, 4)) {
37516 log_packet_detailed(" got field 'action_type'");
37517
37518#ifdef FREECIV_JSON_CONNECTION
37519 field_addr.name = "action_type";
37520#endif /* FREECIV_JSON_CONNECTION */
37521
37522 {
37523 int readin;
37524
37525 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37526 RECEIVE_PACKET_FIELD_ERROR(action_type);
37527 }
37528 real_packet->action_type = readin;
37529 }
37530 }
37531
37532 if (nullptr == old) {
37533 old = fc_malloc(sizeof(*old));
37535 *old = *real_packet;
37537 } else {
37538 *old = *real_packet;
37539 }
37540
37541#else /* FREECIV_DELTA_PROTOCOL */
37542#ifdef FREECIV_JSON_CONNECTION
37543 field_addr.name = "actor_id";
37544#endif /* FREECIV_JSON_CONNECTION */
37545
37546 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37548 }
37549
37550#ifdef FREECIV_JSON_CONNECTION
37551 field_addr.name = "target_id";
37552#endif /* FREECIV_JSON_CONNECTION */
37553
37554 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37555 RECEIVE_PACKET_FIELD_ERROR(target_id);
37556 }
37557
37558#ifdef FREECIV_JSON_CONNECTION
37559 field_addr.name = "sub_tgt_id";
37560#endif /* FREECIV_JSON_CONNECTION */
37561
37562 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37563 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37564 }
37565
37566#ifdef FREECIV_JSON_CONNECTION
37567 field_addr.name = "name";
37568#endif /* FREECIV_JSON_CONNECTION */
37569
37570 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37572 }
37573
37574#ifdef FREECIV_JSON_CONNECTION
37575 field_addr.name = "action_type";
37576#endif /* FREECIV_JSON_CONNECTION */
37577
37578 {
37579 int readin;
37580
37581 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37582 RECEIVE_PACKET_FIELD_ERROR(action_type);
37583 }
37584 real_packet->action_type = readin;
37585 }
37586#endif /* FREECIV_DELTA_PROTOCOL */
37587
37589#undef FREE_PACKET_STRUCT
37590}
37591
37593{
37594 const struct packet_unit_do_action *real_packet = packet;
37595 int e;
37597
37598 log_packet_detailed("packet_unit_do_action_100: sending info about ()");
37599
37600#ifdef FREECIV_DELTA_PROTOCOL
37602 struct packet_unit_do_action *old;
37603 bool differ;
37604 struct genhash **hash = pc->phs.sent + PACKET_UNIT_DO_ACTION;
37605
37606 if (nullptr == *hash) {
37608 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37609 }
37610 BV_CLR_ALL(fields);
37611
37612 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37613 old = fc_malloc(sizeof(*old));
37614 /* temporary bitcopy just to insert correctly */
37615 *old = *real_packet;
37618 }
37619
37620 differ = (old->actor_id != real_packet->actor_id);
37621 if (differ) {
37622 BV_SET(fields, 0);
37623 }
37624
37625 differ = (old->target_id != real_packet->target_id);
37626 if (differ) {
37627 BV_SET(fields, 1);
37628 }
37629
37630 differ = (old->sub_tgt_id != real_packet->sub_tgt_id);
37631 if (differ) {
37632 BV_SET(fields, 2);
37633 }
37634
37635 differ = (strcmp(old->name, real_packet->name) != 0);
37636 if (differ) {
37637 BV_SET(fields, 3);
37638 }
37639
37640 differ = (old->action_type != real_packet->action_type);
37641 if (differ) {
37642 BV_SET(fields, 4);
37643 }
37644#endif /* FREECIV_DELTA_PROTOCOL */
37645
37646#ifdef FREECIV_JSON_CONNECTION
37647 struct plocation field_addr;
37648 {
37649 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37652 }
37653#endif /* FREECIV_JSON_CONNECTION */
37654
37655#ifdef FREECIV_DELTA_PROTOCOL
37656#ifdef FREECIV_JSON_CONNECTION
37657 field_addr.name = "fields";
37658#endif /* FREECIV_JSON_CONNECTION */
37659 e = 0;
37660 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37661 if (e) {
37662 log_packet_detailed("fields bitvector error detected");
37663 }
37664
37665 if (BV_ISSET(fields, 0)) {
37666 log_packet_detailed(" field 'actor_id' has changed");
37667
37668#ifdef FREECIV_JSON_CONNECTION
37669 field_addr.name = "actor_id";
37670#endif /* FREECIV_JSON_CONNECTION */
37671 e = 0;
37672
37673 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37674
37675 if (e) {
37676 log_packet_detailed("'actor_id' field error detected");
37677 }
37678 }
37679
37680 if (BV_ISSET(fields, 1)) {
37681 log_packet_detailed(" field 'target_id' has changed");
37682
37683#ifdef FREECIV_JSON_CONNECTION
37684 field_addr.name = "target_id";
37685#endif /* FREECIV_JSON_CONNECTION */
37686 e = 0;
37687
37688 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37689
37690 if (e) {
37691 log_packet_detailed("'target_id' field error detected");
37692 }
37693 }
37694
37695 if (BV_ISSET(fields, 2)) {
37696 log_packet_detailed(" field 'sub_tgt_id' has changed");
37697
37698#ifdef FREECIV_JSON_CONNECTION
37699 field_addr.name = "sub_tgt_id";
37700#endif /* FREECIV_JSON_CONNECTION */
37701 e = 0;
37702
37703 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37704
37705 if (e) {
37706 log_packet_detailed("'sub_tgt_id' field error detected");
37707 }
37708 }
37709
37710 if (BV_ISSET(fields, 3)) {
37711 log_packet_detailed(" field 'name' has changed");
37712
37713#ifdef FREECIV_JSON_CONNECTION
37714 field_addr.name = "name";
37715#endif /* FREECIV_JSON_CONNECTION */
37716 e = 0;
37717
37718 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37719
37720 if (e) {
37721 log_packet_detailed("'name' field error detected");
37722 }
37723 }
37724
37725 if (BV_ISSET(fields, 4)) {
37726 log_packet_detailed(" field 'action_type' has changed");
37727
37728#ifdef FREECIV_JSON_CONNECTION
37729 field_addr.name = "action_type";
37730#endif /* FREECIV_JSON_CONNECTION */
37731 e = 0;
37732
37733 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37734
37735 if (e) {
37736 log_packet_detailed("'action_type' field error detected");
37737 }
37738 }
37739
37740 *old = *real_packet;
37741
37742#else /* FREECIV_DELTA_PROTOCOL */
37743#ifdef FREECIV_JSON_CONNECTION
37744 field_addr.name = "actor_id";
37745#endif /* FREECIV_JSON_CONNECTION */
37746 e = 0;
37747
37748 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37749
37750 if (e) {
37751 log_packet_detailed("'actor_id' field error detected");
37752 }
37753
37754#ifdef FREECIV_JSON_CONNECTION
37755 field_addr.name = "target_id";
37756#endif /* FREECIV_JSON_CONNECTION */
37757 e = 0;
37758
37759 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37760
37761 if (e) {
37762 log_packet_detailed("'target_id' field error detected");
37763 }
37764
37765#ifdef FREECIV_JSON_CONNECTION
37766 field_addr.name = "sub_tgt_id";
37767#endif /* FREECIV_JSON_CONNECTION */
37768 e = 0;
37769
37770 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37771
37772 if (e) {
37773 log_packet_detailed("'sub_tgt_id' field error detected");
37774 }
37775
37776#ifdef FREECIV_JSON_CONNECTION
37777 field_addr.name = "name";
37778#endif /* FREECIV_JSON_CONNECTION */
37779 e = 0;
37780
37781 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37782
37783 if (e) {
37784 log_packet_detailed("'name' field error detected");
37785 }
37786
37787#ifdef FREECIV_JSON_CONNECTION
37788 field_addr.name = "action_type";
37789#endif /* FREECIV_JSON_CONNECTION */
37790 e = 0;
37791
37792 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37793
37794 if (e) {
37795 log_packet_detailed("'action_type' field error detected");
37796 }
37797#endif /* FREECIV_DELTA_PROTOCOL */
37798
37800}
37801
37803{
37804 if (!pc->used) {
37805 log_error("WARNING: trying to send data to the closed connection %s",
37807 return -1;
37808 }
37809 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet != nullptr, -1,
37810 "Handler for PACKET_UNIT_DO_ACTION not installed");
37811 return pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet(pc, packet);
37812}
37813
37814int 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)
37815{
37816 struct packet_unit_do_action packet, *real_packet = &packet;
37817
37819 real_packet->target_id = target_id;
37820 real_packet->sub_tgt_id = sub_tgt_id;
37821 sz_strlcpy(real_packet->name, name);
37822 real_packet->action_type = action_type;
37823
37825}
37826
37828{
37829 memset(packet, 0, sizeof(*packet));
37830}
37831
37832#define free_packet_unit_action_answer(_packet) (void) 0
37833#define destroy_packet_unit_action_answer free
37834
37835#ifdef FREECIV_DELTA_PROTOCOL
37836#define hash_packet_unit_action_answer_100 hash_const
37837#define cmp_packet_unit_action_answer_100 cmp_const
37839#endif /* FREECIV_DELTA_PROTOCOL */
37840
37842{
37843#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_answer(_packet)
37845
37846#ifdef FREECIV_JSON_CONNECTION
37847 struct plocation field_addr;
37848 {
37849 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37852 }
37853#endif /* FREECIV_JSON_CONNECTION */
37854
37855 log_packet_detailed("packet_unit_action_answer_100: got info about ()");
37856
37857#ifdef FREECIV_DELTA_PROTOCOL
37860 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_ANSWER;
37861
37862 if (nullptr == *hash) {
37864 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
37865 }
37866
37867 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37868 *real_packet = *old;
37869 } else {
37870 /* packet is already initialized empty */
37871 log_packet_detailed(" no old info");
37872 }
37873
37874#ifdef FREECIV_JSON_CONNECTION
37875 field_addr.name = "fields";
37876#endif /* FREECIV_JSON_CONNECTION */
37877 DIO_BV_GET(&din, &field_addr, fields);
37878
37879 if (BV_ISSET(fields, 0)) {
37880 log_packet_detailed(" got field 'actor_id'");
37881
37882#ifdef FREECIV_JSON_CONNECTION
37883 field_addr.name = "actor_id";
37884#endif /* FREECIV_JSON_CONNECTION */
37885
37886 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37888 }
37889 }
37890
37891 if (BV_ISSET(fields, 1)) {
37892 log_packet_detailed(" got field 'target_id'");
37893
37894#ifdef FREECIV_JSON_CONNECTION
37895 field_addr.name = "target_id";
37896#endif /* FREECIV_JSON_CONNECTION */
37897
37898 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37899 RECEIVE_PACKET_FIELD_ERROR(target_id);
37900 }
37901 }
37902
37903 if (BV_ISSET(fields, 2)) {
37904 log_packet_detailed(" got field 'cost'");
37905
37906#ifdef FREECIV_JSON_CONNECTION
37907 field_addr.name = "cost";
37908#endif /* FREECIV_JSON_CONNECTION */
37909
37910 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
37912 }
37913 }
37914
37915 if (BV_ISSET(fields, 3)) {
37916 log_packet_detailed(" got field 'action_type'");
37917
37918#ifdef FREECIV_JSON_CONNECTION
37919 field_addr.name = "action_type";
37920#endif /* FREECIV_JSON_CONNECTION */
37921
37922 {
37923 int readin;
37924
37925 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37926 RECEIVE_PACKET_FIELD_ERROR(action_type);
37927 }
37928 real_packet->action_type = readin;
37929 }
37930 }
37931
37932 if (BV_ISSET(fields, 4)) {
37933 log_packet_detailed(" got field 'request_kind'");
37934
37935#ifdef FREECIV_JSON_CONNECTION
37936 field_addr.name = "request_kind";
37937#endif /* FREECIV_JSON_CONNECTION */
37938
37939 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37940 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37941 }
37942 }
37943
37944 if (nullptr == old) {
37945 old = fc_malloc(sizeof(*old));
37947 *old = *real_packet;
37949 } else {
37950 *old = *real_packet;
37951 }
37952
37953#else /* FREECIV_DELTA_PROTOCOL */
37954#ifdef FREECIV_JSON_CONNECTION
37955 field_addr.name = "actor_id";
37956#endif /* FREECIV_JSON_CONNECTION */
37957
37958 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37960 }
37961
37962#ifdef FREECIV_JSON_CONNECTION
37963 field_addr.name = "target_id";
37964#endif /* FREECIV_JSON_CONNECTION */
37965
37966 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37967 RECEIVE_PACKET_FIELD_ERROR(target_id);
37968 }
37969
37970#ifdef FREECIV_JSON_CONNECTION
37971 field_addr.name = "cost";
37972#endif /* FREECIV_JSON_CONNECTION */
37973
37974 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
37976 }
37977
37978#ifdef FREECIV_JSON_CONNECTION
37979 field_addr.name = "action_type";
37980#endif /* FREECIV_JSON_CONNECTION */
37981
37982 {
37983 int readin;
37984
37985 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37986 RECEIVE_PACKET_FIELD_ERROR(action_type);
37987 }
37988 real_packet->action_type = readin;
37989 }
37990
37991#ifdef FREECIV_JSON_CONNECTION
37992 field_addr.name = "request_kind";
37993#endif /* FREECIV_JSON_CONNECTION */
37994
37995 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37996 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37997 }
37998#endif /* FREECIV_DELTA_PROTOCOL */
37999
38001#undef FREE_PACKET_STRUCT
38002}
38003
38005{
38006 const struct packet_unit_action_answer *real_packet = packet;
38007 int e;
38009
38010 log_packet_detailed("packet_unit_action_answer_100: sending info about ()");
38011
38012#ifdef FREECIV_DELTA_PROTOCOL
38015 bool differ;
38016 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_ANSWER;
38017
38018 if (nullptr == *hash) {
38020 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
38021 }
38022 BV_CLR_ALL(fields);
38023
38024 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38025 old = fc_malloc(sizeof(*old));
38026 /* temporary bitcopy just to insert correctly */
38027 *old = *real_packet;
38030 }
38031
38032 differ = (old->actor_id != real_packet->actor_id);
38033 if (differ) {
38034 BV_SET(fields, 0);
38035 }
38036
38037 differ = (old->target_id != real_packet->target_id);
38038 if (differ) {
38039 BV_SET(fields, 1);
38040 }
38041
38042 differ = (old->cost != real_packet->cost);
38043 if (differ) {
38044 BV_SET(fields, 2);
38045 }
38046
38047 differ = (old->action_type != real_packet->action_type);
38048 if (differ) {
38049 BV_SET(fields, 3);
38050 }
38051
38052 differ = (old->request_kind != real_packet->request_kind);
38053 if (differ) {
38054 BV_SET(fields, 4);
38055 }
38056#endif /* FREECIV_DELTA_PROTOCOL */
38057
38058#ifdef FREECIV_JSON_CONNECTION
38059 struct plocation field_addr;
38060 {
38061 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38064 }
38065#endif /* FREECIV_JSON_CONNECTION */
38066
38067#ifdef FREECIV_DELTA_PROTOCOL
38068#ifdef FREECIV_JSON_CONNECTION
38069 field_addr.name = "fields";
38070#endif /* FREECIV_JSON_CONNECTION */
38071 e = 0;
38072 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38073 if (e) {
38074 log_packet_detailed("fields bitvector error detected");
38075 }
38076
38077 if (BV_ISSET(fields, 0)) {
38078 log_packet_detailed(" field 'actor_id' has changed");
38079
38080#ifdef FREECIV_JSON_CONNECTION
38081 field_addr.name = "actor_id";
38082#endif /* FREECIV_JSON_CONNECTION */
38083 e = 0;
38084
38085 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38086
38087 if (e) {
38088 log_packet_detailed("'actor_id' field error detected");
38089 }
38090 }
38091
38092 if (BV_ISSET(fields, 1)) {
38093 log_packet_detailed(" field 'target_id' has changed");
38094
38095#ifdef FREECIV_JSON_CONNECTION
38096 field_addr.name = "target_id";
38097#endif /* FREECIV_JSON_CONNECTION */
38098 e = 0;
38099
38100 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38101
38102 if (e) {
38103 log_packet_detailed("'target_id' field error detected");
38104 }
38105 }
38106
38107 if (BV_ISSET(fields, 2)) {
38108 log_packet_detailed(" field 'cost' has changed");
38109
38110#ifdef FREECIV_JSON_CONNECTION
38111 field_addr.name = "cost";
38112#endif /* FREECIV_JSON_CONNECTION */
38113 e = 0;
38114
38115 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38116
38117 if (e) {
38118 log_packet_detailed("'cost' field error detected");
38119 }
38120 }
38121
38122 if (BV_ISSET(fields, 3)) {
38123 log_packet_detailed(" field 'action_type' has changed");
38124
38125#ifdef FREECIV_JSON_CONNECTION
38126 field_addr.name = "action_type";
38127#endif /* FREECIV_JSON_CONNECTION */
38128 e = 0;
38129
38130 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38131
38132 if (e) {
38133 log_packet_detailed("'action_type' field error detected");
38134 }
38135 }
38136
38137 if (BV_ISSET(fields, 4)) {
38138 log_packet_detailed(" field 'request_kind' has changed");
38139
38140#ifdef FREECIV_JSON_CONNECTION
38141 field_addr.name = "request_kind";
38142#endif /* FREECIV_JSON_CONNECTION */
38143 e = 0;
38144
38145 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38146
38147 if (e) {
38148 log_packet_detailed("'request_kind' field error detected");
38149 }
38150 }
38151
38152 *old = *real_packet;
38153
38154#else /* FREECIV_DELTA_PROTOCOL */
38155#ifdef FREECIV_JSON_CONNECTION
38156 field_addr.name = "actor_id";
38157#endif /* FREECIV_JSON_CONNECTION */
38158 e = 0;
38159
38160 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38161
38162 if (e) {
38163 log_packet_detailed("'actor_id' field error detected");
38164 }
38165
38166#ifdef FREECIV_JSON_CONNECTION
38167 field_addr.name = "target_id";
38168#endif /* FREECIV_JSON_CONNECTION */
38169 e = 0;
38170
38171 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38172
38173 if (e) {
38174 log_packet_detailed("'target_id' field error detected");
38175 }
38176
38177#ifdef FREECIV_JSON_CONNECTION
38178 field_addr.name = "cost";
38179#endif /* FREECIV_JSON_CONNECTION */
38180 e = 0;
38181
38182 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38183
38184 if (e) {
38185 log_packet_detailed("'cost' field error detected");
38186 }
38187
38188#ifdef FREECIV_JSON_CONNECTION
38189 field_addr.name = "action_type";
38190#endif /* FREECIV_JSON_CONNECTION */
38191 e = 0;
38192
38193 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38194
38195 if (e) {
38196 log_packet_detailed("'action_type' field error detected");
38197 }
38198
38199#ifdef FREECIV_JSON_CONNECTION
38200 field_addr.name = "request_kind";
38201#endif /* FREECIV_JSON_CONNECTION */
38202 e = 0;
38203
38204 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38205
38206 if (e) {
38207 log_packet_detailed("'request_kind' field error detected");
38208 }
38209#endif /* FREECIV_DELTA_PROTOCOL */
38210
38212}
38213
38215{
38216 if (!pc->used) {
38217 log_error("WARNING: trying to send data to the closed connection %s",
38219 return -1;
38220 }
38221 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet != nullptr, -1,
38222 "Handler for PACKET_UNIT_ACTION_ANSWER not installed");
38223 return pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet(pc, packet);
38224}
38225
38226int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
38227{
38228 struct packet_unit_action_answer packet, *real_packet = &packet;
38229
38231 real_packet->target_id = target_id;
38232 real_packet->cost = cost;
38233 real_packet->action_type = action_type;
38234 real_packet->request_kind = request_kind;
38235
38237}
38238
38240{
38241 memset(packet, 0, sizeof(*packet));
38242}
38243
38244#define free_packet_unit_get_actions(_packet) (void) 0
38245#define destroy_packet_unit_get_actions free
38246
38247#ifdef FREECIV_DELTA_PROTOCOL
38248#define hash_packet_unit_get_actions_100 hash_const
38249#define cmp_packet_unit_get_actions_100 cmp_const
38251#endif /* FREECIV_DELTA_PROTOCOL */
38252
38254{
38255#define FREE_PACKET_STRUCT(_packet) free_packet_unit_get_actions(_packet)
38257
38258#ifdef FREECIV_JSON_CONNECTION
38259 struct plocation field_addr;
38260 {
38261 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38264 }
38265#endif /* FREECIV_JSON_CONNECTION */
38266
38267 log_packet_detailed("packet_unit_get_actions_100: got info about ()");
38268
38269#ifdef FREECIV_DELTA_PROTOCOL
38272 struct genhash **hash = pc->phs.received + PACKET_UNIT_GET_ACTIONS;
38273
38274 if (nullptr == *hash) {
38276 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38277 }
38278
38279 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38280 *real_packet = *old;
38281 } else {
38282 /* packet is already initialized empty */
38283 log_packet_detailed(" no old info");
38284 }
38285
38286#ifdef FREECIV_JSON_CONNECTION
38287 field_addr.name = "fields";
38288#endif /* FREECIV_JSON_CONNECTION */
38289 DIO_BV_GET(&din, &field_addr, fields);
38290
38291 if (BV_ISSET(fields, 0)) {
38292 log_packet_detailed(" got field 'actor_unit_id'");
38293
38294#ifdef FREECIV_JSON_CONNECTION
38295 field_addr.name = "actor_unit_id";
38296#endif /* FREECIV_JSON_CONNECTION */
38297
38298 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38300 }
38301 }
38302
38303 if (BV_ISSET(fields, 1)) {
38304 log_packet_detailed(" got field 'target_unit_id'");
38305
38306#ifdef FREECIV_JSON_CONNECTION
38307 field_addr.name = "target_unit_id";
38308#endif /* FREECIV_JSON_CONNECTION */
38309
38310 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38311 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38312 }
38313 }
38314
38315 if (BV_ISSET(fields, 2)) {
38316 log_packet_detailed(" got field 'target_tile_id'");
38317
38318#ifdef FREECIV_JSON_CONNECTION
38319 field_addr.name = "target_tile_id";
38320#endif /* FREECIV_JSON_CONNECTION */
38321
38322 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38323 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38324 }
38325 }
38326
38327 if (BV_ISSET(fields, 3)) {
38328 log_packet_detailed(" got field 'target_extra_id'");
38329
38330#ifdef FREECIV_JSON_CONNECTION
38331 field_addr.name = "target_extra_id";
38332#endif /* FREECIV_JSON_CONNECTION */
38333
38334 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38336 }
38337 }
38338
38339 if (BV_ISSET(fields, 4)) {
38340 log_packet_detailed(" got field 'request_kind'");
38341
38342#ifdef FREECIV_JSON_CONNECTION
38343 field_addr.name = "request_kind";
38344#endif /* FREECIV_JSON_CONNECTION */
38345
38346 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38347 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38348 }
38349 }
38350
38351 if (nullptr == old) {
38352 old = fc_malloc(sizeof(*old));
38354 *old = *real_packet;
38356 } else {
38357 *old = *real_packet;
38358 }
38359
38360#else /* FREECIV_DELTA_PROTOCOL */
38361#ifdef FREECIV_JSON_CONNECTION
38362 field_addr.name = "actor_unit_id";
38363#endif /* FREECIV_JSON_CONNECTION */
38364
38365 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38367 }
38368
38369#ifdef FREECIV_JSON_CONNECTION
38370 field_addr.name = "target_unit_id";
38371#endif /* FREECIV_JSON_CONNECTION */
38372
38373 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38374 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38375 }
38376
38377#ifdef FREECIV_JSON_CONNECTION
38378 field_addr.name = "target_tile_id";
38379#endif /* FREECIV_JSON_CONNECTION */
38380
38381 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38382 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38383 }
38384
38385#ifdef FREECIV_JSON_CONNECTION
38386 field_addr.name = "target_extra_id";
38387#endif /* FREECIV_JSON_CONNECTION */
38388
38389 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38391 }
38392
38393#ifdef FREECIV_JSON_CONNECTION
38394 field_addr.name = "request_kind";
38395#endif /* FREECIV_JSON_CONNECTION */
38396
38397 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38398 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38399 }
38400#endif /* FREECIV_DELTA_PROTOCOL */
38401
38403#undef FREE_PACKET_STRUCT
38404}
38405
38407{
38408 const struct packet_unit_get_actions *real_packet = packet;
38409 int e;
38411
38412 log_packet_detailed("packet_unit_get_actions_100: sending info about ()");
38413
38414#ifdef FREECIV_DELTA_PROTOCOL
38417 bool differ;
38418 struct genhash **hash = pc->phs.sent + PACKET_UNIT_GET_ACTIONS;
38419
38420 if (nullptr == *hash) {
38422 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38423 }
38424 BV_CLR_ALL(fields);
38425
38426 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38427 old = fc_malloc(sizeof(*old));
38428 /* temporary bitcopy just to insert correctly */
38429 *old = *real_packet;
38432 }
38433
38434 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38435 if (differ) {
38436 BV_SET(fields, 0);
38437 }
38438
38439 differ = (old->target_unit_id != real_packet->target_unit_id);
38440 if (differ) {
38441 BV_SET(fields, 1);
38442 }
38443
38444 differ = (old->target_tile_id != real_packet->target_tile_id);
38445 if (differ) {
38446 BV_SET(fields, 2);
38447 }
38448
38449 differ = (old->target_extra_id != real_packet->target_extra_id);
38450 if (differ) {
38451 BV_SET(fields, 3);
38452 }
38453
38454 differ = (old->request_kind != real_packet->request_kind);
38455 if (differ) {
38456 BV_SET(fields, 4);
38457 }
38458#endif /* FREECIV_DELTA_PROTOCOL */
38459
38460#ifdef FREECIV_JSON_CONNECTION
38461 struct plocation field_addr;
38462 {
38463 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38466 }
38467#endif /* FREECIV_JSON_CONNECTION */
38468
38469#ifdef FREECIV_DELTA_PROTOCOL
38470#ifdef FREECIV_JSON_CONNECTION
38471 field_addr.name = "fields";
38472#endif /* FREECIV_JSON_CONNECTION */
38473 e = 0;
38474 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38475 if (e) {
38476 log_packet_detailed("fields bitvector error detected");
38477 }
38478
38479 if (BV_ISSET(fields, 0)) {
38480 log_packet_detailed(" field 'actor_unit_id' has changed");
38481
38482#ifdef FREECIV_JSON_CONNECTION
38483 field_addr.name = "actor_unit_id";
38484#endif /* FREECIV_JSON_CONNECTION */
38485 e = 0;
38486
38487 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38488
38489 if (e) {
38490 log_packet_detailed("'actor_unit_id' field error detected");
38491 }
38492 }
38493
38494 if (BV_ISSET(fields, 1)) {
38495 log_packet_detailed(" field 'target_unit_id' has changed");
38496
38497#ifdef FREECIV_JSON_CONNECTION
38498 field_addr.name = "target_unit_id";
38499#endif /* FREECIV_JSON_CONNECTION */
38500 e = 0;
38501
38502 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38503
38504 if (e) {
38505 log_packet_detailed("'target_unit_id' field error detected");
38506 }
38507 }
38508
38509 if (BV_ISSET(fields, 2)) {
38510 log_packet_detailed(" field 'target_tile_id' has changed");
38511
38512#ifdef FREECIV_JSON_CONNECTION
38513 field_addr.name = "target_tile_id";
38514#endif /* FREECIV_JSON_CONNECTION */
38515 e = 0;
38516
38517 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38518
38519 if (e) {
38520 log_packet_detailed("'target_tile_id' field error detected");
38521 }
38522 }
38523
38524 if (BV_ISSET(fields, 3)) {
38525 log_packet_detailed(" field 'target_extra_id' has changed");
38526
38527#ifdef FREECIV_JSON_CONNECTION
38528 field_addr.name = "target_extra_id";
38529#endif /* FREECIV_JSON_CONNECTION */
38530 e = 0;
38531
38532 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38533
38534 if (e) {
38535 log_packet_detailed("'target_extra_id' field error detected");
38536 }
38537 }
38538
38539 if (BV_ISSET(fields, 4)) {
38540 log_packet_detailed(" field 'request_kind' has changed");
38541
38542#ifdef FREECIV_JSON_CONNECTION
38543 field_addr.name = "request_kind";
38544#endif /* FREECIV_JSON_CONNECTION */
38545 e = 0;
38546
38547 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38548
38549 if (e) {
38550 log_packet_detailed("'request_kind' field error detected");
38551 }
38552 }
38553
38554 *old = *real_packet;
38555
38556#else /* FREECIV_DELTA_PROTOCOL */
38557#ifdef FREECIV_JSON_CONNECTION
38558 field_addr.name = "actor_unit_id";
38559#endif /* FREECIV_JSON_CONNECTION */
38560 e = 0;
38561
38562 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38563
38564 if (e) {
38565 log_packet_detailed("'actor_unit_id' field error detected");
38566 }
38567
38568#ifdef FREECIV_JSON_CONNECTION
38569 field_addr.name = "target_unit_id";
38570#endif /* FREECIV_JSON_CONNECTION */
38571 e = 0;
38572
38573 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38574
38575 if (e) {
38576 log_packet_detailed("'target_unit_id' field error detected");
38577 }
38578
38579#ifdef FREECIV_JSON_CONNECTION
38580 field_addr.name = "target_tile_id";
38581#endif /* FREECIV_JSON_CONNECTION */
38582 e = 0;
38583
38584 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38585
38586 if (e) {
38587 log_packet_detailed("'target_tile_id' field error detected");
38588 }
38589
38590#ifdef FREECIV_JSON_CONNECTION
38591 field_addr.name = "target_extra_id";
38592#endif /* FREECIV_JSON_CONNECTION */
38593 e = 0;
38594
38595 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38596
38597 if (e) {
38598 log_packet_detailed("'target_extra_id' field error detected");
38599 }
38600
38601#ifdef FREECIV_JSON_CONNECTION
38602 field_addr.name = "request_kind";
38603#endif /* FREECIV_JSON_CONNECTION */
38604 e = 0;
38605
38606 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38607
38608 if (e) {
38609 log_packet_detailed("'request_kind' field error detected");
38610 }
38611#endif /* FREECIV_DELTA_PROTOCOL */
38612
38614}
38615
38617{
38618 if (!pc->used) {
38619 log_error("WARNING: trying to send data to the closed connection %s",
38621 return -1;
38622 }
38623 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet != nullptr, -1,
38624 "Handler for PACKET_UNIT_GET_ACTIONS not installed");
38625 return pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet(pc, packet);
38626}
38627
38628int 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)
38629{
38630 struct packet_unit_get_actions packet, *real_packet = &packet;
38631
38633 real_packet->target_unit_id = target_unit_id;
38634 real_packet->target_tile_id = target_tile_id;
38635 real_packet->target_extra_id = target_extra_id;
38636 real_packet->request_kind = request_kind;
38637
38639}
38640
38641static inline void init_packet_unit_actions(struct packet_unit_actions *packet)
38642{
38643 memset(packet, 0, sizeof(*packet));
38644}
38645
38646#define free_packet_unit_actions(_packet) (void) 0
38647#define destroy_packet_unit_actions free
38648
38649#ifdef FREECIV_DELTA_PROTOCOL
38650#define hash_packet_unit_actions_100 hash_const
38651#define cmp_packet_unit_actions_100 cmp_const
38653#endif /* FREECIV_DELTA_PROTOCOL */
38654
38656{
38657#define FREE_PACKET_STRUCT(_packet) free_packet_unit_actions(_packet)
38659
38660#ifdef FREECIV_JSON_CONNECTION
38661 struct plocation field_addr;
38662 {
38663 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38666 }
38667#endif /* FREECIV_JSON_CONNECTION */
38668
38669 log_packet_detailed("packet_unit_actions_100: got info about ()");
38670
38671#ifdef FREECIV_DELTA_PROTOCOL
38673 struct packet_unit_actions *old;
38674 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTIONS;
38675
38676 if (nullptr == *hash) {
38678 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
38679 }
38680
38681 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38682 *real_packet = *old;
38683 } else {
38684 /* packet is already initialized empty */
38685 log_packet_detailed(" no old info");
38686 }
38687
38688#ifdef FREECIV_JSON_CONNECTION
38689 field_addr.name = "fields";
38690#endif /* FREECIV_JSON_CONNECTION */
38691 DIO_BV_GET(&din, &field_addr, fields);
38692
38693 if (BV_ISSET(fields, 0)) {
38694 log_packet_detailed(" got field 'actor_unit_id'");
38695
38696#ifdef FREECIV_JSON_CONNECTION
38697 field_addr.name = "actor_unit_id";
38698#endif /* FREECIV_JSON_CONNECTION */
38699
38700 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38702 }
38703 }
38704
38705 if (BV_ISSET(fields, 1)) {
38706 log_packet_detailed(" got field 'target_unit_id'");
38707
38708#ifdef FREECIV_JSON_CONNECTION
38709 field_addr.name = "target_unit_id";
38710#endif /* FREECIV_JSON_CONNECTION */
38711
38712 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38713 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38714 }
38715 }
38716
38717 if (BV_ISSET(fields, 2)) {
38718 log_packet_detailed(" got field 'target_city_id'");
38719
38720#ifdef FREECIV_JSON_CONNECTION
38721 field_addr.name = "target_city_id";
38722#endif /* FREECIV_JSON_CONNECTION */
38723
38724 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38725 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38726 }
38727 }
38728
38729 if (BV_ISSET(fields, 3)) {
38730 log_packet_detailed(" got field 'target_tile_id'");
38731
38732#ifdef FREECIV_JSON_CONNECTION
38733 field_addr.name = "target_tile_id";
38734#endif /* FREECIV_JSON_CONNECTION */
38735
38736 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38737 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38738 }
38739 }
38740
38741 if (BV_ISSET(fields, 4)) {
38742 log_packet_detailed(" got field 'target_extra_id'");
38743
38744#ifdef FREECIV_JSON_CONNECTION
38745 field_addr.name = "target_extra_id";
38746#endif /* FREECIV_JSON_CONNECTION */
38747
38748 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38750 }
38751 }
38752
38753 if (BV_ISSET(fields, 5)) {
38754 log_packet_detailed(" got field 'request_kind'");
38755
38756#ifdef FREECIV_JSON_CONNECTION
38757 field_addr.name = "request_kind";
38758#endif /* FREECIV_JSON_CONNECTION */
38759
38760 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38761 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38762 }
38763 }
38764
38765 if (BV_ISSET(fields, 6)) {
38766 log_packet_detailed(" got field 'action_probabilities'");
38767
38768#ifdef FREECIV_JSON_CONNECTION
38769 field_addr.name = "action_probabilities";
38770#endif /* FREECIV_JSON_CONNECTION */
38771
38772 {
38773 int i;
38774
38775
38776#ifdef FREECIV_JSON_CONNECTION
38777 /* Enter array. */
38778 field_addr.sub_location = plocation_elem_new(0);
38779#endif /* FREECIV_JSON_CONNECTION */
38780
38781 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38782#ifdef FREECIV_JSON_CONNECTION
38783 /* Next array element */
38784 field_addr.sub_location->number = i;
38785#endif /* FREECIV_JSON_CONNECTION */
38786
38787 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38788 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38789 }
38790 }
38791
38792#ifdef FREECIV_JSON_CONNECTION
38793 /* Exit array. */
38794 FC_FREE(field_addr.sub_location);
38795#endif /* FREECIV_JSON_CONNECTION */
38796 }
38797 }
38798
38799 if (nullptr == old) {
38800 old = fc_malloc(sizeof(*old));
38802 *old = *real_packet;
38804 } else {
38805 *old = *real_packet;
38806 }
38807
38808#else /* FREECIV_DELTA_PROTOCOL */
38809#ifdef FREECIV_JSON_CONNECTION
38810 field_addr.name = "actor_unit_id";
38811#endif /* FREECIV_JSON_CONNECTION */
38812
38813 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38815 }
38816
38817#ifdef FREECIV_JSON_CONNECTION
38818 field_addr.name = "target_unit_id";
38819#endif /* FREECIV_JSON_CONNECTION */
38820
38821 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38822 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38823 }
38824
38825#ifdef FREECIV_JSON_CONNECTION
38826 field_addr.name = "target_city_id";
38827#endif /* FREECIV_JSON_CONNECTION */
38828
38829 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38830 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38831 }
38832
38833#ifdef FREECIV_JSON_CONNECTION
38834 field_addr.name = "target_tile_id";
38835#endif /* FREECIV_JSON_CONNECTION */
38836
38837 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38838 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38839 }
38840
38841#ifdef FREECIV_JSON_CONNECTION
38842 field_addr.name = "target_extra_id";
38843#endif /* FREECIV_JSON_CONNECTION */
38844
38845 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38847 }
38848
38849#ifdef FREECIV_JSON_CONNECTION
38850 field_addr.name = "request_kind";
38851#endif /* FREECIV_JSON_CONNECTION */
38852
38853 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38854 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38855 }
38856
38857#ifdef FREECIV_JSON_CONNECTION
38858 field_addr.name = "action_probabilities";
38859#endif /* FREECIV_JSON_CONNECTION */
38860
38861 {
38862 int i;
38863
38864
38865#ifdef FREECIV_JSON_CONNECTION
38866 /* Enter array. */
38867 field_addr.sub_location = plocation_elem_new(0);
38868#endif /* FREECIV_JSON_CONNECTION */
38869
38870 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38871#ifdef FREECIV_JSON_CONNECTION
38872 /* Next array element */
38873 field_addr.sub_location->number = i;
38874#endif /* FREECIV_JSON_CONNECTION */
38875
38876 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38877 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38878 }
38879 }
38880
38881#ifdef FREECIV_JSON_CONNECTION
38882 /* Exit array. */
38883 FC_FREE(field_addr.sub_location);
38884#endif /* FREECIV_JSON_CONNECTION */
38885 }
38886#endif /* FREECIV_DELTA_PROTOCOL */
38887
38889#undef FREE_PACKET_STRUCT
38890}
38891
38892static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
38893{
38894 const struct packet_unit_actions *real_packet = packet;
38895 int e;
38897
38898 log_packet_detailed("packet_unit_actions_100: sending info about ()");
38899
38900#ifdef FREECIV_DELTA_PROTOCOL
38902 struct packet_unit_actions *old;
38903 bool differ;
38904 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTIONS;
38905
38906 if (nullptr == *hash) {
38908 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
38909 }
38910 BV_CLR_ALL(fields);
38911
38912 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38913 old = fc_malloc(sizeof(*old));
38914 /* temporary bitcopy just to insert correctly */
38915 *old = *real_packet;
38918 }
38919
38920 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38921 if (differ) {
38922 BV_SET(fields, 0);
38923 }
38924
38925 differ = (old->target_unit_id != real_packet->target_unit_id);
38926 if (differ) {
38927 BV_SET(fields, 1);
38928 }
38929
38930 differ = (old->target_city_id != real_packet->target_city_id);
38931 if (differ) {
38932 BV_SET(fields, 2);
38933 }
38934
38935 differ = (old->target_tile_id != real_packet->target_tile_id);
38936 if (differ) {
38937 BV_SET(fields, 3);
38938 }
38939
38940 differ = (old->target_extra_id != real_packet->target_extra_id);
38941 if (differ) {
38942 BV_SET(fields, 4);
38943 }
38944
38945 differ = (old->request_kind != real_packet->request_kind);
38946 if (differ) {
38947 BV_SET(fields, 5);
38948 }
38949
38950 differ = FALSE;
38951 {
38952 int i;
38953
38954 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38955 differ = !are_action_probabilitys_equal(&old->action_probabilities[i], &real_packet->action_probabilities[i]);
38956 if (differ) {
38957 break;
38958 }
38959 }
38960 }
38961 if (differ) {
38962 BV_SET(fields, 6);
38963 }
38964#endif /* FREECIV_DELTA_PROTOCOL */
38965
38966#ifdef FREECIV_JSON_CONNECTION
38967 struct plocation field_addr;
38968 {
38969 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38972 }
38973#endif /* FREECIV_JSON_CONNECTION */
38974
38975#ifdef FREECIV_DELTA_PROTOCOL
38976#ifdef FREECIV_JSON_CONNECTION
38977 field_addr.name = "fields";
38978#endif /* FREECIV_JSON_CONNECTION */
38979 e = 0;
38980 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38981 if (e) {
38982 log_packet_detailed("fields bitvector error detected");
38983 }
38984
38985 if (BV_ISSET(fields, 0)) {
38986 log_packet_detailed(" field 'actor_unit_id' has changed");
38987
38988#ifdef FREECIV_JSON_CONNECTION
38989 field_addr.name = "actor_unit_id";
38990#endif /* FREECIV_JSON_CONNECTION */
38991 e = 0;
38992
38993 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38994
38995 if (e) {
38996 log_packet_detailed("'actor_unit_id' field error detected");
38997 }
38998 }
38999
39000 if (BV_ISSET(fields, 1)) {
39001 log_packet_detailed(" field 'target_unit_id' has changed");
39002
39003#ifdef FREECIV_JSON_CONNECTION
39004 field_addr.name = "target_unit_id";
39005#endif /* FREECIV_JSON_CONNECTION */
39006 e = 0;
39007
39008 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39009
39010 if (e) {
39011 log_packet_detailed("'target_unit_id' field error detected");
39012 }
39013 }
39014
39015 if (BV_ISSET(fields, 2)) {
39016 log_packet_detailed(" field 'target_city_id' has changed");
39017
39018#ifdef FREECIV_JSON_CONNECTION
39019 field_addr.name = "target_city_id";
39020#endif /* FREECIV_JSON_CONNECTION */
39021 e = 0;
39022
39023 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39024
39025 if (e) {
39026 log_packet_detailed("'target_city_id' field error detected");
39027 }
39028 }
39029
39030 if (BV_ISSET(fields, 3)) {
39031 log_packet_detailed(" field 'target_tile_id' has changed");
39032
39033#ifdef FREECIV_JSON_CONNECTION
39034 field_addr.name = "target_tile_id";
39035#endif /* FREECIV_JSON_CONNECTION */
39036 e = 0;
39037
39038 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39039
39040 if (e) {
39041 log_packet_detailed("'target_tile_id' field error detected");
39042 }
39043 }
39044
39045 if (BV_ISSET(fields, 4)) {
39046 log_packet_detailed(" field 'target_extra_id' has changed");
39047
39048#ifdef FREECIV_JSON_CONNECTION
39049 field_addr.name = "target_extra_id";
39050#endif /* FREECIV_JSON_CONNECTION */
39051 e = 0;
39052
39053 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39054
39055 if (e) {
39056 log_packet_detailed("'target_extra_id' field error detected");
39057 }
39058 }
39059
39060 if (BV_ISSET(fields, 5)) {
39061 log_packet_detailed(" field 'request_kind' has changed");
39062
39063#ifdef FREECIV_JSON_CONNECTION
39064 field_addr.name = "request_kind";
39065#endif /* FREECIV_JSON_CONNECTION */
39066 e = 0;
39067
39068 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39069
39070 if (e) {
39071 log_packet_detailed("'request_kind' field error detected");
39072 }
39073 }
39074
39075 if (BV_ISSET(fields, 6)) {
39076 log_packet_detailed(" field 'action_probabilities' has changed");
39077
39078#ifdef FREECIV_JSON_CONNECTION
39079 field_addr.name = "action_probabilities";
39080#endif /* FREECIV_JSON_CONNECTION */
39081 e = 0;
39082
39083 {
39084 int i;
39085
39086#ifdef FREECIV_JSON_CONNECTION
39087 /* Create the array. */
39089
39090 /* Enter array. */
39091 field_addr.sub_location = plocation_elem_new(0);
39092#endif /* FREECIV_JSON_CONNECTION */
39093
39094 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39095#ifdef FREECIV_JSON_CONNECTION
39096 /* Next array element. */
39097 field_addr.sub_location->number = i;
39098#endif /* FREECIV_JSON_CONNECTION */
39099
39100 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39101 }
39102
39103#ifdef FREECIV_JSON_CONNECTION
39104 /* Exit array. */
39105 FC_FREE(field_addr.sub_location);
39106#endif /* FREECIV_JSON_CONNECTION */
39107 }
39108
39109 if (e) {
39110 log_packet_detailed("'action_probabilities' field error detected");
39111 }
39112 }
39113
39114 *old = *real_packet;
39115
39116#else /* FREECIV_DELTA_PROTOCOL */
39117#ifdef FREECIV_JSON_CONNECTION
39118 field_addr.name = "actor_unit_id";
39119#endif /* FREECIV_JSON_CONNECTION */
39120 e = 0;
39121
39122 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39123
39124 if (e) {
39125 log_packet_detailed("'actor_unit_id' field error detected");
39126 }
39127
39128#ifdef FREECIV_JSON_CONNECTION
39129 field_addr.name = "target_unit_id";
39130#endif /* FREECIV_JSON_CONNECTION */
39131 e = 0;
39132
39133 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39134
39135 if (e) {
39136 log_packet_detailed("'target_unit_id' field error detected");
39137 }
39138
39139#ifdef FREECIV_JSON_CONNECTION
39140 field_addr.name = "target_city_id";
39141#endif /* FREECIV_JSON_CONNECTION */
39142 e = 0;
39143
39144 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39145
39146 if (e) {
39147 log_packet_detailed("'target_city_id' field error detected");
39148 }
39149
39150#ifdef FREECIV_JSON_CONNECTION
39151 field_addr.name = "target_tile_id";
39152#endif /* FREECIV_JSON_CONNECTION */
39153 e = 0;
39154
39155 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39156
39157 if (e) {
39158 log_packet_detailed("'target_tile_id' field error detected");
39159 }
39160
39161#ifdef FREECIV_JSON_CONNECTION
39162 field_addr.name = "target_extra_id";
39163#endif /* FREECIV_JSON_CONNECTION */
39164 e = 0;
39165
39166 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39167
39168 if (e) {
39169 log_packet_detailed("'target_extra_id' field error detected");
39170 }
39171
39172#ifdef FREECIV_JSON_CONNECTION
39173 field_addr.name = "request_kind";
39174#endif /* FREECIV_JSON_CONNECTION */
39175 e = 0;
39176
39177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39178
39179 if (e) {
39180 log_packet_detailed("'request_kind' field error detected");
39181 }
39182
39183#ifdef FREECIV_JSON_CONNECTION
39184 field_addr.name = "action_probabilities";
39185#endif /* FREECIV_JSON_CONNECTION */
39186 e = 0;
39187
39188 {
39189 int i;
39190
39191#ifdef FREECIV_JSON_CONNECTION
39192 /* Create the array. */
39194
39195 /* Enter array. */
39196 field_addr.sub_location = plocation_elem_new(0);
39197#endif /* FREECIV_JSON_CONNECTION */
39198
39199 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39200#ifdef FREECIV_JSON_CONNECTION
39201 /* Next array element. */
39202 field_addr.sub_location->number = i;
39203#endif /* FREECIV_JSON_CONNECTION */
39204
39205 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39206 }
39207
39208#ifdef FREECIV_JSON_CONNECTION
39209 /* Exit array. */
39210 FC_FREE(field_addr.sub_location);
39211#endif /* FREECIV_JSON_CONNECTION */
39212 }
39213
39214 if (e) {
39215 log_packet_detailed("'action_probabilities' field error detected");
39216 }
39217#endif /* FREECIV_DELTA_PROTOCOL */
39218
39220}
39221
39223{
39224 if (!pc->used) {
39225 log_error("WARNING: trying to send data to the closed connection %s",
39227 return -1;
39228 }
39229 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet != nullptr, -1,
39230 "Handler for PACKET_UNIT_ACTIONS not installed");
39231 return pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet(pc, packet);
39232}
39233
39234int 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)
39235{
39236 struct packet_unit_actions packet, *real_packet = &packet;
39237
39239 real_packet->target_unit_id = target_unit_id;
39240 real_packet->target_city_id = target_city_id;
39241 real_packet->target_tile_id = target_tile_id;
39242 real_packet->target_extra_id = target_extra_id;
39243 real_packet->request_kind = request_kind;
39244 {
39245 int i;
39246
39247 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39248 real_packet->action_probabilities[i] = action_probabilities[i];
39249 }
39250 }
39251
39253}
39254
39256{
39257 memset(packet, 0, sizeof(*packet));
39258}
39259
39260#define free_packet_unit_change_activity(_packet) (void) 0
39261#define destroy_packet_unit_change_activity free
39262
39263#ifdef FREECIV_DELTA_PROTOCOL
39264#define hash_packet_unit_change_activity_100 hash_const
39265#define cmp_packet_unit_change_activity_100 cmp_const
39267#endif /* FREECIV_DELTA_PROTOCOL */
39268
39270{
39271#define FREE_PACKET_STRUCT(_packet) free_packet_unit_change_activity(_packet)
39273
39274#ifdef FREECIV_JSON_CONNECTION
39275 struct plocation field_addr;
39276 {
39277 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39280 }
39281#endif /* FREECIV_JSON_CONNECTION */
39282
39283 log_packet_detailed("packet_unit_change_activity_100: got info about ()");
39284
39285#ifdef FREECIV_DELTA_PROTOCOL
39288 struct genhash **hash = pc->phs.received + PACKET_UNIT_CHANGE_ACTIVITY;
39289
39290 if (nullptr == *hash) {
39292 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39293 }
39294
39295 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39296 *real_packet = *old;
39297 } else {
39298 /* packet is already initialized empty */
39299 log_packet_detailed(" no old info");
39300 }
39301
39302#ifdef FREECIV_JSON_CONNECTION
39303 field_addr.name = "fields";
39304#endif /* FREECIV_JSON_CONNECTION */
39305 DIO_BV_GET(&din, &field_addr, fields);
39306
39307 if (BV_ISSET(fields, 0)) {
39308 log_packet_detailed(" got field 'unit_id'");
39309
39310#ifdef FREECIV_JSON_CONNECTION
39311 field_addr.name = "unit_id";
39312#endif /* FREECIV_JSON_CONNECTION */
39313
39314 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39316 }
39317 }
39318
39319 if (BV_ISSET(fields, 1)) {
39320 log_packet_detailed(" got field 'activity'");
39321
39322#ifdef FREECIV_JSON_CONNECTION
39323 field_addr.name = "activity";
39324#endif /* FREECIV_JSON_CONNECTION */
39325
39326 {
39327 int readin;
39328
39329 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39331 }
39332 real_packet->activity = readin;
39333 }
39334 }
39335
39336 if (BV_ISSET(fields, 2)) {
39337 log_packet_detailed(" got field 'target'");
39338
39339#ifdef FREECIV_JSON_CONNECTION
39340 field_addr.name = "target";
39341#endif /* FREECIV_JSON_CONNECTION */
39342
39343 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39345 }
39346 }
39347
39348 if (nullptr == old) {
39349 old = fc_malloc(sizeof(*old));
39351 *old = *real_packet;
39353 } else {
39354 *old = *real_packet;
39355 }
39356
39357#else /* FREECIV_DELTA_PROTOCOL */
39358#ifdef FREECIV_JSON_CONNECTION
39359 field_addr.name = "unit_id";
39360#endif /* FREECIV_JSON_CONNECTION */
39361
39362 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39364 }
39365
39366#ifdef FREECIV_JSON_CONNECTION
39367 field_addr.name = "activity";
39368#endif /* FREECIV_JSON_CONNECTION */
39369
39370 {
39371 int readin;
39372
39373 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39375 }
39376 real_packet->activity = readin;
39377 }
39378
39379#ifdef FREECIV_JSON_CONNECTION
39380 field_addr.name = "target";
39381#endif /* FREECIV_JSON_CONNECTION */
39382
39383 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39385 }
39386#endif /* FREECIV_DELTA_PROTOCOL */
39387
39389#undef FREE_PACKET_STRUCT
39390}
39391
39393{
39394 const struct packet_unit_change_activity *real_packet = packet;
39395 int e;
39397
39398 log_packet_detailed("packet_unit_change_activity_100: sending info about ()");
39399
39400#ifdef FREECIV_DELTA_PROTOCOL
39403 bool differ;
39404 struct genhash **hash = pc->phs.sent + PACKET_UNIT_CHANGE_ACTIVITY;
39405
39406 if (nullptr == *hash) {
39408 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39409 }
39410 BV_CLR_ALL(fields);
39411
39412 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39413 old = fc_malloc(sizeof(*old));
39414 /* temporary bitcopy just to insert correctly */
39415 *old = *real_packet;
39418 }
39419
39420 differ = (old->unit_id != real_packet->unit_id);
39421 if (differ) {
39422 BV_SET(fields, 0);
39423 }
39424
39425 differ = (old->activity != real_packet->activity);
39426 if (differ) {
39427 BV_SET(fields, 1);
39428 }
39429
39430 differ = (old->target != real_packet->target);
39431 if (differ) {
39432 BV_SET(fields, 2);
39433 }
39434#endif /* FREECIV_DELTA_PROTOCOL */
39435
39436#ifdef FREECIV_JSON_CONNECTION
39437 struct plocation field_addr;
39438 {
39439 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39442 }
39443#endif /* FREECIV_JSON_CONNECTION */
39444
39445#ifdef FREECIV_DELTA_PROTOCOL
39446#ifdef FREECIV_JSON_CONNECTION
39447 field_addr.name = "fields";
39448#endif /* FREECIV_JSON_CONNECTION */
39449 e = 0;
39450 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39451 if (e) {
39452 log_packet_detailed("fields bitvector error detected");
39453 }
39454
39455 if (BV_ISSET(fields, 0)) {
39456 log_packet_detailed(" field 'unit_id' has changed");
39457
39458#ifdef FREECIV_JSON_CONNECTION
39459 field_addr.name = "unit_id";
39460#endif /* FREECIV_JSON_CONNECTION */
39461 e = 0;
39462
39463 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39464
39465 if (e) {
39466 log_packet_detailed("'unit_id' field error detected");
39467 }
39468 }
39469
39470 if (BV_ISSET(fields, 1)) {
39471 log_packet_detailed(" field 'activity' has changed");
39472
39473#ifdef FREECIV_JSON_CONNECTION
39474 field_addr.name = "activity";
39475#endif /* FREECIV_JSON_CONNECTION */
39476 e = 0;
39477
39478 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39479
39480 if (e) {
39481 log_packet_detailed("'activity' field error detected");
39482 }
39483 }
39484
39485 if (BV_ISSET(fields, 2)) {
39486 log_packet_detailed(" field 'target' has changed");
39487
39488#ifdef FREECIV_JSON_CONNECTION
39489 field_addr.name = "target";
39490#endif /* FREECIV_JSON_CONNECTION */
39491 e = 0;
39492
39493 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39494
39495 if (e) {
39496 log_packet_detailed("'target' field error detected");
39497 }
39498 }
39499
39500 *old = *real_packet;
39501
39502#else /* FREECIV_DELTA_PROTOCOL */
39503#ifdef FREECIV_JSON_CONNECTION
39504 field_addr.name = "unit_id";
39505#endif /* FREECIV_JSON_CONNECTION */
39506 e = 0;
39507
39508 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39509
39510 if (e) {
39511 log_packet_detailed("'unit_id' field error detected");
39512 }
39513
39514#ifdef FREECIV_JSON_CONNECTION
39515 field_addr.name = "activity";
39516#endif /* FREECIV_JSON_CONNECTION */
39517 e = 0;
39518
39519 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39520
39521 if (e) {
39522 log_packet_detailed("'activity' field error detected");
39523 }
39524
39525#ifdef FREECIV_JSON_CONNECTION
39526 field_addr.name = "target";
39527#endif /* FREECIV_JSON_CONNECTION */
39528 e = 0;
39529
39530 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39531
39532 if (e) {
39533 log_packet_detailed("'target' field error detected");
39534 }
39535#endif /* FREECIV_DELTA_PROTOCOL */
39536
39538}
39539
39541{
39542 if (!pc->used) {
39543 log_error("WARNING: trying to send data to the closed connection %s",
39545 return -1;
39546 }
39547 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet != nullptr, -1,
39548 "Handler for PACKET_UNIT_CHANGE_ACTIVITY not installed");
39549 return pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet(pc, packet);
39550}
39551
39552int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
39553{
39554 struct packet_unit_change_activity packet, *real_packet = &packet;
39555
39557 real_packet->activity = activity;
39558 real_packet->target = target;
39559
39561}
39562
39564{
39565 memset(packet, 0, sizeof(*packet));
39566}
39567
39568#define free_packet_diplomacy_init_meeting_req(_packet) (void) 0
39569#define destroy_packet_diplomacy_init_meeting_req free
39570
39571#ifdef FREECIV_DELTA_PROTOCOL
39572#define hash_packet_diplomacy_init_meeting_req_100 hash_const
39573#define cmp_packet_diplomacy_init_meeting_req_100 cmp_const
39575#endif /* FREECIV_DELTA_PROTOCOL */
39576
39578{
39579#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting_req(_packet)
39581
39582#ifdef FREECIV_JSON_CONNECTION
39583 struct plocation field_addr;
39584 {
39585 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39588 }
39589#endif /* FREECIV_JSON_CONNECTION */
39590
39591 log_packet_detailed("packet_diplomacy_init_meeting_req_100: got info about ()");
39592
39593#ifdef FREECIV_DELTA_PROTOCOL
39596 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39597
39598 if (nullptr == *hash) {
39600 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39601 }
39602
39603 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39604 *real_packet = *old;
39605 } else {
39606 /* packet is already initialized empty */
39607 log_packet_detailed(" no old info");
39608 }
39609
39610#ifdef FREECIV_JSON_CONNECTION
39611 field_addr.name = "fields";
39612#endif /* FREECIV_JSON_CONNECTION */
39613 DIO_BV_GET(&din, &field_addr, fields);
39614
39615 if (BV_ISSET(fields, 0)) {
39616 log_packet_detailed(" got field 'counterpart'");
39617
39618#ifdef FREECIV_JSON_CONNECTION
39619 field_addr.name = "counterpart";
39620#endif /* FREECIV_JSON_CONNECTION */
39621
39622 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39623 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39624 }
39625 }
39626
39627 if (nullptr == old) {
39628 old = fc_malloc(sizeof(*old));
39630 *old = *real_packet;
39632 } else {
39633 *old = *real_packet;
39634 }
39635
39636#else /* FREECIV_DELTA_PROTOCOL */
39637#ifdef FREECIV_JSON_CONNECTION
39638 field_addr.name = "counterpart";
39639#endif /* FREECIV_JSON_CONNECTION */
39640
39641 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39642 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39643 }
39644#endif /* FREECIV_DELTA_PROTOCOL */
39645
39647#undef FREE_PACKET_STRUCT
39648}
39649
39651{
39652 const struct packet_diplomacy_init_meeting_req *real_packet = packet;
39653 int e;
39655
39656 log_packet_detailed("packet_diplomacy_init_meeting_req_100: sending info about ()");
39657
39658#ifdef FREECIV_DELTA_PROTOCOL
39661 bool differ;
39662 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39663
39664 if (nullptr == *hash) {
39666 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39667 }
39668 BV_CLR_ALL(fields);
39669
39670 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39671 old = fc_malloc(sizeof(*old));
39672 /* temporary bitcopy just to insert correctly */
39673 *old = *real_packet;
39676 }
39677
39678 differ = (old->counterpart != real_packet->counterpart);
39679 if (differ) {
39680 BV_SET(fields, 0);
39681 }
39682#endif /* FREECIV_DELTA_PROTOCOL */
39683
39684#ifdef FREECIV_JSON_CONNECTION
39685 struct plocation field_addr;
39686 {
39687 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39690 }
39691#endif /* FREECIV_JSON_CONNECTION */
39692
39693#ifdef FREECIV_DELTA_PROTOCOL
39694#ifdef FREECIV_JSON_CONNECTION
39695 field_addr.name = "fields";
39696#endif /* FREECIV_JSON_CONNECTION */
39697 e = 0;
39698 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39699 if (e) {
39700 log_packet_detailed("fields bitvector error detected");
39701 }
39702
39703 if (BV_ISSET(fields, 0)) {
39704 log_packet_detailed(" field 'counterpart' has changed");
39705
39706#ifdef FREECIV_JSON_CONNECTION
39707 field_addr.name = "counterpart";
39708#endif /* FREECIV_JSON_CONNECTION */
39709 e = 0;
39710
39711 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39712
39713 if (e) {
39714 log_packet_detailed("'counterpart' field error detected");
39715 }
39716 }
39717
39718 *old = *real_packet;
39719
39720#else /* FREECIV_DELTA_PROTOCOL */
39721#ifdef FREECIV_JSON_CONNECTION
39722 field_addr.name = "counterpart";
39723#endif /* FREECIV_JSON_CONNECTION */
39724 e = 0;
39725
39726 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39727
39728 if (e) {
39729 log_packet_detailed("'counterpart' field error detected");
39730 }
39731#endif /* FREECIV_DELTA_PROTOCOL */
39732
39734}
39735
39737{
39738 if (!pc->used) {
39739 log_error("WARNING: trying to send data to the closed connection %s",
39741 return -1;
39742 }
39743 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet != nullptr, -1,
39744 "Handler for PACKET_DIPLOMACY_INIT_MEETING_REQ not installed");
39745 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet(pc, packet);
39746}
39747
39749{
39750 struct packet_diplomacy_init_meeting_req packet, *real_packet = &packet;
39751
39753
39755}
39756
39758{
39759 memset(packet, 0, sizeof(*packet));
39760}
39761
39762#define free_packet_diplomacy_init_meeting(_packet) (void) 0
39763#define destroy_packet_diplomacy_init_meeting free
39764
39765#ifdef FREECIV_DELTA_PROTOCOL
39766#define hash_packet_diplomacy_init_meeting_100 hash_const
39767#define cmp_packet_diplomacy_init_meeting_100 cmp_const
39769#endif /* FREECIV_DELTA_PROTOCOL */
39770
39772{
39773#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting(_packet)
39775
39776#ifdef FREECIV_JSON_CONNECTION
39777 struct plocation field_addr;
39778 {
39779 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39782 }
39783#endif /* FREECIV_JSON_CONNECTION */
39784
39785 log_packet_detailed("packet_diplomacy_init_meeting_100: got info about ()");
39786
39787#ifdef FREECIV_DELTA_PROTOCOL
39790 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING;
39791
39792 if (nullptr == *hash) {
39794 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39795 }
39796
39797 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39798 *real_packet = *old;
39799 } else {
39800 /* packet is already initialized empty */
39801 log_packet_detailed(" no old info");
39802 }
39803
39804#ifdef FREECIV_JSON_CONNECTION
39805 field_addr.name = "fields";
39806#endif /* FREECIV_JSON_CONNECTION */
39807 DIO_BV_GET(&din, &field_addr, fields);
39808
39809 if (BV_ISSET(fields, 0)) {
39810 log_packet_detailed(" got field 'counterpart'");
39811
39812#ifdef FREECIV_JSON_CONNECTION
39813 field_addr.name = "counterpart";
39814#endif /* FREECIV_JSON_CONNECTION */
39815
39816 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39817 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39818 }
39819 }
39820
39821 if (BV_ISSET(fields, 1)) {
39822 log_packet_detailed(" got field 'initiated_from'");
39823
39824#ifdef FREECIV_JSON_CONNECTION
39825 field_addr.name = "initiated_from";
39826#endif /* FREECIV_JSON_CONNECTION */
39827
39828 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39829 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39830 }
39831 }
39832
39833 if (nullptr == old) {
39834 old = fc_malloc(sizeof(*old));
39836 *old = *real_packet;
39838 } else {
39839 *old = *real_packet;
39840 }
39841
39842#else /* FREECIV_DELTA_PROTOCOL */
39843#ifdef FREECIV_JSON_CONNECTION
39844 field_addr.name = "counterpart";
39845#endif /* FREECIV_JSON_CONNECTION */
39846
39847 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39848 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39849 }
39850
39851#ifdef FREECIV_JSON_CONNECTION
39852 field_addr.name = "initiated_from";
39853#endif /* FREECIV_JSON_CONNECTION */
39854
39855 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39856 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39857 }
39858#endif /* FREECIV_DELTA_PROTOCOL */
39859
39861#undef FREE_PACKET_STRUCT
39862}
39863
39865{
39866 const struct packet_diplomacy_init_meeting *real_packet = packet;
39867 int e;
39869
39870 log_packet_detailed("packet_diplomacy_init_meeting_100: sending info about ()");
39871
39872#ifdef FREECIV_DELTA_PROTOCOL
39875 bool differ;
39876 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING;
39877
39878 if (nullptr == *hash) {
39880 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39881 }
39882 BV_CLR_ALL(fields);
39883
39884 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39885 old = fc_malloc(sizeof(*old));
39886 /* temporary bitcopy just to insert correctly */
39887 *old = *real_packet;
39890 }
39891
39892 differ = (old->counterpart != real_packet->counterpart);
39893 if (differ) {
39894 BV_SET(fields, 0);
39895 }
39896
39897 differ = (old->initiated_from != real_packet->initiated_from);
39898 if (differ) {
39899 BV_SET(fields, 1);
39900 }
39901#endif /* FREECIV_DELTA_PROTOCOL */
39902
39903#ifdef FREECIV_JSON_CONNECTION
39904 struct plocation field_addr;
39905 {
39906 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39909 }
39910#endif /* FREECIV_JSON_CONNECTION */
39911
39912#ifdef FREECIV_DELTA_PROTOCOL
39913#ifdef FREECIV_JSON_CONNECTION
39914 field_addr.name = "fields";
39915#endif /* FREECIV_JSON_CONNECTION */
39916 e = 0;
39917 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39918 if (e) {
39919 log_packet_detailed("fields bitvector error detected");
39920 }
39921
39922 if (BV_ISSET(fields, 0)) {
39923 log_packet_detailed(" field 'counterpart' has changed");
39924
39925#ifdef FREECIV_JSON_CONNECTION
39926 field_addr.name = "counterpart";
39927#endif /* FREECIV_JSON_CONNECTION */
39928 e = 0;
39929
39930 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39931
39932 if (e) {
39933 log_packet_detailed("'counterpart' field error detected");
39934 }
39935 }
39936
39937 if (BV_ISSET(fields, 1)) {
39938 log_packet_detailed(" field 'initiated_from' has changed");
39939
39940#ifdef FREECIV_JSON_CONNECTION
39941 field_addr.name = "initiated_from";
39942#endif /* FREECIV_JSON_CONNECTION */
39943 e = 0;
39944
39945 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
39946
39947 if (e) {
39948 log_packet_detailed("'initiated_from' field error detected");
39949 }
39950 }
39951
39952 *old = *real_packet;
39953
39954#else /* FREECIV_DELTA_PROTOCOL */
39955#ifdef FREECIV_JSON_CONNECTION
39956 field_addr.name = "counterpart";
39957#endif /* FREECIV_JSON_CONNECTION */
39958 e = 0;
39959
39960 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39961
39962 if (e) {
39963 log_packet_detailed("'counterpart' field error detected");
39964 }
39965
39966#ifdef FREECIV_JSON_CONNECTION
39967 field_addr.name = "initiated_from";
39968#endif /* FREECIV_JSON_CONNECTION */
39969 e = 0;
39970
39971 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
39972
39973 if (e) {
39974 log_packet_detailed("'initiated_from' field error detected");
39975 }
39976#endif /* FREECIV_DELTA_PROTOCOL */
39977
39979}
39980
39982{
39983 if (!pc->used) {
39984 log_error("WARNING: trying to send data to the closed connection %s",
39986 return -1;
39987 }
39988 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet != nullptr, -1,
39989 "Handler for PACKET_DIPLOMACY_INIT_MEETING not installed");
39990 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet(pc, packet);
39991}
39992
39999
40000int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
40001{
40002 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40003
40005 real_packet->initiated_from = initiated_from;
40006
40008}
40009
40011{
40012 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40013
40015 real_packet->initiated_from = initiated_from;
40016
40018}
40019
40021{
40022 memset(packet, 0, sizeof(*packet));
40023}
40024
40025#define free_packet_diplomacy_cancel_meeting_req(_packet) (void) 0
40026#define destroy_packet_diplomacy_cancel_meeting_req free
40027
40028#ifdef FREECIV_DELTA_PROTOCOL
40029#define hash_packet_diplomacy_cancel_meeting_req_100 hash_const
40030#define cmp_packet_diplomacy_cancel_meeting_req_100 cmp_const
40032#endif /* FREECIV_DELTA_PROTOCOL */
40033
40035{
40036#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting_req(_packet)
40038
40039#ifdef FREECIV_JSON_CONNECTION
40040 struct plocation field_addr;
40041 {
40042 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40045 }
40046#endif /* FREECIV_JSON_CONNECTION */
40047
40048 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: got info about ()");
40049
40050#ifdef FREECIV_DELTA_PROTOCOL
40053 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40054
40055 if (nullptr == *hash) {
40057 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40058 }
40059
40060 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40061 *real_packet = *old;
40062 } else {
40063 /* packet is already initialized empty */
40064 log_packet_detailed(" no old info");
40065 }
40066
40067#ifdef FREECIV_JSON_CONNECTION
40068 field_addr.name = "fields";
40069#endif /* FREECIV_JSON_CONNECTION */
40070 DIO_BV_GET(&din, &field_addr, fields);
40071
40072 if (BV_ISSET(fields, 0)) {
40073 log_packet_detailed(" got field 'counterpart'");
40074
40075#ifdef FREECIV_JSON_CONNECTION
40076 field_addr.name = "counterpart";
40077#endif /* FREECIV_JSON_CONNECTION */
40078
40079 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40080 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40081 }
40082 }
40083
40084 if (nullptr == old) {
40085 old = fc_malloc(sizeof(*old));
40087 *old = *real_packet;
40089 } else {
40090 *old = *real_packet;
40091 }
40092
40093#else /* FREECIV_DELTA_PROTOCOL */
40094#ifdef FREECIV_JSON_CONNECTION
40095 field_addr.name = "counterpart";
40096#endif /* FREECIV_JSON_CONNECTION */
40097
40098 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40099 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40100 }
40101#endif /* FREECIV_DELTA_PROTOCOL */
40102
40104#undef FREE_PACKET_STRUCT
40105}
40106
40108{
40109 const struct packet_diplomacy_cancel_meeting_req *real_packet = packet;
40110 int e;
40112
40113 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: sending info about ()");
40114
40115#ifdef FREECIV_DELTA_PROTOCOL
40118 bool differ;
40119 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40120
40121 if (nullptr == *hash) {
40123 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40124 }
40125 BV_CLR_ALL(fields);
40126
40127 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40128 old = fc_malloc(sizeof(*old));
40129 /* temporary bitcopy just to insert correctly */
40130 *old = *real_packet;
40133 }
40134
40135 differ = (old->counterpart != real_packet->counterpart);
40136 if (differ) {
40137 BV_SET(fields, 0);
40138 }
40139#endif /* FREECIV_DELTA_PROTOCOL */
40140
40141#ifdef FREECIV_JSON_CONNECTION
40142 struct plocation field_addr;
40143 {
40144 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40147 }
40148#endif /* FREECIV_JSON_CONNECTION */
40149
40150#ifdef FREECIV_DELTA_PROTOCOL
40151#ifdef FREECIV_JSON_CONNECTION
40152 field_addr.name = "fields";
40153#endif /* FREECIV_JSON_CONNECTION */
40154 e = 0;
40155 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40156 if (e) {
40157 log_packet_detailed("fields bitvector error detected");
40158 }
40159
40160 if (BV_ISSET(fields, 0)) {
40161 log_packet_detailed(" field 'counterpart' has changed");
40162
40163#ifdef FREECIV_JSON_CONNECTION
40164 field_addr.name = "counterpart";
40165#endif /* FREECIV_JSON_CONNECTION */
40166 e = 0;
40167
40168 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40169
40170 if (e) {
40171 log_packet_detailed("'counterpart' field error detected");
40172 }
40173 }
40174
40175 *old = *real_packet;
40176
40177#else /* FREECIV_DELTA_PROTOCOL */
40178#ifdef FREECIV_JSON_CONNECTION
40179 field_addr.name = "counterpart";
40180#endif /* FREECIV_JSON_CONNECTION */
40181 e = 0;
40182
40183 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40184
40185 if (e) {
40186 log_packet_detailed("'counterpart' field error detected");
40187 }
40188#endif /* FREECIV_DELTA_PROTOCOL */
40189
40191}
40192
40194{
40195 if (!pc->used) {
40196 log_error("WARNING: trying to send data to the closed connection %s",
40198 return -1;
40199 }
40200 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet != nullptr, -1,
40201 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING_REQ not installed");
40202 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet(pc, packet);
40203}
40204
40206{
40207 struct packet_diplomacy_cancel_meeting_req packet, *real_packet = &packet;
40208
40210
40212}
40213
40215{
40216 memset(packet, 0, sizeof(*packet));
40217}
40218
40219#define free_packet_diplomacy_cancel_meeting(_packet) (void) 0
40220#define destroy_packet_diplomacy_cancel_meeting free
40221
40222#ifdef FREECIV_DELTA_PROTOCOL
40223#define hash_packet_diplomacy_cancel_meeting_100 hash_const
40224#define cmp_packet_diplomacy_cancel_meeting_100 cmp_const
40226#endif /* FREECIV_DELTA_PROTOCOL */
40227
40229{
40230#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting(_packet)
40232
40233#ifdef FREECIV_JSON_CONNECTION
40234 struct plocation field_addr;
40235 {
40236 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40239 }
40240#endif /* FREECIV_JSON_CONNECTION */
40241
40242 log_packet_detailed("packet_diplomacy_cancel_meeting_100: got info about ()");
40243
40244#ifdef FREECIV_DELTA_PROTOCOL
40247 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING;
40248
40249 if (nullptr == *hash) {
40251 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40252 }
40253
40254 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40255 *real_packet = *old;
40256 } else {
40257 /* packet is already initialized empty */
40258 log_packet_detailed(" no old info");
40259 }
40260
40261#ifdef FREECIV_JSON_CONNECTION
40262 field_addr.name = "fields";
40263#endif /* FREECIV_JSON_CONNECTION */
40264 DIO_BV_GET(&din, &field_addr, fields);
40265
40266 if (BV_ISSET(fields, 0)) {
40267 log_packet_detailed(" got field 'counterpart'");
40268
40269#ifdef FREECIV_JSON_CONNECTION
40270 field_addr.name = "counterpart";
40271#endif /* FREECIV_JSON_CONNECTION */
40272
40273 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40274 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40275 }
40276 }
40277
40278 if (BV_ISSET(fields, 1)) {
40279 log_packet_detailed(" got field 'initiated_from'");
40280
40281#ifdef FREECIV_JSON_CONNECTION
40282 field_addr.name = "initiated_from";
40283#endif /* FREECIV_JSON_CONNECTION */
40284
40285 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40286 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40287 }
40288 }
40289
40290 if (nullptr == old) {
40291 old = fc_malloc(sizeof(*old));
40293 *old = *real_packet;
40295 } else {
40296 *old = *real_packet;
40297 }
40298
40299#else /* FREECIV_DELTA_PROTOCOL */
40300#ifdef FREECIV_JSON_CONNECTION
40301 field_addr.name = "counterpart";
40302#endif /* FREECIV_JSON_CONNECTION */
40303
40304 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40305 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40306 }
40307
40308#ifdef FREECIV_JSON_CONNECTION
40309 field_addr.name = "initiated_from";
40310#endif /* FREECIV_JSON_CONNECTION */
40311
40312 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40313 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40314 }
40315#endif /* FREECIV_DELTA_PROTOCOL */
40316
40318#undef FREE_PACKET_STRUCT
40319}
40320
40322{
40323 const struct packet_diplomacy_cancel_meeting *real_packet = packet;
40324 int e;
40326
40327 log_packet_detailed("packet_diplomacy_cancel_meeting_100: sending info about ()");
40328
40329#ifdef FREECIV_DELTA_PROTOCOL
40332 bool differ;
40333 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING;
40334
40335 if (nullptr == *hash) {
40337 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40338 }
40339 BV_CLR_ALL(fields);
40340
40341 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40342 old = fc_malloc(sizeof(*old));
40343 /* temporary bitcopy just to insert correctly */
40344 *old = *real_packet;
40347 }
40348
40349 differ = (old->counterpart != real_packet->counterpart);
40350 if (differ) {
40351 BV_SET(fields, 0);
40352 }
40353
40354 differ = (old->initiated_from != real_packet->initiated_from);
40355 if (differ) {
40356 BV_SET(fields, 1);
40357 }
40358#endif /* FREECIV_DELTA_PROTOCOL */
40359
40360#ifdef FREECIV_JSON_CONNECTION
40361 struct plocation field_addr;
40362 {
40363 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40366 }
40367#endif /* FREECIV_JSON_CONNECTION */
40368
40369#ifdef FREECIV_DELTA_PROTOCOL
40370#ifdef FREECIV_JSON_CONNECTION
40371 field_addr.name = "fields";
40372#endif /* FREECIV_JSON_CONNECTION */
40373 e = 0;
40374 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40375 if (e) {
40376 log_packet_detailed("fields bitvector error detected");
40377 }
40378
40379 if (BV_ISSET(fields, 0)) {
40380 log_packet_detailed(" field 'counterpart' has changed");
40381
40382#ifdef FREECIV_JSON_CONNECTION
40383 field_addr.name = "counterpart";
40384#endif /* FREECIV_JSON_CONNECTION */
40385 e = 0;
40386
40387 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40388
40389 if (e) {
40390 log_packet_detailed("'counterpart' field error detected");
40391 }
40392 }
40393
40394 if (BV_ISSET(fields, 1)) {
40395 log_packet_detailed(" field 'initiated_from' has changed");
40396
40397#ifdef FREECIV_JSON_CONNECTION
40398 field_addr.name = "initiated_from";
40399#endif /* FREECIV_JSON_CONNECTION */
40400 e = 0;
40401
40402 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40403
40404 if (e) {
40405 log_packet_detailed("'initiated_from' field error detected");
40406 }
40407 }
40408
40409 *old = *real_packet;
40410
40411#else /* FREECIV_DELTA_PROTOCOL */
40412#ifdef FREECIV_JSON_CONNECTION
40413 field_addr.name = "counterpart";
40414#endif /* FREECIV_JSON_CONNECTION */
40415 e = 0;
40416
40417 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40418
40419 if (e) {
40420 log_packet_detailed("'counterpart' field error detected");
40421 }
40422
40423#ifdef FREECIV_JSON_CONNECTION
40424 field_addr.name = "initiated_from";
40425#endif /* FREECIV_JSON_CONNECTION */
40426 e = 0;
40427
40428 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40429
40430 if (e) {
40431 log_packet_detailed("'initiated_from' field error detected");
40432 }
40433#endif /* FREECIV_DELTA_PROTOCOL */
40434
40436}
40437
40439{
40440 if (!pc->used) {
40441 log_error("WARNING: trying to send data to the closed connection %s",
40443 return -1;
40444 }
40445 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet != nullptr, -1,
40446 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING not installed");
40447 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet(pc, packet);
40448}
40449
40456
40457int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
40458{
40459 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40460
40462 real_packet->initiated_from = initiated_from;
40463
40465}
40466
40468{
40469 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40470
40472 real_packet->initiated_from = initiated_from;
40473
40475}
40476
40478{
40479 memset(packet, 0, sizeof(*packet));
40480}
40481
40482#define free_packet_diplomacy_create_clause_req(_packet) (void) 0
40483#define destroy_packet_diplomacy_create_clause_req free
40484
40485#ifdef FREECIV_DELTA_PROTOCOL
40486#define hash_packet_diplomacy_create_clause_req_100 hash_const
40487#define cmp_packet_diplomacy_create_clause_req_100 cmp_const
40489#endif /* FREECIV_DELTA_PROTOCOL */
40490
40492{
40493#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause_req(_packet)
40495
40496#ifdef FREECIV_JSON_CONNECTION
40497 struct plocation field_addr;
40498 {
40499 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40502 }
40503#endif /* FREECIV_JSON_CONNECTION */
40504
40505 log_packet_detailed("packet_diplomacy_create_clause_req_100: got info about ()");
40506
40507#ifdef FREECIV_DELTA_PROTOCOL
40510 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40511
40512 if (nullptr == *hash) {
40514 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40515 }
40516
40517 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40518 *real_packet = *old;
40519 } else {
40520 /* packet is already initialized empty */
40521 log_packet_detailed(" no old info");
40522 }
40523
40524#ifdef FREECIV_JSON_CONNECTION
40525 field_addr.name = "fields";
40526#endif /* FREECIV_JSON_CONNECTION */
40527 DIO_BV_GET(&din, &field_addr, fields);
40528
40529 if (BV_ISSET(fields, 0)) {
40530 log_packet_detailed(" got field 'counterpart'");
40531
40532#ifdef FREECIV_JSON_CONNECTION
40533 field_addr.name = "counterpart";
40534#endif /* FREECIV_JSON_CONNECTION */
40535
40536 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40537 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40538 }
40539 }
40540
40541 if (BV_ISSET(fields, 1)) {
40542 log_packet_detailed(" got field 'giver'");
40543
40544#ifdef FREECIV_JSON_CONNECTION
40545 field_addr.name = "giver";
40546#endif /* FREECIV_JSON_CONNECTION */
40547
40548 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40550 }
40551 }
40552
40553 if (BV_ISSET(fields, 2)) {
40554 log_packet_detailed(" got field 'type'");
40555
40556#ifdef FREECIV_JSON_CONNECTION
40557 field_addr.name = "type";
40558#endif /* FREECIV_JSON_CONNECTION */
40559
40560 {
40561 int readin;
40562
40563 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40565 }
40566 real_packet->type = readin;
40567 }
40568 }
40569
40570 if (BV_ISSET(fields, 3)) {
40571 log_packet_detailed(" got field 'value'");
40572
40573#ifdef FREECIV_JSON_CONNECTION
40574 field_addr.name = "value";
40575#endif /* FREECIV_JSON_CONNECTION */
40576
40577 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40579 }
40580 }
40581
40582 if (nullptr == old) {
40583 old = fc_malloc(sizeof(*old));
40585 *old = *real_packet;
40587 } else {
40588 *old = *real_packet;
40589 }
40590
40591#else /* FREECIV_DELTA_PROTOCOL */
40592#ifdef FREECIV_JSON_CONNECTION
40593 field_addr.name = "counterpart";
40594#endif /* FREECIV_JSON_CONNECTION */
40595
40596 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40597 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40598 }
40599
40600#ifdef FREECIV_JSON_CONNECTION
40601 field_addr.name = "giver";
40602#endif /* FREECIV_JSON_CONNECTION */
40603
40604 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40606 }
40607
40608#ifdef FREECIV_JSON_CONNECTION
40609 field_addr.name = "type";
40610#endif /* FREECIV_JSON_CONNECTION */
40611
40612 {
40613 int readin;
40614
40615 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40617 }
40618 real_packet->type = readin;
40619 }
40620
40621#ifdef FREECIV_JSON_CONNECTION
40622 field_addr.name = "value";
40623#endif /* FREECIV_JSON_CONNECTION */
40624
40625 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40627 }
40628#endif /* FREECIV_DELTA_PROTOCOL */
40629
40631#undef FREE_PACKET_STRUCT
40632}
40633
40635{
40636 const struct packet_diplomacy_create_clause_req *real_packet = packet;
40637 int e;
40639
40640 log_packet_detailed("packet_diplomacy_create_clause_req_100: sending info about ()");
40641
40642#ifdef FREECIV_DELTA_PROTOCOL
40645 bool differ;
40646 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40647
40648 if (nullptr == *hash) {
40650 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40651 }
40652 BV_CLR_ALL(fields);
40653
40654 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40655 old = fc_malloc(sizeof(*old));
40656 /* temporary bitcopy just to insert correctly */
40657 *old = *real_packet;
40660 }
40661
40662 differ = (old->counterpart != real_packet->counterpart);
40663 if (differ) {
40664 BV_SET(fields, 0);
40665 }
40666
40667 differ = (old->giver != real_packet->giver);
40668 if (differ) {
40669 BV_SET(fields, 1);
40670 }
40671
40672 differ = (old->type != real_packet->type);
40673 if (differ) {
40674 BV_SET(fields, 2);
40675 }
40676
40677 differ = (old->value != real_packet->value);
40678 if (differ) {
40679 BV_SET(fields, 3);
40680 }
40681#endif /* FREECIV_DELTA_PROTOCOL */
40682
40683#ifdef FREECIV_JSON_CONNECTION
40684 struct plocation field_addr;
40685 {
40686 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40689 }
40690#endif /* FREECIV_JSON_CONNECTION */
40691
40692#ifdef FREECIV_DELTA_PROTOCOL
40693#ifdef FREECIV_JSON_CONNECTION
40694 field_addr.name = "fields";
40695#endif /* FREECIV_JSON_CONNECTION */
40696 e = 0;
40697 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40698 if (e) {
40699 log_packet_detailed("fields bitvector error detected");
40700 }
40701
40702 if (BV_ISSET(fields, 0)) {
40703 log_packet_detailed(" field 'counterpart' has changed");
40704
40705#ifdef FREECIV_JSON_CONNECTION
40706 field_addr.name = "counterpart";
40707#endif /* FREECIV_JSON_CONNECTION */
40708 e = 0;
40709
40710 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40711
40712 if (e) {
40713 log_packet_detailed("'counterpart' field error detected");
40714 }
40715 }
40716
40717 if (BV_ISSET(fields, 1)) {
40718 log_packet_detailed(" field 'giver' has changed");
40719
40720#ifdef FREECIV_JSON_CONNECTION
40721 field_addr.name = "giver";
40722#endif /* FREECIV_JSON_CONNECTION */
40723 e = 0;
40724
40725 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40726
40727 if (e) {
40728 log_packet_detailed("'giver' field error detected");
40729 }
40730 }
40731
40732 if (BV_ISSET(fields, 2)) {
40733 log_packet_detailed(" field 'type' has changed");
40734
40735#ifdef FREECIV_JSON_CONNECTION
40736 field_addr.name = "type";
40737#endif /* FREECIV_JSON_CONNECTION */
40738 e = 0;
40739
40740 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40741
40742 if (e) {
40743 log_packet_detailed("'type' field error detected");
40744 }
40745 }
40746
40747 if (BV_ISSET(fields, 3)) {
40748 log_packet_detailed(" field 'value' has changed");
40749
40750#ifdef FREECIV_JSON_CONNECTION
40751 field_addr.name = "value";
40752#endif /* FREECIV_JSON_CONNECTION */
40753 e = 0;
40754
40755 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40756
40757 if (e) {
40758 log_packet_detailed("'value' field error detected");
40759 }
40760 }
40761
40762 *old = *real_packet;
40763
40764#else /* FREECIV_DELTA_PROTOCOL */
40765#ifdef FREECIV_JSON_CONNECTION
40766 field_addr.name = "counterpart";
40767#endif /* FREECIV_JSON_CONNECTION */
40768 e = 0;
40769
40770 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40771
40772 if (e) {
40773 log_packet_detailed("'counterpart' field error detected");
40774 }
40775
40776#ifdef FREECIV_JSON_CONNECTION
40777 field_addr.name = "giver";
40778#endif /* FREECIV_JSON_CONNECTION */
40779 e = 0;
40780
40781 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40782
40783 if (e) {
40784 log_packet_detailed("'giver' field error detected");
40785 }
40786
40787#ifdef FREECIV_JSON_CONNECTION
40788 field_addr.name = "type";
40789#endif /* FREECIV_JSON_CONNECTION */
40790 e = 0;
40791
40792 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40793
40794 if (e) {
40795 log_packet_detailed("'type' field error detected");
40796 }
40797
40798#ifdef FREECIV_JSON_CONNECTION
40799 field_addr.name = "value";
40800#endif /* FREECIV_JSON_CONNECTION */
40801 e = 0;
40802
40803 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40804
40805 if (e) {
40806 log_packet_detailed("'value' field error detected");
40807 }
40808#endif /* FREECIV_DELTA_PROTOCOL */
40809
40811}
40812
40814{
40815 if (!pc->used) {
40816 log_error("WARNING: trying to send data to the closed connection %s",
40818 return -1;
40819 }
40820 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet != nullptr, -1,
40821 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE_REQ not installed");
40822 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet(pc, packet);
40823}
40824
40825int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
40826{
40827 struct packet_diplomacy_create_clause_req packet, *real_packet = &packet;
40828
40830 real_packet->giver = giver;
40831 real_packet->type = type;
40832 real_packet->value = value;
40833
40835}
40836
40838{
40839 memset(packet, 0, sizeof(*packet));
40840}
40841
40842#define free_packet_diplomacy_create_clause(_packet) (void) 0
40843#define destroy_packet_diplomacy_create_clause free
40844
40845#ifdef FREECIV_DELTA_PROTOCOL
40846#define hash_packet_diplomacy_create_clause_100 hash_const
40847#define cmp_packet_diplomacy_create_clause_100 cmp_const
40849#endif /* FREECIV_DELTA_PROTOCOL */
40850
40852{
40853#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause(_packet)
40855
40856#ifdef FREECIV_JSON_CONNECTION
40857 struct plocation field_addr;
40858 {
40859 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40862 }
40863#endif /* FREECIV_JSON_CONNECTION */
40864
40865 log_packet_detailed("packet_diplomacy_create_clause_100: got info about ()");
40866
40867#ifdef FREECIV_DELTA_PROTOCOL
40870 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE;
40871
40872 if (nullptr == *hash) {
40874 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
40875 }
40876
40877 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40878 *real_packet = *old;
40879 } else {
40880 /* packet is already initialized empty */
40881 log_packet_detailed(" no old info");
40882 }
40883
40884#ifdef FREECIV_JSON_CONNECTION
40885 field_addr.name = "fields";
40886#endif /* FREECIV_JSON_CONNECTION */
40887 DIO_BV_GET(&din, &field_addr, fields);
40888
40889 if (BV_ISSET(fields, 0)) {
40890 log_packet_detailed(" got field 'counterpart'");
40891
40892#ifdef FREECIV_JSON_CONNECTION
40893 field_addr.name = "counterpart";
40894#endif /* FREECIV_JSON_CONNECTION */
40895
40896 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40897 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40898 }
40899 }
40900
40901 if (BV_ISSET(fields, 1)) {
40902 log_packet_detailed(" got field 'giver'");
40903
40904#ifdef FREECIV_JSON_CONNECTION
40905 field_addr.name = "giver";
40906#endif /* FREECIV_JSON_CONNECTION */
40907
40908 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40910 }
40911 }
40912
40913 if (BV_ISSET(fields, 2)) {
40914 log_packet_detailed(" got field 'type'");
40915
40916#ifdef FREECIV_JSON_CONNECTION
40917 field_addr.name = "type";
40918#endif /* FREECIV_JSON_CONNECTION */
40919
40920 {
40921 int readin;
40922
40923 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40925 }
40926 real_packet->type = readin;
40927 }
40928 }
40929
40930 if (BV_ISSET(fields, 3)) {
40931 log_packet_detailed(" got field 'value'");
40932
40933#ifdef FREECIV_JSON_CONNECTION
40934 field_addr.name = "value";
40935#endif /* FREECIV_JSON_CONNECTION */
40936
40937 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40939 }
40940 }
40941
40942 if (nullptr == old) {
40943 old = fc_malloc(sizeof(*old));
40945 *old = *real_packet;
40947 } else {
40948 *old = *real_packet;
40949 }
40950
40951#else /* FREECIV_DELTA_PROTOCOL */
40952#ifdef FREECIV_JSON_CONNECTION
40953 field_addr.name = "counterpart";
40954#endif /* FREECIV_JSON_CONNECTION */
40955
40956 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40957 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40958 }
40959
40960#ifdef FREECIV_JSON_CONNECTION
40961 field_addr.name = "giver";
40962#endif /* FREECIV_JSON_CONNECTION */
40963
40964 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40966 }
40967
40968#ifdef FREECIV_JSON_CONNECTION
40969 field_addr.name = "type";
40970#endif /* FREECIV_JSON_CONNECTION */
40971
40972 {
40973 int readin;
40974
40975 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40977 }
40978 real_packet->type = readin;
40979 }
40980
40981#ifdef FREECIV_JSON_CONNECTION
40982 field_addr.name = "value";
40983#endif /* FREECIV_JSON_CONNECTION */
40984
40985 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40987 }
40988#endif /* FREECIV_DELTA_PROTOCOL */
40989
40991#undef FREE_PACKET_STRUCT
40992}
40993
40995{
40996 const struct packet_diplomacy_create_clause *real_packet = packet;
40997 int e;
40999
41000 log_packet_detailed("packet_diplomacy_create_clause_100: sending info about ()");
41001
41002#ifdef FREECIV_DELTA_PROTOCOL
41005 bool differ;
41006 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE;
41007
41008 if (nullptr == *hash) {
41010 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
41011 }
41012 BV_CLR_ALL(fields);
41013
41014 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41015 old = fc_malloc(sizeof(*old));
41016 /* temporary bitcopy just to insert correctly */
41017 *old = *real_packet;
41020 }
41021
41022 differ = (old->counterpart != real_packet->counterpart);
41023 if (differ) {
41024 BV_SET(fields, 0);
41025 }
41026
41027 differ = (old->giver != real_packet->giver);
41028 if (differ) {
41029 BV_SET(fields, 1);
41030 }
41031
41032 differ = (old->type != real_packet->type);
41033 if (differ) {
41034 BV_SET(fields, 2);
41035 }
41036
41037 differ = (old->value != real_packet->value);
41038 if (differ) {
41039 BV_SET(fields, 3);
41040 }
41041#endif /* FREECIV_DELTA_PROTOCOL */
41042
41043#ifdef FREECIV_JSON_CONNECTION
41044 struct plocation field_addr;
41045 {
41046 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41049 }
41050#endif /* FREECIV_JSON_CONNECTION */
41051
41052#ifdef FREECIV_DELTA_PROTOCOL
41053#ifdef FREECIV_JSON_CONNECTION
41054 field_addr.name = "fields";
41055#endif /* FREECIV_JSON_CONNECTION */
41056 e = 0;
41057 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41058 if (e) {
41059 log_packet_detailed("fields bitvector error detected");
41060 }
41061
41062 if (BV_ISSET(fields, 0)) {
41063 log_packet_detailed(" field 'counterpart' has changed");
41064
41065#ifdef FREECIV_JSON_CONNECTION
41066 field_addr.name = "counterpart";
41067#endif /* FREECIV_JSON_CONNECTION */
41068 e = 0;
41069
41070 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41071
41072 if (e) {
41073 log_packet_detailed("'counterpart' field error detected");
41074 }
41075 }
41076
41077 if (BV_ISSET(fields, 1)) {
41078 log_packet_detailed(" field 'giver' has changed");
41079
41080#ifdef FREECIV_JSON_CONNECTION
41081 field_addr.name = "giver";
41082#endif /* FREECIV_JSON_CONNECTION */
41083 e = 0;
41084
41085 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41086
41087 if (e) {
41088 log_packet_detailed("'giver' field error detected");
41089 }
41090 }
41091
41092 if (BV_ISSET(fields, 2)) {
41093 log_packet_detailed(" field 'type' has changed");
41094
41095#ifdef FREECIV_JSON_CONNECTION
41096 field_addr.name = "type";
41097#endif /* FREECIV_JSON_CONNECTION */
41098 e = 0;
41099
41100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41101
41102 if (e) {
41103 log_packet_detailed("'type' field error detected");
41104 }
41105 }
41106
41107 if (BV_ISSET(fields, 3)) {
41108 log_packet_detailed(" field 'value' has changed");
41109
41110#ifdef FREECIV_JSON_CONNECTION
41111 field_addr.name = "value";
41112#endif /* FREECIV_JSON_CONNECTION */
41113 e = 0;
41114
41115 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41116
41117 if (e) {
41118 log_packet_detailed("'value' field error detected");
41119 }
41120 }
41121
41122 *old = *real_packet;
41123
41124#else /* FREECIV_DELTA_PROTOCOL */
41125#ifdef FREECIV_JSON_CONNECTION
41126 field_addr.name = "counterpart";
41127#endif /* FREECIV_JSON_CONNECTION */
41128 e = 0;
41129
41130 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41131
41132 if (e) {
41133 log_packet_detailed("'counterpart' field error detected");
41134 }
41135
41136#ifdef FREECIV_JSON_CONNECTION
41137 field_addr.name = "giver";
41138#endif /* FREECIV_JSON_CONNECTION */
41139 e = 0;
41140
41141 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41142
41143 if (e) {
41144 log_packet_detailed("'giver' field error detected");
41145 }
41146
41147#ifdef FREECIV_JSON_CONNECTION
41148 field_addr.name = "type";
41149#endif /* FREECIV_JSON_CONNECTION */
41150 e = 0;
41151
41152 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41153
41154 if (e) {
41155 log_packet_detailed("'type' field error detected");
41156 }
41157
41158#ifdef FREECIV_JSON_CONNECTION
41159 field_addr.name = "value";
41160#endif /* FREECIV_JSON_CONNECTION */
41161 e = 0;
41162
41163 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41164
41165 if (e) {
41166 log_packet_detailed("'value' field error detected");
41167 }
41168#endif /* FREECIV_DELTA_PROTOCOL */
41169
41171}
41172
41174{
41175 if (!pc->used) {
41176 log_error("WARNING: trying to send data to the closed connection %s",
41178 return -1;
41179 }
41180 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet != nullptr, -1,
41181 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE not installed");
41182 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet(pc, packet);
41183}
41184
41191
41192int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41193{
41194 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41195
41197 real_packet->giver = giver;
41198 real_packet->type = type;
41199 real_packet->value = value;
41200
41202}
41203
41205{
41206 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41207
41209 real_packet->giver = giver;
41210 real_packet->type = type;
41211 real_packet->value = value;
41212
41214}
41215
41217{
41218 memset(packet, 0, sizeof(*packet));
41219}
41220
41221#define free_packet_diplomacy_remove_clause_req(_packet) (void) 0
41222#define destroy_packet_diplomacy_remove_clause_req free
41223
41224#ifdef FREECIV_DELTA_PROTOCOL
41225#define hash_packet_diplomacy_remove_clause_req_100 hash_const
41226#define cmp_packet_diplomacy_remove_clause_req_100 cmp_const
41228#endif /* FREECIV_DELTA_PROTOCOL */
41229
41231{
41232#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause_req(_packet)
41234
41235#ifdef FREECIV_JSON_CONNECTION
41236 struct plocation field_addr;
41237 {
41238 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41241 }
41242#endif /* FREECIV_JSON_CONNECTION */
41243
41244 log_packet_detailed("packet_diplomacy_remove_clause_req_100: got info about ()");
41245
41246#ifdef FREECIV_DELTA_PROTOCOL
41249 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41250
41251 if (nullptr == *hash) {
41253 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41254 }
41255
41256 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41257 *real_packet = *old;
41258 } else {
41259 /* packet is already initialized empty */
41260 log_packet_detailed(" no old info");
41261 }
41262
41263#ifdef FREECIV_JSON_CONNECTION
41264 field_addr.name = "fields";
41265#endif /* FREECIV_JSON_CONNECTION */
41266 DIO_BV_GET(&din, &field_addr, fields);
41267
41268 if (BV_ISSET(fields, 0)) {
41269 log_packet_detailed(" got field 'counterpart'");
41270
41271#ifdef FREECIV_JSON_CONNECTION
41272 field_addr.name = "counterpart";
41273#endif /* FREECIV_JSON_CONNECTION */
41274
41275 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41276 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41277 }
41278 }
41279
41280 if (BV_ISSET(fields, 1)) {
41281 log_packet_detailed(" got field 'giver'");
41282
41283#ifdef FREECIV_JSON_CONNECTION
41284 field_addr.name = "giver";
41285#endif /* FREECIV_JSON_CONNECTION */
41286
41287 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41289 }
41290 }
41291
41292 if (BV_ISSET(fields, 2)) {
41293 log_packet_detailed(" got field 'type'");
41294
41295#ifdef FREECIV_JSON_CONNECTION
41296 field_addr.name = "type";
41297#endif /* FREECIV_JSON_CONNECTION */
41298
41299 {
41300 int readin;
41301
41302 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41304 }
41305 real_packet->type = readin;
41306 }
41307 }
41308
41309 if (BV_ISSET(fields, 3)) {
41310 log_packet_detailed(" got field 'value'");
41311
41312#ifdef FREECIV_JSON_CONNECTION
41313 field_addr.name = "value";
41314#endif /* FREECIV_JSON_CONNECTION */
41315
41316 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41318 }
41319 }
41320
41321 if (nullptr == old) {
41322 old = fc_malloc(sizeof(*old));
41324 *old = *real_packet;
41326 } else {
41327 *old = *real_packet;
41328 }
41329
41330#else /* FREECIV_DELTA_PROTOCOL */
41331#ifdef FREECIV_JSON_CONNECTION
41332 field_addr.name = "counterpart";
41333#endif /* FREECIV_JSON_CONNECTION */
41334
41335 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41336 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41337 }
41338
41339#ifdef FREECIV_JSON_CONNECTION
41340 field_addr.name = "giver";
41341#endif /* FREECIV_JSON_CONNECTION */
41342
41343 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41345 }
41346
41347#ifdef FREECIV_JSON_CONNECTION
41348 field_addr.name = "type";
41349#endif /* FREECIV_JSON_CONNECTION */
41350
41351 {
41352 int readin;
41353
41354 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41356 }
41357 real_packet->type = readin;
41358 }
41359
41360#ifdef FREECIV_JSON_CONNECTION
41361 field_addr.name = "value";
41362#endif /* FREECIV_JSON_CONNECTION */
41363
41364 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41366 }
41367#endif /* FREECIV_DELTA_PROTOCOL */
41368
41370#undef FREE_PACKET_STRUCT
41371}
41372
41374{
41375 const struct packet_diplomacy_remove_clause_req *real_packet = packet;
41376 int e;
41378
41379 log_packet_detailed("packet_diplomacy_remove_clause_req_100: sending info about ()");
41380
41381#ifdef FREECIV_DELTA_PROTOCOL
41384 bool differ;
41385 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41386
41387 if (nullptr == *hash) {
41389 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41390 }
41391 BV_CLR_ALL(fields);
41392
41393 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41394 old = fc_malloc(sizeof(*old));
41395 /* temporary bitcopy just to insert correctly */
41396 *old = *real_packet;
41399 }
41400
41401 differ = (old->counterpart != real_packet->counterpart);
41402 if (differ) {
41403 BV_SET(fields, 0);
41404 }
41405
41406 differ = (old->giver != real_packet->giver);
41407 if (differ) {
41408 BV_SET(fields, 1);
41409 }
41410
41411 differ = (old->type != real_packet->type);
41412 if (differ) {
41413 BV_SET(fields, 2);
41414 }
41415
41416 differ = (old->value != real_packet->value);
41417 if (differ) {
41418 BV_SET(fields, 3);
41419 }
41420#endif /* FREECIV_DELTA_PROTOCOL */
41421
41422#ifdef FREECIV_JSON_CONNECTION
41423 struct plocation field_addr;
41424 {
41425 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41428 }
41429#endif /* FREECIV_JSON_CONNECTION */
41430
41431#ifdef FREECIV_DELTA_PROTOCOL
41432#ifdef FREECIV_JSON_CONNECTION
41433 field_addr.name = "fields";
41434#endif /* FREECIV_JSON_CONNECTION */
41435 e = 0;
41436 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41437 if (e) {
41438 log_packet_detailed("fields bitvector error detected");
41439 }
41440
41441 if (BV_ISSET(fields, 0)) {
41442 log_packet_detailed(" field 'counterpart' has changed");
41443
41444#ifdef FREECIV_JSON_CONNECTION
41445 field_addr.name = "counterpart";
41446#endif /* FREECIV_JSON_CONNECTION */
41447 e = 0;
41448
41449 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41450
41451 if (e) {
41452 log_packet_detailed("'counterpart' field error detected");
41453 }
41454 }
41455
41456 if (BV_ISSET(fields, 1)) {
41457 log_packet_detailed(" field 'giver' has changed");
41458
41459#ifdef FREECIV_JSON_CONNECTION
41460 field_addr.name = "giver";
41461#endif /* FREECIV_JSON_CONNECTION */
41462 e = 0;
41463
41464 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41465
41466 if (e) {
41467 log_packet_detailed("'giver' field error detected");
41468 }
41469 }
41470
41471 if (BV_ISSET(fields, 2)) {
41472 log_packet_detailed(" field 'type' has changed");
41473
41474#ifdef FREECIV_JSON_CONNECTION
41475 field_addr.name = "type";
41476#endif /* FREECIV_JSON_CONNECTION */
41477 e = 0;
41478
41479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41480
41481 if (e) {
41482 log_packet_detailed("'type' field error detected");
41483 }
41484 }
41485
41486 if (BV_ISSET(fields, 3)) {
41487 log_packet_detailed(" field 'value' has changed");
41488
41489#ifdef FREECIV_JSON_CONNECTION
41490 field_addr.name = "value";
41491#endif /* FREECIV_JSON_CONNECTION */
41492 e = 0;
41493
41494 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41495
41496 if (e) {
41497 log_packet_detailed("'value' field error detected");
41498 }
41499 }
41500
41501 *old = *real_packet;
41502
41503#else /* FREECIV_DELTA_PROTOCOL */
41504#ifdef FREECIV_JSON_CONNECTION
41505 field_addr.name = "counterpart";
41506#endif /* FREECIV_JSON_CONNECTION */
41507 e = 0;
41508
41509 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41510
41511 if (e) {
41512 log_packet_detailed("'counterpart' field error detected");
41513 }
41514
41515#ifdef FREECIV_JSON_CONNECTION
41516 field_addr.name = "giver";
41517#endif /* FREECIV_JSON_CONNECTION */
41518 e = 0;
41519
41520 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41521
41522 if (e) {
41523 log_packet_detailed("'giver' field error detected");
41524 }
41525
41526#ifdef FREECIV_JSON_CONNECTION
41527 field_addr.name = "type";
41528#endif /* FREECIV_JSON_CONNECTION */
41529 e = 0;
41530
41531 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41532
41533 if (e) {
41534 log_packet_detailed("'type' field error detected");
41535 }
41536
41537#ifdef FREECIV_JSON_CONNECTION
41538 field_addr.name = "value";
41539#endif /* FREECIV_JSON_CONNECTION */
41540 e = 0;
41541
41542 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41543
41544 if (e) {
41545 log_packet_detailed("'value' field error detected");
41546 }
41547#endif /* FREECIV_DELTA_PROTOCOL */
41548
41550}
41551
41553{
41554 if (!pc->used) {
41555 log_error("WARNING: trying to send data to the closed connection %s",
41557 return -1;
41558 }
41559 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet != nullptr, -1,
41560 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ not installed");
41561 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet(pc, packet);
41562}
41563
41564int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41565{
41566 struct packet_diplomacy_remove_clause_req packet, *real_packet = &packet;
41567
41569 real_packet->giver = giver;
41570 real_packet->type = type;
41571 real_packet->value = value;
41572
41574}
41575
41577{
41578 memset(packet, 0, sizeof(*packet));
41579}
41580
41581#define free_packet_diplomacy_remove_clause(_packet) (void) 0
41582#define destroy_packet_diplomacy_remove_clause free
41583
41584#ifdef FREECIV_DELTA_PROTOCOL
41585#define hash_packet_diplomacy_remove_clause_100 hash_const
41586#define cmp_packet_diplomacy_remove_clause_100 cmp_const
41588#endif /* FREECIV_DELTA_PROTOCOL */
41589
41591{
41592#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause(_packet)
41594
41595#ifdef FREECIV_JSON_CONNECTION
41596 struct plocation field_addr;
41597 {
41598 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41601 }
41602#endif /* FREECIV_JSON_CONNECTION */
41603
41604 log_packet_detailed("packet_diplomacy_remove_clause_100: got info about ()");
41605
41606#ifdef FREECIV_DELTA_PROTOCOL
41609 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41610
41611 if (nullptr == *hash) {
41613 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41614 }
41615
41616 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41617 *real_packet = *old;
41618 } else {
41619 /* packet is already initialized empty */
41620 log_packet_detailed(" no old info");
41621 }
41622
41623#ifdef FREECIV_JSON_CONNECTION
41624 field_addr.name = "fields";
41625#endif /* FREECIV_JSON_CONNECTION */
41626 DIO_BV_GET(&din, &field_addr, fields);
41627
41628 if (BV_ISSET(fields, 0)) {
41629 log_packet_detailed(" got field 'counterpart'");
41630
41631#ifdef FREECIV_JSON_CONNECTION
41632 field_addr.name = "counterpart";
41633#endif /* FREECIV_JSON_CONNECTION */
41634
41635 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41636 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41637 }
41638 }
41639
41640 if (BV_ISSET(fields, 1)) {
41641 log_packet_detailed(" got field 'giver'");
41642
41643#ifdef FREECIV_JSON_CONNECTION
41644 field_addr.name = "giver";
41645#endif /* FREECIV_JSON_CONNECTION */
41646
41647 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41649 }
41650 }
41651
41652 if (BV_ISSET(fields, 2)) {
41653 log_packet_detailed(" got field 'type'");
41654
41655#ifdef FREECIV_JSON_CONNECTION
41656 field_addr.name = "type";
41657#endif /* FREECIV_JSON_CONNECTION */
41658
41659 {
41660 int readin;
41661
41662 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41664 }
41665 real_packet->type = readin;
41666 }
41667 }
41668
41669 if (BV_ISSET(fields, 3)) {
41670 log_packet_detailed(" got field 'value'");
41671
41672#ifdef FREECIV_JSON_CONNECTION
41673 field_addr.name = "value";
41674#endif /* FREECIV_JSON_CONNECTION */
41675
41676 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41678 }
41679 }
41680
41681 if (nullptr == old) {
41682 old = fc_malloc(sizeof(*old));
41684 *old = *real_packet;
41686 } else {
41687 *old = *real_packet;
41688 }
41689
41690#else /* FREECIV_DELTA_PROTOCOL */
41691#ifdef FREECIV_JSON_CONNECTION
41692 field_addr.name = "counterpart";
41693#endif /* FREECIV_JSON_CONNECTION */
41694
41695 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41696 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41697 }
41698
41699#ifdef FREECIV_JSON_CONNECTION
41700 field_addr.name = "giver";
41701#endif /* FREECIV_JSON_CONNECTION */
41702
41703 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41705 }
41706
41707#ifdef FREECIV_JSON_CONNECTION
41708 field_addr.name = "type";
41709#endif /* FREECIV_JSON_CONNECTION */
41710
41711 {
41712 int readin;
41713
41714 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41716 }
41717 real_packet->type = readin;
41718 }
41719
41720#ifdef FREECIV_JSON_CONNECTION
41721 field_addr.name = "value";
41722#endif /* FREECIV_JSON_CONNECTION */
41723
41724 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41726 }
41727#endif /* FREECIV_DELTA_PROTOCOL */
41728
41730#undef FREE_PACKET_STRUCT
41731}
41732
41734{
41735 const struct packet_diplomacy_remove_clause *real_packet = packet;
41736 int e;
41738
41739 log_packet_detailed("packet_diplomacy_remove_clause_100: sending info about ()");
41740
41741#ifdef FREECIV_DELTA_PROTOCOL
41744 bool differ;
41745 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41746
41747 if (nullptr == *hash) {
41749 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41750 }
41751 BV_CLR_ALL(fields);
41752
41753 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41754 old = fc_malloc(sizeof(*old));
41755 /* temporary bitcopy just to insert correctly */
41756 *old = *real_packet;
41759 }
41760
41761 differ = (old->counterpart != real_packet->counterpart);
41762 if (differ) {
41763 BV_SET(fields, 0);
41764 }
41765
41766 differ = (old->giver != real_packet->giver);
41767 if (differ) {
41768 BV_SET(fields, 1);
41769 }
41770
41771 differ = (old->type != real_packet->type);
41772 if (differ) {
41773 BV_SET(fields, 2);
41774 }
41775
41776 differ = (old->value != real_packet->value);
41777 if (differ) {
41778 BV_SET(fields, 3);
41779 }
41780#endif /* FREECIV_DELTA_PROTOCOL */
41781
41782#ifdef FREECIV_JSON_CONNECTION
41783 struct plocation field_addr;
41784 {
41785 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41788 }
41789#endif /* FREECIV_JSON_CONNECTION */
41790
41791#ifdef FREECIV_DELTA_PROTOCOL
41792#ifdef FREECIV_JSON_CONNECTION
41793 field_addr.name = "fields";
41794#endif /* FREECIV_JSON_CONNECTION */
41795 e = 0;
41796 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41797 if (e) {
41798 log_packet_detailed("fields bitvector error detected");
41799 }
41800
41801 if (BV_ISSET(fields, 0)) {
41802 log_packet_detailed(" field 'counterpart' has changed");
41803
41804#ifdef FREECIV_JSON_CONNECTION
41805 field_addr.name = "counterpart";
41806#endif /* FREECIV_JSON_CONNECTION */
41807 e = 0;
41808
41809 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41810
41811 if (e) {
41812 log_packet_detailed("'counterpart' field error detected");
41813 }
41814 }
41815
41816 if (BV_ISSET(fields, 1)) {
41817 log_packet_detailed(" field 'giver' has changed");
41818
41819#ifdef FREECIV_JSON_CONNECTION
41820 field_addr.name = "giver";
41821#endif /* FREECIV_JSON_CONNECTION */
41822 e = 0;
41823
41824 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41825
41826 if (e) {
41827 log_packet_detailed("'giver' field error detected");
41828 }
41829 }
41830
41831 if (BV_ISSET(fields, 2)) {
41832 log_packet_detailed(" field 'type' has changed");
41833
41834#ifdef FREECIV_JSON_CONNECTION
41835 field_addr.name = "type";
41836#endif /* FREECIV_JSON_CONNECTION */
41837 e = 0;
41838
41839 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41840
41841 if (e) {
41842 log_packet_detailed("'type' field error detected");
41843 }
41844 }
41845
41846 if (BV_ISSET(fields, 3)) {
41847 log_packet_detailed(" field 'value' has changed");
41848
41849#ifdef FREECIV_JSON_CONNECTION
41850 field_addr.name = "value";
41851#endif /* FREECIV_JSON_CONNECTION */
41852 e = 0;
41853
41854 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41855
41856 if (e) {
41857 log_packet_detailed("'value' field error detected");
41858 }
41859 }
41860
41861 *old = *real_packet;
41862
41863#else /* FREECIV_DELTA_PROTOCOL */
41864#ifdef FREECIV_JSON_CONNECTION
41865 field_addr.name = "counterpart";
41866#endif /* FREECIV_JSON_CONNECTION */
41867 e = 0;
41868
41869 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41870
41871 if (e) {
41872 log_packet_detailed("'counterpart' field error detected");
41873 }
41874
41875#ifdef FREECIV_JSON_CONNECTION
41876 field_addr.name = "giver";
41877#endif /* FREECIV_JSON_CONNECTION */
41878 e = 0;
41879
41880 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41881
41882 if (e) {
41883 log_packet_detailed("'giver' field error detected");
41884 }
41885
41886#ifdef FREECIV_JSON_CONNECTION
41887 field_addr.name = "type";
41888#endif /* FREECIV_JSON_CONNECTION */
41889 e = 0;
41890
41891 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41892
41893 if (e) {
41894 log_packet_detailed("'type' field error detected");
41895 }
41896
41897#ifdef FREECIV_JSON_CONNECTION
41898 field_addr.name = "value";
41899#endif /* FREECIV_JSON_CONNECTION */
41900 e = 0;
41901
41902 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41903
41904 if (e) {
41905 log_packet_detailed("'value' field error detected");
41906 }
41907#endif /* FREECIV_DELTA_PROTOCOL */
41908
41910}
41911
41913{
41914 if (!pc->used) {
41915 log_error("WARNING: trying to send data to the closed connection %s",
41917 return -1;
41918 }
41919 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet != nullptr, -1,
41920 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE not installed");
41921 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet(pc, packet);
41922}
41923
41930
41931int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41932{
41933 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
41934
41936 real_packet->giver = giver;
41937 real_packet->type = type;
41938 real_packet->value = value;
41939
41941}
41942
41944{
41945 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
41946
41948 real_packet->giver = giver;
41949 real_packet->type = type;
41950 real_packet->value = value;
41951
41953}
41954
41956{
41957 memset(packet, 0, sizeof(*packet));
41958}
41959
41960#define free_packet_diplomacy_accept_treaty_req(_packet) (void) 0
41961#define destroy_packet_diplomacy_accept_treaty_req free
41962
41963#ifdef FREECIV_DELTA_PROTOCOL
41964#define hash_packet_diplomacy_accept_treaty_req_100 hash_const
41965#define cmp_packet_diplomacy_accept_treaty_req_100 cmp_const
41967#endif /* FREECIV_DELTA_PROTOCOL */
41968
41970{
41971#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty_req(_packet)
41973
41974#ifdef FREECIV_JSON_CONNECTION
41975 struct plocation field_addr;
41976 {
41977 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41980 }
41981#endif /* FREECIV_JSON_CONNECTION */
41982
41983 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: got info about ()");
41984
41985#ifdef FREECIV_DELTA_PROTOCOL
41988 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
41989
41990 if (nullptr == *hash) {
41992 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
41993 }
41994
41995 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41996 *real_packet = *old;
41997 } else {
41998 /* packet is already initialized empty */
41999 log_packet_detailed(" no old info");
42000 }
42001
42002#ifdef FREECIV_JSON_CONNECTION
42003 field_addr.name = "fields";
42004#endif /* FREECIV_JSON_CONNECTION */
42005 DIO_BV_GET(&din, &field_addr, fields);
42006
42007 if (BV_ISSET(fields, 0)) {
42008 log_packet_detailed(" got field 'counterpart'");
42009
42010#ifdef FREECIV_JSON_CONNECTION
42011 field_addr.name = "counterpart";
42012#endif /* FREECIV_JSON_CONNECTION */
42013
42014 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42015 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42016 }
42017 }
42018
42019 if (nullptr == old) {
42020 old = fc_malloc(sizeof(*old));
42022 *old = *real_packet;
42024 } else {
42025 *old = *real_packet;
42026 }
42027
42028#else /* FREECIV_DELTA_PROTOCOL */
42029#ifdef FREECIV_JSON_CONNECTION
42030 field_addr.name = "counterpart";
42031#endif /* FREECIV_JSON_CONNECTION */
42032
42033 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42034 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42035 }
42036#endif /* FREECIV_DELTA_PROTOCOL */
42037
42039#undef FREE_PACKET_STRUCT
42040}
42041
42043{
42044 const struct packet_diplomacy_accept_treaty_req *real_packet = packet;
42045 int e;
42047
42048 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: sending info about ()");
42049
42050#ifdef FREECIV_DELTA_PROTOCOL
42053 bool differ;
42054 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
42055
42056 if (nullptr == *hash) {
42058 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
42059 }
42060 BV_CLR_ALL(fields);
42061
42062 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42063 old = fc_malloc(sizeof(*old));
42064 /* temporary bitcopy just to insert correctly */
42065 *old = *real_packet;
42068 }
42069
42070 differ = (old->counterpart != real_packet->counterpart);
42071 if (differ) {
42072 BV_SET(fields, 0);
42073 }
42074#endif /* FREECIV_DELTA_PROTOCOL */
42075
42076#ifdef FREECIV_JSON_CONNECTION
42077 struct plocation field_addr;
42078 {
42079 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42082 }
42083#endif /* FREECIV_JSON_CONNECTION */
42084
42085#ifdef FREECIV_DELTA_PROTOCOL
42086#ifdef FREECIV_JSON_CONNECTION
42087 field_addr.name = "fields";
42088#endif /* FREECIV_JSON_CONNECTION */
42089 e = 0;
42090 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42091 if (e) {
42092 log_packet_detailed("fields bitvector error detected");
42093 }
42094
42095 if (BV_ISSET(fields, 0)) {
42096 log_packet_detailed(" field 'counterpart' has changed");
42097
42098#ifdef FREECIV_JSON_CONNECTION
42099 field_addr.name = "counterpart";
42100#endif /* FREECIV_JSON_CONNECTION */
42101 e = 0;
42102
42103 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42104
42105 if (e) {
42106 log_packet_detailed("'counterpart' field error detected");
42107 }
42108 }
42109
42110 *old = *real_packet;
42111
42112#else /* FREECIV_DELTA_PROTOCOL */
42113#ifdef FREECIV_JSON_CONNECTION
42114 field_addr.name = "counterpart";
42115#endif /* FREECIV_JSON_CONNECTION */
42116 e = 0;
42117
42118 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42119
42120 if (e) {
42121 log_packet_detailed("'counterpart' field error detected");
42122 }
42123#endif /* FREECIV_DELTA_PROTOCOL */
42124
42126}
42127
42129{
42130 if (!pc->used) {
42131 log_error("WARNING: trying to send data to the closed connection %s",
42133 return -1;
42134 }
42135 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet != nullptr, -1,
42136 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY_REQ not installed");
42137 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet(pc, packet);
42138}
42139
42141{
42142 struct packet_diplomacy_accept_treaty_req packet, *real_packet = &packet;
42143
42145
42147}
42148
42150{
42151 memset(packet, 0, sizeof(*packet));
42152}
42153
42154#define free_packet_diplomacy_accept_treaty(_packet) (void) 0
42155#define destroy_packet_diplomacy_accept_treaty free
42156
42157#ifdef FREECIV_DELTA_PROTOCOL
42158#define hash_packet_diplomacy_accept_treaty_100 hash_const
42159#define cmp_packet_diplomacy_accept_treaty_100 cmp_const
42161#endif /* FREECIV_DELTA_PROTOCOL */
42162
42164{
42165#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty(_packet)
42167
42168#ifdef FREECIV_JSON_CONNECTION
42169 struct plocation field_addr;
42170 {
42171 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42174 }
42175#endif /* FREECIV_JSON_CONNECTION */
42176
42177 log_packet_detailed("packet_diplomacy_accept_treaty_100: got info about ()");
42178
42179#ifdef FREECIV_DELTA_PROTOCOL
42182 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY;
42183
42184 if (nullptr == *hash) {
42186 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42187 }
42188
42189 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42190 *real_packet = *old;
42191 } else {
42192 /* packet is already initialized empty */
42193 log_packet_detailed(" no old info");
42194 }
42195
42196#ifdef FREECIV_JSON_CONNECTION
42197 field_addr.name = "fields";
42198#endif /* FREECIV_JSON_CONNECTION */
42199 DIO_BV_GET(&din, &field_addr, fields);
42200
42201 if (BV_ISSET(fields, 0)) {
42202 log_packet_detailed(" got field 'counterpart'");
42203
42204#ifdef FREECIV_JSON_CONNECTION
42205 field_addr.name = "counterpart";
42206#endif /* FREECIV_JSON_CONNECTION */
42207
42208 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42209 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42210 }
42211 }
42212
42213 real_packet->I_accepted = BV_ISSET(fields, 1);
42214
42215 real_packet->other_accepted = BV_ISSET(fields, 2);
42216
42217 if (nullptr == old) {
42218 old = fc_malloc(sizeof(*old));
42220 *old = *real_packet;
42222 } else {
42223 *old = *real_packet;
42224 }
42225
42226#else /* FREECIV_DELTA_PROTOCOL */
42227#ifdef FREECIV_JSON_CONNECTION
42228 field_addr.name = "counterpart";
42229#endif /* FREECIV_JSON_CONNECTION */
42230
42231 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42232 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42233 }
42234
42235#ifdef FREECIV_JSON_CONNECTION
42236 field_addr.name = "I_accepted";
42237#endif /* FREECIV_JSON_CONNECTION */
42238
42239 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->I_accepted)) {
42240 RECEIVE_PACKET_FIELD_ERROR(I_accepted);
42241 }
42242
42243#ifdef FREECIV_JSON_CONNECTION
42244 field_addr.name = "other_accepted";
42245#endif /* FREECIV_JSON_CONNECTION */
42246
42247 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->other_accepted)) {
42248 RECEIVE_PACKET_FIELD_ERROR(other_accepted);
42249 }
42250#endif /* FREECIV_DELTA_PROTOCOL */
42251
42253#undef FREE_PACKET_STRUCT
42254}
42255
42257{
42258 const struct packet_diplomacy_accept_treaty *real_packet = packet;
42259 int e;
42261
42262 log_packet_detailed("packet_diplomacy_accept_treaty_100: sending info about ()");
42263
42264#ifdef FREECIV_DELTA_PROTOCOL
42267 bool differ;
42268 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY;
42269
42270 if (nullptr == *hash) {
42272 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42273 }
42274 BV_CLR_ALL(fields);
42275
42276 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42277 old = fc_malloc(sizeof(*old));
42278 /* temporary bitcopy just to insert correctly */
42279 *old = *real_packet;
42282 }
42283
42284 differ = (old->counterpart != real_packet->counterpart);
42285 if (differ) {
42286 BV_SET(fields, 0);
42287 }
42288
42289 /* folded into head */
42290 if (real_packet->I_accepted) {
42291 BV_SET(fields, 1);
42292 }
42293
42294 /* folded into head */
42295 if (real_packet->other_accepted) {
42296 BV_SET(fields, 2);
42297 }
42298#endif /* FREECIV_DELTA_PROTOCOL */
42299
42300#ifdef FREECIV_JSON_CONNECTION
42301 struct plocation field_addr;
42302 {
42303 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42306 }
42307#endif /* FREECIV_JSON_CONNECTION */
42308
42309#ifdef FREECIV_DELTA_PROTOCOL
42310#ifdef FREECIV_JSON_CONNECTION
42311 field_addr.name = "fields";
42312#endif /* FREECIV_JSON_CONNECTION */
42313 e = 0;
42314 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42315 if (e) {
42316 log_packet_detailed("fields bitvector error detected");
42317 }
42318
42319 if (BV_ISSET(fields, 0)) {
42320 log_packet_detailed(" field 'counterpart' has changed");
42321
42322#ifdef FREECIV_JSON_CONNECTION
42323 field_addr.name = "counterpart";
42324#endif /* FREECIV_JSON_CONNECTION */
42325 e = 0;
42326
42327 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42328
42329 if (e) {
42330 log_packet_detailed("'counterpart' field error detected");
42331 }
42332 }
42333
42334 /* field 1 is folded into the header */
42335
42336 /* field 2 is folded into the header */
42337
42338 *old = *real_packet;
42339
42340#else /* FREECIV_DELTA_PROTOCOL */
42341#ifdef FREECIV_JSON_CONNECTION
42342 field_addr.name = "counterpart";
42343#endif /* FREECIV_JSON_CONNECTION */
42344 e = 0;
42345
42346 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42347
42348 if (e) {
42349 log_packet_detailed("'counterpart' field error detected");
42350 }
42351
42352#ifdef FREECIV_JSON_CONNECTION
42353 field_addr.name = "I_accepted";
42354#endif /* FREECIV_JSON_CONNECTION */
42355 e = 0;
42356
42357 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->I_accepted);
42358
42359 if (e) {
42360 log_packet_detailed("'I_accepted' field error detected");
42361 }
42362
42363#ifdef FREECIV_JSON_CONNECTION
42364 field_addr.name = "other_accepted";
42365#endif /* FREECIV_JSON_CONNECTION */
42366 e = 0;
42367
42368 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->other_accepted);
42369
42370 if (e) {
42371 log_packet_detailed("'other_accepted' field error detected");
42372 }
42373#endif /* FREECIV_DELTA_PROTOCOL */
42374
42376}
42377
42379{
42380 if (!pc->used) {
42381 log_error("WARNING: trying to send data to the closed connection %s",
42383 return -1;
42384 }
42385 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet != nullptr, -1,
42386 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY not installed");
42387 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet(pc, packet);
42388}
42389
42396
42397int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
42398{
42399 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42400
42402 real_packet->I_accepted = I_accepted;
42403 real_packet->other_accepted = other_accepted;
42404
42406}
42407
42409{
42410 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42411
42413 real_packet->I_accepted = I_accepted;
42414 real_packet->other_accepted = other_accepted;
42415
42417}
42418
42420{
42421 memset(packet, 0, sizeof(*packet));
42422}
42423
42424#define free_packet_diplomacy_cancel_pact(_packet) (void) 0
42425#define destroy_packet_diplomacy_cancel_pact free
42426
42427#ifdef FREECIV_DELTA_PROTOCOL
42428#define hash_packet_diplomacy_cancel_pact_100 hash_const
42429#define cmp_packet_diplomacy_cancel_pact_100 cmp_const
42431#endif /* FREECIV_DELTA_PROTOCOL */
42432
42434{
42435#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_pact(_packet)
42437
42438#ifdef FREECIV_JSON_CONNECTION
42439 struct plocation field_addr;
42440 {
42441 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42444 }
42445#endif /* FREECIV_JSON_CONNECTION */
42446
42447 log_packet_detailed("packet_diplomacy_cancel_pact_100: got info about ()");
42448
42449#ifdef FREECIV_DELTA_PROTOCOL
42452 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_PACT;
42453
42454 if (nullptr == *hash) {
42456 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42457 }
42458
42459 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42460 *real_packet = *old;
42461 } else {
42462 /* packet is already initialized empty */
42463 log_packet_detailed(" no old info");
42464 }
42465
42466#ifdef FREECIV_JSON_CONNECTION
42467 field_addr.name = "fields";
42468#endif /* FREECIV_JSON_CONNECTION */
42469 DIO_BV_GET(&din, &field_addr, fields);
42470
42471 if (BV_ISSET(fields, 0)) {
42472 log_packet_detailed(" got field 'other_player_id'");
42473
42474#ifdef FREECIV_JSON_CONNECTION
42475 field_addr.name = "other_player_id";
42476#endif /* FREECIV_JSON_CONNECTION */
42477
42478 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42479 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42480 }
42481 }
42482
42483 if (BV_ISSET(fields, 1)) {
42484 log_packet_detailed(" got field 'clause'");
42485
42486#ifdef FREECIV_JSON_CONNECTION
42487 field_addr.name = "clause";
42488#endif /* FREECIV_JSON_CONNECTION */
42489
42490 {
42491 int readin;
42492
42493 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42495 }
42496 real_packet->clause = readin;
42497 }
42498 }
42499
42500 if (nullptr == old) {
42501 old = fc_malloc(sizeof(*old));
42503 *old = *real_packet;
42505 } else {
42506 *old = *real_packet;
42507 }
42508
42509#else /* FREECIV_DELTA_PROTOCOL */
42510#ifdef FREECIV_JSON_CONNECTION
42511 field_addr.name = "other_player_id";
42512#endif /* FREECIV_JSON_CONNECTION */
42513
42514 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42515 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42516 }
42517
42518#ifdef FREECIV_JSON_CONNECTION
42519 field_addr.name = "clause";
42520#endif /* FREECIV_JSON_CONNECTION */
42521
42522 {
42523 int readin;
42524
42525 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42527 }
42528 real_packet->clause = readin;
42529 }
42530#endif /* FREECIV_DELTA_PROTOCOL */
42531
42533#undef FREE_PACKET_STRUCT
42534}
42535
42537{
42538 const struct packet_diplomacy_cancel_pact *real_packet = packet;
42539 int e;
42541
42542 log_packet_detailed("packet_diplomacy_cancel_pact_100: sending info about ()");
42543
42544#ifdef FREECIV_DELTA_PROTOCOL
42547 bool differ;
42548 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_PACT;
42549
42550 if (nullptr == *hash) {
42552 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42553 }
42554 BV_CLR_ALL(fields);
42555
42556 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42557 old = fc_malloc(sizeof(*old));
42558 /* temporary bitcopy just to insert correctly */
42559 *old = *real_packet;
42562 }
42563
42564 differ = (old->other_player_id != real_packet->other_player_id);
42565 if (differ) {
42566 BV_SET(fields, 0);
42567 }
42568
42569 differ = (old->clause != real_packet->clause);
42570 if (differ) {
42571 BV_SET(fields, 1);
42572 }
42573#endif /* FREECIV_DELTA_PROTOCOL */
42574
42575#ifdef FREECIV_JSON_CONNECTION
42576 struct plocation field_addr;
42577 {
42578 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42581 }
42582#endif /* FREECIV_JSON_CONNECTION */
42583
42584#ifdef FREECIV_DELTA_PROTOCOL
42585#ifdef FREECIV_JSON_CONNECTION
42586 field_addr.name = "fields";
42587#endif /* FREECIV_JSON_CONNECTION */
42588 e = 0;
42589 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42590 if (e) {
42591 log_packet_detailed("fields bitvector error detected");
42592 }
42593
42594 if (BV_ISSET(fields, 0)) {
42595 log_packet_detailed(" field 'other_player_id' has changed");
42596
42597#ifdef FREECIV_JSON_CONNECTION
42598 field_addr.name = "other_player_id";
42599#endif /* FREECIV_JSON_CONNECTION */
42600 e = 0;
42601
42602 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42603
42604 if (e) {
42605 log_packet_detailed("'other_player_id' field error detected");
42606 }
42607 }
42608
42609 if (BV_ISSET(fields, 1)) {
42610 log_packet_detailed(" field 'clause' has changed");
42611
42612#ifdef FREECIV_JSON_CONNECTION
42613 field_addr.name = "clause";
42614#endif /* FREECIV_JSON_CONNECTION */
42615 e = 0;
42616
42617 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42618
42619 if (e) {
42620 log_packet_detailed("'clause' field error detected");
42621 }
42622 }
42623
42624 *old = *real_packet;
42625
42626#else /* FREECIV_DELTA_PROTOCOL */
42627#ifdef FREECIV_JSON_CONNECTION
42628 field_addr.name = "other_player_id";
42629#endif /* FREECIV_JSON_CONNECTION */
42630 e = 0;
42631
42632 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42633
42634 if (e) {
42635 log_packet_detailed("'other_player_id' field error detected");
42636 }
42637
42638#ifdef FREECIV_JSON_CONNECTION
42639 field_addr.name = "clause";
42640#endif /* FREECIV_JSON_CONNECTION */
42641 e = 0;
42642
42643 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42644
42645 if (e) {
42646 log_packet_detailed("'clause' field error detected");
42647 }
42648#endif /* FREECIV_DELTA_PROTOCOL */
42649
42651}
42652
42654{
42655 if (!pc->used) {
42656 log_error("WARNING: trying to send data to the closed connection %s",
42658 return -1;
42659 }
42660 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet != nullptr, -1,
42661 "Handler for PACKET_DIPLOMACY_CANCEL_PACT not installed");
42662 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet(pc, packet);
42663}
42664
42665int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
42666{
42667 struct packet_diplomacy_cancel_pact packet, *real_packet = &packet;
42668
42670 real_packet->clause = clause;
42671
42673}
42674
42675static inline void init_packet_page_msg(struct packet_page_msg *packet)
42676{
42677 memset(packet, 0, sizeof(*packet));
42678}
42679
42680#define free_packet_page_msg(_packet) (void) 0
42681#define destroy_packet_page_msg free
42682
42683#ifdef FREECIV_DELTA_PROTOCOL
42684#define hash_packet_page_msg_100 hash_const
42685#define cmp_packet_page_msg_100 cmp_const
42687#endif /* FREECIV_DELTA_PROTOCOL */
42688
42690{
42691#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg(_packet)
42693
42694#ifdef FREECIV_JSON_CONNECTION
42695 struct plocation field_addr;
42696 {
42697 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42700 }
42701#endif /* FREECIV_JSON_CONNECTION */
42702
42703 log_packet_detailed("packet_page_msg_100: got info about ()");
42704
42705#ifdef FREECIV_DELTA_PROTOCOL
42707 struct packet_page_msg *old;
42708 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG;
42709
42710 if (nullptr == *hash) {
42712 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42713 }
42714
42715 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42716 *real_packet = *old;
42717 } else {
42718 /* packet is already initialized empty */
42719 log_packet_detailed(" no old info");
42720 }
42721
42722#ifdef FREECIV_JSON_CONNECTION
42723 field_addr.name = "fields";
42724#endif /* FREECIV_JSON_CONNECTION */
42725 DIO_BV_GET(&din, &field_addr, fields);
42726
42727 if (BV_ISSET(fields, 0)) {
42728 log_packet_detailed(" got field 'caption'");
42729
42730#ifdef FREECIV_JSON_CONNECTION
42731 field_addr.name = "caption";
42732#endif /* FREECIV_JSON_CONNECTION */
42733
42734 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42736 }
42737 }
42738
42739 if (BV_ISSET(fields, 1)) {
42740 log_packet_detailed(" got field 'headline'");
42741
42742#ifdef FREECIV_JSON_CONNECTION
42743 field_addr.name = "headline";
42744#endif /* FREECIV_JSON_CONNECTION */
42745
42746 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42748 }
42749 }
42750
42751 if (BV_ISSET(fields, 2)) {
42752 log_packet_detailed(" got field 'event'");
42753
42754#ifdef FREECIV_JSON_CONNECTION
42755 field_addr.name = "event";
42756#endif /* FREECIV_JSON_CONNECTION */
42757
42758 {
42759 int readin;
42760
42761 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42763 }
42764 real_packet->event = readin;
42765 }
42766 }
42767
42768 if (BV_ISSET(fields, 3)) {
42769 log_packet_detailed(" got field 'len'");
42770
42771#ifdef FREECIV_JSON_CONNECTION
42772 field_addr.name = "len";
42773#endif /* FREECIV_JSON_CONNECTION */
42774
42775 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42777 }
42778 }
42779
42780 if (BV_ISSET(fields, 4)) {
42781 log_packet_detailed(" got field 'parts'");
42782
42783#ifdef FREECIV_JSON_CONNECTION
42784 field_addr.name = "parts";
42785#endif /* FREECIV_JSON_CONNECTION */
42786
42787 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42789 }
42790 }
42791
42792 if (nullptr == old) {
42793 old = fc_malloc(sizeof(*old));
42795 *old = *real_packet;
42797 } else {
42798 *old = *real_packet;
42799 }
42800
42801#else /* FREECIV_DELTA_PROTOCOL */
42802#ifdef FREECIV_JSON_CONNECTION
42803 field_addr.name = "caption";
42804#endif /* FREECIV_JSON_CONNECTION */
42805
42806 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42808 }
42809
42810#ifdef FREECIV_JSON_CONNECTION
42811 field_addr.name = "headline";
42812#endif /* FREECIV_JSON_CONNECTION */
42813
42814 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42816 }
42817
42818#ifdef FREECIV_JSON_CONNECTION
42819 field_addr.name = "event";
42820#endif /* FREECIV_JSON_CONNECTION */
42821
42822 {
42823 int readin;
42824
42825 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42827 }
42828 real_packet->event = readin;
42829 }
42830
42831#ifdef FREECIV_JSON_CONNECTION
42832 field_addr.name = "len";
42833#endif /* FREECIV_JSON_CONNECTION */
42834
42835 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42837 }
42838
42839#ifdef FREECIV_JSON_CONNECTION
42840 field_addr.name = "parts";
42841#endif /* FREECIV_JSON_CONNECTION */
42842
42843 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42845 }
42846#endif /* FREECIV_DELTA_PROTOCOL */
42847
42849#undef FREE_PACKET_STRUCT
42850}
42851
42852static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
42853{
42854 const struct packet_page_msg *real_packet = packet;
42855 int e;
42857
42858 log_packet_detailed("packet_page_msg_100: sending info about ()");
42859
42860#ifdef FREECIV_DELTA_PROTOCOL
42862 struct packet_page_msg *old;
42863 bool differ;
42864 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG;
42865
42866 if (nullptr == *hash) {
42868 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42869 }
42870 BV_CLR_ALL(fields);
42871
42872 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42873 old = fc_malloc(sizeof(*old));
42874 /* temporary bitcopy just to insert correctly */
42875 *old = *real_packet;
42878 }
42879
42880 differ = (strcmp(old->caption, real_packet->caption) != 0);
42881 if (differ) {
42882 BV_SET(fields, 0);
42883 }
42884
42885 differ = (strcmp(old->headline, real_packet->headline) != 0);
42886 if (differ) {
42887 BV_SET(fields, 1);
42888 }
42889
42890 differ = (old->event != real_packet->event);
42891 if (differ) {
42892 BV_SET(fields, 2);
42893 }
42894
42895 differ = (old->len != real_packet->len);
42896 if (differ) {
42897 BV_SET(fields, 3);
42898 }
42899
42900 differ = (old->parts != real_packet->parts);
42901 if (differ) {
42902 BV_SET(fields, 4);
42903 }
42904#endif /* FREECIV_DELTA_PROTOCOL */
42905
42906#ifdef FREECIV_JSON_CONNECTION
42907 struct plocation field_addr;
42908 {
42909 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42912 }
42913#endif /* FREECIV_JSON_CONNECTION */
42914
42915#ifdef FREECIV_DELTA_PROTOCOL
42916#ifdef FREECIV_JSON_CONNECTION
42917 field_addr.name = "fields";
42918#endif /* FREECIV_JSON_CONNECTION */
42919 e = 0;
42920 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42921 if (e) {
42922 log_packet_detailed("fields bitvector error detected");
42923 }
42924
42925 if (BV_ISSET(fields, 0)) {
42926 log_packet_detailed(" field 'caption' has changed");
42927
42928#ifdef FREECIV_JSON_CONNECTION
42929 field_addr.name = "caption";
42930#endif /* FREECIV_JSON_CONNECTION */
42931 e = 0;
42932
42933 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
42934
42935 if (e) {
42936 log_packet_detailed("'caption' field error detected");
42937 }
42938 }
42939
42940 if (BV_ISSET(fields, 1)) {
42941 log_packet_detailed(" field 'headline' has changed");
42942
42943#ifdef FREECIV_JSON_CONNECTION
42944 field_addr.name = "headline";
42945#endif /* FREECIV_JSON_CONNECTION */
42946 e = 0;
42947
42948 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
42949
42950 if (e) {
42951 log_packet_detailed("'headline' field error detected");
42952 }
42953 }
42954
42955 if (BV_ISSET(fields, 2)) {
42956 log_packet_detailed(" field 'event' has changed");
42957
42958#ifdef FREECIV_JSON_CONNECTION
42959 field_addr.name = "event";
42960#endif /* FREECIV_JSON_CONNECTION */
42961 e = 0;
42962
42963 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
42964
42965 if (e) {
42966 log_packet_detailed("'event' field error detected");
42967 }
42968 }
42969
42970 if (BV_ISSET(fields, 3)) {
42971 log_packet_detailed(" field 'len' has changed");
42972
42973#ifdef FREECIV_JSON_CONNECTION
42974 field_addr.name = "len";
42975#endif /* FREECIV_JSON_CONNECTION */
42976 e = 0;
42977
42978 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
42979
42980 if (e) {
42981 log_packet_detailed("'len' field error detected");
42982 }
42983 }
42984
42985 if (BV_ISSET(fields, 4)) {
42986 log_packet_detailed(" field 'parts' has changed");
42987
42988#ifdef FREECIV_JSON_CONNECTION
42989 field_addr.name = "parts";
42990#endif /* FREECIV_JSON_CONNECTION */
42991 e = 0;
42992
42993 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
42994
42995 if (e) {
42996 log_packet_detailed("'parts' field error detected");
42997 }
42998 }
42999
43000 *old = *real_packet;
43001
43002#else /* FREECIV_DELTA_PROTOCOL */
43003#ifdef FREECIV_JSON_CONNECTION
43004 field_addr.name = "caption";
43005#endif /* FREECIV_JSON_CONNECTION */
43006 e = 0;
43007
43008 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
43009
43010 if (e) {
43011 log_packet_detailed("'caption' field error detected");
43012 }
43013
43014#ifdef FREECIV_JSON_CONNECTION
43015 field_addr.name = "headline";
43016#endif /* FREECIV_JSON_CONNECTION */
43017 e = 0;
43018
43019 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
43020
43021 if (e) {
43022 log_packet_detailed("'headline' field error detected");
43023 }
43024
43025#ifdef FREECIV_JSON_CONNECTION
43026 field_addr.name = "event";
43027#endif /* FREECIV_JSON_CONNECTION */
43028 e = 0;
43029
43030 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
43031
43032 if (e) {
43033 log_packet_detailed("'event' field error detected");
43034 }
43035
43036#ifdef FREECIV_JSON_CONNECTION
43037 field_addr.name = "len";
43038#endif /* FREECIV_JSON_CONNECTION */
43039 e = 0;
43040
43041 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
43042
43043 if (e) {
43044 log_packet_detailed("'len' field error detected");
43045 }
43046
43047#ifdef FREECIV_JSON_CONNECTION
43048 field_addr.name = "parts";
43049#endif /* FREECIV_JSON_CONNECTION */
43050 e = 0;
43051
43052 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
43053
43054 if (e) {
43055 log_packet_detailed("'parts' field error detected");
43056 }
43057#endif /* FREECIV_DELTA_PROTOCOL */
43058
43060}
43061
43062int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
43063{
43064 if (!pc->used) {
43065 log_error("WARNING: trying to send data to the closed connection %s",
43067 return -1;
43068 }
43069 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG].packet != nullptr, -1,
43070 "Handler for PACKET_PAGE_MSG not installed");
43071 return pc->phs.handlers->send[PACKET_PAGE_MSG].packet(pc, packet);
43072}
43073
43074void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
43075{
43076 conn_list_iterate(dest, pconn) {
43077 send_packet_page_msg(pconn, packet);
43079}
43080
43081static inline void init_packet_page_msg_part(struct packet_page_msg_part *packet)
43082{
43083 memset(packet, 0, sizeof(*packet));
43084}
43085
43086#define free_packet_page_msg_part(_packet) (void) 0
43087#define destroy_packet_page_msg_part free
43088
43089#ifdef FREECIV_DELTA_PROTOCOL
43090#define hash_packet_page_msg_part_100 hash_const
43091#define cmp_packet_page_msg_part_100 cmp_const
43093#endif /* FREECIV_DELTA_PROTOCOL */
43094
43096{
43097#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg_part(_packet)
43099
43100#ifdef FREECIV_JSON_CONNECTION
43101 struct plocation field_addr;
43102 {
43103 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43106 }
43107#endif /* FREECIV_JSON_CONNECTION */
43108
43109 log_packet_detailed("packet_page_msg_part_100: got info about ()");
43110
43111#ifdef FREECIV_DELTA_PROTOCOL
43113 struct packet_page_msg_part *old;
43114 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG_PART;
43115
43116 if (nullptr == *hash) {
43118 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43119 }
43120
43121 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43122 *real_packet = *old;
43123 } else {
43124 /* packet is already initialized empty */
43125 log_packet_detailed(" no old info");
43126 }
43127
43128#ifdef FREECIV_JSON_CONNECTION
43129 field_addr.name = "fields";
43130#endif /* FREECIV_JSON_CONNECTION */
43131 DIO_BV_GET(&din, &field_addr, fields);
43132
43133 if (BV_ISSET(fields, 0)) {
43134 log_packet_detailed(" got field 'lines'");
43135
43136#ifdef FREECIV_JSON_CONNECTION
43137 field_addr.name = "lines";
43138#endif /* FREECIV_JSON_CONNECTION */
43139
43140 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43142 }
43143 }
43144
43145 if (nullptr == old) {
43146 old = fc_malloc(sizeof(*old));
43148 *old = *real_packet;
43150 } else {
43151 *old = *real_packet;
43152 }
43153
43154#else /* FREECIV_DELTA_PROTOCOL */
43155#ifdef FREECIV_JSON_CONNECTION
43156 field_addr.name = "lines";
43157#endif /* FREECIV_JSON_CONNECTION */
43158
43159 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43161 }
43162#endif /* FREECIV_DELTA_PROTOCOL */
43163
43165#undef FREE_PACKET_STRUCT
43166}
43167
43168static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
43169{
43170 const struct packet_page_msg_part *real_packet = packet;
43171 int e;
43173
43174 log_packet_detailed("packet_page_msg_part_100: sending info about ()");
43175
43176#ifdef FREECIV_DELTA_PROTOCOL
43178 struct packet_page_msg_part *old;
43179 bool differ;
43180 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG_PART;
43181
43182 if (nullptr == *hash) {
43184 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43185 }
43186 BV_CLR_ALL(fields);
43187
43188 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43189 old = fc_malloc(sizeof(*old));
43190 /* temporary bitcopy just to insert correctly */
43191 *old = *real_packet;
43194 }
43195
43196 differ = (strcmp(old->lines, real_packet->lines) != 0);
43197 if (differ) {
43198 BV_SET(fields, 0);
43199 }
43200#endif /* FREECIV_DELTA_PROTOCOL */
43201
43202#ifdef FREECIV_JSON_CONNECTION
43203 struct plocation field_addr;
43204 {
43205 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43208 }
43209#endif /* FREECIV_JSON_CONNECTION */
43210
43211#ifdef FREECIV_DELTA_PROTOCOL
43212#ifdef FREECIV_JSON_CONNECTION
43213 field_addr.name = "fields";
43214#endif /* FREECIV_JSON_CONNECTION */
43215 e = 0;
43216 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43217 if (e) {
43218 log_packet_detailed("fields bitvector error detected");
43219 }
43220
43221 if (BV_ISSET(fields, 0)) {
43222 log_packet_detailed(" field 'lines' has changed");
43223
43224#ifdef FREECIV_JSON_CONNECTION
43225 field_addr.name = "lines";
43226#endif /* FREECIV_JSON_CONNECTION */
43227 e = 0;
43228
43229 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43230
43231 if (e) {
43232 log_packet_detailed("'lines' field error detected");
43233 }
43234 }
43235
43236 *old = *real_packet;
43237
43238#else /* FREECIV_DELTA_PROTOCOL */
43239#ifdef FREECIV_JSON_CONNECTION
43240 field_addr.name = "lines";
43241#endif /* FREECIV_JSON_CONNECTION */
43242 e = 0;
43243
43244 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43245
43246 if (e) {
43247 log_packet_detailed("'lines' field error detected");
43248 }
43249#endif /* FREECIV_DELTA_PROTOCOL */
43250
43252}
43253
43255{
43256 if (!pc->used) {
43257 log_error("WARNING: trying to send data to the closed connection %s",
43259 return -1;
43260 }
43261 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet != nullptr, -1,
43262 "Handler for PACKET_PAGE_MSG_PART not installed");
43263 return pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet(pc, packet);
43264}
43265
43266void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
43267{
43268 conn_list_iterate(dest, pconn) {
43271}
43272
43273static inline void init_packet_report_req(struct packet_report_req *packet)
43274{
43275 memset(packet, 0, sizeof(*packet));
43276}
43277
43278#define free_packet_report_req(_packet) (void) 0
43279#define destroy_packet_report_req free
43280
43281#ifdef FREECIV_DELTA_PROTOCOL
43282#define hash_packet_report_req_100 hash_const
43283#define cmp_packet_report_req_100 cmp_const
43285#endif /* FREECIV_DELTA_PROTOCOL */
43286
43288{
43289#define FREE_PACKET_STRUCT(_packet) free_packet_report_req(_packet)
43291
43292#ifdef FREECIV_JSON_CONNECTION
43293 struct plocation field_addr;
43294 {
43295 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43298 }
43299#endif /* FREECIV_JSON_CONNECTION */
43300
43301 log_packet_detailed("packet_report_req_100: got info about ()");
43302
43303#ifdef FREECIV_DELTA_PROTOCOL
43305 struct packet_report_req *old;
43306 struct genhash **hash = pc->phs.received + PACKET_REPORT_REQ;
43307
43308 if (nullptr == *hash) {
43310 nullptr, nullptr, nullptr, destroy_packet_report_req);
43311 }
43312
43313 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43314 *real_packet = *old;
43315 } else {
43316 /* packet is already initialized empty */
43317 log_packet_detailed(" no old info");
43318 }
43319
43320#ifdef FREECIV_JSON_CONNECTION
43321 field_addr.name = "fields";
43322#endif /* FREECIV_JSON_CONNECTION */
43323 DIO_BV_GET(&din, &field_addr, fields);
43324
43325 if (BV_ISSET(fields, 0)) {
43326 log_packet_detailed(" got field 'type'");
43327
43328#ifdef FREECIV_JSON_CONNECTION
43329 field_addr.name = "type";
43330#endif /* FREECIV_JSON_CONNECTION */
43331
43332 {
43333 int readin;
43334
43335 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43337 }
43338 real_packet->type = readin;
43339 }
43340 }
43341
43342 if (nullptr == old) {
43343 old = fc_malloc(sizeof(*old));
43345 *old = *real_packet;
43347 } else {
43348 *old = *real_packet;
43349 }
43350
43351#else /* FREECIV_DELTA_PROTOCOL */
43352#ifdef FREECIV_JSON_CONNECTION
43353 field_addr.name = "type";
43354#endif /* FREECIV_JSON_CONNECTION */
43355
43356 {
43357 int readin;
43358
43359 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43361 }
43362 real_packet->type = readin;
43363 }
43364#endif /* FREECIV_DELTA_PROTOCOL */
43365
43367#undef FREE_PACKET_STRUCT
43368}
43369
43370static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
43371{
43372 const struct packet_report_req *real_packet = packet;
43373 int e;
43375
43376 log_packet_detailed("packet_report_req_100: sending info about ()");
43377
43378#ifdef FREECIV_DELTA_PROTOCOL
43380 struct packet_report_req *old;
43381 bool differ;
43382 struct genhash **hash = pc->phs.sent + PACKET_REPORT_REQ;
43383
43384 if (nullptr == *hash) {
43386 nullptr, nullptr, nullptr, destroy_packet_report_req);
43387 }
43388 BV_CLR_ALL(fields);
43389
43390 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43391 old = fc_malloc(sizeof(*old));
43392 /* temporary bitcopy just to insert correctly */
43393 *old = *real_packet;
43396 }
43397
43398 differ = (old->type != real_packet->type);
43399 if (differ) {
43400 BV_SET(fields, 0);
43401 }
43402#endif /* FREECIV_DELTA_PROTOCOL */
43403
43404#ifdef FREECIV_JSON_CONNECTION
43405 struct plocation field_addr;
43406 {
43407 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43410 }
43411#endif /* FREECIV_JSON_CONNECTION */
43412
43413#ifdef FREECIV_DELTA_PROTOCOL
43414#ifdef FREECIV_JSON_CONNECTION
43415 field_addr.name = "fields";
43416#endif /* FREECIV_JSON_CONNECTION */
43417 e = 0;
43418 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43419 if (e) {
43420 log_packet_detailed("fields bitvector error detected");
43421 }
43422
43423 if (BV_ISSET(fields, 0)) {
43424 log_packet_detailed(" field 'type' has changed");
43425
43426#ifdef FREECIV_JSON_CONNECTION
43427 field_addr.name = "type";
43428#endif /* FREECIV_JSON_CONNECTION */
43429 e = 0;
43430
43431 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43432
43433 if (e) {
43434 log_packet_detailed("'type' field error detected");
43435 }
43436 }
43437
43438 *old = *real_packet;
43439
43440#else /* FREECIV_DELTA_PROTOCOL */
43441#ifdef FREECIV_JSON_CONNECTION
43442 field_addr.name = "type";
43443#endif /* FREECIV_JSON_CONNECTION */
43444 e = 0;
43445
43446 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43447
43448 if (e) {
43449 log_packet_detailed("'type' field error detected");
43450 }
43451#endif /* FREECIV_DELTA_PROTOCOL */
43452
43454}
43455
43456int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
43457{
43458 if (!pc->used) {
43459 log_error("WARNING: trying to send data to the closed connection %s",
43461 return -1;
43462 }
43463 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_REPORT_REQ].packet != nullptr, -1,
43464 "Handler for PACKET_REPORT_REQ not installed");
43465 return pc->phs.handlers->send[PACKET_REPORT_REQ].packet(pc, packet);
43466}
43467
43469{
43470 struct packet_report_req packet, *real_packet = &packet;
43471
43473
43475}
43476
43477static inline void init_packet_conn_info(struct packet_conn_info *packet)
43478{
43479 memset(packet, 0, sizeof(*packet));
43480}
43481
43482#define free_packet_conn_info(_packet) (void) 0
43483#define destroy_packet_conn_info free
43484
43485#ifdef FREECIV_DELTA_PROTOCOL
43487{
43488 const struct packet_conn_info *key = (const struct packet_conn_info *) vkey;
43489 genhash_val_t result = 0;
43490
43491 result += key->id;
43492
43493 result &= 0xFFFFFFFF;
43494 return result;
43495}
43496
43497static bool cmp_packet_conn_info_100(const void *vkey1, const void *vkey2)
43498{
43499 const struct packet_conn_info *old = (const struct packet_conn_info *) vkey1;
43500 const struct packet_conn_info *real_packet = (const struct packet_conn_info *) vkey2;
43501 bool differ;
43502
43503 differ = (old->id != real_packet->id);
43504
43505 return !differ;
43506}
43508#endif /* FREECIV_DELTA_PROTOCOL */
43509
43511{
43512#define FREE_PACKET_STRUCT(_packet) free_packet_conn_info(_packet)
43514
43515#ifdef FREECIV_JSON_CONNECTION
43516 struct plocation field_addr;
43517 {
43518 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43521 }
43522#endif /* FREECIV_JSON_CONNECTION */
43523
43524#ifdef FREECIV_JSON_CONNECTION
43525 field_addr.name = "id";
43526#endif /* FREECIV_JSON_CONNECTION */
43527
43528 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
43530 }
43531
43532 log_packet_detailed("packet_conn_info_100: got info about (%d)",
43533 real_packet->id);
43534
43535#ifdef FREECIV_DELTA_PROTOCOL
43537 struct packet_conn_info *old;
43538 struct genhash **hash = pc->phs.received + PACKET_CONN_INFO;
43539
43540 if (nullptr == *hash) {
43542 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43543 }
43544
43545 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43546 *real_packet = *old;
43547 } else {
43548 /* packet is already initialized empty */
43549 log_packet_detailed(" no old info");
43550 }
43551
43552#ifdef FREECIV_JSON_CONNECTION
43553 field_addr.name = "fields";
43554#endif /* FREECIV_JSON_CONNECTION */
43555 DIO_BV_GET(&din, &field_addr, fields);
43556
43557 real_packet->used = BV_ISSET(fields, 0);
43558
43559 real_packet->established = BV_ISSET(fields, 1);
43560
43561 real_packet->observer = BV_ISSET(fields, 2);
43562
43563 if (BV_ISSET(fields, 3)) {
43564 log_packet_detailed(" got field 'player_num'");
43565
43566#ifdef FREECIV_JSON_CONNECTION
43567 field_addr.name = "player_num";
43568#endif /* FREECIV_JSON_CONNECTION */
43569
43570 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43571 RECEIVE_PACKET_FIELD_ERROR(player_num);
43572 }
43573 }
43574
43575 if (BV_ISSET(fields, 4)) {
43576 log_packet_detailed(" got field 'access_level'");
43577
43578#ifdef FREECIV_JSON_CONNECTION
43579 field_addr.name = "access_level";
43580#endif /* FREECIV_JSON_CONNECTION */
43581
43582 {
43583 int readin;
43584
43585 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43586 RECEIVE_PACKET_FIELD_ERROR(access_level);
43587 }
43588 real_packet->access_level = readin;
43589 }
43590 }
43591
43592 if (BV_ISSET(fields, 5)) {
43593 log_packet_detailed(" got field 'username'");
43594
43595#ifdef FREECIV_JSON_CONNECTION
43596 field_addr.name = "username";
43597#endif /* FREECIV_JSON_CONNECTION */
43598
43599 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43601 }
43602 }
43603
43604 if (BV_ISSET(fields, 6)) {
43605 log_packet_detailed(" got field 'addr'");
43606
43607#ifdef FREECIV_JSON_CONNECTION
43608 field_addr.name = "addr";
43609#endif /* FREECIV_JSON_CONNECTION */
43610
43611 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43613 }
43614 }
43615
43616 if (BV_ISSET(fields, 7)) {
43617 log_packet_detailed(" got field 'capability'");
43618
43619#ifdef FREECIV_JSON_CONNECTION
43620 field_addr.name = "capability";
43621#endif /* FREECIV_JSON_CONNECTION */
43622
43623 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43624 RECEIVE_PACKET_FIELD_ERROR(capability);
43625 }
43626 }
43627
43628 if (nullptr == old) {
43629 old = fc_malloc(sizeof(*old));
43631 *old = *real_packet;
43633 } else {
43634 *old = *real_packet;
43635 }
43636
43637#else /* FREECIV_DELTA_PROTOCOL */
43638#ifdef FREECIV_JSON_CONNECTION
43639 field_addr.name = "used";
43640#endif /* FREECIV_JSON_CONNECTION */
43641
43642 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->used)) {
43644 }
43645
43646#ifdef FREECIV_JSON_CONNECTION
43647 field_addr.name = "established";
43648#endif /* FREECIV_JSON_CONNECTION */
43649
43650 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->established)) {
43651 RECEIVE_PACKET_FIELD_ERROR(established);
43652 }
43653
43654#ifdef FREECIV_JSON_CONNECTION
43655 field_addr.name = "observer";
43656#endif /* FREECIV_JSON_CONNECTION */
43657
43658 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->observer)) {
43660 }
43661
43662#ifdef FREECIV_JSON_CONNECTION
43663 field_addr.name = "player_num";
43664#endif /* FREECIV_JSON_CONNECTION */
43665
43666 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43667 RECEIVE_PACKET_FIELD_ERROR(player_num);
43668 }
43669
43670#ifdef FREECIV_JSON_CONNECTION
43671 field_addr.name = "access_level";
43672#endif /* FREECIV_JSON_CONNECTION */
43673
43674 {
43675 int readin;
43676
43677 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43678 RECEIVE_PACKET_FIELD_ERROR(access_level);
43679 }
43680 real_packet->access_level = readin;
43681 }
43682
43683#ifdef FREECIV_JSON_CONNECTION
43684 field_addr.name = "username";
43685#endif /* FREECIV_JSON_CONNECTION */
43686
43687 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43689 }
43690
43691#ifdef FREECIV_JSON_CONNECTION
43692 field_addr.name = "addr";
43693#endif /* FREECIV_JSON_CONNECTION */
43694
43695 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43697 }
43698
43699#ifdef FREECIV_JSON_CONNECTION
43700 field_addr.name = "capability";
43701#endif /* FREECIV_JSON_CONNECTION */
43702
43703 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43704 RECEIVE_PACKET_FIELD_ERROR(capability);
43705 }
43706#endif /* FREECIV_DELTA_PROTOCOL */
43707
43709#undef FREE_PACKET_STRUCT
43710}
43711
43712static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
43713{
43714 const struct packet_conn_info *real_packet = packet;
43715 int e;
43717
43718 log_packet_detailed("packet_conn_info_100: sending info about (%d)",
43719 real_packet->id);
43720
43721#ifdef FREECIV_DELTA_PROTOCOL
43723 struct packet_conn_info *old;
43724 bool differ;
43725 int different = 0;
43726 struct genhash **hash = pc->phs.sent + PACKET_CONN_INFO;
43727
43728 if (nullptr == *hash) {
43730 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43731 }
43732 BV_CLR_ALL(fields);
43733
43734 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43735 old = fc_malloc(sizeof(*old));
43736 /* temporary bitcopy just to insert correctly */
43737 *old = *real_packet;
43740 different = 1; /* Force to send. */
43741 }
43742
43743 differ = (old->used != real_packet->used);
43744 if (differ) {
43745 different++;
43746 }
43747 /* folded into head */
43748 if (real_packet->used) {
43749 BV_SET(fields, 0);
43750 }
43751
43752 differ = (old->established != real_packet->established);
43753 if (differ) {
43754 different++;
43755 }
43756 /* folded into head */
43757 if (real_packet->established) {
43758 BV_SET(fields, 1);
43759 }
43760
43761 differ = (old->observer != real_packet->observer);
43762 if (differ) {
43763 different++;
43764 }
43765 /* folded into head */
43766 if (real_packet->observer) {
43767 BV_SET(fields, 2);
43768 }
43769
43770 differ = (old->player_num != real_packet->player_num);
43771 if (differ) {
43772 different++;
43773 BV_SET(fields, 3);
43774 }
43775
43776 differ = (old->access_level != real_packet->access_level);
43777 if (differ) {
43778 different++;
43779 BV_SET(fields, 4);
43780 }
43781
43782 differ = (strcmp(old->username, real_packet->username) != 0);
43783 if (differ) {
43784 different++;
43785 BV_SET(fields, 5);
43786 }
43787
43788 differ = (strcmp(old->addr, real_packet->addr) != 0);
43789 if (differ) {
43790 different++;
43791 BV_SET(fields, 6);
43792 }
43793
43794 differ = (strcmp(old->capability, real_packet->capability) != 0);
43795 if (differ) {
43796 different++;
43797 BV_SET(fields, 7);
43798 }
43799
43800 if (different == 0) {
43801 log_packet_detailed(" no change -> discard");
43803 }
43804#endif /* FREECIV_DELTA_PROTOCOL */
43805
43806#ifdef FREECIV_JSON_CONNECTION
43807 struct plocation field_addr;
43808 {
43809 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43812 }
43813#endif /* FREECIV_JSON_CONNECTION */
43814
43815#ifdef FREECIV_JSON_CONNECTION
43816 field_addr.name = "id";
43817#endif /* FREECIV_JSON_CONNECTION */
43818 e = 0;
43819
43820 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
43821
43822 if (e) {
43823 log_packet_detailed("'id' field error detected");
43824 }
43825
43826#ifdef FREECIV_DELTA_PROTOCOL
43827#ifdef FREECIV_JSON_CONNECTION
43828 field_addr.name = "fields";
43829#endif /* FREECIV_JSON_CONNECTION */
43830 e = 0;
43831 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43832 if (e) {
43833 log_packet_detailed("fields bitvector error detected");
43834 }
43835
43836 /* field 0 is folded into the header */
43837
43838 /* field 1 is folded into the header */
43839
43840 /* field 2 is folded into the header */
43841
43842 if (BV_ISSET(fields, 3)) {
43843 log_packet_detailed(" field 'player_num' has changed");
43844
43845#ifdef FREECIV_JSON_CONNECTION
43846 field_addr.name = "player_num";
43847#endif /* FREECIV_JSON_CONNECTION */
43848 e = 0;
43849
43850 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
43851
43852 if (e) {
43853 log_packet_detailed("'player_num' field error detected");
43854 }
43855 }
43856
43857 if (BV_ISSET(fields, 4)) {
43858 log_packet_detailed(" field 'access_level' has changed");
43859
43860#ifdef FREECIV_JSON_CONNECTION
43861 field_addr.name = "access_level";
43862#endif /* FREECIV_JSON_CONNECTION */
43863 e = 0;
43864
43865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
43866
43867 if (e) {
43868 log_packet_detailed("'access_level' field error detected");
43869 }
43870 }
43871
43872 if (BV_ISSET(fields, 5)) {
43873 log_packet_detailed(" field 'username' has changed");
43874
43875#ifdef FREECIV_JSON_CONNECTION
43876 field_addr.name = "username";
43877#endif /* FREECIV_JSON_CONNECTION */
43878 e = 0;
43879
43880 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43881
43882 if (e) {
43883 log_packet_detailed("'username' field error detected");
43884 }
43885 }
43886
43887 if (BV_ISSET(fields, 6)) {
43888 log_packet_detailed(" field 'addr' has changed");
43889
43890#ifdef FREECIV_JSON_CONNECTION
43891 field_addr.name = "addr";
43892#endif /* FREECIV_JSON_CONNECTION */
43893 e = 0;
43894
43895 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
43896
43897 if (e) {
43898 log_packet_detailed("'addr' field error detected");
43899 }
43900 }
43901
43902 if (BV_ISSET(fields, 7)) {
43903 log_packet_detailed(" field 'capability' has changed");
43904
43905#ifdef FREECIV_JSON_CONNECTION
43906 field_addr.name = "capability";
43907#endif /* FREECIV_JSON_CONNECTION */
43908 e = 0;
43909
43910 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
43911
43912 if (e) {
43913 log_packet_detailed("'capability' field error detected");
43914 }
43915 }
43916
43917 *old = *real_packet;
43918
43919#else /* FREECIV_DELTA_PROTOCOL */
43920#ifdef FREECIV_JSON_CONNECTION
43921 field_addr.name = "used";
43922#endif /* FREECIV_JSON_CONNECTION */
43923 e = 0;
43924
43925 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->used);
43926
43927 if (e) {
43928 log_packet_detailed("'used' field error detected");
43929 }
43930
43931#ifdef FREECIV_JSON_CONNECTION
43932 field_addr.name = "established";
43933#endif /* FREECIV_JSON_CONNECTION */
43934 e = 0;
43935
43936 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->established);
43937
43938 if (e) {
43939 log_packet_detailed("'established' field error detected");
43940 }
43941
43942#ifdef FREECIV_JSON_CONNECTION
43943 field_addr.name = "observer";
43944#endif /* FREECIV_JSON_CONNECTION */
43945 e = 0;
43946
43947 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->observer);
43948
43949 if (e) {
43950 log_packet_detailed("'observer' field error detected");
43951 }
43952
43953#ifdef FREECIV_JSON_CONNECTION
43954 field_addr.name = "player_num";
43955#endif /* FREECIV_JSON_CONNECTION */
43956 e = 0;
43957
43958 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
43959
43960 if (e) {
43961 log_packet_detailed("'player_num' field error detected");
43962 }
43963
43964#ifdef FREECIV_JSON_CONNECTION
43965 field_addr.name = "access_level";
43966#endif /* FREECIV_JSON_CONNECTION */
43967 e = 0;
43968
43969 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
43970
43971 if (e) {
43972 log_packet_detailed("'access_level' field error detected");
43973 }
43974
43975#ifdef FREECIV_JSON_CONNECTION
43976 field_addr.name = "username";
43977#endif /* FREECIV_JSON_CONNECTION */
43978 e = 0;
43979
43980 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43981
43982 if (e) {
43983 log_packet_detailed("'username' field error detected");
43984 }
43985
43986#ifdef FREECIV_JSON_CONNECTION
43987 field_addr.name = "addr";
43988#endif /* FREECIV_JSON_CONNECTION */
43989 e = 0;
43990
43991 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
43992
43993 if (e) {
43994 log_packet_detailed("'addr' field error detected");
43995 }
43996
43997#ifdef FREECIV_JSON_CONNECTION
43998 field_addr.name = "capability";
43999#endif /* FREECIV_JSON_CONNECTION */
44000 e = 0;
44001
44002 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
44003
44004 if (e) {
44005 log_packet_detailed("'capability' field error detected");
44006 }
44007#endif /* FREECIV_DELTA_PROTOCOL */
44008
44010}
44011
44012int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
44013{
44014 if (!pc->used) {
44015 log_error("WARNING: trying to send data to the closed connection %s",
44017 return -1;
44018 }
44019 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_INFO].packet != nullptr, -1,
44020 "Handler for PACKET_CONN_INFO not installed");
44021 return pc->phs.handlers->send[PACKET_CONN_INFO].packet(pc, packet);
44022}
44023
44024void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
44025{
44026 conn_list_iterate(dest, pconn) {
44029}
44030
44031static inline void init_packet_conn_ping_info(struct packet_conn_ping_info *packet)
44032{
44033 memset(packet, 0, sizeof(*packet));
44034}
44035
44036#define free_packet_conn_ping_info(_packet) (void) 0
44037#define destroy_packet_conn_ping_info free
44038
44039#ifdef FREECIV_DELTA_PROTOCOL
44040#define hash_packet_conn_ping_info_100 hash_const
44041#define cmp_packet_conn_ping_info_100 cmp_const
44043#endif /* FREECIV_DELTA_PROTOCOL */
44044
44046{
44047#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping_info(_packet)
44049
44050#ifdef FREECIV_JSON_CONNECTION
44051 struct plocation field_addr;
44052 {
44053 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44056 }
44057#endif /* FREECIV_JSON_CONNECTION */
44058
44059 log_packet_detailed("packet_conn_ping_info_100: got info about ()");
44060
44061#ifdef FREECIV_DELTA_PROTOCOL
44063 struct packet_conn_ping_info *old;
44064 struct genhash **hash = pc->phs.received + PACKET_CONN_PING_INFO;
44065
44066 if (nullptr == *hash) {
44068 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44069 }
44070
44071 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44072 *real_packet = *old;
44073 } else {
44074 /* packet is already initialized empty */
44075 log_packet_detailed(" no old info");
44076 }
44077
44078#ifdef FREECIV_JSON_CONNECTION
44079 field_addr.name = "fields";
44080#endif /* FREECIV_JSON_CONNECTION */
44081 DIO_BV_GET(&din, &field_addr, fields);
44082
44083 if (BV_ISSET(fields, 0)) {
44084 log_packet_detailed(" got field 'connections'");
44085
44086#ifdef FREECIV_JSON_CONNECTION
44087 field_addr.name = "connections";
44088#endif /* FREECIV_JSON_CONNECTION */
44089
44090 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44092 }
44093 }
44094
44095 if (BV_ISSET(fields, 1)) {
44096 log_packet_detailed(" got field 'conn_id'");
44097
44098#ifdef FREECIV_JSON_CONNECTION
44099 field_addr.name = "conn_id";
44100#endif /* FREECIV_JSON_CONNECTION */
44101
44102 {
44103 int i;
44104
44105 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44106 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44107 }
44108
44109#ifdef FREECIV_JSON_CONNECTION
44110 /* Enter array. */
44111 field_addr.sub_location = plocation_elem_new(0);
44112#endif /* FREECIV_JSON_CONNECTION */
44113
44114 for (i = 0; i < real_packet->connections; i++) {
44115#ifdef FREECIV_JSON_CONNECTION
44116 /* Next array element */
44117 field_addr.sub_location->number = i;
44118#endif /* FREECIV_JSON_CONNECTION */
44119
44120 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44122 }
44123 }
44124
44125#ifdef FREECIV_JSON_CONNECTION
44126 /* Exit array. */
44127 FC_FREE(field_addr.sub_location);
44128#endif /* FREECIV_JSON_CONNECTION */
44129 }
44130 }
44131
44132 if (BV_ISSET(fields, 2)) {
44133 log_packet_detailed(" got field 'ping_time'");
44134
44135#ifdef FREECIV_JSON_CONNECTION
44136 field_addr.name = "ping_time";
44137#endif /* FREECIV_JSON_CONNECTION */
44138
44139 {
44140 int i;
44141
44142 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44143 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44144 }
44145
44146#ifdef FREECIV_JSON_CONNECTION
44147 /* Enter array. */
44148 field_addr.sub_location = plocation_elem_new(0);
44149#endif /* FREECIV_JSON_CONNECTION */
44150
44151 for (i = 0; i < real_packet->connections; i++) {
44152#ifdef FREECIV_JSON_CONNECTION
44153 /* Next array element */
44154 field_addr.sub_location->number = i;
44155#endif /* FREECIV_JSON_CONNECTION */
44156
44157 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44158 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44159 }
44160 }
44161
44162#ifdef FREECIV_JSON_CONNECTION
44163 /* Exit array. */
44164 FC_FREE(field_addr.sub_location);
44165#endif /* FREECIV_JSON_CONNECTION */
44166 }
44167 }
44168
44169 if (nullptr == old) {
44170 old = fc_malloc(sizeof(*old));
44172 *old = *real_packet;
44174 } else {
44175 *old = *real_packet;
44176 }
44177
44178#else /* FREECIV_DELTA_PROTOCOL */
44179#ifdef FREECIV_JSON_CONNECTION
44180 field_addr.name = "connections";
44181#endif /* FREECIV_JSON_CONNECTION */
44182
44183 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44185 }
44186
44187#ifdef FREECIV_JSON_CONNECTION
44188 field_addr.name = "conn_id";
44189#endif /* FREECIV_JSON_CONNECTION */
44190
44191 {
44192 int i;
44193
44194 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44195 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44196 }
44197
44198#ifdef FREECIV_JSON_CONNECTION
44199 /* Enter array. */
44200 field_addr.sub_location = plocation_elem_new(0);
44201#endif /* FREECIV_JSON_CONNECTION */
44202
44203 for (i = 0; i < real_packet->connections; i++) {
44204#ifdef FREECIV_JSON_CONNECTION
44205 /* Next array element */
44206 field_addr.sub_location->number = i;
44207#endif /* FREECIV_JSON_CONNECTION */
44208
44209 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44211 }
44212 }
44213
44214#ifdef FREECIV_JSON_CONNECTION
44215 /* Exit array. */
44216 FC_FREE(field_addr.sub_location);
44217#endif /* FREECIV_JSON_CONNECTION */
44218 }
44219
44220#ifdef FREECIV_JSON_CONNECTION
44221 field_addr.name = "ping_time";
44222#endif /* FREECIV_JSON_CONNECTION */
44223
44224 {
44225 int i;
44226
44227 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44228 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44229 }
44230
44231#ifdef FREECIV_JSON_CONNECTION
44232 /* Enter array. */
44233 field_addr.sub_location = plocation_elem_new(0);
44234#endif /* FREECIV_JSON_CONNECTION */
44235
44236 for (i = 0; i < real_packet->connections; i++) {
44237#ifdef FREECIV_JSON_CONNECTION
44238 /* Next array element */
44239 field_addr.sub_location->number = i;
44240#endif /* FREECIV_JSON_CONNECTION */
44241
44242 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44243 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44244 }
44245 }
44246
44247#ifdef FREECIV_JSON_CONNECTION
44248 /* Exit array. */
44249 FC_FREE(field_addr.sub_location);
44250#endif /* FREECIV_JSON_CONNECTION */
44251 }
44252#endif /* FREECIV_DELTA_PROTOCOL */
44253
44255#undef FREE_PACKET_STRUCT
44256}
44257
44259{
44260 const struct packet_conn_ping_info *real_packet = packet;
44261 int e;
44263
44264 log_packet_detailed("packet_conn_ping_info_100: sending info about ()");
44265
44266#ifdef FREECIV_DELTA_PROTOCOL
44268 struct packet_conn_ping_info *old;
44269 bool differ;
44270 struct genhash **hash = pc->phs.sent + PACKET_CONN_PING_INFO;
44271
44272 if (nullptr == *hash) {
44274 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44275 }
44276 BV_CLR_ALL(fields);
44277
44278 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44279 old = fc_malloc(sizeof(*old));
44280 /* temporary bitcopy just to insert correctly */
44281 *old = *real_packet;
44284 }
44285
44286 differ = (old->connections != real_packet->connections);
44287 if (differ) {
44288 BV_SET(fields, 0);
44289 }
44290
44291 differ = (old->connections != real_packet->connections);
44292 if (!differ) {
44293 int i;
44294
44295 for (i = 0; i < old->connections; i++) {
44296 differ = (old->conn_id[i] != real_packet->conn_id[i]);
44297 if (differ) {
44298 break;
44299 }
44300 }
44301 }
44302 if (differ) {
44303 BV_SET(fields, 1);
44304 }
44305
44306 differ = (old->connections != real_packet->connections);
44307 if (!differ) {
44308 int i;
44309
44310 for (i = 0; i < old->connections; i++) {
44311 differ = ((int) (old->ping_time[i] * 100000) != (int) (real_packet->ping_time[i] * 100000));
44312 if (differ) {
44313 break;
44314 }
44315 }
44316 }
44317 if (differ) {
44318 BV_SET(fields, 2);
44319 }
44320#endif /* FREECIV_DELTA_PROTOCOL */
44321
44322#ifdef FREECIV_JSON_CONNECTION
44323 struct plocation field_addr;
44324 {
44325 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44328 }
44329#endif /* FREECIV_JSON_CONNECTION */
44330
44331#ifdef FREECIV_DELTA_PROTOCOL
44332#ifdef FREECIV_JSON_CONNECTION
44333 field_addr.name = "fields";
44334#endif /* FREECIV_JSON_CONNECTION */
44335 e = 0;
44336 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44337 if (e) {
44338 log_packet_detailed("fields bitvector error detected");
44339 }
44340
44341 if (BV_ISSET(fields, 0)) {
44342 log_packet_detailed(" field 'connections' has changed");
44343
44344#ifdef FREECIV_JSON_CONNECTION
44345 field_addr.name = "connections";
44346#endif /* FREECIV_JSON_CONNECTION */
44347 e = 0;
44348
44349 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44350
44351 if (e) {
44352 log_packet_detailed("'connections' field error detected");
44353 }
44354 }
44355
44356 if (BV_ISSET(fields, 1)) {
44357 log_packet_detailed(" field 'conn_id' has changed");
44358
44359#ifdef FREECIV_JSON_CONNECTION
44360 field_addr.name = "conn_id";
44361#endif /* FREECIV_JSON_CONNECTION */
44362 e = 0;
44363
44364 {
44365 int i;
44366
44367#ifdef FREECIV_JSON_CONNECTION
44368 /* Create the array. */
44369 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44370
44371 /* Enter array. */
44372 field_addr.sub_location = plocation_elem_new(0);
44373#endif /* FREECIV_JSON_CONNECTION */
44374
44375 for (i = 0; i < real_packet->connections; i++) {
44376#ifdef FREECIV_JSON_CONNECTION
44377 /* Next array element. */
44378 field_addr.sub_location->number = i;
44379#endif /* FREECIV_JSON_CONNECTION */
44380
44381 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44382 }
44383
44384#ifdef FREECIV_JSON_CONNECTION
44385 /* Exit array. */
44386 FC_FREE(field_addr.sub_location);
44387#endif /* FREECIV_JSON_CONNECTION */
44388 }
44389
44390 if (e) {
44391 log_packet_detailed("'conn_id' field error detected");
44392 }
44393 }
44394
44395 if (BV_ISSET(fields, 2)) {
44396 log_packet_detailed(" field 'ping_time' has changed");
44397
44398#ifdef FREECIV_JSON_CONNECTION
44399 field_addr.name = "ping_time";
44400#endif /* FREECIV_JSON_CONNECTION */
44401 e = 0;
44402
44403 {
44404 int i;
44405
44406#ifdef FREECIV_JSON_CONNECTION
44407 /* Create the array. */
44408 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44409
44410 /* Enter array. */
44411 field_addr.sub_location = plocation_elem_new(0);
44412#endif /* FREECIV_JSON_CONNECTION */
44413
44414 for (i = 0; i < real_packet->connections; i++) {
44415#ifdef FREECIV_JSON_CONNECTION
44416 /* Next array element. */
44417 field_addr.sub_location->number = i;
44418#endif /* FREECIV_JSON_CONNECTION */
44419
44420 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44421 }
44422
44423#ifdef FREECIV_JSON_CONNECTION
44424 /* Exit array. */
44425 FC_FREE(field_addr.sub_location);
44426#endif /* FREECIV_JSON_CONNECTION */
44427 }
44428
44429 if (e) {
44430 log_packet_detailed("'ping_time' field error detected");
44431 }
44432 }
44433
44434 *old = *real_packet;
44435
44436#else /* FREECIV_DELTA_PROTOCOL */
44437#ifdef FREECIV_JSON_CONNECTION
44438 field_addr.name = "connections";
44439#endif /* FREECIV_JSON_CONNECTION */
44440 e = 0;
44441
44442 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44443
44444 if (e) {
44445 log_packet_detailed("'connections' field error detected");
44446 }
44447
44448#ifdef FREECIV_JSON_CONNECTION
44449 field_addr.name = "conn_id";
44450#endif /* FREECIV_JSON_CONNECTION */
44451 e = 0;
44452
44453 {
44454 int i;
44455
44456#ifdef FREECIV_JSON_CONNECTION
44457 /* Create the array. */
44458 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44459
44460 /* Enter array. */
44461 field_addr.sub_location = plocation_elem_new(0);
44462#endif /* FREECIV_JSON_CONNECTION */
44463
44464 for (i = 0; i < real_packet->connections; i++) {
44465#ifdef FREECIV_JSON_CONNECTION
44466 /* Next array element. */
44467 field_addr.sub_location->number = i;
44468#endif /* FREECIV_JSON_CONNECTION */
44469
44470 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44471 }
44472
44473#ifdef FREECIV_JSON_CONNECTION
44474 /* Exit array. */
44475 FC_FREE(field_addr.sub_location);
44476#endif /* FREECIV_JSON_CONNECTION */
44477 }
44478
44479 if (e) {
44480 log_packet_detailed("'conn_id' field error detected");
44481 }
44482
44483#ifdef FREECIV_JSON_CONNECTION
44484 field_addr.name = "ping_time";
44485#endif /* FREECIV_JSON_CONNECTION */
44486 e = 0;
44487
44488 {
44489 int i;
44490
44491#ifdef FREECIV_JSON_CONNECTION
44492 /* Create the array. */
44493 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44494
44495 /* Enter array. */
44496 field_addr.sub_location = plocation_elem_new(0);
44497#endif /* FREECIV_JSON_CONNECTION */
44498
44499 for (i = 0; i < real_packet->connections; i++) {
44500#ifdef FREECIV_JSON_CONNECTION
44501 /* Next array element. */
44502 field_addr.sub_location->number = i;
44503#endif /* FREECIV_JSON_CONNECTION */
44504
44505 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44506 }
44507
44508#ifdef FREECIV_JSON_CONNECTION
44509 /* Exit array. */
44510 FC_FREE(field_addr.sub_location);
44511#endif /* FREECIV_JSON_CONNECTION */
44512 }
44513
44514 if (e) {
44515 log_packet_detailed("'ping_time' field error detected");
44516 }
44517#endif /* FREECIV_DELTA_PROTOCOL */
44518
44520}
44521
44523{
44524 if (!pc->used) {
44525 log_error("WARNING: trying to send data to the closed connection %s",
44527 return -1;
44528 }
44529 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet != nullptr, -1,
44530 "Handler for PACKET_CONN_PING_INFO not installed");
44531 return pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet(pc, packet);
44532}
44533
44534void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
44535{
44536 conn_list_iterate(dest, pconn) {
44539}
44540
44541static inline void init_packet_conn_ping(struct packet_conn_ping *packet)
44542{
44543 memset(packet, 0, sizeof(*packet));
44544}
44545
44546#define free_packet_conn_ping(_packet) (void) 0
44547#define destroy_packet_conn_ping free
44548
44550{
44551#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping(_packet)
44553
44554 log_packet_detailed("packet_conn_ping_100: got info about ()");
44555
44556 real_packet->__dummy = 0xff;
44557
44559#undef FREE_PACKET_STRUCT
44560}
44561
44563{
44565
44566 log_packet_detailed("packet_conn_ping_100: sending info about ()");
44567
44569}
44570
44572{
44573 if (!pc->used) {
44574 log_error("WARNING: trying to send data to the closed connection %s",
44576 return -1;
44577 }
44578 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING].no_packet != nullptr, -1,
44579 "Handler for PACKET_CONN_PING not installed");
44580 return pc->phs.handlers->send[PACKET_CONN_PING].no_packet(pc);
44581}
44582
44583static inline void init_packet_conn_pong(struct packet_conn_pong *packet)
44584{
44585 memset(packet, 0, sizeof(*packet));
44586}
44587
44588#define free_packet_conn_pong(_packet) (void) 0
44589#define destroy_packet_conn_pong free
44590
44592{
44593#define FREE_PACKET_STRUCT(_packet) free_packet_conn_pong(_packet)
44595
44596 log_packet_detailed("packet_conn_pong_100: got info about ()");
44597
44598 real_packet->__dummy = 0xff;
44599
44601#undef FREE_PACKET_STRUCT
44602}
44603
44605{
44607
44608 log_packet_detailed("packet_conn_pong_100: sending info about ()");
44609
44611}
44612
44614{
44615 if (!pc->used) {
44616 log_error("WARNING: trying to send data to the closed connection %s",
44618 return -1;
44619 }
44620 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PONG].no_packet != nullptr, -1,
44621 "Handler for PACKET_CONN_PONG not installed");
44622 return pc->phs.handlers->send[PACKET_CONN_PONG].no_packet(pc);
44623}
44624
44626{
44627 memset(packet, 0, sizeof(*packet));
44628}
44629
44630#define free_packet_client_heartbeat(_packet) (void) 0
44631#define destroy_packet_client_heartbeat free
44632
44634{
44635#define FREE_PACKET_STRUCT(_packet) free_packet_client_heartbeat(_packet)
44637
44638 log_packet_detailed("packet_client_heartbeat_100: got info about ()");
44639
44640 real_packet->__dummy = 0xff;
44641
44643#undef FREE_PACKET_STRUCT
44644}
44645
44647{
44649
44650 log_packet_detailed("packet_client_heartbeat_100: sending info about ()");
44651
44653}
44654
44656{
44657 if (!pc->used) {
44658 log_error("WARNING: trying to send data to the closed connection %s",
44660 return -1;
44661 }
44662 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet != nullptr, -1,
44663 "Handler for PACKET_CLIENT_HEARTBEAT not installed");
44664 return pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet(pc);
44665}
44666
44667static inline void init_packet_client_info(struct packet_client_info *packet)
44668{
44669 memset(packet, 0, sizeof(*packet));
44670}
44671
44672#define free_packet_client_info(_packet) (void) 0
44673#define destroy_packet_client_info free
44674
44675#ifdef FREECIV_DELTA_PROTOCOL
44676#define hash_packet_client_info_100 hash_const
44677#define cmp_packet_client_info_100 cmp_const
44679#endif /* FREECIV_DELTA_PROTOCOL */
44680
44682{
44683#define FREE_PACKET_STRUCT(_packet) free_packet_client_info(_packet)
44685
44686#ifdef FREECIV_JSON_CONNECTION
44687 struct plocation field_addr;
44688 {
44689 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44692 }
44693#endif /* FREECIV_JSON_CONNECTION */
44694
44695 log_packet_detailed("packet_client_info_100: got info about ()");
44696
44697#ifdef FREECIV_DELTA_PROTOCOL
44699 struct packet_client_info *old;
44700 struct genhash **hash = pc->phs.received + PACKET_CLIENT_INFO;
44701
44702 if (nullptr == *hash) {
44704 nullptr, nullptr, nullptr, destroy_packet_client_info);
44705 }
44706
44707 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44708 *real_packet = *old;
44709 } else {
44710 /* packet is already initialized empty */
44711 log_packet_detailed(" no old info");
44712 }
44713
44714#ifdef FREECIV_JSON_CONNECTION
44715 field_addr.name = "fields";
44716#endif /* FREECIV_JSON_CONNECTION */
44717 DIO_BV_GET(&din, &field_addr, fields);
44718
44719 if (BV_ISSET(fields, 0)) {
44720 log_packet_detailed(" got field 'gui'");
44721
44722#ifdef FREECIV_JSON_CONNECTION
44723 field_addr.name = "gui";
44724#endif /* FREECIV_JSON_CONNECTION */
44725
44726 {
44727 int readin;
44728
44729 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44731 }
44732 real_packet->gui = readin;
44733 }
44734 }
44735
44736 if (BV_ISSET(fields, 1)) {
44737 log_packet_detailed(" got field 'emerg_version'");
44738
44739#ifdef FREECIV_JSON_CONNECTION
44740 field_addr.name = "emerg_version";
44741#endif /* FREECIV_JSON_CONNECTION */
44742
44743 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44744 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44745 }
44746 }
44747
44748 if (BV_ISSET(fields, 2)) {
44749 log_packet_detailed(" got field 'distribution'");
44750
44751#ifdef FREECIV_JSON_CONNECTION
44752 field_addr.name = "distribution";
44753#endif /* FREECIV_JSON_CONNECTION */
44754
44755 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44756 RECEIVE_PACKET_FIELD_ERROR(distribution);
44757 }
44758 }
44759
44760 if (nullptr == old) {
44761 old = fc_malloc(sizeof(*old));
44763 *old = *real_packet;
44765 } else {
44766 *old = *real_packet;
44767 }
44768
44769#else /* FREECIV_DELTA_PROTOCOL */
44770#ifdef FREECIV_JSON_CONNECTION
44771 field_addr.name = "gui";
44772#endif /* FREECIV_JSON_CONNECTION */
44773
44774 {
44775 int readin;
44776
44777 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44779 }
44780 real_packet->gui = readin;
44781 }
44782
44783#ifdef FREECIV_JSON_CONNECTION
44784 field_addr.name = "emerg_version";
44785#endif /* FREECIV_JSON_CONNECTION */
44786
44787 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44788 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44789 }
44790
44791#ifdef FREECIV_JSON_CONNECTION
44792 field_addr.name = "distribution";
44793#endif /* FREECIV_JSON_CONNECTION */
44794
44795 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44796 RECEIVE_PACKET_FIELD_ERROR(distribution);
44797 }
44798#endif /* FREECIV_DELTA_PROTOCOL */
44799
44801#undef FREE_PACKET_STRUCT
44802}
44803
44804static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
44805{
44806 const struct packet_client_info *real_packet = packet;
44807 int e;
44809
44810 log_packet_detailed("packet_client_info_100: sending info about ()");
44811
44812#ifdef FREECIV_DELTA_PROTOCOL
44814 struct packet_client_info *old;
44815 bool differ;
44816 struct genhash **hash = pc->phs.sent + PACKET_CLIENT_INFO;
44817
44818 if (nullptr == *hash) {
44820 nullptr, nullptr, nullptr, destroy_packet_client_info);
44821 }
44822 BV_CLR_ALL(fields);
44823
44824 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44825 old = fc_malloc(sizeof(*old));
44826 /* temporary bitcopy just to insert correctly */
44827 *old = *real_packet;
44830 }
44831
44832 differ = (old->gui != real_packet->gui);
44833 if (differ) {
44834 BV_SET(fields, 0);
44835 }
44836
44837 differ = (old->emerg_version != real_packet->emerg_version);
44838 if (differ) {
44839 BV_SET(fields, 1);
44840 }
44841
44842 differ = (strcmp(old->distribution, real_packet->distribution) != 0);
44843 if (differ) {
44844 BV_SET(fields, 2);
44845 }
44846#endif /* FREECIV_DELTA_PROTOCOL */
44847
44848#ifdef FREECIV_JSON_CONNECTION
44849 struct plocation field_addr;
44850 {
44851 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44854 }
44855#endif /* FREECIV_JSON_CONNECTION */
44856
44857#ifdef FREECIV_DELTA_PROTOCOL
44858#ifdef FREECIV_JSON_CONNECTION
44859 field_addr.name = "fields";
44860#endif /* FREECIV_JSON_CONNECTION */
44861 e = 0;
44862 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44863 if (e) {
44864 log_packet_detailed("fields bitvector error detected");
44865 }
44866
44867 if (BV_ISSET(fields, 0)) {
44868 log_packet_detailed(" field 'gui' has changed");
44869
44870#ifdef FREECIV_JSON_CONNECTION
44871 field_addr.name = "gui";
44872#endif /* FREECIV_JSON_CONNECTION */
44873 e = 0;
44874
44875 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44876
44877 if (e) {
44878 log_packet_detailed("'gui' field error detected");
44879 }
44880 }
44881
44882 if (BV_ISSET(fields, 1)) {
44883 log_packet_detailed(" field 'emerg_version' has changed");
44884
44885#ifdef FREECIV_JSON_CONNECTION
44886 field_addr.name = "emerg_version";
44887#endif /* FREECIV_JSON_CONNECTION */
44888 e = 0;
44889
44890 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44891
44892 if (e) {
44893 log_packet_detailed("'emerg_version' field error detected");
44894 }
44895 }
44896
44897 if (BV_ISSET(fields, 2)) {
44898 log_packet_detailed(" field 'distribution' has changed");
44899
44900#ifdef FREECIV_JSON_CONNECTION
44901 field_addr.name = "distribution";
44902#endif /* FREECIV_JSON_CONNECTION */
44903 e = 0;
44904
44905 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
44906
44907 if (e) {
44908 log_packet_detailed("'distribution' field error detected");
44909 }
44910 }
44911
44912 *old = *real_packet;
44913
44914#else /* FREECIV_DELTA_PROTOCOL */
44915#ifdef FREECIV_JSON_CONNECTION
44916 field_addr.name = "gui";
44917#endif /* FREECIV_JSON_CONNECTION */
44918 e = 0;
44919
44920 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44921
44922 if (e) {
44923 log_packet_detailed("'gui' field error detected");
44924 }
44925
44926#ifdef FREECIV_JSON_CONNECTION
44927 field_addr.name = "emerg_version";
44928#endif /* FREECIV_JSON_CONNECTION */
44929 e = 0;
44930
44931 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44932
44933 if (e) {
44934 log_packet_detailed("'emerg_version' field error detected");
44935 }
44936
44937#ifdef FREECIV_JSON_CONNECTION
44938 field_addr.name = "distribution";
44939#endif /* FREECIV_JSON_CONNECTION */
44940 e = 0;
44941
44942 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
44943
44944 if (e) {
44945 log_packet_detailed("'distribution' field error detected");
44946 }
44947#endif /* FREECIV_DELTA_PROTOCOL */
44948
44950}
44951
44953{
44954 if (!pc->used) {
44955 log_error("WARNING: trying to send data to the closed connection %s",
44957 return -1;
44958 }
44959 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_INFO].packet != nullptr, -1,
44960 "Handler for PACKET_CLIENT_INFO not installed");
44961 return pc->phs.handlers->send[PACKET_CLIENT_INFO].packet(pc, packet);
44962}
44963
44964static inline void init_packet_end_phase(struct packet_end_phase *packet)
44965{
44966 memset(packet, 0, sizeof(*packet));
44967}
44968
44969#define free_packet_end_phase(_packet) (void) 0
44970#define destroy_packet_end_phase free
44971
44973{
44974#define FREE_PACKET_STRUCT(_packet) free_packet_end_phase(_packet)
44976
44977 log_packet_detailed("packet_end_phase_100: got info about ()");
44978
44979 real_packet->__dummy = 0xff;
44980
44982#undef FREE_PACKET_STRUCT
44983}
44984
44986{
44988
44989 log_packet_detailed("packet_end_phase_100: sending info about ()");
44990
44992}
44993
44995{
44996 if (!pc->used) {
44997 log_error("WARNING: trying to send data to the closed connection %s",
44999 return -1;
45000 }
45001 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_PHASE].no_packet != nullptr, -1,
45002 "Handler for PACKET_END_PHASE not installed");
45003 return pc->phs.handlers->send[PACKET_END_PHASE].no_packet(pc);
45004}
45005
45007{
45008 conn_list_iterate(dest, pconn) {
45011}
45012
45013static inline void init_packet_start_phase(struct packet_start_phase *packet)
45014{
45015 memset(packet, 0, sizeof(*packet));
45016}
45017
45018#define free_packet_start_phase(_packet) (void) 0
45019#define destroy_packet_start_phase free
45020
45021#ifdef FREECIV_DELTA_PROTOCOL
45022#define hash_packet_start_phase_100 hash_const
45023#define cmp_packet_start_phase_100 cmp_const
45025#endif /* FREECIV_DELTA_PROTOCOL */
45026
45028{
45029#define FREE_PACKET_STRUCT(_packet) free_packet_start_phase(_packet)
45031
45032#ifdef FREECIV_JSON_CONNECTION
45033 struct plocation field_addr;
45034 {
45035 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45038 }
45039#endif /* FREECIV_JSON_CONNECTION */
45040
45041 log_packet_detailed("packet_start_phase_100: got info about ()");
45042
45043#ifdef FREECIV_DELTA_PROTOCOL
45045 struct packet_start_phase *old;
45046 struct genhash **hash = pc->phs.received + PACKET_START_PHASE;
45047
45048 if (nullptr == *hash) {
45050 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45051 }
45052
45053 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45054 *real_packet = *old;
45055 } else {
45056 /* packet is already initialized empty */
45057 log_packet_detailed(" no old info");
45058 }
45059
45060#ifdef FREECIV_JSON_CONNECTION
45061 field_addr.name = "fields";
45062#endif /* FREECIV_JSON_CONNECTION */
45063 DIO_BV_GET(&din, &field_addr, fields);
45064
45065 if (BV_ISSET(fields, 0)) {
45066 log_packet_detailed(" got field 'phase'");
45067
45068#ifdef FREECIV_JSON_CONNECTION
45069 field_addr.name = "phase";
45070#endif /* FREECIV_JSON_CONNECTION */
45071
45072 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45074 }
45075 }
45076
45077 if (nullptr == old) {
45078 old = fc_malloc(sizeof(*old));
45080 *old = *real_packet;
45082 } else {
45083 *old = *real_packet;
45084 }
45085
45086#else /* FREECIV_DELTA_PROTOCOL */
45087#ifdef FREECIV_JSON_CONNECTION
45088 field_addr.name = "phase";
45089#endif /* FREECIV_JSON_CONNECTION */
45090
45091 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45093 }
45094#endif /* FREECIV_DELTA_PROTOCOL */
45095
45097#undef FREE_PACKET_STRUCT
45098}
45099
45100static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
45101{
45102 const struct packet_start_phase *real_packet = packet;
45103 int e;
45105
45106 log_packet_detailed("packet_start_phase_100: sending info about ()");
45107
45108#ifdef FREECIV_DELTA_PROTOCOL
45110 struct packet_start_phase *old;
45111 bool differ;
45112 struct genhash **hash = pc->phs.sent + PACKET_START_PHASE;
45113
45114 if (nullptr == *hash) {
45116 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45117 }
45118 BV_CLR_ALL(fields);
45119
45120 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45121 old = fc_malloc(sizeof(*old));
45122 /* temporary bitcopy just to insert correctly */
45123 *old = *real_packet;
45126 }
45127
45128 differ = (old->phase != real_packet->phase);
45129 if (differ) {
45130 BV_SET(fields, 0);
45131 }
45132#endif /* FREECIV_DELTA_PROTOCOL */
45133
45134#ifdef FREECIV_JSON_CONNECTION
45135 struct plocation field_addr;
45136 {
45137 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45140 }
45141#endif /* FREECIV_JSON_CONNECTION */
45142
45143#ifdef FREECIV_DELTA_PROTOCOL
45144#ifdef FREECIV_JSON_CONNECTION
45145 field_addr.name = "fields";
45146#endif /* FREECIV_JSON_CONNECTION */
45147 e = 0;
45148 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45149 if (e) {
45150 log_packet_detailed("fields bitvector error detected");
45151 }
45152
45153 if (BV_ISSET(fields, 0)) {
45154 log_packet_detailed(" field 'phase' has changed");
45155
45156#ifdef FREECIV_JSON_CONNECTION
45157 field_addr.name = "phase";
45158#endif /* FREECIV_JSON_CONNECTION */
45159 e = 0;
45160
45161 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45162
45163 if (e) {
45164 log_packet_detailed("'phase' field error detected");
45165 }
45166 }
45167
45168 *old = *real_packet;
45169
45170#else /* FREECIV_DELTA_PROTOCOL */
45171#ifdef FREECIV_JSON_CONNECTION
45172 field_addr.name = "phase";
45173#endif /* FREECIV_JSON_CONNECTION */
45174 e = 0;
45175
45176 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45177
45178 if (e) {
45179 log_packet_detailed("'phase' field error detected");
45180 }
45181#endif /* FREECIV_DELTA_PROTOCOL */
45182
45184}
45185
45187{
45188 if (!pc->used) {
45189 log_error("WARNING: trying to send data to the closed connection %s",
45191 return -1;
45192 }
45193 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_START_PHASE].packet != nullptr, -1,
45194 "Handler for PACKET_START_PHASE not installed");
45195 return pc->phs.handlers->send[PACKET_START_PHASE].packet(pc, packet);
45196}
45197
45198void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
45199{
45200 conn_list_iterate(dest, pconn) {
45203}
45204
45206{
45207 struct packet_start_phase packet, *real_packet = &packet;
45208
45210
45212}
45213
45215{
45216 struct packet_start_phase packet, *real_packet = &packet;
45217
45219
45221}
45222
45223static inline void init_packet_new_year(struct packet_new_year *packet)
45224{
45225 memset(packet, 0, sizeof(*packet));
45226}
45227
45228#define free_packet_new_year(_packet) (void) 0
45229#define destroy_packet_new_year free
45230
45231#ifdef FREECIV_DELTA_PROTOCOL
45232#define hash_packet_new_year_100 hash_const
45233#define cmp_packet_new_year_100 cmp_const
45235#endif /* FREECIV_DELTA_PROTOCOL */
45236
45238{
45239#define FREE_PACKET_STRUCT(_packet) free_packet_new_year(_packet)
45241
45242#ifdef FREECIV_JSON_CONNECTION
45243 struct plocation field_addr;
45244 {
45245 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45248 }
45249#endif /* FREECIV_JSON_CONNECTION */
45250
45251 log_packet_detailed("packet_new_year_100: got info about ()");
45252
45253#ifdef FREECIV_DELTA_PROTOCOL
45255 struct packet_new_year *old;
45256 struct genhash **hash = pc->phs.received + PACKET_NEW_YEAR;
45257
45258 if (nullptr == *hash) {
45260 nullptr, nullptr, nullptr, destroy_packet_new_year);
45261 }
45262
45263 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45264 *real_packet = *old;
45265 } else {
45266 /* packet is already initialized empty */
45267 log_packet_detailed(" no old info");
45268 }
45269
45270#ifdef FREECIV_JSON_CONNECTION
45271 field_addr.name = "fields";
45272#endif /* FREECIV_JSON_CONNECTION */
45273 DIO_BV_GET(&din, &field_addr, fields);
45274
45275 if (BV_ISSET(fields, 0)) {
45276 log_packet_detailed(" got field 'year'");
45277
45278#ifdef FREECIV_JSON_CONNECTION
45279 field_addr.name = "year";
45280#endif /* FREECIV_JSON_CONNECTION */
45281
45282 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45284 }
45285 }
45286
45287 if (BV_ISSET(fields, 1)) {
45288 log_packet_detailed(" got field 'fragments'");
45289
45290#ifdef FREECIV_JSON_CONNECTION
45291 field_addr.name = "fragments";
45292#endif /* FREECIV_JSON_CONNECTION */
45293
45294 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45295 RECEIVE_PACKET_FIELD_ERROR(fragments);
45296 }
45297 }
45298
45299 if (BV_ISSET(fields, 2)) {
45300 log_packet_detailed(" got field 'turn'");
45301
45302#ifdef FREECIV_JSON_CONNECTION
45303 field_addr.name = "turn";
45304#endif /* FREECIV_JSON_CONNECTION */
45305
45306 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45308 }
45309 }
45310
45311 if (nullptr == old) {
45312 old = fc_malloc(sizeof(*old));
45314 *old = *real_packet;
45316 } else {
45317 *old = *real_packet;
45318 }
45319
45320#else /* FREECIV_DELTA_PROTOCOL */
45321#ifdef FREECIV_JSON_CONNECTION
45322 field_addr.name = "year";
45323#endif /* FREECIV_JSON_CONNECTION */
45324
45325 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45327 }
45328
45329#ifdef FREECIV_JSON_CONNECTION
45330 field_addr.name = "fragments";
45331#endif /* FREECIV_JSON_CONNECTION */
45332
45333 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45334 RECEIVE_PACKET_FIELD_ERROR(fragments);
45335 }
45336
45337#ifdef FREECIV_JSON_CONNECTION
45338 field_addr.name = "turn";
45339#endif /* FREECIV_JSON_CONNECTION */
45340
45341 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45343 }
45344#endif /* FREECIV_DELTA_PROTOCOL */
45345
45347#undef FREE_PACKET_STRUCT
45348}
45349
45350static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
45351{
45352 const struct packet_new_year *real_packet = packet;
45353 int e;
45355
45356 log_packet_detailed("packet_new_year_100: sending info about ()");
45357
45358#ifdef FREECIV_DELTA_PROTOCOL
45360 struct packet_new_year *old;
45361 bool differ;
45362 struct genhash **hash = pc->phs.sent + PACKET_NEW_YEAR;
45363
45364 if (nullptr == *hash) {
45366 nullptr, nullptr, nullptr, destroy_packet_new_year);
45367 }
45368 BV_CLR_ALL(fields);
45369
45370 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45371 old = fc_malloc(sizeof(*old));
45372 /* temporary bitcopy just to insert correctly */
45373 *old = *real_packet;
45376 }
45377
45378 differ = (old->year != real_packet->year);
45379 if (differ) {
45380 BV_SET(fields, 0);
45381 }
45382
45383 differ = (old->fragments != real_packet->fragments);
45384 if (differ) {
45385 BV_SET(fields, 1);
45386 }
45387
45388 differ = (old->turn != real_packet->turn);
45389 if (differ) {
45390 BV_SET(fields, 2);
45391 }
45392#endif /* FREECIV_DELTA_PROTOCOL */
45393
45394#ifdef FREECIV_JSON_CONNECTION
45395 struct plocation field_addr;
45396 {
45397 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45400 }
45401#endif /* FREECIV_JSON_CONNECTION */
45402
45403#ifdef FREECIV_DELTA_PROTOCOL
45404#ifdef FREECIV_JSON_CONNECTION
45405 field_addr.name = "fields";
45406#endif /* FREECIV_JSON_CONNECTION */
45407 e = 0;
45408 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45409 if (e) {
45410 log_packet_detailed("fields bitvector error detected");
45411 }
45412
45413 if (BV_ISSET(fields, 0)) {
45414 log_packet_detailed(" field 'year' has changed");
45415
45416#ifdef FREECIV_JSON_CONNECTION
45417 field_addr.name = "year";
45418#endif /* FREECIV_JSON_CONNECTION */
45419 e = 0;
45420
45421 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45422
45423 if (e) {
45424 log_packet_detailed("'year' field error detected");
45425 }
45426 }
45427
45428 if (BV_ISSET(fields, 1)) {
45429 log_packet_detailed(" field 'fragments' has changed");
45430
45431#ifdef FREECIV_JSON_CONNECTION
45432 field_addr.name = "fragments";
45433#endif /* FREECIV_JSON_CONNECTION */
45434 e = 0;
45435
45436 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45437
45438 if (e) {
45439 log_packet_detailed("'fragments' field error detected");
45440 }
45441 }
45442
45443 if (BV_ISSET(fields, 2)) {
45444 log_packet_detailed(" field 'turn' has changed");
45445
45446#ifdef FREECIV_JSON_CONNECTION
45447 field_addr.name = "turn";
45448#endif /* FREECIV_JSON_CONNECTION */
45449 e = 0;
45450
45451 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45452
45453 if (e) {
45454 log_packet_detailed("'turn' field error detected");
45455 }
45456 }
45457
45458 *old = *real_packet;
45459
45460#else /* FREECIV_DELTA_PROTOCOL */
45461#ifdef FREECIV_JSON_CONNECTION
45462 field_addr.name = "year";
45463#endif /* FREECIV_JSON_CONNECTION */
45464 e = 0;
45465
45466 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45467
45468 if (e) {
45469 log_packet_detailed("'year' field error detected");
45470 }
45471
45472#ifdef FREECIV_JSON_CONNECTION
45473 field_addr.name = "fragments";
45474#endif /* FREECIV_JSON_CONNECTION */
45475 e = 0;
45476
45477 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45478
45479 if (e) {
45480 log_packet_detailed("'fragments' field error detected");
45481 }
45482
45483#ifdef FREECIV_JSON_CONNECTION
45484 field_addr.name = "turn";
45485#endif /* FREECIV_JSON_CONNECTION */
45486 e = 0;
45487
45488 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45489
45490 if (e) {
45491 log_packet_detailed("'turn' field error detected");
45492 }
45493#endif /* FREECIV_DELTA_PROTOCOL */
45494
45496}
45497
45498int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
45499{
45500 if (!pc->used) {
45501 log_error("WARNING: trying to send data to the closed connection %s",
45503 return -1;
45504 }
45505 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NEW_YEAR].packet != nullptr, -1,
45506 "Handler for PACKET_NEW_YEAR not installed");
45507 return pc->phs.handlers->send[PACKET_NEW_YEAR].packet(pc, packet);
45508}
45509
45510void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
45511{
45512 conn_list_iterate(dest, pconn) {
45513 send_packet_new_year(pconn, packet);
45515}
45516
45517static inline void init_packet_begin_turn(struct packet_begin_turn *packet)
45518{
45519 memset(packet, 0, sizeof(*packet));
45520}
45521
45522#define free_packet_begin_turn(_packet) (void) 0
45523#define destroy_packet_begin_turn free
45524
45526{
45527#define FREE_PACKET_STRUCT(_packet) free_packet_begin_turn(_packet)
45529
45530 log_packet_detailed("packet_begin_turn_100: got info about ()");
45531
45532 real_packet->__dummy = 0xff;
45533
45535#undef FREE_PACKET_STRUCT
45536}
45537
45539{
45541
45542 log_packet_detailed("packet_begin_turn_100: sending info about ()");
45543
45545}
45546
45548{
45549 if (!pc->used) {
45550 log_error("WARNING: trying to send data to the closed connection %s",
45552 return -1;
45553 }
45554 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet != nullptr, -1,
45555 "Handler for PACKET_BEGIN_TURN not installed");
45556 return pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet(pc);
45557}
45558
45560{
45561 conn_list_iterate(dest, pconn) {
45564}
45565
45566static inline void init_packet_end_turn(struct packet_end_turn *packet)
45567{
45568 memset(packet, 0, sizeof(*packet));
45569}
45570
45571#define free_packet_end_turn(_packet) (void) 0
45572#define destroy_packet_end_turn free
45573
45575{
45576#define FREE_PACKET_STRUCT(_packet) free_packet_end_turn(_packet)
45578
45579 log_packet_detailed("packet_end_turn_100: got info about ()");
45580
45581 real_packet->__dummy = 0xff;
45582
45584#undef FREE_PACKET_STRUCT
45585}
45586
45588{
45590
45591 log_packet_detailed("packet_end_turn_100: sending info about ()");
45592
45594}
45595
45597{
45598 if (!pc->used) {
45599 log_error("WARNING: trying to send data to the closed connection %s",
45601 return -1;
45602 }
45603 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_TURN].no_packet != nullptr, -1,
45604 "Handler for PACKET_END_TURN not installed");
45605 return pc->phs.handlers->send[PACKET_END_TURN].no_packet(pc);
45606}
45607
45609{
45610 conn_list_iterate(dest, pconn) {
45613}
45614
45615static inline void init_packet_freeze_client(struct packet_freeze_client *packet)
45616{
45617 memset(packet, 0, sizeof(*packet));
45618}
45619
45620#define free_packet_freeze_client(_packet) (void) 0
45621#define destroy_packet_freeze_client free
45622
45624{
45625#define FREE_PACKET_STRUCT(_packet) free_packet_freeze_client(_packet)
45627
45628 log_packet_detailed("packet_freeze_client_100: got info about ()");
45629
45630 real_packet->__dummy = 0xff;
45631
45633#undef FREE_PACKET_STRUCT
45634}
45635
45637{
45639
45640 log_packet_detailed("packet_freeze_client_100: sending info about ()");
45641
45643}
45644
45646{
45647 if (!pc->used) {
45648 log_error("WARNING: trying to send data to the closed connection %s",
45650 return -1;
45651 }
45652 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet != nullptr, -1,
45653 "Handler for PACKET_FREEZE_CLIENT not installed");
45654 return pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet(pc);
45655}
45656
45663
45664static inline void init_packet_thaw_client(struct packet_thaw_client *packet)
45665{
45666 memset(packet, 0, sizeof(*packet));
45667}
45668
45669#define free_packet_thaw_client(_packet) (void) 0
45670#define destroy_packet_thaw_client free
45671
45673{
45674#define FREE_PACKET_STRUCT(_packet) free_packet_thaw_client(_packet)
45676
45677 log_packet_detailed("packet_thaw_client_100: got info about ()");
45678
45679 real_packet->__dummy = 0xff;
45680
45682#undef FREE_PACKET_STRUCT
45683}
45684
45686{
45688
45689 log_packet_detailed("packet_thaw_client_100: sending info about ()");
45690
45692}
45693
45695{
45696 if (!pc->used) {
45697 log_error("WARNING: trying to send data to the closed connection %s",
45699 return -1;
45700 }
45701 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet != nullptr, -1,
45702 "Handler for PACKET_THAW_CLIENT not installed");
45703 return pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet(pc);
45704}
45705
45707{
45708 conn_list_iterate(dest, pconn) {
45711}
45712
45714{
45715 memset(packet, 0, sizeof(*packet));
45716}
45717
45718#define free_packet_spaceship_launch(_packet) (void) 0
45719#define destroy_packet_spaceship_launch free
45720
45722{
45723#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_launch(_packet)
45725
45726 log_packet_detailed("packet_spaceship_launch_100: got info about ()");
45727
45728 real_packet->__dummy = 0xff;
45729
45731#undef FREE_PACKET_STRUCT
45732}
45733
45735{
45737
45738 log_packet_detailed("packet_spaceship_launch_100: sending info about ()");
45739
45741}
45742
45744{
45745 if (!pc->used) {
45746 log_error("WARNING: trying to send data to the closed connection %s",
45748 return -1;
45749 }
45750 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet != nullptr, -1,
45751 "Handler for PACKET_SPACESHIP_LAUNCH not installed");
45752 return pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet(pc);
45753}
45754
45755static inline void init_packet_spaceship_place(struct packet_spaceship_place *packet)
45756{
45757 memset(packet, 0, sizeof(*packet));
45758}
45759
45760#define free_packet_spaceship_place(_packet) (void) 0
45761#define destroy_packet_spaceship_place free
45762
45763#ifdef FREECIV_DELTA_PROTOCOL
45764#define hash_packet_spaceship_place_100 hash_const
45765#define cmp_packet_spaceship_place_100 cmp_const
45767#endif /* FREECIV_DELTA_PROTOCOL */
45768
45770{
45771#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_place(_packet)
45773
45774#ifdef FREECIV_JSON_CONNECTION
45775 struct plocation field_addr;
45776 {
45777 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45780 }
45781#endif /* FREECIV_JSON_CONNECTION */
45782
45783 log_packet_detailed("packet_spaceship_place_100: got info about ()");
45784
45785#ifdef FREECIV_DELTA_PROTOCOL
45788 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_PLACE;
45789
45790 if (nullptr == *hash) {
45792 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45793 }
45794
45795 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45796 *real_packet = *old;
45797 } else {
45798 /* packet is already initialized empty */
45799 log_packet_detailed(" no old info");
45800 }
45801
45802#ifdef FREECIV_JSON_CONNECTION
45803 field_addr.name = "fields";
45804#endif /* FREECIV_JSON_CONNECTION */
45805 DIO_BV_GET(&din, &field_addr, fields);
45806
45807 if (BV_ISSET(fields, 0)) {
45808 log_packet_detailed(" got field 'type'");
45809
45810#ifdef FREECIV_JSON_CONNECTION
45811 field_addr.name = "type";
45812#endif /* FREECIV_JSON_CONNECTION */
45813
45814 {
45815 int readin;
45816
45817 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45819 }
45820 real_packet->type = readin;
45821 }
45822 }
45823
45824 if (BV_ISSET(fields, 1)) {
45825 log_packet_detailed(" got field 'num'");
45826
45827#ifdef FREECIV_JSON_CONNECTION
45828 field_addr.name = "num";
45829#endif /* FREECIV_JSON_CONNECTION */
45830
45831 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45833 }
45834 }
45835
45836 if (nullptr == old) {
45837 old = fc_malloc(sizeof(*old));
45839 *old = *real_packet;
45841 } else {
45842 *old = *real_packet;
45843 }
45844
45845#else /* FREECIV_DELTA_PROTOCOL */
45846#ifdef FREECIV_JSON_CONNECTION
45847 field_addr.name = "type";
45848#endif /* FREECIV_JSON_CONNECTION */
45849
45850 {
45851 int readin;
45852
45853 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45855 }
45856 real_packet->type = readin;
45857 }
45858
45859#ifdef FREECIV_JSON_CONNECTION
45860 field_addr.name = "num";
45861#endif /* FREECIV_JSON_CONNECTION */
45862
45863 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45865 }
45866#endif /* FREECIV_DELTA_PROTOCOL */
45867
45869#undef FREE_PACKET_STRUCT
45870}
45871
45873{
45874 const struct packet_spaceship_place *real_packet = packet;
45875 int e;
45877
45878 log_packet_detailed("packet_spaceship_place_100: sending info about ()");
45879
45880#ifdef FREECIV_DELTA_PROTOCOL
45883 bool differ;
45884 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_PLACE;
45885
45886 if (nullptr == *hash) {
45888 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45889 }
45890 BV_CLR_ALL(fields);
45891
45892 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45893 old = fc_malloc(sizeof(*old));
45894 /* temporary bitcopy just to insert correctly */
45895 *old = *real_packet;
45898 }
45899
45900 differ = (old->type != real_packet->type);
45901 if (differ) {
45902 BV_SET(fields, 0);
45903 }
45904
45905 differ = (old->num != real_packet->num);
45906 if (differ) {
45907 BV_SET(fields, 1);
45908 }
45909#endif /* FREECIV_DELTA_PROTOCOL */
45910
45911#ifdef FREECIV_JSON_CONNECTION
45912 struct plocation field_addr;
45913 {
45914 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45917 }
45918#endif /* FREECIV_JSON_CONNECTION */
45919
45920#ifdef FREECIV_DELTA_PROTOCOL
45921#ifdef FREECIV_JSON_CONNECTION
45922 field_addr.name = "fields";
45923#endif /* FREECIV_JSON_CONNECTION */
45924 e = 0;
45925 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45926 if (e) {
45927 log_packet_detailed("fields bitvector error detected");
45928 }
45929
45930 if (BV_ISSET(fields, 0)) {
45931 log_packet_detailed(" field 'type' has changed");
45932
45933#ifdef FREECIV_JSON_CONNECTION
45934 field_addr.name = "type";
45935#endif /* FREECIV_JSON_CONNECTION */
45936 e = 0;
45937
45938 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45939
45940 if (e) {
45941 log_packet_detailed("'type' field error detected");
45942 }
45943 }
45944
45945 if (BV_ISSET(fields, 1)) {
45946 log_packet_detailed(" field 'num' has changed");
45947
45948#ifdef FREECIV_JSON_CONNECTION
45949 field_addr.name = "num";
45950#endif /* FREECIV_JSON_CONNECTION */
45951 e = 0;
45952
45953 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
45954
45955 if (e) {
45956 log_packet_detailed("'num' field error detected");
45957 }
45958 }
45959
45960 *old = *real_packet;
45961
45962#else /* FREECIV_DELTA_PROTOCOL */
45963#ifdef FREECIV_JSON_CONNECTION
45964 field_addr.name = "type";
45965#endif /* FREECIV_JSON_CONNECTION */
45966 e = 0;
45967
45968 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45969
45970 if (e) {
45971 log_packet_detailed("'type' field error detected");
45972 }
45973
45974#ifdef FREECIV_JSON_CONNECTION
45975 field_addr.name = "num";
45976#endif /* FREECIV_JSON_CONNECTION */
45977 e = 0;
45978
45979 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
45980
45981 if (e) {
45982 log_packet_detailed("'num' field error detected");
45983 }
45984#endif /* FREECIV_DELTA_PROTOCOL */
45985
45987}
45988
45990{
45991 if (!pc->used) {
45992 log_error("WARNING: trying to send data to the closed connection %s",
45994 return -1;
45995 }
45996 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet != nullptr, -1,
45997 "Handler for PACKET_SPACESHIP_PLACE not installed");
45998 return pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet(pc, packet);
45999}
46000
46002{
46003 struct packet_spaceship_place packet, *real_packet = &packet;
46004
46006 real_packet->num = num;
46007
46009}
46010
46011static inline void init_packet_spaceship_info(struct packet_spaceship_info *packet)
46012{
46013 memset(packet, 0, sizeof(*packet));
46014}
46015
46016#define free_packet_spaceship_info(_packet) (void) 0
46017#define destroy_packet_spaceship_info free
46018
46019#ifdef FREECIV_DELTA_PROTOCOL
46021{
46022 const struct packet_spaceship_info *key = (const struct packet_spaceship_info *) vkey;
46023 genhash_val_t result = 0;
46024
46025 result += key->player_num;
46026
46027 result &= 0xFFFFFFFF;
46028 return result;
46029}
46030
46031static bool cmp_packet_spaceship_info_100(const void *vkey1, const void *vkey2)
46032{
46033 const struct packet_spaceship_info *old = (const struct packet_spaceship_info *) vkey1;
46034 const struct packet_spaceship_info *real_packet = (const struct packet_spaceship_info *) vkey2;
46035 bool differ;
46036
46037 differ = (old->player_num != real_packet->player_num);
46038
46039 return !differ;
46040}
46042#endif /* FREECIV_DELTA_PROTOCOL */
46043
46045{
46046#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_info(_packet)
46048
46049#ifdef FREECIV_JSON_CONNECTION
46050 struct plocation field_addr;
46051 {
46052 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46055 }
46056#endif /* FREECIV_JSON_CONNECTION */
46057
46058#ifdef FREECIV_JSON_CONNECTION
46059 field_addr.name = "player_num";
46060#endif /* FREECIV_JSON_CONNECTION */
46061
46062 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
46063 RECEIVE_PACKET_FIELD_ERROR(player_num);
46064 }
46065
46066 log_packet_detailed("packet_spaceship_info_100: got info about (%d)",
46067 real_packet->player_num);
46068
46069#ifdef FREECIV_DELTA_PROTOCOL
46071 struct packet_spaceship_info *old;
46072 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_INFO;
46073
46074 if (nullptr == *hash) {
46076 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46077 }
46078
46079 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46080 *real_packet = *old;
46081 } else {
46082 /* packet is already initialized empty */
46083 log_packet_detailed(" no old info");
46084 }
46085
46086#ifdef FREECIV_JSON_CONNECTION
46087 field_addr.name = "fields";
46088#endif /* FREECIV_JSON_CONNECTION */
46089 DIO_BV_GET(&din, &field_addr, fields);
46090
46091 if (BV_ISSET(fields, 0)) {
46092 log_packet_detailed(" got field 'sship_state'");
46093
46094#ifdef FREECIV_JSON_CONNECTION
46095 field_addr.name = "sship_state";
46096#endif /* FREECIV_JSON_CONNECTION */
46097
46098 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46099 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46100 }
46101 }
46102
46103 if (BV_ISSET(fields, 1)) {
46104 log_packet_detailed(" got field 'structurals'");
46105
46106#ifdef FREECIV_JSON_CONNECTION
46107 field_addr.name = "structurals";
46108#endif /* FREECIV_JSON_CONNECTION */
46109
46110 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46111 RECEIVE_PACKET_FIELD_ERROR(structurals);
46112 }
46113 }
46114
46115 if (BV_ISSET(fields, 2)) {
46116 log_packet_detailed(" got field 'components'");
46117
46118#ifdef FREECIV_JSON_CONNECTION
46119 field_addr.name = "components";
46120#endif /* FREECIV_JSON_CONNECTION */
46121
46122 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46123 RECEIVE_PACKET_FIELD_ERROR(components);
46124 }
46125 }
46126
46127 if (BV_ISSET(fields, 3)) {
46128 log_packet_detailed(" got field 'modules'");
46129
46130#ifdef FREECIV_JSON_CONNECTION
46131 field_addr.name = "modules";
46132#endif /* FREECIV_JSON_CONNECTION */
46133
46134 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46136 }
46137 }
46138
46139 if (BV_ISSET(fields, 4)) {
46140 log_packet_detailed(" got field 'fuel'");
46141
46142#ifdef FREECIV_JSON_CONNECTION
46143 field_addr.name = "fuel";
46144#endif /* FREECIV_JSON_CONNECTION */
46145
46146 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46148 }
46149 }
46150
46151 if (BV_ISSET(fields, 5)) {
46152 log_packet_detailed(" got field 'propulsion'");
46153
46154#ifdef FREECIV_JSON_CONNECTION
46155 field_addr.name = "propulsion";
46156#endif /* FREECIV_JSON_CONNECTION */
46157
46158 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46159 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46160 }
46161 }
46162
46163 if (BV_ISSET(fields, 6)) {
46164 log_packet_detailed(" got field 'habitation'");
46165
46166#ifdef FREECIV_JSON_CONNECTION
46167 field_addr.name = "habitation";
46168#endif /* FREECIV_JSON_CONNECTION */
46169
46170 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46171 RECEIVE_PACKET_FIELD_ERROR(habitation);
46172 }
46173 }
46174
46175 if (BV_ISSET(fields, 7)) {
46176 log_packet_detailed(" got field 'life_support'");
46177
46178#ifdef FREECIV_JSON_CONNECTION
46179 field_addr.name = "life_support";
46180#endif /* FREECIV_JSON_CONNECTION */
46181
46182 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46183 RECEIVE_PACKET_FIELD_ERROR(life_support);
46184 }
46185 }
46186
46187 if (BV_ISSET(fields, 8)) {
46188 log_packet_detailed(" got field 'solar_panels'");
46189
46190#ifdef FREECIV_JSON_CONNECTION
46191 field_addr.name = "solar_panels";
46192#endif /* FREECIV_JSON_CONNECTION */
46193
46194 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46195 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46196 }
46197 }
46198
46199 if (BV_ISSET(fields, 9)) {
46200 log_packet_detailed(" got field 'launch_year'");
46201
46202#ifdef FREECIV_JSON_CONNECTION
46203 field_addr.name = "launch_year";
46204#endif /* FREECIV_JSON_CONNECTION */
46205
46206 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46207 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46208 }
46209 }
46210
46211 if (BV_ISSET(fields, 10)) {
46212 log_packet_detailed(" got field 'population'");
46213
46214#ifdef FREECIV_JSON_CONNECTION
46215 field_addr.name = "population";
46216#endif /* FREECIV_JSON_CONNECTION */
46217
46218 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46219 RECEIVE_PACKET_FIELD_ERROR(population);
46220 }
46221 }
46222
46223 if (BV_ISSET(fields, 11)) {
46224 log_packet_detailed(" got field 'mass'");
46225
46226#ifdef FREECIV_JSON_CONNECTION
46227 field_addr.name = "mass";
46228#endif /* FREECIV_JSON_CONNECTION */
46229
46230 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46232 }
46233 }
46234
46235 if (BV_ISSET(fields, 12)) {
46236 log_packet_detailed(" got field 'structure'");
46237
46238#ifdef FREECIV_JSON_CONNECTION
46239 field_addr.name = "structure";
46240#endif /* FREECIV_JSON_CONNECTION */
46241
46242 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46243 RECEIVE_PACKET_FIELD_ERROR(structure);
46244 }
46245 }
46246
46247 if (BV_ISSET(fields, 13)) {
46248 log_packet_detailed(" got field 'support_rate'");
46249
46250#ifdef FREECIV_JSON_CONNECTION
46251 field_addr.name = "support_rate";
46252#endif /* FREECIV_JSON_CONNECTION */
46253
46254 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46255 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46256 }
46257 }
46258
46259 if (BV_ISSET(fields, 14)) {
46260 log_packet_detailed(" got field 'energy_rate'");
46261
46262#ifdef FREECIV_JSON_CONNECTION
46263 field_addr.name = "energy_rate";
46264#endif /* FREECIV_JSON_CONNECTION */
46265
46266 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46267 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46268 }
46269 }
46270
46271 if (BV_ISSET(fields, 15)) {
46272 log_packet_detailed(" got field 'success_rate'");
46273
46274#ifdef FREECIV_JSON_CONNECTION
46275 field_addr.name = "success_rate";
46276#endif /* FREECIV_JSON_CONNECTION */
46277
46278 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46279 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46280 }
46281 }
46282
46283 if (BV_ISSET(fields, 16)) {
46284 log_packet_detailed(" got field 'travel_time'");
46285
46286#ifdef FREECIV_JSON_CONNECTION
46287 field_addr.name = "travel_time";
46288#endif /* FREECIV_JSON_CONNECTION */
46289
46290 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46291 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46292 }
46293 }
46294
46295 if (nullptr == old) {
46296 old = fc_malloc(sizeof(*old));
46298 *old = *real_packet;
46300 } else {
46301 *old = *real_packet;
46302 }
46303
46304#else /* FREECIV_DELTA_PROTOCOL */
46305#ifdef FREECIV_JSON_CONNECTION
46306 field_addr.name = "sship_state";
46307#endif /* FREECIV_JSON_CONNECTION */
46308
46309 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46310 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46311 }
46312
46313#ifdef FREECIV_JSON_CONNECTION
46314 field_addr.name = "structurals";
46315#endif /* FREECIV_JSON_CONNECTION */
46316
46317 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46318 RECEIVE_PACKET_FIELD_ERROR(structurals);
46319 }
46320
46321#ifdef FREECIV_JSON_CONNECTION
46322 field_addr.name = "components";
46323#endif /* FREECIV_JSON_CONNECTION */
46324
46325 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46326 RECEIVE_PACKET_FIELD_ERROR(components);
46327 }
46328
46329#ifdef FREECIV_JSON_CONNECTION
46330 field_addr.name = "modules";
46331#endif /* FREECIV_JSON_CONNECTION */
46332
46333 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46335 }
46336
46337#ifdef FREECIV_JSON_CONNECTION
46338 field_addr.name = "fuel";
46339#endif /* FREECIV_JSON_CONNECTION */
46340
46341 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46343 }
46344
46345#ifdef FREECIV_JSON_CONNECTION
46346 field_addr.name = "propulsion";
46347#endif /* FREECIV_JSON_CONNECTION */
46348
46349 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46350 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46351 }
46352
46353#ifdef FREECIV_JSON_CONNECTION
46354 field_addr.name = "habitation";
46355#endif /* FREECIV_JSON_CONNECTION */
46356
46357 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46358 RECEIVE_PACKET_FIELD_ERROR(habitation);
46359 }
46360
46361#ifdef FREECIV_JSON_CONNECTION
46362 field_addr.name = "life_support";
46363#endif /* FREECIV_JSON_CONNECTION */
46364
46365 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46366 RECEIVE_PACKET_FIELD_ERROR(life_support);
46367 }
46368
46369#ifdef FREECIV_JSON_CONNECTION
46370 field_addr.name = "solar_panels";
46371#endif /* FREECIV_JSON_CONNECTION */
46372
46373 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46374 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46375 }
46376
46377#ifdef FREECIV_JSON_CONNECTION
46378 field_addr.name = "launch_year";
46379#endif /* FREECIV_JSON_CONNECTION */
46380
46381 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46382 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46383 }
46384
46385#ifdef FREECIV_JSON_CONNECTION
46386 field_addr.name = "population";
46387#endif /* FREECIV_JSON_CONNECTION */
46388
46389 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46390 RECEIVE_PACKET_FIELD_ERROR(population);
46391 }
46392
46393#ifdef FREECIV_JSON_CONNECTION
46394 field_addr.name = "mass";
46395#endif /* FREECIV_JSON_CONNECTION */
46396
46397 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46399 }
46400
46401#ifdef FREECIV_JSON_CONNECTION
46402 field_addr.name = "structure";
46403#endif /* FREECIV_JSON_CONNECTION */
46404
46405 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46406 RECEIVE_PACKET_FIELD_ERROR(structure);
46407 }
46408
46409#ifdef FREECIV_JSON_CONNECTION
46410 field_addr.name = "support_rate";
46411#endif /* FREECIV_JSON_CONNECTION */
46412
46413 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46414 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46415 }
46416
46417#ifdef FREECIV_JSON_CONNECTION
46418 field_addr.name = "energy_rate";
46419#endif /* FREECIV_JSON_CONNECTION */
46420
46421 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46422 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46423 }
46424
46425#ifdef FREECIV_JSON_CONNECTION
46426 field_addr.name = "success_rate";
46427#endif /* FREECIV_JSON_CONNECTION */
46428
46429 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46430 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46431 }
46432
46433#ifdef FREECIV_JSON_CONNECTION
46434 field_addr.name = "travel_time";
46435#endif /* FREECIV_JSON_CONNECTION */
46436
46437 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46438 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46439 }
46440#endif /* FREECIV_DELTA_PROTOCOL */
46441
46443#undef FREE_PACKET_STRUCT
46444}
46445
46447{
46448 const struct packet_spaceship_info *real_packet = packet;
46449 int e;
46451
46452 log_packet_detailed("packet_spaceship_info_100: sending info about (%d)",
46453 real_packet->player_num);
46454
46455#ifdef FREECIV_DELTA_PROTOCOL
46457 struct packet_spaceship_info *old;
46458 bool differ;
46459 int different = 0;
46460 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_INFO;
46461
46462 if (nullptr == *hash) {
46464 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46465 }
46466 BV_CLR_ALL(fields);
46467
46468 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
46469 old = fc_malloc(sizeof(*old));
46470 /* temporary bitcopy just to insert correctly */
46471 *old = *real_packet;
46474 different = 1; /* Force to send. */
46475 }
46476
46477 differ = (old->sship_state != real_packet->sship_state);
46478 if (differ) {
46479 different++;
46480 BV_SET(fields, 0);
46481 }
46482
46483 differ = (old->structurals != real_packet->structurals);
46484 if (differ) {
46485 different++;
46486 BV_SET(fields, 1);
46487 }
46488
46489 differ = (old->components != real_packet->components);
46490 if (differ) {
46491 different++;
46492 BV_SET(fields, 2);
46493 }
46494
46495 differ = (old->modules != real_packet->modules);
46496 if (differ) {
46497 different++;
46498 BV_SET(fields, 3);
46499 }
46500
46501 differ = (old->fuel != real_packet->fuel);
46502 if (differ) {
46503 different++;
46504 BV_SET(fields, 4);
46505 }
46506
46507 differ = (old->propulsion != real_packet->propulsion);
46508 if (differ) {
46509 different++;
46510 BV_SET(fields, 5);
46511 }
46512
46513 differ = (old->habitation != real_packet->habitation);
46514 if (differ) {
46515 different++;
46516 BV_SET(fields, 6);
46517 }
46518
46519 differ = (old->life_support != real_packet->life_support);
46520 if (differ) {
46521 different++;
46522 BV_SET(fields, 7);
46523 }
46524
46525 differ = (old->solar_panels != real_packet->solar_panels);
46526 if (differ) {
46527 different++;
46528 BV_SET(fields, 8);
46529 }
46530
46531 differ = (old->launch_year != real_packet->launch_year);
46532 if (differ) {
46533 different++;
46534 BV_SET(fields, 9);
46535 }
46536
46537 differ = (old->population != real_packet->population);
46538 if (differ) {
46539 different++;
46540 BV_SET(fields, 10);
46541 }
46542
46543 differ = (old->mass != real_packet->mass);
46544 if (differ) {
46545 different++;
46546 BV_SET(fields, 11);
46547 }
46548
46549 differ = !BV_ARE_EQUAL(old->structure, real_packet->structure);
46550 if (differ) {
46551 different++;
46552 BV_SET(fields, 12);
46553 }
46554
46555 differ = ((int) (old->support_rate * 10000) != (int) (real_packet->support_rate * 10000));
46556 if (differ) {
46557 different++;
46558 BV_SET(fields, 13);
46559 }
46560
46561 differ = ((int) (old->energy_rate * 10000) != (int) (real_packet->energy_rate * 10000));
46562 if (differ) {
46563 different++;
46564 BV_SET(fields, 14);
46565 }
46566
46567 differ = ((int) (old->success_rate * 10000) != (int) (real_packet->success_rate * 10000));
46568 if (differ) {
46569 different++;
46570 BV_SET(fields, 15);
46571 }
46572
46573 differ = ((int) (old->travel_time * 10000) != (int) (real_packet->travel_time * 10000));
46574 if (differ) {
46575 different++;
46576 BV_SET(fields, 16);
46577 }
46578
46579 if (different == 0) {
46580 log_packet_detailed(" no change -> discard");
46582 }
46583#endif /* FREECIV_DELTA_PROTOCOL */
46584
46585#ifdef FREECIV_JSON_CONNECTION
46586 struct plocation field_addr;
46587 {
46588 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46591 }
46592#endif /* FREECIV_JSON_CONNECTION */
46593
46594#ifdef FREECIV_JSON_CONNECTION
46595 field_addr.name = "player_num";
46596#endif /* FREECIV_JSON_CONNECTION */
46597 e = 0;
46598
46599 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
46600
46601 if (e) {
46602 log_packet_detailed("'player_num' field error detected");
46603 }
46604
46605#ifdef FREECIV_DELTA_PROTOCOL
46606#ifdef FREECIV_JSON_CONNECTION
46607 field_addr.name = "fields";
46608#endif /* FREECIV_JSON_CONNECTION */
46609 e = 0;
46610 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46611 if (e) {
46612 log_packet_detailed("fields bitvector error detected");
46613 }
46614
46615 if (BV_ISSET(fields, 0)) {
46616 log_packet_detailed(" field 'sship_state' has changed");
46617
46618#ifdef FREECIV_JSON_CONNECTION
46619 field_addr.name = "sship_state";
46620#endif /* FREECIV_JSON_CONNECTION */
46621 e = 0;
46622
46623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46624
46625 if (e) {
46626 log_packet_detailed("'sship_state' field error detected");
46627 }
46628 }
46629
46630 if (BV_ISSET(fields, 1)) {
46631 log_packet_detailed(" field 'structurals' has changed");
46632
46633#ifdef FREECIV_JSON_CONNECTION
46634 field_addr.name = "structurals";
46635#endif /* FREECIV_JSON_CONNECTION */
46636 e = 0;
46637
46638 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46639
46640 if (e) {
46641 log_packet_detailed("'structurals' field error detected");
46642 }
46643 }
46644
46645 if (BV_ISSET(fields, 2)) {
46646 log_packet_detailed(" field 'components' has changed");
46647
46648#ifdef FREECIV_JSON_CONNECTION
46649 field_addr.name = "components";
46650#endif /* FREECIV_JSON_CONNECTION */
46651 e = 0;
46652
46653 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46654
46655 if (e) {
46656 log_packet_detailed("'components' field error detected");
46657 }
46658 }
46659
46660 if (BV_ISSET(fields, 3)) {
46661 log_packet_detailed(" field 'modules' has changed");
46662
46663#ifdef FREECIV_JSON_CONNECTION
46664 field_addr.name = "modules";
46665#endif /* FREECIV_JSON_CONNECTION */
46666 e = 0;
46667
46668 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46669
46670 if (e) {
46671 log_packet_detailed("'modules' field error detected");
46672 }
46673 }
46674
46675 if (BV_ISSET(fields, 4)) {
46676 log_packet_detailed(" field 'fuel' has changed");
46677
46678#ifdef FREECIV_JSON_CONNECTION
46679 field_addr.name = "fuel";
46680#endif /* FREECIV_JSON_CONNECTION */
46681 e = 0;
46682
46683 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46684
46685 if (e) {
46686 log_packet_detailed("'fuel' field error detected");
46687 }
46688 }
46689
46690 if (BV_ISSET(fields, 5)) {
46691 log_packet_detailed(" field 'propulsion' has changed");
46692
46693#ifdef FREECIV_JSON_CONNECTION
46694 field_addr.name = "propulsion";
46695#endif /* FREECIV_JSON_CONNECTION */
46696 e = 0;
46697
46698 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
46699
46700 if (e) {
46701 log_packet_detailed("'propulsion' field error detected");
46702 }
46703 }
46704
46705 if (BV_ISSET(fields, 6)) {
46706 log_packet_detailed(" field 'habitation' has changed");
46707
46708#ifdef FREECIV_JSON_CONNECTION
46709 field_addr.name = "habitation";
46710#endif /* FREECIV_JSON_CONNECTION */
46711 e = 0;
46712
46713 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
46714
46715 if (e) {
46716 log_packet_detailed("'habitation' field error detected");
46717 }
46718 }
46719
46720 if (BV_ISSET(fields, 7)) {
46721 log_packet_detailed(" field 'life_support' has changed");
46722
46723#ifdef FREECIV_JSON_CONNECTION
46724 field_addr.name = "life_support";
46725#endif /* FREECIV_JSON_CONNECTION */
46726 e = 0;
46727
46728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
46729
46730 if (e) {
46731 log_packet_detailed("'life_support' field error detected");
46732 }
46733 }
46734
46735 if (BV_ISSET(fields, 8)) {
46736 log_packet_detailed(" field 'solar_panels' has changed");
46737
46738#ifdef FREECIV_JSON_CONNECTION
46739 field_addr.name = "solar_panels";
46740#endif /* FREECIV_JSON_CONNECTION */
46741 e = 0;
46742
46743 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
46744
46745 if (e) {
46746 log_packet_detailed("'solar_panels' field error detected");
46747 }
46748 }
46749
46750 if (BV_ISSET(fields, 9)) {
46751 log_packet_detailed(" field 'launch_year' has changed");
46752
46753#ifdef FREECIV_JSON_CONNECTION
46754 field_addr.name = "launch_year";
46755#endif /* FREECIV_JSON_CONNECTION */
46756 e = 0;
46757
46758 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46759
46760 if (e) {
46761 log_packet_detailed("'launch_year' field error detected");
46762 }
46763 }
46764
46765 if (BV_ISSET(fields, 10)) {
46766 log_packet_detailed(" field 'population' has changed");
46767
46768#ifdef FREECIV_JSON_CONNECTION
46769 field_addr.name = "population";
46770#endif /* FREECIV_JSON_CONNECTION */
46771 e = 0;
46772
46773 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46774
46775 if (e) {
46776 log_packet_detailed("'population' field error detected");
46777 }
46778 }
46779
46780 if (BV_ISSET(fields, 11)) {
46781 log_packet_detailed(" field 'mass' has changed");
46782
46783#ifdef FREECIV_JSON_CONNECTION
46784 field_addr.name = "mass";
46785#endif /* FREECIV_JSON_CONNECTION */
46786 e = 0;
46787
46788 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
46789
46790 if (e) {
46791 log_packet_detailed("'mass' field error detected");
46792 }
46793 }
46794
46795 if (BV_ISSET(fields, 12)) {
46796 log_packet_detailed(" field 'structure' has changed");
46797
46798#ifdef FREECIV_JSON_CONNECTION
46799 field_addr.name = "structure";
46800#endif /* FREECIV_JSON_CONNECTION */
46801 e = 0;
46802
46803 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
46804
46805 if (e) {
46806 log_packet_detailed("'structure' field error detected");
46807 }
46808 }
46809
46810 if (BV_ISSET(fields, 13)) {
46811 log_packet_detailed(" field 'support_rate' has changed");
46812
46813#ifdef FREECIV_JSON_CONNECTION
46814 field_addr.name = "support_rate";
46815#endif /* FREECIV_JSON_CONNECTION */
46816 e = 0;
46817
46818 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
46819
46820 if (e) {
46821 log_packet_detailed("'support_rate' field error detected");
46822 }
46823 }
46824
46825 if (BV_ISSET(fields, 14)) {
46826 log_packet_detailed(" field 'energy_rate' has changed");
46827
46828#ifdef FREECIV_JSON_CONNECTION
46829 field_addr.name = "energy_rate";
46830#endif /* FREECIV_JSON_CONNECTION */
46831 e = 0;
46832
46833 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
46834
46835 if (e) {
46836 log_packet_detailed("'energy_rate' field error detected");
46837 }
46838 }
46839
46840 if (BV_ISSET(fields, 15)) {
46841 log_packet_detailed(" field 'success_rate' has changed");
46842
46843#ifdef FREECIV_JSON_CONNECTION
46844 field_addr.name = "success_rate";
46845#endif /* FREECIV_JSON_CONNECTION */
46846 e = 0;
46847
46848 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
46849
46850 if (e) {
46851 log_packet_detailed("'success_rate' field error detected");
46852 }
46853 }
46854
46855 if (BV_ISSET(fields, 16)) {
46856 log_packet_detailed(" field 'travel_time' has changed");
46857
46858#ifdef FREECIV_JSON_CONNECTION
46859 field_addr.name = "travel_time";
46860#endif /* FREECIV_JSON_CONNECTION */
46861 e = 0;
46862
46863 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
46864
46865 if (e) {
46866 log_packet_detailed("'travel_time' field error detected");
46867 }
46868 }
46869
46870 *old = *real_packet;
46871
46872#else /* FREECIV_DELTA_PROTOCOL */
46873#ifdef FREECIV_JSON_CONNECTION
46874 field_addr.name = "sship_state";
46875#endif /* FREECIV_JSON_CONNECTION */
46876 e = 0;
46877
46878 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46879
46880 if (e) {
46881 log_packet_detailed("'sship_state' field error detected");
46882 }
46883
46884#ifdef FREECIV_JSON_CONNECTION
46885 field_addr.name = "structurals";
46886#endif /* FREECIV_JSON_CONNECTION */
46887 e = 0;
46888
46889 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46890
46891 if (e) {
46892 log_packet_detailed("'structurals' field error detected");
46893 }
46894
46895#ifdef FREECIV_JSON_CONNECTION
46896 field_addr.name = "components";
46897#endif /* FREECIV_JSON_CONNECTION */
46898 e = 0;
46899
46900 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46901
46902 if (e) {
46903 log_packet_detailed("'components' field error detected");
46904 }
46905
46906#ifdef FREECIV_JSON_CONNECTION
46907 field_addr.name = "modules";
46908#endif /* FREECIV_JSON_CONNECTION */
46909 e = 0;
46910
46911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46912
46913 if (e) {
46914 log_packet_detailed("'modules' field error detected");
46915 }
46916
46917#ifdef FREECIV_JSON_CONNECTION
46918 field_addr.name = "fuel";
46919#endif /* FREECIV_JSON_CONNECTION */
46920 e = 0;
46921
46922 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46923
46924 if (e) {
46925 log_packet_detailed("'fuel' field error detected");
46926 }
46927
46928#ifdef FREECIV_JSON_CONNECTION
46929 field_addr.name = "propulsion";
46930#endif /* FREECIV_JSON_CONNECTION */
46931 e = 0;
46932
46933 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
46934
46935 if (e) {
46936 log_packet_detailed("'propulsion' field error detected");
46937 }
46938
46939#ifdef FREECIV_JSON_CONNECTION
46940 field_addr.name = "habitation";
46941#endif /* FREECIV_JSON_CONNECTION */
46942 e = 0;
46943
46944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
46945
46946 if (e) {
46947 log_packet_detailed("'habitation' field error detected");
46948 }
46949
46950#ifdef FREECIV_JSON_CONNECTION
46951 field_addr.name = "life_support";
46952#endif /* FREECIV_JSON_CONNECTION */
46953 e = 0;
46954
46955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
46956
46957 if (e) {
46958 log_packet_detailed("'life_support' field error detected");
46959 }
46960
46961#ifdef FREECIV_JSON_CONNECTION
46962 field_addr.name = "solar_panels";
46963#endif /* FREECIV_JSON_CONNECTION */
46964 e = 0;
46965
46966 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
46967
46968 if (e) {
46969 log_packet_detailed("'solar_panels' field error detected");
46970 }
46971
46972#ifdef FREECIV_JSON_CONNECTION
46973 field_addr.name = "launch_year";
46974#endif /* FREECIV_JSON_CONNECTION */
46975 e = 0;
46976
46977 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46978
46979 if (e) {
46980 log_packet_detailed("'launch_year' field error detected");
46981 }
46982
46983#ifdef FREECIV_JSON_CONNECTION
46984 field_addr.name = "population";
46985#endif /* FREECIV_JSON_CONNECTION */
46986 e = 0;
46987
46988 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46989
46990 if (e) {
46991 log_packet_detailed("'population' field error detected");
46992 }
46993
46994#ifdef FREECIV_JSON_CONNECTION
46995 field_addr.name = "mass";
46996#endif /* FREECIV_JSON_CONNECTION */
46997 e = 0;
46998
46999 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
47000
47001 if (e) {
47002 log_packet_detailed("'mass' field error detected");
47003 }
47004
47005#ifdef FREECIV_JSON_CONNECTION
47006 field_addr.name = "structure";
47007#endif /* FREECIV_JSON_CONNECTION */
47008 e = 0;
47009
47010 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
47011
47012 if (e) {
47013 log_packet_detailed("'structure' field error detected");
47014 }
47015
47016#ifdef FREECIV_JSON_CONNECTION
47017 field_addr.name = "support_rate";
47018#endif /* FREECIV_JSON_CONNECTION */
47019 e = 0;
47020
47021 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
47022
47023 if (e) {
47024 log_packet_detailed("'support_rate' field error detected");
47025 }
47026
47027#ifdef FREECIV_JSON_CONNECTION
47028 field_addr.name = "energy_rate";
47029#endif /* FREECIV_JSON_CONNECTION */
47030 e = 0;
47031
47032 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
47033
47034 if (e) {
47035 log_packet_detailed("'energy_rate' field error detected");
47036 }
47037
47038#ifdef FREECIV_JSON_CONNECTION
47039 field_addr.name = "success_rate";
47040#endif /* FREECIV_JSON_CONNECTION */
47041 e = 0;
47042
47043 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
47044
47045 if (e) {
47046 log_packet_detailed("'success_rate' field error detected");
47047 }
47048
47049#ifdef FREECIV_JSON_CONNECTION
47050 field_addr.name = "travel_time";
47051#endif /* FREECIV_JSON_CONNECTION */
47052 e = 0;
47053
47054 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
47055
47056 if (e) {
47057 log_packet_detailed("'travel_time' field error detected");
47058 }
47059#endif /* FREECIV_DELTA_PROTOCOL */
47060
47062}
47063
47065{
47066 if (!pc->used) {
47067 log_error("WARNING: trying to send data to the closed connection %s",
47069 return -1;
47070 }
47071 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet != nullptr, -1,
47072 "Handler for PACKET_SPACESHIP_INFO not installed");
47073 return pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet(pc, packet);
47074}
47075
47076void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
47077{
47078 conn_list_iterate(dest, pconn) {
47081}
47082
47083static inline void init_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47084{
47085 memset(packet, 0, sizeof(*packet));
47086
47088 packet->helptext = strvec_new();
47089}
47090
47091static inline void free_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47092{
47093 if (packet->helptext) {
47094 strvec_destroy(packet->helptext);
47095 packet->helptext = nullptr;
47096 }
47098}
47099
47100static inline void destroy_packet_ruleset_unit(void *packet)
47101{
47103 free(packet);
47104}
47105
47106#ifdef FREECIV_DELTA_PROTOCOL
47107#define hash_packet_ruleset_unit_100 hash_const
47108#define cmp_packet_ruleset_unit_100 cmp_const
47110#endif /* FREECIV_DELTA_PROTOCOL */
47111
47113{
47114#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit(_packet)
47116
47117#ifdef FREECIV_JSON_CONNECTION
47118 struct plocation field_addr;
47119 {
47120 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
47123 }
47124#endif /* FREECIV_JSON_CONNECTION */
47125
47126 log_packet_detailed("packet_ruleset_unit_100: got info about ()");
47127
47128#ifdef FREECIV_DELTA_PROTOCOL
47130 struct packet_ruleset_unit *old;
47131 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT;
47132
47133 if (nullptr == *hash) {
47135 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
47136 }
47137
47138 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
47139 real_packet->id = old->id;
47140 sz_strlcpy(real_packet->name, old->name);
47141 sz_strlcpy(real_packet->rule_name, old->rule_name);
47142 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
47143 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
47144 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
47145 sz_strlcpy(real_packet->sound_move, old->sound_move);
47146 sz_strlcpy(real_packet->sound_move_alt, old->sound_move_alt);
47147 sz_strlcpy(real_packet->sound_fight, old->sound_fight);
47148 sz_strlcpy(real_packet->sound_fight_alt, old->sound_fight_alt);
47149 real_packet->unit_class_id = old->unit_class_id;
47150 real_packet->build_cost = old->build_cost;
47151 real_packet->pop_cost = old->pop_cost;
47152 real_packet->attack_strength = old->attack_strength;
47153 real_packet->defense_strength = old->defense_strength;
47154 real_packet->move_rate = old->move_rate;
47155 requirement_vector_copy(&real_packet->build_reqs, &old->build_reqs);
47156 real_packet->vision_radius_sq = old->vision_radius_sq;
47157 real_packet->transport_capacity = old->transport_capacity;
47158 real_packet->hp = old->hp;
47159 real_packet->firepower = old->firepower;
47160 real_packet->obsoleted_by = old->obsoleted_by;
47161 real_packet->converted_to = old->converted_to;
47162 real_packet->convert_time = old->convert_time;
47163 real_packet->fuel = old->fuel;
47164 real_packet->happy_cost = old->happy_cost;
47165 {
47166 int i;
47167
47168 for (i = 0; i < O_LAST; i++) {
47169 real_packet->upkeep[i] = old->upkeep[i];
47170 }
47171 }
47172 real_packet->paratroopers_range = old->paratroopers_range;
47173 real_packet->veteran_levels = old->veteran_levels;
47174 {
47175 int i;
47176
47177 for (i = 0; i < old->veteran_levels; i++) {
47178 sz_strlcpy(real_packet->veteran_name[i], old->veteran_name[i]);
47179 }
47180 }
47181 {
47182 int i;
47183
47184 for (i = 0; i < old->veteran_levels; i++) {
47185 real_packet->power_fact[i] = old->power_fact[i];
47186 }
47187 }
47188 {
47189 int i;
47190
47191 for (i = 0; i < old->veteran_levels; i++) {
47192 real_packet->move_bonus[i] = old->move_bonus[i];
47193 }
47194 }
47195 {
47196 int i;
47197
47198 for (i = 0; i < old->veteran_levels; i++) {
47199 real_packet->base_raise_chance[i] = old->base_raise_chance[i];
47200 }
47201 }
47202 {
47203 int i;
47204
47205 for (i = 0; i < old->veteran_levels; i++) {
47206 real_packet->work_raise_chance[i] = old->work_raise_chance[i];
47207 }
47208 }
47209 real_packet->bombard_rate = old->bombard_rate;
47210 real_packet->city_size = old->city_size;
47211 real_packet->city_slots = old->city_slots;
47212 real_packet->tp_defense = old->tp_defense;
47213 real_packet->cargo = old->cargo;
47214 real_packet->targets = old->targets;
47215 real_packet->embarks = old->embarks;
47216 real_packet->disembarks = old->disembarks;
47217 real_packet->vlayer = old->vlayer;
47218 if (old->helptext) {
47219 strvec_copy(real_packet->helptext, old->helptext);
47220 } else {
47221 strvec_clear(real_packet->helptext);
47222 }
47223 real_packet->flags = old->flags;
47224 real_packet->roles = old->roles;
47225 real_packet->worker = old->worker;
47226 } else {
47227 /* packet is already initialized empty */
47228 log_packet_detailed(" no old info");
47229 }
47230
47231#ifdef FREECIV_JSON_CONNECTION
47232 field_addr.name = "fields";
47233#endif /* FREECIV_JSON_CONNECTION */
47234 DIO_BV_GET(&din, &field_addr, fields);
47235
47236 if (BV_ISSET(fields, 0)) {
47237 log_packet_detailed(" got field 'id'");
47238
47239#ifdef FREECIV_JSON_CONNECTION
47240 field_addr.name = "id";
47241#endif /* FREECIV_JSON_CONNECTION */
47242
47243 {
47244 int readin;
47245
47246 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
47248 }
47249 real_packet->id = readin;
47250 }
47251 }
47252
47253 if (BV_ISSET(fields, 1)) {
47254 log_packet_detailed(" got field 'name'");
47255
47256#ifdef FREECIV_JSON_CONNECTION
47257 field_addr.name = "name";
47258#endif /* FREECIV_JSON_CONNECTION */
47259
47260 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
47262 }
47263 }
47264
47265 if (BV_ISSET(fields, 2)) {
47266 log_packet_detailed(" got field 'rule_name'");
47267
47268#ifdef FREECIV_JSON_CONNECTION
47269 field_addr.name = "rule_name";
47270#endif /* FREECIV_JSON_CONNECTION */
47271
47272 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
47273 RECEIVE_PACKET_FIELD_ERROR(rule_name);
47274 }
47275 }
47276
47277 if (BV_ISSET(fields, 3)) {
47278 log_packet_detailed(" got field 'graphic_str'");
47279
47280#ifdef FREECIV_JSON_CONNECTION
47281 field_addr.name = "graphic_str";
47282#endif /* FREECIV_JSON_CONNECTION */
47283
47284 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
47285 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
47286 }
47287 }
47288
47289 if (BV_ISSET(fields, 4)) {
47290 log_packet_detailed(" got field 'graphic_alt'");
47291
47292#ifdef FREECIV_JSON_CONNECTION
47293 field_addr.name = "graphic_alt";
47294#endif /* FREECIV_JSON_CONNECTION */
47295
47296 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
47297 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
47298 }
47299 }
47300
47301 if (BV_ISSET(fields, 5)) {
47302 log_packet_detailed(" got field 'graphic_alt2'");
47303
47304#ifdef FREECIV_JSON_CONNECTION
47305 field_addr.name = "graphic_alt2";
47306#endif /* FREECIV_JSON_CONNECTION */
47307
47308 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
47309 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
47310 }
47311 }
47312
47313 if (BV_ISSET(fields, 6)) {
47314 log_packet_detailed(" got field 'sound_move'");
47315
47316#ifdef FREECIV_JSON_CONNECTION
47317 field_addr.name = "sound_move";
47318#endif /* FREECIV_JSON_CONNECTION */
47319
47320 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
47321 RECEIVE_PACKET_FIELD_ERROR(sound_move);
47322 }
47323 }
47324
47325 if (BV_ISSET(fields, 7)) {
47326 log_packet_detailed(" got field 'sound_move_alt'");
47327
47328#ifdef FREECIV_JSON_CONNECTION
47329 field_addr.name = "sound_move_alt";
47330#endif /* FREECIV_JSON_CONNECTION */
47331
47332 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
47333 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
47334 }
47335 }
47336
47337 if (BV_ISSET(fields, 8)) {
47338 log_packet_detailed(" got field 'sound_fight'");
47339
47340#ifdef FREECIV_JSON_CONNECTION
47341 field_addr.name = "sound_fight";
47342#endif /* FREECIV_JSON_CONNECTION */
47343
47344 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
47345 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
47346 }
47347 }
47348
47349 if (BV_ISSET(fields, 9)) {
47350 log_packet_detailed(" got field 'sound_fight_alt'");
47351
47352#ifdef FREECIV_JSON_CONNECTION
47353 field_addr.name = "sound_fight_alt";
47354#endif /* FREECIV_JSON_CONNECTION */
47355
47356 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
47357 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
47358 }
47359 }
47360
47361 if (BV_ISSET(fields, 10)) {
47362 log_packet_detailed(" got field 'unit_class_id'");
47363
47364#ifdef FREECIV_JSON_CONNECTION
47365 field_addr.name = "unit_class_id";
47366#endif /* FREECIV_JSON_CONNECTION */
47367
47368 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
47369 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
47370 }
47371 }
47372
47373 if (BV_ISSET(fields, 11)) {
47374 log_packet_detailed(" got field 'build_cost'");
47375
47376#ifdef FREECIV_JSON_CONNECTION
47377 field_addr.name = "build_cost";
47378#endif /* FREECIV_JSON_CONNECTION */
47379
47380 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
47381 RECEIVE_PACKET_FIELD_ERROR(build_cost);
47382 }
47383 }
47384
47385 if (BV_ISSET(fields, 12)) {
47386 log_packet_detailed(" got field 'pop_cost'");
47387
47388#ifdef FREECIV_JSON_CONNECTION
47389 field_addr.name = "pop_cost";
47390#endif /* FREECIV_JSON_CONNECTION */
47391
47392 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
47394 }
47395 }
47396
47397 if (BV_ISSET(fields, 13)) {
47398 log_packet_detailed(" got field 'attack_strength'");
47399
47400#ifdef FREECIV_JSON_CONNECTION
47401 field_addr.name = "attack_strength";
47402#endif /* FREECIV_JSON_CONNECTION */
47403
47404 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
47405 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
47406 }
47407 }
47408
47409 if (BV_ISSET(fields, 14)) {
47410 log_packet_detailed(" got field 'defense_strength'");
47411
47412#ifdef FREECIV_JSON_CONNECTION
47413 field_addr.name = "defense_strength";
47414#endif /* FREECIV_JSON_CONNECTION */
47415
47416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
47417 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
47418 }
47419 }
47420
47421 if (BV_ISSET(fields, 15)) {
47422 log_packet_detailed(" got field 'move_rate'");
47423
47424#ifdef FREECIV_JSON_CONNECTION
47425 field_addr.name = "move_rate";
47426#endif /* FREECIV_JSON_CONNECTION */
47427
47428 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
47429 RECEIVE_PACKET_FIELD_ERROR(move_rate);
47430 }
47431 }
47432
47433 if (BV_ISSET(fields, 16)) {
47434 log_packet_detailed(" got field 'build_reqs'");
47435
47436#ifdef FREECIV_JSON_CONNECTION
47437 field_addr.name = "build_reqs";
47438#endif /* FREECIV_JSON_CONNECTION */
47439
47440 {
47441 int i;
47442
47443 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
47444 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47445 }
47447
47448#ifdef FREECIV_JSON_CONNECTION
47449 /* Enter array. */
47450 field_addr.sub_location = plocation_elem_new(0);
47451#endif /* FREECIV_JSON_CONNECTION */
47452
47453 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
47454#ifdef FREECIV_JSON_CONNECTION
47455 /* Next array element */
47456 field_addr.sub_location->number = i;
47457#endif /* FREECIV_JSON_CONNECTION */
47458
47459 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
47460 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47461 }
47462 }
47463
47464#ifdef FREECIV_JSON_CONNECTION
47465 /* Exit array. */
47466 FC_FREE(field_addr.sub_location);
47467#endif /* FREECIV_JSON_CONNECTION */
47468 }
47469 }
47470
47471 if (BV_ISSET(fields, 17)) {
47472 log_packet_detailed(" got field 'vision_radius_sq'");
47473
47474#ifdef FREECIV_JSON_CONNECTION
47475 field_addr.name = "vision_radius_sq";
47476#endif /* FREECIV_JSON_CONNECTION */
47477
47478 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
47479 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
47480 }
47481 }
47482
47483 if (BV_ISSET(fields, 18)) {
47484 log_packet_detailed(" got field 'transport_capacity'");
47485
47486#ifdef FREECIV_JSON_CONNECTION
47487 field_addr.name = "transport_capacity";
47488#endif /* FREECIV_JSON_CONNECTION */
47489
47490 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
47491 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
47492 }
47493 }
47494
47495 if (BV_ISSET(fields, 19)) {
47496 log_packet_detailed(" got field 'hp'");
47497
47498#ifdef FREECIV_JSON_CONNECTION
47499 field_addr.name = "hp";
47500#endif /* FREECIV_JSON_CONNECTION */
47501
47502 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
47504 }
47505 }
47506
47507 if (BV_ISSET(fields, 20)) {
47508 log_packet_detailed(" got field 'firepower'");
47509
47510#ifdef FREECIV_JSON_CONNECTION
47511 field_addr.name = "firepower";
47512#endif /* FREECIV_JSON_CONNECTION */
47513
47514 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
47515 RECEIVE_PACKET_FIELD_ERROR(firepower);
47516 }
47517 }
47518
47519 if (BV_ISSET(fields, 21)) {
47520 log_packet_detailed(" got field 'obsoleted_by'");
47521
47522#ifdef FREECIV_JSON_CONNECTION
47523 field_addr.name = "obsoleted_by";
47524#endif /* FREECIV_JSON_CONNECTION */
47525
47526 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
47527 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
47528 }
47529 }
47530
47531 if (BV_ISSET(fields, 22)) {
47532 log_packet_detailed(" got field 'converted_to'");
47533
47534#ifdef FREECIV_JSON_CONNECTION
47535 field_addr.name = "converted_to";
47536#endif /* FREECIV_JSON_CONNECTION */
47537
47538 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
47539 RECEIVE_PACKET_FIELD_ERROR(converted_to);
47540 }
47541 }
47542
47543 if (BV_ISSET(fields, 23)) {
47544 log_packet_detailed(" got field 'convert_time'");
47545
47546#ifdef FREECIV_JSON_CONNECTION
47547 field_addr.name = "convert_time";
47548#endif /* FREECIV_JSON_CONNECTION */
47549
47550 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
47551 RECEIVE_PACKET_FIELD_ERROR(convert_time);
47552 }
47553 }
47554
47555 if (BV_ISSET(fields, 24)) {
47556 log_packet_detailed(" got field 'fuel'");
47557
47558#ifdef FREECIV_JSON_CONNECTION
47559 field_addr.name = "fuel";
47560#endif /* FREECIV_JSON_CONNECTION */
47561
47562 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
47564 }
47565 }
47566
47567 if (BV_ISSET(fields, 25)) {
47568 log_packet_detailed(" got field 'happy_cost'");
47569
47570#ifdef FREECIV_JSON_CONNECTION
47571 field_addr.name = "happy_cost";
47572#endif /* FREECIV_JSON_CONNECTION */
47573
47574 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
47575 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
47576 }
47577 }
47578
47579 if (BV_ISSET(fields, 26)) {
47580 log_packet_detailed(" got field 'upkeep'");
47581
47582#ifdef FREECIV_JSON_CONNECTION
47583 field_addr.name = "upkeep";
47584#endif /* FREECIV_JSON_CONNECTION */
47585
47586 {
47587 int i;
47588
47589
47590#ifdef FREECIV_JSON_CONNECTION
47591 /* Enter array. */
47592 field_addr.sub_location = plocation_elem_new(0);
47593#endif /* FREECIV_JSON_CONNECTION */
47594
47595 for (i = 0; i < O_LAST; i++) {
47596#ifdef FREECIV_JSON_CONNECTION
47597 /* Next array element */
47598 field_addr.sub_location->number = i;
47599#endif /* FREECIV_JSON_CONNECTION */
47600
47601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
47603 }
47604 }
47605
47606#ifdef FREECIV_JSON_CONNECTION
47607 /* Exit array. */
47608 FC_FREE(field_addr.sub_location);
47609#endif /* FREECIV_JSON_CONNECTION */
47610 }
47611 }
47612
47613 if (BV_ISSET(fields, 27)) {
47614 log_packet_detailed(" got field 'paratroopers_range'");
47615
47616#ifdef FREECIV_JSON_CONNECTION
47617 field_addr.name = "paratroopers_range";
47618#endif /* FREECIV_JSON_CONNECTION */
47619
47620 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
47621 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
47622 }
47623 }
47624
47625 if (BV_ISSET(fields, 28)) {
47626 log_packet_detailed(" got field 'veteran_levels'");
47627
47628#ifdef FREECIV_JSON_CONNECTION
47629 field_addr.name = "veteran_levels";
47630#endif /* FREECIV_JSON_CONNECTION */
47631
47632 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
47633 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
47634 }
47635 }
47636
47637 if (BV_ISSET(fields, 29)) {
47638 log_packet_detailed(" got field 'veteran_name'");
47639
47640#ifdef FREECIV_JSON_CONNECTION
47641 field_addr.name = "veteran_name";
47642#endif /* FREECIV_JSON_CONNECTION */
47643
47644 {
47645 int i;
47646
47647 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47648 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
47649 }
47650
47651#ifdef FREECIV_JSON_CONNECTION
47652 /* Enter array. */
47653 field_addr.sub_location = plocation_elem_new(0);
47654#endif /* FREECIV_JSON_CONNECTION */
47655
47656 for (i = 0; i < real_packet->veteran_levels; i++) {
47657#ifdef FREECIV_JSON_CONNECTION
47658 /* Next array element */
47659 field_addr.sub_location->number = i;
47660#endif /* FREECIV_JSON_CONNECTION */
47661
47662 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
47663 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
47664 }
47665 }
47666
47667#ifdef FREECIV_JSON_CONNECTION
47668 /* Exit array. */
47669 FC_FREE(field_addr.sub_location);
47670#endif /* FREECIV_JSON_CONNECTION */
47671 }
47672 }
47673
47674 if (BV_ISSET(fields, 30)) {
47675 log_packet_detailed(" got field 'power_fact'");
47676
47677#ifdef FREECIV_JSON_CONNECTION
47678 field_addr.name = "power_fact";
47679#endif /* FREECIV_JSON_CONNECTION */
47680
47681 {
47682 int i;
47683
47684 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47685 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
47686 }
47687
47688#ifdef FREECIV_JSON_CONNECTION
47689 /* Enter array. */
47690 field_addr.sub_location = plocation_elem_new(0);
47691#endif /* FREECIV_JSON_CONNECTION */
47692
47693 for (i = 0; i < real_packet->veteran_levels; i++) {
47694#ifdef FREECIV_JSON_CONNECTION
47695 /* Next array element */
47696 field_addr.sub_location->number = i;
47697#endif /* FREECIV_JSON_CONNECTION */
47698
47699 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
47700 RECEIVE_PACKET_FIELD_ERROR(power_fact);
47701 }
47702 }
47703
47704#ifdef FREECIV_JSON_CONNECTION
47705 /* Exit array. */
47706 FC_FREE(field_addr.sub_location);
47707#endif /* FREECIV_JSON_CONNECTION */
47708 }
47709 }
47710
47711 if (BV_ISSET(fields, 31)) {
47712 log_packet_detailed(" got field 'move_bonus'");
47713
47714#ifdef FREECIV_JSON_CONNECTION
47715 field_addr.name = "move_bonus";
47716#endif /* FREECIV_JSON_CONNECTION */
47717
47718 {
47719 int i;
47720
47721 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47722 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
47723 }
47724
47725#ifdef FREECIV_JSON_CONNECTION
47726 /* Enter array. */
47727 field_addr.sub_location = plocation_elem_new(0);
47728#endif /* FREECIV_JSON_CONNECTION */
47729
47730 for (i = 0; i < real_packet->veteran_levels; i++) {
47731#ifdef FREECIV_JSON_CONNECTION
47732 /* Next array element */
47733 field_addr.sub_location->number = i;
47734#endif /* FREECIV_JSON_CONNECTION */
47735
47736 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
47737 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
47738 }
47739 }
47740
47741#ifdef FREECIV_JSON_CONNECTION
47742 /* Exit array. */
47743 FC_FREE(field_addr.sub_location);
47744#endif /* FREECIV_JSON_CONNECTION */
47745 }
47746 }
47747
47748 if (BV_ISSET(fields, 32)) {
47749 log_packet_detailed(" got field 'base_raise_chance'");
47750
47751#ifdef FREECIV_JSON_CONNECTION
47752 field_addr.name = "base_raise_chance";
47753#endif /* FREECIV_JSON_CONNECTION */
47754
47755 {
47756 int i;
47757
47758 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47759 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
47760 }
47761
47762#ifdef FREECIV_JSON_CONNECTION
47763 /* Enter array. */
47764 field_addr.sub_location = plocation_elem_new(0);
47765#endif /* FREECIV_JSON_CONNECTION */
47766
47767 for (i = 0; i < real_packet->veteran_levels; i++) {
47768#ifdef FREECIV_JSON_CONNECTION
47769 /* Next array element */
47770 field_addr.sub_location->number = i;
47771#endif /* FREECIV_JSON_CONNECTION */
47772
47773 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
47774 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
47775 }
47776 }
47777
47778#ifdef FREECIV_JSON_CONNECTION
47779 /* Exit array. */
47780 FC_FREE(field_addr.sub_location);
47781#endif /* FREECIV_JSON_CONNECTION */
47782 }
47783 }
47784
47785 if (BV_ISSET(fields, 33)) {
47786 log_packet_detailed(" got field 'work_raise_chance'");
47787
47788#ifdef FREECIV_JSON_CONNECTION
47789 field_addr.name = "work_raise_chance";
47790#endif /* FREECIV_JSON_CONNECTION */
47791
47792 {
47793 int i;
47794
47795 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47796 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
47797 }
47798
47799#ifdef FREECIV_JSON_CONNECTION
47800 /* Enter array. */
47801 field_addr.sub_location = plocation_elem_new(0);
47802#endif /* FREECIV_JSON_CONNECTION */
47803
47804 for (i = 0; i < real_packet->veteran_levels; i++) {
47805#ifdef FREECIV_JSON_CONNECTION
47806 /* Next array element */
47807 field_addr.sub_location->number = i;
47808#endif /* FREECIV_JSON_CONNECTION */
47809
47810 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
47811 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
47812 }
47813 }
47814
47815#ifdef FREECIV_JSON_CONNECTION
47816 /* Exit array. */
47817 FC_FREE(field_addr.sub_location);
47818#endif /* FREECIV_JSON_CONNECTION */
47819 }
47820 }
47821
47822 if (BV_ISSET(fields, 34)) {
47823 log_packet_detailed(" got field 'bombard_rate'");
47824
47825#ifdef FREECIV_JSON_CONNECTION
47826 field_addr.name = "bombard_rate";
47827#endif /* FREECIV_JSON_CONNECTION */
47828
47829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
47830 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
47831 }
47832 }
47833
47834 if (BV_ISSET(fields, 35)) {
47835 log_packet_detailed(" got field 'city_size'");
47836
47837#ifdef FREECIV_JSON_CONNECTION
47838 field_addr.name = "city_size";
47839#endif /* FREECIV_JSON_CONNECTION */
47840
47841 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
47842 RECEIVE_PACKET_FIELD_ERROR(city_size);
47843 }
47844 }
47845
47846 if (BV_ISSET(fields, 36)) {
47847 log_packet_detailed(" got field 'city_slots'");
47848
47849#ifdef FREECIV_JSON_CONNECTION
47850 field_addr.name = "city_slots";
47851#endif /* FREECIV_JSON_CONNECTION */
47852
47853 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
47854 RECEIVE_PACKET_FIELD_ERROR(city_slots);
47855 }
47856 }
47857
47858 if (BV_ISSET(fields, 37)) {
47859 log_packet_detailed(" got field 'tp_defense'");
47860
47861#ifdef FREECIV_JSON_CONNECTION
47862 field_addr.name = "tp_defense";
47863#endif /* FREECIV_JSON_CONNECTION */
47864
47865 {
47866 int readin;
47867
47868 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47869 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
47870 }
47871 real_packet->tp_defense = readin;
47872 }
47873 }
47874
47875 if (BV_ISSET(fields, 38)) {
47876 log_packet_detailed(" got field 'cargo'");
47877
47878#ifdef FREECIV_JSON_CONNECTION
47879 field_addr.name = "cargo";
47880#endif /* FREECIV_JSON_CONNECTION */
47881
47882 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
47884 }
47885 }
47886
47887 if (BV_ISSET(fields, 39)) {
47888 log_packet_detailed(" got field 'targets'");
47889
47890#ifdef FREECIV_JSON_CONNECTION
47891 field_addr.name = "targets";
47892#endif /* FREECIV_JSON_CONNECTION */
47893
47894 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
47896 }
47897 }
47898
47899 if (BV_ISSET(fields, 40)) {
47900 log_packet_detailed(" got field 'embarks'");
47901
47902#ifdef FREECIV_JSON_CONNECTION
47903 field_addr.name = "embarks";
47904#endif /* FREECIV_JSON_CONNECTION */
47905
47906 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
47908 }
47909 }
47910
47911 if (BV_ISSET(fields, 41)) {
47912 log_packet_detailed(" got field 'disembarks'");
47913
47914#ifdef FREECIV_JSON_CONNECTION
47915 field_addr.name = "disembarks";
47916#endif /* FREECIV_JSON_CONNECTION */
47917
47918 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
47919 RECEIVE_PACKET_FIELD_ERROR(disembarks);
47920 }
47921 }
47922
47923 if (BV_ISSET(fields, 42)) {
47924 log_packet_detailed(" got field 'vlayer'");
47925
47926#ifdef FREECIV_JSON_CONNECTION
47927 field_addr.name = "vlayer";
47928#endif /* FREECIV_JSON_CONNECTION */
47929
47930 {
47931 int readin;
47932
47933 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47935 }
47936 real_packet->vlayer = readin;
47937 }
47938 }
47939
47940 if (BV_ISSET(fields, 43)) {
47941 log_packet_detailed(" got field 'helptext'");
47942
47943#ifdef FREECIV_JSON_CONNECTION
47944 field_addr.name = "helptext";
47945#endif /* FREECIV_JSON_CONNECTION */
47946
47947 {
47948 int i;
47949
47950 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
47952 }
47953 strvec_reserve(real_packet->helptext, i);
47954
47955#ifdef FREECIV_JSON_CONNECTION
47956 /* Enter array. */
47957 field_addr.sub_location = plocation_elem_new(0);
47958#endif /* FREECIV_JSON_CONNECTION */
47959
47960 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
47961#ifdef FREECIV_JSON_CONNECTION
47962 /* Next array element */
47963 field_addr.sub_location->number = i;
47964#endif /* FREECIV_JSON_CONNECTION */
47965
47966 {
47967 char readin[MAX_LEN_PACKET];
47968
47969 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
47970 || !strvec_set(real_packet->helptext, i, readin)) {
47972 }
47973 }
47974 }
47975
47976#ifdef FREECIV_JSON_CONNECTION
47977 /* Exit array. */
47978 FC_FREE(field_addr.sub_location);
47979#endif /* FREECIV_JSON_CONNECTION */
47980 }
47981 }
47982
47983 if (BV_ISSET(fields, 44)) {
47984 log_packet_detailed(" got field 'flags'");
47985
47986#ifdef FREECIV_JSON_CONNECTION
47987 field_addr.name = "flags";
47988#endif /* FREECIV_JSON_CONNECTION */
47989
47990 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
47992 }
47993 }
47994
47995 if (BV_ISSET(fields, 45)) {
47996 log_packet_detailed(" got field 'roles'");
47997
47998#ifdef FREECIV_JSON_CONNECTION
47999 field_addr.name = "roles";
48000#endif /* FREECIV_JSON_CONNECTION */
48001
48002 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48004 }
48005 }
48006
48007 real_packet->worker = BV_ISSET(fields, 46);
48008
48009 if (nullptr == old) {
48010 old = fc_malloc(sizeof(*old));
48012 old->id = real_packet->id;
48013 sz_strlcpy(old->name, real_packet->name);
48014 sz_strlcpy(old->rule_name, real_packet->rule_name);
48015 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48016 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48017 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48018 sz_strlcpy(old->sound_move, real_packet->sound_move);
48019 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48020 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48021 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48022 old->unit_class_id = real_packet->unit_class_id;
48023 old->build_cost = real_packet->build_cost;
48024 old->pop_cost = real_packet->pop_cost;
48025 old->attack_strength = real_packet->attack_strength;
48026 old->defense_strength = real_packet->defense_strength;
48027 old->move_rate = real_packet->move_rate;
48028 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48029 old->vision_radius_sq = real_packet->vision_radius_sq;
48030 old->transport_capacity = real_packet->transport_capacity;
48031 old->hp = real_packet->hp;
48032 old->firepower = real_packet->firepower;
48033 old->obsoleted_by = real_packet->obsoleted_by;
48034 old->converted_to = real_packet->converted_to;
48035 old->convert_time = real_packet->convert_time;
48036 old->fuel = real_packet->fuel;
48037 old->happy_cost = real_packet->happy_cost;
48038 {
48039 int i;
48040
48041 for (i = 0; i < O_LAST; i++) {
48042 old->upkeep[i] = real_packet->upkeep[i];
48043 }
48044 }
48045 old->paratroopers_range = real_packet->paratroopers_range;
48046 old->veteran_levels = real_packet->veteran_levels;
48047 {
48048 int i;
48049
48050 for (i = 0; i < real_packet->veteran_levels; i++) {
48051 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48052 }
48053 }
48054 {
48055 int i;
48056
48057 for (i = 0; i < real_packet->veteran_levels; i++) {
48058 old->power_fact[i] = real_packet->power_fact[i];
48059 }
48060 }
48061 {
48062 int i;
48063
48064 for (i = 0; i < real_packet->veteran_levels; i++) {
48065 old->move_bonus[i] = real_packet->move_bonus[i];
48066 }
48067 }
48068 {
48069 int i;
48070
48071 for (i = 0; i < real_packet->veteran_levels; i++) {
48072 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48073 }
48074 }
48075 {
48076 int i;
48077
48078 for (i = 0; i < real_packet->veteran_levels; i++) {
48079 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48080 }
48081 }
48082 old->bombard_rate = real_packet->bombard_rate;
48083 old->city_size = real_packet->city_size;
48084 old->city_slots = real_packet->city_slots;
48085 old->tp_defense = real_packet->tp_defense;
48086 old->cargo = real_packet->cargo;
48087 old->targets = real_packet->targets;
48088 old->embarks = real_packet->embarks;
48089 old->disembarks = real_packet->disembarks;
48090 old->vlayer = real_packet->vlayer;
48091 if (real_packet->helptext) {
48092 strvec_copy(old->helptext, real_packet->helptext);
48093 } else {
48094 strvec_clear(old->helptext);
48095 }
48096 old->flags = real_packet->flags;
48097 old->roles = real_packet->roles;
48098 old->worker = real_packet->worker;
48100 } else {
48101 old->id = real_packet->id;
48102 sz_strlcpy(old->name, real_packet->name);
48103 sz_strlcpy(old->rule_name, real_packet->rule_name);
48104 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48105 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48106 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48107 sz_strlcpy(old->sound_move, real_packet->sound_move);
48108 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48109 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48110 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48111 old->unit_class_id = real_packet->unit_class_id;
48112 old->build_cost = real_packet->build_cost;
48113 old->pop_cost = real_packet->pop_cost;
48114 old->attack_strength = real_packet->attack_strength;
48115 old->defense_strength = real_packet->defense_strength;
48116 old->move_rate = real_packet->move_rate;
48117 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48118 old->vision_radius_sq = real_packet->vision_radius_sq;
48119 old->transport_capacity = real_packet->transport_capacity;
48120 old->hp = real_packet->hp;
48121 old->firepower = real_packet->firepower;
48122 old->obsoleted_by = real_packet->obsoleted_by;
48123 old->converted_to = real_packet->converted_to;
48124 old->convert_time = real_packet->convert_time;
48125 old->fuel = real_packet->fuel;
48126 old->happy_cost = real_packet->happy_cost;
48127 {
48128 int i;
48129
48130 for (i = 0; i < O_LAST; i++) {
48131 old->upkeep[i] = real_packet->upkeep[i];
48132 }
48133 }
48134 old->paratroopers_range = real_packet->paratroopers_range;
48135 old->veteran_levels = real_packet->veteran_levels;
48136 {
48137 int i;
48138
48139 for (i = 0; i < real_packet->veteran_levels; i++) {
48140 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48141 }
48142 }
48143 {
48144 int i;
48145
48146 for (i = 0; i < real_packet->veteran_levels; i++) {
48147 old->power_fact[i] = real_packet->power_fact[i];
48148 }
48149 }
48150 {
48151 int i;
48152
48153 for (i = 0; i < real_packet->veteran_levels; i++) {
48154 old->move_bonus[i] = real_packet->move_bonus[i];
48155 }
48156 }
48157 {
48158 int i;
48159
48160 for (i = 0; i < real_packet->veteran_levels; i++) {
48161 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48162 }
48163 }
48164 {
48165 int i;
48166
48167 for (i = 0; i < real_packet->veteran_levels; i++) {
48168 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48169 }
48170 }
48171 old->bombard_rate = real_packet->bombard_rate;
48172 old->city_size = real_packet->city_size;
48173 old->city_slots = real_packet->city_slots;
48174 old->tp_defense = real_packet->tp_defense;
48175 old->cargo = real_packet->cargo;
48176 old->targets = real_packet->targets;
48177 old->embarks = real_packet->embarks;
48178 old->disembarks = real_packet->disembarks;
48179 old->vlayer = real_packet->vlayer;
48180 if (real_packet->helptext) {
48181 strvec_copy(old->helptext, real_packet->helptext);
48182 } else {
48183 strvec_clear(old->helptext);
48184 }
48185 old->flags = real_packet->flags;
48186 old->roles = real_packet->roles;
48187 old->worker = real_packet->worker;
48188 }
48189
48190#else /* FREECIV_DELTA_PROTOCOL */
48191#ifdef FREECIV_JSON_CONNECTION
48192 field_addr.name = "id";
48193#endif /* FREECIV_JSON_CONNECTION */
48194
48195 {
48196 int readin;
48197
48198 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
48200 }
48201 real_packet->id = readin;
48202 }
48203
48204#ifdef FREECIV_JSON_CONNECTION
48205 field_addr.name = "name";
48206#endif /* FREECIV_JSON_CONNECTION */
48207
48208 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
48210 }
48211
48212#ifdef FREECIV_JSON_CONNECTION
48213 field_addr.name = "rule_name";
48214#endif /* FREECIV_JSON_CONNECTION */
48215
48216 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
48217 RECEIVE_PACKET_FIELD_ERROR(rule_name);
48218 }
48219
48220#ifdef FREECIV_JSON_CONNECTION
48221 field_addr.name = "graphic_str";
48222#endif /* FREECIV_JSON_CONNECTION */
48223
48224 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
48225 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
48226 }
48227
48228#ifdef FREECIV_JSON_CONNECTION
48229 field_addr.name = "graphic_alt";
48230#endif /* FREECIV_JSON_CONNECTION */
48231
48232 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
48233 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
48234 }
48235
48236#ifdef FREECIV_JSON_CONNECTION
48237 field_addr.name = "graphic_alt2";
48238#endif /* FREECIV_JSON_CONNECTION */
48239
48240 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
48241 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
48242 }
48243
48244#ifdef FREECIV_JSON_CONNECTION
48245 field_addr.name = "sound_move";
48246#endif /* FREECIV_JSON_CONNECTION */
48247
48248 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
48249 RECEIVE_PACKET_FIELD_ERROR(sound_move);
48250 }
48251
48252#ifdef FREECIV_JSON_CONNECTION
48253 field_addr.name = "sound_move_alt";
48254#endif /* FREECIV_JSON_CONNECTION */
48255
48256 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
48257 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
48258 }
48259
48260#ifdef FREECIV_JSON_CONNECTION
48261 field_addr.name = "sound_fight";
48262#endif /* FREECIV_JSON_CONNECTION */
48263
48264 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
48265 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
48266 }
48267
48268#ifdef FREECIV_JSON_CONNECTION
48269 field_addr.name = "sound_fight_alt";
48270#endif /* FREECIV_JSON_CONNECTION */
48271
48272 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
48273 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
48274 }
48275
48276#ifdef FREECIV_JSON_CONNECTION
48277 field_addr.name = "unit_class_id";
48278#endif /* FREECIV_JSON_CONNECTION */
48279
48280 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
48281 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
48282 }
48283
48284#ifdef FREECIV_JSON_CONNECTION
48285 field_addr.name = "build_cost";
48286#endif /* FREECIV_JSON_CONNECTION */
48287
48288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
48289 RECEIVE_PACKET_FIELD_ERROR(build_cost);
48290 }
48291
48292#ifdef FREECIV_JSON_CONNECTION
48293 field_addr.name = "pop_cost";
48294#endif /* FREECIV_JSON_CONNECTION */
48295
48296 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
48298 }
48299
48300#ifdef FREECIV_JSON_CONNECTION
48301 field_addr.name = "attack_strength";
48302#endif /* FREECIV_JSON_CONNECTION */
48303
48304 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
48305 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
48306 }
48307
48308#ifdef FREECIV_JSON_CONNECTION
48309 field_addr.name = "defense_strength";
48310#endif /* FREECIV_JSON_CONNECTION */
48311
48312 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
48313 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
48314 }
48315
48316#ifdef FREECIV_JSON_CONNECTION
48317 field_addr.name = "move_rate";
48318#endif /* FREECIV_JSON_CONNECTION */
48319
48320 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
48321 RECEIVE_PACKET_FIELD_ERROR(move_rate);
48322 }
48323
48324#ifdef FREECIV_JSON_CONNECTION
48325 field_addr.name = "build_reqs";
48326#endif /* FREECIV_JSON_CONNECTION */
48327
48328 {
48329 int i;
48330
48331 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48332 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48333 }
48335
48336#ifdef FREECIV_JSON_CONNECTION
48337 /* Enter array. */
48338 field_addr.sub_location = plocation_elem_new(0);
48339#endif /* FREECIV_JSON_CONNECTION */
48340
48341 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
48342#ifdef FREECIV_JSON_CONNECTION
48343 /* Next array element */
48344 field_addr.sub_location->number = i;
48345#endif /* FREECIV_JSON_CONNECTION */
48346
48347 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
48348 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48349 }
48350 }
48351
48352#ifdef FREECIV_JSON_CONNECTION
48353 /* Exit array. */
48354 FC_FREE(field_addr.sub_location);
48355#endif /* FREECIV_JSON_CONNECTION */
48356 }
48357
48358#ifdef FREECIV_JSON_CONNECTION
48359 field_addr.name = "vision_radius_sq";
48360#endif /* FREECIV_JSON_CONNECTION */
48361
48362 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
48363 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
48364 }
48365
48366#ifdef FREECIV_JSON_CONNECTION
48367 field_addr.name = "transport_capacity";
48368#endif /* FREECIV_JSON_CONNECTION */
48369
48370 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
48371 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
48372 }
48373
48374#ifdef FREECIV_JSON_CONNECTION
48375 field_addr.name = "hp";
48376#endif /* FREECIV_JSON_CONNECTION */
48377
48378 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
48380 }
48381
48382#ifdef FREECIV_JSON_CONNECTION
48383 field_addr.name = "firepower";
48384#endif /* FREECIV_JSON_CONNECTION */
48385
48386 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
48387 RECEIVE_PACKET_FIELD_ERROR(firepower);
48388 }
48389
48390#ifdef FREECIV_JSON_CONNECTION
48391 field_addr.name = "obsoleted_by";
48392#endif /* FREECIV_JSON_CONNECTION */
48393
48394 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
48395 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
48396 }
48397
48398#ifdef FREECIV_JSON_CONNECTION
48399 field_addr.name = "converted_to";
48400#endif /* FREECIV_JSON_CONNECTION */
48401
48402 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
48403 RECEIVE_PACKET_FIELD_ERROR(converted_to);
48404 }
48405
48406#ifdef FREECIV_JSON_CONNECTION
48407 field_addr.name = "convert_time";
48408#endif /* FREECIV_JSON_CONNECTION */
48409
48410 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
48411 RECEIVE_PACKET_FIELD_ERROR(convert_time);
48412 }
48413
48414#ifdef FREECIV_JSON_CONNECTION
48415 field_addr.name = "fuel";
48416#endif /* FREECIV_JSON_CONNECTION */
48417
48418 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
48420 }
48421
48422#ifdef FREECIV_JSON_CONNECTION
48423 field_addr.name = "happy_cost";
48424#endif /* FREECIV_JSON_CONNECTION */
48425
48426 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
48427 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
48428 }
48429
48430#ifdef FREECIV_JSON_CONNECTION
48431 field_addr.name = "upkeep";
48432#endif /* FREECIV_JSON_CONNECTION */
48433
48434 {
48435 int i;
48436
48437
48438#ifdef FREECIV_JSON_CONNECTION
48439 /* Enter array. */
48440 field_addr.sub_location = plocation_elem_new(0);
48441#endif /* FREECIV_JSON_CONNECTION */
48442
48443 for (i = 0; i < O_LAST; i++) {
48444#ifdef FREECIV_JSON_CONNECTION
48445 /* Next array element */
48446 field_addr.sub_location->number = i;
48447#endif /* FREECIV_JSON_CONNECTION */
48448
48449 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
48451 }
48452 }
48453
48454#ifdef FREECIV_JSON_CONNECTION
48455 /* Exit array. */
48456 FC_FREE(field_addr.sub_location);
48457#endif /* FREECIV_JSON_CONNECTION */
48458 }
48459
48460#ifdef FREECIV_JSON_CONNECTION
48461 field_addr.name = "paratroopers_range";
48462#endif /* FREECIV_JSON_CONNECTION */
48463
48464 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
48465 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
48466 }
48467
48468#ifdef FREECIV_JSON_CONNECTION
48469 field_addr.name = "veteran_levels";
48470#endif /* FREECIV_JSON_CONNECTION */
48471
48472 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
48473 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
48474 }
48475
48476#ifdef FREECIV_JSON_CONNECTION
48477 field_addr.name = "veteran_name";
48478#endif /* FREECIV_JSON_CONNECTION */
48479
48480 {
48481 int i;
48482
48483 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48484 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
48485 }
48486
48487#ifdef FREECIV_JSON_CONNECTION
48488 /* Enter array. */
48489 field_addr.sub_location = plocation_elem_new(0);
48490#endif /* FREECIV_JSON_CONNECTION */
48491
48492 for (i = 0; i < real_packet->veteran_levels; i++) {
48493#ifdef FREECIV_JSON_CONNECTION
48494 /* Next array element */
48495 field_addr.sub_location->number = i;
48496#endif /* FREECIV_JSON_CONNECTION */
48497
48498 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
48499 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
48500 }
48501 }
48502
48503#ifdef FREECIV_JSON_CONNECTION
48504 /* Exit array. */
48505 FC_FREE(field_addr.sub_location);
48506#endif /* FREECIV_JSON_CONNECTION */
48507 }
48508
48509#ifdef FREECIV_JSON_CONNECTION
48510 field_addr.name = "power_fact";
48511#endif /* FREECIV_JSON_CONNECTION */
48512
48513 {
48514 int i;
48515
48516 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48517 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
48518 }
48519
48520#ifdef FREECIV_JSON_CONNECTION
48521 /* Enter array. */
48522 field_addr.sub_location = plocation_elem_new(0);
48523#endif /* FREECIV_JSON_CONNECTION */
48524
48525 for (i = 0; i < real_packet->veteran_levels; i++) {
48526#ifdef FREECIV_JSON_CONNECTION
48527 /* Next array element */
48528 field_addr.sub_location->number = i;
48529#endif /* FREECIV_JSON_CONNECTION */
48530
48531 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
48532 RECEIVE_PACKET_FIELD_ERROR(power_fact);
48533 }
48534 }
48535
48536#ifdef FREECIV_JSON_CONNECTION
48537 /* Exit array. */
48538 FC_FREE(field_addr.sub_location);
48539#endif /* FREECIV_JSON_CONNECTION */
48540 }
48541
48542#ifdef FREECIV_JSON_CONNECTION
48543 field_addr.name = "move_bonus";
48544#endif /* FREECIV_JSON_CONNECTION */
48545
48546 {
48547 int i;
48548
48549 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48550 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
48551 }
48552
48553#ifdef FREECIV_JSON_CONNECTION
48554 /* Enter array. */
48555 field_addr.sub_location = plocation_elem_new(0);
48556#endif /* FREECIV_JSON_CONNECTION */
48557
48558 for (i = 0; i < real_packet->veteran_levels; i++) {
48559#ifdef FREECIV_JSON_CONNECTION
48560 /* Next array element */
48561 field_addr.sub_location->number = i;
48562#endif /* FREECIV_JSON_CONNECTION */
48563
48564 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
48565 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
48566 }
48567 }
48568
48569#ifdef FREECIV_JSON_CONNECTION
48570 /* Exit array. */
48571 FC_FREE(field_addr.sub_location);
48572#endif /* FREECIV_JSON_CONNECTION */
48573 }
48574
48575#ifdef FREECIV_JSON_CONNECTION
48576 field_addr.name = "base_raise_chance";
48577#endif /* FREECIV_JSON_CONNECTION */
48578
48579 {
48580 int i;
48581
48582 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48583 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
48584 }
48585
48586#ifdef FREECIV_JSON_CONNECTION
48587 /* Enter array. */
48588 field_addr.sub_location = plocation_elem_new(0);
48589#endif /* FREECIV_JSON_CONNECTION */
48590
48591 for (i = 0; i < real_packet->veteran_levels; i++) {
48592#ifdef FREECIV_JSON_CONNECTION
48593 /* Next array element */
48594 field_addr.sub_location->number = i;
48595#endif /* FREECIV_JSON_CONNECTION */
48596
48597 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
48598 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
48599 }
48600 }
48601
48602#ifdef FREECIV_JSON_CONNECTION
48603 /* Exit array. */
48604 FC_FREE(field_addr.sub_location);
48605#endif /* FREECIV_JSON_CONNECTION */
48606 }
48607
48608#ifdef FREECIV_JSON_CONNECTION
48609 field_addr.name = "work_raise_chance";
48610#endif /* FREECIV_JSON_CONNECTION */
48611
48612 {
48613 int i;
48614
48615 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48616 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
48617 }
48618
48619#ifdef FREECIV_JSON_CONNECTION
48620 /* Enter array. */
48621 field_addr.sub_location = plocation_elem_new(0);
48622#endif /* FREECIV_JSON_CONNECTION */
48623
48624 for (i = 0; i < real_packet->veteran_levels; i++) {
48625#ifdef FREECIV_JSON_CONNECTION
48626 /* Next array element */
48627 field_addr.sub_location->number = i;
48628#endif /* FREECIV_JSON_CONNECTION */
48629
48630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
48631 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
48632 }
48633 }
48634
48635#ifdef FREECIV_JSON_CONNECTION
48636 /* Exit array. */
48637 FC_FREE(field_addr.sub_location);
48638#endif /* FREECIV_JSON_CONNECTION */
48639 }
48640
48641#ifdef FREECIV_JSON_CONNECTION
48642 field_addr.name = "bombard_rate";
48643#endif /* FREECIV_JSON_CONNECTION */
48644
48645 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
48646 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
48647 }
48648
48649#ifdef FREECIV_JSON_CONNECTION
48650 field_addr.name = "city_size";
48651#endif /* FREECIV_JSON_CONNECTION */
48652
48653 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
48654 RECEIVE_PACKET_FIELD_ERROR(city_size);
48655 }
48656
48657#ifdef FREECIV_JSON_CONNECTION
48658 field_addr.name = "city_slots";
48659#endif /* FREECIV_JSON_CONNECTION */
48660
48661 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
48662 RECEIVE_PACKET_FIELD_ERROR(city_slots);
48663 }
48664
48665#ifdef FREECIV_JSON_CONNECTION
48666 field_addr.name = "tp_defense";
48667#endif /* FREECIV_JSON_CONNECTION */
48668
48669 {
48670 int readin;
48671
48672 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48673 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
48674 }
48675 real_packet->tp_defense = readin;
48676 }
48677
48678#ifdef FREECIV_JSON_CONNECTION
48679 field_addr.name = "cargo";
48680#endif /* FREECIV_JSON_CONNECTION */
48681
48682 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
48684 }
48685
48686#ifdef FREECIV_JSON_CONNECTION
48687 field_addr.name = "targets";
48688#endif /* FREECIV_JSON_CONNECTION */
48689
48690 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
48692 }
48693
48694#ifdef FREECIV_JSON_CONNECTION
48695 field_addr.name = "embarks";
48696#endif /* FREECIV_JSON_CONNECTION */
48697
48698 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
48700 }
48701
48702#ifdef FREECIV_JSON_CONNECTION
48703 field_addr.name = "disembarks";
48704#endif /* FREECIV_JSON_CONNECTION */
48705
48706 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
48707 RECEIVE_PACKET_FIELD_ERROR(disembarks);
48708 }
48709
48710#ifdef FREECIV_JSON_CONNECTION
48711 field_addr.name = "vlayer";
48712#endif /* FREECIV_JSON_CONNECTION */
48713
48714 {
48715 int readin;
48716
48717 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48719 }
48720 real_packet->vlayer = readin;
48721 }
48722
48723#ifdef FREECIV_JSON_CONNECTION
48724 field_addr.name = "helptext";
48725#endif /* FREECIV_JSON_CONNECTION */
48726
48727 {
48728 int i;
48729
48730 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48732 }
48733 strvec_reserve(real_packet->helptext, i);
48734
48735#ifdef FREECIV_JSON_CONNECTION
48736 /* Enter array. */
48737 field_addr.sub_location = plocation_elem_new(0);
48738#endif /* FREECIV_JSON_CONNECTION */
48739
48740 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
48741#ifdef FREECIV_JSON_CONNECTION
48742 /* Next array element */
48743 field_addr.sub_location->number = i;
48744#endif /* FREECIV_JSON_CONNECTION */
48745
48746 {
48747 char readin[MAX_LEN_PACKET];
48748
48749 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
48750 || !strvec_set(real_packet->helptext, i, readin)) {
48752 }
48753 }
48754 }
48755
48756#ifdef FREECIV_JSON_CONNECTION
48757 /* Exit array. */
48758 FC_FREE(field_addr.sub_location);
48759#endif /* FREECIV_JSON_CONNECTION */
48760 }
48761
48762#ifdef FREECIV_JSON_CONNECTION
48763 field_addr.name = "flags";
48764#endif /* FREECIV_JSON_CONNECTION */
48765
48766 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48768 }
48769
48770#ifdef FREECIV_JSON_CONNECTION
48771 field_addr.name = "roles";
48772#endif /* FREECIV_JSON_CONNECTION */
48773
48774 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48776 }
48777
48778#ifdef FREECIV_JSON_CONNECTION
48779 field_addr.name = "worker";
48780#endif /* FREECIV_JSON_CONNECTION */
48781
48782 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->worker)) {
48784 }
48785#endif /* FREECIV_DELTA_PROTOCOL */
48786
48788#undef FREE_PACKET_STRUCT
48789}
48790
48791static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
48792{
48793 const struct packet_ruleset_unit *real_packet = packet;
48794 int e;
48796
48797 log_packet_detailed("packet_ruleset_unit_100: sending info about ()");
48798
48799#ifdef FREECIV_DELTA_PROTOCOL
48801 struct packet_ruleset_unit *old;
48802 bool differ;
48803 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT;
48804
48805 if (nullptr == *hash) {
48807 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
48808 }
48809 BV_CLR_ALL(fields);
48810
48811 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
48812 old = fc_malloc(sizeof(*old));
48813 /* temporary bitcopy just to insert correctly */
48814 *old = *real_packet;
48817 }
48818
48819 differ = (old->id != real_packet->id);
48820 if (differ) {
48821 BV_SET(fields, 0);
48822 }
48823
48824 differ = (strcmp(old->name, real_packet->name) != 0);
48825 if (differ) {
48826 BV_SET(fields, 1);
48827 }
48828
48829 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
48830 if (differ) {
48831 BV_SET(fields, 2);
48832 }
48833
48834 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
48835 if (differ) {
48836 BV_SET(fields, 3);
48837 }
48838
48839 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
48840 if (differ) {
48841 BV_SET(fields, 4);
48842 }
48843
48844 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
48845 if (differ) {
48846 BV_SET(fields, 5);
48847 }
48848
48849 differ = (strcmp(old->sound_move, real_packet->sound_move) != 0);
48850 if (differ) {
48851 BV_SET(fields, 6);
48852 }
48853
48854 differ = (strcmp(old->sound_move_alt, real_packet->sound_move_alt) != 0);
48855 if (differ) {
48856 BV_SET(fields, 7);
48857 }
48858
48859 differ = (strcmp(old->sound_fight, real_packet->sound_fight) != 0);
48860 if (differ) {
48861 BV_SET(fields, 8);
48862 }
48863
48864 differ = (strcmp(old->sound_fight_alt, real_packet->sound_fight_alt) != 0);
48865 if (differ) {
48866 BV_SET(fields, 9);
48867 }
48868
48869 differ = (old->unit_class_id != real_packet->unit_class_id);
48870 if (differ) {
48871 BV_SET(fields, 10);
48872 }
48873
48874 differ = (old->build_cost != real_packet->build_cost);
48875 if (differ) {
48876 BV_SET(fields, 11);
48877 }
48878
48879 differ = (old->pop_cost != real_packet->pop_cost);
48880 if (differ) {
48881 BV_SET(fields, 12);
48882 }
48883
48884 differ = (old->attack_strength != real_packet->attack_strength);
48885 if (differ) {
48886 BV_SET(fields, 13);
48887 }
48888
48889 differ = (old->defense_strength != real_packet->defense_strength);
48890 if (differ) {
48891 BV_SET(fields, 14);
48892 }
48893
48894 differ = (old->move_rate != real_packet->move_rate);
48895 if (differ) {
48896 BV_SET(fields, 15);
48897 }
48898
48899 differ = (requirement_vector_size(&old->build_reqs) != requirement_vector_size(&real_packet->build_reqs));
48900 if (!differ) {
48901 int i;
48902
48903 for (i = 0; i < requirement_vector_size(&old->build_reqs); i++) {
48904 differ = !are_requirements_equal(&old->build_reqs.p[i], &real_packet->build_reqs.p[i]);
48905 if (differ) {
48906 break;
48907 }
48908 }
48909 }
48910 if (differ) {
48911 BV_SET(fields, 16);
48912 }
48913
48914 differ = (old->vision_radius_sq != real_packet->vision_radius_sq);
48915 if (differ) {
48916 BV_SET(fields, 17);
48917 }
48918
48919 differ = (old->transport_capacity != real_packet->transport_capacity);
48920 if (differ) {
48921 BV_SET(fields, 18);
48922 }
48923
48924 differ = (old->hp != real_packet->hp);
48925 if (differ) {
48926 BV_SET(fields, 19);
48927 }
48928
48929 differ = (old->firepower != real_packet->firepower);
48930 if (differ) {
48931 BV_SET(fields, 20);
48932 }
48933
48934 differ = (old->obsoleted_by != real_packet->obsoleted_by);
48935 if (differ) {
48936 BV_SET(fields, 21);
48937 }
48938
48939 differ = (old->converted_to != real_packet->converted_to);
48940 if (differ) {
48941 BV_SET(fields, 22);
48942 }
48943
48944 differ = (old->convert_time != real_packet->convert_time);
48945 if (differ) {
48946 BV_SET(fields, 23);
48947 }
48948
48949 differ = (old->fuel != real_packet->fuel);
48950 if (differ) {
48951 BV_SET(fields, 24);
48952 }
48953
48954 differ = (old->happy_cost != real_packet->happy_cost);
48955 if (differ) {
48956 BV_SET(fields, 25);
48957 }
48958
48959 differ = FALSE;
48960 {
48961 int i;
48962
48963 for (i = 0; i < O_LAST; i++) {
48964 differ = (old->upkeep[i] != real_packet->upkeep[i]);
48965 if (differ) {
48966 break;
48967 }
48968 }
48969 }
48970 if (differ) {
48971 BV_SET(fields, 26);
48972 }
48973
48974 differ = (old->paratroopers_range != real_packet->paratroopers_range);
48975 if (differ) {
48976 BV_SET(fields, 27);
48977 }
48978
48979 differ = (old->veteran_levels != real_packet->veteran_levels);
48980 if (differ) {
48981 BV_SET(fields, 28);
48982 }
48983
48984 differ = (old->veteran_levels != real_packet->veteran_levels);
48985 if (!differ) {
48986 int i;
48987
48988 for (i = 0; i < old->veteran_levels; i++) {
48989 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
48990 if (differ) {
48991 break;
48992 }
48993 }
48994 }
48995 if (differ) {
48996 BV_SET(fields, 29);
48997 }
48998
48999 differ = (old->veteran_levels != real_packet->veteran_levels);
49000 if (!differ) {
49001 int i;
49002
49003 for (i = 0; i < old->veteran_levels; i++) {
49004 differ = (old->power_fact[i] != real_packet->power_fact[i]);
49005 if (differ) {
49006 break;
49007 }
49008 }
49009 }
49010 if (differ) {
49011 BV_SET(fields, 30);
49012 }
49013
49014 differ = (old->veteran_levels != real_packet->veteran_levels);
49015 if (!differ) {
49016 int i;
49017
49018 for (i = 0; i < old->veteran_levels; i++) {
49019 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
49020 if (differ) {
49021 break;
49022 }
49023 }
49024 }
49025 if (differ) {
49026 BV_SET(fields, 31);
49027 }
49028
49029 differ = (old->veteran_levels != real_packet->veteran_levels);
49030 if (!differ) {
49031 int i;
49032
49033 for (i = 0; i < old->veteran_levels; i++) {
49034 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
49035 if (differ) {
49036 break;
49037 }
49038 }
49039 }
49040 if (differ) {
49041 BV_SET(fields, 32);
49042 }
49043
49044 differ = (old->veteran_levels != real_packet->veteran_levels);
49045 if (!differ) {
49046 int i;
49047
49048 for (i = 0; i < old->veteran_levels; i++) {
49049 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
49050 if (differ) {
49051 break;
49052 }
49053 }
49054 }
49055 if (differ) {
49056 BV_SET(fields, 33);
49057 }
49058
49059 differ = (old->bombard_rate != real_packet->bombard_rate);
49060 if (differ) {
49061 BV_SET(fields, 34);
49062 }
49063
49064 differ = (old->city_size != real_packet->city_size);
49065 if (differ) {
49066 BV_SET(fields, 35);
49067 }
49068
49069 differ = (old->city_slots != real_packet->city_slots);
49070 if (differ) {
49071 BV_SET(fields, 36);
49072 }
49073
49074 differ = (old->tp_defense != real_packet->tp_defense);
49075 if (differ) {
49076 BV_SET(fields, 37);
49077 }
49078
49079 differ = !BV_ARE_EQUAL(old->cargo, real_packet->cargo);
49080 if (differ) {
49081 BV_SET(fields, 38);
49082 }
49083
49084 differ = !BV_ARE_EQUAL(old->targets, real_packet->targets);
49085 if (differ) {
49086 BV_SET(fields, 39);
49087 }
49088
49089 differ = !BV_ARE_EQUAL(old->embarks, real_packet->embarks);
49090 if (differ) {
49091 BV_SET(fields, 40);
49092 }
49093
49094 differ = !BV_ARE_EQUAL(old->disembarks, real_packet->disembarks);
49095 if (differ) {
49096 BV_SET(fields, 41);
49097 }
49098
49099 differ = (old->vlayer != real_packet->vlayer);
49100 if (differ) {
49101 BV_SET(fields, 42);
49102 }
49103
49104 if (real_packet->helptext) {
49105 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
49106 } else {
49107 differ = (strvec_size(old->helptext) > 0);
49108 }
49109 if (differ) {
49110 BV_SET(fields, 43);
49111 }
49112
49113 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
49114 if (differ) {
49115 BV_SET(fields, 44);
49116 }
49117
49118 differ = !BV_ARE_EQUAL(old->roles, real_packet->roles);
49119 if (differ) {
49120 BV_SET(fields, 45);
49121 }
49122
49123 /* folded into head */
49124 if (real_packet->worker) {
49125 BV_SET(fields, 46);
49126 }
49127#endif /* FREECIV_DELTA_PROTOCOL */
49128
49129#ifdef FREECIV_JSON_CONNECTION
49130 struct plocation field_addr;
49131 {
49132 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
49135 }
49136#endif /* FREECIV_JSON_CONNECTION */
49137
49138#ifdef FREECIV_DELTA_PROTOCOL
49139#ifdef FREECIV_JSON_CONNECTION
49140 field_addr.name = "fields";
49141#endif /* FREECIV_JSON_CONNECTION */
49142 e = 0;
49143 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49144 if (e) {
49145 log_packet_detailed("fields bitvector error detected");
49146 }
49147
49148 if (BV_ISSET(fields, 0)) {
49149 log_packet_detailed(" field 'id' has changed");
49150
49151#ifdef FREECIV_JSON_CONNECTION
49152 field_addr.name = "id";
49153#endif /* FREECIV_JSON_CONNECTION */
49154 e = 0;
49155
49156 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49157
49158 if (e) {
49159 log_packet_detailed("'id' field error detected");
49160 }
49161 }
49162
49163 if (BV_ISSET(fields, 1)) {
49164 log_packet_detailed(" field 'name' has changed");
49165
49166#ifdef FREECIV_JSON_CONNECTION
49167 field_addr.name = "name";
49168#endif /* FREECIV_JSON_CONNECTION */
49169 e = 0;
49170
49171 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49172
49173 if (e) {
49174 log_packet_detailed("'name' field error detected");
49175 }
49176 }
49177
49178 if (BV_ISSET(fields, 2)) {
49179 log_packet_detailed(" field 'rule_name' has changed");
49180
49181#ifdef FREECIV_JSON_CONNECTION
49182 field_addr.name = "rule_name";
49183#endif /* FREECIV_JSON_CONNECTION */
49184 e = 0;
49185
49186 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49187
49188 if (e) {
49189 log_packet_detailed("'rule_name' field error detected");
49190 }
49191 }
49192
49193 if (BV_ISSET(fields, 3)) {
49194 log_packet_detailed(" field 'graphic_str' has changed");
49195
49196#ifdef FREECIV_JSON_CONNECTION
49197 field_addr.name = "graphic_str";
49198#endif /* FREECIV_JSON_CONNECTION */
49199 e = 0;
49200
49201 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
49202
49203 if (e) {
49204 log_packet_detailed("'graphic_str' field error detected");
49205 }
49206 }
49207
49208 if (BV_ISSET(fields, 4)) {
49209 log_packet_detailed(" field 'graphic_alt' has changed");
49210
49211#ifdef FREECIV_JSON_CONNECTION
49212 field_addr.name = "graphic_alt";
49213#endif /* FREECIV_JSON_CONNECTION */
49214 e = 0;
49215
49216 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
49217
49218 if (e) {
49219 log_packet_detailed("'graphic_alt' field error detected");
49220 }
49221 }
49222
49223 if (BV_ISSET(fields, 5)) {
49224 log_packet_detailed(" field 'graphic_alt2' has changed");
49225
49226#ifdef FREECIV_JSON_CONNECTION
49227 field_addr.name = "graphic_alt2";
49228#endif /* FREECIV_JSON_CONNECTION */
49229 e = 0;
49230
49231 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
49232
49233 if (e) {
49234 log_packet_detailed("'graphic_alt2' field error detected");
49235 }
49236 }
49237
49238 if (BV_ISSET(fields, 6)) {
49239 log_packet_detailed(" field 'sound_move' has changed");
49240
49241#ifdef FREECIV_JSON_CONNECTION
49242 field_addr.name = "sound_move";
49243#endif /* FREECIV_JSON_CONNECTION */
49244 e = 0;
49245
49246 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
49247
49248 if (e) {
49249 log_packet_detailed("'sound_move' field error detected");
49250 }
49251 }
49252
49253 if (BV_ISSET(fields, 7)) {
49254 log_packet_detailed(" field 'sound_move_alt' has changed");
49255
49256#ifdef FREECIV_JSON_CONNECTION
49257 field_addr.name = "sound_move_alt";
49258#endif /* FREECIV_JSON_CONNECTION */
49259 e = 0;
49260
49261 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
49262
49263 if (e) {
49264 log_packet_detailed("'sound_move_alt' field error detected");
49265 }
49266 }
49267
49268 if (BV_ISSET(fields, 8)) {
49269 log_packet_detailed(" field 'sound_fight' has changed");
49270
49271#ifdef FREECIV_JSON_CONNECTION
49272 field_addr.name = "sound_fight";
49273#endif /* FREECIV_JSON_CONNECTION */
49274 e = 0;
49275
49276 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
49277
49278 if (e) {
49279 log_packet_detailed("'sound_fight' field error detected");
49280 }
49281 }
49282
49283 if (BV_ISSET(fields, 9)) {
49284 log_packet_detailed(" field 'sound_fight_alt' has changed");
49285
49286#ifdef FREECIV_JSON_CONNECTION
49287 field_addr.name = "sound_fight_alt";
49288#endif /* FREECIV_JSON_CONNECTION */
49289 e = 0;
49290
49291 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
49292
49293 if (e) {
49294 log_packet_detailed("'sound_fight_alt' field error detected");
49295 }
49296 }
49297
49298 if (BV_ISSET(fields, 10)) {
49299 log_packet_detailed(" field 'unit_class_id' has changed");
49300
49301#ifdef FREECIV_JSON_CONNECTION
49302 field_addr.name = "unit_class_id";
49303#endif /* FREECIV_JSON_CONNECTION */
49304 e = 0;
49305
49306 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
49307
49308 if (e) {
49309 log_packet_detailed("'unit_class_id' field error detected");
49310 }
49311 }
49312
49313 if (BV_ISSET(fields, 11)) {
49314 log_packet_detailed(" field 'build_cost' has changed");
49315
49316#ifdef FREECIV_JSON_CONNECTION
49317 field_addr.name = "build_cost";
49318#endif /* FREECIV_JSON_CONNECTION */
49319 e = 0;
49320
49321 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
49322
49323 if (e) {
49324 log_packet_detailed("'build_cost' field error detected");
49325 }
49326 }
49327
49328 if (BV_ISSET(fields, 12)) {
49329 log_packet_detailed(" field 'pop_cost' has changed");
49330
49331#ifdef FREECIV_JSON_CONNECTION
49332 field_addr.name = "pop_cost";
49333#endif /* FREECIV_JSON_CONNECTION */
49334 e = 0;
49335
49336 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
49337
49338 if (e) {
49339 log_packet_detailed("'pop_cost' field error detected");
49340 }
49341 }
49342
49343 if (BV_ISSET(fields, 13)) {
49344 log_packet_detailed(" field 'attack_strength' has changed");
49345
49346#ifdef FREECIV_JSON_CONNECTION
49347 field_addr.name = "attack_strength";
49348#endif /* FREECIV_JSON_CONNECTION */
49349 e = 0;
49350
49351 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
49352
49353 if (e) {
49354 log_packet_detailed("'attack_strength' field error detected");
49355 }
49356 }
49357
49358 if (BV_ISSET(fields, 14)) {
49359 log_packet_detailed(" field 'defense_strength' has changed");
49360
49361#ifdef FREECIV_JSON_CONNECTION
49362 field_addr.name = "defense_strength";
49363#endif /* FREECIV_JSON_CONNECTION */
49364 e = 0;
49365
49366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
49367
49368 if (e) {
49369 log_packet_detailed("'defense_strength' field error detected");
49370 }
49371 }
49372
49373 if (BV_ISSET(fields, 15)) {
49374 log_packet_detailed(" field 'move_rate' has changed");
49375
49376#ifdef FREECIV_JSON_CONNECTION
49377 field_addr.name = "move_rate";
49378#endif /* FREECIV_JSON_CONNECTION */
49379 e = 0;
49380
49381 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
49382
49383 if (e) {
49384 log_packet_detailed("'move_rate' field error detected");
49385 }
49386 }
49387
49388 if (BV_ISSET(fields, 16)) {
49389 log_packet_detailed(" field 'build_reqs' has changed");
49390
49391#ifdef FREECIV_JSON_CONNECTION
49392 field_addr.name = "build_reqs";
49393#endif /* FREECIV_JSON_CONNECTION */
49394 e = 0;
49395
49396 {
49397 int i;
49398
49401
49402#ifdef FREECIV_JSON_CONNECTION
49403 /* Enter array. */
49404 field_addr.sub_location = plocation_elem_new(0);
49405#endif /* FREECIV_JSON_CONNECTION */
49406
49407 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
49408#ifdef FREECIV_JSON_CONNECTION
49409 /* Next array element. */
49410 field_addr.sub_location->number = i;
49411#endif /* FREECIV_JSON_CONNECTION */
49412
49413 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
49414 }
49415
49416#ifdef FREECIV_JSON_CONNECTION
49417 /* Exit array. */
49418 FC_FREE(field_addr.sub_location);
49419#endif /* FREECIV_JSON_CONNECTION */
49420 }
49421
49422 if (e) {
49423 log_packet_detailed("'build_reqs' field error detected");
49424 }
49425 }
49426
49427 if (BV_ISSET(fields, 17)) {
49428 log_packet_detailed(" field 'vision_radius_sq' has changed");
49429
49430#ifdef FREECIV_JSON_CONNECTION
49431 field_addr.name = "vision_radius_sq";
49432#endif /* FREECIV_JSON_CONNECTION */
49433 e = 0;
49434
49435 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
49436
49437 if (e) {
49438 log_packet_detailed("'vision_radius_sq' field error detected");
49439 }
49440 }
49441
49442 if (BV_ISSET(fields, 18)) {
49443 log_packet_detailed(" field 'transport_capacity' has changed");
49444
49445#ifdef FREECIV_JSON_CONNECTION
49446 field_addr.name = "transport_capacity";
49447#endif /* FREECIV_JSON_CONNECTION */
49448 e = 0;
49449
49450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
49451
49452 if (e) {
49453 log_packet_detailed("'transport_capacity' field error detected");
49454 }
49455 }
49456
49457 if (BV_ISSET(fields, 19)) {
49458 log_packet_detailed(" field 'hp' has changed");
49459
49460#ifdef FREECIV_JSON_CONNECTION
49461 field_addr.name = "hp";
49462#endif /* FREECIV_JSON_CONNECTION */
49463 e = 0;
49464
49465 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
49466
49467 if (e) {
49468 log_packet_detailed("'hp' field error detected");
49469 }
49470 }
49471
49472 if (BV_ISSET(fields, 20)) {
49473 log_packet_detailed(" field 'firepower' has changed");
49474
49475#ifdef FREECIV_JSON_CONNECTION
49476 field_addr.name = "firepower";
49477#endif /* FREECIV_JSON_CONNECTION */
49478 e = 0;
49479
49480 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
49481
49482 if (e) {
49483 log_packet_detailed("'firepower' field error detected");
49484 }
49485 }
49486
49487 if (BV_ISSET(fields, 21)) {
49488 log_packet_detailed(" field 'obsoleted_by' has changed");
49489
49490#ifdef FREECIV_JSON_CONNECTION
49491 field_addr.name = "obsoleted_by";
49492#endif /* FREECIV_JSON_CONNECTION */
49493 e = 0;
49494
49495 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
49496
49497 if (e) {
49498 log_packet_detailed("'obsoleted_by' field error detected");
49499 }
49500 }
49501
49502 if (BV_ISSET(fields, 22)) {
49503 log_packet_detailed(" field 'converted_to' has changed");
49504
49505#ifdef FREECIV_JSON_CONNECTION
49506 field_addr.name = "converted_to";
49507#endif /* FREECIV_JSON_CONNECTION */
49508 e = 0;
49509
49510 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
49511
49512 if (e) {
49513 log_packet_detailed("'converted_to' field error detected");
49514 }
49515 }
49516
49517 if (BV_ISSET(fields, 23)) {
49518 log_packet_detailed(" field 'convert_time' has changed");
49519
49520#ifdef FREECIV_JSON_CONNECTION
49521 field_addr.name = "convert_time";
49522#endif /* FREECIV_JSON_CONNECTION */
49523 e = 0;
49524
49525 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
49526
49527 if (e) {
49528 log_packet_detailed("'convert_time' field error detected");
49529 }
49530 }
49531
49532 if (BV_ISSET(fields, 24)) {
49533 log_packet_detailed(" field 'fuel' has changed");
49534
49535#ifdef FREECIV_JSON_CONNECTION
49536 field_addr.name = "fuel";
49537#endif /* FREECIV_JSON_CONNECTION */
49538 e = 0;
49539
49540 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
49541
49542 if (e) {
49543 log_packet_detailed("'fuel' field error detected");
49544 }
49545 }
49546
49547 if (BV_ISSET(fields, 25)) {
49548 log_packet_detailed(" field 'happy_cost' has changed");
49549
49550#ifdef FREECIV_JSON_CONNECTION
49551 field_addr.name = "happy_cost";
49552#endif /* FREECIV_JSON_CONNECTION */
49553 e = 0;
49554
49555 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
49556
49557 if (e) {
49558 log_packet_detailed("'happy_cost' field error detected");
49559 }
49560 }
49561
49562 if (BV_ISSET(fields, 26)) {
49563 log_packet_detailed(" field 'upkeep' has changed");
49564
49565#ifdef FREECIV_JSON_CONNECTION
49566 field_addr.name = "upkeep";
49567#endif /* FREECIV_JSON_CONNECTION */
49568 e = 0;
49569
49570 {
49571 int i;
49572
49573#ifdef FREECIV_JSON_CONNECTION
49574 /* Create the array. */
49575 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
49576
49577 /* Enter array. */
49578 field_addr.sub_location = plocation_elem_new(0);
49579#endif /* FREECIV_JSON_CONNECTION */
49580
49581 for (i = 0; i < O_LAST; i++) {
49582#ifdef FREECIV_JSON_CONNECTION
49583 /* Next array element. */
49584 field_addr.sub_location->number = i;
49585#endif /* FREECIV_JSON_CONNECTION */
49586
49587 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
49588 }
49589
49590#ifdef FREECIV_JSON_CONNECTION
49591 /* Exit array. */
49592 FC_FREE(field_addr.sub_location);
49593#endif /* FREECIV_JSON_CONNECTION */
49594 }
49595
49596 if (e) {
49597 log_packet_detailed("'upkeep' field error detected");
49598 }
49599 }
49600
49601 if (BV_ISSET(fields, 27)) {
49602 log_packet_detailed(" field 'paratroopers_range' has changed");
49603
49604#ifdef FREECIV_JSON_CONNECTION
49605 field_addr.name = "paratroopers_range";
49606#endif /* FREECIV_JSON_CONNECTION */
49607 e = 0;
49608
49609 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
49610
49611 if (e) {
49612 log_packet_detailed("'paratroopers_range' field error detected");
49613 }
49614 }
49615
49616 if (BV_ISSET(fields, 28)) {
49617 log_packet_detailed(" field 'veteran_levels' has changed");
49618
49619#ifdef FREECIV_JSON_CONNECTION
49620 field_addr.name = "veteran_levels";
49621#endif /* FREECIV_JSON_CONNECTION */
49622 e = 0;
49623
49624 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
49625
49626 if (e) {
49627 log_packet_detailed("'veteran_levels' field error detected");
49628 }
49629 }
49630
49631 if (BV_ISSET(fields, 29)) {
49632 log_packet_detailed(" field 'veteran_name' has changed");
49633
49634#ifdef FREECIV_JSON_CONNECTION
49635 field_addr.name = "veteran_name";
49636#endif /* FREECIV_JSON_CONNECTION */
49637 e = 0;
49638
49639 {
49640 int i;
49641
49642#ifdef FREECIV_JSON_CONNECTION
49643 /* Create the array. */
49644 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49645
49646 /* Enter array. */
49647 field_addr.sub_location = plocation_elem_new(0);
49648#endif /* FREECIV_JSON_CONNECTION */
49649
49650 for (i = 0; i < real_packet->veteran_levels; i++) {
49651#ifdef FREECIV_JSON_CONNECTION
49652 /* Next array element. */
49653 field_addr.sub_location->number = i;
49654#endif /* FREECIV_JSON_CONNECTION */
49655
49656 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
49657 }
49658
49659#ifdef FREECIV_JSON_CONNECTION
49660 /* Exit array. */
49661 FC_FREE(field_addr.sub_location);
49662#endif /* FREECIV_JSON_CONNECTION */
49663 }
49664
49665 if (e) {
49666 log_packet_detailed("'veteran_name' field error detected");
49667 }
49668 }
49669
49670 if (BV_ISSET(fields, 30)) {
49671 log_packet_detailed(" field 'power_fact' has changed");
49672
49673#ifdef FREECIV_JSON_CONNECTION
49674 field_addr.name = "power_fact";
49675#endif /* FREECIV_JSON_CONNECTION */
49676 e = 0;
49677
49678 {
49679 int i;
49680
49681#ifdef FREECIV_JSON_CONNECTION
49682 /* Create the array. */
49683 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49684
49685 /* Enter array. */
49686 field_addr.sub_location = plocation_elem_new(0);
49687#endif /* FREECIV_JSON_CONNECTION */
49688
49689 for (i = 0; i < real_packet->veteran_levels; i++) {
49690#ifdef FREECIV_JSON_CONNECTION
49691 /* Next array element. */
49692 field_addr.sub_location->number = i;
49693#endif /* FREECIV_JSON_CONNECTION */
49694
49695 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
49696 }
49697
49698#ifdef FREECIV_JSON_CONNECTION
49699 /* Exit array. */
49700 FC_FREE(field_addr.sub_location);
49701#endif /* FREECIV_JSON_CONNECTION */
49702 }
49703
49704 if (e) {
49705 log_packet_detailed("'power_fact' field error detected");
49706 }
49707 }
49708
49709 if (BV_ISSET(fields, 31)) {
49710 log_packet_detailed(" field 'move_bonus' has changed");
49711
49712#ifdef FREECIV_JSON_CONNECTION
49713 field_addr.name = "move_bonus";
49714#endif /* FREECIV_JSON_CONNECTION */
49715 e = 0;
49716
49717 {
49718 int i;
49719
49720#ifdef FREECIV_JSON_CONNECTION
49721 /* Create the array. */
49722 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49723
49724 /* Enter array. */
49725 field_addr.sub_location = plocation_elem_new(0);
49726#endif /* FREECIV_JSON_CONNECTION */
49727
49728 for (i = 0; i < real_packet->veteran_levels; i++) {
49729#ifdef FREECIV_JSON_CONNECTION
49730 /* Next array element. */
49731 field_addr.sub_location->number = i;
49732#endif /* FREECIV_JSON_CONNECTION */
49733
49734 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
49735 }
49736
49737#ifdef FREECIV_JSON_CONNECTION
49738 /* Exit array. */
49739 FC_FREE(field_addr.sub_location);
49740#endif /* FREECIV_JSON_CONNECTION */
49741 }
49742
49743 if (e) {
49744 log_packet_detailed("'move_bonus' field error detected");
49745 }
49746 }
49747
49748 if (BV_ISSET(fields, 32)) {
49749 log_packet_detailed(" field 'base_raise_chance' has changed");
49750
49751#ifdef FREECIV_JSON_CONNECTION
49752 field_addr.name = "base_raise_chance";
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(uint8, &dout, &field_addr, real_packet->base_raise_chance[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("'base_raise_chance' field error detected");
49784 }
49785 }
49786
49787 if (BV_ISSET(fields, 33)) {
49788 log_packet_detailed(" field 'work_raise_chance' has changed");
49789
49790#ifdef FREECIV_JSON_CONNECTION
49791 field_addr.name = "work_raise_chance";
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(uint8, &dout, &field_addr, real_packet->work_raise_chance[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("'work_raise_chance' field error detected");
49823 }
49824 }
49825
49826 if (BV_ISSET(fields, 34)) {
49827 log_packet_detailed(" field 'bombard_rate' has changed");
49828
49829#ifdef FREECIV_JSON_CONNECTION
49830 field_addr.name = "bombard_rate";
49831#endif /* FREECIV_JSON_CONNECTION */
49832 e = 0;
49833
49834 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
49835
49836 if (e) {
49837 log_packet_detailed("'bombard_rate' field error detected");
49838 }
49839 }
49840
49841 if (BV_ISSET(fields, 35)) {
49842 log_packet_detailed(" field 'city_size' has changed");
49843
49844#ifdef FREECIV_JSON_CONNECTION
49845 field_addr.name = "city_size";
49846#endif /* FREECIV_JSON_CONNECTION */
49847 e = 0;
49848
49849 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
49850
49851 if (e) {
49852 log_packet_detailed("'city_size' field error detected");
49853 }
49854 }
49855
49856 if (BV_ISSET(fields, 36)) {
49857 log_packet_detailed(" field 'city_slots' has changed");
49858
49859#ifdef FREECIV_JSON_CONNECTION
49860 field_addr.name = "city_slots";
49861#endif /* FREECIV_JSON_CONNECTION */
49862 e = 0;
49863
49864 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
49865
49866 if (e) {
49867 log_packet_detailed("'city_slots' field error detected");
49868 }
49869 }
49870
49871 if (BV_ISSET(fields, 37)) {
49872 log_packet_detailed(" field 'tp_defense' has changed");
49873
49874#ifdef FREECIV_JSON_CONNECTION
49875 field_addr.name = "tp_defense";
49876#endif /* FREECIV_JSON_CONNECTION */
49877 e = 0;
49878
49879 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
49880
49881 if (e) {
49882 log_packet_detailed("'tp_defense' field error detected");
49883 }
49884 }
49885
49886 if (BV_ISSET(fields, 38)) {
49887 log_packet_detailed(" field 'cargo' has changed");
49888
49889#ifdef FREECIV_JSON_CONNECTION
49890 field_addr.name = "cargo";
49891#endif /* FREECIV_JSON_CONNECTION */
49892 e = 0;
49893
49894 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
49895
49896 if (e) {
49897 log_packet_detailed("'cargo' field error detected");
49898 }
49899 }
49900
49901 if (BV_ISSET(fields, 39)) {
49902 log_packet_detailed(" field 'targets' has changed");
49903
49904#ifdef FREECIV_JSON_CONNECTION
49905 field_addr.name = "targets";
49906#endif /* FREECIV_JSON_CONNECTION */
49907 e = 0;
49908
49909 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
49910
49911 if (e) {
49912 log_packet_detailed("'targets' field error detected");
49913 }
49914 }
49915
49916 if (BV_ISSET(fields, 40)) {
49917 log_packet_detailed(" field 'embarks' has changed");
49918
49919#ifdef FREECIV_JSON_CONNECTION
49920 field_addr.name = "embarks";
49921#endif /* FREECIV_JSON_CONNECTION */
49922 e = 0;
49923
49924 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
49925
49926 if (e) {
49927 log_packet_detailed("'embarks' field error detected");
49928 }
49929 }
49930
49931 if (BV_ISSET(fields, 41)) {
49932 log_packet_detailed(" field 'disembarks' has changed");
49933
49934#ifdef FREECIV_JSON_CONNECTION
49935 field_addr.name = "disembarks";
49936#endif /* FREECIV_JSON_CONNECTION */
49937 e = 0;
49938
49939 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
49940
49941 if (e) {
49942 log_packet_detailed("'disembarks' field error detected");
49943 }
49944 }
49945
49946 if (BV_ISSET(fields, 42)) {
49947 log_packet_detailed(" field 'vlayer' has changed");
49948
49949#ifdef FREECIV_JSON_CONNECTION
49950 field_addr.name = "vlayer";
49951#endif /* FREECIV_JSON_CONNECTION */
49952 e = 0;
49953
49954 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
49955
49956 if (e) {
49957 log_packet_detailed("'vlayer' field error detected");
49958 }
49959 }
49960
49961 if (BV_ISSET(fields, 43)) {
49962 log_packet_detailed(" field 'helptext' has changed");
49963
49964#ifdef FREECIV_JSON_CONNECTION
49965 field_addr.name = "helptext";
49966#endif /* FREECIV_JSON_CONNECTION */
49967 e = 0;
49968
49969 if (!real_packet->helptext) {
49970 /* Transmit null as empty */
49971 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
49972 } else {
49973 int i;
49974
49976 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
49977
49978#ifdef FREECIV_JSON_CONNECTION
49979 /* Enter array. */
49980 field_addr.sub_location = plocation_elem_new(0);
49981#endif /* FREECIV_JSON_CONNECTION */
49982
49983 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
49984#ifdef FREECIV_JSON_CONNECTION
49985 /* Next array element. */
49986 field_addr.sub_location->number = i;
49987#endif /* FREECIV_JSON_CONNECTION */
49988
49989 {
49990 const char *pstr = strvec_get(real_packet->helptext, i);
49991
49992 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
49993 }
49994 }
49995
49996#ifdef FREECIV_JSON_CONNECTION
49997 /* Exit array. */
49998 FC_FREE(field_addr.sub_location);
49999#endif /* FREECIV_JSON_CONNECTION */
50000 }
50001
50002 if (e) {
50003 log_packet_detailed("'helptext' field error detected");
50004 }
50005 }
50006
50007 if (BV_ISSET(fields, 44)) {
50008 log_packet_detailed(" field 'flags' has changed");
50009
50010#ifdef FREECIV_JSON_CONNECTION
50011 field_addr.name = "flags";
50012#endif /* FREECIV_JSON_CONNECTION */
50013 e = 0;
50014
50015 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50016
50017 if (e) {
50018 log_packet_detailed("'flags' field error detected");
50019 }
50020 }
50021
50022 if (BV_ISSET(fields, 45)) {
50023 log_packet_detailed(" field 'roles' has changed");
50024
50025#ifdef FREECIV_JSON_CONNECTION
50026 field_addr.name = "roles";
50027#endif /* FREECIV_JSON_CONNECTION */
50028 e = 0;
50029
50030 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50031
50032 if (e) {
50033 log_packet_detailed("'roles' field error detected");
50034 }
50035 }
50036
50037 /* field 46 is folded into the header */
50038
50039 old->id = real_packet->id;
50040 sz_strlcpy(old->name, real_packet->name);
50041 sz_strlcpy(old->rule_name, real_packet->rule_name);
50042 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
50043 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
50044 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
50045 sz_strlcpy(old->sound_move, real_packet->sound_move);
50046 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
50047 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
50048 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
50049 old->unit_class_id = real_packet->unit_class_id;
50050 old->build_cost = real_packet->build_cost;
50051 old->pop_cost = real_packet->pop_cost;
50052 old->attack_strength = real_packet->attack_strength;
50053 old->defense_strength = real_packet->defense_strength;
50054 old->move_rate = real_packet->move_rate;
50055 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
50056 old->vision_radius_sq = real_packet->vision_radius_sq;
50057 old->transport_capacity = real_packet->transport_capacity;
50058 old->hp = real_packet->hp;
50059 old->firepower = real_packet->firepower;
50060 old->obsoleted_by = real_packet->obsoleted_by;
50061 old->converted_to = real_packet->converted_to;
50062 old->convert_time = real_packet->convert_time;
50063 old->fuel = real_packet->fuel;
50064 old->happy_cost = real_packet->happy_cost;
50065 {
50066 int i;
50067
50068 for (i = 0; i < O_LAST; i++) {
50069 old->upkeep[i] = real_packet->upkeep[i];
50070 }
50071 }
50072 old->paratroopers_range = real_packet->paratroopers_range;
50073 old->veteran_levels = real_packet->veteran_levels;
50074 {
50075 int i;
50076
50077 for (i = 0; i < real_packet->veteran_levels; i++) {
50078 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
50079 }
50080 }
50081 {
50082 int i;
50083
50084 for (i = 0; i < real_packet->veteran_levels; i++) {
50085 old->power_fact[i] = real_packet->power_fact[i];
50086 }
50087 }
50088 {
50089 int i;
50090
50091 for (i = 0; i < real_packet->veteran_levels; i++) {
50092 old->move_bonus[i] = real_packet->move_bonus[i];
50093 }
50094 }
50095 {
50096 int i;
50097
50098 for (i = 0; i < real_packet->veteran_levels; i++) {
50099 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
50100 }
50101 }
50102 {
50103 int i;
50104
50105 for (i = 0; i < real_packet->veteran_levels; i++) {
50106 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
50107 }
50108 }
50109 old->bombard_rate = real_packet->bombard_rate;
50110 old->city_size = real_packet->city_size;
50111 old->city_slots = real_packet->city_slots;
50112 old->tp_defense = real_packet->tp_defense;
50113 old->cargo = real_packet->cargo;
50114 old->targets = real_packet->targets;
50115 old->embarks = real_packet->embarks;
50116 old->disembarks = real_packet->disembarks;
50117 old->vlayer = real_packet->vlayer;
50118 if (real_packet->helptext) {
50119 strvec_copy(old->helptext, real_packet->helptext);
50120 } else {
50121 strvec_clear(old->helptext);
50122 }
50123 old->flags = real_packet->flags;
50124 old->roles = real_packet->roles;
50125 old->worker = real_packet->worker;
50126
50127#else /* FREECIV_DELTA_PROTOCOL */
50128#ifdef FREECIV_JSON_CONNECTION
50129 field_addr.name = "id";
50130#endif /* FREECIV_JSON_CONNECTION */
50131 e = 0;
50132
50133 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
50134
50135 if (e) {
50136 log_packet_detailed("'id' field error detected");
50137 }
50138
50139#ifdef FREECIV_JSON_CONNECTION
50140 field_addr.name = "name";
50141#endif /* FREECIV_JSON_CONNECTION */
50142 e = 0;
50143
50144 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50145
50146 if (e) {
50147 log_packet_detailed("'name' field error detected");
50148 }
50149
50150#ifdef FREECIV_JSON_CONNECTION
50151 field_addr.name = "rule_name";
50152#endif /* FREECIV_JSON_CONNECTION */
50153 e = 0;
50154
50155 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
50156
50157 if (e) {
50158 log_packet_detailed("'rule_name' field error detected");
50159 }
50160
50161#ifdef FREECIV_JSON_CONNECTION
50162 field_addr.name = "graphic_str";
50163#endif /* FREECIV_JSON_CONNECTION */
50164 e = 0;
50165
50166 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
50167
50168 if (e) {
50169 log_packet_detailed("'graphic_str' field error detected");
50170 }
50171
50172#ifdef FREECIV_JSON_CONNECTION
50173 field_addr.name = "graphic_alt";
50174#endif /* FREECIV_JSON_CONNECTION */
50175 e = 0;
50176
50177 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
50178
50179 if (e) {
50180 log_packet_detailed("'graphic_alt' field error detected");
50181 }
50182
50183#ifdef FREECIV_JSON_CONNECTION
50184 field_addr.name = "graphic_alt2";
50185#endif /* FREECIV_JSON_CONNECTION */
50186 e = 0;
50187
50188 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
50189
50190 if (e) {
50191 log_packet_detailed("'graphic_alt2' field error detected");
50192 }
50193
50194#ifdef FREECIV_JSON_CONNECTION
50195 field_addr.name = "sound_move";
50196#endif /* FREECIV_JSON_CONNECTION */
50197 e = 0;
50198
50199 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
50200
50201 if (e) {
50202 log_packet_detailed("'sound_move' field error detected");
50203 }
50204
50205#ifdef FREECIV_JSON_CONNECTION
50206 field_addr.name = "sound_move_alt";
50207#endif /* FREECIV_JSON_CONNECTION */
50208 e = 0;
50209
50210 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
50211
50212 if (e) {
50213 log_packet_detailed("'sound_move_alt' field error detected");
50214 }
50215
50216#ifdef FREECIV_JSON_CONNECTION
50217 field_addr.name = "sound_fight";
50218#endif /* FREECIV_JSON_CONNECTION */
50219 e = 0;
50220
50221 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
50222
50223 if (e) {
50224 log_packet_detailed("'sound_fight' field error detected");
50225 }
50226
50227#ifdef FREECIV_JSON_CONNECTION
50228 field_addr.name = "sound_fight_alt";
50229#endif /* FREECIV_JSON_CONNECTION */
50230 e = 0;
50231
50232 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
50233
50234 if (e) {
50235 log_packet_detailed("'sound_fight_alt' field error detected");
50236 }
50237
50238#ifdef FREECIV_JSON_CONNECTION
50239 field_addr.name = "unit_class_id";
50240#endif /* FREECIV_JSON_CONNECTION */
50241 e = 0;
50242
50243 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
50244
50245 if (e) {
50246 log_packet_detailed("'unit_class_id' field error detected");
50247 }
50248
50249#ifdef FREECIV_JSON_CONNECTION
50250 field_addr.name = "build_cost";
50251#endif /* FREECIV_JSON_CONNECTION */
50252 e = 0;
50253
50254 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
50255
50256 if (e) {
50257 log_packet_detailed("'build_cost' field error detected");
50258 }
50259
50260#ifdef FREECIV_JSON_CONNECTION
50261 field_addr.name = "pop_cost";
50262#endif /* FREECIV_JSON_CONNECTION */
50263 e = 0;
50264
50265 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
50266
50267 if (e) {
50268 log_packet_detailed("'pop_cost' field error detected");
50269 }
50270
50271#ifdef FREECIV_JSON_CONNECTION
50272 field_addr.name = "attack_strength";
50273#endif /* FREECIV_JSON_CONNECTION */
50274 e = 0;
50275
50276 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
50277
50278 if (e) {
50279 log_packet_detailed("'attack_strength' field error detected");
50280 }
50281
50282#ifdef FREECIV_JSON_CONNECTION
50283 field_addr.name = "defense_strength";
50284#endif /* FREECIV_JSON_CONNECTION */
50285 e = 0;
50286
50287 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
50288
50289 if (e) {
50290 log_packet_detailed("'defense_strength' field error detected");
50291 }
50292
50293#ifdef FREECIV_JSON_CONNECTION
50294 field_addr.name = "move_rate";
50295#endif /* FREECIV_JSON_CONNECTION */
50296 e = 0;
50297
50298 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
50299
50300 if (e) {
50301 log_packet_detailed("'move_rate' field error detected");
50302 }
50303
50304#ifdef FREECIV_JSON_CONNECTION
50305 field_addr.name = "build_reqs";
50306#endif /* FREECIV_JSON_CONNECTION */
50307 e = 0;
50308
50309 {
50310 int i;
50311
50314
50315#ifdef FREECIV_JSON_CONNECTION
50316 /* Enter array. */
50317 field_addr.sub_location = plocation_elem_new(0);
50318#endif /* FREECIV_JSON_CONNECTION */
50319
50320 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
50321#ifdef FREECIV_JSON_CONNECTION
50322 /* Next array element. */
50323 field_addr.sub_location->number = i;
50324#endif /* FREECIV_JSON_CONNECTION */
50325
50326 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
50327 }
50328
50329#ifdef FREECIV_JSON_CONNECTION
50330 /* Exit array. */
50331 FC_FREE(field_addr.sub_location);
50332#endif /* FREECIV_JSON_CONNECTION */
50333 }
50334
50335 if (e) {
50336 log_packet_detailed("'build_reqs' field error detected");
50337 }
50338
50339#ifdef FREECIV_JSON_CONNECTION
50340 field_addr.name = "vision_radius_sq";
50341#endif /* FREECIV_JSON_CONNECTION */
50342 e = 0;
50343
50344 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
50345
50346 if (e) {
50347 log_packet_detailed("'vision_radius_sq' field error detected");
50348 }
50349
50350#ifdef FREECIV_JSON_CONNECTION
50351 field_addr.name = "transport_capacity";
50352#endif /* FREECIV_JSON_CONNECTION */
50353 e = 0;
50354
50355 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
50356
50357 if (e) {
50358 log_packet_detailed("'transport_capacity' field error detected");
50359 }
50360
50361#ifdef FREECIV_JSON_CONNECTION
50362 field_addr.name = "hp";
50363#endif /* FREECIV_JSON_CONNECTION */
50364 e = 0;
50365
50366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
50367
50368 if (e) {
50369 log_packet_detailed("'hp' field error detected");
50370 }
50371
50372#ifdef FREECIV_JSON_CONNECTION
50373 field_addr.name = "firepower";
50374#endif /* FREECIV_JSON_CONNECTION */
50375 e = 0;
50376
50377 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
50378
50379 if (e) {
50380 log_packet_detailed("'firepower' field error detected");
50381 }
50382
50383#ifdef FREECIV_JSON_CONNECTION
50384 field_addr.name = "obsoleted_by";
50385#endif /* FREECIV_JSON_CONNECTION */
50386 e = 0;
50387
50388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
50389
50390 if (e) {
50391 log_packet_detailed("'obsoleted_by' field error detected");
50392 }
50393
50394#ifdef FREECIV_JSON_CONNECTION
50395 field_addr.name = "converted_to";
50396#endif /* FREECIV_JSON_CONNECTION */
50397 e = 0;
50398
50399 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
50400
50401 if (e) {
50402 log_packet_detailed("'converted_to' field error detected");
50403 }
50404
50405#ifdef FREECIV_JSON_CONNECTION
50406 field_addr.name = "convert_time";
50407#endif /* FREECIV_JSON_CONNECTION */
50408 e = 0;
50409
50410 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
50411
50412 if (e) {
50413 log_packet_detailed("'convert_time' field error detected");
50414 }
50415
50416#ifdef FREECIV_JSON_CONNECTION
50417 field_addr.name = "fuel";
50418#endif /* FREECIV_JSON_CONNECTION */
50419 e = 0;
50420
50421 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
50422
50423 if (e) {
50424 log_packet_detailed("'fuel' field error detected");
50425 }
50426
50427#ifdef FREECIV_JSON_CONNECTION
50428 field_addr.name = "happy_cost";
50429#endif /* FREECIV_JSON_CONNECTION */
50430 e = 0;
50431
50432 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
50433
50434 if (e) {
50435 log_packet_detailed("'happy_cost' field error detected");
50436 }
50437
50438#ifdef FREECIV_JSON_CONNECTION
50439 field_addr.name = "upkeep";
50440#endif /* FREECIV_JSON_CONNECTION */
50441 e = 0;
50442
50443 {
50444 int i;
50445
50446#ifdef FREECIV_JSON_CONNECTION
50447 /* Create the array. */
50448 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
50449
50450 /* Enter array. */
50451 field_addr.sub_location = plocation_elem_new(0);
50452#endif /* FREECIV_JSON_CONNECTION */
50453
50454 for (i = 0; i < O_LAST; i++) {
50455#ifdef FREECIV_JSON_CONNECTION
50456 /* Next array element. */
50457 field_addr.sub_location->number = i;
50458#endif /* FREECIV_JSON_CONNECTION */
50459
50460 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
50461 }
50462
50463#ifdef FREECIV_JSON_CONNECTION
50464 /* Exit array. */
50465 FC_FREE(field_addr.sub_location);
50466#endif /* FREECIV_JSON_CONNECTION */
50467 }
50468
50469 if (e) {
50470 log_packet_detailed("'upkeep' field error detected");
50471 }
50472
50473#ifdef FREECIV_JSON_CONNECTION
50474 field_addr.name = "paratroopers_range";
50475#endif /* FREECIV_JSON_CONNECTION */
50476 e = 0;
50477
50478 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
50479
50480 if (e) {
50481 log_packet_detailed("'paratroopers_range' field error detected");
50482 }
50483
50484#ifdef FREECIV_JSON_CONNECTION
50485 field_addr.name = "veteran_levels";
50486#endif /* FREECIV_JSON_CONNECTION */
50487 e = 0;
50488
50489 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
50490
50491 if (e) {
50492 log_packet_detailed("'veteran_levels' field error detected");
50493 }
50494
50495#ifdef FREECIV_JSON_CONNECTION
50496 field_addr.name = "veteran_name";
50497#endif /* FREECIV_JSON_CONNECTION */
50498 e = 0;
50499
50500 {
50501 int i;
50502
50503#ifdef FREECIV_JSON_CONNECTION
50504 /* Create the array. */
50505 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50506
50507 /* Enter array. */
50508 field_addr.sub_location = plocation_elem_new(0);
50509#endif /* FREECIV_JSON_CONNECTION */
50510
50511 for (i = 0; i < real_packet->veteran_levels; i++) {
50512#ifdef FREECIV_JSON_CONNECTION
50513 /* Next array element. */
50514 field_addr.sub_location->number = i;
50515#endif /* FREECIV_JSON_CONNECTION */
50516
50517 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
50518 }
50519
50520#ifdef FREECIV_JSON_CONNECTION
50521 /* Exit array. */
50522 FC_FREE(field_addr.sub_location);
50523#endif /* FREECIV_JSON_CONNECTION */
50524 }
50525
50526 if (e) {
50527 log_packet_detailed("'veteran_name' field error detected");
50528 }
50529
50530#ifdef FREECIV_JSON_CONNECTION
50531 field_addr.name = "power_fact";
50532#endif /* FREECIV_JSON_CONNECTION */
50533 e = 0;
50534
50535 {
50536 int i;
50537
50538#ifdef FREECIV_JSON_CONNECTION
50539 /* Create the array. */
50540 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50541
50542 /* Enter array. */
50543 field_addr.sub_location = plocation_elem_new(0);
50544#endif /* FREECIV_JSON_CONNECTION */
50545
50546 for (i = 0; i < real_packet->veteran_levels; i++) {
50547#ifdef FREECIV_JSON_CONNECTION
50548 /* Next array element. */
50549 field_addr.sub_location->number = i;
50550#endif /* FREECIV_JSON_CONNECTION */
50551
50552 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
50553 }
50554
50555#ifdef FREECIV_JSON_CONNECTION
50556 /* Exit array. */
50557 FC_FREE(field_addr.sub_location);
50558#endif /* FREECIV_JSON_CONNECTION */
50559 }
50560
50561 if (e) {
50562 log_packet_detailed("'power_fact' field error detected");
50563 }
50564
50565#ifdef FREECIV_JSON_CONNECTION
50566 field_addr.name = "move_bonus";
50567#endif /* FREECIV_JSON_CONNECTION */
50568 e = 0;
50569
50570 {
50571 int i;
50572
50573#ifdef FREECIV_JSON_CONNECTION
50574 /* Create the array. */
50575 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50576
50577 /* Enter array. */
50578 field_addr.sub_location = plocation_elem_new(0);
50579#endif /* FREECIV_JSON_CONNECTION */
50580
50581 for (i = 0; i < real_packet->veteran_levels; i++) {
50582#ifdef FREECIV_JSON_CONNECTION
50583 /* Next array element. */
50584 field_addr.sub_location->number = i;
50585#endif /* FREECIV_JSON_CONNECTION */
50586
50587 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
50588 }
50589
50590#ifdef FREECIV_JSON_CONNECTION
50591 /* Exit array. */
50592 FC_FREE(field_addr.sub_location);
50593#endif /* FREECIV_JSON_CONNECTION */
50594 }
50595
50596 if (e) {
50597 log_packet_detailed("'move_bonus' field error detected");
50598 }
50599
50600#ifdef FREECIV_JSON_CONNECTION
50601 field_addr.name = "base_raise_chance";
50602#endif /* FREECIV_JSON_CONNECTION */
50603 e = 0;
50604
50605 {
50606 int i;
50607
50608#ifdef FREECIV_JSON_CONNECTION
50609 /* Create the array. */
50610 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50611
50612 /* Enter array. */
50613 field_addr.sub_location = plocation_elem_new(0);
50614#endif /* FREECIV_JSON_CONNECTION */
50615
50616 for (i = 0; i < real_packet->veteran_levels; i++) {
50617#ifdef FREECIV_JSON_CONNECTION
50618 /* Next array element. */
50619 field_addr.sub_location->number = i;
50620#endif /* FREECIV_JSON_CONNECTION */
50621
50622 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
50623 }
50624
50625#ifdef FREECIV_JSON_CONNECTION
50626 /* Exit array. */
50627 FC_FREE(field_addr.sub_location);
50628#endif /* FREECIV_JSON_CONNECTION */
50629 }
50630
50631 if (e) {
50632 log_packet_detailed("'base_raise_chance' field error detected");
50633 }
50634
50635#ifdef FREECIV_JSON_CONNECTION
50636 field_addr.name = "work_raise_chance";
50637#endif /* FREECIV_JSON_CONNECTION */
50638 e = 0;
50639
50640 {
50641 int i;
50642
50643#ifdef FREECIV_JSON_CONNECTION
50644 /* Create the array. */
50645 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50646
50647 /* Enter array. */
50648 field_addr.sub_location = plocation_elem_new(0);
50649#endif /* FREECIV_JSON_CONNECTION */
50650
50651 for (i = 0; i < real_packet->veteran_levels; i++) {
50652#ifdef FREECIV_JSON_CONNECTION
50653 /* Next array element. */
50654 field_addr.sub_location->number = i;
50655#endif /* FREECIV_JSON_CONNECTION */
50656
50657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
50658 }
50659
50660#ifdef FREECIV_JSON_CONNECTION
50661 /* Exit array. */
50662 FC_FREE(field_addr.sub_location);
50663#endif /* FREECIV_JSON_CONNECTION */
50664 }
50665
50666 if (e) {
50667 log_packet_detailed("'work_raise_chance' field error detected");
50668 }
50669
50670#ifdef FREECIV_JSON_CONNECTION
50671 field_addr.name = "bombard_rate";
50672#endif /* FREECIV_JSON_CONNECTION */
50673 e = 0;
50674
50675 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
50676
50677 if (e) {
50678 log_packet_detailed("'bombard_rate' field error detected");
50679 }
50680
50681#ifdef FREECIV_JSON_CONNECTION
50682 field_addr.name = "city_size";
50683#endif /* FREECIV_JSON_CONNECTION */
50684 e = 0;
50685
50686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
50687
50688 if (e) {
50689 log_packet_detailed("'city_size' field error detected");
50690 }
50691
50692#ifdef FREECIV_JSON_CONNECTION
50693 field_addr.name = "city_slots";
50694#endif /* FREECIV_JSON_CONNECTION */
50695 e = 0;
50696
50697 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
50698
50699 if (e) {
50700 log_packet_detailed("'city_slots' field error detected");
50701 }
50702
50703#ifdef FREECIV_JSON_CONNECTION
50704 field_addr.name = "tp_defense";
50705#endif /* FREECIV_JSON_CONNECTION */
50706 e = 0;
50707
50708 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
50709
50710 if (e) {
50711 log_packet_detailed("'tp_defense' field error detected");
50712 }
50713
50714#ifdef FREECIV_JSON_CONNECTION
50715 field_addr.name = "cargo";
50716#endif /* FREECIV_JSON_CONNECTION */
50717 e = 0;
50718
50719 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
50720
50721 if (e) {
50722 log_packet_detailed("'cargo' field error detected");
50723 }
50724
50725#ifdef FREECIV_JSON_CONNECTION
50726 field_addr.name = "targets";
50727#endif /* FREECIV_JSON_CONNECTION */
50728 e = 0;
50729
50730 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
50731
50732 if (e) {
50733 log_packet_detailed("'targets' field error detected");
50734 }
50735
50736#ifdef FREECIV_JSON_CONNECTION
50737 field_addr.name = "embarks";
50738#endif /* FREECIV_JSON_CONNECTION */
50739 e = 0;
50740
50741 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
50742
50743 if (e) {
50744 log_packet_detailed("'embarks' field error detected");
50745 }
50746
50747#ifdef FREECIV_JSON_CONNECTION
50748 field_addr.name = "disembarks";
50749#endif /* FREECIV_JSON_CONNECTION */
50750 e = 0;
50751
50752 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
50753
50754 if (e) {
50755 log_packet_detailed("'disembarks' field error detected");
50756 }
50757
50758#ifdef FREECIV_JSON_CONNECTION
50759 field_addr.name = "vlayer";
50760#endif /* FREECIV_JSON_CONNECTION */
50761 e = 0;
50762
50763 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
50764
50765 if (e) {
50766 log_packet_detailed("'vlayer' field error detected");
50767 }
50768
50769#ifdef FREECIV_JSON_CONNECTION
50770 field_addr.name = "helptext";
50771#endif /* FREECIV_JSON_CONNECTION */
50772 e = 0;
50773
50774 if (!real_packet->helptext) {
50775 /* Transmit null as empty */
50776 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
50777 } else {
50778 int i;
50779
50781 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
50782
50783#ifdef FREECIV_JSON_CONNECTION
50784 /* Enter array. */
50785 field_addr.sub_location = plocation_elem_new(0);
50786#endif /* FREECIV_JSON_CONNECTION */
50787
50788 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
50789#ifdef FREECIV_JSON_CONNECTION
50790 /* Next array element. */
50791 field_addr.sub_location->number = i;
50792#endif /* FREECIV_JSON_CONNECTION */
50793
50794 {
50795 const char *pstr = strvec_get(real_packet->helptext, i);
50796
50797 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
50798 }
50799 }
50800
50801#ifdef FREECIV_JSON_CONNECTION
50802 /* Exit array. */
50803 FC_FREE(field_addr.sub_location);
50804#endif /* FREECIV_JSON_CONNECTION */
50805 }
50806
50807 if (e) {
50808 log_packet_detailed("'helptext' field error detected");
50809 }
50810
50811#ifdef FREECIV_JSON_CONNECTION
50812 field_addr.name = "flags";
50813#endif /* FREECIV_JSON_CONNECTION */
50814 e = 0;
50815
50816 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50817
50818 if (e) {
50819 log_packet_detailed("'flags' field error detected");
50820 }
50821
50822#ifdef FREECIV_JSON_CONNECTION
50823 field_addr.name = "roles";
50824#endif /* FREECIV_JSON_CONNECTION */
50825 e = 0;
50826
50827 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50828
50829 if (e) {
50830 log_packet_detailed("'roles' field error detected");
50831 }
50832
50833#ifdef FREECIV_JSON_CONNECTION
50834 field_addr.name = "worker";
50835#endif /* FREECIV_JSON_CONNECTION */
50836 e = 0;
50837
50838 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->worker);
50839
50840 if (e) {
50841 log_packet_detailed("'worker' field error detected");
50842 }
50843#endif /* FREECIV_DELTA_PROTOCOL */
50844
50846}
50847
50849{
50850 if (!pc->used) {
50851 log_error("WARNING: trying to send data to the closed connection %s",
50853 return -1;
50854 }
50855 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT].packet != nullptr, -1,
50856 "Handler for PACKET_RULESET_UNIT not installed");
50857 return pc->phs.handlers->send[PACKET_RULESET_UNIT].packet(pc, packet);
50858}
50859
50860void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
50861{
50862 conn_list_iterate(dest, pconn) {
50865}
50866
50868{
50869 memset(packet, 0, sizeof(*packet));
50870}
50871
50872#define free_packet_ruleset_unit_bonus(_packet) (void) 0
50873#define destroy_packet_ruleset_unit_bonus free
50874
50875#ifdef FREECIV_DELTA_PROTOCOL
50876#define hash_packet_ruleset_unit_bonus_100 hash_const
50877#define cmp_packet_ruleset_unit_bonus_100 cmp_const
50879#endif /* FREECIV_DELTA_PROTOCOL */
50880
50882{
50883#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_bonus(_packet)
50885
50886#ifdef FREECIV_JSON_CONNECTION
50887 struct plocation field_addr;
50888 {
50889 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
50892 }
50893#endif /* FREECIV_JSON_CONNECTION */
50894
50895 log_packet_detailed("packet_ruleset_unit_bonus_100: got info about ()");
50896
50897#ifdef FREECIV_DELTA_PROTOCOL
50900 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_BONUS;
50901
50902 if (nullptr == *hash) {
50904 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
50905 }
50906
50907 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
50908 *real_packet = *old;
50909 } else {
50910 /* packet is already initialized empty */
50911 log_packet_detailed(" no old info");
50912 }
50913
50914#ifdef FREECIV_JSON_CONNECTION
50915 field_addr.name = "fields";
50916#endif /* FREECIV_JSON_CONNECTION */
50917 DIO_BV_GET(&din, &field_addr, fields);
50918
50919 if (BV_ISSET(fields, 0)) {
50920 log_packet_detailed(" got field 'unit'");
50921
50922#ifdef FREECIV_JSON_CONNECTION
50923 field_addr.name = "unit";
50924#endif /* FREECIV_JSON_CONNECTION */
50925
50926 {
50927 int readin;
50928
50929 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
50931 }
50932 real_packet->unit = readin;
50933 }
50934 }
50935
50936 if (BV_ISSET(fields, 1)) {
50937 log_packet_detailed(" got field 'flag'");
50938
50939#ifdef FREECIV_JSON_CONNECTION
50940 field_addr.name = "flag";
50941#endif /* FREECIV_JSON_CONNECTION */
50942
50943 {
50944 int readin;
50945
50946 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
50948 }
50949 real_packet->flag = readin;
50950 }
50951 }
50952
50953 if (BV_ISSET(fields, 2)) {
50954 log_packet_detailed(" got field 'type'");
50955
50956#ifdef FREECIV_JSON_CONNECTION
50957 field_addr.name = "type";
50958#endif /* FREECIV_JSON_CONNECTION */
50959
50960 {
50961 int readin;
50962
50963 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
50965 }
50966 real_packet->type = readin;
50967 }
50968 }
50969
50970 if (BV_ISSET(fields, 3)) {
50971 log_packet_detailed(" got field 'value'");
50972
50973#ifdef FREECIV_JSON_CONNECTION
50974 field_addr.name = "value";
50975#endif /* FREECIV_JSON_CONNECTION */
50976
50977 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
50979 }
50980 }
50981
50982 real_packet->quiet = BV_ISSET(fields, 4);
50983
50984 if (nullptr == old) {
50985 old = fc_malloc(sizeof(*old));
50987 *old = *real_packet;
50989 } else {
50990 *old = *real_packet;
50991 }
50992
50993#else /* FREECIV_DELTA_PROTOCOL */
50994#ifdef FREECIV_JSON_CONNECTION
50995 field_addr.name = "unit";
50996#endif /* FREECIV_JSON_CONNECTION */
50997
50998 {
50999 int readin;
51000
51001 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
51003 }
51004 real_packet->unit = readin;
51005 }
51006
51007#ifdef FREECIV_JSON_CONNECTION
51008 field_addr.name = "flag";
51009#endif /* FREECIV_JSON_CONNECTION */
51010
51011 {
51012 int readin;
51013
51014 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51016 }
51017 real_packet->flag = readin;
51018 }
51019
51020#ifdef FREECIV_JSON_CONNECTION
51021 field_addr.name = "type";
51022#endif /* FREECIV_JSON_CONNECTION */
51023
51024 {
51025 int readin;
51026
51027 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51029 }
51030 real_packet->type = readin;
51031 }
51032
51033#ifdef FREECIV_JSON_CONNECTION
51034 field_addr.name = "value";
51035#endif /* FREECIV_JSON_CONNECTION */
51036
51037 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
51039 }
51040
51041#ifdef FREECIV_JSON_CONNECTION
51042 field_addr.name = "quiet";
51043#endif /* FREECIV_JSON_CONNECTION */
51044
51045 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
51047 }
51048#endif /* FREECIV_DELTA_PROTOCOL */
51049
51051#undef FREE_PACKET_STRUCT
51052}
51053
51055{
51056 const struct packet_ruleset_unit_bonus *real_packet = packet;
51057 int e;
51059
51060 log_packet_detailed("packet_ruleset_unit_bonus_100: sending info about ()");
51061
51062#ifdef FREECIV_DELTA_PROTOCOL
51065 bool differ;
51066 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_BONUS;
51067
51068 if (nullptr == *hash) {
51070 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
51071 }
51072 BV_CLR_ALL(fields);
51073
51074 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51075 old = fc_malloc(sizeof(*old));
51076 /* temporary bitcopy just to insert correctly */
51077 *old = *real_packet;
51080 }
51081
51082 differ = (old->unit != real_packet->unit);
51083 if (differ) {
51084 BV_SET(fields, 0);
51085 }
51086
51087 differ = (old->flag != real_packet->flag);
51088 if (differ) {
51089 BV_SET(fields, 1);
51090 }
51091
51092 differ = (old->type != real_packet->type);
51093 if (differ) {
51094 BV_SET(fields, 2);
51095 }
51096
51097 differ = (old->value != real_packet->value);
51098 if (differ) {
51099 BV_SET(fields, 3);
51100 }
51101
51102 /* folded into head */
51103 if (real_packet->quiet) {
51104 BV_SET(fields, 4);
51105 }
51106#endif /* FREECIV_DELTA_PROTOCOL */
51107
51108#ifdef FREECIV_JSON_CONNECTION
51109 struct plocation field_addr;
51110 {
51111 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51114 }
51115#endif /* FREECIV_JSON_CONNECTION */
51116
51117#ifdef FREECIV_DELTA_PROTOCOL
51118#ifdef FREECIV_JSON_CONNECTION
51119 field_addr.name = "fields";
51120#endif /* FREECIV_JSON_CONNECTION */
51121 e = 0;
51122 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51123 if (e) {
51124 log_packet_detailed("fields bitvector error detected");
51125 }
51126
51127 if (BV_ISSET(fields, 0)) {
51128 log_packet_detailed(" field 'unit' has changed");
51129
51130#ifdef FREECIV_JSON_CONNECTION
51131 field_addr.name = "unit";
51132#endif /* FREECIV_JSON_CONNECTION */
51133 e = 0;
51134
51135 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51136
51137 if (e) {
51138 log_packet_detailed("'unit' field error detected");
51139 }
51140 }
51141
51142 if (BV_ISSET(fields, 1)) {
51143 log_packet_detailed(" field 'flag' has changed");
51144
51145#ifdef FREECIV_JSON_CONNECTION
51146 field_addr.name = "flag";
51147#endif /* FREECIV_JSON_CONNECTION */
51148 e = 0;
51149
51150 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51151
51152 if (e) {
51153 log_packet_detailed("'flag' field error detected");
51154 }
51155 }
51156
51157 if (BV_ISSET(fields, 2)) {
51158 log_packet_detailed(" field 'type' has changed");
51159
51160#ifdef FREECIV_JSON_CONNECTION
51161 field_addr.name = "type";
51162#endif /* FREECIV_JSON_CONNECTION */
51163 e = 0;
51164
51165 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51166
51167 if (e) {
51168 log_packet_detailed("'type' field error detected");
51169 }
51170 }
51171
51172 if (BV_ISSET(fields, 3)) {
51173 log_packet_detailed(" field 'value' has changed");
51174
51175#ifdef FREECIV_JSON_CONNECTION
51176 field_addr.name = "value";
51177#endif /* FREECIV_JSON_CONNECTION */
51178 e = 0;
51179
51180 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51181
51182 if (e) {
51183 log_packet_detailed("'value' field error detected");
51184 }
51185 }
51186
51187 /* field 4 is folded into the header */
51188
51189 *old = *real_packet;
51190
51191#else /* FREECIV_DELTA_PROTOCOL */
51192#ifdef FREECIV_JSON_CONNECTION
51193 field_addr.name = "unit";
51194#endif /* FREECIV_JSON_CONNECTION */
51195 e = 0;
51196
51197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51198
51199 if (e) {
51200 log_packet_detailed("'unit' field error detected");
51201 }
51202
51203#ifdef FREECIV_JSON_CONNECTION
51204 field_addr.name = "flag";
51205#endif /* FREECIV_JSON_CONNECTION */
51206 e = 0;
51207
51208 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51209
51210 if (e) {
51211 log_packet_detailed("'flag' field error detected");
51212 }
51213
51214#ifdef FREECIV_JSON_CONNECTION
51215 field_addr.name = "type";
51216#endif /* FREECIV_JSON_CONNECTION */
51217 e = 0;
51218
51219 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51220
51221 if (e) {
51222 log_packet_detailed("'type' field error detected");
51223 }
51224
51225#ifdef FREECIV_JSON_CONNECTION
51226 field_addr.name = "value";
51227#endif /* FREECIV_JSON_CONNECTION */
51228 e = 0;
51229
51230 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51231
51232 if (e) {
51233 log_packet_detailed("'value' field error detected");
51234 }
51235
51236#ifdef FREECIV_JSON_CONNECTION
51237 field_addr.name = "quiet";
51238#endif /* FREECIV_JSON_CONNECTION */
51239 e = 0;
51240
51241 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
51242
51243 if (e) {
51244 log_packet_detailed("'quiet' field error detected");
51245 }
51246#endif /* FREECIV_DELTA_PROTOCOL */
51247
51249}
51250
51252{
51253 if (!pc->used) {
51254 log_error("WARNING: trying to send data to the closed connection %s",
51256 return -1;
51257 }
51258 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet != nullptr, -1,
51259 "Handler for PACKET_RULESET_UNIT_BONUS not installed");
51260 return pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet(pc, packet);
51261}
51262
51264{
51265 conn_list_iterate(dest, pconn) {
51268}
51269
51271{
51272 memset(packet, 0, sizeof(*packet));
51273}
51274
51275#define free_packet_ruleset_unit_flag(_packet) (void) 0
51276#define destroy_packet_ruleset_unit_flag free
51277
51278#ifdef FREECIV_DELTA_PROTOCOL
51279#define hash_packet_ruleset_unit_flag_100 hash_const
51280#define cmp_packet_ruleset_unit_flag_100 cmp_const
51282#endif /* FREECIV_DELTA_PROTOCOL */
51283
51285{
51286#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_flag(_packet)
51288
51289#ifdef FREECIV_JSON_CONNECTION
51290 struct plocation field_addr;
51291 {
51292 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51295 }
51296#endif /* FREECIV_JSON_CONNECTION */
51297
51298 log_packet_detailed("packet_ruleset_unit_flag_100: got info about ()");
51299
51300#ifdef FREECIV_DELTA_PROTOCOL
51303 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_FLAG;
51304
51305 if (nullptr == *hash) {
51307 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51308 }
51309
51310 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51311 *real_packet = *old;
51312 } else {
51313 /* packet is already initialized empty */
51314 log_packet_detailed(" no old info");
51315 }
51316
51317#ifdef FREECIV_JSON_CONNECTION
51318 field_addr.name = "fields";
51319#endif /* FREECIV_JSON_CONNECTION */
51320 DIO_BV_GET(&din, &field_addr, fields);
51321
51322 if (BV_ISSET(fields, 0)) {
51323 log_packet_detailed(" got field 'id'");
51324
51325#ifdef FREECIV_JSON_CONNECTION
51326 field_addr.name = "id";
51327#endif /* FREECIV_JSON_CONNECTION */
51328
51329 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51331 }
51332 }
51333
51334 if (BV_ISSET(fields, 1)) {
51335 log_packet_detailed(" got field 'name'");
51336
51337#ifdef FREECIV_JSON_CONNECTION
51338 field_addr.name = "name";
51339#endif /* FREECIV_JSON_CONNECTION */
51340
51341 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51343 }
51344 }
51345
51346 if (BV_ISSET(fields, 2)) {
51347 log_packet_detailed(" got field 'helptxt'");
51348
51349#ifdef FREECIV_JSON_CONNECTION
51350 field_addr.name = "helptxt";
51351#endif /* FREECIV_JSON_CONNECTION */
51352
51353 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51355 }
51356 }
51357
51358 if (nullptr == old) {
51359 old = fc_malloc(sizeof(*old));
51361 *old = *real_packet;
51363 } else {
51364 *old = *real_packet;
51365 }
51366
51367#else /* FREECIV_DELTA_PROTOCOL */
51368#ifdef FREECIV_JSON_CONNECTION
51369 field_addr.name = "id";
51370#endif /* FREECIV_JSON_CONNECTION */
51371
51372 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51374 }
51375
51376#ifdef FREECIV_JSON_CONNECTION
51377 field_addr.name = "name";
51378#endif /* FREECIV_JSON_CONNECTION */
51379
51380 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51382 }
51383
51384#ifdef FREECIV_JSON_CONNECTION
51385 field_addr.name = "helptxt";
51386#endif /* FREECIV_JSON_CONNECTION */
51387
51388 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51390 }
51391#endif /* FREECIV_DELTA_PROTOCOL */
51392
51394#undef FREE_PACKET_STRUCT
51395}
51396
51398{
51399 const struct packet_ruleset_unit_flag *real_packet = packet;
51400 int e;
51402
51403 log_packet_detailed("packet_ruleset_unit_flag_100: sending info about ()");
51404
51405#ifdef FREECIV_DELTA_PROTOCOL
51408 bool differ;
51409 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_FLAG;
51410
51411 if (nullptr == *hash) {
51413 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51414 }
51415 BV_CLR_ALL(fields);
51416
51417 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51418 old = fc_malloc(sizeof(*old));
51419 /* temporary bitcopy just to insert correctly */
51420 *old = *real_packet;
51423 }
51424
51425 differ = (old->id != real_packet->id);
51426 if (differ) {
51427 BV_SET(fields, 0);
51428 }
51429
51430 differ = (strcmp(old->name, real_packet->name) != 0);
51431 if (differ) {
51432 BV_SET(fields, 1);
51433 }
51434
51435 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51436 if (differ) {
51437 BV_SET(fields, 2);
51438 }
51439#endif /* FREECIV_DELTA_PROTOCOL */
51440
51441#ifdef FREECIV_JSON_CONNECTION
51442 struct plocation field_addr;
51443 {
51444 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51447 }
51448#endif /* FREECIV_JSON_CONNECTION */
51449
51450#ifdef FREECIV_DELTA_PROTOCOL
51451#ifdef FREECIV_JSON_CONNECTION
51452 field_addr.name = "fields";
51453#endif /* FREECIV_JSON_CONNECTION */
51454 e = 0;
51455 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51456 if (e) {
51457 log_packet_detailed("fields bitvector error detected");
51458 }
51459
51460 if (BV_ISSET(fields, 0)) {
51461 log_packet_detailed(" field 'id' has changed");
51462
51463#ifdef FREECIV_JSON_CONNECTION
51464 field_addr.name = "id";
51465#endif /* FREECIV_JSON_CONNECTION */
51466 e = 0;
51467
51468 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51469
51470 if (e) {
51471 log_packet_detailed("'id' field error detected");
51472 }
51473 }
51474
51475 if (BV_ISSET(fields, 1)) {
51476 log_packet_detailed(" field 'name' has changed");
51477
51478#ifdef FREECIV_JSON_CONNECTION
51479 field_addr.name = "name";
51480#endif /* FREECIV_JSON_CONNECTION */
51481 e = 0;
51482
51483 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51484
51485 if (e) {
51486 log_packet_detailed("'name' field error detected");
51487 }
51488 }
51489
51490 if (BV_ISSET(fields, 2)) {
51491 log_packet_detailed(" field 'helptxt' has changed");
51492
51493#ifdef FREECIV_JSON_CONNECTION
51494 field_addr.name = "helptxt";
51495#endif /* FREECIV_JSON_CONNECTION */
51496 e = 0;
51497
51498 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51499
51500 if (e) {
51501 log_packet_detailed("'helptxt' field error detected");
51502 }
51503 }
51504
51505 *old = *real_packet;
51506
51507#else /* FREECIV_DELTA_PROTOCOL */
51508#ifdef FREECIV_JSON_CONNECTION
51509 field_addr.name = "id";
51510#endif /* FREECIV_JSON_CONNECTION */
51511 e = 0;
51512
51513 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51514
51515 if (e) {
51516 log_packet_detailed("'id' field error detected");
51517 }
51518
51519#ifdef FREECIV_JSON_CONNECTION
51520 field_addr.name = "name";
51521#endif /* FREECIV_JSON_CONNECTION */
51522 e = 0;
51523
51524 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51525
51526 if (e) {
51527 log_packet_detailed("'name' field error detected");
51528 }
51529
51530#ifdef FREECIV_JSON_CONNECTION
51531 field_addr.name = "helptxt";
51532#endif /* FREECIV_JSON_CONNECTION */
51533 e = 0;
51534
51535 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51536
51537 if (e) {
51538 log_packet_detailed("'helptxt' field error detected");
51539 }
51540#endif /* FREECIV_DELTA_PROTOCOL */
51541
51543}
51544
51546{
51547 if (!pc->used) {
51548 log_error("WARNING: trying to send data to the closed connection %s",
51550 return -1;
51551 }
51552 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet != nullptr, -1,
51553 "Handler for PACKET_RULESET_UNIT_FLAG not installed");
51554 return pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet(pc, packet);
51555}
51556
51558{
51559 conn_list_iterate(dest, pconn) {
51562}
51563
51565{
51566 memset(packet, 0, sizeof(*packet));
51567}
51568
51569#define free_packet_ruleset_unit_class_flag(_packet) (void) 0
51570#define destroy_packet_ruleset_unit_class_flag free
51571
51572#ifdef FREECIV_DELTA_PROTOCOL
51573#define hash_packet_ruleset_unit_class_flag_100 hash_const
51574#define cmp_packet_ruleset_unit_class_flag_100 cmp_const
51576#endif /* FREECIV_DELTA_PROTOCOL */
51577
51579{
51580#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class_flag(_packet)
51582
51583#ifdef FREECIV_JSON_CONNECTION
51584 struct plocation field_addr;
51585 {
51586 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51589 }
51590#endif /* FREECIV_JSON_CONNECTION */
51591
51592 log_packet_detailed("packet_ruleset_unit_class_flag_100: got info about ()");
51593
51594#ifdef FREECIV_DELTA_PROTOCOL
51597 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS_FLAG;
51598
51599 if (nullptr == *hash) {
51601 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51602 }
51603
51604 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51605 *real_packet = *old;
51606 } else {
51607 /* packet is already initialized empty */
51608 log_packet_detailed(" no old info");
51609 }
51610
51611#ifdef FREECIV_JSON_CONNECTION
51612 field_addr.name = "fields";
51613#endif /* FREECIV_JSON_CONNECTION */
51614 DIO_BV_GET(&din, &field_addr, fields);
51615
51616 if (BV_ISSET(fields, 0)) {
51617 log_packet_detailed(" got field 'id'");
51618
51619#ifdef FREECIV_JSON_CONNECTION
51620 field_addr.name = "id";
51621#endif /* FREECIV_JSON_CONNECTION */
51622
51623 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51625 }
51626 }
51627
51628 if (BV_ISSET(fields, 1)) {
51629 log_packet_detailed(" got field 'name'");
51630
51631#ifdef FREECIV_JSON_CONNECTION
51632 field_addr.name = "name";
51633#endif /* FREECIV_JSON_CONNECTION */
51634
51635 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51637 }
51638 }
51639
51640 if (BV_ISSET(fields, 2)) {
51641 log_packet_detailed(" got field 'helptxt'");
51642
51643#ifdef FREECIV_JSON_CONNECTION
51644 field_addr.name = "helptxt";
51645#endif /* FREECIV_JSON_CONNECTION */
51646
51647 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51649 }
51650 }
51651
51652 if (nullptr == old) {
51653 old = fc_malloc(sizeof(*old));
51655 *old = *real_packet;
51657 } else {
51658 *old = *real_packet;
51659 }
51660
51661#else /* FREECIV_DELTA_PROTOCOL */
51662#ifdef FREECIV_JSON_CONNECTION
51663 field_addr.name = "id";
51664#endif /* FREECIV_JSON_CONNECTION */
51665
51666 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51668 }
51669
51670#ifdef FREECIV_JSON_CONNECTION
51671 field_addr.name = "name";
51672#endif /* FREECIV_JSON_CONNECTION */
51673
51674 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51676 }
51677
51678#ifdef FREECIV_JSON_CONNECTION
51679 field_addr.name = "helptxt";
51680#endif /* FREECIV_JSON_CONNECTION */
51681
51682 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51684 }
51685#endif /* FREECIV_DELTA_PROTOCOL */
51686
51688#undef FREE_PACKET_STRUCT
51689}
51690
51692{
51693 const struct packet_ruleset_unit_class_flag *real_packet = packet;
51694 int e;
51696
51697 log_packet_detailed("packet_ruleset_unit_class_flag_100: sending info about ()");
51698
51699#ifdef FREECIV_DELTA_PROTOCOL
51702 bool differ;
51703 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS_FLAG;
51704
51705 if (nullptr == *hash) {
51707 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51708 }
51709 BV_CLR_ALL(fields);
51710
51711 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51712 old = fc_malloc(sizeof(*old));
51713 /* temporary bitcopy just to insert correctly */
51714 *old = *real_packet;
51717 }
51718
51719 differ = (old->id != real_packet->id);
51720 if (differ) {
51721 BV_SET(fields, 0);
51722 }
51723
51724 differ = (strcmp(old->name, real_packet->name) != 0);
51725 if (differ) {
51726 BV_SET(fields, 1);
51727 }
51728
51729 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51730 if (differ) {
51731 BV_SET(fields, 2);
51732 }
51733#endif /* FREECIV_DELTA_PROTOCOL */
51734
51735#ifdef FREECIV_JSON_CONNECTION
51736 struct plocation field_addr;
51737 {
51738 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51741 }
51742#endif /* FREECIV_JSON_CONNECTION */
51743
51744#ifdef FREECIV_DELTA_PROTOCOL
51745#ifdef FREECIV_JSON_CONNECTION
51746 field_addr.name = "fields";
51747#endif /* FREECIV_JSON_CONNECTION */
51748 e = 0;
51749 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51750 if (e) {
51751 log_packet_detailed("fields bitvector error detected");
51752 }
51753
51754 if (BV_ISSET(fields, 0)) {
51755 log_packet_detailed(" field 'id' has changed");
51756
51757#ifdef FREECIV_JSON_CONNECTION
51758 field_addr.name = "id";
51759#endif /* FREECIV_JSON_CONNECTION */
51760 e = 0;
51761
51762 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51763
51764 if (e) {
51765 log_packet_detailed("'id' field error detected");
51766 }
51767 }
51768
51769 if (BV_ISSET(fields, 1)) {
51770 log_packet_detailed(" field 'name' has changed");
51771
51772#ifdef FREECIV_JSON_CONNECTION
51773 field_addr.name = "name";
51774#endif /* FREECIV_JSON_CONNECTION */
51775 e = 0;
51776
51777 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51778
51779 if (e) {
51780 log_packet_detailed("'name' field error detected");
51781 }
51782 }
51783
51784 if (BV_ISSET(fields, 2)) {
51785 log_packet_detailed(" field 'helptxt' has changed");
51786
51787#ifdef FREECIV_JSON_CONNECTION
51788 field_addr.name = "helptxt";
51789#endif /* FREECIV_JSON_CONNECTION */
51790 e = 0;
51791
51792 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51793
51794 if (e) {
51795 log_packet_detailed("'helptxt' field error detected");
51796 }
51797 }
51798
51799 *old = *real_packet;
51800
51801#else /* FREECIV_DELTA_PROTOCOL */
51802#ifdef FREECIV_JSON_CONNECTION
51803 field_addr.name = "id";
51804#endif /* FREECIV_JSON_CONNECTION */
51805 e = 0;
51806
51807 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51808
51809 if (e) {
51810 log_packet_detailed("'id' field error detected");
51811 }
51812
51813#ifdef FREECIV_JSON_CONNECTION
51814 field_addr.name = "name";
51815#endif /* FREECIV_JSON_CONNECTION */
51816 e = 0;
51817
51818 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51819
51820 if (e) {
51821 log_packet_detailed("'name' field error detected");
51822 }
51823
51824#ifdef FREECIV_JSON_CONNECTION
51825 field_addr.name = "helptxt";
51826#endif /* FREECIV_JSON_CONNECTION */
51827 e = 0;
51828
51829 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51830
51831 if (e) {
51832 log_packet_detailed("'helptxt' field error detected");
51833 }
51834#endif /* FREECIV_DELTA_PROTOCOL */
51835
51837}
51838
51840{
51841 if (!pc->used) {
51842 log_error("WARNING: trying to send data to the closed connection %s",
51844 return -1;
51845 }
51846 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet != nullptr, -1,
51847 "Handler for PACKET_RULESET_UNIT_CLASS_FLAG not installed");
51848 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet(pc, packet);
51849}
51850
51857
51858static inline void init_packet_ruleset_game(struct packet_ruleset_game *packet)
51859{
51860 memset(packet, 0, sizeof(*packet));
51861}
51862
51863#define free_packet_ruleset_game(_packet) (void) 0
51864#define destroy_packet_ruleset_game free
51865
51866#ifdef FREECIV_DELTA_PROTOCOL
51867#define hash_packet_ruleset_game_100 hash_const
51868#define cmp_packet_ruleset_game_100 cmp_const
51870#endif /* FREECIV_DELTA_PROTOCOL */
51871
51873{
51874#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_game(_packet)
51876
51877#ifdef FREECIV_JSON_CONNECTION
51878 struct plocation field_addr;
51879 {
51880 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51883 }
51884#endif /* FREECIV_JSON_CONNECTION */
51885
51886 log_packet_detailed("packet_ruleset_game_100: got info about ()");
51887
51888#ifdef FREECIV_DELTA_PROTOCOL
51890 struct packet_ruleset_game *old;
51891 struct genhash **hash = pc->phs.received + PACKET_RULESET_GAME;
51892
51893 if (nullptr == *hash) {
51895 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
51896 }
51897
51898 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51899 *real_packet = *old;
51900 } else {
51901 /* packet is already initialized empty */
51902 log_packet_detailed(" no old info");
51903 }
51904
51905#ifdef FREECIV_JSON_CONNECTION
51906 field_addr.name = "fields";
51907#endif /* FREECIV_JSON_CONNECTION */
51908 DIO_BV_GET(&din, &field_addr, fields);
51909
51910 if (BV_ISSET(fields, 0)) {
51911 log_packet_detailed(" got field 'default_specialist'");
51912
51913#ifdef FREECIV_JSON_CONNECTION
51914 field_addr.name = "default_specialist";
51915#endif /* FREECIV_JSON_CONNECTION */
51916
51917 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
51919 }
51920 }
51921
51922 if (BV_ISSET(fields, 1)) {
51923 log_packet_detailed(" got field 'global_init_techs_count'");
51924
51925#ifdef FREECIV_JSON_CONNECTION
51926 field_addr.name = "global_init_techs_count";
51927#endif /* FREECIV_JSON_CONNECTION */
51928
51929 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
51930 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
51931 }
51932 }
51933
51934 if (BV_ISSET(fields, 2)) {
51935 log_packet_detailed(" got field 'global_init_techs'");
51936
51937#ifdef FREECIV_JSON_CONNECTION
51938 field_addr.name = "global_init_techs";
51939#endif /* FREECIV_JSON_CONNECTION */
51940
51941 {
51942 int i;
51943
51944 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
51945 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
51946 }
51947
51948#ifdef FREECIV_JSON_CONNECTION
51949 /* Enter array. */
51950 field_addr.sub_location = plocation_elem_new(0);
51951#endif /* FREECIV_JSON_CONNECTION */
51952
51953 for (i = 0; i < real_packet->global_init_techs_count; i++) {
51954#ifdef FREECIV_JSON_CONNECTION
51955 /* Next array element */
51956 field_addr.sub_location->number = i;
51957#endif /* FREECIV_JSON_CONNECTION */
51958
51959 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
51960 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
51961 }
51962 }
51963
51964#ifdef FREECIV_JSON_CONNECTION
51965 /* Exit array. */
51966 FC_FREE(field_addr.sub_location);
51967#endif /* FREECIV_JSON_CONNECTION */
51968 }
51969 }
51970
51971 if (BV_ISSET(fields, 3)) {
51972 log_packet_detailed(" got field 'global_init_buildings_count'");
51973
51974#ifdef FREECIV_JSON_CONNECTION
51975 field_addr.name = "global_init_buildings_count";
51976#endif /* FREECIV_JSON_CONNECTION */
51977
51978 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
51979 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
51980 }
51981 }
51982
51983 if (BV_ISSET(fields, 4)) {
51984 log_packet_detailed(" got field 'global_init_buildings'");
51985
51986#ifdef FREECIV_JSON_CONNECTION
51987 field_addr.name = "global_init_buildings";
51988#endif /* FREECIV_JSON_CONNECTION */
51989
51990 {
51991 int i;
51992
51993 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
51994 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
51995 }
51996
51997#ifdef FREECIV_JSON_CONNECTION
51998 /* Enter array. */
51999 field_addr.sub_location = plocation_elem_new(0);
52000#endif /* FREECIV_JSON_CONNECTION */
52001
52002 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52003#ifdef FREECIV_JSON_CONNECTION
52004 /* Next array element */
52005 field_addr.sub_location->number = i;
52006#endif /* FREECIV_JSON_CONNECTION */
52007
52008 {
52009 int readin;
52010
52011 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52012 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52013 }
52014 real_packet->global_init_buildings[i] = readin;
52015 }
52016 }
52017
52018#ifdef FREECIV_JSON_CONNECTION
52019 /* Exit array. */
52020 FC_FREE(field_addr.sub_location);
52021#endif /* FREECIV_JSON_CONNECTION */
52022 }
52023 }
52024
52025 if (BV_ISSET(fields, 5)) {
52026 log_packet_detailed(" got field 'veteran_levels'");
52027
52028#ifdef FREECIV_JSON_CONNECTION
52029 field_addr.name = "veteran_levels";
52030#endif /* FREECIV_JSON_CONNECTION */
52031
52032 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52033 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52034 }
52035 }
52036
52037 if (BV_ISSET(fields, 6)) {
52038 log_packet_detailed(" got field 'veteran_name'");
52039
52040#ifdef FREECIV_JSON_CONNECTION
52041 field_addr.name = "veteran_name";
52042#endif /* FREECIV_JSON_CONNECTION */
52043
52044 {
52045 int i;
52046
52047 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52048 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52049 }
52050
52051#ifdef FREECIV_JSON_CONNECTION
52052 /* Enter array. */
52053 field_addr.sub_location = plocation_elem_new(0);
52054#endif /* FREECIV_JSON_CONNECTION */
52055
52056 for (i = 0; i < real_packet->veteran_levels; i++) {
52057#ifdef FREECIV_JSON_CONNECTION
52058 /* Next array element */
52059 field_addr.sub_location->number = i;
52060#endif /* FREECIV_JSON_CONNECTION */
52061
52062 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52063 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52064 }
52065 }
52066
52067#ifdef FREECIV_JSON_CONNECTION
52068 /* Exit array. */
52069 FC_FREE(field_addr.sub_location);
52070#endif /* FREECIV_JSON_CONNECTION */
52071 }
52072 }
52073
52074 if (BV_ISSET(fields, 7)) {
52075 log_packet_detailed(" got field 'power_fact'");
52076
52077#ifdef FREECIV_JSON_CONNECTION
52078 field_addr.name = "power_fact";
52079#endif /* FREECIV_JSON_CONNECTION */
52080
52081 {
52082 int i;
52083
52084 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52085 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52086 }
52087
52088#ifdef FREECIV_JSON_CONNECTION
52089 /* Enter array. */
52090 field_addr.sub_location = plocation_elem_new(0);
52091#endif /* FREECIV_JSON_CONNECTION */
52092
52093 for (i = 0; i < real_packet->veteran_levels; i++) {
52094#ifdef FREECIV_JSON_CONNECTION
52095 /* Next array element */
52096 field_addr.sub_location->number = i;
52097#endif /* FREECIV_JSON_CONNECTION */
52098
52099 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52100 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52101 }
52102 }
52103
52104#ifdef FREECIV_JSON_CONNECTION
52105 /* Exit array. */
52106 FC_FREE(field_addr.sub_location);
52107#endif /* FREECIV_JSON_CONNECTION */
52108 }
52109 }
52110
52111 if (BV_ISSET(fields, 8)) {
52112 log_packet_detailed(" got field 'move_bonus'");
52113
52114#ifdef FREECIV_JSON_CONNECTION
52115 field_addr.name = "move_bonus";
52116#endif /* FREECIV_JSON_CONNECTION */
52117
52118 {
52119 int i;
52120
52121 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52122 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52123 }
52124
52125#ifdef FREECIV_JSON_CONNECTION
52126 /* Enter array. */
52127 field_addr.sub_location = plocation_elem_new(0);
52128#endif /* FREECIV_JSON_CONNECTION */
52129
52130 for (i = 0; i < real_packet->veteran_levels; i++) {
52131#ifdef FREECIV_JSON_CONNECTION
52132 /* Next array element */
52133 field_addr.sub_location->number = i;
52134#endif /* FREECIV_JSON_CONNECTION */
52135
52136 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52137 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52138 }
52139 }
52140
52141#ifdef FREECIV_JSON_CONNECTION
52142 /* Exit array. */
52143 FC_FREE(field_addr.sub_location);
52144#endif /* FREECIV_JSON_CONNECTION */
52145 }
52146 }
52147
52148 if (BV_ISSET(fields, 9)) {
52149 log_packet_detailed(" got field 'base_raise_chance'");
52150
52151#ifdef FREECIV_JSON_CONNECTION
52152 field_addr.name = "base_raise_chance";
52153#endif /* FREECIV_JSON_CONNECTION */
52154
52155 {
52156 int i;
52157
52158 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52159 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52160 }
52161
52162#ifdef FREECIV_JSON_CONNECTION
52163 /* Enter array. */
52164 field_addr.sub_location = plocation_elem_new(0);
52165#endif /* FREECIV_JSON_CONNECTION */
52166
52167 for (i = 0; i < real_packet->veteran_levels; i++) {
52168#ifdef FREECIV_JSON_CONNECTION
52169 /* Next array element */
52170 field_addr.sub_location->number = i;
52171#endif /* FREECIV_JSON_CONNECTION */
52172
52173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52174 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52175 }
52176 }
52177
52178#ifdef FREECIV_JSON_CONNECTION
52179 /* Exit array. */
52180 FC_FREE(field_addr.sub_location);
52181#endif /* FREECIV_JSON_CONNECTION */
52182 }
52183 }
52184
52185 if (BV_ISSET(fields, 10)) {
52186 log_packet_detailed(" got field 'work_raise_chance'");
52187
52188#ifdef FREECIV_JSON_CONNECTION
52189 field_addr.name = "work_raise_chance";
52190#endif /* FREECIV_JSON_CONNECTION */
52191
52192 {
52193 int i;
52194
52195 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52196 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52197 }
52198
52199#ifdef FREECIV_JSON_CONNECTION
52200 /* Enter array. */
52201 field_addr.sub_location = plocation_elem_new(0);
52202#endif /* FREECIV_JSON_CONNECTION */
52203
52204 for (i = 0; i < real_packet->veteran_levels; i++) {
52205#ifdef FREECIV_JSON_CONNECTION
52206 /* Next array element */
52207 field_addr.sub_location->number = i;
52208#endif /* FREECIV_JSON_CONNECTION */
52209
52210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52211 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52212 }
52213 }
52214
52215#ifdef FREECIV_JSON_CONNECTION
52216 /* Exit array. */
52217 FC_FREE(field_addr.sub_location);
52218#endif /* FREECIV_JSON_CONNECTION */
52219 }
52220 }
52221
52222 if (BV_ISSET(fields, 11)) {
52223 log_packet_detailed(" got field 'background_red'");
52224
52225#ifdef FREECIV_JSON_CONNECTION
52226 field_addr.name = "background_red";
52227#endif /* FREECIV_JSON_CONNECTION */
52228
52229 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52230 RECEIVE_PACKET_FIELD_ERROR(background_red);
52231 }
52232 }
52233
52234 if (BV_ISSET(fields, 12)) {
52235 log_packet_detailed(" got field 'background_green'");
52236
52237#ifdef FREECIV_JSON_CONNECTION
52238 field_addr.name = "background_green";
52239#endif /* FREECIV_JSON_CONNECTION */
52240
52241 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52242 RECEIVE_PACKET_FIELD_ERROR(background_green);
52243 }
52244 }
52245
52246 if (BV_ISSET(fields, 13)) {
52247 log_packet_detailed(" got field 'background_blue'");
52248
52249#ifdef FREECIV_JSON_CONNECTION
52250 field_addr.name = "background_blue";
52251#endif /* FREECIV_JSON_CONNECTION */
52252
52253 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52254 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52255 }
52256 }
52257
52258 if (nullptr == old) {
52259 old = fc_malloc(sizeof(*old));
52261 *old = *real_packet;
52263 } else {
52264 *old = *real_packet;
52265 }
52266
52267#else /* FREECIV_DELTA_PROTOCOL */
52268#ifdef FREECIV_JSON_CONNECTION
52269 field_addr.name = "default_specialist";
52270#endif /* FREECIV_JSON_CONNECTION */
52271
52272 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
52274 }
52275
52276#ifdef FREECIV_JSON_CONNECTION
52277 field_addr.name = "global_init_techs_count";
52278#endif /* FREECIV_JSON_CONNECTION */
52279
52280 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
52281 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
52282 }
52283
52284#ifdef FREECIV_JSON_CONNECTION
52285 field_addr.name = "global_init_techs";
52286#endif /* FREECIV_JSON_CONNECTION */
52287
52288 {
52289 int i;
52290
52291 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
52292 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
52293 }
52294
52295#ifdef FREECIV_JSON_CONNECTION
52296 /* Enter array. */
52297 field_addr.sub_location = plocation_elem_new(0);
52298#endif /* FREECIV_JSON_CONNECTION */
52299
52300 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52301#ifdef FREECIV_JSON_CONNECTION
52302 /* Next array element */
52303 field_addr.sub_location->number = i;
52304#endif /* FREECIV_JSON_CONNECTION */
52305
52306 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
52307 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
52308 }
52309 }
52310
52311#ifdef FREECIV_JSON_CONNECTION
52312 /* Exit array. */
52313 FC_FREE(field_addr.sub_location);
52314#endif /* FREECIV_JSON_CONNECTION */
52315 }
52316
52317#ifdef FREECIV_JSON_CONNECTION
52318 field_addr.name = "global_init_buildings_count";
52319#endif /* FREECIV_JSON_CONNECTION */
52320
52321 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
52322 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
52323 }
52324
52325#ifdef FREECIV_JSON_CONNECTION
52326 field_addr.name = "global_init_buildings";
52327#endif /* FREECIV_JSON_CONNECTION */
52328
52329 {
52330 int i;
52331
52332 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
52333 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
52334 }
52335
52336#ifdef FREECIV_JSON_CONNECTION
52337 /* Enter array. */
52338 field_addr.sub_location = plocation_elem_new(0);
52339#endif /* FREECIV_JSON_CONNECTION */
52340
52341 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52342#ifdef FREECIV_JSON_CONNECTION
52343 /* Next array element */
52344 field_addr.sub_location->number = i;
52345#endif /* FREECIV_JSON_CONNECTION */
52346
52347 {
52348 int readin;
52349
52350 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52351 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52352 }
52353 real_packet->global_init_buildings[i] = readin;
52354 }
52355 }
52356
52357#ifdef FREECIV_JSON_CONNECTION
52358 /* Exit array. */
52359 FC_FREE(field_addr.sub_location);
52360#endif /* FREECIV_JSON_CONNECTION */
52361 }
52362
52363#ifdef FREECIV_JSON_CONNECTION
52364 field_addr.name = "veteran_levels";
52365#endif /* FREECIV_JSON_CONNECTION */
52366
52367 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52368 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52369 }
52370
52371#ifdef FREECIV_JSON_CONNECTION
52372 field_addr.name = "veteran_name";
52373#endif /* FREECIV_JSON_CONNECTION */
52374
52375 {
52376 int i;
52377
52378 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52379 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52380 }
52381
52382#ifdef FREECIV_JSON_CONNECTION
52383 /* Enter array. */
52384 field_addr.sub_location = plocation_elem_new(0);
52385#endif /* FREECIV_JSON_CONNECTION */
52386
52387 for (i = 0; i < real_packet->veteran_levels; i++) {
52388#ifdef FREECIV_JSON_CONNECTION
52389 /* Next array element */
52390 field_addr.sub_location->number = i;
52391#endif /* FREECIV_JSON_CONNECTION */
52392
52393 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52394 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52395 }
52396 }
52397
52398#ifdef FREECIV_JSON_CONNECTION
52399 /* Exit array. */
52400 FC_FREE(field_addr.sub_location);
52401#endif /* FREECIV_JSON_CONNECTION */
52402 }
52403
52404#ifdef FREECIV_JSON_CONNECTION
52405 field_addr.name = "power_fact";
52406#endif /* FREECIV_JSON_CONNECTION */
52407
52408 {
52409 int i;
52410
52411 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52412 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52413 }
52414
52415#ifdef FREECIV_JSON_CONNECTION
52416 /* Enter array. */
52417 field_addr.sub_location = plocation_elem_new(0);
52418#endif /* FREECIV_JSON_CONNECTION */
52419
52420 for (i = 0; i < real_packet->veteran_levels; i++) {
52421#ifdef FREECIV_JSON_CONNECTION
52422 /* Next array element */
52423 field_addr.sub_location->number = i;
52424#endif /* FREECIV_JSON_CONNECTION */
52425
52426 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52427 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52428 }
52429 }
52430
52431#ifdef FREECIV_JSON_CONNECTION
52432 /* Exit array. */
52433 FC_FREE(field_addr.sub_location);
52434#endif /* FREECIV_JSON_CONNECTION */
52435 }
52436
52437#ifdef FREECIV_JSON_CONNECTION
52438 field_addr.name = "move_bonus";
52439#endif /* FREECIV_JSON_CONNECTION */
52440
52441 {
52442 int i;
52443
52444 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52445 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52446 }
52447
52448#ifdef FREECIV_JSON_CONNECTION
52449 /* Enter array. */
52450 field_addr.sub_location = plocation_elem_new(0);
52451#endif /* FREECIV_JSON_CONNECTION */
52452
52453 for (i = 0; i < real_packet->veteran_levels; i++) {
52454#ifdef FREECIV_JSON_CONNECTION
52455 /* Next array element */
52456 field_addr.sub_location->number = i;
52457#endif /* FREECIV_JSON_CONNECTION */
52458
52459 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52460 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52461 }
52462 }
52463
52464#ifdef FREECIV_JSON_CONNECTION
52465 /* Exit array. */
52466 FC_FREE(field_addr.sub_location);
52467#endif /* FREECIV_JSON_CONNECTION */
52468 }
52469
52470#ifdef FREECIV_JSON_CONNECTION
52471 field_addr.name = "base_raise_chance";
52472#endif /* FREECIV_JSON_CONNECTION */
52473
52474 {
52475 int i;
52476
52477 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52478 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52479 }
52480
52481#ifdef FREECIV_JSON_CONNECTION
52482 /* Enter array. */
52483 field_addr.sub_location = plocation_elem_new(0);
52484#endif /* FREECIV_JSON_CONNECTION */
52485
52486 for (i = 0; i < real_packet->veteran_levels; i++) {
52487#ifdef FREECIV_JSON_CONNECTION
52488 /* Next array element */
52489 field_addr.sub_location->number = i;
52490#endif /* FREECIV_JSON_CONNECTION */
52491
52492 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52493 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52494 }
52495 }
52496
52497#ifdef FREECIV_JSON_CONNECTION
52498 /* Exit array. */
52499 FC_FREE(field_addr.sub_location);
52500#endif /* FREECIV_JSON_CONNECTION */
52501 }
52502
52503#ifdef FREECIV_JSON_CONNECTION
52504 field_addr.name = "work_raise_chance";
52505#endif /* FREECIV_JSON_CONNECTION */
52506
52507 {
52508 int i;
52509
52510 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52511 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52512 }
52513
52514#ifdef FREECIV_JSON_CONNECTION
52515 /* Enter array. */
52516 field_addr.sub_location = plocation_elem_new(0);
52517#endif /* FREECIV_JSON_CONNECTION */
52518
52519 for (i = 0; i < real_packet->veteran_levels; i++) {
52520#ifdef FREECIV_JSON_CONNECTION
52521 /* Next array element */
52522 field_addr.sub_location->number = i;
52523#endif /* FREECIV_JSON_CONNECTION */
52524
52525 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52526 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52527 }
52528 }
52529
52530#ifdef FREECIV_JSON_CONNECTION
52531 /* Exit array. */
52532 FC_FREE(field_addr.sub_location);
52533#endif /* FREECIV_JSON_CONNECTION */
52534 }
52535
52536#ifdef FREECIV_JSON_CONNECTION
52537 field_addr.name = "background_red";
52538#endif /* FREECIV_JSON_CONNECTION */
52539
52540 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52541 RECEIVE_PACKET_FIELD_ERROR(background_red);
52542 }
52543
52544#ifdef FREECIV_JSON_CONNECTION
52545 field_addr.name = "background_green";
52546#endif /* FREECIV_JSON_CONNECTION */
52547
52548 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52549 RECEIVE_PACKET_FIELD_ERROR(background_green);
52550 }
52551
52552#ifdef FREECIV_JSON_CONNECTION
52553 field_addr.name = "background_blue";
52554#endif /* FREECIV_JSON_CONNECTION */
52555
52556 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52557 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52558 }
52559#endif /* FREECIV_DELTA_PROTOCOL */
52560
52562#undef FREE_PACKET_STRUCT
52563}
52564
52565static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
52566{
52567 const struct packet_ruleset_game *real_packet = packet;
52568 int e;
52570
52571 log_packet_detailed("packet_ruleset_game_100: sending info about ()");
52572
52573#ifdef FREECIV_DELTA_PROTOCOL
52575 struct packet_ruleset_game *old;
52576 bool differ;
52577 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GAME;
52578
52579 if (nullptr == *hash) {
52581 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
52582 }
52583 BV_CLR_ALL(fields);
52584
52585 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52586 old = fc_malloc(sizeof(*old));
52587 /* temporary bitcopy just to insert correctly */
52588 *old = *real_packet;
52591 }
52592
52593 differ = (old->default_specialist != real_packet->default_specialist);
52594 if (differ) {
52595 BV_SET(fields, 0);
52596 }
52597
52598 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52599 if (differ) {
52600 BV_SET(fields, 1);
52601 }
52602
52603 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52604 if (!differ) {
52605 int i;
52606
52607 for (i = 0; i < old->global_init_techs_count; i++) {
52608 differ = (old->global_init_techs[i] != real_packet->global_init_techs[i]);
52609 if (differ) {
52610 break;
52611 }
52612 }
52613 }
52614 if (differ) {
52615 BV_SET(fields, 2);
52616 }
52617
52618 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52619 if (differ) {
52620 BV_SET(fields, 3);
52621 }
52622
52623 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52624 if (!differ) {
52625 int i;
52626
52627 for (i = 0; i < old->global_init_buildings_count; i++) {
52628 differ = (old->global_init_buildings[i] != real_packet->global_init_buildings[i]);
52629 if (differ) {
52630 break;
52631 }
52632 }
52633 }
52634 if (differ) {
52635 BV_SET(fields, 4);
52636 }
52637
52638 differ = (old->veteran_levels != real_packet->veteran_levels);
52639 if (differ) {
52640 BV_SET(fields, 5);
52641 }
52642
52643 differ = (old->veteran_levels != real_packet->veteran_levels);
52644 if (!differ) {
52645 int i;
52646
52647 for (i = 0; i < old->veteran_levels; i++) {
52648 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
52649 if (differ) {
52650 break;
52651 }
52652 }
52653 }
52654 if (differ) {
52655 BV_SET(fields, 6);
52656 }
52657
52658 differ = (old->veteran_levels != real_packet->veteran_levels);
52659 if (!differ) {
52660 int i;
52661
52662 for (i = 0; i < old->veteran_levels; i++) {
52663 differ = (old->power_fact[i] != real_packet->power_fact[i]);
52664 if (differ) {
52665 break;
52666 }
52667 }
52668 }
52669 if (differ) {
52670 BV_SET(fields, 7);
52671 }
52672
52673 differ = (old->veteran_levels != real_packet->veteran_levels);
52674 if (!differ) {
52675 int i;
52676
52677 for (i = 0; i < old->veteran_levels; i++) {
52678 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
52679 if (differ) {
52680 break;
52681 }
52682 }
52683 }
52684 if (differ) {
52685 BV_SET(fields, 8);
52686 }
52687
52688 differ = (old->veteran_levels != real_packet->veteran_levels);
52689 if (!differ) {
52690 int i;
52691
52692 for (i = 0; i < old->veteran_levels; i++) {
52693 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
52694 if (differ) {
52695 break;
52696 }
52697 }
52698 }
52699 if (differ) {
52700 BV_SET(fields, 9);
52701 }
52702
52703 differ = (old->veteran_levels != real_packet->veteran_levels);
52704 if (!differ) {
52705 int i;
52706
52707 for (i = 0; i < old->veteran_levels; i++) {
52708 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
52709 if (differ) {
52710 break;
52711 }
52712 }
52713 }
52714 if (differ) {
52715 BV_SET(fields, 10);
52716 }
52717
52718 differ = (old->background_red != real_packet->background_red);
52719 if (differ) {
52720 BV_SET(fields, 11);
52721 }
52722
52723 differ = (old->background_green != real_packet->background_green);
52724 if (differ) {
52725 BV_SET(fields, 12);
52726 }
52727
52728 differ = (old->background_blue != real_packet->background_blue);
52729 if (differ) {
52730 BV_SET(fields, 13);
52731 }
52732#endif /* FREECIV_DELTA_PROTOCOL */
52733
52734#ifdef FREECIV_JSON_CONNECTION
52735 struct plocation field_addr;
52736 {
52737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
52740 }
52741#endif /* FREECIV_JSON_CONNECTION */
52742
52743#ifdef FREECIV_DELTA_PROTOCOL
52744#ifdef FREECIV_JSON_CONNECTION
52745 field_addr.name = "fields";
52746#endif /* FREECIV_JSON_CONNECTION */
52747 e = 0;
52748 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52749 if (e) {
52750 log_packet_detailed("fields bitvector error detected");
52751 }
52752
52753 if (BV_ISSET(fields, 0)) {
52754 log_packet_detailed(" field 'default_specialist' has changed");
52755
52756#ifdef FREECIV_JSON_CONNECTION
52757 field_addr.name = "default_specialist";
52758#endif /* FREECIV_JSON_CONNECTION */
52759 e = 0;
52760
52761 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
52762
52763 if (e) {
52764 log_packet_detailed("'default_specialist' field error detected");
52765 }
52766 }
52767
52768 if (BV_ISSET(fields, 1)) {
52769 log_packet_detailed(" field 'global_init_techs_count' has changed");
52770
52771#ifdef FREECIV_JSON_CONNECTION
52772 field_addr.name = "global_init_techs_count";
52773#endif /* FREECIV_JSON_CONNECTION */
52774 e = 0;
52775
52776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
52777
52778 if (e) {
52779 log_packet_detailed("'global_init_techs_count' field error detected");
52780 }
52781 }
52782
52783 if (BV_ISSET(fields, 2)) {
52784 log_packet_detailed(" field 'global_init_techs' has changed");
52785
52786#ifdef FREECIV_JSON_CONNECTION
52787 field_addr.name = "global_init_techs";
52788#endif /* FREECIV_JSON_CONNECTION */
52789 e = 0;
52790
52791 {
52792 int i;
52793
52794#ifdef FREECIV_JSON_CONNECTION
52795 /* Create the array. */
52796 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
52797
52798 /* Enter array. */
52799 field_addr.sub_location = plocation_elem_new(0);
52800#endif /* FREECIV_JSON_CONNECTION */
52801
52802 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52803#ifdef FREECIV_JSON_CONNECTION
52804 /* Next array element. */
52805 field_addr.sub_location->number = i;
52806#endif /* FREECIV_JSON_CONNECTION */
52807
52808 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
52809 }
52810
52811#ifdef FREECIV_JSON_CONNECTION
52812 /* Exit array. */
52813 FC_FREE(field_addr.sub_location);
52814#endif /* FREECIV_JSON_CONNECTION */
52815 }
52816
52817 if (e) {
52818 log_packet_detailed("'global_init_techs' field error detected");
52819 }
52820 }
52821
52822 if (BV_ISSET(fields, 3)) {
52823 log_packet_detailed(" field 'global_init_buildings_count' has changed");
52824
52825#ifdef FREECIV_JSON_CONNECTION
52826 field_addr.name = "global_init_buildings_count";
52827#endif /* FREECIV_JSON_CONNECTION */
52828 e = 0;
52829
52830 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
52831
52832 if (e) {
52833 log_packet_detailed("'global_init_buildings_count' field error detected");
52834 }
52835 }
52836
52837 if (BV_ISSET(fields, 4)) {
52838 log_packet_detailed(" field 'global_init_buildings' has changed");
52839
52840#ifdef FREECIV_JSON_CONNECTION
52841 field_addr.name = "global_init_buildings";
52842#endif /* FREECIV_JSON_CONNECTION */
52843 e = 0;
52844
52845 {
52846 int i;
52847
52848#ifdef FREECIV_JSON_CONNECTION
52849 /* Create the array. */
52850 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
52851
52852 /* Enter array. */
52853 field_addr.sub_location = plocation_elem_new(0);
52854#endif /* FREECIV_JSON_CONNECTION */
52855
52856 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52857#ifdef FREECIV_JSON_CONNECTION
52858 /* Next array element. */
52859 field_addr.sub_location->number = i;
52860#endif /* FREECIV_JSON_CONNECTION */
52861
52862 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
52863 }
52864
52865#ifdef FREECIV_JSON_CONNECTION
52866 /* Exit array. */
52867 FC_FREE(field_addr.sub_location);
52868#endif /* FREECIV_JSON_CONNECTION */
52869 }
52870
52871 if (e) {
52872 log_packet_detailed("'global_init_buildings' field error detected");
52873 }
52874 }
52875
52876 if (BV_ISSET(fields, 5)) {
52877 log_packet_detailed(" field 'veteran_levels' has changed");
52878
52879#ifdef FREECIV_JSON_CONNECTION
52880 field_addr.name = "veteran_levels";
52881#endif /* FREECIV_JSON_CONNECTION */
52882 e = 0;
52883
52884 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
52885
52886 if (e) {
52887 log_packet_detailed("'veteran_levels' field error detected");
52888 }
52889 }
52890
52891 if (BV_ISSET(fields, 6)) {
52892 log_packet_detailed(" field 'veteran_name' has changed");
52893
52894#ifdef FREECIV_JSON_CONNECTION
52895 field_addr.name = "veteran_name";
52896#endif /* FREECIV_JSON_CONNECTION */
52897 e = 0;
52898
52899 {
52900 int i;
52901
52902#ifdef FREECIV_JSON_CONNECTION
52903 /* Create the array. */
52904 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
52905
52906 /* Enter array. */
52907 field_addr.sub_location = plocation_elem_new(0);
52908#endif /* FREECIV_JSON_CONNECTION */
52909
52910 for (i = 0; i < real_packet->veteran_levels; i++) {
52911#ifdef FREECIV_JSON_CONNECTION
52912 /* Next array element. */
52913 field_addr.sub_location->number = i;
52914#endif /* FREECIV_JSON_CONNECTION */
52915
52916 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
52917 }
52918
52919#ifdef FREECIV_JSON_CONNECTION
52920 /* Exit array. */
52921 FC_FREE(field_addr.sub_location);
52922#endif /* FREECIV_JSON_CONNECTION */
52923 }
52924
52925 if (e) {
52926 log_packet_detailed("'veteran_name' field error detected");
52927 }
52928 }
52929
52930 if (BV_ISSET(fields, 7)) {
52931 log_packet_detailed(" field 'power_fact' has changed");
52932
52933#ifdef FREECIV_JSON_CONNECTION
52934 field_addr.name = "power_fact";
52935#endif /* FREECIV_JSON_CONNECTION */
52936 e = 0;
52937
52938 {
52939 int i;
52940
52941#ifdef FREECIV_JSON_CONNECTION
52942 /* Create the array. */
52943 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
52944
52945 /* Enter array. */
52946 field_addr.sub_location = plocation_elem_new(0);
52947#endif /* FREECIV_JSON_CONNECTION */
52948
52949 for (i = 0; i < real_packet->veteran_levels; i++) {
52950#ifdef FREECIV_JSON_CONNECTION
52951 /* Next array element. */
52952 field_addr.sub_location->number = i;
52953#endif /* FREECIV_JSON_CONNECTION */
52954
52955 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
52956 }
52957
52958#ifdef FREECIV_JSON_CONNECTION
52959 /* Exit array. */
52960 FC_FREE(field_addr.sub_location);
52961#endif /* FREECIV_JSON_CONNECTION */
52962 }
52963
52964 if (e) {
52965 log_packet_detailed("'power_fact' field error detected");
52966 }
52967 }
52968
52969 if (BV_ISSET(fields, 8)) {
52970 log_packet_detailed(" field 'move_bonus' has changed");
52971
52972#ifdef FREECIV_JSON_CONNECTION
52973 field_addr.name = "move_bonus";
52974#endif /* FREECIV_JSON_CONNECTION */
52975 e = 0;
52976
52977 {
52978 int i;
52979
52980#ifdef FREECIV_JSON_CONNECTION
52981 /* Create the array. */
52982 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
52983
52984 /* Enter array. */
52985 field_addr.sub_location = plocation_elem_new(0);
52986#endif /* FREECIV_JSON_CONNECTION */
52987
52988 for (i = 0; i < real_packet->veteran_levels; i++) {
52989#ifdef FREECIV_JSON_CONNECTION
52990 /* Next array element. */
52991 field_addr.sub_location->number = i;
52992#endif /* FREECIV_JSON_CONNECTION */
52993
52994 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
52995 }
52996
52997#ifdef FREECIV_JSON_CONNECTION
52998 /* Exit array. */
52999 FC_FREE(field_addr.sub_location);
53000#endif /* FREECIV_JSON_CONNECTION */
53001 }
53002
53003 if (e) {
53004 log_packet_detailed("'move_bonus' field error detected");
53005 }
53006 }
53007
53008 if (BV_ISSET(fields, 9)) {
53009 log_packet_detailed(" field 'base_raise_chance' has changed");
53010
53011#ifdef FREECIV_JSON_CONNECTION
53012 field_addr.name = "base_raise_chance";
53013#endif /* FREECIV_JSON_CONNECTION */
53014 e = 0;
53015
53016 {
53017 int i;
53018
53019#ifdef FREECIV_JSON_CONNECTION
53020 /* Create the array. */
53021 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53022
53023 /* Enter array. */
53024 field_addr.sub_location = plocation_elem_new(0);
53025#endif /* FREECIV_JSON_CONNECTION */
53026
53027 for (i = 0; i < real_packet->veteran_levels; i++) {
53028#ifdef FREECIV_JSON_CONNECTION
53029 /* Next array element. */
53030 field_addr.sub_location->number = i;
53031#endif /* FREECIV_JSON_CONNECTION */
53032
53033 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53034 }
53035
53036#ifdef FREECIV_JSON_CONNECTION
53037 /* Exit array. */
53038 FC_FREE(field_addr.sub_location);
53039#endif /* FREECIV_JSON_CONNECTION */
53040 }
53041
53042 if (e) {
53043 log_packet_detailed("'base_raise_chance' field error detected");
53044 }
53045 }
53046
53047 if (BV_ISSET(fields, 10)) {
53048 log_packet_detailed(" field 'work_raise_chance' has changed");
53049
53050#ifdef FREECIV_JSON_CONNECTION
53051 field_addr.name = "work_raise_chance";
53052#endif /* FREECIV_JSON_CONNECTION */
53053 e = 0;
53054
53055 {
53056 int i;
53057
53058#ifdef FREECIV_JSON_CONNECTION
53059 /* Create the array. */
53060 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53061
53062 /* Enter array. */
53063 field_addr.sub_location = plocation_elem_new(0);
53064#endif /* FREECIV_JSON_CONNECTION */
53065
53066 for (i = 0; i < real_packet->veteran_levels; i++) {
53067#ifdef FREECIV_JSON_CONNECTION
53068 /* Next array element. */
53069 field_addr.sub_location->number = i;
53070#endif /* FREECIV_JSON_CONNECTION */
53071
53072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53073 }
53074
53075#ifdef FREECIV_JSON_CONNECTION
53076 /* Exit array. */
53077 FC_FREE(field_addr.sub_location);
53078#endif /* FREECIV_JSON_CONNECTION */
53079 }
53080
53081 if (e) {
53082 log_packet_detailed("'work_raise_chance' field error detected");
53083 }
53084 }
53085
53086 if (BV_ISSET(fields, 11)) {
53087 log_packet_detailed(" field 'background_red' has changed");
53088
53089#ifdef FREECIV_JSON_CONNECTION
53090 field_addr.name = "background_red";
53091#endif /* FREECIV_JSON_CONNECTION */
53092 e = 0;
53093
53094 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53095
53096 if (e) {
53097 log_packet_detailed("'background_red' field error detected");
53098 }
53099 }
53100
53101 if (BV_ISSET(fields, 12)) {
53102 log_packet_detailed(" field 'background_green' has changed");
53103
53104#ifdef FREECIV_JSON_CONNECTION
53105 field_addr.name = "background_green";
53106#endif /* FREECIV_JSON_CONNECTION */
53107 e = 0;
53108
53109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53110
53111 if (e) {
53112 log_packet_detailed("'background_green' field error detected");
53113 }
53114 }
53115
53116 if (BV_ISSET(fields, 13)) {
53117 log_packet_detailed(" field 'background_blue' has changed");
53118
53119#ifdef FREECIV_JSON_CONNECTION
53120 field_addr.name = "background_blue";
53121#endif /* FREECIV_JSON_CONNECTION */
53122 e = 0;
53123
53124 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53125
53126 if (e) {
53127 log_packet_detailed("'background_blue' field error detected");
53128 }
53129 }
53130
53131 *old = *real_packet;
53132
53133#else /* FREECIV_DELTA_PROTOCOL */
53134#ifdef FREECIV_JSON_CONNECTION
53135 field_addr.name = "default_specialist";
53136#endif /* FREECIV_JSON_CONNECTION */
53137 e = 0;
53138
53139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
53140
53141 if (e) {
53142 log_packet_detailed("'default_specialist' field error detected");
53143 }
53144
53145#ifdef FREECIV_JSON_CONNECTION
53146 field_addr.name = "global_init_techs_count";
53147#endif /* FREECIV_JSON_CONNECTION */
53148 e = 0;
53149
53150 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
53151
53152 if (e) {
53153 log_packet_detailed("'global_init_techs_count' field error detected");
53154 }
53155
53156#ifdef FREECIV_JSON_CONNECTION
53157 field_addr.name = "global_init_techs";
53158#endif /* FREECIV_JSON_CONNECTION */
53159 e = 0;
53160
53161 {
53162 int i;
53163
53164#ifdef FREECIV_JSON_CONNECTION
53165 /* Create the array. */
53166 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
53167
53168 /* Enter array. */
53169 field_addr.sub_location = plocation_elem_new(0);
53170#endif /* FREECIV_JSON_CONNECTION */
53171
53172 for (i = 0; i < real_packet->global_init_techs_count; i++) {
53173#ifdef FREECIV_JSON_CONNECTION
53174 /* Next array element. */
53175 field_addr.sub_location->number = i;
53176#endif /* FREECIV_JSON_CONNECTION */
53177
53178 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
53179 }
53180
53181#ifdef FREECIV_JSON_CONNECTION
53182 /* Exit array. */
53183 FC_FREE(field_addr.sub_location);
53184#endif /* FREECIV_JSON_CONNECTION */
53185 }
53186
53187 if (e) {
53188 log_packet_detailed("'global_init_techs' field error detected");
53189 }
53190
53191#ifdef FREECIV_JSON_CONNECTION
53192 field_addr.name = "global_init_buildings_count";
53193#endif /* FREECIV_JSON_CONNECTION */
53194 e = 0;
53195
53196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
53197
53198 if (e) {
53199 log_packet_detailed("'global_init_buildings_count' field error detected");
53200 }
53201
53202#ifdef FREECIV_JSON_CONNECTION
53203 field_addr.name = "global_init_buildings";
53204#endif /* FREECIV_JSON_CONNECTION */
53205 e = 0;
53206
53207 {
53208 int i;
53209
53210#ifdef FREECIV_JSON_CONNECTION
53211 /* Create the array. */
53212 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
53213
53214 /* Enter array. */
53215 field_addr.sub_location = plocation_elem_new(0);
53216#endif /* FREECIV_JSON_CONNECTION */
53217
53218 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
53219#ifdef FREECIV_JSON_CONNECTION
53220 /* Next array element. */
53221 field_addr.sub_location->number = i;
53222#endif /* FREECIV_JSON_CONNECTION */
53223
53224 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
53225 }
53226
53227#ifdef FREECIV_JSON_CONNECTION
53228 /* Exit array. */
53229 FC_FREE(field_addr.sub_location);
53230#endif /* FREECIV_JSON_CONNECTION */
53231 }
53232
53233 if (e) {
53234 log_packet_detailed("'global_init_buildings' field error detected");
53235 }
53236
53237#ifdef FREECIV_JSON_CONNECTION
53238 field_addr.name = "veteran_levels";
53239#endif /* FREECIV_JSON_CONNECTION */
53240 e = 0;
53241
53242 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
53243
53244 if (e) {
53245 log_packet_detailed("'veteran_levels' field error detected");
53246 }
53247
53248#ifdef FREECIV_JSON_CONNECTION
53249 field_addr.name = "veteran_name";
53250#endif /* FREECIV_JSON_CONNECTION */
53251 e = 0;
53252
53253 {
53254 int i;
53255
53256#ifdef FREECIV_JSON_CONNECTION
53257 /* Create the array. */
53258 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53259
53260 /* Enter array. */
53261 field_addr.sub_location = plocation_elem_new(0);
53262#endif /* FREECIV_JSON_CONNECTION */
53263
53264 for (i = 0; i < real_packet->veteran_levels; i++) {
53265#ifdef FREECIV_JSON_CONNECTION
53266 /* Next array element. */
53267 field_addr.sub_location->number = i;
53268#endif /* FREECIV_JSON_CONNECTION */
53269
53270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
53271 }
53272
53273#ifdef FREECIV_JSON_CONNECTION
53274 /* Exit array. */
53275 FC_FREE(field_addr.sub_location);
53276#endif /* FREECIV_JSON_CONNECTION */
53277 }
53278
53279 if (e) {
53280 log_packet_detailed("'veteran_name' field error detected");
53281 }
53282
53283#ifdef FREECIV_JSON_CONNECTION
53284 field_addr.name = "power_fact";
53285#endif /* FREECIV_JSON_CONNECTION */
53286 e = 0;
53287
53288 {
53289 int i;
53290
53291#ifdef FREECIV_JSON_CONNECTION
53292 /* Create the array. */
53293 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53294
53295 /* Enter array. */
53296 field_addr.sub_location = plocation_elem_new(0);
53297#endif /* FREECIV_JSON_CONNECTION */
53298
53299 for (i = 0; i < real_packet->veteran_levels; i++) {
53300#ifdef FREECIV_JSON_CONNECTION
53301 /* Next array element. */
53302 field_addr.sub_location->number = i;
53303#endif /* FREECIV_JSON_CONNECTION */
53304
53305 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
53306 }
53307
53308#ifdef FREECIV_JSON_CONNECTION
53309 /* Exit array. */
53310 FC_FREE(field_addr.sub_location);
53311#endif /* FREECIV_JSON_CONNECTION */
53312 }
53313
53314 if (e) {
53315 log_packet_detailed("'power_fact' field error detected");
53316 }
53317
53318#ifdef FREECIV_JSON_CONNECTION
53319 field_addr.name = "move_bonus";
53320#endif /* FREECIV_JSON_CONNECTION */
53321 e = 0;
53322
53323 {
53324 int i;
53325
53326#ifdef FREECIV_JSON_CONNECTION
53327 /* Create the array. */
53328 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53329
53330 /* Enter array. */
53331 field_addr.sub_location = plocation_elem_new(0);
53332#endif /* FREECIV_JSON_CONNECTION */
53333
53334 for (i = 0; i < real_packet->veteran_levels; i++) {
53335#ifdef FREECIV_JSON_CONNECTION
53336 /* Next array element. */
53337 field_addr.sub_location->number = i;
53338#endif /* FREECIV_JSON_CONNECTION */
53339
53340 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
53341 }
53342
53343#ifdef FREECIV_JSON_CONNECTION
53344 /* Exit array. */
53345 FC_FREE(field_addr.sub_location);
53346#endif /* FREECIV_JSON_CONNECTION */
53347 }
53348
53349 if (e) {
53350 log_packet_detailed("'move_bonus' field error detected");
53351 }
53352
53353#ifdef FREECIV_JSON_CONNECTION
53354 field_addr.name = "base_raise_chance";
53355#endif /* FREECIV_JSON_CONNECTION */
53356 e = 0;
53357
53358 {
53359 int i;
53360
53361#ifdef FREECIV_JSON_CONNECTION
53362 /* Create the array. */
53363 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53364
53365 /* Enter array. */
53366 field_addr.sub_location = plocation_elem_new(0);
53367#endif /* FREECIV_JSON_CONNECTION */
53368
53369 for (i = 0; i < real_packet->veteran_levels; i++) {
53370#ifdef FREECIV_JSON_CONNECTION
53371 /* Next array element. */
53372 field_addr.sub_location->number = i;
53373#endif /* FREECIV_JSON_CONNECTION */
53374
53375 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53376 }
53377
53378#ifdef FREECIV_JSON_CONNECTION
53379 /* Exit array. */
53380 FC_FREE(field_addr.sub_location);
53381#endif /* FREECIV_JSON_CONNECTION */
53382 }
53383
53384 if (e) {
53385 log_packet_detailed("'base_raise_chance' field error detected");
53386 }
53387
53388#ifdef FREECIV_JSON_CONNECTION
53389 field_addr.name = "work_raise_chance";
53390#endif /* FREECIV_JSON_CONNECTION */
53391 e = 0;
53392
53393 {
53394 int i;
53395
53396#ifdef FREECIV_JSON_CONNECTION
53397 /* Create the array. */
53398 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53399
53400 /* Enter array. */
53401 field_addr.sub_location = plocation_elem_new(0);
53402#endif /* FREECIV_JSON_CONNECTION */
53403
53404 for (i = 0; i < real_packet->veteran_levels; i++) {
53405#ifdef FREECIV_JSON_CONNECTION
53406 /* Next array element. */
53407 field_addr.sub_location->number = i;
53408#endif /* FREECIV_JSON_CONNECTION */
53409
53410 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53411 }
53412
53413#ifdef FREECIV_JSON_CONNECTION
53414 /* Exit array. */
53415 FC_FREE(field_addr.sub_location);
53416#endif /* FREECIV_JSON_CONNECTION */
53417 }
53418
53419 if (e) {
53420 log_packet_detailed("'work_raise_chance' field error detected");
53421 }
53422
53423#ifdef FREECIV_JSON_CONNECTION
53424 field_addr.name = "background_red";
53425#endif /* FREECIV_JSON_CONNECTION */
53426 e = 0;
53427
53428 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53429
53430 if (e) {
53431 log_packet_detailed("'background_red' field error detected");
53432 }
53433
53434#ifdef FREECIV_JSON_CONNECTION
53435 field_addr.name = "background_green";
53436#endif /* FREECIV_JSON_CONNECTION */
53437 e = 0;
53438
53439 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53440
53441 if (e) {
53442 log_packet_detailed("'background_green' field error detected");
53443 }
53444
53445#ifdef FREECIV_JSON_CONNECTION
53446 field_addr.name = "background_blue";
53447#endif /* FREECIV_JSON_CONNECTION */
53448 e = 0;
53449
53450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53451
53452 if (e) {
53453 log_packet_detailed("'background_blue' field error detected");
53454 }
53455#endif /* FREECIV_DELTA_PROTOCOL */
53456
53458}
53459
53461{
53462 if (!pc->used) {
53463 log_error("WARNING: trying to send data to the closed connection %s",
53465 return -1;
53466 }
53467 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GAME].packet != nullptr, -1,
53468 "Handler for PACKET_RULESET_GAME not installed");
53469 return pc->phs.handlers->send[PACKET_RULESET_GAME].packet(pc, packet);
53470}
53471
53472void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
53473{
53474 conn_list_iterate(dest, pconn) {
53477}
53478
53480{
53481 memset(packet, 0, sizeof(*packet));
53482
53483 requirement_vector_init(&packet->reqs);
53484 packet->helptext = strvec_new();
53485}
53486
53488{
53489 if (packet->helptext) {
53490 strvec_destroy(packet->helptext);
53491 packet->helptext = nullptr;
53492 }
53493 requirement_vector_free(&packet->reqs);
53494}
53495
53496static inline void destroy_packet_ruleset_specialist(void *packet)
53497{
53499 free(packet);
53500}
53501
53502#ifdef FREECIV_DELTA_PROTOCOL
53503#define hash_packet_ruleset_specialist_100 hash_const
53504#define cmp_packet_ruleset_specialist_100 cmp_const
53506#endif /* FREECIV_DELTA_PROTOCOL */
53507
53509{
53510#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_specialist(_packet)
53512
53513#ifdef FREECIV_JSON_CONNECTION
53514 struct plocation field_addr;
53515 {
53516 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
53519 }
53520#endif /* FREECIV_JSON_CONNECTION */
53521
53522 log_packet_detailed("packet_ruleset_specialist_100: got info about ()");
53523
53524#ifdef FREECIV_DELTA_PROTOCOL
53527 struct genhash **hash = pc->phs.received + PACKET_RULESET_SPECIALIST;
53528
53529 if (nullptr == *hash) {
53531 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
53532 }
53533
53534 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
53535 real_packet->id = old->id;
53536 sz_strlcpy(real_packet->plural_name, old->plural_name);
53537 sz_strlcpy(real_packet->rule_name, old->rule_name);
53538 sz_strlcpy(real_packet->short_name, old->short_name);
53539 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
53540 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
53541 requirement_vector_copy(&real_packet->reqs, &old->reqs);
53542 if (old->helptext) {
53543 strvec_copy(real_packet->helptext, old->helptext);
53544 } else {
53545 strvec_clear(real_packet->helptext);
53546 }
53547 } else {
53548 /* packet is already initialized empty */
53549 log_packet_detailed(" no old info");
53550 }
53551
53552#ifdef FREECIV_JSON_CONNECTION
53553 field_addr.name = "fields";
53554#endif /* FREECIV_JSON_CONNECTION */
53555 DIO_BV_GET(&din, &field_addr, fields);
53556
53557 if (BV_ISSET(fields, 0)) {
53558 log_packet_detailed(" got field 'id'");
53559
53560#ifdef FREECIV_JSON_CONNECTION
53561 field_addr.name = "id";
53562#endif /* FREECIV_JSON_CONNECTION */
53563
53564 {
53565 int readin;
53566
53567 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53569 }
53570 real_packet->id = readin;
53571 }
53572 }
53573
53574 if (BV_ISSET(fields, 1)) {
53575 log_packet_detailed(" got field 'plural_name'");
53576
53577#ifdef FREECIV_JSON_CONNECTION
53578 field_addr.name = "plural_name";
53579#endif /* FREECIV_JSON_CONNECTION */
53580
53581 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53582 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53583 }
53584 }
53585
53586 if (BV_ISSET(fields, 2)) {
53587 log_packet_detailed(" got field 'rule_name'");
53588
53589#ifdef FREECIV_JSON_CONNECTION
53590 field_addr.name = "rule_name";
53591#endif /* FREECIV_JSON_CONNECTION */
53592
53593 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53594 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53595 }
53596 }
53597
53598 if (BV_ISSET(fields, 3)) {
53599 log_packet_detailed(" got field 'short_name'");
53600
53601#ifdef FREECIV_JSON_CONNECTION
53602 field_addr.name = "short_name";
53603#endif /* FREECIV_JSON_CONNECTION */
53604
53605 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53606 RECEIVE_PACKET_FIELD_ERROR(short_name);
53607 }
53608 }
53609
53610 if (BV_ISSET(fields, 4)) {
53611 log_packet_detailed(" got field 'graphic_str'");
53612
53613#ifdef FREECIV_JSON_CONNECTION
53614 field_addr.name = "graphic_str";
53615#endif /* FREECIV_JSON_CONNECTION */
53616
53617 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53618 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53619 }
53620 }
53621
53622 if (BV_ISSET(fields, 5)) {
53623 log_packet_detailed(" got field 'graphic_alt'");
53624
53625#ifdef FREECIV_JSON_CONNECTION
53626 field_addr.name = "graphic_alt";
53627#endif /* FREECIV_JSON_CONNECTION */
53628
53629 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53630 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53631 }
53632 }
53633
53634 if (BV_ISSET(fields, 6)) {
53635 log_packet_detailed(" got field 'reqs'");
53636
53637#ifdef FREECIV_JSON_CONNECTION
53638 field_addr.name = "reqs";
53639#endif /* FREECIV_JSON_CONNECTION */
53640
53641 {
53642 int i;
53643
53644 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53646 }
53648
53649#ifdef FREECIV_JSON_CONNECTION
53650 /* Enter array. */
53651 field_addr.sub_location = plocation_elem_new(0);
53652#endif /* FREECIV_JSON_CONNECTION */
53653
53654 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53655#ifdef FREECIV_JSON_CONNECTION
53656 /* Next array element */
53657 field_addr.sub_location->number = i;
53658#endif /* FREECIV_JSON_CONNECTION */
53659
53660 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53662 }
53663 }
53664
53665#ifdef FREECIV_JSON_CONNECTION
53666 /* Exit array. */
53667 FC_FREE(field_addr.sub_location);
53668#endif /* FREECIV_JSON_CONNECTION */
53669 }
53670 }
53671
53672 if (BV_ISSET(fields, 7)) {
53673 log_packet_detailed(" got field 'helptext'");
53674
53675#ifdef FREECIV_JSON_CONNECTION
53676 field_addr.name = "helptext";
53677#endif /* FREECIV_JSON_CONNECTION */
53678
53679 {
53680 int i;
53681
53682 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53684 }
53685 strvec_reserve(real_packet->helptext, i);
53686
53687#ifdef FREECIV_JSON_CONNECTION
53688 /* Enter array. */
53689 field_addr.sub_location = plocation_elem_new(0);
53690#endif /* FREECIV_JSON_CONNECTION */
53691
53692 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53693#ifdef FREECIV_JSON_CONNECTION
53694 /* Next array element */
53695 field_addr.sub_location->number = i;
53696#endif /* FREECIV_JSON_CONNECTION */
53697
53698 {
53699 char readin[MAX_LEN_PACKET];
53700
53701 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53702 || !strvec_set(real_packet->helptext, i, readin)) {
53704 }
53705 }
53706 }
53707
53708#ifdef FREECIV_JSON_CONNECTION
53709 /* Exit array. */
53710 FC_FREE(field_addr.sub_location);
53711#endif /* FREECIV_JSON_CONNECTION */
53712 }
53713 }
53714
53715 if (nullptr == old) {
53716 old = fc_malloc(sizeof(*old));
53718 old->id = real_packet->id;
53719 sz_strlcpy(old->plural_name, real_packet->plural_name);
53720 sz_strlcpy(old->rule_name, real_packet->rule_name);
53721 sz_strlcpy(old->short_name, real_packet->short_name);
53722 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53723 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53724 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53725 if (real_packet->helptext) {
53726 strvec_copy(old->helptext, real_packet->helptext);
53727 } else {
53728 strvec_clear(old->helptext);
53729 }
53731 } else {
53732 old->id = real_packet->id;
53733 sz_strlcpy(old->plural_name, real_packet->plural_name);
53734 sz_strlcpy(old->rule_name, real_packet->rule_name);
53735 sz_strlcpy(old->short_name, real_packet->short_name);
53736 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53737 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53738 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53739 if (real_packet->helptext) {
53740 strvec_copy(old->helptext, real_packet->helptext);
53741 } else {
53742 strvec_clear(old->helptext);
53743 }
53744 }
53745
53746#else /* FREECIV_DELTA_PROTOCOL */
53747#ifdef FREECIV_JSON_CONNECTION
53748 field_addr.name = "id";
53749#endif /* FREECIV_JSON_CONNECTION */
53750
53751 {
53752 int readin;
53753
53754 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53756 }
53757 real_packet->id = readin;
53758 }
53759
53760#ifdef FREECIV_JSON_CONNECTION
53761 field_addr.name = "plural_name";
53762#endif /* FREECIV_JSON_CONNECTION */
53763
53764 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53765 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53766 }
53767
53768#ifdef FREECIV_JSON_CONNECTION
53769 field_addr.name = "rule_name";
53770#endif /* FREECIV_JSON_CONNECTION */
53771
53772 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53773 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53774 }
53775
53776#ifdef FREECIV_JSON_CONNECTION
53777 field_addr.name = "short_name";
53778#endif /* FREECIV_JSON_CONNECTION */
53779
53780 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53781 RECEIVE_PACKET_FIELD_ERROR(short_name);
53782 }
53783
53784#ifdef FREECIV_JSON_CONNECTION
53785 field_addr.name = "graphic_str";
53786#endif /* FREECIV_JSON_CONNECTION */
53787
53788 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53789 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53790 }
53791
53792#ifdef FREECIV_JSON_CONNECTION
53793 field_addr.name = "graphic_alt";
53794#endif /* FREECIV_JSON_CONNECTION */
53795
53796 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53797 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53798 }
53799
53800#ifdef FREECIV_JSON_CONNECTION
53801 field_addr.name = "reqs";
53802#endif /* FREECIV_JSON_CONNECTION */
53803
53804 {
53805 int i;
53806
53807 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53809 }
53811
53812#ifdef FREECIV_JSON_CONNECTION
53813 /* Enter array. */
53814 field_addr.sub_location = plocation_elem_new(0);
53815#endif /* FREECIV_JSON_CONNECTION */
53816
53817 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53818#ifdef FREECIV_JSON_CONNECTION
53819 /* Next array element */
53820 field_addr.sub_location->number = i;
53821#endif /* FREECIV_JSON_CONNECTION */
53822
53823 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53825 }
53826 }
53827
53828#ifdef FREECIV_JSON_CONNECTION
53829 /* Exit array. */
53830 FC_FREE(field_addr.sub_location);
53831#endif /* FREECIV_JSON_CONNECTION */
53832 }
53833
53834#ifdef FREECIV_JSON_CONNECTION
53835 field_addr.name = "helptext";
53836#endif /* FREECIV_JSON_CONNECTION */
53837
53838 {
53839 int i;
53840
53841 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53843 }
53844 strvec_reserve(real_packet->helptext, i);
53845
53846#ifdef FREECIV_JSON_CONNECTION
53847 /* Enter array. */
53848 field_addr.sub_location = plocation_elem_new(0);
53849#endif /* FREECIV_JSON_CONNECTION */
53850
53851 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53852#ifdef FREECIV_JSON_CONNECTION
53853 /* Next array element */
53854 field_addr.sub_location->number = i;
53855#endif /* FREECIV_JSON_CONNECTION */
53856
53857 {
53858 char readin[MAX_LEN_PACKET];
53859
53860 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53861 || !strvec_set(real_packet->helptext, i, readin)) {
53863 }
53864 }
53865 }
53866
53867#ifdef FREECIV_JSON_CONNECTION
53868 /* Exit array. */
53869 FC_FREE(field_addr.sub_location);
53870#endif /* FREECIV_JSON_CONNECTION */
53871 }
53872#endif /* FREECIV_DELTA_PROTOCOL */
53873
53875#undef FREE_PACKET_STRUCT
53876}
53877
53879{
53880 const struct packet_ruleset_specialist *real_packet = packet;
53881 int e;
53883
53884 log_packet_detailed("packet_ruleset_specialist_100: sending info about ()");
53885
53886#ifdef FREECIV_DELTA_PROTOCOL
53889 bool differ;
53890 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SPECIALIST;
53891
53892 if (nullptr == *hash) {
53894 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
53895 }
53896 BV_CLR_ALL(fields);
53897
53898 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
53899 old = fc_malloc(sizeof(*old));
53900 /* temporary bitcopy just to insert correctly */
53901 *old = *real_packet;
53904 }
53905
53906 differ = (old->id != real_packet->id);
53907 if (differ) {
53908 BV_SET(fields, 0);
53909 }
53910
53911 differ = (strcmp(old->plural_name, real_packet->plural_name) != 0);
53912 if (differ) {
53913 BV_SET(fields, 1);
53914 }
53915
53916 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
53917 if (differ) {
53918 BV_SET(fields, 2);
53919 }
53920
53921 differ = (strcmp(old->short_name, real_packet->short_name) != 0);
53922 if (differ) {
53923 BV_SET(fields, 3);
53924 }
53925
53926 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
53927 if (differ) {
53928 BV_SET(fields, 4);
53929 }
53930
53931 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
53932 if (differ) {
53933 BV_SET(fields, 5);
53934 }
53935
53937 if (!differ) {
53938 int i;
53939
53940 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
53941 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
53942 if (differ) {
53943 break;
53944 }
53945 }
53946 }
53947 if (differ) {
53948 BV_SET(fields, 6);
53949 }
53950
53951 if (real_packet->helptext) {
53952 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
53953 } else {
53954 differ = (strvec_size(old->helptext) > 0);
53955 }
53956 if (differ) {
53957 BV_SET(fields, 7);
53958 }
53959#endif /* FREECIV_DELTA_PROTOCOL */
53960
53961#ifdef FREECIV_JSON_CONNECTION
53962 struct plocation field_addr;
53963 {
53964 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
53967 }
53968#endif /* FREECIV_JSON_CONNECTION */
53969
53970#ifdef FREECIV_DELTA_PROTOCOL
53971#ifdef FREECIV_JSON_CONNECTION
53972 field_addr.name = "fields";
53973#endif /* FREECIV_JSON_CONNECTION */
53974 e = 0;
53975 e |= DIO_BV_PUT(&dout, &field_addr, fields);
53976 if (e) {
53977 log_packet_detailed("fields bitvector error detected");
53978 }
53979
53980 if (BV_ISSET(fields, 0)) {
53981 log_packet_detailed(" field 'id' has changed");
53982
53983#ifdef FREECIV_JSON_CONNECTION
53984 field_addr.name = "id";
53985#endif /* FREECIV_JSON_CONNECTION */
53986 e = 0;
53987
53988 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
53989
53990 if (e) {
53991 log_packet_detailed("'id' field error detected");
53992 }
53993 }
53994
53995 if (BV_ISSET(fields, 1)) {
53996 log_packet_detailed(" field 'plural_name' has changed");
53997
53998#ifdef FREECIV_JSON_CONNECTION
53999 field_addr.name = "plural_name";
54000#endif /* FREECIV_JSON_CONNECTION */
54001 e = 0;
54002
54003 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54004
54005 if (e) {
54006 log_packet_detailed("'plural_name' field error detected");
54007 }
54008 }
54009
54010 if (BV_ISSET(fields, 2)) {
54011 log_packet_detailed(" field 'rule_name' has changed");
54012
54013#ifdef FREECIV_JSON_CONNECTION
54014 field_addr.name = "rule_name";
54015#endif /* FREECIV_JSON_CONNECTION */
54016 e = 0;
54017
54018 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54019
54020 if (e) {
54021 log_packet_detailed("'rule_name' field error detected");
54022 }
54023 }
54024
54025 if (BV_ISSET(fields, 3)) {
54026 log_packet_detailed(" field 'short_name' has changed");
54027
54028#ifdef FREECIV_JSON_CONNECTION
54029 field_addr.name = "short_name";
54030#endif /* FREECIV_JSON_CONNECTION */
54031 e = 0;
54032
54033 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54034
54035 if (e) {
54036 log_packet_detailed("'short_name' field error detected");
54037 }
54038 }
54039
54040 if (BV_ISSET(fields, 4)) {
54041 log_packet_detailed(" field 'graphic_str' has changed");
54042
54043#ifdef FREECIV_JSON_CONNECTION
54044 field_addr.name = "graphic_str";
54045#endif /* FREECIV_JSON_CONNECTION */
54046 e = 0;
54047
54048 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54049
54050 if (e) {
54051 log_packet_detailed("'graphic_str' field error detected");
54052 }
54053 }
54054
54055 if (BV_ISSET(fields, 5)) {
54056 log_packet_detailed(" field 'graphic_alt' has changed");
54057
54058#ifdef FREECIV_JSON_CONNECTION
54059 field_addr.name = "graphic_alt";
54060#endif /* FREECIV_JSON_CONNECTION */
54061 e = 0;
54062
54063 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54064
54065 if (e) {
54066 log_packet_detailed("'graphic_alt' field error detected");
54067 }
54068 }
54069
54070 if (BV_ISSET(fields, 6)) {
54071 log_packet_detailed(" field 'reqs' has changed");
54072
54073#ifdef FREECIV_JSON_CONNECTION
54074 field_addr.name = "reqs";
54075#endif /* FREECIV_JSON_CONNECTION */
54076 e = 0;
54077
54078 {
54079 int i;
54080
54083
54084#ifdef FREECIV_JSON_CONNECTION
54085 /* Enter array. */
54086 field_addr.sub_location = plocation_elem_new(0);
54087#endif /* FREECIV_JSON_CONNECTION */
54088
54089 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54090#ifdef FREECIV_JSON_CONNECTION
54091 /* Next array element. */
54092 field_addr.sub_location->number = i;
54093#endif /* FREECIV_JSON_CONNECTION */
54094
54095 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54096 }
54097
54098#ifdef FREECIV_JSON_CONNECTION
54099 /* Exit array. */
54100 FC_FREE(field_addr.sub_location);
54101#endif /* FREECIV_JSON_CONNECTION */
54102 }
54103
54104 if (e) {
54105 log_packet_detailed("'reqs' field error detected");
54106 }
54107 }
54108
54109 if (BV_ISSET(fields, 7)) {
54110 log_packet_detailed(" field 'helptext' has changed");
54111
54112#ifdef FREECIV_JSON_CONNECTION
54113 field_addr.name = "helptext";
54114#endif /* FREECIV_JSON_CONNECTION */
54115 e = 0;
54116
54117 if (!real_packet->helptext) {
54118 /* Transmit null as empty */
54119 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54120 } else {
54121 int i;
54122
54124 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54125
54126#ifdef FREECIV_JSON_CONNECTION
54127 /* Enter array. */
54128 field_addr.sub_location = plocation_elem_new(0);
54129#endif /* FREECIV_JSON_CONNECTION */
54130
54131 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54132#ifdef FREECIV_JSON_CONNECTION
54133 /* Next array element. */
54134 field_addr.sub_location->number = i;
54135#endif /* FREECIV_JSON_CONNECTION */
54136
54137 {
54138 const char *pstr = strvec_get(real_packet->helptext, i);
54139
54140 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54141 }
54142 }
54143
54144#ifdef FREECIV_JSON_CONNECTION
54145 /* Exit array. */
54146 FC_FREE(field_addr.sub_location);
54147#endif /* FREECIV_JSON_CONNECTION */
54148 }
54149
54150 if (e) {
54151 log_packet_detailed("'helptext' field error detected");
54152 }
54153 }
54154
54155 old->id = real_packet->id;
54156 sz_strlcpy(old->plural_name, real_packet->plural_name);
54157 sz_strlcpy(old->rule_name, real_packet->rule_name);
54158 sz_strlcpy(old->short_name, real_packet->short_name);
54159 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
54160 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
54161 requirement_vector_copy(&old->reqs, &real_packet->reqs);
54162 if (real_packet->helptext) {
54163 strvec_copy(old->helptext, real_packet->helptext);
54164 } else {
54165 strvec_clear(old->helptext);
54166 }
54167
54168#else /* FREECIV_DELTA_PROTOCOL */
54169#ifdef FREECIV_JSON_CONNECTION
54170 field_addr.name = "id";
54171#endif /* FREECIV_JSON_CONNECTION */
54172 e = 0;
54173
54174 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54175
54176 if (e) {
54177 log_packet_detailed("'id' field error detected");
54178 }
54179
54180#ifdef FREECIV_JSON_CONNECTION
54181 field_addr.name = "plural_name";
54182#endif /* FREECIV_JSON_CONNECTION */
54183 e = 0;
54184
54185 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54186
54187 if (e) {
54188 log_packet_detailed("'plural_name' field error detected");
54189 }
54190
54191#ifdef FREECIV_JSON_CONNECTION
54192 field_addr.name = "rule_name";
54193#endif /* FREECIV_JSON_CONNECTION */
54194 e = 0;
54195
54196 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54197
54198 if (e) {
54199 log_packet_detailed("'rule_name' field error detected");
54200 }
54201
54202#ifdef FREECIV_JSON_CONNECTION
54203 field_addr.name = "short_name";
54204#endif /* FREECIV_JSON_CONNECTION */
54205 e = 0;
54206
54207 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54208
54209 if (e) {
54210 log_packet_detailed("'short_name' field error detected");
54211 }
54212
54213#ifdef FREECIV_JSON_CONNECTION
54214 field_addr.name = "graphic_str";
54215#endif /* FREECIV_JSON_CONNECTION */
54216 e = 0;
54217
54218 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54219
54220 if (e) {
54221 log_packet_detailed("'graphic_str' field error detected");
54222 }
54223
54224#ifdef FREECIV_JSON_CONNECTION
54225 field_addr.name = "graphic_alt";
54226#endif /* FREECIV_JSON_CONNECTION */
54227 e = 0;
54228
54229 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54230
54231 if (e) {
54232 log_packet_detailed("'graphic_alt' field error detected");
54233 }
54234
54235#ifdef FREECIV_JSON_CONNECTION
54236 field_addr.name = "reqs";
54237#endif /* FREECIV_JSON_CONNECTION */
54238 e = 0;
54239
54240 {
54241 int i;
54242
54245
54246#ifdef FREECIV_JSON_CONNECTION
54247 /* Enter array. */
54248 field_addr.sub_location = plocation_elem_new(0);
54249#endif /* FREECIV_JSON_CONNECTION */
54250
54251 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54252#ifdef FREECIV_JSON_CONNECTION
54253 /* Next array element. */
54254 field_addr.sub_location->number = i;
54255#endif /* FREECIV_JSON_CONNECTION */
54256
54257 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54258 }
54259
54260#ifdef FREECIV_JSON_CONNECTION
54261 /* Exit array. */
54262 FC_FREE(field_addr.sub_location);
54263#endif /* FREECIV_JSON_CONNECTION */
54264 }
54265
54266 if (e) {
54267 log_packet_detailed("'reqs' field error detected");
54268 }
54269
54270#ifdef FREECIV_JSON_CONNECTION
54271 field_addr.name = "helptext";
54272#endif /* FREECIV_JSON_CONNECTION */
54273 e = 0;
54274
54275 if (!real_packet->helptext) {
54276 /* Transmit null as empty */
54277 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54278 } else {
54279 int i;
54280
54282 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54283
54284#ifdef FREECIV_JSON_CONNECTION
54285 /* Enter array. */
54286 field_addr.sub_location = plocation_elem_new(0);
54287#endif /* FREECIV_JSON_CONNECTION */
54288
54289 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54290#ifdef FREECIV_JSON_CONNECTION
54291 /* Next array element. */
54292 field_addr.sub_location->number = i;
54293#endif /* FREECIV_JSON_CONNECTION */
54294
54295 {
54296 const char *pstr = strvec_get(real_packet->helptext, i);
54297
54298 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54299 }
54300 }
54301
54302#ifdef FREECIV_JSON_CONNECTION
54303 /* Exit array. */
54304 FC_FREE(field_addr.sub_location);
54305#endif /* FREECIV_JSON_CONNECTION */
54306 }
54307
54308 if (e) {
54309 log_packet_detailed("'helptext' field error detected");
54310 }
54311#endif /* FREECIV_DELTA_PROTOCOL */
54312
54314}
54315
54317{
54318 if (!pc->used) {
54319 log_error("WARNING: trying to send data to the closed connection %s",
54321 return -1;
54322 }
54323 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet != nullptr, -1,
54324 "Handler for PACKET_RULESET_SPECIALIST not installed");
54325 return pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet(pc, packet);
54326}
54327
54329{
54330 conn_list_iterate(dest, pconn) {
54333}
54334
54336{
54337 memset(packet, 0, sizeof(*packet));
54338}
54339
54340#define free_packet_ruleset_government_ruler_title(_packet) (void) 0
54341#define destroy_packet_ruleset_government_ruler_title free
54342
54343#ifdef FREECIV_DELTA_PROTOCOL
54344#define hash_packet_ruleset_government_ruler_title_100 hash_const
54345#define cmp_packet_ruleset_government_ruler_title_100 cmp_const
54347#endif /* FREECIV_DELTA_PROTOCOL */
54348
54350{
54351#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government_ruler_title(_packet)
54353
54354#ifdef FREECIV_JSON_CONNECTION
54355 struct plocation field_addr;
54356 {
54357 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54360 }
54361#endif /* FREECIV_JSON_CONNECTION */
54362
54363 log_packet_detailed("packet_ruleset_government_ruler_title_100: got info about ()");
54364
54365#ifdef FREECIV_DELTA_PROTOCOL
54368 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT_RULER_TITLE;
54369
54370 if (nullptr == *hash) {
54372 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54373 }
54374
54375 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54376 *real_packet = *old;
54377 } else {
54378 /* packet is already initialized empty */
54379 log_packet_detailed(" no old info");
54380 }
54381
54382#ifdef FREECIV_JSON_CONNECTION
54383 field_addr.name = "fields";
54384#endif /* FREECIV_JSON_CONNECTION */
54385 DIO_BV_GET(&din, &field_addr, fields);
54386
54387 if (BV_ISSET(fields, 0)) {
54388 log_packet_detailed(" got field 'gov'");
54389
54390#ifdef FREECIV_JSON_CONNECTION
54391 field_addr.name = "gov";
54392#endif /* FREECIV_JSON_CONNECTION */
54393
54394 {
54395 int readin;
54396
54397 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54399 }
54400 real_packet->gov = readin;
54401 }
54402 }
54403
54404 if (BV_ISSET(fields, 1)) {
54405 log_packet_detailed(" got field 'nation'");
54406
54407#ifdef FREECIV_JSON_CONNECTION
54408 field_addr.name = "nation";
54409#endif /* FREECIV_JSON_CONNECTION */
54410
54411 {
54412 int readin;
54413
54414 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54416 }
54417 real_packet->nation = readin;
54418 }
54419 }
54420
54421 if (BV_ISSET(fields, 2)) {
54422 log_packet_detailed(" got field 'male_title'");
54423
54424#ifdef FREECIV_JSON_CONNECTION
54425 field_addr.name = "male_title";
54426#endif /* FREECIV_JSON_CONNECTION */
54427
54428 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54429 RECEIVE_PACKET_FIELD_ERROR(male_title);
54430 }
54431 }
54432
54433 if (BV_ISSET(fields, 3)) {
54434 log_packet_detailed(" got field 'female_title'");
54435
54436#ifdef FREECIV_JSON_CONNECTION
54437 field_addr.name = "female_title";
54438#endif /* FREECIV_JSON_CONNECTION */
54439
54440 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54441 RECEIVE_PACKET_FIELD_ERROR(female_title);
54442 }
54443 }
54444
54445 if (nullptr == old) {
54446 old = fc_malloc(sizeof(*old));
54448 *old = *real_packet;
54450 } else {
54451 *old = *real_packet;
54452 }
54453
54454#else /* FREECIV_DELTA_PROTOCOL */
54455#ifdef FREECIV_JSON_CONNECTION
54456 field_addr.name = "gov";
54457#endif /* FREECIV_JSON_CONNECTION */
54458
54459 {
54460 int readin;
54461
54462 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54464 }
54465 real_packet->gov = readin;
54466 }
54467
54468#ifdef FREECIV_JSON_CONNECTION
54469 field_addr.name = "nation";
54470#endif /* FREECIV_JSON_CONNECTION */
54471
54472 {
54473 int readin;
54474
54475 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54477 }
54478 real_packet->nation = readin;
54479 }
54480
54481#ifdef FREECIV_JSON_CONNECTION
54482 field_addr.name = "male_title";
54483#endif /* FREECIV_JSON_CONNECTION */
54484
54485 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54486 RECEIVE_PACKET_FIELD_ERROR(male_title);
54487 }
54488
54489#ifdef FREECIV_JSON_CONNECTION
54490 field_addr.name = "female_title";
54491#endif /* FREECIV_JSON_CONNECTION */
54492
54493 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54494 RECEIVE_PACKET_FIELD_ERROR(female_title);
54495 }
54496#endif /* FREECIV_DELTA_PROTOCOL */
54497
54499#undef FREE_PACKET_STRUCT
54500}
54501
54503{
54505 int e;
54507
54508 log_packet_detailed("packet_ruleset_government_ruler_title_100: sending info about ()");
54509
54510#ifdef FREECIV_DELTA_PROTOCOL
54513 bool differ;
54515
54516 if (nullptr == *hash) {
54518 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54519 }
54520 BV_CLR_ALL(fields);
54521
54522 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54523 old = fc_malloc(sizeof(*old));
54524 /* temporary bitcopy just to insert correctly */
54525 *old = *real_packet;
54528 }
54529
54530 differ = (old->gov != real_packet->gov);
54531 if (differ) {
54532 BV_SET(fields, 0);
54533 }
54534
54535 differ = (old->nation != real_packet->nation);
54536 if (differ) {
54537 BV_SET(fields, 1);
54538 }
54539
54540 differ = (strcmp(old->male_title, real_packet->male_title) != 0);
54541 if (differ) {
54542 BV_SET(fields, 2);
54543 }
54544
54545 differ = (strcmp(old->female_title, real_packet->female_title) != 0);
54546 if (differ) {
54547 BV_SET(fields, 3);
54548 }
54549#endif /* FREECIV_DELTA_PROTOCOL */
54550
54551#ifdef FREECIV_JSON_CONNECTION
54552 struct plocation field_addr;
54553 {
54554 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54557 }
54558#endif /* FREECIV_JSON_CONNECTION */
54559
54560#ifdef FREECIV_DELTA_PROTOCOL
54561#ifdef FREECIV_JSON_CONNECTION
54562 field_addr.name = "fields";
54563#endif /* FREECIV_JSON_CONNECTION */
54564 e = 0;
54565 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54566 if (e) {
54567 log_packet_detailed("fields bitvector error detected");
54568 }
54569
54570 if (BV_ISSET(fields, 0)) {
54571 log_packet_detailed(" field 'gov' has changed");
54572
54573#ifdef FREECIV_JSON_CONNECTION
54574 field_addr.name = "gov";
54575#endif /* FREECIV_JSON_CONNECTION */
54576 e = 0;
54577
54578 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54579
54580 if (e) {
54581 log_packet_detailed("'gov' field error detected");
54582 }
54583 }
54584
54585 if (BV_ISSET(fields, 1)) {
54586 log_packet_detailed(" field 'nation' has changed");
54587
54588#ifdef FREECIV_JSON_CONNECTION
54589 field_addr.name = "nation";
54590#endif /* FREECIV_JSON_CONNECTION */
54591 e = 0;
54592
54593 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54594
54595 if (e) {
54596 log_packet_detailed("'nation' field error detected");
54597 }
54598 }
54599
54600 if (BV_ISSET(fields, 2)) {
54601 log_packet_detailed(" field 'male_title' has changed");
54602
54603#ifdef FREECIV_JSON_CONNECTION
54604 field_addr.name = "male_title";
54605#endif /* FREECIV_JSON_CONNECTION */
54606 e = 0;
54607
54608 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54609
54610 if (e) {
54611 log_packet_detailed("'male_title' field error detected");
54612 }
54613 }
54614
54615 if (BV_ISSET(fields, 3)) {
54616 log_packet_detailed(" field 'female_title' has changed");
54617
54618#ifdef FREECIV_JSON_CONNECTION
54619 field_addr.name = "female_title";
54620#endif /* FREECIV_JSON_CONNECTION */
54621 e = 0;
54622
54623 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54624
54625 if (e) {
54626 log_packet_detailed("'female_title' field error detected");
54627 }
54628 }
54629
54630 *old = *real_packet;
54631
54632#else /* FREECIV_DELTA_PROTOCOL */
54633#ifdef FREECIV_JSON_CONNECTION
54634 field_addr.name = "gov";
54635#endif /* FREECIV_JSON_CONNECTION */
54636 e = 0;
54637
54638 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54639
54640 if (e) {
54641 log_packet_detailed("'gov' field error detected");
54642 }
54643
54644#ifdef FREECIV_JSON_CONNECTION
54645 field_addr.name = "nation";
54646#endif /* FREECIV_JSON_CONNECTION */
54647 e = 0;
54648
54649 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54650
54651 if (e) {
54652 log_packet_detailed("'nation' field error detected");
54653 }
54654
54655#ifdef FREECIV_JSON_CONNECTION
54656 field_addr.name = "male_title";
54657#endif /* FREECIV_JSON_CONNECTION */
54658 e = 0;
54659
54660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54661
54662 if (e) {
54663 log_packet_detailed("'male_title' field error detected");
54664 }
54665
54666#ifdef FREECIV_JSON_CONNECTION
54667 field_addr.name = "female_title";
54668#endif /* FREECIV_JSON_CONNECTION */
54669 e = 0;
54670
54671 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54672
54673 if (e) {
54674 log_packet_detailed("'female_title' field error detected");
54675 }
54676#endif /* FREECIV_DELTA_PROTOCOL */
54677
54679}
54680
54682{
54683 if (!pc->used) {
54684 log_error("WARNING: trying to send data to the closed connection %s",
54686 return -1;
54687 }
54688 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet != nullptr, -1,
54689 "Handler for PACKET_RULESET_GOVERNMENT_RULER_TITLE not installed");
54690 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet(pc, packet);
54691}
54692
54699
54700static inline void init_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54701{
54702 memset(packet, 0, sizeof(*packet));
54703
54705 packet->helptext = strvec_new();
54706}
54707
54708static inline void free_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54709{
54710 if (packet->helptext) {
54711 strvec_destroy(packet->helptext);
54712 packet->helptext = nullptr;
54713 }
54715}
54716
54717static inline void destroy_packet_ruleset_tech(void *packet)
54718{
54720 free(packet);
54721}
54722
54723#ifdef FREECIV_DELTA_PROTOCOL
54724#define hash_packet_ruleset_tech_100 hash_const
54725#define cmp_packet_ruleset_tech_100 cmp_const
54727#endif /* FREECIV_DELTA_PROTOCOL */
54728
54730{
54731#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech(_packet)
54733
54734#ifdef FREECIV_JSON_CONNECTION
54735 struct plocation field_addr;
54736 {
54737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54740 }
54741#endif /* FREECIV_JSON_CONNECTION */
54742
54743 log_packet_detailed("packet_ruleset_tech_100: got info about ()");
54744
54745#ifdef FREECIV_DELTA_PROTOCOL
54747 struct packet_ruleset_tech *old;
54748 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH;
54749
54750 if (nullptr == *hash) {
54752 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
54753 }
54754
54755 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54756 real_packet->id = old->id;
54757 real_packet->root_req = old->root_req;
54758 requirement_vector_copy(&real_packet->research_reqs, &old->research_reqs);
54759 real_packet->tclass = old->tclass;
54760 real_packet->removed = old->removed;
54761 real_packet->flags = old->flags;
54762 real_packet->cost = old->cost;
54763 real_packet->num_reqs = old->num_reqs;
54764 sz_strlcpy(real_packet->name, old->name);
54765 sz_strlcpy(real_packet->rule_name, old->rule_name);
54766 if (old->helptext) {
54767 strvec_copy(real_packet->helptext, old->helptext);
54768 } else {
54769 strvec_clear(real_packet->helptext);
54770 }
54771 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
54772 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
54773 } else {
54774 /* packet is already initialized empty */
54775 log_packet_detailed(" no old info");
54776 }
54777
54778#ifdef FREECIV_JSON_CONNECTION
54779 field_addr.name = "fields";
54780#endif /* FREECIV_JSON_CONNECTION */
54781 DIO_BV_GET(&din, &field_addr, fields);
54782
54783 if (BV_ISSET(fields, 0)) {
54784 log_packet_detailed(" got field 'id'");
54785
54786#ifdef FREECIV_JSON_CONNECTION
54787 field_addr.name = "id";
54788#endif /* FREECIV_JSON_CONNECTION */
54789
54790 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
54792 }
54793 }
54794
54795 if (BV_ISSET(fields, 1)) {
54796 log_packet_detailed(" got field 'root_req'");
54797
54798#ifdef FREECIV_JSON_CONNECTION
54799 field_addr.name = "root_req";
54800#endif /* FREECIV_JSON_CONNECTION */
54801
54802 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
54804 }
54805 }
54806
54807 if (BV_ISSET(fields, 2)) {
54808 log_packet_detailed(" got field 'research_reqs'");
54809
54810#ifdef FREECIV_JSON_CONNECTION
54811 field_addr.name = "research_reqs";
54812#endif /* FREECIV_JSON_CONNECTION */
54813
54814 {
54815 int i;
54816
54817 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
54818 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54819 }
54820 requirement_vector_reserve(&real_packet->research_reqs, i);
54821
54822#ifdef FREECIV_JSON_CONNECTION
54823 /* Enter array. */
54824 field_addr.sub_location = plocation_elem_new(0);
54825#endif /* FREECIV_JSON_CONNECTION */
54826
54827 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
54828#ifdef FREECIV_JSON_CONNECTION
54829 /* Next array element */
54830 field_addr.sub_location->number = i;
54831#endif /* FREECIV_JSON_CONNECTION */
54832
54833 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
54834 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54835 }
54836 }
54837
54838#ifdef FREECIV_JSON_CONNECTION
54839 /* Exit array. */
54840 FC_FREE(field_addr.sub_location);
54841#endif /* FREECIV_JSON_CONNECTION */
54842 }
54843 }
54844
54845 if (BV_ISSET(fields, 3)) {
54846 log_packet_detailed(" got field 'tclass'");
54847
54848#ifdef FREECIV_JSON_CONNECTION
54849 field_addr.name = "tclass";
54850#endif /* FREECIV_JSON_CONNECTION */
54851
54852 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
54854 }
54855 }
54856
54857 real_packet->removed = BV_ISSET(fields, 4);
54858
54859 if (BV_ISSET(fields, 5)) {
54860 log_packet_detailed(" got field 'flags'");
54861
54862#ifdef FREECIV_JSON_CONNECTION
54863 field_addr.name = "flags";
54864#endif /* FREECIV_JSON_CONNECTION */
54865
54866 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
54868 }
54869 }
54870
54871 if (BV_ISSET(fields, 6)) {
54872 log_packet_detailed(" got field 'cost'");
54873
54874#ifdef FREECIV_JSON_CONNECTION
54875 field_addr.name = "cost";
54876#endif /* FREECIV_JSON_CONNECTION */
54877
54878 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
54880 }
54881 }
54882
54883 if (BV_ISSET(fields, 7)) {
54884 log_packet_detailed(" got field 'num_reqs'");
54885
54886#ifdef FREECIV_JSON_CONNECTION
54887 field_addr.name = "num_reqs";
54888#endif /* FREECIV_JSON_CONNECTION */
54889
54890 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
54892 }
54893 }
54894
54895 if (BV_ISSET(fields, 8)) {
54896 log_packet_detailed(" got field 'name'");
54897
54898#ifdef FREECIV_JSON_CONNECTION
54899 field_addr.name = "name";
54900#endif /* FREECIV_JSON_CONNECTION */
54901
54902 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
54904 }
54905 }
54906
54907 if (BV_ISSET(fields, 9)) {
54908 log_packet_detailed(" got field 'rule_name'");
54909
54910#ifdef FREECIV_JSON_CONNECTION
54911 field_addr.name = "rule_name";
54912#endif /* FREECIV_JSON_CONNECTION */
54913
54914 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
54915 RECEIVE_PACKET_FIELD_ERROR(rule_name);
54916 }
54917 }
54918
54919 if (BV_ISSET(fields, 10)) {
54920 log_packet_detailed(" got field 'helptext'");
54921
54922#ifdef FREECIV_JSON_CONNECTION
54923 field_addr.name = "helptext";
54924#endif /* FREECIV_JSON_CONNECTION */
54925
54926 {
54927 int i;
54928
54929 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
54931 }
54932 strvec_reserve(real_packet->helptext, i);
54933
54934#ifdef FREECIV_JSON_CONNECTION
54935 /* Enter array. */
54936 field_addr.sub_location = plocation_elem_new(0);
54937#endif /* FREECIV_JSON_CONNECTION */
54938
54939 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54940#ifdef FREECIV_JSON_CONNECTION
54941 /* Next array element */
54942 field_addr.sub_location->number = i;
54943#endif /* FREECIV_JSON_CONNECTION */
54944
54945 {
54946 char readin[MAX_LEN_PACKET];
54947
54948 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
54949 || !strvec_set(real_packet->helptext, i, readin)) {
54951 }
54952 }
54953 }
54954
54955#ifdef FREECIV_JSON_CONNECTION
54956 /* Exit array. */
54957 FC_FREE(field_addr.sub_location);
54958#endif /* FREECIV_JSON_CONNECTION */
54959 }
54960 }
54961
54962 if (BV_ISSET(fields, 11)) {
54963 log_packet_detailed(" got field 'graphic_str'");
54964
54965#ifdef FREECIV_JSON_CONNECTION
54966 field_addr.name = "graphic_str";
54967#endif /* FREECIV_JSON_CONNECTION */
54968
54969 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
54970 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
54971 }
54972 }
54973
54974 if (BV_ISSET(fields, 12)) {
54975 log_packet_detailed(" got field 'graphic_alt'");
54976
54977#ifdef FREECIV_JSON_CONNECTION
54978 field_addr.name = "graphic_alt";
54979#endif /* FREECIV_JSON_CONNECTION */
54980
54981 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
54982 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
54983 }
54984 }
54985
54986 if (nullptr == old) {
54987 old = fc_malloc(sizeof(*old));
54989 old->id = real_packet->id;
54990 old->root_req = real_packet->root_req;
54991 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
54992 old->tclass = real_packet->tclass;
54993 old->removed = real_packet->removed;
54994 old->flags = real_packet->flags;
54995 old->cost = real_packet->cost;
54996 old->num_reqs = real_packet->num_reqs;
54997 sz_strlcpy(old->name, real_packet->name);
54998 sz_strlcpy(old->rule_name, real_packet->rule_name);
54999 if (real_packet->helptext) {
55000 strvec_copy(old->helptext, real_packet->helptext);
55001 } else {
55002 strvec_clear(old->helptext);
55003 }
55004 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55005 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55007 } else {
55008 old->id = real_packet->id;
55009 old->root_req = real_packet->root_req;
55010 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55011 old->tclass = real_packet->tclass;
55012 old->removed = real_packet->removed;
55013 old->flags = real_packet->flags;
55014 old->cost = real_packet->cost;
55015 old->num_reqs = real_packet->num_reqs;
55016 sz_strlcpy(old->name, real_packet->name);
55017 sz_strlcpy(old->rule_name, real_packet->rule_name);
55018 if (real_packet->helptext) {
55019 strvec_copy(old->helptext, real_packet->helptext);
55020 } else {
55021 strvec_clear(old->helptext);
55022 }
55023 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55024 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55025 }
55026
55027#else /* FREECIV_DELTA_PROTOCOL */
55028#ifdef FREECIV_JSON_CONNECTION
55029 field_addr.name = "id";
55030#endif /* FREECIV_JSON_CONNECTION */
55031
55032 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55034 }
55035
55036#ifdef FREECIV_JSON_CONNECTION
55037 field_addr.name = "root_req";
55038#endif /* FREECIV_JSON_CONNECTION */
55039
55040 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
55042 }
55043
55044#ifdef FREECIV_JSON_CONNECTION
55045 field_addr.name = "research_reqs";
55046#endif /* FREECIV_JSON_CONNECTION */
55047
55048 {
55049 int i;
55050
55051 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55052 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55053 }
55054 requirement_vector_reserve(&real_packet->research_reqs, i);
55055
55056#ifdef FREECIV_JSON_CONNECTION
55057 /* Enter array. */
55058 field_addr.sub_location = plocation_elem_new(0);
55059#endif /* FREECIV_JSON_CONNECTION */
55060
55061 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55062#ifdef FREECIV_JSON_CONNECTION
55063 /* Next array element */
55064 field_addr.sub_location->number = i;
55065#endif /* FREECIV_JSON_CONNECTION */
55066
55067 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
55068 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55069 }
55070 }
55071
55072#ifdef FREECIV_JSON_CONNECTION
55073 /* Exit array. */
55074 FC_FREE(field_addr.sub_location);
55075#endif /* FREECIV_JSON_CONNECTION */
55076 }
55077
55078#ifdef FREECIV_JSON_CONNECTION
55079 field_addr.name = "tclass";
55080#endif /* FREECIV_JSON_CONNECTION */
55081
55082 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
55084 }
55085
55086#ifdef FREECIV_JSON_CONNECTION
55087 field_addr.name = "removed";
55088#endif /* FREECIV_JSON_CONNECTION */
55089
55090 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removed)) {
55092 }
55093
55094#ifdef FREECIV_JSON_CONNECTION
55095 field_addr.name = "flags";
55096#endif /* FREECIV_JSON_CONNECTION */
55097
55098 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
55100 }
55101
55102#ifdef FREECIV_JSON_CONNECTION
55103 field_addr.name = "cost";
55104#endif /* FREECIV_JSON_CONNECTION */
55105
55106 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
55108 }
55109
55110#ifdef FREECIV_JSON_CONNECTION
55111 field_addr.name = "num_reqs";
55112#endif /* FREECIV_JSON_CONNECTION */
55113
55114 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
55116 }
55117
55118#ifdef FREECIV_JSON_CONNECTION
55119 field_addr.name = "name";
55120#endif /* FREECIV_JSON_CONNECTION */
55121
55122 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55124 }
55125
55126#ifdef FREECIV_JSON_CONNECTION
55127 field_addr.name = "rule_name";
55128#endif /* FREECIV_JSON_CONNECTION */
55129
55130 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55131 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55132 }
55133
55134#ifdef FREECIV_JSON_CONNECTION
55135 field_addr.name = "helptext";
55136#endif /* FREECIV_JSON_CONNECTION */
55137
55138 {
55139 int i;
55140
55141 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55143 }
55144 strvec_reserve(real_packet->helptext, i);
55145
55146#ifdef FREECIV_JSON_CONNECTION
55147 /* Enter array. */
55148 field_addr.sub_location = plocation_elem_new(0);
55149#endif /* FREECIV_JSON_CONNECTION */
55150
55151 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55152#ifdef FREECIV_JSON_CONNECTION
55153 /* Next array element */
55154 field_addr.sub_location->number = i;
55155#endif /* FREECIV_JSON_CONNECTION */
55156
55157 {
55158 char readin[MAX_LEN_PACKET];
55159
55160 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
55161 || !strvec_set(real_packet->helptext, i, readin)) {
55163 }
55164 }
55165 }
55166
55167#ifdef FREECIV_JSON_CONNECTION
55168 /* Exit array. */
55169 FC_FREE(field_addr.sub_location);
55170#endif /* FREECIV_JSON_CONNECTION */
55171 }
55172
55173#ifdef FREECIV_JSON_CONNECTION
55174 field_addr.name = "graphic_str";
55175#endif /* FREECIV_JSON_CONNECTION */
55176
55177 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55178 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55179 }
55180
55181#ifdef FREECIV_JSON_CONNECTION
55182 field_addr.name = "graphic_alt";
55183#endif /* FREECIV_JSON_CONNECTION */
55184
55185 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55186 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55187 }
55188#endif /* FREECIV_DELTA_PROTOCOL */
55189
55191#undef FREE_PACKET_STRUCT
55192}
55193
55194static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
55195{
55196 const struct packet_ruleset_tech *real_packet = packet;
55197 int e;
55199
55200 log_packet_detailed("packet_ruleset_tech_100: sending info about ()");
55201
55202#ifdef FREECIV_DELTA_PROTOCOL
55204 struct packet_ruleset_tech *old;
55205 bool differ;
55206 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH;
55207
55208 if (nullptr == *hash) {
55210 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
55211 }
55212 BV_CLR_ALL(fields);
55213
55214 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55215 old = fc_malloc(sizeof(*old));
55216 /* temporary bitcopy just to insert correctly */
55217 *old = *real_packet;
55220 }
55221
55222 differ = (old->id != real_packet->id);
55223 if (differ) {
55224 BV_SET(fields, 0);
55225 }
55226
55227 differ = (old->root_req != real_packet->root_req);
55228 if (differ) {
55229 BV_SET(fields, 1);
55230 }
55231
55232 differ = (requirement_vector_size(&old->research_reqs) != requirement_vector_size(&real_packet->research_reqs));
55233 if (!differ) {
55234 int i;
55235
55236 for (i = 0; i < requirement_vector_size(&old->research_reqs); i++) {
55237 differ = !are_requirements_equal(&old->research_reqs.p[i], &real_packet->research_reqs.p[i]);
55238 if (differ) {
55239 break;
55240 }
55241 }
55242 }
55243 if (differ) {
55244 BV_SET(fields, 2);
55245 }
55246
55247 differ = (old->tclass != real_packet->tclass);
55248 if (differ) {
55249 BV_SET(fields, 3);
55250 }
55251
55252 /* folded into head */
55253 if (real_packet->removed) {
55254 BV_SET(fields, 4);
55255 }
55256
55257 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
55258 if (differ) {
55259 BV_SET(fields, 5);
55260 }
55261
55262 differ = ((int) (old->cost * 100) != (int) (real_packet->cost * 100));
55263 if (differ) {
55264 BV_SET(fields, 6);
55265 }
55266
55267 differ = (old->num_reqs != real_packet->num_reqs);
55268 if (differ) {
55269 BV_SET(fields, 7);
55270 }
55271
55272 differ = (strcmp(old->name, real_packet->name) != 0);
55273 if (differ) {
55274 BV_SET(fields, 8);
55275 }
55276
55277 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55278 if (differ) {
55279 BV_SET(fields, 9);
55280 }
55281
55282 if (real_packet->helptext) {
55283 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
55284 } else {
55285 differ = (strvec_size(old->helptext) > 0);
55286 }
55287 if (differ) {
55288 BV_SET(fields, 10);
55289 }
55290
55291 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
55292 if (differ) {
55293 BV_SET(fields, 11);
55294 }
55295
55296 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
55297 if (differ) {
55298 BV_SET(fields, 12);
55299 }
55300#endif /* FREECIV_DELTA_PROTOCOL */
55301
55302#ifdef FREECIV_JSON_CONNECTION
55303 struct plocation field_addr;
55304 {
55305 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55308 }
55309#endif /* FREECIV_JSON_CONNECTION */
55310
55311#ifdef FREECIV_DELTA_PROTOCOL
55312#ifdef FREECIV_JSON_CONNECTION
55313 field_addr.name = "fields";
55314#endif /* FREECIV_JSON_CONNECTION */
55315 e = 0;
55316 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55317 if (e) {
55318 log_packet_detailed("fields bitvector error detected");
55319 }
55320
55321 if (BV_ISSET(fields, 0)) {
55322 log_packet_detailed(" field 'id' has changed");
55323
55324#ifdef FREECIV_JSON_CONNECTION
55325 field_addr.name = "id";
55326#endif /* FREECIV_JSON_CONNECTION */
55327 e = 0;
55328
55329 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55330
55331 if (e) {
55332 log_packet_detailed("'id' field error detected");
55333 }
55334 }
55335
55336 if (BV_ISSET(fields, 1)) {
55337 log_packet_detailed(" field 'root_req' has changed");
55338
55339#ifdef FREECIV_JSON_CONNECTION
55340 field_addr.name = "root_req";
55341#endif /* FREECIV_JSON_CONNECTION */
55342 e = 0;
55343
55344 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55345
55346 if (e) {
55347 log_packet_detailed("'root_req' field error detected");
55348 }
55349 }
55350
55351 if (BV_ISSET(fields, 2)) {
55352 log_packet_detailed(" field 'research_reqs' has changed");
55353
55354#ifdef FREECIV_JSON_CONNECTION
55355 field_addr.name = "research_reqs";
55356#endif /* FREECIV_JSON_CONNECTION */
55357 e = 0;
55358
55359 {
55360 int i;
55361
55364
55365#ifdef FREECIV_JSON_CONNECTION
55366 /* Enter array. */
55367 field_addr.sub_location = plocation_elem_new(0);
55368#endif /* FREECIV_JSON_CONNECTION */
55369
55370 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55371#ifdef FREECIV_JSON_CONNECTION
55372 /* Next array element. */
55373 field_addr.sub_location->number = i;
55374#endif /* FREECIV_JSON_CONNECTION */
55375
55376 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55377 }
55378
55379#ifdef FREECIV_JSON_CONNECTION
55380 /* Exit array. */
55381 FC_FREE(field_addr.sub_location);
55382#endif /* FREECIV_JSON_CONNECTION */
55383 }
55384
55385 if (e) {
55386 log_packet_detailed("'research_reqs' field error detected");
55387 }
55388 }
55389
55390 if (BV_ISSET(fields, 3)) {
55391 log_packet_detailed(" field 'tclass' has changed");
55392
55393#ifdef FREECIV_JSON_CONNECTION
55394 field_addr.name = "tclass";
55395#endif /* FREECIV_JSON_CONNECTION */
55396 e = 0;
55397
55398 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55399
55400 if (e) {
55401 log_packet_detailed("'tclass' field error detected");
55402 }
55403 }
55404
55405 /* field 4 is folded into the header */
55406
55407 if (BV_ISSET(fields, 5)) {
55408 log_packet_detailed(" field 'flags' has changed");
55409
55410#ifdef FREECIV_JSON_CONNECTION
55411 field_addr.name = "flags";
55412#endif /* FREECIV_JSON_CONNECTION */
55413 e = 0;
55414
55415 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55416
55417 if (e) {
55418 log_packet_detailed("'flags' field error detected");
55419 }
55420 }
55421
55422 if (BV_ISSET(fields, 6)) {
55423 log_packet_detailed(" field 'cost' has changed");
55424
55425#ifdef FREECIV_JSON_CONNECTION
55426 field_addr.name = "cost";
55427#endif /* FREECIV_JSON_CONNECTION */
55428 e = 0;
55429
55430 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55431
55432 if (e) {
55433 log_packet_detailed("'cost' field error detected");
55434 }
55435 }
55436
55437 if (BV_ISSET(fields, 7)) {
55438 log_packet_detailed(" field 'num_reqs' has changed");
55439
55440#ifdef FREECIV_JSON_CONNECTION
55441 field_addr.name = "num_reqs";
55442#endif /* FREECIV_JSON_CONNECTION */
55443 e = 0;
55444
55445 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55446
55447 if (e) {
55448 log_packet_detailed("'num_reqs' field error detected");
55449 }
55450 }
55451
55452 if (BV_ISSET(fields, 8)) {
55453 log_packet_detailed(" field 'name' has changed");
55454
55455#ifdef FREECIV_JSON_CONNECTION
55456 field_addr.name = "name";
55457#endif /* FREECIV_JSON_CONNECTION */
55458 e = 0;
55459
55460 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55461
55462 if (e) {
55463 log_packet_detailed("'name' field error detected");
55464 }
55465 }
55466
55467 if (BV_ISSET(fields, 9)) {
55468 log_packet_detailed(" field 'rule_name' has changed");
55469
55470#ifdef FREECIV_JSON_CONNECTION
55471 field_addr.name = "rule_name";
55472#endif /* FREECIV_JSON_CONNECTION */
55473 e = 0;
55474
55475 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55476
55477 if (e) {
55478 log_packet_detailed("'rule_name' field error detected");
55479 }
55480 }
55481
55482 if (BV_ISSET(fields, 10)) {
55483 log_packet_detailed(" field 'helptext' has changed");
55484
55485#ifdef FREECIV_JSON_CONNECTION
55486 field_addr.name = "helptext";
55487#endif /* FREECIV_JSON_CONNECTION */
55488 e = 0;
55489
55490 if (!real_packet->helptext) {
55491 /* Transmit null as empty */
55492 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55493 } else {
55494 int i;
55495
55497 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55498
55499#ifdef FREECIV_JSON_CONNECTION
55500 /* Enter array. */
55501 field_addr.sub_location = plocation_elem_new(0);
55502#endif /* FREECIV_JSON_CONNECTION */
55503
55504 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55505#ifdef FREECIV_JSON_CONNECTION
55506 /* Next array element. */
55507 field_addr.sub_location->number = i;
55508#endif /* FREECIV_JSON_CONNECTION */
55509
55510 {
55511 const char *pstr = strvec_get(real_packet->helptext, i);
55512
55513 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55514 }
55515 }
55516
55517#ifdef FREECIV_JSON_CONNECTION
55518 /* Exit array. */
55519 FC_FREE(field_addr.sub_location);
55520#endif /* FREECIV_JSON_CONNECTION */
55521 }
55522
55523 if (e) {
55524 log_packet_detailed("'helptext' field error detected");
55525 }
55526 }
55527
55528 if (BV_ISSET(fields, 11)) {
55529 log_packet_detailed(" field 'graphic_str' has changed");
55530
55531#ifdef FREECIV_JSON_CONNECTION
55532 field_addr.name = "graphic_str";
55533#endif /* FREECIV_JSON_CONNECTION */
55534 e = 0;
55535
55536 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55537
55538 if (e) {
55539 log_packet_detailed("'graphic_str' field error detected");
55540 }
55541 }
55542
55543 if (BV_ISSET(fields, 12)) {
55544 log_packet_detailed(" field 'graphic_alt' has changed");
55545
55546#ifdef FREECIV_JSON_CONNECTION
55547 field_addr.name = "graphic_alt";
55548#endif /* FREECIV_JSON_CONNECTION */
55549 e = 0;
55550
55551 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55552
55553 if (e) {
55554 log_packet_detailed("'graphic_alt' field error detected");
55555 }
55556 }
55557
55558 old->id = real_packet->id;
55559 old->root_req = real_packet->root_req;
55560 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55561 old->tclass = real_packet->tclass;
55562 old->removed = real_packet->removed;
55563 old->flags = real_packet->flags;
55564 old->cost = real_packet->cost;
55565 old->num_reqs = real_packet->num_reqs;
55566 sz_strlcpy(old->name, real_packet->name);
55567 sz_strlcpy(old->rule_name, real_packet->rule_name);
55568 if (real_packet->helptext) {
55569 strvec_copy(old->helptext, real_packet->helptext);
55570 } else {
55571 strvec_clear(old->helptext);
55572 }
55573 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55574 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55575
55576#else /* FREECIV_DELTA_PROTOCOL */
55577#ifdef FREECIV_JSON_CONNECTION
55578 field_addr.name = "id";
55579#endif /* FREECIV_JSON_CONNECTION */
55580 e = 0;
55581
55582 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55583
55584 if (e) {
55585 log_packet_detailed("'id' field error detected");
55586 }
55587
55588#ifdef FREECIV_JSON_CONNECTION
55589 field_addr.name = "root_req";
55590#endif /* FREECIV_JSON_CONNECTION */
55591 e = 0;
55592
55593 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55594
55595 if (e) {
55596 log_packet_detailed("'root_req' field error detected");
55597 }
55598
55599#ifdef FREECIV_JSON_CONNECTION
55600 field_addr.name = "research_reqs";
55601#endif /* FREECIV_JSON_CONNECTION */
55602 e = 0;
55603
55604 {
55605 int i;
55606
55609
55610#ifdef FREECIV_JSON_CONNECTION
55611 /* Enter array. */
55612 field_addr.sub_location = plocation_elem_new(0);
55613#endif /* FREECIV_JSON_CONNECTION */
55614
55615 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55616#ifdef FREECIV_JSON_CONNECTION
55617 /* Next array element. */
55618 field_addr.sub_location->number = i;
55619#endif /* FREECIV_JSON_CONNECTION */
55620
55621 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55622 }
55623
55624#ifdef FREECIV_JSON_CONNECTION
55625 /* Exit array. */
55626 FC_FREE(field_addr.sub_location);
55627#endif /* FREECIV_JSON_CONNECTION */
55628 }
55629
55630 if (e) {
55631 log_packet_detailed("'research_reqs' field error detected");
55632 }
55633
55634#ifdef FREECIV_JSON_CONNECTION
55635 field_addr.name = "tclass";
55636#endif /* FREECIV_JSON_CONNECTION */
55637 e = 0;
55638
55639 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55640
55641 if (e) {
55642 log_packet_detailed("'tclass' field error detected");
55643 }
55644
55645#ifdef FREECIV_JSON_CONNECTION
55646 field_addr.name = "removed";
55647#endif /* FREECIV_JSON_CONNECTION */
55648 e = 0;
55649
55650 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removed);
55651
55652 if (e) {
55653 log_packet_detailed("'removed' field error detected");
55654 }
55655
55656#ifdef FREECIV_JSON_CONNECTION
55657 field_addr.name = "flags";
55658#endif /* FREECIV_JSON_CONNECTION */
55659 e = 0;
55660
55661 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55662
55663 if (e) {
55664 log_packet_detailed("'flags' field error detected");
55665 }
55666
55667#ifdef FREECIV_JSON_CONNECTION
55668 field_addr.name = "cost";
55669#endif /* FREECIV_JSON_CONNECTION */
55670 e = 0;
55671
55672 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55673
55674 if (e) {
55675 log_packet_detailed("'cost' field error detected");
55676 }
55677
55678#ifdef FREECIV_JSON_CONNECTION
55679 field_addr.name = "num_reqs";
55680#endif /* FREECIV_JSON_CONNECTION */
55681 e = 0;
55682
55683 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55684
55685 if (e) {
55686 log_packet_detailed("'num_reqs' field error detected");
55687 }
55688
55689#ifdef FREECIV_JSON_CONNECTION
55690 field_addr.name = "name";
55691#endif /* FREECIV_JSON_CONNECTION */
55692 e = 0;
55693
55694 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55695
55696 if (e) {
55697 log_packet_detailed("'name' field error detected");
55698 }
55699
55700#ifdef FREECIV_JSON_CONNECTION
55701 field_addr.name = "rule_name";
55702#endif /* FREECIV_JSON_CONNECTION */
55703 e = 0;
55704
55705 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55706
55707 if (e) {
55708 log_packet_detailed("'rule_name' field error detected");
55709 }
55710
55711#ifdef FREECIV_JSON_CONNECTION
55712 field_addr.name = "helptext";
55713#endif /* FREECIV_JSON_CONNECTION */
55714 e = 0;
55715
55716 if (!real_packet->helptext) {
55717 /* Transmit null as empty */
55718 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55719 } else {
55720 int i;
55721
55723 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55724
55725#ifdef FREECIV_JSON_CONNECTION
55726 /* Enter array. */
55727 field_addr.sub_location = plocation_elem_new(0);
55728#endif /* FREECIV_JSON_CONNECTION */
55729
55730 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55731#ifdef FREECIV_JSON_CONNECTION
55732 /* Next array element. */
55733 field_addr.sub_location->number = i;
55734#endif /* FREECIV_JSON_CONNECTION */
55735
55736 {
55737 const char *pstr = strvec_get(real_packet->helptext, i);
55738
55739 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55740 }
55741 }
55742
55743#ifdef FREECIV_JSON_CONNECTION
55744 /* Exit array. */
55745 FC_FREE(field_addr.sub_location);
55746#endif /* FREECIV_JSON_CONNECTION */
55747 }
55748
55749 if (e) {
55750 log_packet_detailed("'helptext' field error detected");
55751 }
55752
55753#ifdef FREECIV_JSON_CONNECTION
55754 field_addr.name = "graphic_str";
55755#endif /* FREECIV_JSON_CONNECTION */
55756 e = 0;
55757
55758 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55759
55760 if (e) {
55761 log_packet_detailed("'graphic_str' field error detected");
55762 }
55763
55764#ifdef FREECIV_JSON_CONNECTION
55765 field_addr.name = "graphic_alt";
55766#endif /* FREECIV_JSON_CONNECTION */
55767 e = 0;
55768
55769 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55770
55771 if (e) {
55772 log_packet_detailed("'graphic_alt' field error detected");
55773 }
55774#endif /* FREECIV_DELTA_PROTOCOL */
55775
55777}
55778
55780{
55781 if (!pc->used) {
55782 log_error("WARNING: trying to send data to the closed connection %s",
55784 return -1;
55785 }
55786 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH].packet != nullptr, -1,
55787 "Handler for PACKET_RULESET_TECH not installed");
55788 return pc->phs.handlers->send[PACKET_RULESET_TECH].packet(pc, packet);
55789}
55790
55791void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
55792{
55793 conn_list_iterate(dest, pconn) {
55796}
55797
55799{
55800 memset(packet, 0, sizeof(*packet));
55801}
55802
55803#define free_packet_ruleset_tech_class(_packet) (void) 0
55804#define destroy_packet_ruleset_tech_class free
55805
55806#ifdef FREECIV_DELTA_PROTOCOL
55807#define hash_packet_ruleset_tech_class_100 hash_const
55808#define cmp_packet_ruleset_tech_class_100 cmp_const
55810#endif /* FREECIV_DELTA_PROTOCOL */
55811
55813{
55814#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_class(_packet)
55816
55817#ifdef FREECIV_JSON_CONNECTION
55818 struct plocation field_addr;
55819 {
55820 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55823 }
55824#endif /* FREECIV_JSON_CONNECTION */
55825
55826 log_packet_detailed("packet_ruleset_tech_class_100: got info about ()");
55827
55828#ifdef FREECIV_DELTA_PROTOCOL
55831 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_CLASS;
55832
55833 if (nullptr == *hash) {
55835 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
55836 }
55837
55838 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55839 *real_packet = *old;
55840 } else {
55841 /* packet is already initialized empty */
55842 log_packet_detailed(" no old info");
55843 }
55844
55845#ifdef FREECIV_JSON_CONNECTION
55846 field_addr.name = "fields";
55847#endif /* FREECIV_JSON_CONNECTION */
55848 DIO_BV_GET(&din, &field_addr, fields);
55849
55850 if (BV_ISSET(fields, 0)) {
55851 log_packet_detailed(" got field 'id'");
55852
55853#ifdef FREECIV_JSON_CONNECTION
55854 field_addr.name = "id";
55855#endif /* FREECIV_JSON_CONNECTION */
55856
55857 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55859 }
55860 }
55861
55862 if (BV_ISSET(fields, 1)) {
55863 log_packet_detailed(" got field 'name'");
55864
55865#ifdef FREECIV_JSON_CONNECTION
55866 field_addr.name = "name";
55867#endif /* FREECIV_JSON_CONNECTION */
55868
55869 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55871 }
55872 }
55873
55874 if (BV_ISSET(fields, 2)) {
55875 log_packet_detailed(" got field 'rule_name'");
55876
55877#ifdef FREECIV_JSON_CONNECTION
55878 field_addr.name = "rule_name";
55879#endif /* FREECIV_JSON_CONNECTION */
55880
55881 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55882 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55883 }
55884 }
55885
55886 if (BV_ISSET(fields, 3)) {
55887 log_packet_detailed(" got field 'cost_pct'");
55888
55889#ifdef FREECIV_JSON_CONNECTION
55890 field_addr.name = "cost_pct";
55891#endif /* FREECIV_JSON_CONNECTION */
55892
55893 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
55895 }
55896 }
55897
55898 if (nullptr == old) {
55899 old = fc_malloc(sizeof(*old));
55901 *old = *real_packet;
55903 } else {
55904 *old = *real_packet;
55905 }
55906
55907#else /* FREECIV_DELTA_PROTOCOL */
55908#ifdef FREECIV_JSON_CONNECTION
55909 field_addr.name = "id";
55910#endif /* FREECIV_JSON_CONNECTION */
55911
55912 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55914 }
55915
55916#ifdef FREECIV_JSON_CONNECTION
55917 field_addr.name = "name";
55918#endif /* FREECIV_JSON_CONNECTION */
55919
55920 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55922 }
55923
55924#ifdef FREECIV_JSON_CONNECTION
55925 field_addr.name = "rule_name";
55926#endif /* FREECIV_JSON_CONNECTION */
55927
55928 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55929 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55930 }
55931
55932#ifdef FREECIV_JSON_CONNECTION
55933 field_addr.name = "cost_pct";
55934#endif /* FREECIV_JSON_CONNECTION */
55935
55936 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
55938 }
55939#endif /* FREECIV_DELTA_PROTOCOL */
55940
55942#undef FREE_PACKET_STRUCT
55943}
55944
55946{
55947 const struct packet_ruleset_tech_class *real_packet = packet;
55948 int e;
55950
55951 log_packet_detailed("packet_ruleset_tech_class_100: sending info about ()");
55952
55953#ifdef FREECIV_DELTA_PROTOCOL
55956 bool differ;
55957 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_CLASS;
55958
55959 if (nullptr == *hash) {
55961 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
55962 }
55963 BV_CLR_ALL(fields);
55964
55965 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55966 old = fc_malloc(sizeof(*old));
55967 /* temporary bitcopy just to insert correctly */
55968 *old = *real_packet;
55971 }
55972
55973 differ = (old->id != real_packet->id);
55974 if (differ) {
55975 BV_SET(fields, 0);
55976 }
55977
55978 differ = (strcmp(old->name, real_packet->name) != 0);
55979 if (differ) {
55980 BV_SET(fields, 1);
55981 }
55982
55983 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55984 if (differ) {
55985 BV_SET(fields, 2);
55986 }
55987
55988 differ = (old->cost_pct != real_packet->cost_pct);
55989 if (differ) {
55990 BV_SET(fields, 3);
55991 }
55992#endif /* FREECIV_DELTA_PROTOCOL */
55993
55994#ifdef FREECIV_JSON_CONNECTION
55995 struct plocation field_addr;
55996 {
55997 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56000 }
56001#endif /* FREECIV_JSON_CONNECTION */
56002
56003#ifdef FREECIV_DELTA_PROTOCOL
56004#ifdef FREECIV_JSON_CONNECTION
56005 field_addr.name = "fields";
56006#endif /* FREECIV_JSON_CONNECTION */
56007 e = 0;
56008 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56009 if (e) {
56010 log_packet_detailed("fields bitvector error detected");
56011 }
56012
56013 if (BV_ISSET(fields, 0)) {
56014 log_packet_detailed(" field 'id' has changed");
56015
56016#ifdef FREECIV_JSON_CONNECTION
56017 field_addr.name = "id";
56018#endif /* FREECIV_JSON_CONNECTION */
56019 e = 0;
56020
56021 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56022
56023 if (e) {
56024 log_packet_detailed("'id' field error detected");
56025 }
56026 }
56027
56028 if (BV_ISSET(fields, 1)) {
56029 log_packet_detailed(" field 'name' has changed");
56030
56031#ifdef FREECIV_JSON_CONNECTION
56032 field_addr.name = "name";
56033#endif /* FREECIV_JSON_CONNECTION */
56034 e = 0;
56035
56036 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56037
56038 if (e) {
56039 log_packet_detailed("'name' field error detected");
56040 }
56041 }
56042
56043 if (BV_ISSET(fields, 2)) {
56044 log_packet_detailed(" field 'rule_name' has changed");
56045
56046#ifdef FREECIV_JSON_CONNECTION
56047 field_addr.name = "rule_name";
56048#endif /* FREECIV_JSON_CONNECTION */
56049 e = 0;
56050
56051 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56052
56053 if (e) {
56054 log_packet_detailed("'rule_name' field error detected");
56055 }
56056 }
56057
56058 if (BV_ISSET(fields, 3)) {
56059 log_packet_detailed(" field 'cost_pct' has changed");
56060
56061#ifdef FREECIV_JSON_CONNECTION
56062 field_addr.name = "cost_pct";
56063#endif /* FREECIV_JSON_CONNECTION */
56064 e = 0;
56065
56066 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56067
56068 if (e) {
56069 log_packet_detailed("'cost_pct' field error detected");
56070 }
56071 }
56072
56073 *old = *real_packet;
56074
56075#else /* FREECIV_DELTA_PROTOCOL */
56076#ifdef FREECIV_JSON_CONNECTION
56077 field_addr.name = "id";
56078#endif /* FREECIV_JSON_CONNECTION */
56079 e = 0;
56080
56081 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56082
56083 if (e) {
56084 log_packet_detailed("'id' field error detected");
56085 }
56086
56087#ifdef FREECIV_JSON_CONNECTION
56088 field_addr.name = "name";
56089#endif /* FREECIV_JSON_CONNECTION */
56090 e = 0;
56091
56092 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56093
56094 if (e) {
56095 log_packet_detailed("'name' field error detected");
56096 }
56097
56098#ifdef FREECIV_JSON_CONNECTION
56099 field_addr.name = "rule_name";
56100#endif /* FREECIV_JSON_CONNECTION */
56101 e = 0;
56102
56103 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56104
56105 if (e) {
56106 log_packet_detailed("'rule_name' field error detected");
56107 }
56108
56109#ifdef FREECIV_JSON_CONNECTION
56110 field_addr.name = "cost_pct";
56111#endif /* FREECIV_JSON_CONNECTION */
56112 e = 0;
56113
56114 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56115
56116 if (e) {
56117 log_packet_detailed("'cost_pct' field error detected");
56118 }
56119#endif /* FREECIV_DELTA_PROTOCOL */
56120
56122}
56123
56125{
56126 if (!pc->used) {
56127 log_error("WARNING: trying to send data to the closed connection %s",
56129 return -1;
56130 }
56131 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet != nullptr, -1,
56132 "Handler for PACKET_RULESET_TECH_CLASS not installed");
56133 return pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet(pc, packet);
56134}
56135
56137{
56138 conn_list_iterate(dest, pconn) {
56141}
56142
56144{
56145 memset(packet, 0, sizeof(*packet));
56146}
56147
56148#define free_packet_ruleset_tech_flag(_packet) (void) 0
56149#define destroy_packet_ruleset_tech_flag free
56150
56151#ifdef FREECIV_DELTA_PROTOCOL
56152#define hash_packet_ruleset_tech_flag_100 hash_const
56153#define cmp_packet_ruleset_tech_flag_100 cmp_const
56155#endif /* FREECIV_DELTA_PROTOCOL */
56156
56158{
56159#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_flag(_packet)
56161
56162#ifdef FREECIV_JSON_CONNECTION
56163 struct plocation field_addr;
56164 {
56165 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56168 }
56169#endif /* FREECIV_JSON_CONNECTION */
56170
56171 log_packet_detailed("packet_ruleset_tech_flag_100: got info about ()");
56172
56173#ifdef FREECIV_DELTA_PROTOCOL
56176 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_FLAG;
56177
56178 if (nullptr == *hash) {
56180 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56181 }
56182
56183 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56184 *real_packet = *old;
56185 } else {
56186 /* packet is already initialized empty */
56187 log_packet_detailed(" no old info");
56188 }
56189
56190#ifdef FREECIV_JSON_CONNECTION
56191 field_addr.name = "fields";
56192#endif /* FREECIV_JSON_CONNECTION */
56193 DIO_BV_GET(&din, &field_addr, fields);
56194
56195 if (BV_ISSET(fields, 0)) {
56196 log_packet_detailed(" got field 'id'");
56197
56198#ifdef FREECIV_JSON_CONNECTION
56199 field_addr.name = "id";
56200#endif /* FREECIV_JSON_CONNECTION */
56201
56202 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56204 }
56205 }
56206
56207 if (BV_ISSET(fields, 1)) {
56208 log_packet_detailed(" got field 'name'");
56209
56210#ifdef FREECIV_JSON_CONNECTION
56211 field_addr.name = "name";
56212#endif /* FREECIV_JSON_CONNECTION */
56213
56214 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56216 }
56217 }
56218
56219 if (BV_ISSET(fields, 2)) {
56220 log_packet_detailed(" got field 'helptxt'");
56221
56222#ifdef FREECIV_JSON_CONNECTION
56223 field_addr.name = "helptxt";
56224#endif /* FREECIV_JSON_CONNECTION */
56225
56226 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56228 }
56229 }
56230
56231 if (nullptr == old) {
56232 old = fc_malloc(sizeof(*old));
56234 *old = *real_packet;
56236 } else {
56237 *old = *real_packet;
56238 }
56239
56240#else /* FREECIV_DELTA_PROTOCOL */
56241#ifdef FREECIV_JSON_CONNECTION
56242 field_addr.name = "id";
56243#endif /* FREECIV_JSON_CONNECTION */
56244
56245 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56247 }
56248
56249#ifdef FREECIV_JSON_CONNECTION
56250 field_addr.name = "name";
56251#endif /* FREECIV_JSON_CONNECTION */
56252
56253 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56255 }
56256
56257#ifdef FREECIV_JSON_CONNECTION
56258 field_addr.name = "helptxt";
56259#endif /* FREECIV_JSON_CONNECTION */
56260
56261 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56263 }
56264#endif /* FREECIV_DELTA_PROTOCOL */
56265
56267#undef FREE_PACKET_STRUCT
56268}
56269
56271{
56272 const struct packet_ruleset_tech_flag *real_packet = packet;
56273 int e;
56275
56276 log_packet_detailed("packet_ruleset_tech_flag_100: sending info about ()");
56277
56278#ifdef FREECIV_DELTA_PROTOCOL
56281 bool differ;
56282 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_FLAG;
56283
56284 if (nullptr == *hash) {
56286 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56287 }
56288 BV_CLR_ALL(fields);
56289
56290 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56291 old = fc_malloc(sizeof(*old));
56292 /* temporary bitcopy just to insert correctly */
56293 *old = *real_packet;
56296 }
56297
56298 differ = (old->id != real_packet->id);
56299 if (differ) {
56300 BV_SET(fields, 0);
56301 }
56302
56303 differ = (strcmp(old->name, real_packet->name) != 0);
56304 if (differ) {
56305 BV_SET(fields, 1);
56306 }
56307
56308 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
56309 if (differ) {
56310 BV_SET(fields, 2);
56311 }
56312#endif /* FREECIV_DELTA_PROTOCOL */
56313
56314#ifdef FREECIV_JSON_CONNECTION
56315 struct plocation field_addr;
56316 {
56317 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56320 }
56321#endif /* FREECIV_JSON_CONNECTION */
56322
56323#ifdef FREECIV_DELTA_PROTOCOL
56324#ifdef FREECIV_JSON_CONNECTION
56325 field_addr.name = "fields";
56326#endif /* FREECIV_JSON_CONNECTION */
56327 e = 0;
56328 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56329 if (e) {
56330 log_packet_detailed("fields bitvector error detected");
56331 }
56332
56333 if (BV_ISSET(fields, 0)) {
56334 log_packet_detailed(" field 'id' has changed");
56335
56336#ifdef FREECIV_JSON_CONNECTION
56337 field_addr.name = "id";
56338#endif /* FREECIV_JSON_CONNECTION */
56339 e = 0;
56340
56341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56342
56343 if (e) {
56344 log_packet_detailed("'id' field error detected");
56345 }
56346 }
56347
56348 if (BV_ISSET(fields, 1)) {
56349 log_packet_detailed(" field 'name' has changed");
56350
56351#ifdef FREECIV_JSON_CONNECTION
56352 field_addr.name = "name";
56353#endif /* FREECIV_JSON_CONNECTION */
56354 e = 0;
56355
56356 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56357
56358 if (e) {
56359 log_packet_detailed("'name' field error detected");
56360 }
56361 }
56362
56363 if (BV_ISSET(fields, 2)) {
56364 log_packet_detailed(" field 'helptxt' has changed");
56365
56366#ifdef FREECIV_JSON_CONNECTION
56367 field_addr.name = "helptxt";
56368#endif /* FREECIV_JSON_CONNECTION */
56369 e = 0;
56370
56371 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56372
56373 if (e) {
56374 log_packet_detailed("'helptxt' field error detected");
56375 }
56376 }
56377
56378 *old = *real_packet;
56379
56380#else /* FREECIV_DELTA_PROTOCOL */
56381#ifdef FREECIV_JSON_CONNECTION
56382 field_addr.name = "id";
56383#endif /* FREECIV_JSON_CONNECTION */
56384 e = 0;
56385
56386 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56387
56388 if (e) {
56389 log_packet_detailed("'id' field error detected");
56390 }
56391
56392#ifdef FREECIV_JSON_CONNECTION
56393 field_addr.name = "name";
56394#endif /* FREECIV_JSON_CONNECTION */
56395 e = 0;
56396
56397 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56398
56399 if (e) {
56400 log_packet_detailed("'name' field error detected");
56401 }
56402
56403#ifdef FREECIV_JSON_CONNECTION
56404 field_addr.name = "helptxt";
56405#endif /* FREECIV_JSON_CONNECTION */
56406 e = 0;
56407
56408 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56409
56410 if (e) {
56411 log_packet_detailed("'helptxt' field error detected");
56412 }
56413#endif /* FREECIV_DELTA_PROTOCOL */
56414
56416}
56417
56419{
56420 if (!pc->used) {
56421 log_error("WARNING: trying to send data to the closed connection %s",
56423 return -1;
56424 }
56425 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet != nullptr, -1,
56426 "Handler for PACKET_RULESET_TECH_FLAG not installed");
56427 return pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet(pc, packet);
56428}
56429
56431{
56432 conn_list_iterate(dest, pconn) {
56435}
56436
56438{
56439 memset(packet, 0, sizeof(*packet));
56440
56441 requirement_vector_init(&packet->reqs);
56442 packet->helptext = strvec_new();
56443}
56444
56446{
56447 if (packet->helptext) {
56448 strvec_destroy(packet->helptext);
56449 packet->helptext = nullptr;
56450 }
56451 requirement_vector_free(&packet->reqs);
56452}
56453
56454static inline void destroy_packet_ruleset_government(void *packet)
56455{
56457 free(packet);
56458}
56459
56460#ifdef FREECIV_DELTA_PROTOCOL
56461#define hash_packet_ruleset_government_100 hash_const
56462#define cmp_packet_ruleset_government_100 cmp_const
56464#endif /* FREECIV_DELTA_PROTOCOL */
56465
56467{
56468#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government(_packet)
56470
56471#ifdef FREECIV_JSON_CONNECTION
56472 struct plocation field_addr;
56473 {
56474 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56477 }
56478#endif /* FREECIV_JSON_CONNECTION */
56479
56480 log_packet_detailed("packet_ruleset_government_100: got info about ()");
56481
56482#ifdef FREECIV_DELTA_PROTOCOL
56485 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT;
56486
56487 if (nullptr == *hash) {
56489 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
56490 }
56491
56492 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56493 real_packet->id = old->id;
56494 requirement_vector_copy(&real_packet->reqs, &old->reqs);
56495 sz_strlcpy(real_packet->name, old->name);
56496 sz_strlcpy(real_packet->rule_name, old->rule_name);
56497 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
56498 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
56499 sz_strlcpy(real_packet->sound_str, old->sound_str);
56500 sz_strlcpy(real_packet->sound_alt, old->sound_alt);
56501 sz_strlcpy(real_packet->sound_alt2, old->sound_alt2);
56502 if (old->helptext) {
56503 strvec_copy(real_packet->helptext, old->helptext);
56504 } else {
56505 strvec_clear(real_packet->helptext);
56506 }
56507 } else {
56508 /* packet is already initialized empty */
56509 log_packet_detailed(" no old info");
56510 }
56511
56512#ifdef FREECIV_JSON_CONNECTION
56513 field_addr.name = "fields";
56514#endif /* FREECIV_JSON_CONNECTION */
56515 DIO_BV_GET(&din, &field_addr, fields);
56516
56517 if (BV_ISSET(fields, 0)) {
56518 log_packet_detailed(" got field 'id'");
56519
56520#ifdef FREECIV_JSON_CONNECTION
56521 field_addr.name = "id";
56522#endif /* FREECIV_JSON_CONNECTION */
56523
56524 {
56525 int readin;
56526
56527 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56529 }
56530 real_packet->id = readin;
56531 }
56532 }
56533
56534 if (BV_ISSET(fields, 1)) {
56535 log_packet_detailed(" got field 'reqs'");
56536
56537#ifdef FREECIV_JSON_CONNECTION
56538 field_addr.name = "reqs";
56539#endif /* FREECIV_JSON_CONNECTION */
56540
56541 {
56542 int i;
56543
56544 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56546 }
56548
56549#ifdef FREECIV_JSON_CONNECTION
56550 /* Enter array. */
56551 field_addr.sub_location = plocation_elem_new(0);
56552#endif /* FREECIV_JSON_CONNECTION */
56553
56554 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56555#ifdef FREECIV_JSON_CONNECTION
56556 /* Next array element */
56557 field_addr.sub_location->number = i;
56558#endif /* FREECIV_JSON_CONNECTION */
56559
56560 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56562 }
56563 }
56564
56565#ifdef FREECIV_JSON_CONNECTION
56566 /* Exit array. */
56567 FC_FREE(field_addr.sub_location);
56568#endif /* FREECIV_JSON_CONNECTION */
56569 }
56570 }
56571
56572 if (BV_ISSET(fields, 2)) {
56573 log_packet_detailed(" got field 'name'");
56574
56575#ifdef FREECIV_JSON_CONNECTION
56576 field_addr.name = "name";
56577#endif /* FREECIV_JSON_CONNECTION */
56578
56579 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56581 }
56582 }
56583
56584 if (BV_ISSET(fields, 3)) {
56585 log_packet_detailed(" got field 'rule_name'");
56586
56587#ifdef FREECIV_JSON_CONNECTION
56588 field_addr.name = "rule_name";
56589#endif /* FREECIV_JSON_CONNECTION */
56590
56591 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56592 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56593 }
56594 }
56595
56596 if (BV_ISSET(fields, 4)) {
56597 log_packet_detailed(" got field 'graphic_str'");
56598
56599#ifdef FREECIV_JSON_CONNECTION
56600 field_addr.name = "graphic_str";
56601#endif /* FREECIV_JSON_CONNECTION */
56602
56603 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56604 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56605 }
56606 }
56607
56608 if (BV_ISSET(fields, 5)) {
56609 log_packet_detailed(" got field 'graphic_alt'");
56610
56611#ifdef FREECIV_JSON_CONNECTION
56612 field_addr.name = "graphic_alt";
56613#endif /* FREECIV_JSON_CONNECTION */
56614
56615 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56616 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56617 }
56618 }
56619
56620 if (BV_ISSET(fields, 6)) {
56621 log_packet_detailed(" got field 'sound_str'");
56622
56623#ifdef FREECIV_JSON_CONNECTION
56624 field_addr.name = "sound_str";
56625#endif /* FREECIV_JSON_CONNECTION */
56626
56627 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56628 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56629 }
56630 }
56631
56632 if (BV_ISSET(fields, 7)) {
56633 log_packet_detailed(" got field 'sound_alt'");
56634
56635#ifdef FREECIV_JSON_CONNECTION
56636 field_addr.name = "sound_alt";
56637#endif /* FREECIV_JSON_CONNECTION */
56638
56639 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56640 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56641 }
56642 }
56643
56644 if (BV_ISSET(fields, 8)) {
56645 log_packet_detailed(" got field 'sound_alt2'");
56646
56647#ifdef FREECIV_JSON_CONNECTION
56648 field_addr.name = "sound_alt2";
56649#endif /* FREECIV_JSON_CONNECTION */
56650
56651 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56652 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56653 }
56654 }
56655
56656 if (BV_ISSET(fields, 9)) {
56657 log_packet_detailed(" got field 'helptext'");
56658
56659#ifdef FREECIV_JSON_CONNECTION
56660 field_addr.name = "helptext";
56661#endif /* FREECIV_JSON_CONNECTION */
56662
56663 {
56664 int i;
56665
56666 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56668 }
56669 strvec_reserve(real_packet->helptext, i);
56670
56671#ifdef FREECIV_JSON_CONNECTION
56672 /* Enter array. */
56673 field_addr.sub_location = plocation_elem_new(0);
56674#endif /* FREECIV_JSON_CONNECTION */
56675
56676 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
56677#ifdef FREECIV_JSON_CONNECTION
56678 /* Next array element */
56679 field_addr.sub_location->number = i;
56680#endif /* FREECIV_JSON_CONNECTION */
56681
56682 {
56683 char readin[MAX_LEN_PACKET];
56684
56685 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
56686 || !strvec_set(real_packet->helptext, i, readin)) {
56688 }
56689 }
56690 }
56691
56692#ifdef FREECIV_JSON_CONNECTION
56693 /* Exit array. */
56694 FC_FREE(field_addr.sub_location);
56695#endif /* FREECIV_JSON_CONNECTION */
56696 }
56697 }
56698
56699 if (nullptr == old) {
56700 old = fc_malloc(sizeof(*old));
56702 old->id = real_packet->id;
56703 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56704 sz_strlcpy(old->name, real_packet->name);
56705 sz_strlcpy(old->rule_name, real_packet->rule_name);
56706 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56707 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56708 sz_strlcpy(old->sound_str, real_packet->sound_str);
56709 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56710 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56711 if (real_packet->helptext) {
56712 strvec_copy(old->helptext, real_packet->helptext);
56713 } else {
56714 strvec_clear(old->helptext);
56715 }
56717 } else {
56718 old->id = real_packet->id;
56719 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56720 sz_strlcpy(old->name, real_packet->name);
56721 sz_strlcpy(old->rule_name, real_packet->rule_name);
56722 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56723 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56724 sz_strlcpy(old->sound_str, real_packet->sound_str);
56725 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56726 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56727 if (real_packet->helptext) {
56728 strvec_copy(old->helptext, real_packet->helptext);
56729 } else {
56730 strvec_clear(old->helptext);
56731 }
56732 }
56733
56734#else /* FREECIV_DELTA_PROTOCOL */
56735#ifdef FREECIV_JSON_CONNECTION
56736 field_addr.name = "id";
56737#endif /* FREECIV_JSON_CONNECTION */
56738
56739 {
56740 int readin;
56741
56742 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56744 }
56745 real_packet->id = readin;
56746 }
56747
56748#ifdef FREECIV_JSON_CONNECTION
56749 field_addr.name = "reqs";
56750#endif /* FREECIV_JSON_CONNECTION */
56751
56752 {
56753 int i;
56754
56755 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56757 }
56759
56760#ifdef FREECIV_JSON_CONNECTION
56761 /* Enter array. */
56762 field_addr.sub_location = plocation_elem_new(0);
56763#endif /* FREECIV_JSON_CONNECTION */
56764
56765 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56766#ifdef FREECIV_JSON_CONNECTION
56767 /* Next array element */
56768 field_addr.sub_location->number = i;
56769#endif /* FREECIV_JSON_CONNECTION */
56770
56771 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56773 }
56774 }
56775
56776#ifdef FREECIV_JSON_CONNECTION
56777 /* Exit array. */
56778 FC_FREE(field_addr.sub_location);
56779#endif /* FREECIV_JSON_CONNECTION */
56780 }
56781
56782#ifdef FREECIV_JSON_CONNECTION
56783 field_addr.name = "name";
56784#endif /* FREECIV_JSON_CONNECTION */
56785
56786 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56788 }
56789
56790#ifdef FREECIV_JSON_CONNECTION
56791 field_addr.name = "rule_name";
56792#endif /* FREECIV_JSON_CONNECTION */
56793
56794 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56795 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56796 }
56797
56798#ifdef FREECIV_JSON_CONNECTION
56799 field_addr.name = "graphic_str";
56800#endif /* FREECIV_JSON_CONNECTION */
56801
56802 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56803 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56804 }
56805
56806#ifdef FREECIV_JSON_CONNECTION
56807 field_addr.name = "graphic_alt";
56808#endif /* FREECIV_JSON_CONNECTION */
56809
56810 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56811 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56812 }
56813
56814#ifdef FREECIV_JSON_CONNECTION
56815 field_addr.name = "sound_str";
56816#endif /* FREECIV_JSON_CONNECTION */
56817
56818 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56819 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56820 }
56821
56822#ifdef FREECIV_JSON_CONNECTION
56823 field_addr.name = "sound_alt";
56824#endif /* FREECIV_JSON_CONNECTION */
56825
56826 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56827 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56828 }
56829
56830#ifdef FREECIV_JSON_CONNECTION
56831 field_addr.name = "sound_alt2";
56832#endif /* FREECIV_JSON_CONNECTION */
56833
56834 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56835 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56836 }
56837
56838#ifdef FREECIV_JSON_CONNECTION
56839 field_addr.name = "helptext";
56840#endif /* FREECIV_JSON_CONNECTION */
56841
56842 {
56843 int i;
56844
56845 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56847 }
56848 strvec_reserve(real_packet->helptext, i);
56849
56850#ifdef FREECIV_JSON_CONNECTION
56851 /* Enter array. */
56852 field_addr.sub_location = plocation_elem_new(0);
56853#endif /* FREECIV_JSON_CONNECTION */
56854
56855 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
56856#ifdef FREECIV_JSON_CONNECTION
56857 /* Next array element */
56858 field_addr.sub_location->number = i;
56859#endif /* FREECIV_JSON_CONNECTION */
56860
56861 {
56862 char readin[MAX_LEN_PACKET];
56863
56864 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
56865 || !strvec_set(real_packet->helptext, i, readin)) {
56867 }
56868 }
56869 }
56870
56871#ifdef FREECIV_JSON_CONNECTION
56872 /* Exit array. */
56873 FC_FREE(field_addr.sub_location);
56874#endif /* FREECIV_JSON_CONNECTION */
56875 }
56876#endif /* FREECIV_DELTA_PROTOCOL */
56877
56879#undef FREE_PACKET_STRUCT
56880}
56881
56883{
56884 const struct packet_ruleset_government *real_packet = packet;
56885 int e;
56887
56888 log_packet_detailed("packet_ruleset_government_100: sending info about ()");
56889
56890#ifdef FREECIV_DELTA_PROTOCOL
56893 bool differ;
56894 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOVERNMENT;
56895
56896 if (nullptr == *hash) {
56898 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
56899 }
56900 BV_CLR_ALL(fields);
56901
56902 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56903 old = fc_malloc(sizeof(*old));
56904 /* temporary bitcopy just to insert correctly */
56905 *old = *real_packet;
56908 }
56909
56910 differ = (old->id != real_packet->id);
56911 if (differ) {
56912 BV_SET(fields, 0);
56913 }
56914
56916 if (!differ) {
56917 int i;
56918
56919 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
56920 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
56921 if (differ) {
56922 break;
56923 }
56924 }
56925 }
56926 if (differ) {
56927 BV_SET(fields, 1);
56928 }
56929
56930 differ = (strcmp(old->name, real_packet->name) != 0);
56931 if (differ) {
56932 BV_SET(fields, 2);
56933 }
56934
56935 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
56936 if (differ) {
56937 BV_SET(fields, 3);
56938 }
56939
56940 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
56941 if (differ) {
56942 BV_SET(fields, 4);
56943 }
56944
56945 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
56946 if (differ) {
56947 BV_SET(fields, 5);
56948 }
56949
56950 differ = (strcmp(old->sound_str, real_packet->sound_str) != 0);
56951 if (differ) {
56952 BV_SET(fields, 6);
56953 }
56954
56955 differ = (strcmp(old->sound_alt, real_packet->sound_alt) != 0);
56956 if (differ) {
56957 BV_SET(fields, 7);
56958 }
56959
56960 differ = (strcmp(old->sound_alt2, real_packet->sound_alt2) != 0);
56961 if (differ) {
56962 BV_SET(fields, 8);
56963 }
56964
56965 if (real_packet->helptext) {
56966 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
56967 } else {
56968 differ = (strvec_size(old->helptext) > 0);
56969 }
56970 if (differ) {
56971 BV_SET(fields, 9);
56972 }
56973#endif /* FREECIV_DELTA_PROTOCOL */
56974
56975#ifdef FREECIV_JSON_CONNECTION
56976 struct plocation field_addr;
56977 {
56978 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56981 }
56982#endif /* FREECIV_JSON_CONNECTION */
56983
56984#ifdef FREECIV_DELTA_PROTOCOL
56985#ifdef FREECIV_JSON_CONNECTION
56986 field_addr.name = "fields";
56987#endif /* FREECIV_JSON_CONNECTION */
56988 e = 0;
56989 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56990 if (e) {
56991 log_packet_detailed("fields bitvector error detected");
56992 }
56993
56994 if (BV_ISSET(fields, 0)) {
56995 log_packet_detailed(" field 'id' has changed");
56996
56997#ifdef FREECIV_JSON_CONNECTION
56998 field_addr.name = "id";
56999#endif /* FREECIV_JSON_CONNECTION */
57000 e = 0;
57001
57002 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57003
57004 if (e) {
57005 log_packet_detailed("'id' field error detected");
57006 }
57007 }
57008
57009 if (BV_ISSET(fields, 1)) {
57010 log_packet_detailed(" field 'reqs' has changed");
57011
57012#ifdef FREECIV_JSON_CONNECTION
57013 field_addr.name = "reqs";
57014#endif /* FREECIV_JSON_CONNECTION */
57015 e = 0;
57016
57017 {
57018 int i;
57019
57022
57023#ifdef FREECIV_JSON_CONNECTION
57024 /* Enter array. */
57025 field_addr.sub_location = plocation_elem_new(0);
57026#endif /* FREECIV_JSON_CONNECTION */
57027
57028 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57029#ifdef FREECIV_JSON_CONNECTION
57030 /* Next array element. */
57031 field_addr.sub_location->number = i;
57032#endif /* FREECIV_JSON_CONNECTION */
57033
57034 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57035 }
57036
57037#ifdef FREECIV_JSON_CONNECTION
57038 /* Exit array. */
57039 FC_FREE(field_addr.sub_location);
57040#endif /* FREECIV_JSON_CONNECTION */
57041 }
57042
57043 if (e) {
57044 log_packet_detailed("'reqs' field error detected");
57045 }
57046 }
57047
57048 if (BV_ISSET(fields, 2)) {
57049 log_packet_detailed(" field 'name' has changed");
57050
57051#ifdef FREECIV_JSON_CONNECTION
57052 field_addr.name = "name";
57053#endif /* FREECIV_JSON_CONNECTION */
57054 e = 0;
57055
57056 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57057
57058 if (e) {
57059 log_packet_detailed("'name' field error detected");
57060 }
57061 }
57062
57063 if (BV_ISSET(fields, 3)) {
57064 log_packet_detailed(" field 'rule_name' has changed");
57065
57066#ifdef FREECIV_JSON_CONNECTION
57067 field_addr.name = "rule_name";
57068#endif /* FREECIV_JSON_CONNECTION */
57069 e = 0;
57070
57071 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57072
57073 if (e) {
57074 log_packet_detailed("'rule_name' field error detected");
57075 }
57076 }
57077
57078 if (BV_ISSET(fields, 4)) {
57079 log_packet_detailed(" field 'graphic_str' has changed");
57080
57081#ifdef FREECIV_JSON_CONNECTION
57082 field_addr.name = "graphic_str";
57083#endif /* FREECIV_JSON_CONNECTION */
57084 e = 0;
57085
57086 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57087
57088 if (e) {
57089 log_packet_detailed("'graphic_str' field error detected");
57090 }
57091 }
57092
57093 if (BV_ISSET(fields, 5)) {
57094 log_packet_detailed(" field 'graphic_alt' has changed");
57095
57096#ifdef FREECIV_JSON_CONNECTION
57097 field_addr.name = "graphic_alt";
57098#endif /* FREECIV_JSON_CONNECTION */
57099 e = 0;
57100
57101 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57102
57103 if (e) {
57104 log_packet_detailed("'graphic_alt' field error detected");
57105 }
57106 }
57107
57108 if (BV_ISSET(fields, 6)) {
57109 log_packet_detailed(" field 'sound_str' has changed");
57110
57111#ifdef FREECIV_JSON_CONNECTION
57112 field_addr.name = "sound_str";
57113#endif /* FREECIV_JSON_CONNECTION */
57114 e = 0;
57115
57116 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57117
57118 if (e) {
57119 log_packet_detailed("'sound_str' field error detected");
57120 }
57121 }
57122
57123 if (BV_ISSET(fields, 7)) {
57124 log_packet_detailed(" field 'sound_alt' has changed");
57125
57126#ifdef FREECIV_JSON_CONNECTION
57127 field_addr.name = "sound_alt";
57128#endif /* FREECIV_JSON_CONNECTION */
57129 e = 0;
57130
57131 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57132
57133 if (e) {
57134 log_packet_detailed("'sound_alt' field error detected");
57135 }
57136 }
57137
57138 if (BV_ISSET(fields, 8)) {
57139 log_packet_detailed(" field 'sound_alt2' has changed");
57140
57141#ifdef FREECIV_JSON_CONNECTION
57142 field_addr.name = "sound_alt2";
57143#endif /* FREECIV_JSON_CONNECTION */
57144 e = 0;
57145
57146 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57147
57148 if (e) {
57149 log_packet_detailed("'sound_alt2' field error detected");
57150 }
57151 }
57152
57153 if (BV_ISSET(fields, 9)) {
57154 log_packet_detailed(" field 'helptext' has changed");
57155
57156#ifdef FREECIV_JSON_CONNECTION
57157 field_addr.name = "helptext";
57158#endif /* FREECIV_JSON_CONNECTION */
57159 e = 0;
57160
57161 if (!real_packet->helptext) {
57162 /* Transmit null as empty */
57163 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57164 } else {
57165 int i;
57166
57168 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57169
57170#ifdef FREECIV_JSON_CONNECTION
57171 /* Enter array. */
57172 field_addr.sub_location = plocation_elem_new(0);
57173#endif /* FREECIV_JSON_CONNECTION */
57174
57175 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57176#ifdef FREECIV_JSON_CONNECTION
57177 /* Next array element. */
57178 field_addr.sub_location->number = i;
57179#endif /* FREECIV_JSON_CONNECTION */
57180
57181 {
57182 const char *pstr = strvec_get(real_packet->helptext, i);
57183
57184 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57185 }
57186 }
57187
57188#ifdef FREECIV_JSON_CONNECTION
57189 /* Exit array. */
57190 FC_FREE(field_addr.sub_location);
57191#endif /* FREECIV_JSON_CONNECTION */
57192 }
57193
57194 if (e) {
57195 log_packet_detailed("'helptext' field error detected");
57196 }
57197 }
57198
57199 old->id = real_packet->id;
57200 requirement_vector_copy(&old->reqs, &real_packet->reqs);
57201 sz_strlcpy(old->name, real_packet->name);
57202 sz_strlcpy(old->rule_name, real_packet->rule_name);
57203 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
57204 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
57205 sz_strlcpy(old->sound_str, real_packet->sound_str);
57206 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
57207 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
57208 if (real_packet->helptext) {
57209 strvec_copy(old->helptext, real_packet->helptext);
57210 } else {
57211 strvec_clear(old->helptext);
57212 }
57213
57214#else /* FREECIV_DELTA_PROTOCOL */
57215#ifdef FREECIV_JSON_CONNECTION
57216 field_addr.name = "id";
57217#endif /* FREECIV_JSON_CONNECTION */
57218 e = 0;
57219
57220 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57221
57222 if (e) {
57223 log_packet_detailed("'id' field error detected");
57224 }
57225
57226#ifdef FREECIV_JSON_CONNECTION
57227 field_addr.name = "reqs";
57228#endif /* FREECIV_JSON_CONNECTION */
57229 e = 0;
57230
57231 {
57232 int i;
57233
57236
57237#ifdef FREECIV_JSON_CONNECTION
57238 /* Enter array. */
57239 field_addr.sub_location = plocation_elem_new(0);
57240#endif /* FREECIV_JSON_CONNECTION */
57241
57242 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57243#ifdef FREECIV_JSON_CONNECTION
57244 /* Next array element. */
57245 field_addr.sub_location->number = i;
57246#endif /* FREECIV_JSON_CONNECTION */
57247
57248 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57249 }
57250
57251#ifdef FREECIV_JSON_CONNECTION
57252 /* Exit array. */
57253 FC_FREE(field_addr.sub_location);
57254#endif /* FREECIV_JSON_CONNECTION */
57255 }
57256
57257 if (e) {
57258 log_packet_detailed("'reqs' field error detected");
57259 }
57260
57261#ifdef FREECIV_JSON_CONNECTION
57262 field_addr.name = "name";
57263#endif /* FREECIV_JSON_CONNECTION */
57264 e = 0;
57265
57266 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57267
57268 if (e) {
57269 log_packet_detailed("'name' field error detected");
57270 }
57271
57272#ifdef FREECIV_JSON_CONNECTION
57273 field_addr.name = "rule_name";
57274#endif /* FREECIV_JSON_CONNECTION */
57275 e = 0;
57276
57277 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57278
57279 if (e) {
57280 log_packet_detailed("'rule_name' field error detected");
57281 }
57282
57283#ifdef FREECIV_JSON_CONNECTION
57284 field_addr.name = "graphic_str";
57285#endif /* FREECIV_JSON_CONNECTION */
57286 e = 0;
57287
57288 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57289
57290 if (e) {
57291 log_packet_detailed("'graphic_str' field error detected");
57292 }
57293
57294#ifdef FREECIV_JSON_CONNECTION
57295 field_addr.name = "graphic_alt";
57296#endif /* FREECIV_JSON_CONNECTION */
57297 e = 0;
57298
57299 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57300
57301 if (e) {
57302 log_packet_detailed("'graphic_alt' field error detected");
57303 }
57304
57305#ifdef FREECIV_JSON_CONNECTION
57306 field_addr.name = "sound_str";
57307#endif /* FREECIV_JSON_CONNECTION */
57308 e = 0;
57309
57310 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57311
57312 if (e) {
57313 log_packet_detailed("'sound_str' field error detected");
57314 }
57315
57316#ifdef FREECIV_JSON_CONNECTION
57317 field_addr.name = "sound_alt";
57318#endif /* FREECIV_JSON_CONNECTION */
57319 e = 0;
57320
57321 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57322
57323 if (e) {
57324 log_packet_detailed("'sound_alt' field error detected");
57325 }
57326
57327#ifdef FREECIV_JSON_CONNECTION
57328 field_addr.name = "sound_alt2";
57329#endif /* FREECIV_JSON_CONNECTION */
57330 e = 0;
57331
57332 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57333
57334 if (e) {
57335 log_packet_detailed("'sound_alt2' field error detected");
57336 }
57337
57338#ifdef FREECIV_JSON_CONNECTION
57339 field_addr.name = "helptext";
57340#endif /* FREECIV_JSON_CONNECTION */
57341 e = 0;
57342
57343 if (!real_packet->helptext) {
57344 /* Transmit null as empty */
57345 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57346 } else {
57347 int i;
57348
57350 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57351
57352#ifdef FREECIV_JSON_CONNECTION
57353 /* Enter array. */
57354 field_addr.sub_location = plocation_elem_new(0);
57355#endif /* FREECIV_JSON_CONNECTION */
57356
57357 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57358#ifdef FREECIV_JSON_CONNECTION
57359 /* Next array element. */
57360 field_addr.sub_location->number = i;
57361#endif /* FREECIV_JSON_CONNECTION */
57362
57363 {
57364 const char *pstr = strvec_get(real_packet->helptext, i);
57365
57366 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57367 }
57368 }
57369
57370#ifdef FREECIV_JSON_CONNECTION
57371 /* Exit array. */
57372 FC_FREE(field_addr.sub_location);
57373#endif /* FREECIV_JSON_CONNECTION */
57374 }
57375
57376 if (e) {
57377 log_packet_detailed("'helptext' field error detected");
57378 }
57379#endif /* FREECIV_DELTA_PROTOCOL */
57380
57382}
57383
57385{
57386 if (!pc->used) {
57387 log_error("WARNING: trying to send data to the closed connection %s",
57389 return -1;
57390 }
57391 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet != nullptr, -1,
57392 "Handler for PACKET_RULESET_GOVERNMENT not installed");
57393 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet(pc, packet);
57394}
57395
57397{
57398 conn_list_iterate(dest, pconn) {
57401}
57402
57404{
57405 memset(packet, 0, sizeof(*packet));
57406}
57407
57408#define free_packet_ruleset_terrain_control(_packet) (void) 0
57409#define destroy_packet_ruleset_terrain_control free
57410
57411#ifdef FREECIV_DELTA_PROTOCOL
57412#define hash_packet_ruleset_terrain_control_100 hash_const
57413#define cmp_packet_ruleset_terrain_control_100 cmp_const
57415#endif /* FREECIV_DELTA_PROTOCOL */
57416
57418{
57419#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_control(_packet)
57421
57422#ifdef FREECIV_JSON_CONNECTION
57423 struct plocation field_addr;
57424 {
57425 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57428 }
57429#endif /* FREECIV_JSON_CONNECTION */
57430
57431 log_packet_detailed("packet_ruleset_terrain_control_100: got info about ()");
57432
57433#ifdef FREECIV_DELTA_PROTOCOL
57436 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_CONTROL;
57437
57438 if (nullptr == *hash) {
57440 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
57441 }
57442
57443 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57444 *real_packet = *old;
57445 } else {
57446 /* packet is already initialized empty */
57447 log_packet_detailed(" no old info");
57448 }
57449
57450#ifdef FREECIV_JSON_CONNECTION
57451 field_addr.name = "fields";
57452#endif /* FREECIV_JSON_CONNECTION */
57453 DIO_BV_GET(&din, &field_addr, fields);
57454
57455 if (BV_ISSET(fields, 0)) {
57456 log_packet_detailed(" got field 'ocean_reclaim_requirement_pct'");
57457
57458#ifdef FREECIV_JSON_CONNECTION
57459 field_addr.name = "ocean_reclaim_requirement_pct";
57460#endif /* FREECIV_JSON_CONNECTION */
57461
57462 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
57463 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
57464 }
57465 }
57466
57467 if (BV_ISSET(fields, 1)) {
57468 log_packet_detailed(" got field 'land_channel_requirement_pct'");
57469
57470#ifdef FREECIV_JSON_CONNECTION
57471 field_addr.name = "land_channel_requirement_pct";
57472#endif /* FREECIV_JSON_CONNECTION */
57473
57474 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
57475 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
57476 }
57477 }
57478
57479 if (BV_ISSET(fields, 2)) {
57480 log_packet_detailed(" got field 'terrain_thaw_requirement_pct'");
57481
57482#ifdef FREECIV_JSON_CONNECTION
57483 field_addr.name = "terrain_thaw_requirement_pct";
57484#endif /* FREECIV_JSON_CONNECTION */
57485
57486 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
57487 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
57488 }
57489 }
57490
57491 if (BV_ISSET(fields, 3)) {
57492 log_packet_detailed(" got field 'terrain_freeze_requirement_pct'");
57493
57494#ifdef FREECIV_JSON_CONNECTION
57495 field_addr.name = "terrain_freeze_requirement_pct";
57496#endif /* FREECIV_JSON_CONNECTION */
57497
57498 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
57499 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
57500 }
57501 }
57502
57503 if (BV_ISSET(fields, 4)) {
57504 log_packet_detailed(" got field 'lake_max_size'");
57505
57506#ifdef FREECIV_JSON_CONNECTION
57507 field_addr.name = "lake_max_size";
57508#endif /* FREECIV_JSON_CONNECTION */
57509
57510 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
57511 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
57512 }
57513 }
57514
57515 if (BV_ISSET(fields, 5)) {
57516 log_packet_detailed(" got field 'min_start_native_area'");
57517
57518#ifdef FREECIV_JSON_CONNECTION
57519 field_addr.name = "min_start_native_area";
57520#endif /* FREECIV_JSON_CONNECTION */
57521
57522 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
57523 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
57524 }
57525 }
57526
57527 if (BV_ISSET(fields, 6)) {
57528 log_packet_detailed(" got field 'move_fragments'");
57529
57530#ifdef FREECIV_JSON_CONNECTION
57531 field_addr.name = "move_fragments";
57532#endif /* FREECIV_JSON_CONNECTION */
57533
57534 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
57535 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
57536 }
57537 }
57538
57539 if (BV_ISSET(fields, 7)) {
57540 log_packet_detailed(" got field 'igter_cost'");
57541
57542#ifdef FREECIV_JSON_CONNECTION
57543 field_addr.name = "igter_cost";
57544#endif /* FREECIV_JSON_CONNECTION */
57545
57546 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
57547 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
57548 }
57549 }
57550
57551 real_packet->pythagorean_diagonal = BV_ISSET(fields, 8);
57552
57553 real_packet->infrapoints = BV_ISSET(fields, 9);
57554
57555 if (BV_ISSET(fields, 10)) {
57556 log_packet_detailed(" got field 'gui_type_base0'");
57557
57558#ifdef FREECIV_JSON_CONNECTION
57559 field_addr.name = "gui_type_base0";
57560#endif /* FREECIV_JSON_CONNECTION */
57561
57562 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
57563 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
57564 }
57565 }
57566
57567 if (BV_ISSET(fields, 11)) {
57568 log_packet_detailed(" got field 'gui_type_base1'");
57569
57570#ifdef FREECIV_JSON_CONNECTION
57571 field_addr.name = "gui_type_base1";
57572#endif /* FREECIV_JSON_CONNECTION */
57573
57574 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
57575 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
57576 }
57577 }
57578
57579 if (nullptr == old) {
57580 old = fc_malloc(sizeof(*old));
57582 *old = *real_packet;
57584 } else {
57585 *old = *real_packet;
57586 }
57587
57588#else /* FREECIV_DELTA_PROTOCOL */
57589#ifdef FREECIV_JSON_CONNECTION
57590 field_addr.name = "ocean_reclaim_requirement_pct";
57591#endif /* FREECIV_JSON_CONNECTION */
57592
57593 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
57594 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
57595 }
57596
57597#ifdef FREECIV_JSON_CONNECTION
57598 field_addr.name = "land_channel_requirement_pct";
57599#endif /* FREECIV_JSON_CONNECTION */
57600
57601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
57602 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
57603 }
57604
57605#ifdef FREECIV_JSON_CONNECTION
57606 field_addr.name = "terrain_thaw_requirement_pct";
57607#endif /* FREECIV_JSON_CONNECTION */
57608
57609 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
57610 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
57611 }
57612
57613#ifdef FREECIV_JSON_CONNECTION
57614 field_addr.name = "terrain_freeze_requirement_pct";
57615#endif /* FREECIV_JSON_CONNECTION */
57616
57617 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
57618 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
57619 }
57620
57621#ifdef FREECIV_JSON_CONNECTION
57622 field_addr.name = "lake_max_size";
57623#endif /* FREECIV_JSON_CONNECTION */
57624
57625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
57626 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
57627 }
57628
57629#ifdef FREECIV_JSON_CONNECTION
57630 field_addr.name = "min_start_native_area";
57631#endif /* FREECIV_JSON_CONNECTION */
57632
57633 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
57634 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
57635 }
57636
57637#ifdef FREECIV_JSON_CONNECTION
57638 field_addr.name = "move_fragments";
57639#endif /* FREECIV_JSON_CONNECTION */
57640
57641 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
57642 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
57643 }
57644
57645#ifdef FREECIV_JSON_CONNECTION
57646 field_addr.name = "igter_cost";
57647#endif /* FREECIV_JSON_CONNECTION */
57648
57649 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
57650 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
57651 }
57652
57653#ifdef FREECIV_JSON_CONNECTION
57654 field_addr.name = "pythagorean_diagonal";
57655#endif /* FREECIV_JSON_CONNECTION */
57656
57657 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pythagorean_diagonal)) {
57658 RECEIVE_PACKET_FIELD_ERROR(pythagorean_diagonal);
57659 }
57660
57661#ifdef FREECIV_JSON_CONNECTION
57662 field_addr.name = "infrapoints";
57663#endif /* FREECIV_JSON_CONNECTION */
57664
57665 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->infrapoints)) {
57666 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
57667 }
57668
57669#ifdef FREECIV_JSON_CONNECTION
57670 field_addr.name = "gui_type_base0";
57671#endif /* FREECIV_JSON_CONNECTION */
57672
57673 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
57674 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
57675 }
57676
57677#ifdef FREECIV_JSON_CONNECTION
57678 field_addr.name = "gui_type_base1";
57679#endif /* FREECIV_JSON_CONNECTION */
57680
57681 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
57682 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
57683 }
57684#endif /* FREECIV_DELTA_PROTOCOL */
57685
57687#undef FREE_PACKET_STRUCT
57688}
57689
57691{
57692 const struct packet_ruleset_terrain_control *real_packet = packet;
57693 int e;
57695
57696 log_packet_detailed("packet_ruleset_terrain_control_100: sending info about ()");
57697
57698#ifdef FREECIV_DELTA_PROTOCOL
57701 bool differ;
57702 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_CONTROL;
57703
57704 if (nullptr == *hash) {
57706 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
57707 }
57708 BV_CLR_ALL(fields);
57709
57710 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57711 old = fc_malloc(sizeof(*old));
57712 /* temporary bitcopy just to insert correctly */
57713 *old = *real_packet;
57716 }
57717
57718 differ = (old->ocean_reclaim_requirement_pct != real_packet->ocean_reclaim_requirement_pct);
57719 if (differ) {
57720 BV_SET(fields, 0);
57721 }
57722
57723 differ = (old->land_channel_requirement_pct != real_packet->land_channel_requirement_pct);
57724 if (differ) {
57725 BV_SET(fields, 1);
57726 }
57727
57728 differ = (old->terrain_thaw_requirement_pct != real_packet->terrain_thaw_requirement_pct);
57729 if (differ) {
57730 BV_SET(fields, 2);
57731 }
57732
57733 differ = (old->terrain_freeze_requirement_pct != real_packet->terrain_freeze_requirement_pct);
57734 if (differ) {
57735 BV_SET(fields, 3);
57736 }
57737
57738 differ = (old->lake_max_size != real_packet->lake_max_size);
57739 if (differ) {
57740 BV_SET(fields, 4);
57741 }
57742
57743 differ = (old->min_start_native_area != real_packet->min_start_native_area);
57744 if (differ) {
57745 BV_SET(fields, 5);
57746 }
57747
57748 differ = (old->move_fragments != real_packet->move_fragments);
57749 if (differ) {
57750 BV_SET(fields, 6);
57751 }
57752
57753 differ = (old->igter_cost != real_packet->igter_cost);
57754 if (differ) {
57755 BV_SET(fields, 7);
57756 }
57757
57758 /* folded into head */
57759 if (real_packet->pythagorean_diagonal) {
57760 BV_SET(fields, 8);
57761 }
57762
57763 /* folded into head */
57764 if (real_packet->infrapoints) {
57765 BV_SET(fields, 9);
57766 }
57767
57768 differ = (strcmp(old->gui_type_base0, real_packet->gui_type_base0) != 0);
57769 if (differ) {
57770 BV_SET(fields, 10);
57771 }
57772
57773 differ = (strcmp(old->gui_type_base1, real_packet->gui_type_base1) != 0);
57774 if (differ) {
57775 BV_SET(fields, 11);
57776 }
57777#endif /* FREECIV_DELTA_PROTOCOL */
57778
57779#ifdef FREECIV_JSON_CONNECTION
57780 struct plocation field_addr;
57781 {
57782 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57785 }
57786#endif /* FREECIV_JSON_CONNECTION */
57787
57788#ifdef FREECIV_DELTA_PROTOCOL
57789#ifdef FREECIV_JSON_CONNECTION
57790 field_addr.name = "fields";
57791#endif /* FREECIV_JSON_CONNECTION */
57792 e = 0;
57793 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57794 if (e) {
57795 log_packet_detailed("fields bitvector error detected");
57796 }
57797
57798 if (BV_ISSET(fields, 0)) {
57799 log_packet_detailed(" field 'ocean_reclaim_requirement_pct' has changed");
57800
57801#ifdef FREECIV_JSON_CONNECTION
57802 field_addr.name = "ocean_reclaim_requirement_pct";
57803#endif /* FREECIV_JSON_CONNECTION */
57804 e = 0;
57805
57806 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
57807
57808 if (e) {
57809 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
57810 }
57811 }
57812
57813 if (BV_ISSET(fields, 1)) {
57814 log_packet_detailed(" field 'land_channel_requirement_pct' has changed");
57815
57816#ifdef FREECIV_JSON_CONNECTION
57817 field_addr.name = "land_channel_requirement_pct";
57818#endif /* FREECIV_JSON_CONNECTION */
57819 e = 0;
57820
57821 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
57822
57823 if (e) {
57824 log_packet_detailed("'land_channel_requirement_pct' field error detected");
57825 }
57826 }
57827
57828 if (BV_ISSET(fields, 2)) {
57829 log_packet_detailed(" field 'terrain_thaw_requirement_pct' has changed");
57830
57831#ifdef FREECIV_JSON_CONNECTION
57832 field_addr.name = "terrain_thaw_requirement_pct";
57833#endif /* FREECIV_JSON_CONNECTION */
57834 e = 0;
57835
57836 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
57837
57838 if (e) {
57839 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
57840 }
57841 }
57842
57843 if (BV_ISSET(fields, 3)) {
57844 log_packet_detailed(" field 'terrain_freeze_requirement_pct' has changed");
57845
57846#ifdef FREECIV_JSON_CONNECTION
57847 field_addr.name = "terrain_freeze_requirement_pct";
57848#endif /* FREECIV_JSON_CONNECTION */
57849 e = 0;
57850
57851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
57852
57853 if (e) {
57854 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
57855 }
57856 }
57857
57858 if (BV_ISSET(fields, 4)) {
57859 log_packet_detailed(" field 'lake_max_size' has changed");
57860
57861#ifdef FREECIV_JSON_CONNECTION
57862 field_addr.name = "lake_max_size";
57863#endif /* FREECIV_JSON_CONNECTION */
57864 e = 0;
57865
57866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
57867
57868 if (e) {
57869 log_packet_detailed("'lake_max_size' field error detected");
57870 }
57871 }
57872
57873 if (BV_ISSET(fields, 5)) {
57874 log_packet_detailed(" field 'min_start_native_area' has changed");
57875
57876#ifdef FREECIV_JSON_CONNECTION
57877 field_addr.name = "min_start_native_area";
57878#endif /* FREECIV_JSON_CONNECTION */
57879 e = 0;
57880
57881 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
57882
57883 if (e) {
57884 log_packet_detailed("'min_start_native_area' field error detected");
57885 }
57886 }
57887
57888 if (BV_ISSET(fields, 6)) {
57889 log_packet_detailed(" field 'move_fragments' has changed");
57890
57891#ifdef FREECIV_JSON_CONNECTION
57892 field_addr.name = "move_fragments";
57893#endif /* FREECIV_JSON_CONNECTION */
57894 e = 0;
57895
57896 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
57897
57898 if (e) {
57899 log_packet_detailed("'move_fragments' field error detected");
57900 }
57901 }
57902
57903 if (BV_ISSET(fields, 7)) {
57904 log_packet_detailed(" field 'igter_cost' has changed");
57905
57906#ifdef FREECIV_JSON_CONNECTION
57907 field_addr.name = "igter_cost";
57908#endif /* FREECIV_JSON_CONNECTION */
57909 e = 0;
57910
57911 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
57912
57913 if (e) {
57914 log_packet_detailed("'igter_cost' field error detected");
57915 }
57916 }
57917
57918 /* field 8 is folded into the header */
57919
57920 /* field 9 is folded into the header */
57921
57922 if (BV_ISSET(fields, 10)) {
57923 log_packet_detailed(" field 'gui_type_base0' has changed");
57924
57925#ifdef FREECIV_JSON_CONNECTION
57926 field_addr.name = "gui_type_base0";
57927#endif /* FREECIV_JSON_CONNECTION */
57928 e = 0;
57929
57930 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
57931
57932 if (e) {
57933 log_packet_detailed("'gui_type_base0' field error detected");
57934 }
57935 }
57936
57937 if (BV_ISSET(fields, 11)) {
57938 log_packet_detailed(" field 'gui_type_base1' has changed");
57939
57940#ifdef FREECIV_JSON_CONNECTION
57941 field_addr.name = "gui_type_base1";
57942#endif /* FREECIV_JSON_CONNECTION */
57943 e = 0;
57944
57945 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
57946
57947 if (e) {
57948 log_packet_detailed("'gui_type_base1' field error detected");
57949 }
57950 }
57951
57952 *old = *real_packet;
57953
57954#else /* FREECIV_DELTA_PROTOCOL */
57955#ifdef FREECIV_JSON_CONNECTION
57956 field_addr.name = "ocean_reclaim_requirement_pct";
57957#endif /* FREECIV_JSON_CONNECTION */
57958 e = 0;
57959
57960 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
57961
57962 if (e) {
57963 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
57964 }
57965
57966#ifdef FREECIV_JSON_CONNECTION
57967 field_addr.name = "land_channel_requirement_pct";
57968#endif /* FREECIV_JSON_CONNECTION */
57969 e = 0;
57970
57971 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
57972
57973 if (e) {
57974 log_packet_detailed("'land_channel_requirement_pct' field error detected");
57975 }
57976
57977#ifdef FREECIV_JSON_CONNECTION
57978 field_addr.name = "terrain_thaw_requirement_pct";
57979#endif /* FREECIV_JSON_CONNECTION */
57980 e = 0;
57981
57982 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
57983
57984 if (e) {
57985 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
57986 }
57987
57988#ifdef FREECIV_JSON_CONNECTION
57989 field_addr.name = "terrain_freeze_requirement_pct";
57990#endif /* FREECIV_JSON_CONNECTION */
57991 e = 0;
57992
57993 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
57994
57995 if (e) {
57996 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
57997 }
57998
57999#ifdef FREECIV_JSON_CONNECTION
58000 field_addr.name = "lake_max_size";
58001#endif /* FREECIV_JSON_CONNECTION */
58002 e = 0;
58003
58004 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
58005
58006 if (e) {
58007 log_packet_detailed("'lake_max_size' field error detected");
58008 }
58009
58010#ifdef FREECIV_JSON_CONNECTION
58011 field_addr.name = "min_start_native_area";
58012#endif /* FREECIV_JSON_CONNECTION */
58013 e = 0;
58014
58015 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
58016
58017 if (e) {
58018 log_packet_detailed("'min_start_native_area' field error detected");
58019 }
58020
58021#ifdef FREECIV_JSON_CONNECTION
58022 field_addr.name = "move_fragments";
58023#endif /* FREECIV_JSON_CONNECTION */
58024 e = 0;
58025
58026 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
58027
58028 if (e) {
58029 log_packet_detailed("'move_fragments' field error detected");
58030 }
58031
58032#ifdef FREECIV_JSON_CONNECTION
58033 field_addr.name = "igter_cost";
58034#endif /* FREECIV_JSON_CONNECTION */
58035 e = 0;
58036
58037 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
58038
58039 if (e) {
58040 log_packet_detailed("'igter_cost' field error detected");
58041 }
58042
58043#ifdef FREECIV_JSON_CONNECTION
58044 field_addr.name = "pythagorean_diagonal";
58045#endif /* FREECIV_JSON_CONNECTION */
58046 e = 0;
58047
58048 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pythagorean_diagonal);
58049
58050 if (e) {
58051 log_packet_detailed("'pythagorean_diagonal' field error detected");
58052 }
58053
58054#ifdef FREECIV_JSON_CONNECTION
58055 field_addr.name = "infrapoints";
58056#endif /* FREECIV_JSON_CONNECTION */
58057 e = 0;
58058
58059 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->infrapoints);
58060
58061 if (e) {
58062 log_packet_detailed("'infrapoints' field error detected");
58063 }
58064
58065#ifdef FREECIV_JSON_CONNECTION
58066 field_addr.name = "gui_type_base0";
58067#endif /* FREECIV_JSON_CONNECTION */
58068 e = 0;
58069
58070 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
58071
58072 if (e) {
58073 log_packet_detailed("'gui_type_base0' field error detected");
58074 }
58075
58076#ifdef FREECIV_JSON_CONNECTION
58077 field_addr.name = "gui_type_base1";
58078#endif /* FREECIV_JSON_CONNECTION */
58079 e = 0;
58080
58081 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
58082
58083 if (e) {
58084 log_packet_detailed("'gui_type_base1' field error detected");
58085 }
58086#endif /* FREECIV_DELTA_PROTOCOL */
58087
58089}
58090
58092{
58093 if (!pc->used) {
58094 log_error("WARNING: trying to send data to the closed connection %s",
58096 return -1;
58097 }
58098 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet != nullptr, -1,
58099 "Handler for PACKET_RULESET_TERRAIN_CONTROL not installed");
58100 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet(pc, packet);
58101}
58102
58109
58110static inline void init_packet_rulesets_ready(struct packet_rulesets_ready *packet)
58111{
58112 memset(packet, 0, sizeof(*packet));
58113}
58114
58115#define free_packet_rulesets_ready(_packet) (void) 0
58116#define destroy_packet_rulesets_ready free
58117
58119{
58120#define FREE_PACKET_STRUCT(_packet) free_packet_rulesets_ready(_packet)
58122
58123 log_packet_detailed("packet_rulesets_ready_100: got info about ()");
58124
58125 real_packet->__dummy = 0xff;
58126
58128#undef FREE_PACKET_STRUCT
58129}
58130
58132{
58134
58135 log_packet_detailed("packet_rulesets_ready_100: sending info about ()");
58136
58138}
58139
58141{
58142 if (!pc->used) {
58143 log_error("WARNING: trying to send data to the closed connection %s",
58145 return -1;
58146 }
58147 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet != nullptr, -1,
58148 "Handler for PACKET_RULESETS_READY not installed");
58149 return pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet(pc);
58150}
58151
58158
58160{
58161 memset(packet, 0, sizeof(*packet));
58162}
58163
58164#define free_packet_ruleset_nation_sets(_packet) (void) 0
58165#define destroy_packet_ruleset_nation_sets free
58166
58167#ifdef FREECIV_DELTA_PROTOCOL
58168#define hash_packet_ruleset_nation_sets_100 hash_const
58169#define cmp_packet_ruleset_nation_sets_100 cmp_const
58171#endif /* FREECIV_DELTA_PROTOCOL */
58172
58174{
58175#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_sets(_packet)
58177
58178#ifdef FREECIV_JSON_CONNECTION
58179 struct plocation field_addr;
58180 {
58181 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58184 }
58185#endif /* FREECIV_JSON_CONNECTION */
58186
58187 log_packet_detailed("packet_ruleset_nation_sets_100: got info about ()");
58188
58189#ifdef FREECIV_DELTA_PROTOCOL
58192 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_SETS;
58193
58194 if (nullptr == *hash) {
58196 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58197 }
58198
58199 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58200 *real_packet = *old;
58201 } else {
58202 /* packet is already initialized empty */
58203 log_packet_detailed(" no old info");
58204 }
58205
58206#ifdef FREECIV_JSON_CONNECTION
58207 field_addr.name = "fields";
58208#endif /* FREECIV_JSON_CONNECTION */
58209 DIO_BV_GET(&din, &field_addr, fields);
58210
58211 if (BV_ISSET(fields, 0)) {
58212 log_packet_detailed(" got field 'nsets'");
58213
58214#ifdef FREECIV_JSON_CONNECTION
58215 field_addr.name = "nsets";
58216#endif /* FREECIV_JSON_CONNECTION */
58217
58218 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58220 }
58221 }
58222
58223 if (BV_ISSET(fields, 1)) {
58224 log_packet_detailed(" got field 'names'");
58225
58226#ifdef FREECIV_JSON_CONNECTION
58227 field_addr.name = "names";
58228#endif /* FREECIV_JSON_CONNECTION */
58229
58230 {
58231 int i;
58232
58233 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58234 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58235 }
58236
58237#ifdef FREECIV_JSON_CONNECTION
58238 /* Enter array. */
58239 field_addr.sub_location = plocation_elem_new(0);
58240#endif /* FREECIV_JSON_CONNECTION */
58241
58242 for (i = 0; i < real_packet->nsets; i++) {
58243#ifdef FREECIV_JSON_CONNECTION
58244 /* Next array element */
58245 field_addr.sub_location->number = i;
58246#endif /* FREECIV_JSON_CONNECTION */
58247
58248 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58250 }
58251 }
58252
58253#ifdef FREECIV_JSON_CONNECTION
58254 /* Exit array. */
58255 FC_FREE(field_addr.sub_location);
58256#endif /* FREECIV_JSON_CONNECTION */
58257 }
58258 }
58259
58260 if (BV_ISSET(fields, 2)) {
58261 log_packet_detailed(" got field 'rule_names'");
58262
58263#ifdef FREECIV_JSON_CONNECTION
58264 field_addr.name = "rule_names";
58265#endif /* FREECIV_JSON_CONNECTION */
58266
58267 {
58268 int i;
58269
58270 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58271 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58272 }
58273
58274#ifdef FREECIV_JSON_CONNECTION
58275 /* Enter array. */
58276 field_addr.sub_location = plocation_elem_new(0);
58277#endif /* FREECIV_JSON_CONNECTION */
58278
58279 for (i = 0; i < real_packet->nsets; i++) {
58280#ifdef FREECIV_JSON_CONNECTION
58281 /* Next array element */
58282 field_addr.sub_location->number = i;
58283#endif /* FREECIV_JSON_CONNECTION */
58284
58285 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58286 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58287 }
58288 }
58289
58290#ifdef FREECIV_JSON_CONNECTION
58291 /* Exit array. */
58292 FC_FREE(field_addr.sub_location);
58293#endif /* FREECIV_JSON_CONNECTION */
58294 }
58295 }
58296
58297 if (BV_ISSET(fields, 3)) {
58298 log_packet_detailed(" got field 'descriptions'");
58299
58300#ifdef FREECIV_JSON_CONNECTION
58301 field_addr.name = "descriptions";
58302#endif /* FREECIV_JSON_CONNECTION */
58303
58304 {
58305 int i;
58306
58307 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58308 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58309 }
58310
58311#ifdef FREECIV_JSON_CONNECTION
58312 /* Enter array. */
58313 field_addr.sub_location = plocation_elem_new(0);
58314#endif /* FREECIV_JSON_CONNECTION */
58315
58316 for (i = 0; i < real_packet->nsets; i++) {
58317#ifdef FREECIV_JSON_CONNECTION
58318 /* Next array element */
58319 field_addr.sub_location->number = i;
58320#endif /* FREECIV_JSON_CONNECTION */
58321
58322 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58323 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58324 }
58325 }
58326
58327#ifdef FREECIV_JSON_CONNECTION
58328 /* Exit array. */
58329 FC_FREE(field_addr.sub_location);
58330#endif /* FREECIV_JSON_CONNECTION */
58331 }
58332 }
58333
58334 if (nullptr == old) {
58335 old = fc_malloc(sizeof(*old));
58337 *old = *real_packet;
58339 } else {
58340 *old = *real_packet;
58341 }
58342
58343#else /* FREECIV_DELTA_PROTOCOL */
58344#ifdef FREECIV_JSON_CONNECTION
58345 field_addr.name = "nsets";
58346#endif /* FREECIV_JSON_CONNECTION */
58347
58348 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58350 }
58351
58352#ifdef FREECIV_JSON_CONNECTION
58353 field_addr.name = "names";
58354#endif /* FREECIV_JSON_CONNECTION */
58355
58356 {
58357 int i;
58358
58359 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58360 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58361 }
58362
58363#ifdef FREECIV_JSON_CONNECTION
58364 /* Enter array. */
58365 field_addr.sub_location = plocation_elem_new(0);
58366#endif /* FREECIV_JSON_CONNECTION */
58367
58368 for (i = 0; i < real_packet->nsets; i++) {
58369#ifdef FREECIV_JSON_CONNECTION
58370 /* Next array element */
58371 field_addr.sub_location->number = i;
58372#endif /* FREECIV_JSON_CONNECTION */
58373
58374 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58376 }
58377 }
58378
58379#ifdef FREECIV_JSON_CONNECTION
58380 /* Exit array. */
58381 FC_FREE(field_addr.sub_location);
58382#endif /* FREECIV_JSON_CONNECTION */
58383 }
58384
58385#ifdef FREECIV_JSON_CONNECTION
58386 field_addr.name = "rule_names";
58387#endif /* FREECIV_JSON_CONNECTION */
58388
58389 {
58390 int i;
58391
58392 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58393 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58394 }
58395
58396#ifdef FREECIV_JSON_CONNECTION
58397 /* Enter array. */
58398 field_addr.sub_location = plocation_elem_new(0);
58399#endif /* FREECIV_JSON_CONNECTION */
58400
58401 for (i = 0; i < real_packet->nsets; i++) {
58402#ifdef FREECIV_JSON_CONNECTION
58403 /* Next array element */
58404 field_addr.sub_location->number = i;
58405#endif /* FREECIV_JSON_CONNECTION */
58406
58407 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58408 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58409 }
58410 }
58411
58412#ifdef FREECIV_JSON_CONNECTION
58413 /* Exit array. */
58414 FC_FREE(field_addr.sub_location);
58415#endif /* FREECIV_JSON_CONNECTION */
58416 }
58417
58418#ifdef FREECIV_JSON_CONNECTION
58419 field_addr.name = "descriptions";
58420#endif /* FREECIV_JSON_CONNECTION */
58421
58422 {
58423 int i;
58424
58425 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58426 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58427 }
58428
58429#ifdef FREECIV_JSON_CONNECTION
58430 /* Enter array. */
58431 field_addr.sub_location = plocation_elem_new(0);
58432#endif /* FREECIV_JSON_CONNECTION */
58433
58434 for (i = 0; i < real_packet->nsets; i++) {
58435#ifdef FREECIV_JSON_CONNECTION
58436 /* Next array element */
58437 field_addr.sub_location->number = i;
58438#endif /* FREECIV_JSON_CONNECTION */
58439
58440 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58441 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58442 }
58443 }
58444
58445#ifdef FREECIV_JSON_CONNECTION
58446 /* Exit array. */
58447 FC_FREE(field_addr.sub_location);
58448#endif /* FREECIV_JSON_CONNECTION */
58449 }
58450#endif /* FREECIV_DELTA_PROTOCOL */
58451
58453#undef FREE_PACKET_STRUCT
58454}
58455
58457{
58458 const struct packet_ruleset_nation_sets *real_packet = packet;
58459 int e;
58461
58462 log_packet_detailed("packet_ruleset_nation_sets_100: sending info about ()");
58463
58464#ifdef FREECIV_DELTA_PROTOCOL
58467 bool differ;
58468 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_SETS;
58469
58470 if (nullptr == *hash) {
58472 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58473 }
58474 BV_CLR_ALL(fields);
58475
58476 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58477 old = fc_malloc(sizeof(*old));
58478 /* temporary bitcopy just to insert correctly */
58479 *old = *real_packet;
58482 }
58483
58484 differ = (old->nsets != real_packet->nsets);
58485 if (differ) {
58486 BV_SET(fields, 0);
58487 }
58488
58489 differ = (old->nsets != real_packet->nsets);
58490 if (!differ) {
58491 int i;
58492
58493 for (i = 0; i < old->nsets; i++) {
58494 differ = (strcmp(old->names[i], real_packet->names[i]) != 0);
58495 if (differ) {
58496 break;
58497 }
58498 }
58499 }
58500 if (differ) {
58501 BV_SET(fields, 1);
58502 }
58503
58504 differ = (old->nsets != real_packet->nsets);
58505 if (!differ) {
58506 int i;
58507
58508 for (i = 0; i < old->nsets; i++) {
58509 differ = (strcmp(old->rule_names[i], real_packet->rule_names[i]) != 0);
58510 if (differ) {
58511 break;
58512 }
58513 }
58514 }
58515 if (differ) {
58516 BV_SET(fields, 2);
58517 }
58518
58519 differ = (old->nsets != real_packet->nsets);
58520 if (!differ) {
58521 int i;
58522
58523 for (i = 0; i < old->nsets; i++) {
58524 differ = (strcmp(old->descriptions[i], real_packet->descriptions[i]) != 0);
58525 if (differ) {
58526 break;
58527 }
58528 }
58529 }
58530 if (differ) {
58531 BV_SET(fields, 3);
58532 }
58533#endif /* FREECIV_DELTA_PROTOCOL */
58534
58535#ifdef FREECIV_JSON_CONNECTION
58536 struct plocation field_addr;
58537 {
58538 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58541 }
58542#endif /* FREECIV_JSON_CONNECTION */
58543
58544#ifdef FREECIV_DELTA_PROTOCOL
58545#ifdef FREECIV_JSON_CONNECTION
58546 field_addr.name = "fields";
58547#endif /* FREECIV_JSON_CONNECTION */
58548 e = 0;
58549 e |= DIO_BV_PUT(&dout, &field_addr, fields);
58550 if (e) {
58551 log_packet_detailed("fields bitvector error detected");
58552 }
58553
58554 if (BV_ISSET(fields, 0)) {
58555 log_packet_detailed(" field 'nsets' has changed");
58556
58557#ifdef FREECIV_JSON_CONNECTION
58558 field_addr.name = "nsets";
58559#endif /* FREECIV_JSON_CONNECTION */
58560 e = 0;
58561
58562 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
58563
58564 if (e) {
58565 log_packet_detailed("'nsets' field error detected");
58566 }
58567 }
58568
58569 if (BV_ISSET(fields, 1)) {
58570 log_packet_detailed(" field 'names' has changed");
58571
58572#ifdef FREECIV_JSON_CONNECTION
58573 field_addr.name = "names";
58574#endif /* FREECIV_JSON_CONNECTION */
58575 e = 0;
58576
58577 {
58578 int i;
58579
58580#ifdef FREECIV_JSON_CONNECTION
58581 /* Create the array. */
58582 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58583
58584 /* Enter array. */
58585 field_addr.sub_location = plocation_elem_new(0);
58586#endif /* FREECIV_JSON_CONNECTION */
58587
58588 for (i = 0; i < real_packet->nsets; i++) {
58589#ifdef FREECIV_JSON_CONNECTION
58590 /* Next array element. */
58591 field_addr.sub_location->number = i;
58592#endif /* FREECIV_JSON_CONNECTION */
58593
58594 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
58595 }
58596
58597#ifdef FREECIV_JSON_CONNECTION
58598 /* Exit array. */
58599 FC_FREE(field_addr.sub_location);
58600#endif /* FREECIV_JSON_CONNECTION */
58601 }
58602
58603 if (e) {
58604 log_packet_detailed("'names' field error detected");
58605 }
58606 }
58607
58608 if (BV_ISSET(fields, 2)) {
58609 log_packet_detailed(" field 'rule_names' has changed");
58610
58611#ifdef FREECIV_JSON_CONNECTION
58612 field_addr.name = "rule_names";
58613#endif /* FREECIV_JSON_CONNECTION */
58614 e = 0;
58615
58616 {
58617 int i;
58618
58619#ifdef FREECIV_JSON_CONNECTION
58620 /* Create the array. */
58621 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58622
58623 /* Enter array. */
58624 field_addr.sub_location = plocation_elem_new(0);
58625#endif /* FREECIV_JSON_CONNECTION */
58626
58627 for (i = 0; i < real_packet->nsets; i++) {
58628#ifdef FREECIV_JSON_CONNECTION
58629 /* Next array element. */
58630 field_addr.sub_location->number = i;
58631#endif /* FREECIV_JSON_CONNECTION */
58632
58633 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
58634 }
58635
58636#ifdef FREECIV_JSON_CONNECTION
58637 /* Exit array. */
58638 FC_FREE(field_addr.sub_location);
58639#endif /* FREECIV_JSON_CONNECTION */
58640 }
58641
58642 if (e) {
58643 log_packet_detailed("'rule_names' field error detected");
58644 }
58645 }
58646
58647 if (BV_ISSET(fields, 3)) {
58648 log_packet_detailed(" field 'descriptions' has changed");
58649
58650#ifdef FREECIV_JSON_CONNECTION
58651 field_addr.name = "descriptions";
58652#endif /* FREECIV_JSON_CONNECTION */
58653 e = 0;
58654
58655 {
58656 int i;
58657
58658#ifdef FREECIV_JSON_CONNECTION
58659 /* Create the array. */
58660 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58661
58662 /* Enter array. */
58663 field_addr.sub_location = plocation_elem_new(0);
58664#endif /* FREECIV_JSON_CONNECTION */
58665
58666 for (i = 0; i < real_packet->nsets; i++) {
58667#ifdef FREECIV_JSON_CONNECTION
58668 /* Next array element. */
58669 field_addr.sub_location->number = i;
58670#endif /* FREECIV_JSON_CONNECTION */
58671
58672 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
58673 }
58674
58675#ifdef FREECIV_JSON_CONNECTION
58676 /* Exit array. */
58677 FC_FREE(field_addr.sub_location);
58678#endif /* FREECIV_JSON_CONNECTION */
58679 }
58680
58681 if (e) {
58682 log_packet_detailed("'descriptions' field error detected");
58683 }
58684 }
58685
58686 *old = *real_packet;
58687
58688#else /* FREECIV_DELTA_PROTOCOL */
58689#ifdef FREECIV_JSON_CONNECTION
58690 field_addr.name = "nsets";
58691#endif /* FREECIV_JSON_CONNECTION */
58692 e = 0;
58693
58694 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
58695
58696 if (e) {
58697 log_packet_detailed("'nsets' field error detected");
58698 }
58699
58700#ifdef FREECIV_JSON_CONNECTION
58701 field_addr.name = "names";
58702#endif /* FREECIV_JSON_CONNECTION */
58703 e = 0;
58704
58705 {
58706 int i;
58707
58708#ifdef FREECIV_JSON_CONNECTION
58709 /* Create the array. */
58710 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58711
58712 /* Enter array. */
58713 field_addr.sub_location = plocation_elem_new(0);
58714#endif /* FREECIV_JSON_CONNECTION */
58715
58716 for (i = 0; i < real_packet->nsets; i++) {
58717#ifdef FREECIV_JSON_CONNECTION
58718 /* Next array element. */
58719 field_addr.sub_location->number = i;
58720#endif /* FREECIV_JSON_CONNECTION */
58721
58722 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
58723 }
58724
58725#ifdef FREECIV_JSON_CONNECTION
58726 /* Exit array. */
58727 FC_FREE(field_addr.sub_location);
58728#endif /* FREECIV_JSON_CONNECTION */
58729 }
58730
58731 if (e) {
58732 log_packet_detailed("'names' field error detected");
58733 }
58734
58735#ifdef FREECIV_JSON_CONNECTION
58736 field_addr.name = "rule_names";
58737#endif /* FREECIV_JSON_CONNECTION */
58738 e = 0;
58739
58740 {
58741 int i;
58742
58743#ifdef FREECIV_JSON_CONNECTION
58744 /* Create the array. */
58745 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58746
58747 /* Enter array. */
58748 field_addr.sub_location = plocation_elem_new(0);
58749#endif /* FREECIV_JSON_CONNECTION */
58750
58751 for (i = 0; i < real_packet->nsets; i++) {
58752#ifdef FREECIV_JSON_CONNECTION
58753 /* Next array element. */
58754 field_addr.sub_location->number = i;
58755#endif /* FREECIV_JSON_CONNECTION */
58756
58757 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
58758 }
58759
58760#ifdef FREECIV_JSON_CONNECTION
58761 /* Exit array. */
58762 FC_FREE(field_addr.sub_location);
58763#endif /* FREECIV_JSON_CONNECTION */
58764 }
58765
58766 if (e) {
58767 log_packet_detailed("'rule_names' field error detected");
58768 }
58769
58770#ifdef FREECIV_JSON_CONNECTION
58771 field_addr.name = "descriptions";
58772#endif /* FREECIV_JSON_CONNECTION */
58773 e = 0;
58774
58775 {
58776 int i;
58777
58778#ifdef FREECIV_JSON_CONNECTION
58779 /* Create the array. */
58780 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58781
58782 /* Enter array. */
58783 field_addr.sub_location = plocation_elem_new(0);
58784#endif /* FREECIV_JSON_CONNECTION */
58785
58786 for (i = 0; i < real_packet->nsets; i++) {
58787#ifdef FREECIV_JSON_CONNECTION
58788 /* Next array element. */
58789 field_addr.sub_location->number = i;
58790#endif /* FREECIV_JSON_CONNECTION */
58791
58792 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
58793 }
58794
58795#ifdef FREECIV_JSON_CONNECTION
58796 /* Exit array. */
58797 FC_FREE(field_addr.sub_location);
58798#endif /* FREECIV_JSON_CONNECTION */
58799 }
58800
58801 if (e) {
58802 log_packet_detailed("'descriptions' field error detected");
58803 }
58804#endif /* FREECIV_DELTA_PROTOCOL */
58805
58807}
58808
58810{
58811 if (!pc->used) {
58812 log_error("WARNING: trying to send data to the closed connection %s",
58814 return -1;
58815 }
58816 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet != nullptr, -1,
58817 "Handler for PACKET_RULESET_NATION_SETS not installed");
58818 return pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet(pc, packet);
58819}
58820
58822{
58823 conn_list_iterate(dest, pconn) {
58826}
58827
58829{
58830 memset(packet, 0, sizeof(*packet));
58831}
58832
58833#define free_packet_ruleset_nation_groups(_packet) (void) 0
58834#define destroy_packet_ruleset_nation_groups free
58835
58836#ifdef FREECIV_DELTA_PROTOCOL
58837#define hash_packet_ruleset_nation_groups_100 hash_const
58838#define cmp_packet_ruleset_nation_groups_100 cmp_const
58840#endif /* FREECIV_DELTA_PROTOCOL */
58841
58843{
58844#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_groups(_packet)
58846
58847#ifdef FREECIV_JSON_CONNECTION
58848 struct plocation field_addr;
58849 {
58850 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58853 }
58854#endif /* FREECIV_JSON_CONNECTION */
58855
58856 log_packet_detailed("packet_ruleset_nation_groups_100: got info about ()");
58857
58858#ifdef FREECIV_DELTA_PROTOCOL
58861 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_GROUPS;
58862
58863 if (nullptr == *hash) {
58865 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
58866 }
58867
58868 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58869 *real_packet = *old;
58870 } else {
58871 /* packet is already initialized empty */
58872 log_packet_detailed(" no old info");
58873 }
58874
58875#ifdef FREECIV_JSON_CONNECTION
58876 field_addr.name = "fields";
58877#endif /* FREECIV_JSON_CONNECTION */
58878 DIO_BV_GET(&din, &field_addr, fields);
58879
58880 if (BV_ISSET(fields, 0)) {
58881 log_packet_detailed(" got field 'ngroups'");
58882
58883#ifdef FREECIV_JSON_CONNECTION
58884 field_addr.name = "ngroups";
58885#endif /* FREECIV_JSON_CONNECTION */
58886
58887 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
58889 }
58890 }
58891
58892 if (BV_ISSET(fields, 1)) {
58893 log_packet_detailed(" got field 'groups'");
58894
58895#ifdef FREECIV_JSON_CONNECTION
58896 field_addr.name = "groups";
58897#endif /* FREECIV_JSON_CONNECTION */
58898
58899 {
58900 int i;
58901
58902 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
58903 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
58904 }
58905
58906#ifdef FREECIV_JSON_CONNECTION
58907 /* Enter array. */
58908 field_addr.sub_location = plocation_elem_new(0);
58909#endif /* FREECIV_JSON_CONNECTION */
58910
58911 for (i = 0; i < real_packet->ngroups; i++) {
58912#ifdef FREECIV_JSON_CONNECTION
58913 /* Next array element */
58914 field_addr.sub_location->number = i;
58915#endif /* FREECIV_JSON_CONNECTION */
58916
58917 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
58919 }
58920 }
58921
58922#ifdef FREECIV_JSON_CONNECTION
58923 /* Exit array. */
58924 FC_FREE(field_addr.sub_location);
58925#endif /* FREECIV_JSON_CONNECTION */
58926 }
58927 }
58928
58929 if (BV_ISSET(fields, 2)) {
58930 log_packet_detailed(" got field 'hidden'");
58931
58932#ifdef FREECIV_JSON_CONNECTION
58933 field_addr.name = "hidden";
58934#endif /* FREECIV_JSON_CONNECTION */
58935
58936 {
58937 int i;
58938
58939 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
58940 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
58941 }
58942
58943#ifdef FREECIV_JSON_CONNECTION
58944 /* Enter array. */
58945 field_addr.sub_location = plocation_elem_new(0);
58946#endif /* FREECIV_JSON_CONNECTION */
58947
58948 for (i = 0; i < real_packet->ngroups; i++) {
58949#ifdef FREECIV_JSON_CONNECTION
58950 /* Next array element */
58951 field_addr.sub_location->number = i;
58952#endif /* FREECIV_JSON_CONNECTION */
58953
58954 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
58956 }
58957 }
58958
58959#ifdef FREECIV_JSON_CONNECTION
58960 /* Exit array. */
58961 FC_FREE(field_addr.sub_location);
58962#endif /* FREECIV_JSON_CONNECTION */
58963 }
58964 }
58965
58966 if (nullptr == old) {
58967 old = fc_malloc(sizeof(*old));
58969 *old = *real_packet;
58971 } else {
58972 *old = *real_packet;
58973 }
58974
58975#else /* FREECIV_DELTA_PROTOCOL */
58976#ifdef FREECIV_JSON_CONNECTION
58977 field_addr.name = "ngroups";
58978#endif /* FREECIV_JSON_CONNECTION */
58979
58980 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
58982 }
58983
58984#ifdef FREECIV_JSON_CONNECTION
58985 field_addr.name = "groups";
58986#endif /* FREECIV_JSON_CONNECTION */
58987
58988 {
58989 int i;
58990
58991 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
58992 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
58993 }
58994
58995#ifdef FREECIV_JSON_CONNECTION
58996 /* Enter array. */
58997 field_addr.sub_location = plocation_elem_new(0);
58998#endif /* FREECIV_JSON_CONNECTION */
58999
59000 for (i = 0; i < real_packet->ngroups; i++) {
59001#ifdef FREECIV_JSON_CONNECTION
59002 /* Next array element */
59003 field_addr.sub_location->number = i;
59004#endif /* FREECIV_JSON_CONNECTION */
59005
59006 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
59008 }
59009 }
59010
59011#ifdef FREECIV_JSON_CONNECTION
59012 /* Exit array. */
59013 FC_FREE(field_addr.sub_location);
59014#endif /* FREECIV_JSON_CONNECTION */
59015 }
59016
59017#ifdef FREECIV_JSON_CONNECTION
59018 field_addr.name = "hidden";
59019#endif /* FREECIV_JSON_CONNECTION */
59020
59021 {
59022 int i;
59023
59024 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59025 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
59026 }
59027
59028#ifdef FREECIV_JSON_CONNECTION
59029 /* Enter array. */
59030 field_addr.sub_location = plocation_elem_new(0);
59031#endif /* FREECIV_JSON_CONNECTION */
59032
59033 for (i = 0; i < real_packet->ngroups; i++) {
59034#ifdef FREECIV_JSON_CONNECTION
59035 /* Next array element */
59036 field_addr.sub_location->number = i;
59037#endif /* FREECIV_JSON_CONNECTION */
59038
59039 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
59041 }
59042 }
59043
59044#ifdef FREECIV_JSON_CONNECTION
59045 /* Exit array. */
59046 FC_FREE(field_addr.sub_location);
59047#endif /* FREECIV_JSON_CONNECTION */
59048 }
59049#endif /* FREECIV_DELTA_PROTOCOL */
59050
59052#undef FREE_PACKET_STRUCT
59053}
59054
59056{
59057 const struct packet_ruleset_nation_groups *real_packet = packet;
59058 int e;
59060
59061 log_packet_detailed("packet_ruleset_nation_groups_100: sending info about ()");
59062
59063#ifdef FREECIV_DELTA_PROTOCOL
59066 bool differ;
59067 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_GROUPS;
59068
59069 if (nullptr == *hash) {
59071 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
59072 }
59073 BV_CLR_ALL(fields);
59074
59075 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59076 old = fc_malloc(sizeof(*old));
59077 /* temporary bitcopy just to insert correctly */
59078 *old = *real_packet;
59081 }
59082
59083 differ = (old->ngroups != real_packet->ngroups);
59084 if (differ) {
59085 BV_SET(fields, 0);
59086 }
59087
59088 differ = (old->ngroups != real_packet->ngroups);
59089 if (!differ) {
59090 int i;
59091
59092 for (i = 0; i < old->ngroups; i++) {
59093 differ = (strcmp(old->groups[i], real_packet->groups[i]) != 0);
59094 if (differ) {
59095 break;
59096 }
59097 }
59098 }
59099 if (differ) {
59100 BV_SET(fields, 1);
59101 }
59102
59103 differ = (old->ngroups != real_packet->ngroups);
59104 if (!differ) {
59105 int i;
59106
59107 for (i = 0; i < old->ngroups; i++) {
59108 differ = (old->hidden[i] != real_packet->hidden[i]);
59109 if (differ) {
59110 break;
59111 }
59112 }
59113 }
59114 if (differ) {
59115 BV_SET(fields, 2);
59116 }
59117#endif /* FREECIV_DELTA_PROTOCOL */
59118
59119#ifdef FREECIV_JSON_CONNECTION
59120 struct plocation field_addr;
59121 {
59122 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59125 }
59126#endif /* FREECIV_JSON_CONNECTION */
59127
59128#ifdef FREECIV_DELTA_PROTOCOL
59129#ifdef FREECIV_JSON_CONNECTION
59130 field_addr.name = "fields";
59131#endif /* FREECIV_JSON_CONNECTION */
59132 e = 0;
59133 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59134 if (e) {
59135 log_packet_detailed("fields bitvector error detected");
59136 }
59137
59138 if (BV_ISSET(fields, 0)) {
59139 log_packet_detailed(" field 'ngroups' has changed");
59140
59141#ifdef FREECIV_JSON_CONNECTION
59142 field_addr.name = "ngroups";
59143#endif /* FREECIV_JSON_CONNECTION */
59144 e = 0;
59145
59146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59147
59148 if (e) {
59149 log_packet_detailed("'ngroups' field error detected");
59150 }
59151 }
59152
59153 if (BV_ISSET(fields, 1)) {
59154 log_packet_detailed(" field 'groups' has changed");
59155
59156#ifdef FREECIV_JSON_CONNECTION
59157 field_addr.name = "groups";
59158#endif /* FREECIV_JSON_CONNECTION */
59159 e = 0;
59160
59161 {
59162 int i;
59163
59164#ifdef FREECIV_JSON_CONNECTION
59165 /* Create the array. */
59166 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59167
59168 /* Enter array. */
59169 field_addr.sub_location = plocation_elem_new(0);
59170#endif /* FREECIV_JSON_CONNECTION */
59171
59172 for (i = 0; i < real_packet->ngroups; i++) {
59173#ifdef FREECIV_JSON_CONNECTION
59174 /* Next array element. */
59175 field_addr.sub_location->number = i;
59176#endif /* FREECIV_JSON_CONNECTION */
59177
59178 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59179 }
59180
59181#ifdef FREECIV_JSON_CONNECTION
59182 /* Exit array. */
59183 FC_FREE(field_addr.sub_location);
59184#endif /* FREECIV_JSON_CONNECTION */
59185 }
59186
59187 if (e) {
59188 log_packet_detailed("'groups' field error detected");
59189 }
59190 }
59191
59192 if (BV_ISSET(fields, 2)) {
59193 log_packet_detailed(" field 'hidden' has changed");
59194
59195#ifdef FREECIV_JSON_CONNECTION
59196 field_addr.name = "hidden";
59197#endif /* FREECIV_JSON_CONNECTION */
59198 e = 0;
59199
59200 {
59201 int i;
59202
59203#ifdef FREECIV_JSON_CONNECTION
59204 /* Create the array. */
59205 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59206
59207 /* Enter array. */
59208 field_addr.sub_location = plocation_elem_new(0);
59209#endif /* FREECIV_JSON_CONNECTION */
59210
59211 for (i = 0; i < real_packet->ngroups; i++) {
59212#ifdef FREECIV_JSON_CONNECTION
59213 /* Next array element. */
59214 field_addr.sub_location->number = i;
59215#endif /* FREECIV_JSON_CONNECTION */
59216
59217 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59218 }
59219
59220#ifdef FREECIV_JSON_CONNECTION
59221 /* Exit array. */
59222 FC_FREE(field_addr.sub_location);
59223#endif /* FREECIV_JSON_CONNECTION */
59224 }
59225
59226 if (e) {
59227 log_packet_detailed("'hidden' field error detected");
59228 }
59229 }
59230
59231 *old = *real_packet;
59232
59233#else /* FREECIV_DELTA_PROTOCOL */
59234#ifdef FREECIV_JSON_CONNECTION
59235 field_addr.name = "ngroups";
59236#endif /* FREECIV_JSON_CONNECTION */
59237 e = 0;
59238
59239 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59240
59241 if (e) {
59242 log_packet_detailed("'ngroups' field error detected");
59243 }
59244
59245#ifdef FREECIV_JSON_CONNECTION
59246 field_addr.name = "groups";
59247#endif /* FREECIV_JSON_CONNECTION */
59248 e = 0;
59249
59250 {
59251 int i;
59252
59253#ifdef FREECIV_JSON_CONNECTION
59254 /* Create the array. */
59255 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59256
59257 /* Enter array. */
59258 field_addr.sub_location = plocation_elem_new(0);
59259#endif /* FREECIV_JSON_CONNECTION */
59260
59261 for (i = 0; i < real_packet->ngroups; i++) {
59262#ifdef FREECIV_JSON_CONNECTION
59263 /* Next array element. */
59264 field_addr.sub_location->number = i;
59265#endif /* FREECIV_JSON_CONNECTION */
59266
59267 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59268 }
59269
59270#ifdef FREECIV_JSON_CONNECTION
59271 /* Exit array. */
59272 FC_FREE(field_addr.sub_location);
59273#endif /* FREECIV_JSON_CONNECTION */
59274 }
59275
59276 if (e) {
59277 log_packet_detailed("'groups' field error detected");
59278 }
59279
59280#ifdef FREECIV_JSON_CONNECTION
59281 field_addr.name = "hidden";
59282#endif /* FREECIV_JSON_CONNECTION */
59283 e = 0;
59284
59285 {
59286 int i;
59287
59288#ifdef FREECIV_JSON_CONNECTION
59289 /* Create the array. */
59290 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59291
59292 /* Enter array. */
59293 field_addr.sub_location = plocation_elem_new(0);
59294#endif /* FREECIV_JSON_CONNECTION */
59295
59296 for (i = 0; i < real_packet->ngroups; i++) {
59297#ifdef FREECIV_JSON_CONNECTION
59298 /* Next array element. */
59299 field_addr.sub_location->number = i;
59300#endif /* FREECIV_JSON_CONNECTION */
59301
59302 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59303 }
59304
59305#ifdef FREECIV_JSON_CONNECTION
59306 /* Exit array. */
59307 FC_FREE(field_addr.sub_location);
59308#endif /* FREECIV_JSON_CONNECTION */
59309 }
59310
59311 if (e) {
59312 log_packet_detailed("'hidden' field error detected");
59313 }
59314#endif /* FREECIV_DELTA_PROTOCOL */
59315
59317}
59318
59320{
59321 if (!pc->used) {
59322 log_error("WARNING: trying to send data to the closed connection %s",
59324 return -1;
59325 }
59326 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet != nullptr, -1,
59327 "Handler for PACKET_RULESET_NATION_GROUPS not installed");
59328 return pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet(pc, packet);
59329}
59330
59337
59338static inline void init_packet_ruleset_nation(struct packet_ruleset_nation *packet)
59339{
59340 memset(packet, 0, sizeof(*packet));
59341}
59342
59343#define free_packet_ruleset_nation(_packet) (void) 0
59344#define destroy_packet_ruleset_nation free
59345
59346#ifdef FREECIV_DELTA_PROTOCOL
59348{
59349 const struct packet_ruleset_nation *key = (const struct packet_ruleset_nation *) vkey;
59350 genhash_val_t result = 0;
59351
59352 result += key->id;
59353
59354 result &= 0xFFFFFFFF;
59355 return result;
59356}
59357
59358static bool cmp_packet_ruleset_nation_100(const void *vkey1, const void *vkey2)
59359{
59360 const struct packet_ruleset_nation *old = (const struct packet_ruleset_nation *) vkey1;
59361 const struct packet_ruleset_nation *real_packet = (const struct packet_ruleset_nation *) vkey2;
59362 bool differ;
59363
59364 differ = (old->id != real_packet->id);
59365
59366 return !differ;
59367}
59369#endif /* FREECIV_DELTA_PROTOCOL */
59370
59372{
59373#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation(_packet)
59375
59376#ifdef FREECIV_JSON_CONNECTION
59377 struct plocation field_addr;
59378 {
59379 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59382 }
59383#endif /* FREECIV_JSON_CONNECTION */
59384
59385#ifdef FREECIV_JSON_CONNECTION
59386 field_addr.name = "id";
59387#endif /* FREECIV_JSON_CONNECTION */
59388
59389 {
59390 int readin;
59391
59392 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
59394 }
59395 real_packet->id = readin;
59396 }
59397
59398 log_packet_detailed("packet_ruleset_nation_100: got info about (%d)",
59399 real_packet->id);
59400
59401#ifdef FREECIV_DELTA_PROTOCOL
59403 struct packet_ruleset_nation *old;
59404 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION;
59405
59406 if (nullptr == *hash) {
59408 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
59409 }
59410
59411 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59412 *real_packet = *old;
59413 } else {
59414 /* packet is already initialized empty */
59415 log_packet_detailed(" no old info");
59416 }
59417
59418#ifdef FREECIV_JSON_CONNECTION
59419 field_addr.name = "fields";
59420#endif /* FREECIV_JSON_CONNECTION */
59421 DIO_BV_GET(&din, &field_addr, fields);
59422
59423 if (BV_ISSET(fields, 0)) {
59424 log_packet_detailed(" got field 'translation_domain'");
59425
59426#ifdef FREECIV_JSON_CONNECTION
59427 field_addr.name = "translation_domain";
59428#endif /* FREECIV_JSON_CONNECTION */
59429
59430 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
59431 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
59432 }
59433 }
59434
59435 if (BV_ISSET(fields, 1)) {
59436 log_packet_detailed(" got field 'adjective'");
59437
59438#ifdef FREECIV_JSON_CONNECTION
59439 field_addr.name = "adjective";
59440#endif /* FREECIV_JSON_CONNECTION */
59441
59442 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
59443 RECEIVE_PACKET_FIELD_ERROR(adjective);
59444 }
59445 }
59446
59447 if (BV_ISSET(fields, 2)) {
59448 log_packet_detailed(" got field 'rule_name'");
59449
59450#ifdef FREECIV_JSON_CONNECTION
59451 field_addr.name = "rule_name";
59452#endif /* FREECIV_JSON_CONNECTION */
59453
59454 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59455 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59456 }
59457 }
59458
59459 if (BV_ISSET(fields, 3)) {
59460 log_packet_detailed(" got field 'noun_plural'");
59461
59462#ifdef FREECIV_JSON_CONNECTION
59463 field_addr.name = "noun_plural";
59464#endif /* FREECIV_JSON_CONNECTION */
59465
59466 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
59467 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
59468 }
59469 }
59470
59471 if (BV_ISSET(fields, 4)) {
59472 log_packet_detailed(" got field 'graphic_str'");
59473
59474#ifdef FREECIV_JSON_CONNECTION
59475 field_addr.name = "graphic_str";
59476#endif /* FREECIV_JSON_CONNECTION */
59477
59478 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59479 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59480 }
59481 }
59482
59483 if (BV_ISSET(fields, 5)) {
59484 log_packet_detailed(" got field 'graphic_alt'");
59485
59486#ifdef FREECIV_JSON_CONNECTION
59487 field_addr.name = "graphic_alt";
59488#endif /* FREECIV_JSON_CONNECTION */
59489
59490 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59491 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59492 }
59493 }
59494
59495 if (BV_ISSET(fields, 6)) {
59496 log_packet_detailed(" got field 'legend'");
59497
59498#ifdef FREECIV_JSON_CONNECTION
59499 field_addr.name = "legend";
59500#endif /* FREECIV_JSON_CONNECTION */
59501
59502 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
59504 }
59505 }
59506
59507 if (BV_ISSET(fields, 7)) {
59508 log_packet_detailed(" got field 'style'");
59509
59510#ifdef FREECIV_JSON_CONNECTION
59511 field_addr.name = "style";
59512#endif /* FREECIV_JSON_CONNECTION */
59513
59514 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
59516 }
59517 }
59518
59519 if (BV_ISSET(fields, 8)) {
59520 log_packet_detailed(" got field 'leader_count'");
59521
59522#ifdef FREECIV_JSON_CONNECTION
59523 field_addr.name = "leader_count";
59524#endif /* FREECIV_JSON_CONNECTION */
59525
59526 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
59527 RECEIVE_PACKET_FIELD_ERROR(leader_count);
59528 }
59529 }
59530
59531 if (BV_ISSET(fields, 9)) {
59532 log_packet_detailed(" got field 'leader_name'");
59533
59534#ifdef FREECIV_JSON_CONNECTION
59535 field_addr.name = "leader_name";
59536#endif /* FREECIV_JSON_CONNECTION */
59537
59538 {
59539 int i;
59540
59541 if (real_packet->leader_count > MAX_NUM_LEADERS) {
59542 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
59543 }
59544
59545#ifdef FREECIV_JSON_CONNECTION
59546 /* Enter array. */
59547 field_addr.sub_location = plocation_elem_new(0);
59548#endif /* FREECIV_JSON_CONNECTION */
59549
59550 for (i = 0; i < real_packet->leader_count; i++) {
59551#ifdef FREECIV_JSON_CONNECTION
59552 /* Next array element */
59553 field_addr.sub_location->number = i;
59554#endif /* FREECIV_JSON_CONNECTION */
59555
59556 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
59558 }
59559 }
59560
59561#ifdef FREECIV_JSON_CONNECTION
59562 /* Exit array. */
59563 FC_FREE(field_addr.sub_location);
59564#endif /* FREECIV_JSON_CONNECTION */
59565 }
59566 }
59567
59568 if (BV_ISSET(fields, 10)) {
59569 log_packet_detailed(" got field 'leader_is_male'");
59570
59571#ifdef FREECIV_JSON_CONNECTION
59572 field_addr.name = "leader_is_male";
59573#endif /* FREECIV_JSON_CONNECTION */
59574
59575 {
59576 int i;
59577
59578 if (real_packet->leader_count > MAX_NUM_LEADERS) {
59579 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
59580 }
59581
59582#ifdef FREECIV_JSON_CONNECTION
59583 /* Enter array. */
59584 field_addr.sub_location = plocation_elem_new(0);
59585#endif /* FREECIV_JSON_CONNECTION */
59586
59587 for (i = 0; i < real_packet->leader_count; i++) {
59588#ifdef FREECIV_JSON_CONNECTION
59589 /* Next array element */
59590 field_addr.sub_location->number = i;
59591#endif /* FREECIV_JSON_CONNECTION */
59592
59593 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
59594 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
59595 }
59596 }
59597
59598#ifdef FREECIV_JSON_CONNECTION
59599 /* Exit array. */
59600 FC_FREE(field_addr.sub_location);
59601#endif /* FREECIV_JSON_CONNECTION */
59602 }
59603 }
59604
59605 real_packet->is_playable = BV_ISSET(fields, 11);
59606
59607 if (BV_ISSET(fields, 12)) {
59608 log_packet_detailed(" got field 'barbarian_type'");
59609
59610#ifdef FREECIV_JSON_CONNECTION
59611 field_addr.name = "barbarian_type";
59612#endif /* FREECIV_JSON_CONNECTION */
59613
59614 {
59615 int readin;
59616
59617 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59618 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
59619 }
59620 real_packet->barbarian_type = readin;
59621 }
59622 }
59623
59624 if (BV_ISSET(fields, 13)) {
59625 log_packet_detailed(" got field 'nsets'");
59626
59627#ifdef FREECIV_JSON_CONNECTION
59628 field_addr.name = "nsets";
59629#endif /* FREECIV_JSON_CONNECTION */
59630
59631 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
59633 }
59634 }
59635
59636 if (BV_ISSET(fields, 14)) {
59637 log_packet_detailed(" got field 'sets'");
59638
59639#ifdef FREECIV_JSON_CONNECTION
59640 field_addr.name = "sets";
59641#endif /* FREECIV_JSON_CONNECTION */
59642
59643 {
59644 int i;
59645
59646 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
59647 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
59648 }
59649
59650#ifdef FREECIV_JSON_CONNECTION
59651 /* Enter array. */
59652 field_addr.sub_location = plocation_elem_new(0);
59653#endif /* FREECIV_JSON_CONNECTION */
59654
59655 for (i = 0; i < real_packet->nsets; i++) {
59656#ifdef FREECIV_JSON_CONNECTION
59657 /* Next array element */
59658 field_addr.sub_location->number = i;
59659#endif /* FREECIV_JSON_CONNECTION */
59660
59661 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
59663 }
59664 }
59665
59666#ifdef FREECIV_JSON_CONNECTION
59667 /* Exit array. */
59668 FC_FREE(field_addr.sub_location);
59669#endif /* FREECIV_JSON_CONNECTION */
59670 }
59671 }
59672
59673 if (BV_ISSET(fields, 15)) {
59674 log_packet_detailed(" got field 'ngroups'");
59675
59676#ifdef FREECIV_JSON_CONNECTION
59677 field_addr.name = "ngroups";
59678#endif /* FREECIV_JSON_CONNECTION */
59679
59680 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
59682 }
59683 }
59684
59685 if (BV_ISSET(fields, 16)) {
59686 log_packet_detailed(" got field 'groups'");
59687
59688#ifdef FREECIV_JSON_CONNECTION
59689 field_addr.name = "groups";
59690#endif /* FREECIV_JSON_CONNECTION */
59691
59692 {
59693 int i;
59694
59695 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59696 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59697 }
59698
59699#ifdef FREECIV_JSON_CONNECTION
59700 /* Enter array. */
59701 field_addr.sub_location = plocation_elem_new(0);
59702#endif /* FREECIV_JSON_CONNECTION */
59703
59704 for (i = 0; i < real_packet->ngroups; i++) {
59705#ifdef FREECIV_JSON_CONNECTION
59706 /* Next array element */
59707 field_addr.sub_location->number = i;
59708#endif /* FREECIV_JSON_CONNECTION */
59709
59710 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
59712 }
59713 }
59714
59715#ifdef FREECIV_JSON_CONNECTION
59716 /* Exit array. */
59717 FC_FREE(field_addr.sub_location);
59718#endif /* FREECIV_JSON_CONNECTION */
59719 }
59720 }
59721
59722 if (BV_ISSET(fields, 17)) {
59723 log_packet_detailed(" got field 'init_government_id'");
59724
59725#ifdef FREECIV_JSON_CONNECTION
59726 field_addr.name = "init_government_id";
59727#endif /* FREECIV_JSON_CONNECTION */
59728
59729 {
59730 int readin;
59731
59732 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
59733 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
59734 }
59735 real_packet->init_government_id = readin;
59736 }
59737 }
59738
59739 if (BV_ISSET(fields, 18)) {
59740 log_packet_detailed(" got field 'init_techs_count'");
59741
59742#ifdef FREECIV_JSON_CONNECTION
59743 field_addr.name = "init_techs_count";
59744#endif /* FREECIV_JSON_CONNECTION */
59745
59746 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
59747 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
59748 }
59749 }
59750
59751 if (BV_ISSET(fields, 19)) {
59752 log_packet_detailed(" got field 'init_techs'");
59753
59754#ifdef FREECIV_JSON_CONNECTION
59755 field_addr.name = "init_techs";
59756#endif /* FREECIV_JSON_CONNECTION */
59757
59758 {
59759 int i;
59760
59761 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
59762 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
59763 }
59764
59765#ifdef FREECIV_JSON_CONNECTION
59766 /* Enter array. */
59767 field_addr.sub_location = plocation_elem_new(0);
59768#endif /* FREECIV_JSON_CONNECTION */
59769
59770 for (i = 0; i < real_packet->init_techs_count; i++) {
59771#ifdef FREECIV_JSON_CONNECTION
59772 /* Next array element */
59773 field_addr.sub_location->number = i;
59774#endif /* FREECIV_JSON_CONNECTION */
59775
59776 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
59777 RECEIVE_PACKET_FIELD_ERROR(init_techs);
59778 }
59779 }
59780
59781#ifdef FREECIV_JSON_CONNECTION
59782 /* Exit array. */
59783 FC_FREE(field_addr.sub_location);
59784#endif /* FREECIV_JSON_CONNECTION */
59785 }
59786 }
59787
59788 if (BV_ISSET(fields, 20)) {
59789 log_packet_detailed(" got field 'init_units_count'");
59790
59791#ifdef FREECIV_JSON_CONNECTION
59792 field_addr.name = "init_units_count";
59793#endif /* FREECIV_JSON_CONNECTION */
59794
59795 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
59796 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
59797 }
59798 }
59799
59800 if (BV_ISSET(fields, 21)) {
59801 log_packet_detailed(" got field 'init_units'");
59802
59803#ifdef FREECIV_JSON_CONNECTION
59804 field_addr.name = "init_units";
59805#endif /* FREECIV_JSON_CONNECTION */
59806
59807 {
59808 int i;
59809
59810 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
59811 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
59812 }
59813
59814#ifdef FREECIV_JSON_CONNECTION
59815 /* Enter array. */
59816 field_addr.sub_location = plocation_elem_new(0);
59817#endif /* FREECIV_JSON_CONNECTION */
59818
59819 for (i = 0; i < real_packet->init_units_count; i++) {
59820#ifdef FREECIV_JSON_CONNECTION
59821 /* Next array element */
59822 field_addr.sub_location->number = i;
59823#endif /* FREECIV_JSON_CONNECTION */
59824
59825 {
59826 int readin;
59827
59828 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
59829 RECEIVE_PACKET_FIELD_ERROR(init_units);
59830 }
59831 real_packet->init_units[i] = readin;
59832 }
59833 }
59834
59835#ifdef FREECIV_JSON_CONNECTION
59836 /* Exit array. */
59837 FC_FREE(field_addr.sub_location);
59838#endif /* FREECIV_JSON_CONNECTION */
59839 }
59840 }
59841
59842 if (BV_ISSET(fields, 22)) {
59843 log_packet_detailed(" got field 'init_buildings_count'");
59844
59845#ifdef FREECIV_JSON_CONNECTION
59846 field_addr.name = "init_buildings_count";
59847#endif /* FREECIV_JSON_CONNECTION */
59848
59849 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
59850 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
59851 }
59852 }
59853
59854 if (BV_ISSET(fields, 23)) {
59855 log_packet_detailed(" got field 'init_buildings'");
59856
59857#ifdef FREECIV_JSON_CONNECTION
59858 field_addr.name = "init_buildings";
59859#endif /* FREECIV_JSON_CONNECTION */
59860
59861 {
59862 int i;
59863
59864 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
59865 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
59866 }
59867
59868#ifdef FREECIV_JSON_CONNECTION
59869 /* Enter array. */
59870 field_addr.sub_location = plocation_elem_new(0);
59871#endif /* FREECIV_JSON_CONNECTION */
59872
59873 for (i = 0; i < real_packet->init_buildings_count; i++) {
59874#ifdef FREECIV_JSON_CONNECTION
59875 /* Next array element */
59876 field_addr.sub_location->number = i;
59877#endif /* FREECIV_JSON_CONNECTION */
59878
59879 {
59880 int readin;
59881
59882 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59883 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
59884 }
59885 real_packet->init_buildings[i] = readin;
59886 }
59887 }
59888
59889#ifdef FREECIV_JSON_CONNECTION
59890 /* Exit array. */
59891 FC_FREE(field_addr.sub_location);
59892#endif /* FREECIV_JSON_CONNECTION */
59893 }
59894 }
59895
59896 if (nullptr == old) {
59897 old = fc_malloc(sizeof(*old));
59899 *old = *real_packet;
59901 } else {
59902 *old = *real_packet;
59903 }
59904
59905#else /* FREECIV_DELTA_PROTOCOL */
59906#ifdef FREECIV_JSON_CONNECTION
59907 field_addr.name = "translation_domain";
59908#endif /* FREECIV_JSON_CONNECTION */
59909
59910 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
59911 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
59912 }
59913
59914#ifdef FREECIV_JSON_CONNECTION
59915 field_addr.name = "adjective";
59916#endif /* FREECIV_JSON_CONNECTION */
59917
59918 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
59919 RECEIVE_PACKET_FIELD_ERROR(adjective);
59920 }
59921
59922#ifdef FREECIV_JSON_CONNECTION
59923 field_addr.name = "rule_name";
59924#endif /* FREECIV_JSON_CONNECTION */
59925
59926 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59927 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59928 }
59929
59930#ifdef FREECIV_JSON_CONNECTION
59931 field_addr.name = "noun_plural";
59932#endif /* FREECIV_JSON_CONNECTION */
59933
59934 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
59935 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
59936 }
59937
59938#ifdef FREECIV_JSON_CONNECTION
59939 field_addr.name = "graphic_str";
59940#endif /* FREECIV_JSON_CONNECTION */
59941
59942 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59943 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59944 }
59945
59946#ifdef FREECIV_JSON_CONNECTION
59947 field_addr.name = "graphic_alt";
59948#endif /* FREECIV_JSON_CONNECTION */
59949
59950 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59951 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59952 }
59953
59954#ifdef FREECIV_JSON_CONNECTION
59955 field_addr.name = "legend";
59956#endif /* FREECIV_JSON_CONNECTION */
59957
59958 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
59960 }
59961
59962#ifdef FREECIV_JSON_CONNECTION
59963 field_addr.name = "style";
59964#endif /* FREECIV_JSON_CONNECTION */
59965
59966 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
59968 }
59969
59970#ifdef FREECIV_JSON_CONNECTION
59971 field_addr.name = "leader_count";
59972#endif /* FREECIV_JSON_CONNECTION */
59973
59974 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
59975 RECEIVE_PACKET_FIELD_ERROR(leader_count);
59976 }
59977
59978#ifdef FREECIV_JSON_CONNECTION
59979 field_addr.name = "leader_name";
59980#endif /* FREECIV_JSON_CONNECTION */
59981
59982 {
59983 int i;
59984
59985 if (real_packet->leader_count > MAX_NUM_LEADERS) {
59986 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
59987 }
59988
59989#ifdef FREECIV_JSON_CONNECTION
59990 /* Enter array. */
59991 field_addr.sub_location = plocation_elem_new(0);
59992#endif /* FREECIV_JSON_CONNECTION */
59993
59994 for (i = 0; i < real_packet->leader_count; i++) {
59995#ifdef FREECIV_JSON_CONNECTION
59996 /* Next array element */
59997 field_addr.sub_location->number = i;
59998#endif /* FREECIV_JSON_CONNECTION */
59999
60000 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
60002 }
60003 }
60004
60005#ifdef FREECIV_JSON_CONNECTION
60006 /* Exit array. */
60007 FC_FREE(field_addr.sub_location);
60008#endif /* FREECIV_JSON_CONNECTION */
60009 }
60010
60011#ifdef FREECIV_JSON_CONNECTION
60012 field_addr.name = "leader_is_male";
60013#endif /* FREECIV_JSON_CONNECTION */
60014
60015 {
60016 int i;
60017
60018 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60019 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
60020 }
60021
60022#ifdef FREECIV_JSON_CONNECTION
60023 /* Enter array. */
60024 field_addr.sub_location = plocation_elem_new(0);
60025#endif /* FREECIV_JSON_CONNECTION */
60026
60027 for (i = 0; i < real_packet->leader_count; i++) {
60028#ifdef FREECIV_JSON_CONNECTION
60029 /* Next array element */
60030 field_addr.sub_location->number = i;
60031#endif /* FREECIV_JSON_CONNECTION */
60032
60033 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
60034 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
60035 }
60036 }
60037
60038#ifdef FREECIV_JSON_CONNECTION
60039 /* Exit array. */
60040 FC_FREE(field_addr.sub_location);
60041#endif /* FREECIV_JSON_CONNECTION */
60042 }
60043
60044#ifdef FREECIV_JSON_CONNECTION
60045 field_addr.name = "is_playable";
60046#endif /* FREECIV_JSON_CONNECTION */
60047
60048 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_playable)) {
60049 RECEIVE_PACKET_FIELD_ERROR(is_playable);
60050 }
60051
60052#ifdef FREECIV_JSON_CONNECTION
60053 field_addr.name = "barbarian_type";
60054#endif /* FREECIV_JSON_CONNECTION */
60055
60056 {
60057 int readin;
60058
60059 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60060 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
60061 }
60062 real_packet->barbarian_type = readin;
60063 }
60064
60065#ifdef FREECIV_JSON_CONNECTION
60066 field_addr.name = "nsets";
60067#endif /* FREECIV_JSON_CONNECTION */
60068
60069 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
60071 }
60072
60073#ifdef FREECIV_JSON_CONNECTION
60074 field_addr.name = "sets";
60075#endif /* FREECIV_JSON_CONNECTION */
60076
60077 {
60078 int i;
60079
60080 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
60081 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
60082 }
60083
60084#ifdef FREECIV_JSON_CONNECTION
60085 /* Enter array. */
60086 field_addr.sub_location = plocation_elem_new(0);
60087#endif /* FREECIV_JSON_CONNECTION */
60088
60089 for (i = 0; i < real_packet->nsets; i++) {
60090#ifdef FREECIV_JSON_CONNECTION
60091 /* Next array element */
60092 field_addr.sub_location->number = i;
60093#endif /* FREECIV_JSON_CONNECTION */
60094
60095 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
60097 }
60098 }
60099
60100#ifdef FREECIV_JSON_CONNECTION
60101 /* Exit array. */
60102 FC_FREE(field_addr.sub_location);
60103#endif /* FREECIV_JSON_CONNECTION */
60104 }
60105
60106#ifdef FREECIV_JSON_CONNECTION
60107 field_addr.name = "ngroups";
60108#endif /* FREECIV_JSON_CONNECTION */
60109
60110 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
60112 }
60113
60114#ifdef FREECIV_JSON_CONNECTION
60115 field_addr.name = "groups";
60116#endif /* FREECIV_JSON_CONNECTION */
60117
60118 {
60119 int i;
60120
60121 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
60122 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
60123 }
60124
60125#ifdef FREECIV_JSON_CONNECTION
60126 /* Enter array. */
60127 field_addr.sub_location = plocation_elem_new(0);
60128#endif /* FREECIV_JSON_CONNECTION */
60129
60130 for (i = 0; i < real_packet->ngroups; i++) {
60131#ifdef FREECIV_JSON_CONNECTION
60132 /* Next array element */
60133 field_addr.sub_location->number = i;
60134#endif /* FREECIV_JSON_CONNECTION */
60135
60136 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
60138 }
60139 }
60140
60141#ifdef FREECIV_JSON_CONNECTION
60142 /* Exit array. */
60143 FC_FREE(field_addr.sub_location);
60144#endif /* FREECIV_JSON_CONNECTION */
60145 }
60146
60147#ifdef FREECIV_JSON_CONNECTION
60148 field_addr.name = "init_government_id";
60149#endif /* FREECIV_JSON_CONNECTION */
60150
60151 {
60152 int readin;
60153
60154 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
60155 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
60156 }
60157 real_packet->init_government_id = readin;
60158 }
60159
60160#ifdef FREECIV_JSON_CONNECTION
60161 field_addr.name = "init_techs_count";
60162#endif /* FREECIV_JSON_CONNECTION */
60163
60164 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
60165 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
60166 }
60167
60168#ifdef FREECIV_JSON_CONNECTION
60169 field_addr.name = "init_techs";
60170#endif /* FREECIV_JSON_CONNECTION */
60171
60172 {
60173 int i;
60174
60175 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
60176 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
60177 }
60178
60179#ifdef FREECIV_JSON_CONNECTION
60180 /* Enter array. */
60181 field_addr.sub_location = plocation_elem_new(0);
60182#endif /* FREECIV_JSON_CONNECTION */
60183
60184 for (i = 0; i < real_packet->init_techs_count; i++) {
60185#ifdef FREECIV_JSON_CONNECTION
60186 /* Next array element */
60187 field_addr.sub_location->number = i;
60188#endif /* FREECIV_JSON_CONNECTION */
60189
60190 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
60191 RECEIVE_PACKET_FIELD_ERROR(init_techs);
60192 }
60193 }
60194
60195#ifdef FREECIV_JSON_CONNECTION
60196 /* Exit array. */
60197 FC_FREE(field_addr.sub_location);
60198#endif /* FREECIV_JSON_CONNECTION */
60199 }
60200
60201#ifdef FREECIV_JSON_CONNECTION
60202 field_addr.name = "init_units_count";
60203#endif /* FREECIV_JSON_CONNECTION */
60204
60205 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
60206 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
60207 }
60208
60209#ifdef FREECIV_JSON_CONNECTION
60210 field_addr.name = "init_units";
60211#endif /* FREECIV_JSON_CONNECTION */
60212
60213 {
60214 int i;
60215
60216 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
60217 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
60218 }
60219
60220#ifdef FREECIV_JSON_CONNECTION
60221 /* Enter array. */
60222 field_addr.sub_location = plocation_elem_new(0);
60223#endif /* FREECIV_JSON_CONNECTION */
60224
60225 for (i = 0; i < real_packet->init_units_count; i++) {
60226#ifdef FREECIV_JSON_CONNECTION
60227 /* Next array element */
60228 field_addr.sub_location->number = i;
60229#endif /* FREECIV_JSON_CONNECTION */
60230
60231 {
60232 int readin;
60233
60234 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
60235 RECEIVE_PACKET_FIELD_ERROR(init_units);
60236 }
60237 real_packet->init_units[i] = readin;
60238 }
60239 }
60240
60241#ifdef FREECIV_JSON_CONNECTION
60242 /* Exit array. */
60243 FC_FREE(field_addr.sub_location);
60244#endif /* FREECIV_JSON_CONNECTION */
60245 }
60246
60247#ifdef FREECIV_JSON_CONNECTION
60248 field_addr.name = "init_buildings_count";
60249#endif /* FREECIV_JSON_CONNECTION */
60250
60251 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
60252 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
60253 }
60254
60255#ifdef FREECIV_JSON_CONNECTION
60256 field_addr.name = "init_buildings";
60257#endif /* FREECIV_JSON_CONNECTION */
60258
60259 {
60260 int i;
60261
60262 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
60263 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
60264 }
60265
60266#ifdef FREECIV_JSON_CONNECTION
60267 /* Enter array. */
60268 field_addr.sub_location = plocation_elem_new(0);
60269#endif /* FREECIV_JSON_CONNECTION */
60270
60271 for (i = 0; i < real_packet->init_buildings_count; i++) {
60272#ifdef FREECIV_JSON_CONNECTION
60273 /* Next array element */
60274 field_addr.sub_location->number = i;
60275#endif /* FREECIV_JSON_CONNECTION */
60276
60277 {
60278 int readin;
60279
60280 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60281 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
60282 }
60283 real_packet->init_buildings[i] = readin;
60284 }
60285 }
60286
60287#ifdef FREECIV_JSON_CONNECTION
60288 /* Exit array. */
60289 FC_FREE(field_addr.sub_location);
60290#endif /* FREECIV_JSON_CONNECTION */
60291 }
60292#endif /* FREECIV_DELTA_PROTOCOL */
60293
60295#undef FREE_PACKET_STRUCT
60296}
60297
60299{
60300 const struct packet_ruleset_nation *real_packet = packet;
60301 int e;
60303
60304 log_packet_detailed("packet_ruleset_nation_100: sending info about (%d)",
60305 real_packet->id);
60306
60307#ifdef FREECIV_DELTA_PROTOCOL
60309 struct packet_ruleset_nation *old;
60310 bool differ;
60311 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION;
60312
60313 if (nullptr == *hash) {
60315 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
60316 }
60317 BV_CLR_ALL(fields);
60318
60319 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
60320 old = fc_malloc(sizeof(*old));
60321 /* temporary bitcopy just to insert correctly */
60322 *old = *real_packet;
60325 }
60326
60327 differ = (strcmp(old->translation_domain, real_packet->translation_domain) != 0);
60328 if (differ) {
60329 BV_SET(fields, 0);
60330 }
60331
60332 differ = (strcmp(old->adjective, real_packet->adjective) != 0);
60333 if (differ) {
60334 BV_SET(fields, 1);
60335 }
60336
60337 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
60338 if (differ) {
60339 BV_SET(fields, 2);
60340 }
60341
60342 differ = (strcmp(old->noun_plural, real_packet->noun_plural) != 0);
60343 if (differ) {
60344 BV_SET(fields, 3);
60345 }
60346
60347 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
60348 if (differ) {
60349 BV_SET(fields, 4);
60350 }
60351
60352 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
60353 if (differ) {
60354 BV_SET(fields, 5);
60355 }
60356
60357 differ = (strcmp(old->legend, real_packet->legend) != 0);
60358 if (differ) {
60359 BV_SET(fields, 6);
60360 }
60361
60362 differ = (old->style != real_packet->style);
60363 if (differ) {
60364 BV_SET(fields, 7);
60365 }
60366
60367 differ = (old->leader_count != real_packet->leader_count);
60368 if (differ) {
60369 BV_SET(fields, 8);
60370 }
60371
60372 differ = (old->leader_count != real_packet->leader_count);
60373 if (!differ) {
60374 int i;
60375
60376 for (i = 0; i < old->leader_count; i++) {
60377 differ = (strcmp(old->leader_name[i], real_packet->leader_name[i]) != 0);
60378 if (differ) {
60379 break;
60380 }
60381 }
60382 }
60383 if (differ) {
60384 BV_SET(fields, 9);
60385 }
60386
60387 differ = (old->leader_count != real_packet->leader_count);
60388 if (!differ) {
60389 int i;
60390
60391 for (i = 0; i < old->leader_count; i++) {
60392 differ = (old->leader_is_male[i] != real_packet->leader_is_male[i]);
60393 if (differ) {
60394 break;
60395 }
60396 }
60397 }
60398 if (differ) {
60399 BV_SET(fields, 10);
60400 }
60401
60402 /* folded into head */
60403 if (real_packet->is_playable) {
60404 BV_SET(fields, 11);
60405 }
60406
60407 differ = (old->barbarian_type != real_packet->barbarian_type);
60408 if (differ) {
60409 BV_SET(fields, 12);
60410 }
60411
60412 differ = (old->nsets != real_packet->nsets);
60413 if (differ) {
60414 BV_SET(fields, 13);
60415 }
60416
60417 differ = (old->nsets != real_packet->nsets);
60418 if (!differ) {
60419 int i;
60420
60421 for (i = 0; i < old->nsets; i++) {
60422 differ = (old->sets[i] != real_packet->sets[i]);
60423 if (differ) {
60424 break;
60425 }
60426 }
60427 }
60428 if (differ) {
60429 BV_SET(fields, 14);
60430 }
60431
60432 differ = (old->ngroups != real_packet->ngroups);
60433 if (differ) {
60434 BV_SET(fields, 15);
60435 }
60436
60437 differ = (old->ngroups != real_packet->ngroups);
60438 if (!differ) {
60439 int i;
60440
60441 for (i = 0; i < old->ngroups; i++) {
60442 differ = (old->groups[i] != real_packet->groups[i]);
60443 if (differ) {
60444 break;
60445 }
60446 }
60447 }
60448 if (differ) {
60449 BV_SET(fields, 16);
60450 }
60451
60452 differ = (old->init_government_id != real_packet->init_government_id);
60453 if (differ) {
60454 BV_SET(fields, 17);
60455 }
60456
60457 differ = (old->init_techs_count != real_packet->init_techs_count);
60458 if (differ) {
60459 BV_SET(fields, 18);
60460 }
60461
60462 differ = (old->init_techs_count != real_packet->init_techs_count);
60463 if (!differ) {
60464 int i;
60465
60466 for (i = 0; i < old->init_techs_count; i++) {
60467 differ = (old->init_techs[i] != real_packet->init_techs[i]);
60468 if (differ) {
60469 break;
60470 }
60471 }
60472 }
60473 if (differ) {
60474 BV_SET(fields, 19);
60475 }
60476
60477 differ = (old->init_units_count != real_packet->init_units_count);
60478 if (differ) {
60479 BV_SET(fields, 20);
60480 }
60481
60482 differ = (old->init_units_count != real_packet->init_units_count);
60483 if (!differ) {
60484 int i;
60485
60486 for (i = 0; i < old->init_units_count; i++) {
60487 differ = (old->init_units[i] != real_packet->init_units[i]);
60488 if (differ) {
60489 break;
60490 }
60491 }
60492 }
60493 if (differ) {
60494 BV_SET(fields, 21);
60495 }
60496
60497 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60498 if (differ) {
60499 BV_SET(fields, 22);
60500 }
60501
60502 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60503 if (!differ) {
60504 int i;
60505
60506 for (i = 0; i < old->init_buildings_count; i++) {
60507 differ = (old->init_buildings[i] != real_packet->init_buildings[i]);
60508 if (differ) {
60509 break;
60510 }
60511 }
60512 }
60513 if (differ) {
60514 BV_SET(fields, 23);
60515 }
60516#endif /* FREECIV_DELTA_PROTOCOL */
60517
60518#ifdef FREECIV_JSON_CONNECTION
60519 struct plocation field_addr;
60520 {
60521 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
60524 }
60525#endif /* FREECIV_JSON_CONNECTION */
60526
60527#ifdef FREECIV_JSON_CONNECTION
60528 field_addr.name = "id";
60529#endif /* FREECIV_JSON_CONNECTION */
60530 e = 0;
60531
60532 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
60533
60534 if (e) {
60535 log_packet_detailed("'id' field error detected");
60536 }
60537
60538#ifdef FREECIV_DELTA_PROTOCOL
60539#ifdef FREECIV_JSON_CONNECTION
60540 field_addr.name = "fields";
60541#endif /* FREECIV_JSON_CONNECTION */
60542 e = 0;
60543 e |= DIO_BV_PUT(&dout, &field_addr, fields);
60544 if (e) {
60545 log_packet_detailed("fields bitvector error detected");
60546 }
60547
60548 if (BV_ISSET(fields, 0)) {
60549 log_packet_detailed(" field 'translation_domain' has changed");
60550
60551#ifdef FREECIV_JSON_CONNECTION
60552 field_addr.name = "translation_domain";
60553#endif /* FREECIV_JSON_CONNECTION */
60554 e = 0;
60555
60556 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
60557
60558 if (e) {
60559 log_packet_detailed("'translation_domain' field error detected");
60560 }
60561 }
60562
60563 if (BV_ISSET(fields, 1)) {
60564 log_packet_detailed(" field 'adjective' has changed");
60565
60566#ifdef FREECIV_JSON_CONNECTION
60567 field_addr.name = "adjective";
60568#endif /* FREECIV_JSON_CONNECTION */
60569 e = 0;
60570
60571 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
60572
60573 if (e) {
60574 log_packet_detailed("'adjective' field error detected");
60575 }
60576 }
60577
60578 if (BV_ISSET(fields, 2)) {
60579 log_packet_detailed(" field 'rule_name' has changed");
60580
60581#ifdef FREECIV_JSON_CONNECTION
60582 field_addr.name = "rule_name";
60583#endif /* FREECIV_JSON_CONNECTION */
60584 e = 0;
60585
60586 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
60587
60588 if (e) {
60589 log_packet_detailed("'rule_name' field error detected");
60590 }
60591 }
60592
60593 if (BV_ISSET(fields, 3)) {
60594 log_packet_detailed(" field 'noun_plural' has changed");
60595
60596#ifdef FREECIV_JSON_CONNECTION
60597 field_addr.name = "noun_plural";
60598#endif /* FREECIV_JSON_CONNECTION */
60599 e = 0;
60600
60601 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
60602
60603 if (e) {
60604 log_packet_detailed("'noun_plural' field error detected");
60605 }
60606 }
60607
60608 if (BV_ISSET(fields, 4)) {
60609 log_packet_detailed(" field 'graphic_str' has changed");
60610
60611#ifdef FREECIV_JSON_CONNECTION
60612 field_addr.name = "graphic_str";
60613#endif /* FREECIV_JSON_CONNECTION */
60614 e = 0;
60615
60616 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
60617
60618 if (e) {
60619 log_packet_detailed("'graphic_str' field error detected");
60620 }
60621 }
60622
60623 if (BV_ISSET(fields, 5)) {
60624 log_packet_detailed(" field 'graphic_alt' has changed");
60625
60626#ifdef FREECIV_JSON_CONNECTION
60627 field_addr.name = "graphic_alt";
60628#endif /* FREECIV_JSON_CONNECTION */
60629 e = 0;
60630
60631 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
60632
60633 if (e) {
60634 log_packet_detailed("'graphic_alt' field error detected");
60635 }
60636 }
60637
60638 if (BV_ISSET(fields, 6)) {
60639 log_packet_detailed(" field 'legend' has changed");
60640
60641#ifdef FREECIV_JSON_CONNECTION
60642 field_addr.name = "legend";
60643#endif /* FREECIV_JSON_CONNECTION */
60644 e = 0;
60645
60646 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
60647
60648 if (e) {
60649 log_packet_detailed("'legend' field error detected");
60650 }
60651 }
60652
60653 if (BV_ISSET(fields, 7)) {
60654 log_packet_detailed(" field 'style' has changed");
60655
60656#ifdef FREECIV_JSON_CONNECTION
60657 field_addr.name = "style";
60658#endif /* FREECIV_JSON_CONNECTION */
60659 e = 0;
60660
60661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
60662
60663 if (e) {
60664 log_packet_detailed("'style' field error detected");
60665 }
60666 }
60667
60668 if (BV_ISSET(fields, 8)) {
60669 log_packet_detailed(" field 'leader_count' has changed");
60670
60671#ifdef FREECIV_JSON_CONNECTION
60672 field_addr.name = "leader_count";
60673#endif /* FREECIV_JSON_CONNECTION */
60674 e = 0;
60675
60676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
60677
60678 if (e) {
60679 log_packet_detailed("'leader_count' field error detected");
60680 }
60681 }
60682
60683 if (BV_ISSET(fields, 9)) {
60684 log_packet_detailed(" field 'leader_name' has changed");
60685
60686#ifdef FREECIV_JSON_CONNECTION
60687 field_addr.name = "leader_name";
60688#endif /* FREECIV_JSON_CONNECTION */
60689 e = 0;
60690
60691 {
60692 int i;
60693
60694#ifdef FREECIV_JSON_CONNECTION
60695 /* Create the array. */
60696 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
60697
60698 /* Enter array. */
60699 field_addr.sub_location = plocation_elem_new(0);
60700#endif /* FREECIV_JSON_CONNECTION */
60701
60702 for (i = 0; i < real_packet->leader_count; i++) {
60703#ifdef FREECIV_JSON_CONNECTION
60704 /* Next array element. */
60705 field_addr.sub_location->number = i;
60706#endif /* FREECIV_JSON_CONNECTION */
60707
60708 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
60709 }
60710
60711#ifdef FREECIV_JSON_CONNECTION
60712 /* Exit array. */
60713 FC_FREE(field_addr.sub_location);
60714#endif /* FREECIV_JSON_CONNECTION */
60715 }
60716
60717 if (e) {
60718 log_packet_detailed("'leader_name' field error detected");
60719 }
60720 }
60721
60722 if (BV_ISSET(fields, 10)) {
60723 log_packet_detailed(" field 'leader_is_male' has changed");
60724
60725#ifdef FREECIV_JSON_CONNECTION
60726 field_addr.name = "leader_is_male";
60727#endif /* FREECIV_JSON_CONNECTION */
60728 e = 0;
60729
60730 {
60731 int i;
60732
60733#ifdef FREECIV_JSON_CONNECTION
60734 /* Create the array. */
60735 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
60736
60737 /* Enter array. */
60738 field_addr.sub_location = plocation_elem_new(0);
60739#endif /* FREECIV_JSON_CONNECTION */
60740
60741 for (i = 0; i < real_packet->leader_count; i++) {
60742#ifdef FREECIV_JSON_CONNECTION
60743 /* Next array element. */
60744 field_addr.sub_location->number = i;
60745#endif /* FREECIV_JSON_CONNECTION */
60746
60747 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
60748 }
60749
60750#ifdef FREECIV_JSON_CONNECTION
60751 /* Exit array. */
60752 FC_FREE(field_addr.sub_location);
60753#endif /* FREECIV_JSON_CONNECTION */
60754 }
60755
60756 if (e) {
60757 log_packet_detailed("'leader_is_male' field error detected");
60758 }
60759 }
60760
60761 /* field 11 is folded into the header */
60762
60763 if (BV_ISSET(fields, 12)) {
60764 log_packet_detailed(" field 'barbarian_type' has changed");
60765
60766#ifdef FREECIV_JSON_CONNECTION
60767 field_addr.name = "barbarian_type";
60768#endif /* FREECIV_JSON_CONNECTION */
60769 e = 0;
60770
60771 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
60772
60773 if (e) {
60774 log_packet_detailed("'barbarian_type' field error detected");
60775 }
60776 }
60777
60778 if (BV_ISSET(fields, 13)) {
60779 log_packet_detailed(" field 'nsets' has changed");
60780
60781#ifdef FREECIV_JSON_CONNECTION
60782 field_addr.name = "nsets";
60783#endif /* FREECIV_JSON_CONNECTION */
60784 e = 0;
60785
60786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
60787
60788 if (e) {
60789 log_packet_detailed("'nsets' field error detected");
60790 }
60791 }
60792
60793 if (BV_ISSET(fields, 14)) {
60794 log_packet_detailed(" field 'sets' has changed");
60795
60796#ifdef FREECIV_JSON_CONNECTION
60797 field_addr.name = "sets";
60798#endif /* FREECIV_JSON_CONNECTION */
60799 e = 0;
60800
60801 {
60802 int i;
60803
60804#ifdef FREECIV_JSON_CONNECTION
60805 /* Create the array. */
60806 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
60807
60808 /* Enter array. */
60809 field_addr.sub_location = plocation_elem_new(0);
60810#endif /* FREECIV_JSON_CONNECTION */
60811
60812 for (i = 0; i < real_packet->nsets; i++) {
60813#ifdef FREECIV_JSON_CONNECTION
60814 /* Next array element. */
60815 field_addr.sub_location->number = i;
60816#endif /* FREECIV_JSON_CONNECTION */
60817
60818 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
60819 }
60820
60821#ifdef FREECIV_JSON_CONNECTION
60822 /* Exit array. */
60823 FC_FREE(field_addr.sub_location);
60824#endif /* FREECIV_JSON_CONNECTION */
60825 }
60826
60827 if (e) {
60828 log_packet_detailed("'sets' field error detected");
60829 }
60830 }
60831
60832 if (BV_ISSET(fields, 15)) {
60833 log_packet_detailed(" field 'ngroups' has changed");
60834
60835#ifdef FREECIV_JSON_CONNECTION
60836 field_addr.name = "ngroups";
60837#endif /* FREECIV_JSON_CONNECTION */
60838 e = 0;
60839
60840 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
60841
60842 if (e) {
60843 log_packet_detailed("'ngroups' field error detected");
60844 }
60845 }
60846
60847 if (BV_ISSET(fields, 16)) {
60848 log_packet_detailed(" field 'groups' has changed");
60849
60850#ifdef FREECIV_JSON_CONNECTION
60851 field_addr.name = "groups";
60852#endif /* FREECIV_JSON_CONNECTION */
60853 e = 0;
60854
60855 {
60856 int i;
60857
60858#ifdef FREECIV_JSON_CONNECTION
60859 /* Create the array. */
60860 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
60861
60862 /* Enter array. */
60863 field_addr.sub_location = plocation_elem_new(0);
60864#endif /* FREECIV_JSON_CONNECTION */
60865
60866 for (i = 0; i < real_packet->ngroups; i++) {
60867#ifdef FREECIV_JSON_CONNECTION
60868 /* Next array element. */
60869 field_addr.sub_location->number = i;
60870#endif /* FREECIV_JSON_CONNECTION */
60871
60872 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
60873 }
60874
60875#ifdef FREECIV_JSON_CONNECTION
60876 /* Exit array. */
60877 FC_FREE(field_addr.sub_location);
60878#endif /* FREECIV_JSON_CONNECTION */
60879 }
60880
60881 if (e) {
60882 log_packet_detailed("'groups' field error detected");
60883 }
60884 }
60885
60886 if (BV_ISSET(fields, 17)) {
60887 log_packet_detailed(" field 'init_government_id' has changed");
60888
60889#ifdef FREECIV_JSON_CONNECTION
60890 field_addr.name = "init_government_id";
60891#endif /* FREECIV_JSON_CONNECTION */
60892 e = 0;
60893
60894 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
60895
60896 if (e) {
60897 log_packet_detailed("'init_government_id' field error detected");
60898 }
60899 }
60900
60901 if (BV_ISSET(fields, 18)) {
60902 log_packet_detailed(" field 'init_techs_count' has changed");
60903
60904#ifdef FREECIV_JSON_CONNECTION
60905 field_addr.name = "init_techs_count";
60906#endif /* FREECIV_JSON_CONNECTION */
60907 e = 0;
60908
60909 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
60910
60911 if (e) {
60912 log_packet_detailed("'init_techs_count' field error detected");
60913 }
60914 }
60915
60916 if (BV_ISSET(fields, 19)) {
60917 log_packet_detailed(" field 'init_techs' has changed");
60918
60919#ifdef FREECIV_JSON_CONNECTION
60920 field_addr.name = "init_techs";
60921#endif /* FREECIV_JSON_CONNECTION */
60922 e = 0;
60923
60924 {
60925 int i;
60926
60927#ifdef FREECIV_JSON_CONNECTION
60928 /* Create the array. */
60929 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
60930
60931 /* Enter array. */
60932 field_addr.sub_location = plocation_elem_new(0);
60933#endif /* FREECIV_JSON_CONNECTION */
60934
60935 for (i = 0; i < real_packet->init_techs_count; i++) {
60936#ifdef FREECIV_JSON_CONNECTION
60937 /* Next array element. */
60938 field_addr.sub_location->number = i;
60939#endif /* FREECIV_JSON_CONNECTION */
60940
60941 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
60942 }
60943
60944#ifdef FREECIV_JSON_CONNECTION
60945 /* Exit array. */
60946 FC_FREE(field_addr.sub_location);
60947#endif /* FREECIV_JSON_CONNECTION */
60948 }
60949
60950 if (e) {
60951 log_packet_detailed("'init_techs' field error detected");
60952 }
60953 }
60954
60955 if (BV_ISSET(fields, 20)) {
60956 log_packet_detailed(" field 'init_units_count' has changed");
60957
60958#ifdef FREECIV_JSON_CONNECTION
60959 field_addr.name = "init_units_count";
60960#endif /* FREECIV_JSON_CONNECTION */
60961 e = 0;
60962
60963 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
60964
60965 if (e) {
60966 log_packet_detailed("'init_units_count' field error detected");
60967 }
60968 }
60969
60970 if (BV_ISSET(fields, 21)) {
60971 log_packet_detailed(" field 'init_units' has changed");
60972
60973#ifdef FREECIV_JSON_CONNECTION
60974 field_addr.name = "init_units";
60975#endif /* FREECIV_JSON_CONNECTION */
60976 e = 0;
60977
60978 {
60979 int i;
60980
60981#ifdef FREECIV_JSON_CONNECTION
60982 /* Create the array. */
60983 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
60984
60985 /* Enter array. */
60986 field_addr.sub_location = plocation_elem_new(0);
60987#endif /* FREECIV_JSON_CONNECTION */
60988
60989 for (i = 0; i < real_packet->init_units_count; i++) {
60990#ifdef FREECIV_JSON_CONNECTION
60991 /* Next array element. */
60992 field_addr.sub_location->number = i;
60993#endif /* FREECIV_JSON_CONNECTION */
60994
60995 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
60996 }
60997
60998#ifdef FREECIV_JSON_CONNECTION
60999 /* Exit array. */
61000 FC_FREE(field_addr.sub_location);
61001#endif /* FREECIV_JSON_CONNECTION */
61002 }
61003
61004 if (e) {
61005 log_packet_detailed("'init_units' field error detected");
61006 }
61007 }
61008
61009 if (BV_ISSET(fields, 22)) {
61010 log_packet_detailed(" field 'init_buildings_count' has changed");
61011
61012#ifdef FREECIV_JSON_CONNECTION
61013 field_addr.name = "init_buildings_count";
61014#endif /* FREECIV_JSON_CONNECTION */
61015 e = 0;
61016
61017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61018
61019 if (e) {
61020 log_packet_detailed("'init_buildings_count' field error detected");
61021 }
61022 }
61023
61024 if (BV_ISSET(fields, 23)) {
61025 log_packet_detailed(" field 'init_buildings' has changed");
61026
61027#ifdef FREECIV_JSON_CONNECTION
61028 field_addr.name = "init_buildings";
61029#endif /* FREECIV_JSON_CONNECTION */
61030 e = 0;
61031
61032 {
61033 int i;
61034
61035#ifdef FREECIV_JSON_CONNECTION
61036 /* Create the array. */
61037 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61038
61039 /* Enter array. */
61040 field_addr.sub_location = plocation_elem_new(0);
61041#endif /* FREECIV_JSON_CONNECTION */
61042
61043 for (i = 0; i < real_packet->init_buildings_count; i++) {
61044#ifdef FREECIV_JSON_CONNECTION
61045 /* Next array element. */
61046 field_addr.sub_location->number = i;
61047#endif /* FREECIV_JSON_CONNECTION */
61048
61049 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61050 }
61051
61052#ifdef FREECIV_JSON_CONNECTION
61053 /* Exit array. */
61054 FC_FREE(field_addr.sub_location);
61055#endif /* FREECIV_JSON_CONNECTION */
61056 }
61057
61058 if (e) {
61059 log_packet_detailed("'init_buildings' field error detected");
61060 }
61061 }
61062
61063 *old = *real_packet;
61064
61065#else /* FREECIV_DELTA_PROTOCOL */
61066#ifdef FREECIV_JSON_CONNECTION
61067 field_addr.name = "translation_domain";
61068#endif /* FREECIV_JSON_CONNECTION */
61069 e = 0;
61070
61071 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
61072
61073 if (e) {
61074 log_packet_detailed("'translation_domain' field error detected");
61075 }
61076
61077#ifdef FREECIV_JSON_CONNECTION
61078 field_addr.name = "adjective";
61079#endif /* FREECIV_JSON_CONNECTION */
61080 e = 0;
61081
61082 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
61083
61084 if (e) {
61085 log_packet_detailed("'adjective' field error detected");
61086 }
61087
61088#ifdef FREECIV_JSON_CONNECTION
61089 field_addr.name = "rule_name";
61090#endif /* FREECIV_JSON_CONNECTION */
61091 e = 0;
61092
61093 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61094
61095 if (e) {
61096 log_packet_detailed("'rule_name' field error detected");
61097 }
61098
61099#ifdef FREECIV_JSON_CONNECTION
61100 field_addr.name = "noun_plural";
61101#endif /* FREECIV_JSON_CONNECTION */
61102 e = 0;
61103
61104 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
61105
61106 if (e) {
61107 log_packet_detailed("'noun_plural' field error detected");
61108 }
61109
61110#ifdef FREECIV_JSON_CONNECTION
61111 field_addr.name = "graphic_str";
61112#endif /* FREECIV_JSON_CONNECTION */
61113 e = 0;
61114
61115 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61116
61117 if (e) {
61118 log_packet_detailed("'graphic_str' field error detected");
61119 }
61120
61121#ifdef FREECIV_JSON_CONNECTION
61122 field_addr.name = "graphic_alt";
61123#endif /* FREECIV_JSON_CONNECTION */
61124 e = 0;
61125
61126 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61127
61128 if (e) {
61129 log_packet_detailed("'graphic_alt' field error detected");
61130 }
61131
61132#ifdef FREECIV_JSON_CONNECTION
61133 field_addr.name = "legend";
61134#endif /* FREECIV_JSON_CONNECTION */
61135 e = 0;
61136
61137 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
61138
61139 if (e) {
61140 log_packet_detailed("'legend' field error detected");
61141 }
61142
61143#ifdef FREECIV_JSON_CONNECTION
61144 field_addr.name = "style";
61145#endif /* FREECIV_JSON_CONNECTION */
61146 e = 0;
61147
61148 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
61149
61150 if (e) {
61151 log_packet_detailed("'style' field error detected");
61152 }
61153
61154#ifdef FREECIV_JSON_CONNECTION
61155 field_addr.name = "leader_count";
61156#endif /* FREECIV_JSON_CONNECTION */
61157 e = 0;
61158
61159 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
61160
61161 if (e) {
61162 log_packet_detailed("'leader_count' field error detected");
61163 }
61164
61165#ifdef FREECIV_JSON_CONNECTION
61166 field_addr.name = "leader_name";
61167#endif /* FREECIV_JSON_CONNECTION */
61168 e = 0;
61169
61170 {
61171 int i;
61172
61173#ifdef FREECIV_JSON_CONNECTION
61174 /* Create the array. */
61175 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61176
61177 /* Enter array. */
61178 field_addr.sub_location = plocation_elem_new(0);
61179#endif /* FREECIV_JSON_CONNECTION */
61180
61181 for (i = 0; i < real_packet->leader_count; i++) {
61182#ifdef FREECIV_JSON_CONNECTION
61183 /* Next array element. */
61184 field_addr.sub_location->number = i;
61185#endif /* FREECIV_JSON_CONNECTION */
61186
61187 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
61188 }
61189
61190#ifdef FREECIV_JSON_CONNECTION
61191 /* Exit array. */
61192 FC_FREE(field_addr.sub_location);
61193#endif /* FREECIV_JSON_CONNECTION */
61194 }
61195
61196 if (e) {
61197 log_packet_detailed("'leader_name' field error detected");
61198 }
61199
61200#ifdef FREECIV_JSON_CONNECTION
61201 field_addr.name = "leader_is_male";
61202#endif /* FREECIV_JSON_CONNECTION */
61203 e = 0;
61204
61205 {
61206 int i;
61207
61208#ifdef FREECIV_JSON_CONNECTION
61209 /* Create the array. */
61210 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61211
61212 /* Enter array. */
61213 field_addr.sub_location = plocation_elem_new(0);
61214#endif /* FREECIV_JSON_CONNECTION */
61215
61216 for (i = 0; i < real_packet->leader_count; i++) {
61217#ifdef FREECIV_JSON_CONNECTION
61218 /* Next array element. */
61219 field_addr.sub_location->number = i;
61220#endif /* FREECIV_JSON_CONNECTION */
61221
61222 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
61223 }
61224
61225#ifdef FREECIV_JSON_CONNECTION
61226 /* Exit array. */
61227 FC_FREE(field_addr.sub_location);
61228#endif /* FREECIV_JSON_CONNECTION */
61229 }
61230
61231 if (e) {
61232 log_packet_detailed("'leader_is_male' field error detected");
61233 }
61234
61235#ifdef FREECIV_JSON_CONNECTION
61236 field_addr.name = "is_playable";
61237#endif /* FREECIV_JSON_CONNECTION */
61238 e = 0;
61239
61240 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_playable);
61241
61242 if (e) {
61243 log_packet_detailed("'is_playable' field error detected");
61244 }
61245
61246#ifdef FREECIV_JSON_CONNECTION
61247 field_addr.name = "barbarian_type";
61248#endif /* FREECIV_JSON_CONNECTION */
61249 e = 0;
61250
61251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
61252
61253 if (e) {
61254 log_packet_detailed("'barbarian_type' field error detected");
61255 }
61256
61257#ifdef FREECIV_JSON_CONNECTION
61258 field_addr.name = "nsets";
61259#endif /* FREECIV_JSON_CONNECTION */
61260 e = 0;
61261
61262 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
61263
61264 if (e) {
61265 log_packet_detailed("'nsets' field error detected");
61266 }
61267
61268#ifdef FREECIV_JSON_CONNECTION
61269 field_addr.name = "sets";
61270#endif /* FREECIV_JSON_CONNECTION */
61271 e = 0;
61272
61273 {
61274 int i;
61275
61276#ifdef FREECIV_JSON_CONNECTION
61277 /* Create the array. */
61278 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
61279
61280 /* Enter array. */
61281 field_addr.sub_location = plocation_elem_new(0);
61282#endif /* FREECIV_JSON_CONNECTION */
61283
61284 for (i = 0; i < real_packet->nsets; i++) {
61285#ifdef FREECIV_JSON_CONNECTION
61286 /* Next array element. */
61287 field_addr.sub_location->number = i;
61288#endif /* FREECIV_JSON_CONNECTION */
61289
61290 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
61291 }
61292
61293#ifdef FREECIV_JSON_CONNECTION
61294 /* Exit array. */
61295 FC_FREE(field_addr.sub_location);
61296#endif /* FREECIV_JSON_CONNECTION */
61297 }
61298
61299 if (e) {
61300 log_packet_detailed("'sets' field error detected");
61301 }
61302
61303#ifdef FREECIV_JSON_CONNECTION
61304 field_addr.name = "ngroups";
61305#endif /* FREECIV_JSON_CONNECTION */
61306 e = 0;
61307
61308 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
61309
61310 if (e) {
61311 log_packet_detailed("'ngroups' field error detected");
61312 }
61313
61314#ifdef FREECIV_JSON_CONNECTION
61315 field_addr.name = "groups";
61316#endif /* FREECIV_JSON_CONNECTION */
61317 e = 0;
61318
61319 {
61320 int i;
61321
61322#ifdef FREECIV_JSON_CONNECTION
61323 /* Create the array. */
61324 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
61325
61326 /* Enter array. */
61327 field_addr.sub_location = plocation_elem_new(0);
61328#endif /* FREECIV_JSON_CONNECTION */
61329
61330 for (i = 0; i < real_packet->ngroups; i++) {
61331#ifdef FREECIV_JSON_CONNECTION
61332 /* Next array element. */
61333 field_addr.sub_location->number = i;
61334#endif /* FREECIV_JSON_CONNECTION */
61335
61336 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
61337 }
61338
61339#ifdef FREECIV_JSON_CONNECTION
61340 /* Exit array. */
61341 FC_FREE(field_addr.sub_location);
61342#endif /* FREECIV_JSON_CONNECTION */
61343 }
61344
61345 if (e) {
61346 log_packet_detailed("'groups' field error detected");
61347 }
61348
61349#ifdef FREECIV_JSON_CONNECTION
61350 field_addr.name = "init_government_id";
61351#endif /* FREECIV_JSON_CONNECTION */
61352 e = 0;
61353
61354 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
61355
61356 if (e) {
61357 log_packet_detailed("'init_government_id' field error detected");
61358 }
61359
61360#ifdef FREECIV_JSON_CONNECTION
61361 field_addr.name = "init_techs_count";
61362#endif /* FREECIV_JSON_CONNECTION */
61363 e = 0;
61364
61365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
61366
61367 if (e) {
61368 log_packet_detailed("'init_techs_count' field error detected");
61369 }
61370
61371#ifdef FREECIV_JSON_CONNECTION
61372 field_addr.name = "init_techs";
61373#endif /* FREECIV_JSON_CONNECTION */
61374 e = 0;
61375
61376 {
61377 int i;
61378
61379#ifdef FREECIV_JSON_CONNECTION
61380 /* Create the array. */
61381 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
61382
61383 /* Enter array. */
61384 field_addr.sub_location = plocation_elem_new(0);
61385#endif /* FREECIV_JSON_CONNECTION */
61386
61387 for (i = 0; i < real_packet->init_techs_count; i++) {
61388#ifdef FREECIV_JSON_CONNECTION
61389 /* Next array element. */
61390 field_addr.sub_location->number = i;
61391#endif /* FREECIV_JSON_CONNECTION */
61392
61393 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
61394 }
61395
61396#ifdef FREECIV_JSON_CONNECTION
61397 /* Exit array. */
61398 FC_FREE(field_addr.sub_location);
61399#endif /* FREECIV_JSON_CONNECTION */
61400 }
61401
61402 if (e) {
61403 log_packet_detailed("'init_techs' field error detected");
61404 }
61405
61406#ifdef FREECIV_JSON_CONNECTION
61407 field_addr.name = "init_units_count";
61408#endif /* FREECIV_JSON_CONNECTION */
61409 e = 0;
61410
61411 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
61412
61413 if (e) {
61414 log_packet_detailed("'init_units_count' field error detected");
61415 }
61416
61417#ifdef FREECIV_JSON_CONNECTION
61418 field_addr.name = "init_units";
61419#endif /* FREECIV_JSON_CONNECTION */
61420 e = 0;
61421
61422 {
61423 int i;
61424
61425#ifdef FREECIV_JSON_CONNECTION
61426 /* Create the array. */
61427 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
61428
61429 /* Enter array. */
61430 field_addr.sub_location = plocation_elem_new(0);
61431#endif /* FREECIV_JSON_CONNECTION */
61432
61433 for (i = 0; i < real_packet->init_units_count; i++) {
61434#ifdef FREECIV_JSON_CONNECTION
61435 /* Next array element. */
61436 field_addr.sub_location->number = i;
61437#endif /* FREECIV_JSON_CONNECTION */
61438
61439 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
61440 }
61441
61442#ifdef FREECIV_JSON_CONNECTION
61443 /* Exit array. */
61444 FC_FREE(field_addr.sub_location);
61445#endif /* FREECIV_JSON_CONNECTION */
61446 }
61447
61448 if (e) {
61449 log_packet_detailed("'init_units' field error detected");
61450 }
61451
61452#ifdef FREECIV_JSON_CONNECTION
61453 field_addr.name = "init_buildings_count";
61454#endif /* FREECIV_JSON_CONNECTION */
61455 e = 0;
61456
61457 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61458
61459 if (e) {
61460 log_packet_detailed("'init_buildings_count' field error detected");
61461 }
61462
61463#ifdef FREECIV_JSON_CONNECTION
61464 field_addr.name = "init_buildings";
61465#endif /* FREECIV_JSON_CONNECTION */
61466 e = 0;
61467
61468 {
61469 int i;
61470
61471#ifdef FREECIV_JSON_CONNECTION
61472 /* Create the array. */
61473 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61474
61475 /* Enter array. */
61476 field_addr.sub_location = plocation_elem_new(0);
61477#endif /* FREECIV_JSON_CONNECTION */
61478
61479 for (i = 0; i < real_packet->init_buildings_count; i++) {
61480#ifdef FREECIV_JSON_CONNECTION
61481 /* Next array element. */
61482 field_addr.sub_location->number = i;
61483#endif /* FREECIV_JSON_CONNECTION */
61484
61485 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61486 }
61487
61488#ifdef FREECIV_JSON_CONNECTION
61489 /* Exit array. */
61490 FC_FREE(field_addr.sub_location);
61491#endif /* FREECIV_JSON_CONNECTION */
61492 }
61493
61494 if (e) {
61495 log_packet_detailed("'init_buildings' field error detected");
61496 }
61497#endif /* FREECIV_DELTA_PROTOCOL */
61498
61500}
61501
61503{
61504 if (!pc->used) {
61505 log_error("WARNING: trying to send data to the closed connection %s",
61507 return -1;
61508 }
61509 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION].packet != nullptr, -1,
61510 "Handler for PACKET_RULESET_NATION not installed");
61511 return pc->phs.handlers->send[PACKET_RULESET_NATION].packet(pc, packet);
61512}
61513
61514void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
61515{
61516 conn_list_iterate(dest, pconn) {
61519}
61520
61522{
61523 memset(packet, 0, sizeof(*packet));
61524}
61525
61526#define free_packet_nation_availability(_packet) (void) 0
61527#define destroy_packet_nation_availability free
61528
61529#ifdef FREECIV_DELTA_PROTOCOL
61530#define hash_packet_nation_availability_100 hash_const
61531#define cmp_packet_nation_availability_100 cmp_const
61533#endif /* FREECIV_DELTA_PROTOCOL */
61534
61536{
61537#define FREE_PACKET_STRUCT(_packet) free_packet_nation_availability(_packet)
61539
61540#ifdef FREECIV_JSON_CONNECTION
61541 struct plocation field_addr;
61542 {
61543 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61546 }
61547#endif /* FREECIV_JSON_CONNECTION */
61548
61549 log_packet_detailed("packet_nation_availability_100: got info about ()");
61550
61551#ifdef FREECIV_DELTA_PROTOCOL
61554 struct genhash **hash = pc->phs.received + PACKET_NATION_AVAILABILITY;
61555
61556 if (nullptr == *hash) {
61558 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
61559 }
61560
61561 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
61562 *real_packet = *old;
61563 } else {
61564 /* packet is already initialized empty */
61565 log_packet_detailed(" no old info");
61566 }
61567
61568#ifdef FREECIV_JSON_CONNECTION
61569 field_addr.name = "fields";
61570#endif /* FREECIV_JSON_CONNECTION */
61571 DIO_BV_GET(&din, &field_addr, fields);
61572
61573 if (BV_ISSET(fields, 0)) {
61574 log_packet_detailed(" got field 'ncount'");
61575
61576#ifdef FREECIV_JSON_CONNECTION
61577 field_addr.name = "ncount";
61578#endif /* FREECIV_JSON_CONNECTION */
61579
61580 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
61582 }
61583 }
61584
61585 if (BV_ISSET(fields, 1)) {
61586 log_packet_detailed(" got field 'is_pickable'");
61587
61588#ifdef FREECIV_JSON_CONNECTION
61589 field_addr.name = "is_pickable";
61590#endif /* FREECIV_JSON_CONNECTION */
61591
61592 {
61593 int i;
61594
61595 if (real_packet->ncount > MAX_NUM_NATIONS) {
61596 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
61597 }
61598
61599#ifdef FREECIV_JSON_CONNECTION
61600 /* Enter array. */
61601 field_addr.sub_location = plocation_elem_new(0);
61602#endif /* FREECIV_JSON_CONNECTION */
61603
61604 for (i = 0; i < real_packet->ncount; i++) {
61605#ifdef FREECIV_JSON_CONNECTION
61606 /* Next array element */
61607 field_addr.sub_location->number = i;
61608#endif /* FREECIV_JSON_CONNECTION */
61609
61610 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
61611 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
61612 }
61613 }
61614
61615#ifdef FREECIV_JSON_CONNECTION
61616 /* Exit array. */
61617 FC_FREE(field_addr.sub_location);
61618#endif /* FREECIV_JSON_CONNECTION */
61619 }
61620 }
61621
61622 real_packet->nationset_change = BV_ISSET(fields, 2);
61623
61624 if (nullptr == old) {
61625 old = fc_malloc(sizeof(*old));
61627 *old = *real_packet;
61629 } else {
61630 *old = *real_packet;
61631 }
61632
61633#else /* FREECIV_DELTA_PROTOCOL */
61634#ifdef FREECIV_JSON_CONNECTION
61635 field_addr.name = "ncount";
61636#endif /* FREECIV_JSON_CONNECTION */
61637
61638 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
61640 }
61641
61642#ifdef FREECIV_JSON_CONNECTION
61643 field_addr.name = "is_pickable";
61644#endif /* FREECIV_JSON_CONNECTION */
61645
61646 {
61647 int i;
61648
61649 if (real_packet->ncount > MAX_NUM_NATIONS) {
61650 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
61651 }
61652
61653#ifdef FREECIV_JSON_CONNECTION
61654 /* Enter array. */
61655 field_addr.sub_location = plocation_elem_new(0);
61656#endif /* FREECIV_JSON_CONNECTION */
61657
61658 for (i = 0; i < real_packet->ncount; i++) {
61659#ifdef FREECIV_JSON_CONNECTION
61660 /* Next array element */
61661 field_addr.sub_location->number = i;
61662#endif /* FREECIV_JSON_CONNECTION */
61663
61664 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
61665 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
61666 }
61667 }
61668
61669#ifdef FREECIV_JSON_CONNECTION
61670 /* Exit array. */
61671 FC_FREE(field_addr.sub_location);
61672#endif /* FREECIV_JSON_CONNECTION */
61673 }
61674
61675#ifdef FREECIV_JSON_CONNECTION
61676 field_addr.name = "nationset_change";
61677#endif /* FREECIV_JSON_CONNECTION */
61678
61679 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nationset_change)) {
61680 RECEIVE_PACKET_FIELD_ERROR(nationset_change);
61681 }
61682#endif /* FREECIV_DELTA_PROTOCOL */
61683
61685#undef FREE_PACKET_STRUCT
61686}
61687
61689{
61690 const struct packet_nation_availability *real_packet = packet;
61691 int e;
61693
61694 log_packet_detailed("packet_nation_availability_100: sending info about ()");
61695
61696#ifdef FREECIV_DELTA_PROTOCOL
61699 bool differ;
61700 struct genhash **hash = pc->phs.sent + PACKET_NATION_AVAILABILITY;
61701
61702 if (nullptr == *hash) {
61704 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
61705 }
61706 BV_CLR_ALL(fields);
61707
61708 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
61709 old = fc_malloc(sizeof(*old));
61710 /* temporary bitcopy just to insert correctly */
61711 *old = *real_packet;
61714 }
61715
61716 differ = (old->ncount != real_packet->ncount);
61717 if (differ) {
61718 BV_SET(fields, 0);
61719 }
61720
61721 differ = (old->ncount != real_packet->ncount);
61722 if (!differ) {
61723 int i;
61724
61725 for (i = 0; i < old->ncount; i++) {
61726 differ = (old->is_pickable[i] != real_packet->is_pickable[i]);
61727 if (differ) {
61728 break;
61729 }
61730 }
61731 }
61732 if (differ) {
61733 BV_SET(fields, 1);
61734 }
61735
61736 /* folded into head */
61737 if (real_packet->nationset_change) {
61738 BV_SET(fields, 2);
61739 }
61740#endif /* FREECIV_DELTA_PROTOCOL */
61741
61742#ifdef FREECIV_JSON_CONNECTION
61743 struct plocation field_addr;
61744 {
61745 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61748 }
61749#endif /* FREECIV_JSON_CONNECTION */
61750
61751#ifdef FREECIV_DELTA_PROTOCOL
61752#ifdef FREECIV_JSON_CONNECTION
61753 field_addr.name = "fields";
61754#endif /* FREECIV_JSON_CONNECTION */
61755 e = 0;
61756 e |= DIO_BV_PUT(&dout, &field_addr, fields);
61757 if (e) {
61758 log_packet_detailed("fields bitvector error detected");
61759 }
61760
61761 if (BV_ISSET(fields, 0)) {
61762 log_packet_detailed(" field 'ncount' has changed");
61763
61764#ifdef FREECIV_JSON_CONNECTION
61765 field_addr.name = "ncount";
61766#endif /* FREECIV_JSON_CONNECTION */
61767 e = 0;
61768
61769 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
61770
61771 if (e) {
61772 log_packet_detailed("'ncount' field error detected");
61773 }
61774 }
61775
61776 if (BV_ISSET(fields, 1)) {
61777 log_packet_detailed(" field 'is_pickable' has changed");
61778
61779#ifdef FREECIV_JSON_CONNECTION
61780 field_addr.name = "is_pickable";
61781#endif /* FREECIV_JSON_CONNECTION */
61782 e = 0;
61783
61784 {
61785 int i;
61786
61787#ifdef FREECIV_JSON_CONNECTION
61788 /* Create the array. */
61789 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
61790
61791 /* Enter array. */
61792 field_addr.sub_location = plocation_elem_new(0);
61793#endif /* FREECIV_JSON_CONNECTION */
61794
61795 for (i = 0; i < real_packet->ncount; i++) {
61796#ifdef FREECIV_JSON_CONNECTION
61797 /* Next array element. */
61798 field_addr.sub_location->number = i;
61799#endif /* FREECIV_JSON_CONNECTION */
61800
61801 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
61802 }
61803
61804#ifdef FREECIV_JSON_CONNECTION
61805 /* Exit array. */
61806 FC_FREE(field_addr.sub_location);
61807#endif /* FREECIV_JSON_CONNECTION */
61808 }
61809
61810 if (e) {
61811 log_packet_detailed("'is_pickable' field error detected");
61812 }
61813 }
61814
61815 /* field 2 is folded into the header */
61816
61817 *old = *real_packet;
61818
61819#else /* FREECIV_DELTA_PROTOCOL */
61820#ifdef FREECIV_JSON_CONNECTION
61821 field_addr.name = "ncount";
61822#endif /* FREECIV_JSON_CONNECTION */
61823 e = 0;
61824
61825 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
61826
61827 if (e) {
61828 log_packet_detailed("'ncount' field error detected");
61829 }
61830
61831#ifdef FREECIV_JSON_CONNECTION
61832 field_addr.name = "is_pickable";
61833#endif /* FREECIV_JSON_CONNECTION */
61834 e = 0;
61835
61836 {
61837 int i;
61838
61839#ifdef FREECIV_JSON_CONNECTION
61840 /* Create the array. */
61841 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
61842
61843 /* Enter array. */
61844 field_addr.sub_location = plocation_elem_new(0);
61845#endif /* FREECIV_JSON_CONNECTION */
61846
61847 for (i = 0; i < real_packet->ncount; i++) {
61848#ifdef FREECIV_JSON_CONNECTION
61849 /* Next array element. */
61850 field_addr.sub_location->number = i;
61851#endif /* FREECIV_JSON_CONNECTION */
61852
61853 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
61854 }
61855
61856#ifdef FREECIV_JSON_CONNECTION
61857 /* Exit array. */
61858 FC_FREE(field_addr.sub_location);
61859#endif /* FREECIV_JSON_CONNECTION */
61860 }
61861
61862 if (e) {
61863 log_packet_detailed("'is_pickable' field error detected");
61864 }
61865
61866#ifdef FREECIV_JSON_CONNECTION
61867 field_addr.name = "nationset_change";
61868#endif /* FREECIV_JSON_CONNECTION */
61869 e = 0;
61870
61871 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nationset_change);
61872
61873 if (e) {
61874 log_packet_detailed("'nationset_change' field error detected");
61875 }
61876#endif /* FREECIV_DELTA_PROTOCOL */
61877
61879}
61880
61882{
61883 if (!pc->used) {
61884 log_error("WARNING: trying to send data to the closed connection %s",
61886 return -1;
61887 }
61888 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet != nullptr, -1,
61889 "Handler for PACKET_NATION_AVAILABILITY not installed");
61890 return pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet(pc, packet);
61891}
61892
61894{
61895 conn_list_iterate(dest, pconn) {
61898}
61899
61900static inline void init_packet_ruleset_style(struct packet_ruleset_style *packet)
61901{
61902 memset(packet, 0, sizeof(*packet));
61903}
61904
61905#define free_packet_ruleset_style(_packet) (void) 0
61906#define destroy_packet_ruleset_style free
61907
61908#ifdef FREECIV_DELTA_PROTOCOL
61909#define hash_packet_ruleset_style_100 hash_const
61910#define cmp_packet_ruleset_style_100 cmp_const
61912#endif /* FREECIV_DELTA_PROTOCOL */
61913
61915{
61916#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_style(_packet)
61918
61919#ifdef FREECIV_JSON_CONNECTION
61920 struct plocation field_addr;
61921 {
61922 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61925 }
61926#endif /* FREECIV_JSON_CONNECTION */
61927
61928 log_packet_detailed("packet_ruleset_style_100: got info about ()");
61929
61930#ifdef FREECIV_DELTA_PROTOCOL
61932 struct packet_ruleset_style *old;
61933 struct genhash **hash = pc->phs.received + PACKET_RULESET_STYLE;
61934
61935 if (nullptr == *hash) {
61937 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
61938 }
61939
61940 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
61941 *real_packet = *old;
61942 } else {
61943 /* packet is already initialized empty */
61944 log_packet_detailed(" no old info");
61945 }
61946
61947#ifdef FREECIV_JSON_CONNECTION
61948 field_addr.name = "fields";
61949#endif /* FREECIV_JSON_CONNECTION */
61950 DIO_BV_GET(&din, &field_addr, fields);
61951
61952 if (BV_ISSET(fields, 0)) {
61953 log_packet_detailed(" got field 'id'");
61954
61955#ifdef FREECIV_JSON_CONNECTION
61956 field_addr.name = "id";
61957#endif /* FREECIV_JSON_CONNECTION */
61958
61959 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
61961 }
61962 }
61963
61964 if (BV_ISSET(fields, 1)) {
61965 log_packet_detailed(" got field 'name'");
61966
61967#ifdef FREECIV_JSON_CONNECTION
61968 field_addr.name = "name";
61969#endif /* FREECIV_JSON_CONNECTION */
61970
61971 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
61973 }
61974 }
61975
61976 if (BV_ISSET(fields, 2)) {
61977 log_packet_detailed(" got field 'rule_name'");
61978
61979#ifdef FREECIV_JSON_CONNECTION
61980 field_addr.name = "rule_name";
61981#endif /* FREECIV_JSON_CONNECTION */
61982
61983 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
61984 RECEIVE_PACKET_FIELD_ERROR(rule_name);
61985 }
61986 }
61987
61988 if (nullptr == old) {
61989 old = fc_malloc(sizeof(*old));
61991 *old = *real_packet;
61993 } else {
61994 *old = *real_packet;
61995 }
61996
61997#else /* FREECIV_DELTA_PROTOCOL */
61998#ifdef FREECIV_JSON_CONNECTION
61999 field_addr.name = "id";
62000#endif /* FREECIV_JSON_CONNECTION */
62001
62002 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62004 }
62005
62006#ifdef FREECIV_JSON_CONNECTION
62007 field_addr.name = "name";
62008#endif /* FREECIV_JSON_CONNECTION */
62009
62010 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62012 }
62013
62014#ifdef FREECIV_JSON_CONNECTION
62015 field_addr.name = "rule_name";
62016#endif /* FREECIV_JSON_CONNECTION */
62017
62018 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62019 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62020 }
62021#endif /* FREECIV_DELTA_PROTOCOL */
62022
62024#undef FREE_PACKET_STRUCT
62025}
62026
62027static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
62028{
62029 const struct packet_ruleset_style *real_packet = packet;
62030 int e;
62032
62033 log_packet_detailed("packet_ruleset_style_100: sending info about ()");
62034
62035#ifdef FREECIV_DELTA_PROTOCOL
62037 struct packet_ruleset_style *old;
62038 bool differ;
62039 struct genhash **hash = pc->phs.sent + PACKET_RULESET_STYLE;
62040
62041 if (nullptr == *hash) {
62043 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
62044 }
62045 BV_CLR_ALL(fields);
62046
62047 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62048 old = fc_malloc(sizeof(*old));
62049 /* temporary bitcopy just to insert correctly */
62050 *old = *real_packet;
62053 }
62054
62055 differ = (old->id != real_packet->id);
62056 if (differ) {
62057 BV_SET(fields, 0);
62058 }
62059
62060 differ = (strcmp(old->name, real_packet->name) != 0);
62061 if (differ) {
62062 BV_SET(fields, 1);
62063 }
62064
62065 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62066 if (differ) {
62067 BV_SET(fields, 2);
62068 }
62069#endif /* FREECIV_DELTA_PROTOCOL */
62070
62071#ifdef FREECIV_JSON_CONNECTION
62072 struct plocation field_addr;
62073 {
62074 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62077 }
62078#endif /* FREECIV_JSON_CONNECTION */
62079
62080#ifdef FREECIV_DELTA_PROTOCOL
62081#ifdef FREECIV_JSON_CONNECTION
62082 field_addr.name = "fields";
62083#endif /* FREECIV_JSON_CONNECTION */
62084 e = 0;
62085 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62086 if (e) {
62087 log_packet_detailed("fields bitvector error detected");
62088 }
62089
62090 if (BV_ISSET(fields, 0)) {
62091 log_packet_detailed(" field 'id' has changed");
62092
62093#ifdef FREECIV_JSON_CONNECTION
62094 field_addr.name = "id";
62095#endif /* FREECIV_JSON_CONNECTION */
62096 e = 0;
62097
62098 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62099
62100 if (e) {
62101 log_packet_detailed("'id' field error detected");
62102 }
62103 }
62104
62105 if (BV_ISSET(fields, 1)) {
62106 log_packet_detailed(" field 'name' has changed");
62107
62108#ifdef FREECIV_JSON_CONNECTION
62109 field_addr.name = "name";
62110#endif /* FREECIV_JSON_CONNECTION */
62111 e = 0;
62112
62113 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62114
62115 if (e) {
62116 log_packet_detailed("'name' field error detected");
62117 }
62118 }
62119
62120 if (BV_ISSET(fields, 2)) {
62121 log_packet_detailed(" field 'rule_name' has changed");
62122
62123#ifdef FREECIV_JSON_CONNECTION
62124 field_addr.name = "rule_name";
62125#endif /* FREECIV_JSON_CONNECTION */
62126 e = 0;
62127
62128 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62129
62130 if (e) {
62131 log_packet_detailed("'rule_name' field error detected");
62132 }
62133 }
62134
62135 *old = *real_packet;
62136
62137#else /* FREECIV_DELTA_PROTOCOL */
62138#ifdef FREECIV_JSON_CONNECTION
62139 field_addr.name = "id";
62140#endif /* FREECIV_JSON_CONNECTION */
62141 e = 0;
62142
62143 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62144
62145 if (e) {
62146 log_packet_detailed("'id' field error detected");
62147 }
62148
62149#ifdef FREECIV_JSON_CONNECTION
62150 field_addr.name = "name";
62151#endif /* FREECIV_JSON_CONNECTION */
62152 e = 0;
62153
62154 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62155
62156 if (e) {
62157 log_packet_detailed("'name' field error detected");
62158 }
62159
62160#ifdef FREECIV_JSON_CONNECTION
62161 field_addr.name = "rule_name";
62162#endif /* FREECIV_JSON_CONNECTION */
62163 e = 0;
62164
62165 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62166
62167 if (e) {
62168 log_packet_detailed("'rule_name' field error detected");
62169 }
62170#endif /* FREECIV_DELTA_PROTOCOL */
62171
62173}
62174
62176{
62177 if (!pc->used) {
62178 log_error("WARNING: trying to send data to the closed connection %s",
62180 return -1;
62181 }
62182 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_STYLE].packet != nullptr, -1,
62183 "Handler for PACKET_RULESET_STYLE not installed");
62184 return pc->phs.handlers->send[PACKET_RULESET_STYLE].packet(pc, packet);
62185}
62186
62187void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
62188{
62189 conn_list_iterate(dest, pconn) {
62192}
62193
62194static inline void init_packet_ruleset_city(struct packet_ruleset_city *packet)
62195{
62196 memset(packet, 0, sizeof(*packet));
62197
62198 requirement_vector_init(&packet->reqs);
62199}
62200
62201static inline void free_packet_ruleset_city(struct packet_ruleset_city *packet)
62202{
62203 requirement_vector_free(&packet->reqs);
62204}
62205
62206static inline void destroy_packet_ruleset_city(void *packet)
62207{
62209 free(packet);
62210}
62211
62212#ifdef FREECIV_DELTA_PROTOCOL
62213#define hash_packet_ruleset_city_100 hash_const
62214#define cmp_packet_ruleset_city_100 cmp_const
62216#endif /* FREECIV_DELTA_PROTOCOL */
62217
62219{
62220#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_city(_packet)
62222
62223#ifdef FREECIV_JSON_CONNECTION
62224 struct plocation field_addr;
62225 {
62226 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62229 }
62230#endif /* FREECIV_JSON_CONNECTION */
62231
62232 log_packet_detailed("packet_ruleset_city_100: got info about ()");
62233
62234#ifdef FREECIV_DELTA_PROTOCOL
62236 struct packet_ruleset_city *old;
62237 struct genhash **hash = pc->phs.received + PACKET_RULESET_CITY;
62238
62239 if (nullptr == *hash) {
62241 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62242 }
62243
62244 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62245 real_packet->style_id = old->style_id;
62246 sz_strlcpy(real_packet->name, old->name);
62247 sz_strlcpy(real_packet->rule_name, old->rule_name);
62248 sz_strlcpy(real_packet->citizens_graphic, old->citizens_graphic);
62249 requirement_vector_copy(&real_packet->reqs, &old->reqs);
62250 sz_strlcpy(real_packet->graphic, old->graphic);
62251 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
62252 } else {
62253 /* packet is already initialized empty */
62254 log_packet_detailed(" no old info");
62255 }
62256
62257#ifdef FREECIV_JSON_CONNECTION
62258 field_addr.name = "fields";
62259#endif /* FREECIV_JSON_CONNECTION */
62260 DIO_BV_GET(&din, &field_addr, fields);
62261
62262 if (BV_ISSET(fields, 0)) {
62263 log_packet_detailed(" got field 'style_id'");
62264
62265#ifdef FREECIV_JSON_CONNECTION
62266 field_addr.name = "style_id";
62267#endif /* FREECIV_JSON_CONNECTION */
62268
62269 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62271 }
62272 }
62273
62274 if (BV_ISSET(fields, 1)) {
62275 log_packet_detailed(" got field 'name'");
62276
62277#ifdef FREECIV_JSON_CONNECTION
62278 field_addr.name = "name";
62279#endif /* FREECIV_JSON_CONNECTION */
62280
62281 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62283 }
62284 }
62285
62286 if (BV_ISSET(fields, 2)) {
62287 log_packet_detailed(" got field 'rule_name'");
62288
62289#ifdef FREECIV_JSON_CONNECTION
62290 field_addr.name = "rule_name";
62291#endif /* FREECIV_JSON_CONNECTION */
62292
62293 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62294 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62295 }
62296 }
62297
62298 if (BV_ISSET(fields, 3)) {
62299 log_packet_detailed(" got field 'citizens_graphic'");
62300
62301#ifdef FREECIV_JSON_CONNECTION
62302 field_addr.name = "citizens_graphic";
62303#endif /* FREECIV_JSON_CONNECTION */
62304
62305 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62306 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62307 }
62308 }
62309
62310 if (BV_ISSET(fields, 4)) {
62311 log_packet_detailed(" got field 'reqs'");
62312
62313#ifdef FREECIV_JSON_CONNECTION
62314 field_addr.name = "reqs";
62315#endif /* FREECIV_JSON_CONNECTION */
62316
62317 {
62318 int i;
62319
62320 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62322 }
62324
62325#ifdef FREECIV_JSON_CONNECTION
62326 /* Enter array. */
62327 field_addr.sub_location = plocation_elem_new(0);
62328#endif /* FREECIV_JSON_CONNECTION */
62329
62330 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62331#ifdef FREECIV_JSON_CONNECTION
62332 /* Next array element */
62333 field_addr.sub_location->number = i;
62334#endif /* FREECIV_JSON_CONNECTION */
62335
62336 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62338 }
62339 }
62340
62341#ifdef FREECIV_JSON_CONNECTION
62342 /* Exit array. */
62343 FC_FREE(field_addr.sub_location);
62344#endif /* FREECIV_JSON_CONNECTION */
62345 }
62346 }
62347
62348 if (BV_ISSET(fields, 5)) {
62349 log_packet_detailed(" got field 'graphic'");
62350
62351#ifdef FREECIV_JSON_CONNECTION
62352 field_addr.name = "graphic";
62353#endif /* FREECIV_JSON_CONNECTION */
62354
62355 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62357 }
62358 }
62359
62360 if (BV_ISSET(fields, 6)) {
62361 log_packet_detailed(" got field 'graphic_alt'");
62362
62363#ifdef FREECIV_JSON_CONNECTION
62364 field_addr.name = "graphic_alt";
62365#endif /* FREECIV_JSON_CONNECTION */
62366
62367 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62368 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62369 }
62370 }
62371
62372 if (nullptr == old) {
62373 old = fc_malloc(sizeof(*old));
62375 old->style_id = real_packet->style_id;
62376 sz_strlcpy(old->name, real_packet->name);
62377 sz_strlcpy(old->rule_name, real_packet->rule_name);
62378 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62379 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62380 sz_strlcpy(old->graphic, real_packet->graphic);
62381 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62383 } else {
62384 old->style_id = real_packet->style_id;
62385 sz_strlcpy(old->name, real_packet->name);
62386 sz_strlcpy(old->rule_name, real_packet->rule_name);
62387 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62388 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62389 sz_strlcpy(old->graphic, real_packet->graphic);
62390 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62391 }
62392
62393#else /* FREECIV_DELTA_PROTOCOL */
62394#ifdef FREECIV_JSON_CONNECTION
62395 field_addr.name = "style_id";
62396#endif /* FREECIV_JSON_CONNECTION */
62397
62398 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62400 }
62401
62402#ifdef FREECIV_JSON_CONNECTION
62403 field_addr.name = "name";
62404#endif /* FREECIV_JSON_CONNECTION */
62405
62406 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62408 }
62409
62410#ifdef FREECIV_JSON_CONNECTION
62411 field_addr.name = "rule_name";
62412#endif /* FREECIV_JSON_CONNECTION */
62413
62414 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62415 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62416 }
62417
62418#ifdef FREECIV_JSON_CONNECTION
62419 field_addr.name = "citizens_graphic";
62420#endif /* FREECIV_JSON_CONNECTION */
62421
62422 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62423 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62424 }
62425
62426#ifdef FREECIV_JSON_CONNECTION
62427 field_addr.name = "reqs";
62428#endif /* FREECIV_JSON_CONNECTION */
62429
62430 {
62431 int i;
62432
62433 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62435 }
62437
62438#ifdef FREECIV_JSON_CONNECTION
62439 /* Enter array. */
62440 field_addr.sub_location = plocation_elem_new(0);
62441#endif /* FREECIV_JSON_CONNECTION */
62442
62443 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62444#ifdef FREECIV_JSON_CONNECTION
62445 /* Next array element */
62446 field_addr.sub_location->number = i;
62447#endif /* FREECIV_JSON_CONNECTION */
62448
62449 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62451 }
62452 }
62453
62454#ifdef FREECIV_JSON_CONNECTION
62455 /* Exit array. */
62456 FC_FREE(field_addr.sub_location);
62457#endif /* FREECIV_JSON_CONNECTION */
62458 }
62459
62460#ifdef FREECIV_JSON_CONNECTION
62461 field_addr.name = "graphic";
62462#endif /* FREECIV_JSON_CONNECTION */
62463
62464 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62466 }
62467
62468#ifdef FREECIV_JSON_CONNECTION
62469 field_addr.name = "graphic_alt";
62470#endif /* FREECIV_JSON_CONNECTION */
62471
62472 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62473 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62474 }
62475#endif /* FREECIV_DELTA_PROTOCOL */
62476
62478#undef FREE_PACKET_STRUCT
62479}
62480
62481static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
62482{
62483 const struct packet_ruleset_city *real_packet = packet;
62484 int e;
62486
62487 log_packet_detailed("packet_ruleset_city_100: sending info about ()");
62488
62489#ifdef FREECIV_DELTA_PROTOCOL
62491 struct packet_ruleset_city *old;
62492 bool differ;
62493 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CITY;
62494
62495 if (nullptr == *hash) {
62497 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62498 }
62499 BV_CLR_ALL(fields);
62500
62501 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62502 old = fc_malloc(sizeof(*old));
62503 /* temporary bitcopy just to insert correctly */
62504 *old = *real_packet;
62507 }
62508
62509 differ = (old->style_id != real_packet->style_id);
62510 if (differ) {
62511 BV_SET(fields, 0);
62512 }
62513
62514 differ = (strcmp(old->name, real_packet->name) != 0);
62515 if (differ) {
62516 BV_SET(fields, 1);
62517 }
62518
62519 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62520 if (differ) {
62521 BV_SET(fields, 2);
62522 }
62523
62524 differ = (strcmp(old->citizens_graphic, real_packet->citizens_graphic) != 0);
62525 if (differ) {
62526 BV_SET(fields, 3);
62527 }
62528
62530 if (!differ) {
62531 int i;
62532
62533 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
62534 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
62535 if (differ) {
62536 break;
62537 }
62538 }
62539 }
62540 if (differ) {
62541 BV_SET(fields, 4);
62542 }
62543
62544 differ = (strcmp(old->graphic, real_packet->graphic) != 0);
62545 if (differ) {
62546 BV_SET(fields, 5);
62547 }
62548
62549 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
62550 if (differ) {
62551 BV_SET(fields, 6);
62552 }
62553#endif /* FREECIV_DELTA_PROTOCOL */
62554
62555#ifdef FREECIV_JSON_CONNECTION
62556 struct plocation field_addr;
62557 {
62558 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62561 }
62562#endif /* FREECIV_JSON_CONNECTION */
62563
62564#ifdef FREECIV_DELTA_PROTOCOL
62565#ifdef FREECIV_JSON_CONNECTION
62566 field_addr.name = "fields";
62567#endif /* FREECIV_JSON_CONNECTION */
62568 e = 0;
62569 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62570 if (e) {
62571 log_packet_detailed("fields bitvector error detected");
62572 }
62573
62574 if (BV_ISSET(fields, 0)) {
62575 log_packet_detailed(" field 'style_id' has changed");
62576
62577#ifdef FREECIV_JSON_CONNECTION
62578 field_addr.name = "style_id";
62579#endif /* FREECIV_JSON_CONNECTION */
62580 e = 0;
62581
62582 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
62583
62584 if (e) {
62585 log_packet_detailed("'style_id' field error detected");
62586 }
62587 }
62588
62589 if (BV_ISSET(fields, 1)) {
62590 log_packet_detailed(" field 'name' has changed");
62591
62592#ifdef FREECIV_JSON_CONNECTION
62593 field_addr.name = "name";
62594#endif /* FREECIV_JSON_CONNECTION */
62595 e = 0;
62596
62597 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62598
62599 if (e) {
62600 log_packet_detailed("'name' field error detected");
62601 }
62602 }
62603
62604 if (BV_ISSET(fields, 2)) {
62605 log_packet_detailed(" field 'rule_name' has changed");
62606
62607#ifdef FREECIV_JSON_CONNECTION
62608 field_addr.name = "rule_name";
62609#endif /* FREECIV_JSON_CONNECTION */
62610 e = 0;
62611
62612 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62613
62614 if (e) {
62615 log_packet_detailed("'rule_name' field error detected");
62616 }
62617 }
62618
62619 if (BV_ISSET(fields, 3)) {
62620 log_packet_detailed(" field 'citizens_graphic' has changed");
62621
62622#ifdef FREECIV_JSON_CONNECTION
62623 field_addr.name = "citizens_graphic";
62624#endif /* FREECIV_JSON_CONNECTION */
62625 e = 0;
62626
62627 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
62628
62629 if (e) {
62630 log_packet_detailed("'citizens_graphic' field error detected");
62631 }
62632 }
62633
62634 if (BV_ISSET(fields, 4)) {
62635 log_packet_detailed(" field 'reqs' has changed");
62636
62637#ifdef FREECIV_JSON_CONNECTION
62638 field_addr.name = "reqs";
62639#endif /* FREECIV_JSON_CONNECTION */
62640 e = 0;
62641
62642 {
62643 int i;
62644
62647
62648#ifdef FREECIV_JSON_CONNECTION
62649 /* Enter array. */
62650 field_addr.sub_location = plocation_elem_new(0);
62651#endif /* FREECIV_JSON_CONNECTION */
62652
62653 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62654#ifdef FREECIV_JSON_CONNECTION
62655 /* Next array element. */
62656 field_addr.sub_location->number = i;
62657#endif /* FREECIV_JSON_CONNECTION */
62658
62659 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
62660 }
62661
62662#ifdef FREECIV_JSON_CONNECTION
62663 /* Exit array. */
62664 FC_FREE(field_addr.sub_location);
62665#endif /* FREECIV_JSON_CONNECTION */
62666 }
62667
62668 if (e) {
62669 log_packet_detailed("'reqs' field error detected");
62670 }
62671 }
62672
62673 if (BV_ISSET(fields, 5)) {
62674 log_packet_detailed(" field 'graphic' has changed");
62675
62676#ifdef FREECIV_JSON_CONNECTION
62677 field_addr.name = "graphic";
62678#endif /* FREECIV_JSON_CONNECTION */
62679 e = 0;
62680
62681 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
62682
62683 if (e) {
62684 log_packet_detailed("'graphic' field error detected");
62685 }
62686 }
62687
62688 if (BV_ISSET(fields, 6)) {
62689 log_packet_detailed(" field 'graphic_alt' has changed");
62690
62691#ifdef FREECIV_JSON_CONNECTION
62692 field_addr.name = "graphic_alt";
62693#endif /* FREECIV_JSON_CONNECTION */
62694 e = 0;
62695
62696 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
62697
62698 if (e) {
62699 log_packet_detailed("'graphic_alt' field error detected");
62700 }
62701 }
62702
62703 old->style_id = real_packet->style_id;
62704 sz_strlcpy(old->name, real_packet->name);
62705 sz_strlcpy(old->rule_name, real_packet->rule_name);
62706 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62707 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62708 sz_strlcpy(old->graphic, real_packet->graphic);
62709 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62710
62711#else /* FREECIV_DELTA_PROTOCOL */
62712#ifdef FREECIV_JSON_CONNECTION
62713 field_addr.name = "style_id";
62714#endif /* FREECIV_JSON_CONNECTION */
62715 e = 0;
62716
62717 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
62718
62719 if (e) {
62720 log_packet_detailed("'style_id' field error detected");
62721 }
62722
62723#ifdef FREECIV_JSON_CONNECTION
62724 field_addr.name = "name";
62725#endif /* FREECIV_JSON_CONNECTION */
62726 e = 0;
62727
62728 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62729
62730 if (e) {
62731 log_packet_detailed("'name' field error detected");
62732 }
62733
62734#ifdef FREECIV_JSON_CONNECTION
62735 field_addr.name = "rule_name";
62736#endif /* FREECIV_JSON_CONNECTION */
62737 e = 0;
62738
62739 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62740
62741 if (e) {
62742 log_packet_detailed("'rule_name' field error detected");
62743 }
62744
62745#ifdef FREECIV_JSON_CONNECTION
62746 field_addr.name = "citizens_graphic";
62747#endif /* FREECIV_JSON_CONNECTION */
62748 e = 0;
62749
62750 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
62751
62752 if (e) {
62753 log_packet_detailed("'citizens_graphic' field error detected");
62754 }
62755
62756#ifdef FREECIV_JSON_CONNECTION
62757 field_addr.name = "reqs";
62758#endif /* FREECIV_JSON_CONNECTION */
62759 e = 0;
62760
62761 {
62762 int i;
62763
62766
62767#ifdef FREECIV_JSON_CONNECTION
62768 /* Enter array. */
62769 field_addr.sub_location = plocation_elem_new(0);
62770#endif /* FREECIV_JSON_CONNECTION */
62771
62772 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62773#ifdef FREECIV_JSON_CONNECTION
62774 /* Next array element. */
62775 field_addr.sub_location->number = i;
62776#endif /* FREECIV_JSON_CONNECTION */
62777
62778 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
62779 }
62780
62781#ifdef FREECIV_JSON_CONNECTION
62782 /* Exit array. */
62783 FC_FREE(field_addr.sub_location);
62784#endif /* FREECIV_JSON_CONNECTION */
62785 }
62786
62787 if (e) {
62788 log_packet_detailed("'reqs' field error detected");
62789 }
62790
62791#ifdef FREECIV_JSON_CONNECTION
62792 field_addr.name = "graphic";
62793#endif /* FREECIV_JSON_CONNECTION */
62794 e = 0;
62795
62796 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
62797
62798 if (e) {
62799 log_packet_detailed("'graphic' field error detected");
62800 }
62801
62802#ifdef FREECIV_JSON_CONNECTION
62803 field_addr.name = "graphic_alt";
62804#endif /* FREECIV_JSON_CONNECTION */
62805 e = 0;
62806
62807 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
62808
62809 if (e) {
62810 log_packet_detailed("'graphic_alt' field error detected");
62811 }
62812#endif /* FREECIV_DELTA_PROTOCOL */
62813
62815}
62816
62818{
62819 if (!pc->used) {
62820 log_error("WARNING: trying to send data to the closed connection %s",
62822 return -1;
62823 }
62824 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CITY].packet != nullptr, -1,
62825 "Handler for PACKET_RULESET_CITY not installed");
62826 return pc->phs.handlers->send[PACKET_RULESET_CITY].packet(pc, packet);
62827}
62828
62829void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
62830{
62831 conn_list_iterate(dest, pconn) {
62834}
62835
62837{
62838 memset(packet, 0, sizeof(*packet));
62839
62840 requirement_vector_init(&packet->reqs);
62842 packet->helptext = strvec_new();
62843}
62844
62846{
62847 if (packet->helptext) {
62848 strvec_destroy(packet->helptext);
62849 packet->helptext = nullptr;
62850 }
62852 requirement_vector_free(&packet->reqs);
62853}
62854
62855static inline void destroy_packet_ruleset_building(void *packet)
62856{
62858 free(packet);
62859}
62860
62861#ifdef FREECIV_DELTA_PROTOCOL
62862#define hash_packet_ruleset_building_100 hash_const
62863#define cmp_packet_ruleset_building_100 cmp_const
62865#endif /* FREECIV_DELTA_PROTOCOL */
62866
62868{
62869#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_building(_packet)
62871
62872#ifdef FREECIV_JSON_CONNECTION
62873 struct plocation field_addr;
62874 {
62875 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62878 }
62879#endif /* FREECIV_JSON_CONNECTION */
62880
62881 log_packet_detailed("packet_ruleset_building_100: got info about ()");
62882
62883#ifdef FREECIV_DELTA_PROTOCOL
62886 struct genhash **hash = pc->phs.received + PACKET_RULESET_BUILDING;
62887
62888 if (nullptr == *hash) {
62890 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
62891 }
62892
62893 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62894 real_packet->id = old->id;
62895 real_packet->genus = old->genus;
62896 sz_strlcpy(real_packet->name, old->name);
62897 sz_strlcpy(real_packet->rule_name, old->rule_name);
62898 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
62899 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
62900 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
62901 requirement_vector_copy(&real_packet->reqs, &old->reqs);
62902 requirement_vector_copy(&real_packet->obs_reqs, &old->obs_reqs);
62903 real_packet->build_cost = old->build_cost;
62904 real_packet->upkeep = old->upkeep;
62905 real_packet->sabotage = old->sabotage;
62906 real_packet->flags = old->flags;
62907 sz_strlcpy(real_packet->soundtag, old->soundtag);
62908 sz_strlcpy(real_packet->soundtag_alt, old->soundtag_alt);
62909 sz_strlcpy(real_packet->soundtag_alt2, old->soundtag_alt2);
62910 if (old->helptext) {
62911 strvec_copy(real_packet->helptext, old->helptext);
62912 } else {
62913 strvec_clear(real_packet->helptext);
62914 }
62915 } else {
62916 /* packet is already initialized empty */
62917 log_packet_detailed(" no old info");
62918 }
62919
62920#ifdef FREECIV_JSON_CONNECTION
62921 field_addr.name = "fields";
62922#endif /* FREECIV_JSON_CONNECTION */
62923 DIO_BV_GET(&din, &field_addr, fields);
62924
62925 if (BV_ISSET(fields, 0)) {
62926 log_packet_detailed(" got field 'id'");
62927
62928#ifdef FREECIV_JSON_CONNECTION
62929 field_addr.name = "id";
62930#endif /* FREECIV_JSON_CONNECTION */
62931
62932 {
62933 int readin;
62934
62935 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62937 }
62938 real_packet->id = readin;
62939 }
62940 }
62941
62942 if (BV_ISSET(fields, 1)) {
62943 log_packet_detailed(" got field 'genus'");
62944
62945#ifdef FREECIV_JSON_CONNECTION
62946 field_addr.name = "genus";
62947#endif /* FREECIV_JSON_CONNECTION */
62948
62949 {
62950 int readin;
62951
62952 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62954 }
62955 real_packet->genus = readin;
62956 }
62957 }
62958
62959 if (BV_ISSET(fields, 2)) {
62960 log_packet_detailed(" got field 'name'");
62961
62962#ifdef FREECIV_JSON_CONNECTION
62963 field_addr.name = "name";
62964#endif /* FREECIV_JSON_CONNECTION */
62965
62966 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62968 }
62969 }
62970
62971 if (BV_ISSET(fields, 3)) {
62972 log_packet_detailed(" got field 'rule_name'");
62973
62974#ifdef FREECIV_JSON_CONNECTION
62975 field_addr.name = "rule_name";
62976#endif /* FREECIV_JSON_CONNECTION */
62977
62978 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62979 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62980 }
62981 }
62982
62983 if (BV_ISSET(fields, 4)) {
62984 log_packet_detailed(" got field 'graphic_str'");
62985
62986#ifdef FREECIV_JSON_CONNECTION
62987 field_addr.name = "graphic_str";
62988#endif /* FREECIV_JSON_CONNECTION */
62989
62990 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
62991 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
62992 }
62993 }
62994
62995 if (BV_ISSET(fields, 5)) {
62996 log_packet_detailed(" got field 'graphic_alt'");
62997
62998#ifdef FREECIV_JSON_CONNECTION
62999 field_addr.name = "graphic_alt";
63000#endif /* FREECIV_JSON_CONNECTION */
63001
63002 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63003 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63004 }
63005 }
63006
63007 if (BV_ISSET(fields, 6)) {
63008 log_packet_detailed(" got field 'graphic_alt2'");
63009
63010#ifdef FREECIV_JSON_CONNECTION
63011 field_addr.name = "graphic_alt2";
63012#endif /* FREECIV_JSON_CONNECTION */
63013
63014 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63015 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63016 }
63017 }
63018
63019 if (BV_ISSET(fields, 7)) {
63020 log_packet_detailed(" got field 'reqs'");
63021
63022#ifdef FREECIV_JSON_CONNECTION
63023 field_addr.name = "reqs";
63024#endif /* FREECIV_JSON_CONNECTION */
63025
63026 {
63027 int i;
63028
63029 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63031 }
63033
63034#ifdef FREECIV_JSON_CONNECTION
63035 /* Enter array. */
63036 field_addr.sub_location = plocation_elem_new(0);
63037#endif /* FREECIV_JSON_CONNECTION */
63038
63039 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63040#ifdef FREECIV_JSON_CONNECTION
63041 /* Next array element */
63042 field_addr.sub_location->number = i;
63043#endif /* FREECIV_JSON_CONNECTION */
63044
63045 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63047 }
63048 }
63049
63050#ifdef FREECIV_JSON_CONNECTION
63051 /* Exit array. */
63052 FC_FREE(field_addr.sub_location);
63053#endif /* FREECIV_JSON_CONNECTION */
63054 }
63055 }
63056
63057 if (BV_ISSET(fields, 8)) {
63058 log_packet_detailed(" got field 'obs_reqs'");
63059
63060#ifdef FREECIV_JSON_CONNECTION
63061 field_addr.name = "obs_reqs";
63062#endif /* FREECIV_JSON_CONNECTION */
63063
63064 {
63065 int i;
63066
63067 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63069 }
63071
63072#ifdef FREECIV_JSON_CONNECTION
63073 /* Enter array. */
63074 field_addr.sub_location = plocation_elem_new(0);
63075#endif /* FREECIV_JSON_CONNECTION */
63076
63077 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63078#ifdef FREECIV_JSON_CONNECTION
63079 /* Next array element */
63080 field_addr.sub_location->number = i;
63081#endif /* FREECIV_JSON_CONNECTION */
63082
63083 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63085 }
63086 }
63087
63088#ifdef FREECIV_JSON_CONNECTION
63089 /* Exit array. */
63090 FC_FREE(field_addr.sub_location);
63091#endif /* FREECIV_JSON_CONNECTION */
63092 }
63093 }
63094
63095 if (BV_ISSET(fields, 9)) {
63096 log_packet_detailed(" got field 'build_cost'");
63097
63098#ifdef FREECIV_JSON_CONNECTION
63099 field_addr.name = "build_cost";
63100#endif /* FREECIV_JSON_CONNECTION */
63101
63102 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63103 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63104 }
63105 }
63106
63107 if (BV_ISSET(fields, 10)) {
63108 log_packet_detailed(" got field 'upkeep'");
63109
63110#ifdef FREECIV_JSON_CONNECTION
63111 field_addr.name = "upkeep";
63112#endif /* FREECIV_JSON_CONNECTION */
63113
63114 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63116 }
63117 }
63118
63119 if (BV_ISSET(fields, 11)) {
63120 log_packet_detailed(" got field 'sabotage'");
63121
63122#ifdef FREECIV_JSON_CONNECTION
63123 field_addr.name = "sabotage";
63124#endif /* FREECIV_JSON_CONNECTION */
63125
63126 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63128 }
63129 }
63130
63131 if (BV_ISSET(fields, 12)) {
63132 log_packet_detailed(" got field 'flags'");
63133
63134#ifdef FREECIV_JSON_CONNECTION
63135 field_addr.name = "flags";
63136#endif /* FREECIV_JSON_CONNECTION */
63137
63138 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63140 }
63141 }
63142
63143 if (BV_ISSET(fields, 13)) {
63144 log_packet_detailed(" got field 'soundtag'");
63145
63146#ifdef FREECIV_JSON_CONNECTION
63147 field_addr.name = "soundtag";
63148#endif /* FREECIV_JSON_CONNECTION */
63149
63150 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63152 }
63153 }
63154
63155 if (BV_ISSET(fields, 14)) {
63156 log_packet_detailed(" got field 'soundtag_alt'");
63157
63158#ifdef FREECIV_JSON_CONNECTION
63159 field_addr.name = "soundtag_alt";
63160#endif /* FREECIV_JSON_CONNECTION */
63161
63162 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63163 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63164 }
63165 }
63166
63167 if (BV_ISSET(fields, 15)) {
63168 log_packet_detailed(" got field 'soundtag_alt2'");
63169
63170#ifdef FREECIV_JSON_CONNECTION
63171 field_addr.name = "soundtag_alt2";
63172#endif /* FREECIV_JSON_CONNECTION */
63173
63174 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63175 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63176 }
63177 }
63178
63179 if (BV_ISSET(fields, 16)) {
63180 log_packet_detailed(" got field 'helptext'");
63181
63182#ifdef FREECIV_JSON_CONNECTION
63183 field_addr.name = "helptext";
63184#endif /* FREECIV_JSON_CONNECTION */
63185
63186 {
63187 int i;
63188
63189 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63191 }
63192 strvec_reserve(real_packet->helptext, i);
63193
63194#ifdef FREECIV_JSON_CONNECTION
63195 /* Enter array. */
63196 field_addr.sub_location = plocation_elem_new(0);
63197#endif /* FREECIV_JSON_CONNECTION */
63198
63199 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63200#ifdef FREECIV_JSON_CONNECTION
63201 /* Next array element */
63202 field_addr.sub_location->number = i;
63203#endif /* FREECIV_JSON_CONNECTION */
63204
63205 {
63206 char readin[MAX_LEN_PACKET];
63207
63208 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63209 || !strvec_set(real_packet->helptext, i, readin)) {
63211 }
63212 }
63213 }
63214
63215#ifdef FREECIV_JSON_CONNECTION
63216 /* Exit array. */
63217 FC_FREE(field_addr.sub_location);
63218#endif /* FREECIV_JSON_CONNECTION */
63219 }
63220 }
63221
63222 if (nullptr == old) {
63223 old = fc_malloc(sizeof(*old));
63225 old->id = real_packet->id;
63226 old->genus = real_packet->genus;
63227 sz_strlcpy(old->name, real_packet->name);
63228 sz_strlcpy(old->rule_name, real_packet->rule_name);
63229 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63230 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63231 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63232 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63233 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63234 old->build_cost = real_packet->build_cost;
63235 old->upkeep = real_packet->upkeep;
63236 old->sabotage = real_packet->sabotage;
63237 old->flags = real_packet->flags;
63238 sz_strlcpy(old->soundtag, real_packet->soundtag);
63239 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63240 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63241 if (real_packet->helptext) {
63242 strvec_copy(old->helptext, real_packet->helptext);
63243 } else {
63244 strvec_clear(old->helptext);
63245 }
63247 } else {
63248 old->id = real_packet->id;
63249 old->genus = real_packet->genus;
63250 sz_strlcpy(old->name, real_packet->name);
63251 sz_strlcpy(old->rule_name, real_packet->rule_name);
63252 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63253 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63254 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63255 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63256 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63257 old->build_cost = real_packet->build_cost;
63258 old->upkeep = real_packet->upkeep;
63259 old->sabotage = real_packet->sabotage;
63260 old->flags = real_packet->flags;
63261 sz_strlcpy(old->soundtag, real_packet->soundtag);
63262 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63263 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63264 if (real_packet->helptext) {
63265 strvec_copy(old->helptext, real_packet->helptext);
63266 } else {
63267 strvec_clear(old->helptext);
63268 }
63269 }
63270
63271#else /* FREECIV_DELTA_PROTOCOL */
63272#ifdef FREECIV_JSON_CONNECTION
63273 field_addr.name = "id";
63274#endif /* FREECIV_JSON_CONNECTION */
63275
63276 {
63277 int readin;
63278
63279 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63281 }
63282 real_packet->id = readin;
63283 }
63284
63285#ifdef FREECIV_JSON_CONNECTION
63286 field_addr.name = "genus";
63287#endif /* FREECIV_JSON_CONNECTION */
63288
63289 {
63290 int readin;
63291
63292 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63294 }
63295 real_packet->genus = readin;
63296 }
63297
63298#ifdef FREECIV_JSON_CONNECTION
63299 field_addr.name = "name";
63300#endif /* FREECIV_JSON_CONNECTION */
63301
63302 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63304 }
63305
63306#ifdef FREECIV_JSON_CONNECTION
63307 field_addr.name = "rule_name";
63308#endif /* FREECIV_JSON_CONNECTION */
63309
63310 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63311 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63312 }
63313
63314#ifdef FREECIV_JSON_CONNECTION
63315 field_addr.name = "graphic_str";
63316#endif /* FREECIV_JSON_CONNECTION */
63317
63318 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63319 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63320 }
63321
63322#ifdef FREECIV_JSON_CONNECTION
63323 field_addr.name = "graphic_alt";
63324#endif /* FREECIV_JSON_CONNECTION */
63325
63326 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63327 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63328 }
63329
63330#ifdef FREECIV_JSON_CONNECTION
63331 field_addr.name = "graphic_alt2";
63332#endif /* FREECIV_JSON_CONNECTION */
63333
63334 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63335 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63336 }
63337
63338#ifdef FREECIV_JSON_CONNECTION
63339 field_addr.name = "reqs";
63340#endif /* FREECIV_JSON_CONNECTION */
63341
63342 {
63343 int i;
63344
63345 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63347 }
63349
63350#ifdef FREECIV_JSON_CONNECTION
63351 /* Enter array. */
63352 field_addr.sub_location = plocation_elem_new(0);
63353#endif /* FREECIV_JSON_CONNECTION */
63354
63355 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63356#ifdef FREECIV_JSON_CONNECTION
63357 /* Next array element */
63358 field_addr.sub_location->number = i;
63359#endif /* FREECIV_JSON_CONNECTION */
63360
63361 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63363 }
63364 }
63365
63366#ifdef FREECIV_JSON_CONNECTION
63367 /* Exit array. */
63368 FC_FREE(field_addr.sub_location);
63369#endif /* FREECIV_JSON_CONNECTION */
63370 }
63371
63372#ifdef FREECIV_JSON_CONNECTION
63373 field_addr.name = "obs_reqs";
63374#endif /* FREECIV_JSON_CONNECTION */
63375
63376 {
63377 int i;
63378
63379 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63381 }
63383
63384#ifdef FREECIV_JSON_CONNECTION
63385 /* Enter array. */
63386 field_addr.sub_location = plocation_elem_new(0);
63387#endif /* FREECIV_JSON_CONNECTION */
63388
63389 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63390#ifdef FREECIV_JSON_CONNECTION
63391 /* Next array element */
63392 field_addr.sub_location->number = i;
63393#endif /* FREECIV_JSON_CONNECTION */
63394
63395 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63397 }
63398 }
63399
63400#ifdef FREECIV_JSON_CONNECTION
63401 /* Exit array. */
63402 FC_FREE(field_addr.sub_location);
63403#endif /* FREECIV_JSON_CONNECTION */
63404 }
63405
63406#ifdef FREECIV_JSON_CONNECTION
63407 field_addr.name = "build_cost";
63408#endif /* FREECIV_JSON_CONNECTION */
63409
63410 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63411 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63412 }
63413
63414#ifdef FREECIV_JSON_CONNECTION
63415 field_addr.name = "upkeep";
63416#endif /* FREECIV_JSON_CONNECTION */
63417
63418 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63420 }
63421
63422#ifdef FREECIV_JSON_CONNECTION
63423 field_addr.name = "sabotage";
63424#endif /* FREECIV_JSON_CONNECTION */
63425
63426 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63428 }
63429
63430#ifdef FREECIV_JSON_CONNECTION
63431 field_addr.name = "flags";
63432#endif /* FREECIV_JSON_CONNECTION */
63433
63434 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63436 }
63437
63438#ifdef FREECIV_JSON_CONNECTION
63439 field_addr.name = "soundtag";
63440#endif /* FREECIV_JSON_CONNECTION */
63441
63442 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63444 }
63445
63446#ifdef FREECIV_JSON_CONNECTION
63447 field_addr.name = "soundtag_alt";
63448#endif /* FREECIV_JSON_CONNECTION */
63449
63450 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63451 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63452 }
63453
63454#ifdef FREECIV_JSON_CONNECTION
63455 field_addr.name = "soundtag_alt2";
63456#endif /* FREECIV_JSON_CONNECTION */
63457
63458 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63459 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63460 }
63461
63462#ifdef FREECIV_JSON_CONNECTION
63463 field_addr.name = "helptext";
63464#endif /* FREECIV_JSON_CONNECTION */
63465
63466 {
63467 int i;
63468
63469 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63471 }
63472 strvec_reserve(real_packet->helptext, i);
63473
63474#ifdef FREECIV_JSON_CONNECTION
63475 /* Enter array. */
63476 field_addr.sub_location = plocation_elem_new(0);
63477#endif /* FREECIV_JSON_CONNECTION */
63478
63479 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63480#ifdef FREECIV_JSON_CONNECTION
63481 /* Next array element */
63482 field_addr.sub_location->number = i;
63483#endif /* FREECIV_JSON_CONNECTION */
63484
63485 {
63486 char readin[MAX_LEN_PACKET];
63487
63488 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63489 || !strvec_set(real_packet->helptext, i, readin)) {
63491 }
63492 }
63493 }
63494
63495#ifdef FREECIV_JSON_CONNECTION
63496 /* Exit array. */
63497 FC_FREE(field_addr.sub_location);
63498#endif /* FREECIV_JSON_CONNECTION */
63499 }
63500#endif /* FREECIV_DELTA_PROTOCOL */
63501
63503#undef FREE_PACKET_STRUCT
63504}
63505
63507{
63508 const struct packet_ruleset_building *real_packet = packet;
63509 int e;
63511
63512 log_packet_detailed("packet_ruleset_building_100: sending info about ()");
63513
63514#ifdef FREECIV_DELTA_PROTOCOL
63517 bool differ;
63518 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BUILDING;
63519
63520 if (nullptr == *hash) {
63522 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
63523 }
63524 BV_CLR_ALL(fields);
63525
63526 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
63527 old = fc_malloc(sizeof(*old));
63528 /* temporary bitcopy just to insert correctly */
63529 *old = *real_packet;
63532 }
63533
63534 differ = (old->id != real_packet->id);
63535 if (differ) {
63536 BV_SET(fields, 0);
63537 }
63538
63539 differ = (old->genus != real_packet->genus);
63540 if (differ) {
63541 BV_SET(fields, 1);
63542 }
63543
63544 differ = (strcmp(old->name, real_packet->name) != 0);
63545 if (differ) {
63546 BV_SET(fields, 2);
63547 }
63548
63549 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
63550 if (differ) {
63551 BV_SET(fields, 3);
63552 }
63553
63554 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
63555 if (differ) {
63556 BV_SET(fields, 4);
63557 }
63558
63559 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
63560 if (differ) {
63561 BV_SET(fields, 5);
63562 }
63563
63564 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
63565 if (differ) {
63566 BV_SET(fields, 6);
63567 }
63568
63570 if (!differ) {
63571 int i;
63572
63573 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
63574 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
63575 if (differ) {
63576 break;
63577 }
63578 }
63579 }
63580 if (differ) {
63581 BV_SET(fields, 7);
63582 }
63583
63585 if (!differ) {
63586 int i;
63587
63588 for (i = 0; i < requirement_vector_size(&old->obs_reqs); i++) {
63589 differ = !are_requirements_equal(&old->obs_reqs.p[i], &real_packet->obs_reqs.p[i]);
63590 if (differ) {
63591 break;
63592 }
63593 }
63594 }
63595 if (differ) {
63596 BV_SET(fields, 8);
63597 }
63598
63599 differ = (old->build_cost != real_packet->build_cost);
63600 if (differ) {
63601 BV_SET(fields, 9);
63602 }
63603
63604 differ = (old->upkeep != real_packet->upkeep);
63605 if (differ) {
63606 BV_SET(fields, 10);
63607 }
63608
63609 differ = (old->sabotage != real_packet->sabotage);
63610 if (differ) {
63611 BV_SET(fields, 11);
63612 }
63613
63614 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
63615 if (differ) {
63616 BV_SET(fields, 12);
63617 }
63618
63619 differ = (strcmp(old->soundtag, real_packet->soundtag) != 0);
63620 if (differ) {
63621 BV_SET(fields, 13);
63622 }
63623
63624 differ = (strcmp(old->soundtag_alt, real_packet->soundtag_alt) != 0);
63625 if (differ) {
63626 BV_SET(fields, 14);
63627 }
63628
63629 differ = (strcmp(old->soundtag_alt2, real_packet->soundtag_alt2) != 0);
63630 if (differ) {
63631 BV_SET(fields, 15);
63632 }
63633
63634 if (real_packet->helptext) {
63635 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
63636 } else {
63637 differ = (strvec_size(old->helptext) > 0);
63638 }
63639 if (differ) {
63640 BV_SET(fields, 16);
63641 }
63642#endif /* FREECIV_DELTA_PROTOCOL */
63643
63644#ifdef FREECIV_JSON_CONNECTION
63645 struct plocation field_addr;
63646 {
63647 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
63650 }
63651#endif /* FREECIV_JSON_CONNECTION */
63652
63653#ifdef FREECIV_DELTA_PROTOCOL
63654#ifdef FREECIV_JSON_CONNECTION
63655 field_addr.name = "fields";
63656#endif /* FREECIV_JSON_CONNECTION */
63657 e = 0;
63658 e |= DIO_BV_PUT(&dout, &field_addr, fields);
63659 if (e) {
63660 log_packet_detailed("fields bitvector error detected");
63661 }
63662
63663 if (BV_ISSET(fields, 0)) {
63664 log_packet_detailed(" field 'id' has changed");
63665
63666#ifdef FREECIV_JSON_CONNECTION
63667 field_addr.name = "id";
63668#endif /* FREECIV_JSON_CONNECTION */
63669 e = 0;
63670
63671 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
63672
63673 if (e) {
63674 log_packet_detailed("'id' field error detected");
63675 }
63676 }
63677
63678 if (BV_ISSET(fields, 1)) {
63679 log_packet_detailed(" field 'genus' has changed");
63680
63681#ifdef FREECIV_JSON_CONNECTION
63682 field_addr.name = "genus";
63683#endif /* FREECIV_JSON_CONNECTION */
63684 e = 0;
63685
63686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
63687
63688 if (e) {
63689 log_packet_detailed("'genus' field error detected");
63690 }
63691 }
63692
63693 if (BV_ISSET(fields, 2)) {
63694 log_packet_detailed(" field 'name' has changed");
63695
63696#ifdef FREECIV_JSON_CONNECTION
63697 field_addr.name = "name";
63698#endif /* FREECIV_JSON_CONNECTION */
63699 e = 0;
63700
63701 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63702
63703 if (e) {
63704 log_packet_detailed("'name' field error detected");
63705 }
63706 }
63707
63708 if (BV_ISSET(fields, 3)) {
63709 log_packet_detailed(" field 'rule_name' has changed");
63710
63711#ifdef FREECIV_JSON_CONNECTION
63712 field_addr.name = "rule_name";
63713#endif /* FREECIV_JSON_CONNECTION */
63714 e = 0;
63715
63716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63717
63718 if (e) {
63719 log_packet_detailed("'rule_name' field error detected");
63720 }
63721 }
63722
63723 if (BV_ISSET(fields, 4)) {
63724 log_packet_detailed(" field 'graphic_str' has changed");
63725
63726#ifdef FREECIV_JSON_CONNECTION
63727 field_addr.name = "graphic_str";
63728#endif /* FREECIV_JSON_CONNECTION */
63729 e = 0;
63730
63731 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
63732
63733 if (e) {
63734 log_packet_detailed("'graphic_str' field error detected");
63735 }
63736 }
63737
63738 if (BV_ISSET(fields, 5)) {
63739 log_packet_detailed(" field 'graphic_alt' has changed");
63740
63741#ifdef FREECIV_JSON_CONNECTION
63742 field_addr.name = "graphic_alt";
63743#endif /* FREECIV_JSON_CONNECTION */
63744 e = 0;
63745
63746 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
63747
63748 if (e) {
63749 log_packet_detailed("'graphic_alt' field error detected");
63750 }
63751 }
63752
63753 if (BV_ISSET(fields, 6)) {
63754 log_packet_detailed(" field 'graphic_alt2' has changed");
63755
63756#ifdef FREECIV_JSON_CONNECTION
63757 field_addr.name = "graphic_alt2";
63758#endif /* FREECIV_JSON_CONNECTION */
63759 e = 0;
63760
63761 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
63762
63763 if (e) {
63764 log_packet_detailed("'graphic_alt2' field error detected");
63765 }
63766 }
63767
63768 if (BV_ISSET(fields, 7)) {
63769 log_packet_detailed(" field 'reqs' has changed");
63770
63771#ifdef FREECIV_JSON_CONNECTION
63772 field_addr.name = "reqs";
63773#endif /* FREECIV_JSON_CONNECTION */
63774 e = 0;
63775
63776 {
63777 int i;
63778
63781
63782#ifdef FREECIV_JSON_CONNECTION
63783 /* Enter array. */
63784 field_addr.sub_location = plocation_elem_new(0);
63785#endif /* FREECIV_JSON_CONNECTION */
63786
63787 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63788#ifdef FREECIV_JSON_CONNECTION
63789 /* Next array element. */
63790 field_addr.sub_location->number = i;
63791#endif /* FREECIV_JSON_CONNECTION */
63792
63793 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
63794 }
63795
63796#ifdef FREECIV_JSON_CONNECTION
63797 /* Exit array. */
63798 FC_FREE(field_addr.sub_location);
63799#endif /* FREECIV_JSON_CONNECTION */
63800 }
63801
63802 if (e) {
63803 log_packet_detailed("'reqs' field error detected");
63804 }
63805 }
63806
63807 if (BV_ISSET(fields, 8)) {
63808 log_packet_detailed(" field 'obs_reqs' has changed");
63809
63810#ifdef FREECIV_JSON_CONNECTION
63811 field_addr.name = "obs_reqs";
63812#endif /* FREECIV_JSON_CONNECTION */
63813 e = 0;
63814
63815 {
63816 int i;
63817
63820
63821#ifdef FREECIV_JSON_CONNECTION
63822 /* Enter array. */
63823 field_addr.sub_location = plocation_elem_new(0);
63824#endif /* FREECIV_JSON_CONNECTION */
63825
63826 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63827#ifdef FREECIV_JSON_CONNECTION
63828 /* Next array element. */
63829 field_addr.sub_location->number = i;
63830#endif /* FREECIV_JSON_CONNECTION */
63831
63832 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
63833 }
63834
63835#ifdef FREECIV_JSON_CONNECTION
63836 /* Exit array. */
63837 FC_FREE(field_addr.sub_location);
63838#endif /* FREECIV_JSON_CONNECTION */
63839 }
63840
63841 if (e) {
63842 log_packet_detailed("'obs_reqs' field error detected");
63843 }
63844 }
63845
63846 if (BV_ISSET(fields, 9)) {
63847 log_packet_detailed(" field 'build_cost' has changed");
63848
63849#ifdef FREECIV_JSON_CONNECTION
63850 field_addr.name = "build_cost";
63851#endif /* FREECIV_JSON_CONNECTION */
63852 e = 0;
63853
63854 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
63855
63856 if (e) {
63857 log_packet_detailed("'build_cost' field error detected");
63858 }
63859 }
63860
63861 if (BV_ISSET(fields, 10)) {
63862 log_packet_detailed(" field 'upkeep' has changed");
63863
63864#ifdef FREECIV_JSON_CONNECTION
63865 field_addr.name = "upkeep";
63866#endif /* FREECIV_JSON_CONNECTION */
63867 e = 0;
63868
63869 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
63870
63871 if (e) {
63872 log_packet_detailed("'upkeep' field error detected");
63873 }
63874 }
63875
63876 if (BV_ISSET(fields, 11)) {
63877 log_packet_detailed(" field 'sabotage' has changed");
63878
63879#ifdef FREECIV_JSON_CONNECTION
63880 field_addr.name = "sabotage";
63881#endif /* FREECIV_JSON_CONNECTION */
63882 e = 0;
63883
63884 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
63885
63886 if (e) {
63887 log_packet_detailed("'sabotage' field error detected");
63888 }
63889 }
63890
63891 if (BV_ISSET(fields, 12)) {
63892 log_packet_detailed(" field 'flags' has changed");
63893
63894#ifdef FREECIV_JSON_CONNECTION
63895 field_addr.name = "flags";
63896#endif /* FREECIV_JSON_CONNECTION */
63897 e = 0;
63898
63899 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
63900
63901 if (e) {
63902 log_packet_detailed("'flags' field error detected");
63903 }
63904 }
63905
63906 if (BV_ISSET(fields, 13)) {
63907 log_packet_detailed(" field 'soundtag' has changed");
63908
63909#ifdef FREECIV_JSON_CONNECTION
63910 field_addr.name = "soundtag";
63911#endif /* FREECIV_JSON_CONNECTION */
63912 e = 0;
63913
63914 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
63915
63916 if (e) {
63917 log_packet_detailed("'soundtag' field error detected");
63918 }
63919 }
63920
63921 if (BV_ISSET(fields, 14)) {
63922 log_packet_detailed(" field 'soundtag_alt' has changed");
63923
63924#ifdef FREECIV_JSON_CONNECTION
63925 field_addr.name = "soundtag_alt";
63926#endif /* FREECIV_JSON_CONNECTION */
63927 e = 0;
63928
63929 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
63930
63931 if (e) {
63932 log_packet_detailed("'soundtag_alt' field error detected");
63933 }
63934 }
63935
63936 if (BV_ISSET(fields, 15)) {
63937 log_packet_detailed(" field 'soundtag_alt2' has changed");
63938
63939#ifdef FREECIV_JSON_CONNECTION
63940 field_addr.name = "soundtag_alt2";
63941#endif /* FREECIV_JSON_CONNECTION */
63942 e = 0;
63943
63944 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
63945
63946 if (e) {
63947 log_packet_detailed("'soundtag_alt2' field error detected");
63948 }
63949 }
63950
63951 if (BV_ISSET(fields, 16)) {
63952 log_packet_detailed(" field 'helptext' has changed");
63953
63954#ifdef FREECIV_JSON_CONNECTION
63955 field_addr.name = "helptext";
63956#endif /* FREECIV_JSON_CONNECTION */
63957 e = 0;
63958
63959 if (!real_packet->helptext) {
63960 /* Transmit null as empty */
63961 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
63962 } else {
63963 int i;
63964
63966 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
63967
63968#ifdef FREECIV_JSON_CONNECTION
63969 /* Enter array. */
63970 field_addr.sub_location = plocation_elem_new(0);
63971#endif /* FREECIV_JSON_CONNECTION */
63972
63973 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63974#ifdef FREECIV_JSON_CONNECTION
63975 /* Next array element. */
63976 field_addr.sub_location->number = i;
63977#endif /* FREECIV_JSON_CONNECTION */
63978
63979 {
63980 const char *pstr = strvec_get(real_packet->helptext, i);
63981
63982 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
63983 }
63984 }
63985
63986#ifdef FREECIV_JSON_CONNECTION
63987 /* Exit array. */
63988 FC_FREE(field_addr.sub_location);
63989#endif /* FREECIV_JSON_CONNECTION */
63990 }
63991
63992 if (e) {
63993 log_packet_detailed("'helptext' field error detected");
63994 }
63995 }
63996
63997 old->id = real_packet->id;
63998 old->genus = real_packet->genus;
63999 sz_strlcpy(old->name, real_packet->name);
64000 sz_strlcpy(old->rule_name, real_packet->rule_name);
64001 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
64002 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
64003 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
64004 requirement_vector_copy(&old->reqs, &real_packet->reqs);
64005 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
64006 old->build_cost = real_packet->build_cost;
64007 old->upkeep = real_packet->upkeep;
64008 old->sabotage = real_packet->sabotage;
64009 old->flags = real_packet->flags;
64010 sz_strlcpy(old->soundtag, real_packet->soundtag);
64011 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
64012 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
64013 if (real_packet->helptext) {
64014 strvec_copy(old->helptext, real_packet->helptext);
64015 } else {
64016 strvec_clear(old->helptext);
64017 }
64018
64019#else /* FREECIV_DELTA_PROTOCOL */
64020#ifdef FREECIV_JSON_CONNECTION
64021 field_addr.name = "id";
64022#endif /* FREECIV_JSON_CONNECTION */
64023 e = 0;
64024
64025 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64026
64027 if (e) {
64028 log_packet_detailed("'id' field error detected");
64029 }
64030
64031#ifdef FREECIV_JSON_CONNECTION
64032 field_addr.name = "genus";
64033#endif /* FREECIV_JSON_CONNECTION */
64034 e = 0;
64035
64036 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
64037
64038 if (e) {
64039 log_packet_detailed("'genus' field error detected");
64040 }
64041
64042#ifdef FREECIV_JSON_CONNECTION
64043 field_addr.name = "name";
64044#endif /* FREECIV_JSON_CONNECTION */
64045 e = 0;
64046
64047 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64048
64049 if (e) {
64050 log_packet_detailed("'name' field error detected");
64051 }
64052
64053#ifdef FREECIV_JSON_CONNECTION
64054 field_addr.name = "rule_name";
64055#endif /* FREECIV_JSON_CONNECTION */
64056 e = 0;
64057
64058 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64059
64060 if (e) {
64061 log_packet_detailed("'rule_name' field error detected");
64062 }
64063
64064#ifdef FREECIV_JSON_CONNECTION
64065 field_addr.name = "graphic_str";
64066#endif /* FREECIV_JSON_CONNECTION */
64067 e = 0;
64068
64069 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64070
64071 if (e) {
64072 log_packet_detailed("'graphic_str' field error detected");
64073 }
64074
64075#ifdef FREECIV_JSON_CONNECTION
64076 field_addr.name = "graphic_alt";
64077#endif /* FREECIV_JSON_CONNECTION */
64078 e = 0;
64079
64080 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64081
64082 if (e) {
64083 log_packet_detailed("'graphic_alt' field error detected");
64084 }
64085
64086#ifdef FREECIV_JSON_CONNECTION
64087 field_addr.name = "graphic_alt2";
64088#endif /* FREECIV_JSON_CONNECTION */
64089 e = 0;
64090
64091 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
64092
64093 if (e) {
64094 log_packet_detailed("'graphic_alt2' field error detected");
64095 }
64096
64097#ifdef FREECIV_JSON_CONNECTION
64098 field_addr.name = "reqs";
64099#endif /* FREECIV_JSON_CONNECTION */
64100 e = 0;
64101
64102 {
64103 int i;
64104
64107
64108#ifdef FREECIV_JSON_CONNECTION
64109 /* Enter array. */
64110 field_addr.sub_location = plocation_elem_new(0);
64111#endif /* FREECIV_JSON_CONNECTION */
64112
64113 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
64114#ifdef FREECIV_JSON_CONNECTION
64115 /* Next array element. */
64116 field_addr.sub_location->number = i;
64117#endif /* FREECIV_JSON_CONNECTION */
64118
64119 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
64120 }
64121
64122#ifdef FREECIV_JSON_CONNECTION
64123 /* Exit array. */
64124 FC_FREE(field_addr.sub_location);
64125#endif /* FREECIV_JSON_CONNECTION */
64126 }
64127
64128 if (e) {
64129 log_packet_detailed("'reqs' field error detected");
64130 }
64131
64132#ifdef FREECIV_JSON_CONNECTION
64133 field_addr.name = "obs_reqs";
64134#endif /* FREECIV_JSON_CONNECTION */
64135 e = 0;
64136
64137 {
64138 int i;
64139
64142
64143#ifdef FREECIV_JSON_CONNECTION
64144 /* Enter array. */
64145 field_addr.sub_location = plocation_elem_new(0);
64146#endif /* FREECIV_JSON_CONNECTION */
64147
64148 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
64149#ifdef FREECIV_JSON_CONNECTION
64150 /* Next array element. */
64151 field_addr.sub_location->number = i;
64152#endif /* FREECIV_JSON_CONNECTION */
64153
64154 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
64155 }
64156
64157#ifdef FREECIV_JSON_CONNECTION
64158 /* Exit array. */
64159 FC_FREE(field_addr.sub_location);
64160#endif /* FREECIV_JSON_CONNECTION */
64161 }
64162
64163 if (e) {
64164 log_packet_detailed("'obs_reqs' field error detected");
64165 }
64166
64167#ifdef FREECIV_JSON_CONNECTION
64168 field_addr.name = "build_cost";
64169#endif /* FREECIV_JSON_CONNECTION */
64170 e = 0;
64171
64172 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
64173
64174 if (e) {
64175 log_packet_detailed("'build_cost' field error detected");
64176 }
64177
64178#ifdef FREECIV_JSON_CONNECTION
64179 field_addr.name = "upkeep";
64180#endif /* FREECIV_JSON_CONNECTION */
64181 e = 0;
64182
64183 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
64184
64185 if (e) {
64186 log_packet_detailed("'upkeep' field error detected");
64187 }
64188
64189#ifdef FREECIV_JSON_CONNECTION
64190 field_addr.name = "sabotage";
64191#endif /* FREECIV_JSON_CONNECTION */
64192 e = 0;
64193
64194 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
64195
64196 if (e) {
64197 log_packet_detailed("'sabotage' field error detected");
64198 }
64199
64200#ifdef FREECIV_JSON_CONNECTION
64201 field_addr.name = "flags";
64202#endif /* FREECIV_JSON_CONNECTION */
64203 e = 0;
64204
64205 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
64206
64207 if (e) {
64208 log_packet_detailed("'flags' field error detected");
64209 }
64210
64211#ifdef FREECIV_JSON_CONNECTION
64212 field_addr.name = "soundtag";
64213#endif /* FREECIV_JSON_CONNECTION */
64214 e = 0;
64215
64216 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
64217
64218 if (e) {
64219 log_packet_detailed("'soundtag' field error detected");
64220 }
64221
64222#ifdef FREECIV_JSON_CONNECTION
64223 field_addr.name = "soundtag_alt";
64224#endif /* FREECIV_JSON_CONNECTION */
64225 e = 0;
64226
64227 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
64228
64229 if (e) {
64230 log_packet_detailed("'soundtag_alt' field error detected");
64231 }
64232
64233#ifdef FREECIV_JSON_CONNECTION
64234 field_addr.name = "soundtag_alt2";
64235#endif /* FREECIV_JSON_CONNECTION */
64236 e = 0;
64237
64238 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
64239
64240 if (e) {
64241 log_packet_detailed("'soundtag_alt2' field error detected");
64242 }
64243
64244#ifdef FREECIV_JSON_CONNECTION
64245 field_addr.name = "helptext";
64246#endif /* FREECIV_JSON_CONNECTION */
64247 e = 0;
64248
64249 if (!real_packet->helptext) {
64250 /* Transmit null as empty */
64251 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
64252 } else {
64253 int i;
64254
64256 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
64257
64258#ifdef FREECIV_JSON_CONNECTION
64259 /* Enter array. */
64260 field_addr.sub_location = plocation_elem_new(0);
64261#endif /* FREECIV_JSON_CONNECTION */
64262
64263 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
64264#ifdef FREECIV_JSON_CONNECTION
64265 /* Next array element. */
64266 field_addr.sub_location->number = i;
64267#endif /* FREECIV_JSON_CONNECTION */
64268
64269 {
64270 const char *pstr = strvec_get(real_packet->helptext, i);
64271
64272 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
64273 }
64274 }
64275
64276#ifdef FREECIV_JSON_CONNECTION
64277 /* Exit array. */
64278 FC_FREE(field_addr.sub_location);
64279#endif /* FREECIV_JSON_CONNECTION */
64280 }
64281
64282 if (e) {
64283 log_packet_detailed("'helptext' field error detected");
64284 }
64285#endif /* FREECIV_DELTA_PROTOCOL */
64286
64288}
64289
64291{
64292 if (!pc->used) {
64293 log_error("WARNING: trying to send data to the closed connection %s",
64295 return -1;
64296 }
64297 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet != nullptr, -1,
64298 "Handler for PACKET_RULESET_BUILDING not installed");
64299 return pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet(pc, packet);
64300}
64301
64303{
64304 conn_list_iterate(dest, pconn) {
64307}
64308
64310{
64311 memset(packet, 0, sizeof(*packet));
64312}
64313
64314#define free_packet_ruleset_impr_flag(_packet) (void) 0
64315#define destroy_packet_ruleset_impr_flag free
64316
64317#ifdef FREECIV_DELTA_PROTOCOL
64318#define hash_packet_ruleset_impr_flag_100 hash_const
64319#define cmp_packet_ruleset_impr_flag_100 cmp_const
64321#endif /* FREECIV_DELTA_PROTOCOL */
64322
64324{
64325#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_impr_flag(_packet)
64327
64328#ifdef FREECIV_JSON_CONNECTION
64329 struct plocation field_addr;
64330 {
64331 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64334 }
64335#endif /* FREECIV_JSON_CONNECTION */
64336
64337 log_packet_detailed("packet_ruleset_impr_flag_100: got info about ()");
64338
64339#ifdef FREECIV_DELTA_PROTOCOL
64342 struct genhash **hash = pc->phs.received + PACKET_RULESET_IMPR_FLAG;
64343
64344 if (nullptr == *hash) {
64346 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64347 }
64348
64349 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64350 *real_packet = *old;
64351 } else {
64352 /* packet is already initialized empty */
64353 log_packet_detailed(" no old info");
64354 }
64355
64356#ifdef FREECIV_JSON_CONNECTION
64357 field_addr.name = "fields";
64358#endif /* FREECIV_JSON_CONNECTION */
64359 DIO_BV_GET(&din, &field_addr, fields);
64360
64361 if (BV_ISSET(fields, 0)) {
64362 log_packet_detailed(" got field 'id'");
64363
64364#ifdef FREECIV_JSON_CONNECTION
64365 field_addr.name = "id";
64366#endif /* FREECIV_JSON_CONNECTION */
64367
64368 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64370 }
64371 }
64372
64373 if (BV_ISSET(fields, 1)) {
64374 log_packet_detailed(" got field 'name'");
64375
64376#ifdef FREECIV_JSON_CONNECTION
64377 field_addr.name = "name";
64378#endif /* FREECIV_JSON_CONNECTION */
64379
64380 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64382 }
64383 }
64384
64385 if (BV_ISSET(fields, 2)) {
64386 log_packet_detailed(" got field 'helptxt'");
64387
64388#ifdef FREECIV_JSON_CONNECTION
64389 field_addr.name = "helptxt";
64390#endif /* FREECIV_JSON_CONNECTION */
64391
64392 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64394 }
64395 }
64396
64397 if (nullptr == old) {
64398 old = fc_malloc(sizeof(*old));
64400 *old = *real_packet;
64402 } else {
64403 *old = *real_packet;
64404 }
64405
64406#else /* FREECIV_DELTA_PROTOCOL */
64407#ifdef FREECIV_JSON_CONNECTION
64408 field_addr.name = "id";
64409#endif /* FREECIV_JSON_CONNECTION */
64410
64411 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64413 }
64414
64415#ifdef FREECIV_JSON_CONNECTION
64416 field_addr.name = "name";
64417#endif /* FREECIV_JSON_CONNECTION */
64418
64419 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64421 }
64422
64423#ifdef FREECIV_JSON_CONNECTION
64424 field_addr.name = "helptxt";
64425#endif /* FREECIV_JSON_CONNECTION */
64426
64427 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64429 }
64430#endif /* FREECIV_DELTA_PROTOCOL */
64431
64433#undef FREE_PACKET_STRUCT
64434}
64435
64437{
64438 const struct packet_ruleset_impr_flag *real_packet = packet;
64439 int e;
64441
64442 log_packet_detailed("packet_ruleset_impr_flag_100: sending info about ()");
64443
64444#ifdef FREECIV_DELTA_PROTOCOL
64447 bool differ;
64448 struct genhash **hash = pc->phs.sent + PACKET_RULESET_IMPR_FLAG;
64449
64450 if (nullptr == *hash) {
64452 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64453 }
64454 BV_CLR_ALL(fields);
64455
64456 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64457 old = fc_malloc(sizeof(*old));
64458 /* temporary bitcopy just to insert correctly */
64459 *old = *real_packet;
64462 }
64463
64464 differ = (old->id != real_packet->id);
64465 if (differ) {
64466 BV_SET(fields, 0);
64467 }
64468
64469 differ = (strcmp(old->name, real_packet->name) != 0);
64470 if (differ) {
64471 BV_SET(fields, 1);
64472 }
64473
64474 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
64475 if (differ) {
64476 BV_SET(fields, 2);
64477 }
64478#endif /* FREECIV_DELTA_PROTOCOL */
64479
64480#ifdef FREECIV_JSON_CONNECTION
64481 struct plocation field_addr;
64482 {
64483 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64486 }
64487#endif /* FREECIV_JSON_CONNECTION */
64488
64489#ifdef FREECIV_DELTA_PROTOCOL
64490#ifdef FREECIV_JSON_CONNECTION
64491 field_addr.name = "fields";
64492#endif /* FREECIV_JSON_CONNECTION */
64493 e = 0;
64494 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64495 if (e) {
64496 log_packet_detailed("fields bitvector error detected");
64497 }
64498
64499 if (BV_ISSET(fields, 0)) {
64500 log_packet_detailed(" field 'id' has changed");
64501
64502#ifdef FREECIV_JSON_CONNECTION
64503 field_addr.name = "id";
64504#endif /* FREECIV_JSON_CONNECTION */
64505 e = 0;
64506
64507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64508
64509 if (e) {
64510 log_packet_detailed("'id' field error detected");
64511 }
64512 }
64513
64514 if (BV_ISSET(fields, 1)) {
64515 log_packet_detailed(" field 'name' has changed");
64516
64517#ifdef FREECIV_JSON_CONNECTION
64518 field_addr.name = "name";
64519#endif /* FREECIV_JSON_CONNECTION */
64520 e = 0;
64521
64522 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64523
64524 if (e) {
64525 log_packet_detailed("'name' field error detected");
64526 }
64527 }
64528
64529 if (BV_ISSET(fields, 2)) {
64530 log_packet_detailed(" field 'helptxt' has changed");
64531
64532#ifdef FREECIV_JSON_CONNECTION
64533 field_addr.name = "helptxt";
64534#endif /* FREECIV_JSON_CONNECTION */
64535 e = 0;
64536
64537 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
64538
64539 if (e) {
64540 log_packet_detailed("'helptxt' field error detected");
64541 }
64542 }
64543
64544 *old = *real_packet;
64545
64546#else /* FREECIV_DELTA_PROTOCOL */
64547#ifdef FREECIV_JSON_CONNECTION
64548 field_addr.name = "id";
64549#endif /* FREECIV_JSON_CONNECTION */
64550 e = 0;
64551
64552 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64553
64554 if (e) {
64555 log_packet_detailed("'id' field error detected");
64556 }
64557
64558#ifdef FREECIV_JSON_CONNECTION
64559 field_addr.name = "name";
64560#endif /* FREECIV_JSON_CONNECTION */
64561 e = 0;
64562
64563 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64564
64565 if (e) {
64566 log_packet_detailed("'name' field error detected");
64567 }
64568
64569#ifdef FREECIV_JSON_CONNECTION
64570 field_addr.name = "helptxt";
64571#endif /* FREECIV_JSON_CONNECTION */
64572 e = 0;
64573
64574 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
64575
64576 if (e) {
64577 log_packet_detailed("'helptxt' field error detected");
64578 }
64579#endif /* FREECIV_DELTA_PROTOCOL */
64580
64582}
64583
64585{
64586 if (!pc->used) {
64587 log_error("WARNING: trying to send data to the closed connection %s",
64589 return -1;
64590 }
64591 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet != nullptr, -1,
64592 "Handler for PACKET_RULESET_IMPR_FLAG not installed");
64593 return pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet(pc, packet);
64594}
64595
64597{
64598 conn_list_iterate(dest, pconn) {
64601}
64602
64603static inline void init_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
64604{
64605 memset(packet, 0, sizeof(*packet));
64606
64607 packet->helptext = strvec_new();
64608}
64609
64610static inline void free_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
64611{
64612 if (packet->helptext) {
64613 strvec_destroy(packet->helptext);
64614 packet->helptext = nullptr;
64615 }
64616}
64617
64618static inline void destroy_packet_ruleset_terrain(void *packet)
64619{
64621 free(packet);
64622}
64623
64624#ifdef FREECIV_DELTA_PROTOCOL
64625#define hash_packet_ruleset_terrain_100 hash_const
64626#define cmp_packet_ruleset_terrain_100 cmp_const
64628#endif /* FREECIV_DELTA_PROTOCOL */
64629
64631{
64632#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain(_packet)
64634
64635#ifdef FREECIV_JSON_CONNECTION
64636 struct plocation field_addr;
64637 {
64638 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64641 }
64642#endif /* FREECIV_JSON_CONNECTION */
64643
64644 log_packet_detailed("packet_ruleset_terrain_100: got info about ()");
64645
64646#ifdef FREECIV_DELTA_PROTOCOL
64649 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN;
64650
64651 if (nullptr == *hash) {
64653 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
64654 }
64655
64656 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64657 real_packet->id = old->id;
64658 real_packet->tclass = old->tclass;
64659 real_packet->flags = old->flags;
64660 real_packet->native_to = old->native_to;
64661 sz_strlcpy(real_packet->name, old->name);
64662 sz_strlcpy(real_packet->rule_name, old->rule_name);
64663 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
64664 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
64665 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
64666 real_packet->movement_cost = old->movement_cost;
64667 real_packet->defense_bonus = old->defense_bonus;
64668 {
64669 int i;
64670
64671 for (i = 0; i < O_LAST; i++) {
64672 real_packet->output[i] = old->output[i];
64673 }
64674 }
64675 real_packet->num_resources = old->num_resources;
64676 {
64677 int i;
64678
64679 for (i = 0; i < old->num_resources; i++) {
64680 real_packet->resources[i] = old->resources[i];
64681 }
64682 }
64683 {
64684 int i;
64685
64686 for (i = 0; i < old->num_resources; i++) {
64687 real_packet->resource_freq[i] = old->resource_freq[i];
64688 }
64689 }
64690 {
64691 int i;
64692
64693 for (i = 0; i < O_LAST; i++) {
64694 real_packet->road_output_incr_pct[i] = old->road_output_incr_pct[i];
64695 }
64696 }
64697 real_packet->base_time = old->base_time;
64698 real_packet->road_time = old->road_time;
64699 real_packet->cultivate_result = old->cultivate_result;
64700 real_packet->cultivate_time = old->cultivate_time;
64701 real_packet->plant_result = old->plant_result;
64702 real_packet->plant_time = old->plant_time;
64703 real_packet->irrigation_food_incr = old->irrigation_food_incr;
64704 real_packet->irrigation_time = old->irrigation_time;
64705 real_packet->mining_shield_incr = old->mining_shield_incr;
64706 real_packet->mining_time = old->mining_time;
64707 real_packet->animal = old->animal;
64708 real_packet->transform_result = old->transform_result;
64709 real_packet->transform_time = old->transform_time;
64710 real_packet->placing_time = old->placing_time;
64711 real_packet->pillage_time = old->pillage_time;
64712 real_packet->extra_count = old->extra_count;
64713 {
64714 int i;
64715
64716 for (i = 0; i < old->extra_count; i++) {
64717 real_packet->extra_removal_times[i] = old->extra_removal_times[i];
64718 }
64719 }
64720 real_packet->color_red = old->color_red;
64721 real_packet->color_green = old->color_green;
64722 real_packet->color_blue = old->color_blue;
64723 if (old->helptext) {
64724 strvec_copy(real_packet->helptext, old->helptext);
64725 } else {
64726 strvec_clear(real_packet->helptext);
64727 }
64728 } else {
64729 /* packet is already initialized empty */
64730 log_packet_detailed(" no old info");
64731 }
64732
64733#ifdef FREECIV_JSON_CONNECTION
64734 field_addr.name = "fields";
64735#endif /* FREECIV_JSON_CONNECTION */
64736 DIO_BV_GET(&din, &field_addr, fields);
64737
64738 if (BV_ISSET(fields, 0)) {
64739 log_packet_detailed(" got field 'id'");
64740
64741#ifdef FREECIV_JSON_CONNECTION
64742 field_addr.name = "id";
64743#endif /* FREECIV_JSON_CONNECTION */
64744
64745 {
64746 int readin;
64747
64748 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64750 }
64751 real_packet->id = readin;
64752 }
64753 }
64754
64755 if (BV_ISSET(fields, 1)) {
64756 log_packet_detailed(" got field 'tclass'");
64757
64758#ifdef FREECIV_JSON_CONNECTION
64759 field_addr.name = "tclass";
64760#endif /* FREECIV_JSON_CONNECTION */
64761
64762 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
64764 }
64765 }
64766
64767 if (BV_ISSET(fields, 2)) {
64768 log_packet_detailed(" got field 'flags'");
64769
64770#ifdef FREECIV_JSON_CONNECTION
64771 field_addr.name = "flags";
64772#endif /* FREECIV_JSON_CONNECTION */
64773
64774 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
64776 }
64777 }
64778
64779 if (BV_ISSET(fields, 3)) {
64780 log_packet_detailed(" got field 'native_to'");
64781
64782#ifdef FREECIV_JSON_CONNECTION
64783 field_addr.name = "native_to";
64784#endif /* FREECIV_JSON_CONNECTION */
64785
64786 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
64787 RECEIVE_PACKET_FIELD_ERROR(native_to);
64788 }
64789 }
64790
64791 if (BV_ISSET(fields, 4)) {
64792 log_packet_detailed(" got field 'name'");
64793
64794#ifdef FREECIV_JSON_CONNECTION
64795 field_addr.name = "name";
64796#endif /* FREECIV_JSON_CONNECTION */
64797
64798 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64800 }
64801 }
64802
64803 if (BV_ISSET(fields, 5)) {
64804 log_packet_detailed(" got field 'rule_name'");
64805
64806#ifdef FREECIV_JSON_CONNECTION
64807 field_addr.name = "rule_name";
64808#endif /* FREECIV_JSON_CONNECTION */
64809
64810 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64811 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64812 }
64813 }
64814
64815 if (BV_ISSET(fields, 6)) {
64816 log_packet_detailed(" got field 'graphic_str'");
64817
64818#ifdef FREECIV_JSON_CONNECTION
64819 field_addr.name = "graphic_str";
64820#endif /* FREECIV_JSON_CONNECTION */
64821
64822 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
64823 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
64824 }
64825 }
64826
64827 if (BV_ISSET(fields, 7)) {
64828 log_packet_detailed(" got field 'graphic_alt'");
64829
64830#ifdef FREECIV_JSON_CONNECTION
64831 field_addr.name = "graphic_alt";
64832#endif /* FREECIV_JSON_CONNECTION */
64833
64834 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
64835 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
64836 }
64837 }
64838
64839 if (BV_ISSET(fields, 8)) {
64840 log_packet_detailed(" got field 'graphic_alt2'");
64841
64842#ifdef FREECIV_JSON_CONNECTION
64843 field_addr.name = "graphic_alt2";
64844#endif /* FREECIV_JSON_CONNECTION */
64845
64846 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
64847 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
64848 }
64849 }
64850
64851 if (BV_ISSET(fields, 9)) {
64852 log_packet_detailed(" got field 'movement_cost'");
64853
64854#ifdef FREECIV_JSON_CONNECTION
64855 field_addr.name = "movement_cost";
64856#endif /* FREECIV_JSON_CONNECTION */
64857
64858 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
64859 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
64860 }
64861 }
64862
64863 if (BV_ISSET(fields, 10)) {
64864 log_packet_detailed(" got field 'defense_bonus'");
64865
64866#ifdef FREECIV_JSON_CONNECTION
64867 field_addr.name = "defense_bonus";
64868#endif /* FREECIV_JSON_CONNECTION */
64869
64870 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
64871 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
64872 }
64873 }
64874
64875 if (BV_ISSET(fields, 11)) {
64876 log_packet_detailed(" got field 'output'");
64877
64878#ifdef FREECIV_JSON_CONNECTION
64879 field_addr.name = "output";
64880#endif /* FREECIV_JSON_CONNECTION */
64881
64882 {
64883 int i;
64884
64885
64886#ifdef FREECIV_JSON_CONNECTION
64887 /* Enter array. */
64888 field_addr.sub_location = plocation_elem_new(0);
64889#endif /* FREECIV_JSON_CONNECTION */
64890
64891 for (i = 0; i < O_LAST; i++) {
64892#ifdef FREECIV_JSON_CONNECTION
64893 /* Next array element */
64894 field_addr.sub_location->number = i;
64895#endif /* FREECIV_JSON_CONNECTION */
64896
64897 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
64899 }
64900 }
64901
64902#ifdef FREECIV_JSON_CONNECTION
64903 /* Exit array. */
64904 FC_FREE(field_addr.sub_location);
64905#endif /* FREECIV_JSON_CONNECTION */
64906 }
64907 }
64908
64909 if (BV_ISSET(fields, 12)) {
64910 log_packet_detailed(" got field 'num_resources'");
64911
64912#ifdef FREECIV_JSON_CONNECTION
64913 field_addr.name = "num_resources";
64914#endif /* FREECIV_JSON_CONNECTION */
64915
64916 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
64917 RECEIVE_PACKET_FIELD_ERROR(num_resources);
64918 }
64919 }
64920
64921 if (BV_ISSET(fields, 13)) {
64922 log_packet_detailed(" got field 'resources'");
64923
64924#ifdef FREECIV_JSON_CONNECTION
64925 field_addr.name = "resources";
64926#endif /* FREECIV_JSON_CONNECTION */
64927
64928 {
64929 int i;
64930
64931 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
64932 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
64933 }
64934
64935#ifdef FREECIV_JSON_CONNECTION
64936 /* Enter array. */
64937 field_addr.sub_location = plocation_elem_new(0);
64938#endif /* FREECIV_JSON_CONNECTION */
64939
64940 for (i = 0; i < real_packet->num_resources; i++) {
64941#ifdef FREECIV_JSON_CONNECTION
64942 /* Next array element */
64943 field_addr.sub_location->number = i;
64944#endif /* FREECIV_JSON_CONNECTION */
64945
64946 {
64947 int readin;
64948
64949 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64951 }
64952 real_packet->resources[i] = readin;
64953 }
64954 }
64955
64956#ifdef FREECIV_JSON_CONNECTION
64957 /* Exit array. */
64958 FC_FREE(field_addr.sub_location);
64959#endif /* FREECIV_JSON_CONNECTION */
64960 }
64961 }
64962
64963 if (BV_ISSET(fields, 14)) {
64964 log_packet_detailed(" got field 'resource_freq'");
64965
64966#ifdef FREECIV_JSON_CONNECTION
64967 field_addr.name = "resource_freq";
64968#endif /* FREECIV_JSON_CONNECTION */
64969
64970 {
64971 int i;
64972
64973 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
64974 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
64975 }
64976
64977#ifdef FREECIV_JSON_CONNECTION
64978 /* Enter array. */
64979 field_addr.sub_location = plocation_elem_new(0);
64980#endif /* FREECIV_JSON_CONNECTION */
64981
64982 for (i = 0; i < real_packet->num_resources; i++) {
64983#ifdef FREECIV_JSON_CONNECTION
64984 /* Next array element */
64985 field_addr.sub_location->number = i;
64986#endif /* FREECIV_JSON_CONNECTION */
64987
64988 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
64989 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
64990 }
64991 }
64992
64993#ifdef FREECIV_JSON_CONNECTION
64994 /* Exit array. */
64995 FC_FREE(field_addr.sub_location);
64996#endif /* FREECIV_JSON_CONNECTION */
64997 }
64998 }
64999
65000 if (BV_ISSET(fields, 15)) {
65001 log_packet_detailed(" got field 'road_output_incr_pct'");
65002
65003#ifdef FREECIV_JSON_CONNECTION
65004 field_addr.name = "road_output_incr_pct";
65005#endif /* FREECIV_JSON_CONNECTION */
65006
65007 {
65008 int i;
65009
65010
65011#ifdef FREECIV_JSON_CONNECTION
65012 /* Enter array. */
65013 field_addr.sub_location = plocation_elem_new(0);
65014#endif /* FREECIV_JSON_CONNECTION */
65015
65016 for (i = 0; i < O_LAST; i++) {
65017#ifdef FREECIV_JSON_CONNECTION
65018 /* Next array element */
65019 field_addr.sub_location->number = i;
65020#endif /* FREECIV_JSON_CONNECTION */
65021
65022 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
65023 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
65024 }
65025 }
65026
65027#ifdef FREECIV_JSON_CONNECTION
65028 /* Exit array. */
65029 FC_FREE(field_addr.sub_location);
65030#endif /* FREECIV_JSON_CONNECTION */
65031 }
65032 }
65033
65034 if (BV_ISSET(fields, 16)) {
65035 log_packet_detailed(" got field 'base_time'");
65036
65037#ifdef FREECIV_JSON_CONNECTION
65038 field_addr.name = "base_time";
65039#endif /* FREECIV_JSON_CONNECTION */
65040
65041 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
65042 RECEIVE_PACKET_FIELD_ERROR(base_time);
65043 }
65044 }
65045
65046 if (BV_ISSET(fields, 17)) {
65047 log_packet_detailed(" got field 'road_time'");
65048
65049#ifdef FREECIV_JSON_CONNECTION
65050 field_addr.name = "road_time";
65051#endif /* FREECIV_JSON_CONNECTION */
65052
65053 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
65054 RECEIVE_PACKET_FIELD_ERROR(road_time);
65055 }
65056 }
65057
65058 if (BV_ISSET(fields, 18)) {
65059 log_packet_detailed(" got field 'cultivate_result'");
65060
65061#ifdef FREECIV_JSON_CONNECTION
65062 field_addr.name = "cultivate_result";
65063#endif /* FREECIV_JSON_CONNECTION */
65064
65065 {
65066 int readin;
65067
65068 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65069 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
65070 }
65071 real_packet->cultivate_result = readin;
65072 }
65073 }
65074
65075 if (BV_ISSET(fields, 19)) {
65076 log_packet_detailed(" got field 'cultivate_time'");
65077
65078#ifdef FREECIV_JSON_CONNECTION
65079 field_addr.name = "cultivate_time";
65080#endif /* FREECIV_JSON_CONNECTION */
65081
65082 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
65083 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
65084 }
65085 }
65086
65087 if (BV_ISSET(fields, 20)) {
65088 log_packet_detailed(" got field 'plant_result'");
65089
65090#ifdef FREECIV_JSON_CONNECTION
65091 field_addr.name = "plant_result";
65092#endif /* FREECIV_JSON_CONNECTION */
65093
65094 {
65095 int readin;
65096
65097 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65098 RECEIVE_PACKET_FIELD_ERROR(plant_result);
65099 }
65100 real_packet->plant_result = readin;
65101 }
65102 }
65103
65104 if (BV_ISSET(fields, 21)) {
65105 log_packet_detailed(" got field 'plant_time'");
65106
65107#ifdef FREECIV_JSON_CONNECTION
65108 field_addr.name = "plant_time";
65109#endif /* FREECIV_JSON_CONNECTION */
65110
65111 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
65112 RECEIVE_PACKET_FIELD_ERROR(plant_time);
65113 }
65114 }
65115
65116 if (BV_ISSET(fields, 22)) {
65117 log_packet_detailed(" got field 'irrigation_food_incr'");
65118
65119#ifdef FREECIV_JSON_CONNECTION
65120 field_addr.name = "irrigation_food_incr";
65121#endif /* FREECIV_JSON_CONNECTION */
65122
65123 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
65124 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
65125 }
65126 }
65127
65128 if (BV_ISSET(fields, 23)) {
65129 log_packet_detailed(" got field 'irrigation_time'");
65130
65131#ifdef FREECIV_JSON_CONNECTION
65132 field_addr.name = "irrigation_time";
65133#endif /* FREECIV_JSON_CONNECTION */
65134
65135 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
65136 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
65137 }
65138 }
65139
65140 if (BV_ISSET(fields, 24)) {
65141 log_packet_detailed(" got field 'mining_shield_incr'");
65142
65143#ifdef FREECIV_JSON_CONNECTION
65144 field_addr.name = "mining_shield_incr";
65145#endif /* FREECIV_JSON_CONNECTION */
65146
65147 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
65148 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
65149 }
65150 }
65151
65152 if (BV_ISSET(fields, 25)) {
65153 log_packet_detailed(" got field 'mining_time'");
65154
65155#ifdef FREECIV_JSON_CONNECTION
65156 field_addr.name = "mining_time";
65157#endif /* FREECIV_JSON_CONNECTION */
65158
65159 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
65160 RECEIVE_PACKET_FIELD_ERROR(mining_time);
65161 }
65162 }
65163
65164 if (BV_ISSET(fields, 26)) {
65165 log_packet_detailed(" got field 'animal'");
65166
65167#ifdef FREECIV_JSON_CONNECTION
65168 field_addr.name = "animal";
65169#endif /* FREECIV_JSON_CONNECTION */
65170
65171 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
65173 }
65174 }
65175
65176 if (BV_ISSET(fields, 27)) {
65177 log_packet_detailed(" got field 'transform_result'");
65178
65179#ifdef FREECIV_JSON_CONNECTION
65180 field_addr.name = "transform_result";
65181#endif /* FREECIV_JSON_CONNECTION */
65182
65183 {
65184 int readin;
65185
65186 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65187 RECEIVE_PACKET_FIELD_ERROR(transform_result);
65188 }
65189 real_packet->transform_result = readin;
65190 }
65191 }
65192
65193 if (BV_ISSET(fields, 28)) {
65194 log_packet_detailed(" got field 'transform_time'");
65195
65196#ifdef FREECIV_JSON_CONNECTION
65197 field_addr.name = "transform_time";
65198#endif /* FREECIV_JSON_CONNECTION */
65199
65200 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
65201 RECEIVE_PACKET_FIELD_ERROR(transform_time);
65202 }
65203 }
65204
65205 if (BV_ISSET(fields, 29)) {
65206 log_packet_detailed(" got field 'placing_time'");
65207
65208#ifdef FREECIV_JSON_CONNECTION
65209 field_addr.name = "placing_time";
65210#endif /* FREECIV_JSON_CONNECTION */
65211
65212 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
65213 RECEIVE_PACKET_FIELD_ERROR(placing_time);
65214 }
65215 }
65216
65217 if (BV_ISSET(fields, 30)) {
65218 log_packet_detailed(" got field 'pillage_time'");
65219
65220#ifdef FREECIV_JSON_CONNECTION
65221 field_addr.name = "pillage_time";
65222#endif /* FREECIV_JSON_CONNECTION */
65223
65224 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
65225 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
65226 }
65227 }
65228
65229 if (BV_ISSET(fields, 31)) {
65230 log_packet_detailed(" got field 'extra_count'");
65231
65232#ifdef FREECIV_JSON_CONNECTION
65233 field_addr.name = "extra_count";
65234#endif /* FREECIV_JSON_CONNECTION */
65235
65236 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
65238 }
65239 }
65240
65241 if (BV_ISSET(fields, 32)) {
65242 log_packet_detailed(" got field 'extra_removal_times'");
65243
65244#ifdef FREECIV_JSON_CONNECTION
65245 field_addr.name = "extra_removal_times";
65246#endif /* FREECIV_JSON_CONNECTION */
65247
65248 {
65249 int i;
65250
65251 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
65252 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
65253 }
65254
65255#ifdef FREECIV_JSON_CONNECTION
65256 /* Enter array. */
65257 field_addr.sub_location = plocation_elem_new(0);
65258#endif /* FREECIV_JSON_CONNECTION */
65259
65260 for (i = 0; i < real_packet->extra_count; i++) {
65261#ifdef FREECIV_JSON_CONNECTION
65262 /* Next array element */
65263 field_addr.sub_location->number = i;
65264#endif /* FREECIV_JSON_CONNECTION */
65265
65266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
65267 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
65268 }
65269 }
65270
65271#ifdef FREECIV_JSON_CONNECTION
65272 /* Exit array. */
65273 FC_FREE(field_addr.sub_location);
65274#endif /* FREECIV_JSON_CONNECTION */
65275 }
65276 }
65277
65278 if (BV_ISSET(fields, 33)) {
65279 log_packet_detailed(" got field 'color_red'");
65280
65281#ifdef FREECIV_JSON_CONNECTION
65282 field_addr.name = "color_red";
65283#endif /* FREECIV_JSON_CONNECTION */
65284
65285 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
65286 RECEIVE_PACKET_FIELD_ERROR(color_red);
65287 }
65288 }
65289
65290 if (BV_ISSET(fields, 34)) {
65291 log_packet_detailed(" got field 'color_green'");
65292
65293#ifdef FREECIV_JSON_CONNECTION
65294 field_addr.name = "color_green";
65295#endif /* FREECIV_JSON_CONNECTION */
65296
65297 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
65298 RECEIVE_PACKET_FIELD_ERROR(color_green);
65299 }
65300 }
65301
65302 if (BV_ISSET(fields, 35)) {
65303 log_packet_detailed(" got field 'color_blue'");
65304
65305#ifdef FREECIV_JSON_CONNECTION
65306 field_addr.name = "color_blue";
65307#endif /* FREECIV_JSON_CONNECTION */
65308
65309 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
65310 RECEIVE_PACKET_FIELD_ERROR(color_blue);
65311 }
65312 }
65313
65314 if (BV_ISSET(fields, 36)) {
65315 log_packet_detailed(" got field 'helptext'");
65316
65317#ifdef FREECIV_JSON_CONNECTION
65318 field_addr.name = "helptext";
65319#endif /* FREECIV_JSON_CONNECTION */
65320
65321 {
65322 int i;
65323
65324 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
65326 }
65327 strvec_reserve(real_packet->helptext, i);
65328
65329#ifdef FREECIV_JSON_CONNECTION
65330 /* Enter array. */
65331 field_addr.sub_location = plocation_elem_new(0);
65332#endif /* FREECIV_JSON_CONNECTION */
65333
65334 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
65335#ifdef FREECIV_JSON_CONNECTION
65336 /* Next array element */
65337 field_addr.sub_location->number = i;
65338#endif /* FREECIV_JSON_CONNECTION */
65339
65340 {
65341 char readin[MAX_LEN_PACKET];
65342
65343 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
65344 || !strvec_set(real_packet->helptext, i, readin)) {
65346 }
65347 }
65348 }
65349
65350#ifdef FREECIV_JSON_CONNECTION
65351 /* Exit array. */
65352 FC_FREE(field_addr.sub_location);
65353#endif /* FREECIV_JSON_CONNECTION */
65354 }
65355 }
65356
65357 if (nullptr == old) {
65358 old = fc_malloc(sizeof(*old));
65360 old->id = real_packet->id;
65361 old->tclass = real_packet->tclass;
65362 old->flags = real_packet->flags;
65363 old->native_to = real_packet->native_to;
65364 sz_strlcpy(old->name, real_packet->name);
65365 sz_strlcpy(old->rule_name, real_packet->rule_name);
65366 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65367 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65368 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65369 old->movement_cost = real_packet->movement_cost;
65370 old->defense_bonus = real_packet->defense_bonus;
65371 {
65372 int i;
65373
65374 for (i = 0; i < O_LAST; i++) {
65375 old->output[i] = real_packet->output[i];
65376 }
65377 }
65378 old->num_resources = real_packet->num_resources;
65379 {
65380 int i;
65381
65382 for (i = 0; i < real_packet->num_resources; i++) {
65383 old->resources[i] = real_packet->resources[i];
65384 }
65385 }
65386 {
65387 int i;
65388
65389 for (i = 0; i < real_packet->num_resources; i++) {
65390 old->resource_freq[i] = real_packet->resource_freq[i];
65391 }
65392 }
65393 {
65394 int i;
65395
65396 for (i = 0; i < O_LAST; i++) {
65397 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65398 }
65399 }
65400 old->base_time = real_packet->base_time;
65401 old->road_time = real_packet->road_time;
65402 old->cultivate_result = real_packet->cultivate_result;
65403 old->cultivate_time = real_packet->cultivate_time;
65404 old->plant_result = real_packet->plant_result;
65405 old->plant_time = real_packet->plant_time;
65406 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65407 old->irrigation_time = real_packet->irrigation_time;
65408 old->mining_shield_incr = real_packet->mining_shield_incr;
65409 old->mining_time = real_packet->mining_time;
65410 old->animal = real_packet->animal;
65411 old->transform_result = real_packet->transform_result;
65412 old->transform_time = real_packet->transform_time;
65413 old->placing_time = real_packet->placing_time;
65414 old->pillage_time = real_packet->pillage_time;
65415 old->extra_count = real_packet->extra_count;
65416 {
65417 int i;
65418
65419 for (i = 0; i < real_packet->extra_count; i++) {
65420 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65421 }
65422 }
65423 old->color_red = real_packet->color_red;
65424 old->color_green = real_packet->color_green;
65425 old->color_blue = real_packet->color_blue;
65426 if (real_packet->helptext) {
65427 strvec_copy(old->helptext, real_packet->helptext);
65428 } else {
65429 strvec_clear(old->helptext);
65430 }
65432 } else {
65433 old->id = real_packet->id;
65434 old->tclass = real_packet->tclass;
65435 old->flags = real_packet->flags;
65436 old->native_to = real_packet->native_to;
65437 sz_strlcpy(old->name, real_packet->name);
65438 sz_strlcpy(old->rule_name, real_packet->rule_name);
65439 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65440 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65441 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65442 old->movement_cost = real_packet->movement_cost;
65443 old->defense_bonus = real_packet->defense_bonus;
65444 {
65445 int i;
65446
65447 for (i = 0; i < O_LAST; i++) {
65448 old->output[i] = real_packet->output[i];
65449 }
65450 }
65451 old->num_resources = real_packet->num_resources;
65452 {
65453 int i;
65454
65455 for (i = 0; i < real_packet->num_resources; i++) {
65456 old->resources[i] = real_packet->resources[i];
65457 }
65458 }
65459 {
65460 int i;
65461
65462 for (i = 0; i < real_packet->num_resources; i++) {
65463 old->resource_freq[i] = real_packet->resource_freq[i];
65464 }
65465 }
65466 {
65467 int i;
65468
65469 for (i = 0; i < O_LAST; i++) {
65470 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65471 }
65472 }
65473 old->base_time = real_packet->base_time;
65474 old->road_time = real_packet->road_time;
65475 old->cultivate_result = real_packet->cultivate_result;
65476 old->cultivate_time = real_packet->cultivate_time;
65477 old->plant_result = real_packet->plant_result;
65478 old->plant_time = real_packet->plant_time;
65479 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65480 old->irrigation_time = real_packet->irrigation_time;
65481 old->mining_shield_incr = real_packet->mining_shield_incr;
65482 old->mining_time = real_packet->mining_time;
65483 old->animal = real_packet->animal;
65484 old->transform_result = real_packet->transform_result;
65485 old->transform_time = real_packet->transform_time;
65486 old->placing_time = real_packet->placing_time;
65487 old->pillage_time = real_packet->pillage_time;
65488 old->extra_count = real_packet->extra_count;
65489 {
65490 int i;
65491
65492 for (i = 0; i < real_packet->extra_count; i++) {
65493 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65494 }
65495 }
65496 old->color_red = real_packet->color_red;
65497 old->color_green = real_packet->color_green;
65498 old->color_blue = real_packet->color_blue;
65499 if (real_packet->helptext) {
65500 strvec_copy(old->helptext, real_packet->helptext);
65501 } else {
65502 strvec_clear(old->helptext);
65503 }
65504 }
65505
65506#else /* FREECIV_DELTA_PROTOCOL */
65507#ifdef FREECIV_JSON_CONNECTION
65508 field_addr.name = "id";
65509#endif /* FREECIV_JSON_CONNECTION */
65510
65511 {
65512 int readin;
65513
65514 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65516 }
65517 real_packet->id = readin;
65518 }
65519
65520#ifdef FREECIV_JSON_CONNECTION
65521 field_addr.name = "tclass";
65522#endif /* FREECIV_JSON_CONNECTION */
65523
65524 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
65526 }
65527
65528#ifdef FREECIV_JSON_CONNECTION
65529 field_addr.name = "flags";
65530#endif /* FREECIV_JSON_CONNECTION */
65531
65532 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
65534 }
65535
65536#ifdef FREECIV_JSON_CONNECTION
65537 field_addr.name = "native_to";
65538#endif /* FREECIV_JSON_CONNECTION */
65539
65540 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
65541 RECEIVE_PACKET_FIELD_ERROR(native_to);
65542 }
65543
65544#ifdef FREECIV_JSON_CONNECTION
65545 field_addr.name = "name";
65546#endif /* FREECIV_JSON_CONNECTION */
65547
65548 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
65550 }
65551
65552#ifdef FREECIV_JSON_CONNECTION
65553 field_addr.name = "rule_name";
65554#endif /* FREECIV_JSON_CONNECTION */
65555
65556 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
65557 RECEIVE_PACKET_FIELD_ERROR(rule_name);
65558 }
65559
65560#ifdef FREECIV_JSON_CONNECTION
65561 field_addr.name = "graphic_str";
65562#endif /* FREECIV_JSON_CONNECTION */
65563
65564 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
65565 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
65566 }
65567
65568#ifdef FREECIV_JSON_CONNECTION
65569 field_addr.name = "graphic_alt";
65570#endif /* FREECIV_JSON_CONNECTION */
65571
65572 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
65573 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
65574 }
65575
65576#ifdef FREECIV_JSON_CONNECTION
65577 field_addr.name = "graphic_alt2";
65578#endif /* FREECIV_JSON_CONNECTION */
65579
65580 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
65581 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
65582 }
65583
65584#ifdef FREECIV_JSON_CONNECTION
65585 field_addr.name = "movement_cost";
65586#endif /* FREECIV_JSON_CONNECTION */
65587
65588 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
65589 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
65590 }
65591
65592#ifdef FREECIV_JSON_CONNECTION
65593 field_addr.name = "defense_bonus";
65594#endif /* FREECIV_JSON_CONNECTION */
65595
65596 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
65597 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
65598 }
65599
65600#ifdef FREECIV_JSON_CONNECTION
65601 field_addr.name = "output";
65602#endif /* FREECIV_JSON_CONNECTION */
65603
65604 {
65605 int i;
65606
65607
65608#ifdef FREECIV_JSON_CONNECTION
65609 /* Enter array. */
65610 field_addr.sub_location = plocation_elem_new(0);
65611#endif /* FREECIV_JSON_CONNECTION */
65612
65613 for (i = 0; i < O_LAST; i++) {
65614#ifdef FREECIV_JSON_CONNECTION
65615 /* Next array element */
65616 field_addr.sub_location->number = i;
65617#endif /* FREECIV_JSON_CONNECTION */
65618
65619 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
65621 }
65622 }
65623
65624#ifdef FREECIV_JSON_CONNECTION
65625 /* Exit array. */
65626 FC_FREE(field_addr.sub_location);
65627#endif /* FREECIV_JSON_CONNECTION */
65628 }
65629
65630#ifdef FREECIV_JSON_CONNECTION
65631 field_addr.name = "num_resources";
65632#endif /* FREECIV_JSON_CONNECTION */
65633
65634 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
65635 RECEIVE_PACKET_FIELD_ERROR(num_resources);
65636 }
65637
65638#ifdef FREECIV_JSON_CONNECTION
65639 field_addr.name = "resources";
65640#endif /* FREECIV_JSON_CONNECTION */
65641
65642 {
65643 int i;
65644
65645 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65646 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
65647 }
65648
65649#ifdef FREECIV_JSON_CONNECTION
65650 /* Enter array. */
65651 field_addr.sub_location = plocation_elem_new(0);
65652#endif /* FREECIV_JSON_CONNECTION */
65653
65654 for (i = 0; i < real_packet->num_resources; i++) {
65655#ifdef FREECIV_JSON_CONNECTION
65656 /* Next array element */
65657 field_addr.sub_location->number = i;
65658#endif /* FREECIV_JSON_CONNECTION */
65659
65660 {
65661 int readin;
65662
65663 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65665 }
65666 real_packet->resources[i] = readin;
65667 }
65668 }
65669
65670#ifdef FREECIV_JSON_CONNECTION
65671 /* Exit array. */
65672 FC_FREE(field_addr.sub_location);
65673#endif /* FREECIV_JSON_CONNECTION */
65674 }
65675
65676#ifdef FREECIV_JSON_CONNECTION
65677 field_addr.name = "resource_freq";
65678#endif /* FREECIV_JSON_CONNECTION */
65679
65680 {
65681 int i;
65682
65683 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65684 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
65685 }
65686
65687#ifdef FREECIV_JSON_CONNECTION
65688 /* Enter array. */
65689 field_addr.sub_location = plocation_elem_new(0);
65690#endif /* FREECIV_JSON_CONNECTION */
65691
65692 for (i = 0; i < real_packet->num_resources; i++) {
65693#ifdef FREECIV_JSON_CONNECTION
65694 /* Next array element */
65695 field_addr.sub_location->number = i;
65696#endif /* FREECIV_JSON_CONNECTION */
65697
65698 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
65699 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
65700 }
65701 }
65702
65703#ifdef FREECIV_JSON_CONNECTION
65704 /* Exit array. */
65705 FC_FREE(field_addr.sub_location);
65706#endif /* FREECIV_JSON_CONNECTION */
65707 }
65708
65709#ifdef FREECIV_JSON_CONNECTION
65710 field_addr.name = "road_output_incr_pct";
65711#endif /* FREECIV_JSON_CONNECTION */
65712
65713 {
65714 int i;
65715
65716
65717#ifdef FREECIV_JSON_CONNECTION
65718 /* Enter array. */
65719 field_addr.sub_location = plocation_elem_new(0);
65720#endif /* FREECIV_JSON_CONNECTION */
65721
65722 for (i = 0; i < O_LAST; i++) {
65723#ifdef FREECIV_JSON_CONNECTION
65724 /* Next array element */
65725 field_addr.sub_location->number = i;
65726#endif /* FREECIV_JSON_CONNECTION */
65727
65728 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
65729 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
65730 }
65731 }
65732
65733#ifdef FREECIV_JSON_CONNECTION
65734 /* Exit array. */
65735 FC_FREE(field_addr.sub_location);
65736#endif /* FREECIV_JSON_CONNECTION */
65737 }
65738
65739#ifdef FREECIV_JSON_CONNECTION
65740 field_addr.name = "base_time";
65741#endif /* FREECIV_JSON_CONNECTION */
65742
65743 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
65744 RECEIVE_PACKET_FIELD_ERROR(base_time);
65745 }
65746
65747#ifdef FREECIV_JSON_CONNECTION
65748 field_addr.name = "road_time";
65749#endif /* FREECIV_JSON_CONNECTION */
65750
65751 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
65752 RECEIVE_PACKET_FIELD_ERROR(road_time);
65753 }
65754
65755#ifdef FREECIV_JSON_CONNECTION
65756 field_addr.name = "cultivate_result";
65757#endif /* FREECIV_JSON_CONNECTION */
65758
65759 {
65760 int readin;
65761
65762 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65763 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
65764 }
65765 real_packet->cultivate_result = readin;
65766 }
65767
65768#ifdef FREECIV_JSON_CONNECTION
65769 field_addr.name = "cultivate_time";
65770#endif /* FREECIV_JSON_CONNECTION */
65771
65772 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
65773 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
65774 }
65775
65776#ifdef FREECIV_JSON_CONNECTION
65777 field_addr.name = "plant_result";
65778#endif /* FREECIV_JSON_CONNECTION */
65779
65780 {
65781 int readin;
65782
65783 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65784 RECEIVE_PACKET_FIELD_ERROR(plant_result);
65785 }
65786 real_packet->plant_result = readin;
65787 }
65788
65789#ifdef FREECIV_JSON_CONNECTION
65790 field_addr.name = "plant_time";
65791#endif /* FREECIV_JSON_CONNECTION */
65792
65793 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
65794 RECEIVE_PACKET_FIELD_ERROR(plant_time);
65795 }
65796
65797#ifdef FREECIV_JSON_CONNECTION
65798 field_addr.name = "irrigation_food_incr";
65799#endif /* FREECIV_JSON_CONNECTION */
65800
65801 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
65802 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
65803 }
65804
65805#ifdef FREECIV_JSON_CONNECTION
65806 field_addr.name = "irrigation_time";
65807#endif /* FREECIV_JSON_CONNECTION */
65808
65809 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
65810 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
65811 }
65812
65813#ifdef FREECIV_JSON_CONNECTION
65814 field_addr.name = "mining_shield_incr";
65815#endif /* FREECIV_JSON_CONNECTION */
65816
65817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
65818 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
65819 }
65820
65821#ifdef FREECIV_JSON_CONNECTION
65822 field_addr.name = "mining_time";
65823#endif /* FREECIV_JSON_CONNECTION */
65824
65825 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
65826 RECEIVE_PACKET_FIELD_ERROR(mining_time);
65827 }
65828
65829#ifdef FREECIV_JSON_CONNECTION
65830 field_addr.name = "animal";
65831#endif /* FREECIV_JSON_CONNECTION */
65832
65833 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
65835 }
65836
65837#ifdef FREECIV_JSON_CONNECTION
65838 field_addr.name = "transform_result";
65839#endif /* FREECIV_JSON_CONNECTION */
65840
65841 {
65842 int readin;
65843
65844 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65845 RECEIVE_PACKET_FIELD_ERROR(transform_result);
65846 }
65847 real_packet->transform_result = readin;
65848 }
65849
65850#ifdef FREECIV_JSON_CONNECTION
65851 field_addr.name = "transform_time";
65852#endif /* FREECIV_JSON_CONNECTION */
65853
65854 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
65855 RECEIVE_PACKET_FIELD_ERROR(transform_time);
65856 }
65857
65858#ifdef FREECIV_JSON_CONNECTION
65859 field_addr.name = "placing_time";
65860#endif /* FREECIV_JSON_CONNECTION */
65861
65862 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
65863 RECEIVE_PACKET_FIELD_ERROR(placing_time);
65864 }
65865
65866#ifdef FREECIV_JSON_CONNECTION
65867 field_addr.name = "pillage_time";
65868#endif /* FREECIV_JSON_CONNECTION */
65869
65870 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
65871 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
65872 }
65873
65874#ifdef FREECIV_JSON_CONNECTION
65875 field_addr.name = "extra_count";
65876#endif /* FREECIV_JSON_CONNECTION */
65877
65878 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
65880 }
65881
65882#ifdef FREECIV_JSON_CONNECTION
65883 field_addr.name = "extra_removal_times";
65884#endif /* FREECIV_JSON_CONNECTION */
65885
65886 {
65887 int i;
65888
65889 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
65890 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
65891 }
65892
65893#ifdef FREECIV_JSON_CONNECTION
65894 /* Enter array. */
65895 field_addr.sub_location = plocation_elem_new(0);
65896#endif /* FREECIV_JSON_CONNECTION */
65897
65898 for (i = 0; i < real_packet->extra_count; i++) {
65899#ifdef FREECIV_JSON_CONNECTION
65900 /* Next array element */
65901 field_addr.sub_location->number = i;
65902#endif /* FREECIV_JSON_CONNECTION */
65903
65904 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
65905 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
65906 }
65907 }
65908
65909#ifdef FREECIV_JSON_CONNECTION
65910 /* Exit array. */
65911 FC_FREE(field_addr.sub_location);
65912#endif /* FREECIV_JSON_CONNECTION */
65913 }
65914
65915#ifdef FREECIV_JSON_CONNECTION
65916 field_addr.name = "color_red";
65917#endif /* FREECIV_JSON_CONNECTION */
65918
65919 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
65920 RECEIVE_PACKET_FIELD_ERROR(color_red);
65921 }
65922
65923#ifdef FREECIV_JSON_CONNECTION
65924 field_addr.name = "color_green";
65925#endif /* FREECIV_JSON_CONNECTION */
65926
65927 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
65928 RECEIVE_PACKET_FIELD_ERROR(color_green);
65929 }
65930
65931#ifdef FREECIV_JSON_CONNECTION
65932 field_addr.name = "color_blue";
65933#endif /* FREECIV_JSON_CONNECTION */
65934
65935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
65936 RECEIVE_PACKET_FIELD_ERROR(color_blue);
65937 }
65938
65939#ifdef FREECIV_JSON_CONNECTION
65940 field_addr.name = "helptext";
65941#endif /* FREECIV_JSON_CONNECTION */
65942
65943 {
65944 int i;
65945
65946 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
65948 }
65949 strvec_reserve(real_packet->helptext, i);
65950
65951#ifdef FREECIV_JSON_CONNECTION
65952 /* Enter array. */
65953 field_addr.sub_location = plocation_elem_new(0);
65954#endif /* FREECIV_JSON_CONNECTION */
65955
65956 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
65957#ifdef FREECIV_JSON_CONNECTION
65958 /* Next array element */
65959 field_addr.sub_location->number = i;
65960#endif /* FREECIV_JSON_CONNECTION */
65961
65962 {
65963 char readin[MAX_LEN_PACKET];
65964
65965 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
65966 || !strvec_set(real_packet->helptext, i, readin)) {
65968 }
65969 }
65970 }
65971
65972#ifdef FREECIV_JSON_CONNECTION
65973 /* Exit array. */
65974 FC_FREE(field_addr.sub_location);
65975#endif /* FREECIV_JSON_CONNECTION */
65976 }
65977#endif /* FREECIV_DELTA_PROTOCOL */
65978
65980#undef FREE_PACKET_STRUCT
65981}
65982
65984{
65985 const struct packet_ruleset_terrain *real_packet = packet;
65986 int e;
65988
65989 log_packet_detailed("packet_ruleset_terrain_100: sending info about ()");
65990
65991#ifdef FREECIV_DELTA_PROTOCOL
65994 bool differ;
65995 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN;
65996
65997 if (nullptr == *hash) {
65999 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
66000 }
66001 BV_CLR_ALL(fields);
66002
66003 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66004 old = fc_malloc(sizeof(*old));
66005 /* temporary bitcopy just to insert correctly */
66006 *old = *real_packet;
66009 }
66010
66011 differ = (old->id != real_packet->id);
66012 if (differ) {
66013 BV_SET(fields, 0);
66014 }
66015
66016 differ = (old->tclass != real_packet->tclass);
66017 if (differ) {
66018 BV_SET(fields, 1);
66019 }
66020
66021 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
66022 if (differ) {
66023 BV_SET(fields, 2);
66024 }
66025
66026 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
66027 if (differ) {
66028 BV_SET(fields, 3);
66029 }
66030
66031 differ = (strcmp(old->name, real_packet->name) != 0);
66032 if (differ) {
66033 BV_SET(fields, 4);
66034 }
66035
66036 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
66037 if (differ) {
66038 BV_SET(fields, 5);
66039 }
66040
66041 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
66042 if (differ) {
66043 BV_SET(fields, 6);
66044 }
66045
66046 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
66047 if (differ) {
66048 BV_SET(fields, 7);
66049 }
66050
66051 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
66052 if (differ) {
66053 BV_SET(fields, 8);
66054 }
66055
66056 differ = (old->movement_cost != real_packet->movement_cost);
66057 if (differ) {
66058 BV_SET(fields, 9);
66059 }
66060
66061 differ = (old->defense_bonus != real_packet->defense_bonus);
66062 if (differ) {
66063 BV_SET(fields, 10);
66064 }
66065
66066 differ = FALSE;
66067 {
66068 int i;
66069
66070 for (i = 0; i < O_LAST; i++) {
66071 differ = (old->output[i] != real_packet->output[i]);
66072 if (differ) {
66073 break;
66074 }
66075 }
66076 }
66077 if (differ) {
66078 BV_SET(fields, 11);
66079 }
66080
66081 differ = (old->num_resources != real_packet->num_resources);
66082 if (differ) {
66083 BV_SET(fields, 12);
66084 }
66085
66086 differ = (old->num_resources != real_packet->num_resources);
66087 if (!differ) {
66088 int i;
66089
66090 for (i = 0; i < old->num_resources; i++) {
66091 differ = (old->resources[i] != real_packet->resources[i]);
66092 if (differ) {
66093 break;
66094 }
66095 }
66096 }
66097 if (differ) {
66098 BV_SET(fields, 13);
66099 }
66100
66101 differ = (old->num_resources != real_packet->num_resources);
66102 if (!differ) {
66103 int i;
66104
66105 for (i = 0; i < old->num_resources; i++) {
66106 differ = (old->resource_freq[i] != real_packet->resource_freq[i]);
66107 if (differ) {
66108 break;
66109 }
66110 }
66111 }
66112 if (differ) {
66113 BV_SET(fields, 14);
66114 }
66115
66116 differ = FALSE;
66117 {
66118 int i;
66119
66120 for (i = 0; i < O_LAST; i++) {
66121 differ = (old->road_output_incr_pct[i] != real_packet->road_output_incr_pct[i]);
66122 if (differ) {
66123 break;
66124 }
66125 }
66126 }
66127 if (differ) {
66128 BV_SET(fields, 15);
66129 }
66130
66131 differ = (old->base_time != real_packet->base_time);
66132 if (differ) {
66133 BV_SET(fields, 16);
66134 }
66135
66136 differ = (old->road_time != real_packet->road_time);
66137 if (differ) {
66138 BV_SET(fields, 17);
66139 }
66140
66141 differ = (old->cultivate_result != real_packet->cultivate_result);
66142 if (differ) {
66143 BV_SET(fields, 18);
66144 }
66145
66146 differ = (old->cultivate_time != real_packet->cultivate_time);
66147 if (differ) {
66148 BV_SET(fields, 19);
66149 }
66150
66151 differ = (old->plant_result != real_packet->plant_result);
66152 if (differ) {
66153 BV_SET(fields, 20);
66154 }
66155
66156 differ = (old->plant_time != real_packet->plant_time);
66157 if (differ) {
66158 BV_SET(fields, 21);
66159 }
66160
66161 differ = (old->irrigation_food_incr != real_packet->irrigation_food_incr);
66162 if (differ) {
66163 BV_SET(fields, 22);
66164 }
66165
66166 differ = (old->irrigation_time != real_packet->irrigation_time);
66167 if (differ) {
66168 BV_SET(fields, 23);
66169 }
66170
66171 differ = (old->mining_shield_incr != real_packet->mining_shield_incr);
66172 if (differ) {
66173 BV_SET(fields, 24);
66174 }
66175
66176 differ = (old->mining_time != real_packet->mining_time);
66177 if (differ) {
66178 BV_SET(fields, 25);
66179 }
66180
66181 differ = (old->animal != real_packet->animal);
66182 if (differ) {
66183 BV_SET(fields, 26);
66184 }
66185
66186 differ = (old->transform_result != real_packet->transform_result);
66187 if (differ) {
66188 BV_SET(fields, 27);
66189 }
66190
66191 differ = (old->transform_time != real_packet->transform_time);
66192 if (differ) {
66193 BV_SET(fields, 28);
66194 }
66195
66196 differ = (old->placing_time != real_packet->placing_time);
66197 if (differ) {
66198 BV_SET(fields, 29);
66199 }
66200
66201 differ = (old->pillage_time != real_packet->pillage_time);
66202 if (differ) {
66203 BV_SET(fields, 30);
66204 }
66205
66206 differ = (old->extra_count != real_packet->extra_count);
66207 if (differ) {
66208 BV_SET(fields, 31);
66209 }
66210
66211 differ = (old->extra_count != real_packet->extra_count);
66212 if (!differ) {
66213 int i;
66214
66215 for (i = 0; i < old->extra_count; i++) {
66216 differ = (old->extra_removal_times[i] != real_packet->extra_removal_times[i]);
66217 if (differ) {
66218 break;
66219 }
66220 }
66221 }
66222 if (differ) {
66223 BV_SET(fields, 32);
66224 }
66225
66226 differ = (old->color_red != real_packet->color_red);
66227 if (differ) {
66228 BV_SET(fields, 33);
66229 }
66230
66231 differ = (old->color_green != real_packet->color_green);
66232 if (differ) {
66233 BV_SET(fields, 34);
66234 }
66235
66236 differ = (old->color_blue != real_packet->color_blue);
66237 if (differ) {
66238 BV_SET(fields, 35);
66239 }
66240
66241 if (real_packet->helptext) {
66242 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
66243 } else {
66244 differ = (strvec_size(old->helptext) > 0);
66245 }
66246 if (differ) {
66247 BV_SET(fields, 36);
66248 }
66249#endif /* FREECIV_DELTA_PROTOCOL */
66250
66251#ifdef FREECIV_JSON_CONNECTION
66252 struct plocation field_addr;
66253 {
66254 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
66257 }
66258#endif /* FREECIV_JSON_CONNECTION */
66259
66260#ifdef FREECIV_DELTA_PROTOCOL
66261#ifdef FREECIV_JSON_CONNECTION
66262 field_addr.name = "fields";
66263#endif /* FREECIV_JSON_CONNECTION */
66264 e = 0;
66265 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66266 if (e) {
66267 log_packet_detailed("fields bitvector error detected");
66268 }
66269
66270 if (BV_ISSET(fields, 0)) {
66271 log_packet_detailed(" field 'id' has changed");
66272
66273#ifdef FREECIV_JSON_CONNECTION
66274 field_addr.name = "id";
66275#endif /* FREECIV_JSON_CONNECTION */
66276 e = 0;
66277
66278 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66279
66280 if (e) {
66281 log_packet_detailed("'id' field error detected");
66282 }
66283 }
66284
66285 if (BV_ISSET(fields, 1)) {
66286 log_packet_detailed(" field 'tclass' has changed");
66287
66288#ifdef FREECIV_JSON_CONNECTION
66289 field_addr.name = "tclass";
66290#endif /* FREECIV_JSON_CONNECTION */
66291 e = 0;
66292
66293 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
66294
66295 if (e) {
66296 log_packet_detailed("'tclass' field error detected");
66297 }
66298 }
66299
66300 if (BV_ISSET(fields, 2)) {
66301 log_packet_detailed(" field 'flags' has changed");
66302
66303#ifdef FREECIV_JSON_CONNECTION
66304 field_addr.name = "flags";
66305#endif /* FREECIV_JSON_CONNECTION */
66306 e = 0;
66307
66308 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
66309
66310 if (e) {
66311 log_packet_detailed("'flags' field error detected");
66312 }
66313 }
66314
66315 if (BV_ISSET(fields, 3)) {
66316 log_packet_detailed(" field 'native_to' has changed");
66317
66318#ifdef FREECIV_JSON_CONNECTION
66319 field_addr.name = "native_to";
66320#endif /* FREECIV_JSON_CONNECTION */
66321 e = 0;
66322
66323 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
66324
66325 if (e) {
66326 log_packet_detailed("'native_to' field error detected");
66327 }
66328 }
66329
66330 if (BV_ISSET(fields, 4)) {
66331 log_packet_detailed(" field 'name' has changed");
66332
66333#ifdef FREECIV_JSON_CONNECTION
66334 field_addr.name = "name";
66335#endif /* FREECIV_JSON_CONNECTION */
66336 e = 0;
66337
66338 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
66339
66340 if (e) {
66341 log_packet_detailed("'name' field error detected");
66342 }
66343 }
66344
66345 if (BV_ISSET(fields, 5)) {
66346 log_packet_detailed(" field 'rule_name' has changed");
66347
66348#ifdef FREECIV_JSON_CONNECTION
66349 field_addr.name = "rule_name";
66350#endif /* FREECIV_JSON_CONNECTION */
66351 e = 0;
66352
66353 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
66354
66355 if (e) {
66356 log_packet_detailed("'rule_name' field error detected");
66357 }
66358 }
66359
66360 if (BV_ISSET(fields, 6)) {
66361 log_packet_detailed(" field 'graphic_str' has changed");
66362
66363#ifdef FREECIV_JSON_CONNECTION
66364 field_addr.name = "graphic_str";
66365#endif /* FREECIV_JSON_CONNECTION */
66366 e = 0;
66367
66368 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
66369
66370 if (e) {
66371 log_packet_detailed("'graphic_str' field error detected");
66372 }
66373 }
66374
66375 if (BV_ISSET(fields, 7)) {
66376 log_packet_detailed(" field 'graphic_alt' has changed");
66377
66378#ifdef FREECIV_JSON_CONNECTION
66379 field_addr.name = "graphic_alt";
66380#endif /* FREECIV_JSON_CONNECTION */
66381 e = 0;
66382
66383 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
66384
66385 if (e) {
66386 log_packet_detailed("'graphic_alt' field error detected");
66387 }
66388 }
66389
66390 if (BV_ISSET(fields, 8)) {
66391 log_packet_detailed(" field 'graphic_alt2' has changed");
66392
66393#ifdef FREECIV_JSON_CONNECTION
66394 field_addr.name = "graphic_alt2";
66395#endif /* FREECIV_JSON_CONNECTION */
66396 e = 0;
66397
66398 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
66399
66400 if (e) {
66401 log_packet_detailed("'graphic_alt2' field error detected");
66402 }
66403 }
66404
66405 if (BV_ISSET(fields, 9)) {
66406 log_packet_detailed(" field 'movement_cost' has changed");
66407
66408#ifdef FREECIV_JSON_CONNECTION
66409 field_addr.name = "movement_cost";
66410#endif /* FREECIV_JSON_CONNECTION */
66411 e = 0;
66412
66413 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
66414
66415 if (e) {
66416 log_packet_detailed("'movement_cost' field error detected");
66417 }
66418 }
66419
66420 if (BV_ISSET(fields, 10)) {
66421 log_packet_detailed(" field 'defense_bonus' has changed");
66422
66423#ifdef FREECIV_JSON_CONNECTION
66424 field_addr.name = "defense_bonus";
66425#endif /* FREECIV_JSON_CONNECTION */
66426 e = 0;
66427
66428 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
66429
66430 if (e) {
66431 log_packet_detailed("'defense_bonus' field error detected");
66432 }
66433 }
66434
66435 if (BV_ISSET(fields, 11)) {
66436 log_packet_detailed(" field 'output' has changed");
66437
66438#ifdef FREECIV_JSON_CONNECTION
66439 field_addr.name = "output";
66440#endif /* FREECIV_JSON_CONNECTION */
66441 e = 0;
66442
66443 {
66444 int i;
66445
66446#ifdef FREECIV_JSON_CONNECTION
66447 /* Create the array. */
66448 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66449
66450 /* Enter array. */
66451 field_addr.sub_location = plocation_elem_new(0);
66452#endif /* FREECIV_JSON_CONNECTION */
66453
66454 for (i = 0; i < O_LAST; i++) {
66455#ifdef FREECIV_JSON_CONNECTION
66456 /* Next array element. */
66457 field_addr.sub_location->number = i;
66458#endif /* FREECIV_JSON_CONNECTION */
66459
66460 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
66461 }
66462
66463#ifdef FREECIV_JSON_CONNECTION
66464 /* Exit array. */
66465 FC_FREE(field_addr.sub_location);
66466#endif /* FREECIV_JSON_CONNECTION */
66467 }
66468
66469 if (e) {
66470 log_packet_detailed("'output' field error detected");
66471 }
66472 }
66473
66474 if (BV_ISSET(fields, 12)) {
66475 log_packet_detailed(" field 'num_resources' has changed");
66476
66477#ifdef FREECIV_JSON_CONNECTION
66478 field_addr.name = "num_resources";
66479#endif /* FREECIV_JSON_CONNECTION */
66480 e = 0;
66481
66482 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
66483
66484 if (e) {
66485 log_packet_detailed("'num_resources' field error detected");
66486 }
66487 }
66488
66489 if (BV_ISSET(fields, 13)) {
66490 log_packet_detailed(" field 'resources' has changed");
66491
66492#ifdef FREECIV_JSON_CONNECTION
66493 field_addr.name = "resources";
66494#endif /* FREECIV_JSON_CONNECTION */
66495 e = 0;
66496
66497 {
66498 int i;
66499
66500#ifdef FREECIV_JSON_CONNECTION
66501 /* Create the array. */
66502 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
66503
66504 /* Enter array. */
66505 field_addr.sub_location = plocation_elem_new(0);
66506#endif /* FREECIV_JSON_CONNECTION */
66507
66508 for (i = 0; i < real_packet->num_resources; i++) {
66509#ifdef FREECIV_JSON_CONNECTION
66510 /* Next array element. */
66511 field_addr.sub_location->number = i;
66512#endif /* FREECIV_JSON_CONNECTION */
66513
66514 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
66515 }
66516
66517#ifdef FREECIV_JSON_CONNECTION
66518 /* Exit array. */
66519 FC_FREE(field_addr.sub_location);
66520#endif /* FREECIV_JSON_CONNECTION */
66521 }
66522
66523 if (e) {
66524 log_packet_detailed("'resources' field error detected");
66525 }
66526 }
66527
66528 if (BV_ISSET(fields, 14)) {
66529 log_packet_detailed(" field 'resource_freq' has changed");
66530
66531#ifdef FREECIV_JSON_CONNECTION
66532 field_addr.name = "resource_freq";
66533#endif /* FREECIV_JSON_CONNECTION */
66534 e = 0;
66535
66536 {
66537 int i;
66538
66539#ifdef FREECIV_JSON_CONNECTION
66540 /* Create the array. */
66541 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
66542
66543 /* Enter array. */
66544 field_addr.sub_location = plocation_elem_new(0);
66545#endif /* FREECIV_JSON_CONNECTION */
66546
66547 for (i = 0; i < real_packet->num_resources; i++) {
66548#ifdef FREECIV_JSON_CONNECTION
66549 /* Next array element. */
66550 field_addr.sub_location->number = i;
66551#endif /* FREECIV_JSON_CONNECTION */
66552
66553 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
66554 }
66555
66556#ifdef FREECIV_JSON_CONNECTION
66557 /* Exit array. */
66558 FC_FREE(field_addr.sub_location);
66559#endif /* FREECIV_JSON_CONNECTION */
66560 }
66561
66562 if (e) {
66563 log_packet_detailed("'resource_freq' field error detected");
66564 }
66565 }
66566
66567 if (BV_ISSET(fields, 15)) {
66568 log_packet_detailed(" field 'road_output_incr_pct' has changed");
66569
66570#ifdef FREECIV_JSON_CONNECTION
66571 field_addr.name = "road_output_incr_pct";
66572#endif /* FREECIV_JSON_CONNECTION */
66573 e = 0;
66574
66575 {
66576 int i;
66577
66578#ifdef FREECIV_JSON_CONNECTION
66579 /* Create the array. */
66580 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66581
66582 /* Enter array. */
66583 field_addr.sub_location = plocation_elem_new(0);
66584#endif /* FREECIV_JSON_CONNECTION */
66585
66586 for (i = 0; i < O_LAST; i++) {
66587#ifdef FREECIV_JSON_CONNECTION
66588 /* Next array element. */
66589 field_addr.sub_location->number = i;
66590#endif /* FREECIV_JSON_CONNECTION */
66591
66592 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
66593 }
66594
66595#ifdef FREECIV_JSON_CONNECTION
66596 /* Exit array. */
66597 FC_FREE(field_addr.sub_location);
66598#endif /* FREECIV_JSON_CONNECTION */
66599 }
66600
66601 if (e) {
66602 log_packet_detailed("'road_output_incr_pct' field error detected");
66603 }
66604 }
66605
66606 if (BV_ISSET(fields, 16)) {
66607 log_packet_detailed(" field 'base_time' has changed");
66608
66609#ifdef FREECIV_JSON_CONNECTION
66610 field_addr.name = "base_time";
66611#endif /* FREECIV_JSON_CONNECTION */
66612 e = 0;
66613
66614 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
66615
66616 if (e) {
66617 log_packet_detailed("'base_time' field error detected");
66618 }
66619 }
66620
66621 if (BV_ISSET(fields, 17)) {
66622 log_packet_detailed(" field 'road_time' has changed");
66623
66624#ifdef FREECIV_JSON_CONNECTION
66625 field_addr.name = "road_time";
66626#endif /* FREECIV_JSON_CONNECTION */
66627 e = 0;
66628
66629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
66630
66631 if (e) {
66632 log_packet_detailed("'road_time' field error detected");
66633 }
66634 }
66635
66636 if (BV_ISSET(fields, 18)) {
66637 log_packet_detailed(" field 'cultivate_result' has changed");
66638
66639#ifdef FREECIV_JSON_CONNECTION
66640 field_addr.name = "cultivate_result";
66641#endif /* FREECIV_JSON_CONNECTION */
66642 e = 0;
66643
66644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
66645
66646 if (e) {
66647 log_packet_detailed("'cultivate_result' field error detected");
66648 }
66649 }
66650
66651 if (BV_ISSET(fields, 19)) {
66652 log_packet_detailed(" field 'cultivate_time' has changed");
66653
66654#ifdef FREECIV_JSON_CONNECTION
66655 field_addr.name = "cultivate_time";
66656#endif /* FREECIV_JSON_CONNECTION */
66657 e = 0;
66658
66659 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
66660
66661 if (e) {
66662 log_packet_detailed("'cultivate_time' field error detected");
66663 }
66664 }
66665
66666 if (BV_ISSET(fields, 20)) {
66667 log_packet_detailed(" field 'plant_result' has changed");
66668
66669#ifdef FREECIV_JSON_CONNECTION
66670 field_addr.name = "plant_result";
66671#endif /* FREECIV_JSON_CONNECTION */
66672 e = 0;
66673
66674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
66675
66676 if (e) {
66677 log_packet_detailed("'plant_result' field error detected");
66678 }
66679 }
66680
66681 if (BV_ISSET(fields, 21)) {
66682 log_packet_detailed(" field 'plant_time' has changed");
66683
66684#ifdef FREECIV_JSON_CONNECTION
66685 field_addr.name = "plant_time";
66686#endif /* FREECIV_JSON_CONNECTION */
66687 e = 0;
66688
66689 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
66690
66691 if (e) {
66692 log_packet_detailed("'plant_time' field error detected");
66693 }
66694 }
66695
66696 if (BV_ISSET(fields, 22)) {
66697 log_packet_detailed(" field 'irrigation_food_incr' has changed");
66698
66699#ifdef FREECIV_JSON_CONNECTION
66700 field_addr.name = "irrigation_food_incr";
66701#endif /* FREECIV_JSON_CONNECTION */
66702 e = 0;
66703
66704 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
66705
66706 if (e) {
66707 log_packet_detailed("'irrigation_food_incr' field error detected");
66708 }
66709 }
66710
66711 if (BV_ISSET(fields, 23)) {
66712 log_packet_detailed(" field 'irrigation_time' has changed");
66713
66714#ifdef FREECIV_JSON_CONNECTION
66715 field_addr.name = "irrigation_time";
66716#endif /* FREECIV_JSON_CONNECTION */
66717 e = 0;
66718
66719 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
66720
66721 if (e) {
66722 log_packet_detailed("'irrigation_time' field error detected");
66723 }
66724 }
66725
66726 if (BV_ISSET(fields, 24)) {
66727 log_packet_detailed(" field 'mining_shield_incr' has changed");
66728
66729#ifdef FREECIV_JSON_CONNECTION
66730 field_addr.name = "mining_shield_incr";
66731#endif /* FREECIV_JSON_CONNECTION */
66732 e = 0;
66733
66734 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
66735
66736 if (e) {
66737 log_packet_detailed("'mining_shield_incr' field error detected");
66738 }
66739 }
66740
66741 if (BV_ISSET(fields, 25)) {
66742 log_packet_detailed(" field 'mining_time' has changed");
66743
66744#ifdef FREECIV_JSON_CONNECTION
66745 field_addr.name = "mining_time";
66746#endif /* FREECIV_JSON_CONNECTION */
66747 e = 0;
66748
66749 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
66750
66751 if (e) {
66752 log_packet_detailed("'mining_time' field error detected");
66753 }
66754 }
66755
66756 if (BV_ISSET(fields, 26)) {
66757 log_packet_detailed(" field 'animal' has changed");
66758
66759#ifdef FREECIV_JSON_CONNECTION
66760 field_addr.name = "animal";
66761#endif /* FREECIV_JSON_CONNECTION */
66762 e = 0;
66763
66764 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
66765
66766 if (e) {
66767 log_packet_detailed("'animal' field error detected");
66768 }
66769 }
66770
66771 if (BV_ISSET(fields, 27)) {
66772 log_packet_detailed(" field 'transform_result' has changed");
66773
66774#ifdef FREECIV_JSON_CONNECTION
66775 field_addr.name = "transform_result";
66776#endif /* FREECIV_JSON_CONNECTION */
66777 e = 0;
66778
66779 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
66780
66781 if (e) {
66782 log_packet_detailed("'transform_result' field error detected");
66783 }
66784 }
66785
66786 if (BV_ISSET(fields, 28)) {
66787 log_packet_detailed(" field 'transform_time' has changed");
66788
66789#ifdef FREECIV_JSON_CONNECTION
66790 field_addr.name = "transform_time";
66791#endif /* FREECIV_JSON_CONNECTION */
66792 e = 0;
66793
66794 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
66795
66796 if (e) {
66797 log_packet_detailed("'transform_time' field error detected");
66798 }
66799 }
66800
66801 if (BV_ISSET(fields, 29)) {
66802 log_packet_detailed(" field 'placing_time' has changed");
66803
66804#ifdef FREECIV_JSON_CONNECTION
66805 field_addr.name = "placing_time";
66806#endif /* FREECIV_JSON_CONNECTION */
66807 e = 0;
66808
66809 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
66810
66811 if (e) {
66812 log_packet_detailed("'placing_time' field error detected");
66813 }
66814 }
66815
66816 if (BV_ISSET(fields, 30)) {
66817 log_packet_detailed(" field 'pillage_time' has changed");
66818
66819#ifdef FREECIV_JSON_CONNECTION
66820 field_addr.name = "pillage_time";
66821#endif /* FREECIV_JSON_CONNECTION */
66822 e = 0;
66823
66824 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
66825
66826 if (e) {
66827 log_packet_detailed("'pillage_time' field error detected");
66828 }
66829 }
66830
66831 if (BV_ISSET(fields, 31)) {
66832 log_packet_detailed(" field 'extra_count' has changed");
66833
66834#ifdef FREECIV_JSON_CONNECTION
66835 field_addr.name = "extra_count";
66836#endif /* FREECIV_JSON_CONNECTION */
66837 e = 0;
66838
66839 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
66840
66841 if (e) {
66842 log_packet_detailed("'extra_count' field error detected");
66843 }
66844 }
66845
66846 if (BV_ISSET(fields, 32)) {
66847 log_packet_detailed(" field 'extra_removal_times' has changed");
66848
66849#ifdef FREECIV_JSON_CONNECTION
66850 field_addr.name = "extra_removal_times";
66851#endif /* FREECIV_JSON_CONNECTION */
66852 e = 0;
66853
66854 {
66855 int i;
66856
66857#ifdef FREECIV_JSON_CONNECTION
66858 /* Create the array. */
66859 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
66860
66861 /* Enter array. */
66862 field_addr.sub_location = plocation_elem_new(0);
66863#endif /* FREECIV_JSON_CONNECTION */
66864
66865 for (i = 0; i < real_packet->extra_count; i++) {
66866#ifdef FREECIV_JSON_CONNECTION
66867 /* Next array element. */
66868 field_addr.sub_location->number = i;
66869#endif /* FREECIV_JSON_CONNECTION */
66870
66871 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
66872 }
66873
66874#ifdef FREECIV_JSON_CONNECTION
66875 /* Exit array. */
66876 FC_FREE(field_addr.sub_location);
66877#endif /* FREECIV_JSON_CONNECTION */
66878 }
66879
66880 if (e) {
66881 log_packet_detailed("'extra_removal_times' field error detected");
66882 }
66883 }
66884
66885 if (BV_ISSET(fields, 33)) {
66886 log_packet_detailed(" field 'color_red' has changed");
66887
66888#ifdef FREECIV_JSON_CONNECTION
66889 field_addr.name = "color_red";
66890#endif /* FREECIV_JSON_CONNECTION */
66891 e = 0;
66892
66893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
66894
66895 if (e) {
66896 log_packet_detailed("'color_red' field error detected");
66897 }
66898 }
66899
66900 if (BV_ISSET(fields, 34)) {
66901 log_packet_detailed(" field 'color_green' has changed");
66902
66903#ifdef FREECIV_JSON_CONNECTION
66904 field_addr.name = "color_green";
66905#endif /* FREECIV_JSON_CONNECTION */
66906 e = 0;
66907
66908 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
66909
66910 if (e) {
66911 log_packet_detailed("'color_green' field error detected");
66912 }
66913 }
66914
66915 if (BV_ISSET(fields, 35)) {
66916 log_packet_detailed(" field 'color_blue' has changed");
66917
66918#ifdef FREECIV_JSON_CONNECTION
66919 field_addr.name = "color_blue";
66920#endif /* FREECIV_JSON_CONNECTION */
66921 e = 0;
66922
66923 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
66924
66925 if (e) {
66926 log_packet_detailed("'color_blue' field error detected");
66927 }
66928 }
66929
66930 if (BV_ISSET(fields, 36)) {
66931 log_packet_detailed(" field 'helptext' has changed");
66932
66933#ifdef FREECIV_JSON_CONNECTION
66934 field_addr.name = "helptext";
66935#endif /* FREECIV_JSON_CONNECTION */
66936 e = 0;
66937
66938 if (!real_packet->helptext) {
66939 /* Transmit null as empty */
66940 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
66941 } else {
66942 int i;
66943
66945 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
66946
66947#ifdef FREECIV_JSON_CONNECTION
66948 /* Enter array. */
66949 field_addr.sub_location = plocation_elem_new(0);
66950#endif /* FREECIV_JSON_CONNECTION */
66951
66952 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
66953#ifdef FREECIV_JSON_CONNECTION
66954 /* Next array element. */
66955 field_addr.sub_location->number = i;
66956#endif /* FREECIV_JSON_CONNECTION */
66957
66958 {
66959 const char *pstr = strvec_get(real_packet->helptext, i);
66960
66961 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
66962 }
66963 }
66964
66965#ifdef FREECIV_JSON_CONNECTION
66966 /* Exit array. */
66967 FC_FREE(field_addr.sub_location);
66968#endif /* FREECIV_JSON_CONNECTION */
66969 }
66970
66971 if (e) {
66972 log_packet_detailed("'helptext' field error detected");
66973 }
66974 }
66975
66976 old->id = real_packet->id;
66977 old->tclass = real_packet->tclass;
66978 old->flags = real_packet->flags;
66979 old->native_to = real_packet->native_to;
66980 sz_strlcpy(old->name, real_packet->name);
66981 sz_strlcpy(old->rule_name, real_packet->rule_name);
66982 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
66983 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
66984 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
66985 old->movement_cost = real_packet->movement_cost;
66986 old->defense_bonus = real_packet->defense_bonus;
66987 {
66988 int i;
66989
66990 for (i = 0; i < O_LAST; i++) {
66991 old->output[i] = real_packet->output[i];
66992 }
66993 }
66994 old->num_resources = real_packet->num_resources;
66995 {
66996 int i;
66997
66998 for (i = 0; i < real_packet->num_resources; i++) {
66999 old->resources[i] = real_packet->resources[i];
67000 }
67001 }
67002 {
67003 int i;
67004
67005 for (i = 0; i < real_packet->num_resources; i++) {
67006 old->resource_freq[i] = real_packet->resource_freq[i];
67007 }
67008 }
67009 {
67010 int i;
67011
67012 for (i = 0; i < O_LAST; i++) {
67013 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
67014 }
67015 }
67016 old->base_time = real_packet->base_time;
67017 old->road_time = real_packet->road_time;
67018 old->cultivate_result = real_packet->cultivate_result;
67019 old->cultivate_time = real_packet->cultivate_time;
67020 old->plant_result = real_packet->plant_result;
67021 old->plant_time = real_packet->plant_time;
67022 old->irrigation_food_incr = real_packet->irrigation_food_incr;
67023 old->irrigation_time = real_packet->irrigation_time;
67024 old->mining_shield_incr = real_packet->mining_shield_incr;
67025 old->mining_time = real_packet->mining_time;
67026 old->animal = real_packet->animal;
67027 old->transform_result = real_packet->transform_result;
67028 old->transform_time = real_packet->transform_time;
67029 old->placing_time = real_packet->placing_time;
67030 old->pillage_time = real_packet->pillage_time;
67031 old->extra_count = real_packet->extra_count;
67032 {
67033 int i;
67034
67035 for (i = 0; i < real_packet->extra_count; i++) {
67036 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
67037 }
67038 }
67039 old->color_red = real_packet->color_red;
67040 old->color_green = real_packet->color_green;
67041 old->color_blue = real_packet->color_blue;
67042 if (real_packet->helptext) {
67043 strvec_copy(old->helptext, real_packet->helptext);
67044 } else {
67045 strvec_clear(old->helptext);
67046 }
67047
67048#else /* FREECIV_DELTA_PROTOCOL */
67049#ifdef FREECIV_JSON_CONNECTION
67050 field_addr.name = "id";
67051#endif /* FREECIV_JSON_CONNECTION */
67052 e = 0;
67053
67054 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67055
67056 if (e) {
67057 log_packet_detailed("'id' field error detected");
67058 }
67059
67060#ifdef FREECIV_JSON_CONNECTION
67061 field_addr.name = "tclass";
67062#endif /* FREECIV_JSON_CONNECTION */
67063 e = 0;
67064
67065 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
67066
67067 if (e) {
67068 log_packet_detailed("'tclass' field error detected");
67069 }
67070
67071#ifdef FREECIV_JSON_CONNECTION
67072 field_addr.name = "flags";
67073#endif /* FREECIV_JSON_CONNECTION */
67074 e = 0;
67075
67076 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
67077
67078 if (e) {
67079 log_packet_detailed("'flags' field error detected");
67080 }
67081
67082#ifdef FREECIV_JSON_CONNECTION
67083 field_addr.name = "native_to";
67084#endif /* FREECIV_JSON_CONNECTION */
67085 e = 0;
67086
67087 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
67088
67089 if (e) {
67090 log_packet_detailed("'native_to' field error detected");
67091 }
67092
67093#ifdef FREECIV_JSON_CONNECTION
67094 field_addr.name = "name";
67095#endif /* FREECIV_JSON_CONNECTION */
67096 e = 0;
67097
67098 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67099
67100 if (e) {
67101 log_packet_detailed("'name' field error detected");
67102 }
67103
67104#ifdef FREECIV_JSON_CONNECTION
67105 field_addr.name = "rule_name";
67106#endif /* FREECIV_JSON_CONNECTION */
67107 e = 0;
67108
67109 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67110
67111 if (e) {
67112 log_packet_detailed("'rule_name' field error detected");
67113 }
67114
67115#ifdef FREECIV_JSON_CONNECTION
67116 field_addr.name = "graphic_str";
67117#endif /* FREECIV_JSON_CONNECTION */
67118 e = 0;
67119
67120 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
67121
67122 if (e) {
67123 log_packet_detailed("'graphic_str' field error detected");
67124 }
67125
67126#ifdef FREECIV_JSON_CONNECTION
67127 field_addr.name = "graphic_alt";
67128#endif /* FREECIV_JSON_CONNECTION */
67129 e = 0;
67130
67131 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
67132
67133 if (e) {
67134 log_packet_detailed("'graphic_alt' field error detected");
67135 }
67136
67137#ifdef FREECIV_JSON_CONNECTION
67138 field_addr.name = "graphic_alt2";
67139#endif /* FREECIV_JSON_CONNECTION */
67140 e = 0;
67141
67142 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
67143
67144 if (e) {
67145 log_packet_detailed("'graphic_alt2' field error detected");
67146 }
67147
67148#ifdef FREECIV_JSON_CONNECTION
67149 field_addr.name = "movement_cost";
67150#endif /* FREECIV_JSON_CONNECTION */
67151 e = 0;
67152
67153 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
67154
67155 if (e) {
67156 log_packet_detailed("'movement_cost' field error detected");
67157 }
67158
67159#ifdef FREECIV_JSON_CONNECTION
67160 field_addr.name = "defense_bonus";
67161#endif /* FREECIV_JSON_CONNECTION */
67162 e = 0;
67163
67164 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
67165
67166 if (e) {
67167 log_packet_detailed("'defense_bonus' field error detected");
67168 }
67169
67170#ifdef FREECIV_JSON_CONNECTION
67171 field_addr.name = "output";
67172#endif /* FREECIV_JSON_CONNECTION */
67173 e = 0;
67174
67175 {
67176 int i;
67177
67178#ifdef FREECIV_JSON_CONNECTION
67179 /* Create the array. */
67180 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67181
67182 /* Enter array. */
67183 field_addr.sub_location = plocation_elem_new(0);
67184#endif /* FREECIV_JSON_CONNECTION */
67185
67186 for (i = 0; i < O_LAST; i++) {
67187#ifdef FREECIV_JSON_CONNECTION
67188 /* Next array element. */
67189 field_addr.sub_location->number = i;
67190#endif /* FREECIV_JSON_CONNECTION */
67191
67192 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
67193 }
67194
67195#ifdef FREECIV_JSON_CONNECTION
67196 /* Exit array. */
67197 FC_FREE(field_addr.sub_location);
67198#endif /* FREECIV_JSON_CONNECTION */
67199 }
67200
67201 if (e) {
67202 log_packet_detailed("'output' field error detected");
67203 }
67204
67205#ifdef FREECIV_JSON_CONNECTION
67206 field_addr.name = "num_resources";
67207#endif /* FREECIV_JSON_CONNECTION */
67208 e = 0;
67209
67210 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
67211
67212 if (e) {
67213 log_packet_detailed("'num_resources' field error detected");
67214 }
67215
67216#ifdef FREECIV_JSON_CONNECTION
67217 field_addr.name = "resources";
67218#endif /* FREECIV_JSON_CONNECTION */
67219 e = 0;
67220
67221 {
67222 int i;
67223
67224#ifdef FREECIV_JSON_CONNECTION
67225 /* Create the array. */
67226 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67227
67228 /* Enter array. */
67229 field_addr.sub_location = plocation_elem_new(0);
67230#endif /* FREECIV_JSON_CONNECTION */
67231
67232 for (i = 0; i < real_packet->num_resources; i++) {
67233#ifdef FREECIV_JSON_CONNECTION
67234 /* Next array element. */
67235 field_addr.sub_location->number = i;
67236#endif /* FREECIV_JSON_CONNECTION */
67237
67238 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
67239 }
67240
67241#ifdef FREECIV_JSON_CONNECTION
67242 /* Exit array. */
67243 FC_FREE(field_addr.sub_location);
67244#endif /* FREECIV_JSON_CONNECTION */
67245 }
67246
67247 if (e) {
67248 log_packet_detailed("'resources' field error detected");
67249 }
67250
67251#ifdef FREECIV_JSON_CONNECTION
67252 field_addr.name = "resource_freq";
67253#endif /* FREECIV_JSON_CONNECTION */
67254 e = 0;
67255
67256 {
67257 int i;
67258
67259#ifdef FREECIV_JSON_CONNECTION
67260 /* Create the array. */
67261 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67262
67263 /* Enter array. */
67264 field_addr.sub_location = plocation_elem_new(0);
67265#endif /* FREECIV_JSON_CONNECTION */
67266
67267 for (i = 0; i < real_packet->num_resources; i++) {
67268#ifdef FREECIV_JSON_CONNECTION
67269 /* Next array element. */
67270 field_addr.sub_location->number = i;
67271#endif /* FREECIV_JSON_CONNECTION */
67272
67273 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
67274 }
67275
67276#ifdef FREECIV_JSON_CONNECTION
67277 /* Exit array. */
67278 FC_FREE(field_addr.sub_location);
67279#endif /* FREECIV_JSON_CONNECTION */
67280 }
67281
67282 if (e) {
67283 log_packet_detailed("'resource_freq' field error detected");
67284 }
67285
67286#ifdef FREECIV_JSON_CONNECTION
67287 field_addr.name = "road_output_incr_pct";
67288#endif /* FREECIV_JSON_CONNECTION */
67289 e = 0;
67290
67291 {
67292 int i;
67293
67294#ifdef FREECIV_JSON_CONNECTION
67295 /* Create the array. */
67296 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67297
67298 /* Enter array. */
67299 field_addr.sub_location = plocation_elem_new(0);
67300#endif /* FREECIV_JSON_CONNECTION */
67301
67302 for (i = 0; i < O_LAST; i++) {
67303#ifdef FREECIV_JSON_CONNECTION
67304 /* Next array element. */
67305 field_addr.sub_location->number = i;
67306#endif /* FREECIV_JSON_CONNECTION */
67307
67308 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
67309 }
67310
67311#ifdef FREECIV_JSON_CONNECTION
67312 /* Exit array. */
67313 FC_FREE(field_addr.sub_location);
67314#endif /* FREECIV_JSON_CONNECTION */
67315 }
67316
67317 if (e) {
67318 log_packet_detailed("'road_output_incr_pct' field error detected");
67319 }
67320
67321#ifdef FREECIV_JSON_CONNECTION
67322 field_addr.name = "base_time";
67323#endif /* FREECIV_JSON_CONNECTION */
67324 e = 0;
67325
67326 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
67327
67328 if (e) {
67329 log_packet_detailed("'base_time' field error detected");
67330 }
67331
67332#ifdef FREECIV_JSON_CONNECTION
67333 field_addr.name = "road_time";
67334#endif /* FREECIV_JSON_CONNECTION */
67335 e = 0;
67336
67337 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
67338
67339 if (e) {
67340 log_packet_detailed("'road_time' field error detected");
67341 }
67342
67343#ifdef FREECIV_JSON_CONNECTION
67344 field_addr.name = "cultivate_result";
67345#endif /* FREECIV_JSON_CONNECTION */
67346 e = 0;
67347
67348 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
67349
67350 if (e) {
67351 log_packet_detailed("'cultivate_result' field error detected");
67352 }
67353
67354#ifdef FREECIV_JSON_CONNECTION
67355 field_addr.name = "cultivate_time";
67356#endif /* FREECIV_JSON_CONNECTION */
67357 e = 0;
67358
67359 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
67360
67361 if (e) {
67362 log_packet_detailed("'cultivate_time' field error detected");
67363 }
67364
67365#ifdef FREECIV_JSON_CONNECTION
67366 field_addr.name = "plant_result";
67367#endif /* FREECIV_JSON_CONNECTION */
67368 e = 0;
67369
67370 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
67371
67372 if (e) {
67373 log_packet_detailed("'plant_result' field error detected");
67374 }
67375
67376#ifdef FREECIV_JSON_CONNECTION
67377 field_addr.name = "plant_time";
67378#endif /* FREECIV_JSON_CONNECTION */
67379 e = 0;
67380
67381 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
67382
67383 if (e) {
67384 log_packet_detailed("'plant_time' field error detected");
67385 }
67386
67387#ifdef FREECIV_JSON_CONNECTION
67388 field_addr.name = "irrigation_food_incr";
67389#endif /* FREECIV_JSON_CONNECTION */
67390 e = 0;
67391
67392 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
67393
67394 if (e) {
67395 log_packet_detailed("'irrigation_food_incr' field error detected");
67396 }
67397
67398#ifdef FREECIV_JSON_CONNECTION
67399 field_addr.name = "irrigation_time";
67400#endif /* FREECIV_JSON_CONNECTION */
67401 e = 0;
67402
67403 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
67404
67405 if (e) {
67406 log_packet_detailed("'irrigation_time' field error detected");
67407 }
67408
67409#ifdef FREECIV_JSON_CONNECTION
67410 field_addr.name = "mining_shield_incr";
67411#endif /* FREECIV_JSON_CONNECTION */
67412 e = 0;
67413
67414 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
67415
67416 if (e) {
67417 log_packet_detailed("'mining_shield_incr' field error detected");
67418 }
67419
67420#ifdef FREECIV_JSON_CONNECTION
67421 field_addr.name = "mining_time";
67422#endif /* FREECIV_JSON_CONNECTION */
67423 e = 0;
67424
67425 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
67426
67427 if (e) {
67428 log_packet_detailed("'mining_time' field error detected");
67429 }
67430
67431#ifdef FREECIV_JSON_CONNECTION
67432 field_addr.name = "animal";
67433#endif /* FREECIV_JSON_CONNECTION */
67434 e = 0;
67435
67436 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
67437
67438 if (e) {
67439 log_packet_detailed("'animal' field error detected");
67440 }
67441
67442#ifdef FREECIV_JSON_CONNECTION
67443 field_addr.name = "transform_result";
67444#endif /* FREECIV_JSON_CONNECTION */
67445 e = 0;
67446
67447 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
67448
67449 if (e) {
67450 log_packet_detailed("'transform_result' field error detected");
67451 }
67452
67453#ifdef FREECIV_JSON_CONNECTION
67454 field_addr.name = "transform_time";
67455#endif /* FREECIV_JSON_CONNECTION */
67456 e = 0;
67457
67458 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
67459
67460 if (e) {
67461 log_packet_detailed("'transform_time' field error detected");
67462 }
67463
67464#ifdef FREECIV_JSON_CONNECTION
67465 field_addr.name = "placing_time";
67466#endif /* FREECIV_JSON_CONNECTION */
67467 e = 0;
67468
67469 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
67470
67471 if (e) {
67472 log_packet_detailed("'placing_time' field error detected");
67473 }
67474
67475#ifdef FREECIV_JSON_CONNECTION
67476 field_addr.name = "pillage_time";
67477#endif /* FREECIV_JSON_CONNECTION */
67478 e = 0;
67479
67480 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
67481
67482 if (e) {
67483 log_packet_detailed("'pillage_time' field error detected");
67484 }
67485
67486#ifdef FREECIV_JSON_CONNECTION
67487 field_addr.name = "extra_count";
67488#endif /* FREECIV_JSON_CONNECTION */
67489 e = 0;
67490
67491 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
67492
67493 if (e) {
67494 log_packet_detailed("'extra_count' field error detected");
67495 }
67496
67497#ifdef FREECIV_JSON_CONNECTION
67498 field_addr.name = "extra_removal_times";
67499#endif /* FREECIV_JSON_CONNECTION */
67500 e = 0;
67501
67502 {
67503 int i;
67504
67505#ifdef FREECIV_JSON_CONNECTION
67506 /* Create the array. */
67507 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
67508
67509 /* Enter array. */
67510 field_addr.sub_location = plocation_elem_new(0);
67511#endif /* FREECIV_JSON_CONNECTION */
67512
67513 for (i = 0; i < real_packet->extra_count; i++) {
67514#ifdef FREECIV_JSON_CONNECTION
67515 /* Next array element. */
67516 field_addr.sub_location->number = i;
67517#endif /* FREECIV_JSON_CONNECTION */
67518
67519 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
67520 }
67521
67522#ifdef FREECIV_JSON_CONNECTION
67523 /* Exit array. */
67524 FC_FREE(field_addr.sub_location);
67525#endif /* FREECIV_JSON_CONNECTION */
67526 }
67527
67528 if (e) {
67529 log_packet_detailed("'extra_removal_times' field error detected");
67530 }
67531
67532#ifdef FREECIV_JSON_CONNECTION
67533 field_addr.name = "color_red";
67534#endif /* FREECIV_JSON_CONNECTION */
67535 e = 0;
67536
67537 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
67538
67539 if (e) {
67540 log_packet_detailed("'color_red' field error detected");
67541 }
67542
67543#ifdef FREECIV_JSON_CONNECTION
67544 field_addr.name = "color_green";
67545#endif /* FREECIV_JSON_CONNECTION */
67546 e = 0;
67547
67548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
67549
67550 if (e) {
67551 log_packet_detailed("'color_green' field error detected");
67552 }
67553
67554#ifdef FREECIV_JSON_CONNECTION
67555 field_addr.name = "color_blue";
67556#endif /* FREECIV_JSON_CONNECTION */
67557 e = 0;
67558
67559 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
67560
67561 if (e) {
67562 log_packet_detailed("'color_blue' field error detected");
67563 }
67564
67565#ifdef FREECIV_JSON_CONNECTION
67566 field_addr.name = "helptext";
67567#endif /* FREECIV_JSON_CONNECTION */
67568 e = 0;
67569
67570 if (!real_packet->helptext) {
67571 /* Transmit null as empty */
67572 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
67573 } else {
67574 int i;
67575
67577 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
67578
67579#ifdef FREECIV_JSON_CONNECTION
67580 /* Enter array. */
67581 field_addr.sub_location = plocation_elem_new(0);
67582#endif /* FREECIV_JSON_CONNECTION */
67583
67584 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
67585#ifdef FREECIV_JSON_CONNECTION
67586 /* Next array element. */
67587 field_addr.sub_location->number = i;
67588#endif /* FREECIV_JSON_CONNECTION */
67589
67590 {
67591 const char *pstr = strvec_get(real_packet->helptext, i);
67592
67593 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
67594 }
67595 }
67596
67597#ifdef FREECIV_JSON_CONNECTION
67598 /* Exit array. */
67599 FC_FREE(field_addr.sub_location);
67600#endif /* FREECIV_JSON_CONNECTION */
67601 }
67602
67603 if (e) {
67604 log_packet_detailed("'helptext' field error detected");
67605 }
67606#endif /* FREECIV_DELTA_PROTOCOL */
67607
67609}
67610
67612{
67613 if (!pc->used) {
67614 log_error("WARNING: trying to send data to the closed connection %s",
67616 return -1;
67617 }
67618 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet != nullptr, -1,
67619 "Handler for PACKET_RULESET_TERRAIN not installed");
67620 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet(pc, packet);
67621}
67622
67623void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
67624{
67625 conn_list_iterate(dest, pconn) {
67628}
67629
67631{
67632 memset(packet, 0, sizeof(*packet));
67633}
67634
67635#define free_packet_ruleset_terrain_flag(_packet) (void) 0
67636#define destroy_packet_ruleset_terrain_flag free
67637
67638#ifdef FREECIV_DELTA_PROTOCOL
67639#define hash_packet_ruleset_terrain_flag_100 hash_const
67640#define cmp_packet_ruleset_terrain_flag_100 cmp_const
67642#endif /* FREECIV_DELTA_PROTOCOL */
67643
67645{
67646#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_flag(_packet)
67648
67649#ifdef FREECIV_JSON_CONNECTION
67650 struct plocation field_addr;
67651 {
67652 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
67655 }
67656#endif /* FREECIV_JSON_CONNECTION */
67657
67658 log_packet_detailed("packet_ruleset_terrain_flag_100: got info about ()");
67659
67660#ifdef FREECIV_DELTA_PROTOCOL
67663 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_FLAG;
67664
67665 if (nullptr == *hash) {
67667 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
67668 }
67669
67670 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67671 *real_packet = *old;
67672 } else {
67673 /* packet is already initialized empty */
67674 log_packet_detailed(" no old info");
67675 }
67676
67677#ifdef FREECIV_JSON_CONNECTION
67678 field_addr.name = "fields";
67679#endif /* FREECIV_JSON_CONNECTION */
67680 DIO_BV_GET(&din, &field_addr, fields);
67681
67682 if (BV_ISSET(fields, 0)) {
67683 log_packet_detailed(" got field 'id'");
67684
67685#ifdef FREECIV_JSON_CONNECTION
67686 field_addr.name = "id";
67687#endif /* FREECIV_JSON_CONNECTION */
67688
67689 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67691 }
67692 }
67693
67694 if (BV_ISSET(fields, 1)) {
67695 log_packet_detailed(" got field 'name'");
67696
67697#ifdef FREECIV_JSON_CONNECTION
67698 field_addr.name = "name";
67699#endif /* FREECIV_JSON_CONNECTION */
67700
67701 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67703 }
67704 }
67705
67706 if (BV_ISSET(fields, 2)) {
67707 log_packet_detailed(" got field 'helptxt'");
67708
67709#ifdef FREECIV_JSON_CONNECTION
67710 field_addr.name = "helptxt";
67711#endif /* FREECIV_JSON_CONNECTION */
67712
67713 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
67715 }
67716 }
67717
67718 if (nullptr == old) {
67719 old = fc_malloc(sizeof(*old));
67721 *old = *real_packet;
67723 } else {
67724 *old = *real_packet;
67725 }
67726
67727#else /* FREECIV_DELTA_PROTOCOL */
67728#ifdef FREECIV_JSON_CONNECTION
67729 field_addr.name = "id";
67730#endif /* FREECIV_JSON_CONNECTION */
67731
67732 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67734 }
67735
67736#ifdef FREECIV_JSON_CONNECTION
67737 field_addr.name = "name";
67738#endif /* FREECIV_JSON_CONNECTION */
67739
67740 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67742 }
67743
67744#ifdef FREECIV_JSON_CONNECTION
67745 field_addr.name = "helptxt";
67746#endif /* FREECIV_JSON_CONNECTION */
67747
67748 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
67750 }
67751#endif /* FREECIV_DELTA_PROTOCOL */
67752
67754#undef FREE_PACKET_STRUCT
67755}
67756
67758{
67759 const struct packet_ruleset_terrain_flag *real_packet = packet;
67760 int e;
67762
67763 log_packet_detailed("packet_ruleset_terrain_flag_100: sending info about ()");
67764
67765#ifdef FREECIV_DELTA_PROTOCOL
67768 bool differ;
67769 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_FLAG;
67770
67771 if (nullptr == *hash) {
67773 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
67774 }
67775 BV_CLR_ALL(fields);
67776
67777 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67778 old = fc_malloc(sizeof(*old));
67779 /* temporary bitcopy just to insert correctly */
67780 *old = *real_packet;
67783 }
67784
67785 differ = (old->id != real_packet->id);
67786 if (differ) {
67787 BV_SET(fields, 0);
67788 }
67789
67790 differ = (strcmp(old->name, real_packet->name) != 0);
67791 if (differ) {
67792 BV_SET(fields, 1);
67793 }
67794
67795 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
67796 if (differ) {
67797 BV_SET(fields, 2);
67798 }
67799#endif /* FREECIV_DELTA_PROTOCOL */
67800
67801#ifdef FREECIV_JSON_CONNECTION
67802 struct plocation field_addr;
67803 {
67804 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
67807 }
67808#endif /* FREECIV_JSON_CONNECTION */
67809
67810#ifdef FREECIV_DELTA_PROTOCOL
67811#ifdef FREECIV_JSON_CONNECTION
67812 field_addr.name = "fields";
67813#endif /* FREECIV_JSON_CONNECTION */
67814 e = 0;
67815 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67816 if (e) {
67817 log_packet_detailed("fields bitvector error detected");
67818 }
67819
67820 if (BV_ISSET(fields, 0)) {
67821 log_packet_detailed(" field 'id' has changed");
67822
67823#ifdef FREECIV_JSON_CONNECTION
67824 field_addr.name = "id";
67825#endif /* FREECIV_JSON_CONNECTION */
67826 e = 0;
67827
67828 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67829
67830 if (e) {
67831 log_packet_detailed("'id' field error detected");
67832 }
67833 }
67834
67835 if (BV_ISSET(fields, 1)) {
67836 log_packet_detailed(" field 'name' has changed");
67837
67838#ifdef FREECIV_JSON_CONNECTION
67839 field_addr.name = "name";
67840#endif /* FREECIV_JSON_CONNECTION */
67841 e = 0;
67842
67843 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67844
67845 if (e) {
67846 log_packet_detailed("'name' field error detected");
67847 }
67848 }
67849
67850 if (BV_ISSET(fields, 2)) {
67851 log_packet_detailed(" field 'helptxt' has changed");
67852
67853#ifdef FREECIV_JSON_CONNECTION
67854 field_addr.name = "helptxt";
67855#endif /* FREECIV_JSON_CONNECTION */
67856 e = 0;
67857
67858 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
67859
67860 if (e) {
67861 log_packet_detailed("'helptxt' field error detected");
67862 }
67863 }
67864
67865 *old = *real_packet;
67866
67867#else /* FREECIV_DELTA_PROTOCOL */
67868#ifdef FREECIV_JSON_CONNECTION
67869 field_addr.name = "id";
67870#endif /* FREECIV_JSON_CONNECTION */
67871 e = 0;
67872
67873 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67874
67875 if (e) {
67876 log_packet_detailed("'id' field error detected");
67877 }
67878
67879#ifdef FREECIV_JSON_CONNECTION
67880 field_addr.name = "name";
67881#endif /* FREECIV_JSON_CONNECTION */
67882 e = 0;
67883
67884 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67885
67886 if (e) {
67887 log_packet_detailed("'name' field error detected");
67888 }
67889
67890#ifdef FREECIV_JSON_CONNECTION
67891 field_addr.name = "helptxt";
67892#endif /* FREECIV_JSON_CONNECTION */
67893 e = 0;
67894
67895 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
67896
67897 if (e) {
67898 log_packet_detailed("'helptxt' field error detected");
67899 }
67900#endif /* FREECIV_DELTA_PROTOCOL */
67901
67903}
67904
67906{
67907 if (!pc->used) {
67908 log_error("WARNING: trying to send data to the closed connection %s",
67910 return -1;
67911 }
67912 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet != nullptr, -1,
67913 "Handler for PACKET_RULESET_TERRAIN_FLAG not installed");
67914 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet(pc, packet);
67915}
67916
67918{
67919 conn_list_iterate(dest, pconn) {
67922}
67923
67925{
67926 memset(packet, 0, sizeof(*packet));
67927
67928 packet->helptext = strvec_new();
67929}
67930
67932{
67933 if (packet->helptext) {
67934 strvec_destroy(packet->helptext);
67935 packet->helptext = nullptr;
67936 }
67937}
67938
67939static inline void destroy_packet_ruleset_unit_class(void *packet)
67940{
67942 free(packet);
67943}
67944
67945#ifdef FREECIV_DELTA_PROTOCOL
67946#define hash_packet_ruleset_unit_class_100 hash_const
67947#define cmp_packet_ruleset_unit_class_100 cmp_const
67949#endif /* FREECIV_DELTA_PROTOCOL */
67950
67952{
67953#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class(_packet)
67955
67956#ifdef FREECIV_JSON_CONNECTION
67957 struct plocation field_addr;
67958 {
67959 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
67962 }
67963#endif /* FREECIV_JSON_CONNECTION */
67964
67965 log_packet_detailed("packet_ruleset_unit_class_100: got info about ()");
67966
67967#ifdef FREECIV_DELTA_PROTOCOL
67970 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS;
67971
67972 if (nullptr == *hash) {
67974 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
67975 }
67976
67977 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67978 real_packet->id = old->id;
67979 sz_strlcpy(real_packet->name, old->name);
67980 sz_strlcpy(real_packet->rule_name, old->rule_name);
67981 real_packet->min_speed = old->min_speed;
67982 real_packet->hp_loss_pct = old->hp_loss_pct;
67983 real_packet->non_native_def_pct = old->non_native_def_pct;
67984 real_packet->flags = old->flags;
67985 if (old->helptext) {
67986 strvec_copy(real_packet->helptext, old->helptext);
67987 } else {
67988 strvec_clear(real_packet->helptext);
67989 }
67990 } else {
67991 /* packet is already initialized empty */
67992 log_packet_detailed(" no old info");
67993 }
67994
67995#ifdef FREECIV_JSON_CONNECTION
67996 field_addr.name = "fields";
67997#endif /* FREECIV_JSON_CONNECTION */
67998 DIO_BV_GET(&din, &field_addr, fields);
67999
68000 if (BV_ISSET(fields, 0)) {
68001 log_packet_detailed(" got field 'id'");
68002
68003#ifdef FREECIV_JSON_CONNECTION
68004 field_addr.name = "id";
68005#endif /* FREECIV_JSON_CONNECTION */
68006
68007 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68009 }
68010 }
68011
68012 if (BV_ISSET(fields, 1)) {
68013 log_packet_detailed(" got field 'name'");
68014
68015#ifdef FREECIV_JSON_CONNECTION
68016 field_addr.name = "name";
68017#endif /* FREECIV_JSON_CONNECTION */
68018
68019 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68021 }
68022 }
68023
68024 if (BV_ISSET(fields, 2)) {
68025 log_packet_detailed(" got field 'rule_name'");
68026
68027#ifdef FREECIV_JSON_CONNECTION
68028 field_addr.name = "rule_name";
68029#endif /* FREECIV_JSON_CONNECTION */
68030
68031 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68032 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68033 }
68034 }
68035
68036 if (BV_ISSET(fields, 3)) {
68037 log_packet_detailed(" got field 'min_speed'");
68038
68039#ifdef FREECIV_JSON_CONNECTION
68040 field_addr.name = "min_speed";
68041#endif /* FREECIV_JSON_CONNECTION */
68042
68043 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68044 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68045 }
68046 }
68047
68048 if (BV_ISSET(fields, 4)) {
68049 log_packet_detailed(" got field 'hp_loss_pct'");
68050
68051#ifdef FREECIV_JSON_CONNECTION
68052 field_addr.name = "hp_loss_pct";
68053#endif /* FREECIV_JSON_CONNECTION */
68054
68055 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68056 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68057 }
68058 }
68059
68060 if (BV_ISSET(fields, 5)) {
68061 log_packet_detailed(" got field 'non_native_def_pct'");
68062
68063#ifdef FREECIV_JSON_CONNECTION
68064 field_addr.name = "non_native_def_pct";
68065#endif /* FREECIV_JSON_CONNECTION */
68066
68067 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68068 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68069 }
68070 }
68071
68072 if (BV_ISSET(fields, 6)) {
68073 log_packet_detailed(" got field 'flags'");
68074
68075#ifdef FREECIV_JSON_CONNECTION
68076 field_addr.name = "flags";
68077#endif /* FREECIV_JSON_CONNECTION */
68078
68079 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68081 }
68082 }
68083
68084 if (BV_ISSET(fields, 7)) {
68085 log_packet_detailed(" got field 'helptext'");
68086
68087#ifdef FREECIV_JSON_CONNECTION
68088 field_addr.name = "helptext";
68089#endif /* FREECIV_JSON_CONNECTION */
68090
68091 {
68092 int i;
68093
68094 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68096 }
68097 strvec_reserve(real_packet->helptext, i);
68098
68099#ifdef FREECIV_JSON_CONNECTION
68100 /* Enter array. */
68101 field_addr.sub_location = plocation_elem_new(0);
68102#endif /* FREECIV_JSON_CONNECTION */
68103
68104 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68105#ifdef FREECIV_JSON_CONNECTION
68106 /* Next array element */
68107 field_addr.sub_location->number = i;
68108#endif /* FREECIV_JSON_CONNECTION */
68109
68110 {
68111 char readin[MAX_LEN_PACKET];
68112
68113 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68114 || !strvec_set(real_packet->helptext, i, readin)) {
68116 }
68117 }
68118 }
68119
68120#ifdef FREECIV_JSON_CONNECTION
68121 /* Exit array. */
68122 FC_FREE(field_addr.sub_location);
68123#endif /* FREECIV_JSON_CONNECTION */
68124 }
68125 }
68126
68127 if (nullptr == old) {
68128 old = fc_malloc(sizeof(*old));
68130 old->id = real_packet->id;
68131 sz_strlcpy(old->name, real_packet->name);
68132 sz_strlcpy(old->rule_name, real_packet->rule_name);
68133 old->min_speed = real_packet->min_speed;
68134 old->hp_loss_pct = real_packet->hp_loss_pct;
68135 old->non_native_def_pct = real_packet->non_native_def_pct;
68136 old->flags = real_packet->flags;
68137 if (real_packet->helptext) {
68138 strvec_copy(old->helptext, real_packet->helptext);
68139 } else {
68140 strvec_clear(old->helptext);
68141 }
68143 } else {
68144 old->id = real_packet->id;
68145 sz_strlcpy(old->name, real_packet->name);
68146 sz_strlcpy(old->rule_name, real_packet->rule_name);
68147 old->min_speed = real_packet->min_speed;
68148 old->hp_loss_pct = real_packet->hp_loss_pct;
68149 old->non_native_def_pct = real_packet->non_native_def_pct;
68150 old->flags = real_packet->flags;
68151 if (real_packet->helptext) {
68152 strvec_copy(old->helptext, real_packet->helptext);
68153 } else {
68154 strvec_clear(old->helptext);
68155 }
68156 }
68157
68158#else /* FREECIV_DELTA_PROTOCOL */
68159#ifdef FREECIV_JSON_CONNECTION
68160 field_addr.name = "id";
68161#endif /* FREECIV_JSON_CONNECTION */
68162
68163 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68165 }
68166
68167#ifdef FREECIV_JSON_CONNECTION
68168 field_addr.name = "name";
68169#endif /* FREECIV_JSON_CONNECTION */
68170
68171 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68173 }
68174
68175#ifdef FREECIV_JSON_CONNECTION
68176 field_addr.name = "rule_name";
68177#endif /* FREECIV_JSON_CONNECTION */
68178
68179 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68180 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68181 }
68182
68183#ifdef FREECIV_JSON_CONNECTION
68184 field_addr.name = "min_speed";
68185#endif /* FREECIV_JSON_CONNECTION */
68186
68187 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68188 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68189 }
68190
68191#ifdef FREECIV_JSON_CONNECTION
68192 field_addr.name = "hp_loss_pct";
68193#endif /* FREECIV_JSON_CONNECTION */
68194
68195 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68196 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68197 }
68198
68199#ifdef FREECIV_JSON_CONNECTION
68200 field_addr.name = "non_native_def_pct";
68201#endif /* FREECIV_JSON_CONNECTION */
68202
68203 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68204 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68205 }
68206
68207#ifdef FREECIV_JSON_CONNECTION
68208 field_addr.name = "flags";
68209#endif /* FREECIV_JSON_CONNECTION */
68210
68211 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68213 }
68214
68215#ifdef FREECIV_JSON_CONNECTION
68216 field_addr.name = "helptext";
68217#endif /* FREECIV_JSON_CONNECTION */
68218
68219 {
68220 int i;
68221
68222 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68224 }
68225 strvec_reserve(real_packet->helptext, i);
68226
68227#ifdef FREECIV_JSON_CONNECTION
68228 /* Enter array. */
68229 field_addr.sub_location = plocation_elem_new(0);
68230#endif /* FREECIV_JSON_CONNECTION */
68231
68232 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68233#ifdef FREECIV_JSON_CONNECTION
68234 /* Next array element */
68235 field_addr.sub_location->number = i;
68236#endif /* FREECIV_JSON_CONNECTION */
68237
68238 {
68239 char readin[MAX_LEN_PACKET];
68240
68241 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68242 || !strvec_set(real_packet->helptext, i, readin)) {
68244 }
68245 }
68246 }
68247
68248#ifdef FREECIV_JSON_CONNECTION
68249 /* Exit array. */
68250 FC_FREE(field_addr.sub_location);
68251#endif /* FREECIV_JSON_CONNECTION */
68252 }
68253#endif /* FREECIV_DELTA_PROTOCOL */
68254
68256#undef FREE_PACKET_STRUCT
68257}
68258
68260{
68261 const struct packet_ruleset_unit_class *real_packet = packet;
68262 int e;
68264
68265 log_packet_detailed("packet_ruleset_unit_class_100: sending info about ()");
68266
68267#ifdef FREECIV_DELTA_PROTOCOL
68270 bool differ;
68271 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS;
68272
68273 if (nullptr == *hash) {
68275 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
68276 }
68277 BV_CLR_ALL(fields);
68278
68279 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68280 old = fc_malloc(sizeof(*old));
68281 /* temporary bitcopy just to insert correctly */
68282 *old = *real_packet;
68285 }
68286
68287 differ = (old->id != real_packet->id);
68288 if (differ) {
68289 BV_SET(fields, 0);
68290 }
68291
68292 differ = (strcmp(old->name, real_packet->name) != 0);
68293 if (differ) {
68294 BV_SET(fields, 1);
68295 }
68296
68297 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
68298 if (differ) {
68299 BV_SET(fields, 2);
68300 }
68301
68302 differ = (old->min_speed != real_packet->min_speed);
68303 if (differ) {
68304 BV_SET(fields, 3);
68305 }
68306
68307 differ = (old->hp_loss_pct != real_packet->hp_loss_pct);
68308 if (differ) {
68309 BV_SET(fields, 4);
68310 }
68311
68312 differ = (old->non_native_def_pct != real_packet->non_native_def_pct);
68313 if (differ) {
68314 BV_SET(fields, 5);
68315 }
68316
68317 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
68318 if (differ) {
68319 BV_SET(fields, 6);
68320 }
68321
68322 if (real_packet->helptext) {
68323 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
68324 } else {
68325 differ = (strvec_size(old->helptext) > 0);
68326 }
68327 if (differ) {
68328 BV_SET(fields, 7);
68329 }
68330#endif /* FREECIV_DELTA_PROTOCOL */
68331
68332#ifdef FREECIV_JSON_CONNECTION
68333 struct plocation field_addr;
68334 {
68335 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68338 }
68339#endif /* FREECIV_JSON_CONNECTION */
68340
68341#ifdef FREECIV_DELTA_PROTOCOL
68342#ifdef FREECIV_JSON_CONNECTION
68343 field_addr.name = "fields";
68344#endif /* FREECIV_JSON_CONNECTION */
68345 e = 0;
68346 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68347 if (e) {
68348 log_packet_detailed("fields bitvector error detected");
68349 }
68350
68351 if (BV_ISSET(fields, 0)) {
68352 log_packet_detailed(" field 'id' has changed");
68353
68354#ifdef FREECIV_JSON_CONNECTION
68355 field_addr.name = "id";
68356#endif /* FREECIV_JSON_CONNECTION */
68357 e = 0;
68358
68359 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68360
68361 if (e) {
68362 log_packet_detailed("'id' field error detected");
68363 }
68364 }
68365
68366 if (BV_ISSET(fields, 1)) {
68367 log_packet_detailed(" field 'name' has changed");
68368
68369#ifdef FREECIV_JSON_CONNECTION
68370 field_addr.name = "name";
68371#endif /* FREECIV_JSON_CONNECTION */
68372 e = 0;
68373
68374 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68375
68376 if (e) {
68377 log_packet_detailed("'name' field error detected");
68378 }
68379 }
68380
68381 if (BV_ISSET(fields, 2)) {
68382 log_packet_detailed(" field 'rule_name' has changed");
68383
68384#ifdef FREECIV_JSON_CONNECTION
68385 field_addr.name = "rule_name";
68386#endif /* FREECIV_JSON_CONNECTION */
68387 e = 0;
68388
68389 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68390
68391 if (e) {
68392 log_packet_detailed("'rule_name' field error detected");
68393 }
68394 }
68395
68396 if (BV_ISSET(fields, 3)) {
68397 log_packet_detailed(" field 'min_speed' has changed");
68398
68399#ifdef FREECIV_JSON_CONNECTION
68400 field_addr.name = "min_speed";
68401#endif /* FREECIV_JSON_CONNECTION */
68402 e = 0;
68403
68404 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
68405
68406 if (e) {
68407 log_packet_detailed("'min_speed' field error detected");
68408 }
68409 }
68410
68411 if (BV_ISSET(fields, 4)) {
68412 log_packet_detailed(" field 'hp_loss_pct' has changed");
68413
68414#ifdef FREECIV_JSON_CONNECTION
68415 field_addr.name = "hp_loss_pct";
68416#endif /* FREECIV_JSON_CONNECTION */
68417 e = 0;
68418
68419 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
68420
68421 if (e) {
68422 log_packet_detailed("'hp_loss_pct' field error detected");
68423 }
68424 }
68425
68426 if (BV_ISSET(fields, 5)) {
68427 log_packet_detailed(" field 'non_native_def_pct' has changed");
68428
68429#ifdef FREECIV_JSON_CONNECTION
68430 field_addr.name = "non_native_def_pct";
68431#endif /* FREECIV_JSON_CONNECTION */
68432 e = 0;
68433
68434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
68435
68436 if (e) {
68437 log_packet_detailed("'non_native_def_pct' field error detected");
68438 }
68439 }
68440
68441 if (BV_ISSET(fields, 6)) {
68442 log_packet_detailed(" field 'flags' has changed");
68443
68444#ifdef FREECIV_JSON_CONNECTION
68445 field_addr.name = "flags";
68446#endif /* FREECIV_JSON_CONNECTION */
68447 e = 0;
68448
68449 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
68450
68451 if (e) {
68452 log_packet_detailed("'flags' field error detected");
68453 }
68454 }
68455
68456 if (BV_ISSET(fields, 7)) {
68457 log_packet_detailed(" field 'helptext' has changed");
68458
68459#ifdef FREECIV_JSON_CONNECTION
68460 field_addr.name = "helptext";
68461#endif /* FREECIV_JSON_CONNECTION */
68462 e = 0;
68463
68464 if (!real_packet->helptext) {
68465 /* Transmit null as empty */
68466 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68467 } else {
68468 int i;
68469
68471 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68472
68473#ifdef FREECIV_JSON_CONNECTION
68474 /* Enter array. */
68475 field_addr.sub_location = plocation_elem_new(0);
68476#endif /* FREECIV_JSON_CONNECTION */
68477
68478 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68479#ifdef FREECIV_JSON_CONNECTION
68480 /* Next array element. */
68481 field_addr.sub_location->number = i;
68482#endif /* FREECIV_JSON_CONNECTION */
68483
68484 {
68485 const char *pstr = strvec_get(real_packet->helptext, i);
68486
68487 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68488 }
68489 }
68490
68491#ifdef FREECIV_JSON_CONNECTION
68492 /* Exit array. */
68493 FC_FREE(field_addr.sub_location);
68494#endif /* FREECIV_JSON_CONNECTION */
68495 }
68496
68497 if (e) {
68498 log_packet_detailed("'helptext' field error detected");
68499 }
68500 }
68501
68502 old->id = real_packet->id;
68503 sz_strlcpy(old->name, real_packet->name);
68504 sz_strlcpy(old->rule_name, real_packet->rule_name);
68505 old->min_speed = real_packet->min_speed;
68506 old->hp_loss_pct = real_packet->hp_loss_pct;
68507 old->non_native_def_pct = real_packet->non_native_def_pct;
68508 old->flags = real_packet->flags;
68509 if (real_packet->helptext) {
68510 strvec_copy(old->helptext, real_packet->helptext);
68511 } else {
68512 strvec_clear(old->helptext);
68513 }
68514
68515#else /* FREECIV_DELTA_PROTOCOL */
68516#ifdef FREECIV_JSON_CONNECTION
68517 field_addr.name = "id";
68518#endif /* FREECIV_JSON_CONNECTION */
68519 e = 0;
68520
68521 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68522
68523 if (e) {
68524 log_packet_detailed("'id' field error detected");
68525 }
68526
68527#ifdef FREECIV_JSON_CONNECTION
68528 field_addr.name = "name";
68529#endif /* FREECIV_JSON_CONNECTION */
68530 e = 0;
68531
68532 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68533
68534 if (e) {
68535 log_packet_detailed("'name' field error detected");
68536 }
68537
68538#ifdef FREECIV_JSON_CONNECTION
68539 field_addr.name = "rule_name";
68540#endif /* FREECIV_JSON_CONNECTION */
68541 e = 0;
68542
68543 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68544
68545 if (e) {
68546 log_packet_detailed("'rule_name' field error detected");
68547 }
68548
68549#ifdef FREECIV_JSON_CONNECTION
68550 field_addr.name = "min_speed";
68551#endif /* FREECIV_JSON_CONNECTION */
68552 e = 0;
68553
68554 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
68555
68556 if (e) {
68557 log_packet_detailed("'min_speed' field error detected");
68558 }
68559
68560#ifdef FREECIV_JSON_CONNECTION
68561 field_addr.name = "hp_loss_pct";
68562#endif /* FREECIV_JSON_CONNECTION */
68563 e = 0;
68564
68565 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
68566
68567 if (e) {
68568 log_packet_detailed("'hp_loss_pct' field error detected");
68569 }
68570
68571#ifdef FREECIV_JSON_CONNECTION
68572 field_addr.name = "non_native_def_pct";
68573#endif /* FREECIV_JSON_CONNECTION */
68574 e = 0;
68575
68576 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
68577
68578 if (e) {
68579 log_packet_detailed("'non_native_def_pct' field error detected");
68580 }
68581
68582#ifdef FREECIV_JSON_CONNECTION
68583 field_addr.name = "flags";
68584#endif /* FREECIV_JSON_CONNECTION */
68585 e = 0;
68586
68587 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
68588
68589 if (e) {
68590 log_packet_detailed("'flags' field error detected");
68591 }
68592
68593#ifdef FREECIV_JSON_CONNECTION
68594 field_addr.name = "helptext";
68595#endif /* FREECIV_JSON_CONNECTION */
68596 e = 0;
68597
68598 if (!real_packet->helptext) {
68599 /* Transmit null as empty */
68600 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68601 } else {
68602 int i;
68603
68605 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68606
68607#ifdef FREECIV_JSON_CONNECTION
68608 /* Enter array. */
68609 field_addr.sub_location = plocation_elem_new(0);
68610#endif /* FREECIV_JSON_CONNECTION */
68611
68612 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68613#ifdef FREECIV_JSON_CONNECTION
68614 /* Next array element. */
68615 field_addr.sub_location->number = i;
68616#endif /* FREECIV_JSON_CONNECTION */
68617
68618 {
68619 const char *pstr = strvec_get(real_packet->helptext, i);
68620
68621 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68622 }
68623 }
68624
68625#ifdef FREECIV_JSON_CONNECTION
68626 /* Exit array. */
68627 FC_FREE(field_addr.sub_location);
68628#endif /* FREECIV_JSON_CONNECTION */
68629 }
68630
68631 if (e) {
68632 log_packet_detailed("'helptext' field error detected");
68633 }
68634#endif /* FREECIV_DELTA_PROTOCOL */
68635
68637}
68638
68640{
68641 if (!pc->used) {
68642 log_error("WARNING: trying to send data to the closed connection %s",
68644 return -1;
68645 }
68646 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet != nullptr, -1,
68647 "Handler for PACKET_RULESET_UNIT_CLASS not installed");
68648 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet(pc, packet);
68649}
68650
68652{
68653 conn_list_iterate(dest, pconn) {
68656}
68657
68658static inline void init_packet_ruleset_extra(struct packet_ruleset_extra *packet)
68659{
68660 memset(packet, 0, sizeof(*packet));
68661
68662 requirement_vector_init(&packet->reqs);
68666 packet->helptext = strvec_new();
68667}
68668
68669static inline void free_packet_ruleset_extra(struct packet_ruleset_extra *packet)
68670{
68671 if (packet->helptext) {
68672 strvec_destroy(packet->helptext);
68673 packet->helptext = nullptr;
68674 }
68678 requirement_vector_free(&packet->reqs);
68679}
68680
68681static inline void destroy_packet_ruleset_extra(void *packet)
68682{
68684 free(packet);
68685}
68686
68687#ifdef FREECIV_DELTA_PROTOCOL
68688#define hash_packet_ruleset_extra_100 hash_const
68689#define cmp_packet_ruleset_extra_100 cmp_const
68691#endif /* FREECIV_DELTA_PROTOCOL */
68692
68694{
68695#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra(_packet)
68697
68698#ifdef FREECIV_JSON_CONNECTION
68699 struct plocation field_addr;
68700 {
68701 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68704 }
68705#endif /* FREECIV_JSON_CONNECTION */
68706
68707 log_packet_detailed("packet_ruleset_extra_100: got info about ()");
68708
68709#ifdef FREECIV_DELTA_PROTOCOL
68711 struct packet_ruleset_extra *old;
68712 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA;
68713
68714 if (nullptr == *hash) {
68716 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
68717 }
68718
68719 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68720 real_packet->id = old->id;
68721 sz_strlcpy(real_packet->name, old->name);
68722 sz_strlcpy(real_packet->rule_name, old->rule_name);
68723 real_packet->category = old->category;
68724 real_packet->causes = old->causes;
68725 real_packet->rmcauses = old->rmcauses;
68726 sz_strlcpy(real_packet->activity_gfx, old->activity_gfx);
68727 sz_strlcpy(real_packet->act_gfx_alt, old->act_gfx_alt);
68728 sz_strlcpy(real_packet->act_gfx_alt2, old->act_gfx_alt2);
68729 sz_strlcpy(real_packet->rmact_gfx, old->rmact_gfx);
68730 sz_strlcpy(real_packet->rmact_gfx_alt, old->rmact_gfx_alt);
68731 sz_strlcpy(real_packet->rmact_gfx_alt2, old->rmact_gfx_alt2);
68732 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
68733 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
68734 requirement_vector_copy(&real_packet->reqs, &old->reqs);
68735 requirement_vector_copy(&real_packet->rmreqs, &old->rmreqs);
68736 real_packet->appearance_chance = old->appearance_chance;
68737 requirement_vector_copy(&real_packet->appearance_reqs, &old->appearance_reqs);
68738 real_packet->disappearance_chance = old->disappearance_chance;
68739 requirement_vector_copy(&real_packet->disappearance_reqs, &old->disappearance_reqs);
68740 real_packet->visibility_req = old->visibility_req;
68741 real_packet->buildable = old->buildable;
68742 real_packet->generated = old->generated;
68743 real_packet->build_time = old->build_time;
68744 real_packet->build_time_factor = old->build_time_factor;
68745 real_packet->removal_time = old->removal_time;
68746 real_packet->removal_time_factor = old->removal_time_factor;
68747 real_packet->infracost = old->infracost;
68748 real_packet->defense_bonus = old->defense_bonus;
68749 real_packet->eus = old->eus;
68750 real_packet->native_to = old->native_to;
68751 real_packet->flags = old->flags;
68752 real_packet->hidden_by = old->hidden_by;
68753 real_packet->bridged_over = old->bridged_over;
68754 real_packet->conflicts = old->conflicts;
68755 real_packet->no_aggr_near_city = old->no_aggr_near_city;
68756 if (old->helptext) {
68757 strvec_copy(real_packet->helptext, old->helptext);
68758 } else {
68759 strvec_clear(real_packet->helptext);
68760 }
68761 } else {
68762 /* packet is already initialized empty */
68763 log_packet_detailed(" no old info");
68764 }
68765
68766#ifdef FREECIV_JSON_CONNECTION
68767 field_addr.name = "fields";
68768#endif /* FREECIV_JSON_CONNECTION */
68769 DIO_BV_GET(&din, &field_addr, fields);
68770
68771 if (BV_ISSET(fields, 0)) {
68772 log_packet_detailed(" got field 'id'");
68773
68774#ifdef FREECIV_JSON_CONNECTION
68775 field_addr.name = "id";
68776#endif /* FREECIV_JSON_CONNECTION */
68777
68778 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68780 }
68781 }
68782
68783 if (BV_ISSET(fields, 1)) {
68784 log_packet_detailed(" got field 'name'");
68785
68786#ifdef FREECIV_JSON_CONNECTION
68787 field_addr.name = "name";
68788#endif /* FREECIV_JSON_CONNECTION */
68789
68790 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68792 }
68793 }
68794
68795 if (BV_ISSET(fields, 2)) {
68796 log_packet_detailed(" got field 'rule_name'");
68797
68798#ifdef FREECIV_JSON_CONNECTION
68799 field_addr.name = "rule_name";
68800#endif /* FREECIV_JSON_CONNECTION */
68801
68802 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68803 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68804 }
68805 }
68806
68807 if (BV_ISSET(fields, 3)) {
68808 log_packet_detailed(" got field 'category'");
68809
68810#ifdef FREECIV_JSON_CONNECTION
68811 field_addr.name = "category";
68812#endif /* FREECIV_JSON_CONNECTION */
68813
68814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
68816 }
68817 }
68818
68819 if (BV_ISSET(fields, 4)) {
68820 log_packet_detailed(" got field 'causes'");
68821
68822#ifdef FREECIV_JSON_CONNECTION
68823 field_addr.name = "causes";
68824#endif /* FREECIV_JSON_CONNECTION */
68825
68826 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
68828 }
68829 }
68830
68831 if (BV_ISSET(fields, 5)) {
68832 log_packet_detailed(" got field 'rmcauses'");
68833
68834#ifdef FREECIV_JSON_CONNECTION
68835 field_addr.name = "rmcauses";
68836#endif /* FREECIV_JSON_CONNECTION */
68837
68838 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
68840 }
68841 }
68842
68843 if (BV_ISSET(fields, 6)) {
68844 log_packet_detailed(" got field 'activity_gfx'");
68845
68846#ifdef FREECIV_JSON_CONNECTION
68847 field_addr.name = "activity_gfx";
68848#endif /* FREECIV_JSON_CONNECTION */
68849
68850 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
68851 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
68852 }
68853 }
68854
68855 if (BV_ISSET(fields, 7)) {
68856 log_packet_detailed(" got field 'act_gfx_alt'");
68857
68858#ifdef FREECIV_JSON_CONNECTION
68859 field_addr.name = "act_gfx_alt";
68860#endif /* FREECIV_JSON_CONNECTION */
68861
68862 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
68863 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
68864 }
68865 }
68866
68867 if (BV_ISSET(fields, 8)) {
68868 log_packet_detailed(" got field 'act_gfx_alt2'");
68869
68870#ifdef FREECIV_JSON_CONNECTION
68871 field_addr.name = "act_gfx_alt2";
68872#endif /* FREECIV_JSON_CONNECTION */
68873
68874 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
68875 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
68876 }
68877 }
68878
68879 if (BV_ISSET(fields, 9)) {
68880 log_packet_detailed(" got field 'rmact_gfx'");
68881
68882#ifdef FREECIV_JSON_CONNECTION
68883 field_addr.name = "rmact_gfx";
68884#endif /* FREECIV_JSON_CONNECTION */
68885
68886 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
68887 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
68888 }
68889 }
68890
68891 if (BV_ISSET(fields, 10)) {
68892 log_packet_detailed(" got field 'rmact_gfx_alt'");
68893
68894#ifdef FREECIV_JSON_CONNECTION
68895 field_addr.name = "rmact_gfx_alt";
68896#endif /* FREECIV_JSON_CONNECTION */
68897
68898 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
68899 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
68900 }
68901 }
68902
68903 if (BV_ISSET(fields, 11)) {
68904 log_packet_detailed(" got field 'rmact_gfx_alt2'");
68905
68906#ifdef FREECIV_JSON_CONNECTION
68907 field_addr.name = "rmact_gfx_alt2";
68908#endif /* FREECIV_JSON_CONNECTION */
68909
68910 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
68911 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
68912 }
68913 }
68914
68915 if (BV_ISSET(fields, 12)) {
68916 log_packet_detailed(" got field 'graphic_str'");
68917
68918#ifdef FREECIV_JSON_CONNECTION
68919 field_addr.name = "graphic_str";
68920#endif /* FREECIV_JSON_CONNECTION */
68921
68922 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
68923 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
68924 }
68925 }
68926
68927 if (BV_ISSET(fields, 13)) {
68928 log_packet_detailed(" got field 'graphic_alt'");
68929
68930#ifdef FREECIV_JSON_CONNECTION
68931 field_addr.name = "graphic_alt";
68932#endif /* FREECIV_JSON_CONNECTION */
68933
68934 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
68935 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
68936 }
68937 }
68938
68939 if (BV_ISSET(fields, 14)) {
68940 log_packet_detailed(" got field 'reqs'");
68941
68942#ifdef FREECIV_JSON_CONNECTION
68943 field_addr.name = "reqs";
68944#endif /* FREECIV_JSON_CONNECTION */
68945
68946 {
68947 int i;
68948
68949 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68951 }
68953
68954#ifdef FREECIV_JSON_CONNECTION
68955 /* Enter array. */
68956 field_addr.sub_location = plocation_elem_new(0);
68957#endif /* FREECIV_JSON_CONNECTION */
68958
68959 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
68960#ifdef FREECIV_JSON_CONNECTION
68961 /* Next array element */
68962 field_addr.sub_location->number = i;
68963#endif /* FREECIV_JSON_CONNECTION */
68964
68965 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
68967 }
68968 }
68969
68970#ifdef FREECIV_JSON_CONNECTION
68971 /* Exit array. */
68972 FC_FREE(field_addr.sub_location);
68973#endif /* FREECIV_JSON_CONNECTION */
68974 }
68975 }
68976
68977 if (BV_ISSET(fields, 15)) {
68978 log_packet_detailed(" got field 'rmreqs'");
68979
68980#ifdef FREECIV_JSON_CONNECTION
68981 field_addr.name = "rmreqs";
68982#endif /* FREECIV_JSON_CONNECTION */
68983
68984 {
68985 int i;
68986
68987 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68989 }
68991
68992#ifdef FREECIV_JSON_CONNECTION
68993 /* Enter array. */
68994 field_addr.sub_location = plocation_elem_new(0);
68995#endif /* FREECIV_JSON_CONNECTION */
68996
68997 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
68998#ifdef FREECIV_JSON_CONNECTION
68999 /* Next array element */
69000 field_addr.sub_location->number = i;
69001#endif /* FREECIV_JSON_CONNECTION */
69002
69003 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
69005 }
69006 }
69007
69008#ifdef FREECIV_JSON_CONNECTION
69009 /* Exit array. */
69010 FC_FREE(field_addr.sub_location);
69011#endif /* FREECIV_JSON_CONNECTION */
69012 }
69013 }
69014
69015 if (BV_ISSET(fields, 16)) {
69016 log_packet_detailed(" got field 'appearance_chance'");
69017
69018#ifdef FREECIV_JSON_CONNECTION
69019 field_addr.name = "appearance_chance";
69020#endif /* FREECIV_JSON_CONNECTION */
69021
69022 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
69023 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
69024 }
69025 }
69026
69027 if (BV_ISSET(fields, 17)) {
69028 log_packet_detailed(" got field 'appearance_reqs'");
69029
69030#ifdef FREECIV_JSON_CONNECTION
69031 field_addr.name = "appearance_reqs";
69032#endif /* FREECIV_JSON_CONNECTION */
69033
69034 {
69035 int i;
69036
69037 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69038 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69039 }
69040 requirement_vector_reserve(&real_packet->appearance_reqs, i);
69041
69042#ifdef FREECIV_JSON_CONNECTION
69043 /* Enter array. */
69044 field_addr.sub_location = plocation_elem_new(0);
69045#endif /* FREECIV_JSON_CONNECTION */
69046
69047 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
69048#ifdef FREECIV_JSON_CONNECTION
69049 /* Next array element */
69050 field_addr.sub_location->number = i;
69051#endif /* FREECIV_JSON_CONNECTION */
69052
69053 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
69054 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69055 }
69056 }
69057
69058#ifdef FREECIV_JSON_CONNECTION
69059 /* Exit array. */
69060 FC_FREE(field_addr.sub_location);
69061#endif /* FREECIV_JSON_CONNECTION */
69062 }
69063 }
69064
69065 if (BV_ISSET(fields, 18)) {
69066 log_packet_detailed(" got field 'disappearance_chance'");
69067
69068#ifdef FREECIV_JSON_CONNECTION
69069 field_addr.name = "disappearance_chance";
69070#endif /* FREECIV_JSON_CONNECTION */
69071
69072 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
69073 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
69074 }
69075 }
69076
69077 if (BV_ISSET(fields, 19)) {
69078 log_packet_detailed(" got field 'disappearance_reqs'");
69079
69080#ifdef FREECIV_JSON_CONNECTION
69081 field_addr.name = "disappearance_reqs";
69082#endif /* FREECIV_JSON_CONNECTION */
69083
69084 {
69085 int i;
69086
69087 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69088 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69089 }
69090 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
69091
69092#ifdef FREECIV_JSON_CONNECTION
69093 /* Enter array. */
69094 field_addr.sub_location = plocation_elem_new(0);
69095#endif /* FREECIV_JSON_CONNECTION */
69096
69097 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
69098#ifdef FREECIV_JSON_CONNECTION
69099 /* Next array element */
69100 field_addr.sub_location->number = i;
69101#endif /* FREECIV_JSON_CONNECTION */
69102
69103 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
69104 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69105 }
69106 }
69107
69108#ifdef FREECIV_JSON_CONNECTION
69109 /* Exit array. */
69110 FC_FREE(field_addr.sub_location);
69111#endif /* FREECIV_JSON_CONNECTION */
69112 }
69113 }
69114
69115 if (BV_ISSET(fields, 20)) {
69116 log_packet_detailed(" got field 'visibility_req'");
69117
69118#ifdef FREECIV_JSON_CONNECTION
69119 field_addr.name = "visibility_req";
69120#endif /* FREECIV_JSON_CONNECTION */
69121
69122 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
69123 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
69124 }
69125 }
69126
69127 real_packet->buildable = BV_ISSET(fields, 21);
69128
69129 real_packet->generated = BV_ISSET(fields, 22);
69130
69131 if (BV_ISSET(fields, 23)) {
69132 log_packet_detailed(" got field 'build_time'");
69133
69134#ifdef FREECIV_JSON_CONNECTION
69135 field_addr.name = "build_time";
69136#endif /* FREECIV_JSON_CONNECTION */
69137
69138 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
69139 RECEIVE_PACKET_FIELD_ERROR(build_time);
69140 }
69141 }
69142
69143 if (BV_ISSET(fields, 24)) {
69144 log_packet_detailed(" got field 'build_time_factor'");
69145
69146#ifdef FREECIV_JSON_CONNECTION
69147 field_addr.name = "build_time_factor";
69148#endif /* FREECIV_JSON_CONNECTION */
69149
69150 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
69151 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
69152 }
69153 }
69154
69155 if (BV_ISSET(fields, 25)) {
69156 log_packet_detailed(" got field 'removal_time'");
69157
69158#ifdef FREECIV_JSON_CONNECTION
69159 field_addr.name = "removal_time";
69160#endif /* FREECIV_JSON_CONNECTION */
69161
69162 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
69163 RECEIVE_PACKET_FIELD_ERROR(removal_time);
69164 }
69165 }
69166
69167 if (BV_ISSET(fields, 26)) {
69168 log_packet_detailed(" got field 'removal_time_factor'");
69169
69170#ifdef FREECIV_JSON_CONNECTION
69171 field_addr.name = "removal_time_factor";
69172#endif /* FREECIV_JSON_CONNECTION */
69173
69174 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
69175 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
69176 }
69177 }
69178
69179 if (BV_ISSET(fields, 27)) {
69180 log_packet_detailed(" got field 'infracost'");
69181
69182#ifdef FREECIV_JSON_CONNECTION
69183 field_addr.name = "infracost";
69184#endif /* FREECIV_JSON_CONNECTION */
69185
69186 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
69187 RECEIVE_PACKET_FIELD_ERROR(infracost);
69188 }
69189 }
69190
69191 if (BV_ISSET(fields, 28)) {
69192 log_packet_detailed(" got field 'defense_bonus'");
69193
69194#ifdef FREECIV_JSON_CONNECTION
69195 field_addr.name = "defense_bonus";
69196#endif /* FREECIV_JSON_CONNECTION */
69197
69198 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
69199 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
69200 }
69201 }
69202
69203 if (BV_ISSET(fields, 29)) {
69204 log_packet_detailed(" got field 'eus'");
69205
69206#ifdef FREECIV_JSON_CONNECTION
69207 field_addr.name = "eus";
69208#endif /* FREECIV_JSON_CONNECTION */
69209
69210 {
69211 int readin;
69212
69213 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69215 }
69216 real_packet->eus = readin;
69217 }
69218 }
69219
69220 if (BV_ISSET(fields, 30)) {
69221 log_packet_detailed(" got field 'native_to'");
69222
69223#ifdef FREECIV_JSON_CONNECTION
69224 field_addr.name = "native_to";
69225#endif /* FREECIV_JSON_CONNECTION */
69226
69227 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
69228 RECEIVE_PACKET_FIELD_ERROR(native_to);
69229 }
69230 }
69231
69232 if (BV_ISSET(fields, 31)) {
69233 log_packet_detailed(" got field 'flags'");
69234
69235#ifdef FREECIV_JSON_CONNECTION
69236 field_addr.name = "flags";
69237#endif /* FREECIV_JSON_CONNECTION */
69238
69239 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
69241 }
69242 }
69243
69244 if (BV_ISSET(fields, 32)) {
69245 log_packet_detailed(" got field 'hidden_by'");
69246
69247#ifdef FREECIV_JSON_CONNECTION
69248 field_addr.name = "hidden_by";
69249#endif /* FREECIV_JSON_CONNECTION */
69250
69251 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
69252 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
69253 }
69254 }
69255
69256 if (BV_ISSET(fields, 33)) {
69257 log_packet_detailed(" got field 'bridged_over'");
69258
69259#ifdef FREECIV_JSON_CONNECTION
69260 field_addr.name = "bridged_over";
69261#endif /* FREECIV_JSON_CONNECTION */
69262
69263 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
69264 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
69265 }
69266 }
69267
69268 if (BV_ISSET(fields, 34)) {
69269 log_packet_detailed(" got field 'conflicts'");
69270
69271#ifdef FREECIV_JSON_CONNECTION
69272 field_addr.name = "conflicts";
69273#endif /* FREECIV_JSON_CONNECTION */
69274
69275 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
69276 RECEIVE_PACKET_FIELD_ERROR(conflicts);
69277 }
69278 }
69279
69280 if (BV_ISSET(fields, 35)) {
69281 log_packet_detailed(" got field 'no_aggr_near_city'");
69282
69283#ifdef FREECIV_JSON_CONNECTION
69284 field_addr.name = "no_aggr_near_city";
69285#endif /* FREECIV_JSON_CONNECTION */
69286
69287 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
69288 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
69289 }
69290 }
69291
69292 if (BV_ISSET(fields, 36)) {
69293 log_packet_detailed(" got field 'helptext'");
69294
69295#ifdef FREECIV_JSON_CONNECTION
69296 field_addr.name = "helptext";
69297#endif /* FREECIV_JSON_CONNECTION */
69298
69299 {
69300 int i;
69301
69302 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69304 }
69305 strvec_reserve(real_packet->helptext, i);
69306
69307#ifdef FREECIV_JSON_CONNECTION
69308 /* Enter array. */
69309 field_addr.sub_location = plocation_elem_new(0);
69310#endif /* FREECIV_JSON_CONNECTION */
69311
69312 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69313#ifdef FREECIV_JSON_CONNECTION
69314 /* Next array element */
69315 field_addr.sub_location->number = i;
69316#endif /* FREECIV_JSON_CONNECTION */
69317
69318 {
69319 char readin[MAX_LEN_PACKET];
69320
69321 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
69322 || !strvec_set(real_packet->helptext, i, readin)) {
69324 }
69325 }
69326 }
69327
69328#ifdef FREECIV_JSON_CONNECTION
69329 /* Exit array. */
69330 FC_FREE(field_addr.sub_location);
69331#endif /* FREECIV_JSON_CONNECTION */
69332 }
69333 }
69334
69335 if (nullptr == old) {
69336 old = fc_malloc(sizeof(*old));
69338 old->id = real_packet->id;
69339 sz_strlcpy(old->name, real_packet->name);
69340 sz_strlcpy(old->rule_name, real_packet->rule_name);
69341 old->category = real_packet->category;
69342 old->causes = real_packet->causes;
69343 old->rmcauses = real_packet->rmcauses;
69344 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69345 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69346 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69347 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69348 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69349 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69350 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69351 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69352 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69353 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69354 old->appearance_chance = real_packet->appearance_chance;
69355 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69356 old->disappearance_chance = real_packet->disappearance_chance;
69357 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69358 old->visibility_req = real_packet->visibility_req;
69359 old->buildable = real_packet->buildable;
69360 old->generated = real_packet->generated;
69361 old->build_time = real_packet->build_time;
69362 old->build_time_factor = real_packet->build_time_factor;
69363 old->removal_time = real_packet->removal_time;
69364 old->removal_time_factor = real_packet->removal_time_factor;
69365 old->infracost = real_packet->infracost;
69366 old->defense_bonus = real_packet->defense_bonus;
69367 old->eus = real_packet->eus;
69368 old->native_to = real_packet->native_to;
69369 old->flags = real_packet->flags;
69370 old->hidden_by = real_packet->hidden_by;
69371 old->bridged_over = real_packet->bridged_over;
69372 old->conflicts = real_packet->conflicts;
69373 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69374 if (real_packet->helptext) {
69375 strvec_copy(old->helptext, real_packet->helptext);
69376 } else {
69377 strvec_clear(old->helptext);
69378 }
69380 } else {
69381 old->id = real_packet->id;
69382 sz_strlcpy(old->name, real_packet->name);
69383 sz_strlcpy(old->rule_name, real_packet->rule_name);
69384 old->category = real_packet->category;
69385 old->causes = real_packet->causes;
69386 old->rmcauses = real_packet->rmcauses;
69387 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69388 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69389 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69390 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69391 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69392 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69393 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69394 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69395 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69396 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69397 old->appearance_chance = real_packet->appearance_chance;
69398 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69399 old->disappearance_chance = real_packet->disappearance_chance;
69400 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69401 old->visibility_req = real_packet->visibility_req;
69402 old->buildable = real_packet->buildable;
69403 old->generated = real_packet->generated;
69404 old->build_time = real_packet->build_time;
69405 old->build_time_factor = real_packet->build_time_factor;
69406 old->removal_time = real_packet->removal_time;
69407 old->removal_time_factor = real_packet->removal_time_factor;
69408 old->infracost = real_packet->infracost;
69409 old->defense_bonus = real_packet->defense_bonus;
69410 old->eus = real_packet->eus;
69411 old->native_to = real_packet->native_to;
69412 old->flags = real_packet->flags;
69413 old->hidden_by = real_packet->hidden_by;
69414 old->bridged_over = real_packet->bridged_over;
69415 old->conflicts = real_packet->conflicts;
69416 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69417 if (real_packet->helptext) {
69418 strvec_copy(old->helptext, real_packet->helptext);
69419 } else {
69420 strvec_clear(old->helptext);
69421 }
69422 }
69423
69424#else /* FREECIV_DELTA_PROTOCOL */
69425#ifdef FREECIV_JSON_CONNECTION
69426 field_addr.name = "id";
69427#endif /* FREECIV_JSON_CONNECTION */
69428
69429 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69431 }
69432
69433#ifdef FREECIV_JSON_CONNECTION
69434 field_addr.name = "name";
69435#endif /* FREECIV_JSON_CONNECTION */
69436
69437 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69439 }
69440
69441#ifdef FREECIV_JSON_CONNECTION
69442 field_addr.name = "rule_name";
69443#endif /* FREECIV_JSON_CONNECTION */
69444
69445 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
69446 RECEIVE_PACKET_FIELD_ERROR(rule_name);
69447 }
69448
69449#ifdef FREECIV_JSON_CONNECTION
69450 field_addr.name = "category";
69451#endif /* FREECIV_JSON_CONNECTION */
69452
69453 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
69455 }
69456
69457#ifdef FREECIV_JSON_CONNECTION
69458 field_addr.name = "causes";
69459#endif /* FREECIV_JSON_CONNECTION */
69460
69461 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
69463 }
69464
69465#ifdef FREECIV_JSON_CONNECTION
69466 field_addr.name = "rmcauses";
69467#endif /* FREECIV_JSON_CONNECTION */
69468
69469 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
69471 }
69472
69473#ifdef FREECIV_JSON_CONNECTION
69474 field_addr.name = "activity_gfx";
69475#endif /* FREECIV_JSON_CONNECTION */
69476
69477 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
69478 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
69479 }
69480
69481#ifdef FREECIV_JSON_CONNECTION
69482 field_addr.name = "act_gfx_alt";
69483#endif /* FREECIV_JSON_CONNECTION */
69484
69485 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
69486 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
69487 }
69488
69489#ifdef FREECIV_JSON_CONNECTION
69490 field_addr.name = "act_gfx_alt2";
69491#endif /* FREECIV_JSON_CONNECTION */
69492
69493 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
69494 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
69495 }
69496
69497#ifdef FREECIV_JSON_CONNECTION
69498 field_addr.name = "rmact_gfx";
69499#endif /* FREECIV_JSON_CONNECTION */
69500
69501 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
69502 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
69503 }
69504
69505#ifdef FREECIV_JSON_CONNECTION
69506 field_addr.name = "rmact_gfx_alt";
69507#endif /* FREECIV_JSON_CONNECTION */
69508
69509 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
69510 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
69511 }
69512
69513#ifdef FREECIV_JSON_CONNECTION
69514 field_addr.name = "rmact_gfx_alt2";
69515#endif /* FREECIV_JSON_CONNECTION */
69516
69517 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
69518 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
69519 }
69520
69521#ifdef FREECIV_JSON_CONNECTION
69522 field_addr.name = "graphic_str";
69523#endif /* FREECIV_JSON_CONNECTION */
69524
69525 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
69526 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
69527 }
69528
69529#ifdef FREECIV_JSON_CONNECTION
69530 field_addr.name = "graphic_alt";
69531#endif /* FREECIV_JSON_CONNECTION */
69532
69533 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
69534 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
69535 }
69536
69537#ifdef FREECIV_JSON_CONNECTION
69538 field_addr.name = "reqs";
69539#endif /* FREECIV_JSON_CONNECTION */
69540
69541 {
69542 int i;
69543
69544 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69546 }
69548
69549#ifdef FREECIV_JSON_CONNECTION
69550 /* Enter array. */
69551 field_addr.sub_location = plocation_elem_new(0);
69552#endif /* FREECIV_JSON_CONNECTION */
69553
69554 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
69555#ifdef FREECIV_JSON_CONNECTION
69556 /* Next array element */
69557 field_addr.sub_location->number = i;
69558#endif /* FREECIV_JSON_CONNECTION */
69559
69560 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
69562 }
69563 }
69564
69565#ifdef FREECIV_JSON_CONNECTION
69566 /* Exit array. */
69567 FC_FREE(field_addr.sub_location);
69568#endif /* FREECIV_JSON_CONNECTION */
69569 }
69570
69571#ifdef FREECIV_JSON_CONNECTION
69572 field_addr.name = "rmreqs";
69573#endif /* FREECIV_JSON_CONNECTION */
69574
69575 {
69576 int i;
69577
69578 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69580 }
69582
69583#ifdef FREECIV_JSON_CONNECTION
69584 /* Enter array. */
69585 field_addr.sub_location = plocation_elem_new(0);
69586#endif /* FREECIV_JSON_CONNECTION */
69587
69588 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
69589#ifdef FREECIV_JSON_CONNECTION
69590 /* Next array element */
69591 field_addr.sub_location->number = i;
69592#endif /* FREECIV_JSON_CONNECTION */
69593
69594 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
69596 }
69597 }
69598
69599#ifdef FREECIV_JSON_CONNECTION
69600 /* Exit array. */
69601 FC_FREE(field_addr.sub_location);
69602#endif /* FREECIV_JSON_CONNECTION */
69603 }
69604
69605#ifdef FREECIV_JSON_CONNECTION
69606 field_addr.name = "appearance_chance";
69607#endif /* FREECIV_JSON_CONNECTION */
69608
69609 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
69610 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
69611 }
69612
69613#ifdef FREECIV_JSON_CONNECTION
69614 field_addr.name = "appearance_reqs";
69615#endif /* FREECIV_JSON_CONNECTION */
69616
69617 {
69618 int i;
69619
69620 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69621 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69622 }
69623 requirement_vector_reserve(&real_packet->appearance_reqs, i);
69624
69625#ifdef FREECIV_JSON_CONNECTION
69626 /* Enter array. */
69627 field_addr.sub_location = plocation_elem_new(0);
69628#endif /* FREECIV_JSON_CONNECTION */
69629
69630 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
69631#ifdef FREECIV_JSON_CONNECTION
69632 /* Next array element */
69633 field_addr.sub_location->number = i;
69634#endif /* FREECIV_JSON_CONNECTION */
69635
69636 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
69637 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69638 }
69639 }
69640
69641#ifdef FREECIV_JSON_CONNECTION
69642 /* Exit array. */
69643 FC_FREE(field_addr.sub_location);
69644#endif /* FREECIV_JSON_CONNECTION */
69645 }
69646
69647#ifdef FREECIV_JSON_CONNECTION
69648 field_addr.name = "disappearance_chance";
69649#endif /* FREECIV_JSON_CONNECTION */
69650
69651 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
69652 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
69653 }
69654
69655#ifdef FREECIV_JSON_CONNECTION
69656 field_addr.name = "disappearance_reqs";
69657#endif /* FREECIV_JSON_CONNECTION */
69658
69659 {
69660 int i;
69661
69662 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69663 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69664 }
69665 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
69666
69667#ifdef FREECIV_JSON_CONNECTION
69668 /* Enter array. */
69669 field_addr.sub_location = plocation_elem_new(0);
69670#endif /* FREECIV_JSON_CONNECTION */
69671
69672 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
69673#ifdef FREECIV_JSON_CONNECTION
69674 /* Next array element */
69675 field_addr.sub_location->number = i;
69676#endif /* FREECIV_JSON_CONNECTION */
69677
69678 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
69679 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69680 }
69681 }
69682
69683#ifdef FREECIV_JSON_CONNECTION
69684 /* Exit array. */
69685 FC_FREE(field_addr.sub_location);
69686#endif /* FREECIV_JSON_CONNECTION */
69687 }
69688
69689#ifdef FREECIV_JSON_CONNECTION
69690 field_addr.name = "visibility_req";
69691#endif /* FREECIV_JSON_CONNECTION */
69692
69693 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
69694 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
69695 }
69696
69697#ifdef FREECIV_JSON_CONNECTION
69698 field_addr.name = "buildable";
69699#endif /* FREECIV_JSON_CONNECTION */
69700
69701 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->buildable)) {
69702 RECEIVE_PACKET_FIELD_ERROR(buildable);
69703 }
69704
69705#ifdef FREECIV_JSON_CONNECTION
69706 field_addr.name = "generated";
69707#endif /* FREECIV_JSON_CONNECTION */
69708
69709 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->generated)) {
69710 RECEIVE_PACKET_FIELD_ERROR(generated);
69711 }
69712
69713#ifdef FREECIV_JSON_CONNECTION
69714 field_addr.name = "build_time";
69715#endif /* FREECIV_JSON_CONNECTION */
69716
69717 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
69718 RECEIVE_PACKET_FIELD_ERROR(build_time);
69719 }
69720
69721#ifdef FREECIV_JSON_CONNECTION
69722 field_addr.name = "build_time_factor";
69723#endif /* FREECIV_JSON_CONNECTION */
69724
69725 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
69726 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
69727 }
69728
69729#ifdef FREECIV_JSON_CONNECTION
69730 field_addr.name = "removal_time";
69731#endif /* FREECIV_JSON_CONNECTION */
69732
69733 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
69734 RECEIVE_PACKET_FIELD_ERROR(removal_time);
69735 }
69736
69737#ifdef FREECIV_JSON_CONNECTION
69738 field_addr.name = "removal_time_factor";
69739#endif /* FREECIV_JSON_CONNECTION */
69740
69741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
69742 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
69743 }
69744
69745#ifdef FREECIV_JSON_CONNECTION
69746 field_addr.name = "infracost";
69747#endif /* FREECIV_JSON_CONNECTION */
69748
69749 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
69750 RECEIVE_PACKET_FIELD_ERROR(infracost);
69751 }
69752
69753#ifdef FREECIV_JSON_CONNECTION
69754 field_addr.name = "defense_bonus";
69755#endif /* FREECIV_JSON_CONNECTION */
69756
69757 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
69758 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
69759 }
69760
69761#ifdef FREECIV_JSON_CONNECTION
69762 field_addr.name = "eus";
69763#endif /* FREECIV_JSON_CONNECTION */
69764
69765 {
69766 int readin;
69767
69768 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69770 }
69771 real_packet->eus = readin;
69772 }
69773
69774#ifdef FREECIV_JSON_CONNECTION
69775 field_addr.name = "native_to";
69776#endif /* FREECIV_JSON_CONNECTION */
69777
69778 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
69779 RECEIVE_PACKET_FIELD_ERROR(native_to);
69780 }
69781
69782#ifdef FREECIV_JSON_CONNECTION
69783 field_addr.name = "flags";
69784#endif /* FREECIV_JSON_CONNECTION */
69785
69786 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
69788 }
69789
69790#ifdef FREECIV_JSON_CONNECTION
69791 field_addr.name = "hidden_by";
69792#endif /* FREECIV_JSON_CONNECTION */
69793
69794 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
69795 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
69796 }
69797
69798#ifdef FREECIV_JSON_CONNECTION
69799 field_addr.name = "bridged_over";
69800#endif /* FREECIV_JSON_CONNECTION */
69801
69802 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
69803 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
69804 }
69805
69806#ifdef FREECIV_JSON_CONNECTION
69807 field_addr.name = "conflicts";
69808#endif /* FREECIV_JSON_CONNECTION */
69809
69810 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
69811 RECEIVE_PACKET_FIELD_ERROR(conflicts);
69812 }
69813
69814#ifdef FREECIV_JSON_CONNECTION
69815 field_addr.name = "no_aggr_near_city";
69816#endif /* FREECIV_JSON_CONNECTION */
69817
69818 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
69819 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
69820 }
69821
69822#ifdef FREECIV_JSON_CONNECTION
69823 field_addr.name = "helptext";
69824#endif /* FREECIV_JSON_CONNECTION */
69825
69826 {
69827 int i;
69828
69829 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69831 }
69832 strvec_reserve(real_packet->helptext, i);
69833
69834#ifdef FREECIV_JSON_CONNECTION
69835 /* Enter array. */
69836 field_addr.sub_location = plocation_elem_new(0);
69837#endif /* FREECIV_JSON_CONNECTION */
69838
69839 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69840#ifdef FREECIV_JSON_CONNECTION
69841 /* Next array element */
69842 field_addr.sub_location->number = i;
69843#endif /* FREECIV_JSON_CONNECTION */
69844
69845 {
69846 char readin[MAX_LEN_PACKET];
69847
69848 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
69849 || !strvec_set(real_packet->helptext, i, readin)) {
69851 }
69852 }
69853 }
69854
69855#ifdef FREECIV_JSON_CONNECTION
69856 /* Exit array. */
69857 FC_FREE(field_addr.sub_location);
69858#endif /* FREECIV_JSON_CONNECTION */
69859 }
69860#endif /* FREECIV_DELTA_PROTOCOL */
69861
69863#undef FREE_PACKET_STRUCT
69864}
69865
69866static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
69867{
69868 const struct packet_ruleset_extra *real_packet = packet;
69869 int e;
69871
69872 log_packet_detailed("packet_ruleset_extra_100: sending info about ()");
69873
69874#ifdef FREECIV_DELTA_PROTOCOL
69876 struct packet_ruleset_extra *old;
69877 bool differ;
69878 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA;
69879
69880 if (nullptr == *hash) {
69882 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
69883 }
69884 BV_CLR_ALL(fields);
69885
69886 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
69887 old = fc_malloc(sizeof(*old));
69888 /* temporary bitcopy just to insert correctly */
69889 *old = *real_packet;
69892 }
69893
69894 differ = (old->id != real_packet->id);
69895 if (differ) {
69896 BV_SET(fields, 0);
69897 }
69898
69899 differ = (strcmp(old->name, real_packet->name) != 0);
69900 if (differ) {
69901 BV_SET(fields, 1);
69902 }
69903
69904 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
69905 if (differ) {
69906 BV_SET(fields, 2);
69907 }
69908
69909 differ = (old->category != real_packet->category);
69910 if (differ) {
69911 BV_SET(fields, 3);
69912 }
69913
69914 differ = !BV_ARE_EQUAL(old->causes, real_packet->causes);
69915 if (differ) {
69916 BV_SET(fields, 4);
69917 }
69918
69919 differ = !BV_ARE_EQUAL(old->rmcauses, real_packet->rmcauses);
69920 if (differ) {
69921 BV_SET(fields, 5);
69922 }
69923
69924 differ = (strcmp(old->activity_gfx, real_packet->activity_gfx) != 0);
69925 if (differ) {
69926 BV_SET(fields, 6);
69927 }
69928
69929 differ = (strcmp(old->act_gfx_alt, real_packet->act_gfx_alt) != 0);
69930 if (differ) {
69931 BV_SET(fields, 7);
69932 }
69933
69934 differ = (strcmp(old->act_gfx_alt2, real_packet->act_gfx_alt2) != 0);
69935 if (differ) {
69936 BV_SET(fields, 8);
69937 }
69938
69939 differ = (strcmp(old->rmact_gfx, real_packet->rmact_gfx) != 0);
69940 if (differ) {
69941 BV_SET(fields, 9);
69942 }
69943
69944 differ = (strcmp(old->rmact_gfx_alt, real_packet->rmact_gfx_alt) != 0);
69945 if (differ) {
69946 BV_SET(fields, 10);
69947 }
69948
69949 differ = (strcmp(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2) != 0);
69950 if (differ) {
69951 BV_SET(fields, 11);
69952 }
69953
69954 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
69955 if (differ) {
69956 BV_SET(fields, 12);
69957 }
69958
69959 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
69960 if (differ) {
69961 BV_SET(fields, 13);
69962 }
69963
69965 if (!differ) {
69966 int i;
69967
69968 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
69969 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
69970 if (differ) {
69971 break;
69972 }
69973 }
69974 }
69975 if (differ) {
69976 BV_SET(fields, 14);
69977 }
69978
69980 if (!differ) {
69981 int i;
69982
69983 for (i = 0; i < requirement_vector_size(&old->rmreqs); i++) {
69984 differ = !are_requirements_equal(&old->rmreqs.p[i], &real_packet->rmreqs.p[i]);
69985 if (differ) {
69986 break;
69987 }
69988 }
69989 }
69990 if (differ) {
69991 BV_SET(fields, 15);
69992 }
69993
69994 differ = (old->appearance_chance != real_packet->appearance_chance);
69995 if (differ) {
69996 BV_SET(fields, 16);
69997 }
69998
69999 differ = (requirement_vector_size(&old->appearance_reqs) != requirement_vector_size(&real_packet->appearance_reqs));
70000 if (!differ) {
70001 int i;
70002
70003 for (i = 0; i < requirement_vector_size(&old->appearance_reqs); i++) {
70004 differ = !are_requirements_equal(&old->appearance_reqs.p[i], &real_packet->appearance_reqs.p[i]);
70005 if (differ) {
70006 break;
70007 }
70008 }
70009 }
70010 if (differ) {
70011 BV_SET(fields, 17);
70012 }
70013
70014 differ = (old->disappearance_chance != real_packet->disappearance_chance);
70015 if (differ) {
70016 BV_SET(fields, 18);
70017 }
70018
70019 differ = (requirement_vector_size(&old->disappearance_reqs) != requirement_vector_size(&real_packet->disappearance_reqs));
70020 if (!differ) {
70021 int i;
70022
70023 for (i = 0; i < requirement_vector_size(&old->disappearance_reqs); i++) {
70024 differ = !are_requirements_equal(&old->disappearance_reqs.p[i], &real_packet->disappearance_reqs.p[i]);
70025 if (differ) {
70026 break;
70027 }
70028 }
70029 }
70030 if (differ) {
70031 BV_SET(fields, 19);
70032 }
70033
70034 differ = (old->visibility_req != real_packet->visibility_req);
70035 if (differ) {
70036 BV_SET(fields, 20);
70037 }
70038
70039 /* folded into head */
70040 if (real_packet->buildable) {
70041 BV_SET(fields, 21);
70042 }
70043
70044 /* folded into head */
70045 if (real_packet->generated) {
70046 BV_SET(fields, 22);
70047 }
70048
70049 differ = (old->build_time != real_packet->build_time);
70050 if (differ) {
70051 BV_SET(fields, 23);
70052 }
70053
70054 differ = (old->build_time_factor != real_packet->build_time_factor);
70055 if (differ) {
70056 BV_SET(fields, 24);
70057 }
70058
70059 differ = (old->removal_time != real_packet->removal_time);
70060 if (differ) {
70061 BV_SET(fields, 25);
70062 }
70063
70064 differ = (old->removal_time_factor != real_packet->removal_time_factor);
70065 if (differ) {
70066 BV_SET(fields, 26);
70067 }
70068
70069 differ = (old->infracost != real_packet->infracost);
70070 if (differ) {
70071 BV_SET(fields, 27);
70072 }
70073
70074 differ = (old->defense_bonus != real_packet->defense_bonus);
70075 if (differ) {
70076 BV_SET(fields, 28);
70077 }
70078
70079 differ = (old->eus != real_packet->eus);
70080 if (differ) {
70081 BV_SET(fields, 29);
70082 }
70083
70084 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
70085 if (differ) {
70086 BV_SET(fields, 30);
70087 }
70088
70089 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
70090 if (differ) {
70091 BV_SET(fields, 31);
70092 }
70093
70094 differ = !BV_ARE_EQUAL(old->hidden_by, real_packet->hidden_by);
70095 if (differ) {
70096 BV_SET(fields, 32);
70097 }
70098
70099 differ = !BV_ARE_EQUAL(old->bridged_over, real_packet->bridged_over);
70100 if (differ) {
70101 BV_SET(fields, 33);
70102 }
70103
70104 differ = !BV_ARE_EQUAL(old->conflicts, real_packet->conflicts);
70105 if (differ) {
70106 BV_SET(fields, 34);
70107 }
70108
70109 differ = (old->no_aggr_near_city != real_packet->no_aggr_near_city);
70110 if (differ) {
70111 BV_SET(fields, 35);
70112 }
70113
70114 if (real_packet->helptext) {
70115 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
70116 } else {
70117 differ = (strvec_size(old->helptext) > 0);
70118 }
70119 if (differ) {
70120 BV_SET(fields, 36);
70121 }
70122#endif /* FREECIV_DELTA_PROTOCOL */
70123
70124#ifdef FREECIV_JSON_CONNECTION
70125 struct plocation field_addr;
70126 {
70127 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
70130 }
70131#endif /* FREECIV_JSON_CONNECTION */
70132
70133#ifdef FREECIV_DELTA_PROTOCOL
70134#ifdef FREECIV_JSON_CONNECTION
70135 field_addr.name = "fields";
70136#endif /* FREECIV_JSON_CONNECTION */
70137 e = 0;
70138 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70139 if (e) {
70140 log_packet_detailed("fields bitvector error detected");
70141 }
70142
70143 if (BV_ISSET(fields, 0)) {
70144 log_packet_detailed(" field 'id' has changed");
70145
70146#ifdef FREECIV_JSON_CONNECTION
70147 field_addr.name = "id";
70148#endif /* FREECIV_JSON_CONNECTION */
70149 e = 0;
70150
70151 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70152
70153 if (e) {
70154 log_packet_detailed("'id' field error detected");
70155 }
70156 }
70157
70158 if (BV_ISSET(fields, 1)) {
70159 log_packet_detailed(" field 'name' has changed");
70160
70161#ifdef FREECIV_JSON_CONNECTION
70162 field_addr.name = "name";
70163#endif /* FREECIV_JSON_CONNECTION */
70164 e = 0;
70165
70166 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70167
70168 if (e) {
70169 log_packet_detailed("'name' field error detected");
70170 }
70171 }
70172
70173 if (BV_ISSET(fields, 2)) {
70174 log_packet_detailed(" field 'rule_name' has changed");
70175
70176#ifdef FREECIV_JSON_CONNECTION
70177 field_addr.name = "rule_name";
70178#endif /* FREECIV_JSON_CONNECTION */
70179 e = 0;
70180
70181 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70182
70183 if (e) {
70184 log_packet_detailed("'rule_name' field error detected");
70185 }
70186 }
70187
70188 if (BV_ISSET(fields, 3)) {
70189 log_packet_detailed(" field 'category' has changed");
70190
70191#ifdef FREECIV_JSON_CONNECTION
70192 field_addr.name = "category";
70193#endif /* FREECIV_JSON_CONNECTION */
70194 e = 0;
70195
70196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
70197
70198 if (e) {
70199 log_packet_detailed("'category' field error detected");
70200 }
70201 }
70202
70203 if (BV_ISSET(fields, 4)) {
70204 log_packet_detailed(" field 'causes' has changed");
70205
70206#ifdef FREECIV_JSON_CONNECTION
70207 field_addr.name = "causes";
70208#endif /* FREECIV_JSON_CONNECTION */
70209 e = 0;
70210
70211 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
70212
70213 if (e) {
70214 log_packet_detailed("'causes' field error detected");
70215 }
70216 }
70217
70218 if (BV_ISSET(fields, 5)) {
70219 log_packet_detailed(" field 'rmcauses' has changed");
70220
70221#ifdef FREECIV_JSON_CONNECTION
70222 field_addr.name = "rmcauses";
70223#endif /* FREECIV_JSON_CONNECTION */
70224 e = 0;
70225
70226 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
70227
70228 if (e) {
70229 log_packet_detailed("'rmcauses' field error detected");
70230 }
70231 }
70232
70233 if (BV_ISSET(fields, 6)) {
70234 log_packet_detailed(" field 'activity_gfx' has changed");
70235
70236#ifdef FREECIV_JSON_CONNECTION
70237 field_addr.name = "activity_gfx";
70238#endif /* FREECIV_JSON_CONNECTION */
70239 e = 0;
70240
70241 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
70242
70243 if (e) {
70244 log_packet_detailed("'activity_gfx' field error detected");
70245 }
70246 }
70247
70248 if (BV_ISSET(fields, 7)) {
70249 log_packet_detailed(" field 'act_gfx_alt' has changed");
70250
70251#ifdef FREECIV_JSON_CONNECTION
70252 field_addr.name = "act_gfx_alt";
70253#endif /* FREECIV_JSON_CONNECTION */
70254 e = 0;
70255
70256 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
70257
70258 if (e) {
70259 log_packet_detailed("'act_gfx_alt' field error detected");
70260 }
70261 }
70262
70263 if (BV_ISSET(fields, 8)) {
70264 log_packet_detailed(" field 'act_gfx_alt2' has changed");
70265
70266#ifdef FREECIV_JSON_CONNECTION
70267 field_addr.name = "act_gfx_alt2";
70268#endif /* FREECIV_JSON_CONNECTION */
70269 e = 0;
70270
70271 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
70272
70273 if (e) {
70274 log_packet_detailed("'act_gfx_alt2' field error detected");
70275 }
70276 }
70277
70278 if (BV_ISSET(fields, 9)) {
70279 log_packet_detailed(" field 'rmact_gfx' has changed");
70280
70281#ifdef FREECIV_JSON_CONNECTION
70282 field_addr.name = "rmact_gfx";
70283#endif /* FREECIV_JSON_CONNECTION */
70284 e = 0;
70285
70286 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
70287
70288 if (e) {
70289 log_packet_detailed("'rmact_gfx' field error detected");
70290 }
70291 }
70292
70293 if (BV_ISSET(fields, 10)) {
70294 log_packet_detailed(" field 'rmact_gfx_alt' has changed");
70295
70296#ifdef FREECIV_JSON_CONNECTION
70297 field_addr.name = "rmact_gfx_alt";
70298#endif /* FREECIV_JSON_CONNECTION */
70299 e = 0;
70300
70301 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
70302
70303 if (e) {
70304 log_packet_detailed("'rmact_gfx_alt' field error detected");
70305 }
70306 }
70307
70308 if (BV_ISSET(fields, 11)) {
70309 log_packet_detailed(" field 'rmact_gfx_alt2' has changed");
70310
70311#ifdef FREECIV_JSON_CONNECTION
70312 field_addr.name = "rmact_gfx_alt2";
70313#endif /* FREECIV_JSON_CONNECTION */
70314 e = 0;
70315
70316 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
70317
70318 if (e) {
70319 log_packet_detailed("'rmact_gfx_alt2' field error detected");
70320 }
70321 }
70322
70323 if (BV_ISSET(fields, 12)) {
70324 log_packet_detailed(" field 'graphic_str' has changed");
70325
70326#ifdef FREECIV_JSON_CONNECTION
70327 field_addr.name = "graphic_str";
70328#endif /* FREECIV_JSON_CONNECTION */
70329 e = 0;
70330
70331 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
70332
70333 if (e) {
70334 log_packet_detailed("'graphic_str' field error detected");
70335 }
70336 }
70337
70338 if (BV_ISSET(fields, 13)) {
70339 log_packet_detailed(" field 'graphic_alt' has changed");
70340
70341#ifdef FREECIV_JSON_CONNECTION
70342 field_addr.name = "graphic_alt";
70343#endif /* FREECIV_JSON_CONNECTION */
70344 e = 0;
70345
70346 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
70347
70348 if (e) {
70349 log_packet_detailed("'graphic_alt' field error detected");
70350 }
70351 }
70352
70353 if (BV_ISSET(fields, 14)) {
70354 log_packet_detailed(" field 'reqs' has changed");
70355
70356#ifdef FREECIV_JSON_CONNECTION
70357 field_addr.name = "reqs";
70358#endif /* FREECIV_JSON_CONNECTION */
70359 e = 0;
70360
70361 {
70362 int i;
70363
70366
70367#ifdef FREECIV_JSON_CONNECTION
70368 /* Enter array. */
70369 field_addr.sub_location = plocation_elem_new(0);
70370#endif /* FREECIV_JSON_CONNECTION */
70371
70372 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
70373#ifdef FREECIV_JSON_CONNECTION
70374 /* Next array element. */
70375 field_addr.sub_location->number = i;
70376#endif /* FREECIV_JSON_CONNECTION */
70377
70378 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
70379 }
70380
70381#ifdef FREECIV_JSON_CONNECTION
70382 /* Exit array. */
70383 FC_FREE(field_addr.sub_location);
70384#endif /* FREECIV_JSON_CONNECTION */
70385 }
70386
70387 if (e) {
70388 log_packet_detailed("'reqs' field error detected");
70389 }
70390 }
70391
70392 if (BV_ISSET(fields, 15)) {
70393 log_packet_detailed(" field 'rmreqs' has changed");
70394
70395#ifdef FREECIV_JSON_CONNECTION
70396 field_addr.name = "rmreqs";
70397#endif /* FREECIV_JSON_CONNECTION */
70398 e = 0;
70399
70400 {
70401 int i;
70402
70405
70406#ifdef FREECIV_JSON_CONNECTION
70407 /* Enter array. */
70408 field_addr.sub_location = plocation_elem_new(0);
70409#endif /* FREECIV_JSON_CONNECTION */
70410
70411 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
70412#ifdef FREECIV_JSON_CONNECTION
70413 /* Next array element. */
70414 field_addr.sub_location->number = i;
70415#endif /* FREECIV_JSON_CONNECTION */
70416
70417 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
70418 }
70419
70420#ifdef FREECIV_JSON_CONNECTION
70421 /* Exit array. */
70422 FC_FREE(field_addr.sub_location);
70423#endif /* FREECIV_JSON_CONNECTION */
70424 }
70425
70426 if (e) {
70427 log_packet_detailed("'rmreqs' field error detected");
70428 }
70429 }
70430
70431 if (BV_ISSET(fields, 16)) {
70432 log_packet_detailed(" field 'appearance_chance' has changed");
70433
70434#ifdef FREECIV_JSON_CONNECTION
70435 field_addr.name = "appearance_chance";
70436#endif /* FREECIV_JSON_CONNECTION */
70437 e = 0;
70438
70439 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
70440
70441 if (e) {
70442 log_packet_detailed("'appearance_chance' field error detected");
70443 }
70444 }
70445
70446 if (BV_ISSET(fields, 17)) {
70447 log_packet_detailed(" field 'appearance_reqs' has changed");
70448
70449#ifdef FREECIV_JSON_CONNECTION
70450 field_addr.name = "appearance_reqs";
70451#endif /* FREECIV_JSON_CONNECTION */
70452 e = 0;
70453
70454 {
70455 int i;
70456
70458 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
70459
70460#ifdef FREECIV_JSON_CONNECTION
70461 /* Enter array. */
70462 field_addr.sub_location = plocation_elem_new(0);
70463#endif /* FREECIV_JSON_CONNECTION */
70464
70465 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
70466#ifdef FREECIV_JSON_CONNECTION
70467 /* Next array element. */
70468 field_addr.sub_location->number = i;
70469#endif /* FREECIV_JSON_CONNECTION */
70470
70471 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
70472 }
70473
70474#ifdef FREECIV_JSON_CONNECTION
70475 /* Exit array. */
70476 FC_FREE(field_addr.sub_location);
70477#endif /* FREECIV_JSON_CONNECTION */
70478 }
70479
70480 if (e) {
70481 log_packet_detailed("'appearance_reqs' field error detected");
70482 }
70483 }
70484
70485 if (BV_ISSET(fields, 18)) {
70486 log_packet_detailed(" field 'disappearance_chance' has changed");
70487
70488#ifdef FREECIV_JSON_CONNECTION
70489 field_addr.name = "disappearance_chance";
70490#endif /* FREECIV_JSON_CONNECTION */
70491 e = 0;
70492
70493 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
70494
70495 if (e) {
70496 log_packet_detailed("'disappearance_chance' field error detected");
70497 }
70498 }
70499
70500 if (BV_ISSET(fields, 19)) {
70501 log_packet_detailed(" field 'disappearance_reqs' has changed");
70502
70503#ifdef FREECIV_JSON_CONNECTION
70504 field_addr.name = "disappearance_reqs";
70505#endif /* FREECIV_JSON_CONNECTION */
70506 e = 0;
70507
70508 {
70509 int i;
70510
70512 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
70513
70514#ifdef FREECIV_JSON_CONNECTION
70515 /* Enter array. */
70516 field_addr.sub_location = plocation_elem_new(0);
70517#endif /* FREECIV_JSON_CONNECTION */
70518
70519 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
70520#ifdef FREECIV_JSON_CONNECTION
70521 /* Next array element. */
70522 field_addr.sub_location->number = i;
70523#endif /* FREECIV_JSON_CONNECTION */
70524
70525 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
70526 }
70527
70528#ifdef FREECIV_JSON_CONNECTION
70529 /* Exit array. */
70530 FC_FREE(field_addr.sub_location);
70531#endif /* FREECIV_JSON_CONNECTION */
70532 }
70533
70534 if (e) {
70535 log_packet_detailed("'disappearance_reqs' field error detected");
70536 }
70537 }
70538
70539 if (BV_ISSET(fields, 20)) {
70540 log_packet_detailed(" field 'visibility_req' has changed");
70541
70542#ifdef FREECIV_JSON_CONNECTION
70543 field_addr.name = "visibility_req";
70544#endif /* FREECIV_JSON_CONNECTION */
70545 e = 0;
70546
70547 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
70548
70549 if (e) {
70550 log_packet_detailed("'visibility_req' field error detected");
70551 }
70552 }
70553
70554 /* field 21 is folded into the header */
70555
70556 /* field 22 is folded into the header */
70557
70558 if (BV_ISSET(fields, 23)) {
70559 log_packet_detailed(" field 'build_time' has changed");
70560
70561#ifdef FREECIV_JSON_CONNECTION
70562 field_addr.name = "build_time";
70563#endif /* FREECIV_JSON_CONNECTION */
70564 e = 0;
70565
70566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
70567
70568 if (e) {
70569 log_packet_detailed("'build_time' field error detected");
70570 }
70571 }
70572
70573 if (BV_ISSET(fields, 24)) {
70574 log_packet_detailed(" field 'build_time_factor' has changed");
70575
70576#ifdef FREECIV_JSON_CONNECTION
70577 field_addr.name = "build_time_factor";
70578#endif /* FREECIV_JSON_CONNECTION */
70579 e = 0;
70580
70581 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
70582
70583 if (e) {
70584 log_packet_detailed("'build_time_factor' field error detected");
70585 }
70586 }
70587
70588 if (BV_ISSET(fields, 25)) {
70589 log_packet_detailed(" field 'removal_time' has changed");
70590
70591#ifdef FREECIV_JSON_CONNECTION
70592 field_addr.name = "removal_time";
70593#endif /* FREECIV_JSON_CONNECTION */
70594 e = 0;
70595
70596 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
70597
70598 if (e) {
70599 log_packet_detailed("'removal_time' field error detected");
70600 }
70601 }
70602
70603 if (BV_ISSET(fields, 26)) {
70604 log_packet_detailed(" field 'removal_time_factor' has changed");
70605
70606#ifdef FREECIV_JSON_CONNECTION
70607 field_addr.name = "removal_time_factor";
70608#endif /* FREECIV_JSON_CONNECTION */
70609 e = 0;
70610
70611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
70612
70613 if (e) {
70614 log_packet_detailed("'removal_time_factor' field error detected");
70615 }
70616 }
70617
70618 if (BV_ISSET(fields, 27)) {
70619 log_packet_detailed(" field 'infracost' has changed");
70620
70621#ifdef FREECIV_JSON_CONNECTION
70622 field_addr.name = "infracost";
70623#endif /* FREECIV_JSON_CONNECTION */
70624 e = 0;
70625
70626 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
70627
70628 if (e) {
70629 log_packet_detailed("'infracost' field error detected");
70630 }
70631 }
70632
70633 if (BV_ISSET(fields, 28)) {
70634 log_packet_detailed(" field 'defense_bonus' has changed");
70635
70636#ifdef FREECIV_JSON_CONNECTION
70637 field_addr.name = "defense_bonus";
70638#endif /* FREECIV_JSON_CONNECTION */
70639 e = 0;
70640
70641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
70642
70643 if (e) {
70644 log_packet_detailed("'defense_bonus' field error detected");
70645 }
70646 }
70647
70648 if (BV_ISSET(fields, 29)) {
70649 log_packet_detailed(" field 'eus' has changed");
70650
70651#ifdef FREECIV_JSON_CONNECTION
70652 field_addr.name = "eus";
70653#endif /* FREECIV_JSON_CONNECTION */
70654 e = 0;
70655
70656 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
70657
70658 if (e) {
70659 log_packet_detailed("'eus' field error detected");
70660 }
70661 }
70662
70663 if (BV_ISSET(fields, 30)) {
70664 log_packet_detailed(" field 'native_to' has changed");
70665
70666#ifdef FREECIV_JSON_CONNECTION
70667 field_addr.name = "native_to";
70668#endif /* FREECIV_JSON_CONNECTION */
70669 e = 0;
70670
70671 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
70672
70673 if (e) {
70674 log_packet_detailed("'native_to' field error detected");
70675 }
70676 }
70677
70678 if (BV_ISSET(fields, 31)) {
70679 log_packet_detailed(" field 'flags' has changed");
70680
70681#ifdef FREECIV_JSON_CONNECTION
70682 field_addr.name = "flags";
70683#endif /* FREECIV_JSON_CONNECTION */
70684 e = 0;
70685
70686 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
70687
70688 if (e) {
70689 log_packet_detailed("'flags' field error detected");
70690 }
70691 }
70692
70693 if (BV_ISSET(fields, 32)) {
70694 log_packet_detailed(" field 'hidden_by' has changed");
70695
70696#ifdef FREECIV_JSON_CONNECTION
70697 field_addr.name = "hidden_by";
70698#endif /* FREECIV_JSON_CONNECTION */
70699 e = 0;
70700
70701 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
70702
70703 if (e) {
70704 log_packet_detailed("'hidden_by' field error detected");
70705 }
70706 }
70707
70708 if (BV_ISSET(fields, 33)) {
70709 log_packet_detailed(" field 'bridged_over' has changed");
70710
70711#ifdef FREECIV_JSON_CONNECTION
70712 field_addr.name = "bridged_over";
70713#endif /* FREECIV_JSON_CONNECTION */
70714 e = 0;
70715
70716 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
70717
70718 if (e) {
70719 log_packet_detailed("'bridged_over' field error detected");
70720 }
70721 }
70722
70723 if (BV_ISSET(fields, 34)) {
70724 log_packet_detailed(" field 'conflicts' has changed");
70725
70726#ifdef FREECIV_JSON_CONNECTION
70727 field_addr.name = "conflicts";
70728#endif /* FREECIV_JSON_CONNECTION */
70729 e = 0;
70730
70731 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
70732
70733 if (e) {
70734 log_packet_detailed("'conflicts' field error detected");
70735 }
70736 }
70737
70738 if (BV_ISSET(fields, 35)) {
70739 log_packet_detailed(" field 'no_aggr_near_city' has changed");
70740
70741#ifdef FREECIV_JSON_CONNECTION
70742 field_addr.name = "no_aggr_near_city";
70743#endif /* FREECIV_JSON_CONNECTION */
70744 e = 0;
70745
70746 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
70747
70748 if (e) {
70749 log_packet_detailed("'no_aggr_near_city' field error detected");
70750 }
70751 }
70752
70753 if (BV_ISSET(fields, 36)) {
70754 log_packet_detailed(" field 'helptext' has changed");
70755
70756#ifdef FREECIV_JSON_CONNECTION
70757 field_addr.name = "helptext";
70758#endif /* FREECIV_JSON_CONNECTION */
70759 e = 0;
70760
70761 if (!real_packet->helptext) {
70762 /* Transmit null as empty */
70763 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
70764 } else {
70765 int i;
70766
70768 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
70769
70770#ifdef FREECIV_JSON_CONNECTION
70771 /* Enter array. */
70772 field_addr.sub_location = plocation_elem_new(0);
70773#endif /* FREECIV_JSON_CONNECTION */
70774
70775 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
70776#ifdef FREECIV_JSON_CONNECTION
70777 /* Next array element. */
70778 field_addr.sub_location->number = i;
70779#endif /* FREECIV_JSON_CONNECTION */
70780
70781 {
70782 const char *pstr = strvec_get(real_packet->helptext, i);
70783
70784 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
70785 }
70786 }
70787
70788#ifdef FREECIV_JSON_CONNECTION
70789 /* Exit array. */
70790 FC_FREE(field_addr.sub_location);
70791#endif /* FREECIV_JSON_CONNECTION */
70792 }
70793
70794 if (e) {
70795 log_packet_detailed("'helptext' field error detected");
70796 }
70797 }
70798
70799 old->id = real_packet->id;
70800 sz_strlcpy(old->name, real_packet->name);
70801 sz_strlcpy(old->rule_name, real_packet->rule_name);
70802 old->category = real_packet->category;
70803 old->causes = real_packet->causes;
70804 old->rmcauses = real_packet->rmcauses;
70805 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
70806 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
70807 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
70808 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
70809 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
70810 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
70811 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
70812 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
70813 requirement_vector_copy(&old->reqs, &real_packet->reqs);
70814 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
70815 old->appearance_chance = real_packet->appearance_chance;
70816 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
70817 old->disappearance_chance = real_packet->disappearance_chance;
70818 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
70819 old->visibility_req = real_packet->visibility_req;
70820 old->buildable = real_packet->buildable;
70821 old->generated = real_packet->generated;
70822 old->build_time = real_packet->build_time;
70823 old->build_time_factor = real_packet->build_time_factor;
70824 old->removal_time = real_packet->removal_time;
70825 old->removal_time_factor = real_packet->removal_time_factor;
70826 old->infracost = real_packet->infracost;
70827 old->defense_bonus = real_packet->defense_bonus;
70828 old->eus = real_packet->eus;
70829 old->native_to = real_packet->native_to;
70830 old->flags = real_packet->flags;
70831 old->hidden_by = real_packet->hidden_by;
70832 old->bridged_over = real_packet->bridged_over;
70833 old->conflicts = real_packet->conflicts;
70834 old->no_aggr_near_city = real_packet->no_aggr_near_city;
70835 if (real_packet->helptext) {
70836 strvec_copy(old->helptext, real_packet->helptext);
70837 } else {
70838 strvec_clear(old->helptext);
70839 }
70840
70841#else /* FREECIV_DELTA_PROTOCOL */
70842#ifdef FREECIV_JSON_CONNECTION
70843 field_addr.name = "id";
70844#endif /* FREECIV_JSON_CONNECTION */
70845 e = 0;
70846
70847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70848
70849 if (e) {
70850 log_packet_detailed("'id' field error detected");
70851 }
70852
70853#ifdef FREECIV_JSON_CONNECTION
70854 field_addr.name = "name";
70855#endif /* FREECIV_JSON_CONNECTION */
70856 e = 0;
70857
70858 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70859
70860 if (e) {
70861 log_packet_detailed("'name' field error detected");
70862 }
70863
70864#ifdef FREECIV_JSON_CONNECTION
70865 field_addr.name = "rule_name";
70866#endif /* FREECIV_JSON_CONNECTION */
70867 e = 0;
70868
70869 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70870
70871 if (e) {
70872 log_packet_detailed("'rule_name' field error detected");
70873 }
70874
70875#ifdef FREECIV_JSON_CONNECTION
70876 field_addr.name = "category";
70877#endif /* FREECIV_JSON_CONNECTION */
70878 e = 0;
70879
70880 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
70881
70882 if (e) {
70883 log_packet_detailed("'category' field error detected");
70884 }
70885
70886#ifdef FREECIV_JSON_CONNECTION
70887 field_addr.name = "causes";
70888#endif /* FREECIV_JSON_CONNECTION */
70889 e = 0;
70890
70891 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
70892
70893 if (e) {
70894 log_packet_detailed("'causes' field error detected");
70895 }
70896
70897#ifdef FREECIV_JSON_CONNECTION
70898 field_addr.name = "rmcauses";
70899#endif /* FREECIV_JSON_CONNECTION */
70900 e = 0;
70901
70902 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
70903
70904 if (e) {
70905 log_packet_detailed("'rmcauses' field error detected");
70906 }
70907
70908#ifdef FREECIV_JSON_CONNECTION
70909 field_addr.name = "activity_gfx";
70910#endif /* FREECIV_JSON_CONNECTION */
70911 e = 0;
70912
70913 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
70914
70915 if (e) {
70916 log_packet_detailed("'activity_gfx' field error detected");
70917 }
70918
70919#ifdef FREECIV_JSON_CONNECTION
70920 field_addr.name = "act_gfx_alt";
70921#endif /* FREECIV_JSON_CONNECTION */
70922 e = 0;
70923
70924 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
70925
70926 if (e) {
70927 log_packet_detailed("'act_gfx_alt' field error detected");
70928 }
70929
70930#ifdef FREECIV_JSON_CONNECTION
70931 field_addr.name = "act_gfx_alt2";
70932#endif /* FREECIV_JSON_CONNECTION */
70933 e = 0;
70934
70935 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
70936
70937 if (e) {
70938 log_packet_detailed("'act_gfx_alt2' field error detected");
70939 }
70940
70941#ifdef FREECIV_JSON_CONNECTION
70942 field_addr.name = "rmact_gfx";
70943#endif /* FREECIV_JSON_CONNECTION */
70944 e = 0;
70945
70946 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
70947
70948 if (e) {
70949 log_packet_detailed("'rmact_gfx' field error detected");
70950 }
70951
70952#ifdef FREECIV_JSON_CONNECTION
70953 field_addr.name = "rmact_gfx_alt";
70954#endif /* FREECIV_JSON_CONNECTION */
70955 e = 0;
70956
70957 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
70958
70959 if (e) {
70960 log_packet_detailed("'rmact_gfx_alt' field error detected");
70961 }
70962
70963#ifdef FREECIV_JSON_CONNECTION
70964 field_addr.name = "rmact_gfx_alt2";
70965#endif /* FREECIV_JSON_CONNECTION */
70966 e = 0;
70967
70968 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
70969
70970 if (e) {
70971 log_packet_detailed("'rmact_gfx_alt2' field error detected");
70972 }
70973
70974#ifdef FREECIV_JSON_CONNECTION
70975 field_addr.name = "graphic_str";
70976#endif /* FREECIV_JSON_CONNECTION */
70977 e = 0;
70978
70979 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
70980
70981 if (e) {
70982 log_packet_detailed("'graphic_str' field error detected");
70983 }
70984
70985#ifdef FREECIV_JSON_CONNECTION
70986 field_addr.name = "graphic_alt";
70987#endif /* FREECIV_JSON_CONNECTION */
70988 e = 0;
70989
70990 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
70991
70992 if (e) {
70993 log_packet_detailed("'graphic_alt' field error detected");
70994 }
70995
70996#ifdef FREECIV_JSON_CONNECTION
70997 field_addr.name = "reqs";
70998#endif /* FREECIV_JSON_CONNECTION */
70999 e = 0;
71000
71001 {
71002 int i;
71003
71006
71007#ifdef FREECIV_JSON_CONNECTION
71008 /* Enter array. */
71009 field_addr.sub_location = plocation_elem_new(0);
71010#endif /* FREECIV_JSON_CONNECTION */
71011
71012 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
71013#ifdef FREECIV_JSON_CONNECTION
71014 /* Next array element. */
71015 field_addr.sub_location->number = i;
71016#endif /* FREECIV_JSON_CONNECTION */
71017
71018 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
71019 }
71020
71021#ifdef FREECIV_JSON_CONNECTION
71022 /* Exit array. */
71023 FC_FREE(field_addr.sub_location);
71024#endif /* FREECIV_JSON_CONNECTION */
71025 }
71026
71027 if (e) {
71028 log_packet_detailed("'reqs' field error detected");
71029 }
71030
71031#ifdef FREECIV_JSON_CONNECTION
71032 field_addr.name = "rmreqs";
71033#endif /* FREECIV_JSON_CONNECTION */
71034 e = 0;
71035
71036 {
71037 int i;
71038
71041
71042#ifdef FREECIV_JSON_CONNECTION
71043 /* Enter array. */
71044 field_addr.sub_location = plocation_elem_new(0);
71045#endif /* FREECIV_JSON_CONNECTION */
71046
71047 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
71048#ifdef FREECIV_JSON_CONNECTION
71049 /* Next array element. */
71050 field_addr.sub_location->number = i;
71051#endif /* FREECIV_JSON_CONNECTION */
71052
71053 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
71054 }
71055
71056#ifdef FREECIV_JSON_CONNECTION
71057 /* Exit array. */
71058 FC_FREE(field_addr.sub_location);
71059#endif /* FREECIV_JSON_CONNECTION */
71060 }
71061
71062 if (e) {
71063 log_packet_detailed("'rmreqs' field error detected");
71064 }
71065
71066#ifdef FREECIV_JSON_CONNECTION
71067 field_addr.name = "appearance_chance";
71068#endif /* FREECIV_JSON_CONNECTION */
71069 e = 0;
71070
71071 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
71072
71073 if (e) {
71074 log_packet_detailed("'appearance_chance' field error detected");
71075 }
71076
71077#ifdef FREECIV_JSON_CONNECTION
71078 field_addr.name = "appearance_reqs";
71079#endif /* FREECIV_JSON_CONNECTION */
71080 e = 0;
71081
71082 {
71083 int i;
71084
71086 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
71087
71088#ifdef FREECIV_JSON_CONNECTION
71089 /* Enter array. */
71090 field_addr.sub_location = plocation_elem_new(0);
71091#endif /* FREECIV_JSON_CONNECTION */
71092
71093 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
71094#ifdef FREECIV_JSON_CONNECTION
71095 /* Next array element. */
71096 field_addr.sub_location->number = i;
71097#endif /* FREECIV_JSON_CONNECTION */
71098
71099 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
71100 }
71101
71102#ifdef FREECIV_JSON_CONNECTION
71103 /* Exit array. */
71104 FC_FREE(field_addr.sub_location);
71105#endif /* FREECIV_JSON_CONNECTION */
71106 }
71107
71108 if (e) {
71109 log_packet_detailed("'appearance_reqs' field error detected");
71110 }
71111
71112#ifdef FREECIV_JSON_CONNECTION
71113 field_addr.name = "disappearance_chance";
71114#endif /* FREECIV_JSON_CONNECTION */
71115 e = 0;
71116
71117 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
71118
71119 if (e) {
71120 log_packet_detailed("'disappearance_chance' field error detected");
71121 }
71122
71123#ifdef FREECIV_JSON_CONNECTION
71124 field_addr.name = "disappearance_reqs";
71125#endif /* FREECIV_JSON_CONNECTION */
71126 e = 0;
71127
71128 {
71129 int i;
71130
71132 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
71133
71134#ifdef FREECIV_JSON_CONNECTION
71135 /* Enter array. */
71136 field_addr.sub_location = plocation_elem_new(0);
71137#endif /* FREECIV_JSON_CONNECTION */
71138
71139 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
71140#ifdef FREECIV_JSON_CONNECTION
71141 /* Next array element. */
71142 field_addr.sub_location->number = i;
71143#endif /* FREECIV_JSON_CONNECTION */
71144
71145 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
71146 }
71147
71148#ifdef FREECIV_JSON_CONNECTION
71149 /* Exit array. */
71150 FC_FREE(field_addr.sub_location);
71151#endif /* FREECIV_JSON_CONNECTION */
71152 }
71153
71154 if (e) {
71155 log_packet_detailed("'disappearance_reqs' field error detected");
71156 }
71157
71158#ifdef FREECIV_JSON_CONNECTION
71159 field_addr.name = "visibility_req";
71160#endif /* FREECIV_JSON_CONNECTION */
71161 e = 0;
71162
71163 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
71164
71165 if (e) {
71166 log_packet_detailed("'visibility_req' field error detected");
71167 }
71168
71169#ifdef FREECIV_JSON_CONNECTION
71170 field_addr.name = "buildable";
71171#endif /* FREECIV_JSON_CONNECTION */
71172 e = 0;
71173
71174 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->buildable);
71175
71176 if (e) {
71177 log_packet_detailed("'buildable' field error detected");
71178 }
71179
71180#ifdef FREECIV_JSON_CONNECTION
71181 field_addr.name = "generated";
71182#endif /* FREECIV_JSON_CONNECTION */
71183 e = 0;
71184
71185 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->generated);
71186
71187 if (e) {
71188 log_packet_detailed("'generated' field error detected");
71189 }
71190
71191#ifdef FREECIV_JSON_CONNECTION
71192 field_addr.name = "build_time";
71193#endif /* FREECIV_JSON_CONNECTION */
71194 e = 0;
71195
71196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
71197
71198 if (e) {
71199 log_packet_detailed("'build_time' field error detected");
71200 }
71201
71202#ifdef FREECIV_JSON_CONNECTION
71203 field_addr.name = "build_time_factor";
71204#endif /* FREECIV_JSON_CONNECTION */
71205 e = 0;
71206
71207 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
71208
71209 if (e) {
71210 log_packet_detailed("'build_time_factor' field error detected");
71211 }
71212
71213#ifdef FREECIV_JSON_CONNECTION
71214 field_addr.name = "removal_time";
71215#endif /* FREECIV_JSON_CONNECTION */
71216 e = 0;
71217
71218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
71219
71220 if (e) {
71221 log_packet_detailed("'removal_time' field error detected");
71222 }
71223
71224#ifdef FREECIV_JSON_CONNECTION
71225 field_addr.name = "removal_time_factor";
71226#endif /* FREECIV_JSON_CONNECTION */
71227 e = 0;
71228
71229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
71230
71231 if (e) {
71232 log_packet_detailed("'removal_time_factor' field error detected");
71233 }
71234
71235#ifdef FREECIV_JSON_CONNECTION
71236 field_addr.name = "infracost";
71237#endif /* FREECIV_JSON_CONNECTION */
71238 e = 0;
71239
71240 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
71241
71242 if (e) {
71243 log_packet_detailed("'infracost' field error detected");
71244 }
71245
71246#ifdef FREECIV_JSON_CONNECTION
71247 field_addr.name = "defense_bonus";
71248#endif /* FREECIV_JSON_CONNECTION */
71249 e = 0;
71250
71251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
71252
71253 if (e) {
71254 log_packet_detailed("'defense_bonus' field error detected");
71255 }
71256
71257#ifdef FREECIV_JSON_CONNECTION
71258 field_addr.name = "eus";
71259#endif /* FREECIV_JSON_CONNECTION */
71260 e = 0;
71261
71262 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
71263
71264 if (e) {
71265 log_packet_detailed("'eus' field error detected");
71266 }
71267
71268#ifdef FREECIV_JSON_CONNECTION
71269 field_addr.name = "native_to";
71270#endif /* FREECIV_JSON_CONNECTION */
71271 e = 0;
71272
71273 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
71274
71275 if (e) {
71276 log_packet_detailed("'native_to' field error detected");
71277 }
71278
71279#ifdef FREECIV_JSON_CONNECTION
71280 field_addr.name = "flags";
71281#endif /* FREECIV_JSON_CONNECTION */
71282 e = 0;
71283
71284 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
71285
71286 if (e) {
71287 log_packet_detailed("'flags' field error detected");
71288 }
71289
71290#ifdef FREECIV_JSON_CONNECTION
71291 field_addr.name = "hidden_by";
71292#endif /* FREECIV_JSON_CONNECTION */
71293 e = 0;
71294
71295 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
71296
71297 if (e) {
71298 log_packet_detailed("'hidden_by' field error detected");
71299 }
71300
71301#ifdef FREECIV_JSON_CONNECTION
71302 field_addr.name = "bridged_over";
71303#endif /* FREECIV_JSON_CONNECTION */
71304 e = 0;
71305
71306 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
71307
71308 if (e) {
71309 log_packet_detailed("'bridged_over' field error detected");
71310 }
71311
71312#ifdef FREECIV_JSON_CONNECTION
71313 field_addr.name = "conflicts";
71314#endif /* FREECIV_JSON_CONNECTION */
71315 e = 0;
71316
71317 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
71318
71319 if (e) {
71320 log_packet_detailed("'conflicts' field error detected");
71321 }
71322
71323#ifdef FREECIV_JSON_CONNECTION
71324 field_addr.name = "no_aggr_near_city";
71325#endif /* FREECIV_JSON_CONNECTION */
71326 e = 0;
71327
71328 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
71329
71330 if (e) {
71331 log_packet_detailed("'no_aggr_near_city' field error detected");
71332 }
71333
71334#ifdef FREECIV_JSON_CONNECTION
71335 field_addr.name = "helptext";
71336#endif /* FREECIV_JSON_CONNECTION */
71337 e = 0;
71338
71339 if (!real_packet->helptext) {
71340 /* Transmit null as empty */
71341 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
71342 } else {
71343 int i;
71344
71346 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
71347
71348#ifdef FREECIV_JSON_CONNECTION
71349 /* Enter array. */
71350 field_addr.sub_location = plocation_elem_new(0);
71351#endif /* FREECIV_JSON_CONNECTION */
71352
71353 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
71354#ifdef FREECIV_JSON_CONNECTION
71355 /* Next array element. */
71356 field_addr.sub_location->number = i;
71357#endif /* FREECIV_JSON_CONNECTION */
71358
71359 {
71360 const char *pstr = strvec_get(real_packet->helptext, i);
71361
71362 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
71363 }
71364 }
71365
71366#ifdef FREECIV_JSON_CONNECTION
71367 /* Exit array. */
71368 FC_FREE(field_addr.sub_location);
71369#endif /* FREECIV_JSON_CONNECTION */
71370 }
71371
71372 if (e) {
71373 log_packet_detailed("'helptext' field error detected");
71374 }
71375#endif /* FREECIV_DELTA_PROTOCOL */
71376
71378}
71379
71381{
71382 if (!pc->used) {
71383 log_error("WARNING: trying to send data to the closed connection %s",
71385 return -1;
71386 }
71387 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet != nullptr, -1,
71388 "Handler for PACKET_RULESET_EXTRA not installed");
71389 return pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet(pc, packet);
71390}
71391
71392void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
71393{
71394 conn_list_iterate(dest, pconn) {
71397}
71398
71400{
71401 memset(packet, 0, sizeof(*packet));
71402}
71403
71404#define free_packet_ruleset_extra_flag(_packet) (void) 0
71405#define destroy_packet_ruleset_extra_flag free
71406
71407#ifdef FREECIV_DELTA_PROTOCOL
71408#define hash_packet_ruleset_extra_flag_100 hash_const
71409#define cmp_packet_ruleset_extra_flag_100 cmp_const
71411#endif /* FREECIV_DELTA_PROTOCOL */
71412
71414{
71415#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra_flag(_packet)
71417
71418#ifdef FREECIV_JSON_CONNECTION
71419 struct plocation field_addr;
71420 {
71421 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71424 }
71425#endif /* FREECIV_JSON_CONNECTION */
71426
71427 log_packet_detailed("packet_ruleset_extra_flag_100: got info about ()");
71428
71429#ifdef FREECIV_DELTA_PROTOCOL
71432 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA_FLAG;
71433
71434 if (nullptr == *hash) {
71436 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
71437 }
71438
71439 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71440 *real_packet = *old;
71441 } else {
71442 /* packet is already initialized empty */
71443 log_packet_detailed(" no old info");
71444 }
71445
71446#ifdef FREECIV_JSON_CONNECTION
71447 field_addr.name = "fields";
71448#endif /* FREECIV_JSON_CONNECTION */
71449 DIO_BV_GET(&din, &field_addr, fields);
71450
71451 if (BV_ISSET(fields, 0)) {
71452 log_packet_detailed(" got field 'id'");
71453
71454#ifdef FREECIV_JSON_CONNECTION
71455 field_addr.name = "id";
71456#endif /* FREECIV_JSON_CONNECTION */
71457
71458 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71460 }
71461 }
71462
71463 if (BV_ISSET(fields, 1)) {
71464 log_packet_detailed(" got field 'name'");
71465
71466#ifdef FREECIV_JSON_CONNECTION
71467 field_addr.name = "name";
71468#endif /* FREECIV_JSON_CONNECTION */
71469
71470 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71472 }
71473 }
71474
71475 if (BV_ISSET(fields, 2)) {
71476 log_packet_detailed(" got field 'helptxt'");
71477
71478#ifdef FREECIV_JSON_CONNECTION
71479 field_addr.name = "helptxt";
71480#endif /* FREECIV_JSON_CONNECTION */
71481
71482 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71484 }
71485 }
71486
71487 if (nullptr == old) {
71488 old = fc_malloc(sizeof(*old));
71490 *old = *real_packet;
71492 } else {
71493 *old = *real_packet;
71494 }
71495
71496#else /* FREECIV_DELTA_PROTOCOL */
71497#ifdef FREECIV_JSON_CONNECTION
71498 field_addr.name = "id";
71499#endif /* FREECIV_JSON_CONNECTION */
71500
71501 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71503 }
71504
71505#ifdef FREECIV_JSON_CONNECTION
71506 field_addr.name = "name";
71507#endif /* FREECIV_JSON_CONNECTION */
71508
71509 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71511 }
71512
71513#ifdef FREECIV_JSON_CONNECTION
71514 field_addr.name = "helptxt";
71515#endif /* FREECIV_JSON_CONNECTION */
71516
71517 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71519 }
71520#endif /* FREECIV_DELTA_PROTOCOL */
71521
71523#undef FREE_PACKET_STRUCT
71524}
71525
71527{
71528 const struct packet_ruleset_extra_flag *real_packet = packet;
71529 int e;
71531
71532 log_packet_detailed("packet_ruleset_extra_flag_100: sending info about ()");
71533
71534#ifdef FREECIV_DELTA_PROTOCOL
71537 bool differ;
71538 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA_FLAG;
71539
71540 if (nullptr == *hash) {
71542 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
71543 }
71544 BV_CLR_ALL(fields);
71545
71546 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71547 old = fc_malloc(sizeof(*old));
71548 /* temporary bitcopy just to insert correctly */
71549 *old = *real_packet;
71552 }
71553
71554 differ = (old->id != real_packet->id);
71555 if (differ) {
71556 BV_SET(fields, 0);
71557 }
71558
71559 differ = (strcmp(old->name, real_packet->name) != 0);
71560 if (differ) {
71561 BV_SET(fields, 1);
71562 }
71563
71564 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
71565 if (differ) {
71566 BV_SET(fields, 2);
71567 }
71568#endif /* FREECIV_DELTA_PROTOCOL */
71569
71570#ifdef FREECIV_JSON_CONNECTION
71571 struct plocation field_addr;
71572 {
71573 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71576 }
71577#endif /* FREECIV_JSON_CONNECTION */
71578
71579#ifdef FREECIV_DELTA_PROTOCOL
71580#ifdef FREECIV_JSON_CONNECTION
71581 field_addr.name = "fields";
71582#endif /* FREECIV_JSON_CONNECTION */
71583 e = 0;
71584 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71585 if (e) {
71586 log_packet_detailed("fields bitvector error detected");
71587 }
71588
71589 if (BV_ISSET(fields, 0)) {
71590 log_packet_detailed(" field 'id' has changed");
71591
71592#ifdef FREECIV_JSON_CONNECTION
71593 field_addr.name = "id";
71594#endif /* FREECIV_JSON_CONNECTION */
71595 e = 0;
71596
71597 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71598
71599 if (e) {
71600 log_packet_detailed("'id' field error detected");
71601 }
71602 }
71603
71604 if (BV_ISSET(fields, 1)) {
71605 log_packet_detailed(" field 'name' has changed");
71606
71607#ifdef FREECIV_JSON_CONNECTION
71608 field_addr.name = "name";
71609#endif /* FREECIV_JSON_CONNECTION */
71610 e = 0;
71611
71612 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71613
71614 if (e) {
71615 log_packet_detailed("'name' field error detected");
71616 }
71617 }
71618
71619 if (BV_ISSET(fields, 2)) {
71620 log_packet_detailed(" field 'helptxt' has changed");
71621
71622#ifdef FREECIV_JSON_CONNECTION
71623 field_addr.name = "helptxt";
71624#endif /* FREECIV_JSON_CONNECTION */
71625 e = 0;
71626
71627 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
71628
71629 if (e) {
71630 log_packet_detailed("'helptxt' field error detected");
71631 }
71632 }
71633
71634 *old = *real_packet;
71635
71636#else /* FREECIV_DELTA_PROTOCOL */
71637#ifdef FREECIV_JSON_CONNECTION
71638 field_addr.name = "id";
71639#endif /* FREECIV_JSON_CONNECTION */
71640 e = 0;
71641
71642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71643
71644 if (e) {
71645 log_packet_detailed("'id' field error detected");
71646 }
71647
71648#ifdef FREECIV_JSON_CONNECTION
71649 field_addr.name = "name";
71650#endif /* FREECIV_JSON_CONNECTION */
71651 e = 0;
71652
71653 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71654
71655 if (e) {
71656 log_packet_detailed("'name' field error detected");
71657 }
71658
71659#ifdef FREECIV_JSON_CONNECTION
71660 field_addr.name = "helptxt";
71661#endif /* FREECIV_JSON_CONNECTION */
71662 e = 0;
71663
71664 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
71665
71666 if (e) {
71667 log_packet_detailed("'helptxt' field error detected");
71668 }
71669#endif /* FREECIV_DELTA_PROTOCOL */
71670
71672}
71673
71675{
71676 if (!pc->used) {
71677 log_error("WARNING: trying to send data to the closed connection %s",
71679 return -1;
71680 }
71681 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet != nullptr, -1,
71682 "Handler for PACKET_RULESET_EXTRA_FLAG not installed");
71683 return pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet(pc, packet);
71684}
71685
71687{
71688 conn_list_iterate(dest, pconn) {
71691}
71692
71693static inline void init_packet_ruleset_base(struct packet_ruleset_base *packet)
71694{
71695 memset(packet, 0, sizeof(*packet));
71696}
71697
71698#define free_packet_ruleset_base(_packet) (void) 0
71699#define destroy_packet_ruleset_base free
71700
71701#ifdef FREECIV_DELTA_PROTOCOL
71702#define hash_packet_ruleset_base_100 hash_const
71703#define cmp_packet_ruleset_base_100 cmp_const
71705#endif /* FREECIV_DELTA_PROTOCOL */
71706
71708{
71709#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_base(_packet)
71711
71712#ifdef FREECIV_JSON_CONNECTION
71713 struct plocation field_addr;
71714 {
71715 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71718 }
71719#endif /* FREECIV_JSON_CONNECTION */
71720
71721 log_packet_detailed("packet_ruleset_base_100: got info about ()");
71722
71723#ifdef FREECIV_DELTA_PROTOCOL
71725 struct packet_ruleset_base *old;
71726 struct genhash **hash = pc->phs.received + PACKET_RULESET_BASE;
71727
71728 if (nullptr == *hash) {
71730 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
71731 }
71732
71733 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71734 *real_packet = *old;
71735 } else {
71736 /* packet is already initialized empty */
71737 log_packet_detailed(" no old info");
71738 }
71739
71740#ifdef FREECIV_JSON_CONNECTION
71741 field_addr.name = "fields";
71742#endif /* FREECIV_JSON_CONNECTION */
71743 DIO_BV_GET(&din, &field_addr, fields);
71744
71745 if (BV_ISSET(fields, 0)) {
71746 log_packet_detailed(" got field 'id'");
71747
71748#ifdef FREECIV_JSON_CONNECTION
71749 field_addr.name = "id";
71750#endif /* FREECIV_JSON_CONNECTION */
71751
71752 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71754 }
71755 }
71756
71757 if (BV_ISSET(fields, 1)) {
71758 log_packet_detailed(" got field 'gui_type'");
71759
71760#ifdef FREECIV_JSON_CONNECTION
71761 field_addr.name = "gui_type";
71762#endif /* FREECIV_JSON_CONNECTION */
71763
71764 {
71765 int readin;
71766
71767 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71769 }
71770 real_packet->gui_type = readin;
71771 }
71772 }
71773
71774 if (BV_ISSET(fields, 2)) {
71775 log_packet_detailed(" got field 'border_sq'");
71776
71777#ifdef FREECIV_JSON_CONNECTION
71778 field_addr.name = "border_sq";
71779#endif /* FREECIV_JSON_CONNECTION */
71780
71781 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
71782 RECEIVE_PACKET_FIELD_ERROR(border_sq);
71783 }
71784 }
71785
71786 if (BV_ISSET(fields, 3)) {
71787 log_packet_detailed(" got field 'vision_main_sq'");
71788
71789#ifdef FREECIV_JSON_CONNECTION
71790 field_addr.name = "vision_main_sq";
71791#endif /* FREECIV_JSON_CONNECTION */
71792
71793 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
71794 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
71795 }
71796 }
71797
71798 if (BV_ISSET(fields, 4)) {
71799 log_packet_detailed(" got field 'vision_invis_sq'");
71800
71801#ifdef FREECIV_JSON_CONNECTION
71802 field_addr.name = "vision_invis_sq";
71803#endif /* FREECIV_JSON_CONNECTION */
71804
71805 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
71806 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
71807 }
71808 }
71809
71810 if (BV_ISSET(fields, 5)) {
71811 log_packet_detailed(" got field 'vision_subs_sq'");
71812
71813#ifdef FREECIV_JSON_CONNECTION
71814 field_addr.name = "vision_subs_sq";
71815#endif /* FREECIV_JSON_CONNECTION */
71816
71817 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
71818 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
71819 }
71820 }
71821
71822 if (nullptr == old) {
71823 old = fc_malloc(sizeof(*old));
71825 *old = *real_packet;
71827 } else {
71828 *old = *real_packet;
71829 }
71830
71831#else /* FREECIV_DELTA_PROTOCOL */
71832#ifdef FREECIV_JSON_CONNECTION
71833 field_addr.name = "id";
71834#endif /* FREECIV_JSON_CONNECTION */
71835
71836 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71838 }
71839
71840#ifdef FREECIV_JSON_CONNECTION
71841 field_addr.name = "gui_type";
71842#endif /* FREECIV_JSON_CONNECTION */
71843
71844 {
71845 int readin;
71846
71847 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71849 }
71850 real_packet->gui_type = readin;
71851 }
71852
71853#ifdef FREECIV_JSON_CONNECTION
71854 field_addr.name = "border_sq";
71855#endif /* FREECIV_JSON_CONNECTION */
71856
71857 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
71858 RECEIVE_PACKET_FIELD_ERROR(border_sq);
71859 }
71860
71861#ifdef FREECIV_JSON_CONNECTION
71862 field_addr.name = "vision_main_sq";
71863#endif /* FREECIV_JSON_CONNECTION */
71864
71865 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
71866 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
71867 }
71868
71869#ifdef FREECIV_JSON_CONNECTION
71870 field_addr.name = "vision_invis_sq";
71871#endif /* FREECIV_JSON_CONNECTION */
71872
71873 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
71874 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
71875 }
71876
71877#ifdef FREECIV_JSON_CONNECTION
71878 field_addr.name = "vision_subs_sq";
71879#endif /* FREECIV_JSON_CONNECTION */
71880
71881 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
71882 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
71883 }
71884#endif /* FREECIV_DELTA_PROTOCOL */
71885
71887#undef FREE_PACKET_STRUCT
71888}
71889
71890static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
71891{
71892 const struct packet_ruleset_base *real_packet = packet;
71893 int e;
71895
71896 log_packet_detailed("packet_ruleset_base_100: sending info about ()");
71897
71898#ifdef FREECIV_DELTA_PROTOCOL
71900 struct packet_ruleset_base *old;
71901 bool differ;
71902 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BASE;
71903
71904 if (nullptr == *hash) {
71906 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
71907 }
71908 BV_CLR_ALL(fields);
71909
71910 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71911 old = fc_malloc(sizeof(*old));
71912 /* temporary bitcopy just to insert correctly */
71913 *old = *real_packet;
71916 }
71917
71918 differ = (old->id != real_packet->id);
71919 if (differ) {
71920 BV_SET(fields, 0);
71921 }
71922
71923 differ = (old->gui_type != real_packet->gui_type);
71924 if (differ) {
71925 BV_SET(fields, 1);
71926 }
71927
71928 differ = (old->border_sq != real_packet->border_sq);
71929 if (differ) {
71930 BV_SET(fields, 2);
71931 }
71932
71933 differ = (old->vision_main_sq != real_packet->vision_main_sq);
71934 if (differ) {
71935 BV_SET(fields, 3);
71936 }
71937
71938 differ = (old->vision_invis_sq != real_packet->vision_invis_sq);
71939 if (differ) {
71940 BV_SET(fields, 4);
71941 }
71942
71943 differ = (old->vision_subs_sq != real_packet->vision_subs_sq);
71944 if (differ) {
71945 BV_SET(fields, 5);
71946 }
71947#endif /* FREECIV_DELTA_PROTOCOL */
71948
71949#ifdef FREECIV_JSON_CONNECTION
71950 struct plocation field_addr;
71951 {
71952 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71955 }
71956#endif /* FREECIV_JSON_CONNECTION */
71957
71958#ifdef FREECIV_DELTA_PROTOCOL
71959#ifdef FREECIV_JSON_CONNECTION
71960 field_addr.name = "fields";
71961#endif /* FREECIV_JSON_CONNECTION */
71962 e = 0;
71963 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71964 if (e) {
71965 log_packet_detailed("fields bitvector error detected");
71966 }
71967
71968 if (BV_ISSET(fields, 0)) {
71969 log_packet_detailed(" field 'id' has changed");
71970
71971#ifdef FREECIV_JSON_CONNECTION
71972 field_addr.name = "id";
71973#endif /* FREECIV_JSON_CONNECTION */
71974 e = 0;
71975
71976 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71977
71978 if (e) {
71979 log_packet_detailed("'id' field error detected");
71980 }
71981 }
71982
71983 if (BV_ISSET(fields, 1)) {
71984 log_packet_detailed(" field 'gui_type' has changed");
71985
71986#ifdef FREECIV_JSON_CONNECTION
71987 field_addr.name = "gui_type";
71988#endif /* FREECIV_JSON_CONNECTION */
71989 e = 0;
71990
71991 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
71992
71993 if (e) {
71994 log_packet_detailed("'gui_type' field error detected");
71995 }
71996 }
71997
71998 if (BV_ISSET(fields, 2)) {
71999 log_packet_detailed(" field 'border_sq' has changed");
72000
72001#ifdef FREECIV_JSON_CONNECTION
72002 field_addr.name = "border_sq";
72003#endif /* FREECIV_JSON_CONNECTION */
72004 e = 0;
72005
72006 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72007
72008 if (e) {
72009 log_packet_detailed("'border_sq' field error detected");
72010 }
72011 }
72012
72013 if (BV_ISSET(fields, 3)) {
72014 log_packet_detailed(" field 'vision_main_sq' has changed");
72015
72016#ifdef FREECIV_JSON_CONNECTION
72017 field_addr.name = "vision_main_sq";
72018#endif /* FREECIV_JSON_CONNECTION */
72019 e = 0;
72020
72021 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72022
72023 if (e) {
72024 log_packet_detailed("'vision_main_sq' field error detected");
72025 }
72026 }
72027
72028 if (BV_ISSET(fields, 4)) {
72029 log_packet_detailed(" field 'vision_invis_sq' has changed");
72030
72031#ifdef FREECIV_JSON_CONNECTION
72032 field_addr.name = "vision_invis_sq";
72033#endif /* FREECIV_JSON_CONNECTION */
72034 e = 0;
72035
72036 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72037
72038 if (e) {
72039 log_packet_detailed("'vision_invis_sq' field error detected");
72040 }
72041 }
72042
72043 if (BV_ISSET(fields, 5)) {
72044 log_packet_detailed(" field 'vision_subs_sq' has changed");
72045
72046#ifdef FREECIV_JSON_CONNECTION
72047 field_addr.name = "vision_subs_sq";
72048#endif /* FREECIV_JSON_CONNECTION */
72049 e = 0;
72050
72051 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72052
72053 if (e) {
72054 log_packet_detailed("'vision_subs_sq' field error detected");
72055 }
72056 }
72057
72058 *old = *real_packet;
72059
72060#else /* FREECIV_DELTA_PROTOCOL */
72061#ifdef FREECIV_JSON_CONNECTION
72062 field_addr.name = "id";
72063#endif /* FREECIV_JSON_CONNECTION */
72064 e = 0;
72065
72066 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72067
72068 if (e) {
72069 log_packet_detailed("'id' field error detected");
72070 }
72071
72072#ifdef FREECIV_JSON_CONNECTION
72073 field_addr.name = "gui_type";
72074#endif /* FREECIV_JSON_CONNECTION */
72075 e = 0;
72076
72077 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72078
72079 if (e) {
72080 log_packet_detailed("'gui_type' field error detected");
72081 }
72082
72083#ifdef FREECIV_JSON_CONNECTION
72084 field_addr.name = "border_sq";
72085#endif /* FREECIV_JSON_CONNECTION */
72086 e = 0;
72087
72088 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72089
72090 if (e) {
72091 log_packet_detailed("'border_sq' field error detected");
72092 }
72093
72094#ifdef FREECIV_JSON_CONNECTION
72095 field_addr.name = "vision_main_sq";
72096#endif /* FREECIV_JSON_CONNECTION */
72097 e = 0;
72098
72099 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72100
72101 if (e) {
72102 log_packet_detailed("'vision_main_sq' field error detected");
72103 }
72104
72105#ifdef FREECIV_JSON_CONNECTION
72106 field_addr.name = "vision_invis_sq";
72107#endif /* FREECIV_JSON_CONNECTION */
72108 e = 0;
72109
72110 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72111
72112 if (e) {
72113 log_packet_detailed("'vision_invis_sq' field error detected");
72114 }
72115
72116#ifdef FREECIV_JSON_CONNECTION
72117 field_addr.name = "vision_subs_sq";
72118#endif /* FREECIV_JSON_CONNECTION */
72119 e = 0;
72120
72121 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72122
72123 if (e) {
72124 log_packet_detailed("'vision_subs_sq' field error detected");
72125 }
72126#endif /* FREECIV_DELTA_PROTOCOL */
72127
72129}
72130
72132{
72133 if (!pc->used) {
72134 log_error("WARNING: trying to send data to the closed connection %s",
72136 return -1;
72137 }
72138 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BASE].packet != nullptr, -1,
72139 "Handler for PACKET_RULESET_BASE not installed");
72140 return pc->phs.handlers->send[PACKET_RULESET_BASE].packet(pc, packet);
72141}
72142
72143void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
72144{
72145 conn_list_iterate(dest, pconn) {
72148}
72149
72150static inline void init_packet_ruleset_road(struct packet_ruleset_road *packet)
72151{
72152 memset(packet, 0, sizeof(*packet));
72153
72155}
72156
72157static inline void free_packet_ruleset_road(struct packet_ruleset_road *packet)
72158{
72160}
72161
72162static inline void destroy_packet_ruleset_road(void *packet)
72163{
72165 free(packet);
72166}
72167
72168#ifdef FREECIV_DELTA_PROTOCOL
72169#define hash_packet_ruleset_road_100 hash_const
72170#define cmp_packet_ruleset_road_100 cmp_const
72172#endif /* FREECIV_DELTA_PROTOCOL */
72173
72175{
72176#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_road(_packet)
72178
72179#ifdef FREECIV_JSON_CONNECTION
72180 struct plocation field_addr;
72181 {
72182 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72185 }
72186#endif /* FREECIV_JSON_CONNECTION */
72187
72188 log_packet_detailed("packet_ruleset_road_100: got info about ()");
72189
72190#ifdef FREECIV_DELTA_PROTOCOL
72192 struct packet_ruleset_road *old;
72193 struct genhash **hash = pc->phs.received + PACKET_RULESET_ROAD;
72194
72195 if (nullptr == *hash) {
72197 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
72198 }
72199
72200 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72201 real_packet->id = old->id;
72202 real_packet->gui_type = old->gui_type;
72203 requirement_vector_copy(&real_packet->first_reqs, &old->first_reqs);
72204 real_packet->move_cost = old->move_cost;
72205 real_packet->move_mode = old->move_mode;
72206 {
72207 int i;
72208
72209 for (i = 0; i < O_LAST; i++) {
72210 real_packet->tile_incr_const[i] = old->tile_incr_const[i];
72211 }
72212 }
72213 {
72214 int i;
72215
72216 for (i = 0; i < O_LAST; i++) {
72217 real_packet->tile_incr[i] = old->tile_incr[i];
72218 }
72219 }
72220 {
72221 int i;
72222
72223 for (i = 0; i < O_LAST; i++) {
72224 real_packet->tile_bonus[i] = old->tile_bonus[i];
72225 }
72226 }
72227 real_packet->compat = old->compat;
72228 real_packet->integrates = old->integrates;
72229 real_packet->flags = old->flags;
72230 } else {
72231 /* packet is already initialized empty */
72232 log_packet_detailed(" no old info");
72233 }
72234
72235#ifdef FREECIV_JSON_CONNECTION
72236 field_addr.name = "fields";
72237#endif /* FREECIV_JSON_CONNECTION */
72238 DIO_BV_GET(&din, &field_addr, fields);
72239
72240 if (BV_ISSET(fields, 0)) {
72241 log_packet_detailed(" got field 'id'");
72242
72243#ifdef FREECIV_JSON_CONNECTION
72244 field_addr.name = "id";
72245#endif /* FREECIV_JSON_CONNECTION */
72246
72247 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72249 }
72250 }
72251
72252 if (BV_ISSET(fields, 1)) {
72253 log_packet_detailed(" got field 'gui_type'");
72254
72255#ifdef FREECIV_JSON_CONNECTION
72256 field_addr.name = "gui_type";
72257#endif /* FREECIV_JSON_CONNECTION */
72258
72259 {
72260 int readin;
72261
72262 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72264 }
72265 real_packet->gui_type = readin;
72266 }
72267 }
72268
72269 if (BV_ISSET(fields, 2)) {
72270 log_packet_detailed(" got field 'first_reqs'");
72271
72272#ifdef FREECIV_JSON_CONNECTION
72273 field_addr.name = "first_reqs";
72274#endif /* FREECIV_JSON_CONNECTION */
72275
72276 {
72277 int i;
72278
72279 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
72280 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72281 }
72283
72284#ifdef FREECIV_JSON_CONNECTION
72285 /* Enter array. */
72286 field_addr.sub_location = plocation_elem_new(0);
72287#endif /* FREECIV_JSON_CONNECTION */
72288
72289 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72290#ifdef FREECIV_JSON_CONNECTION
72291 /* Next array element */
72292 field_addr.sub_location->number = i;
72293#endif /* FREECIV_JSON_CONNECTION */
72294
72295 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
72296 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72297 }
72298 }
72299
72300#ifdef FREECIV_JSON_CONNECTION
72301 /* Exit array. */
72302 FC_FREE(field_addr.sub_location);
72303#endif /* FREECIV_JSON_CONNECTION */
72304 }
72305 }
72306
72307 if (BV_ISSET(fields, 3)) {
72308 log_packet_detailed(" got field 'move_cost'");
72309
72310#ifdef FREECIV_JSON_CONNECTION
72311 field_addr.name = "move_cost";
72312#endif /* FREECIV_JSON_CONNECTION */
72313
72314 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
72315 RECEIVE_PACKET_FIELD_ERROR(move_cost);
72316 }
72317 }
72318
72319 if (BV_ISSET(fields, 4)) {
72320 log_packet_detailed(" got field 'move_mode'");
72321
72322#ifdef FREECIV_JSON_CONNECTION
72323 field_addr.name = "move_mode";
72324#endif /* FREECIV_JSON_CONNECTION */
72325
72326 {
72327 int readin;
72328
72329 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72330 RECEIVE_PACKET_FIELD_ERROR(move_mode);
72331 }
72332 real_packet->move_mode = readin;
72333 }
72334 }
72335
72336 if (BV_ISSET(fields, 5)) {
72337 log_packet_detailed(" got field 'tile_incr_const'");
72338
72339#ifdef FREECIV_JSON_CONNECTION
72340 field_addr.name = "tile_incr_const";
72341#endif /* FREECIV_JSON_CONNECTION */
72342
72343 {
72344 int i;
72345
72346
72347#ifdef FREECIV_JSON_CONNECTION
72348 /* Enter array. */
72349 field_addr.sub_location = plocation_elem_new(0);
72350#endif /* FREECIV_JSON_CONNECTION */
72351
72352 for (i = 0; i < O_LAST; i++) {
72353#ifdef FREECIV_JSON_CONNECTION
72354 /* Next array element */
72355 field_addr.sub_location->number = i;
72356#endif /* FREECIV_JSON_CONNECTION */
72357
72358 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
72359 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
72360 }
72361 }
72362
72363#ifdef FREECIV_JSON_CONNECTION
72364 /* Exit array. */
72365 FC_FREE(field_addr.sub_location);
72366#endif /* FREECIV_JSON_CONNECTION */
72367 }
72368 }
72369
72370 if (BV_ISSET(fields, 6)) {
72371 log_packet_detailed(" got field 'tile_incr'");
72372
72373#ifdef FREECIV_JSON_CONNECTION
72374 field_addr.name = "tile_incr";
72375#endif /* FREECIV_JSON_CONNECTION */
72376
72377 {
72378 int i;
72379
72380
72381#ifdef FREECIV_JSON_CONNECTION
72382 /* Enter array. */
72383 field_addr.sub_location = plocation_elem_new(0);
72384#endif /* FREECIV_JSON_CONNECTION */
72385
72386 for (i = 0; i < O_LAST; i++) {
72387#ifdef FREECIV_JSON_CONNECTION
72388 /* Next array element */
72389 field_addr.sub_location->number = i;
72390#endif /* FREECIV_JSON_CONNECTION */
72391
72392 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
72393 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
72394 }
72395 }
72396
72397#ifdef FREECIV_JSON_CONNECTION
72398 /* Exit array. */
72399 FC_FREE(field_addr.sub_location);
72400#endif /* FREECIV_JSON_CONNECTION */
72401 }
72402 }
72403
72404 if (BV_ISSET(fields, 7)) {
72405 log_packet_detailed(" got field 'tile_bonus'");
72406
72407#ifdef FREECIV_JSON_CONNECTION
72408 field_addr.name = "tile_bonus";
72409#endif /* FREECIV_JSON_CONNECTION */
72410
72411 {
72412 int i;
72413
72414
72415#ifdef FREECIV_JSON_CONNECTION
72416 /* Enter array. */
72417 field_addr.sub_location = plocation_elem_new(0);
72418#endif /* FREECIV_JSON_CONNECTION */
72419
72420 for (i = 0; i < O_LAST; i++) {
72421#ifdef FREECIV_JSON_CONNECTION
72422 /* Next array element */
72423 field_addr.sub_location->number = i;
72424#endif /* FREECIV_JSON_CONNECTION */
72425
72426 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
72427 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
72428 }
72429 }
72430
72431#ifdef FREECIV_JSON_CONNECTION
72432 /* Exit array. */
72433 FC_FREE(field_addr.sub_location);
72434#endif /* FREECIV_JSON_CONNECTION */
72435 }
72436 }
72437
72438 if (BV_ISSET(fields, 8)) {
72439 log_packet_detailed(" got field 'compat'");
72440
72441#ifdef FREECIV_JSON_CONNECTION
72442 field_addr.name = "compat";
72443#endif /* FREECIV_JSON_CONNECTION */
72444
72445 {
72446 int readin;
72447
72448 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72450 }
72451 real_packet->compat = readin;
72452 }
72453 }
72454
72455 if (BV_ISSET(fields, 9)) {
72456 log_packet_detailed(" got field 'integrates'");
72457
72458#ifdef FREECIV_JSON_CONNECTION
72459 field_addr.name = "integrates";
72460#endif /* FREECIV_JSON_CONNECTION */
72461
72462 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
72463 RECEIVE_PACKET_FIELD_ERROR(integrates);
72464 }
72465 }
72466
72467 if (BV_ISSET(fields, 10)) {
72468 log_packet_detailed(" got field 'flags'");
72469
72470#ifdef FREECIV_JSON_CONNECTION
72471 field_addr.name = "flags";
72472#endif /* FREECIV_JSON_CONNECTION */
72473
72474 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
72476 }
72477 }
72478
72479 if (nullptr == old) {
72480 old = fc_malloc(sizeof(*old));
72482 old->id = real_packet->id;
72483 old->gui_type = real_packet->gui_type;
72484 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72485 old->move_cost = real_packet->move_cost;
72486 old->move_mode = real_packet->move_mode;
72487 {
72488 int i;
72489
72490 for (i = 0; i < O_LAST; i++) {
72491 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
72492 }
72493 }
72494 {
72495 int i;
72496
72497 for (i = 0; i < O_LAST; i++) {
72498 old->tile_incr[i] = real_packet->tile_incr[i];
72499 }
72500 }
72501 {
72502 int i;
72503
72504 for (i = 0; i < O_LAST; i++) {
72505 old->tile_bonus[i] = real_packet->tile_bonus[i];
72506 }
72507 }
72508 old->compat = real_packet->compat;
72509 old->integrates = real_packet->integrates;
72510 old->flags = real_packet->flags;
72512 } else {
72513 old->id = real_packet->id;
72514 old->gui_type = real_packet->gui_type;
72515 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72516 old->move_cost = real_packet->move_cost;
72517 old->move_mode = real_packet->move_mode;
72518 {
72519 int i;
72520
72521 for (i = 0; i < O_LAST; i++) {
72522 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
72523 }
72524 }
72525 {
72526 int i;
72527
72528 for (i = 0; i < O_LAST; i++) {
72529 old->tile_incr[i] = real_packet->tile_incr[i];
72530 }
72531 }
72532 {
72533 int i;
72534
72535 for (i = 0; i < O_LAST; i++) {
72536 old->tile_bonus[i] = real_packet->tile_bonus[i];
72537 }
72538 }
72539 old->compat = real_packet->compat;
72540 old->integrates = real_packet->integrates;
72541 old->flags = real_packet->flags;
72542 }
72543
72544#else /* FREECIV_DELTA_PROTOCOL */
72545#ifdef FREECIV_JSON_CONNECTION
72546 field_addr.name = "id";
72547#endif /* FREECIV_JSON_CONNECTION */
72548
72549 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72551 }
72552
72553#ifdef FREECIV_JSON_CONNECTION
72554 field_addr.name = "gui_type";
72555#endif /* FREECIV_JSON_CONNECTION */
72556
72557 {
72558 int readin;
72559
72560 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72562 }
72563 real_packet->gui_type = readin;
72564 }
72565
72566#ifdef FREECIV_JSON_CONNECTION
72567 field_addr.name = "first_reqs";
72568#endif /* FREECIV_JSON_CONNECTION */
72569
72570 {
72571 int i;
72572
72573 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
72574 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72575 }
72577
72578#ifdef FREECIV_JSON_CONNECTION
72579 /* Enter array. */
72580 field_addr.sub_location = plocation_elem_new(0);
72581#endif /* FREECIV_JSON_CONNECTION */
72582
72583 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72584#ifdef FREECIV_JSON_CONNECTION
72585 /* Next array element */
72586 field_addr.sub_location->number = i;
72587#endif /* FREECIV_JSON_CONNECTION */
72588
72589 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
72590 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72591 }
72592 }
72593
72594#ifdef FREECIV_JSON_CONNECTION
72595 /* Exit array. */
72596 FC_FREE(field_addr.sub_location);
72597#endif /* FREECIV_JSON_CONNECTION */
72598 }
72599
72600#ifdef FREECIV_JSON_CONNECTION
72601 field_addr.name = "move_cost";
72602#endif /* FREECIV_JSON_CONNECTION */
72603
72604 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
72605 RECEIVE_PACKET_FIELD_ERROR(move_cost);
72606 }
72607
72608#ifdef FREECIV_JSON_CONNECTION
72609 field_addr.name = "move_mode";
72610#endif /* FREECIV_JSON_CONNECTION */
72611
72612 {
72613 int readin;
72614
72615 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72616 RECEIVE_PACKET_FIELD_ERROR(move_mode);
72617 }
72618 real_packet->move_mode = readin;
72619 }
72620
72621#ifdef FREECIV_JSON_CONNECTION
72622 field_addr.name = "tile_incr_const";
72623#endif /* FREECIV_JSON_CONNECTION */
72624
72625 {
72626 int i;
72627
72628
72629#ifdef FREECIV_JSON_CONNECTION
72630 /* Enter array. */
72631 field_addr.sub_location = plocation_elem_new(0);
72632#endif /* FREECIV_JSON_CONNECTION */
72633
72634 for (i = 0; i < O_LAST; i++) {
72635#ifdef FREECIV_JSON_CONNECTION
72636 /* Next array element */
72637 field_addr.sub_location->number = i;
72638#endif /* FREECIV_JSON_CONNECTION */
72639
72640 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
72641 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
72642 }
72643 }
72644
72645#ifdef FREECIV_JSON_CONNECTION
72646 /* Exit array. */
72647 FC_FREE(field_addr.sub_location);
72648#endif /* FREECIV_JSON_CONNECTION */
72649 }
72650
72651#ifdef FREECIV_JSON_CONNECTION
72652 field_addr.name = "tile_incr";
72653#endif /* FREECIV_JSON_CONNECTION */
72654
72655 {
72656 int i;
72657
72658
72659#ifdef FREECIV_JSON_CONNECTION
72660 /* Enter array. */
72661 field_addr.sub_location = plocation_elem_new(0);
72662#endif /* FREECIV_JSON_CONNECTION */
72663
72664 for (i = 0; i < O_LAST; i++) {
72665#ifdef FREECIV_JSON_CONNECTION
72666 /* Next array element */
72667 field_addr.sub_location->number = i;
72668#endif /* FREECIV_JSON_CONNECTION */
72669
72670 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
72671 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
72672 }
72673 }
72674
72675#ifdef FREECIV_JSON_CONNECTION
72676 /* Exit array. */
72677 FC_FREE(field_addr.sub_location);
72678#endif /* FREECIV_JSON_CONNECTION */
72679 }
72680
72681#ifdef FREECIV_JSON_CONNECTION
72682 field_addr.name = "tile_bonus";
72683#endif /* FREECIV_JSON_CONNECTION */
72684
72685 {
72686 int i;
72687
72688
72689#ifdef FREECIV_JSON_CONNECTION
72690 /* Enter array. */
72691 field_addr.sub_location = plocation_elem_new(0);
72692#endif /* FREECIV_JSON_CONNECTION */
72693
72694 for (i = 0; i < O_LAST; i++) {
72695#ifdef FREECIV_JSON_CONNECTION
72696 /* Next array element */
72697 field_addr.sub_location->number = i;
72698#endif /* FREECIV_JSON_CONNECTION */
72699
72700 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
72701 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
72702 }
72703 }
72704
72705#ifdef FREECIV_JSON_CONNECTION
72706 /* Exit array. */
72707 FC_FREE(field_addr.sub_location);
72708#endif /* FREECIV_JSON_CONNECTION */
72709 }
72710
72711#ifdef FREECIV_JSON_CONNECTION
72712 field_addr.name = "compat";
72713#endif /* FREECIV_JSON_CONNECTION */
72714
72715 {
72716 int readin;
72717
72718 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72720 }
72721 real_packet->compat = readin;
72722 }
72723
72724#ifdef FREECIV_JSON_CONNECTION
72725 field_addr.name = "integrates";
72726#endif /* FREECIV_JSON_CONNECTION */
72727
72728 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
72729 RECEIVE_PACKET_FIELD_ERROR(integrates);
72730 }
72731
72732#ifdef FREECIV_JSON_CONNECTION
72733 field_addr.name = "flags";
72734#endif /* FREECIV_JSON_CONNECTION */
72735
72736 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
72738 }
72739#endif /* FREECIV_DELTA_PROTOCOL */
72740
72742#undef FREE_PACKET_STRUCT
72743}
72744
72745static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
72746{
72747 const struct packet_ruleset_road *real_packet = packet;
72748 int e;
72750
72751 log_packet_detailed("packet_ruleset_road_100: sending info about ()");
72752
72753#ifdef FREECIV_DELTA_PROTOCOL
72755 struct packet_ruleset_road *old;
72756 bool differ;
72757 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ROAD;
72758
72759 if (nullptr == *hash) {
72761 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
72762 }
72763 BV_CLR_ALL(fields);
72764
72765 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72766 old = fc_malloc(sizeof(*old));
72767 /* temporary bitcopy just to insert correctly */
72768 *old = *real_packet;
72771 }
72772
72773 differ = (old->id != real_packet->id);
72774 if (differ) {
72775 BV_SET(fields, 0);
72776 }
72777
72778 differ = (old->gui_type != real_packet->gui_type);
72779 if (differ) {
72780 BV_SET(fields, 1);
72781 }
72782
72783 differ = (requirement_vector_size(&old->first_reqs) != requirement_vector_size(&real_packet->first_reqs));
72784 if (!differ) {
72785 int i;
72786
72787 for (i = 0; i < requirement_vector_size(&old->first_reqs); i++) {
72788 differ = !are_requirements_equal(&old->first_reqs.p[i], &real_packet->first_reqs.p[i]);
72789 if (differ) {
72790 break;
72791 }
72792 }
72793 }
72794 if (differ) {
72795 BV_SET(fields, 2);
72796 }
72797
72798 differ = (old->move_cost != real_packet->move_cost);
72799 if (differ) {
72800 BV_SET(fields, 3);
72801 }
72802
72803 differ = (old->move_mode != real_packet->move_mode);
72804 if (differ) {
72805 BV_SET(fields, 4);
72806 }
72807
72808 differ = FALSE;
72809 {
72810 int i;
72811
72812 for (i = 0; i < O_LAST; i++) {
72813 differ = (old->tile_incr_const[i] != real_packet->tile_incr_const[i]);
72814 if (differ) {
72815 break;
72816 }
72817 }
72818 }
72819 if (differ) {
72820 BV_SET(fields, 5);
72821 }
72822
72823 differ = FALSE;
72824 {
72825 int i;
72826
72827 for (i = 0; i < O_LAST; i++) {
72828 differ = (old->tile_incr[i] != real_packet->tile_incr[i]);
72829 if (differ) {
72830 break;
72831 }
72832 }
72833 }
72834 if (differ) {
72835 BV_SET(fields, 6);
72836 }
72837
72838 differ = FALSE;
72839 {
72840 int i;
72841
72842 for (i = 0; i < O_LAST; i++) {
72843 differ = (old->tile_bonus[i] != real_packet->tile_bonus[i]);
72844 if (differ) {
72845 break;
72846 }
72847 }
72848 }
72849 if (differ) {
72850 BV_SET(fields, 7);
72851 }
72852
72853 differ = (old->compat != real_packet->compat);
72854 if (differ) {
72855 BV_SET(fields, 8);
72856 }
72857
72858 differ = !BV_ARE_EQUAL(old->integrates, real_packet->integrates);
72859 if (differ) {
72860 BV_SET(fields, 9);
72861 }
72862
72863 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
72864 if (differ) {
72865 BV_SET(fields, 10);
72866 }
72867#endif /* FREECIV_DELTA_PROTOCOL */
72868
72869#ifdef FREECIV_JSON_CONNECTION
72870 struct plocation field_addr;
72871 {
72872 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72875 }
72876#endif /* FREECIV_JSON_CONNECTION */
72877
72878#ifdef FREECIV_DELTA_PROTOCOL
72879#ifdef FREECIV_JSON_CONNECTION
72880 field_addr.name = "fields";
72881#endif /* FREECIV_JSON_CONNECTION */
72882 e = 0;
72883 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72884 if (e) {
72885 log_packet_detailed("fields bitvector error detected");
72886 }
72887
72888 if (BV_ISSET(fields, 0)) {
72889 log_packet_detailed(" field 'id' has changed");
72890
72891#ifdef FREECIV_JSON_CONNECTION
72892 field_addr.name = "id";
72893#endif /* FREECIV_JSON_CONNECTION */
72894 e = 0;
72895
72896 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72897
72898 if (e) {
72899 log_packet_detailed("'id' field error detected");
72900 }
72901 }
72902
72903 if (BV_ISSET(fields, 1)) {
72904 log_packet_detailed(" field 'gui_type' has changed");
72905
72906#ifdef FREECIV_JSON_CONNECTION
72907 field_addr.name = "gui_type";
72908#endif /* FREECIV_JSON_CONNECTION */
72909 e = 0;
72910
72911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72912
72913 if (e) {
72914 log_packet_detailed("'gui_type' field error detected");
72915 }
72916 }
72917
72918 if (BV_ISSET(fields, 2)) {
72919 log_packet_detailed(" field 'first_reqs' has changed");
72920
72921#ifdef FREECIV_JSON_CONNECTION
72922 field_addr.name = "first_reqs";
72923#endif /* FREECIV_JSON_CONNECTION */
72924 e = 0;
72925
72926 {
72927 int i;
72928
72931
72932#ifdef FREECIV_JSON_CONNECTION
72933 /* Enter array. */
72934 field_addr.sub_location = plocation_elem_new(0);
72935#endif /* FREECIV_JSON_CONNECTION */
72936
72937 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72938#ifdef FREECIV_JSON_CONNECTION
72939 /* Next array element. */
72940 field_addr.sub_location->number = i;
72941#endif /* FREECIV_JSON_CONNECTION */
72942
72943 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
72944 }
72945
72946#ifdef FREECIV_JSON_CONNECTION
72947 /* Exit array. */
72948 FC_FREE(field_addr.sub_location);
72949#endif /* FREECIV_JSON_CONNECTION */
72950 }
72951
72952 if (e) {
72953 log_packet_detailed("'first_reqs' field error detected");
72954 }
72955 }
72956
72957 if (BV_ISSET(fields, 3)) {
72958 log_packet_detailed(" field 'move_cost' has changed");
72959
72960#ifdef FREECIV_JSON_CONNECTION
72961 field_addr.name = "move_cost";
72962#endif /* FREECIV_JSON_CONNECTION */
72963 e = 0;
72964
72965 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
72966
72967 if (e) {
72968 log_packet_detailed("'move_cost' field error detected");
72969 }
72970 }
72971
72972 if (BV_ISSET(fields, 4)) {
72973 log_packet_detailed(" field 'move_mode' has changed");
72974
72975#ifdef FREECIV_JSON_CONNECTION
72976 field_addr.name = "move_mode";
72977#endif /* FREECIV_JSON_CONNECTION */
72978 e = 0;
72979
72980 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
72981
72982 if (e) {
72983 log_packet_detailed("'move_mode' field error detected");
72984 }
72985 }
72986
72987 if (BV_ISSET(fields, 5)) {
72988 log_packet_detailed(" field 'tile_incr_const' has changed");
72989
72990#ifdef FREECIV_JSON_CONNECTION
72991 field_addr.name = "tile_incr_const";
72992#endif /* FREECIV_JSON_CONNECTION */
72993 e = 0;
72994
72995 {
72996 int i;
72997
72998#ifdef FREECIV_JSON_CONNECTION
72999 /* Create the array. */
73000 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73001
73002 /* Enter array. */
73003 field_addr.sub_location = plocation_elem_new(0);
73004#endif /* FREECIV_JSON_CONNECTION */
73005
73006 for (i = 0; i < O_LAST; i++) {
73007#ifdef FREECIV_JSON_CONNECTION
73008 /* Next array element. */
73009 field_addr.sub_location->number = i;
73010#endif /* FREECIV_JSON_CONNECTION */
73011
73012 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73013 }
73014
73015#ifdef FREECIV_JSON_CONNECTION
73016 /* Exit array. */
73017 FC_FREE(field_addr.sub_location);
73018#endif /* FREECIV_JSON_CONNECTION */
73019 }
73020
73021 if (e) {
73022 log_packet_detailed("'tile_incr_const' field error detected");
73023 }
73024 }
73025
73026 if (BV_ISSET(fields, 6)) {
73027 log_packet_detailed(" field 'tile_incr' has changed");
73028
73029#ifdef FREECIV_JSON_CONNECTION
73030 field_addr.name = "tile_incr";
73031#endif /* FREECIV_JSON_CONNECTION */
73032 e = 0;
73033
73034 {
73035 int i;
73036
73037#ifdef FREECIV_JSON_CONNECTION
73038 /* Create the array. */
73039 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73040
73041 /* Enter array. */
73042 field_addr.sub_location = plocation_elem_new(0);
73043#endif /* FREECIV_JSON_CONNECTION */
73044
73045 for (i = 0; i < O_LAST; i++) {
73046#ifdef FREECIV_JSON_CONNECTION
73047 /* Next array element. */
73048 field_addr.sub_location->number = i;
73049#endif /* FREECIV_JSON_CONNECTION */
73050
73051 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73052 }
73053
73054#ifdef FREECIV_JSON_CONNECTION
73055 /* Exit array. */
73056 FC_FREE(field_addr.sub_location);
73057#endif /* FREECIV_JSON_CONNECTION */
73058 }
73059
73060 if (e) {
73061 log_packet_detailed("'tile_incr' field error detected");
73062 }
73063 }
73064
73065 if (BV_ISSET(fields, 7)) {
73066 log_packet_detailed(" field 'tile_bonus' has changed");
73067
73068#ifdef FREECIV_JSON_CONNECTION
73069 field_addr.name = "tile_bonus";
73070#endif /* FREECIV_JSON_CONNECTION */
73071 e = 0;
73072
73073 {
73074 int i;
73075
73076#ifdef FREECIV_JSON_CONNECTION
73077 /* Create the array. */
73078 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73079
73080 /* Enter array. */
73081 field_addr.sub_location = plocation_elem_new(0);
73082#endif /* FREECIV_JSON_CONNECTION */
73083
73084 for (i = 0; i < O_LAST; i++) {
73085#ifdef FREECIV_JSON_CONNECTION
73086 /* Next array element. */
73087 field_addr.sub_location->number = i;
73088#endif /* FREECIV_JSON_CONNECTION */
73089
73090 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73091 }
73092
73093#ifdef FREECIV_JSON_CONNECTION
73094 /* Exit array. */
73095 FC_FREE(field_addr.sub_location);
73096#endif /* FREECIV_JSON_CONNECTION */
73097 }
73098
73099 if (e) {
73100 log_packet_detailed("'tile_bonus' field error detected");
73101 }
73102 }
73103
73104 if (BV_ISSET(fields, 8)) {
73105 log_packet_detailed(" field 'compat' has changed");
73106
73107#ifdef FREECIV_JSON_CONNECTION
73108 field_addr.name = "compat";
73109#endif /* FREECIV_JSON_CONNECTION */
73110 e = 0;
73111
73112 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73113
73114 if (e) {
73115 log_packet_detailed("'compat' field error detected");
73116 }
73117 }
73118
73119 if (BV_ISSET(fields, 9)) {
73120 log_packet_detailed(" field 'integrates' has changed");
73121
73122#ifdef FREECIV_JSON_CONNECTION
73123 field_addr.name = "integrates";
73124#endif /* FREECIV_JSON_CONNECTION */
73125 e = 0;
73126
73127 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73128
73129 if (e) {
73130 log_packet_detailed("'integrates' field error detected");
73131 }
73132 }
73133
73134 if (BV_ISSET(fields, 10)) {
73135 log_packet_detailed(" field 'flags' has changed");
73136
73137#ifdef FREECIV_JSON_CONNECTION
73138 field_addr.name = "flags";
73139#endif /* FREECIV_JSON_CONNECTION */
73140 e = 0;
73141
73142 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73143
73144 if (e) {
73145 log_packet_detailed("'flags' field error detected");
73146 }
73147 }
73148
73149 old->id = real_packet->id;
73150 old->gui_type = real_packet->gui_type;
73151 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
73152 old->move_cost = real_packet->move_cost;
73153 old->move_mode = real_packet->move_mode;
73154 {
73155 int i;
73156
73157 for (i = 0; i < O_LAST; i++) {
73158 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
73159 }
73160 }
73161 {
73162 int i;
73163
73164 for (i = 0; i < O_LAST; i++) {
73165 old->tile_incr[i] = real_packet->tile_incr[i];
73166 }
73167 }
73168 {
73169 int i;
73170
73171 for (i = 0; i < O_LAST; i++) {
73172 old->tile_bonus[i] = real_packet->tile_bonus[i];
73173 }
73174 }
73175 old->compat = real_packet->compat;
73176 old->integrates = real_packet->integrates;
73177 old->flags = real_packet->flags;
73178
73179#else /* FREECIV_DELTA_PROTOCOL */
73180#ifdef FREECIV_JSON_CONNECTION
73181 field_addr.name = "id";
73182#endif /* FREECIV_JSON_CONNECTION */
73183 e = 0;
73184
73185 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
73186
73187 if (e) {
73188 log_packet_detailed("'id' field error detected");
73189 }
73190
73191#ifdef FREECIV_JSON_CONNECTION
73192 field_addr.name = "gui_type";
73193#endif /* FREECIV_JSON_CONNECTION */
73194 e = 0;
73195
73196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
73197
73198 if (e) {
73199 log_packet_detailed("'gui_type' field error detected");
73200 }
73201
73202#ifdef FREECIV_JSON_CONNECTION
73203 field_addr.name = "first_reqs";
73204#endif /* FREECIV_JSON_CONNECTION */
73205 e = 0;
73206
73207 {
73208 int i;
73209
73212
73213#ifdef FREECIV_JSON_CONNECTION
73214 /* Enter array. */
73215 field_addr.sub_location = plocation_elem_new(0);
73216#endif /* FREECIV_JSON_CONNECTION */
73217
73218 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73219#ifdef FREECIV_JSON_CONNECTION
73220 /* Next array element. */
73221 field_addr.sub_location->number = i;
73222#endif /* FREECIV_JSON_CONNECTION */
73223
73224 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
73225 }
73226
73227#ifdef FREECIV_JSON_CONNECTION
73228 /* Exit array. */
73229 FC_FREE(field_addr.sub_location);
73230#endif /* FREECIV_JSON_CONNECTION */
73231 }
73232
73233 if (e) {
73234 log_packet_detailed("'first_reqs' field error detected");
73235 }
73236
73237#ifdef FREECIV_JSON_CONNECTION
73238 field_addr.name = "move_cost";
73239#endif /* FREECIV_JSON_CONNECTION */
73240 e = 0;
73241
73242 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
73243
73244 if (e) {
73245 log_packet_detailed("'move_cost' field error detected");
73246 }
73247
73248#ifdef FREECIV_JSON_CONNECTION
73249 field_addr.name = "move_mode";
73250#endif /* FREECIV_JSON_CONNECTION */
73251 e = 0;
73252
73253 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
73254
73255 if (e) {
73256 log_packet_detailed("'move_mode' field error detected");
73257 }
73258
73259#ifdef FREECIV_JSON_CONNECTION
73260 field_addr.name = "tile_incr_const";
73261#endif /* FREECIV_JSON_CONNECTION */
73262 e = 0;
73263
73264 {
73265 int i;
73266
73267#ifdef FREECIV_JSON_CONNECTION
73268 /* Create the array. */
73269 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73270
73271 /* Enter array. */
73272 field_addr.sub_location = plocation_elem_new(0);
73273#endif /* FREECIV_JSON_CONNECTION */
73274
73275 for (i = 0; i < O_LAST; i++) {
73276#ifdef FREECIV_JSON_CONNECTION
73277 /* Next array element. */
73278 field_addr.sub_location->number = i;
73279#endif /* FREECIV_JSON_CONNECTION */
73280
73281 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73282 }
73283
73284#ifdef FREECIV_JSON_CONNECTION
73285 /* Exit array. */
73286 FC_FREE(field_addr.sub_location);
73287#endif /* FREECIV_JSON_CONNECTION */
73288 }
73289
73290 if (e) {
73291 log_packet_detailed("'tile_incr_const' field error detected");
73292 }
73293
73294#ifdef FREECIV_JSON_CONNECTION
73295 field_addr.name = "tile_incr";
73296#endif /* FREECIV_JSON_CONNECTION */
73297 e = 0;
73298
73299 {
73300 int i;
73301
73302#ifdef FREECIV_JSON_CONNECTION
73303 /* Create the array. */
73304 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73305
73306 /* Enter array. */
73307 field_addr.sub_location = plocation_elem_new(0);
73308#endif /* FREECIV_JSON_CONNECTION */
73309
73310 for (i = 0; i < O_LAST; i++) {
73311#ifdef FREECIV_JSON_CONNECTION
73312 /* Next array element. */
73313 field_addr.sub_location->number = i;
73314#endif /* FREECIV_JSON_CONNECTION */
73315
73316 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73317 }
73318
73319#ifdef FREECIV_JSON_CONNECTION
73320 /* Exit array. */
73321 FC_FREE(field_addr.sub_location);
73322#endif /* FREECIV_JSON_CONNECTION */
73323 }
73324
73325 if (e) {
73326 log_packet_detailed("'tile_incr' field error detected");
73327 }
73328
73329#ifdef FREECIV_JSON_CONNECTION
73330 field_addr.name = "tile_bonus";
73331#endif /* FREECIV_JSON_CONNECTION */
73332 e = 0;
73333
73334 {
73335 int i;
73336
73337#ifdef FREECIV_JSON_CONNECTION
73338 /* Create the array. */
73339 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73340
73341 /* Enter array. */
73342 field_addr.sub_location = plocation_elem_new(0);
73343#endif /* FREECIV_JSON_CONNECTION */
73344
73345 for (i = 0; i < O_LAST; i++) {
73346#ifdef FREECIV_JSON_CONNECTION
73347 /* Next array element. */
73348 field_addr.sub_location->number = i;
73349#endif /* FREECIV_JSON_CONNECTION */
73350
73351 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73352 }
73353
73354#ifdef FREECIV_JSON_CONNECTION
73355 /* Exit array. */
73356 FC_FREE(field_addr.sub_location);
73357#endif /* FREECIV_JSON_CONNECTION */
73358 }
73359
73360 if (e) {
73361 log_packet_detailed("'tile_bonus' field error detected");
73362 }
73363
73364#ifdef FREECIV_JSON_CONNECTION
73365 field_addr.name = "compat";
73366#endif /* FREECIV_JSON_CONNECTION */
73367 e = 0;
73368
73369 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73370
73371 if (e) {
73372 log_packet_detailed("'compat' field error detected");
73373 }
73374
73375#ifdef FREECIV_JSON_CONNECTION
73376 field_addr.name = "integrates";
73377#endif /* FREECIV_JSON_CONNECTION */
73378 e = 0;
73379
73380 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73381
73382 if (e) {
73383 log_packet_detailed("'integrates' field error detected");
73384 }
73385
73386#ifdef FREECIV_JSON_CONNECTION
73387 field_addr.name = "flags";
73388#endif /* FREECIV_JSON_CONNECTION */
73389 e = 0;
73390
73391 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73392
73393 if (e) {
73394 log_packet_detailed("'flags' field error detected");
73395 }
73396#endif /* FREECIV_DELTA_PROTOCOL */
73397
73399}
73400
73402{
73403 if (!pc->used) {
73404 log_error("WARNING: trying to send data to the closed connection %s",
73406 return -1;
73407 }
73408 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ROAD].packet != nullptr, -1,
73409 "Handler for PACKET_RULESET_ROAD not installed");
73410 return pc->phs.handlers->send[PACKET_RULESET_ROAD].packet(pc, packet);
73411}
73412
73413void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
73414{
73415 conn_list_iterate(dest, pconn) {
73418}
73419
73420static inline void init_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73421{
73422 memset(packet, 0, sizeof(*packet));
73423
73424 requirement_vector_init(&packet->reqs);
73425 packet->helptext = strvec_new();
73426}
73427
73428static inline void free_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73429{
73430 if (packet->helptext) {
73431 strvec_destroy(packet->helptext);
73432 packet->helptext = nullptr;
73433 }
73434 requirement_vector_free(&packet->reqs);
73435}
73436
73437static inline void destroy_packet_ruleset_goods(void *packet)
73438{
73440 free(packet);
73441}
73442
73443#ifdef FREECIV_DELTA_PROTOCOL
73444#define hash_packet_ruleset_goods_100 hash_const
73445#define cmp_packet_ruleset_goods_100 cmp_const
73447#endif /* FREECIV_DELTA_PROTOCOL */
73448
73450{
73451#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_goods(_packet)
73453
73454#ifdef FREECIV_JSON_CONNECTION
73455 struct plocation field_addr;
73456 {
73457 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
73460 }
73461#endif /* FREECIV_JSON_CONNECTION */
73462
73463 log_packet_detailed("packet_ruleset_goods_100: got info about ()");
73464
73465#ifdef FREECIV_DELTA_PROTOCOL
73467 struct packet_ruleset_goods *old;
73468 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOODS;
73469
73470 if (nullptr == *hash) {
73472 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
73473 }
73474
73475 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73476 real_packet->id = old->id;
73477 sz_strlcpy(real_packet->name, old->name);
73478 sz_strlcpy(real_packet->rule_name, old->rule_name);
73479 requirement_vector_copy(&real_packet->reqs, &old->reqs);
73480 real_packet->from_pct = old->from_pct;
73481 real_packet->to_pct = old->to_pct;
73482 real_packet->onetime_pct = old->onetime_pct;
73483 real_packet->select_priority = old->select_priority;
73484 real_packet->replace_priority = old->replace_priority;
73485 real_packet->flags = old->flags;
73486 if (old->helptext) {
73487 strvec_copy(real_packet->helptext, old->helptext);
73488 } else {
73489 strvec_clear(real_packet->helptext);
73490 }
73491 } else {
73492 /* packet is already initialized empty */
73493 log_packet_detailed(" no old info");
73494 }
73495
73496#ifdef FREECIV_JSON_CONNECTION
73497 field_addr.name = "fields";
73498#endif /* FREECIV_JSON_CONNECTION */
73499 DIO_BV_GET(&din, &field_addr, fields);
73500
73501 if (BV_ISSET(fields, 0)) {
73502 log_packet_detailed(" got field 'id'");
73503
73504#ifdef FREECIV_JSON_CONNECTION
73505 field_addr.name = "id";
73506#endif /* FREECIV_JSON_CONNECTION */
73507
73508 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73510 }
73511 }
73512
73513 if (BV_ISSET(fields, 1)) {
73514 log_packet_detailed(" got field 'name'");
73515
73516#ifdef FREECIV_JSON_CONNECTION
73517 field_addr.name = "name";
73518#endif /* FREECIV_JSON_CONNECTION */
73519
73520 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
73522 }
73523 }
73524
73525 if (BV_ISSET(fields, 2)) {
73526 log_packet_detailed(" got field 'rule_name'");
73527
73528#ifdef FREECIV_JSON_CONNECTION
73529 field_addr.name = "rule_name";
73530#endif /* FREECIV_JSON_CONNECTION */
73531
73532 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
73533 RECEIVE_PACKET_FIELD_ERROR(rule_name);
73534 }
73535 }
73536
73537 if (BV_ISSET(fields, 3)) {
73538 log_packet_detailed(" got field 'reqs'");
73539
73540#ifdef FREECIV_JSON_CONNECTION
73541 field_addr.name = "reqs";
73542#endif /* FREECIV_JSON_CONNECTION */
73543
73544 {
73545 int i;
73546
73547 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73549 }
73551
73552#ifdef FREECIV_JSON_CONNECTION
73553 /* Enter array. */
73554 field_addr.sub_location = plocation_elem_new(0);
73555#endif /* FREECIV_JSON_CONNECTION */
73556
73557 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
73558#ifdef FREECIV_JSON_CONNECTION
73559 /* Next array element */
73560 field_addr.sub_location->number = i;
73561#endif /* FREECIV_JSON_CONNECTION */
73562
73563 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
73565 }
73566 }
73567
73568#ifdef FREECIV_JSON_CONNECTION
73569 /* Exit array. */
73570 FC_FREE(field_addr.sub_location);
73571#endif /* FREECIV_JSON_CONNECTION */
73572 }
73573 }
73574
73575 if (BV_ISSET(fields, 4)) {
73576 log_packet_detailed(" got field 'from_pct'");
73577
73578#ifdef FREECIV_JSON_CONNECTION
73579 field_addr.name = "from_pct";
73580#endif /* FREECIV_JSON_CONNECTION */
73581
73582 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
73584 }
73585 }
73586
73587 if (BV_ISSET(fields, 5)) {
73588 log_packet_detailed(" got field 'to_pct'");
73589
73590#ifdef FREECIV_JSON_CONNECTION
73591 field_addr.name = "to_pct";
73592#endif /* FREECIV_JSON_CONNECTION */
73593
73594 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
73596 }
73597 }
73598
73599 if (BV_ISSET(fields, 6)) {
73600 log_packet_detailed(" got field 'onetime_pct'");
73601
73602#ifdef FREECIV_JSON_CONNECTION
73603 field_addr.name = "onetime_pct";
73604#endif /* FREECIV_JSON_CONNECTION */
73605
73606 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
73607 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
73608 }
73609 }
73610
73611 if (BV_ISSET(fields, 7)) {
73612 log_packet_detailed(" got field 'select_priority'");
73613
73614#ifdef FREECIV_JSON_CONNECTION
73615 field_addr.name = "select_priority";
73616#endif /* FREECIV_JSON_CONNECTION */
73617
73618 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
73619 RECEIVE_PACKET_FIELD_ERROR(select_priority);
73620 }
73621 }
73622
73623 if (BV_ISSET(fields, 8)) {
73624 log_packet_detailed(" got field 'replace_priority'");
73625
73626#ifdef FREECIV_JSON_CONNECTION
73627 field_addr.name = "replace_priority";
73628#endif /* FREECIV_JSON_CONNECTION */
73629
73630 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
73631 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
73632 }
73633 }
73634
73635 if (BV_ISSET(fields, 9)) {
73636 log_packet_detailed(" got field 'flags'");
73637
73638#ifdef FREECIV_JSON_CONNECTION
73639 field_addr.name = "flags";
73640#endif /* FREECIV_JSON_CONNECTION */
73641
73642 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
73644 }
73645 }
73646
73647 if (BV_ISSET(fields, 10)) {
73648 log_packet_detailed(" got field 'helptext'");
73649
73650#ifdef FREECIV_JSON_CONNECTION
73651 field_addr.name = "helptext";
73652#endif /* FREECIV_JSON_CONNECTION */
73653
73654 {
73655 int i;
73656
73657 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73659 }
73660 strvec_reserve(real_packet->helptext, i);
73661
73662#ifdef FREECIV_JSON_CONNECTION
73663 /* Enter array. */
73664 field_addr.sub_location = plocation_elem_new(0);
73665#endif /* FREECIV_JSON_CONNECTION */
73666
73667 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
73668#ifdef FREECIV_JSON_CONNECTION
73669 /* Next array element */
73670 field_addr.sub_location->number = i;
73671#endif /* FREECIV_JSON_CONNECTION */
73672
73673 {
73674 char readin[MAX_LEN_PACKET];
73675
73676 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
73677 || !strvec_set(real_packet->helptext, i, readin)) {
73679 }
73680 }
73681 }
73682
73683#ifdef FREECIV_JSON_CONNECTION
73684 /* Exit array. */
73685 FC_FREE(field_addr.sub_location);
73686#endif /* FREECIV_JSON_CONNECTION */
73687 }
73688 }
73689
73690 if (nullptr == old) {
73691 old = fc_malloc(sizeof(*old));
73693 old->id = real_packet->id;
73694 sz_strlcpy(old->name, real_packet->name);
73695 sz_strlcpy(old->rule_name, real_packet->rule_name);
73696 requirement_vector_copy(&old->reqs, &real_packet->reqs);
73697 old->from_pct = real_packet->from_pct;
73698 old->to_pct = real_packet->to_pct;
73699 old->onetime_pct = real_packet->onetime_pct;
73700 old->select_priority = real_packet->select_priority;
73701 old->replace_priority = real_packet->replace_priority;
73702 old->flags = real_packet->flags;
73703 if (real_packet->helptext) {
73704 strvec_copy(old->helptext, real_packet->helptext);
73705 } else {
73706 strvec_clear(old->helptext);
73707 }
73709 } else {
73710 old->id = real_packet->id;
73711 sz_strlcpy(old->name, real_packet->name);
73712 sz_strlcpy(old->rule_name, real_packet->rule_name);
73713 requirement_vector_copy(&old->reqs, &real_packet->reqs);
73714 old->from_pct = real_packet->from_pct;
73715 old->to_pct = real_packet->to_pct;
73716 old->onetime_pct = real_packet->onetime_pct;
73717 old->select_priority = real_packet->select_priority;
73718 old->replace_priority = real_packet->replace_priority;
73719 old->flags = real_packet->flags;
73720 if (real_packet->helptext) {
73721 strvec_copy(old->helptext, real_packet->helptext);
73722 } else {
73723 strvec_clear(old->helptext);
73724 }
73725 }
73726
73727#else /* FREECIV_DELTA_PROTOCOL */
73728#ifdef FREECIV_JSON_CONNECTION
73729 field_addr.name = "id";
73730#endif /* FREECIV_JSON_CONNECTION */
73731
73732 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73734 }
73735
73736#ifdef FREECIV_JSON_CONNECTION
73737 field_addr.name = "name";
73738#endif /* FREECIV_JSON_CONNECTION */
73739
73740 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
73742 }
73743
73744#ifdef FREECIV_JSON_CONNECTION
73745 field_addr.name = "rule_name";
73746#endif /* FREECIV_JSON_CONNECTION */
73747
73748 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
73749 RECEIVE_PACKET_FIELD_ERROR(rule_name);
73750 }
73751
73752#ifdef FREECIV_JSON_CONNECTION
73753 field_addr.name = "reqs";
73754#endif /* FREECIV_JSON_CONNECTION */
73755
73756 {
73757 int i;
73758
73759 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73761 }
73763
73764#ifdef FREECIV_JSON_CONNECTION
73765 /* Enter array. */
73766 field_addr.sub_location = plocation_elem_new(0);
73767#endif /* FREECIV_JSON_CONNECTION */
73768
73769 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
73770#ifdef FREECIV_JSON_CONNECTION
73771 /* Next array element */
73772 field_addr.sub_location->number = i;
73773#endif /* FREECIV_JSON_CONNECTION */
73774
73775 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
73777 }
73778 }
73779
73780#ifdef FREECIV_JSON_CONNECTION
73781 /* Exit array. */
73782 FC_FREE(field_addr.sub_location);
73783#endif /* FREECIV_JSON_CONNECTION */
73784 }
73785
73786#ifdef FREECIV_JSON_CONNECTION
73787 field_addr.name = "from_pct";
73788#endif /* FREECIV_JSON_CONNECTION */
73789
73790 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
73792 }
73793
73794#ifdef FREECIV_JSON_CONNECTION
73795 field_addr.name = "to_pct";
73796#endif /* FREECIV_JSON_CONNECTION */
73797
73798 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
73800 }
73801
73802#ifdef FREECIV_JSON_CONNECTION
73803 field_addr.name = "onetime_pct";
73804#endif /* FREECIV_JSON_CONNECTION */
73805
73806 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
73807 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
73808 }
73809
73810#ifdef FREECIV_JSON_CONNECTION
73811 field_addr.name = "select_priority";
73812#endif /* FREECIV_JSON_CONNECTION */
73813
73814 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
73815 RECEIVE_PACKET_FIELD_ERROR(select_priority);
73816 }
73817
73818#ifdef FREECIV_JSON_CONNECTION
73819 field_addr.name = "replace_priority";
73820#endif /* FREECIV_JSON_CONNECTION */
73821
73822 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
73823 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
73824 }
73825
73826#ifdef FREECIV_JSON_CONNECTION
73827 field_addr.name = "flags";
73828#endif /* FREECIV_JSON_CONNECTION */
73829
73830 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
73832 }
73833
73834#ifdef FREECIV_JSON_CONNECTION
73835 field_addr.name = "helptext";
73836#endif /* FREECIV_JSON_CONNECTION */
73837
73838 {
73839 int i;
73840
73841 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73843 }
73844 strvec_reserve(real_packet->helptext, i);
73845
73846#ifdef FREECIV_JSON_CONNECTION
73847 /* Enter array. */
73848 field_addr.sub_location = plocation_elem_new(0);
73849#endif /* FREECIV_JSON_CONNECTION */
73850
73851 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
73852#ifdef FREECIV_JSON_CONNECTION
73853 /* Next array element */
73854 field_addr.sub_location->number = i;
73855#endif /* FREECIV_JSON_CONNECTION */
73856
73857 {
73858 char readin[MAX_LEN_PACKET];
73859
73860 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
73861 || !strvec_set(real_packet->helptext, i, readin)) {
73863 }
73864 }
73865 }
73866
73867#ifdef FREECIV_JSON_CONNECTION
73868 /* Exit array. */
73869 FC_FREE(field_addr.sub_location);
73870#endif /* FREECIV_JSON_CONNECTION */
73871 }
73872#endif /* FREECIV_DELTA_PROTOCOL */
73873
73875#undef FREE_PACKET_STRUCT
73876}
73877
73878static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
73879{
73880 const struct packet_ruleset_goods *real_packet = packet;
73881 int e;
73883
73884 log_packet_detailed("packet_ruleset_goods_100: sending info about ()");
73885
73886#ifdef FREECIV_DELTA_PROTOCOL
73888 struct packet_ruleset_goods *old;
73889 bool differ;
73890 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOODS;
73891
73892 if (nullptr == *hash) {
73894 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
73895 }
73896 BV_CLR_ALL(fields);
73897
73898 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
73899 old = fc_malloc(sizeof(*old));
73900 /* temporary bitcopy just to insert correctly */
73901 *old = *real_packet;
73904 }
73905
73906 differ = (old->id != real_packet->id);
73907 if (differ) {
73908 BV_SET(fields, 0);
73909 }
73910
73911 differ = (strcmp(old->name, real_packet->name) != 0);
73912 if (differ) {
73913 BV_SET(fields, 1);
73914 }
73915
73916 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
73917 if (differ) {
73918 BV_SET(fields, 2);
73919 }
73920
73922 if (!differ) {
73923 int i;
73924
73925 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
73926 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
73927 if (differ) {
73928 break;
73929 }
73930 }
73931 }
73932 if (differ) {
73933 BV_SET(fields, 3);
73934 }
73935
73936 differ = (old->from_pct != real_packet->from_pct);
73937 if (differ) {
73938 BV_SET(fields, 4);
73939 }
73940
73941 differ = (old->to_pct != real_packet->to_pct);
73942 if (differ) {
73943 BV_SET(fields, 5);
73944 }
73945
73946 differ = (old->onetime_pct != real_packet->onetime_pct);
73947 if (differ) {
73948 BV_SET(fields, 6);
73949 }
73950
73951 differ = (old->select_priority != real_packet->select_priority);
73952 if (differ) {
73953 BV_SET(fields, 7);
73954 }
73955
73956 differ = (old->replace_priority != real_packet->replace_priority);
73957 if (differ) {
73958 BV_SET(fields, 8);
73959 }
73960
73961 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
73962 if (differ) {
73963 BV_SET(fields, 9);
73964 }
73965
73966 if (real_packet->helptext) {
73967 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
73968 } else {
73969 differ = (strvec_size(old->helptext) > 0);
73970 }
73971 if (differ) {
73972 BV_SET(fields, 10);
73973 }
73974#endif /* FREECIV_DELTA_PROTOCOL */
73975
73976#ifdef FREECIV_JSON_CONNECTION
73977 struct plocation field_addr;
73978 {
73979 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
73982 }
73983#endif /* FREECIV_JSON_CONNECTION */
73984
73985#ifdef FREECIV_DELTA_PROTOCOL
73986#ifdef FREECIV_JSON_CONNECTION
73987 field_addr.name = "fields";
73988#endif /* FREECIV_JSON_CONNECTION */
73989 e = 0;
73990 e |= DIO_BV_PUT(&dout, &field_addr, fields);
73991 if (e) {
73992 log_packet_detailed("fields bitvector error detected");
73993 }
73994
73995 if (BV_ISSET(fields, 0)) {
73996 log_packet_detailed(" field 'id' has changed");
73997
73998#ifdef FREECIV_JSON_CONNECTION
73999 field_addr.name = "id";
74000#endif /* FREECIV_JSON_CONNECTION */
74001 e = 0;
74002
74003 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74004
74005 if (e) {
74006 log_packet_detailed("'id' field error detected");
74007 }
74008 }
74009
74010 if (BV_ISSET(fields, 1)) {
74011 log_packet_detailed(" field 'name' has changed");
74012
74013#ifdef FREECIV_JSON_CONNECTION
74014 field_addr.name = "name";
74015#endif /* FREECIV_JSON_CONNECTION */
74016 e = 0;
74017
74018 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74019
74020 if (e) {
74021 log_packet_detailed("'name' field error detected");
74022 }
74023 }
74024
74025 if (BV_ISSET(fields, 2)) {
74026 log_packet_detailed(" field 'rule_name' has changed");
74027
74028#ifdef FREECIV_JSON_CONNECTION
74029 field_addr.name = "rule_name";
74030#endif /* FREECIV_JSON_CONNECTION */
74031 e = 0;
74032
74033 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74034
74035 if (e) {
74036 log_packet_detailed("'rule_name' field error detected");
74037 }
74038 }
74039
74040 if (BV_ISSET(fields, 3)) {
74041 log_packet_detailed(" field 'reqs' has changed");
74042
74043#ifdef FREECIV_JSON_CONNECTION
74044 field_addr.name = "reqs";
74045#endif /* FREECIV_JSON_CONNECTION */
74046 e = 0;
74047
74048 {
74049 int i;
74050
74053
74054#ifdef FREECIV_JSON_CONNECTION
74055 /* Enter array. */
74056 field_addr.sub_location = plocation_elem_new(0);
74057#endif /* FREECIV_JSON_CONNECTION */
74058
74059 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74060#ifdef FREECIV_JSON_CONNECTION
74061 /* Next array element. */
74062 field_addr.sub_location->number = i;
74063#endif /* FREECIV_JSON_CONNECTION */
74064
74065 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74066 }
74067
74068#ifdef FREECIV_JSON_CONNECTION
74069 /* Exit array. */
74070 FC_FREE(field_addr.sub_location);
74071#endif /* FREECIV_JSON_CONNECTION */
74072 }
74073
74074 if (e) {
74075 log_packet_detailed("'reqs' field error detected");
74076 }
74077 }
74078
74079 if (BV_ISSET(fields, 4)) {
74080 log_packet_detailed(" field 'from_pct' has changed");
74081
74082#ifdef FREECIV_JSON_CONNECTION
74083 field_addr.name = "from_pct";
74084#endif /* FREECIV_JSON_CONNECTION */
74085 e = 0;
74086
74087 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74088
74089 if (e) {
74090 log_packet_detailed("'from_pct' field error detected");
74091 }
74092 }
74093
74094 if (BV_ISSET(fields, 5)) {
74095 log_packet_detailed(" field 'to_pct' has changed");
74096
74097#ifdef FREECIV_JSON_CONNECTION
74098 field_addr.name = "to_pct";
74099#endif /* FREECIV_JSON_CONNECTION */
74100 e = 0;
74101
74102 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74103
74104 if (e) {
74105 log_packet_detailed("'to_pct' field error detected");
74106 }
74107 }
74108
74109 if (BV_ISSET(fields, 6)) {
74110 log_packet_detailed(" field 'onetime_pct' has changed");
74111
74112#ifdef FREECIV_JSON_CONNECTION
74113 field_addr.name = "onetime_pct";
74114#endif /* FREECIV_JSON_CONNECTION */
74115 e = 0;
74116
74117 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74118
74119 if (e) {
74120 log_packet_detailed("'onetime_pct' field error detected");
74121 }
74122 }
74123
74124 if (BV_ISSET(fields, 7)) {
74125 log_packet_detailed(" field 'select_priority' has changed");
74126
74127#ifdef FREECIV_JSON_CONNECTION
74128 field_addr.name = "select_priority";
74129#endif /* FREECIV_JSON_CONNECTION */
74130 e = 0;
74131
74132 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74133
74134 if (e) {
74135 log_packet_detailed("'select_priority' field error detected");
74136 }
74137 }
74138
74139 if (BV_ISSET(fields, 8)) {
74140 log_packet_detailed(" field 'replace_priority' has changed");
74141
74142#ifdef FREECIV_JSON_CONNECTION
74143 field_addr.name = "replace_priority";
74144#endif /* FREECIV_JSON_CONNECTION */
74145 e = 0;
74146
74147 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74148
74149 if (e) {
74150 log_packet_detailed("'replace_priority' field error detected");
74151 }
74152 }
74153
74154 if (BV_ISSET(fields, 9)) {
74155 log_packet_detailed(" field 'flags' has changed");
74156
74157#ifdef FREECIV_JSON_CONNECTION
74158 field_addr.name = "flags";
74159#endif /* FREECIV_JSON_CONNECTION */
74160 e = 0;
74161
74162 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74163
74164 if (e) {
74165 log_packet_detailed("'flags' field error detected");
74166 }
74167 }
74168
74169 if (BV_ISSET(fields, 10)) {
74170 log_packet_detailed(" field 'helptext' has changed");
74171
74172#ifdef FREECIV_JSON_CONNECTION
74173 field_addr.name = "helptext";
74174#endif /* FREECIV_JSON_CONNECTION */
74175 e = 0;
74176
74177 if (!real_packet->helptext) {
74178 /* Transmit null as empty */
74179 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74180 } else {
74181 int i;
74182
74184 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74185
74186#ifdef FREECIV_JSON_CONNECTION
74187 /* Enter array. */
74188 field_addr.sub_location = plocation_elem_new(0);
74189#endif /* FREECIV_JSON_CONNECTION */
74190
74191 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74192#ifdef FREECIV_JSON_CONNECTION
74193 /* Next array element. */
74194 field_addr.sub_location->number = i;
74195#endif /* FREECIV_JSON_CONNECTION */
74196
74197 {
74198 const char *pstr = strvec_get(real_packet->helptext, i);
74199
74200 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74201 }
74202 }
74203
74204#ifdef FREECIV_JSON_CONNECTION
74205 /* Exit array. */
74206 FC_FREE(field_addr.sub_location);
74207#endif /* FREECIV_JSON_CONNECTION */
74208 }
74209
74210 if (e) {
74211 log_packet_detailed("'helptext' field error detected");
74212 }
74213 }
74214
74215 old->id = real_packet->id;
74216 sz_strlcpy(old->name, real_packet->name);
74217 sz_strlcpy(old->rule_name, real_packet->rule_name);
74218 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74219 old->from_pct = real_packet->from_pct;
74220 old->to_pct = real_packet->to_pct;
74221 old->onetime_pct = real_packet->onetime_pct;
74222 old->select_priority = real_packet->select_priority;
74223 old->replace_priority = real_packet->replace_priority;
74224 old->flags = real_packet->flags;
74225 if (real_packet->helptext) {
74226 strvec_copy(old->helptext, real_packet->helptext);
74227 } else {
74228 strvec_clear(old->helptext);
74229 }
74230
74231#else /* FREECIV_DELTA_PROTOCOL */
74232#ifdef FREECIV_JSON_CONNECTION
74233 field_addr.name = "id";
74234#endif /* FREECIV_JSON_CONNECTION */
74235 e = 0;
74236
74237 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74238
74239 if (e) {
74240 log_packet_detailed("'id' field error detected");
74241 }
74242
74243#ifdef FREECIV_JSON_CONNECTION
74244 field_addr.name = "name";
74245#endif /* FREECIV_JSON_CONNECTION */
74246 e = 0;
74247
74248 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74249
74250 if (e) {
74251 log_packet_detailed("'name' field error detected");
74252 }
74253
74254#ifdef FREECIV_JSON_CONNECTION
74255 field_addr.name = "rule_name";
74256#endif /* FREECIV_JSON_CONNECTION */
74257 e = 0;
74258
74259 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74260
74261 if (e) {
74262 log_packet_detailed("'rule_name' field error detected");
74263 }
74264
74265#ifdef FREECIV_JSON_CONNECTION
74266 field_addr.name = "reqs";
74267#endif /* FREECIV_JSON_CONNECTION */
74268 e = 0;
74269
74270 {
74271 int i;
74272
74275
74276#ifdef FREECIV_JSON_CONNECTION
74277 /* Enter array. */
74278 field_addr.sub_location = plocation_elem_new(0);
74279#endif /* FREECIV_JSON_CONNECTION */
74280
74281 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74282#ifdef FREECIV_JSON_CONNECTION
74283 /* Next array element. */
74284 field_addr.sub_location->number = i;
74285#endif /* FREECIV_JSON_CONNECTION */
74286
74287 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74288 }
74289
74290#ifdef FREECIV_JSON_CONNECTION
74291 /* Exit array. */
74292 FC_FREE(field_addr.sub_location);
74293#endif /* FREECIV_JSON_CONNECTION */
74294 }
74295
74296 if (e) {
74297 log_packet_detailed("'reqs' field error detected");
74298 }
74299
74300#ifdef FREECIV_JSON_CONNECTION
74301 field_addr.name = "from_pct";
74302#endif /* FREECIV_JSON_CONNECTION */
74303 e = 0;
74304
74305 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74306
74307 if (e) {
74308 log_packet_detailed("'from_pct' field error detected");
74309 }
74310
74311#ifdef FREECIV_JSON_CONNECTION
74312 field_addr.name = "to_pct";
74313#endif /* FREECIV_JSON_CONNECTION */
74314 e = 0;
74315
74316 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74317
74318 if (e) {
74319 log_packet_detailed("'to_pct' field error detected");
74320 }
74321
74322#ifdef FREECIV_JSON_CONNECTION
74323 field_addr.name = "onetime_pct";
74324#endif /* FREECIV_JSON_CONNECTION */
74325 e = 0;
74326
74327 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74328
74329 if (e) {
74330 log_packet_detailed("'onetime_pct' field error detected");
74331 }
74332
74333#ifdef FREECIV_JSON_CONNECTION
74334 field_addr.name = "select_priority";
74335#endif /* FREECIV_JSON_CONNECTION */
74336 e = 0;
74337
74338 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74339
74340 if (e) {
74341 log_packet_detailed("'select_priority' field error detected");
74342 }
74343
74344#ifdef FREECIV_JSON_CONNECTION
74345 field_addr.name = "replace_priority";
74346#endif /* FREECIV_JSON_CONNECTION */
74347 e = 0;
74348
74349 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74350
74351 if (e) {
74352 log_packet_detailed("'replace_priority' field error detected");
74353 }
74354
74355#ifdef FREECIV_JSON_CONNECTION
74356 field_addr.name = "flags";
74357#endif /* FREECIV_JSON_CONNECTION */
74358 e = 0;
74359
74360 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74361
74362 if (e) {
74363 log_packet_detailed("'flags' field error detected");
74364 }
74365
74366#ifdef FREECIV_JSON_CONNECTION
74367 field_addr.name = "helptext";
74368#endif /* FREECIV_JSON_CONNECTION */
74369 e = 0;
74370
74371 if (!real_packet->helptext) {
74372 /* Transmit null as empty */
74373 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74374 } else {
74375 int i;
74376
74378 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74379
74380#ifdef FREECIV_JSON_CONNECTION
74381 /* Enter array. */
74382 field_addr.sub_location = plocation_elem_new(0);
74383#endif /* FREECIV_JSON_CONNECTION */
74384
74385 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74386#ifdef FREECIV_JSON_CONNECTION
74387 /* Next array element. */
74388 field_addr.sub_location->number = i;
74389#endif /* FREECIV_JSON_CONNECTION */
74390
74391 {
74392 const char *pstr = strvec_get(real_packet->helptext, i);
74393
74394 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74395 }
74396 }
74397
74398#ifdef FREECIV_JSON_CONNECTION
74399 /* Exit array. */
74400 FC_FREE(field_addr.sub_location);
74401#endif /* FREECIV_JSON_CONNECTION */
74402 }
74403
74404 if (e) {
74405 log_packet_detailed("'helptext' field error detected");
74406 }
74407#endif /* FREECIV_DELTA_PROTOCOL */
74408
74410}
74411
74413{
74414 if (!pc->used) {
74415 log_error("WARNING: trying to send data to the closed connection %s",
74417 return -1;
74418 }
74419 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOODS].packet != nullptr, -1,
74420 "Handler for PACKET_RULESET_GOODS not installed");
74421 return pc->phs.handlers->send[PACKET_RULESET_GOODS].packet(pc, packet);
74422}
74423
74424void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
74425{
74426 conn_list_iterate(dest, pconn) {
74429}
74430
74432{
74433 memset(packet, 0, sizeof(*packet));
74434
74435 requirement_vector_init(&packet->reqs);
74436}
74437
74439{
74440 requirement_vector_free(&packet->reqs);
74441}
74442
74443static inline void destroy_packet_ruleset_disaster(void *packet)
74444{
74446 free(packet);
74447}
74448
74449#ifdef FREECIV_DELTA_PROTOCOL
74450#define hash_packet_ruleset_disaster_100 hash_const
74451#define cmp_packet_ruleset_disaster_100 cmp_const
74453#endif /* FREECIV_DELTA_PROTOCOL */
74454
74456{
74457#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_disaster(_packet)
74459
74460#ifdef FREECIV_JSON_CONNECTION
74461 struct plocation field_addr;
74462 {
74463 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74466 }
74467#endif /* FREECIV_JSON_CONNECTION */
74468
74469 log_packet_detailed("packet_ruleset_disaster_100: got info about ()");
74470
74471#ifdef FREECIV_DELTA_PROTOCOL
74474 struct genhash **hash = pc->phs.received + PACKET_RULESET_DISASTER;
74475
74476 if (nullptr == *hash) {
74478 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
74479 }
74480
74481 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74482 real_packet->id = old->id;
74483 sz_strlcpy(real_packet->name, old->name);
74484 sz_strlcpy(real_packet->rule_name, old->rule_name);
74485 requirement_vector_copy(&real_packet->reqs, &old->reqs);
74486 real_packet->frequency = old->frequency;
74487 real_packet->effects = old->effects;
74488 } else {
74489 /* packet is already initialized empty */
74490 log_packet_detailed(" no old info");
74491 }
74492
74493#ifdef FREECIV_JSON_CONNECTION
74494 field_addr.name = "fields";
74495#endif /* FREECIV_JSON_CONNECTION */
74496 DIO_BV_GET(&din, &field_addr, fields);
74497
74498 if (BV_ISSET(fields, 0)) {
74499 log_packet_detailed(" got field 'id'");
74500
74501#ifdef FREECIV_JSON_CONNECTION
74502 field_addr.name = "id";
74503#endif /* FREECIV_JSON_CONNECTION */
74504
74505 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74507 }
74508 }
74509
74510 if (BV_ISSET(fields, 1)) {
74511 log_packet_detailed(" got field 'name'");
74512
74513#ifdef FREECIV_JSON_CONNECTION
74514 field_addr.name = "name";
74515#endif /* FREECIV_JSON_CONNECTION */
74516
74517 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74519 }
74520 }
74521
74522 if (BV_ISSET(fields, 2)) {
74523 log_packet_detailed(" got field 'rule_name'");
74524
74525#ifdef FREECIV_JSON_CONNECTION
74526 field_addr.name = "rule_name";
74527#endif /* FREECIV_JSON_CONNECTION */
74528
74529 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74530 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74531 }
74532 }
74533
74534 if (BV_ISSET(fields, 3)) {
74535 log_packet_detailed(" got field 'reqs'");
74536
74537#ifdef FREECIV_JSON_CONNECTION
74538 field_addr.name = "reqs";
74539#endif /* FREECIV_JSON_CONNECTION */
74540
74541 {
74542 int i;
74543
74544 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74546 }
74548
74549#ifdef FREECIV_JSON_CONNECTION
74550 /* Enter array. */
74551 field_addr.sub_location = plocation_elem_new(0);
74552#endif /* FREECIV_JSON_CONNECTION */
74553
74554 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74555#ifdef FREECIV_JSON_CONNECTION
74556 /* Next array element */
74557 field_addr.sub_location->number = i;
74558#endif /* FREECIV_JSON_CONNECTION */
74559
74560 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74562 }
74563 }
74564
74565#ifdef FREECIV_JSON_CONNECTION
74566 /* Exit array. */
74567 FC_FREE(field_addr.sub_location);
74568#endif /* FREECIV_JSON_CONNECTION */
74569 }
74570 }
74571
74572 if (BV_ISSET(fields, 4)) {
74573 log_packet_detailed(" got field 'frequency'");
74574
74575#ifdef FREECIV_JSON_CONNECTION
74576 field_addr.name = "frequency";
74577#endif /* FREECIV_JSON_CONNECTION */
74578
74579 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
74580 RECEIVE_PACKET_FIELD_ERROR(frequency);
74581 }
74582 }
74583
74584 if (BV_ISSET(fields, 5)) {
74585 log_packet_detailed(" got field 'effects'");
74586
74587#ifdef FREECIV_JSON_CONNECTION
74588 field_addr.name = "effects";
74589#endif /* FREECIV_JSON_CONNECTION */
74590
74591 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
74593 }
74594 }
74595
74596 if (nullptr == old) {
74597 old = fc_malloc(sizeof(*old));
74599 old->id = real_packet->id;
74600 sz_strlcpy(old->name, real_packet->name);
74601 sz_strlcpy(old->rule_name, real_packet->rule_name);
74602 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74603 old->frequency = real_packet->frequency;
74604 old->effects = real_packet->effects;
74606 } else {
74607 old->id = real_packet->id;
74608 sz_strlcpy(old->name, real_packet->name);
74609 sz_strlcpy(old->rule_name, real_packet->rule_name);
74610 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74611 old->frequency = real_packet->frequency;
74612 old->effects = real_packet->effects;
74613 }
74614
74615#else /* FREECIV_DELTA_PROTOCOL */
74616#ifdef FREECIV_JSON_CONNECTION
74617 field_addr.name = "id";
74618#endif /* FREECIV_JSON_CONNECTION */
74619
74620 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74622 }
74623
74624#ifdef FREECIV_JSON_CONNECTION
74625 field_addr.name = "name";
74626#endif /* FREECIV_JSON_CONNECTION */
74627
74628 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74630 }
74631
74632#ifdef FREECIV_JSON_CONNECTION
74633 field_addr.name = "rule_name";
74634#endif /* FREECIV_JSON_CONNECTION */
74635
74636 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74637 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74638 }
74639
74640#ifdef FREECIV_JSON_CONNECTION
74641 field_addr.name = "reqs";
74642#endif /* FREECIV_JSON_CONNECTION */
74643
74644 {
74645 int i;
74646
74647 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74649 }
74651
74652#ifdef FREECIV_JSON_CONNECTION
74653 /* Enter array. */
74654 field_addr.sub_location = plocation_elem_new(0);
74655#endif /* FREECIV_JSON_CONNECTION */
74656
74657 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74658#ifdef FREECIV_JSON_CONNECTION
74659 /* Next array element */
74660 field_addr.sub_location->number = i;
74661#endif /* FREECIV_JSON_CONNECTION */
74662
74663 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74665 }
74666 }
74667
74668#ifdef FREECIV_JSON_CONNECTION
74669 /* Exit array. */
74670 FC_FREE(field_addr.sub_location);
74671#endif /* FREECIV_JSON_CONNECTION */
74672 }
74673
74674#ifdef FREECIV_JSON_CONNECTION
74675 field_addr.name = "frequency";
74676#endif /* FREECIV_JSON_CONNECTION */
74677
74678 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
74679 RECEIVE_PACKET_FIELD_ERROR(frequency);
74680 }
74681
74682#ifdef FREECIV_JSON_CONNECTION
74683 field_addr.name = "effects";
74684#endif /* FREECIV_JSON_CONNECTION */
74685
74686 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
74688 }
74689#endif /* FREECIV_DELTA_PROTOCOL */
74690
74692#undef FREE_PACKET_STRUCT
74693}
74694
74696{
74697 const struct packet_ruleset_disaster *real_packet = packet;
74698 int e;
74700
74701 log_packet_detailed("packet_ruleset_disaster_100: sending info about ()");
74702
74703#ifdef FREECIV_DELTA_PROTOCOL
74706 bool differ;
74707 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DISASTER;
74708
74709 if (nullptr == *hash) {
74711 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
74712 }
74713 BV_CLR_ALL(fields);
74714
74715 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74716 old = fc_malloc(sizeof(*old));
74717 /* temporary bitcopy just to insert correctly */
74718 *old = *real_packet;
74721 }
74722
74723 differ = (old->id != real_packet->id);
74724 if (differ) {
74725 BV_SET(fields, 0);
74726 }
74727
74728 differ = (strcmp(old->name, real_packet->name) != 0);
74729 if (differ) {
74730 BV_SET(fields, 1);
74731 }
74732
74733 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
74734 if (differ) {
74735 BV_SET(fields, 2);
74736 }
74737
74739 if (!differ) {
74740 int i;
74741
74742 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
74743 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
74744 if (differ) {
74745 break;
74746 }
74747 }
74748 }
74749 if (differ) {
74750 BV_SET(fields, 3);
74751 }
74752
74753 differ = (old->frequency != real_packet->frequency);
74754 if (differ) {
74755 BV_SET(fields, 4);
74756 }
74757
74758 differ = !BV_ARE_EQUAL(old->effects, real_packet->effects);
74759 if (differ) {
74760 BV_SET(fields, 5);
74761 }
74762#endif /* FREECIV_DELTA_PROTOCOL */
74763
74764#ifdef FREECIV_JSON_CONNECTION
74765 struct plocation field_addr;
74766 {
74767 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74770 }
74771#endif /* FREECIV_JSON_CONNECTION */
74772
74773#ifdef FREECIV_DELTA_PROTOCOL
74774#ifdef FREECIV_JSON_CONNECTION
74775 field_addr.name = "fields";
74776#endif /* FREECIV_JSON_CONNECTION */
74777 e = 0;
74778 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74779 if (e) {
74780 log_packet_detailed("fields bitvector error detected");
74781 }
74782
74783 if (BV_ISSET(fields, 0)) {
74784 log_packet_detailed(" field 'id' has changed");
74785
74786#ifdef FREECIV_JSON_CONNECTION
74787 field_addr.name = "id";
74788#endif /* FREECIV_JSON_CONNECTION */
74789 e = 0;
74790
74791 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74792
74793 if (e) {
74794 log_packet_detailed("'id' field error detected");
74795 }
74796 }
74797
74798 if (BV_ISSET(fields, 1)) {
74799 log_packet_detailed(" field 'name' has changed");
74800
74801#ifdef FREECIV_JSON_CONNECTION
74802 field_addr.name = "name";
74803#endif /* FREECIV_JSON_CONNECTION */
74804 e = 0;
74805
74806 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74807
74808 if (e) {
74809 log_packet_detailed("'name' field error detected");
74810 }
74811 }
74812
74813 if (BV_ISSET(fields, 2)) {
74814 log_packet_detailed(" field 'rule_name' has changed");
74815
74816#ifdef FREECIV_JSON_CONNECTION
74817 field_addr.name = "rule_name";
74818#endif /* FREECIV_JSON_CONNECTION */
74819 e = 0;
74820
74821 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74822
74823 if (e) {
74824 log_packet_detailed("'rule_name' field error detected");
74825 }
74826 }
74827
74828 if (BV_ISSET(fields, 3)) {
74829 log_packet_detailed(" field 'reqs' has changed");
74830
74831#ifdef FREECIV_JSON_CONNECTION
74832 field_addr.name = "reqs";
74833#endif /* FREECIV_JSON_CONNECTION */
74834 e = 0;
74835
74836 {
74837 int i;
74838
74841
74842#ifdef FREECIV_JSON_CONNECTION
74843 /* Enter array. */
74844 field_addr.sub_location = plocation_elem_new(0);
74845#endif /* FREECIV_JSON_CONNECTION */
74846
74847 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74848#ifdef FREECIV_JSON_CONNECTION
74849 /* Next array element. */
74850 field_addr.sub_location->number = i;
74851#endif /* FREECIV_JSON_CONNECTION */
74852
74853 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74854 }
74855
74856#ifdef FREECIV_JSON_CONNECTION
74857 /* Exit array. */
74858 FC_FREE(field_addr.sub_location);
74859#endif /* FREECIV_JSON_CONNECTION */
74860 }
74861
74862 if (e) {
74863 log_packet_detailed("'reqs' field error detected");
74864 }
74865 }
74866
74867 if (BV_ISSET(fields, 4)) {
74868 log_packet_detailed(" field 'frequency' has changed");
74869
74870#ifdef FREECIV_JSON_CONNECTION
74871 field_addr.name = "frequency";
74872#endif /* FREECIV_JSON_CONNECTION */
74873 e = 0;
74874
74875 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
74876
74877 if (e) {
74878 log_packet_detailed("'frequency' field error detected");
74879 }
74880 }
74881
74882 if (BV_ISSET(fields, 5)) {
74883 log_packet_detailed(" field 'effects' has changed");
74884
74885#ifdef FREECIV_JSON_CONNECTION
74886 field_addr.name = "effects";
74887#endif /* FREECIV_JSON_CONNECTION */
74888 e = 0;
74889
74890 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
74891
74892 if (e) {
74893 log_packet_detailed("'effects' field error detected");
74894 }
74895 }
74896
74897 old->id = real_packet->id;
74898 sz_strlcpy(old->name, real_packet->name);
74899 sz_strlcpy(old->rule_name, real_packet->rule_name);
74900 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74901 old->frequency = real_packet->frequency;
74902 old->effects = real_packet->effects;
74903
74904#else /* FREECIV_DELTA_PROTOCOL */
74905#ifdef FREECIV_JSON_CONNECTION
74906 field_addr.name = "id";
74907#endif /* FREECIV_JSON_CONNECTION */
74908 e = 0;
74909
74910 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74911
74912 if (e) {
74913 log_packet_detailed("'id' field error detected");
74914 }
74915
74916#ifdef FREECIV_JSON_CONNECTION
74917 field_addr.name = "name";
74918#endif /* FREECIV_JSON_CONNECTION */
74919 e = 0;
74920
74921 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74922
74923 if (e) {
74924 log_packet_detailed("'name' field error detected");
74925 }
74926
74927#ifdef FREECIV_JSON_CONNECTION
74928 field_addr.name = "rule_name";
74929#endif /* FREECIV_JSON_CONNECTION */
74930 e = 0;
74931
74932 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74933
74934 if (e) {
74935 log_packet_detailed("'rule_name' field error detected");
74936 }
74937
74938#ifdef FREECIV_JSON_CONNECTION
74939 field_addr.name = "reqs";
74940#endif /* FREECIV_JSON_CONNECTION */
74941 e = 0;
74942
74943 {
74944 int i;
74945
74948
74949#ifdef FREECIV_JSON_CONNECTION
74950 /* Enter array. */
74951 field_addr.sub_location = plocation_elem_new(0);
74952#endif /* FREECIV_JSON_CONNECTION */
74953
74954 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74955#ifdef FREECIV_JSON_CONNECTION
74956 /* Next array element. */
74957 field_addr.sub_location->number = i;
74958#endif /* FREECIV_JSON_CONNECTION */
74959
74960 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74961 }
74962
74963#ifdef FREECIV_JSON_CONNECTION
74964 /* Exit array. */
74965 FC_FREE(field_addr.sub_location);
74966#endif /* FREECIV_JSON_CONNECTION */
74967 }
74968
74969 if (e) {
74970 log_packet_detailed("'reqs' field error detected");
74971 }
74972
74973#ifdef FREECIV_JSON_CONNECTION
74974 field_addr.name = "frequency";
74975#endif /* FREECIV_JSON_CONNECTION */
74976 e = 0;
74977
74978 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
74979
74980 if (e) {
74981 log_packet_detailed("'frequency' field error detected");
74982 }
74983
74984#ifdef FREECIV_JSON_CONNECTION
74985 field_addr.name = "effects";
74986#endif /* FREECIV_JSON_CONNECTION */
74987 e = 0;
74988
74989 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
74990
74991 if (e) {
74992 log_packet_detailed("'effects' field error detected");
74993 }
74994#endif /* FREECIV_DELTA_PROTOCOL */
74995
74997}
74998
75000{
75001 if (!pc->used) {
75002 log_error("WARNING: trying to send data to the closed connection %s",
75004 return -1;
75005 }
75006 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet != nullptr, -1,
75007 "Handler for PACKET_RULESET_DISASTER not installed");
75008 return pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet(pc, packet);
75009}
75010
75012{
75013 conn_list_iterate(dest, pconn) {
75016}
75017
75019{
75020 memset(packet, 0, sizeof(*packet));
75021}
75022
75023#define free_packet_ruleset_achievement(_packet) (void) 0
75024#define destroy_packet_ruleset_achievement free
75025
75026#ifdef FREECIV_DELTA_PROTOCOL
75027#define hash_packet_ruleset_achievement_100 hash_const
75028#define cmp_packet_ruleset_achievement_100 cmp_const
75030#endif /* FREECIV_DELTA_PROTOCOL */
75031
75033{
75034#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_achievement(_packet)
75036
75037#ifdef FREECIV_JSON_CONNECTION
75038 struct plocation field_addr;
75039 {
75040 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75043 }
75044#endif /* FREECIV_JSON_CONNECTION */
75045
75046 log_packet_detailed("packet_ruleset_achievement_100: got info about ()");
75047
75048#ifdef FREECIV_DELTA_PROTOCOL
75051 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACHIEVEMENT;
75052
75053 if (nullptr == *hash) {
75055 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75056 }
75057
75058 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75059 *real_packet = *old;
75060 } else {
75061 /* packet is already initialized empty */
75062 log_packet_detailed(" no old info");
75063 }
75064
75065#ifdef FREECIV_JSON_CONNECTION
75066 field_addr.name = "fields";
75067#endif /* FREECIV_JSON_CONNECTION */
75068 DIO_BV_GET(&din, &field_addr, fields);
75069
75070 if (BV_ISSET(fields, 0)) {
75071 log_packet_detailed(" got field 'id'");
75072
75073#ifdef FREECIV_JSON_CONNECTION
75074 field_addr.name = "id";
75075#endif /* FREECIV_JSON_CONNECTION */
75076
75077 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75079 }
75080 }
75081
75082 if (BV_ISSET(fields, 1)) {
75083 log_packet_detailed(" got field 'name'");
75084
75085#ifdef FREECIV_JSON_CONNECTION
75086 field_addr.name = "name";
75087#endif /* FREECIV_JSON_CONNECTION */
75088
75089 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75091 }
75092 }
75093
75094 if (BV_ISSET(fields, 2)) {
75095 log_packet_detailed(" got field 'rule_name'");
75096
75097#ifdef FREECIV_JSON_CONNECTION
75098 field_addr.name = "rule_name";
75099#endif /* FREECIV_JSON_CONNECTION */
75100
75101 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75102 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75103 }
75104 }
75105
75106 if (BV_ISSET(fields, 3)) {
75107 log_packet_detailed(" got field 'type'");
75108
75109#ifdef FREECIV_JSON_CONNECTION
75110 field_addr.name = "type";
75111#endif /* FREECIV_JSON_CONNECTION */
75112
75113 {
75114 int readin;
75115
75116 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75118 }
75119 real_packet->type = readin;
75120 }
75121 }
75122
75123 real_packet->unique = BV_ISSET(fields, 4);
75124
75125 if (BV_ISSET(fields, 5)) {
75126 log_packet_detailed(" got field 'value'");
75127
75128#ifdef FREECIV_JSON_CONNECTION
75129 field_addr.name = "value";
75130#endif /* FREECIV_JSON_CONNECTION */
75131
75132 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75134 }
75135 }
75136
75137 if (nullptr == old) {
75138 old = fc_malloc(sizeof(*old));
75140 *old = *real_packet;
75142 } else {
75143 *old = *real_packet;
75144 }
75145
75146#else /* FREECIV_DELTA_PROTOCOL */
75147#ifdef FREECIV_JSON_CONNECTION
75148 field_addr.name = "id";
75149#endif /* FREECIV_JSON_CONNECTION */
75150
75151 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75153 }
75154
75155#ifdef FREECIV_JSON_CONNECTION
75156 field_addr.name = "name";
75157#endif /* FREECIV_JSON_CONNECTION */
75158
75159 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75161 }
75162
75163#ifdef FREECIV_JSON_CONNECTION
75164 field_addr.name = "rule_name";
75165#endif /* FREECIV_JSON_CONNECTION */
75166
75167 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75168 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75169 }
75170
75171#ifdef FREECIV_JSON_CONNECTION
75172 field_addr.name = "type";
75173#endif /* FREECIV_JSON_CONNECTION */
75174
75175 {
75176 int readin;
75177
75178 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75180 }
75181 real_packet->type = readin;
75182 }
75183
75184#ifdef FREECIV_JSON_CONNECTION
75185 field_addr.name = "unique";
75186#endif /* FREECIV_JSON_CONNECTION */
75187
75188 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unique)) {
75190 }
75191
75192#ifdef FREECIV_JSON_CONNECTION
75193 field_addr.name = "value";
75194#endif /* FREECIV_JSON_CONNECTION */
75195
75196 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75198 }
75199#endif /* FREECIV_DELTA_PROTOCOL */
75200
75202#undef FREE_PACKET_STRUCT
75203}
75204
75206{
75207 const struct packet_ruleset_achievement *real_packet = packet;
75208 int e;
75210
75211 log_packet_detailed("packet_ruleset_achievement_100: sending info about ()");
75212
75213#ifdef FREECIV_DELTA_PROTOCOL
75216 bool differ;
75217 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACHIEVEMENT;
75218
75219 if (nullptr == *hash) {
75221 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75222 }
75223 BV_CLR_ALL(fields);
75224
75225 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75226 old = fc_malloc(sizeof(*old));
75227 /* temporary bitcopy just to insert correctly */
75228 *old = *real_packet;
75231 }
75232
75233 differ = (old->id != real_packet->id);
75234 if (differ) {
75235 BV_SET(fields, 0);
75236 }
75237
75238 differ = (strcmp(old->name, real_packet->name) != 0);
75239 if (differ) {
75240 BV_SET(fields, 1);
75241 }
75242
75243 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
75244 if (differ) {
75245 BV_SET(fields, 2);
75246 }
75247
75248 differ = (old->type != real_packet->type);
75249 if (differ) {
75250 BV_SET(fields, 3);
75251 }
75252
75253 /* folded into head */
75254 if (real_packet->unique) {
75255 BV_SET(fields, 4);
75256 }
75257
75258 differ = (old->value != real_packet->value);
75259 if (differ) {
75260 BV_SET(fields, 5);
75261 }
75262#endif /* FREECIV_DELTA_PROTOCOL */
75263
75264#ifdef FREECIV_JSON_CONNECTION
75265 struct plocation field_addr;
75266 {
75267 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75270 }
75271#endif /* FREECIV_JSON_CONNECTION */
75272
75273#ifdef FREECIV_DELTA_PROTOCOL
75274#ifdef FREECIV_JSON_CONNECTION
75275 field_addr.name = "fields";
75276#endif /* FREECIV_JSON_CONNECTION */
75277 e = 0;
75278 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75279 if (e) {
75280 log_packet_detailed("fields bitvector error detected");
75281 }
75282
75283 if (BV_ISSET(fields, 0)) {
75284 log_packet_detailed(" field 'id' has changed");
75285
75286#ifdef FREECIV_JSON_CONNECTION
75287 field_addr.name = "id";
75288#endif /* FREECIV_JSON_CONNECTION */
75289 e = 0;
75290
75291 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75292
75293 if (e) {
75294 log_packet_detailed("'id' field error detected");
75295 }
75296 }
75297
75298 if (BV_ISSET(fields, 1)) {
75299 log_packet_detailed(" field 'name' has changed");
75300
75301#ifdef FREECIV_JSON_CONNECTION
75302 field_addr.name = "name";
75303#endif /* FREECIV_JSON_CONNECTION */
75304 e = 0;
75305
75306 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75307
75308 if (e) {
75309 log_packet_detailed("'name' field error detected");
75310 }
75311 }
75312
75313 if (BV_ISSET(fields, 2)) {
75314 log_packet_detailed(" field 'rule_name' has changed");
75315
75316#ifdef FREECIV_JSON_CONNECTION
75317 field_addr.name = "rule_name";
75318#endif /* FREECIV_JSON_CONNECTION */
75319 e = 0;
75320
75321 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75322
75323 if (e) {
75324 log_packet_detailed("'rule_name' field error detected");
75325 }
75326 }
75327
75328 if (BV_ISSET(fields, 3)) {
75329 log_packet_detailed(" field 'type' has changed");
75330
75331#ifdef FREECIV_JSON_CONNECTION
75332 field_addr.name = "type";
75333#endif /* FREECIV_JSON_CONNECTION */
75334 e = 0;
75335
75336 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75337
75338 if (e) {
75339 log_packet_detailed("'type' field error detected");
75340 }
75341 }
75342
75343 /* field 4 is folded into the header */
75344
75345 if (BV_ISSET(fields, 5)) {
75346 log_packet_detailed(" field 'value' has changed");
75347
75348#ifdef FREECIV_JSON_CONNECTION
75349 field_addr.name = "value";
75350#endif /* FREECIV_JSON_CONNECTION */
75351 e = 0;
75352
75353 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75354
75355 if (e) {
75356 log_packet_detailed("'value' field error detected");
75357 }
75358 }
75359
75360 *old = *real_packet;
75361
75362#else /* FREECIV_DELTA_PROTOCOL */
75363#ifdef FREECIV_JSON_CONNECTION
75364 field_addr.name = "id";
75365#endif /* FREECIV_JSON_CONNECTION */
75366 e = 0;
75367
75368 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75369
75370 if (e) {
75371 log_packet_detailed("'id' field error detected");
75372 }
75373
75374#ifdef FREECIV_JSON_CONNECTION
75375 field_addr.name = "name";
75376#endif /* FREECIV_JSON_CONNECTION */
75377 e = 0;
75378
75379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75380
75381 if (e) {
75382 log_packet_detailed("'name' field error detected");
75383 }
75384
75385#ifdef FREECIV_JSON_CONNECTION
75386 field_addr.name = "rule_name";
75387#endif /* FREECIV_JSON_CONNECTION */
75388 e = 0;
75389
75390 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75391
75392 if (e) {
75393 log_packet_detailed("'rule_name' field error detected");
75394 }
75395
75396#ifdef FREECIV_JSON_CONNECTION
75397 field_addr.name = "type";
75398#endif /* FREECIV_JSON_CONNECTION */
75399 e = 0;
75400
75401 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75402
75403 if (e) {
75404 log_packet_detailed("'type' field error detected");
75405 }
75406
75407#ifdef FREECIV_JSON_CONNECTION
75408 field_addr.name = "unique";
75409#endif /* FREECIV_JSON_CONNECTION */
75410 e = 0;
75411
75412 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unique);
75413
75414 if (e) {
75415 log_packet_detailed("'unique' field error detected");
75416 }
75417
75418#ifdef FREECIV_JSON_CONNECTION
75419 field_addr.name = "value";
75420#endif /* FREECIV_JSON_CONNECTION */
75421 e = 0;
75422
75423 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75424
75425 if (e) {
75426 log_packet_detailed("'value' field error detected");
75427 }
75428#endif /* FREECIV_DELTA_PROTOCOL */
75429
75431}
75432
75434{
75435 if (!pc->used) {
75436 log_error("WARNING: trying to send data to the closed connection %s",
75438 return -1;
75439 }
75440 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet != nullptr, -1,
75441 "Handler for PACKET_RULESET_ACHIEVEMENT not installed");
75442 return pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet(pc, packet);
75443}
75444
75446{
75447 conn_list_iterate(dest, pconn) {
75450}
75451
75452static inline void init_packet_ruleset_trade(struct packet_ruleset_trade *packet)
75453{
75454 memset(packet, 0, sizeof(*packet));
75455}
75456
75457#define free_packet_ruleset_trade(_packet) (void) 0
75458#define destroy_packet_ruleset_trade free
75459
75460#ifdef FREECIV_DELTA_PROTOCOL
75461#define hash_packet_ruleset_trade_100 hash_const
75462#define cmp_packet_ruleset_trade_100 cmp_const
75464#endif /* FREECIV_DELTA_PROTOCOL */
75465
75467{
75468#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_trade(_packet)
75470
75471#ifdef FREECIV_JSON_CONNECTION
75472 struct plocation field_addr;
75473 {
75474 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75477 }
75478#endif /* FREECIV_JSON_CONNECTION */
75479
75480 log_packet_detailed("packet_ruleset_trade_100: got info about ()");
75481
75482#ifdef FREECIV_DELTA_PROTOCOL
75484 struct packet_ruleset_trade *old;
75485 struct genhash **hash = pc->phs.received + PACKET_RULESET_TRADE;
75486
75487 if (nullptr == *hash) {
75489 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
75490 }
75491
75492 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75493 *real_packet = *old;
75494 } else {
75495 /* packet is already initialized empty */
75496 log_packet_detailed(" no old info");
75497 }
75498
75499#ifdef FREECIV_JSON_CONNECTION
75500 field_addr.name = "fields";
75501#endif /* FREECIV_JSON_CONNECTION */
75502 DIO_BV_GET(&din, &field_addr, fields);
75503
75504 if (BV_ISSET(fields, 0)) {
75505 log_packet_detailed(" got field 'id'");
75506
75507#ifdef FREECIV_JSON_CONNECTION
75508 field_addr.name = "id";
75509#endif /* FREECIV_JSON_CONNECTION */
75510
75511 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75513 }
75514 }
75515
75516 if (BV_ISSET(fields, 1)) {
75517 log_packet_detailed(" got field 'trade_pct'");
75518
75519#ifdef FREECIV_JSON_CONNECTION
75520 field_addr.name = "trade_pct";
75521#endif /* FREECIV_JSON_CONNECTION */
75522
75523 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
75524 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
75525 }
75526 }
75527
75528 if (BV_ISSET(fields, 2)) {
75529 log_packet_detailed(" got field 'cancelling'");
75530
75531#ifdef FREECIV_JSON_CONNECTION
75532 field_addr.name = "cancelling";
75533#endif /* FREECIV_JSON_CONNECTION */
75534
75535 {
75536 int readin;
75537
75538 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75539 RECEIVE_PACKET_FIELD_ERROR(cancelling);
75540 }
75541 real_packet->cancelling = readin;
75542 }
75543 }
75544
75545 if (BV_ISSET(fields, 3)) {
75546 log_packet_detailed(" got field 'bonus_type'");
75547
75548#ifdef FREECIV_JSON_CONNECTION
75549 field_addr.name = "bonus_type";
75550#endif /* FREECIV_JSON_CONNECTION */
75551
75552 {
75553 int readin;
75554
75555 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75556 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
75557 }
75558 real_packet->bonus_type = readin;
75559 }
75560 }
75561
75562 if (nullptr == old) {
75563 old = fc_malloc(sizeof(*old));
75565 *old = *real_packet;
75567 } else {
75568 *old = *real_packet;
75569 }
75570
75571#else /* FREECIV_DELTA_PROTOCOL */
75572#ifdef FREECIV_JSON_CONNECTION
75573 field_addr.name = "id";
75574#endif /* FREECIV_JSON_CONNECTION */
75575
75576 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75578 }
75579
75580#ifdef FREECIV_JSON_CONNECTION
75581 field_addr.name = "trade_pct";
75582#endif /* FREECIV_JSON_CONNECTION */
75583
75584 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
75585 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
75586 }
75587
75588#ifdef FREECIV_JSON_CONNECTION
75589 field_addr.name = "cancelling";
75590#endif /* FREECIV_JSON_CONNECTION */
75591
75592 {
75593 int readin;
75594
75595 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75596 RECEIVE_PACKET_FIELD_ERROR(cancelling);
75597 }
75598 real_packet->cancelling = readin;
75599 }
75600
75601#ifdef FREECIV_JSON_CONNECTION
75602 field_addr.name = "bonus_type";
75603#endif /* FREECIV_JSON_CONNECTION */
75604
75605 {
75606 int readin;
75607
75608 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75609 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
75610 }
75611 real_packet->bonus_type = readin;
75612 }
75613#endif /* FREECIV_DELTA_PROTOCOL */
75614
75616#undef FREE_PACKET_STRUCT
75617}
75618
75619static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
75620{
75621 const struct packet_ruleset_trade *real_packet = packet;
75622 int e;
75624
75625 log_packet_detailed("packet_ruleset_trade_100: sending info about ()");
75626
75627#ifdef FREECIV_DELTA_PROTOCOL
75629 struct packet_ruleset_trade *old;
75630 bool differ;
75631 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TRADE;
75632
75633 if (nullptr == *hash) {
75635 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
75636 }
75637 BV_CLR_ALL(fields);
75638
75639 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75640 old = fc_malloc(sizeof(*old));
75641 /* temporary bitcopy just to insert correctly */
75642 *old = *real_packet;
75645 }
75646
75647 differ = (old->id != real_packet->id);
75648 if (differ) {
75649 BV_SET(fields, 0);
75650 }
75651
75652 differ = (old->trade_pct != real_packet->trade_pct);
75653 if (differ) {
75654 BV_SET(fields, 1);
75655 }
75656
75657 differ = (old->cancelling != real_packet->cancelling);
75658 if (differ) {
75659 BV_SET(fields, 2);
75660 }
75661
75662 differ = (old->bonus_type != real_packet->bonus_type);
75663 if (differ) {
75664 BV_SET(fields, 3);
75665 }
75666#endif /* FREECIV_DELTA_PROTOCOL */
75667
75668#ifdef FREECIV_JSON_CONNECTION
75669 struct plocation field_addr;
75670 {
75671 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75674 }
75675#endif /* FREECIV_JSON_CONNECTION */
75676
75677#ifdef FREECIV_DELTA_PROTOCOL
75678#ifdef FREECIV_JSON_CONNECTION
75679 field_addr.name = "fields";
75680#endif /* FREECIV_JSON_CONNECTION */
75681 e = 0;
75682 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75683 if (e) {
75684 log_packet_detailed("fields bitvector error detected");
75685 }
75686
75687 if (BV_ISSET(fields, 0)) {
75688 log_packet_detailed(" field 'id' has changed");
75689
75690#ifdef FREECIV_JSON_CONNECTION
75691 field_addr.name = "id";
75692#endif /* FREECIV_JSON_CONNECTION */
75693 e = 0;
75694
75695 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75696
75697 if (e) {
75698 log_packet_detailed("'id' field error detected");
75699 }
75700 }
75701
75702 if (BV_ISSET(fields, 1)) {
75703 log_packet_detailed(" field 'trade_pct' has changed");
75704
75705#ifdef FREECIV_JSON_CONNECTION
75706 field_addr.name = "trade_pct";
75707#endif /* FREECIV_JSON_CONNECTION */
75708 e = 0;
75709
75710 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
75711
75712 if (e) {
75713 log_packet_detailed("'trade_pct' field error detected");
75714 }
75715 }
75716
75717 if (BV_ISSET(fields, 2)) {
75718 log_packet_detailed(" field 'cancelling' has changed");
75719
75720#ifdef FREECIV_JSON_CONNECTION
75721 field_addr.name = "cancelling";
75722#endif /* FREECIV_JSON_CONNECTION */
75723 e = 0;
75724
75725 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
75726
75727 if (e) {
75728 log_packet_detailed("'cancelling' field error detected");
75729 }
75730 }
75731
75732 if (BV_ISSET(fields, 3)) {
75733 log_packet_detailed(" field 'bonus_type' has changed");
75734
75735#ifdef FREECIV_JSON_CONNECTION
75736 field_addr.name = "bonus_type";
75737#endif /* FREECIV_JSON_CONNECTION */
75738 e = 0;
75739
75740 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
75741
75742 if (e) {
75743 log_packet_detailed("'bonus_type' field error detected");
75744 }
75745 }
75746
75747 *old = *real_packet;
75748
75749#else /* FREECIV_DELTA_PROTOCOL */
75750#ifdef FREECIV_JSON_CONNECTION
75751 field_addr.name = "id";
75752#endif /* FREECIV_JSON_CONNECTION */
75753 e = 0;
75754
75755 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75756
75757 if (e) {
75758 log_packet_detailed("'id' field error detected");
75759 }
75760
75761#ifdef FREECIV_JSON_CONNECTION
75762 field_addr.name = "trade_pct";
75763#endif /* FREECIV_JSON_CONNECTION */
75764 e = 0;
75765
75766 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
75767
75768 if (e) {
75769 log_packet_detailed("'trade_pct' field error detected");
75770 }
75771
75772#ifdef FREECIV_JSON_CONNECTION
75773 field_addr.name = "cancelling";
75774#endif /* FREECIV_JSON_CONNECTION */
75775 e = 0;
75776
75777 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
75778
75779 if (e) {
75780 log_packet_detailed("'cancelling' field error detected");
75781 }
75782
75783#ifdef FREECIV_JSON_CONNECTION
75784 field_addr.name = "bonus_type";
75785#endif /* FREECIV_JSON_CONNECTION */
75786 e = 0;
75787
75788 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
75789
75790 if (e) {
75791 log_packet_detailed("'bonus_type' field error detected");
75792 }
75793#endif /* FREECIV_DELTA_PROTOCOL */
75794
75796}
75797
75799{
75800 if (!pc->used) {
75801 log_error("WARNING: trying to send data to the closed connection %s",
75803 return -1;
75804 }
75805 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TRADE].packet != nullptr, -1,
75806 "Handler for PACKET_RULESET_TRADE not installed");
75807 return pc->phs.handlers->send[PACKET_RULESET_TRADE].packet(pc, packet);
75808}
75809
75810void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
75811{
75812 conn_list_iterate(dest, pconn) {
75815}
75816
75817static inline void init_packet_ruleset_action(struct packet_ruleset_action *packet)
75818{
75819 memset(packet, 0, sizeof(*packet));
75820}
75821
75822#define free_packet_ruleset_action(_packet) (void) 0
75823#define destroy_packet_ruleset_action free
75824
75825#ifdef FREECIV_DELTA_PROTOCOL
75826#define hash_packet_ruleset_action_100 hash_const
75827#define cmp_packet_ruleset_action_100 cmp_const
75829#endif /* FREECIV_DELTA_PROTOCOL */
75830
75832{
75833#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action(_packet)
75835
75836#ifdef FREECIV_JSON_CONNECTION
75837 struct plocation field_addr;
75838 {
75839 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75842 }
75843#endif /* FREECIV_JSON_CONNECTION */
75844
75845 log_packet_detailed("packet_ruleset_action_100: got info about ()");
75846
75847#ifdef FREECIV_DELTA_PROTOCOL
75849 struct packet_ruleset_action *old;
75850 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION;
75851
75852 if (nullptr == *hash) {
75854 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
75855 }
75856
75857 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75858 *real_packet = *old;
75859 } else {
75860 /* packet is already initialized empty */
75861 log_packet_detailed(" no old info");
75862 }
75863
75864#ifdef FREECIV_JSON_CONNECTION
75865 field_addr.name = "fields";
75866#endif /* FREECIV_JSON_CONNECTION */
75867 DIO_BV_GET(&din, &field_addr, fields);
75868
75869 if (BV_ISSET(fields, 0)) {
75870 log_packet_detailed(" got field 'id'");
75871
75872#ifdef FREECIV_JSON_CONNECTION
75873 field_addr.name = "id";
75874#endif /* FREECIV_JSON_CONNECTION */
75875
75876 {
75877 int readin;
75878
75879 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75881 }
75882 real_packet->id = readin;
75883 }
75884 }
75885
75886 if (BV_ISSET(fields, 1)) {
75887 log_packet_detailed(" got field 'ui_name'");
75888
75889#ifdef FREECIV_JSON_CONNECTION
75890 field_addr.name = "ui_name";
75891#endif /* FREECIV_JSON_CONNECTION */
75892
75893 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
75895 }
75896 }
75897
75898 real_packet->quiet = BV_ISSET(fields, 2);
75899
75900 if (BV_ISSET(fields, 3)) {
75901 log_packet_detailed(" got field 'result'");
75902
75903#ifdef FREECIV_JSON_CONNECTION
75904 field_addr.name = "result";
75905#endif /* FREECIV_JSON_CONNECTION */
75906
75907 {
75908 int readin;
75909
75910 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75912 }
75913 real_packet->result = readin;
75914 }
75915 }
75916
75917 if (BV_ISSET(fields, 4)) {
75918 log_packet_detailed(" got field 'sub_results'");
75919
75920#ifdef FREECIV_JSON_CONNECTION
75921 field_addr.name = "sub_results";
75922#endif /* FREECIV_JSON_CONNECTION */
75923
75924 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
75925 RECEIVE_PACKET_FIELD_ERROR(sub_results);
75926 }
75927 }
75928
75929 real_packet->actor_consuming_always = BV_ISSET(fields, 5);
75930
75931 if (BV_ISSET(fields, 6)) {
75932 log_packet_detailed(" got field 'act_kind'");
75933
75934#ifdef FREECIV_JSON_CONNECTION
75935 field_addr.name = "act_kind";
75936#endif /* FREECIV_JSON_CONNECTION */
75937
75938 {
75939 int readin;
75940
75941 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75943 }
75944 real_packet->act_kind = readin;
75945 }
75946 }
75947
75948 if (BV_ISSET(fields, 7)) {
75949 log_packet_detailed(" got field 'tgt_kind'");
75950
75951#ifdef FREECIV_JSON_CONNECTION
75952 field_addr.name = "tgt_kind";
75953#endif /* FREECIV_JSON_CONNECTION */
75954
75955 {
75956 int readin;
75957
75958 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75960 }
75961 real_packet->tgt_kind = readin;
75962 }
75963 }
75964
75965 if (BV_ISSET(fields, 8)) {
75966 log_packet_detailed(" got field 'sub_tgt_kind'");
75967
75968#ifdef FREECIV_JSON_CONNECTION
75969 field_addr.name = "sub_tgt_kind";
75970#endif /* FREECIV_JSON_CONNECTION */
75971
75972 {
75973 int readin;
75974
75975 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75976 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
75977 }
75978 real_packet->sub_tgt_kind = readin;
75979 }
75980 }
75981
75982 if (BV_ISSET(fields, 9)) {
75983 log_packet_detailed(" got field 'min_distance'");
75984
75985#ifdef FREECIV_JSON_CONNECTION
75986 field_addr.name = "min_distance";
75987#endif /* FREECIV_JSON_CONNECTION */
75988
75989 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
75990 RECEIVE_PACKET_FIELD_ERROR(min_distance);
75991 }
75992 }
75993
75994 if (BV_ISSET(fields, 10)) {
75995 log_packet_detailed(" got field 'max_distance'");
75996
75997#ifdef FREECIV_JSON_CONNECTION
75998 field_addr.name = "max_distance";
75999#endif /* FREECIV_JSON_CONNECTION */
76000
76001 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76002 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76003 }
76004 }
76005
76006 if (BV_ISSET(fields, 11)) {
76007 log_packet_detailed(" got field 'blocked_by'");
76008
76009#ifdef FREECIV_JSON_CONNECTION
76010 field_addr.name = "blocked_by";
76011#endif /* FREECIV_JSON_CONNECTION */
76012
76013 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76014 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76015 }
76016 }
76017
76018 if (nullptr == old) {
76019 old = fc_malloc(sizeof(*old));
76021 *old = *real_packet;
76023 } else {
76024 *old = *real_packet;
76025 }
76026
76027#else /* FREECIV_DELTA_PROTOCOL */
76028#ifdef FREECIV_JSON_CONNECTION
76029 field_addr.name = "id";
76030#endif /* FREECIV_JSON_CONNECTION */
76031
76032 {
76033 int readin;
76034
76035 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76037 }
76038 real_packet->id = readin;
76039 }
76040
76041#ifdef FREECIV_JSON_CONNECTION
76042 field_addr.name = "ui_name";
76043#endif /* FREECIV_JSON_CONNECTION */
76044
76045 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
76047 }
76048
76049#ifdef FREECIV_JSON_CONNECTION
76050 field_addr.name = "quiet";
76051#endif /* FREECIV_JSON_CONNECTION */
76052
76053 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
76055 }
76056
76057#ifdef FREECIV_JSON_CONNECTION
76058 field_addr.name = "result";
76059#endif /* FREECIV_JSON_CONNECTION */
76060
76061 {
76062 int readin;
76063
76064 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76066 }
76067 real_packet->result = readin;
76068 }
76069
76070#ifdef FREECIV_JSON_CONNECTION
76071 field_addr.name = "sub_results";
76072#endif /* FREECIV_JSON_CONNECTION */
76073
76074 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
76075 RECEIVE_PACKET_FIELD_ERROR(sub_results);
76076 }
76077
76078#ifdef FREECIV_JSON_CONNECTION
76079 field_addr.name = "actor_consuming_always";
76080#endif /* FREECIV_JSON_CONNECTION */
76081
76082 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->actor_consuming_always)) {
76083 RECEIVE_PACKET_FIELD_ERROR(actor_consuming_always);
76084 }
76085
76086#ifdef FREECIV_JSON_CONNECTION
76087 field_addr.name = "act_kind";
76088#endif /* FREECIV_JSON_CONNECTION */
76089
76090 {
76091 int readin;
76092
76093 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76095 }
76096 real_packet->act_kind = readin;
76097 }
76098
76099#ifdef FREECIV_JSON_CONNECTION
76100 field_addr.name = "tgt_kind";
76101#endif /* FREECIV_JSON_CONNECTION */
76102
76103 {
76104 int readin;
76105
76106 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76108 }
76109 real_packet->tgt_kind = readin;
76110 }
76111
76112#ifdef FREECIV_JSON_CONNECTION
76113 field_addr.name = "sub_tgt_kind";
76114#endif /* FREECIV_JSON_CONNECTION */
76115
76116 {
76117 int readin;
76118
76119 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76120 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
76121 }
76122 real_packet->sub_tgt_kind = readin;
76123 }
76124
76125#ifdef FREECIV_JSON_CONNECTION
76126 field_addr.name = "min_distance";
76127#endif /* FREECIV_JSON_CONNECTION */
76128
76129 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
76130 RECEIVE_PACKET_FIELD_ERROR(min_distance);
76131 }
76132
76133#ifdef FREECIV_JSON_CONNECTION
76134 field_addr.name = "max_distance";
76135#endif /* FREECIV_JSON_CONNECTION */
76136
76137 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76138 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76139 }
76140
76141#ifdef FREECIV_JSON_CONNECTION
76142 field_addr.name = "blocked_by";
76143#endif /* FREECIV_JSON_CONNECTION */
76144
76145 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76146 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76147 }
76148#endif /* FREECIV_DELTA_PROTOCOL */
76149
76151#undef FREE_PACKET_STRUCT
76152}
76153
76155{
76156 const struct packet_ruleset_action *real_packet = packet;
76157 int e;
76159
76160 log_packet_detailed("packet_ruleset_action_100: sending info about ()");
76161
76162#ifdef FREECIV_DELTA_PROTOCOL
76164 struct packet_ruleset_action *old;
76165 bool differ;
76166 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION;
76167
76168 if (nullptr == *hash) {
76170 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
76171 }
76172 BV_CLR_ALL(fields);
76173
76174 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76175 old = fc_malloc(sizeof(*old));
76176 /* temporary bitcopy just to insert correctly */
76177 *old = *real_packet;
76180 }
76181
76182 differ = (old->id != real_packet->id);
76183 if (differ) {
76184 BV_SET(fields, 0);
76185 }
76186
76187 differ = (strcmp(old->ui_name, real_packet->ui_name) != 0);
76188 if (differ) {
76189 BV_SET(fields, 1);
76190 }
76191
76192 /* folded into head */
76193 if (real_packet->quiet) {
76194 BV_SET(fields, 2);
76195 }
76196
76197 differ = (old->result != real_packet->result);
76198 if (differ) {
76199 BV_SET(fields, 3);
76200 }
76201
76202 differ = !BV_ARE_EQUAL(old->sub_results, real_packet->sub_results);
76203 if (differ) {
76204 BV_SET(fields, 4);
76205 }
76206
76207 /* folded into head */
76208 if (real_packet->actor_consuming_always) {
76209 BV_SET(fields, 5);
76210 }
76211
76212 differ = (old->act_kind != real_packet->act_kind);
76213 if (differ) {
76214 BV_SET(fields, 6);
76215 }
76216
76217 differ = (old->tgt_kind != real_packet->tgt_kind);
76218 if (differ) {
76219 BV_SET(fields, 7);
76220 }
76221
76222 differ = (old->sub_tgt_kind != real_packet->sub_tgt_kind);
76223 if (differ) {
76224 BV_SET(fields, 8);
76225 }
76226
76227 differ = (old->min_distance != real_packet->min_distance);
76228 if (differ) {
76229 BV_SET(fields, 9);
76230 }
76231
76232 differ = (old->max_distance != real_packet->max_distance);
76233 if (differ) {
76234 BV_SET(fields, 10);
76235 }
76236
76237 differ = !BV_ARE_EQUAL(old->blocked_by, real_packet->blocked_by);
76238 if (differ) {
76239 BV_SET(fields, 11);
76240 }
76241#endif /* FREECIV_DELTA_PROTOCOL */
76242
76243#ifdef FREECIV_JSON_CONNECTION
76244 struct plocation field_addr;
76245 {
76246 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76249 }
76250#endif /* FREECIV_JSON_CONNECTION */
76251
76252#ifdef FREECIV_DELTA_PROTOCOL
76253#ifdef FREECIV_JSON_CONNECTION
76254 field_addr.name = "fields";
76255#endif /* FREECIV_JSON_CONNECTION */
76256 e = 0;
76257 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76258 if (e) {
76259 log_packet_detailed("fields bitvector error detected");
76260 }
76261
76262 if (BV_ISSET(fields, 0)) {
76263 log_packet_detailed(" field 'id' has changed");
76264
76265#ifdef FREECIV_JSON_CONNECTION
76266 field_addr.name = "id";
76267#endif /* FREECIV_JSON_CONNECTION */
76268 e = 0;
76269
76270 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76271
76272 if (e) {
76273 log_packet_detailed("'id' field error detected");
76274 }
76275 }
76276
76277 if (BV_ISSET(fields, 1)) {
76278 log_packet_detailed(" field 'ui_name' has changed");
76279
76280#ifdef FREECIV_JSON_CONNECTION
76281 field_addr.name = "ui_name";
76282#endif /* FREECIV_JSON_CONNECTION */
76283 e = 0;
76284
76285 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76286
76287 if (e) {
76288 log_packet_detailed("'ui_name' field error detected");
76289 }
76290 }
76291
76292 /* field 2 is folded into the header */
76293
76294 if (BV_ISSET(fields, 3)) {
76295 log_packet_detailed(" field 'result' has changed");
76296
76297#ifdef FREECIV_JSON_CONNECTION
76298 field_addr.name = "result";
76299#endif /* FREECIV_JSON_CONNECTION */
76300 e = 0;
76301
76302 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76303
76304 if (e) {
76305 log_packet_detailed("'result' field error detected");
76306 }
76307 }
76308
76309 if (BV_ISSET(fields, 4)) {
76310 log_packet_detailed(" field 'sub_results' has changed");
76311
76312#ifdef FREECIV_JSON_CONNECTION
76313 field_addr.name = "sub_results";
76314#endif /* FREECIV_JSON_CONNECTION */
76315 e = 0;
76316
76317 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76318
76319 if (e) {
76320 log_packet_detailed("'sub_results' field error detected");
76321 }
76322 }
76323
76324 /* field 5 is folded into the header */
76325
76326 if (BV_ISSET(fields, 6)) {
76327 log_packet_detailed(" field 'act_kind' has changed");
76328
76329#ifdef FREECIV_JSON_CONNECTION
76330 field_addr.name = "act_kind";
76331#endif /* FREECIV_JSON_CONNECTION */
76332 e = 0;
76333
76334 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76335
76336 if (e) {
76337 log_packet_detailed("'act_kind' field error detected");
76338 }
76339 }
76340
76341 if (BV_ISSET(fields, 7)) {
76342 log_packet_detailed(" field 'tgt_kind' has changed");
76343
76344#ifdef FREECIV_JSON_CONNECTION
76345 field_addr.name = "tgt_kind";
76346#endif /* FREECIV_JSON_CONNECTION */
76347 e = 0;
76348
76349 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76350
76351 if (e) {
76352 log_packet_detailed("'tgt_kind' field error detected");
76353 }
76354 }
76355
76356 if (BV_ISSET(fields, 8)) {
76357 log_packet_detailed(" field 'sub_tgt_kind' has changed");
76358
76359#ifdef FREECIV_JSON_CONNECTION
76360 field_addr.name = "sub_tgt_kind";
76361#endif /* FREECIV_JSON_CONNECTION */
76362 e = 0;
76363
76364 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76365
76366 if (e) {
76367 log_packet_detailed("'sub_tgt_kind' field error detected");
76368 }
76369 }
76370
76371 if (BV_ISSET(fields, 9)) {
76372 log_packet_detailed(" field 'min_distance' has changed");
76373
76374#ifdef FREECIV_JSON_CONNECTION
76375 field_addr.name = "min_distance";
76376#endif /* FREECIV_JSON_CONNECTION */
76377 e = 0;
76378
76379 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
76380
76381 if (e) {
76382 log_packet_detailed("'min_distance' field error detected");
76383 }
76384 }
76385
76386 if (BV_ISSET(fields, 10)) {
76387 log_packet_detailed(" field 'max_distance' has changed");
76388
76389#ifdef FREECIV_JSON_CONNECTION
76390 field_addr.name = "max_distance";
76391#endif /* FREECIV_JSON_CONNECTION */
76392 e = 0;
76393
76394 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
76395
76396 if (e) {
76397 log_packet_detailed("'max_distance' field error detected");
76398 }
76399 }
76400
76401 if (BV_ISSET(fields, 11)) {
76402 log_packet_detailed(" field 'blocked_by' has changed");
76403
76404#ifdef FREECIV_JSON_CONNECTION
76405 field_addr.name = "blocked_by";
76406#endif /* FREECIV_JSON_CONNECTION */
76407 e = 0;
76408
76409 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
76410
76411 if (e) {
76412 log_packet_detailed("'blocked_by' field error detected");
76413 }
76414 }
76415
76416 *old = *real_packet;
76417
76418#else /* FREECIV_DELTA_PROTOCOL */
76419#ifdef FREECIV_JSON_CONNECTION
76420 field_addr.name = "id";
76421#endif /* FREECIV_JSON_CONNECTION */
76422 e = 0;
76423
76424 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76425
76426 if (e) {
76427 log_packet_detailed("'id' field error detected");
76428 }
76429
76430#ifdef FREECIV_JSON_CONNECTION
76431 field_addr.name = "ui_name";
76432#endif /* FREECIV_JSON_CONNECTION */
76433 e = 0;
76434
76435 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76436
76437 if (e) {
76438 log_packet_detailed("'ui_name' field error detected");
76439 }
76440
76441#ifdef FREECIV_JSON_CONNECTION
76442 field_addr.name = "quiet";
76443#endif /* FREECIV_JSON_CONNECTION */
76444 e = 0;
76445
76446 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
76447
76448 if (e) {
76449 log_packet_detailed("'quiet' field error detected");
76450 }
76451
76452#ifdef FREECIV_JSON_CONNECTION
76453 field_addr.name = "result";
76454#endif /* FREECIV_JSON_CONNECTION */
76455 e = 0;
76456
76457 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76458
76459 if (e) {
76460 log_packet_detailed("'result' field error detected");
76461 }
76462
76463#ifdef FREECIV_JSON_CONNECTION
76464 field_addr.name = "sub_results";
76465#endif /* FREECIV_JSON_CONNECTION */
76466 e = 0;
76467
76468 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76469
76470 if (e) {
76471 log_packet_detailed("'sub_results' field error detected");
76472 }
76473
76474#ifdef FREECIV_JSON_CONNECTION
76475 field_addr.name = "actor_consuming_always";
76476#endif /* FREECIV_JSON_CONNECTION */
76477 e = 0;
76478
76479 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->actor_consuming_always);
76480
76481 if (e) {
76482 log_packet_detailed("'actor_consuming_always' field error detected");
76483 }
76484
76485#ifdef FREECIV_JSON_CONNECTION
76486 field_addr.name = "act_kind";
76487#endif /* FREECIV_JSON_CONNECTION */
76488 e = 0;
76489
76490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76491
76492 if (e) {
76493 log_packet_detailed("'act_kind' field error detected");
76494 }
76495
76496#ifdef FREECIV_JSON_CONNECTION
76497 field_addr.name = "tgt_kind";
76498#endif /* FREECIV_JSON_CONNECTION */
76499 e = 0;
76500
76501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76502
76503 if (e) {
76504 log_packet_detailed("'tgt_kind' field error detected");
76505 }
76506
76507#ifdef FREECIV_JSON_CONNECTION
76508 field_addr.name = "sub_tgt_kind";
76509#endif /* FREECIV_JSON_CONNECTION */
76510 e = 0;
76511
76512 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76513
76514 if (e) {
76515 log_packet_detailed("'sub_tgt_kind' field error detected");
76516 }
76517
76518#ifdef FREECIV_JSON_CONNECTION
76519 field_addr.name = "min_distance";
76520#endif /* FREECIV_JSON_CONNECTION */
76521 e = 0;
76522
76523 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
76524
76525 if (e) {
76526 log_packet_detailed("'min_distance' field error detected");
76527 }
76528
76529#ifdef FREECIV_JSON_CONNECTION
76530 field_addr.name = "max_distance";
76531#endif /* FREECIV_JSON_CONNECTION */
76532 e = 0;
76533
76534 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
76535
76536 if (e) {
76537 log_packet_detailed("'max_distance' field error detected");
76538 }
76539
76540#ifdef FREECIV_JSON_CONNECTION
76541 field_addr.name = "blocked_by";
76542#endif /* FREECIV_JSON_CONNECTION */
76543 e = 0;
76544
76545 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
76546
76547 if (e) {
76548 log_packet_detailed("'blocked_by' field error detected");
76549 }
76550#endif /* FREECIV_DELTA_PROTOCOL */
76551
76553}
76554
76556{
76557 if (!pc->used) {
76558 log_error("WARNING: trying to send data to the closed connection %s",
76560 return -1;
76561 }
76562 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION].packet != nullptr, -1,
76563 "Handler for PACKET_RULESET_ACTION not installed");
76564 return pc->phs.handlers->send[PACKET_RULESET_ACTION].packet(pc, packet);
76565}
76566
76567void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
76568{
76569 conn_list_iterate(dest, pconn) {
76572}
76573
76575{
76576 memset(packet, 0, sizeof(*packet));
76577
76580}
76581
76583{
76586}
76587
76588static inline void destroy_packet_ruleset_action_enabler(void *packet)
76589{
76591 free(packet);
76592}
76593
76594#ifdef FREECIV_DELTA_PROTOCOL
76595#define hash_packet_ruleset_action_enabler_100 hash_const
76596#define cmp_packet_ruleset_action_enabler_100 cmp_const
76598#endif /* FREECIV_DELTA_PROTOCOL */
76599
76601{
76602#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_enabler(_packet)
76604
76605#ifdef FREECIV_JSON_CONNECTION
76606 struct plocation field_addr;
76607 {
76608 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76611 }
76612#endif /* FREECIV_JSON_CONNECTION */
76613
76614 log_packet_detailed("packet_ruleset_action_enabler_100: got info about ()");
76615
76616#ifdef FREECIV_DELTA_PROTOCOL
76619 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_ENABLER;
76620
76621 if (nullptr == *hash) {
76623 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
76624 }
76625
76626 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76627 real_packet->enabled_action = old->enabled_action;
76628 requirement_vector_copy(&real_packet->actor_reqs, &old->actor_reqs);
76629 requirement_vector_copy(&real_packet->target_reqs, &old->target_reqs);
76630 } else {
76631 /* packet is already initialized empty */
76632 log_packet_detailed(" no old info");
76633 }
76634
76635#ifdef FREECIV_JSON_CONNECTION
76636 field_addr.name = "fields";
76637#endif /* FREECIV_JSON_CONNECTION */
76638 DIO_BV_GET(&din, &field_addr, fields);
76639
76640 if (BV_ISSET(fields, 0)) {
76641 log_packet_detailed(" got field 'enabled_action'");
76642
76643#ifdef FREECIV_JSON_CONNECTION
76644 field_addr.name = "enabled_action";
76645#endif /* FREECIV_JSON_CONNECTION */
76646
76647 {
76648 int readin;
76649
76650 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76651 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
76652 }
76653 real_packet->enabled_action = readin;
76654 }
76655 }
76656
76657 if (BV_ISSET(fields, 1)) {
76658 log_packet_detailed(" got field 'actor_reqs'");
76659
76660#ifdef FREECIV_JSON_CONNECTION
76661 field_addr.name = "actor_reqs";
76662#endif /* FREECIV_JSON_CONNECTION */
76663
76664 {
76665 int i;
76666
76667 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76668 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76669 }
76671
76672#ifdef FREECIV_JSON_CONNECTION
76673 /* Enter array. */
76674 field_addr.sub_location = plocation_elem_new(0);
76675#endif /* FREECIV_JSON_CONNECTION */
76676
76677 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
76678#ifdef FREECIV_JSON_CONNECTION
76679 /* Next array element */
76680 field_addr.sub_location->number = i;
76681#endif /* FREECIV_JSON_CONNECTION */
76682
76683 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
76684 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76685 }
76686 }
76687
76688#ifdef FREECIV_JSON_CONNECTION
76689 /* Exit array. */
76690 FC_FREE(field_addr.sub_location);
76691#endif /* FREECIV_JSON_CONNECTION */
76692 }
76693 }
76694
76695 if (BV_ISSET(fields, 2)) {
76696 log_packet_detailed(" got field 'target_reqs'");
76697
76698#ifdef FREECIV_JSON_CONNECTION
76699 field_addr.name = "target_reqs";
76700#endif /* FREECIV_JSON_CONNECTION */
76701
76702 {
76703 int i;
76704
76705 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76706 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76707 }
76709
76710#ifdef FREECIV_JSON_CONNECTION
76711 /* Enter array. */
76712 field_addr.sub_location = plocation_elem_new(0);
76713#endif /* FREECIV_JSON_CONNECTION */
76714
76715 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
76716#ifdef FREECIV_JSON_CONNECTION
76717 /* Next array element */
76718 field_addr.sub_location->number = i;
76719#endif /* FREECIV_JSON_CONNECTION */
76720
76721 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
76722 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76723 }
76724 }
76725
76726#ifdef FREECIV_JSON_CONNECTION
76727 /* Exit array. */
76728 FC_FREE(field_addr.sub_location);
76729#endif /* FREECIV_JSON_CONNECTION */
76730 }
76731 }
76732
76733 if (nullptr == old) {
76734 old = fc_malloc(sizeof(*old));
76736 old->enabled_action = real_packet->enabled_action;
76737 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
76738 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
76740 } else {
76741 old->enabled_action = real_packet->enabled_action;
76742 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
76743 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
76744 }
76745
76746#else /* FREECIV_DELTA_PROTOCOL */
76747#ifdef FREECIV_JSON_CONNECTION
76748 field_addr.name = "enabled_action";
76749#endif /* FREECIV_JSON_CONNECTION */
76750
76751 {
76752 int readin;
76753
76754 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76755 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
76756 }
76757 real_packet->enabled_action = readin;
76758 }
76759
76760#ifdef FREECIV_JSON_CONNECTION
76761 field_addr.name = "actor_reqs";
76762#endif /* FREECIV_JSON_CONNECTION */
76763
76764 {
76765 int i;
76766
76767 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76768 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76769 }
76771
76772#ifdef FREECIV_JSON_CONNECTION
76773 /* Enter array. */
76774 field_addr.sub_location = plocation_elem_new(0);
76775#endif /* FREECIV_JSON_CONNECTION */
76776
76777 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
76778#ifdef FREECIV_JSON_CONNECTION
76779 /* Next array element */
76780 field_addr.sub_location->number = i;
76781#endif /* FREECIV_JSON_CONNECTION */
76782
76783 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
76784 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76785 }
76786 }
76787
76788#ifdef FREECIV_JSON_CONNECTION
76789 /* Exit array. */
76790 FC_FREE(field_addr.sub_location);
76791#endif /* FREECIV_JSON_CONNECTION */
76792 }
76793
76794#ifdef FREECIV_JSON_CONNECTION
76795 field_addr.name = "target_reqs";
76796#endif /* FREECIV_JSON_CONNECTION */
76797
76798 {
76799 int i;
76800
76801 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76802 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76803 }
76805
76806#ifdef FREECIV_JSON_CONNECTION
76807 /* Enter array. */
76808 field_addr.sub_location = plocation_elem_new(0);
76809#endif /* FREECIV_JSON_CONNECTION */
76810
76811 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
76812#ifdef FREECIV_JSON_CONNECTION
76813 /* Next array element */
76814 field_addr.sub_location->number = i;
76815#endif /* FREECIV_JSON_CONNECTION */
76816
76817 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
76818 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76819 }
76820 }
76821
76822#ifdef FREECIV_JSON_CONNECTION
76823 /* Exit array. */
76824 FC_FREE(field_addr.sub_location);
76825#endif /* FREECIV_JSON_CONNECTION */
76826 }
76827#endif /* FREECIV_DELTA_PROTOCOL */
76828
76830#undef FREE_PACKET_STRUCT
76831}
76832
76834{
76835 const struct packet_ruleset_action_enabler *real_packet = packet;
76836 int e;
76838
76839 log_packet_detailed("packet_ruleset_action_enabler_100: sending info about ()");
76840
76841#ifdef FREECIV_DELTA_PROTOCOL
76844 bool differ;
76845 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_ENABLER;
76846
76847 if (nullptr == *hash) {
76849 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
76850 }
76851 BV_CLR_ALL(fields);
76852
76853 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76854 old = fc_malloc(sizeof(*old));
76855 /* temporary bitcopy just to insert correctly */
76856 *old = *real_packet;
76859 }
76860
76861 differ = (old->enabled_action != real_packet->enabled_action);
76862 if (differ) {
76863 BV_SET(fields, 0);
76864 }
76865
76866 differ = (requirement_vector_size(&old->actor_reqs) != requirement_vector_size(&real_packet->actor_reqs));
76867 if (!differ) {
76868 int i;
76869
76870 for (i = 0; i < requirement_vector_size(&old->actor_reqs); i++) {
76871 differ = !are_requirements_equal(&old->actor_reqs.p[i], &real_packet->actor_reqs.p[i]);
76872 if (differ) {
76873 break;
76874 }
76875 }
76876 }
76877 if (differ) {
76878 BV_SET(fields, 1);
76879 }
76880
76881 differ = (requirement_vector_size(&old->target_reqs) != requirement_vector_size(&real_packet->target_reqs));
76882 if (!differ) {
76883 int i;
76884
76885 for (i = 0; i < requirement_vector_size(&old->target_reqs); i++) {
76886 differ = !are_requirements_equal(&old->target_reqs.p[i], &real_packet->target_reqs.p[i]);
76887 if (differ) {
76888 break;
76889 }
76890 }
76891 }
76892 if (differ) {
76893 BV_SET(fields, 2);
76894 }
76895#endif /* FREECIV_DELTA_PROTOCOL */
76896
76897#ifdef FREECIV_JSON_CONNECTION
76898 struct plocation field_addr;
76899 {
76900 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76903 }
76904#endif /* FREECIV_JSON_CONNECTION */
76905
76906#ifdef FREECIV_DELTA_PROTOCOL
76907#ifdef FREECIV_JSON_CONNECTION
76908 field_addr.name = "fields";
76909#endif /* FREECIV_JSON_CONNECTION */
76910 e = 0;
76911 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76912 if (e) {
76913 log_packet_detailed("fields bitvector error detected");
76914 }
76915
76916 if (BV_ISSET(fields, 0)) {
76917 log_packet_detailed(" field 'enabled_action' has changed");
76918
76919#ifdef FREECIV_JSON_CONNECTION
76920 field_addr.name = "enabled_action";
76921#endif /* FREECIV_JSON_CONNECTION */
76922 e = 0;
76923
76924 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
76925
76926 if (e) {
76927 log_packet_detailed("'enabled_action' field error detected");
76928 }
76929 }
76930
76931 if (BV_ISSET(fields, 1)) {
76932 log_packet_detailed(" field 'actor_reqs' has changed");
76933
76934#ifdef FREECIV_JSON_CONNECTION
76935 field_addr.name = "actor_reqs";
76936#endif /* FREECIV_JSON_CONNECTION */
76937 e = 0;
76938
76939 {
76940 int i;
76941
76944
76945#ifdef FREECIV_JSON_CONNECTION
76946 /* Enter array. */
76947 field_addr.sub_location = plocation_elem_new(0);
76948#endif /* FREECIV_JSON_CONNECTION */
76949
76950 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
76951#ifdef FREECIV_JSON_CONNECTION
76952 /* Next array element. */
76953 field_addr.sub_location->number = i;
76954#endif /* FREECIV_JSON_CONNECTION */
76955
76956 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
76957 }
76958
76959#ifdef FREECIV_JSON_CONNECTION
76960 /* Exit array. */
76961 FC_FREE(field_addr.sub_location);
76962#endif /* FREECIV_JSON_CONNECTION */
76963 }
76964
76965 if (e) {
76966 log_packet_detailed("'actor_reqs' field error detected");
76967 }
76968 }
76969
76970 if (BV_ISSET(fields, 2)) {
76971 log_packet_detailed(" field 'target_reqs' has changed");
76972
76973#ifdef FREECIV_JSON_CONNECTION
76974 field_addr.name = "target_reqs";
76975#endif /* FREECIV_JSON_CONNECTION */
76976 e = 0;
76977
76978 {
76979 int i;
76980
76983
76984#ifdef FREECIV_JSON_CONNECTION
76985 /* Enter array. */
76986 field_addr.sub_location = plocation_elem_new(0);
76987#endif /* FREECIV_JSON_CONNECTION */
76988
76989 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
76990#ifdef FREECIV_JSON_CONNECTION
76991 /* Next array element. */
76992 field_addr.sub_location->number = i;
76993#endif /* FREECIV_JSON_CONNECTION */
76994
76995 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
76996 }
76997
76998#ifdef FREECIV_JSON_CONNECTION
76999 /* Exit array. */
77000 FC_FREE(field_addr.sub_location);
77001#endif /* FREECIV_JSON_CONNECTION */
77002 }
77003
77004 if (e) {
77005 log_packet_detailed("'target_reqs' field error detected");
77006 }
77007 }
77008
77009 old->enabled_action = real_packet->enabled_action;
77010 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
77011 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
77012
77013#else /* FREECIV_DELTA_PROTOCOL */
77014#ifdef FREECIV_JSON_CONNECTION
77015 field_addr.name = "enabled_action";
77016#endif /* FREECIV_JSON_CONNECTION */
77017 e = 0;
77018
77019 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
77020
77021 if (e) {
77022 log_packet_detailed("'enabled_action' field error detected");
77023 }
77024
77025#ifdef FREECIV_JSON_CONNECTION
77026 field_addr.name = "actor_reqs";
77027#endif /* FREECIV_JSON_CONNECTION */
77028 e = 0;
77029
77030 {
77031 int i;
77032
77035
77036#ifdef FREECIV_JSON_CONNECTION
77037 /* Enter array. */
77038 field_addr.sub_location = plocation_elem_new(0);
77039#endif /* FREECIV_JSON_CONNECTION */
77040
77041 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77042#ifdef FREECIV_JSON_CONNECTION
77043 /* Next array element. */
77044 field_addr.sub_location->number = i;
77045#endif /* FREECIV_JSON_CONNECTION */
77046
77047 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
77048 }
77049
77050#ifdef FREECIV_JSON_CONNECTION
77051 /* Exit array. */
77052 FC_FREE(field_addr.sub_location);
77053#endif /* FREECIV_JSON_CONNECTION */
77054 }
77055
77056 if (e) {
77057 log_packet_detailed("'actor_reqs' field error detected");
77058 }
77059
77060#ifdef FREECIV_JSON_CONNECTION
77061 field_addr.name = "target_reqs";
77062#endif /* FREECIV_JSON_CONNECTION */
77063 e = 0;
77064
77065 {
77066 int i;
77067
77070
77071#ifdef FREECIV_JSON_CONNECTION
77072 /* Enter array. */
77073 field_addr.sub_location = plocation_elem_new(0);
77074#endif /* FREECIV_JSON_CONNECTION */
77075
77076 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77077#ifdef FREECIV_JSON_CONNECTION
77078 /* Next array element. */
77079 field_addr.sub_location->number = i;
77080#endif /* FREECIV_JSON_CONNECTION */
77081
77082 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
77083 }
77084
77085#ifdef FREECIV_JSON_CONNECTION
77086 /* Exit array. */
77087 FC_FREE(field_addr.sub_location);
77088#endif /* FREECIV_JSON_CONNECTION */
77089 }
77090
77091 if (e) {
77092 log_packet_detailed("'target_reqs' field error detected");
77093 }
77094#endif /* FREECIV_DELTA_PROTOCOL */
77095
77097}
77098
77100{
77101 if (!pc->used) {
77102 log_error("WARNING: trying to send data to the closed connection %s",
77104 return -1;
77105 }
77106 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet != nullptr, -1,
77107 "Handler for PACKET_RULESET_ACTION_ENABLER not installed");
77108 return pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet(pc, packet);
77109}
77110
77117
77119{
77120 memset(packet, 0, sizeof(*packet));
77121
77122 requirement_vector_init(&packet->reqs);
77123}
77124
77126{
77127 requirement_vector_free(&packet->reqs);
77128}
77129
77130static inline void destroy_packet_ruleset_action_auto(void *packet)
77131{
77133 free(packet);
77134}
77135
77136#ifdef FREECIV_DELTA_PROTOCOL
77137#define hash_packet_ruleset_action_auto_100 hash_const
77138#define cmp_packet_ruleset_action_auto_100 cmp_const
77140#endif /* FREECIV_DELTA_PROTOCOL */
77141
77143{
77144#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_auto(_packet)
77146
77147#ifdef FREECIV_JSON_CONNECTION
77148 struct plocation field_addr;
77149 {
77150 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77153 }
77154#endif /* FREECIV_JSON_CONNECTION */
77155
77156 log_packet_detailed("packet_ruleset_action_auto_100: got info about ()");
77157
77158#ifdef FREECIV_DELTA_PROTOCOL
77161 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_AUTO;
77162
77163 if (nullptr == *hash) {
77165 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77166 }
77167
77168 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77169 real_packet->id = old->id;
77170 real_packet->cause = old->cause;
77171 requirement_vector_copy(&real_packet->reqs, &old->reqs);
77172 real_packet->alternatives_count = old->alternatives_count;
77173 {
77174 int i;
77175
77176 for (i = 0; i < old->alternatives_count; i++) {
77177 real_packet->alternatives[i] = old->alternatives[i];
77178 }
77179 }
77180 } else {
77181 /* packet is already initialized empty */
77182 log_packet_detailed(" no old info");
77183 }
77184
77185#ifdef FREECIV_JSON_CONNECTION
77186 field_addr.name = "fields";
77187#endif /* FREECIV_JSON_CONNECTION */
77188 DIO_BV_GET(&din, &field_addr, fields);
77189
77190 if (BV_ISSET(fields, 0)) {
77191 log_packet_detailed(" got field 'id'");
77192
77193#ifdef FREECIV_JSON_CONNECTION
77194 field_addr.name = "id";
77195#endif /* FREECIV_JSON_CONNECTION */
77196
77197 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77199 }
77200 }
77201
77202 if (BV_ISSET(fields, 1)) {
77203 log_packet_detailed(" got field 'cause'");
77204
77205#ifdef FREECIV_JSON_CONNECTION
77206 field_addr.name = "cause";
77207#endif /* FREECIV_JSON_CONNECTION */
77208
77209 {
77210 int readin;
77211
77212 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77214 }
77215 real_packet->cause = readin;
77216 }
77217 }
77218
77219 if (BV_ISSET(fields, 2)) {
77220 log_packet_detailed(" got field 'reqs'");
77221
77222#ifdef FREECIV_JSON_CONNECTION
77223 field_addr.name = "reqs";
77224#endif /* FREECIV_JSON_CONNECTION */
77225
77226 {
77227 int i;
77228
77229 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77231 }
77233
77234#ifdef FREECIV_JSON_CONNECTION
77235 /* Enter array. */
77236 field_addr.sub_location = plocation_elem_new(0);
77237#endif /* FREECIV_JSON_CONNECTION */
77238
77239 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77240#ifdef FREECIV_JSON_CONNECTION
77241 /* Next array element */
77242 field_addr.sub_location->number = i;
77243#endif /* FREECIV_JSON_CONNECTION */
77244
77245 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77247 }
77248 }
77249
77250#ifdef FREECIV_JSON_CONNECTION
77251 /* Exit array. */
77252 FC_FREE(field_addr.sub_location);
77253#endif /* FREECIV_JSON_CONNECTION */
77254 }
77255 }
77256
77257 if (BV_ISSET(fields, 3)) {
77258 log_packet_detailed(" got field 'alternatives_count'");
77259
77260#ifdef FREECIV_JSON_CONNECTION
77261 field_addr.name = "alternatives_count";
77262#endif /* FREECIV_JSON_CONNECTION */
77263
77264 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77265 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77266 }
77267 }
77268
77269 if (BV_ISSET(fields, 4)) {
77270 log_packet_detailed(" got field 'alternatives'");
77271
77272#ifdef FREECIV_JSON_CONNECTION
77273 field_addr.name = "alternatives";
77274#endif /* FREECIV_JSON_CONNECTION */
77275
77276 {
77277 int i;
77278
77279 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77280 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77281 }
77282
77283#ifdef FREECIV_JSON_CONNECTION
77284 /* Enter array. */
77285 field_addr.sub_location = plocation_elem_new(0);
77286#endif /* FREECIV_JSON_CONNECTION */
77287
77288 for (i = 0; i < real_packet->alternatives_count; i++) {
77289#ifdef FREECIV_JSON_CONNECTION
77290 /* Next array element */
77291 field_addr.sub_location->number = i;
77292#endif /* FREECIV_JSON_CONNECTION */
77293
77294 {
77295 int readin;
77296
77297 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77298 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77299 }
77300 real_packet->alternatives[i] = readin;
77301 }
77302 }
77303
77304#ifdef FREECIV_JSON_CONNECTION
77305 /* Exit array. */
77306 FC_FREE(field_addr.sub_location);
77307#endif /* FREECIV_JSON_CONNECTION */
77308 }
77309 }
77310
77311 if (nullptr == old) {
77312 old = fc_malloc(sizeof(*old));
77314 old->id = real_packet->id;
77315 old->cause = real_packet->cause;
77316 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77317 old->alternatives_count = real_packet->alternatives_count;
77318 {
77319 int i;
77320
77321 for (i = 0; i < real_packet->alternatives_count; i++) {
77322 old->alternatives[i] = real_packet->alternatives[i];
77323 }
77324 }
77326 } else {
77327 old->id = real_packet->id;
77328 old->cause = real_packet->cause;
77329 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77330 old->alternatives_count = real_packet->alternatives_count;
77331 {
77332 int i;
77333
77334 for (i = 0; i < real_packet->alternatives_count; i++) {
77335 old->alternatives[i] = real_packet->alternatives[i];
77336 }
77337 }
77338 }
77339
77340#else /* FREECIV_DELTA_PROTOCOL */
77341#ifdef FREECIV_JSON_CONNECTION
77342 field_addr.name = "id";
77343#endif /* FREECIV_JSON_CONNECTION */
77344
77345 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77347 }
77348
77349#ifdef FREECIV_JSON_CONNECTION
77350 field_addr.name = "cause";
77351#endif /* FREECIV_JSON_CONNECTION */
77352
77353 {
77354 int readin;
77355
77356 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77358 }
77359 real_packet->cause = readin;
77360 }
77361
77362#ifdef FREECIV_JSON_CONNECTION
77363 field_addr.name = "reqs";
77364#endif /* FREECIV_JSON_CONNECTION */
77365
77366 {
77367 int i;
77368
77369 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77371 }
77373
77374#ifdef FREECIV_JSON_CONNECTION
77375 /* Enter array. */
77376 field_addr.sub_location = plocation_elem_new(0);
77377#endif /* FREECIV_JSON_CONNECTION */
77378
77379 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77380#ifdef FREECIV_JSON_CONNECTION
77381 /* Next array element */
77382 field_addr.sub_location->number = i;
77383#endif /* FREECIV_JSON_CONNECTION */
77384
77385 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77387 }
77388 }
77389
77390#ifdef FREECIV_JSON_CONNECTION
77391 /* Exit array. */
77392 FC_FREE(field_addr.sub_location);
77393#endif /* FREECIV_JSON_CONNECTION */
77394 }
77395
77396#ifdef FREECIV_JSON_CONNECTION
77397 field_addr.name = "alternatives_count";
77398#endif /* FREECIV_JSON_CONNECTION */
77399
77400 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77401 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77402 }
77403
77404#ifdef FREECIV_JSON_CONNECTION
77405 field_addr.name = "alternatives";
77406#endif /* FREECIV_JSON_CONNECTION */
77407
77408 {
77409 int i;
77410
77411 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77412 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77413 }
77414
77415#ifdef FREECIV_JSON_CONNECTION
77416 /* Enter array. */
77417 field_addr.sub_location = plocation_elem_new(0);
77418#endif /* FREECIV_JSON_CONNECTION */
77419
77420 for (i = 0; i < real_packet->alternatives_count; i++) {
77421#ifdef FREECIV_JSON_CONNECTION
77422 /* Next array element */
77423 field_addr.sub_location->number = i;
77424#endif /* FREECIV_JSON_CONNECTION */
77425
77426 {
77427 int readin;
77428
77429 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77430 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77431 }
77432 real_packet->alternatives[i] = readin;
77433 }
77434 }
77435
77436#ifdef FREECIV_JSON_CONNECTION
77437 /* Exit array. */
77438 FC_FREE(field_addr.sub_location);
77439#endif /* FREECIV_JSON_CONNECTION */
77440 }
77441#endif /* FREECIV_DELTA_PROTOCOL */
77442
77444#undef FREE_PACKET_STRUCT
77445}
77446
77448{
77449 const struct packet_ruleset_action_auto *real_packet = packet;
77450 int e;
77452
77453 log_packet_detailed("packet_ruleset_action_auto_100: sending info about ()");
77454
77455#ifdef FREECIV_DELTA_PROTOCOL
77458 bool differ;
77459 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_AUTO;
77460
77461 if (nullptr == *hash) {
77463 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77464 }
77465 BV_CLR_ALL(fields);
77466
77467 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77468 old = fc_malloc(sizeof(*old));
77469 /* temporary bitcopy just to insert correctly */
77470 *old = *real_packet;
77473 }
77474
77475 differ = (old->id != real_packet->id);
77476 if (differ) {
77477 BV_SET(fields, 0);
77478 }
77479
77480 differ = (old->cause != real_packet->cause);
77481 if (differ) {
77482 BV_SET(fields, 1);
77483 }
77484
77486 if (!differ) {
77487 int i;
77488
77489 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
77490 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
77491 if (differ) {
77492 break;
77493 }
77494 }
77495 }
77496 if (differ) {
77497 BV_SET(fields, 2);
77498 }
77499
77500 differ = (old->alternatives_count != real_packet->alternatives_count);
77501 if (differ) {
77502 BV_SET(fields, 3);
77503 }
77504
77505 differ = (old->alternatives_count != real_packet->alternatives_count);
77506 if (!differ) {
77507 int i;
77508
77509 for (i = 0; i < old->alternatives_count; i++) {
77510 differ = (old->alternatives[i] != real_packet->alternatives[i]);
77511 if (differ) {
77512 break;
77513 }
77514 }
77515 }
77516 if (differ) {
77517 BV_SET(fields, 4);
77518 }
77519#endif /* FREECIV_DELTA_PROTOCOL */
77520
77521#ifdef FREECIV_JSON_CONNECTION
77522 struct plocation field_addr;
77523 {
77524 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77527 }
77528#endif /* FREECIV_JSON_CONNECTION */
77529
77530#ifdef FREECIV_DELTA_PROTOCOL
77531#ifdef FREECIV_JSON_CONNECTION
77532 field_addr.name = "fields";
77533#endif /* FREECIV_JSON_CONNECTION */
77534 e = 0;
77535 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77536 if (e) {
77537 log_packet_detailed("fields bitvector error detected");
77538 }
77539
77540 if (BV_ISSET(fields, 0)) {
77541 log_packet_detailed(" field 'id' has changed");
77542
77543#ifdef FREECIV_JSON_CONNECTION
77544 field_addr.name = "id";
77545#endif /* FREECIV_JSON_CONNECTION */
77546 e = 0;
77547
77548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
77549
77550 if (e) {
77551 log_packet_detailed("'id' field error detected");
77552 }
77553 }
77554
77555 if (BV_ISSET(fields, 1)) {
77556 log_packet_detailed(" field 'cause' has changed");
77557
77558#ifdef FREECIV_JSON_CONNECTION
77559 field_addr.name = "cause";
77560#endif /* FREECIV_JSON_CONNECTION */
77561 e = 0;
77562
77563 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
77564
77565 if (e) {
77566 log_packet_detailed("'cause' field error detected");
77567 }
77568 }
77569
77570 if (BV_ISSET(fields, 2)) {
77571 log_packet_detailed(" field 'reqs' has changed");
77572
77573#ifdef FREECIV_JSON_CONNECTION
77574 field_addr.name = "reqs";
77575#endif /* FREECIV_JSON_CONNECTION */
77576 e = 0;
77577
77578 {
77579 int i;
77580
77583
77584#ifdef FREECIV_JSON_CONNECTION
77585 /* Enter array. */
77586 field_addr.sub_location = plocation_elem_new(0);
77587#endif /* FREECIV_JSON_CONNECTION */
77588
77589 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77590#ifdef FREECIV_JSON_CONNECTION
77591 /* Next array element. */
77592 field_addr.sub_location->number = i;
77593#endif /* FREECIV_JSON_CONNECTION */
77594
77595 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
77596 }
77597
77598#ifdef FREECIV_JSON_CONNECTION
77599 /* Exit array. */
77600 FC_FREE(field_addr.sub_location);
77601#endif /* FREECIV_JSON_CONNECTION */
77602 }
77603
77604 if (e) {
77605 log_packet_detailed("'reqs' field error detected");
77606 }
77607 }
77608
77609 if (BV_ISSET(fields, 3)) {
77610 log_packet_detailed(" field 'alternatives_count' has changed");
77611
77612#ifdef FREECIV_JSON_CONNECTION
77613 field_addr.name = "alternatives_count";
77614#endif /* FREECIV_JSON_CONNECTION */
77615 e = 0;
77616
77617 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
77618
77619 if (e) {
77620 log_packet_detailed("'alternatives_count' field error detected");
77621 }
77622 }
77623
77624 if (BV_ISSET(fields, 4)) {
77625 log_packet_detailed(" field 'alternatives' has changed");
77626
77627#ifdef FREECIV_JSON_CONNECTION
77628 field_addr.name = "alternatives";
77629#endif /* FREECIV_JSON_CONNECTION */
77630 e = 0;
77631
77632 {
77633 int i;
77634
77635#ifdef FREECIV_JSON_CONNECTION
77636 /* Create the array. */
77637 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
77638
77639 /* Enter array. */
77640 field_addr.sub_location = plocation_elem_new(0);
77641#endif /* FREECIV_JSON_CONNECTION */
77642
77643 for (i = 0; i < real_packet->alternatives_count; i++) {
77644#ifdef FREECIV_JSON_CONNECTION
77645 /* Next array element. */
77646 field_addr.sub_location->number = i;
77647#endif /* FREECIV_JSON_CONNECTION */
77648
77649 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
77650 }
77651
77652#ifdef FREECIV_JSON_CONNECTION
77653 /* Exit array. */
77654 FC_FREE(field_addr.sub_location);
77655#endif /* FREECIV_JSON_CONNECTION */
77656 }
77657
77658 if (e) {
77659 log_packet_detailed("'alternatives' field error detected");
77660 }
77661 }
77662
77663 old->id = real_packet->id;
77664 old->cause = real_packet->cause;
77665 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77666 old->alternatives_count = real_packet->alternatives_count;
77667 {
77668 int i;
77669
77670 for (i = 0; i < real_packet->alternatives_count; i++) {
77671 old->alternatives[i] = real_packet->alternatives[i];
77672 }
77673 }
77674
77675#else /* FREECIV_DELTA_PROTOCOL */
77676#ifdef FREECIV_JSON_CONNECTION
77677 field_addr.name = "id";
77678#endif /* FREECIV_JSON_CONNECTION */
77679 e = 0;
77680
77681 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
77682
77683 if (e) {
77684 log_packet_detailed("'id' field error detected");
77685 }
77686
77687#ifdef FREECIV_JSON_CONNECTION
77688 field_addr.name = "cause";
77689#endif /* FREECIV_JSON_CONNECTION */
77690 e = 0;
77691
77692 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
77693
77694 if (e) {
77695 log_packet_detailed("'cause' field error detected");
77696 }
77697
77698#ifdef FREECIV_JSON_CONNECTION
77699 field_addr.name = "reqs";
77700#endif /* FREECIV_JSON_CONNECTION */
77701 e = 0;
77702
77703 {
77704 int i;
77705
77708
77709#ifdef FREECIV_JSON_CONNECTION
77710 /* Enter array. */
77711 field_addr.sub_location = plocation_elem_new(0);
77712#endif /* FREECIV_JSON_CONNECTION */
77713
77714 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77715#ifdef FREECIV_JSON_CONNECTION
77716 /* Next array element. */
77717 field_addr.sub_location->number = i;
77718#endif /* FREECIV_JSON_CONNECTION */
77719
77720 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
77721 }
77722
77723#ifdef FREECIV_JSON_CONNECTION
77724 /* Exit array. */
77725 FC_FREE(field_addr.sub_location);
77726#endif /* FREECIV_JSON_CONNECTION */
77727 }
77728
77729 if (e) {
77730 log_packet_detailed("'reqs' field error detected");
77731 }
77732
77733#ifdef FREECIV_JSON_CONNECTION
77734 field_addr.name = "alternatives_count";
77735#endif /* FREECIV_JSON_CONNECTION */
77736 e = 0;
77737
77738 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
77739
77740 if (e) {
77741 log_packet_detailed("'alternatives_count' field error detected");
77742 }
77743
77744#ifdef FREECIV_JSON_CONNECTION
77745 field_addr.name = "alternatives";
77746#endif /* FREECIV_JSON_CONNECTION */
77747 e = 0;
77748
77749 {
77750 int i;
77751
77752#ifdef FREECIV_JSON_CONNECTION
77753 /* Create the array. */
77754 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
77755
77756 /* Enter array. */
77757 field_addr.sub_location = plocation_elem_new(0);
77758#endif /* FREECIV_JSON_CONNECTION */
77759
77760 for (i = 0; i < real_packet->alternatives_count; i++) {
77761#ifdef FREECIV_JSON_CONNECTION
77762 /* Next array element. */
77763 field_addr.sub_location->number = i;
77764#endif /* FREECIV_JSON_CONNECTION */
77765
77766 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
77767 }
77768
77769#ifdef FREECIV_JSON_CONNECTION
77770 /* Exit array. */
77771 FC_FREE(field_addr.sub_location);
77772#endif /* FREECIV_JSON_CONNECTION */
77773 }
77774
77775 if (e) {
77776 log_packet_detailed("'alternatives' field error detected");
77777 }
77778#endif /* FREECIV_DELTA_PROTOCOL */
77779
77781}
77782
77784{
77785 if (!pc->used) {
77786 log_error("WARNING: trying to send data to the closed connection %s",
77788 return -1;
77789 }
77790 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet != nullptr, -1,
77791 "Handler for PACKET_RULESET_ACTION_AUTO not installed");
77792 return pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet(pc, packet);
77793}
77794
77796{
77797 conn_list_iterate(dest, pconn) {
77800}
77801
77802static inline void init_packet_ruleset_counter(struct packet_ruleset_counter *packet)
77803{
77804 memset(packet, 0, sizeof(*packet));
77805
77806 packet->helptext = strvec_new();
77807}
77808
77809static inline void free_packet_ruleset_counter(struct packet_ruleset_counter *packet)
77810{
77811 if (packet->helptext) {
77812 strvec_destroy(packet->helptext);
77813 packet->helptext = nullptr;
77814 }
77815}
77816
77817static inline void destroy_packet_ruleset_counter(void *packet)
77818{
77820 free(packet);
77821}
77822
77823#ifdef FREECIV_DELTA_PROTOCOL
77824#define hash_packet_ruleset_counter_100 hash_const
77825#define cmp_packet_ruleset_counter_100 cmp_const
77827#endif /* FREECIV_DELTA_PROTOCOL */
77828
77830{
77831#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_counter(_packet)
77833
77834#ifdef FREECIV_JSON_CONNECTION
77835 struct plocation field_addr;
77836 {
77837 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77840 }
77841#endif /* FREECIV_JSON_CONNECTION */
77842
77843 log_packet_detailed("packet_ruleset_counter_100: got info about ()");
77844
77845#ifdef FREECIV_DELTA_PROTOCOL
77848 struct genhash **hash = pc->phs.received + PACKET_RULESET_COUNTER;
77849
77850 if (nullptr == *hash) {
77852 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
77853 }
77854
77855 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77856 sz_strlcpy(real_packet->name, old->name);
77857 sz_strlcpy(real_packet->rule_name, old->rule_name);
77858 if (old->helptext) {
77859 strvec_copy(real_packet->helptext, old->helptext);
77860 } else {
77861 strvec_clear(real_packet->helptext);
77862 }
77863 real_packet->def = old->def;
77864 real_packet->checkpoint = old->checkpoint;
77865 real_packet->type = old->type;
77866 real_packet->behavior = old->behavior;
77867 } else {
77868 /* packet is already initialized empty */
77869 log_packet_detailed(" no old info");
77870 }
77871
77872#ifdef FREECIV_JSON_CONNECTION
77873 field_addr.name = "fields";
77874#endif /* FREECIV_JSON_CONNECTION */
77875 DIO_BV_GET(&din, &field_addr, fields);
77876
77877 if (BV_ISSET(fields, 0)) {
77878 log_packet_detailed(" got field 'name'");
77879
77880#ifdef FREECIV_JSON_CONNECTION
77881 field_addr.name = "name";
77882#endif /* FREECIV_JSON_CONNECTION */
77883
77884 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
77886 }
77887 }
77888
77889 if (BV_ISSET(fields, 1)) {
77890 log_packet_detailed(" got field 'rule_name'");
77891
77892#ifdef FREECIV_JSON_CONNECTION
77893 field_addr.name = "rule_name";
77894#endif /* FREECIV_JSON_CONNECTION */
77895
77896 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
77897 RECEIVE_PACKET_FIELD_ERROR(rule_name);
77898 }
77899 }
77900
77901 if (BV_ISSET(fields, 2)) {
77902 log_packet_detailed(" got field 'helptext'");
77903
77904#ifdef FREECIV_JSON_CONNECTION
77905 field_addr.name = "helptext";
77906#endif /* FREECIV_JSON_CONNECTION */
77907
77908 {
77909 int i;
77910
77911 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77913 }
77914 strvec_reserve(real_packet->helptext, i);
77915
77916#ifdef FREECIV_JSON_CONNECTION
77917 /* Enter array. */
77918 field_addr.sub_location = plocation_elem_new(0);
77919#endif /* FREECIV_JSON_CONNECTION */
77920
77921 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
77922#ifdef FREECIV_JSON_CONNECTION
77923 /* Next array element */
77924 field_addr.sub_location->number = i;
77925#endif /* FREECIV_JSON_CONNECTION */
77926
77927 {
77928 char readin[MAX_LEN_PACKET];
77929
77930 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
77931 || !strvec_set(real_packet->helptext, i, readin)) {
77933 }
77934 }
77935 }
77936
77937#ifdef FREECIV_JSON_CONNECTION
77938 /* Exit array. */
77939 FC_FREE(field_addr.sub_location);
77940#endif /* FREECIV_JSON_CONNECTION */
77941 }
77942 }
77943
77944 if (BV_ISSET(fields, 3)) {
77945 log_packet_detailed(" got field 'def'");
77946
77947#ifdef FREECIV_JSON_CONNECTION
77948 field_addr.name = "def";
77949#endif /* FREECIV_JSON_CONNECTION */
77950
77951 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
77953 }
77954 }
77955
77956 if (BV_ISSET(fields, 4)) {
77957 log_packet_detailed(" got field 'checkpoint'");
77958
77959#ifdef FREECIV_JSON_CONNECTION
77960 field_addr.name = "checkpoint";
77961#endif /* FREECIV_JSON_CONNECTION */
77962
77963 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
77964 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
77965 }
77966 }
77967
77968 if (BV_ISSET(fields, 5)) {
77969 log_packet_detailed(" got field 'type'");
77970
77971#ifdef FREECIV_JSON_CONNECTION
77972 field_addr.name = "type";
77973#endif /* FREECIV_JSON_CONNECTION */
77974
77975 {
77976 int readin;
77977
77978 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77980 }
77981 real_packet->type = readin;
77982 }
77983 }
77984
77985 if (BV_ISSET(fields, 6)) {
77986 log_packet_detailed(" got field 'behavior'");
77987
77988#ifdef FREECIV_JSON_CONNECTION
77989 field_addr.name = "behavior";
77990#endif /* FREECIV_JSON_CONNECTION */
77991
77992 {
77993 int readin;
77994
77995 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77997 }
77998 real_packet->behavior = readin;
77999 }
78000 }
78001
78002 if (nullptr == old) {
78003 old = fc_malloc(sizeof(*old));
78005 sz_strlcpy(old->name, real_packet->name);
78006 sz_strlcpy(old->rule_name, real_packet->rule_name);
78007 if (real_packet->helptext) {
78008 strvec_copy(old->helptext, real_packet->helptext);
78009 } else {
78010 strvec_clear(old->helptext);
78011 }
78012 old->def = real_packet->def;
78013 old->checkpoint = real_packet->checkpoint;
78014 old->type = real_packet->type;
78015 old->behavior = real_packet->behavior;
78017 } else {
78018 sz_strlcpy(old->name, real_packet->name);
78019 sz_strlcpy(old->rule_name, real_packet->rule_name);
78020 if (real_packet->helptext) {
78021 strvec_copy(old->helptext, real_packet->helptext);
78022 } else {
78023 strvec_clear(old->helptext);
78024 }
78025 old->def = real_packet->def;
78026 old->checkpoint = real_packet->checkpoint;
78027 old->type = real_packet->type;
78028 old->behavior = real_packet->behavior;
78029 }
78030
78031#else /* FREECIV_DELTA_PROTOCOL */
78032#ifdef FREECIV_JSON_CONNECTION
78033 field_addr.name = "name";
78034#endif /* FREECIV_JSON_CONNECTION */
78035
78036 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
78038 }
78039
78040#ifdef FREECIV_JSON_CONNECTION
78041 field_addr.name = "rule_name";
78042#endif /* FREECIV_JSON_CONNECTION */
78043
78044 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
78045 RECEIVE_PACKET_FIELD_ERROR(rule_name);
78046 }
78047
78048#ifdef FREECIV_JSON_CONNECTION
78049 field_addr.name = "helptext";
78050#endif /* FREECIV_JSON_CONNECTION */
78051
78052 {
78053 int i;
78054
78055 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78057 }
78058 strvec_reserve(real_packet->helptext, i);
78059
78060#ifdef FREECIV_JSON_CONNECTION
78061 /* Enter array. */
78062 field_addr.sub_location = plocation_elem_new(0);
78063#endif /* FREECIV_JSON_CONNECTION */
78064
78065 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78066#ifdef FREECIV_JSON_CONNECTION
78067 /* Next array element */
78068 field_addr.sub_location->number = i;
78069#endif /* FREECIV_JSON_CONNECTION */
78070
78071 {
78072 char readin[MAX_LEN_PACKET];
78073
78074 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
78075 || !strvec_set(real_packet->helptext, i, readin)) {
78077 }
78078 }
78079 }
78080
78081#ifdef FREECIV_JSON_CONNECTION
78082 /* Exit array. */
78083 FC_FREE(field_addr.sub_location);
78084#endif /* FREECIV_JSON_CONNECTION */
78085 }
78086
78087#ifdef FREECIV_JSON_CONNECTION
78088 field_addr.name = "def";
78089#endif /* FREECIV_JSON_CONNECTION */
78090
78091 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
78093 }
78094
78095#ifdef FREECIV_JSON_CONNECTION
78096 field_addr.name = "checkpoint";
78097#endif /* FREECIV_JSON_CONNECTION */
78098
78099 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
78100 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
78101 }
78102
78103#ifdef FREECIV_JSON_CONNECTION
78104 field_addr.name = "type";
78105#endif /* FREECIV_JSON_CONNECTION */
78106
78107 {
78108 int readin;
78109
78110 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78112 }
78113 real_packet->type = readin;
78114 }
78115
78116#ifdef FREECIV_JSON_CONNECTION
78117 field_addr.name = "behavior";
78118#endif /* FREECIV_JSON_CONNECTION */
78119
78120 {
78121 int readin;
78122
78123 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78125 }
78126 real_packet->behavior = readin;
78127 }
78128#endif /* FREECIV_DELTA_PROTOCOL */
78129
78131#undef FREE_PACKET_STRUCT
78132}
78133
78135{
78136 const struct packet_ruleset_counter *real_packet = packet;
78137 int e;
78139
78140 log_packet_detailed("packet_ruleset_counter_100: sending info about ()");
78141
78142#ifdef FREECIV_DELTA_PROTOCOL
78145 bool differ;
78146 struct genhash **hash = pc->phs.sent + PACKET_RULESET_COUNTER;
78147
78148 if (nullptr == *hash) {
78150 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
78151 }
78152 BV_CLR_ALL(fields);
78153
78154 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78155 old = fc_malloc(sizeof(*old));
78156 /* temporary bitcopy just to insert correctly */
78157 *old = *real_packet;
78160 }
78161
78162 differ = (strcmp(old->name, real_packet->name) != 0);
78163 if (differ) {
78164 BV_SET(fields, 0);
78165 }
78166
78167 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
78168 if (differ) {
78169 BV_SET(fields, 1);
78170 }
78171
78172 if (real_packet->helptext) {
78173 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
78174 } else {
78175 differ = (strvec_size(old->helptext) > 0);
78176 }
78177 if (differ) {
78178 BV_SET(fields, 2);
78179 }
78180
78181 differ = (old->def != real_packet->def);
78182 if (differ) {
78183 BV_SET(fields, 3);
78184 }
78185
78186 differ = (old->checkpoint != real_packet->checkpoint);
78187 if (differ) {
78188 BV_SET(fields, 4);
78189 }
78190
78191 differ = (old->type != real_packet->type);
78192 if (differ) {
78193 BV_SET(fields, 5);
78194 }
78195
78196 differ = (old->behavior != real_packet->behavior);
78197 if (differ) {
78198 BV_SET(fields, 6);
78199 }
78200#endif /* FREECIV_DELTA_PROTOCOL */
78201
78202#ifdef FREECIV_JSON_CONNECTION
78203 struct plocation field_addr;
78204 {
78205 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78208 }
78209#endif /* FREECIV_JSON_CONNECTION */
78210
78211#ifdef FREECIV_DELTA_PROTOCOL
78212#ifdef FREECIV_JSON_CONNECTION
78213 field_addr.name = "fields";
78214#endif /* FREECIV_JSON_CONNECTION */
78215 e = 0;
78216 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78217 if (e) {
78218 log_packet_detailed("fields bitvector error detected");
78219 }
78220
78221 if (BV_ISSET(fields, 0)) {
78222 log_packet_detailed(" field 'name' has changed");
78223
78224#ifdef FREECIV_JSON_CONNECTION
78225 field_addr.name = "name";
78226#endif /* FREECIV_JSON_CONNECTION */
78227 e = 0;
78228
78229 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78230
78231 if (e) {
78232 log_packet_detailed("'name' field error detected");
78233 }
78234 }
78235
78236 if (BV_ISSET(fields, 1)) {
78237 log_packet_detailed(" field 'rule_name' has changed");
78238
78239#ifdef FREECIV_JSON_CONNECTION
78240 field_addr.name = "rule_name";
78241#endif /* FREECIV_JSON_CONNECTION */
78242 e = 0;
78243
78244 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78245
78246 if (e) {
78247 log_packet_detailed("'rule_name' field error detected");
78248 }
78249 }
78250
78251 if (BV_ISSET(fields, 2)) {
78252 log_packet_detailed(" field 'helptext' has changed");
78253
78254#ifdef FREECIV_JSON_CONNECTION
78255 field_addr.name = "helptext";
78256#endif /* FREECIV_JSON_CONNECTION */
78257 e = 0;
78258
78259 if (!real_packet->helptext) {
78260 /* Transmit null as empty */
78261 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78262 } else {
78263 int i;
78264
78266 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78267
78268#ifdef FREECIV_JSON_CONNECTION
78269 /* Enter array. */
78270 field_addr.sub_location = plocation_elem_new(0);
78271#endif /* FREECIV_JSON_CONNECTION */
78272
78273 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78274#ifdef FREECIV_JSON_CONNECTION
78275 /* Next array element. */
78276 field_addr.sub_location->number = i;
78277#endif /* FREECIV_JSON_CONNECTION */
78278
78279 {
78280 const char *pstr = strvec_get(real_packet->helptext, i);
78281
78282 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78283 }
78284 }
78285
78286#ifdef FREECIV_JSON_CONNECTION
78287 /* Exit array. */
78288 FC_FREE(field_addr.sub_location);
78289#endif /* FREECIV_JSON_CONNECTION */
78290 }
78291
78292 if (e) {
78293 log_packet_detailed("'helptext' field error detected");
78294 }
78295 }
78296
78297 if (BV_ISSET(fields, 3)) {
78298 log_packet_detailed(" field 'def' has changed");
78299
78300#ifdef FREECIV_JSON_CONNECTION
78301 field_addr.name = "def";
78302#endif /* FREECIV_JSON_CONNECTION */
78303 e = 0;
78304
78305 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78306
78307 if (e) {
78308 log_packet_detailed("'def' field error detected");
78309 }
78310 }
78311
78312 if (BV_ISSET(fields, 4)) {
78313 log_packet_detailed(" field 'checkpoint' has changed");
78314
78315#ifdef FREECIV_JSON_CONNECTION
78316 field_addr.name = "checkpoint";
78317#endif /* FREECIV_JSON_CONNECTION */
78318 e = 0;
78319
78320 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78321
78322 if (e) {
78323 log_packet_detailed("'checkpoint' field error detected");
78324 }
78325 }
78326
78327 if (BV_ISSET(fields, 5)) {
78328 log_packet_detailed(" field 'type' has changed");
78329
78330#ifdef FREECIV_JSON_CONNECTION
78331 field_addr.name = "type";
78332#endif /* FREECIV_JSON_CONNECTION */
78333 e = 0;
78334
78335 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78336
78337 if (e) {
78338 log_packet_detailed("'type' field error detected");
78339 }
78340 }
78341
78342 if (BV_ISSET(fields, 6)) {
78343 log_packet_detailed(" field 'behavior' has changed");
78344
78345#ifdef FREECIV_JSON_CONNECTION
78346 field_addr.name = "behavior";
78347#endif /* FREECIV_JSON_CONNECTION */
78348 e = 0;
78349
78350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78351
78352 if (e) {
78353 log_packet_detailed("'behavior' field error detected");
78354 }
78355 }
78356
78357 sz_strlcpy(old->name, real_packet->name);
78358 sz_strlcpy(old->rule_name, real_packet->rule_name);
78359 if (real_packet->helptext) {
78360 strvec_copy(old->helptext, real_packet->helptext);
78361 } else {
78362 strvec_clear(old->helptext);
78363 }
78364 old->def = real_packet->def;
78365 old->checkpoint = real_packet->checkpoint;
78366 old->type = real_packet->type;
78367 old->behavior = real_packet->behavior;
78368
78369#else /* FREECIV_DELTA_PROTOCOL */
78370#ifdef FREECIV_JSON_CONNECTION
78371 field_addr.name = "name";
78372#endif /* FREECIV_JSON_CONNECTION */
78373 e = 0;
78374
78375 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78376
78377 if (e) {
78378 log_packet_detailed("'name' field error detected");
78379 }
78380
78381#ifdef FREECIV_JSON_CONNECTION
78382 field_addr.name = "rule_name";
78383#endif /* FREECIV_JSON_CONNECTION */
78384 e = 0;
78385
78386 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78387
78388 if (e) {
78389 log_packet_detailed("'rule_name' field error detected");
78390 }
78391
78392#ifdef FREECIV_JSON_CONNECTION
78393 field_addr.name = "helptext";
78394#endif /* FREECIV_JSON_CONNECTION */
78395 e = 0;
78396
78397 if (!real_packet->helptext) {
78398 /* Transmit null as empty */
78399 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78400 } else {
78401 int i;
78402
78404 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78405
78406#ifdef FREECIV_JSON_CONNECTION
78407 /* Enter array. */
78408 field_addr.sub_location = plocation_elem_new(0);
78409#endif /* FREECIV_JSON_CONNECTION */
78410
78411 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78412#ifdef FREECIV_JSON_CONNECTION
78413 /* Next array element. */
78414 field_addr.sub_location->number = i;
78415#endif /* FREECIV_JSON_CONNECTION */
78416
78417 {
78418 const char *pstr = strvec_get(real_packet->helptext, i);
78419
78420 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78421 }
78422 }
78423
78424#ifdef FREECIV_JSON_CONNECTION
78425 /* Exit array. */
78426 FC_FREE(field_addr.sub_location);
78427#endif /* FREECIV_JSON_CONNECTION */
78428 }
78429
78430 if (e) {
78431 log_packet_detailed("'helptext' field error detected");
78432 }
78433
78434#ifdef FREECIV_JSON_CONNECTION
78435 field_addr.name = "def";
78436#endif /* FREECIV_JSON_CONNECTION */
78437 e = 0;
78438
78439 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78440
78441 if (e) {
78442 log_packet_detailed("'def' field error detected");
78443 }
78444
78445#ifdef FREECIV_JSON_CONNECTION
78446 field_addr.name = "checkpoint";
78447#endif /* FREECIV_JSON_CONNECTION */
78448 e = 0;
78449
78450 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78451
78452 if (e) {
78453 log_packet_detailed("'checkpoint' field error detected");
78454 }
78455
78456#ifdef FREECIV_JSON_CONNECTION
78457 field_addr.name = "type";
78458#endif /* FREECIV_JSON_CONNECTION */
78459 e = 0;
78460
78461 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78462
78463 if (e) {
78464 log_packet_detailed("'type' field error detected");
78465 }
78466
78467#ifdef FREECIV_JSON_CONNECTION
78468 field_addr.name = "behavior";
78469#endif /* FREECIV_JSON_CONNECTION */
78470 e = 0;
78471
78472 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78473
78474 if (e) {
78475 log_packet_detailed("'behavior' field error detected");
78476 }
78477#endif /* FREECIV_DELTA_PROTOCOL */
78478
78480}
78481
78483{
78484 if (!pc->used) {
78485 log_error("WARNING: trying to send data to the closed connection %s",
78487 return -1;
78488 }
78489 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet != nullptr, -1,
78490 "Handler for PACKET_RULESET_COUNTER not installed");
78491 return pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet(pc, packet);
78492}
78493
78494void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
78495{
78496 conn_list_iterate(dest, pconn) {
78499}
78500
78501static inline void init_packet_ruleset_music(struct packet_ruleset_music *packet)
78502{
78503 memset(packet, 0, sizeof(*packet));
78504
78505 requirement_vector_init(&packet->reqs);
78506}
78507
78508static inline void free_packet_ruleset_music(struct packet_ruleset_music *packet)
78509{
78510 requirement_vector_free(&packet->reqs);
78511}
78512
78513static inline void destroy_packet_ruleset_music(void *packet)
78514{
78516 free(packet);
78517}
78518
78519#ifdef FREECIV_DELTA_PROTOCOL
78520#define hash_packet_ruleset_music_100 hash_const
78521#define cmp_packet_ruleset_music_100 cmp_const
78523#endif /* FREECIV_DELTA_PROTOCOL */
78524
78526{
78527#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_music(_packet)
78529
78530#ifdef FREECIV_JSON_CONNECTION
78531 struct plocation field_addr;
78532 {
78533 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78536 }
78537#endif /* FREECIV_JSON_CONNECTION */
78538
78539 log_packet_detailed("packet_ruleset_music_100: got info about ()");
78540
78541#ifdef FREECIV_DELTA_PROTOCOL
78543 struct packet_ruleset_music *old;
78544 struct genhash **hash = pc->phs.received + PACKET_RULESET_MUSIC;
78545
78546 if (nullptr == *hash) {
78548 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
78549 }
78550
78551 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78552 real_packet->id = old->id;
78553 sz_strlcpy(real_packet->music_peaceful, old->music_peaceful);
78554 sz_strlcpy(real_packet->music_combat, old->music_combat);
78555 requirement_vector_copy(&real_packet->reqs, &old->reqs);
78556 } else {
78557 /* packet is already initialized empty */
78558 log_packet_detailed(" no old info");
78559 }
78560
78561#ifdef FREECIV_JSON_CONNECTION
78562 field_addr.name = "fields";
78563#endif /* FREECIV_JSON_CONNECTION */
78564 DIO_BV_GET(&din, &field_addr, fields);
78565
78566 if (BV_ISSET(fields, 0)) {
78567 log_packet_detailed(" got field 'id'");
78568
78569#ifdef FREECIV_JSON_CONNECTION
78570 field_addr.name = "id";
78571#endif /* FREECIV_JSON_CONNECTION */
78572
78573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
78575 }
78576 }
78577
78578 if (BV_ISSET(fields, 1)) {
78579 log_packet_detailed(" got field 'music_peaceful'");
78580
78581#ifdef FREECIV_JSON_CONNECTION
78582 field_addr.name = "music_peaceful";
78583#endif /* FREECIV_JSON_CONNECTION */
78584
78585 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
78586 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
78587 }
78588 }
78589
78590 if (BV_ISSET(fields, 2)) {
78591 log_packet_detailed(" got field 'music_combat'");
78592
78593#ifdef FREECIV_JSON_CONNECTION
78594 field_addr.name = "music_combat";
78595#endif /* FREECIV_JSON_CONNECTION */
78596
78597 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
78598 RECEIVE_PACKET_FIELD_ERROR(music_combat);
78599 }
78600 }
78601
78602 if (BV_ISSET(fields, 3)) {
78603 log_packet_detailed(" got field 'reqs'");
78604
78605#ifdef FREECIV_JSON_CONNECTION
78606 field_addr.name = "reqs";
78607#endif /* FREECIV_JSON_CONNECTION */
78608
78609 {
78610 int i;
78611
78612 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78614 }
78616
78617#ifdef FREECIV_JSON_CONNECTION
78618 /* Enter array. */
78619 field_addr.sub_location = plocation_elem_new(0);
78620#endif /* FREECIV_JSON_CONNECTION */
78621
78622 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78623#ifdef FREECIV_JSON_CONNECTION
78624 /* Next array element */
78625 field_addr.sub_location->number = i;
78626#endif /* FREECIV_JSON_CONNECTION */
78627
78628 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
78630 }
78631 }
78632
78633#ifdef FREECIV_JSON_CONNECTION
78634 /* Exit array. */
78635 FC_FREE(field_addr.sub_location);
78636#endif /* FREECIV_JSON_CONNECTION */
78637 }
78638 }
78639
78640 if (nullptr == old) {
78641 old = fc_malloc(sizeof(*old));
78643 old->id = real_packet->id;
78644 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78645 sz_strlcpy(old->music_combat, real_packet->music_combat);
78646 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78648 } else {
78649 old->id = real_packet->id;
78650 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78651 sz_strlcpy(old->music_combat, real_packet->music_combat);
78652 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78653 }
78654
78655#else /* FREECIV_DELTA_PROTOCOL */
78656#ifdef FREECIV_JSON_CONNECTION
78657 field_addr.name = "id";
78658#endif /* FREECIV_JSON_CONNECTION */
78659
78660 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
78662 }
78663
78664#ifdef FREECIV_JSON_CONNECTION
78665 field_addr.name = "music_peaceful";
78666#endif /* FREECIV_JSON_CONNECTION */
78667
78668 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
78669 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
78670 }
78671
78672#ifdef FREECIV_JSON_CONNECTION
78673 field_addr.name = "music_combat";
78674#endif /* FREECIV_JSON_CONNECTION */
78675
78676 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
78677 RECEIVE_PACKET_FIELD_ERROR(music_combat);
78678 }
78679
78680#ifdef FREECIV_JSON_CONNECTION
78681 field_addr.name = "reqs";
78682#endif /* FREECIV_JSON_CONNECTION */
78683
78684 {
78685 int i;
78686
78687 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78689 }
78691
78692#ifdef FREECIV_JSON_CONNECTION
78693 /* Enter array. */
78694 field_addr.sub_location = plocation_elem_new(0);
78695#endif /* FREECIV_JSON_CONNECTION */
78696
78697 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78698#ifdef FREECIV_JSON_CONNECTION
78699 /* Next array element */
78700 field_addr.sub_location->number = i;
78701#endif /* FREECIV_JSON_CONNECTION */
78702
78703 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
78705 }
78706 }
78707
78708#ifdef FREECIV_JSON_CONNECTION
78709 /* Exit array. */
78710 FC_FREE(field_addr.sub_location);
78711#endif /* FREECIV_JSON_CONNECTION */
78712 }
78713#endif /* FREECIV_DELTA_PROTOCOL */
78714
78716#undef FREE_PACKET_STRUCT
78717}
78718
78719static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
78720{
78721 const struct packet_ruleset_music *real_packet = packet;
78722 int e;
78724
78725 log_packet_detailed("packet_ruleset_music_100: sending info about ()");
78726
78727#ifdef FREECIV_DELTA_PROTOCOL
78729 struct packet_ruleset_music *old;
78730 bool differ;
78731 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MUSIC;
78732
78733 if (nullptr == *hash) {
78735 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
78736 }
78737 BV_CLR_ALL(fields);
78738
78739 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78740 old = fc_malloc(sizeof(*old));
78741 /* temporary bitcopy just to insert correctly */
78742 *old = *real_packet;
78745 }
78746
78747 differ = (old->id != real_packet->id);
78748 if (differ) {
78749 BV_SET(fields, 0);
78750 }
78751
78752 differ = (strcmp(old->music_peaceful, real_packet->music_peaceful) != 0);
78753 if (differ) {
78754 BV_SET(fields, 1);
78755 }
78756
78757 differ = (strcmp(old->music_combat, real_packet->music_combat) != 0);
78758 if (differ) {
78759 BV_SET(fields, 2);
78760 }
78761
78763 if (!differ) {
78764 int i;
78765
78766 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
78767 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
78768 if (differ) {
78769 break;
78770 }
78771 }
78772 }
78773 if (differ) {
78774 BV_SET(fields, 3);
78775 }
78776#endif /* FREECIV_DELTA_PROTOCOL */
78777
78778#ifdef FREECIV_JSON_CONNECTION
78779 struct plocation field_addr;
78780 {
78781 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78784 }
78785#endif /* FREECIV_JSON_CONNECTION */
78786
78787#ifdef FREECIV_DELTA_PROTOCOL
78788#ifdef FREECIV_JSON_CONNECTION
78789 field_addr.name = "fields";
78790#endif /* FREECIV_JSON_CONNECTION */
78791 e = 0;
78792 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78793 if (e) {
78794 log_packet_detailed("fields bitvector error detected");
78795 }
78796
78797 if (BV_ISSET(fields, 0)) {
78798 log_packet_detailed(" field 'id' has changed");
78799
78800#ifdef FREECIV_JSON_CONNECTION
78801 field_addr.name = "id";
78802#endif /* FREECIV_JSON_CONNECTION */
78803 e = 0;
78804
78805 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78806
78807 if (e) {
78808 log_packet_detailed("'id' field error detected");
78809 }
78810 }
78811
78812 if (BV_ISSET(fields, 1)) {
78813 log_packet_detailed(" field 'music_peaceful' has changed");
78814
78815#ifdef FREECIV_JSON_CONNECTION
78816 field_addr.name = "music_peaceful";
78817#endif /* FREECIV_JSON_CONNECTION */
78818 e = 0;
78819
78820 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
78821
78822 if (e) {
78823 log_packet_detailed("'music_peaceful' field error detected");
78824 }
78825 }
78826
78827 if (BV_ISSET(fields, 2)) {
78828 log_packet_detailed(" field 'music_combat' has changed");
78829
78830#ifdef FREECIV_JSON_CONNECTION
78831 field_addr.name = "music_combat";
78832#endif /* FREECIV_JSON_CONNECTION */
78833 e = 0;
78834
78835 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
78836
78837 if (e) {
78838 log_packet_detailed("'music_combat' field error detected");
78839 }
78840 }
78841
78842 if (BV_ISSET(fields, 3)) {
78843 log_packet_detailed(" field 'reqs' has changed");
78844
78845#ifdef FREECIV_JSON_CONNECTION
78846 field_addr.name = "reqs";
78847#endif /* FREECIV_JSON_CONNECTION */
78848 e = 0;
78849
78850 {
78851 int i;
78852
78855
78856#ifdef FREECIV_JSON_CONNECTION
78857 /* Enter array. */
78858 field_addr.sub_location = plocation_elem_new(0);
78859#endif /* FREECIV_JSON_CONNECTION */
78860
78861 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78862#ifdef FREECIV_JSON_CONNECTION
78863 /* Next array element. */
78864 field_addr.sub_location->number = i;
78865#endif /* FREECIV_JSON_CONNECTION */
78866
78867 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
78868 }
78869
78870#ifdef FREECIV_JSON_CONNECTION
78871 /* Exit array. */
78872 FC_FREE(field_addr.sub_location);
78873#endif /* FREECIV_JSON_CONNECTION */
78874 }
78875
78876 if (e) {
78877 log_packet_detailed("'reqs' field error detected");
78878 }
78879 }
78880
78881 old->id = real_packet->id;
78882 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78883 sz_strlcpy(old->music_combat, real_packet->music_combat);
78884 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78885
78886#else /* FREECIV_DELTA_PROTOCOL */
78887#ifdef FREECIV_JSON_CONNECTION
78888 field_addr.name = "id";
78889#endif /* FREECIV_JSON_CONNECTION */
78890 e = 0;
78891
78892 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78893
78894 if (e) {
78895 log_packet_detailed("'id' field error detected");
78896 }
78897
78898#ifdef FREECIV_JSON_CONNECTION
78899 field_addr.name = "music_peaceful";
78900#endif /* FREECIV_JSON_CONNECTION */
78901 e = 0;
78902
78903 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
78904
78905 if (e) {
78906 log_packet_detailed("'music_peaceful' field error detected");
78907 }
78908
78909#ifdef FREECIV_JSON_CONNECTION
78910 field_addr.name = "music_combat";
78911#endif /* FREECIV_JSON_CONNECTION */
78912 e = 0;
78913
78914 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
78915
78916 if (e) {
78917 log_packet_detailed("'music_combat' field error detected");
78918 }
78919
78920#ifdef FREECIV_JSON_CONNECTION
78921 field_addr.name = "reqs";
78922#endif /* FREECIV_JSON_CONNECTION */
78923 e = 0;
78924
78925 {
78926 int i;
78927
78930
78931#ifdef FREECIV_JSON_CONNECTION
78932 /* Enter array. */
78933 field_addr.sub_location = plocation_elem_new(0);
78934#endif /* FREECIV_JSON_CONNECTION */
78935
78936 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78937#ifdef FREECIV_JSON_CONNECTION
78938 /* Next array element. */
78939 field_addr.sub_location->number = i;
78940#endif /* FREECIV_JSON_CONNECTION */
78941
78942 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
78943 }
78944
78945#ifdef FREECIV_JSON_CONNECTION
78946 /* Exit array. */
78947 FC_FREE(field_addr.sub_location);
78948#endif /* FREECIV_JSON_CONNECTION */
78949 }
78950
78951 if (e) {
78952 log_packet_detailed("'reqs' field error detected");
78953 }
78954#endif /* FREECIV_DELTA_PROTOCOL */
78955
78957}
78958
78960{
78961 if (!pc->used) {
78962 log_error("WARNING: trying to send data to the closed connection %s",
78964 return -1;
78965 }
78966 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet != nullptr, -1,
78967 "Handler for PACKET_RULESET_MUSIC not installed");
78968 return pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet(pc, packet);
78969}
78970
78971void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
78972{
78973 conn_list_iterate(dest, pconn) {
78976}
78977
78979{
78980 memset(packet, 0, sizeof(*packet));
78981
78982 requirement_vector_init(&packet->reqs);
78983 packet->helptext = strvec_new();
78984}
78985
78987{
78988 if (packet->helptext) {
78989 strvec_destroy(packet->helptext);
78990 packet->helptext = nullptr;
78991 }
78992 requirement_vector_free(&packet->reqs);
78993}
78994
78995static inline void destroy_packet_ruleset_multiplier(void *packet)
78996{
78998 free(packet);
78999}
79000
79001#ifdef FREECIV_DELTA_PROTOCOL
79002#define hash_packet_ruleset_multiplier_100 hash_const
79003#define cmp_packet_ruleset_multiplier_100 cmp_const
79005#endif /* FREECIV_DELTA_PROTOCOL */
79006
79008{
79009#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_multiplier(_packet)
79011
79012#ifdef FREECIV_JSON_CONNECTION
79013 struct plocation field_addr;
79014 {
79015 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79018 }
79019#endif /* FREECIV_JSON_CONNECTION */
79020
79021 log_packet_detailed("packet_ruleset_multiplier_100: got info about ()");
79022
79023#ifdef FREECIV_DELTA_PROTOCOL
79026 struct genhash **hash = pc->phs.received + PACKET_RULESET_MULTIPLIER;
79027
79028 if (nullptr == *hash) {
79030 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79031 }
79032
79033 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79034 real_packet->id = old->id;
79035 real_packet->start = old->start;
79036 real_packet->stop = old->stop;
79037 real_packet->step = old->step;
79038 real_packet->def = old->def;
79039 real_packet->offset = old->offset;
79040 real_packet->factor = old->factor;
79041 real_packet->minimum_turns = old->minimum_turns;
79042 sz_strlcpy(real_packet->name, old->name);
79043 sz_strlcpy(real_packet->rule_name, old->rule_name);
79044 requirement_vector_copy(&real_packet->reqs, &old->reqs);
79045 if (old->helptext) {
79046 strvec_copy(real_packet->helptext, old->helptext);
79047 } else {
79048 strvec_clear(real_packet->helptext);
79049 }
79050 } else {
79051 /* packet is already initialized empty */
79052 log_packet_detailed(" no old info");
79053 }
79054
79055#ifdef FREECIV_JSON_CONNECTION
79056 field_addr.name = "fields";
79057#endif /* FREECIV_JSON_CONNECTION */
79058 DIO_BV_GET(&din, &field_addr, fields);
79059
79060 if (BV_ISSET(fields, 0)) {
79061 log_packet_detailed(" got field 'id'");
79062
79063#ifdef FREECIV_JSON_CONNECTION
79064 field_addr.name = "id";
79065#endif /* FREECIV_JSON_CONNECTION */
79066
79067 {
79068 int readin;
79069
79070 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79072 }
79073 real_packet->id = readin;
79074 }
79075 }
79076
79077 if (BV_ISSET(fields, 1)) {
79078 log_packet_detailed(" got field 'start'");
79079
79080#ifdef FREECIV_JSON_CONNECTION
79081 field_addr.name = "start";
79082#endif /* FREECIV_JSON_CONNECTION */
79083
79084 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79086 }
79087 }
79088
79089 if (BV_ISSET(fields, 2)) {
79090 log_packet_detailed(" got field 'stop'");
79091
79092#ifdef FREECIV_JSON_CONNECTION
79093 field_addr.name = "stop";
79094#endif /* FREECIV_JSON_CONNECTION */
79095
79096 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79098 }
79099 }
79100
79101 if (BV_ISSET(fields, 3)) {
79102 log_packet_detailed(" got field 'step'");
79103
79104#ifdef FREECIV_JSON_CONNECTION
79105 field_addr.name = "step";
79106#endif /* FREECIV_JSON_CONNECTION */
79107
79108 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79110 }
79111 }
79112
79113 if (BV_ISSET(fields, 4)) {
79114 log_packet_detailed(" got field 'def'");
79115
79116#ifdef FREECIV_JSON_CONNECTION
79117 field_addr.name = "def";
79118#endif /* FREECIV_JSON_CONNECTION */
79119
79120 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79122 }
79123 }
79124
79125 if (BV_ISSET(fields, 5)) {
79126 log_packet_detailed(" got field 'offset'");
79127
79128#ifdef FREECIV_JSON_CONNECTION
79129 field_addr.name = "offset";
79130#endif /* FREECIV_JSON_CONNECTION */
79131
79132 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79134 }
79135 }
79136
79137 if (BV_ISSET(fields, 6)) {
79138 log_packet_detailed(" got field 'factor'");
79139
79140#ifdef FREECIV_JSON_CONNECTION
79141 field_addr.name = "factor";
79142#endif /* FREECIV_JSON_CONNECTION */
79143
79144 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79146 }
79147 }
79148
79149 if (BV_ISSET(fields, 7)) {
79150 log_packet_detailed(" got field 'minimum_turns'");
79151
79152#ifdef FREECIV_JSON_CONNECTION
79153 field_addr.name = "minimum_turns";
79154#endif /* FREECIV_JSON_CONNECTION */
79155
79156 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79157 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79158 }
79159 }
79160
79161 if (BV_ISSET(fields, 8)) {
79162 log_packet_detailed(" got field 'name'");
79163
79164#ifdef FREECIV_JSON_CONNECTION
79165 field_addr.name = "name";
79166#endif /* FREECIV_JSON_CONNECTION */
79167
79168 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79170 }
79171 }
79172
79173 if (BV_ISSET(fields, 9)) {
79174 log_packet_detailed(" got field 'rule_name'");
79175
79176#ifdef FREECIV_JSON_CONNECTION
79177 field_addr.name = "rule_name";
79178#endif /* FREECIV_JSON_CONNECTION */
79179
79180 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79181 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79182 }
79183 }
79184
79185 if (BV_ISSET(fields, 10)) {
79186 log_packet_detailed(" got field 'reqs'");
79187
79188#ifdef FREECIV_JSON_CONNECTION
79189 field_addr.name = "reqs";
79190#endif /* FREECIV_JSON_CONNECTION */
79191
79192 {
79193 int i;
79194
79195 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79197 }
79199
79200#ifdef FREECIV_JSON_CONNECTION
79201 /* Enter array. */
79202 field_addr.sub_location = plocation_elem_new(0);
79203#endif /* FREECIV_JSON_CONNECTION */
79204
79205 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79206#ifdef FREECIV_JSON_CONNECTION
79207 /* Next array element */
79208 field_addr.sub_location->number = i;
79209#endif /* FREECIV_JSON_CONNECTION */
79210
79211 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79213 }
79214 }
79215
79216#ifdef FREECIV_JSON_CONNECTION
79217 /* Exit array. */
79218 FC_FREE(field_addr.sub_location);
79219#endif /* FREECIV_JSON_CONNECTION */
79220 }
79221 }
79222
79223 if (BV_ISSET(fields, 11)) {
79224 log_packet_detailed(" got field 'helptext'");
79225
79226#ifdef FREECIV_JSON_CONNECTION
79227 field_addr.name = "helptext";
79228#endif /* FREECIV_JSON_CONNECTION */
79229
79230 {
79231 int i;
79232
79233 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79235 }
79236 strvec_reserve(real_packet->helptext, i);
79237
79238#ifdef FREECIV_JSON_CONNECTION
79239 /* Enter array. */
79240 field_addr.sub_location = plocation_elem_new(0);
79241#endif /* FREECIV_JSON_CONNECTION */
79242
79243 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79244#ifdef FREECIV_JSON_CONNECTION
79245 /* Next array element */
79246 field_addr.sub_location->number = i;
79247#endif /* FREECIV_JSON_CONNECTION */
79248
79249 {
79250 char readin[MAX_LEN_PACKET];
79251
79252 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79253 || !strvec_set(real_packet->helptext, i, readin)) {
79255 }
79256 }
79257 }
79258
79259#ifdef FREECIV_JSON_CONNECTION
79260 /* Exit array. */
79261 FC_FREE(field_addr.sub_location);
79262#endif /* FREECIV_JSON_CONNECTION */
79263 }
79264 }
79265
79266 if (nullptr == old) {
79267 old = fc_malloc(sizeof(*old));
79269 old->id = real_packet->id;
79270 old->start = real_packet->start;
79271 old->stop = real_packet->stop;
79272 old->step = real_packet->step;
79273 old->def = real_packet->def;
79274 old->offset = real_packet->offset;
79275 old->factor = real_packet->factor;
79276 old->minimum_turns = real_packet->minimum_turns;
79277 sz_strlcpy(old->name, real_packet->name);
79278 sz_strlcpy(old->rule_name, real_packet->rule_name);
79279 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79280 if (real_packet->helptext) {
79281 strvec_copy(old->helptext, real_packet->helptext);
79282 } else {
79283 strvec_clear(old->helptext);
79284 }
79286 } else {
79287 old->id = real_packet->id;
79288 old->start = real_packet->start;
79289 old->stop = real_packet->stop;
79290 old->step = real_packet->step;
79291 old->def = real_packet->def;
79292 old->offset = real_packet->offset;
79293 old->factor = real_packet->factor;
79294 old->minimum_turns = real_packet->minimum_turns;
79295 sz_strlcpy(old->name, real_packet->name);
79296 sz_strlcpy(old->rule_name, real_packet->rule_name);
79297 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79298 if (real_packet->helptext) {
79299 strvec_copy(old->helptext, real_packet->helptext);
79300 } else {
79301 strvec_clear(old->helptext);
79302 }
79303 }
79304
79305#else /* FREECIV_DELTA_PROTOCOL */
79306#ifdef FREECIV_JSON_CONNECTION
79307 field_addr.name = "id";
79308#endif /* FREECIV_JSON_CONNECTION */
79309
79310 {
79311 int readin;
79312
79313 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79315 }
79316 real_packet->id = readin;
79317 }
79318
79319#ifdef FREECIV_JSON_CONNECTION
79320 field_addr.name = "start";
79321#endif /* FREECIV_JSON_CONNECTION */
79322
79323 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79325 }
79326
79327#ifdef FREECIV_JSON_CONNECTION
79328 field_addr.name = "stop";
79329#endif /* FREECIV_JSON_CONNECTION */
79330
79331 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79333 }
79334
79335#ifdef FREECIV_JSON_CONNECTION
79336 field_addr.name = "step";
79337#endif /* FREECIV_JSON_CONNECTION */
79338
79339 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79341 }
79342
79343#ifdef FREECIV_JSON_CONNECTION
79344 field_addr.name = "def";
79345#endif /* FREECIV_JSON_CONNECTION */
79346
79347 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79349 }
79350
79351#ifdef FREECIV_JSON_CONNECTION
79352 field_addr.name = "offset";
79353#endif /* FREECIV_JSON_CONNECTION */
79354
79355 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79357 }
79358
79359#ifdef FREECIV_JSON_CONNECTION
79360 field_addr.name = "factor";
79361#endif /* FREECIV_JSON_CONNECTION */
79362
79363 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79365 }
79366
79367#ifdef FREECIV_JSON_CONNECTION
79368 field_addr.name = "minimum_turns";
79369#endif /* FREECIV_JSON_CONNECTION */
79370
79371 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79372 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79373 }
79374
79375#ifdef FREECIV_JSON_CONNECTION
79376 field_addr.name = "name";
79377#endif /* FREECIV_JSON_CONNECTION */
79378
79379 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79381 }
79382
79383#ifdef FREECIV_JSON_CONNECTION
79384 field_addr.name = "rule_name";
79385#endif /* FREECIV_JSON_CONNECTION */
79386
79387 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79388 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79389 }
79390
79391#ifdef FREECIV_JSON_CONNECTION
79392 field_addr.name = "reqs";
79393#endif /* FREECIV_JSON_CONNECTION */
79394
79395 {
79396 int i;
79397
79398 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79400 }
79402
79403#ifdef FREECIV_JSON_CONNECTION
79404 /* Enter array. */
79405 field_addr.sub_location = plocation_elem_new(0);
79406#endif /* FREECIV_JSON_CONNECTION */
79407
79408 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79409#ifdef FREECIV_JSON_CONNECTION
79410 /* Next array element */
79411 field_addr.sub_location->number = i;
79412#endif /* FREECIV_JSON_CONNECTION */
79413
79414 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79416 }
79417 }
79418
79419#ifdef FREECIV_JSON_CONNECTION
79420 /* Exit array. */
79421 FC_FREE(field_addr.sub_location);
79422#endif /* FREECIV_JSON_CONNECTION */
79423 }
79424
79425#ifdef FREECIV_JSON_CONNECTION
79426 field_addr.name = "helptext";
79427#endif /* FREECIV_JSON_CONNECTION */
79428
79429 {
79430 int i;
79431
79432 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79434 }
79435 strvec_reserve(real_packet->helptext, i);
79436
79437#ifdef FREECIV_JSON_CONNECTION
79438 /* Enter array. */
79439 field_addr.sub_location = plocation_elem_new(0);
79440#endif /* FREECIV_JSON_CONNECTION */
79441
79442 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79443#ifdef FREECIV_JSON_CONNECTION
79444 /* Next array element */
79445 field_addr.sub_location->number = i;
79446#endif /* FREECIV_JSON_CONNECTION */
79447
79448 {
79449 char readin[MAX_LEN_PACKET];
79450
79451 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79452 || !strvec_set(real_packet->helptext, i, readin)) {
79454 }
79455 }
79456 }
79457
79458#ifdef FREECIV_JSON_CONNECTION
79459 /* Exit array. */
79460 FC_FREE(field_addr.sub_location);
79461#endif /* FREECIV_JSON_CONNECTION */
79462 }
79463#endif /* FREECIV_DELTA_PROTOCOL */
79464
79466#undef FREE_PACKET_STRUCT
79467}
79468
79470{
79471 const struct packet_ruleset_multiplier *real_packet = packet;
79472 int e;
79474
79475 log_packet_detailed("packet_ruleset_multiplier_100: sending info about ()");
79476
79477#ifdef FREECIV_DELTA_PROTOCOL
79480 bool differ;
79481 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MULTIPLIER;
79482
79483 if (nullptr == *hash) {
79485 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79486 }
79487 BV_CLR_ALL(fields);
79488
79489 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79490 old = fc_malloc(sizeof(*old));
79491 /* temporary bitcopy just to insert correctly */
79492 *old = *real_packet;
79495 }
79496
79497 differ = (old->id != real_packet->id);
79498 if (differ) {
79499 BV_SET(fields, 0);
79500 }
79501
79502 differ = (old->start != real_packet->start);
79503 if (differ) {
79504 BV_SET(fields, 1);
79505 }
79506
79507 differ = (old->stop != real_packet->stop);
79508 if (differ) {
79509 BV_SET(fields, 2);
79510 }
79511
79512 differ = (old->step != real_packet->step);
79513 if (differ) {
79514 BV_SET(fields, 3);
79515 }
79516
79517 differ = (old->def != real_packet->def);
79518 if (differ) {
79519 BV_SET(fields, 4);
79520 }
79521
79522 differ = (old->offset != real_packet->offset);
79523 if (differ) {
79524 BV_SET(fields, 5);
79525 }
79526
79527 differ = (old->factor != real_packet->factor);
79528 if (differ) {
79529 BV_SET(fields, 6);
79530 }
79531
79532 differ = (old->minimum_turns != real_packet->minimum_turns);
79533 if (differ) {
79534 BV_SET(fields, 7);
79535 }
79536
79537 differ = (strcmp(old->name, real_packet->name) != 0);
79538 if (differ) {
79539 BV_SET(fields, 8);
79540 }
79541
79542 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
79543 if (differ) {
79544 BV_SET(fields, 9);
79545 }
79546
79548 if (!differ) {
79549 int i;
79550
79551 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
79552 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
79553 if (differ) {
79554 break;
79555 }
79556 }
79557 }
79558 if (differ) {
79559 BV_SET(fields, 10);
79560 }
79561
79562 if (real_packet->helptext) {
79563 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
79564 } else {
79565 differ = (strvec_size(old->helptext) > 0);
79566 }
79567 if (differ) {
79568 BV_SET(fields, 11);
79569 }
79570#endif /* FREECIV_DELTA_PROTOCOL */
79571
79572#ifdef FREECIV_JSON_CONNECTION
79573 struct plocation field_addr;
79574 {
79575 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79578 }
79579#endif /* FREECIV_JSON_CONNECTION */
79580
79581#ifdef FREECIV_DELTA_PROTOCOL
79582#ifdef FREECIV_JSON_CONNECTION
79583 field_addr.name = "fields";
79584#endif /* FREECIV_JSON_CONNECTION */
79585 e = 0;
79586 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79587 if (e) {
79588 log_packet_detailed("fields bitvector error detected");
79589 }
79590
79591 if (BV_ISSET(fields, 0)) {
79592 log_packet_detailed(" field 'id' has changed");
79593
79594#ifdef FREECIV_JSON_CONNECTION
79595 field_addr.name = "id";
79596#endif /* FREECIV_JSON_CONNECTION */
79597 e = 0;
79598
79599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79600
79601 if (e) {
79602 log_packet_detailed("'id' field error detected");
79603 }
79604 }
79605
79606 if (BV_ISSET(fields, 1)) {
79607 log_packet_detailed(" field 'start' has changed");
79608
79609#ifdef FREECIV_JSON_CONNECTION
79610 field_addr.name = "start";
79611#endif /* FREECIV_JSON_CONNECTION */
79612 e = 0;
79613
79614 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
79615
79616 if (e) {
79617 log_packet_detailed("'start' field error detected");
79618 }
79619 }
79620
79621 if (BV_ISSET(fields, 2)) {
79622 log_packet_detailed(" field 'stop' has changed");
79623
79624#ifdef FREECIV_JSON_CONNECTION
79625 field_addr.name = "stop";
79626#endif /* FREECIV_JSON_CONNECTION */
79627 e = 0;
79628
79629 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
79630
79631 if (e) {
79632 log_packet_detailed("'stop' field error detected");
79633 }
79634 }
79635
79636 if (BV_ISSET(fields, 3)) {
79637 log_packet_detailed(" field 'step' has changed");
79638
79639#ifdef FREECIV_JSON_CONNECTION
79640 field_addr.name = "step";
79641#endif /* FREECIV_JSON_CONNECTION */
79642 e = 0;
79643
79644 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
79645
79646 if (e) {
79647 log_packet_detailed("'step' field error detected");
79648 }
79649 }
79650
79651 if (BV_ISSET(fields, 4)) {
79652 log_packet_detailed(" field 'def' has changed");
79653
79654#ifdef FREECIV_JSON_CONNECTION
79655 field_addr.name = "def";
79656#endif /* FREECIV_JSON_CONNECTION */
79657 e = 0;
79658
79659 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
79660
79661 if (e) {
79662 log_packet_detailed("'def' field error detected");
79663 }
79664 }
79665
79666 if (BV_ISSET(fields, 5)) {
79667 log_packet_detailed(" field 'offset' has changed");
79668
79669#ifdef FREECIV_JSON_CONNECTION
79670 field_addr.name = "offset";
79671#endif /* FREECIV_JSON_CONNECTION */
79672 e = 0;
79673
79674 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
79675
79676 if (e) {
79677 log_packet_detailed("'offset' field error detected");
79678 }
79679 }
79680
79681 if (BV_ISSET(fields, 6)) {
79682 log_packet_detailed(" field 'factor' has changed");
79683
79684#ifdef FREECIV_JSON_CONNECTION
79685 field_addr.name = "factor";
79686#endif /* FREECIV_JSON_CONNECTION */
79687 e = 0;
79688
79689 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
79690
79691 if (e) {
79692 log_packet_detailed("'factor' field error detected");
79693 }
79694 }
79695
79696 if (BV_ISSET(fields, 7)) {
79697 log_packet_detailed(" field 'minimum_turns' has changed");
79698
79699#ifdef FREECIV_JSON_CONNECTION
79700 field_addr.name = "minimum_turns";
79701#endif /* FREECIV_JSON_CONNECTION */
79702 e = 0;
79703
79704 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
79705
79706 if (e) {
79707 log_packet_detailed("'minimum_turns' field error detected");
79708 }
79709 }
79710
79711 if (BV_ISSET(fields, 8)) {
79712 log_packet_detailed(" field 'name' has changed");
79713
79714#ifdef FREECIV_JSON_CONNECTION
79715 field_addr.name = "name";
79716#endif /* FREECIV_JSON_CONNECTION */
79717 e = 0;
79718
79719 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
79720
79721 if (e) {
79722 log_packet_detailed("'name' field error detected");
79723 }
79724 }
79725
79726 if (BV_ISSET(fields, 9)) {
79727 log_packet_detailed(" field 'rule_name' has changed");
79728
79729#ifdef FREECIV_JSON_CONNECTION
79730 field_addr.name = "rule_name";
79731#endif /* FREECIV_JSON_CONNECTION */
79732 e = 0;
79733
79734 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
79735
79736 if (e) {
79737 log_packet_detailed("'rule_name' field error detected");
79738 }
79739 }
79740
79741 if (BV_ISSET(fields, 10)) {
79742 log_packet_detailed(" field 'reqs' has changed");
79743
79744#ifdef FREECIV_JSON_CONNECTION
79745 field_addr.name = "reqs";
79746#endif /* FREECIV_JSON_CONNECTION */
79747 e = 0;
79748
79749 {
79750 int i;
79751
79754
79755#ifdef FREECIV_JSON_CONNECTION
79756 /* Enter array. */
79757 field_addr.sub_location = plocation_elem_new(0);
79758#endif /* FREECIV_JSON_CONNECTION */
79759
79760 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79761#ifdef FREECIV_JSON_CONNECTION
79762 /* Next array element. */
79763 field_addr.sub_location->number = i;
79764#endif /* FREECIV_JSON_CONNECTION */
79765
79766 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79767 }
79768
79769#ifdef FREECIV_JSON_CONNECTION
79770 /* Exit array. */
79771 FC_FREE(field_addr.sub_location);
79772#endif /* FREECIV_JSON_CONNECTION */
79773 }
79774
79775 if (e) {
79776 log_packet_detailed("'reqs' field error detected");
79777 }
79778 }
79779
79780 if (BV_ISSET(fields, 11)) {
79781 log_packet_detailed(" field 'helptext' has changed");
79782
79783#ifdef FREECIV_JSON_CONNECTION
79784 field_addr.name = "helptext";
79785#endif /* FREECIV_JSON_CONNECTION */
79786 e = 0;
79787
79788 if (!real_packet->helptext) {
79789 /* Transmit null as empty */
79790 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
79791 } else {
79792 int i;
79793
79795 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
79796
79797#ifdef FREECIV_JSON_CONNECTION
79798 /* Enter array. */
79799 field_addr.sub_location = plocation_elem_new(0);
79800#endif /* FREECIV_JSON_CONNECTION */
79801
79802 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79803#ifdef FREECIV_JSON_CONNECTION
79804 /* Next array element. */
79805 field_addr.sub_location->number = i;
79806#endif /* FREECIV_JSON_CONNECTION */
79807
79808 {
79809 const char *pstr = strvec_get(real_packet->helptext, i);
79810
79811 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
79812 }
79813 }
79814
79815#ifdef FREECIV_JSON_CONNECTION
79816 /* Exit array. */
79817 FC_FREE(field_addr.sub_location);
79818#endif /* FREECIV_JSON_CONNECTION */
79819 }
79820
79821 if (e) {
79822 log_packet_detailed("'helptext' field error detected");
79823 }
79824 }
79825
79826 old->id = real_packet->id;
79827 old->start = real_packet->start;
79828 old->stop = real_packet->stop;
79829 old->step = real_packet->step;
79830 old->def = real_packet->def;
79831 old->offset = real_packet->offset;
79832 old->factor = real_packet->factor;
79833 old->minimum_turns = real_packet->minimum_turns;
79834 sz_strlcpy(old->name, real_packet->name);
79835 sz_strlcpy(old->rule_name, real_packet->rule_name);
79836 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79837 if (real_packet->helptext) {
79838 strvec_copy(old->helptext, real_packet->helptext);
79839 } else {
79840 strvec_clear(old->helptext);
79841 }
79842
79843#else /* FREECIV_DELTA_PROTOCOL */
79844#ifdef FREECIV_JSON_CONNECTION
79845 field_addr.name = "id";
79846#endif /* FREECIV_JSON_CONNECTION */
79847 e = 0;
79848
79849 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79850
79851 if (e) {
79852 log_packet_detailed("'id' field error detected");
79853 }
79854
79855#ifdef FREECIV_JSON_CONNECTION
79856 field_addr.name = "start";
79857#endif /* FREECIV_JSON_CONNECTION */
79858 e = 0;
79859
79860 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
79861
79862 if (e) {
79863 log_packet_detailed("'start' field error detected");
79864 }
79865
79866#ifdef FREECIV_JSON_CONNECTION
79867 field_addr.name = "stop";
79868#endif /* FREECIV_JSON_CONNECTION */
79869 e = 0;
79870
79871 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
79872
79873 if (e) {
79874 log_packet_detailed("'stop' field error detected");
79875 }
79876
79877#ifdef FREECIV_JSON_CONNECTION
79878 field_addr.name = "step";
79879#endif /* FREECIV_JSON_CONNECTION */
79880 e = 0;
79881
79882 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
79883
79884 if (e) {
79885 log_packet_detailed("'step' field error detected");
79886 }
79887
79888#ifdef FREECIV_JSON_CONNECTION
79889 field_addr.name = "def";
79890#endif /* FREECIV_JSON_CONNECTION */
79891 e = 0;
79892
79893 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
79894
79895 if (e) {
79896 log_packet_detailed("'def' field error detected");
79897 }
79898
79899#ifdef FREECIV_JSON_CONNECTION
79900 field_addr.name = "offset";
79901#endif /* FREECIV_JSON_CONNECTION */
79902 e = 0;
79903
79904 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
79905
79906 if (e) {
79907 log_packet_detailed("'offset' field error detected");
79908 }
79909
79910#ifdef FREECIV_JSON_CONNECTION
79911 field_addr.name = "factor";
79912#endif /* FREECIV_JSON_CONNECTION */
79913 e = 0;
79914
79915 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
79916
79917 if (e) {
79918 log_packet_detailed("'factor' field error detected");
79919 }
79920
79921#ifdef FREECIV_JSON_CONNECTION
79922 field_addr.name = "minimum_turns";
79923#endif /* FREECIV_JSON_CONNECTION */
79924 e = 0;
79925
79926 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
79927
79928 if (e) {
79929 log_packet_detailed("'minimum_turns' field error detected");
79930 }
79931
79932#ifdef FREECIV_JSON_CONNECTION
79933 field_addr.name = "name";
79934#endif /* FREECIV_JSON_CONNECTION */
79935 e = 0;
79936
79937 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
79938
79939 if (e) {
79940 log_packet_detailed("'name' field error detected");
79941 }
79942
79943#ifdef FREECIV_JSON_CONNECTION
79944 field_addr.name = "rule_name";
79945#endif /* FREECIV_JSON_CONNECTION */
79946 e = 0;
79947
79948 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
79949
79950 if (e) {
79951 log_packet_detailed("'rule_name' field error detected");
79952 }
79953
79954#ifdef FREECIV_JSON_CONNECTION
79955 field_addr.name = "reqs";
79956#endif /* FREECIV_JSON_CONNECTION */
79957 e = 0;
79958
79959 {
79960 int i;
79961
79964
79965#ifdef FREECIV_JSON_CONNECTION
79966 /* Enter array. */
79967 field_addr.sub_location = plocation_elem_new(0);
79968#endif /* FREECIV_JSON_CONNECTION */
79969
79970 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79971#ifdef FREECIV_JSON_CONNECTION
79972 /* Next array element. */
79973 field_addr.sub_location->number = i;
79974#endif /* FREECIV_JSON_CONNECTION */
79975
79976 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79977 }
79978
79979#ifdef FREECIV_JSON_CONNECTION
79980 /* Exit array. */
79981 FC_FREE(field_addr.sub_location);
79982#endif /* FREECIV_JSON_CONNECTION */
79983 }
79984
79985 if (e) {
79986 log_packet_detailed("'reqs' field error detected");
79987 }
79988
79989#ifdef FREECIV_JSON_CONNECTION
79990 field_addr.name = "helptext";
79991#endif /* FREECIV_JSON_CONNECTION */
79992 e = 0;
79993
79994 if (!real_packet->helptext) {
79995 /* Transmit null as empty */
79996 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
79997 } else {
79998 int i;
79999
80001 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
80002
80003#ifdef FREECIV_JSON_CONNECTION
80004 /* Enter array. */
80005 field_addr.sub_location = plocation_elem_new(0);
80006#endif /* FREECIV_JSON_CONNECTION */
80007
80008 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
80009#ifdef FREECIV_JSON_CONNECTION
80010 /* Next array element. */
80011 field_addr.sub_location->number = i;
80012#endif /* FREECIV_JSON_CONNECTION */
80013
80014 {
80015 const char *pstr = strvec_get(real_packet->helptext, i);
80016
80017 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
80018 }
80019 }
80020
80021#ifdef FREECIV_JSON_CONNECTION
80022 /* Exit array. */
80023 FC_FREE(field_addr.sub_location);
80024#endif /* FREECIV_JSON_CONNECTION */
80025 }
80026
80027 if (e) {
80028 log_packet_detailed("'helptext' field error detected");
80029 }
80030#endif /* FREECIV_DELTA_PROTOCOL */
80031
80033}
80034
80036{
80037 if (!pc->used) {
80038 log_error("WARNING: trying to send data to the closed connection %s",
80040 return -1;
80041 }
80042 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet != nullptr, -1,
80043 "Handler for PACKET_RULESET_MULTIPLIER not installed");
80044 return pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet(pc, packet);
80045}
80046
80048{
80049 conn_list_iterate(dest, pconn) {
80052}
80053
80054static inline void init_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80055{
80056 memset(packet, 0, sizeof(*packet));
80057
80061}
80062
80063static inline void free_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80064{
80068}
80069
80070static inline void destroy_packet_ruleset_clause(void *packet)
80071{
80073 free(packet);
80074}
80075
80076#ifdef FREECIV_DELTA_PROTOCOL
80077#define hash_packet_ruleset_clause_100 hash_const
80078#define cmp_packet_ruleset_clause_100 cmp_const
80080#endif /* FREECIV_DELTA_PROTOCOL */
80081
80083{
80084#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_clause(_packet)
80086
80087#ifdef FREECIV_JSON_CONNECTION
80088 struct plocation field_addr;
80089 {
80090 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80093 }
80094#endif /* FREECIV_JSON_CONNECTION */
80095
80096 log_packet_detailed("packet_ruleset_clause_100: got info about ()");
80097
80098#ifdef FREECIV_DELTA_PROTOCOL
80100 struct packet_ruleset_clause *old;
80101 struct genhash **hash = pc->phs.received + PACKET_RULESET_CLAUSE;
80102
80103 if (nullptr == *hash) {
80105 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80106 }
80107
80108 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80109 real_packet->type = old->type;
80110 real_packet->enabled = old->enabled;
80111 requirement_vector_copy(&real_packet->giver_reqs, &old->giver_reqs);
80112 requirement_vector_copy(&real_packet->receiver_reqs, &old->receiver_reqs);
80113 requirement_vector_copy(&real_packet->either_reqs, &old->either_reqs);
80114 } else {
80115 /* packet is already initialized empty */
80116 log_packet_detailed(" no old info");
80117 }
80118
80119#ifdef FREECIV_JSON_CONNECTION
80120 field_addr.name = "fields";
80121#endif /* FREECIV_JSON_CONNECTION */
80122 DIO_BV_GET(&din, &field_addr, fields);
80123
80124 if (BV_ISSET(fields, 0)) {
80125 log_packet_detailed(" got field 'type'");
80126
80127#ifdef FREECIV_JSON_CONNECTION
80128 field_addr.name = "type";
80129#endif /* FREECIV_JSON_CONNECTION */
80130
80131 {
80132 int readin;
80133
80134 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80136 }
80137 real_packet->type = readin;
80138 }
80139 }
80140
80141 real_packet->enabled = BV_ISSET(fields, 1);
80142
80143 if (BV_ISSET(fields, 2)) {
80144 log_packet_detailed(" got field 'giver_reqs'");
80145
80146#ifdef FREECIV_JSON_CONNECTION
80147 field_addr.name = "giver_reqs";
80148#endif /* FREECIV_JSON_CONNECTION */
80149
80150 {
80151 int i;
80152
80153 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80154 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80155 }
80157
80158#ifdef FREECIV_JSON_CONNECTION
80159 /* Enter array. */
80160 field_addr.sub_location = plocation_elem_new(0);
80161#endif /* FREECIV_JSON_CONNECTION */
80162
80163 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80164#ifdef FREECIV_JSON_CONNECTION
80165 /* Next array element */
80166 field_addr.sub_location->number = i;
80167#endif /* FREECIV_JSON_CONNECTION */
80168
80169 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80170 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80171 }
80172 }
80173
80174#ifdef FREECIV_JSON_CONNECTION
80175 /* Exit array. */
80176 FC_FREE(field_addr.sub_location);
80177#endif /* FREECIV_JSON_CONNECTION */
80178 }
80179 }
80180
80181 if (BV_ISSET(fields, 3)) {
80182 log_packet_detailed(" got field 'receiver_reqs'");
80183
80184#ifdef FREECIV_JSON_CONNECTION
80185 field_addr.name = "receiver_reqs";
80186#endif /* FREECIV_JSON_CONNECTION */
80187
80188 {
80189 int i;
80190
80191 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80192 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80193 }
80194 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80195
80196#ifdef FREECIV_JSON_CONNECTION
80197 /* Enter array. */
80198 field_addr.sub_location = plocation_elem_new(0);
80199#endif /* FREECIV_JSON_CONNECTION */
80200
80201 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80202#ifdef FREECIV_JSON_CONNECTION
80203 /* Next array element */
80204 field_addr.sub_location->number = i;
80205#endif /* FREECIV_JSON_CONNECTION */
80206
80207 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80208 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80209 }
80210 }
80211
80212#ifdef FREECIV_JSON_CONNECTION
80213 /* Exit array. */
80214 FC_FREE(field_addr.sub_location);
80215#endif /* FREECIV_JSON_CONNECTION */
80216 }
80217 }
80218
80219 if (BV_ISSET(fields, 4)) {
80220 log_packet_detailed(" got field 'either_reqs'");
80221
80222#ifdef FREECIV_JSON_CONNECTION
80223 field_addr.name = "either_reqs";
80224#endif /* FREECIV_JSON_CONNECTION */
80225
80226 {
80227 int i;
80228
80229 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80230 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80231 }
80233
80234#ifdef FREECIV_JSON_CONNECTION
80235 /* Enter array. */
80236 field_addr.sub_location = plocation_elem_new(0);
80237#endif /* FREECIV_JSON_CONNECTION */
80238
80239 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80240#ifdef FREECIV_JSON_CONNECTION
80241 /* Next array element */
80242 field_addr.sub_location->number = i;
80243#endif /* FREECIV_JSON_CONNECTION */
80244
80245 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80246 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80247 }
80248 }
80249
80250#ifdef FREECIV_JSON_CONNECTION
80251 /* Exit array. */
80252 FC_FREE(field_addr.sub_location);
80253#endif /* FREECIV_JSON_CONNECTION */
80254 }
80255 }
80256
80257 if (nullptr == old) {
80258 old = fc_malloc(sizeof(*old));
80260 old->type = real_packet->type;
80261 old->enabled = real_packet->enabled;
80262 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80263 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80264 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80266 } else {
80267 old->type = real_packet->type;
80268 old->enabled = real_packet->enabled;
80269 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80270 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80271 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80272 }
80273
80274#else /* FREECIV_DELTA_PROTOCOL */
80275#ifdef FREECIV_JSON_CONNECTION
80276 field_addr.name = "type";
80277#endif /* FREECIV_JSON_CONNECTION */
80278
80279 {
80280 int readin;
80281
80282 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80284 }
80285 real_packet->type = readin;
80286 }
80287
80288#ifdef FREECIV_JSON_CONNECTION
80289 field_addr.name = "enabled";
80290#endif /* FREECIV_JSON_CONNECTION */
80291
80292 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
80294 }
80295
80296#ifdef FREECIV_JSON_CONNECTION
80297 field_addr.name = "giver_reqs";
80298#endif /* FREECIV_JSON_CONNECTION */
80299
80300 {
80301 int i;
80302
80303 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80304 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80305 }
80307
80308#ifdef FREECIV_JSON_CONNECTION
80309 /* Enter array. */
80310 field_addr.sub_location = plocation_elem_new(0);
80311#endif /* FREECIV_JSON_CONNECTION */
80312
80313 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80314#ifdef FREECIV_JSON_CONNECTION
80315 /* Next array element */
80316 field_addr.sub_location->number = i;
80317#endif /* FREECIV_JSON_CONNECTION */
80318
80319 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80320 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80321 }
80322 }
80323
80324#ifdef FREECIV_JSON_CONNECTION
80325 /* Exit array. */
80326 FC_FREE(field_addr.sub_location);
80327#endif /* FREECIV_JSON_CONNECTION */
80328 }
80329
80330#ifdef FREECIV_JSON_CONNECTION
80331 field_addr.name = "receiver_reqs";
80332#endif /* FREECIV_JSON_CONNECTION */
80333
80334 {
80335 int i;
80336
80337 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80338 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80339 }
80340 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80341
80342#ifdef FREECIV_JSON_CONNECTION
80343 /* Enter array. */
80344 field_addr.sub_location = plocation_elem_new(0);
80345#endif /* FREECIV_JSON_CONNECTION */
80346
80347 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80348#ifdef FREECIV_JSON_CONNECTION
80349 /* Next array element */
80350 field_addr.sub_location->number = i;
80351#endif /* FREECIV_JSON_CONNECTION */
80352
80353 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80354 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80355 }
80356 }
80357
80358#ifdef FREECIV_JSON_CONNECTION
80359 /* Exit array. */
80360 FC_FREE(field_addr.sub_location);
80361#endif /* FREECIV_JSON_CONNECTION */
80362 }
80363
80364#ifdef FREECIV_JSON_CONNECTION
80365 field_addr.name = "either_reqs";
80366#endif /* FREECIV_JSON_CONNECTION */
80367
80368 {
80369 int i;
80370
80371 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80372 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80373 }
80375
80376#ifdef FREECIV_JSON_CONNECTION
80377 /* Enter array. */
80378 field_addr.sub_location = plocation_elem_new(0);
80379#endif /* FREECIV_JSON_CONNECTION */
80380
80381 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80382#ifdef FREECIV_JSON_CONNECTION
80383 /* Next array element */
80384 field_addr.sub_location->number = i;
80385#endif /* FREECIV_JSON_CONNECTION */
80386
80387 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80388 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80389 }
80390 }
80391
80392#ifdef FREECIV_JSON_CONNECTION
80393 /* Exit array. */
80394 FC_FREE(field_addr.sub_location);
80395#endif /* FREECIV_JSON_CONNECTION */
80396 }
80397#endif /* FREECIV_DELTA_PROTOCOL */
80398
80400#undef FREE_PACKET_STRUCT
80401}
80402
80404{
80405 const struct packet_ruleset_clause *real_packet = packet;
80406 int e;
80408
80409 log_packet_detailed("packet_ruleset_clause_100: sending info about ()");
80410
80411#ifdef FREECIV_DELTA_PROTOCOL
80413 struct packet_ruleset_clause *old;
80414 bool differ;
80415 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CLAUSE;
80416
80417 if (nullptr == *hash) {
80419 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80420 }
80421 BV_CLR_ALL(fields);
80422
80423 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80424 old = fc_malloc(sizeof(*old));
80425 /* temporary bitcopy just to insert correctly */
80426 *old = *real_packet;
80429 }
80430
80431 differ = (old->type != real_packet->type);
80432 if (differ) {
80433 BV_SET(fields, 0);
80434 }
80435
80436 /* folded into head */
80437 if (real_packet->enabled) {
80438 BV_SET(fields, 1);
80439 }
80440
80441 differ = (requirement_vector_size(&old->giver_reqs) != requirement_vector_size(&real_packet->giver_reqs));
80442 if (!differ) {
80443 int i;
80444
80445 for (i = 0; i < requirement_vector_size(&old->giver_reqs); i++) {
80446 differ = !are_requirements_equal(&old->giver_reqs.p[i], &real_packet->giver_reqs.p[i]);
80447 if (differ) {
80448 break;
80449 }
80450 }
80451 }
80452 if (differ) {
80453 BV_SET(fields, 2);
80454 }
80455
80456 differ = (requirement_vector_size(&old->receiver_reqs) != requirement_vector_size(&real_packet->receiver_reqs));
80457 if (!differ) {
80458 int i;
80459
80460 for (i = 0; i < requirement_vector_size(&old->receiver_reqs); i++) {
80461 differ = !are_requirements_equal(&old->receiver_reqs.p[i], &real_packet->receiver_reqs.p[i]);
80462 if (differ) {
80463 break;
80464 }
80465 }
80466 }
80467 if (differ) {
80468 BV_SET(fields, 3);
80469 }
80470
80471 differ = (requirement_vector_size(&old->either_reqs) != requirement_vector_size(&real_packet->either_reqs));
80472 if (!differ) {
80473 int i;
80474
80475 for (i = 0; i < requirement_vector_size(&old->either_reqs); i++) {
80476 differ = !are_requirements_equal(&old->either_reqs.p[i], &real_packet->either_reqs.p[i]);
80477 if (differ) {
80478 break;
80479 }
80480 }
80481 }
80482 if (differ) {
80483 BV_SET(fields, 4);
80484 }
80485#endif /* FREECIV_DELTA_PROTOCOL */
80486
80487#ifdef FREECIV_JSON_CONNECTION
80488 struct plocation field_addr;
80489 {
80490 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80493 }
80494#endif /* FREECIV_JSON_CONNECTION */
80495
80496#ifdef FREECIV_DELTA_PROTOCOL
80497#ifdef FREECIV_JSON_CONNECTION
80498 field_addr.name = "fields";
80499#endif /* FREECIV_JSON_CONNECTION */
80500 e = 0;
80501 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80502 if (e) {
80503 log_packet_detailed("fields bitvector error detected");
80504 }
80505
80506 if (BV_ISSET(fields, 0)) {
80507 log_packet_detailed(" field 'type' has changed");
80508
80509#ifdef FREECIV_JSON_CONNECTION
80510 field_addr.name = "type";
80511#endif /* FREECIV_JSON_CONNECTION */
80512 e = 0;
80513
80514 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
80515
80516 if (e) {
80517 log_packet_detailed("'type' field error detected");
80518 }
80519 }
80520
80521 /* field 1 is folded into the header */
80522
80523 if (BV_ISSET(fields, 2)) {
80524 log_packet_detailed(" field 'giver_reqs' has changed");
80525
80526#ifdef FREECIV_JSON_CONNECTION
80527 field_addr.name = "giver_reqs";
80528#endif /* FREECIV_JSON_CONNECTION */
80529 e = 0;
80530
80531 {
80532 int i;
80533
80536
80537#ifdef FREECIV_JSON_CONNECTION
80538 /* Enter array. */
80539 field_addr.sub_location = plocation_elem_new(0);
80540#endif /* FREECIV_JSON_CONNECTION */
80541
80542 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80543#ifdef FREECIV_JSON_CONNECTION
80544 /* Next array element. */
80545 field_addr.sub_location->number = i;
80546#endif /* FREECIV_JSON_CONNECTION */
80547
80548 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
80549 }
80550
80551#ifdef FREECIV_JSON_CONNECTION
80552 /* Exit array. */
80553 FC_FREE(field_addr.sub_location);
80554#endif /* FREECIV_JSON_CONNECTION */
80555 }
80556
80557 if (e) {
80558 log_packet_detailed("'giver_reqs' field error detected");
80559 }
80560 }
80561
80562 if (BV_ISSET(fields, 3)) {
80563 log_packet_detailed(" field 'receiver_reqs' has changed");
80564
80565#ifdef FREECIV_JSON_CONNECTION
80566 field_addr.name = "receiver_reqs";
80567#endif /* FREECIV_JSON_CONNECTION */
80568 e = 0;
80569
80570 {
80571 int i;
80572
80575
80576#ifdef FREECIV_JSON_CONNECTION
80577 /* Enter array. */
80578 field_addr.sub_location = plocation_elem_new(0);
80579#endif /* FREECIV_JSON_CONNECTION */
80580
80581 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80582#ifdef FREECIV_JSON_CONNECTION
80583 /* Next array element. */
80584 field_addr.sub_location->number = i;
80585#endif /* FREECIV_JSON_CONNECTION */
80586
80587 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs.p[i]);
80588 }
80589
80590#ifdef FREECIV_JSON_CONNECTION
80591 /* Exit array. */
80592 FC_FREE(field_addr.sub_location);
80593#endif /* FREECIV_JSON_CONNECTION */
80594 }
80595
80596 if (e) {
80597 log_packet_detailed("'receiver_reqs' field error detected");
80598 }
80599 }
80600
80601 if (BV_ISSET(fields, 4)) {
80602 log_packet_detailed(" field 'either_reqs' has changed");
80603
80604#ifdef FREECIV_JSON_CONNECTION
80605 field_addr.name = "either_reqs";
80606#endif /* FREECIV_JSON_CONNECTION */
80607 e = 0;
80608
80609 {
80610 int i;
80611
80614
80615#ifdef FREECIV_JSON_CONNECTION
80616 /* Enter array. */
80617 field_addr.sub_location = plocation_elem_new(0);
80618#endif /* FREECIV_JSON_CONNECTION */
80619
80620 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80621#ifdef FREECIV_JSON_CONNECTION
80622 /* Next array element. */
80623 field_addr.sub_location->number = i;
80624#endif /* FREECIV_JSON_CONNECTION */
80625
80626 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
80627 }
80628
80629#ifdef FREECIV_JSON_CONNECTION
80630 /* Exit array. */
80631 FC_FREE(field_addr.sub_location);
80632#endif /* FREECIV_JSON_CONNECTION */
80633 }
80634
80635 if (e) {
80636 log_packet_detailed("'either_reqs' field error detected");
80637 }
80638 }
80639
80640 old->type = real_packet->type;
80641 old->enabled = real_packet->enabled;
80642 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80643 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80644 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80645
80646#else /* FREECIV_DELTA_PROTOCOL */
80647#ifdef FREECIV_JSON_CONNECTION
80648 field_addr.name = "type";
80649#endif /* FREECIV_JSON_CONNECTION */
80650 e = 0;
80651
80652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
80653
80654 if (e) {
80655 log_packet_detailed("'type' field error detected");
80656 }
80657
80658#ifdef FREECIV_JSON_CONNECTION
80659 field_addr.name = "enabled";
80660#endif /* FREECIV_JSON_CONNECTION */
80661 e = 0;
80662
80663 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
80664
80665 if (e) {
80666 log_packet_detailed("'enabled' field error detected");
80667 }
80668
80669#ifdef FREECIV_JSON_CONNECTION
80670 field_addr.name = "giver_reqs";
80671#endif /* FREECIV_JSON_CONNECTION */
80672 e = 0;
80673
80674 {
80675 int i;
80676
80679
80680#ifdef FREECIV_JSON_CONNECTION
80681 /* Enter array. */
80682 field_addr.sub_location = plocation_elem_new(0);
80683#endif /* FREECIV_JSON_CONNECTION */
80684
80685 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80686#ifdef FREECIV_JSON_CONNECTION
80687 /* Next array element. */
80688 field_addr.sub_location->number = i;
80689#endif /* FREECIV_JSON_CONNECTION */
80690
80691 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
80692 }
80693
80694#ifdef FREECIV_JSON_CONNECTION
80695 /* Exit array. */
80696 FC_FREE(field_addr.sub_location);
80697#endif /* FREECIV_JSON_CONNECTION */
80698 }
80699
80700 if (e) {
80701 log_packet_detailed("'giver_reqs' field error detected");
80702 }
80703
80704#ifdef FREECIV_JSON_CONNECTION
80705 field_addr.name = "receiver_reqs";
80706#endif /* FREECIV_JSON_CONNECTION */
80707 e = 0;
80708
80709 {
80710 int i;
80711
80714
80715#ifdef FREECIV_JSON_CONNECTION
80716 /* Enter array. */
80717 field_addr.sub_location = plocation_elem_new(0);
80718#endif /* FREECIV_JSON_CONNECTION */
80719
80720 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80721#ifdef FREECIV_JSON_CONNECTION
80722 /* Next array element. */
80723 field_addr.sub_location->number = i;
80724#endif /* FREECIV_JSON_CONNECTION */
80725
80726 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs.p[i]);
80727 }
80728
80729#ifdef FREECIV_JSON_CONNECTION
80730 /* Exit array. */
80731 FC_FREE(field_addr.sub_location);
80732#endif /* FREECIV_JSON_CONNECTION */
80733 }
80734
80735 if (e) {
80736 log_packet_detailed("'receiver_reqs' field error detected");
80737 }
80738
80739#ifdef FREECIV_JSON_CONNECTION
80740 field_addr.name = "either_reqs";
80741#endif /* FREECIV_JSON_CONNECTION */
80742 e = 0;
80743
80744 {
80745 int i;
80746
80749
80750#ifdef FREECIV_JSON_CONNECTION
80751 /* Enter array. */
80752 field_addr.sub_location = plocation_elem_new(0);
80753#endif /* FREECIV_JSON_CONNECTION */
80754
80755 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80756#ifdef FREECIV_JSON_CONNECTION
80757 /* Next array element. */
80758 field_addr.sub_location->number = i;
80759#endif /* FREECIV_JSON_CONNECTION */
80760
80761 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
80762 }
80763
80764#ifdef FREECIV_JSON_CONNECTION
80765 /* Exit array. */
80766 FC_FREE(field_addr.sub_location);
80767#endif /* FREECIV_JSON_CONNECTION */
80768 }
80769
80770 if (e) {
80771 log_packet_detailed("'either_reqs' field error detected");
80772 }
80773#endif /* FREECIV_DELTA_PROTOCOL */
80774
80776}
80777
80779{
80780 if (!pc->used) {
80781 log_error("WARNING: trying to send data to the closed connection %s",
80783 return -1;
80784 }
80785 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet != nullptr, -1,
80786 "Handler for PACKET_RULESET_CLAUSE not installed");
80787 return pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet(pc, packet);
80788}
80789
80790void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
80791{
80792 conn_list_iterate(dest, pconn) {
80795}
80796
80797static inline void init_packet_ruleset_control(struct packet_ruleset_control *packet)
80798{
80799 memset(packet, 0, sizeof(*packet));
80800}
80801
80802#define free_packet_ruleset_control(_packet) (void) 0
80803#define destroy_packet_ruleset_control free
80804
80805#ifdef FREECIV_DELTA_PROTOCOL
80806#define hash_packet_ruleset_control_100 hash_const
80807#define cmp_packet_ruleset_control_100 cmp_const
80809#endif /* FREECIV_DELTA_PROTOCOL */
80810
80812{
80813#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_control(_packet)
80815
80816#ifdef FREECIV_JSON_CONNECTION
80817 struct plocation field_addr;
80818 {
80819 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80822 }
80823#endif /* FREECIV_JSON_CONNECTION */
80824
80825 log_packet_detailed("packet_ruleset_control_100: got info about ()");
80826
80827#ifdef FREECIV_DELTA_PROTOCOL
80830 struct genhash **hash = pc->phs.received + PACKET_RULESET_CONTROL;
80831
80832 if (nullptr == *hash) {
80834 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
80835 }
80836
80837 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80838 *real_packet = *old;
80839 } else {
80840 /* packet is already initialized empty */
80841 log_packet_detailed(" no old info");
80842 }
80843
80844#ifdef FREECIV_JSON_CONNECTION
80845 field_addr.name = "fields";
80846#endif /* FREECIV_JSON_CONNECTION */
80847 DIO_BV_GET(&din, &field_addr, fields);
80848
80849 if (BV_ISSET(fields, 0)) {
80850 log_packet_detailed(" got field 'num_unit_classes'");
80851
80852#ifdef FREECIV_JSON_CONNECTION
80853 field_addr.name = "num_unit_classes";
80854#endif /* FREECIV_JSON_CONNECTION */
80855
80856 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
80857 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
80858 }
80859 }
80860
80861 if (BV_ISSET(fields, 1)) {
80862 log_packet_detailed(" got field 'num_unit_types'");
80863
80864#ifdef FREECIV_JSON_CONNECTION
80865 field_addr.name = "num_unit_types";
80866#endif /* FREECIV_JSON_CONNECTION */
80867
80868 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
80869 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
80870 }
80871 }
80872
80873 if (BV_ISSET(fields, 2)) {
80874 log_packet_detailed(" got field 'num_impr_types'");
80875
80876#ifdef FREECIV_JSON_CONNECTION
80877 field_addr.name = "num_impr_types";
80878#endif /* FREECIV_JSON_CONNECTION */
80879
80880 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
80881 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
80882 }
80883 }
80884
80885 if (BV_ISSET(fields, 3)) {
80886 log_packet_detailed(" got field 'num_tech_classes'");
80887
80888#ifdef FREECIV_JSON_CONNECTION
80889 field_addr.name = "num_tech_classes";
80890#endif /* FREECIV_JSON_CONNECTION */
80891
80892 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
80893 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
80894 }
80895 }
80896
80897 if (BV_ISSET(fields, 4)) {
80898 log_packet_detailed(" got field 'num_tech_types'");
80899
80900#ifdef FREECIV_JSON_CONNECTION
80901 field_addr.name = "num_tech_types";
80902#endif /* FREECIV_JSON_CONNECTION */
80903
80904 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
80905 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
80906 }
80907 }
80908
80909 if (BV_ISSET(fields, 5)) {
80910 log_packet_detailed(" got field 'num_extra_types'");
80911
80912#ifdef FREECIV_JSON_CONNECTION
80913 field_addr.name = "num_extra_types";
80914#endif /* FREECIV_JSON_CONNECTION */
80915
80916 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
80917 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
80918 }
80919 }
80920
80921 if (BV_ISSET(fields, 6)) {
80922 log_packet_detailed(" got field 'num_base_types'");
80923
80924#ifdef FREECIV_JSON_CONNECTION
80925 field_addr.name = "num_base_types";
80926#endif /* FREECIV_JSON_CONNECTION */
80927
80928 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
80929 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
80930 }
80931 }
80932
80933 if (BV_ISSET(fields, 7)) {
80934 log_packet_detailed(" got field 'num_road_types'");
80935
80936#ifdef FREECIV_JSON_CONNECTION
80937 field_addr.name = "num_road_types";
80938#endif /* FREECIV_JSON_CONNECTION */
80939
80940 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
80941 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
80942 }
80943 }
80944
80945 if (BV_ISSET(fields, 8)) {
80946 log_packet_detailed(" got field 'num_resource_types'");
80947
80948#ifdef FREECIV_JSON_CONNECTION
80949 field_addr.name = "num_resource_types";
80950#endif /* FREECIV_JSON_CONNECTION */
80951
80952 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
80953 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
80954 }
80955 }
80956
80957 if (BV_ISSET(fields, 9)) {
80958 log_packet_detailed(" got field 'num_goods_types'");
80959
80960#ifdef FREECIV_JSON_CONNECTION
80961 field_addr.name = "num_goods_types";
80962#endif /* FREECIV_JSON_CONNECTION */
80963
80964 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
80965 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
80966 }
80967 }
80968
80969 if (BV_ISSET(fields, 10)) {
80970 log_packet_detailed(" got field 'num_disaster_types'");
80971
80972#ifdef FREECIV_JSON_CONNECTION
80973 field_addr.name = "num_disaster_types";
80974#endif /* FREECIV_JSON_CONNECTION */
80975
80976 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
80977 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
80978 }
80979 }
80980
80981 if (BV_ISSET(fields, 11)) {
80982 log_packet_detailed(" got field 'num_achievement_types'");
80983
80984#ifdef FREECIV_JSON_CONNECTION
80985 field_addr.name = "num_achievement_types";
80986#endif /* FREECIV_JSON_CONNECTION */
80987
80988 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
80989 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
80990 }
80991 }
80992
80993 if (BV_ISSET(fields, 12)) {
80994 log_packet_detailed(" got field 'num_multipliers'");
80995
80996#ifdef FREECIV_JSON_CONNECTION
80997 field_addr.name = "num_multipliers";
80998#endif /* FREECIV_JSON_CONNECTION */
80999
81000 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
81001 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
81002 }
81003 }
81004
81005 if (BV_ISSET(fields, 13)) {
81006 log_packet_detailed(" got field 'num_styles'");
81007
81008#ifdef FREECIV_JSON_CONNECTION
81009 field_addr.name = "num_styles";
81010#endif /* FREECIV_JSON_CONNECTION */
81011
81012 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
81013 RECEIVE_PACKET_FIELD_ERROR(num_styles);
81014 }
81015 }
81016
81017 if (BV_ISSET(fields, 14)) {
81018 log_packet_detailed(" got field 'num_music_styles'");
81019
81020#ifdef FREECIV_JSON_CONNECTION
81021 field_addr.name = "num_music_styles";
81022#endif /* FREECIV_JSON_CONNECTION */
81023
81024 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
81025 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
81026 }
81027 }
81028
81029 if (BV_ISSET(fields, 15)) {
81030 log_packet_detailed(" got field 'government_count'");
81031
81032#ifdef FREECIV_JSON_CONNECTION
81033 field_addr.name = "government_count";
81034#endif /* FREECIV_JSON_CONNECTION */
81035
81036 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
81038 }
81039 }
81040
81041 if (BV_ISSET(fields, 16)) {
81042 log_packet_detailed(" got field 'nation_count'");
81043
81044#ifdef FREECIV_JSON_CONNECTION
81045 field_addr.name = "nation_count";
81046#endif /* FREECIV_JSON_CONNECTION */
81047
81048 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
81050 }
81051 }
81052
81053 if (BV_ISSET(fields, 17)) {
81054 log_packet_detailed(" got field 'num_city_styles'");
81055
81056#ifdef FREECIV_JSON_CONNECTION
81057 field_addr.name = "num_city_styles";
81058#endif /* FREECIV_JSON_CONNECTION */
81059
81060 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
81061 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
81062 }
81063 }
81064
81065 if (BV_ISSET(fields, 18)) {
81066 log_packet_detailed(" got field 'terrain_count'");
81067
81068#ifdef FREECIV_JSON_CONNECTION
81069 field_addr.name = "terrain_count";
81070#endif /* FREECIV_JSON_CONNECTION */
81071
81072 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
81074 }
81075 }
81076
81077 if (BV_ISSET(fields, 19)) {
81078 log_packet_detailed(" got field 'num_specialist_types'");
81079
81080#ifdef FREECIV_JSON_CONNECTION
81081 field_addr.name = "num_specialist_types";
81082#endif /* FREECIV_JSON_CONNECTION */
81083
81084 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
81085 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
81086 }
81087 }
81088
81089 if (BV_ISSET(fields, 20)) {
81090 log_packet_detailed(" got field 'num_nation_groups'");
81091
81092#ifdef FREECIV_JSON_CONNECTION
81093 field_addr.name = "num_nation_groups";
81094#endif /* FREECIV_JSON_CONNECTION */
81095
81096 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
81098 }
81099 }
81100
81101 if (BV_ISSET(fields, 21)) {
81102 log_packet_detailed(" got field 'num_nation_sets'");
81103
81104#ifdef FREECIV_JSON_CONNECTION
81105 field_addr.name = "num_nation_sets";
81106#endif /* FREECIV_JSON_CONNECTION */
81107
81108 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
81110 }
81111 }
81112
81113 if (BV_ISSET(fields, 22)) {
81114 log_packet_detailed(" got field 'preferred_tileset'");
81115
81116#ifdef FREECIV_JSON_CONNECTION
81117 field_addr.name = "preferred_tileset";
81118#endif /* FREECIV_JSON_CONNECTION */
81119
81120 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
81121 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
81122 }
81123 }
81124
81125 if (BV_ISSET(fields, 23)) {
81126 log_packet_detailed(" got field 'preferred_soundset'");
81127
81128#ifdef FREECIV_JSON_CONNECTION
81129 field_addr.name = "preferred_soundset";
81130#endif /* FREECIV_JSON_CONNECTION */
81131
81132 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
81133 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
81134 }
81135 }
81136
81137 if (BV_ISSET(fields, 24)) {
81138 log_packet_detailed(" got field 'preferred_musicset'");
81139
81140#ifdef FREECIV_JSON_CONNECTION
81141 field_addr.name = "preferred_musicset";
81142#endif /* FREECIV_JSON_CONNECTION */
81143
81144 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
81145 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
81146 }
81147 }
81148
81149 real_packet->popup_tech_help = BV_ISSET(fields, 25);
81150
81151 if (BV_ISSET(fields, 26)) {
81152 log_packet_detailed(" got field 'name'");
81153
81154#ifdef FREECIV_JSON_CONNECTION
81155 field_addr.name = "name";
81156#endif /* FREECIV_JSON_CONNECTION */
81157
81158 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81160 }
81161 }
81162
81163 if (BV_ISSET(fields, 27)) {
81164 log_packet_detailed(" got field 'version'");
81165
81166#ifdef FREECIV_JSON_CONNECTION
81167 field_addr.name = "version";
81168#endif /* FREECIV_JSON_CONNECTION */
81169
81170 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
81172 }
81173 }
81174
81175 if (BV_ISSET(fields, 28)) {
81176 log_packet_detailed(" got field 'alt_dir'");
81177
81178#ifdef FREECIV_JSON_CONNECTION
81179 field_addr.name = "alt_dir";
81180#endif /* FREECIV_JSON_CONNECTION */
81181
81182 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
81184 }
81185 }
81186
81187 if (BV_ISSET(fields, 29)) {
81188 log_packet_detailed(" got field 'desc_length'");
81189
81190#ifdef FREECIV_JSON_CONNECTION
81191 field_addr.name = "desc_length";
81192#endif /* FREECIV_JSON_CONNECTION */
81193
81194 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
81195 RECEIVE_PACKET_FIELD_ERROR(desc_length);
81196 }
81197 }
81198
81199 if (BV_ISSET(fields, 30)) {
81200 log_packet_detailed(" got field 'num_counters'");
81201
81202#ifdef FREECIV_JSON_CONNECTION
81203 field_addr.name = "num_counters";
81204#endif /* FREECIV_JSON_CONNECTION */
81205
81206 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
81207 RECEIVE_PACKET_FIELD_ERROR(num_counters);
81208 }
81209 }
81210
81211 if (nullptr == old) {
81212 old = fc_malloc(sizeof(*old));
81214 *old = *real_packet;
81216 } else {
81217 *old = *real_packet;
81218 }
81219
81220#else /* FREECIV_DELTA_PROTOCOL */
81221#ifdef FREECIV_JSON_CONNECTION
81222 field_addr.name = "num_unit_classes";
81223#endif /* FREECIV_JSON_CONNECTION */
81224
81225 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
81226 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
81227 }
81228
81229#ifdef FREECIV_JSON_CONNECTION
81230 field_addr.name = "num_unit_types";
81231#endif /* FREECIV_JSON_CONNECTION */
81232
81233 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
81234 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
81235 }
81236
81237#ifdef FREECIV_JSON_CONNECTION
81238 field_addr.name = "num_impr_types";
81239#endif /* FREECIV_JSON_CONNECTION */
81240
81241 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
81242 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
81243 }
81244
81245#ifdef FREECIV_JSON_CONNECTION
81246 field_addr.name = "num_tech_classes";
81247#endif /* FREECIV_JSON_CONNECTION */
81248
81249 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
81250 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
81251 }
81252
81253#ifdef FREECIV_JSON_CONNECTION
81254 field_addr.name = "num_tech_types";
81255#endif /* FREECIV_JSON_CONNECTION */
81256
81257 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
81258 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
81259 }
81260
81261#ifdef FREECIV_JSON_CONNECTION
81262 field_addr.name = "num_extra_types";
81263#endif /* FREECIV_JSON_CONNECTION */
81264
81265 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
81266 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
81267 }
81268
81269#ifdef FREECIV_JSON_CONNECTION
81270 field_addr.name = "num_base_types";
81271#endif /* FREECIV_JSON_CONNECTION */
81272
81273 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
81274 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
81275 }
81276
81277#ifdef FREECIV_JSON_CONNECTION
81278 field_addr.name = "num_road_types";
81279#endif /* FREECIV_JSON_CONNECTION */
81280
81281 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
81282 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
81283 }
81284
81285#ifdef FREECIV_JSON_CONNECTION
81286 field_addr.name = "num_resource_types";
81287#endif /* FREECIV_JSON_CONNECTION */
81288
81289 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
81290 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
81291 }
81292
81293#ifdef FREECIV_JSON_CONNECTION
81294 field_addr.name = "num_goods_types";
81295#endif /* FREECIV_JSON_CONNECTION */
81296
81297 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
81298 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
81299 }
81300
81301#ifdef FREECIV_JSON_CONNECTION
81302 field_addr.name = "num_disaster_types";
81303#endif /* FREECIV_JSON_CONNECTION */
81304
81305 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
81306 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
81307 }
81308
81309#ifdef FREECIV_JSON_CONNECTION
81310 field_addr.name = "num_achievement_types";
81311#endif /* FREECIV_JSON_CONNECTION */
81312
81313 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
81314 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
81315 }
81316
81317#ifdef FREECIV_JSON_CONNECTION
81318 field_addr.name = "num_multipliers";
81319#endif /* FREECIV_JSON_CONNECTION */
81320
81321 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
81322 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
81323 }
81324
81325#ifdef FREECIV_JSON_CONNECTION
81326 field_addr.name = "num_styles";
81327#endif /* FREECIV_JSON_CONNECTION */
81328
81329 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
81330 RECEIVE_PACKET_FIELD_ERROR(num_styles);
81331 }
81332
81333#ifdef FREECIV_JSON_CONNECTION
81334 field_addr.name = "num_music_styles";
81335#endif /* FREECIV_JSON_CONNECTION */
81336
81337 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
81338 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
81339 }
81340
81341#ifdef FREECIV_JSON_CONNECTION
81342 field_addr.name = "government_count";
81343#endif /* FREECIV_JSON_CONNECTION */
81344
81345 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
81347 }
81348
81349#ifdef FREECIV_JSON_CONNECTION
81350 field_addr.name = "nation_count";
81351#endif /* FREECIV_JSON_CONNECTION */
81352
81353 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
81355 }
81356
81357#ifdef FREECIV_JSON_CONNECTION
81358 field_addr.name = "num_city_styles";
81359#endif /* FREECIV_JSON_CONNECTION */
81360
81361 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
81362 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
81363 }
81364
81365#ifdef FREECIV_JSON_CONNECTION
81366 field_addr.name = "terrain_count";
81367#endif /* FREECIV_JSON_CONNECTION */
81368
81369 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
81371 }
81372
81373#ifdef FREECIV_JSON_CONNECTION
81374 field_addr.name = "num_specialist_types";
81375#endif /* FREECIV_JSON_CONNECTION */
81376
81377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
81378 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
81379 }
81380
81381#ifdef FREECIV_JSON_CONNECTION
81382 field_addr.name = "num_nation_groups";
81383#endif /* FREECIV_JSON_CONNECTION */
81384
81385 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
81387 }
81388
81389#ifdef FREECIV_JSON_CONNECTION
81390 field_addr.name = "num_nation_sets";
81391#endif /* FREECIV_JSON_CONNECTION */
81392
81393 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
81395 }
81396
81397#ifdef FREECIV_JSON_CONNECTION
81398 field_addr.name = "preferred_tileset";
81399#endif /* FREECIV_JSON_CONNECTION */
81400
81401 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
81402 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
81403 }
81404
81405#ifdef FREECIV_JSON_CONNECTION
81406 field_addr.name = "preferred_soundset";
81407#endif /* FREECIV_JSON_CONNECTION */
81408
81409 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
81410 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
81411 }
81412
81413#ifdef FREECIV_JSON_CONNECTION
81414 field_addr.name = "preferred_musicset";
81415#endif /* FREECIV_JSON_CONNECTION */
81416
81417 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
81418 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
81419 }
81420
81421#ifdef FREECIV_JSON_CONNECTION
81422 field_addr.name = "popup_tech_help";
81423#endif /* FREECIV_JSON_CONNECTION */
81424
81425 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->popup_tech_help)) {
81426 RECEIVE_PACKET_FIELD_ERROR(popup_tech_help);
81427 }
81428
81429#ifdef FREECIV_JSON_CONNECTION
81430 field_addr.name = "name";
81431#endif /* FREECIV_JSON_CONNECTION */
81432
81433 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81435 }
81436
81437#ifdef FREECIV_JSON_CONNECTION
81438 field_addr.name = "version";
81439#endif /* FREECIV_JSON_CONNECTION */
81440
81441 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
81443 }
81444
81445#ifdef FREECIV_JSON_CONNECTION
81446 field_addr.name = "alt_dir";
81447#endif /* FREECIV_JSON_CONNECTION */
81448
81449 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
81451 }
81452
81453#ifdef FREECIV_JSON_CONNECTION
81454 field_addr.name = "desc_length";
81455#endif /* FREECIV_JSON_CONNECTION */
81456
81457 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
81458 RECEIVE_PACKET_FIELD_ERROR(desc_length);
81459 }
81460
81461#ifdef FREECIV_JSON_CONNECTION
81462 field_addr.name = "num_counters";
81463#endif /* FREECIV_JSON_CONNECTION */
81464
81465 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
81466 RECEIVE_PACKET_FIELD_ERROR(num_counters);
81467 }
81468#endif /* FREECIV_DELTA_PROTOCOL */
81469
81471#undef FREE_PACKET_STRUCT
81472}
81473
81475{
81476 const struct packet_ruleset_control *real_packet = packet;
81477 int e;
81479
81480 log_packet_detailed("packet_ruleset_control_100: sending info about ()");
81481
81482#ifdef FREECIV_DELTA_PROTOCOL
81485 bool differ;
81486 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CONTROL;
81487
81488 if (nullptr == *hash) {
81490 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
81491 }
81492 BV_CLR_ALL(fields);
81493
81494 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81495 old = fc_malloc(sizeof(*old));
81496 /* temporary bitcopy just to insert correctly */
81497 *old = *real_packet;
81500 }
81501
81502 differ = (old->num_unit_classes != real_packet->num_unit_classes);
81503 if (differ) {
81504 BV_SET(fields, 0);
81505 }
81506
81507 differ = (old->num_unit_types != real_packet->num_unit_types);
81508 if (differ) {
81509 BV_SET(fields, 1);
81510 }
81511
81512 differ = (old->num_impr_types != real_packet->num_impr_types);
81513 if (differ) {
81514 BV_SET(fields, 2);
81515 }
81516
81517 differ = (old->num_tech_classes != real_packet->num_tech_classes);
81518 if (differ) {
81519 BV_SET(fields, 3);
81520 }
81521
81522 differ = (old->num_tech_types != real_packet->num_tech_types);
81523 if (differ) {
81524 BV_SET(fields, 4);
81525 }
81526
81527 differ = (old->num_extra_types != real_packet->num_extra_types);
81528 if (differ) {
81529 BV_SET(fields, 5);
81530 }
81531
81532 differ = (old->num_base_types != real_packet->num_base_types);
81533 if (differ) {
81534 BV_SET(fields, 6);
81535 }
81536
81537 differ = (old->num_road_types != real_packet->num_road_types);
81538 if (differ) {
81539 BV_SET(fields, 7);
81540 }
81541
81542 differ = (old->num_resource_types != real_packet->num_resource_types);
81543 if (differ) {
81544 BV_SET(fields, 8);
81545 }
81546
81547 differ = (old->num_goods_types != real_packet->num_goods_types);
81548 if (differ) {
81549 BV_SET(fields, 9);
81550 }
81551
81552 differ = (old->num_disaster_types != real_packet->num_disaster_types);
81553 if (differ) {
81554 BV_SET(fields, 10);
81555 }
81556
81557 differ = (old->num_achievement_types != real_packet->num_achievement_types);
81558 if (differ) {
81559 BV_SET(fields, 11);
81560 }
81561
81562 differ = (old->num_multipliers != real_packet->num_multipliers);
81563 if (differ) {
81564 BV_SET(fields, 12);
81565 }
81566
81567 differ = (old->num_styles != real_packet->num_styles);
81568 if (differ) {
81569 BV_SET(fields, 13);
81570 }
81571
81572 differ = (old->num_music_styles != real_packet->num_music_styles);
81573 if (differ) {
81574 BV_SET(fields, 14);
81575 }
81576
81577 differ = (old->government_count != real_packet->government_count);
81578 if (differ) {
81579 BV_SET(fields, 15);
81580 }
81581
81582 differ = (old->nation_count != real_packet->nation_count);
81583 if (differ) {
81584 BV_SET(fields, 16);
81585 }
81586
81587 differ = (old->num_city_styles != real_packet->num_city_styles);
81588 if (differ) {
81589 BV_SET(fields, 17);
81590 }
81591
81592 differ = (old->terrain_count != real_packet->terrain_count);
81593 if (differ) {
81594 BV_SET(fields, 18);
81595 }
81596
81597 differ = (old->num_specialist_types != real_packet->num_specialist_types);
81598 if (differ) {
81599 BV_SET(fields, 19);
81600 }
81601
81602 differ = (old->num_nation_groups != real_packet->num_nation_groups);
81603 if (differ) {
81604 BV_SET(fields, 20);
81605 }
81606
81607 differ = (old->num_nation_sets != real_packet->num_nation_sets);
81608 if (differ) {
81609 BV_SET(fields, 21);
81610 }
81611
81612 differ = (strcmp(old->preferred_tileset, real_packet->preferred_tileset) != 0);
81613 if (differ) {
81614 BV_SET(fields, 22);
81615 }
81616
81617 differ = (strcmp(old->preferred_soundset, real_packet->preferred_soundset) != 0);
81618 if (differ) {
81619 BV_SET(fields, 23);
81620 }
81621
81622 differ = (strcmp(old->preferred_musicset, real_packet->preferred_musicset) != 0);
81623 if (differ) {
81624 BV_SET(fields, 24);
81625 }
81626
81627 /* folded into head */
81628 if (real_packet->popup_tech_help) {
81629 BV_SET(fields, 25);
81630 }
81631
81632 differ = (strcmp(old->name, real_packet->name) != 0);
81633 if (differ) {
81634 BV_SET(fields, 26);
81635 }
81636
81637 differ = (strcmp(old->version, real_packet->version) != 0);
81638 if (differ) {
81639 BV_SET(fields, 27);
81640 }
81641
81642 differ = (strcmp(old->alt_dir, real_packet->alt_dir) != 0);
81643 if (differ) {
81644 BV_SET(fields, 28);
81645 }
81646
81647 differ = (old->desc_length != real_packet->desc_length);
81648 if (differ) {
81649 BV_SET(fields, 29);
81650 }
81651
81652 differ = (old->num_counters != real_packet->num_counters);
81653 if (differ) {
81654 BV_SET(fields, 30);
81655 }
81656#endif /* FREECIV_DELTA_PROTOCOL */
81657
81658#ifdef FREECIV_JSON_CONNECTION
81659 struct plocation field_addr;
81660 {
81661 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
81664 }
81665#endif /* FREECIV_JSON_CONNECTION */
81666
81667#ifdef FREECIV_DELTA_PROTOCOL
81668#ifdef FREECIV_JSON_CONNECTION
81669 field_addr.name = "fields";
81670#endif /* FREECIV_JSON_CONNECTION */
81671 e = 0;
81672 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81673 if (e) {
81674 log_packet_detailed("fields bitvector error detected");
81675 }
81676
81677 if (BV_ISSET(fields, 0)) {
81678 log_packet_detailed(" field 'num_unit_classes' has changed");
81679
81680#ifdef FREECIV_JSON_CONNECTION
81681 field_addr.name = "num_unit_classes";
81682#endif /* FREECIV_JSON_CONNECTION */
81683 e = 0;
81684
81685 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
81686
81687 if (e) {
81688 log_packet_detailed("'num_unit_classes' field error detected");
81689 }
81690 }
81691
81692 if (BV_ISSET(fields, 1)) {
81693 log_packet_detailed(" field 'num_unit_types' has changed");
81694
81695#ifdef FREECIV_JSON_CONNECTION
81696 field_addr.name = "num_unit_types";
81697#endif /* FREECIV_JSON_CONNECTION */
81698 e = 0;
81699
81700 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
81701
81702 if (e) {
81703 log_packet_detailed("'num_unit_types' field error detected");
81704 }
81705 }
81706
81707 if (BV_ISSET(fields, 2)) {
81708 log_packet_detailed(" field 'num_impr_types' has changed");
81709
81710#ifdef FREECIV_JSON_CONNECTION
81711 field_addr.name = "num_impr_types";
81712#endif /* FREECIV_JSON_CONNECTION */
81713 e = 0;
81714
81715 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
81716
81717 if (e) {
81718 log_packet_detailed("'num_impr_types' field error detected");
81719 }
81720 }
81721
81722 if (BV_ISSET(fields, 3)) {
81723 log_packet_detailed(" field 'num_tech_classes' has changed");
81724
81725#ifdef FREECIV_JSON_CONNECTION
81726 field_addr.name = "num_tech_classes";
81727#endif /* FREECIV_JSON_CONNECTION */
81728 e = 0;
81729
81730 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
81731
81732 if (e) {
81733 log_packet_detailed("'num_tech_classes' field error detected");
81734 }
81735 }
81736
81737 if (BV_ISSET(fields, 4)) {
81738 log_packet_detailed(" field 'num_tech_types' has changed");
81739
81740#ifdef FREECIV_JSON_CONNECTION
81741 field_addr.name = "num_tech_types";
81742#endif /* FREECIV_JSON_CONNECTION */
81743 e = 0;
81744
81745 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
81746
81747 if (e) {
81748 log_packet_detailed("'num_tech_types' field error detected");
81749 }
81750 }
81751
81752 if (BV_ISSET(fields, 5)) {
81753 log_packet_detailed(" field 'num_extra_types' has changed");
81754
81755#ifdef FREECIV_JSON_CONNECTION
81756 field_addr.name = "num_extra_types";
81757#endif /* FREECIV_JSON_CONNECTION */
81758 e = 0;
81759
81760 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
81761
81762 if (e) {
81763 log_packet_detailed("'num_extra_types' field error detected");
81764 }
81765 }
81766
81767 if (BV_ISSET(fields, 6)) {
81768 log_packet_detailed(" field 'num_base_types' has changed");
81769
81770#ifdef FREECIV_JSON_CONNECTION
81771 field_addr.name = "num_base_types";
81772#endif /* FREECIV_JSON_CONNECTION */
81773 e = 0;
81774
81775 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
81776
81777 if (e) {
81778 log_packet_detailed("'num_base_types' field error detected");
81779 }
81780 }
81781
81782 if (BV_ISSET(fields, 7)) {
81783 log_packet_detailed(" field 'num_road_types' has changed");
81784
81785#ifdef FREECIV_JSON_CONNECTION
81786 field_addr.name = "num_road_types";
81787#endif /* FREECIV_JSON_CONNECTION */
81788 e = 0;
81789
81790 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
81791
81792 if (e) {
81793 log_packet_detailed("'num_road_types' field error detected");
81794 }
81795 }
81796
81797 if (BV_ISSET(fields, 8)) {
81798 log_packet_detailed(" field 'num_resource_types' has changed");
81799
81800#ifdef FREECIV_JSON_CONNECTION
81801 field_addr.name = "num_resource_types";
81802#endif /* FREECIV_JSON_CONNECTION */
81803 e = 0;
81804
81805 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
81806
81807 if (e) {
81808 log_packet_detailed("'num_resource_types' field error detected");
81809 }
81810 }
81811
81812 if (BV_ISSET(fields, 9)) {
81813 log_packet_detailed(" field 'num_goods_types' has changed");
81814
81815#ifdef FREECIV_JSON_CONNECTION
81816 field_addr.name = "num_goods_types";
81817#endif /* FREECIV_JSON_CONNECTION */
81818 e = 0;
81819
81820 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
81821
81822 if (e) {
81823 log_packet_detailed("'num_goods_types' field error detected");
81824 }
81825 }
81826
81827 if (BV_ISSET(fields, 10)) {
81828 log_packet_detailed(" field 'num_disaster_types' has changed");
81829
81830#ifdef FREECIV_JSON_CONNECTION
81831 field_addr.name = "num_disaster_types";
81832#endif /* FREECIV_JSON_CONNECTION */
81833 e = 0;
81834
81835 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
81836
81837 if (e) {
81838 log_packet_detailed("'num_disaster_types' field error detected");
81839 }
81840 }
81841
81842 if (BV_ISSET(fields, 11)) {
81843 log_packet_detailed(" field 'num_achievement_types' has changed");
81844
81845#ifdef FREECIV_JSON_CONNECTION
81846 field_addr.name = "num_achievement_types";
81847#endif /* FREECIV_JSON_CONNECTION */
81848 e = 0;
81849
81850 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
81851
81852 if (e) {
81853 log_packet_detailed("'num_achievement_types' field error detected");
81854 }
81855 }
81856
81857 if (BV_ISSET(fields, 12)) {
81858 log_packet_detailed(" field 'num_multipliers' has changed");
81859
81860#ifdef FREECIV_JSON_CONNECTION
81861 field_addr.name = "num_multipliers";
81862#endif /* FREECIV_JSON_CONNECTION */
81863 e = 0;
81864
81865 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
81866
81867 if (e) {
81868 log_packet_detailed("'num_multipliers' field error detected");
81869 }
81870 }
81871
81872 if (BV_ISSET(fields, 13)) {
81873 log_packet_detailed(" field 'num_styles' has changed");
81874
81875#ifdef FREECIV_JSON_CONNECTION
81876 field_addr.name = "num_styles";
81877#endif /* FREECIV_JSON_CONNECTION */
81878 e = 0;
81879
81880 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
81881
81882 if (e) {
81883 log_packet_detailed("'num_styles' field error detected");
81884 }
81885 }
81886
81887 if (BV_ISSET(fields, 14)) {
81888 log_packet_detailed(" field 'num_music_styles' has changed");
81889
81890#ifdef FREECIV_JSON_CONNECTION
81891 field_addr.name = "num_music_styles";
81892#endif /* FREECIV_JSON_CONNECTION */
81893 e = 0;
81894
81895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
81896
81897 if (e) {
81898 log_packet_detailed("'num_music_styles' field error detected");
81899 }
81900 }
81901
81902 if (BV_ISSET(fields, 15)) {
81903 log_packet_detailed(" field 'government_count' has changed");
81904
81905#ifdef FREECIV_JSON_CONNECTION
81906 field_addr.name = "government_count";
81907#endif /* FREECIV_JSON_CONNECTION */
81908 e = 0;
81909
81910 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
81911
81912 if (e) {
81913 log_packet_detailed("'government_count' field error detected");
81914 }
81915 }
81916
81917 if (BV_ISSET(fields, 16)) {
81918 log_packet_detailed(" field 'nation_count' has changed");
81919
81920#ifdef FREECIV_JSON_CONNECTION
81921 field_addr.name = "nation_count";
81922#endif /* FREECIV_JSON_CONNECTION */
81923 e = 0;
81924
81925 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
81926
81927 if (e) {
81928 log_packet_detailed("'nation_count' field error detected");
81929 }
81930 }
81931
81932 if (BV_ISSET(fields, 17)) {
81933 log_packet_detailed(" field 'num_city_styles' has changed");
81934
81935#ifdef FREECIV_JSON_CONNECTION
81936 field_addr.name = "num_city_styles";
81937#endif /* FREECIV_JSON_CONNECTION */
81938 e = 0;
81939
81940 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
81941
81942 if (e) {
81943 log_packet_detailed("'num_city_styles' field error detected");
81944 }
81945 }
81946
81947 if (BV_ISSET(fields, 18)) {
81948 log_packet_detailed(" field 'terrain_count' has changed");
81949
81950#ifdef FREECIV_JSON_CONNECTION
81951 field_addr.name = "terrain_count";
81952#endif /* FREECIV_JSON_CONNECTION */
81953 e = 0;
81954
81955 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
81956
81957 if (e) {
81958 log_packet_detailed("'terrain_count' field error detected");
81959 }
81960 }
81961
81962 if (BV_ISSET(fields, 19)) {
81963 log_packet_detailed(" field 'num_specialist_types' has changed");
81964
81965#ifdef FREECIV_JSON_CONNECTION
81966 field_addr.name = "num_specialist_types";
81967#endif /* FREECIV_JSON_CONNECTION */
81968 e = 0;
81969
81970 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
81971
81972 if (e) {
81973 log_packet_detailed("'num_specialist_types' field error detected");
81974 }
81975 }
81976
81977 if (BV_ISSET(fields, 20)) {
81978 log_packet_detailed(" field 'num_nation_groups' has changed");
81979
81980#ifdef FREECIV_JSON_CONNECTION
81981 field_addr.name = "num_nation_groups";
81982#endif /* FREECIV_JSON_CONNECTION */
81983 e = 0;
81984
81985 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
81986
81987 if (e) {
81988 log_packet_detailed("'num_nation_groups' field error detected");
81989 }
81990 }
81991
81992 if (BV_ISSET(fields, 21)) {
81993 log_packet_detailed(" field 'num_nation_sets' has changed");
81994
81995#ifdef FREECIV_JSON_CONNECTION
81996 field_addr.name = "num_nation_sets";
81997#endif /* FREECIV_JSON_CONNECTION */
81998 e = 0;
81999
82000 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
82001
82002 if (e) {
82003 log_packet_detailed("'num_nation_sets' field error detected");
82004 }
82005 }
82006
82007 if (BV_ISSET(fields, 22)) {
82008 log_packet_detailed(" field 'preferred_tileset' has changed");
82009
82010#ifdef FREECIV_JSON_CONNECTION
82011 field_addr.name = "preferred_tileset";
82012#endif /* FREECIV_JSON_CONNECTION */
82013 e = 0;
82014
82015 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
82016
82017 if (e) {
82018 log_packet_detailed("'preferred_tileset' field error detected");
82019 }
82020 }
82021
82022 if (BV_ISSET(fields, 23)) {
82023 log_packet_detailed(" field 'preferred_soundset' has changed");
82024
82025#ifdef FREECIV_JSON_CONNECTION
82026 field_addr.name = "preferred_soundset";
82027#endif /* FREECIV_JSON_CONNECTION */
82028 e = 0;
82029
82030 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
82031
82032 if (e) {
82033 log_packet_detailed("'preferred_soundset' field error detected");
82034 }
82035 }
82036
82037 if (BV_ISSET(fields, 24)) {
82038 log_packet_detailed(" field 'preferred_musicset' has changed");
82039
82040#ifdef FREECIV_JSON_CONNECTION
82041 field_addr.name = "preferred_musicset";
82042#endif /* FREECIV_JSON_CONNECTION */
82043 e = 0;
82044
82045 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
82046
82047 if (e) {
82048 log_packet_detailed("'preferred_musicset' field error detected");
82049 }
82050 }
82051
82052 /* field 25 is folded into the header */
82053
82054 if (BV_ISSET(fields, 26)) {
82055 log_packet_detailed(" field 'name' has changed");
82056
82057#ifdef FREECIV_JSON_CONNECTION
82058 field_addr.name = "name";
82059#endif /* FREECIV_JSON_CONNECTION */
82060 e = 0;
82061
82062 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
82063
82064 if (e) {
82065 log_packet_detailed("'name' field error detected");
82066 }
82067 }
82068
82069 if (BV_ISSET(fields, 27)) {
82070 log_packet_detailed(" field 'version' has changed");
82071
82072#ifdef FREECIV_JSON_CONNECTION
82073 field_addr.name = "version";
82074#endif /* FREECIV_JSON_CONNECTION */
82075 e = 0;
82076
82077 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
82078
82079 if (e) {
82080 log_packet_detailed("'version' field error detected");
82081 }
82082 }
82083
82084 if (BV_ISSET(fields, 28)) {
82085 log_packet_detailed(" field 'alt_dir' has changed");
82086
82087#ifdef FREECIV_JSON_CONNECTION
82088 field_addr.name = "alt_dir";
82089#endif /* FREECIV_JSON_CONNECTION */
82090 e = 0;
82091
82092 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
82093
82094 if (e) {
82095 log_packet_detailed("'alt_dir' field error detected");
82096 }
82097 }
82098
82099 if (BV_ISSET(fields, 29)) {
82100 log_packet_detailed(" field 'desc_length' has changed");
82101
82102#ifdef FREECIV_JSON_CONNECTION
82103 field_addr.name = "desc_length";
82104#endif /* FREECIV_JSON_CONNECTION */
82105 e = 0;
82106
82107 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
82108
82109 if (e) {
82110 log_packet_detailed("'desc_length' field error detected");
82111 }
82112 }
82113
82114 if (BV_ISSET(fields, 30)) {
82115 log_packet_detailed(" field 'num_counters' has changed");
82116
82117#ifdef FREECIV_JSON_CONNECTION
82118 field_addr.name = "num_counters";
82119#endif /* FREECIV_JSON_CONNECTION */
82120 e = 0;
82121
82122 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
82123
82124 if (e) {
82125 log_packet_detailed("'num_counters' field error detected");
82126 }
82127 }
82128
82129 *old = *real_packet;
82130
82131#else /* FREECIV_DELTA_PROTOCOL */
82132#ifdef FREECIV_JSON_CONNECTION
82133 field_addr.name = "num_unit_classes";
82134#endif /* FREECIV_JSON_CONNECTION */
82135 e = 0;
82136
82137 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
82138
82139 if (e) {
82140 log_packet_detailed("'num_unit_classes' field error detected");
82141 }
82142
82143#ifdef FREECIV_JSON_CONNECTION
82144 field_addr.name = "num_unit_types";
82145#endif /* FREECIV_JSON_CONNECTION */
82146 e = 0;
82147
82148 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
82149
82150 if (e) {
82151 log_packet_detailed("'num_unit_types' field error detected");
82152 }
82153
82154#ifdef FREECIV_JSON_CONNECTION
82155 field_addr.name = "num_impr_types";
82156#endif /* FREECIV_JSON_CONNECTION */
82157 e = 0;
82158
82159 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
82160
82161 if (e) {
82162 log_packet_detailed("'num_impr_types' field error detected");
82163 }
82164
82165#ifdef FREECIV_JSON_CONNECTION
82166 field_addr.name = "num_tech_classes";
82167#endif /* FREECIV_JSON_CONNECTION */
82168 e = 0;
82169
82170 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
82171
82172 if (e) {
82173 log_packet_detailed("'num_tech_classes' field error detected");
82174 }
82175
82176#ifdef FREECIV_JSON_CONNECTION
82177 field_addr.name = "num_tech_types";
82178#endif /* FREECIV_JSON_CONNECTION */
82179 e = 0;
82180
82181 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
82182
82183 if (e) {
82184 log_packet_detailed("'num_tech_types' field error detected");
82185 }
82186
82187#ifdef FREECIV_JSON_CONNECTION
82188 field_addr.name = "num_extra_types";
82189#endif /* FREECIV_JSON_CONNECTION */
82190 e = 0;
82191
82192 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
82193
82194 if (e) {
82195 log_packet_detailed("'num_extra_types' field error detected");
82196 }
82197
82198#ifdef FREECIV_JSON_CONNECTION
82199 field_addr.name = "num_base_types";
82200#endif /* FREECIV_JSON_CONNECTION */
82201 e = 0;
82202
82203 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
82204
82205 if (e) {
82206 log_packet_detailed("'num_base_types' field error detected");
82207 }
82208
82209#ifdef FREECIV_JSON_CONNECTION
82210 field_addr.name = "num_road_types";
82211#endif /* FREECIV_JSON_CONNECTION */
82212 e = 0;
82213
82214 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
82215
82216 if (e) {
82217 log_packet_detailed("'num_road_types' field error detected");
82218 }
82219
82220#ifdef FREECIV_JSON_CONNECTION
82221 field_addr.name = "num_resource_types";
82222#endif /* FREECIV_JSON_CONNECTION */
82223 e = 0;
82224
82225 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
82226
82227 if (e) {
82228 log_packet_detailed("'num_resource_types' field error detected");
82229 }
82230
82231#ifdef FREECIV_JSON_CONNECTION
82232 field_addr.name = "num_goods_types";
82233#endif /* FREECIV_JSON_CONNECTION */
82234 e = 0;
82235
82236 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
82237
82238 if (e) {
82239 log_packet_detailed("'num_goods_types' field error detected");
82240 }
82241
82242#ifdef FREECIV_JSON_CONNECTION
82243 field_addr.name = "num_disaster_types";
82244#endif /* FREECIV_JSON_CONNECTION */
82245 e = 0;
82246
82247 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
82248
82249 if (e) {
82250 log_packet_detailed("'num_disaster_types' field error detected");
82251 }
82252
82253#ifdef FREECIV_JSON_CONNECTION
82254 field_addr.name = "num_achievement_types";
82255#endif /* FREECIV_JSON_CONNECTION */
82256 e = 0;
82257
82258 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
82259
82260 if (e) {
82261 log_packet_detailed("'num_achievement_types' field error detected");
82262 }
82263
82264#ifdef FREECIV_JSON_CONNECTION
82265 field_addr.name = "num_multipliers";
82266#endif /* FREECIV_JSON_CONNECTION */
82267 e = 0;
82268
82269 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
82270
82271 if (e) {
82272 log_packet_detailed("'num_multipliers' field error detected");
82273 }
82274
82275#ifdef FREECIV_JSON_CONNECTION
82276 field_addr.name = "num_styles";
82277#endif /* FREECIV_JSON_CONNECTION */
82278 e = 0;
82279
82280 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
82281
82282 if (e) {
82283 log_packet_detailed("'num_styles' field error detected");
82284 }
82285
82286#ifdef FREECIV_JSON_CONNECTION
82287 field_addr.name = "num_music_styles";
82288#endif /* FREECIV_JSON_CONNECTION */
82289 e = 0;
82290
82291 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
82292
82293 if (e) {
82294 log_packet_detailed("'num_music_styles' field error detected");
82295 }
82296
82297#ifdef FREECIV_JSON_CONNECTION
82298 field_addr.name = "government_count";
82299#endif /* FREECIV_JSON_CONNECTION */
82300 e = 0;
82301
82302 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
82303
82304 if (e) {
82305 log_packet_detailed("'government_count' field error detected");
82306 }
82307
82308#ifdef FREECIV_JSON_CONNECTION
82309 field_addr.name = "nation_count";
82310#endif /* FREECIV_JSON_CONNECTION */
82311 e = 0;
82312
82313 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
82314
82315 if (e) {
82316 log_packet_detailed("'nation_count' field error detected");
82317 }
82318
82319#ifdef FREECIV_JSON_CONNECTION
82320 field_addr.name = "num_city_styles";
82321#endif /* FREECIV_JSON_CONNECTION */
82322 e = 0;
82323
82324 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
82325
82326 if (e) {
82327 log_packet_detailed("'num_city_styles' field error detected");
82328 }
82329
82330#ifdef FREECIV_JSON_CONNECTION
82331 field_addr.name = "terrain_count";
82332#endif /* FREECIV_JSON_CONNECTION */
82333 e = 0;
82334
82335 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
82336
82337 if (e) {
82338 log_packet_detailed("'terrain_count' field error detected");
82339 }
82340
82341#ifdef FREECIV_JSON_CONNECTION
82342 field_addr.name = "num_specialist_types";
82343#endif /* FREECIV_JSON_CONNECTION */
82344 e = 0;
82345
82346 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
82347
82348 if (e) {
82349 log_packet_detailed("'num_specialist_types' field error detected");
82350 }
82351
82352#ifdef FREECIV_JSON_CONNECTION
82353 field_addr.name = "num_nation_groups";
82354#endif /* FREECIV_JSON_CONNECTION */
82355 e = 0;
82356
82357 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
82358
82359 if (e) {
82360 log_packet_detailed("'num_nation_groups' field error detected");
82361 }
82362
82363#ifdef FREECIV_JSON_CONNECTION
82364 field_addr.name = "num_nation_sets";
82365#endif /* FREECIV_JSON_CONNECTION */
82366 e = 0;
82367
82368 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
82369
82370 if (e) {
82371 log_packet_detailed("'num_nation_sets' field error detected");
82372 }
82373
82374#ifdef FREECIV_JSON_CONNECTION
82375 field_addr.name = "preferred_tileset";
82376#endif /* FREECIV_JSON_CONNECTION */
82377 e = 0;
82378
82379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
82380
82381 if (e) {
82382 log_packet_detailed("'preferred_tileset' field error detected");
82383 }
82384
82385#ifdef FREECIV_JSON_CONNECTION
82386 field_addr.name = "preferred_soundset";
82387#endif /* FREECIV_JSON_CONNECTION */
82388 e = 0;
82389
82390 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
82391
82392 if (e) {
82393 log_packet_detailed("'preferred_soundset' field error detected");
82394 }
82395
82396#ifdef FREECIV_JSON_CONNECTION
82397 field_addr.name = "preferred_musicset";
82398#endif /* FREECIV_JSON_CONNECTION */
82399 e = 0;
82400
82401 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
82402
82403 if (e) {
82404 log_packet_detailed("'preferred_musicset' field error detected");
82405 }
82406
82407#ifdef FREECIV_JSON_CONNECTION
82408 field_addr.name = "popup_tech_help";
82409#endif /* FREECIV_JSON_CONNECTION */
82410 e = 0;
82411
82412 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->popup_tech_help);
82413
82414 if (e) {
82415 log_packet_detailed("'popup_tech_help' field error detected");
82416 }
82417
82418#ifdef FREECIV_JSON_CONNECTION
82419 field_addr.name = "name";
82420#endif /* FREECIV_JSON_CONNECTION */
82421 e = 0;
82422
82423 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
82424
82425 if (e) {
82426 log_packet_detailed("'name' field error detected");
82427 }
82428
82429#ifdef FREECIV_JSON_CONNECTION
82430 field_addr.name = "version";
82431#endif /* FREECIV_JSON_CONNECTION */
82432 e = 0;
82433
82434 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
82435
82436 if (e) {
82437 log_packet_detailed("'version' field error detected");
82438 }
82439
82440#ifdef FREECIV_JSON_CONNECTION
82441 field_addr.name = "alt_dir";
82442#endif /* FREECIV_JSON_CONNECTION */
82443 e = 0;
82444
82445 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
82446
82447 if (e) {
82448 log_packet_detailed("'alt_dir' field error detected");
82449 }
82450
82451#ifdef FREECIV_JSON_CONNECTION
82452 field_addr.name = "desc_length";
82453#endif /* FREECIV_JSON_CONNECTION */
82454 e = 0;
82455
82456 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
82457
82458 if (e) {
82459 log_packet_detailed("'desc_length' field error detected");
82460 }
82461
82462#ifdef FREECIV_JSON_CONNECTION
82463 field_addr.name = "num_counters";
82464#endif /* FREECIV_JSON_CONNECTION */
82465 e = 0;
82466
82467 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
82468
82469 if (e) {
82470 log_packet_detailed("'num_counters' field error detected");
82471 }
82472#endif /* FREECIV_DELTA_PROTOCOL */
82473
82475}
82476
82478{
82479 if (!pc->used) {
82480 log_error("WARNING: trying to send data to the closed connection %s",
82482 return -1;
82483 }
82484 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet != nullptr, -1,
82485 "Handler for PACKET_RULESET_CONTROL not installed");
82486 return pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet(pc, packet);
82487}
82488
82489void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
82490{
82491 conn_list_iterate(dest, pconn) {
82494}
82495
82496static inline void init_packet_ruleset_summary(struct packet_ruleset_summary *packet)
82497{
82498 memset(packet, 0, sizeof(*packet));
82499}
82500
82501#define free_packet_ruleset_summary(_packet) (void) 0
82502#define destroy_packet_ruleset_summary free
82503
82504#ifdef FREECIV_DELTA_PROTOCOL
82505#define hash_packet_ruleset_summary_100 hash_const
82506#define cmp_packet_ruleset_summary_100 cmp_const
82508#endif /* FREECIV_DELTA_PROTOCOL */
82509
82511{
82512#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_summary(_packet)
82514
82515#ifdef FREECIV_JSON_CONNECTION
82516 struct plocation field_addr;
82517 {
82518 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82521 }
82522#endif /* FREECIV_JSON_CONNECTION */
82523
82524 log_packet_detailed("packet_ruleset_summary_100: got info about ()");
82525
82526#ifdef FREECIV_DELTA_PROTOCOL
82529 struct genhash **hash = pc->phs.received + PACKET_RULESET_SUMMARY;
82530
82531 if (nullptr == *hash) {
82533 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
82534 }
82535
82536 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82537 *real_packet = *old;
82538 } else {
82539 /* packet is already initialized empty */
82540 log_packet_detailed(" no old info");
82541 }
82542
82543#ifdef FREECIV_JSON_CONNECTION
82544 field_addr.name = "fields";
82545#endif /* FREECIV_JSON_CONNECTION */
82546 DIO_BV_GET(&din, &field_addr, fields);
82547
82548 if (BV_ISSET(fields, 0)) {
82549 log_packet_detailed(" got field 'text'");
82550
82551#ifdef FREECIV_JSON_CONNECTION
82552 field_addr.name = "text";
82553#endif /* FREECIV_JSON_CONNECTION */
82554
82555 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82557 }
82558 }
82559
82560 if (nullptr == old) {
82561 old = fc_malloc(sizeof(*old));
82563 *old = *real_packet;
82565 } else {
82566 *old = *real_packet;
82567 }
82568
82569#else /* FREECIV_DELTA_PROTOCOL */
82570#ifdef FREECIV_JSON_CONNECTION
82571 field_addr.name = "text";
82572#endif /* FREECIV_JSON_CONNECTION */
82573
82574 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82576 }
82577#endif /* FREECIV_DELTA_PROTOCOL */
82578
82580#undef FREE_PACKET_STRUCT
82581}
82582
82584{
82585 const struct packet_ruleset_summary *real_packet = packet;
82586 int e;
82588
82589 log_packet_detailed("packet_ruleset_summary_100: sending info about ()");
82590
82591#ifdef FREECIV_DELTA_PROTOCOL
82594 bool differ;
82595 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SUMMARY;
82596
82597 if (nullptr == *hash) {
82599 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
82600 }
82601 BV_CLR_ALL(fields);
82602
82603 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82604 old = fc_malloc(sizeof(*old));
82605 /* temporary bitcopy just to insert correctly */
82606 *old = *real_packet;
82609 }
82610
82611 differ = (strcmp(old->text, real_packet->text) != 0);
82612 if (differ) {
82613 BV_SET(fields, 0);
82614 }
82615#endif /* FREECIV_DELTA_PROTOCOL */
82616
82617#ifdef FREECIV_JSON_CONNECTION
82618 struct plocation field_addr;
82619 {
82620 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82623 }
82624#endif /* FREECIV_JSON_CONNECTION */
82625
82626#ifdef FREECIV_DELTA_PROTOCOL
82627#ifdef FREECIV_JSON_CONNECTION
82628 field_addr.name = "fields";
82629#endif /* FREECIV_JSON_CONNECTION */
82630 e = 0;
82631 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82632 if (e) {
82633 log_packet_detailed("fields bitvector error detected");
82634 }
82635
82636 if (BV_ISSET(fields, 0)) {
82637 log_packet_detailed(" field 'text' has changed");
82638
82639#ifdef FREECIV_JSON_CONNECTION
82640 field_addr.name = "text";
82641#endif /* FREECIV_JSON_CONNECTION */
82642 e = 0;
82643
82644 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82645
82646 if (e) {
82647 log_packet_detailed("'text' field error detected");
82648 }
82649 }
82650
82651 *old = *real_packet;
82652
82653#else /* FREECIV_DELTA_PROTOCOL */
82654#ifdef FREECIV_JSON_CONNECTION
82655 field_addr.name = "text";
82656#endif /* FREECIV_JSON_CONNECTION */
82657 e = 0;
82658
82659 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82660
82661 if (e) {
82662 log_packet_detailed("'text' field error detected");
82663 }
82664#endif /* FREECIV_DELTA_PROTOCOL */
82665
82667}
82668
82670{
82671 if (!pc->used) {
82672 log_error("WARNING: trying to send data to the closed connection %s",
82674 return -1;
82675 }
82676 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet != nullptr, -1,
82677 "Handler for PACKET_RULESET_SUMMARY not installed");
82678 return pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet(pc, packet);
82679}
82680
82681void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
82682{
82683 conn_list_iterate(dest, pconn) {
82686}
82687
82689{
82690 memset(packet, 0, sizeof(*packet));
82691}
82692
82693#define free_packet_ruleset_description_part(_packet) (void) 0
82694#define destroy_packet_ruleset_description_part free
82695
82696#ifdef FREECIV_DELTA_PROTOCOL
82697#define hash_packet_ruleset_description_part_100 hash_const
82698#define cmp_packet_ruleset_description_part_100 cmp_const
82700#endif /* FREECIV_DELTA_PROTOCOL */
82701
82703{
82704#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_description_part(_packet)
82706
82707#ifdef FREECIV_JSON_CONNECTION
82708 struct plocation field_addr;
82709 {
82710 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82713 }
82714#endif /* FREECIV_JSON_CONNECTION */
82715
82716 log_packet_detailed("packet_ruleset_description_part_100: got info about ()");
82717
82718#ifdef FREECIV_DELTA_PROTOCOL
82721 struct genhash **hash = pc->phs.received + PACKET_RULESET_DESCRIPTION_PART;
82722
82723 if (nullptr == *hash) {
82725 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
82726 }
82727
82728 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82729 *real_packet = *old;
82730 } else {
82731 /* packet is already initialized empty */
82732 log_packet_detailed(" no old info");
82733 }
82734
82735#ifdef FREECIV_JSON_CONNECTION
82736 field_addr.name = "fields";
82737#endif /* FREECIV_JSON_CONNECTION */
82738 DIO_BV_GET(&din, &field_addr, fields);
82739
82740 if (BV_ISSET(fields, 0)) {
82741 log_packet_detailed(" got field 'text'");
82742
82743#ifdef FREECIV_JSON_CONNECTION
82744 field_addr.name = "text";
82745#endif /* FREECIV_JSON_CONNECTION */
82746
82747 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82749 }
82750 }
82751
82752 if (nullptr == old) {
82753 old = fc_malloc(sizeof(*old));
82755 *old = *real_packet;
82757 } else {
82758 *old = *real_packet;
82759 }
82760
82761#else /* FREECIV_DELTA_PROTOCOL */
82762#ifdef FREECIV_JSON_CONNECTION
82763 field_addr.name = "text";
82764#endif /* FREECIV_JSON_CONNECTION */
82765
82766 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82768 }
82769#endif /* FREECIV_DELTA_PROTOCOL */
82770
82772#undef FREE_PACKET_STRUCT
82773}
82774
82776{
82777 const struct packet_ruleset_description_part *real_packet = packet;
82778 int e;
82780
82781 log_packet_detailed("packet_ruleset_description_part_100: sending info about ()");
82782
82783#ifdef FREECIV_DELTA_PROTOCOL
82786 bool differ;
82787 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DESCRIPTION_PART;
82788
82789 if (nullptr == *hash) {
82791 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
82792 }
82793 BV_CLR_ALL(fields);
82794
82795 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82796 old = fc_malloc(sizeof(*old));
82797 /* temporary bitcopy just to insert correctly */
82798 *old = *real_packet;
82801 }
82802
82803 differ = (strcmp(old->text, real_packet->text) != 0);
82804 if (differ) {
82805 BV_SET(fields, 0);
82806 }
82807#endif /* FREECIV_DELTA_PROTOCOL */
82808
82809#ifdef FREECIV_JSON_CONNECTION
82810 struct plocation field_addr;
82811 {
82812 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82815 }
82816#endif /* FREECIV_JSON_CONNECTION */
82817
82818#ifdef FREECIV_DELTA_PROTOCOL
82819#ifdef FREECIV_JSON_CONNECTION
82820 field_addr.name = "fields";
82821#endif /* FREECIV_JSON_CONNECTION */
82822 e = 0;
82823 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82824 if (e) {
82825 log_packet_detailed("fields bitvector error detected");
82826 }
82827
82828 if (BV_ISSET(fields, 0)) {
82829 log_packet_detailed(" field 'text' has changed");
82830
82831#ifdef FREECIV_JSON_CONNECTION
82832 field_addr.name = "text";
82833#endif /* FREECIV_JSON_CONNECTION */
82834 e = 0;
82835
82836 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82837
82838 if (e) {
82839 log_packet_detailed("'text' field error detected");
82840 }
82841 }
82842
82843 *old = *real_packet;
82844
82845#else /* FREECIV_DELTA_PROTOCOL */
82846#ifdef FREECIV_JSON_CONNECTION
82847 field_addr.name = "text";
82848#endif /* FREECIV_JSON_CONNECTION */
82849 e = 0;
82850
82851 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82852
82853 if (e) {
82854 log_packet_detailed("'text' field error detected");
82855 }
82856#endif /* FREECIV_DELTA_PROTOCOL */
82857
82859}
82860
82862{
82863 if (!pc->used) {
82864 log_error("WARNING: trying to send data to the closed connection %s",
82866 return -1;
82867 }
82868 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet != nullptr, -1,
82869 "Handler for PACKET_RULESET_DESCRIPTION_PART not installed");
82870 return pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet(pc, packet);
82871}
82872
82879
82881{
82882 memset(packet, 0, sizeof(*packet));
82883}
82884
82885#define free_packet_single_want_hack_req(_packet) (void) 0
82886#define destroy_packet_single_want_hack_req free
82887
82888#ifdef FREECIV_DELTA_PROTOCOL
82889#define hash_packet_single_want_hack_req_100 hash_const
82890#define cmp_packet_single_want_hack_req_100 cmp_const
82892#endif /* FREECIV_DELTA_PROTOCOL */
82893
82895{
82896#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_req(_packet)
82898
82899#ifdef FREECIV_JSON_CONNECTION
82900 struct plocation field_addr;
82901 {
82902 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82905 }
82906#endif /* FREECIV_JSON_CONNECTION */
82907
82908 log_packet_detailed("packet_single_want_hack_req_100: got info about ()");
82909
82910#ifdef FREECIV_DELTA_PROTOCOL
82913 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REQ;
82914
82915 if (nullptr == *hash) {
82917 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
82918 }
82919
82920 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82921 *real_packet = *old;
82922 } else {
82923 /* packet is already initialized empty */
82924 log_packet_detailed(" no old info");
82925 }
82926
82927#ifdef FREECIV_JSON_CONNECTION
82928 field_addr.name = "fields";
82929#endif /* FREECIV_JSON_CONNECTION */
82930 DIO_BV_GET(&din, &field_addr, fields);
82931
82932 if (BV_ISSET(fields, 0)) {
82933 log_packet_detailed(" got field 'token'");
82934
82935#ifdef FREECIV_JSON_CONNECTION
82936 field_addr.name = "token";
82937#endif /* FREECIV_JSON_CONNECTION */
82938
82939 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
82941 }
82942 }
82943
82944 if (nullptr == old) {
82945 old = fc_malloc(sizeof(*old));
82947 *old = *real_packet;
82949 } else {
82950 *old = *real_packet;
82951 }
82952
82953#else /* FREECIV_DELTA_PROTOCOL */
82954#ifdef FREECIV_JSON_CONNECTION
82955 field_addr.name = "token";
82956#endif /* FREECIV_JSON_CONNECTION */
82957
82958 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
82960 }
82961#endif /* FREECIV_DELTA_PROTOCOL */
82962
82964#undef FREE_PACKET_STRUCT
82965}
82966
82968{
82969 const struct packet_single_want_hack_req *real_packet = packet;
82970 int e;
82972
82973 log_packet_detailed("packet_single_want_hack_req_100: sending info about ()");
82974
82975#ifdef FREECIV_DELTA_PROTOCOL
82978 bool differ;
82979 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REQ;
82980
82981 if (nullptr == *hash) {
82983 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
82984 }
82985 BV_CLR_ALL(fields);
82986
82987 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82988 old = fc_malloc(sizeof(*old));
82989 /* temporary bitcopy just to insert correctly */
82990 *old = *real_packet;
82993 }
82994
82995 differ = (strcmp(old->token, real_packet->token) != 0);
82996 if (differ) {
82997 BV_SET(fields, 0);
82998 }
82999#endif /* FREECIV_DELTA_PROTOCOL */
83000
83001#ifdef FREECIV_JSON_CONNECTION
83002 struct plocation field_addr;
83003 {
83004 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83007 }
83008#endif /* FREECIV_JSON_CONNECTION */
83009
83010#ifdef FREECIV_DELTA_PROTOCOL
83011#ifdef FREECIV_JSON_CONNECTION
83012 field_addr.name = "fields";
83013#endif /* FREECIV_JSON_CONNECTION */
83014 e = 0;
83015 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83016 if (e) {
83017 log_packet_detailed("fields bitvector error detected");
83018 }
83019
83020 if (BV_ISSET(fields, 0)) {
83021 log_packet_detailed(" field 'token' has changed");
83022
83023#ifdef FREECIV_JSON_CONNECTION
83024 field_addr.name = "token";
83025#endif /* FREECIV_JSON_CONNECTION */
83026 e = 0;
83027
83028 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83029
83030 if (e) {
83031 log_packet_detailed("'token' field error detected");
83032 }
83033 }
83034
83035 *old = *real_packet;
83036
83037#else /* FREECIV_DELTA_PROTOCOL */
83038#ifdef FREECIV_JSON_CONNECTION
83039 field_addr.name = "token";
83040#endif /* FREECIV_JSON_CONNECTION */
83041 e = 0;
83042
83043 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83044
83045 if (e) {
83046 log_packet_detailed("'token' field error detected");
83047 }
83048#endif /* FREECIV_DELTA_PROTOCOL */
83049
83051}
83052
83054{
83055 if (!pc->used) {
83056 log_error("WARNING: trying to send data to the closed connection %s",
83058 return -1;
83059 }
83060 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet != nullptr, -1,
83061 "Handler for PACKET_SINGLE_WANT_HACK_REQ not installed");
83062 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet(pc, packet);
83063}
83064
83066{
83067 memset(packet, 0, sizeof(*packet));
83068}
83069
83070#define free_packet_single_want_hack_reply(_packet) (void) 0
83071#define destroy_packet_single_want_hack_reply free
83072
83073#ifdef FREECIV_DELTA_PROTOCOL
83074#define hash_packet_single_want_hack_reply_100 hash_const
83075#define cmp_packet_single_want_hack_reply_100 cmp_const
83077#endif /* FREECIV_DELTA_PROTOCOL */
83078
83080{
83081#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_reply(_packet)
83083
83084#ifdef FREECIV_JSON_CONNECTION
83085 struct plocation field_addr;
83086 {
83087 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83090 }
83091#endif /* FREECIV_JSON_CONNECTION */
83092
83093 log_packet_detailed("packet_single_want_hack_reply_100: got info about ()");
83094
83095#ifdef FREECIV_DELTA_PROTOCOL
83098 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REPLY;
83099
83100 if (nullptr == *hash) {
83102 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
83103 }
83104
83105 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83106 *real_packet = *old;
83107 } else {
83108 /* packet is already initialized empty */
83109 log_packet_detailed(" no old info");
83110 }
83111
83112#ifdef FREECIV_JSON_CONNECTION
83113 field_addr.name = "fields";
83114#endif /* FREECIV_JSON_CONNECTION */
83115 DIO_BV_GET(&din, &field_addr, fields);
83116
83117 real_packet->you_have_hack = BV_ISSET(fields, 0);
83118
83119 if (nullptr == old) {
83120 old = fc_malloc(sizeof(*old));
83122 *old = *real_packet;
83124 } else {
83125 *old = *real_packet;
83126 }
83127
83128#else /* FREECIV_DELTA_PROTOCOL */
83129#ifdef FREECIV_JSON_CONNECTION
83130 field_addr.name = "you_have_hack";
83131#endif /* FREECIV_JSON_CONNECTION */
83132
83133 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_have_hack)) {
83134 RECEIVE_PACKET_FIELD_ERROR(you_have_hack);
83135 }
83136#endif /* FREECIV_DELTA_PROTOCOL */
83137
83139#undef FREE_PACKET_STRUCT
83140}
83141
83143{
83144 const struct packet_single_want_hack_reply *real_packet = packet;
83145 int e;
83147
83148 log_packet_detailed("packet_single_want_hack_reply_100: sending info about ()");
83149
83150#ifdef FREECIV_DELTA_PROTOCOL
83153 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REPLY;
83154
83155 if (nullptr == *hash) {
83157 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
83158 }
83159 BV_CLR_ALL(fields);
83160
83161 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83162 old = fc_malloc(sizeof(*old));
83163 /* temporary bitcopy just to insert correctly */
83164 *old = *real_packet;
83167 }
83168
83169 /* folded into head */
83170 if (real_packet->you_have_hack) {
83171 BV_SET(fields, 0);
83172 }
83173#endif /* FREECIV_DELTA_PROTOCOL */
83174
83175#ifdef FREECIV_JSON_CONNECTION
83176 struct plocation field_addr;
83177 {
83178 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83181 }
83182#endif /* FREECIV_JSON_CONNECTION */
83183
83184#ifdef FREECIV_DELTA_PROTOCOL
83185#ifdef FREECIV_JSON_CONNECTION
83186 field_addr.name = "fields";
83187#endif /* FREECIV_JSON_CONNECTION */
83188 e = 0;
83189 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83190 if (e) {
83191 log_packet_detailed("fields bitvector error detected");
83192 }
83193
83194 /* field 0 is folded into the header */
83195
83196 *old = *real_packet;
83197
83198#else /* FREECIV_DELTA_PROTOCOL */
83199#ifdef FREECIV_JSON_CONNECTION
83200 field_addr.name = "you_have_hack";
83201#endif /* FREECIV_JSON_CONNECTION */
83202 e = 0;
83203
83204 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_have_hack);
83205
83206 if (e) {
83207 log_packet_detailed("'you_have_hack' field error detected");
83208 }
83209#endif /* FREECIV_DELTA_PROTOCOL */
83210
83212}
83213
83215{
83216 if (!pc->used) {
83217 log_error("WARNING: trying to send data to the closed connection %s",
83219 return -1;
83220 }
83221 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet != nullptr, -1,
83222 "Handler for PACKET_SINGLE_WANT_HACK_REPLY not installed");
83223 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet(pc, packet);
83224}
83225
83226int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
83227{
83228 struct packet_single_want_hack_reply packet, *real_packet = &packet;
83229
83231
83233}
83234
83235static inline void init_packet_ruleset_choices(struct packet_ruleset_choices *packet)
83236{
83237 memset(packet, 0, sizeof(*packet));
83238}
83239
83240#define free_packet_ruleset_choices(_packet) (void) 0
83241#define destroy_packet_ruleset_choices free
83242
83243#ifdef FREECIV_DELTA_PROTOCOL
83244#define hash_packet_ruleset_choices_100 hash_const
83245#define cmp_packet_ruleset_choices_100 cmp_const
83247#endif /* FREECIV_DELTA_PROTOCOL */
83248
83250{
83251#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_choices(_packet)
83253
83254#ifdef FREECIV_JSON_CONNECTION
83255 struct plocation field_addr;
83256 {
83257 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83260 }
83261#endif /* FREECIV_JSON_CONNECTION */
83262
83263 log_packet_detailed("packet_ruleset_choices_100: got info about ()");
83264
83265#ifdef FREECIV_DELTA_PROTOCOL
83268 struct genhash **hash = pc->phs.received + PACKET_RULESET_CHOICES;
83269
83270 if (nullptr == *hash) {
83272 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
83273 }
83274
83275 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83276 *real_packet = *old;
83277 } else {
83278 /* packet is already initialized empty */
83279 log_packet_detailed(" no old info");
83280 }
83281
83282#ifdef FREECIV_JSON_CONNECTION
83283 field_addr.name = "fields";
83284#endif /* FREECIV_JSON_CONNECTION */
83285 DIO_BV_GET(&din, &field_addr, fields);
83286
83287 if (BV_ISSET(fields, 0)) {
83288 log_packet_detailed(" got field 'ruleset_count'");
83289
83290#ifdef FREECIV_JSON_CONNECTION
83291 field_addr.name = "ruleset_count";
83292#endif /* FREECIV_JSON_CONNECTION */
83293
83294 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
83295 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
83296 }
83297 }
83298
83299 if (BV_ISSET(fields, 1)) {
83300 log_packet_detailed(" got field 'rulesets'");
83301
83302#ifdef FREECIV_JSON_CONNECTION
83303 field_addr.name = "rulesets";
83304#endif /* FREECIV_JSON_CONNECTION */
83305
83306 {
83307 int i;
83308
83309 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
83310 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
83311 }
83312
83313#ifdef FREECIV_JSON_CONNECTION
83314 /* Enter array. */
83315 field_addr.sub_location = plocation_elem_new(0);
83316#endif /* FREECIV_JSON_CONNECTION */
83317
83318 for (i = 0; i < real_packet->ruleset_count; i++) {
83319#ifdef FREECIV_JSON_CONNECTION
83320 /* Next array element */
83321 field_addr.sub_location->number = i;
83322#endif /* FREECIV_JSON_CONNECTION */
83323
83324 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
83326 }
83327 }
83328
83329#ifdef FREECIV_JSON_CONNECTION
83330 /* Exit array. */
83331 FC_FREE(field_addr.sub_location);
83332#endif /* FREECIV_JSON_CONNECTION */
83333 }
83334 }
83335
83336 if (nullptr == old) {
83337 old = fc_malloc(sizeof(*old));
83339 *old = *real_packet;
83341 } else {
83342 *old = *real_packet;
83343 }
83344
83345#else /* FREECIV_DELTA_PROTOCOL */
83346#ifdef FREECIV_JSON_CONNECTION
83347 field_addr.name = "ruleset_count";
83348#endif /* FREECIV_JSON_CONNECTION */
83349
83350 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
83351 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
83352 }
83353
83354#ifdef FREECIV_JSON_CONNECTION
83355 field_addr.name = "rulesets";
83356#endif /* FREECIV_JSON_CONNECTION */
83357
83358 {
83359 int i;
83360
83361 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
83362 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
83363 }
83364
83365#ifdef FREECIV_JSON_CONNECTION
83366 /* Enter array. */
83367 field_addr.sub_location = plocation_elem_new(0);
83368#endif /* FREECIV_JSON_CONNECTION */
83369
83370 for (i = 0; i < real_packet->ruleset_count; i++) {
83371#ifdef FREECIV_JSON_CONNECTION
83372 /* Next array element */
83373 field_addr.sub_location->number = i;
83374#endif /* FREECIV_JSON_CONNECTION */
83375
83376 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
83378 }
83379 }
83380
83381#ifdef FREECIV_JSON_CONNECTION
83382 /* Exit array. */
83383 FC_FREE(field_addr.sub_location);
83384#endif /* FREECIV_JSON_CONNECTION */
83385 }
83386#endif /* FREECIV_DELTA_PROTOCOL */
83387
83389#undef FREE_PACKET_STRUCT
83390}
83391
83393{
83394 const struct packet_ruleset_choices *real_packet = packet;
83395 int e;
83397
83398 log_packet_detailed("packet_ruleset_choices_100: sending info about ()");
83399
83400#ifdef FREECIV_DELTA_PROTOCOL
83403 bool differ;
83404 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CHOICES;
83405
83406 if (nullptr == *hash) {
83408 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
83409 }
83410 BV_CLR_ALL(fields);
83411
83412 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83413 old = fc_malloc(sizeof(*old));
83414 /* temporary bitcopy just to insert correctly */
83415 *old = *real_packet;
83418 }
83419
83420 differ = (old->ruleset_count != real_packet->ruleset_count);
83421 if (differ) {
83422 BV_SET(fields, 0);
83423 }
83424
83425 differ = (old->ruleset_count != real_packet->ruleset_count);
83426 if (!differ) {
83427 int i;
83428
83429 for (i = 0; i < old->ruleset_count; i++) {
83430 differ = (strcmp(old->rulesets[i], real_packet->rulesets[i]) != 0);
83431 if (differ) {
83432 break;
83433 }
83434 }
83435 }
83436 if (differ) {
83437 BV_SET(fields, 1);
83438 }
83439#endif /* FREECIV_DELTA_PROTOCOL */
83440
83441#ifdef FREECIV_JSON_CONNECTION
83442 struct plocation field_addr;
83443 {
83444 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83447 }
83448#endif /* FREECIV_JSON_CONNECTION */
83449
83450#ifdef FREECIV_DELTA_PROTOCOL
83451#ifdef FREECIV_JSON_CONNECTION
83452 field_addr.name = "fields";
83453#endif /* FREECIV_JSON_CONNECTION */
83454 e = 0;
83455 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83456 if (e) {
83457 log_packet_detailed("fields bitvector error detected");
83458 }
83459
83460 if (BV_ISSET(fields, 0)) {
83461 log_packet_detailed(" field 'ruleset_count' has changed");
83462
83463#ifdef FREECIV_JSON_CONNECTION
83464 field_addr.name = "ruleset_count";
83465#endif /* FREECIV_JSON_CONNECTION */
83466 e = 0;
83467
83468 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
83469
83470 if (e) {
83471 log_packet_detailed("'ruleset_count' field error detected");
83472 }
83473 }
83474
83475 if (BV_ISSET(fields, 1)) {
83476 log_packet_detailed(" field 'rulesets' has changed");
83477
83478#ifdef FREECIV_JSON_CONNECTION
83479 field_addr.name = "rulesets";
83480#endif /* FREECIV_JSON_CONNECTION */
83481 e = 0;
83482
83483 {
83484 int i;
83485
83486#ifdef FREECIV_JSON_CONNECTION
83487 /* Create the array. */
83488 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
83489
83490 /* Enter array. */
83491 field_addr.sub_location = plocation_elem_new(0);
83492#endif /* FREECIV_JSON_CONNECTION */
83493
83494 for (i = 0; i < real_packet->ruleset_count; i++) {
83495#ifdef FREECIV_JSON_CONNECTION
83496 /* Next array element. */
83497 field_addr.sub_location->number = i;
83498#endif /* FREECIV_JSON_CONNECTION */
83499
83500 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
83501 }
83502
83503#ifdef FREECIV_JSON_CONNECTION
83504 /* Exit array. */
83505 FC_FREE(field_addr.sub_location);
83506#endif /* FREECIV_JSON_CONNECTION */
83507 }
83508
83509 if (e) {
83510 log_packet_detailed("'rulesets' field error detected");
83511 }
83512 }
83513
83514 *old = *real_packet;
83515
83516#else /* FREECIV_DELTA_PROTOCOL */
83517#ifdef FREECIV_JSON_CONNECTION
83518 field_addr.name = "ruleset_count";
83519#endif /* FREECIV_JSON_CONNECTION */
83520 e = 0;
83521
83522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
83523
83524 if (e) {
83525 log_packet_detailed("'ruleset_count' field error detected");
83526 }
83527
83528#ifdef FREECIV_JSON_CONNECTION
83529 field_addr.name = "rulesets";
83530#endif /* FREECIV_JSON_CONNECTION */
83531 e = 0;
83532
83533 {
83534 int i;
83535
83536#ifdef FREECIV_JSON_CONNECTION
83537 /* Create the array. */
83538 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
83539
83540 /* Enter array. */
83541 field_addr.sub_location = plocation_elem_new(0);
83542#endif /* FREECIV_JSON_CONNECTION */
83543
83544 for (i = 0; i < real_packet->ruleset_count; i++) {
83545#ifdef FREECIV_JSON_CONNECTION
83546 /* Next array element. */
83547 field_addr.sub_location->number = i;
83548#endif /* FREECIV_JSON_CONNECTION */
83549
83550 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
83551 }
83552
83553#ifdef FREECIV_JSON_CONNECTION
83554 /* Exit array. */
83555 FC_FREE(field_addr.sub_location);
83556#endif /* FREECIV_JSON_CONNECTION */
83557 }
83558
83559 if (e) {
83560 log_packet_detailed("'rulesets' field error detected");
83561 }
83562#endif /* FREECIV_DELTA_PROTOCOL */
83563
83565}
83566
83568{
83569 if (!pc->used) {
83570 log_error("WARNING: trying to send data to the closed connection %s",
83572 return -1;
83573 }
83574 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet != nullptr, -1,
83575 "Handler for PACKET_RULESET_CHOICES not installed");
83576 return pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet(pc, packet);
83577}
83578
83579static inline void init_packet_ruleset_select(struct packet_ruleset_select *packet)
83580{
83581 memset(packet, 0, sizeof(*packet));
83582}
83583
83584#define free_packet_ruleset_select(_packet) (void) 0
83585#define destroy_packet_ruleset_select free
83586
83587#ifdef FREECIV_DELTA_PROTOCOL
83588#define hash_packet_ruleset_select_100 hash_const
83589#define cmp_packet_ruleset_select_100 cmp_const
83591#endif /* FREECIV_DELTA_PROTOCOL */
83592
83594{
83595#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_select(_packet)
83597
83598#ifdef FREECIV_JSON_CONNECTION
83599 struct plocation field_addr;
83600 {
83601 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83604 }
83605#endif /* FREECIV_JSON_CONNECTION */
83606
83607 log_packet_detailed("packet_ruleset_select_100: got info about ()");
83608
83609#ifdef FREECIV_DELTA_PROTOCOL
83611 struct packet_ruleset_select *old;
83612 struct genhash **hash = pc->phs.received + PACKET_RULESET_SELECT;
83613
83614 if (nullptr == *hash) {
83616 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
83617 }
83618
83619 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83620 *real_packet = *old;
83621 } else {
83622 /* packet is already initialized empty */
83623 log_packet_detailed(" no old info");
83624 }
83625
83626#ifdef FREECIV_JSON_CONNECTION
83627 field_addr.name = "fields";
83628#endif /* FREECIV_JSON_CONNECTION */
83629 DIO_BV_GET(&din, &field_addr, fields);
83630
83631 if (BV_ISSET(fields, 0)) {
83632 log_packet_detailed(" got field 'modpack'");
83633
83634#ifdef FREECIV_JSON_CONNECTION
83635 field_addr.name = "modpack";
83636#endif /* FREECIV_JSON_CONNECTION */
83637
83638 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
83640 }
83641 }
83642
83643 if (nullptr == old) {
83644 old = fc_malloc(sizeof(*old));
83646 *old = *real_packet;
83648 } else {
83649 *old = *real_packet;
83650 }
83651
83652#else /* FREECIV_DELTA_PROTOCOL */
83653#ifdef FREECIV_JSON_CONNECTION
83654 field_addr.name = "modpack";
83655#endif /* FREECIV_JSON_CONNECTION */
83656
83657 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
83659 }
83660#endif /* FREECIV_DELTA_PROTOCOL */
83661
83663#undef FREE_PACKET_STRUCT
83664}
83665
83667{
83668 const struct packet_ruleset_select *real_packet = packet;
83669 int e;
83671
83672 log_packet_detailed("packet_ruleset_select_100: sending info about ()");
83673
83674#ifdef FREECIV_DELTA_PROTOCOL
83676 struct packet_ruleset_select *old;
83677 bool differ;
83678 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SELECT;
83679
83680 if (nullptr == *hash) {
83682 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
83683 }
83684 BV_CLR_ALL(fields);
83685
83686 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83687 old = fc_malloc(sizeof(*old));
83688 /* temporary bitcopy just to insert correctly */
83689 *old = *real_packet;
83692 }
83693
83694 differ = (strcmp(old->modpack, real_packet->modpack) != 0);
83695 if (differ) {
83696 BV_SET(fields, 0);
83697 }
83698#endif /* FREECIV_DELTA_PROTOCOL */
83699
83700#ifdef FREECIV_JSON_CONNECTION
83701 struct plocation field_addr;
83702 {
83703 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83706 }
83707#endif /* FREECIV_JSON_CONNECTION */
83708
83709#ifdef FREECIV_DELTA_PROTOCOL
83710#ifdef FREECIV_JSON_CONNECTION
83711 field_addr.name = "fields";
83712#endif /* FREECIV_JSON_CONNECTION */
83713 e = 0;
83714 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83715 if (e) {
83716 log_packet_detailed("fields bitvector error detected");
83717 }
83718
83719 if (BV_ISSET(fields, 0)) {
83720 log_packet_detailed(" field 'modpack' has changed");
83721
83722#ifdef FREECIV_JSON_CONNECTION
83723 field_addr.name = "modpack";
83724#endif /* FREECIV_JSON_CONNECTION */
83725 e = 0;
83726
83727 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
83728
83729 if (e) {
83730 log_packet_detailed("'modpack' field error detected");
83731 }
83732 }
83733
83734 *old = *real_packet;
83735
83736#else /* FREECIV_DELTA_PROTOCOL */
83737#ifdef FREECIV_JSON_CONNECTION
83738 field_addr.name = "modpack";
83739#endif /* FREECIV_JSON_CONNECTION */
83740 e = 0;
83741
83742 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
83743
83744 if (e) {
83745 log_packet_detailed("'modpack' field error detected");
83746 }
83747#endif /* FREECIV_DELTA_PROTOCOL */
83748
83750}
83751
83753{
83754 if (!pc->used) {
83755 log_error("WARNING: trying to send data to the closed connection %s",
83757 return -1;
83758 }
83759 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SELECT].packet != nullptr, -1,
83760 "Handler for PACKET_RULESET_SELECT not installed");
83761 return pc->phs.handlers->send[PACKET_RULESET_SELECT].packet(pc, packet);
83762}
83763
83764static inline void init_packet_game_load(struct packet_game_load *packet)
83765{
83766 memset(packet, 0, sizeof(*packet));
83767}
83768
83769#define free_packet_game_load(_packet) (void) 0
83770#define destroy_packet_game_load free
83771
83772#ifdef FREECIV_DELTA_PROTOCOL
83773#define hash_packet_game_load_100 hash_const
83774#define cmp_packet_game_load_100 cmp_const
83776#endif /* FREECIV_DELTA_PROTOCOL */
83777
83779{
83780#define FREE_PACKET_STRUCT(_packet) free_packet_game_load(_packet)
83782
83783#ifdef FREECIV_JSON_CONNECTION
83784 struct plocation field_addr;
83785 {
83786 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83789 }
83790#endif /* FREECIV_JSON_CONNECTION */
83791
83792 log_packet_detailed("packet_game_load_100: got info about ()");
83793
83794#ifdef FREECIV_DELTA_PROTOCOL
83796 struct packet_game_load *old;
83797 struct genhash **hash = pc->phs.received + PACKET_GAME_LOAD;
83798
83799 if (nullptr == *hash) {
83801 nullptr, nullptr, nullptr, destroy_packet_game_load);
83802 }
83803
83804 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83805 *real_packet = *old;
83806 } else {
83807 /* packet is already initialized empty */
83808 log_packet_detailed(" no old info");
83809 }
83810
83811#ifdef FREECIV_JSON_CONNECTION
83812 field_addr.name = "fields";
83813#endif /* FREECIV_JSON_CONNECTION */
83814 DIO_BV_GET(&din, &field_addr, fields);
83815
83816 real_packet->load_successful = BV_ISSET(fields, 0);
83817
83818 if (BV_ISSET(fields, 1)) {
83819 log_packet_detailed(" got field 'load_filename'");
83820
83821#ifdef FREECIV_JSON_CONNECTION
83822 field_addr.name = "load_filename";
83823#endif /* FREECIV_JSON_CONNECTION */
83824
83825 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
83827 }
83828 }
83829
83830 if (nullptr == old) {
83831 old = fc_malloc(sizeof(*old));
83833 *old = *real_packet;
83835 } else {
83836 *old = *real_packet;
83837 }
83838
83839#else /* FREECIV_DELTA_PROTOCOL */
83840#ifdef FREECIV_JSON_CONNECTION
83841 field_addr.name = "load_successful";
83842#endif /* FREECIV_JSON_CONNECTION */
83843
83844 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->load_successful)) {
83845 RECEIVE_PACKET_FIELD_ERROR(load_successful);
83846 }
83847
83848#ifdef FREECIV_JSON_CONNECTION
83849 field_addr.name = "load_filename";
83850#endif /* FREECIV_JSON_CONNECTION */
83851
83852 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
83854 }
83855#endif /* FREECIV_DELTA_PROTOCOL */
83856
83858#undef FREE_PACKET_STRUCT
83859}
83860
83861static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
83862{
83863 const struct packet_game_load *real_packet = packet;
83864 int e;
83866
83867 log_packet_detailed("packet_game_load_100: sending info about ()");
83868
83869#ifdef FREECIV_DELTA_PROTOCOL
83871 struct packet_game_load *old;
83872 bool differ;
83873 struct genhash **hash = pc->phs.sent + PACKET_GAME_LOAD;
83874
83875 if (nullptr == *hash) {
83877 nullptr, nullptr, nullptr, destroy_packet_game_load);
83878 }
83879 BV_CLR_ALL(fields);
83880
83881 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83882 old = fc_malloc(sizeof(*old));
83883 /* temporary bitcopy just to insert correctly */
83884 *old = *real_packet;
83887 }
83888
83889 /* folded into head */
83890 if (real_packet->load_successful) {
83891 BV_SET(fields, 0);
83892 }
83893
83894 differ = (strcmp(old->load_filename, real_packet->load_filename) != 0);
83895 if (differ) {
83896 BV_SET(fields, 1);
83897 }
83898#endif /* FREECIV_DELTA_PROTOCOL */
83899
83900#ifdef FREECIV_JSON_CONNECTION
83901 struct plocation field_addr;
83902 {
83903 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83906 }
83907#endif /* FREECIV_JSON_CONNECTION */
83908
83909#ifdef FREECIV_DELTA_PROTOCOL
83910#ifdef FREECIV_JSON_CONNECTION
83911 field_addr.name = "fields";
83912#endif /* FREECIV_JSON_CONNECTION */
83913 e = 0;
83914 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83915 if (e) {
83916 log_packet_detailed("fields bitvector error detected");
83917 }
83918
83919 /* field 0 is folded into the header */
83920
83921 if (BV_ISSET(fields, 1)) {
83922 log_packet_detailed(" field 'load_filename' has changed");
83923
83924#ifdef FREECIV_JSON_CONNECTION
83925 field_addr.name = "load_filename";
83926#endif /* FREECIV_JSON_CONNECTION */
83927 e = 0;
83928
83929 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
83930
83931 if (e) {
83932 log_packet_detailed("'load_filename' field error detected");
83933 }
83934 }
83935
83936 *old = *real_packet;
83937
83938#else /* FREECIV_DELTA_PROTOCOL */
83939#ifdef FREECIV_JSON_CONNECTION
83940 field_addr.name = "load_successful";
83941#endif /* FREECIV_JSON_CONNECTION */
83942 e = 0;
83943
83944 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->load_successful);
83945
83946 if (e) {
83947 log_packet_detailed("'load_successful' field error detected");
83948 }
83949
83950#ifdef FREECIV_JSON_CONNECTION
83951 field_addr.name = "load_filename";
83952#endif /* FREECIV_JSON_CONNECTION */
83953 e = 0;
83954
83955 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
83956
83957 if (e) {
83958 log_packet_detailed("'load_filename' field error detected");
83959 }
83960#endif /* FREECIV_DELTA_PROTOCOL */
83961
83963}
83964
83965int send_packet_game_load(struct connection *pc, const struct packet_game_load *packet)
83966{
83967 if (!pc->used) {
83968 log_error("WARNING: trying to send data to the closed connection %s",
83970 return -1;
83971 }
83972 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_LOAD].packet != nullptr, -1,
83973 "Handler for PACKET_GAME_LOAD not installed");
83974 return pc->phs.handlers->send[PACKET_GAME_LOAD].packet(pc, packet);
83975}
83976
83977void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
83978{
83979 conn_list_iterate(dest, pconn) {
83982}
83983
83984int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
83985{
83986 struct packet_game_load packet, *real_packet = &packet;
83987
83989 sz_strlcpy(real_packet->load_filename, load_filename);
83990
83992}
83993
83995{
83996 struct packet_game_load packet, *real_packet = &packet;
83997
83999 sz_strlcpy(real_packet->load_filename, load_filename);
84000
84002}
84003
84005{
84006 memset(packet, 0, sizeof(*packet));
84007}
84008
84009#define free_packet_server_setting_control(_packet) (void) 0
84010#define destroy_packet_server_setting_control free
84011
84012#ifdef FREECIV_DELTA_PROTOCOL
84013#define hash_packet_server_setting_control_100 hash_const
84014#define cmp_packet_server_setting_control_100 cmp_const
84016#endif /* FREECIV_DELTA_PROTOCOL */
84017
84019{
84020#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_control(_packet)
84022
84023#ifdef FREECIV_JSON_CONNECTION
84024 struct plocation field_addr;
84025 {
84026 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84029 }
84030#endif /* FREECIV_JSON_CONNECTION */
84031
84032 log_packet_detailed("packet_server_setting_control_100: got info about ()");
84033
84034#ifdef FREECIV_DELTA_PROTOCOL
84037 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONTROL;
84038
84039 if (nullptr == *hash) {
84041 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
84042 }
84043
84044 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84045 *real_packet = *old;
84046 } else {
84047 /* packet is already initialized empty */
84048 log_packet_detailed(" no old info");
84049 }
84050
84051#ifdef FREECIV_JSON_CONNECTION
84052 field_addr.name = "fields";
84053#endif /* FREECIV_JSON_CONNECTION */
84054 DIO_BV_GET(&din, &field_addr, fields);
84055
84056 if (BV_ISSET(fields, 0)) {
84057 log_packet_detailed(" got field 'settings_num'");
84058
84059#ifdef FREECIV_JSON_CONNECTION
84060 field_addr.name = "settings_num";
84061#endif /* FREECIV_JSON_CONNECTION */
84062
84063 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
84064 RECEIVE_PACKET_FIELD_ERROR(settings_num);
84065 }
84066 }
84067
84068 if (BV_ISSET(fields, 1)) {
84069 log_packet_detailed(" got field 'categories_num'");
84070
84071#ifdef FREECIV_JSON_CONNECTION
84072 field_addr.name = "categories_num";
84073#endif /* FREECIV_JSON_CONNECTION */
84074
84075 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
84076 RECEIVE_PACKET_FIELD_ERROR(categories_num);
84077 }
84078 }
84079
84080 if (BV_ISSET(fields, 2)) {
84081 log_packet_detailed(" got field 'category_names'");
84082
84083#ifdef FREECIV_JSON_CONNECTION
84084 field_addr.name = "category_names";
84085#endif /* FREECIV_JSON_CONNECTION */
84086
84087 {
84088 int i;
84089
84090 if (real_packet->categories_num > 256) {
84091 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
84092 }
84093
84094#ifdef FREECIV_JSON_CONNECTION
84095 /* Enter array. */
84096 field_addr.sub_location = plocation_elem_new(0);
84097#endif /* FREECIV_JSON_CONNECTION */
84098
84099 for (i = 0; i < real_packet->categories_num; i++) {
84100#ifdef FREECIV_JSON_CONNECTION
84101 /* Next array element */
84102 field_addr.sub_location->number = i;
84103#endif /* FREECIV_JSON_CONNECTION */
84104
84105 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
84106 RECEIVE_PACKET_FIELD_ERROR(category_names);
84107 }
84108 }
84109
84110#ifdef FREECIV_JSON_CONNECTION
84111 /* Exit array. */
84112 FC_FREE(field_addr.sub_location);
84113#endif /* FREECIV_JSON_CONNECTION */
84114 }
84115 }
84116
84117 if (nullptr == old) {
84118 old = fc_malloc(sizeof(*old));
84120 *old = *real_packet;
84122 } else {
84123 *old = *real_packet;
84124 }
84125
84126#else /* FREECIV_DELTA_PROTOCOL */
84127#ifdef FREECIV_JSON_CONNECTION
84128 field_addr.name = "settings_num";
84129#endif /* FREECIV_JSON_CONNECTION */
84130
84131 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
84132 RECEIVE_PACKET_FIELD_ERROR(settings_num);
84133 }
84134
84135#ifdef FREECIV_JSON_CONNECTION
84136 field_addr.name = "categories_num";
84137#endif /* FREECIV_JSON_CONNECTION */
84138
84139 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
84140 RECEIVE_PACKET_FIELD_ERROR(categories_num);
84141 }
84142
84143#ifdef FREECIV_JSON_CONNECTION
84144 field_addr.name = "category_names";
84145#endif /* FREECIV_JSON_CONNECTION */
84146
84147 {
84148 int i;
84149
84150 if (real_packet->categories_num > 256) {
84151 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
84152 }
84153
84154#ifdef FREECIV_JSON_CONNECTION
84155 /* Enter array. */
84156 field_addr.sub_location = plocation_elem_new(0);
84157#endif /* FREECIV_JSON_CONNECTION */
84158
84159 for (i = 0; i < real_packet->categories_num; i++) {
84160#ifdef FREECIV_JSON_CONNECTION
84161 /* Next array element */
84162 field_addr.sub_location->number = i;
84163#endif /* FREECIV_JSON_CONNECTION */
84164
84165 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
84166 RECEIVE_PACKET_FIELD_ERROR(category_names);
84167 }
84168 }
84169
84170#ifdef FREECIV_JSON_CONNECTION
84171 /* Exit array. */
84172 FC_FREE(field_addr.sub_location);
84173#endif /* FREECIV_JSON_CONNECTION */
84174 }
84175#endif /* FREECIV_DELTA_PROTOCOL */
84176
84178#undef FREE_PACKET_STRUCT
84179}
84180
84182{
84183 const struct packet_server_setting_control *real_packet = packet;
84184 int e;
84186
84187 log_packet_detailed("packet_server_setting_control_100: sending info about ()");
84188
84189#ifdef FREECIV_DELTA_PROTOCOL
84192 bool differ;
84193 int different = 0;
84194 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONTROL;
84195
84196 if (nullptr == *hash) {
84198 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
84199 }
84200 BV_CLR_ALL(fields);
84201
84202 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84203 old = fc_malloc(sizeof(*old));
84204 /* temporary bitcopy just to insert correctly */
84205 *old = *real_packet;
84208 different = 1; /* Force to send. */
84209 }
84210
84211 differ = (old->settings_num != real_packet->settings_num);
84212 if (differ) {
84213 different++;
84214 BV_SET(fields, 0);
84215 }
84216
84217 differ = (old->categories_num != real_packet->categories_num);
84218 if (differ) {
84219 different++;
84220 BV_SET(fields, 1);
84221 }
84222
84223 differ = (old->categories_num != real_packet->categories_num);
84224 if (!differ) {
84225 int i;
84226
84227 for (i = 0; i < old->categories_num; i++) {
84228 differ = (strcmp(old->category_names[i], real_packet->category_names[i]) != 0);
84229 if (differ) {
84230 break;
84231 }
84232 }
84233 }
84234 if (differ) {
84235 different++;
84236 BV_SET(fields, 2);
84237 }
84238
84239 if (different == 0) {
84240 log_packet_detailed(" no change -> discard");
84242 }
84243#endif /* FREECIV_DELTA_PROTOCOL */
84244
84245#ifdef FREECIV_JSON_CONNECTION
84246 struct plocation field_addr;
84247 {
84248 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84251 }
84252#endif /* FREECIV_JSON_CONNECTION */
84253
84254#ifdef FREECIV_DELTA_PROTOCOL
84255#ifdef FREECIV_JSON_CONNECTION
84256 field_addr.name = "fields";
84257#endif /* FREECIV_JSON_CONNECTION */
84258 e = 0;
84259 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84260 if (e) {
84261 log_packet_detailed("fields bitvector error detected");
84262 }
84263
84264 if (BV_ISSET(fields, 0)) {
84265 log_packet_detailed(" field 'settings_num' has changed");
84266
84267#ifdef FREECIV_JSON_CONNECTION
84268 field_addr.name = "settings_num";
84269#endif /* FREECIV_JSON_CONNECTION */
84270 e = 0;
84271
84272 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
84273
84274 if (e) {
84275 log_packet_detailed("'settings_num' field error detected");
84276 }
84277 }
84278
84279 if (BV_ISSET(fields, 1)) {
84280 log_packet_detailed(" field 'categories_num' has changed");
84281
84282#ifdef FREECIV_JSON_CONNECTION
84283 field_addr.name = "categories_num";
84284#endif /* FREECIV_JSON_CONNECTION */
84285 e = 0;
84286
84287 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
84288
84289 if (e) {
84290 log_packet_detailed("'categories_num' field error detected");
84291 }
84292 }
84293
84294 if (BV_ISSET(fields, 2)) {
84295 log_packet_detailed(" field 'category_names' has changed");
84296
84297#ifdef FREECIV_JSON_CONNECTION
84298 field_addr.name = "category_names";
84299#endif /* FREECIV_JSON_CONNECTION */
84300 e = 0;
84301
84302 {
84303 int i;
84304
84305#ifdef FREECIV_JSON_CONNECTION
84306 /* Create the array. */
84307 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
84308
84309 /* Enter array. */
84310 field_addr.sub_location = plocation_elem_new(0);
84311#endif /* FREECIV_JSON_CONNECTION */
84312
84313 for (i = 0; i < real_packet->categories_num; i++) {
84314#ifdef FREECIV_JSON_CONNECTION
84315 /* Next array element. */
84316 field_addr.sub_location->number = i;
84317#endif /* FREECIV_JSON_CONNECTION */
84318
84319 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
84320 }
84321
84322#ifdef FREECIV_JSON_CONNECTION
84323 /* Exit array. */
84324 FC_FREE(field_addr.sub_location);
84325#endif /* FREECIV_JSON_CONNECTION */
84326 }
84327
84328 if (e) {
84329 log_packet_detailed("'category_names' field error detected");
84330 }
84331 }
84332
84333 *old = *real_packet;
84334
84335#else /* FREECIV_DELTA_PROTOCOL */
84336#ifdef FREECIV_JSON_CONNECTION
84337 field_addr.name = "settings_num";
84338#endif /* FREECIV_JSON_CONNECTION */
84339 e = 0;
84340
84341 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
84342
84343 if (e) {
84344 log_packet_detailed("'settings_num' field error detected");
84345 }
84346
84347#ifdef FREECIV_JSON_CONNECTION
84348 field_addr.name = "categories_num";
84349#endif /* FREECIV_JSON_CONNECTION */
84350 e = 0;
84351
84352 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
84353
84354 if (e) {
84355 log_packet_detailed("'categories_num' field error detected");
84356 }
84357
84358#ifdef FREECIV_JSON_CONNECTION
84359 field_addr.name = "category_names";
84360#endif /* FREECIV_JSON_CONNECTION */
84361 e = 0;
84362
84363 {
84364 int i;
84365
84366#ifdef FREECIV_JSON_CONNECTION
84367 /* Create the array. */
84368 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
84369
84370 /* Enter array. */
84371 field_addr.sub_location = plocation_elem_new(0);
84372#endif /* FREECIV_JSON_CONNECTION */
84373
84374 for (i = 0; i < real_packet->categories_num; i++) {
84375#ifdef FREECIV_JSON_CONNECTION
84376 /* Next array element. */
84377 field_addr.sub_location->number = i;
84378#endif /* FREECIV_JSON_CONNECTION */
84379
84380 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
84381 }
84382
84383#ifdef FREECIV_JSON_CONNECTION
84384 /* Exit array. */
84385 FC_FREE(field_addr.sub_location);
84386#endif /* FREECIV_JSON_CONNECTION */
84387 }
84388
84389 if (e) {
84390 log_packet_detailed("'category_names' field error detected");
84391 }
84392#endif /* FREECIV_DELTA_PROTOCOL */
84393
84395}
84396
84398{
84399 if (!pc->used) {
84400 log_error("WARNING: trying to send data to the closed connection %s",
84402 return -1;
84403 }
84404 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet != nullptr, -1,
84405 "Handler for PACKET_SERVER_SETTING_CONTROL not installed");
84406 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet(pc, packet);
84407}
84408
84410{
84411 memset(packet, 0, sizeof(*packet));
84412}
84413
84414#define free_packet_server_setting_const(_packet) (void) 0
84415#define destroy_packet_server_setting_const free
84416
84417#ifdef FREECIV_DELTA_PROTOCOL
84419{
84420 const struct packet_server_setting_const *key = (const struct packet_server_setting_const *) vkey;
84421 genhash_val_t result = 0;
84422
84423 result += key->id;
84424
84425 result &= 0xFFFFFFFF;
84426 return result;
84427}
84428
84429static bool cmp_packet_server_setting_const_100(const void *vkey1, const void *vkey2)
84430{
84431 const struct packet_server_setting_const *old = (const struct packet_server_setting_const *) vkey1;
84433 bool differ;
84434
84435 differ = (old->id != real_packet->id);
84436
84437 return !differ;
84438}
84440#endif /* FREECIV_DELTA_PROTOCOL */
84441
84443{
84444#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_const(_packet)
84446
84447#ifdef FREECIV_JSON_CONNECTION
84448 struct plocation field_addr;
84449 {
84450 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84453 }
84454#endif /* FREECIV_JSON_CONNECTION */
84455
84456#ifdef FREECIV_JSON_CONNECTION
84457 field_addr.name = "id";
84458#endif /* FREECIV_JSON_CONNECTION */
84459
84460 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84462 }
84463
84464 log_packet_detailed("packet_server_setting_const_100: got info about (%d)",
84465 real_packet->id);
84466
84467#ifdef FREECIV_DELTA_PROTOCOL
84470 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONST;
84471
84472 if (nullptr == *hash) {
84474 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
84475 }
84476
84477 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84478 *real_packet = *old;
84479 } else {
84480 /* packet is already initialized empty */
84481 log_packet_detailed(" no old info");
84482 }
84483
84484#ifdef FREECIV_JSON_CONNECTION
84485 field_addr.name = "fields";
84486#endif /* FREECIV_JSON_CONNECTION */
84487 DIO_BV_GET(&din, &field_addr, fields);
84488
84489 if (BV_ISSET(fields, 0)) {
84490 log_packet_detailed(" got field 'name'");
84491
84492#ifdef FREECIV_JSON_CONNECTION
84493 field_addr.name = "name";
84494#endif /* FREECIV_JSON_CONNECTION */
84495
84496 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84498 }
84499 }
84500
84501 if (BV_ISSET(fields, 1)) {
84502 log_packet_detailed(" got field 'short_help'");
84503
84504#ifdef FREECIV_JSON_CONNECTION
84505 field_addr.name = "short_help";
84506#endif /* FREECIV_JSON_CONNECTION */
84507
84508 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
84509 RECEIVE_PACKET_FIELD_ERROR(short_help);
84510 }
84511 }
84512
84513 if (BV_ISSET(fields, 2)) {
84514 log_packet_detailed(" got field 'extra_help'");
84515
84516#ifdef FREECIV_JSON_CONNECTION
84517 field_addr.name = "extra_help";
84518#endif /* FREECIV_JSON_CONNECTION */
84519
84520 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
84521 RECEIVE_PACKET_FIELD_ERROR(extra_help);
84522 }
84523 }
84524
84525 if (BV_ISSET(fields, 3)) {
84526 log_packet_detailed(" got field 'category'");
84527
84528#ifdef FREECIV_JSON_CONNECTION
84529 field_addr.name = "category";
84530#endif /* FREECIV_JSON_CONNECTION */
84531
84532 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
84534 }
84535 }
84536
84537 if (nullptr == old) {
84538 old = fc_malloc(sizeof(*old));
84540 *old = *real_packet;
84542 } else {
84543 *old = *real_packet;
84544 }
84545
84546#else /* FREECIV_DELTA_PROTOCOL */
84547#ifdef FREECIV_JSON_CONNECTION
84548 field_addr.name = "name";
84549#endif /* FREECIV_JSON_CONNECTION */
84550
84551 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84553 }
84554
84555#ifdef FREECIV_JSON_CONNECTION
84556 field_addr.name = "short_help";
84557#endif /* FREECIV_JSON_CONNECTION */
84558
84559 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
84560 RECEIVE_PACKET_FIELD_ERROR(short_help);
84561 }
84562
84563#ifdef FREECIV_JSON_CONNECTION
84564 field_addr.name = "extra_help";
84565#endif /* FREECIV_JSON_CONNECTION */
84566
84567 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
84568 RECEIVE_PACKET_FIELD_ERROR(extra_help);
84569 }
84570
84571#ifdef FREECIV_JSON_CONNECTION
84572 field_addr.name = "category";
84573#endif /* FREECIV_JSON_CONNECTION */
84574
84575 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
84577 }
84578#endif /* FREECIV_DELTA_PROTOCOL */
84579
84581#undef FREE_PACKET_STRUCT
84582}
84583
84585{
84586 const struct packet_server_setting_const *real_packet = packet;
84587 int e;
84589
84590 log_packet_detailed("packet_server_setting_const_100: sending info about (%d)",
84591 real_packet->id);
84592
84593#ifdef FREECIV_DELTA_PROTOCOL
84596 bool differ;
84597 int different = 0;
84598 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONST;
84599
84600 if (nullptr == *hash) {
84602 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
84603 }
84604 BV_CLR_ALL(fields);
84605
84606 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84607 old = fc_malloc(sizeof(*old));
84608 /* temporary bitcopy just to insert correctly */
84609 *old = *real_packet;
84612 different = 1; /* Force to send. */
84613 }
84614
84615 differ = (strcmp(old->name, real_packet->name) != 0);
84616 if (differ) {
84617 different++;
84618 BV_SET(fields, 0);
84619 }
84620
84621 differ = (strcmp(old->short_help, real_packet->short_help) != 0);
84622 if (differ) {
84623 different++;
84624 BV_SET(fields, 1);
84625 }
84626
84627 differ = (strcmp(old->extra_help, real_packet->extra_help) != 0);
84628 if (differ) {
84629 different++;
84630 BV_SET(fields, 2);
84631 }
84632
84633 differ = (old->category != real_packet->category);
84634 if (differ) {
84635 different++;
84636 BV_SET(fields, 3);
84637 }
84638
84639 if (different == 0) {
84640 log_packet_detailed(" no change -> discard");
84642 }
84643#endif /* FREECIV_DELTA_PROTOCOL */
84644
84645#ifdef FREECIV_JSON_CONNECTION
84646 struct plocation field_addr;
84647 {
84648 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84651 }
84652#endif /* FREECIV_JSON_CONNECTION */
84653
84654#ifdef FREECIV_JSON_CONNECTION
84655 field_addr.name = "id";
84656#endif /* FREECIV_JSON_CONNECTION */
84657 e = 0;
84658
84659 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
84660
84661 if (e) {
84662 log_packet_detailed("'id' field error detected");
84663 }
84664
84665#ifdef FREECIV_DELTA_PROTOCOL
84666#ifdef FREECIV_JSON_CONNECTION
84667 field_addr.name = "fields";
84668#endif /* FREECIV_JSON_CONNECTION */
84669 e = 0;
84670 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84671 if (e) {
84672 log_packet_detailed("fields bitvector error detected");
84673 }
84674
84675 if (BV_ISSET(fields, 0)) {
84676 log_packet_detailed(" field 'name' has changed");
84677
84678#ifdef FREECIV_JSON_CONNECTION
84679 field_addr.name = "name";
84680#endif /* FREECIV_JSON_CONNECTION */
84681 e = 0;
84682
84683 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
84684
84685 if (e) {
84686 log_packet_detailed("'name' field error detected");
84687 }
84688 }
84689
84690 if (BV_ISSET(fields, 1)) {
84691 log_packet_detailed(" field 'short_help' has changed");
84692
84693#ifdef FREECIV_JSON_CONNECTION
84694 field_addr.name = "short_help";
84695#endif /* FREECIV_JSON_CONNECTION */
84696 e = 0;
84697
84698 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
84699
84700 if (e) {
84701 log_packet_detailed("'short_help' field error detected");
84702 }
84703 }
84704
84705 if (BV_ISSET(fields, 2)) {
84706 log_packet_detailed(" field 'extra_help' has changed");
84707
84708#ifdef FREECIV_JSON_CONNECTION
84709 field_addr.name = "extra_help";
84710#endif /* FREECIV_JSON_CONNECTION */
84711 e = 0;
84712
84713 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
84714
84715 if (e) {
84716 log_packet_detailed("'extra_help' field error detected");
84717 }
84718 }
84719
84720 if (BV_ISSET(fields, 3)) {
84721 log_packet_detailed(" field 'category' has changed");
84722
84723#ifdef FREECIV_JSON_CONNECTION
84724 field_addr.name = "category";
84725#endif /* FREECIV_JSON_CONNECTION */
84726 e = 0;
84727
84728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
84729
84730 if (e) {
84731 log_packet_detailed("'category' field error detected");
84732 }
84733 }
84734
84735 *old = *real_packet;
84736
84737#else /* FREECIV_DELTA_PROTOCOL */
84738#ifdef FREECIV_JSON_CONNECTION
84739 field_addr.name = "name";
84740#endif /* FREECIV_JSON_CONNECTION */
84741 e = 0;
84742
84743 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
84744
84745 if (e) {
84746 log_packet_detailed("'name' field error detected");
84747 }
84748
84749#ifdef FREECIV_JSON_CONNECTION
84750 field_addr.name = "short_help";
84751#endif /* FREECIV_JSON_CONNECTION */
84752 e = 0;
84753
84754 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
84755
84756 if (e) {
84757 log_packet_detailed("'short_help' field error detected");
84758 }
84759
84760#ifdef FREECIV_JSON_CONNECTION
84761 field_addr.name = "extra_help";
84762#endif /* FREECIV_JSON_CONNECTION */
84763 e = 0;
84764
84765 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
84766
84767 if (e) {
84768 log_packet_detailed("'extra_help' field error detected");
84769 }
84770
84771#ifdef FREECIV_JSON_CONNECTION
84772 field_addr.name = "category";
84773#endif /* FREECIV_JSON_CONNECTION */
84774 e = 0;
84775
84776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
84777
84778 if (e) {
84779 log_packet_detailed("'category' field error detected");
84780 }
84781#endif /* FREECIV_DELTA_PROTOCOL */
84782
84784}
84785
84787{
84788 if (!pc->used) {
84789 log_error("WARNING: trying to send data to the closed connection %s",
84791 return -1;
84792 }
84793 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet != nullptr, -1,
84794 "Handler for PACKET_SERVER_SETTING_CONST not installed");
84795 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet(pc, packet);
84796}
84797
84799{
84800 memset(packet, 0, sizeof(*packet));
84801}
84802
84803#define free_packet_server_setting_bool(_packet) (void) 0
84804#define destroy_packet_server_setting_bool free
84805
84806#ifdef FREECIV_DELTA_PROTOCOL
84808{
84809 const struct packet_server_setting_bool *key = (const struct packet_server_setting_bool *) vkey;
84810 genhash_val_t result = 0;
84811
84812 result += key->id;
84813
84814 result &= 0xFFFFFFFF;
84815 return result;
84816}
84817
84818static bool cmp_packet_server_setting_bool_100(const void *vkey1, const void *vkey2)
84819{
84820 const struct packet_server_setting_bool *old = (const struct packet_server_setting_bool *) vkey1;
84822 bool differ;
84823
84824 differ = (old->id != real_packet->id);
84825
84826 return !differ;
84827}
84829#endif /* FREECIV_DELTA_PROTOCOL */
84830
84832{
84833#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bool(_packet)
84835
84836#ifdef FREECIV_JSON_CONNECTION
84837 struct plocation field_addr;
84838 {
84839 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84842 }
84843#endif /* FREECIV_JSON_CONNECTION */
84844
84845#ifdef FREECIV_JSON_CONNECTION
84846 field_addr.name = "id";
84847#endif /* FREECIV_JSON_CONNECTION */
84848
84849 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84851 }
84852
84853 log_packet_detailed("packet_server_setting_bool_100: got info about (%d)",
84854 real_packet->id);
84855
84856#ifdef FREECIV_DELTA_PROTOCOL
84859 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BOOL;
84860
84861 if (nullptr == *hash) {
84863 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
84864 }
84865
84866 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84867 *real_packet = *old;
84868 } else {
84869 /* packet is already initialized empty */
84870 log_packet_detailed(" no old info");
84871 }
84872
84873#ifdef FREECIV_JSON_CONNECTION
84874 field_addr.name = "fields";
84875#endif /* FREECIV_JSON_CONNECTION */
84876 DIO_BV_GET(&din, &field_addr, fields);
84877
84878 real_packet->is_visible = BV_ISSET(fields, 0);
84879
84880 real_packet->is_changeable = BV_ISSET(fields, 1);
84881
84882 real_packet->initial_setting = BV_ISSET(fields, 2);
84883
84884 if (BV_ISSET(fields, 3)) {
84885 log_packet_detailed(" got field 'setdef'");
84886
84887#ifdef FREECIV_JSON_CONNECTION
84888 field_addr.name = "setdef";
84889#endif /* FREECIV_JSON_CONNECTION */
84890
84891 {
84892 int readin;
84893
84894 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
84896 }
84897 real_packet->setdef = readin;
84898 }
84899 }
84900
84901 real_packet->val = BV_ISSET(fields, 4);
84902
84903 real_packet->default_val = BV_ISSET(fields, 5);
84904
84905 if (nullptr == old) {
84906 old = fc_malloc(sizeof(*old));
84908 *old = *real_packet;
84910 } else {
84911 *old = *real_packet;
84912 }
84913
84914#else /* FREECIV_DELTA_PROTOCOL */
84915#ifdef FREECIV_JSON_CONNECTION
84916 field_addr.name = "is_visible";
84917#endif /* FREECIV_JSON_CONNECTION */
84918
84919 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
84920 RECEIVE_PACKET_FIELD_ERROR(is_visible);
84921 }
84922
84923#ifdef FREECIV_JSON_CONNECTION
84924 field_addr.name = "is_changeable";
84925#endif /* FREECIV_JSON_CONNECTION */
84926
84927 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
84928 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
84929 }
84930
84931#ifdef FREECIV_JSON_CONNECTION
84932 field_addr.name = "initial_setting";
84933#endif /* FREECIV_JSON_CONNECTION */
84934
84935 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
84936 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
84937 }
84938
84939#ifdef FREECIV_JSON_CONNECTION
84940 field_addr.name = "setdef";
84941#endif /* FREECIV_JSON_CONNECTION */
84942
84943 {
84944 int readin;
84945
84946 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
84948 }
84949 real_packet->setdef = readin;
84950 }
84951
84952#ifdef FREECIV_JSON_CONNECTION
84953 field_addr.name = "val";
84954#endif /* FREECIV_JSON_CONNECTION */
84955
84956 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->val)) {
84958 }
84959
84960#ifdef FREECIV_JSON_CONNECTION
84961 field_addr.name = "default_val";
84962#endif /* FREECIV_JSON_CONNECTION */
84963
84964 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->default_val)) {
84965 RECEIVE_PACKET_FIELD_ERROR(default_val);
84966 }
84967#endif /* FREECIV_DELTA_PROTOCOL */
84968
84970#undef FREE_PACKET_STRUCT
84971}
84972
84974{
84975 const struct packet_server_setting_bool *real_packet = packet;
84976 int e;
84978
84979 log_packet_detailed("packet_server_setting_bool_100: sending info about (%d)",
84980 real_packet->id);
84981
84982#ifdef FREECIV_DELTA_PROTOCOL
84985 bool differ;
84986 int different = 0;
84987 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BOOL;
84988
84989 if (nullptr == *hash) {
84991 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
84992 }
84993 BV_CLR_ALL(fields);
84994
84995 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84996 old = fc_malloc(sizeof(*old));
84997 /* temporary bitcopy just to insert correctly */
84998 *old = *real_packet;
85001 different = 1; /* Force to send. */
85002 }
85003
85004 differ = (old->is_visible != real_packet->is_visible);
85005 if (differ) {
85006 different++;
85007 }
85008 /* folded into head */
85009 if (real_packet->is_visible) {
85010 BV_SET(fields, 0);
85011 }
85012
85013 differ = (old->is_changeable != real_packet->is_changeable);
85014 if (differ) {
85015 different++;
85016 }
85017 /* folded into head */
85018 if (real_packet->is_changeable) {
85019 BV_SET(fields, 1);
85020 }
85021
85022 differ = (old->initial_setting != real_packet->initial_setting);
85023 if (differ) {
85024 different++;
85025 }
85026 /* folded into head */
85027 if (real_packet->initial_setting) {
85028 BV_SET(fields, 2);
85029 }
85030
85031 differ = (old->setdef != real_packet->setdef);
85032 if (differ) {
85033 different++;
85034 BV_SET(fields, 3);
85035 }
85036
85037 differ = (old->val != real_packet->val);
85038 if (differ) {
85039 different++;
85040 }
85041 /* folded into head */
85042 if (real_packet->val) {
85043 BV_SET(fields, 4);
85044 }
85045
85046 differ = (old->default_val != real_packet->default_val);
85047 if (differ) {
85048 different++;
85049 }
85050 /* folded into head */
85051 if (real_packet->default_val) {
85052 BV_SET(fields, 5);
85053 }
85054
85055 if (different == 0) {
85056 log_packet_detailed(" no change -> discard");
85058 }
85059#endif /* FREECIV_DELTA_PROTOCOL */
85060
85061#ifdef FREECIV_JSON_CONNECTION
85062 struct plocation field_addr;
85063 {
85064 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85067 }
85068#endif /* FREECIV_JSON_CONNECTION */
85069
85070#ifdef FREECIV_JSON_CONNECTION
85071 field_addr.name = "id";
85072#endif /* FREECIV_JSON_CONNECTION */
85073 e = 0;
85074
85075 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85076
85077 if (e) {
85078 log_packet_detailed("'id' field error detected");
85079 }
85080
85081#ifdef FREECIV_DELTA_PROTOCOL
85082#ifdef FREECIV_JSON_CONNECTION
85083 field_addr.name = "fields";
85084#endif /* FREECIV_JSON_CONNECTION */
85085 e = 0;
85086 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85087 if (e) {
85088 log_packet_detailed("fields bitvector error detected");
85089 }
85090
85091 /* field 0 is folded into the header */
85092
85093 /* field 1 is folded into the header */
85094
85095 /* field 2 is folded into the header */
85096
85097 if (BV_ISSET(fields, 3)) {
85098 log_packet_detailed(" field 'setdef' has changed");
85099
85100#ifdef FREECIV_JSON_CONNECTION
85101 field_addr.name = "setdef";
85102#endif /* FREECIV_JSON_CONNECTION */
85103 e = 0;
85104
85105 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85106
85107 if (e) {
85108 log_packet_detailed("'setdef' field error detected");
85109 }
85110 }
85111
85112 /* field 4 is folded into the header */
85113
85114 /* field 5 is folded into the header */
85115
85116 *old = *real_packet;
85117
85118#else /* FREECIV_DELTA_PROTOCOL */
85119#ifdef FREECIV_JSON_CONNECTION
85120 field_addr.name = "is_visible";
85121#endif /* FREECIV_JSON_CONNECTION */
85122 e = 0;
85123
85124 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
85125
85126 if (e) {
85127 log_packet_detailed("'is_visible' field error detected");
85128 }
85129
85130#ifdef FREECIV_JSON_CONNECTION
85131 field_addr.name = "is_changeable";
85132#endif /* FREECIV_JSON_CONNECTION */
85133 e = 0;
85134
85135 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
85136
85137 if (e) {
85138 log_packet_detailed("'is_changeable' field error detected");
85139 }
85140
85141#ifdef FREECIV_JSON_CONNECTION
85142 field_addr.name = "initial_setting";
85143#endif /* FREECIV_JSON_CONNECTION */
85144 e = 0;
85145
85146 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
85147
85148 if (e) {
85149 log_packet_detailed("'initial_setting' field error detected");
85150 }
85151
85152#ifdef FREECIV_JSON_CONNECTION
85153 field_addr.name = "setdef";
85154#endif /* FREECIV_JSON_CONNECTION */
85155 e = 0;
85156
85157 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85158
85159 if (e) {
85160 log_packet_detailed("'setdef' field error detected");
85161 }
85162
85163#ifdef FREECIV_JSON_CONNECTION
85164 field_addr.name = "val";
85165#endif /* FREECIV_JSON_CONNECTION */
85166 e = 0;
85167
85168 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->val);
85169
85170 if (e) {
85171 log_packet_detailed("'val' field error detected");
85172 }
85173
85174#ifdef FREECIV_JSON_CONNECTION
85175 field_addr.name = "default_val";
85176#endif /* FREECIV_JSON_CONNECTION */
85177 e = 0;
85178
85179 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->default_val);
85180
85181 if (e) {
85182 log_packet_detailed("'default_val' field error detected");
85183 }
85184#endif /* FREECIV_DELTA_PROTOCOL */
85185
85187}
85188
85190{
85191 if (!pc->used) {
85192 log_error("WARNING: trying to send data to the closed connection %s",
85194 return -1;
85195 }
85196 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet != nullptr, -1,
85197 "Handler for PACKET_SERVER_SETTING_BOOL not installed");
85198 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet(pc, packet);
85199}
85200
85202{
85203 memset(packet, 0, sizeof(*packet));
85204}
85205
85206#define free_packet_server_setting_int(_packet) (void) 0
85207#define destroy_packet_server_setting_int free
85208
85209#ifdef FREECIV_DELTA_PROTOCOL
85211{
85212 const struct packet_server_setting_int *key = (const struct packet_server_setting_int *) vkey;
85213 genhash_val_t result = 0;
85214
85215 result += key->id;
85216
85217 result &= 0xFFFFFFFF;
85218 return result;
85219}
85220
85221static bool cmp_packet_server_setting_int_100(const void *vkey1, const void *vkey2)
85222{
85223 const struct packet_server_setting_int *old = (const struct packet_server_setting_int *) vkey1;
85225 bool differ;
85226
85227 differ = (old->id != real_packet->id);
85228
85229 return !differ;
85230}
85232#endif /* FREECIV_DELTA_PROTOCOL */
85233
85235{
85236#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_int(_packet)
85238
85239#ifdef FREECIV_JSON_CONNECTION
85240 struct plocation field_addr;
85241 {
85242 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85245 }
85246#endif /* FREECIV_JSON_CONNECTION */
85247
85248#ifdef FREECIV_JSON_CONNECTION
85249 field_addr.name = "id";
85250#endif /* FREECIV_JSON_CONNECTION */
85251
85252 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85254 }
85255
85256 log_packet_detailed("packet_server_setting_int_100: got info about (%d)",
85257 real_packet->id);
85258
85259#ifdef FREECIV_DELTA_PROTOCOL
85262 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_INT;
85263
85264 if (nullptr == *hash) {
85266 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
85267 }
85268
85269 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85270 *real_packet = *old;
85271 } else {
85272 /* packet is already initialized empty */
85273 log_packet_detailed(" no old info");
85274 }
85275
85276#ifdef FREECIV_JSON_CONNECTION
85277 field_addr.name = "fields";
85278#endif /* FREECIV_JSON_CONNECTION */
85279 DIO_BV_GET(&din, &field_addr, fields);
85280
85281 real_packet->is_visible = BV_ISSET(fields, 0);
85282
85283 real_packet->is_changeable = BV_ISSET(fields, 1);
85284
85285 real_packet->initial_setting = BV_ISSET(fields, 2);
85286
85287 if (BV_ISSET(fields, 3)) {
85288 log_packet_detailed(" got field 'setdef'");
85289
85290#ifdef FREECIV_JSON_CONNECTION
85291 field_addr.name = "setdef";
85292#endif /* FREECIV_JSON_CONNECTION */
85293
85294 {
85295 int readin;
85296
85297 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85299 }
85300 real_packet->setdef = readin;
85301 }
85302 }
85303
85304 if (BV_ISSET(fields, 4)) {
85305 log_packet_detailed(" got field 'val'");
85306
85307#ifdef FREECIV_JSON_CONNECTION
85308 field_addr.name = "val";
85309#endif /* FREECIV_JSON_CONNECTION */
85310
85311 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
85313 }
85314 }
85315
85316 if (BV_ISSET(fields, 5)) {
85317 log_packet_detailed(" got field 'default_val'");
85318
85319#ifdef FREECIV_JSON_CONNECTION
85320 field_addr.name = "default_val";
85321#endif /* FREECIV_JSON_CONNECTION */
85322
85323 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
85324 RECEIVE_PACKET_FIELD_ERROR(default_val);
85325 }
85326 }
85327
85328 if (BV_ISSET(fields, 6)) {
85329 log_packet_detailed(" got field 'min_val'");
85330
85331#ifdef FREECIV_JSON_CONNECTION
85332 field_addr.name = "min_val";
85333#endif /* FREECIV_JSON_CONNECTION */
85334
85335 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
85337 }
85338 }
85339
85340 if (BV_ISSET(fields, 7)) {
85341 log_packet_detailed(" got field 'max_val'");
85342
85343#ifdef FREECIV_JSON_CONNECTION
85344 field_addr.name = "max_val";
85345#endif /* FREECIV_JSON_CONNECTION */
85346
85347 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
85349 }
85350 }
85351
85352 if (nullptr == old) {
85353 old = fc_malloc(sizeof(*old));
85355 *old = *real_packet;
85357 } else {
85358 *old = *real_packet;
85359 }
85360
85361#else /* FREECIV_DELTA_PROTOCOL */
85362#ifdef FREECIV_JSON_CONNECTION
85363 field_addr.name = "is_visible";
85364#endif /* FREECIV_JSON_CONNECTION */
85365
85366 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85367 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85368 }
85369
85370#ifdef FREECIV_JSON_CONNECTION
85371 field_addr.name = "is_changeable";
85372#endif /* FREECIV_JSON_CONNECTION */
85373
85374 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
85375 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
85376 }
85377
85378#ifdef FREECIV_JSON_CONNECTION
85379 field_addr.name = "initial_setting";
85380#endif /* FREECIV_JSON_CONNECTION */
85381
85382 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
85383 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
85384 }
85385
85386#ifdef FREECIV_JSON_CONNECTION
85387 field_addr.name = "setdef";
85388#endif /* FREECIV_JSON_CONNECTION */
85389
85390 {
85391 int readin;
85392
85393 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85395 }
85396 real_packet->setdef = readin;
85397 }
85398
85399#ifdef FREECIV_JSON_CONNECTION
85400 field_addr.name = "val";
85401#endif /* FREECIV_JSON_CONNECTION */
85402
85403 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
85405 }
85406
85407#ifdef FREECIV_JSON_CONNECTION
85408 field_addr.name = "default_val";
85409#endif /* FREECIV_JSON_CONNECTION */
85410
85411 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
85412 RECEIVE_PACKET_FIELD_ERROR(default_val);
85413 }
85414
85415#ifdef FREECIV_JSON_CONNECTION
85416 field_addr.name = "min_val";
85417#endif /* FREECIV_JSON_CONNECTION */
85418
85419 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
85421 }
85422
85423#ifdef FREECIV_JSON_CONNECTION
85424 field_addr.name = "max_val";
85425#endif /* FREECIV_JSON_CONNECTION */
85426
85427 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
85429 }
85430#endif /* FREECIV_DELTA_PROTOCOL */
85431
85433#undef FREE_PACKET_STRUCT
85434}
85435
85437{
85438 const struct packet_server_setting_int *real_packet = packet;
85439 int e;
85441
85442 log_packet_detailed("packet_server_setting_int_100: sending info about (%d)",
85443 real_packet->id);
85444
85445#ifdef FREECIV_DELTA_PROTOCOL
85448 bool differ;
85449 int different = 0;
85450 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_INT;
85451
85452 if (nullptr == *hash) {
85454 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
85455 }
85456 BV_CLR_ALL(fields);
85457
85458 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85459 old = fc_malloc(sizeof(*old));
85460 /* temporary bitcopy just to insert correctly */
85461 *old = *real_packet;
85464 different = 1; /* Force to send. */
85465 }
85466
85467 differ = (old->is_visible != real_packet->is_visible);
85468 if (differ) {
85469 different++;
85470 }
85471 /* folded into head */
85472 if (real_packet->is_visible) {
85473 BV_SET(fields, 0);
85474 }
85475
85476 differ = (old->is_changeable != real_packet->is_changeable);
85477 if (differ) {
85478 different++;
85479 }
85480 /* folded into head */
85481 if (real_packet->is_changeable) {
85482 BV_SET(fields, 1);
85483 }
85484
85485 differ = (old->initial_setting != real_packet->initial_setting);
85486 if (differ) {
85487 different++;
85488 }
85489 /* folded into head */
85490 if (real_packet->initial_setting) {
85491 BV_SET(fields, 2);
85492 }
85493
85494 differ = (old->setdef != real_packet->setdef);
85495 if (differ) {
85496 different++;
85497 BV_SET(fields, 3);
85498 }
85499
85500 differ = (old->val != real_packet->val);
85501 if (differ) {
85502 different++;
85503 BV_SET(fields, 4);
85504 }
85505
85506 differ = (old->default_val != real_packet->default_val);
85507 if (differ) {
85508 different++;
85509 BV_SET(fields, 5);
85510 }
85511
85512 differ = (old->min_val != real_packet->min_val);
85513 if (differ) {
85514 different++;
85515 BV_SET(fields, 6);
85516 }
85517
85518 differ = (old->max_val != real_packet->max_val);
85519 if (differ) {
85520 different++;
85521 BV_SET(fields, 7);
85522 }
85523
85524 if (different == 0) {
85525 log_packet_detailed(" no change -> discard");
85527 }
85528#endif /* FREECIV_DELTA_PROTOCOL */
85529
85530#ifdef FREECIV_JSON_CONNECTION
85531 struct plocation field_addr;
85532 {
85533 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85536 }
85537#endif /* FREECIV_JSON_CONNECTION */
85538
85539#ifdef FREECIV_JSON_CONNECTION
85540 field_addr.name = "id";
85541#endif /* FREECIV_JSON_CONNECTION */
85542 e = 0;
85543
85544 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85545
85546 if (e) {
85547 log_packet_detailed("'id' field error detected");
85548 }
85549
85550#ifdef FREECIV_DELTA_PROTOCOL
85551#ifdef FREECIV_JSON_CONNECTION
85552 field_addr.name = "fields";
85553#endif /* FREECIV_JSON_CONNECTION */
85554 e = 0;
85555 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85556 if (e) {
85557 log_packet_detailed("fields bitvector error detected");
85558 }
85559
85560 /* field 0 is folded into the header */
85561
85562 /* field 1 is folded into the header */
85563
85564 /* field 2 is folded into the header */
85565
85566 if (BV_ISSET(fields, 3)) {
85567 log_packet_detailed(" field 'setdef' has changed");
85568
85569#ifdef FREECIV_JSON_CONNECTION
85570 field_addr.name = "setdef";
85571#endif /* FREECIV_JSON_CONNECTION */
85572 e = 0;
85573
85574 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85575
85576 if (e) {
85577 log_packet_detailed("'setdef' field error detected");
85578 }
85579 }
85580
85581 if (BV_ISSET(fields, 4)) {
85582 log_packet_detailed(" field 'val' has changed");
85583
85584#ifdef FREECIV_JSON_CONNECTION
85585 field_addr.name = "val";
85586#endif /* FREECIV_JSON_CONNECTION */
85587 e = 0;
85588
85589 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
85590
85591 if (e) {
85592 log_packet_detailed("'val' field error detected");
85593 }
85594 }
85595
85596 if (BV_ISSET(fields, 5)) {
85597 log_packet_detailed(" field 'default_val' has changed");
85598
85599#ifdef FREECIV_JSON_CONNECTION
85600 field_addr.name = "default_val";
85601#endif /* FREECIV_JSON_CONNECTION */
85602 e = 0;
85603
85604 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
85605
85606 if (e) {
85607 log_packet_detailed("'default_val' field error detected");
85608 }
85609 }
85610
85611 if (BV_ISSET(fields, 6)) {
85612 log_packet_detailed(" field 'min_val' has changed");
85613
85614#ifdef FREECIV_JSON_CONNECTION
85615 field_addr.name = "min_val";
85616#endif /* FREECIV_JSON_CONNECTION */
85617 e = 0;
85618
85619 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
85620
85621 if (e) {
85622 log_packet_detailed("'min_val' field error detected");
85623 }
85624 }
85625
85626 if (BV_ISSET(fields, 7)) {
85627 log_packet_detailed(" field 'max_val' has changed");
85628
85629#ifdef FREECIV_JSON_CONNECTION
85630 field_addr.name = "max_val";
85631#endif /* FREECIV_JSON_CONNECTION */
85632 e = 0;
85633
85634 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
85635
85636 if (e) {
85637 log_packet_detailed("'max_val' field error detected");
85638 }
85639 }
85640
85641 *old = *real_packet;
85642
85643#else /* FREECIV_DELTA_PROTOCOL */
85644#ifdef FREECIV_JSON_CONNECTION
85645 field_addr.name = "is_visible";
85646#endif /* FREECIV_JSON_CONNECTION */
85647 e = 0;
85648
85649 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
85650
85651 if (e) {
85652 log_packet_detailed("'is_visible' field error detected");
85653 }
85654
85655#ifdef FREECIV_JSON_CONNECTION
85656 field_addr.name = "is_changeable";
85657#endif /* FREECIV_JSON_CONNECTION */
85658 e = 0;
85659
85660 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
85661
85662 if (e) {
85663 log_packet_detailed("'is_changeable' field error detected");
85664 }
85665
85666#ifdef FREECIV_JSON_CONNECTION
85667 field_addr.name = "initial_setting";
85668#endif /* FREECIV_JSON_CONNECTION */
85669 e = 0;
85670
85671 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
85672
85673 if (e) {
85674 log_packet_detailed("'initial_setting' field error detected");
85675 }
85676
85677#ifdef FREECIV_JSON_CONNECTION
85678 field_addr.name = "setdef";
85679#endif /* FREECIV_JSON_CONNECTION */
85680 e = 0;
85681
85682 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85683
85684 if (e) {
85685 log_packet_detailed("'setdef' field error detected");
85686 }
85687
85688#ifdef FREECIV_JSON_CONNECTION
85689 field_addr.name = "val";
85690#endif /* FREECIV_JSON_CONNECTION */
85691 e = 0;
85692
85693 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
85694
85695 if (e) {
85696 log_packet_detailed("'val' field error detected");
85697 }
85698
85699#ifdef FREECIV_JSON_CONNECTION
85700 field_addr.name = "default_val";
85701#endif /* FREECIV_JSON_CONNECTION */
85702 e = 0;
85703
85704 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
85705
85706 if (e) {
85707 log_packet_detailed("'default_val' field error detected");
85708 }
85709
85710#ifdef FREECIV_JSON_CONNECTION
85711 field_addr.name = "min_val";
85712#endif /* FREECIV_JSON_CONNECTION */
85713 e = 0;
85714
85715 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
85716
85717 if (e) {
85718 log_packet_detailed("'min_val' field error detected");
85719 }
85720
85721#ifdef FREECIV_JSON_CONNECTION
85722 field_addr.name = "max_val";
85723#endif /* FREECIV_JSON_CONNECTION */
85724 e = 0;
85725
85726 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
85727
85728 if (e) {
85729 log_packet_detailed("'max_val' field error detected");
85730 }
85731#endif /* FREECIV_DELTA_PROTOCOL */
85732
85734}
85735
85737{
85738 if (!pc->used) {
85739 log_error("WARNING: trying to send data to the closed connection %s",
85741 return -1;
85742 }
85743 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet != nullptr, -1,
85744 "Handler for PACKET_SERVER_SETTING_INT not installed");
85745 return pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet(pc, packet);
85746}
85747
85749{
85750 memset(packet, 0, sizeof(*packet));
85751}
85752
85753#define free_packet_server_setting_str(_packet) (void) 0
85754#define destroy_packet_server_setting_str free
85755
85756#ifdef FREECIV_DELTA_PROTOCOL
85758{
85759 const struct packet_server_setting_str *key = (const struct packet_server_setting_str *) vkey;
85760 genhash_val_t result = 0;
85761
85762 result += key->id;
85763
85764 result &= 0xFFFFFFFF;
85765 return result;
85766}
85767
85768static bool cmp_packet_server_setting_str_100(const void *vkey1, const void *vkey2)
85769{
85770 const struct packet_server_setting_str *old = (const struct packet_server_setting_str *) vkey1;
85772 bool differ;
85773
85774 differ = (old->id != real_packet->id);
85775
85776 return !differ;
85777}
85779#endif /* FREECIV_DELTA_PROTOCOL */
85780
85782{
85783#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_str(_packet)
85785
85786#ifdef FREECIV_JSON_CONNECTION
85787 struct plocation field_addr;
85788 {
85789 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85792 }
85793#endif /* FREECIV_JSON_CONNECTION */
85794
85795#ifdef FREECIV_JSON_CONNECTION
85796 field_addr.name = "id";
85797#endif /* FREECIV_JSON_CONNECTION */
85798
85799 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85801 }
85802
85803 log_packet_detailed("packet_server_setting_str_100: got info about (%d)",
85804 real_packet->id);
85805
85806#ifdef FREECIV_DELTA_PROTOCOL
85809 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_STR;
85810
85811 if (nullptr == *hash) {
85813 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
85814 }
85815
85816 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85817 *real_packet = *old;
85818 } else {
85819 /* packet is already initialized empty */
85820 log_packet_detailed(" no old info");
85821 }
85822
85823#ifdef FREECIV_JSON_CONNECTION
85824 field_addr.name = "fields";
85825#endif /* FREECIV_JSON_CONNECTION */
85826 DIO_BV_GET(&din, &field_addr, fields);
85827
85828 real_packet->is_visible = BV_ISSET(fields, 0);
85829
85830 real_packet->is_changeable = BV_ISSET(fields, 1);
85831
85832 real_packet->initial_setting = BV_ISSET(fields, 2);
85833
85834 if (BV_ISSET(fields, 3)) {
85835 log_packet_detailed(" got field 'setdef'");
85836
85837#ifdef FREECIV_JSON_CONNECTION
85838 field_addr.name = "setdef";
85839#endif /* FREECIV_JSON_CONNECTION */
85840
85841 {
85842 int readin;
85843
85844 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85846 }
85847 real_packet->setdef = readin;
85848 }
85849 }
85850
85851 if (BV_ISSET(fields, 4)) {
85852 log_packet_detailed(" got field 'val'");
85853
85854#ifdef FREECIV_JSON_CONNECTION
85855 field_addr.name = "val";
85856#endif /* FREECIV_JSON_CONNECTION */
85857
85858 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
85860 }
85861 }
85862
85863 if (BV_ISSET(fields, 5)) {
85864 log_packet_detailed(" got field 'default_val'");
85865
85866#ifdef FREECIV_JSON_CONNECTION
85867 field_addr.name = "default_val";
85868#endif /* FREECIV_JSON_CONNECTION */
85869
85870 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
85871 RECEIVE_PACKET_FIELD_ERROR(default_val);
85872 }
85873 }
85874
85875 if (nullptr == old) {
85876 old = fc_malloc(sizeof(*old));
85878 *old = *real_packet;
85880 } else {
85881 *old = *real_packet;
85882 }
85883
85884#else /* FREECIV_DELTA_PROTOCOL */
85885#ifdef FREECIV_JSON_CONNECTION
85886 field_addr.name = "is_visible";
85887#endif /* FREECIV_JSON_CONNECTION */
85888
85889 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85890 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85891 }
85892
85893#ifdef FREECIV_JSON_CONNECTION
85894 field_addr.name = "is_changeable";
85895#endif /* FREECIV_JSON_CONNECTION */
85896
85897 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
85898 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
85899 }
85900
85901#ifdef FREECIV_JSON_CONNECTION
85902 field_addr.name = "initial_setting";
85903#endif /* FREECIV_JSON_CONNECTION */
85904
85905 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
85906 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
85907 }
85908
85909#ifdef FREECIV_JSON_CONNECTION
85910 field_addr.name = "setdef";
85911#endif /* FREECIV_JSON_CONNECTION */
85912
85913 {
85914 int readin;
85915
85916 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85918 }
85919 real_packet->setdef = readin;
85920 }
85921
85922#ifdef FREECIV_JSON_CONNECTION
85923 field_addr.name = "val";
85924#endif /* FREECIV_JSON_CONNECTION */
85925
85926 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
85928 }
85929
85930#ifdef FREECIV_JSON_CONNECTION
85931 field_addr.name = "default_val";
85932#endif /* FREECIV_JSON_CONNECTION */
85933
85934 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
85935 RECEIVE_PACKET_FIELD_ERROR(default_val);
85936 }
85937#endif /* FREECIV_DELTA_PROTOCOL */
85938
85940#undef FREE_PACKET_STRUCT
85941}
85942
85944{
85945 const struct packet_server_setting_str *real_packet = packet;
85946 int e;
85948
85949 log_packet_detailed("packet_server_setting_str_100: sending info about (%d)",
85950 real_packet->id);
85951
85952#ifdef FREECIV_DELTA_PROTOCOL
85955 bool differ;
85956 int different = 0;
85957 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_STR;
85958
85959 if (nullptr == *hash) {
85961 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
85962 }
85963 BV_CLR_ALL(fields);
85964
85965 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85966 old = fc_malloc(sizeof(*old));
85967 /* temporary bitcopy just to insert correctly */
85968 *old = *real_packet;
85971 different = 1; /* Force to send. */
85972 }
85973
85974 differ = (old->is_visible != real_packet->is_visible);
85975 if (differ) {
85976 different++;
85977 }
85978 /* folded into head */
85979 if (real_packet->is_visible) {
85980 BV_SET(fields, 0);
85981 }
85982
85983 differ = (old->is_changeable != real_packet->is_changeable);
85984 if (differ) {
85985 different++;
85986 }
85987 /* folded into head */
85988 if (real_packet->is_changeable) {
85989 BV_SET(fields, 1);
85990 }
85991
85992 differ = (old->initial_setting != real_packet->initial_setting);
85993 if (differ) {
85994 different++;
85995 }
85996 /* folded into head */
85997 if (real_packet->initial_setting) {
85998 BV_SET(fields, 2);
85999 }
86000
86001 differ = (old->setdef != real_packet->setdef);
86002 if (differ) {
86003 different++;
86004 BV_SET(fields, 3);
86005 }
86006
86007 differ = (strcmp(old->val, real_packet->val) != 0);
86008 if (differ) {
86009 different++;
86010 BV_SET(fields, 4);
86011 }
86012
86013 differ = (strcmp(old->default_val, real_packet->default_val) != 0);
86014 if (differ) {
86015 different++;
86016 BV_SET(fields, 5);
86017 }
86018
86019 if (different == 0) {
86020 log_packet_detailed(" no change -> discard");
86022 }
86023#endif /* FREECIV_DELTA_PROTOCOL */
86024
86025#ifdef FREECIV_JSON_CONNECTION
86026 struct plocation field_addr;
86027 {
86028 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86031 }
86032#endif /* FREECIV_JSON_CONNECTION */
86033
86034#ifdef FREECIV_JSON_CONNECTION
86035 field_addr.name = "id";
86036#endif /* FREECIV_JSON_CONNECTION */
86037 e = 0;
86038
86039 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86040
86041 if (e) {
86042 log_packet_detailed("'id' field error detected");
86043 }
86044
86045#ifdef FREECIV_DELTA_PROTOCOL
86046#ifdef FREECIV_JSON_CONNECTION
86047 field_addr.name = "fields";
86048#endif /* FREECIV_JSON_CONNECTION */
86049 e = 0;
86050 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86051 if (e) {
86052 log_packet_detailed("fields bitvector error detected");
86053 }
86054
86055 /* field 0 is folded into the header */
86056
86057 /* field 1 is folded into the header */
86058
86059 /* field 2 is folded into the header */
86060
86061 if (BV_ISSET(fields, 3)) {
86062 log_packet_detailed(" field 'setdef' has changed");
86063
86064#ifdef FREECIV_JSON_CONNECTION
86065 field_addr.name = "setdef";
86066#endif /* FREECIV_JSON_CONNECTION */
86067 e = 0;
86068
86069 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86070
86071 if (e) {
86072 log_packet_detailed("'setdef' field error detected");
86073 }
86074 }
86075
86076 if (BV_ISSET(fields, 4)) {
86077 log_packet_detailed(" field 'val' has changed");
86078
86079#ifdef FREECIV_JSON_CONNECTION
86080 field_addr.name = "val";
86081#endif /* FREECIV_JSON_CONNECTION */
86082 e = 0;
86083
86084 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
86085
86086 if (e) {
86087 log_packet_detailed("'val' field error detected");
86088 }
86089 }
86090
86091 if (BV_ISSET(fields, 5)) {
86092 log_packet_detailed(" field 'default_val' has changed");
86093
86094#ifdef FREECIV_JSON_CONNECTION
86095 field_addr.name = "default_val";
86096#endif /* FREECIV_JSON_CONNECTION */
86097 e = 0;
86098
86099 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
86100
86101 if (e) {
86102 log_packet_detailed("'default_val' field error detected");
86103 }
86104 }
86105
86106 *old = *real_packet;
86107
86108#else /* FREECIV_DELTA_PROTOCOL */
86109#ifdef FREECIV_JSON_CONNECTION
86110 field_addr.name = "is_visible";
86111#endif /* FREECIV_JSON_CONNECTION */
86112 e = 0;
86113
86114 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86115
86116 if (e) {
86117 log_packet_detailed("'is_visible' field error detected");
86118 }
86119
86120#ifdef FREECIV_JSON_CONNECTION
86121 field_addr.name = "is_changeable";
86122#endif /* FREECIV_JSON_CONNECTION */
86123 e = 0;
86124
86125 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86126
86127 if (e) {
86128 log_packet_detailed("'is_changeable' field error detected");
86129 }
86130
86131#ifdef FREECIV_JSON_CONNECTION
86132 field_addr.name = "initial_setting";
86133#endif /* FREECIV_JSON_CONNECTION */
86134 e = 0;
86135
86136 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86137
86138 if (e) {
86139 log_packet_detailed("'initial_setting' field error detected");
86140 }
86141
86142#ifdef FREECIV_JSON_CONNECTION
86143 field_addr.name = "setdef";
86144#endif /* FREECIV_JSON_CONNECTION */
86145 e = 0;
86146
86147 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86148
86149 if (e) {
86150 log_packet_detailed("'setdef' field error detected");
86151 }
86152
86153#ifdef FREECIV_JSON_CONNECTION
86154 field_addr.name = "val";
86155#endif /* FREECIV_JSON_CONNECTION */
86156 e = 0;
86157
86158 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
86159
86160 if (e) {
86161 log_packet_detailed("'val' field error detected");
86162 }
86163
86164#ifdef FREECIV_JSON_CONNECTION
86165 field_addr.name = "default_val";
86166#endif /* FREECIV_JSON_CONNECTION */
86167 e = 0;
86168
86169 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
86170
86171 if (e) {
86172 log_packet_detailed("'default_val' field error detected");
86173 }
86174#endif /* FREECIV_DELTA_PROTOCOL */
86175
86177}
86178
86180{
86181 if (!pc->used) {
86182 log_error("WARNING: trying to send data to the closed connection %s",
86184 return -1;
86185 }
86186 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet != nullptr, -1,
86187 "Handler for PACKET_SERVER_SETTING_STR not installed");
86188 return pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet(pc, packet);
86189}
86190
86192{
86193 memset(packet, 0, sizeof(*packet));
86194}
86195
86196#define free_packet_server_setting_enum(_packet) (void) 0
86197#define destroy_packet_server_setting_enum free
86198
86199#ifdef FREECIV_DELTA_PROTOCOL
86201{
86202 const struct packet_server_setting_enum *key = (const struct packet_server_setting_enum *) vkey;
86203 genhash_val_t result = 0;
86204
86205 result += key->id;
86206
86207 result &= 0xFFFFFFFF;
86208 return result;
86209}
86210
86211static bool cmp_packet_server_setting_enum_100(const void *vkey1, const void *vkey2)
86212{
86213 const struct packet_server_setting_enum *old = (const struct packet_server_setting_enum *) vkey1;
86215 bool differ;
86216
86217 differ = (old->id != real_packet->id);
86218
86219 return !differ;
86220}
86222#endif /* FREECIV_DELTA_PROTOCOL */
86223
86225{
86226#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_enum(_packet)
86228
86229#ifdef FREECIV_JSON_CONNECTION
86230 struct plocation field_addr;
86231 {
86232 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86235 }
86236#endif /* FREECIV_JSON_CONNECTION */
86237
86238#ifdef FREECIV_JSON_CONNECTION
86239 field_addr.name = "id";
86240#endif /* FREECIV_JSON_CONNECTION */
86241
86242 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
86244 }
86245
86246 log_packet_detailed("packet_server_setting_enum_100: got info about (%d)",
86247 real_packet->id);
86248
86249#ifdef FREECIV_DELTA_PROTOCOL
86252 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_ENUM;
86253
86254 if (nullptr == *hash) {
86256 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
86257 }
86258
86259 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86260 *real_packet = *old;
86261 } else {
86262 /* packet is already initialized empty */
86263 log_packet_detailed(" no old info");
86264 }
86265
86266#ifdef FREECIV_JSON_CONNECTION
86267 field_addr.name = "fields";
86268#endif /* FREECIV_JSON_CONNECTION */
86269 DIO_BV_GET(&din, &field_addr, fields);
86270
86271 real_packet->is_visible = BV_ISSET(fields, 0);
86272
86273 real_packet->is_changeable = BV_ISSET(fields, 1);
86274
86275 real_packet->initial_setting = BV_ISSET(fields, 2);
86276
86277 if (BV_ISSET(fields, 3)) {
86278 log_packet_detailed(" got field 'setdef'");
86279
86280#ifdef FREECIV_JSON_CONNECTION
86281 field_addr.name = "setdef";
86282#endif /* FREECIV_JSON_CONNECTION */
86283
86284 {
86285 int readin;
86286
86287 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86289 }
86290 real_packet->setdef = readin;
86291 }
86292 }
86293
86294 if (BV_ISSET(fields, 4)) {
86295 log_packet_detailed(" got field 'val'");
86296
86297#ifdef FREECIV_JSON_CONNECTION
86298 field_addr.name = "val";
86299#endif /* FREECIV_JSON_CONNECTION */
86300
86301 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
86303 }
86304 }
86305
86306 if (BV_ISSET(fields, 5)) {
86307 log_packet_detailed(" got field 'default_val'");
86308
86309#ifdef FREECIV_JSON_CONNECTION
86310 field_addr.name = "default_val";
86311#endif /* FREECIV_JSON_CONNECTION */
86312
86313 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
86314 RECEIVE_PACKET_FIELD_ERROR(default_val);
86315 }
86316 }
86317
86318 if (BV_ISSET(fields, 6)) {
86319 log_packet_detailed(" got field 'values_num'");
86320
86321#ifdef FREECIV_JSON_CONNECTION
86322 field_addr.name = "values_num";
86323#endif /* FREECIV_JSON_CONNECTION */
86324
86325 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
86326 RECEIVE_PACKET_FIELD_ERROR(values_num);
86327 }
86328 }
86329
86330 if (BV_ISSET(fields, 7)) {
86331 log_packet_detailed(" got field 'support_names'");
86332
86333#ifdef FREECIV_JSON_CONNECTION
86334 field_addr.name = "support_names";
86335#endif /* FREECIV_JSON_CONNECTION */
86336
86337 {
86338 int i;
86339
86340 if (real_packet->values_num > 64) {
86341 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
86342 }
86343
86344#ifdef FREECIV_JSON_CONNECTION
86345 /* Enter array. */
86346 field_addr.sub_location = plocation_elem_new(0);
86347#endif /* FREECIV_JSON_CONNECTION */
86348
86349 for (i = 0; i < real_packet->values_num; i++) {
86350#ifdef FREECIV_JSON_CONNECTION
86351 /* Next array element */
86352 field_addr.sub_location->number = i;
86353#endif /* FREECIV_JSON_CONNECTION */
86354
86355 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
86356 RECEIVE_PACKET_FIELD_ERROR(support_names);
86357 }
86358 }
86359
86360#ifdef FREECIV_JSON_CONNECTION
86361 /* Exit array. */
86362 FC_FREE(field_addr.sub_location);
86363#endif /* FREECIV_JSON_CONNECTION */
86364 }
86365 }
86366
86367 if (BV_ISSET(fields, 8)) {
86368 log_packet_detailed(" got field 'pretty_names'");
86369
86370#ifdef FREECIV_JSON_CONNECTION
86371 field_addr.name = "pretty_names";
86372#endif /* FREECIV_JSON_CONNECTION */
86373
86374 {
86375 int i;
86376
86377 if (real_packet->values_num > 64) {
86378 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
86379 }
86380
86381#ifdef FREECIV_JSON_CONNECTION
86382 /* Enter array. */
86383 field_addr.sub_location = plocation_elem_new(0);
86384#endif /* FREECIV_JSON_CONNECTION */
86385
86386 for (i = 0; i < real_packet->values_num; i++) {
86387#ifdef FREECIV_JSON_CONNECTION
86388 /* Next array element */
86389 field_addr.sub_location->number = i;
86390#endif /* FREECIV_JSON_CONNECTION */
86391
86392 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
86393 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
86394 }
86395 }
86396
86397#ifdef FREECIV_JSON_CONNECTION
86398 /* Exit array. */
86399 FC_FREE(field_addr.sub_location);
86400#endif /* FREECIV_JSON_CONNECTION */
86401 }
86402 }
86403
86404 if (nullptr == old) {
86405 old = fc_malloc(sizeof(*old));
86407 *old = *real_packet;
86409 } else {
86410 *old = *real_packet;
86411 }
86412
86413#else /* FREECIV_DELTA_PROTOCOL */
86414#ifdef FREECIV_JSON_CONNECTION
86415 field_addr.name = "is_visible";
86416#endif /* FREECIV_JSON_CONNECTION */
86417
86418 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
86419 RECEIVE_PACKET_FIELD_ERROR(is_visible);
86420 }
86421
86422#ifdef FREECIV_JSON_CONNECTION
86423 field_addr.name = "is_changeable";
86424#endif /* FREECIV_JSON_CONNECTION */
86425
86426 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
86427 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
86428 }
86429
86430#ifdef FREECIV_JSON_CONNECTION
86431 field_addr.name = "initial_setting";
86432#endif /* FREECIV_JSON_CONNECTION */
86433
86434 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
86435 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
86436 }
86437
86438#ifdef FREECIV_JSON_CONNECTION
86439 field_addr.name = "setdef";
86440#endif /* FREECIV_JSON_CONNECTION */
86441
86442 {
86443 int readin;
86444
86445 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86447 }
86448 real_packet->setdef = readin;
86449 }
86450
86451#ifdef FREECIV_JSON_CONNECTION
86452 field_addr.name = "val";
86453#endif /* FREECIV_JSON_CONNECTION */
86454
86455 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
86457 }
86458
86459#ifdef FREECIV_JSON_CONNECTION
86460 field_addr.name = "default_val";
86461#endif /* FREECIV_JSON_CONNECTION */
86462
86463 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
86464 RECEIVE_PACKET_FIELD_ERROR(default_val);
86465 }
86466
86467#ifdef FREECIV_JSON_CONNECTION
86468 field_addr.name = "values_num";
86469#endif /* FREECIV_JSON_CONNECTION */
86470
86471 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
86472 RECEIVE_PACKET_FIELD_ERROR(values_num);
86473 }
86474
86475#ifdef FREECIV_JSON_CONNECTION
86476 field_addr.name = "support_names";
86477#endif /* FREECIV_JSON_CONNECTION */
86478
86479 {
86480 int i;
86481
86482 if (real_packet->values_num > 64) {
86483 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
86484 }
86485
86486#ifdef FREECIV_JSON_CONNECTION
86487 /* Enter array. */
86488 field_addr.sub_location = plocation_elem_new(0);
86489#endif /* FREECIV_JSON_CONNECTION */
86490
86491 for (i = 0; i < real_packet->values_num; i++) {
86492#ifdef FREECIV_JSON_CONNECTION
86493 /* Next array element */
86494 field_addr.sub_location->number = i;
86495#endif /* FREECIV_JSON_CONNECTION */
86496
86497 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
86498 RECEIVE_PACKET_FIELD_ERROR(support_names);
86499 }
86500 }
86501
86502#ifdef FREECIV_JSON_CONNECTION
86503 /* Exit array. */
86504 FC_FREE(field_addr.sub_location);
86505#endif /* FREECIV_JSON_CONNECTION */
86506 }
86507
86508#ifdef FREECIV_JSON_CONNECTION
86509 field_addr.name = "pretty_names";
86510#endif /* FREECIV_JSON_CONNECTION */
86511
86512 {
86513 int i;
86514
86515 if (real_packet->values_num > 64) {
86516 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
86517 }
86518
86519#ifdef FREECIV_JSON_CONNECTION
86520 /* Enter array. */
86521 field_addr.sub_location = plocation_elem_new(0);
86522#endif /* FREECIV_JSON_CONNECTION */
86523
86524 for (i = 0; i < real_packet->values_num; i++) {
86525#ifdef FREECIV_JSON_CONNECTION
86526 /* Next array element */
86527 field_addr.sub_location->number = i;
86528#endif /* FREECIV_JSON_CONNECTION */
86529
86530 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
86531 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
86532 }
86533 }
86534
86535#ifdef FREECIV_JSON_CONNECTION
86536 /* Exit array. */
86537 FC_FREE(field_addr.sub_location);
86538#endif /* FREECIV_JSON_CONNECTION */
86539 }
86540#endif /* FREECIV_DELTA_PROTOCOL */
86541
86543#undef FREE_PACKET_STRUCT
86544}
86545
86547{
86548 const struct packet_server_setting_enum *real_packet = packet;
86549 int e;
86551
86552 log_packet_detailed("packet_server_setting_enum_100: sending info about (%d)",
86553 real_packet->id);
86554
86555#ifdef FREECIV_DELTA_PROTOCOL
86558 bool differ;
86559 int different = 0;
86560 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_ENUM;
86561
86562 if (nullptr == *hash) {
86564 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
86565 }
86566 BV_CLR_ALL(fields);
86567
86568 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86569 old = fc_malloc(sizeof(*old));
86570 /* temporary bitcopy just to insert correctly */
86571 *old = *real_packet;
86574 different = 1; /* Force to send. */
86575 }
86576
86577 differ = (old->is_visible != real_packet->is_visible);
86578 if (differ) {
86579 different++;
86580 }
86581 /* folded into head */
86582 if (real_packet->is_visible) {
86583 BV_SET(fields, 0);
86584 }
86585
86586 differ = (old->is_changeable != real_packet->is_changeable);
86587 if (differ) {
86588 different++;
86589 }
86590 /* folded into head */
86591 if (real_packet->is_changeable) {
86592 BV_SET(fields, 1);
86593 }
86594
86595 differ = (old->initial_setting != real_packet->initial_setting);
86596 if (differ) {
86597 different++;
86598 }
86599 /* folded into head */
86600 if (real_packet->initial_setting) {
86601 BV_SET(fields, 2);
86602 }
86603
86604 differ = (old->setdef != real_packet->setdef);
86605 if (differ) {
86606 different++;
86607 BV_SET(fields, 3);
86608 }
86609
86610 differ = (old->val != real_packet->val);
86611 if (differ) {
86612 different++;
86613 BV_SET(fields, 4);
86614 }
86615
86616 differ = (old->default_val != real_packet->default_val);
86617 if (differ) {
86618 different++;
86619 BV_SET(fields, 5);
86620 }
86621
86622 differ = (old->values_num != real_packet->values_num);
86623 if (differ) {
86624 different++;
86625 BV_SET(fields, 6);
86626 }
86627
86628 differ = (old->values_num != real_packet->values_num);
86629 if (!differ) {
86630 int i;
86631
86632 for (i = 0; i < old->values_num; i++) {
86633 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
86634 if (differ) {
86635 break;
86636 }
86637 }
86638 }
86639 if (differ) {
86640 different++;
86641 BV_SET(fields, 7);
86642 }
86643
86644 differ = (old->values_num != real_packet->values_num);
86645 if (!differ) {
86646 int i;
86647
86648 for (i = 0; i < old->values_num; i++) {
86649 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
86650 if (differ) {
86651 break;
86652 }
86653 }
86654 }
86655 if (differ) {
86656 different++;
86657 BV_SET(fields, 8);
86658 }
86659
86660 if (different == 0) {
86661 log_packet_detailed(" no change -> discard");
86663 }
86664#endif /* FREECIV_DELTA_PROTOCOL */
86665
86666#ifdef FREECIV_JSON_CONNECTION
86667 struct plocation field_addr;
86668 {
86669 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86672 }
86673#endif /* FREECIV_JSON_CONNECTION */
86674
86675#ifdef FREECIV_JSON_CONNECTION
86676 field_addr.name = "id";
86677#endif /* FREECIV_JSON_CONNECTION */
86678 e = 0;
86679
86680 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86681
86682 if (e) {
86683 log_packet_detailed("'id' field error detected");
86684 }
86685
86686#ifdef FREECIV_DELTA_PROTOCOL
86687#ifdef FREECIV_JSON_CONNECTION
86688 field_addr.name = "fields";
86689#endif /* FREECIV_JSON_CONNECTION */
86690 e = 0;
86691 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86692 if (e) {
86693 log_packet_detailed("fields bitvector error detected");
86694 }
86695
86696 /* field 0 is folded into the header */
86697
86698 /* field 1 is folded into the header */
86699
86700 /* field 2 is folded into the header */
86701
86702 if (BV_ISSET(fields, 3)) {
86703 log_packet_detailed(" field 'setdef' has changed");
86704
86705#ifdef FREECIV_JSON_CONNECTION
86706 field_addr.name = "setdef";
86707#endif /* FREECIV_JSON_CONNECTION */
86708 e = 0;
86709
86710 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86711
86712 if (e) {
86713 log_packet_detailed("'setdef' field error detected");
86714 }
86715 }
86716
86717 if (BV_ISSET(fields, 4)) {
86718 log_packet_detailed(" field 'val' has changed");
86719
86720#ifdef FREECIV_JSON_CONNECTION
86721 field_addr.name = "val";
86722#endif /* FREECIV_JSON_CONNECTION */
86723 e = 0;
86724
86725 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
86726
86727 if (e) {
86728 log_packet_detailed("'val' field error detected");
86729 }
86730 }
86731
86732 if (BV_ISSET(fields, 5)) {
86733 log_packet_detailed(" field 'default_val' has changed");
86734
86735#ifdef FREECIV_JSON_CONNECTION
86736 field_addr.name = "default_val";
86737#endif /* FREECIV_JSON_CONNECTION */
86738 e = 0;
86739
86740 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
86741
86742 if (e) {
86743 log_packet_detailed("'default_val' field error detected");
86744 }
86745 }
86746
86747 if (BV_ISSET(fields, 6)) {
86748 log_packet_detailed(" field 'values_num' has changed");
86749
86750#ifdef FREECIV_JSON_CONNECTION
86751 field_addr.name = "values_num";
86752#endif /* FREECIV_JSON_CONNECTION */
86753 e = 0;
86754
86755 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
86756
86757 if (e) {
86758 log_packet_detailed("'values_num' field error detected");
86759 }
86760 }
86761
86762 if (BV_ISSET(fields, 7)) {
86763 log_packet_detailed(" field 'support_names' has changed");
86764
86765#ifdef FREECIV_JSON_CONNECTION
86766 field_addr.name = "support_names";
86767#endif /* FREECIV_JSON_CONNECTION */
86768 e = 0;
86769
86770 {
86771 int i;
86772
86773#ifdef FREECIV_JSON_CONNECTION
86774 /* Create the array. */
86775 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86776
86777 /* Enter array. */
86778 field_addr.sub_location = plocation_elem_new(0);
86779#endif /* FREECIV_JSON_CONNECTION */
86780
86781 for (i = 0; i < real_packet->values_num; i++) {
86782#ifdef FREECIV_JSON_CONNECTION
86783 /* Next array element. */
86784 field_addr.sub_location->number = i;
86785#endif /* FREECIV_JSON_CONNECTION */
86786
86787 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
86788 }
86789
86790#ifdef FREECIV_JSON_CONNECTION
86791 /* Exit array. */
86792 FC_FREE(field_addr.sub_location);
86793#endif /* FREECIV_JSON_CONNECTION */
86794 }
86795
86796 if (e) {
86797 log_packet_detailed("'support_names' field error detected");
86798 }
86799 }
86800
86801 if (BV_ISSET(fields, 8)) {
86802 log_packet_detailed(" field 'pretty_names' has changed");
86803
86804#ifdef FREECIV_JSON_CONNECTION
86805 field_addr.name = "pretty_names";
86806#endif /* FREECIV_JSON_CONNECTION */
86807 e = 0;
86808
86809 {
86810 int i;
86811
86812#ifdef FREECIV_JSON_CONNECTION
86813 /* Create the array. */
86814 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86815
86816 /* Enter array. */
86817 field_addr.sub_location = plocation_elem_new(0);
86818#endif /* FREECIV_JSON_CONNECTION */
86819
86820 for (i = 0; i < real_packet->values_num; i++) {
86821#ifdef FREECIV_JSON_CONNECTION
86822 /* Next array element. */
86823 field_addr.sub_location->number = i;
86824#endif /* FREECIV_JSON_CONNECTION */
86825
86826 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
86827 }
86828
86829#ifdef FREECIV_JSON_CONNECTION
86830 /* Exit array. */
86831 FC_FREE(field_addr.sub_location);
86832#endif /* FREECIV_JSON_CONNECTION */
86833 }
86834
86835 if (e) {
86836 log_packet_detailed("'pretty_names' field error detected");
86837 }
86838 }
86839
86840 *old = *real_packet;
86841
86842#else /* FREECIV_DELTA_PROTOCOL */
86843#ifdef FREECIV_JSON_CONNECTION
86844 field_addr.name = "is_visible";
86845#endif /* FREECIV_JSON_CONNECTION */
86846 e = 0;
86847
86848 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86849
86850 if (e) {
86851 log_packet_detailed("'is_visible' field error detected");
86852 }
86853
86854#ifdef FREECIV_JSON_CONNECTION
86855 field_addr.name = "is_changeable";
86856#endif /* FREECIV_JSON_CONNECTION */
86857 e = 0;
86858
86859 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86860
86861 if (e) {
86862 log_packet_detailed("'is_changeable' field error detected");
86863 }
86864
86865#ifdef FREECIV_JSON_CONNECTION
86866 field_addr.name = "initial_setting";
86867#endif /* FREECIV_JSON_CONNECTION */
86868 e = 0;
86869
86870 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86871
86872 if (e) {
86873 log_packet_detailed("'initial_setting' field error detected");
86874 }
86875
86876#ifdef FREECIV_JSON_CONNECTION
86877 field_addr.name = "setdef";
86878#endif /* FREECIV_JSON_CONNECTION */
86879 e = 0;
86880
86881 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86882
86883 if (e) {
86884 log_packet_detailed("'setdef' field error detected");
86885 }
86886
86887#ifdef FREECIV_JSON_CONNECTION
86888 field_addr.name = "val";
86889#endif /* FREECIV_JSON_CONNECTION */
86890 e = 0;
86891
86892 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
86893
86894 if (e) {
86895 log_packet_detailed("'val' field error detected");
86896 }
86897
86898#ifdef FREECIV_JSON_CONNECTION
86899 field_addr.name = "default_val";
86900#endif /* FREECIV_JSON_CONNECTION */
86901 e = 0;
86902
86903 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
86904
86905 if (e) {
86906 log_packet_detailed("'default_val' field error detected");
86907 }
86908
86909#ifdef FREECIV_JSON_CONNECTION
86910 field_addr.name = "values_num";
86911#endif /* FREECIV_JSON_CONNECTION */
86912 e = 0;
86913
86914 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
86915
86916 if (e) {
86917 log_packet_detailed("'values_num' field error detected");
86918 }
86919
86920#ifdef FREECIV_JSON_CONNECTION
86921 field_addr.name = "support_names";
86922#endif /* FREECIV_JSON_CONNECTION */
86923 e = 0;
86924
86925 {
86926 int i;
86927
86928#ifdef FREECIV_JSON_CONNECTION
86929 /* Create the array. */
86930 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86931
86932 /* Enter array. */
86933 field_addr.sub_location = plocation_elem_new(0);
86934#endif /* FREECIV_JSON_CONNECTION */
86935
86936 for (i = 0; i < real_packet->values_num; i++) {
86937#ifdef FREECIV_JSON_CONNECTION
86938 /* Next array element. */
86939 field_addr.sub_location->number = i;
86940#endif /* FREECIV_JSON_CONNECTION */
86941
86942 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
86943 }
86944
86945#ifdef FREECIV_JSON_CONNECTION
86946 /* Exit array. */
86947 FC_FREE(field_addr.sub_location);
86948#endif /* FREECIV_JSON_CONNECTION */
86949 }
86950
86951 if (e) {
86952 log_packet_detailed("'support_names' field error detected");
86953 }
86954
86955#ifdef FREECIV_JSON_CONNECTION
86956 field_addr.name = "pretty_names";
86957#endif /* FREECIV_JSON_CONNECTION */
86958 e = 0;
86959
86960 {
86961 int i;
86962
86963#ifdef FREECIV_JSON_CONNECTION
86964 /* Create the array. */
86965 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86966
86967 /* Enter array. */
86968 field_addr.sub_location = plocation_elem_new(0);
86969#endif /* FREECIV_JSON_CONNECTION */
86970
86971 for (i = 0; i < real_packet->values_num; i++) {
86972#ifdef FREECIV_JSON_CONNECTION
86973 /* Next array element. */
86974 field_addr.sub_location->number = i;
86975#endif /* FREECIV_JSON_CONNECTION */
86976
86977 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
86978 }
86979
86980#ifdef FREECIV_JSON_CONNECTION
86981 /* Exit array. */
86982 FC_FREE(field_addr.sub_location);
86983#endif /* FREECIV_JSON_CONNECTION */
86984 }
86985
86986 if (e) {
86987 log_packet_detailed("'pretty_names' field error detected");
86988 }
86989#endif /* FREECIV_DELTA_PROTOCOL */
86990
86992}
86993
86995{
86996 if (!pc->used) {
86997 log_error("WARNING: trying to send data to the closed connection %s",
86999 return -1;
87000 }
87001 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet != nullptr, -1,
87002 "Handler for PACKET_SERVER_SETTING_ENUM not installed");
87003 return pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet(pc, packet);
87004}
87005
87007{
87008 memset(packet, 0, sizeof(*packet));
87009}
87010
87011#define free_packet_server_setting_bitwise(_packet) (void) 0
87012#define destroy_packet_server_setting_bitwise free
87013
87014#ifdef FREECIV_DELTA_PROTOCOL
87016{
87017 const struct packet_server_setting_bitwise *key = (const struct packet_server_setting_bitwise *) vkey;
87018 genhash_val_t result = 0;
87019
87020 result += key->id;
87021
87022 result &= 0xFFFFFFFF;
87023 return result;
87024}
87025
87026static bool cmp_packet_server_setting_bitwise_100(const void *vkey1, const void *vkey2)
87027{
87030 bool differ;
87031
87032 differ = (old->id != real_packet->id);
87033
87034 return !differ;
87035}
87037#endif /* FREECIV_DELTA_PROTOCOL */
87038
87040{
87041#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bitwise(_packet)
87043
87044#ifdef FREECIV_JSON_CONNECTION
87045 struct plocation field_addr;
87046 {
87047 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87050 }
87051#endif /* FREECIV_JSON_CONNECTION */
87052
87053#ifdef FREECIV_JSON_CONNECTION
87054 field_addr.name = "id";
87055#endif /* FREECIV_JSON_CONNECTION */
87056
87057 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87059 }
87060
87061 log_packet_detailed("packet_server_setting_bitwise_100: got info about (%d)",
87062 real_packet->id);
87063
87064#ifdef FREECIV_DELTA_PROTOCOL
87067 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BITWISE;
87068
87069 if (nullptr == *hash) {
87071 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
87072 }
87073
87074 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87075 *real_packet = *old;
87076 } else {
87077 /* packet is already initialized empty */
87078 log_packet_detailed(" no old info");
87079 }
87080
87081#ifdef FREECIV_JSON_CONNECTION
87082 field_addr.name = "fields";
87083#endif /* FREECIV_JSON_CONNECTION */
87084 DIO_BV_GET(&din, &field_addr, fields);
87085
87086 real_packet->is_visible = BV_ISSET(fields, 0);
87087
87088 real_packet->is_changeable = BV_ISSET(fields, 1);
87089
87090 real_packet->initial_setting = BV_ISSET(fields, 2);
87091
87092 if (BV_ISSET(fields, 3)) {
87093 log_packet_detailed(" got field 'setdef'");
87094
87095#ifdef FREECIV_JSON_CONNECTION
87096 field_addr.name = "setdef";
87097#endif /* FREECIV_JSON_CONNECTION */
87098
87099 {
87100 int readin;
87101
87102 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87104 }
87105 real_packet->setdef = readin;
87106 }
87107 }
87108
87109 if (BV_ISSET(fields, 4)) {
87110 log_packet_detailed(" got field 'val'");
87111
87112#ifdef FREECIV_JSON_CONNECTION
87113 field_addr.name = "val";
87114#endif /* FREECIV_JSON_CONNECTION */
87115
87116 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
87118 }
87119 }
87120
87121 if (BV_ISSET(fields, 5)) {
87122 log_packet_detailed(" got field 'default_val'");
87123
87124#ifdef FREECIV_JSON_CONNECTION
87125 field_addr.name = "default_val";
87126#endif /* FREECIV_JSON_CONNECTION */
87127
87128 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
87129 RECEIVE_PACKET_FIELD_ERROR(default_val);
87130 }
87131 }
87132
87133 if (BV_ISSET(fields, 6)) {
87134 log_packet_detailed(" got field 'bits_num'");
87135
87136#ifdef FREECIV_JSON_CONNECTION
87137 field_addr.name = "bits_num";
87138#endif /* FREECIV_JSON_CONNECTION */
87139
87140 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
87142 }
87143 }
87144
87145 if (BV_ISSET(fields, 7)) {
87146 log_packet_detailed(" got field 'support_names'");
87147
87148#ifdef FREECIV_JSON_CONNECTION
87149 field_addr.name = "support_names";
87150#endif /* FREECIV_JSON_CONNECTION */
87151
87152 {
87153 int i;
87154
87155 if (real_packet->bits_num > 64) {
87156 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87157 }
87158
87159#ifdef FREECIV_JSON_CONNECTION
87160 /* Enter array. */
87161 field_addr.sub_location = plocation_elem_new(0);
87162#endif /* FREECIV_JSON_CONNECTION */
87163
87164 for (i = 0; i < real_packet->bits_num; i++) {
87165#ifdef FREECIV_JSON_CONNECTION
87166 /* Next array element */
87167 field_addr.sub_location->number = i;
87168#endif /* FREECIV_JSON_CONNECTION */
87169
87170 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87171 RECEIVE_PACKET_FIELD_ERROR(support_names);
87172 }
87173 }
87174
87175#ifdef FREECIV_JSON_CONNECTION
87176 /* Exit array. */
87177 FC_FREE(field_addr.sub_location);
87178#endif /* FREECIV_JSON_CONNECTION */
87179 }
87180 }
87181
87182 if (BV_ISSET(fields, 8)) {
87183 log_packet_detailed(" got field 'pretty_names'");
87184
87185#ifdef FREECIV_JSON_CONNECTION
87186 field_addr.name = "pretty_names";
87187#endif /* FREECIV_JSON_CONNECTION */
87188
87189 {
87190 int i;
87191
87192 if (real_packet->bits_num > 64) {
87193 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87194 }
87195
87196#ifdef FREECIV_JSON_CONNECTION
87197 /* Enter array. */
87198 field_addr.sub_location = plocation_elem_new(0);
87199#endif /* FREECIV_JSON_CONNECTION */
87200
87201 for (i = 0; i < real_packet->bits_num; i++) {
87202#ifdef FREECIV_JSON_CONNECTION
87203 /* Next array element */
87204 field_addr.sub_location->number = i;
87205#endif /* FREECIV_JSON_CONNECTION */
87206
87207 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87208 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87209 }
87210 }
87211
87212#ifdef FREECIV_JSON_CONNECTION
87213 /* Exit array. */
87214 FC_FREE(field_addr.sub_location);
87215#endif /* FREECIV_JSON_CONNECTION */
87216 }
87217 }
87218
87219 if (nullptr == old) {
87220 old = fc_malloc(sizeof(*old));
87222 *old = *real_packet;
87224 } else {
87225 *old = *real_packet;
87226 }
87227
87228#else /* FREECIV_DELTA_PROTOCOL */
87229#ifdef FREECIV_JSON_CONNECTION
87230 field_addr.name = "is_visible";
87231#endif /* FREECIV_JSON_CONNECTION */
87232
87233 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
87234 RECEIVE_PACKET_FIELD_ERROR(is_visible);
87235 }
87236
87237#ifdef FREECIV_JSON_CONNECTION
87238 field_addr.name = "is_changeable";
87239#endif /* FREECIV_JSON_CONNECTION */
87240
87241 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
87242 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
87243 }
87244
87245#ifdef FREECIV_JSON_CONNECTION
87246 field_addr.name = "initial_setting";
87247#endif /* FREECIV_JSON_CONNECTION */
87248
87249 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
87250 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
87251 }
87252
87253#ifdef FREECIV_JSON_CONNECTION
87254 field_addr.name = "setdef";
87255#endif /* FREECIV_JSON_CONNECTION */
87256
87257 {
87258 int readin;
87259
87260 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87262 }
87263 real_packet->setdef = readin;
87264 }
87265
87266#ifdef FREECIV_JSON_CONNECTION
87267 field_addr.name = "val";
87268#endif /* FREECIV_JSON_CONNECTION */
87269
87270 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
87272 }
87273
87274#ifdef FREECIV_JSON_CONNECTION
87275 field_addr.name = "default_val";
87276#endif /* FREECIV_JSON_CONNECTION */
87277
87278 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
87279 RECEIVE_PACKET_FIELD_ERROR(default_val);
87280 }
87281
87282#ifdef FREECIV_JSON_CONNECTION
87283 field_addr.name = "bits_num";
87284#endif /* FREECIV_JSON_CONNECTION */
87285
87286 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
87288 }
87289
87290#ifdef FREECIV_JSON_CONNECTION
87291 field_addr.name = "support_names";
87292#endif /* FREECIV_JSON_CONNECTION */
87293
87294 {
87295 int i;
87296
87297 if (real_packet->bits_num > 64) {
87298 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87299 }
87300
87301#ifdef FREECIV_JSON_CONNECTION
87302 /* Enter array. */
87303 field_addr.sub_location = plocation_elem_new(0);
87304#endif /* FREECIV_JSON_CONNECTION */
87305
87306 for (i = 0; i < real_packet->bits_num; i++) {
87307#ifdef FREECIV_JSON_CONNECTION
87308 /* Next array element */
87309 field_addr.sub_location->number = i;
87310#endif /* FREECIV_JSON_CONNECTION */
87311
87312 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87313 RECEIVE_PACKET_FIELD_ERROR(support_names);
87314 }
87315 }
87316
87317#ifdef FREECIV_JSON_CONNECTION
87318 /* Exit array. */
87319 FC_FREE(field_addr.sub_location);
87320#endif /* FREECIV_JSON_CONNECTION */
87321 }
87322
87323#ifdef FREECIV_JSON_CONNECTION
87324 field_addr.name = "pretty_names";
87325#endif /* FREECIV_JSON_CONNECTION */
87326
87327 {
87328 int i;
87329
87330 if (real_packet->bits_num > 64) {
87331 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87332 }
87333
87334#ifdef FREECIV_JSON_CONNECTION
87335 /* Enter array. */
87336 field_addr.sub_location = plocation_elem_new(0);
87337#endif /* FREECIV_JSON_CONNECTION */
87338
87339 for (i = 0; i < real_packet->bits_num; i++) {
87340#ifdef FREECIV_JSON_CONNECTION
87341 /* Next array element */
87342 field_addr.sub_location->number = i;
87343#endif /* FREECIV_JSON_CONNECTION */
87344
87345 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87346 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87347 }
87348 }
87349
87350#ifdef FREECIV_JSON_CONNECTION
87351 /* Exit array. */
87352 FC_FREE(field_addr.sub_location);
87353#endif /* FREECIV_JSON_CONNECTION */
87354 }
87355#endif /* FREECIV_DELTA_PROTOCOL */
87356
87358#undef FREE_PACKET_STRUCT
87359}
87360
87362{
87363 const struct packet_server_setting_bitwise *real_packet = packet;
87364 int e;
87366
87367 log_packet_detailed("packet_server_setting_bitwise_100: sending info about (%d)",
87368 real_packet->id);
87369
87370#ifdef FREECIV_DELTA_PROTOCOL
87373 bool differ;
87374 int different = 0;
87375 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BITWISE;
87376
87377 if (nullptr == *hash) {
87379 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
87380 }
87381 BV_CLR_ALL(fields);
87382
87383 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87384 old = fc_malloc(sizeof(*old));
87385 /* temporary bitcopy just to insert correctly */
87386 *old = *real_packet;
87389 different = 1; /* Force to send. */
87390 }
87391
87392 differ = (old->is_visible != real_packet->is_visible);
87393 if (differ) {
87394 different++;
87395 }
87396 /* folded into head */
87397 if (real_packet->is_visible) {
87398 BV_SET(fields, 0);
87399 }
87400
87401 differ = (old->is_changeable != real_packet->is_changeable);
87402 if (differ) {
87403 different++;
87404 }
87405 /* folded into head */
87406 if (real_packet->is_changeable) {
87407 BV_SET(fields, 1);
87408 }
87409
87410 differ = (old->initial_setting != real_packet->initial_setting);
87411 if (differ) {
87412 different++;
87413 }
87414 /* folded into head */
87415 if (real_packet->initial_setting) {
87416 BV_SET(fields, 2);
87417 }
87418
87419 differ = (old->setdef != real_packet->setdef);
87420 if (differ) {
87421 different++;
87422 BV_SET(fields, 3);
87423 }
87424
87425 differ = (old->val != real_packet->val);
87426 if (differ) {
87427 different++;
87428 BV_SET(fields, 4);
87429 }
87430
87431 differ = (old->default_val != real_packet->default_val);
87432 if (differ) {
87433 different++;
87434 BV_SET(fields, 5);
87435 }
87436
87437 differ = (old->bits_num != real_packet->bits_num);
87438 if (differ) {
87439 different++;
87440 BV_SET(fields, 6);
87441 }
87442
87443 differ = (old->bits_num != real_packet->bits_num);
87444 if (!differ) {
87445 int i;
87446
87447 for (i = 0; i < old->bits_num; i++) {
87448 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
87449 if (differ) {
87450 break;
87451 }
87452 }
87453 }
87454 if (differ) {
87455 different++;
87456 BV_SET(fields, 7);
87457 }
87458
87459 differ = (old->bits_num != real_packet->bits_num);
87460 if (!differ) {
87461 int i;
87462
87463 for (i = 0; i < old->bits_num; i++) {
87464 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
87465 if (differ) {
87466 break;
87467 }
87468 }
87469 }
87470 if (differ) {
87471 different++;
87472 BV_SET(fields, 8);
87473 }
87474
87475 if (different == 0) {
87476 log_packet_detailed(" no change -> discard");
87478 }
87479#endif /* FREECIV_DELTA_PROTOCOL */
87480
87481#ifdef FREECIV_JSON_CONNECTION
87482 struct plocation field_addr;
87483 {
87484 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87487 }
87488#endif /* FREECIV_JSON_CONNECTION */
87489
87490#ifdef FREECIV_JSON_CONNECTION
87491 field_addr.name = "id";
87492#endif /* FREECIV_JSON_CONNECTION */
87493 e = 0;
87494
87495 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
87496
87497 if (e) {
87498 log_packet_detailed("'id' field error detected");
87499 }
87500
87501#ifdef FREECIV_DELTA_PROTOCOL
87502#ifdef FREECIV_JSON_CONNECTION
87503 field_addr.name = "fields";
87504#endif /* FREECIV_JSON_CONNECTION */
87505 e = 0;
87506 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87507 if (e) {
87508 log_packet_detailed("fields bitvector error detected");
87509 }
87510
87511 /* field 0 is folded into the header */
87512
87513 /* field 1 is folded into the header */
87514
87515 /* field 2 is folded into the header */
87516
87517 if (BV_ISSET(fields, 3)) {
87518 log_packet_detailed(" field 'setdef' has changed");
87519
87520#ifdef FREECIV_JSON_CONNECTION
87521 field_addr.name = "setdef";
87522#endif /* FREECIV_JSON_CONNECTION */
87523 e = 0;
87524
87525 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87526
87527 if (e) {
87528 log_packet_detailed("'setdef' field error detected");
87529 }
87530 }
87531
87532 if (BV_ISSET(fields, 4)) {
87533 log_packet_detailed(" field 'val' has changed");
87534
87535#ifdef FREECIV_JSON_CONNECTION
87536 field_addr.name = "val";
87537#endif /* FREECIV_JSON_CONNECTION */
87538 e = 0;
87539
87540 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
87541
87542 if (e) {
87543 log_packet_detailed("'val' field error detected");
87544 }
87545 }
87546
87547 if (BV_ISSET(fields, 5)) {
87548 log_packet_detailed(" field 'default_val' has changed");
87549
87550#ifdef FREECIV_JSON_CONNECTION
87551 field_addr.name = "default_val";
87552#endif /* FREECIV_JSON_CONNECTION */
87553 e = 0;
87554
87555 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
87556
87557 if (e) {
87558 log_packet_detailed("'default_val' field error detected");
87559 }
87560 }
87561
87562 if (BV_ISSET(fields, 6)) {
87563 log_packet_detailed(" field 'bits_num' has changed");
87564
87565#ifdef FREECIV_JSON_CONNECTION
87566 field_addr.name = "bits_num";
87567#endif /* FREECIV_JSON_CONNECTION */
87568 e = 0;
87569
87570 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
87571
87572 if (e) {
87573 log_packet_detailed("'bits_num' field error detected");
87574 }
87575 }
87576
87577 if (BV_ISSET(fields, 7)) {
87578 log_packet_detailed(" field 'support_names' has changed");
87579
87580#ifdef FREECIV_JSON_CONNECTION
87581 field_addr.name = "support_names";
87582#endif /* FREECIV_JSON_CONNECTION */
87583 e = 0;
87584
87585 {
87586 int i;
87587
87588#ifdef FREECIV_JSON_CONNECTION
87589 /* Create the array. */
87590 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87591
87592 /* Enter array. */
87593 field_addr.sub_location = plocation_elem_new(0);
87594#endif /* FREECIV_JSON_CONNECTION */
87595
87596 for (i = 0; i < real_packet->bits_num; i++) {
87597#ifdef FREECIV_JSON_CONNECTION
87598 /* Next array element. */
87599 field_addr.sub_location->number = i;
87600#endif /* FREECIV_JSON_CONNECTION */
87601
87602 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87603 }
87604
87605#ifdef FREECIV_JSON_CONNECTION
87606 /* Exit array. */
87607 FC_FREE(field_addr.sub_location);
87608#endif /* FREECIV_JSON_CONNECTION */
87609 }
87610
87611 if (e) {
87612 log_packet_detailed("'support_names' field error detected");
87613 }
87614 }
87615
87616 if (BV_ISSET(fields, 8)) {
87617 log_packet_detailed(" field 'pretty_names' has changed");
87618
87619#ifdef FREECIV_JSON_CONNECTION
87620 field_addr.name = "pretty_names";
87621#endif /* FREECIV_JSON_CONNECTION */
87622 e = 0;
87623
87624 {
87625 int i;
87626
87627#ifdef FREECIV_JSON_CONNECTION
87628 /* Create the array. */
87629 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87630
87631 /* Enter array. */
87632 field_addr.sub_location = plocation_elem_new(0);
87633#endif /* FREECIV_JSON_CONNECTION */
87634
87635 for (i = 0; i < real_packet->bits_num; i++) {
87636#ifdef FREECIV_JSON_CONNECTION
87637 /* Next array element. */
87638 field_addr.sub_location->number = i;
87639#endif /* FREECIV_JSON_CONNECTION */
87640
87641 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87642 }
87643
87644#ifdef FREECIV_JSON_CONNECTION
87645 /* Exit array. */
87646 FC_FREE(field_addr.sub_location);
87647#endif /* FREECIV_JSON_CONNECTION */
87648 }
87649
87650 if (e) {
87651 log_packet_detailed("'pretty_names' field error detected");
87652 }
87653 }
87654
87655 *old = *real_packet;
87656
87657#else /* FREECIV_DELTA_PROTOCOL */
87658#ifdef FREECIV_JSON_CONNECTION
87659 field_addr.name = "is_visible";
87660#endif /* FREECIV_JSON_CONNECTION */
87661 e = 0;
87662
87663 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
87664
87665 if (e) {
87666 log_packet_detailed("'is_visible' field error detected");
87667 }
87668
87669#ifdef FREECIV_JSON_CONNECTION
87670 field_addr.name = "is_changeable";
87671#endif /* FREECIV_JSON_CONNECTION */
87672 e = 0;
87673
87674 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
87675
87676 if (e) {
87677 log_packet_detailed("'is_changeable' field error detected");
87678 }
87679
87680#ifdef FREECIV_JSON_CONNECTION
87681 field_addr.name = "initial_setting";
87682#endif /* FREECIV_JSON_CONNECTION */
87683 e = 0;
87684
87685 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
87686
87687 if (e) {
87688 log_packet_detailed("'initial_setting' field error detected");
87689 }
87690
87691#ifdef FREECIV_JSON_CONNECTION
87692 field_addr.name = "setdef";
87693#endif /* FREECIV_JSON_CONNECTION */
87694 e = 0;
87695
87696 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87697
87698 if (e) {
87699 log_packet_detailed("'setdef' field error detected");
87700 }
87701
87702#ifdef FREECIV_JSON_CONNECTION
87703 field_addr.name = "val";
87704#endif /* FREECIV_JSON_CONNECTION */
87705 e = 0;
87706
87707 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
87708
87709 if (e) {
87710 log_packet_detailed("'val' field error detected");
87711 }
87712
87713#ifdef FREECIV_JSON_CONNECTION
87714 field_addr.name = "default_val";
87715#endif /* FREECIV_JSON_CONNECTION */
87716 e = 0;
87717
87718 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
87719
87720 if (e) {
87721 log_packet_detailed("'default_val' field error detected");
87722 }
87723
87724#ifdef FREECIV_JSON_CONNECTION
87725 field_addr.name = "bits_num";
87726#endif /* FREECIV_JSON_CONNECTION */
87727 e = 0;
87728
87729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
87730
87731 if (e) {
87732 log_packet_detailed("'bits_num' field error detected");
87733 }
87734
87735#ifdef FREECIV_JSON_CONNECTION
87736 field_addr.name = "support_names";
87737#endif /* FREECIV_JSON_CONNECTION */
87738 e = 0;
87739
87740 {
87741 int i;
87742
87743#ifdef FREECIV_JSON_CONNECTION
87744 /* Create the array. */
87745 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87746
87747 /* Enter array. */
87748 field_addr.sub_location = plocation_elem_new(0);
87749#endif /* FREECIV_JSON_CONNECTION */
87750
87751 for (i = 0; i < real_packet->bits_num; i++) {
87752#ifdef FREECIV_JSON_CONNECTION
87753 /* Next array element. */
87754 field_addr.sub_location->number = i;
87755#endif /* FREECIV_JSON_CONNECTION */
87756
87757 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87758 }
87759
87760#ifdef FREECIV_JSON_CONNECTION
87761 /* Exit array. */
87762 FC_FREE(field_addr.sub_location);
87763#endif /* FREECIV_JSON_CONNECTION */
87764 }
87765
87766 if (e) {
87767 log_packet_detailed("'support_names' field error detected");
87768 }
87769
87770#ifdef FREECIV_JSON_CONNECTION
87771 field_addr.name = "pretty_names";
87772#endif /* FREECIV_JSON_CONNECTION */
87773 e = 0;
87774
87775 {
87776 int i;
87777
87778#ifdef FREECIV_JSON_CONNECTION
87779 /* Create the array. */
87780 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87781
87782 /* Enter array. */
87783 field_addr.sub_location = plocation_elem_new(0);
87784#endif /* FREECIV_JSON_CONNECTION */
87785
87786 for (i = 0; i < real_packet->bits_num; i++) {
87787#ifdef FREECIV_JSON_CONNECTION
87788 /* Next array element. */
87789 field_addr.sub_location->number = i;
87790#endif /* FREECIV_JSON_CONNECTION */
87791
87792 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87793 }
87794
87795#ifdef FREECIV_JSON_CONNECTION
87796 /* Exit array. */
87797 FC_FREE(field_addr.sub_location);
87798#endif /* FREECIV_JSON_CONNECTION */
87799 }
87800
87801 if (e) {
87802 log_packet_detailed("'pretty_names' field error detected");
87803 }
87804#endif /* FREECIV_DELTA_PROTOCOL */
87805
87807}
87808
87810{
87811 if (!pc->used) {
87812 log_error("WARNING: trying to send data to the closed connection %s",
87814 return -1;
87815 }
87816 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet != nullptr, -1,
87817 "Handler for PACKET_SERVER_SETTING_BITWISE not installed");
87818 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet(pc, packet);
87819}
87820
87821static inline void init_packet_set_topology(struct packet_set_topology *packet)
87822{
87823 memset(packet, 0, sizeof(*packet));
87824}
87825
87826#define free_packet_set_topology(_packet) (void) 0
87827#define destroy_packet_set_topology free
87828
87829#ifdef FREECIV_DELTA_PROTOCOL
87830#define hash_packet_set_topology_100 hash_const
87831#define cmp_packet_set_topology_100 cmp_const
87833#endif /* FREECIV_DELTA_PROTOCOL */
87834
87836{
87837#define FREE_PACKET_STRUCT(_packet) free_packet_set_topology(_packet)
87839
87840#ifdef FREECIV_JSON_CONNECTION
87841 struct plocation field_addr;
87842 {
87843 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87846 }
87847#endif /* FREECIV_JSON_CONNECTION */
87848
87849 log_packet_detailed("packet_set_topology_100: got info about ()");
87850
87851#ifdef FREECIV_DELTA_PROTOCOL
87853 struct packet_set_topology *old;
87854 struct genhash **hash = pc->phs.received + PACKET_SET_TOPOLOGY;
87855
87856 if (nullptr == *hash) {
87858 nullptr, nullptr, nullptr, destroy_packet_set_topology);
87859 }
87860
87861 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87862 *real_packet = *old;
87863 } else {
87864 /* packet is already initialized empty */
87865 log_packet_detailed(" no old info");
87866 }
87867
87868#ifdef FREECIV_JSON_CONNECTION
87869 field_addr.name = "fields";
87870#endif /* FREECIV_JSON_CONNECTION */
87871 DIO_BV_GET(&din, &field_addr, fields);
87872
87873 if (BV_ISSET(fields, 0)) {
87874 log_packet_detailed(" got field 'topology_id'");
87875
87876#ifdef FREECIV_JSON_CONNECTION
87877 field_addr.name = "topology_id";
87878#endif /* FREECIV_JSON_CONNECTION */
87879
87880 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
87881 RECEIVE_PACKET_FIELD_ERROR(topology_id);
87882 }
87883 }
87884
87885 if (BV_ISSET(fields, 1)) {
87886 log_packet_detailed(" got field 'wrap_id'");
87887
87888#ifdef FREECIV_JSON_CONNECTION
87889 field_addr.name = "wrap_id";
87890#endif /* FREECIV_JSON_CONNECTION */
87891
87892 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
87894 }
87895 }
87896
87897 if (nullptr == old) {
87898 old = fc_malloc(sizeof(*old));
87900 *old = *real_packet;
87902 } else {
87903 *old = *real_packet;
87904 }
87905
87906#else /* FREECIV_DELTA_PROTOCOL */
87907#ifdef FREECIV_JSON_CONNECTION
87908 field_addr.name = "topology_id";
87909#endif /* FREECIV_JSON_CONNECTION */
87910
87911 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
87912 RECEIVE_PACKET_FIELD_ERROR(topology_id);
87913 }
87914
87915#ifdef FREECIV_JSON_CONNECTION
87916 field_addr.name = "wrap_id";
87917#endif /* FREECIV_JSON_CONNECTION */
87918
87919 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
87921 }
87922#endif /* FREECIV_DELTA_PROTOCOL */
87923
87925#undef FREE_PACKET_STRUCT
87926}
87927
87928static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
87929{
87930 const struct packet_set_topology *real_packet = packet;
87931 int e;
87933
87934 log_packet_detailed("packet_set_topology_100: sending info about ()");
87935
87936#ifdef FREECIV_DELTA_PROTOCOL
87938 struct packet_set_topology *old;
87939 bool differ;
87940 struct genhash **hash = pc->phs.sent + PACKET_SET_TOPOLOGY;
87941
87942 if (nullptr == *hash) {
87944 nullptr, nullptr, nullptr, destroy_packet_set_topology);
87945 }
87946 BV_CLR_ALL(fields);
87947
87948 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87949 old = fc_malloc(sizeof(*old));
87950 /* temporary bitcopy just to insert correctly */
87951 *old = *real_packet;
87954 }
87955
87956 differ = (old->topology_id != real_packet->topology_id);
87957 if (differ) {
87958 BV_SET(fields, 0);
87959 }
87960
87961 differ = (old->wrap_id != real_packet->wrap_id);
87962 if (differ) {
87963 BV_SET(fields, 1);
87964 }
87965#endif /* FREECIV_DELTA_PROTOCOL */
87966
87967#ifdef FREECIV_JSON_CONNECTION
87968 struct plocation field_addr;
87969 {
87970 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87973 }
87974#endif /* FREECIV_JSON_CONNECTION */
87975
87976#ifdef FREECIV_DELTA_PROTOCOL
87977#ifdef FREECIV_JSON_CONNECTION
87978 field_addr.name = "fields";
87979#endif /* FREECIV_JSON_CONNECTION */
87980 e = 0;
87981 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87982 if (e) {
87983 log_packet_detailed("fields bitvector error detected");
87984 }
87985
87986 if (BV_ISSET(fields, 0)) {
87987 log_packet_detailed(" field 'topology_id' has changed");
87988
87989#ifdef FREECIV_JSON_CONNECTION
87990 field_addr.name = "topology_id";
87991#endif /* FREECIV_JSON_CONNECTION */
87992 e = 0;
87993
87994 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
87995
87996 if (e) {
87997 log_packet_detailed("'topology_id' field error detected");
87998 }
87999 }
88000
88001 if (BV_ISSET(fields, 1)) {
88002 log_packet_detailed(" field 'wrap_id' has changed");
88003
88004#ifdef FREECIV_JSON_CONNECTION
88005 field_addr.name = "wrap_id";
88006#endif /* FREECIV_JSON_CONNECTION */
88007 e = 0;
88008
88009 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88010
88011 if (e) {
88012 log_packet_detailed("'wrap_id' field error detected");
88013 }
88014 }
88015
88016 *old = *real_packet;
88017
88018#else /* FREECIV_DELTA_PROTOCOL */
88019#ifdef FREECIV_JSON_CONNECTION
88020 field_addr.name = "topology_id";
88021#endif /* FREECIV_JSON_CONNECTION */
88022 e = 0;
88023
88024 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
88025
88026 if (e) {
88027 log_packet_detailed("'topology_id' field error detected");
88028 }
88029
88030#ifdef FREECIV_JSON_CONNECTION
88031 field_addr.name = "wrap_id";
88032#endif /* FREECIV_JSON_CONNECTION */
88033 e = 0;
88034
88035 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88036
88037 if (e) {
88038 log_packet_detailed("'wrap_id' field error detected");
88039 }
88040#endif /* FREECIV_DELTA_PROTOCOL */
88041
88043}
88044
88046{
88047 if (!pc->used) {
88048 log_error("WARNING: trying to send data to the closed connection %s",
88050 return -1;
88051 }
88052 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet != nullptr, -1,
88053 "Handler for PACKET_SET_TOPOLOGY not installed");
88054 return pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet(pc, packet);
88055}
88056
88057static inline void init_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88058{
88059 memset(packet, 0, sizeof(*packet));
88060
88061 requirement_vector_init(&packet->reqs);
88062}
88063
88064static inline void free_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88065{
88066 requirement_vector_free(&packet->reqs);
88067}
88068
88069static inline void destroy_packet_ruleset_effect(void *packet)
88070{
88072 free(packet);
88073}
88074
88075#ifdef FREECIV_DELTA_PROTOCOL
88076#define hash_packet_ruleset_effect_100 hash_const
88077#define cmp_packet_ruleset_effect_100 cmp_const
88079#endif /* FREECIV_DELTA_PROTOCOL */
88080
88082{
88083#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_effect(_packet)
88085
88086#ifdef FREECIV_JSON_CONNECTION
88087 struct plocation field_addr;
88088 {
88089 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88092 }
88093#endif /* FREECIV_JSON_CONNECTION */
88094
88095 log_packet_detailed("packet_ruleset_effect_100: got info about ()");
88096
88097#ifdef FREECIV_DELTA_PROTOCOL
88099 struct packet_ruleset_effect *old;
88100 struct genhash **hash = pc->phs.received + PACKET_RULESET_EFFECT;
88101
88102 if (nullptr == *hash) {
88104 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
88105 }
88106
88107 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88108 real_packet->effect_type = old->effect_type;
88109 real_packet->effect_value = old->effect_value;
88110 real_packet->has_multiplier = old->has_multiplier;
88111 real_packet->multiplier = old->multiplier;
88112 requirement_vector_copy(&real_packet->reqs, &old->reqs);
88113 } else {
88114 /* packet is already initialized empty */
88115 log_packet_detailed(" no old info");
88116 }
88117
88118#ifdef FREECIV_JSON_CONNECTION
88119 field_addr.name = "fields";
88120#endif /* FREECIV_JSON_CONNECTION */
88121 DIO_BV_GET(&din, &field_addr, fields);
88122
88123 if (BV_ISSET(fields, 0)) {
88124 log_packet_detailed(" got field 'effect_type'");
88125
88126#ifdef FREECIV_JSON_CONNECTION
88127 field_addr.name = "effect_type";
88128#endif /* FREECIV_JSON_CONNECTION */
88129
88130 {
88131 int readin;
88132
88133 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88134 RECEIVE_PACKET_FIELD_ERROR(effect_type);
88135 }
88136 real_packet->effect_type = readin;
88137 }
88138 }
88139
88140 if (BV_ISSET(fields, 1)) {
88141 log_packet_detailed(" got field 'effect_value'");
88142
88143#ifdef FREECIV_JSON_CONNECTION
88144 field_addr.name = "effect_value";
88145#endif /* FREECIV_JSON_CONNECTION */
88146
88147 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
88148 RECEIVE_PACKET_FIELD_ERROR(effect_value);
88149 }
88150 }
88151
88152 real_packet->has_multiplier = BV_ISSET(fields, 2);
88153
88154 if (BV_ISSET(fields, 3)) {
88155 log_packet_detailed(" got field 'multiplier'");
88156
88157#ifdef FREECIV_JSON_CONNECTION
88158 field_addr.name = "multiplier";
88159#endif /* FREECIV_JSON_CONNECTION */
88160
88161 {
88162 int readin;
88163
88164 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88166 }
88167 real_packet->multiplier = readin;
88168 }
88169 }
88170
88171 if (BV_ISSET(fields, 4)) {
88172 log_packet_detailed(" got field 'reqs'");
88173
88174#ifdef FREECIV_JSON_CONNECTION
88175 field_addr.name = "reqs";
88176#endif /* FREECIV_JSON_CONNECTION */
88177
88178 {
88179 int i;
88180
88181 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
88183 }
88185
88186#ifdef FREECIV_JSON_CONNECTION
88187 /* Enter array. */
88188 field_addr.sub_location = plocation_elem_new(0);
88189#endif /* FREECIV_JSON_CONNECTION */
88190
88191 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88192#ifdef FREECIV_JSON_CONNECTION
88193 /* Next array element */
88194 field_addr.sub_location->number = i;
88195#endif /* FREECIV_JSON_CONNECTION */
88196
88197 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
88199 }
88200 }
88201
88202#ifdef FREECIV_JSON_CONNECTION
88203 /* Exit array. */
88204 FC_FREE(field_addr.sub_location);
88205#endif /* FREECIV_JSON_CONNECTION */
88206 }
88207 }
88208
88209 if (nullptr == old) {
88210 old = fc_malloc(sizeof(*old));
88212 old->effect_type = real_packet->effect_type;
88213 old->effect_value = real_packet->effect_value;
88214 old->has_multiplier = real_packet->has_multiplier;
88215 old->multiplier = real_packet->multiplier;
88216 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88218 } else {
88219 old->effect_type = real_packet->effect_type;
88220 old->effect_value = real_packet->effect_value;
88221 old->has_multiplier = real_packet->has_multiplier;
88222 old->multiplier = real_packet->multiplier;
88223 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88224 }
88225
88226#else /* FREECIV_DELTA_PROTOCOL */
88227#ifdef FREECIV_JSON_CONNECTION
88228 field_addr.name = "effect_type";
88229#endif /* FREECIV_JSON_CONNECTION */
88230
88231 {
88232 int readin;
88233
88234 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88235 RECEIVE_PACKET_FIELD_ERROR(effect_type);
88236 }
88237 real_packet->effect_type = readin;
88238 }
88239
88240#ifdef FREECIV_JSON_CONNECTION
88241 field_addr.name = "effect_value";
88242#endif /* FREECIV_JSON_CONNECTION */
88243
88244 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
88245 RECEIVE_PACKET_FIELD_ERROR(effect_value);
88246 }
88247
88248#ifdef FREECIV_JSON_CONNECTION
88249 field_addr.name = "has_multiplier";
88250#endif /* FREECIV_JSON_CONNECTION */
88251
88252 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_multiplier)) {
88253 RECEIVE_PACKET_FIELD_ERROR(has_multiplier);
88254 }
88255
88256#ifdef FREECIV_JSON_CONNECTION
88257 field_addr.name = "multiplier";
88258#endif /* FREECIV_JSON_CONNECTION */
88259
88260 {
88261 int readin;
88262
88263 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88265 }
88266 real_packet->multiplier = readin;
88267 }
88268
88269#ifdef FREECIV_JSON_CONNECTION
88270 field_addr.name = "reqs";
88271#endif /* FREECIV_JSON_CONNECTION */
88272
88273 {
88274 int i;
88275
88276 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
88278 }
88280
88281#ifdef FREECIV_JSON_CONNECTION
88282 /* Enter array. */
88283 field_addr.sub_location = plocation_elem_new(0);
88284#endif /* FREECIV_JSON_CONNECTION */
88285
88286 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88287#ifdef FREECIV_JSON_CONNECTION
88288 /* Next array element */
88289 field_addr.sub_location->number = i;
88290#endif /* FREECIV_JSON_CONNECTION */
88291
88292 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
88294 }
88295 }
88296
88297#ifdef FREECIV_JSON_CONNECTION
88298 /* Exit array. */
88299 FC_FREE(field_addr.sub_location);
88300#endif /* FREECIV_JSON_CONNECTION */
88301 }
88302#endif /* FREECIV_DELTA_PROTOCOL */
88303
88305#undef FREE_PACKET_STRUCT
88306}
88307
88309{
88310 const struct packet_ruleset_effect *real_packet = packet;
88311 int e;
88313
88314 log_packet_detailed("packet_ruleset_effect_100: sending info about ()");
88315
88316#ifdef FREECIV_DELTA_PROTOCOL
88318 struct packet_ruleset_effect *old;
88319 bool differ;
88320 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EFFECT;
88321
88322 if (nullptr == *hash) {
88324 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
88325 }
88326 BV_CLR_ALL(fields);
88327
88328 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88329 old = fc_malloc(sizeof(*old));
88330 /* temporary bitcopy just to insert correctly */
88331 *old = *real_packet;
88334 }
88335
88336 differ = (old->effect_type != real_packet->effect_type);
88337 if (differ) {
88338 BV_SET(fields, 0);
88339 }
88340
88341 differ = (old->effect_value != real_packet->effect_value);
88342 if (differ) {
88343 BV_SET(fields, 1);
88344 }
88345
88346 /* folded into head */
88347 if (real_packet->has_multiplier) {
88348 BV_SET(fields, 2);
88349 }
88350
88351 differ = (old->multiplier != real_packet->multiplier);
88352 if (differ) {
88353 BV_SET(fields, 3);
88354 }
88355
88357 if (!differ) {
88358 int i;
88359
88360 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
88361 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
88362 if (differ) {
88363 break;
88364 }
88365 }
88366 }
88367 if (differ) {
88368 BV_SET(fields, 4);
88369 }
88370#endif /* FREECIV_DELTA_PROTOCOL */
88371
88372#ifdef FREECIV_JSON_CONNECTION
88373 struct plocation field_addr;
88374 {
88375 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88378 }
88379#endif /* FREECIV_JSON_CONNECTION */
88380
88381#ifdef FREECIV_DELTA_PROTOCOL
88382#ifdef FREECIV_JSON_CONNECTION
88383 field_addr.name = "fields";
88384#endif /* FREECIV_JSON_CONNECTION */
88385 e = 0;
88386 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88387 if (e) {
88388 log_packet_detailed("fields bitvector error detected");
88389 }
88390
88391 if (BV_ISSET(fields, 0)) {
88392 log_packet_detailed(" field 'effect_type' has changed");
88393
88394#ifdef FREECIV_JSON_CONNECTION
88395 field_addr.name = "effect_type";
88396#endif /* FREECIV_JSON_CONNECTION */
88397 e = 0;
88398
88399 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
88400
88401 if (e) {
88402 log_packet_detailed("'effect_type' field error detected");
88403 }
88404 }
88405
88406 if (BV_ISSET(fields, 1)) {
88407 log_packet_detailed(" field 'effect_value' has changed");
88408
88409#ifdef FREECIV_JSON_CONNECTION
88410 field_addr.name = "effect_value";
88411#endif /* FREECIV_JSON_CONNECTION */
88412 e = 0;
88413
88414 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
88415
88416 if (e) {
88417 log_packet_detailed("'effect_value' field error detected");
88418 }
88419 }
88420
88421 /* field 2 is folded into the header */
88422
88423 if (BV_ISSET(fields, 3)) {
88424 log_packet_detailed(" field 'multiplier' has changed");
88425
88426#ifdef FREECIV_JSON_CONNECTION
88427 field_addr.name = "multiplier";
88428#endif /* FREECIV_JSON_CONNECTION */
88429 e = 0;
88430
88431 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
88432
88433 if (e) {
88434 log_packet_detailed("'multiplier' field error detected");
88435 }
88436 }
88437
88438 if (BV_ISSET(fields, 4)) {
88439 log_packet_detailed(" field 'reqs' has changed");
88440
88441#ifdef FREECIV_JSON_CONNECTION
88442 field_addr.name = "reqs";
88443#endif /* FREECIV_JSON_CONNECTION */
88444 e = 0;
88445
88446 {
88447 int i;
88448
88451
88452#ifdef FREECIV_JSON_CONNECTION
88453 /* Enter array. */
88454 field_addr.sub_location = plocation_elem_new(0);
88455#endif /* FREECIV_JSON_CONNECTION */
88456
88457 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88458#ifdef FREECIV_JSON_CONNECTION
88459 /* Next array element. */
88460 field_addr.sub_location->number = i;
88461#endif /* FREECIV_JSON_CONNECTION */
88462
88463 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
88464 }
88465
88466#ifdef FREECIV_JSON_CONNECTION
88467 /* Exit array. */
88468 FC_FREE(field_addr.sub_location);
88469#endif /* FREECIV_JSON_CONNECTION */
88470 }
88471
88472 if (e) {
88473 log_packet_detailed("'reqs' field error detected");
88474 }
88475 }
88476
88477 old->effect_type = real_packet->effect_type;
88478 old->effect_value = real_packet->effect_value;
88479 old->has_multiplier = real_packet->has_multiplier;
88480 old->multiplier = real_packet->multiplier;
88481 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88482
88483#else /* FREECIV_DELTA_PROTOCOL */
88484#ifdef FREECIV_JSON_CONNECTION
88485 field_addr.name = "effect_type";
88486#endif /* FREECIV_JSON_CONNECTION */
88487 e = 0;
88488
88489 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
88490
88491 if (e) {
88492 log_packet_detailed("'effect_type' field error detected");
88493 }
88494
88495#ifdef FREECIV_JSON_CONNECTION
88496 field_addr.name = "effect_value";
88497#endif /* FREECIV_JSON_CONNECTION */
88498 e = 0;
88499
88500 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
88501
88502 if (e) {
88503 log_packet_detailed("'effect_value' field error detected");
88504 }
88505
88506#ifdef FREECIV_JSON_CONNECTION
88507 field_addr.name = "has_multiplier";
88508#endif /* FREECIV_JSON_CONNECTION */
88509 e = 0;
88510
88511 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_multiplier);
88512
88513 if (e) {
88514 log_packet_detailed("'has_multiplier' field error detected");
88515 }
88516
88517#ifdef FREECIV_JSON_CONNECTION
88518 field_addr.name = "multiplier";
88519#endif /* FREECIV_JSON_CONNECTION */
88520 e = 0;
88521
88522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
88523
88524 if (e) {
88525 log_packet_detailed("'multiplier' field error detected");
88526 }
88527
88528#ifdef FREECIV_JSON_CONNECTION
88529 field_addr.name = "reqs";
88530#endif /* FREECIV_JSON_CONNECTION */
88531 e = 0;
88532
88533 {
88534 int i;
88535
88538
88539#ifdef FREECIV_JSON_CONNECTION
88540 /* Enter array. */
88541 field_addr.sub_location = plocation_elem_new(0);
88542#endif /* FREECIV_JSON_CONNECTION */
88543
88544 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88545#ifdef FREECIV_JSON_CONNECTION
88546 /* Next array element. */
88547 field_addr.sub_location->number = i;
88548#endif /* FREECIV_JSON_CONNECTION */
88549
88550 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
88551 }
88552
88553#ifdef FREECIV_JSON_CONNECTION
88554 /* Exit array. */
88555 FC_FREE(field_addr.sub_location);
88556#endif /* FREECIV_JSON_CONNECTION */
88557 }
88558
88559 if (e) {
88560 log_packet_detailed("'reqs' field error detected");
88561 }
88562#endif /* FREECIV_DELTA_PROTOCOL */
88563
88565}
88566
88568{
88569 if (!pc->used) {
88570 log_error("WARNING: trying to send data to the closed connection %s",
88572 return -1;
88573 }
88574 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet != nullptr, -1,
88575 "Handler for PACKET_RULESET_EFFECT not installed");
88576 return pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet(pc, packet);
88577}
88578
88579void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
88580{
88581 conn_list_iterate(dest, pconn) {
88584}
88585
88587{
88588 memset(packet, 0, sizeof(*packet));
88589}
88590
88591#define free_packet_ruleset_resource(_packet) (void) 0
88592#define destroy_packet_ruleset_resource free
88593
88594#ifdef FREECIV_DELTA_PROTOCOL
88595#define hash_packet_ruleset_resource_100 hash_const
88596#define cmp_packet_ruleset_resource_100 cmp_const
88598#endif /* FREECIV_DELTA_PROTOCOL */
88599
88601{
88602#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_resource(_packet)
88604
88605#ifdef FREECIV_JSON_CONNECTION
88606 struct plocation field_addr;
88607 {
88608 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88611 }
88612#endif /* FREECIV_JSON_CONNECTION */
88613
88614 log_packet_detailed("packet_ruleset_resource_100: got info about ()");
88615
88616#ifdef FREECIV_DELTA_PROTOCOL
88619 struct genhash **hash = pc->phs.received + PACKET_RULESET_RESOURCE;
88620
88621 if (nullptr == *hash) {
88623 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
88624 }
88625
88626 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88627 *real_packet = *old;
88628 } else {
88629 /* packet is already initialized empty */
88630 log_packet_detailed(" no old info");
88631 }
88632
88633#ifdef FREECIV_JSON_CONNECTION
88634 field_addr.name = "fields";
88635#endif /* FREECIV_JSON_CONNECTION */
88636 DIO_BV_GET(&din, &field_addr, fields);
88637
88638 if (BV_ISSET(fields, 0)) {
88639 log_packet_detailed(" got field 'id'");
88640
88641#ifdef FREECIV_JSON_CONNECTION
88642 field_addr.name = "id";
88643#endif /* FREECIV_JSON_CONNECTION */
88644
88645 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
88647 }
88648 }
88649
88650 if (BV_ISSET(fields, 1)) {
88651 log_packet_detailed(" got field 'output'");
88652
88653#ifdef FREECIV_JSON_CONNECTION
88654 field_addr.name = "output";
88655#endif /* FREECIV_JSON_CONNECTION */
88656
88657 {
88658 int i;
88659
88660
88661#ifdef FREECIV_JSON_CONNECTION
88662 /* Enter array. */
88663 field_addr.sub_location = plocation_elem_new(0);
88664#endif /* FREECIV_JSON_CONNECTION */
88665
88666 for (i = 0; i < O_LAST; i++) {
88667#ifdef FREECIV_JSON_CONNECTION
88668 /* Next array element */
88669 field_addr.sub_location->number = i;
88670#endif /* FREECIV_JSON_CONNECTION */
88671
88672 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
88674 }
88675 }
88676
88677#ifdef FREECIV_JSON_CONNECTION
88678 /* Exit array. */
88679 FC_FREE(field_addr.sub_location);
88680#endif /* FREECIV_JSON_CONNECTION */
88681 }
88682 }
88683
88684 if (nullptr == old) {
88685 old = fc_malloc(sizeof(*old));
88687 *old = *real_packet;
88689 } else {
88690 *old = *real_packet;
88691 }
88692
88693#else /* FREECIV_DELTA_PROTOCOL */
88694#ifdef FREECIV_JSON_CONNECTION
88695 field_addr.name = "id";
88696#endif /* FREECIV_JSON_CONNECTION */
88697
88698 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
88700 }
88701
88702#ifdef FREECIV_JSON_CONNECTION
88703 field_addr.name = "output";
88704#endif /* FREECIV_JSON_CONNECTION */
88705
88706 {
88707 int i;
88708
88709
88710#ifdef FREECIV_JSON_CONNECTION
88711 /* Enter array. */
88712 field_addr.sub_location = plocation_elem_new(0);
88713#endif /* FREECIV_JSON_CONNECTION */
88714
88715 for (i = 0; i < O_LAST; i++) {
88716#ifdef FREECIV_JSON_CONNECTION
88717 /* Next array element */
88718 field_addr.sub_location->number = i;
88719#endif /* FREECIV_JSON_CONNECTION */
88720
88721 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
88723 }
88724 }
88725
88726#ifdef FREECIV_JSON_CONNECTION
88727 /* Exit array. */
88728 FC_FREE(field_addr.sub_location);
88729#endif /* FREECIV_JSON_CONNECTION */
88730 }
88731#endif /* FREECIV_DELTA_PROTOCOL */
88732
88734#undef FREE_PACKET_STRUCT
88735}
88736
88738{
88739 const struct packet_ruleset_resource *real_packet = packet;
88740 int e;
88742
88743 log_packet_detailed("packet_ruleset_resource_100: sending info about ()");
88744
88745#ifdef FREECIV_DELTA_PROTOCOL
88748 bool differ;
88749 struct genhash **hash = pc->phs.sent + PACKET_RULESET_RESOURCE;
88750
88751 if (nullptr == *hash) {
88753 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
88754 }
88755 BV_CLR_ALL(fields);
88756
88757 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88758 old = fc_malloc(sizeof(*old));
88759 /* temporary bitcopy just to insert correctly */
88760 *old = *real_packet;
88763 }
88764
88765 differ = (old->id != real_packet->id);
88766 if (differ) {
88767 BV_SET(fields, 0);
88768 }
88769
88770 differ = FALSE;
88771 {
88772 int i;
88773
88774 for (i = 0; i < O_LAST; i++) {
88775 differ = (old->output[i] != real_packet->output[i]);
88776 if (differ) {
88777 break;
88778 }
88779 }
88780 }
88781 if (differ) {
88782 BV_SET(fields, 1);
88783 }
88784#endif /* FREECIV_DELTA_PROTOCOL */
88785
88786#ifdef FREECIV_JSON_CONNECTION
88787 struct plocation field_addr;
88788 {
88789 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88792 }
88793#endif /* FREECIV_JSON_CONNECTION */
88794
88795#ifdef FREECIV_DELTA_PROTOCOL
88796#ifdef FREECIV_JSON_CONNECTION
88797 field_addr.name = "fields";
88798#endif /* FREECIV_JSON_CONNECTION */
88799 e = 0;
88800 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88801 if (e) {
88802 log_packet_detailed("fields bitvector error detected");
88803 }
88804
88805 if (BV_ISSET(fields, 0)) {
88806 log_packet_detailed(" field 'id' has changed");
88807
88808#ifdef FREECIV_JSON_CONNECTION
88809 field_addr.name = "id";
88810#endif /* FREECIV_JSON_CONNECTION */
88811 e = 0;
88812
88813 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
88814
88815 if (e) {
88816 log_packet_detailed("'id' field error detected");
88817 }
88818 }
88819
88820 if (BV_ISSET(fields, 1)) {
88821 log_packet_detailed(" field 'output' has changed");
88822
88823#ifdef FREECIV_JSON_CONNECTION
88824 field_addr.name = "output";
88825#endif /* FREECIV_JSON_CONNECTION */
88826 e = 0;
88827
88828 {
88829 int i;
88830
88831#ifdef FREECIV_JSON_CONNECTION
88832 /* Create the array. */
88833 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
88834
88835 /* Enter array. */
88836 field_addr.sub_location = plocation_elem_new(0);
88837#endif /* FREECIV_JSON_CONNECTION */
88838
88839 for (i = 0; i < O_LAST; i++) {
88840#ifdef FREECIV_JSON_CONNECTION
88841 /* Next array element. */
88842 field_addr.sub_location->number = i;
88843#endif /* FREECIV_JSON_CONNECTION */
88844
88845 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
88846 }
88847
88848#ifdef FREECIV_JSON_CONNECTION
88849 /* Exit array. */
88850 FC_FREE(field_addr.sub_location);
88851#endif /* FREECIV_JSON_CONNECTION */
88852 }
88853
88854 if (e) {
88855 log_packet_detailed("'output' field error detected");
88856 }
88857 }
88858
88859 *old = *real_packet;
88860
88861#else /* FREECIV_DELTA_PROTOCOL */
88862#ifdef FREECIV_JSON_CONNECTION
88863 field_addr.name = "id";
88864#endif /* FREECIV_JSON_CONNECTION */
88865 e = 0;
88866
88867 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
88868
88869 if (e) {
88870 log_packet_detailed("'id' field error detected");
88871 }
88872
88873#ifdef FREECIV_JSON_CONNECTION
88874 field_addr.name = "output";
88875#endif /* FREECIV_JSON_CONNECTION */
88876 e = 0;
88877
88878 {
88879 int i;
88880
88881#ifdef FREECIV_JSON_CONNECTION
88882 /* Create the array. */
88883 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
88884
88885 /* Enter array. */
88886 field_addr.sub_location = plocation_elem_new(0);
88887#endif /* FREECIV_JSON_CONNECTION */
88888
88889 for (i = 0; i < O_LAST; i++) {
88890#ifdef FREECIV_JSON_CONNECTION
88891 /* Next array element. */
88892 field_addr.sub_location->number = i;
88893#endif /* FREECIV_JSON_CONNECTION */
88894
88895 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
88896 }
88897
88898#ifdef FREECIV_JSON_CONNECTION
88899 /* Exit array. */
88900 FC_FREE(field_addr.sub_location);
88901#endif /* FREECIV_JSON_CONNECTION */
88902 }
88903
88904 if (e) {
88905 log_packet_detailed("'output' field error detected");
88906 }
88907#endif /* FREECIV_DELTA_PROTOCOL */
88908
88910}
88911
88913{
88914 if (!pc->used) {
88915 log_error("WARNING: trying to send data to the closed connection %s",
88917 return -1;
88918 }
88919 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet != nullptr, -1,
88920 "Handler for PACKET_RULESET_RESOURCE not installed");
88921 return pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet(pc, packet);
88922}
88923
88925{
88926 conn_list_iterate(dest, pconn) {
88929}
88930
88931static inline void init_packet_scenario_info(struct packet_scenario_info *packet)
88932{
88933 memset(packet, 0, sizeof(*packet));
88934}
88935
88936#define free_packet_scenario_info(_packet) (void) 0
88937#define destroy_packet_scenario_info free
88938
88939#ifdef FREECIV_DELTA_PROTOCOL
88940#define hash_packet_scenario_info_100 hash_const
88941#define cmp_packet_scenario_info_100 cmp_const
88943#endif /* FREECIV_DELTA_PROTOCOL */
88944
88946{
88947#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_info(_packet)
88949
88950#ifdef FREECIV_JSON_CONNECTION
88951 struct plocation field_addr;
88952 {
88953 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88956 }
88957#endif /* FREECIV_JSON_CONNECTION */
88958
88959 log_packet_detailed("packet_scenario_info_100: got info about ()");
88960
88961#ifdef FREECIV_DELTA_PROTOCOL
88963 struct packet_scenario_info *old;
88964 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_INFO;
88965
88966 if (nullptr == *hash) {
88968 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
88969 }
88970
88971 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88972 *real_packet = *old;
88973 } else {
88974 /* packet is already initialized empty */
88975 log_packet_detailed(" no old info");
88976 }
88977
88978#ifdef FREECIV_JSON_CONNECTION
88979 field_addr.name = "fields";
88980#endif /* FREECIV_JSON_CONNECTION */
88981 DIO_BV_GET(&din, &field_addr, fields);
88982
88983 real_packet->is_scenario = BV_ISSET(fields, 0);
88984
88985 if (BV_ISSET(fields, 1)) {
88986 log_packet_detailed(" got field 'name'");
88987
88988#ifdef FREECIV_JSON_CONNECTION
88989 field_addr.name = "name";
88990#endif /* FREECIV_JSON_CONNECTION */
88991
88992 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
88994 }
88995 }
88996
88997 if (BV_ISSET(fields, 2)) {
88998 log_packet_detailed(" got field 'authors'");
88999
89000#ifdef FREECIV_JSON_CONNECTION
89001 field_addr.name = "authors";
89002#endif /* FREECIV_JSON_CONNECTION */
89003
89004 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
89006 }
89007 }
89008
89009 real_packet->players = BV_ISSET(fields, 3);
89010
89011 real_packet->startpos_nations = BV_ISSET(fields, 4);
89012
89013 real_packet->save_random = BV_ISSET(fields, 5);
89014
89015 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
89016
89017 real_packet->lake_flooding = BV_ISSET(fields, 7);
89018
89019 real_packet->handmade = BV_ISSET(fields, 8);
89020
89021 real_packet->allow_ai_type_fallback = BV_ISSET(fields, 9);
89022
89023 real_packet->ruleset_locked = BV_ISSET(fields, 10);
89024
89025 if (BV_ISSET(fields, 11)) {
89026 log_packet_detailed(" got field 'datafile'");
89027
89028#ifdef FREECIV_JSON_CONNECTION
89029 field_addr.name = "datafile";
89030#endif /* FREECIV_JSON_CONNECTION */
89031
89032 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
89034 }
89035 }
89036
89037 real_packet->have_resources = BV_ISSET(fields, 12);
89038
89039 if (BV_ISSET(fields, 13)) {
89040 log_packet_detailed(" got field 'req_caps'");
89041
89042#ifdef FREECIV_JSON_CONNECTION
89043 field_addr.name = "req_caps";
89044#endif /* FREECIV_JSON_CONNECTION */
89045
89046 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
89048 }
89049 }
89050
89051 if (nullptr == old) {
89052 old = fc_malloc(sizeof(*old));
89054 *old = *real_packet;
89056 } else {
89057 *old = *real_packet;
89058 }
89059
89060#else /* FREECIV_DELTA_PROTOCOL */
89061#ifdef FREECIV_JSON_CONNECTION
89062 field_addr.name = "is_scenario";
89063#endif /* FREECIV_JSON_CONNECTION */
89064
89065 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_scenario)) {
89066 RECEIVE_PACKET_FIELD_ERROR(is_scenario);
89067 }
89068
89069#ifdef FREECIV_JSON_CONNECTION
89070 field_addr.name = "name";
89071#endif /* FREECIV_JSON_CONNECTION */
89072
89073 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89075 }
89076
89077#ifdef FREECIV_JSON_CONNECTION
89078 field_addr.name = "authors";
89079#endif /* FREECIV_JSON_CONNECTION */
89080
89081 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
89083 }
89084
89085#ifdef FREECIV_JSON_CONNECTION
89086 field_addr.name = "players";
89087#endif /* FREECIV_JSON_CONNECTION */
89088
89089 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->players)) {
89091 }
89092
89093#ifdef FREECIV_JSON_CONNECTION
89094 field_addr.name = "startpos_nations";
89095#endif /* FREECIV_JSON_CONNECTION */
89096
89097 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
89098 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
89099 }
89100
89101#ifdef FREECIV_JSON_CONNECTION
89102 field_addr.name = "save_random";
89103#endif /* FREECIV_JSON_CONNECTION */
89104
89105 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->save_random)) {
89106 RECEIVE_PACKET_FIELD_ERROR(save_random);
89107 }
89108
89109#ifdef FREECIV_JSON_CONNECTION
89110 field_addr.name = "prevent_new_cities";
89111#endif /* FREECIV_JSON_CONNECTION */
89112
89113 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
89114 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
89115 }
89116
89117#ifdef FREECIV_JSON_CONNECTION
89118 field_addr.name = "lake_flooding";
89119#endif /* FREECIV_JSON_CONNECTION */
89120
89121 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
89122 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
89123 }
89124
89125#ifdef FREECIV_JSON_CONNECTION
89126 field_addr.name = "handmade";
89127#endif /* FREECIV_JSON_CONNECTION */
89128
89129 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->handmade)) {
89131 }
89132
89133#ifdef FREECIV_JSON_CONNECTION
89134 field_addr.name = "allow_ai_type_fallback";
89135#endif /* FREECIV_JSON_CONNECTION */
89136
89137 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->allow_ai_type_fallback)) {
89138 RECEIVE_PACKET_FIELD_ERROR(allow_ai_type_fallback);
89139 }
89140
89141#ifdef FREECIV_JSON_CONNECTION
89142 field_addr.name = "ruleset_locked";
89143#endif /* FREECIV_JSON_CONNECTION */
89144
89145 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
89146 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
89147 }
89148
89149#ifdef FREECIV_JSON_CONNECTION
89150 field_addr.name = "datafile";
89151#endif /* FREECIV_JSON_CONNECTION */
89152
89153 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
89155 }
89156
89157#ifdef FREECIV_JSON_CONNECTION
89158 field_addr.name = "have_resources";
89159#endif /* FREECIV_JSON_CONNECTION */
89160
89161 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->have_resources)) {
89162 RECEIVE_PACKET_FIELD_ERROR(have_resources);
89163 }
89164
89165#ifdef FREECIV_JSON_CONNECTION
89166 field_addr.name = "req_caps";
89167#endif /* FREECIV_JSON_CONNECTION */
89168
89169 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
89171 }
89172#endif /* FREECIV_DELTA_PROTOCOL */
89173
89175#undef FREE_PACKET_STRUCT
89176}
89177
89178static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
89179{
89180 const struct packet_scenario_info *real_packet = packet;
89181 int e;
89183
89184 log_packet_detailed("packet_scenario_info_100: sending info about ()");
89185
89186#ifdef FREECIV_DELTA_PROTOCOL
89188 struct packet_scenario_info *old;
89189 bool differ;
89190 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_INFO;
89191
89192 if (nullptr == *hash) {
89194 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
89195 }
89196 BV_CLR_ALL(fields);
89197
89198 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89199 old = fc_malloc(sizeof(*old));
89200 /* temporary bitcopy just to insert correctly */
89201 *old = *real_packet;
89204 }
89205
89206 /* folded into head */
89207 if (real_packet->is_scenario) {
89208 BV_SET(fields, 0);
89209 }
89210
89211 differ = (strcmp(old->name, real_packet->name) != 0);
89212 if (differ) {
89213 BV_SET(fields, 1);
89214 }
89215
89216 differ = (strcmp(old->authors, real_packet->authors) != 0);
89217 if (differ) {
89218 BV_SET(fields, 2);
89219 }
89220
89221 /* folded into head */
89222 if (real_packet->players) {
89223 BV_SET(fields, 3);
89224 }
89225
89226 /* folded into head */
89227 if (real_packet->startpos_nations) {
89228 BV_SET(fields, 4);
89229 }
89230
89231 /* folded into head */
89232 if (real_packet->save_random) {
89233 BV_SET(fields, 5);
89234 }
89235
89236 /* folded into head */
89237 if (real_packet->prevent_new_cities) {
89238 BV_SET(fields, 6);
89239 }
89240
89241 /* folded into head */
89242 if (real_packet->lake_flooding) {
89243 BV_SET(fields, 7);
89244 }
89245
89246 /* folded into head */
89247 if (real_packet->handmade) {
89248 BV_SET(fields, 8);
89249 }
89250
89251 /* folded into head */
89252 if (real_packet->allow_ai_type_fallback) {
89253 BV_SET(fields, 9);
89254 }
89255
89256 /* folded into head */
89257 if (real_packet->ruleset_locked) {
89258 BV_SET(fields, 10);
89259 }
89260
89261 differ = (strcmp(old->datafile, real_packet->datafile) != 0);
89262 if (differ) {
89263 BV_SET(fields, 11);
89264 }
89265
89266 /* folded into head */
89267 if (real_packet->have_resources) {
89268 BV_SET(fields, 12);
89269 }
89270
89271 differ = (strcmp(old->req_caps, real_packet->req_caps) != 0);
89272 if (differ) {
89273 BV_SET(fields, 13);
89274 }
89275#endif /* FREECIV_DELTA_PROTOCOL */
89276
89277#ifdef FREECIV_JSON_CONNECTION
89278 struct plocation field_addr;
89279 {
89280 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89283 }
89284#endif /* FREECIV_JSON_CONNECTION */
89285
89286#ifdef FREECIV_DELTA_PROTOCOL
89287#ifdef FREECIV_JSON_CONNECTION
89288 field_addr.name = "fields";
89289#endif /* FREECIV_JSON_CONNECTION */
89290 e = 0;
89291 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89292 if (e) {
89293 log_packet_detailed("fields bitvector error detected");
89294 }
89295
89296 /* field 0 is folded into the header */
89297
89298 if (BV_ISSET(fields, 1)) {
89299 log_packet_detailed(" field 'name' has changed");
89300
89301#ifdef FREECIV_JSON_CONNECTION
89302 field_addr.name = "name";
89303#endif /* FREECIV_JSON_CONNECTION */
89304 e = 0;
89305
89306 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89307
89308 if (e) {
89309 log_packet_detailed("'name' field error detected");
89310 }
89311 }
89312
89313 if (BV_ISSET(fields, 2)) {
89314 log_packet_detailed(" field 'authors' has changed");
89315
89316#ifdef FREECIV_JSON_CONNECTION
89317 field_addr.name = "authors";
89318#endif /* FREECIV_JSON_CONNECTION */
89319 e = 0;
89320
89321 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
89322
89323 if (e) {
89324 log_packet_detailed("'authors' field error detected");
89325 }
89326 }
89327
89328 /* field 3 is folded into the header */
89329
89330 /* field 4 is folded into the header */
89331
89332 /* field 5 is folded into the header */
89333
89334 /* field 6 is folded into the header */
89335
89336 /* field 7 is folded into the header */
89337
89338 /* field 8 is folded into the header */
89339
89340 /* field 9 is folded into the header */
89341
89342 /* field 10 is folded into the header */
89343
89344 if (BV_ISSET(fields, 11)) {
89345 log_packet_detailed(" field 'datafile' has changed");
89346
89347#ifdef FREECIV_JSON_CONNECTION
89348 field_addr.name = "datafile";
89349#endif /* FREECIV_JSON_CONNECTION */
89350 e = 0;
89351
89352 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
89353
89354 if (e) {
89355 log_packet_detailed("'datafile' field error detected");
89356 }
89357 }
89358
89359 /* field 12 is folded into the header */
89360
89361 if (BV_ISSET(fields, 13)) {
89362 log_packet_detailed(" field 'req_caps' has changed");
89363
89364#ifdef FREECIV_JSON_CONNECTION
89365 field_addr.name = "req_caps";
89366#endif /* FREECIV_JSON_CONNECTION */
89367 e = 0;
89368
89369 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
89370
89371 if (e) {
89372 log_packet_detailed("'req_caps' field error detected");
89373 }
89374 }
89375
89376 *old = *real_packet;
89377
89378#else /* FREECIV_DELTA_PROTOCOL */
89379#ifdef FREECIV_JSON_CONNECTION
89380 field_addr.name = "is_scenario";
89381#endif /* FREECIV_JSON_CONNECTION */
89382 e = 0;
89383
89384 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_scenario);
89385
89386 if (e) {
89387 log_packet_detailed("'is_scenario' field error detected");
89388 }
89389
89390#ifdef FREECIV_JSON_CONNECTION
89391 field_addr.name = "name";
89392#endif /* FREECIV_JSON_CONNECTION */
89393 e = 0;
89394
89395 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89396
89397 if (e) {
89398 log_packet_detailed("'name' field error detected");
89399 }
89400
89401#ifdef FREECIV_JSON_CONNECTION
89402 field_addr.name = "authors";
89403#endif /* FREECIV_JSON_CONNECTION */
89404 e = 0;
89405
89406 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
89407
89408 if (e) {
89409 log_packet_detailed("'authors' field error detected");
89410 }
89411
89412#ifdef FREECIV_JSON_CONNECTION
89413 field_addr.name = "players";
89414#endif /* FREECIV_JSON_CONNECTION */
89415 e = 0;
89416
89417 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->players);
89418
89419 if (e) {
89420 log_packet_detailed("'players' field error detected");
89421 }
89422
89423#ifdef FREECIV_JSON_CONNECTION
89424 field_addr.name = "startpos_nations";
89425#endif /* FREECIV_JSON_CONNECTION */
89426 e = 0;
89427
89428 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
89429
89430 if (e) {
89431 log_packet_detailed("'startpos_nations' field error detected");
89432 }
89433
89434#ifdef FREECIV_JSON_CONNECTION
89435 field_addr.name = "save_random";
89436#endif /* FREECIV_JSON_CONNECTION */
89437 e = 0;
89438
89439 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->save_random);
89440
89441 if (e) {
89442 log_packet_detailed("'save_random' field error detected");
89443 }
89444
89445#ifdef FREECIV_JSON_CONNECTION
89446 field_addr.name = "prevent_new_cities";
89447#endif /* FREECIV_JSON_CONNECTION */
89448 e = 0;
89449
89450 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
89451
89452 if (e) {
89453 log_packet_detailed("'prevent_new_cities' field error detected");
89454 }
89455
89456#ifdef FREECIV_JSON_CONNECTION
89457 field_addr.name = "lake_flooding";
89458#endif /* FREECIV_JSON_CONNECTION */
89459 e = 0;
89460
89461 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
89462
89463 if (e) {
89464 log_packet_detailed("'lake_flooding' field error detected");
89465 }
89466
89467#ifdef FREECIV_JSON_CONNECTION
89468 field_addr.name = "handmade";
89469#endif /* FREECIV_JSON_CONNECTION */
89470 e = 0;
89471
89472 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->handmade);
89473
89474 if (e) {
89475 log_packet_detailed("'handmade' field error detected");
89476 }
89477
89478#ifdef FREECIV_JSON_CONNECTION
89479 field_addr.name = "allow_ai_type_fallback";
89480#endif /* FREECIV_JSON_CONNECTION */
89481 e = 0;
89482
89483 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->allow_ai_type_fallback);
89484
89485 if (e) {
89486 log_packet_detailed("'allow_ai_type_fallback' field error detected");
89487 }
89488
89489#ifdef FREECIV_JSON_CONNECTION
89490 field_addr.name = "ruleset_locked";
89491#endif /* FREECIV_JSON_CONNECTION */
89492 e = 0;
89493
89494 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
89495
89496 if (e) {
89497 log_packet_detailed("'ruleset_locked' field error detected");
89498 }
89499
89500#ifdef FREECIV_JSON_CONNECTION
89501 field_addr.name = "datafile";
89502#endif /* FREECIV_JSON_CONNECTION */
89503 e = 0;
89504
89505 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
89506
89507 if (e) {
89508 log_packet_detailed("'datafile' field error detected");
89509 }
89510
89511#ifdef FREECIV_JSON_CONNECTION
89512 field_addr.name = "have_resources";
89513#endif /* FREECIV_JSON_CONNECTION */
89514 e = 0;
89515
89516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->have_resources);
89517
89518 if (e) {
89519 log_packet_detailed("'have_resources' field error detected");
89520 }
89521
89522#ifdef FREECIV_JSON_CONNECTION
89523 field_addr.name = "req_caps";
89524#endif /* FREECIV_JSON_CONNECTION */
89525 e = 0;
89526
89527 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
89528
89529 if (e) {
89530 log_packet_detailed("'req_caps' field error detected");
89531 }
89532#endif /* FREECIV_DELTA_PROTOCOL */
89533
89535}
89536
89538{
89539 if (!pc->used) {
89540 log_error("WARNING: trying to send data to the closed connection %s",
89542 return -1;
89543 }
89544 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet != nullptr, -1,
89545 "Handler for PACKET_SCENARIO_INFO not installed");
89546 return pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet(pc, packet);
89547}
89548
89550{
89551 memset(packet, 0, sizeof(*packet));
89552}
89553
89554#define free_packet_scenario_description(_packet) (void) 0
89555#define destroy_packet_scenario_description free
89556
89557#ifdef FREECIV_DELTA_PROTOCOL
89558#define hash_packet_scenario_description_100 hash_const
89559#define cmp_packet_scenario_description_100 cmp_const
89561#endif /* FREECIV_DELTA_PROTOCOL */
89562
89564{
89565#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_description(_packet)
89567
89568#ifdef FREECIV_JSON_CONNECTION
89569 struct plocation field_addr;
89570 {
89571 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89574 }
89575#endif /* FREECIV_JSON_CONNECTION */
89576
89577 log_packet_detailed("packet_scenario_description_100: got info about ()");
89578
89579#ifdef FREECIV_DELTA_PROTOCOL
89582 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_DESCRIPTION;
89583
89584 if (nullptr == *hash) {
89586 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
89587 }
89588
89589 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89590 *real_packet = *old;
89591 } else {
89592 /* packet is already initialized empty */
89593 log_packet_detailed(" no old info");
89594 }
89595
89596#ifdef FREECIV_JSON_CONNECTION
89597 field_addr.name = "fields";
89598#endif /* FREECIV_JSON_CONNECTION */
89599 DIO_BV_GET(&din, &field_addr, fields);
89600
89601 if (BV_ISSET(fields, 0)) {
89602 log_packet_detailed(" got field 'description'");
89603
89604#ifdef FREECIV_JSON_CONNECTION
89605 field_addr.name = "description";
89606#endif /* FREECIV_JSON_CONNECTION */
89607
89608 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
89609 RECEIVE_PACKET_FIELD_ERROR(description);
89610 }
89611 }
89612
89613 if (nullptr == old) {
89614 old = fc_malloc(sizeof(*old));
89616 *old = *real_packet;
89618 } else {
89619 *old = *real_packet;
89620 }
89621
89622#else /* FREECIV_DELTA_PROTOCOL */
89623#ifdef FREECIV_JSON_CONNECTION
89624 field_addr.name = "description";
89625#endif /* FREECIV_JSON_CONNECTION */
89626
89627 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
89628 RECEIVE_PACKET_FIELD_ERROR(description);
89629 }
89630#endif /* FREECIV_DELTA_PROTOCOL */
89631
89633#undef FREE_PACKET_STRUCT
89634}
89635
89637{
89638 const struct packet_scenario_description *real_packet = packet;
89639 int e;
89641
89642 log_packet_detailed("packet_scenario_description_100: sending info about ()");
89643
89644#ifdef FREECIV_DELTA_PROTOCOL
89647 bool differ;
89648 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_DESCRIPTION;
89649
89650 if (nullptr == *hash) {
89652 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
89653 }
89654 BV_CLR_ALL(fields);
89655
89656 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89657 old = fc_malloc(sizeof(*old));
89658 /* temporary bitcopy just to insert correctly */
89659 *old = *real_packet;
89662 }
89663
89664 differ = (strcmp(old->description, real_packet->description) != 0);
89665 if (differ) {
89666 BV_SET(fields, 0);
89667 }
89668#endif /* FREECIV_DELTA_PROTOCOL */
89669
89670#ifdef FREECIV_JSON_CONNECTION
89671 struct plocation field_addr;
89672 {
89673 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89676 }
89677#endif /* FREECIV_JSON_CONNECTION */
89678
89679#ifdef FREECIV_DELTA_PROTOCOL
89680#ifdef FREECIV_JSON_CONNECTION
89681 field_addr.name = "fields";
89682#endif /* FREECIV_JSON_CONNECTION */
89683 e = 0;
89684 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89685 if (e) {
89686 log_packet_detailed("fields bitvector error detected");
89687 }
89688
89689 if (BV_ISSET(fields, 0)) {
89690 log_packet_detailed(" field 'description' has changed");
89691
89692#ifdef FREECIV_JSON_CONNECTION
89693 field_addr.name = "description";
89694#endif /* FREECIV_JSON_CONNECTION */
89695 e = 0;
89696
89697 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
89698
89699 if (e) {
89700 log_packet_detailed("'description' field error detected");
89701 }
89702 }
89703
89704 *old = *real_packet;
89705
89706#else /* FREECIV_DELTA_PROTOCOL */
89707#ifdef FREECIV_JSON_CONNECTION
89708 field_addr.name = "description";
89709#endif /* FREECIV_JSON_CONNECTION */
89710 e = 0;
89711
89712 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
89713
89714 if (e) {
89715 log_packet_detailed("'description' field error detected");
89716 }
89717#endif /* FREECIV_DELTA_PROTOCOL */
89718
89720}
89721
89723{
89724 if (!pc->used) {
89725 log_error("WARNING: trying to send data to the closed connection %s",
89727 return -1;
89728 }
89729 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet != nullptr, -1,
89730 "Handler for PACKET_SCENARIO_DESCRIPTION not installed");
89731 return pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet(pc, packet);
89732}
89733
89734static inline void init_packet_save_scenario(struct packet_save_scenario *packet)
89735{
89736 memset(packet, 0, sizeof(*packet));
89737}
89738
89739#define free_packet_save_scenario(_packet) (void) 0
89740#define destroy_packet_save_scenario free
89741
89742#ifdef FREECIV_DELTA_PROTOCOL
89743#define hash_packet_save_scenario_100 hash_const
89744#define cmp_packet_save_scenario_100 cmp_const
89746#endif /* FREECIV_DELTA_PROTOCOL */
89747
89749{
89750#define FREE_PACKET_STRUCT(_packet) free_packet_save_scenario(_packet)
89752
89753#ifdef FREECIV_JSON_CONNECTION
89754 struct plocation field_addr;
89755 {
89756 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89759 }
89760#endif /* FREECIV_JSON_CONNECTION */
89761
89762 log_packet_detailed("packet_save_scenario_100: got info about ()");
89763
89764#ifdef FREECIV_DELTA_PROTOCOL
89766 struct packet_save_scenario *old;
89767 struct genhash **hash = pc->phs.received + PACKET_SAVE_SCENARIO;
89768
89769 if (nullptr == *hash) {
89771 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
89772 }
89773
89774 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89775 *real_packet = *old;
89776 } else {
89777 /* packet is already initialized empty */
89778 log_packet_detailed(" no old info");
89779 }
89780
89781#ifdef FREECIV_JSON_CONNECTION
89782 field_addr.name = "fields";
89783#endif /* FREECIV_JSON_CONNECTION */
89784 DIO_BV_GET(&din, &field_addr, fields);
89785
89786 if (BV_ISSET(fields, 0)) {
89787 log_packet_detailed(" got field 'name'");
89788
89789#ifdef FREECIV_JSON_CONNECTION
89790 field_addr.name = "name";
89791#endif /* FREECIV_JSON_CONNECTION */
89792
89793 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89795 }
89796 }
89797
89798 if (nullptr == old) {
89799 old = fc_malloc(sizeof(*old));
89801 *old = *real_packet;
89803 } else {
89804 *old = *real_packet;
89805 }
89806
89807#else /* FREECIV_DELTA_PROTOCOL */
89808#ifdef FREECIV_JSON_CONNECTION
89809 field_addr.name = "name";
89810#endif /* FREECIV_JSON_CONNECTION */
89811
89812 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89814 }
89815#endif /* FREECIV_DELTA_PROTOCOL */
89816
89818#undef FREE_PACKET_STRUCT
89819}
89820
89821static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
89822{
89823 const struct packet_save_scenario *real_packet = packet;
89824 int e;
89826
89827 log_packet_detailed("packet_save_scenario_100: sending info about ()");
89828
89829#ifdef FREECIV_DELTA_PROTOCOL
89831 struct packet_save_scenario *old;
89832 bool differ;
89833 struct genhash **hash = pc->phs.sent + PACKET_SAVE_SCENARIO;
89834
89835 if (nullptr == *hash) {
89837 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
89838 }
89839 BV_CLR_ALL(fields);
89840
89841 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89842 old = fc_malloc(sizeof(*old));
89843 /* temporary bitcopy just to insert correctly */
89844 *old = *real_packet;
89847 }
89848
89849 differ = (strcmp(old->name, real_packet->name) != 0);
89850 if (differ) {
89851 BV_SET(fields, 0);
89852 }
89853#endif /* FREECIV_DELTA_PROTOCOL */
89854
89855#ifdef FREECIV_JSON_CONNECTION
89856 struct plocation field_addr;
89857 {
89858 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89861 }
89862#endif /* FREECIV_JSON_CONNECTION */
89863
89864#ifdef FREECIV_DELTA_PROTOCOL
89865#ifdef FREECIV_JSON_CONNECTION
89866 field_addr.name = "fields";
89867#endif /* FREECIV_JSON_CONNECTION */
89868 e = 0;
89869 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89870 if (e) {
89871 log_packet_detailed("fields bitvector error detected");
89872 }
89873
89874 if (BV_ISSET(fields, 0)) {
89875 log_packet_detailed(" field 'name' has changed");
89876
89877#ifdef FREECIV_JSON_CONNECTION
89878 field_addr.name = "name";
89879#endif /* FREECIV_JSON_CONNECTION */
89880 e = 0;
89881
89882 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89883
89884 if (e) {
89885 log_packet_detailed("'name' field error detected");
89886 }
89887 }
89888
89889 *old = *real_packet;
89890
89891#else /* FREECIV_DELTA_PROTOCOL */
89892#ifdef FREECIV_JSON_CONNECTION
89893 field_addr.name = "name";
89894#endif /* FREECIV_JSON_CONNECTION */
89895 e = 0;
89896
89897 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89898
89899 if (e) {
89900 log_packet_detailed("'name' field error detected");
89901 }
89902#endif /* FREECIV_DELTA_PROTOCOL */
89903
89905}
89906
89908{
89909 if (!pc->used) {
89910 log_error("WARNING: trying to send data to the closed connection %s",
89912 return -1;
89913 }
89914 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet != nullptr, -1,
89915 "Handler for PACKET_SAVE_SCENARIO not installed");
89916 return pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet(pc, packet);
89917}
89918
89920{
89921 struct packet_save_scenario packet, *real_packet = &packet;
89922
89923 sz_strlcpy(real_packet->name, name);
89924
89926}
89927
89928static inline void init_packet_vote_new(struct packet_vote_new *packet)
89929{
89930 memset(packet, 0, sizeof(*packet));
89931}
89932
89933#define free_packet_vote_new(_packet) (void) 0
89934#define destroy_packet_vote_new free
89935
89936#ifdef FREECIV_DELTA_PROTOCOL
89937#define hash_packet_vote_new_100 hash_const
89938#define cmp_packet_vote_new_100 cmp_const
89940#endif /* FREECIV_DELTA_PROTOCOL */
89941
89943{
89944#define FREE_PACKET_STRUCT(_packet) free_packet_vote_new(_packet)
89946
89947#ifdef FREECIV_JSON_CONNECTION
89948 struct plocation field_addr;
89949 {
89950 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89953 }
89954#endif /* FREECIV_JSON_CONNECTION */
89955
89956 log_packet_detailed("packet_vote_new_100: got info about ()");
89957
89958#ifdef FREECIV_DELTA_PROTOCOL
89960 struct packet_vote_new *old;
89961 struct genhash **hash = pc->phs.received + PACKET_VOTE_NEW;
89962
89963 if (nullptr == *hash) {
89965 nullptr, nullptr, nullptr, destroy_packet_vote_new);
89966 }
89967
89968 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89969 *real_packet = *old;
89970 } else {
89971 /* packet is already initialized empty */
89972 log_packet_detailed(" no old info");
89973 }
89974
89975#ifdef FREECIV_JSON_CONNECTION
89976 field_addr.name = "fields";
89977#endif /* FREECIV_JSON_CONNECTION */
89978 DIO_BV_GET(&din, &field_addr, fields);
89979
89980 if (BV_ISSET(fields, 0)) {
89981 log_packet_detailed(" got field 'vote_no'");
89982
89983#ifdef FREECIV_JSON_CONNECTION
89984 field_addr.name = "vote_no";
89985#endif /* FREECIV_JSON_CONNECTION */
89986
89987 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
89989 }
89990 }
89991
89992 if (BV_ISSET(fields, 1)) {
89993 log_packet_detailed(" got field 'user'");
89994
89995#ifdef FREECIV_JSON_CONNECTION
89996 field_addr.name = "user";
89997#endif /* FREECIV_JSON_CONNECTION */
89998
89999 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90001 }
90002 }
90003
90004 if (BV_ISSET(fields, 2)) {
90005 log_packet_detailed(" got field 'desc'");
90006
90007#ifdef FREECIV_JSON_CONNECTION
90008 field_addr.name = "desc";
90009#endif /* FREECIV_JSON_CONNECTION */
90010
90011 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90013 }
90014 }
90015
90016 if (BV_ISSET(fields, 3)) {
90017 log_packet_detailed(" got field 'percent_required'");
90018
90019#ifdef FREECIV_JSON_CONNECTION
90020 field_addr.name = "percent_required";
90021#endif /* FREECIV_JSON_CONNECTION */
90022
90023 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
90024 RECEIVE_PACKET_FIELD_ERROR(percent_required);
90025 }
90026 }
90027
90028 if (BV_ISSET(fields, 4)) {
90029 log_packet_detailed(" got field 'flags'");
90030
90031#ifdef FREECIV_JSON_CONNECTION
90032 field_addr.name = "flags";
90033#endif /* FREECIV_JSON_CONNECTION */
90034
90035 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
90037 }
90038 }
90039
90040 if (nullptr == old) {
90041 old = fc_malloc(sizeof(*old));
90043 *old = *real_packet;
90045 } else {
90046 *old = *real_packet;
90047 }
90048
90049#else /* FREECIV_DELTA_PROTOCOL */
90050#ifdef FREECIV_JSON_CONNECTION
90051 field_addr.name = "vote_no";
90052#endif /* FREECIV_JSON_CONNECTION */
90053
90054 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90056 }
90057
90058#ifdef FREECIV_JSON_CONNECTION
90059 field_addr.name = "user";
90060#endif /* FREECIV_JSON_CONNECTION */
90061
90062 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90064 }
90065
90066#ifdef FREECIV_JSON_CONNECTION
90067 field_addr.name = "desc";
90068#endif /* FREECIV_JSON_CONNECTION */
90069
90070 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90072 }
90073
90074#ifdef FREECIV_JSON_CONNECTION
90075 field_addr.name = "percent_required";
90076#endif /* FREECIV_JSON_CONNECTION */
90077
90078 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
90079 RECEIVE_PACKET_FIELD_ERROR(percent_required);
90080 }
90081
90082#ifdef FREECIV_JSON_CONNECTION
90083 field_addr.name = "flags";
90084#endif /* FREECIV_JSON_CONNECTION */
90085
90086 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
90088 }
90089#endif /* FREECIV_DELTA_PROTOCOL */
90090
90092#undef FREE_PACKET_STRUCT
90093}
90094
90095static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
90096{
90097 const struct packet_vote_new *real_packet = packet;
90098 int e;
90100
90101 log_packet_detailed("packet_vote_new_100: sending info about ()");
90102
90103#ifdef FREECIV_DELTA_PROTOCOL
90105 struct packet_vote_new *old;
90106 bool differ;
90107 struct genhash **hash = pc->phs.sent + PACKET_VOTE_NEW;
90108
90109 if (nullptr == *hash) {
90111 nullptr, nullptr, nullptr, destroy_packet_vote_new);
90112 }
90113 BV_CLR_ALL(fields);
90114
90115 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90116 old = fc_malloc(sizeof(*old));
90117 /* temporary bitcopy just to insert correctly */
90118 *old = *real_packet;
90121 }
90122
90123 differ = (old->vote_no != real_packet->vote_no);
90124 if (differ) {
90125 BV_SET(fields, 0);
90126 }
90127
90128 differ = (strcmp(old->user, real_packet->user) != 0);
90129 if (differ) {
90130 BV_SET(fields, 1);
90131 }
90132
90133 differ = (strcmp(old->desc, real_packet->desc) != 0);
90134 if (differ) {
90135 BV_SET(fields, 2);
90136 }
90137
90138 differ = (old->percent_required != real_packet->percent_required);
90139 if (differ) {
90140 BV_SET(fields, 3);
90141 }
90142
90143 differ = (old->flags != real_packet->flags);
90144 if (differ) {
90145 BV_SET(fields, 4);
90146 }
90147#endif /* FREECIV_DELTA_PROTOCOL */
90148
90149#ifdef FREECIV_JSON_CONNECTION
90150 struct plocation field_addr;
90151 {
90152 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90155 }
90156#endif /* FREECIV_JSON_CONNECTION */
90157
90158#ifdef FREECIV_DELTA_PROTOCOL
90159#ifdef FREECIV_JSON_CONNECTION
90160 field_addr.name = "fields";
90161#endif /* FREECIV_JSON_CONNECTION */
90162 e = 0;
90163 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90164 if (e) {
90165 log_packet_detailed("fields bitvector error detected");
90166 }
90167
90168 if (BV_ISSET(fields, 0)) {
90169 log_packet_detailed(" field 'vote_no' has changed");
90170
90171#ifdef FREECIV_JSON_CONNECTION
90172 field_addr.name = "vote_no";
90173#endif /* FREECIV_JSON_CONNECTION */
90174 e = 0;
90175
90176 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90177
90178 if (e) {
90179 log_packet_detailed("'vote_no' field error detected");
90180 }
90181 }
90182
90183 if (BV_ISSET(fields, 1)) {
90184 log_packet_detailed(" field 'user' has changed");
90185
90186#ifdef FREECIV_JSON_CONNECTION
90187 field_addr.name = "user";
90188#endif /* FREECIV_JSON_CONNECTION */
90189 e = 0;
90190
90191 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
90192
90193 if (e) {
90194 log_packet_detailed("'user' field error detected");
90195 }
90196 }
90197
90198 if (BV_ISSET(fields, 2)) {
90199 log_packet_detailed(" field 'desc' has changed");
90200
90201#ifdef FREECIV_JSON_CONNECTION
90202 field_addr.name = "desc";
90203#endif /* FREECIV_JSON_CONNECTION */
90204 e = 0;
90205
90206 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
90207
90208 if (e) {
90209 log_packet_detailed("'desc' field error detected");
90210 }
90211 }
90212
90213 if (BV_ISSET(fields, 3)) {
90214 log_packet_detailed(" field 'percent_required' has changed");
90215
90216#ifdef FREECIV_JSON_CONNECTION
90217 field_addr.name = "percent_required";
90218#endif /* FREECIV_JSON_CONNECTION */
90219 e = 0;
90220
90221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
90222
90223 if (e) {
90224 log_packet_detailed("'percent_required' field error detected");
90225 }
90226 }
90227
90228 if (BV_ISSET(fields, 4)) {
90229 log_packet_detailed(" field 'flags' has changed");
90230
90231#ifdef FREECIV_JSON_CONNECTION
90232 field_addr.name = "flags";
90233#endif /* FREECIV_JSON_CONNECTION */
90234 e = 0;
90235
90236 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
90237
90238 if (e) {
90239 log_packet_detailed("'flags' field error detected");
90240 }
90241 }
90242
90243 *old = *real_packet;
90244
90245#else /* FREECIV_DELTA_PROTOCOL */
90246#ifdef FREECIV_JSON_CONNECTION
90247 field_addr.name = "vote_no";
90248#endif /* FREECIV_JSON_CONNECTION */
90249 e = 0;
90250
90251 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90252
90253 if (e) {
90254 log_packet_detailed("'vote_no' field error detected");
90255 }
90256
90257#ifdef FREECIV_JSON_CONNECTION
90258 field_addr.name = "user";
90259#endif /* FREECIV_JSON_CONNECTION */
90260 e = 0;
90261
90262 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
90263
90264 if (e) {
90265 log_packet_detailed("'user' field error detected");
90266 }
90267
90268#ifdef FREECIV_JSON_CONNECTION
90269 field_addr.name = "desc";
90270#endif /* FREECIV_JSON_CONNECTION */
90271 e = 0;
90272
90273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
90274
90275 if (e) {
90276 log_packet_detailed("'desc' field error detected");
90277 }
90278
90279#ifdef FREECIV_JSON_CONNECTION
90280 field_addr.name = "percent_required";
90281#endif /* FREECIV_JSON_CONNECTION */
90282 e = 0;
90283
90284 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
90285
90286 if (e) {
90287 log_packet_detailed("'percent_required' field error detected");
90288 }
90289
90290#ifdef FREECIV_JSON_CONNECTION
90291 field_addr.name = "flags";
90292#endif /* FREECIV_JSON_CONNECTION */
90293 e = 0;
90294
90295 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
90296
90297 if (e) {
90298 log_packet_detailed("'flags' field error detected");
90299 }
90300#endif /* FREECIV_DELTA_PROTOCOL */
90301
90303}
90304
90305int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
90306{
90307 if (!pc->used) {
90308 log_error("WARNING: trying to send data to the closed connection %s",
90310 return -1;
90311 }
90312 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_NEW].packet != nullptr, -1,
90313 "Handler for PACKET_VOTE_NEW not installed");
90314 return pc->phs.handlers->send[PACKET_VOTE_NEW].packet(pc, packet);
90315}
90316
90317static inline void init_packet_vote_update(struct packet_vote_update *packet)
90318{
90319 memset(packet, 0, sizeof(*packet));
90320}
90321
90322#define free_packet_vote_update(_packet) (void) 0
90323#define destroy_packet_vote_update free
90324
90325#ifdef FREECIV_DELTA_PROTOCOL
90327{
90328 const struct packet_vote_update *key = (const struct packet_vote_update *) vkey;
90329 genhash_val_t result = 0;
90330
90331 result += key->vote_no;
90332
90333 result &= 0xFFFFFFFF;
90334 return result;
90335}
90336
90337static bool cmp_packet_vote_update_100(const void *vkey1, const void *vkey2)
90338{
90339 const struct packet_vote_update *old = (const struct packet_vote_update *) vkey1;
90340 const struct packet_vote_update *real_packet = (const struct packet_vote_update *) vkey2;
90341 bool differ;
90342
90343 differ = (old->vote_no != real_packet->vote_no);
90344
90345 return !differ;
90346}
90348#endif /* FREECIV_DELTA_PROTOCOL */
90349
90351{
90352#define FREE_PACKET_STRUCT(_packet) free_packet_vote_update(_packet)
90354
90355#ifdef FREECIV_JSON_CONNECTION
90356 struct plocation field_addr;
90357 {
90358 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90361 }
90362#endif /* FREECIV_JSON_CONNECTION */
90363
90364#ifdef FREECIV_JSON_CONNECTION
90365 field_addr.name = "vote_no";
90366#endif /* FREECIV_JSON_CONNECTION */
90367
90368 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90370 }
90371
90372 log_packet_detailed("packet_vote_update_100: got info about (%d)",
90373 real_packet->vote_no);
90374
90375#ifdef FREECIV_DELTA_PROTOCOL
90377 struct packet_vote_update *old;
90378 struct genhash **hash = pc->phs.received + PACKET_VOTE_UPDATE;
90379
90380 if (nullptr == *hash) {
90382 nullptr, nullptr, nullptr, destroy_packet_vote_update);
90383 }
90384
90385 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90386 *real_packet = *old;
90387 } else {
90388 /* packet is already initialized empty */
90389 log_packet_detailed(" no old info");
90390 }
90391
90392#ifdef FREECIV_JSON_CONNECTION
90393 field_addr.name = "fields";
90394#endif /* FREECIV_JSON_CONNECTION */
90395 DIO_BV_GET(&din, &field_addr, fields);
90396
90397 if (BV_ISSET(fields, 0)) {
90398 log_packet_detailed(" got field 'yes'");
90399
90400#ifdef FREECIV_JSON_CONNECTION
90401 field_addr.name = "yes";
90402#endif /* FREECIV_JSON_CONNECTION */
90403
90404 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
90406 }
90407 }
90408
90409 if (BV_ISSET(fields, 1)) {
90410 log_packet_detailed(" got field 'no'");
90411
90412#ifdef FREECIV_JSON_CONNECTION
90413 field_addr.name = "no";
90414#endif /* FREECIV_JSON_CONNECTION */
90415
90416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
90418 }
90419 }
90420
90421 if (BV_ISSET(fields, 2)) {
90422 log_packet_detailed(" got field 'abstain'");
90423
90424#ifdef FREECIV_JSON_CONNECTION
90425 field_addr.name = "abstain";
90426#endif /* FREECIV_JSON_CONNECTION */
90427
90428 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
90430 }
90431 }
90432
90433 if (BV_ISSET(fields, 3)) {
90434 log_packet_detailed(" got field 'num_voters'");
90435
90436#ifdef FREECIV_JSON_CONNECTION
90437 field_addr.name = "num_voters";
90438#endif /* FREECIV_JSON_CONNECTION */
90439
90440 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
90441 RECEIVE_PACKET_FIELD_ERROR(num_voters);
90442 }
90443 }
90444
90445 if (nullptr == old) {
90446 old = fc_malloc(sizeof(*old));
90448 *old = *real_packet;
90450 } else {
90451 *old = *real_packet;
90452 }
90453
90454#else /* FREECIV_DELTA_PROTOCOL */
90455#ifdef FREECIV_JSON_CONNECTION
90456 field_addr.name = "yes";
90457#endif /* FREECIV_JSON_CONNECTION */
90458
90459 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
90461 }
90462
90463#ifdef FREECIV_JSON_CONNECTION
90464 field_addr.name = "no";
90465#endif /* FREECIV_JSON_CONNECTION */
90466
90467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
90469 }
90470
90471#ifdef FREECIV_JSON_CONNECTION
90472 field_addr.name = "abstain";
90473#endif /* FREECIV_JSON_CONNECTION */
90474
90475 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
90477 }
90478
90479#ifdef FREECIV_JSON_CONNECTION
90480 field_addr.name = "num_voters";
90481#endif /* FREECIV_JSON_CONNECTION */
90482
90483 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
90484 RECEIVE_PACKET_FIELD_ERROR(num_voters);
90485 }
90486#endif /* FREECIV_DELTA_PROTOCOL */
90487
90489#undef FREE_PACKET_STRUCT
90490}
90491
90492static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
90493{
90494 const struct packet_vote_update *real_packet = packet;
90495 int e;
90497
90498 log_packet_detailed("packet_vote_update_100: sending info about (%d)",
90499 real_packet->vote_no);
90500
90501#ifdef FREECIV_DELTA_PROTOCOL
90503 struct packet_vote_update *old;
90504 bool differ;
90505 int different = 0;
90506 struct genhash **hash = pc->phs.sent + PACKET_VOTE_UPDATE;
90507
90508 if (nullptr == *hash) {
90510 nullptr, nullptr, nullptr, destroy_packet_vote_update);
90511 }
90512 BV_CLR_ALL(fields);
90513
90514 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90515 old = fc_malloc(sizeof(*old));
90516 /* temporary bitcopy just to insert correctly */
90517 *old = *real_packet;
90520 different = 1; /* Force to send. */
90521 }
90522
90523 differ = (old->yes != real_packet->yes);
90524 if (differ) {
90525 different++;
90526 BV_SET(fields, 0);
90527 }
90528
90529 differ = (old->no != real_packet->no);
90530 if (differ) {
90531 different++;
90532 BV_SET(fields, 1);
90533 }
90534
90535 differ = (old->abstain != real_packet->abstain);
90536 if (differ) {
90537 different++;
90538 BV_SET(fields, 2);
90539 }
90540
90541 differ = (old->num_voters != real_packet->num_voters);
90542 if (differ) {
90543 different++;
90544 BV_SET(fields, 3);
90545 }
90546
90547 if (different == 0) {
90548 log_packet_detailed(" no change -> discard");
90550 }
90551#endif /* FREECIV_DELTA_PROTOCOL */
90552
90553#ifdef FREECIV_JSON_CONNECTION
90554 struct plocation field_addr;
90555 {
90556 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90559 }
90560#endif /* FREECIV_JSON_CONNECTION */
90561
90562#ifdef FREECIV_JSON_CONNECTION
90563 field_addr.name = "vote_no";
90564#endif /* FREECIV_JSON_CONNECTION */
90565 e = 0;
90566
90567 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90568
90569 if (e) {
90570 log_packet_detailed("'vote_no' field error detected");
90571 }
90572
90573#ifdef FREECIV_DELTA_PROTOCOL
90574#ifdef FREECIV_JSON_CONNECTION
90575 field_addr.name = "fields";
90576#endif /* FREECIV_JSON_CONNECTION */
90577 e = 0;
90578 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90579 if (e) {
90580 log_packet_detailed("fields bitvector error detected");
90581 }
90582
90583 if (BV_ISSET(fields, 0)) {
90584 log_packet_detailed(" field 'yes' has changed");
90585
90586#ifdef FREECIV_JSON_CONNECTION
90587 field_addr.name = "yes";
90588#endif /* FREECIV_JSON_CONNECTION */
90589 e = 0;
90590
90591 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
90592
90593 if (e) {
90594 log_packet_detailed("'yes' field error detected");
90595 }
90596 }
90597
90598 if (BV_ISSET(fields, 1)) {
90599 log_packet_detailed(" field 'no' has changed");
90600
90601#ifdef FREECIV_JSON_CONNECTION
90602 field_addr.name = "no";
90603#endif /* FREECIV_JSON_CONNECTION */
90604 e = 0;
90605
90606 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
90607
90608 if (e) {
90609 log_packet_detailed("'no' field error detected");
90610 }
90611 }
90612
90613 if (BV_ISSET(fields, 2)) {
90614 log_packet_detailed(" field 'abstain' has changed");
90615
90616#ifdef FREECIV_JSON_CONNECTION
90617 field_addr.name = "abstain";
90618#endif /* FREECIV_JSON_CONNECTION */
90619 e = 0;
90620
90621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
90622
90623 if (e) {
90624 log_packet_detailed("'abstain' field error detected");
90625 }
90626 }
90627
90628 if (BV_ISSET(fields, 3)) {
90629 log_packet_detailed(" field 'num_voters' has changed");
90630
90631#ifdef FREECIV_JSON_CONNECTION
90632 field_addr.name = "num_voters";
90633#endif /* FREECIV_JSON_CONNECTION */
90634 e = 0;
90635
90636 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
90637
90638 if (e) {
90639 log_packet_detailed("'num_voters' field error detected");
90640 }
90641 }
90642
90643 *old = *real_packet;
90644
90645#else /* FREECIV_DELTA_PROTOCOL */
90646#ifdef FREECIV_JSON_CONNECTION
90647 field_addr.name = "yes";
90648#endif /* FREECIV_JSON_CONNECTION */
90649 e = 0;
90650
90651 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
90652
90653 if (e) {
90654 log_packet_detailed("'yes' field error detected");
90655 }
90656
90657#ifdef FREECIV_JSON_CONNECTION
90658 field_addr.name = "no";
90659#endif /* FREECIV_JSON_CONNECTION */
90660 e = 0;
90661
90662 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
90663
90664 if (e) {
90665 log_packet_detailed("'no' field error detected");
90666 }
90667
90668#ifdef FREECIV_JSON_CONNECTION
90669 field_addr.name = "abstain";
90670#endif /* FREECIV_JSON_CONNECTION */
90671 e = 0;
90672
90673 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
90674
90675 if (e) {
90676 log_packet_detailed("'abstain' field error detected");
90677 }
90678
90679#ifdef FREECIV_JSON_CONNECTION
90680 field_addr.name = "num_voters";
90681#endif /* FREECIV_JSON_CONNECTION */
90682 e = 0;
90683
90684 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
90685
90686 if (e) {
90687 log_packet_detailed("'num_voters' field error detected");
90688 }
90689#endif /* FREECIV_DELTA_PROTOCOL */
90690
90692}
90693
90695{
90696 if (!pc->used) {
90697 log_error("WARNING: trying to send data to the closed connection %s",
90699 return -1;
90700 }
90701 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet != nullptr, -1,
90702 "Handler for PACKET_VOTE_UPDATE not installed");
90703 return pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet(pc, packet);
90704}
90705
90706static inline void init_packet_vote_remove(struct packet_vote_remove *packet)
90707{
90708 memset(packet, 0, sizeof(*packet));
90709}
90710
90711#define free_packet_vote_remove(_packet) (void) 0
90712#define destroy_packet_vote_remove free
90713
90714#ifdef FREECIV_DELTA_PROTOCOL
90715#define hash_packet_vote_remove_100 hash_const
90716#define cmp_packet_vote_remove_100 cmp_const
90718#endif /* FREECIV_DELTA_PROTOCOL */
90719
90721{
90722#define FREE_PACKET_STRUCT(_packet) free_packet_vote_remove(_packet)
90724
90725#ifdef FREECIV_JSON_CONNECTION
90726 struct plocation field_addr;
90727 {
90728 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90731 }
90732#endif /* FREECIV_JSON_CONNECTION */
90733
90734 log_packet_detailed("packet_vote_remove_100: got info about ()");
90735
90736#ifdef FREECIV_DELTA_PROTOCOL
90738 struct packet_vote_remove *old;
90739 struct genhash **hash = pc->phs.received + PACKET_VOTE_REMOVE;
90740
90741 if (nullptr == *hash) {
90743 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
90744 }
90745
90746 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90747 *real_packet = *old;
90748 } else {
90749 /* packet is already initialized empty */
90750 log_packet_detailed(" no old info");
90751 }
90752
90753#ifdef FREECIV_JSON_CONNECTION
90754 field_addr.name = "fields";
90755#endif /* FREECIV_JSON_CONNECTION */
90756 DIO_BV_GET(&din, &field_addr, fields);
90757
90758 if (BV_ISSET(fields, 0)) {
90759 log_packet_detailed(" got field 'vote_no'");
90760
90761#ifdef FREECIV_JSON_CONNECTION
90762 field_addr.name = "vote_no";
90763#endif /* FREECIV_JSON_CONNECTION */
90764
90765 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90767 }
90768 }
90769
90770 if (nullptr == old) {
90771 old = fc_malloc(sizeof(*old));
90773 *old = *real_packet;
90775 } else {
90776 *old = *real_packet;
90777 }
90778
90779#else /* FREECIV_DELTA_PROTOCOL */
90780#ifdef FREECIV_JSON_CONNECTION
90781 field_addr.name = "vote_no";
90782#endif /* FREECIV_JSON_CONNECTION */
90783
90784 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90786 }
90787#endif /* FREECIV_DELTA_PROTOCOL */
90788
90790#undef FREE_PACKET_STRUCT
90791}
90792
90793static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
90794{
90795 const struct packet_vote_remove *real_packet = packet;
90796 int e;
90798
90799 log_packet_detailed("packet_vote_remove_100: sending info about ()");
90800
90801#ifdef FREECIV_DELTA_PROTOCOL
90803 struct packet_vote_remove *old;
90804 bool differ;
90805 struct genhash **hash = pc->phs.sent + PACKET_VOTE_REMOVE;
90806
90807 if (nullptr == *hash) {
90809 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
90810 }
90811 BV_CLR_ALL(fields);
90812
90813 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90814 old = fc_malloc(sizeof(*old));
90815 /* temporary bitcopy just to insert correctly */
90816 *old = *real_packet;
90819 }
90820
90821 differ = (old->vote_no != real_packet->vote_no);
90822 if (differ) {
90823 BV_SET(fields, 0);
90824 }
90825#endif /* FREECIV_DELTA_PROTOCOL */
90826
90827#ifdef FREECIV_JSON_CONNECTION
90828 struct plocation field_addr;
90829 {
90830 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90833 }
90834#endif /* FREECIV_JSON_CONNECTION */
90835
90836#ifdef FREECIV_DELTA_PROTOCOL
90837#ifdef FREECIV_JSON_CONNECTION
90838 field_addr.name = "fields";
90839#endif /* FREECIV_JSON_CONNECTION */
90840 e = 0;
90841 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90842 if (e) {
90843 log_packet_detailed("fields bitvector error detected");
90844 }
90845
90846 if (BV_ISSET(fields, 0)) {
90847 log_packet_detailed(" field 'vote_no' has changed");
90848
90849#ifdef FREECIV_JSON_CONNECTION
90850 field_addr.name = "vote_no";
90851#endif /* FREECIV_JSON_CONNECTION */
90852 e = 0;
90853
90854 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90855
90856 if (e) {
90857 log_packet_detailed("'vote_no' field error detected");
90858 }
90859 }
90860
90861 *old = *real_packet;
90862
90863#else /* FREECIV_DELTA_PROTOCOL */
90864#ifdef FREECIV_JSON_CONNECTION
90865 field_addr.name = "vote_no";
90866#endif /* FREECIV_JSON_CONNECTION */
90867 e = 0;
90868
90869 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90870
90871 if (e) {
90872 log_packet_detailed("'vote_no' field error detected");
90873 }
90874#endif /* FREECIV_DELTA_PROTOCOL */
90875
90877}
90878
90880{
90881 if (!pc->used) {
90882 log_error("WARNING: trying to send data to the closed connection %s",
90884 return -1;
90885 }
90886 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet != nullptr, -1,
90887 "Handler for PACKET_VOTE_REMOVE not installed");
90888 return pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet(pc, packet);
90889}
90890
90891static inline void init_packet_vote_resolve(struct packet_vote_resolve *packet)
90892{
90893 memset(packet, 0, sizeof(*packet));
90894}
90895
90896#define free_packet_vote_resolve(_packet) (void) 0
90897#define destroy_packet_vote_resolve free
90898
90899#ifdef FREECIV_DELTA_PROTOCOL
90900#define hash_packet_vote_resolve_100 hash_const
90901#define cmp_packet_vote_resolve_100 cmp_const
90903#endif /* FREECIV_DELTA_PROTOCOL */
90904
90906{
90907#define FREE_PACKET_STRUCT(_packet) free_packet_vote_resolve(_packet)
90909
90910#ifdef FREECIV_JSON_CONNECTION
90911 struct plocation field_addr;
90912 {
90913 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90916 }
90917#endif /* FREECIV_JSON_CONNECTION */
90918
90919 log_packet_detailed("packet_vote_resolve_100: got info about ()");
90920
90921#ifdef FREECIV_DELTA_PROTOCOL
90923 struct packet_vote_resolve *old;
90924 struct genhash **hash = pc->phs.received + PACKET_VOTE_RESOLVE;
90925
90926 if (nullptr == *hash) {
90928 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
90929 }
90930
90931 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90932 *real_packet = *old;
90933 } else {
90934 /* packet is already initialized empty */
90935 log_packet_detailed(" no old info");
90936 }
90937
90938#ifdef FREECIV_JSON_CONNECTION
90939 field_addr.name = "fields";
90940#endif /* FREECIV_JSON_CONNECTION */
90941 DIO_BV_GET(&din, &field_addr, fields);
90942
90943 if (BV_ISSET(fields, 0)) {
90944 log_packet_detailed(" got field 'vote_no'");
90945
90946#ifdef FREECIV_JSON_CONNECTION
90947 field_addr.name = "vote_no";
90948#endif /* FREECIV_JSON_CONNECTION */
90949
90950 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90952 }
90953 }
90954
90955 real_packet->passed = BV_ISSET(fields, 1);
90956
90957 if (nullptr == old) {
90958 old = fc_malloc(sizeof(*old));
90960 *old = *real_packet;
90962 } else {
90963 *old = *real_packet;
90964 }
90965
90966#else /* FREECIV_DELTA_PROTOCOL */
90967#ifdef FREECIV_JSON_CONNECTION
90968 field_addr.name = "vote_no";
90969#endif /* FREECIV_JSON_CONNECTION */
90970
90971 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90973 }
90974
90975#ifdef FREECIV_JSON_CONNECTION
90976 field_addr.name = "passed";
90977#endif /* FREECIV_JSON_CONNECTION */
90978
90979 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->passed)) {
90981 }
90982#endif /* FREECIV_DELTA_PROTOCOL */
90983
90985#undef FREE_PACKET_STRUCT
90986}
90987
90988static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
90989{
90990 const struct packet_vote_resolve *real_packet = packet;
90991 int e;
90993
90994 log_packet_detailed("packet_vote_resolve_100: sending info about ()");
90995
90996#ifdef FREECIV_DELTA_PROTOCOL
90998 struct packet_vote_resolve *old;
90999 bool differ;
91000 struct genhash **hash = pc->phs.sent + PACKET_VOTE_RESOLVE;
91001
91002 if (nullptr == *hash) {
91004 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
91005 }
91006 BV_CLR_ALL(fields);
91007
91008 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91009 old = fc_malloc(sizeof(*old));
91010 /* temporary bitcopy just to insert correctly */
91011 *old = *real_packet;
91014 }
91015
91016 differ = (old->vote_no != real_packet->vote_no);
91017 if (differ) {
91018 BV_SET(fields, 0);
91019 }
91020
91021 /* folded into head */
91022 if (real_packet->passed) {
91023 BV_SET(fields, 1);
91024 }
91025#endif /* FREECIV_DELTA_PROTOCOL */
91026
91027#ifdef FREECIV_JSON_CONNECTION
91028 struct plocation field_addr;
91029 {
91030 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91033 }
91034#endif /* FREECIV_JSON_CONNECTION */
91035
91036#ifdef FREECIV_DELTA_PROTOCOL
91037#ifdef FREECIV_JSON_CONNECTION
91038 field_addr.name = "fields";
91039#endif /* FREECIV_JSON_CONNECTION */
91040 e = 0;
91041 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91042 if (e) {
91043 log_packet_detailed("fields bitvector error detected");
91044 }
91045
91046 if (BV_ISSET(fields, 0)) {
91047 log_packet_detailed(" field 'vote_no' has changed");
91048
91049#ifdef FREECIV_JSON_CONNECTION
91050 field_addr.name = "vote_no";
91051#endif /* FREECIV_JSON_CONNECTION */
91052 e = 0;
91053
91054 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91055
91056 if (e) {
91057 log_packet_detailed("'vote_no' field error detected");
91058 }
91059 }
91060
91061 /* field 1 is folded into the header */
91062
91063 *old = *real_packet;
91064
91065#else /* FREECIV_DELTA_PROTOCOL */
91066#ifdef FREECIV_JSON_CONNECTION
91067 field_addr.name = "vote_no";
91068#endif /* FREECIV_JSON_CONNECTION */
91069 e = 0;
91070
91071 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91072
91073 if (e) {
91074 log_packet_detailed("'vote_no' field error detected");
91075 }
91076
91077#ifdef FREECIV_JSON_CONNECTION
91078 field_addr.name = "passed";
91079#endif /* FREECIV_JSON_CONNECTION */
91080 e = 0;
91081
91082 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->passed);
91083
91084 if (e) {
91085 log_packet_detailed("'passed' field error detected");
91086 }
91087#endif /* FREECIV_DELTA_PROTOCOL */
91088
91090}
91091
91093{
91094 if (!pc->used) {
91095 log_error("WARNING: trying to send data to the closed connection %s",
91097 return -1;
91098 }
91099 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet != nullptr, -1,
91100 "Handler for PACKET_VOTE_RESOLVE not installed");
91101 return pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet(pc, packet);
91102}
91103
91104static inline void init_packet_vote_submit(struct packet_vote_submit *packet)
91105{
91106 memset(packet, 0, sizeof(*packet));
91107}
91108
91109#define free_packet_vote_submit(_packet) (void) 0
91110#define destroy_packet_vote_submit free
91111
91113{
91114#define FREE_PACKET_STRUCT(_packet) free_packet_vote_submit(_packet)
91116
91117#ifdef FREECIV_JSON_CONNECTION
91118 struct plocation field_addr;
91119 {
91120 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91123 }
91124#endif /* FREECIV_JSON_CONNECTION */
91125
91126 log_packet_detailed("packet_vote_submit_100: got info about ()");
91127
91128#ifdef FREECIV_JSON_CONNECTION
91129 field_addr.name = "vote_no";
91130#endif /* FREECIV_JSON_CONNECTION */
91131
91132 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91134 }
91135
91136#ifdef FREECIV_JSON_CONNECTION
91137 field_addr.name = "value";
91138#endif /* FREECIV_JSON_CONNECTION */
91139
91140 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->value)) {
91142 }
91143
91145#undef FREE_PACKET_STRUCT
91146}
91147
91148static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
91149{
91150 const struct packet_vote_submit *real_packet = packet;
91151 int e;
91153
91154 log_packet_detailed("packet_vote_submit_100: sending info about ()");
91155
91156#ifdef FREECIV_JSON_CONNECTION
91157 struct plocation field_addr;
91158 {
91159 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91162 }
91163#endif /* FREECIV_JSON_CONNECTION */
91164
91165#ifdef FREECIV_JSON_CONNECTION
91166 field_addr.name = "vote_no";
91167#endif /* FREECIV_JSON_CONNECTION */
91168 e = 0;
91169
91170 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91171
91172 if (e) {
91173 log_packet_detailed("'vote_no' field error detected");
91174 }
91175
91176#ifdef FREECIV_JSON_CONNECTION
91177 field_addr.name = "value";
91178#endif /* FREECIV_JSON_CONNECTION */
91179 e = 0;
91180
91181 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->value);
91182
91183 if (e) {
91184 log_packet_detailed("'value' field error detected");
91185 }
91186
91188}
91189
91191{
91192 if (!pc->used) {
91193 log_error("WARNING: trying to send data to the closed connection %s",
91195 return -1;
91196 }
91197 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet != nullptr, -1,
91198 "Handler for PACKET_VOTE_SUBMIT not installed");
91199 return pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet(pc, packet);
91200}
91201
91202static inline void init_packet_edit_mode(struct packet_edit_mode *packet)
91203{
91204 memset(packet, 0, sizeof(*packet));
91205}
91206
91207#define free_packet_edit_mode(_packet) (void) 0
91208#define destroy_packet_edit_mode free
91209
91210#ifdef FREECIV_DELTA_PROTOCOL
91211#define hash_packet_edit_mode_100 hash_const
91212#define cmp_packet_edit_mode_100 cmp_const
91214#endif /* FREECIV_DELTA_PROTOCOL */
91215
91217{
91218#define FREE_PACKET_STRUCT(_packet) free_packet_edit_mode(_packet)
91220
91221#ifdef FREECIV_JSON_CONNECTION
91222 struct plocation field_addr;
91223 {
91224 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91227 }
91228#endif /* FREECIV_JSON_CONNECTION */
91229
91230 log_packet_detailed("packet_edit_mode_100: got info about ()");
91231
91232#ifdef FREECIV_DELTA_PROTOCOL
91234 struct packet_edit_mode *old;
91235 struct genhash **hash = pc->phs.received + PACKET_EDIT_MODE;
91236
91237 if (nullptr == *hash) {
91239 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
91240 }
91241
91242 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91243 *real_packet = *old;
91244 } else {
91245 /* packet is already initialized empty */
91246 log_packet_detailed(" no old info");
91247 }
91248
91249#ifdef FREECIV_JSON_CONNECTION
91250 field_addr.name = "fields";
91251#endif /* FREECIV_JSON_CONNECTION */
91252 DIO_BV_GET(&din, &field_addr, fields);
91253
91254 real_packet->state = BV_ISSET(fields, 0);
91255
91256 if (nullptr == old) {
91257 old = fc_malloc(sizeof(*old));
91259 *old = *real_packet;
91261 } else {
91262 *old = *real_packet;
91263 }
91264
91265#else /* FREECIV_DELTA_PROTOCOL */
91266#ifdef FREECIV_JSON_CONNECTION
91267 field_addr.name = "state";
91268#endif /* FREECIV_JSON_CONNECTION */
91269
91270 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->state)) {
91272 }
91273#endif /* FREECIV_DELTA_PROTOCOL */
91274
91276#undef FREE_PACKET_STRUCT
91277}
91278
91279static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
91280{
91281 const struct packet_edit_mode *real_packet = packet;
91282 int e;
91284
91285 log_packet_detailed("packet_edit_mode_100: sending info about ()");
91286
91287#ifdef FREECIV_DELTA_PROTOCOL
91289 struct packet_edit_mode *old;
91290 struct genhash **hash = pc->phs.sent + PACKET_EDIT_MODE;
91291
91292 if (nullptr == *hash) {
91294 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
91295 }
91296 BV_CLR_ALL(fields);
91297
91298 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91299 old = fc_malloc(sizeof(*old));
91300 /* temporary bitcopy just to insert correctly */
91301 *old = *real_packet;
91304 }
91305
91306 /* folded into head */
91307 if (real_packet->state) {
91308 BV_SET(fields, 0);
91309 }
91310#endif /* FREECIV_DELTA_PROTOCOL */
91311
91312#ifdef FREECIV_JSON_CONNECTION
91313 struct plocation field_addr;
91314 {
91315 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91318 }
91319#endif /* FREECIV_JSON_CONNECTION */
91320
91321#ifdef FREECIV_DELTA_PROTOCOL
91322#ifdef FREECIV_JSON_CONNECTION
91323 field_addr.name = "fields";
91324#endif /* FREECIV_JSON_CONNECTION */
91325 e = 0;
91326 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91327 if (e) {
91328 log_packet_detailed("fields bitvector error detected");
91329 }
91330
91331 /* field 0 is folded into the header */
91332
91333 *old = *real_packet;
91334
91335#else /* FREECIV_DELTA_PROTOCOL */
91336#ifdef FREECIV_JSON_CONNECTION
91337 field_addr.name = "state";
91338#endif /* FREECIV_JSON_CONNECTION */
91339 e = 0;
91340
91341 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->state);
91342
91343 if (e) {
91344 log_packet_detailed("'state' field error detected");
91345 }
91346#endif /* FREECIV_DELTA_PROTOCOL */
91347
91349}
91350
91351int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
91352{
91353 if (!pc->used) {
91354 log_error("WARNING: trying to send data to the closed connection %s",
91356 return -1;
91357 }
91358 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_MODE].packet != nullptr, -1,
91359 "Handler for PACKET_EDIT_MODE not installed");
91360 return pc->phs.handlers->send[PACKET_EDIT_MODE].packet(pc, packet);
91361}
91362
91363int dsend_packet_edit_mode(struct connection *pc, bool state)
91364{
91365 struct packet_edit_mode packet, *real_packet = &packet;
91366
91368
91370}
91371
91373{
91374 memset(packet, 0, sizeof(*packet));
91375}
91376
91377#define free_packet_edit_recalculate_borders(_packet) (void) 0
91378#define destroy_packet_edit_recalculate_borders free
91379
91381{
91382#define FREE_PACKET_STRUCT(_packet) free_packet_edit_recalculate_borders(_packet)
91384
91385 log_packet_detailed("packet_edit_recalculate_borders_100: got info about ()");
91386
91387 real_packet->__dummy = 0xff;
91388
91390#undef FREE_PACKET_STRUCT
91391}
91392
91394{
91396
91397 log_packet_detailed("packet_edit_recalculate_borders_100: sending info about ()");
91398
91400}
91401
91403{
91404 if (!pc->used) {
91405 log_error("WARNING: trying to send data to the closed connection %s",
91407 return -1;
91408 }
91409 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet != nullptr, -1,
91410 "Handler for PACKET_EDIT_RECALCULATE_BORDERS not installed");
91411 return pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet(pc);
91412}
91413
91415{
91416 memset(packet, 0, sizeof(*packet));
91417}
91418
91419#define free_packet_edit_check_tiles(_packet) (void) 0
91420#define destroy_packet_edit_check_tiles free
91421
91423{
91424#define FREE_PACKET_STRUCT(_packet) free_packet_edit_check_tiles(_packet)
91426
91427 log_packet_detailed("packet_edit_check_tiles_100: got info about ()");
91428
91429 real_packet->__dummy = 0xff;
91430
91432#undef FREE_PACKET_STRUCT
91433}
91434
91436{
91438
91439 log_packet_detailed("packet_edit_check_tiles_100: sending info about ()");
91440
91442}
91443
91445{
91446 if (!pc->used) {
91447 log_error("WARNING: trying to send data to the closed connection %s",
91449 return -1;
91450 }
91451 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet != nullptr, -1,
91452 "Handler for PACKET_EDIT_CHECK_TILES not installed");
91453 return pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet(pc);
91454}
91455
91457{
91458 memset(packet, 0, sizeof(*packet));
91459}
91460
91461#define free_packet_edit_toggle_fogofwar(_packet) (void) 0
91462#define destroy_packet_edit_toggle_fogofwar free
91463
91464#ifdef FREECIV_DELTA_PROTOCOL
91465#define hash_packet_edit_toggle_fogofwar_100 hash_const
91466#define cmp_packet_edit_toggle_fogofwar_100 cmp_const
91468#endif /* FREECIV_DELTA_PROTOCOL */
91469
91471{
91472#define FREE_PACKET_STRUCT(_packet) free_packet_edit_toggle_fogofwar(_packet)
91474
91475#ifdef FREECIV_JSON_CONNECTION
91476 struct plocation field_addr;
91477 {
91478 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91481 }
91482#endif /* FREECIV_JSON_CONNECTION */
91483
91484 log_packet_detailed("packet_edit_toggle_fogofwar_100: got info about ()");
91485
91486#ifdef FREECIV_DELTA_PROTOCOL
91489 struct genhash **hash = pc->phs.received + PACKET_EDIT_TOGGLE_FOGOFWAR;
91490
91491 if (nullptr == *hash) {
91493 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
91494 }
91495
91496 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91497 *real_packet = *old;
91498 } else {
91499 /* packet is already initialized empty */
91500 log_packet_detailed(" no old info");
91501 }
91502
91503#ifdef FREECIV_JSON_CONNECTION
91504 field_addr.name = "fields";
91505#endif /* FREECIV_JSON_CONNECTION */
91506 DIO_BV_GET(&din, &field_addr, fields);
91507
91508 if (BV_ISSET(fields, 0)) {
91509 log_packet_detailed(" got field 'player'");
91510
91511#ifdef FREECIV_JSON_CONNECTION
91512 field_addr.name = "player";
91513#endif /* FREECIV_JSON_CONNECTION */
91514
91515 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
91517 }
91518 }
91519
91520 if (nullptr == old) {
91521 old = fc_malloc(sizeof(*old));
91523 *old = *real_packet;
91525 } else {
91526 *old = *real_packet;
91527 }
91528
91529#else /* FREECIV_DELTA_PROTOCOL */
91530#ifdef FREECIV_JSON_CONNECTION
91531 field_addr.name = "player";
91532#endif /* FREECIV_JSON_CONNECTION */
91533
91534 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
91536 }
91537#endif /* FREECIV_DELTA_PROTOCOL */
91538
91540#undef FREE_PACKET_STRUCT
91541}
91542
91544{
91545 const struct packet_edit_toggle_fogofwar *real_packet = packet;
91546 int e;
91548
91549 log_packet_detailed("packet_edit_toggle_fogofwar_100: sending info about ()");
91550
91551#ifdef FREECIV_DELTA_PROTOCOL
91554 bool differ;
91555 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TOGGLE_FOGOFWAR;
91556
91557 if (nullptr == *hash) {
91559 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
91560 }
91561 BV_CLR_ALL(fields);
91562
91563 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91564 old = fc_malloc(sizeof(*old));
91565 /* temporary bitcopy just to insert correctly */
91566 *old = *real_packet;
91569 }
91570
91571 differ = (old->player != real_packet->player);
91572 if (differ) {
91573 BV_SET(fields, 0);
91574 }
91575#endif /* FREECIV_DELTA_PROTOCOL */
91576
91577#ifdef FREECIV_JSON_CONNECTION
91578 struct plocation field_addr;
91579 {
91580 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91583 }
91584#endif /* FREECIV_JSON_CONNECTION */
91585
91586#ifdef FREECIV_DELTA_PROTOCOL
91587#ifdef FREECIV_JSON_CONNECTION
91588 field_addr.name = "fields";
91589#endif /* FREECIV_JSON_CONNECTION */
91590 e = 0;
91591 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91592 if (e) {
91593 log_packet_detailed("fields bitvector error detected");
91594 }
91595
91596 if (BV_ISSET(fields, 0)) {
91597 log_packet_detailed(" field 'player' has changed");
91598
91599#ifdef FREECIV_JSON_CONNECTION
91600 field_addr.name = "player";
91601#endif /* FREECIV_JSON_CONNECTION */
91602 e = 0;
91603
91604 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
91605
91606 if (e) {
91607 log_packet_detailed("'player' field error detected");
91608 }
91609 }
91610
91611 *old = *real_packet;
91612
91613#else /* FREECIV_DELTA_PROTOCOL */
91614#ifdef FREECIV_JSON_CONNECTION
91615 field_addr.name = "player";
91616#endif /* FREECIV_JSON_CONNECTION */
91617 e = 0;
91618
91619 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
91620
91621 if (e) {
91622 log_packet_detailed("'player' field error detected");
91623 }
91624#endif /* FREECIV_DELTA_PROTOCOL */
91625
91627}
91628
91630{
91631 if (!pc->used) {
91632 log_error("WARNING: trying to send data to the closed connection %s",
91634 return -1;
91635 }
91636 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet != nullptr, -1,
91637 "Handler for PACKET_EDIT_TOGGLE_FOGOFWAR not installed");
91638 return pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet(pc, packet);
91639}
91640
91642{
91643 struct packet_edit_toggle_fogofwar packet, *real_packet = &packet;
91644
91646
91648}
91649
91651{
91652 memset(packet, 0, sizeof(*packet));
91653}
91654
91655#define free_packet_edit_fogofwar_state(_packet) (void) 0
91656#define destroy_packet_edit_fogofwar_state free
91657
91658#ifdef FREECIV_DELTA_PROTOCOL
91659#define hash_packet_edit_fogofwar_state_100 hash_const
91660#define cmp_packet_edit_fogofwar_state_100 cmp_const
91662#endif /* FREECIV_DELTA_PROTOCOL */
91663
91665{
91666#define FREE_PACKET_STRUCT(_packet) free_packet_edit_fogofwar_state(_packet)
91668
91669#ifdef FREECIV_JSON_CONNECTION
91670 struct plocation field_addr;
91671 {
91672 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91675 }
91676#endif /* FREECIV_JSON_CONNECTION */
91677
91678 log_packet_detailed("packet_edit_fogofwar_state_100: got info about ()");
91679
91680#ifdef FREECIV_DELTA_PROTOCOL
91683 struct genhash **hash = pc->phs.received + PACKET_EDIT_FOGOFWAR_STATE;
91684
91685 if (nullptr == *hash) {
91687 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
91688 }
91689
91690 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91691 *real_packet = *old;
91692 } else {
91693 /* packet is already initialized empty */
91694 log_packet_detailed(" no old info");
91695 }
91696
91697#ifdef FREECIV_JSON_CONNECTION
91698 field_addr.name = "fields";
91699#endif /* FREECIV_JSON_CONNECTION */
91700 DIO_BV_GET(&din, &field_addr, fields);
91701
91702 real_packet->enabled = BV_ISSET(fields, 0);
91703
91704 if (nullptr == old) {
91705 old = fc_malloc(sizeof(*old));
91707 *old = *real_packet;
91709 } else {
91710 *old = *real_packet;
91711 }
91712
91713#else /* FREECIV_DELTA_PROTOCOL */
91714#ifdef FREECIV_JSON_CONNECTION
91715 field_addr.name = "enabled";
91716#endif /* FREECIV_JSON_CONNECTION */
91717
91718 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
91720 }
91721#endif /* FREECIV_DELTA_PROTOCOL */
91722
91724#undef FREE_PACKET_STRUCT
91725}
91726
91728{
91729 const struct packet_edit_fogofwar_state *real_packet = packet;
91730 int e;
91732
91733 log_packet_detailed("packet_edit_fogofwar_state_100: sending info about ()");
91734
91735#ifdef FREECIV_DELTA_PROTOCOL
91738 struct genhash **hash = pc->phs.sent + PACKET_EDIT_FOGOFWAR_STATE;
91739
91740 if (nullptr == *hash) {
91742 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
91743 }
91744 BV_CLR_ALL(fields);
91745
91746 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91747 old = fc_malloc(sizeof(*old));
91748 /* temporary bitcopy just to insert correctly */
91749 *old = *real_packet;
91752 }
91753
91754 /* folded into head */
91755 if (real_packet->enabled) {
91756 BV_SET(fields, 0);
91757 }
91758#endif /* FREECIV_DELTA_PROTOCOL */
91759
91760#ifdef FREECIV_JSON_CONNECTION
91761 struct plocation field_addr;
91762 {
91763 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91766 }
91767#endif /* FREECIV_JSON_CONNECTION */
91768
91769#ifdef FREECIV_DELTA_PROTOCOL
91770#ifdef FREECIV_JSON_CONNECTION
91771 field_addr.name = "fields";
91772#endif /* FREECIV_JSON_CONNECTION */
91773 e = 0;
91774 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91775 if (e) {
91776 log_packet_detailed("fields bitvector error detected");
91777 }
91778
91779 /* field 0 is folded into the header */
91780
91781 *old = *real_packet;
91782
91783#else /* FREECIV_DELTA_PROTOCOL */
91784#ifdef FREECIV_JSON_CONNECTION
91785 field_addr.name = "enabled";
91786#endif /* FREECIV_JSON_CONNECTION */
91787 e = 0;
91788
91789 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
91790
91791 if (e) {
91792 log_packet_detailed("'enabled' field error detected");
91793 }
91794#endif /* FREECIV_DELTA_PROTOCOL */
91795
91797}
91798
91800{
91801 if (!pc->used) {
91802 log_error("WARNING: trying to send data to the closed connection %s",
91804 return -1;
91805 }
91806 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet != nullptr, -1,
91807 "Handler for PACKET_EDIT_FOGOFWAR_STATE not installed");
91808 return pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet(pc, packet);
91809}
91810
91812{
91813 conn_list_iterate(dest, pconn) {
91816}
91817
91819{
91820 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
91821
91823
91825}
91826
91828{
91829 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
91830
91832
91834}
91835
91837{
91838 memset(packet, 0, sizeof(*packet));
91839}
91840
91841#define free_packet_edit_tile_terrain(_packet) (void) 0
91842#define destroy_packet_edit_tile_terrain free
91843
91844#ifdef FREECIV_DELTA_PROTOCOL
91846{
91847 const struct packet_edit_tile_terrain *key = (const struct packet_edit_tile_terrain *) vkey;
91848 genhash_val_t result = 0;
91849
91850 result += key->tile;
91851
91852 result &= 0xFFFFFFFF;
91853 return result;
91854}
91855
91856static bool cmp_packet_edit_tile_terrain_100(const void *vkey1, const void *vkey2)
91857{
91858 const struct packet_edit_tile_terrain *old = (const struct packet_edit_tile_terrain *) vkey1;
91859 const struct packet_edit_tile_terrain *real_packet = (const struct packet_edit_tile_terrain *) vkey2;
91860 bool differ;
91861
91862 differ = (old->tile != real_packet->tile);
91863
91864 return !differ;
91865}
91867#endif /* FREECIV_DELTA_PROTOCOL */
91868
91870{
91871#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_terrain(_packet)
91873
91874#ifdef FREECIV_JSON_CONNECTION
91875 struct plocation field_addr;
91876 {
91877 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91880 }
91881#endif /* FREECIV_JSON_CONNECTION */
91882
91883#ifdef FREECIV_JSON_CONNECTION
91884 field_addr.name = "tile";
91885#endif /* FREECIV_JSON_CONNECTION */
91886
91887 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
91889 }
91890
91891 log_packet_detailed("packet_edit_tile_terrain_100: got info about (%d)",
91892 real_packet->tile);
91893
91894#ifdef FREECIV_DELTA_PROTOCOL
91897 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_TERRAIN;
91898
91899 if (nullptr == *hash) {
91901 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
91902 }
91903
91904 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91905 *real_packet = *old;
91906 } else {
91907 /* packet is already initialized empty */
91908 log_packet_detailed(" no old info");
91909 }
91910
91911#ifdef FREECIV_JSON_CONNECTION
91912 field_addr.name = "fields";
91913#endif /* FREECIV_JSON_CONNECTION */
91914 DIO_BV_GET(&din, &field_addr, fields);
91915
91916 if (BV_ISSET(fields, 0)) {
91917 log_packet_detailed(" got field 'terrain'");
91918
91919#ifdef FREECIV_JSON_CONNECTION
91920 field_addr.name = "terrain";
91921#endif /* FREECIV_JSON_CONNECTION */
91922
91923 {
91924 int readin;
91925
91926 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
91928 }
91929 real_packet->terrain = readin;
91930 }
91931 }
91932
91933 if (BV_ISSET(fields, 1)) {
91934 log_packet_detailed(" got field 'size'");
91935
91936#ifdef FREECIV_JSON_CONNECTION
91937 field_addr.name = "size";
91938#endif /* FREECIV_JSON_CONNECTION */
91939
91940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
91942 }
91943 }
91944
91945 if (nullptr == old) {
91946 old = fc_malloc(sizeof(*old));
91948 *old = *real_packet;
91950 } else {
91951 *old = *real_packet;
91952 }
91953
91954#else /* FREECIV_DELTA_PROTOCOL */
91955#ifdef FREECIV_JSON_CONNECTION
91956 field_addr.name = "terrain";
91957#endif /* FREECIV_JSON_CONNECTION */
91958
91959 {
91960 int readin;
91961
91962 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
91964 }
91965 real_packet->terrain = readin;
91966 }
91967
91968#ifdef FREECIV_JSON_CONNECTION
91969 field_addr.name = "size";
91970#endif /* FREECIV_JSON_CONNECTION */
91971
91972 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
91974 }
91975#endif /* FREECIV_DELTA_PROTOCOL */
91976
91978#undef FREE_PACKET_STRUCT
91979}
91980
91982{
91983 const struct packet_edit_tile_terrain *real_packet = packet;
91984 int e;
91986
91987 log_packet_detailed("packet_edit_tile_terrain_100: sending info about (%d)",
91988 real_packet->tile);
91989
91990#ifdef FREECIV_DELTA_PROTOCOL
91993 bool differ;
91994 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_TERRAIN;
91995
91996 if (nullptr == *hash) {
91998 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
91999 }
92000 BV_CLR_ALL(fields);
92001
92002 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92003 old = fc_malloc(sizeof(*old));
92004 /* temporary bitcopy just to insert correctly */
92005 *old = *real_packet;
92008 }
92009
92010 differ = (old->terrain != real_packet->terrain);
92011 if (differ) {
92012 BV_SET(fields, 0);
92013 }
92014
92015 differ = (old->size != real_packet->size);
92016 if (differ) {
92017 BV_SET(fields, 1);
92018 }
92019#endif /* FREECIV_DELTA_PROTOCOL */
92020
92021#ifdef FREECIV_JSON_CONNECTION
92022 struct plocation field_addr;
92023 {
92024 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92027 }
92028#endif /* FREECIV_JSON_CONNECTION */
92029
92030#ifdef FREECIV_JSON_CONNECTION
92031 field_addr.name = "tile";
92032#endif /* FREECIV_JSON_CONNECTION */
92033 e = 0;
92034
92035 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
92036
92037 if (e) {
92038 log_packet_detailed("'tile' field error detected");
92039 }
92040
92041#ifdef FREECIV_DELTA_PROTOCOL
92042#ifdef FREECIV_JSON_CONNECTION
92043 field_addr.name = "fields";
92044#endif /* FREECIV_JSON_CONNECTION */
92045 e = 0;
92046 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92047 if (e) {
92048 log_packet_detailed("fields bitvector error detected");
92049 }
92050
92051 if (BV_ISSET(fields, 0)) {
92052 log_packet_detailed(" field 'terrain' has changed");
92053
92054#ifdef FREECIV_JSON_CONNECTION
92055 field_addr.name = "terrain";
92056#endif /* FREECIV_JSON_CONNECTION */
92057 e = 0;
92058
92059 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
92060
92061 if (e) {
92062 log_packet_detailed("'terrain' field error detected");
92063 }
92064 }
92065
92066 if (BV_ISSET(fields, 1)) {
92067 log_packet_detailed(" field 'size' has changed");
92068
92069#ifdef FREECIV_JSON_CONNECTION
92070 field_addr.name = "size";
92071#endif /* FREECIV_JSON_CONNECTION */
92072 e = 0;
92073
92074 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92075
92076 if (e) {
92077 log_packet_detailed("'size' field error detected");
92078 }
92079 }
92080
92081 *old = *real_packet;
92082
92083#else /* FREECIV_DELTA_PROTOCOL */
92084#ifdef FREECIV_JSON_CONNECTION
92085 field_addr.name = "terrain";
92086#endif /* FREECIV_JSON_CONNECTION */
92087 e = 0;
92088
92089 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
92090
92091 if (e) {
92092 log_packet_detailed("'terrain' field error detected");
92093 }
92094
92095#ifdef FREECIV_JSON_CONNECTION
92096 field_addr.name = "size";
92097#endif /* FREECIV_JSON_CONNECTION */
92098 e = 0;
92099
92100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92101
92102 if (e) {
92103 log_packet_detailed("'size' field error detected");
92104 }
92105#endif /* FREECIV_DELTA_PROTOCOL */
92106
92108}
92109
92111{
92112 if (!pc->used) {
92113 log_error("WARNING: trying to send data to the closed connection %s",
92115 return -1;
92116 }
92117 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet != nullptr, -1,
92118 "Handler for PACKET_EDIT_TILE_TERRAIN not installed");
92119 return pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet(pc, packet);
92120}
92121
92123{
92124 struct packet_edit_tile_terrain packet, *real_packet = &packet;
92125
92127 real_packet->terrain = terrain;
92128 real_packet->size = size;
92129
92131}
92132
92133static inline void init_packet_edit_tile_extra(struct packet_edit_tile_extra *packet)
92134{
92135 memset(packet, 0, sizeof(*packet));
92136}
92137
92138#define free_packet_edit_tile_extra(_packet) (void) 0
92139#define destroy_packet_edit_tile_extra free
92140
92141#ifdef FREECIV_DELTA_PROTOCOL
92143{
92144 const struct packet_edit_tile_extra *key = (const struct packet_edit_tile_extra *) vkey;
92145 genhash_val_t result = 0;
92146
92147 result += key->tile;
92148
92149 result &= 0xFFFFFFFF;
92150 return result;
92151}
92152
92153static bool cmp_packet_edit_tile_extra_100(const void *vkey1, const void *vkey2)
92154{
92155 const struct packet_edit_tile_extra *old = (const struct packet_edit_tile_extra *) vkey1;
92156 const struct packet_edit_tile_extra *real_packet = (const struct packet_edit_tile_extra *) vkey2;
92157 bool differ;
92158
92159 differ = (old->tile != real_packet->tile);
92160
92161 return !differ;
92162}
92164#endif /* FREECIV_DELTA_PROTOCOL */
92165
92167{
92168#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_extra(_packet)
92170
92171#ifdef FREECIV_JSON_CONNECTION
92172 struct plocation field_addr;
92173 {
92174 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92177 }
92178#endif /* FREECIV_JSON_CONNECTION */
92179
92180#ifdef FREECIV_JSON_CONNECTION
92181 field_addr.name = "tile";
92182#endif /* FREECIV_JSON_CONNECTION */
92183
92184 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
92186 }
92187
92188 log_packet_detailed("packet_edit_tile_extra_100: got info about (%d)",
92189 real_packet->tile);
92190
92191#ifdef FREECIV_DELTA_PROTOCOL
92194 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_EXTRA;
92195
92196 if (nullptr == *hash) {
92198 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
92199 }
92200
92201 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92202 *real_packet = *old;
92203 } else {
92204 /* packet is already initialized empty */
92205 log_packet_detailed(" no old info");
92206 }
92207
92208#ifdef FREECIV_JSON_CONNECTION
92209 field_addr.name = "fields";
92210#endif /* FREECIV_JSON_CONNECTION */
92211 DIO_BV_GET(&din, &field_addr, fields);
92212
92213 if (BV_ISSET(fields, 0)) {
92214 log_packet_detailed(" got field 'extra_type_id'");
92215
92216#ifdef FREECIV_JSON_CONNECTION
92217 field_addr.name = "extra_type_id";
92218#endif /* FREECIV_JSON_CONNECTION */
92219
92220 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
92221 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
92222 }
92223 }
92224
92225 real_packet->removal = BV_ISSET(fields, 1);
92226
92227 if (BV_ISSET(fields, 2)) {
92228 log_packet_detailed(" got field 'eowner'");
92229
92230#ifdef FREECIV_JSON_CONNECTION
92231 field_addr.name = "eowner";
92232#endif /* FREECIV_JSON_CONNECTION */
92233
92234 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92236 }
92237 }
92238
92239 if (BV_ISSET(fields, 3)) {
92240 log_packet_detailed(" got field 'size'");
92241
92242#ifdef FREECIV_JSON_CONNECTION
92243 field_addr.name = "size";
92244#endif /* FREECIV_JSON_CONNECTION */
92245
92246 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92248 }
92249 }
92250
92251 if (nullptr == old) {
92252 old = fc_malloc(sizeof(*old));
92254 *old = *real_packet;
92256 } else {
92257 *old = *real_packet;
92258 }
92259
92260#else /* FREECIV_DELTA_PROTOCOL */
92261#ifdef FREECIV_JSON_CONNECTION
92262 field_addr.name = "extra_type_id";
92263#endif /* FREECIV_JSON_CONNECTION */
92264
92265 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
92266 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
92267 }
92268
92269#ifdef FREECIV_JSON_CONNECTION
92270 field_addr.name = "removal";
92271#endif /* FREECIV_JSON_CONNECTION */
92272
92273 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
92275 }
92276
92277#ifdef FREECIV_JSON_CONNECTION
92278 field_addr.name = "eowner";
92279#endif /* FREECIV_JSON_CONNECTION */
92280
92281 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92283 }
92284
92285#ifdef FREECIV_JSON_CONNECTION
92286 field_addr.name = "size";
92287#endif /* FREECIV_JSON_CONNECTION */
92288
92289 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92291 }
92292#endif /* FREECIV_DELTA_PROTOCOL */
92293
92295#undef FREE_PACKET_STRUCT
92296}
92297
92299{
92300 const struct packet_edit_tile_extra *real_packet = packet;
92301 int e;
92303
92304 log_packet_detailed("packet_edit_tile_extra_100: sending info about (%d)",
92305 real_packet->tile);
92306
92307#ifdef FREECIV_DELTA_PROTOCOL
92310 bool differ;
92311 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_EXTRA;
92312
92313 if (nullptr == *hash) {
92315 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
92316 }
92317 BV_CLR_ALL(fields);
92318
92319 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92320 old = fc_malloc(sizeof(*old));
92321 /* temporary bitcopy just to insert correctly */
92322 *old = *real_packet;
92325 }
92326
92327 differ = (old->extra_type_id != real_packet->extra_type_id);
92328 if (differ) {
92329 BV_SET(fields, 0);
92330 }
92331
92332 /* folded into head */
92333 if (real_packet->removal) {
92334 BV_SET(fields, 1);
92335 }
92336
92337 differ = (old->eowner != real_packet->eowner);
92338 if (differ) {
92339 BV_SET(fields, 2);
92340 }
92341
92342 differ = (old->size != real_packet->size);
92343 if (differ) {
92344 BV_SET(fields, 3);
92345 }
92346#endif /* FREECIV_DELTA_PROTOCOL */
92347
92348#ifdef FREECIV_JSON_CONNECTION
92349 struct plocation field_addr;
92350 {
92351 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92354 }
92355#endif /* FREECIV_JSON_CONNECTION */
92356
92357#ifdef FREECIV_JSON_CONNECTION
92358 field_addr.name = "tile";
92359#endif /* FREECIV_JSON_CONNECTION */
92360 e = 0;
92361
92362 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
92363
92364 if (e) {
92365 log_packet_detailed("'tile' field error detected");
92366 }
92367
92368#ifdef FREECIV_DELTA_PROTOCOL
92369#ifdef FREECIV_JSON_CONNECTION
92370 field_addr.name = "fields";
92371#endif /* FREECIV_JSON_CONNECTION */
92372 e = 0;
92373 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92374 if (e) {
92375 log_packet_detailed("fields bitvector error detected");
92376 }
92377
92378 if (BV_ISSET(fields, 0)) {
92379 log_packet_detailed(" field 'extra_type_id' has changed");
92380
92381#ifdef FREECIV_JSON_CONNECTION
92382 field_addr.name = "extra_type_id";
92383#endif /* FREECIV_JSON_CONNECTION */
92384 e = 0;
92385
92386 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
92387
92388 if (e) {
92389 log_packet_detailed("'extra_type_id' field error detected");
92390 }
92391 }
92392
92393 /* field 1 is folded into the header */
92394
92395 if (BV_ISSET(fields, 2)) {
92396 log_packet_detailed(" field 'eowner' has changed");
92397
92398#ifdef FREECIV_JSON_CONNECTION
92399 field_addr.name = "eowner";
92400#endif /* FREECIV_JSON_CONNECTION */
92401 e = 0;
92402
92403 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
92404
92405 if (e) {
92406 log_packet_detailed("'eowner' field error detected");
92407 }
92408 }
92409
92410 if (BV_ISSET(fields, 3)) {
92411 log_packet_detailed(" field 'size' has changed");
92412
92413#ifdef FREECIV_JSON_CONNECTION
92414 field_addr.name = "size";
92415#endif /* FREECIV_JSON_CONNECTION */
92416 e = 0;
92417
92418 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92419
92420 if (e) {
92421 log_packet_detailed("'size' field error detected");
92422 }
92423 }
92424
92425 *old = *real_packet;
92426
92427#else /* FREECIV_DELTA_PROTOCOL */
92428#ifdef FREECIV_JSON_CONNECTION
92429 field_addr.name = "extra_type_id";
92430#endif /* FREECIV_JSON_CONNECTION */
92431 e = 0;
92432
92433 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
92434
92435 if (e) {
92436 log_packet_detailed("'extra_type_id' field error detected");
92437 }
92438
92439#ifdef FREECIV_JSON_CONNECTION
92440 field_addr.name = "removal";
92441#endif /* FREECIV_JSON_CONNECTION */
92442 e = 0;
92443
92444 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
92445
92446 if (e) {
92447 log_packet_detailed("'removal' field error detected");
92448 }
92449
92450#ifdef FREECIV_JSON_CONNECTION
92451 field_addr.name = "eowner";
92452#endif /* FREECIV_JSON_CONNECTION */
92453 e = 0;
92454
92455 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
92456
92457 if (e) {
92458 log_packet_detailed("'eowner' field error detected");
92459 }
92460
92461#ifdef FREECIV_JSON_CONNECTION
92462 field_addr.name = "size";
92463#endif /* FREECIV_JSON_CONNECTION */
92464 e = 0;
92465
92466 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92467
92468 if (e) {
92469 log_packet_detailed("'size' field error detected");
92470 }
92471#endif /* FREECIV_DELTA_PROTOCOL */
92472
92474}
92475
92477{
92478 if (!pc->used) {
92479 log_error("WARNING: trying to send data to the closed connection %s",
92481 return -1;
92482 }
92483 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet != nullptr, -1,
92484 "Handler for PACKET_EDIT_TILE_EXTRA not installed");
92485 return pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet(pc, packet);
92486}
92487
92488int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
92489{
92490 struct packet_edit_tile_extra packet, *real_packet = &packet;
92491
92493 real_packet->extra_type_id = extra_type_id;
92494 real_packet->removal = removal;
92495 real_packet->eowner = eowner;
92496 real_packet->size = size;
92497
92499}
92500
92501static inline void init_packet_edit_startpos(struct packet_edit_startpos *packet)
92502{
92503 memset(packet, 0, sizeof(*packet));
92504}
92505
92506#define free_packet_edit_startpos(_packet) (void) 0
92507#define destroy_packet_edit_startpos free
92508
92510{
92511#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos(_packet)
92513
92514#ifdef FREECIV_JSON_CONNECTION
92515 struct plocation field_addr;
92516 {
92517 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92520 }
92521#endif /* FREECIV_JSON_CONNECTION */
92522
92523 log_packet_detailed("packet_edit_startpos_100: got info about ()");
92524
92525#ifdef FREECIV_JSON_CONNECTION
92526 field_addr.name = "id";
92527#endif /* FREECIV_JSON_CONNECTION */
92528
92529 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
92531 }
92532
92533#ifdef FREECIV_JSON_CONNECTION
92534 field_addr.name = "removal";
92535#endif /* FREECIV_JSON_CONNECTION */
92536
92537 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
92539 }
92540
92541#ifdef FREECIV_JSON_CONNECTION
92542 field_addr.name = "tag";
92543#endif /* FREECIV_JSON_CONNECTION */
92544
92545 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
92547 }
92548
92550#undef FREE_PACKET_STRUCT
92551}
92552
92553static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
92554{
92555 const struct packet_edit_startpos *real_packet = packet;
92556 int e;
92558
92559 log_packet_detailed("packet_edit_startpos_100: sending info about ()");
92560
92561#ifdef FREECIV_JSON_CONNECTION
92562 struct plocation field_addr;
92563 {
92564 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92567 }
92568#endif /* FREECIV_JSON_CONNECTION */
92569
92570#ifdef FREECIV_JSON_CONNECTION
92571 field_addr.name = "id";
92572#endif /* FREECIV_JSON_CONNECTION */
92573 e = 0;
92574
92575 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
92576
92577 if (e) {
92578 log_packet_detailed("'id' field error detected");
92579 }
92580
92581#ifdef FREECIV_JSON_CONNECTION
92582 field_addr.name = "removal";
92583#endif /* FREECIV_JSON_CONNECTION */
92584 e = 0;
92585
92586 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
92587
92588 if (e) {
92589 log_packet_detailed("'removal' field error detected");
92590 }
92591
92592#ifdef FREECIV_JSON_CONNECTION
92593 field_addr.name = "tag";
92594#endif /* FREECIV_JSON_CONNECTION */
92595 e = 0;
92596
92597 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
92598
92599 if (e) {
92600 log_packet_detailed("'tag' field error detected");
92601 }
92602
92604}
92605
92607{
92608 if (!pc->used) {
92609 log_error("WARNING: trying to send data to the closed connection %s",
92611 return -1;
92612 }
92613 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet != nullptr, -1,
92614 "Handler for PACKET_EDIT_STARTPOS not installed");
92615 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet(pc, packet);
92616}
92617
92618int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
92619{
92620 struct packet_edit_startpos packet, *real_packet = &packet;
92621
92622 real_packet->id = id;
92623 real_packet->removal = removal;
92624 real_packet->tag = tag;
92625
92627}
92628
92630{
92631 memset(packet, 0, sizeof(*packet));
92632}
92633
92634#define free_packet_edit_startpos_full(_packet) (void) 0
92635#define destroy_packet_edit_startpos_full free
92636
92638{
92639#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos_full(_packet)
92641
92642#ifdef FREECIV_JSON_CONNECTION
92643 struct plocation field_addr;
92644 {
92645 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92648 }
92649#endif /* FREECIV_JSON_CONNECTION */
92650
92651 log_packet_detailed("packet_edit_startpos_full_100: got info about ()");
92652
92653#ifdef FREECIV_JSON_CONNECTION
92654 field_addr.name = "id";
92655#endif /* FREECIV_JSON_CONNECTION */
92656
92657 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
92659 }
92660
92661#ifdef FREECIV_JSON_CONNECTION
92662 field_addr.name = "exclude";
92663#endif /* FREECIV_JSON_CONNECTION */
92664
92665 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->exclude)) {
92667 }
92668
92669#ifdef FREECIV_JSON_CONNECTION
92670 field_addr.name = "nations";
92671#endif /* FREECIV_JSON_CONNECTION */
92672
92673 if (!DIO_BV_GET(&din, &field_addr, real_packet->nations)) {
92675 }
92676
92678#undef FREE_PACKET_STRUCT
92679}
92680
92682{
92683 const struct packet_edit_startpos_full *real_packet = packet;
92684 int e;
92686
92687 log_packet_detailed("packet_edit_startpos_full_100: sending info about ()");
92688
92689#ifdef FREECIV_JSON_CONNECTION
92690 struct plocation field_addr;
92691 {
92692 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92695 }
92696#endif /* FREECIV_JSON_CONNECTION */
92697
92698#ifdef FREECIV_JSON_CONNECTION
92699 field_addr.name = "id";
92700#endif /* FREECIV_JSON_CONNECTION */
92701 e = 0;
92702
92703 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
92704
92705 if (e) {
92706 log_packet_detailed("'id' field error detected");
92707 }
92708
92709#ifdef FREECIV_JSON_CONNECTION
92710 field_addr.name = "exclude";
92711#endif /* FREECIV_JSON_CONNECTION */
92712 e = 0;
92713
92714 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->exclude);
92715
92716 if (e) {
92717 log_packet_detailed("'exclude' field error detected");
92718 }
92719
92720#ifdef FREECIV_JSON_CONNECTION
92721 field_addr.name = "nations";
92722#endif /* FREECIV_JSON_CONNECTION */
92723 e = 0;
92724
92725 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->nations);
92726
92727 if (e) {
92728 log_packet_detailed("'nations' field error detected");
92729 }
92730
92732}
92733
92735{
92736 if (!pc->used) {
92737 log_error("WARNING: trying to send data to the closed connection %s",
92739 return -1;
92740 }
92741 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet != nullptr, -1,
92742 "Handler for PACKET_EDIT_STARTPOS_FULL not installed");
92743 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet(pc, packet);
92744}
92745
92746static inline void init_packet_edit_tile(struct packet_edit_tile *packet)
92747{
92748 memset(packet, 0, sizeof(*packet));
92749}
92750
92751#define free_packet_edit_tile(_packet) (void) 0
92752#define destroy_packet_edit_tile free
92753
92754#ifdef FREECIV_DELTA_PROTOCOL
92756{
92757 const struct packet_edit_tile *key = (const struct packet_edit_tile *) vkey;
92758 genhash_val_t result = 0;
92759
92760 result += key->tile;
92761
92762 result &= 0xFFFFFFFF;
92763 return result;
92764}
92765
92766static bool cmp_packet_edit_tile_100(const void *vkey1, const void *vkey2)
92767{
92768 const struct packet_edit_tile *old = (const struct packet_edit_tile *) vkey1;
92769 const struct packet_edit_tile *real_packet = (const struct packet_edit_tile *) vkey2;
92770 bool differ;
92771
92772 differ = (old->tile != real_packet->tile);
92773
92774 return !differ;
92775}
92777#endif /* FREECIV_DELTA_PROTOCOL */
92778
92780{
92781#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile(_packet)
92783
92784#ifdef FREECIV_JSON_CONNECTION
92785 struct plocation field_addr;
92786 {
92787 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92790 }
92791#endif /* FREECIV_JSON_CONNECTION */
92792
92793#ifdef FREECIV_JSON_CONNECTION
92794 field_addr.name = "tile";
92795#endif /* FREECIV_JSON_CONNECTION */
92796
92797 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
92799 }
92800
92801 log_packet_detailed("packet_edit_tile_100: got info about (%d)",
92802 real_packet->tile);
92803
92804#ifdef FREECIV_DELTA_PROTOCOL
92806 struct packet_edit_tile *old;
92807 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE;
92808
92809 if (nullptr == *hash) {
92811 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
92812 }
92813
92814 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92815 *real_packet = *old;
92816 } else {
92817 /* packet is already initialized empty */
92818 log_packet_detailed(" no old info");
92819 }
92820
92821#ifdef FREECIV_JSON_CONNECTION
92822 field_addr.name = "fields";
92823#endif /* FREECIV_JSON_CONNECTION */
92824 DIO_BV_GET(&din, &field_addr, fields);
92825
92826 if (BV_ISSET(fields, 0)) {
92827 log_packet_detailed(" got field 'extras'");
92828
92829#ifdef FREECIV_JSON_CONNECTION
92830 field_addr.name = "extras";
92831#endif /* FREECIV_JSON_CONNECTION */
92832
92833 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
92835 }
92836 }
92837
92838 if (BV_ISSET(fields, 1)) {
92839 log_packet_detailed(" got field 'resource'");
92840
92841#ifdef FREECIV_JSON_CONNECTION
92842 field_addr.name = "resource";
92843#endif /* FREECIV_JSON_CONNECTION */
92844
92845 {
92846 int readin;
92847
92848 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92850 }
92851 real_packet->resource = readin;
92852 }
92853 }
92854
92855 if (BV_ISSET(fields, 2)) {
92856 log_packet_detailed(" got field 'terrain'");
92857
92858#ifdef FREECIV_JSON_CONNECTION
92859 field_addr.name = "terrain";
92860#endif /* FREECIV_JSON_CONNECTION */
92861
92862 {
92863 int readin;
92864
92865 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92867 }
92868 real_packet->terrain = readin;
92869 }
92870 }
92871
92872 if (BV_ISSET(fields, 3)) {
92873 log_packet_detailed(" got field 'startpos_nation'");
92874
92875#ifdef FREECIV_JSON_CONNECTION
92876 field_addr.name = "startpos_nation";
92877#endif /* FREECIV_JSON_CONNECTION */
92878
92879 {
92880 int readin;
92881
92882 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
92883 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
92884 }
92885 real_packet->startpos_nation = readin;
92886 }
92887 }
92888
92889 if (BV_ISSET(fields, 4)) {
92890 log_packet_detailed(" got field 'eowner'");
92891
92892#ifdef FREECIV_JSON_CONNECTION
92893 field_addr.name = "eowner";
92894#endif /* FREECIV_JSON_CONNECTION */
92895
92896 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92898 }
92899 }
92900
92901 if (BV_ISSET(fields, 5)) {
92902 log_packet_detailed(" got field 'label'");
92903
92904#ifdef FREECIV_JSON_CONNECTION
92905 field_addr.name = "label";
92906#endif /* FREECIV_JSON_CONNECTION */
92907
92908 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
92910 }
92911 }
92912
92913 if (nullptr == old) {
92914 old = fc_malloc(sizeof(*old));
92916 *old = *real_packet;
92918 } else {
92919 *old = *real_packet;
92920 }
92921
92922#else /* FREECIV_DELTA_PROTOCOL */
92923#ifdef FREECIV_JSON_CONNECTION
92924 field_addr.name = "extras";
92925#endif /* FREECIV_JSON_CONNECTION */
92926
92927 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
92929 }
92930
92931#ifdef FREECIV_JSON_CONNECTION
92932 field_addr.name = "resource";
92933#endif /* FREECIV_JSON_CONNECTION */
92934
92935 {
92936 int readin;
92937
92938 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92940 }
92941 real_packet->resource = readin;
92942 }
92943
92944#ifdef FREECIV_JSON_CONNECTION
92945 field_addr.name = "terrain";
92946#endif /* FREECIV_JSON_CONNECTION */
92947
92948 {
92949 int readin;
92950
92951 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92953 }
92954 real_packet->terrain = readin;
92955 }
92956
92957#ifdef FREECIV_JSON_CONNECTION
92958 field_addr.name = "startpos_nation";
92959#endif /* FREECIV_JSON_CONNECTION */
92960
92961 {
92962 int readin;
92963
92964 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
92965 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
92966 }
92967 real_packet->startpos_nation = readin;
92968 }
92969
92970#ifdef FREECIV_JSON_CONNECTION
92971 field_addr.name = "eowner";
92972#endif /* FREECIV_JSON_CONNECTION */
92973
92974 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92976 }
92977
92978#ifdef FREECIV_JSON_CONNECTION
92979 field_addr.name = "label";
92980#endif /* FREECIV_JSON_CONNECTION */
92981
92982 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
92984 }
92985#endif /* FREECIV_DELTA_PROTOCOL */
92986
92988#undef FREE_PACKET_STRUCT
92989}
92990
92991static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
92992{
92993 const struct packet_edit_tile *real_packet = packet;
92994 int e;
92996
92997 log_packet_detailed("packet_edit_tile_100: sending info about (%d)",
92998 real_packet->tile);
92999
93000#ifdef FREECIV_DELTA_PROTOCOL
93002 struct packet_edit_tile *old;
93003 bool differ;
93004 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE;
93005
93006 if (nullptr == *hash) {
93008 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
93009 }
93010 BV_CLR_ALL(fields);
93011
93012 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93013 old = fc_malloc(sizeof(*old));
93014 /* temporary bitcopy just to insert correctly */
93015 *old = *real_packet;
93018 }
93019
93020 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
93021 if (differ) {
93022 BV_SET(fields, 0);
93023 }
93024
93025 differ = (old->resource != real_packet->resource);
93026 if (differ) {
93027 BV_SET(fields, 1);
93028 }
93029
93030 differ = (old->terrain != real_packet->terrain);
93031 if (differ) {
93032 BV_SET(fields, 2);
93033 }
93034
93035 differ = (old->startpos_nation != real_packet->startpos_nation);
93036 if (differ) {
93037 BV_SET(fields, 3);
93038 }
93039
93040 differ = (old->eowner != real_packet->eowner);
93041 if (differ) {
93042 BV_SET(fields, 4);
93043 }
93044
93045 differ = (strcmp(old->label, real_packet->label) != 0);
93046 if (differ) {
93047 BV_SET(fields, 5);
93048 }
93049#endif /* FREECIV_DELTA_PROTOCOL */
93050
93051#ifdef FREECIV_JSON_CONNECTION
93052 struct plocation field_addr;
93053 {
93054 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93057 }
93058#endif /* FREECIV_JSON_CONNECTION */
93059
93060#ifdef FREECIV_JSON_CONNECTION
93061 field_addr.name = "tile";
93062#endif /* FREECIV_JSON_CONNECTION */
93063 e = 0;
93064
93065 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93066
93067 if (e) {
93068 log_packet_detailed("'tile' field error detected");
93069 }
93070
93071#ifdef FREECIV_DELTA_PROTOCOL
93072#ifdef FREECIV_JSON_CONNECTION
93073 field_addr.name = "fields";
93074#endif /* FREECIV_JSON_CONNECTION */
93075 e = 0;
93076 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93077 if (e) {
93078 log_packet_detailed("fields bitvector error detected");
93079 }
93080
93081 if (BV_ISSET(fields, 0)) {
93082 log_packet_detailed(" field 'extras' has changed");
93083
93084#ifdef FREECIV_JSON_CONNECTION
93085 field_addr.name = "extras";
93086#endif /* FREECIV_JSON_CONNECTION */
93087 e = 0;
93088
93089 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
93090
93091 if (e) {
93092 log_packet_detailed("'extras' field error detected");
93093 }
93094 }
93095
93096 if (BV_ISSET(fields, 1)) {
93097 log_packet_detailed(" field 'resource' has changed");
93098
93099#ifdef FREECIV_JSON_CONNECTION
93100 field_addr.name = "resource";
93101#endif /* FREECIV_JSON_CONNECTION */
93102 e = 0;
93103
93104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
93105
93106 if (e) {
93107 log_packet_detailed("'resource' field error detected");
93108 }
93109 }
93110
93111 if (BV_ISSET(fields, 2)) {
93112 log_packet_detailed(" field 'terrain' has changed");
93113
93114#ifdef FREECIV_JSON_CONNECTION
93115 field_addr.name = "terrain";
93116#endif /* FREECIV_JSON_CONNECTION */
93117 e = 0;
93118
93119 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
93120
93121 if (e) {
93122 log_packet_detailed("'terrain' field error detected");
93123 }
93124 }
93125
93126 if (BV_ISSET(fields, 3)) {
93127 log_packet_detailed(" field 'startpos_nation' has changed");
93128
93129#ifdef FREECIV_JSON_CONNECTION
93130 field_addr.name = "startpos_nation";
93131#endif /* FREECIV_JSON_CONNECTION */
93132 e = 0;
93133
93134 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
93135
93136 if (e) {
93137 log_packet_detailed("'startpos_nation' field error detected");
93138 }
93139 }
93140
93141 if (BV_ISSET(fields, 4)) {
93142 log_packet_detailed(" field 'eowner' has changed");
93143
93144#ifdef FREECIV_JSON_CONNECTION
93145 field_addr.name = "eowner";
93146#endif /* FREECIV_JSON_CONNECTION */
93147 e = 0;
93148
93149 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93150
93151 if (e) {
93152 log_packet_detailed("'eowner' field error detected");
93153 }
93154 }
93155
93156 if (BV_ISSET(fields, 5)) {
93157 log_packet_detailed(" field 'label' has changed");
93158
93159#ifdef FREECIV_JSON_CONNECTION
93160 field_addr.name = "label";
93161#endif /* FREECIV_JSON_CONNECTION */
93162 e = 0;
93163
93164 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
93165
93166 if (e) {
93167 log_packet_detailed("'label' field error detected");
93168 }
93169 }
93170
93171 *old = *real_packet;
93172
93173#else /* FREECIV_DELTA_PROTOCOL */
93174#ifdef FREECIV_JSON_CONNECTION
93175 field_addr.name = "extras";
93176#endif /* FREECIV_JSON_CONNECTION */
93177 e = 0;
93178
93179 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
93180
93181 if (e) {
93182 log_packet_detailed("'extras' field error detected");
93183 }
93184
93185#ifdef FREECIV_JSON_CONNECTION
93186 field_addr.name = "resource";
93187#endif /* FREECIV_JSON_CONNECTION */
93188 e = 0;
93189
93190 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
93191
93192 if (e) {
93193 log_packet_detailed("'resource' field error detected");
93194 }
93195
93196#ifdef FREECIV_JSON_CONNECTION
93197 field_addr.name = "terrain";
93198#endif /* FREECIV_JSON_CONNECTION */
93199 e = 0;
93200
93201 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
93202
93203 if (e) {
93204 log_packet_detailed("'terrain' field error detected");
93205 }
93206
93207#ifdef FREECIV_JSON_CONNECTION
93208 field_addr.name = "startpos_nation";
93209#endif /* FREECIV_JSON_CONNECTION */
93210 e = 0;
93211
93212 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
93213
93214 if (e) {
93215 log_packet_detailed("'startpos_nation' field error detected");
93216 }
93217
93218#ifdef FREECIV_JSON_CONNECTION
93219 field_addr.name = "eowner";
93220#endif /* FREECIV_JSON_CONNECTION */
93221 e = 0;
93222
93223 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93224
93225 if (e) {
93226 log_packet_detailed("'eowner' field error detected");
93227 }
93228
93229#ifdef FREECIV_JSON_CONNECTION
93230 field_addr.name = "label";
93231#endif /* FREECIV_JSON_CONNECTION */
93232 e = 0;
93233
93234 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
93235
93236 if (e) {
93237 log_packet_detailed("'label' field error detected");
93238 }
93239#endif /* FREECIV_DELTA_PROTOCOL */
93240
93242}
93243
93244int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
93245{
93246 if (!pc->used) {
93247 log_error("WARNING: trying to send data to the closed connection %s",
93249 return -1;
93250 }
93251 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE].packet != nullptr, -1,
93252 "Handler for PACKET_EDIT_TILE not installed");
93253 return pc->phs.handlers->send[PACKET_EDIT_TILE].packet(pc, packet);
93254}
93255
93257{
93258 memset(packet, 0, sizeof(*packet));
93259}
93260
93261#define free_packet_edit_unit_create(_packet) (void) 0
93262#define destroy_packet_edit_unit_create free
93263
93264#ifdef FREECIV_DELTA_PROTOCOL
93265#define hash_packet_edit_unit_create_100 hash_const
93266#define cmp_packet_edit_unit_create_100 cmp_const
93268#endif /* FREECIV_DELTA_PROTOCOL */
93269
93271{
93272#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_create(_packet)
93274
93275#ifdef FREECIV_JSON_CONNECTION
93276 struct plocation field_addr;
93277 {
93278 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93281 }
93282#endif /* FREECIV_JSON_CONNECTION */
93283
93284 log_packet_detailed("packet_edit_unit_create_100: got info about ()");
93285
93286#ifdef FREECIV_DELTA_PROTOCOL
93289 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_CREATE;
93290
93291 if (nullptr == *hash) {
93293 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
93294 }
93295
93296 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93297 *real_packet = *old;
93298 } else {
93299 /* packet is already initialized empty */
93300 log_packet_detailed(" no old info");
93301 }
93302
93303#ifdef FREECIV_JSON_CONNECTION
93304 field_addr.name = "fields";
93305#endif /* FREECIV_JSON_CONNECTION */
93306 DIO_BV_GET(&din, &field_addr, fields);
93307
93308 if (BV_ISSET(fields, 0)) {
93309 log_packet_detailed(" got field 'owner'");
93310
93311#ifdef FREECIV_JSON_CONNECTION
93312 field_addr.name = "owner";
93313#endif /* FREECIV_JSON_CONNECTION */
93314
93315 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93317 }
93318 }
93319
93320 if (BV_ISSET(fields, 1)) {
93321 log_packet_detailed(" got field 'tile'");
93322
93323#ifdef FREECIV_JSON_CONNECTION
93324 field_addr.name = "tile";
93325#endif /* FREECIV_JSON_CONNECTION */
93326
93327 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93329 }
93330 }
93331
93332 if (BV_ISSET(fields, 2)) {
93333 log_packet_detailed(" got field 'type'");
93334
93335#ifdef FREECIV_JSON_CONNECTION
93336 field_addr.name = "type";
93337#endif /* FREECIV_JSON_CONNECTION */
93338
93339 {
93340 int readin;
93341
93342 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93344 }
93345 real_packet->type = readin;
93346 }
93347 }
93348
93349 if (BV_ISSET(fields, 3)) {
93350 log_packet_detailed(" got field 'count'");
93351
93352#ifdef FREECIV_JSON_CONNECTION
93353 field_addr.name = "count";
93354#endif /* FREECIV_JSON_CONNECTION */
93355
93356 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93358 }
93359 }
93360
93361 if (BV_ISSET(fields, 4)) {
93362 log_packet_detailed(" got field 'tag'");
93363
93364#ifdef FREECIV_JSON_CONNECTION
93365 field_addr.name = "tag";
93366#endif /* FREECIV_JSON_CONNECTION */
93367
93368 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
93370 }
93371 }
93372
93373 if (nullptr == old) {
93374 old = fc_malloc(sizeof(*old));
93376 *old = *real_packet;
93378 } else {
93379 *old = *real_packet;
93380 }
93381
93382#else /* FREECIV_DELTA_PROTOCOL */
93383#ifdef FREECIV_JSON_CONNECTION
93384 field_addr.name = "owner";
93385#endif /* FREECIV_JSON_CONNECTION */
93386
93387 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93389 }
93390
93391#ifdef FREECIV_JSON_CONNECTION
93392 field_addr.name = "tile";
93393#endif /* FREECIV_JSON_CONNECTION */
93394
93395 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93397 }
93398
93399#ifdef FREECIV_JSON_CONNECTION
93400 field_addr.name = "type";
93401#endif /* FREECIV_JSON_CONNECTION */
93402
93403 {
93404 int readin;
93405
93406 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93408 }
93409 real_packet->type = readin;
93410 }
93411
93412#ifdef FREECIV_JSON_CONNECTION
93413 field_addr.name = "count";
93414#endif /* FREECIV_JSON_CONNECTION */
93415
93416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93418 }
93419
93420#ifdef FREECIV_JSON_CONNECTION
93421 field_addr.name = "tag";
93422#endif /* FREECIV_JSON_CONNECTION */
93423
93424 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
93426 }
93427#endif /* FREECIV_DELTA_PROTOCOL */
93428
93430#undef FREE_PACKET_STRUCT
93431}
93432
93434{
93435 const struct packet_edit_unit_create *real_packet = packet;
93436 int e;
93438
93439 log_packet_detailed("packet_edit_unit_create_100: sending info about ()");
93440
93441#ifdef FREECIV_DELTA_PROTOCOL
93444 bool differ;
93445 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_CREATE;
93446
93447 if (nullptr == *hash) {
93449 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
93450 }
93451 BV_CLR_ALL(fields);
93452
93453 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93454 old = fc_malloc(sizeof(*old));
93455 /* temporary bitcopy just to insert correctly */
93456 *old = *real_packet;
93459 }
93460
93461 differ = (old->owner != real_packet->owner);
93462 if (differ) {
93463 BV_SET(fields, 0);
93464 }
93465
93466 differ = (old->tile != real_packet->tile);
93467 if (differ) {
93468 BV_SET(fields, 1);
93469 }
93470
93471 differ = (old->type != real_packet->type);
93472 if (differ) {
93473 BV_SET(fields, 2);
93474 }
93475
93476 differ = (old->count != real_packet->count);
93477 if (differ) {
93478 BV_SET(fields, 3);
93479 }
93480
93481 differ = (old->tag != real_packet->tag);
93482 if (differ) {
93483 BV_SET(fields, 4);
93484 }
93485#endif /* FREECIV_DELTA_PROTOCOL */
93486
93487#ifdef FREECIV_JSON_CONNECTION
93488 struct plocation field_addr;
93489 {
93490 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93493 }
93494#endif /* FREECIV_JSON_CONNECTION */
93495
93496#ifdef FREECIV_DELTA_PROTOCOL
93497#ifdef FREECIV_JSON_CONNECTION
93498 field_addr.name = "fields";
93499#endif /* FREECIV_JSON_CONNECTION */
93500 e = 0;
93501 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93502 if (e) {
93503 log_packet_detailed("fields bitvector error detected");
93504 }
93505
93506 if (BV_ISSET(fields, 0)) {
93507 log_packet_detailed(" field 'owner' has changed");
93508
93509#ifdef FREECIV_JSON_CONNECTION
93510 field_addr.name = "owner";
93511#endif /* FREECIV_JSON_CONNECTION */
93512 e = 0;
93513
93514 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93515
93516 if (e) {
93517 log_packet_detailed("'owner' field error detected");
93518 }
93519 }
93520
93521 if (BV_ISSET(fields, 1)) {
93522 log_packet_detailed(" field 'tile' has changed");
93523
93524#ifdef FREECIV_JSON_CONNECTION
93525 field_addr.name = "tile";
93526#endif /* FREECIV_JSON_CONNECTION */
93527 e = 0;
93528
93529 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93530
93531 if (e) {
93532 log_packet_detailed("'tile' field error detected");
93533 }
93534 }
93535
93536 if (BV_ISSET(fields, 2)) {
93537 log_packet_detailed(" field 'type' has changed");
93538
93539#ifdef FREECIV_JSON_CONNECTION
93540 field_addr.name = "type";
93541#endif /* FREECIV_JSON_CONNECTION */
93542 e = 0;
93543
93544 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93545
93546 if (e) {
93547 log_packet_detailed("'type' field error detected");
93548 }
93549 }
93550
93551 if (BV_ISSET(fields, 3)) {
93552 log_packet_detailed(" field 'count' has changed");
93553
93554#ifdef FREECIV_JSON_CONNECTION
93555 field_addr.name = "count";
93556#endif /* FREECIV_JSON_CONNECTION */
93557 e = 0;
93558
93559 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93560
93561 if (e) {
93562 log_packet_detailed("'count' field error detected");
93563 }
93564 }
93565
93566 if (BV_ISSET(fields, 4)) {
93567 log_packet_detailed(" field 'tag' has changed");
93568
93569#ifdef FREECIV_JSON_CONNECTION
93570 field_addr.name = "tag";
93571#endif /* FREECIV_JSON_CONNECTION */
93572 e = 0;
93573
93574 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
93575
93576 if (e) {
93577 log_packet_detailed("'tag' field error detected");
93578 }
93579 }
93580
93581 *old = *real_packet;
93582
93583#else /* FREECIV_DELTA_PROTOCOL */
93584#ifdef FREECIV_JSON_CONNECTION
93585 field_addr.name = "owner";
93586#endif /* FREECIV_JSON_CONNECTION */
93587 e = 0;
93588
93589 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93590
93591 if (e) {
93592 log_packet_detailed("'owner' field error detected");
93593 }
93594
93595#ifdef FREECIV_JSON_CONNECTION
93596 field_addr.name = "tile";
93597#endif /* FREECIV_JSON_CONNECTION */
93598 e = 0;
93599
93600 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93601
93602 if (e) {
93603 log_packet_detailed("'tile' field error detected");
93604 }
93605
93606#ifdef FREECIV_JSON_CONNECTION
93607 field_addr.name = "type";
93608#endif /* FREECIV_JSON_CONNECTION */
93609 e = 0;
93610
93611 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93612
93613 if (e) {
93614 log_packet_detailed("'type' field error detected");
93615 }
93616
93617#ifdef FREECIV_JSON_CONNECTION
93618 field_addr.name = "count";
93619#endif /* FREECIV_JSON_CONNECTION */
93620 e = 0;
93621
93622 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93623
93624 if (e) {
93625 log_packet_detailed("'count' field error detected");
93626 }
93627
93628#ifdef FREECIV_JSON_CONNECTION
93629 field_addr.name = "tag";
93630#endif /* FREECIV_JSON_CONNECTION */
93631 e = 0;
93632
93633 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
93634
93635 if (e) {
93636 log_packet_detailed("'tag' field error detected");
93637 }
93638#endif /* FREECIV_DELTA_PROTOCOL */
93639
93641}
93642
93644{
93645 if (!pc->used) {
93646 log_error("WARNING: trying to send data to the closed connection %s",
93648 return -1;
93649 }
93650 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet != nullptr, -1,
93651 "Handler for PACKET_EDIT_UNIT_CREATE not installed");
93652 return pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet(pc, packet);
93653}
93654
93655int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
93656{
93657 struct packet_edit_unit_create packet, *real_packet = &packet;
93658
93661 real_packet->type = type;
93662 real_packet->count = count;
93663 real_packet->tag = tag;
93664
93666}
93667
93669{
93670 memset(packet, 0, sizeof(*packet));
93671}
93672
93673#define free_packet_edit_unit_remove(_packet) (void) 0
93674#define destroy_packet_edit_unit_remove free
93675
93676#ifdef FREECIV_DELTA_PROTOCOL
93677#define hash_packet_edit_unit_remove_100 hash_const
93678#define cmp_packet_edit_unit_remove_100 cmp_const
93680#endif /* FREECIV_DELTA_PROTOCOL */
93681
93683{
93684#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove(_packet)
93686
93687#ifdef FREECIV_JSON_CONNECTION
93688 struct plocation field_addr;
93689 {
93690 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93693 }
93694#endif /* FREECIV_JSON_CONNECTION */
93695
93696 log_packet_detailed("packet_edit_unit_remove_100: got info about ()");
93697
93698#ifdef FREECIV_DELTA_PROTOCOL
93701 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE;
93702
93703 if (nullptr == *hash) {
93705 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
93706 }
93707
93708 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93709 *real_packet = *old;
93710 } else {
93711 /* packet is already initialized empty */
93712 log_packet_detailed(" no old info");
93713 }
93714
93715#ifdef FREECIV_JSON_CONNECTION
93716 field_addr.name = "fields";
93717#endif /* FREECIV_JSON_CONNECTION */
93718 DIO_BV_GET(&din, &field_addr, fields);
93719
93720 if (BV_ISSET(fields, 0)) {
93721 log_packet_detailed(" got field 'owner'");
93722
93723#ifdef FREECIV_JSON_CONNECTION
93724 field_addr.name = "owner";
93725#endif /* FREECIV_JSON_CONNECTION */
93726
93727 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93729 }
93730 }
93731
93732 if (BV_ISSET(fields, 1)) {
93733 log_packet_detailed(" got field 'tile'");
93734
93735#ifdef FREECIV_JSON_CONNECTION
93736 field_addr.name = "tile";
93737#endif /* FREECIV_JSON_CONNECTION */
93738
93739 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93741 }
93742 }
93743
93744 if (BV_ISSET(fields, 2)) {
93745 log_packet_detailed(" got field 'type'");
93746
93747#ifdef FREECIV_JSON_CONNECTION
93748 field_addr.name = "type";
93749#endif /* FREECIV_JSON_CONNECTION */
93750
93751 {
93752 int readin;
93753
93754 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93756 }
93757 real_packet->type = readin;
93758 }
93759 }
93760
93761 if (BV_ISSET(fields, 3)) {
93762 log_packet_detailed(" got field 'count'");
93763
93764#ifdef FREECIV_JSON_CONNECTION
93765 field_addr.name = "count";
93766#endif /* FREECIV_JSON_CONNECTION */
93767
93768 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93770 }
93771 }
93772
93773 if (nullptr == old) {
93774 old = fc_malloc(sizeof(*old));
93776 *old = *real_packet;
93778 } else {
93779 *old = *real_packet;
93780 }
93781
93782#else /* FREECIV_DELTA_PROTOCOL */
93783#ifdef FREECIV_JSON_CONNECTION
93784 field_addr.name = "owner";
93785#endif /* FREECIV_JSON_CONNECTION */
93786
93787 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93789 }
93790
93791#ifdef FREECIV_JSON_CONNECTION
93792 field_addr.name = "tile";
93793#endif /* FREECIV_JSON_CONNECTION */
93794
93795 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93797 }
93798
93799#ifdef FREECIV_JSON_CONNECTION
93800 field_addr.name = "type";
93801#endif /* FREECIV_JSON_CONNECTION */
93802
93803 {
93804 int readin;
93805
93806 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93808 }
93809 real_packet->type = readin;
93810 }
93811
93812#ifdef FREECIV_JSON_CONNECTION
93813 field_addr.name = "count";
93814#endif /* FREECIV_JSON_CONNECTION */
93815
93816 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93818 }
93819#endif /* FREECIV_DELTA_PROTOCOL */
93820
93822#undef FREE_PACKET_STRUCT
93823}
93824
93826{
93827 const struct packet_edit_unit_remove *real_packet = packet;
93828 int e;
93830
93831 log_packet_detailed("packet_edit_unit_remove_100: sending info about ()");
93832
93833#ifdef FREECIV_DELTA_PROTOCOL
93836 bool differ;
93837 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE;
93838
93839 if (nullptr == *hash) {
93841 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
93842 }
93843 BV_CLR_ALL(fields);
93844
93845 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93846 old = fc_malloc(sizeof(*old));
93847 /* temporary bitcopy just to insert correctly */
93848 *old = *real_packet;
93851 }
93852
93853 differ = (old->owner != real_packet->owner);
93854 if (differ) {
93855 BV_SET(fields, 0);
93856 }
93857
93858 differ = (old->tile != real_packet->tile);
93859 if (differ) {
93860 BV_SET(fields, 1);
93861 }
93862
93863 differ = (old->type != real_packet->type);
93864 if (differ) {
93865 BV_SET(fields, 2);
93866 }
93867
93868 differ = (old->count != real_packet->count);
93869 if (differ) {
93870 BV_SET(fields, 3);
93871 }
93872#endif /* FREECIV_DELTA_PROTOCOL */
93873
93874#ifdef FREECIV_JSON_CONNECTION
93875 struct plocation field_addr;
93876 {
93877 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93880 }
93881#endif /* FREECIV_JSON_CONNECTION */
93882
93883#ifdef FREECIV_DELTA_PROTOCOL
93884#ifdef FREECIV_JSON_CONNECTION
93885 field_addr.name = "fields";
93886#endif /* FREECIV_JSON_CONNECTION */
93887 e = 0;
93888 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93889 if (e) {
93890 log_packet_detailed("fields bitvector error detected");
93891 }
93892
93893 if (BV_ISSET(fields, 0)) {
93894 log_packet_detailed(" field 'owner' has changed");
93895
93896#ifdef FREECIV_JSON_CONNECTION
93897 field_addr.name = "owner";
93898#endif /* FREECIV_JSON_CONNECTION */
93899 e = 0;
93900
93901 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93902
93903 if (e) {
93904 log_packet_detailed("'owner' field error detected");
93905 }
93906 }
93907
93908 if (BV_ISSET(fields, 1)) {
93909 log_packet_detailed(" field 'tile' has changed");
93910
93911#ifdef FREECIV_JSON_CONNECTION
93912 field_addr.name = "tile";
93913#endif /* FREECIV_JSON_CONNECTION */
93914 e = 0;
93915
93916 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93917
93918 if (e) {
93919 log_packet_detailed("'tile' field error detected");
93920 }
93921 }
93922
93923 if (BV_ISSET(fields, 2)) {
93924 log_packet_detailed(" field 'type' has changed");
93925
93926#ifdef FREECIV_JSON_CONNECTION
93927 field_addr.name = "type";
93928#endif /* FREECIV_JSON_CONNECTION */
93929 e = 0;
93930
93931 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93932
93933 if (e) {
93934 log_packet_detailed("'type' field error detected");
93935 }
93936 }
93937
93938 if (BV_ISSET(fields, 3)) {
93939 log_packet_detailed(" field 'count' has changed");
93940
93941#ifdef FREECIV_JSON_CONNECTION
93942 field_addr.name = "count";
93943#endif /* FREECIV_JSON_CONNECTION */
93944 e = 0;
93945
93946 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93947
93948 if (e) {
93949 log_packet_detailed("'count' field error detected");
93950 }
93951 }
93952
93953 *old = *real_packet;
93954
93955#else /* FREECIV_DELTA_PROTOCOL */
93956#ifdef FREECIV_JSON_CONNECTION
93957 field_addr.name = "owner";
93958#endif /* FREECIV_JSON_CONNECTION */
93959 e = 0;
93960
93961 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93962
93963 if (e) {
93964 log_packet_detailed("'owner' field error detected");
93965 }
93966
93967#ifdef FREECIV_JSON_CONNECTION
93968 field_addr.name = "tile";
93969#endif /* FREECIV_JSON_CONNECTION */
93970 e = 0;
93971
93972 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93973
93974 if (e) {
93975 log_packet_detailed("'tile' field error detected");
93976 }
93977
93978#ifdef FREECIV_JSON_CONNECTION
93979 field_addr.name = "type";
93980#endif /* FREECIV_JSON_CONNECTION */
93981 e = 0;
93982
93983 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93984
93985 if (e) {
93986 log_packet_detailed("'type' field error detected");
93987 }
93988
93989#ifdef FREECIV_JSON_CONNECTION
93990 field_addr.name = "count";
93991#endif /* FREECIV_JSON_CONNECTION */
93992 e = 0;
93993
93994 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93995
93996 if (e) {
93997 log_packet_detailed("'count' field error detected");
93998 }
93999#endif /* FREECIV_DELTA_PROTOCOL */
94000
94002}
94003
94005{
94006 if (!pc->used) {
94007 log_error("WARNING: trying to send data to the closed connection %s",
94009 return -1;
94010 }
94011 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet != nullptr, -1,
94012 "Handler for PACKET_EDIT_UNIT_REMOVE not installed");
94013 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet(pc, packet);
94014}
94015
94017{
94018 struct packet_edit_unit_remove packet, *real_packet = &packet;
94019
94022 real_packet->type = type;
94023 real_packet->count = count;
94024
94026}
94027
94029{
94030 memset(packet, 0, sizeof(*packet));
94031}
94032
94033#define free_packet_edit_unit_remove_by_id(_packet) (void) 0
94034#define destroy_packet_edit_unit_remove_by_id free
94035
94036#ifdef FREECIV_DELTA_PROTOCOL
94037#define hash_packet_edit_unit_remove_by_id_100 hash_const
94038#define cmp_packet_edit_unit_remove_by_id_100 cmp_const
94040#endif /* FREECIV_DELTA_PROTOCOL */
94041
94043{
94044#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove_by_id(_packet)
94046
94047#ifdef FREECIV_JSON_CONNECTION
94048 struct plocation field_addr;
94049 {
94050 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94053 }
94054#endif /* FREECIV_JSON_CONNECTION */
94055
94056 log_packet_detailed("packet_edit_unit_remove_by_id_100: got info about ()");
94057
94058#ifdef FREECIV_DELTA_PROTOCOL
94061 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE_BY_ID;
94062
94063 if (nullptr == *hash) {
94065 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
94066 }
94067
94068 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94069 *real_packet = *old;
94070 } else {
94071 /* packet is already initialized empty */
94072 log_packet_detailed(" no old info");
94073 }
94074
94075#ifdef FREECIV_JSON_CONNECTION
94076 field_addr.name = "fields";
94077#endif /* FREECIV_JSON_CONNECTION */
94078 DIO_BV_GET(&din, &field_addr, fields);
94079
94080 if (BV_ISSET(fields, 0)) {
94081 log_packet_detailed(" got field 'id'");
94082
94083#ifdef FREECIV_JSON_CONNECTION
94084 field_addr.name = "id";
94085#endif /* FREECIV_JSON_CONNECTION */
94086
94087 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94089 }
94090 }
94091
94092 if (nullptr == old) {
94093 old = fc_malloc(sizeof(*old));
94095 *old = *real_packet;
94097 } else {
94098 *old = *real_packet;
94099 }
94100
94101#else /* FREECIV_DELTA_PROTOCOL */
94102#ifdef FREECIV_JSON_CONNECTION
94103 field_addr.name = "id";
94104#endif /* FREECIV_JSON_CONNECTION */
94105
94106 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94108 }
94109#endif /* FREECIV_DELTA_PROTOCOL */
94110
94112#undef FREE_PACKET_STRUCT
94113}
94114
94116{
94117 const struct packet_edit_unit_remove_by_id *real_packet = packet;
94118 int e;
94120
94121 log_packet_detailed("packet_edit_unit_remove_by_id_100: sending info about ()");
94122
94123#ifdef FREECIV_DELTA_PROTOCOL
94126 bool differ;
94127 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE_BY_ID;
94128
94129 if (nullptr == *hash) {
94131 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
94132 }
94133 BV_CLR_ALL(fields);
94134
94135 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94136 old = fc_malloc(sizeof(*old));
94137 /* temporary bitcopy just to insert correctly */
94138 *old = *real_packet;
94141 }
94142
94143 differ = (old->id != real_packet->id);
94144 if (differ) {
94145 BV_SET(fields, 0);
94146 }
94147#endif /* FREECIV_DELTA_PROTOCOL */
94148
94149#ifdef FREECIV_JSON_CONNECTION
94150 struct plocation field_addr;
94151 {
94152 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94155 }
94156#endif /* FREECIV_JSON_CONNECTION */
94157
94158#ifdef FREECIV_DELTA_PROTOCOL
94159#ifdef FREECIV_JSON_CONNECTION
94160 field_addr.name = "fields";
94161#endif /* FREECIV_JSON_CONNECTION */
94162 e = 0;
94163 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94164 if (e) {
94165 log_packet_detailed("fields bitvector error detected");
94166 }
94167
94168 if (BV_ISSET(fields, 0)) {
94169 log_packet_detailed(" field 'id' has changed");
94170
94171#ifdef FREECIV_JSON_CONNECTION
94172 field_addr.name = "id";
94173#endif /* FREECIV_JSON_CONNECTION */
94174 e = 0;
94175
94176 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94177
94178 if (e) {
94179 log_packet_detailed("'id' field error detected");
94180 }
94181 }
94182
94183 *old = *real_packet;
94184
94185#else /* FREECIV_DELTA_PROTOCOL */
94186#ifdef FREECIV_JSON_CONNECTION
94187 field_addr.name = "id";
94188#endif /* FREECIV_JSON_CONNECTION */
94189 e = 0;
94190
94191 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94192
94193 if (e) {
94194 log_packet_detailed("'id' field error detected");
94195 }
94196#endif /* FREECIV_DELTA_PROTOCOL */
94197
94199}
94200
94202{
94203 if (!pc->used) {
94204 log_error("WARNING: trying to send data to the closed connection %s",
94206 return -1;
94207 }
94208 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet != nullptr, -1,
94209 "Handler for PACKET_EDIT_UNIT_REMOVE_BY_ID not installed");
94210 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet(pc, packet);
94211}
94212
94214{
94215 struct packet_edit_unit_remove_by_id packet, *real_packet = &packet;
94216
94217 real_packet->id = id;
94218
94220}
94221
94222static inline void init_packet_edit_unit(struct packet_edit_unit *packet)
94223{
94224 memset(packet, 0, sizeof(*packet));
94225}
94226
94227#define free_packet_edit_unit(_packet) (void) 0
94228#define destroy_packet_edit_unit free
94229
94230#ifdef FREECIV_DELTA_PROTOCOL
94232{
94233 const struct packet_edit_unit *key = (const struct packet_edit_unit *) vkey;
94234 genhash_val_t result = 0;
94235
94236 result += key->id;
94237
94238 result &= 0xFFFFFFFF;
94239 return result;
94240}
94241
94242static bool cmp_packet_edit_unit_100(const void *vkey1, const void *vkey2)
94243{
94244 const struct packet_edit_unit *old = (const struct packet_edit_unit *) vkey1;
94245 const struct packet_edit_unit *real_packet = (const struct packet_edit_unit *) vkey2;
94246 bool differ;
94247
94248 differ = (old->id != real_packet->id);
94249
94250 return !differ;
94251}
94253#endif /* FREECIV_DELTA_PROTOCOL */
94254
94256{
94257#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit(_packet)
94259
94260#ifdef FREECIV_JSON_CONNECTION
94261 struct plocation field_addr;
94262 {
94263 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94266 }
94267#endif /* FREECIV_JSON_CONNECTION */
94268
94269#ifdef FREECIV_JSON_CONNECTION
94270 field_addr.name = "id";
94271#endif /* FREECIV_JSON_CONNECTION */
94272
94273 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94275 }
94276
94277 log_packet_detailed("packet_edit_unit_100: got info about (%d)",
94278 real_packet->id);
94279
94280#ifdef FREECIV_DELTA_PROTOCOL
94282 struct packet_edit_unit *old;
94283 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT;
94284
94285 if (nullptr == *hash) {
94287 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
94288 }
94289
94290 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94291 *real_packet = *old;
94292 } else {
94293 /* packet is already initialized empty */
94294 log_packet_detailed(" no old info");
94295 }
94296
94297#ifdef FREECIV_JSON_CONNECTION
94298 field_addr.name = "fields";
94299#endif /* FREECIV_JSON_CONNECTION */
94300 DIO_BV_GET(&din, &field_addr, fields);
94301
94302 if (BV_ISSET(fields, 0)) {
94303 log_packet_detailed(" got field 'utype'");
94304
94305#ifdef FREECIV_JSON_CONNECTION
94306 field_addr.name = "utype";
94307#endif /* FREECIV_JSON_CONNECTION */
94308
94309 {
94310 int readin;
94311
94312 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94314 }
94315 real_packet->utype = readin;
94316 }
94317 }
94318
94319 if (BV_ISSET(fields, 1)) {
94320 log_packet_detailed(" got field 'owner'");
94321
94322#ifdef FREECIV_JSON_CONNECTION
94323 field_addr.name = "owner";
94324#endif /* FREECIV_JSON_CONNECTION */
94325
94326 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94328 }
94329 }
94330
94331 if (BV_ISSET(fields, 2)) {
94332 log_packet_detailed(" got field 'homecity'");
94333
94334#ifdef FREECIV_JSON_CONNECTION
94335 field_addr.name = "homecity";
94336#endif /* FREECIV_JSON_CONNECTION */
94337
94338 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
94340 }
94341 }
94342
94343 if (BV_ISSET(fields, 3)) {
94344 log_packet_detailed(" got field 'moves_left'");
94345
94346#ifdef FREECIV_JSON_CONNECTION
94347 field_addr.name = "moves_left";
94348#endif /* FREECIV_JSON_CONNECTION */
94349
94350 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
94351 RECEIVE_PACKET_FIELD_ERROR(moves_left);
94352 }
94353 }
94354
94355 if (BV_ISSET(fields, 4)) {
94356 log_packet_detailed(" got field 'hp'");
94357
94358#ifdef FREECIV_JSON_CONNECTION
94359 field_addr.name = "hp";
94360#endif /* FREECIV_JSON_CONNECTION */
94361
94362 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
94364 }
94365 }
94366
94367 if (BV_ISSET(fields, 5)) {
94368 log_packet_detailed(" got field 'veteran'");
94369
94370#ifdef FREECIV_JSON_CONNECTION
94371 field_addr.name = "veteran";
94372#endif /* FREECIV_JSON_CONNECTION */
94373
94374 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
94376 }
94377 }
94378
94379 if (BV_ISSET(fields, 6)) {
94380 log_packet_detailed(" got field 'fuel'");
94381
94382#ifdef FREECIV_JSON_CONNECTION
94383 field_addr.name = "fuel";
94384#endif /* FREECIV_JSON_CONNECTION */
94385
94386 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
94388 }
94389 }
94390
94391 if (BV_ISSET(fields, 7)) {
94392 log_packet_detailed(" got field 'activity'");
94393
94394#ifdef FREECIV_JSON_CONNECTION
94395 field_addr.name = "activity";
94396#endif /* FREECIV_JSON_CONNECTION */
94397
94398 {
94399 int readin;
94400
94401 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
94403 }
94404 real_packet->activity = readin;
94405 }
94406 }
94407
94408 if (BV_ISSET(fields, 8)) {
94409 log_packet_detailed(" got field 'activity_count'");
94410
94411#ifdef FREECIV_JSON_CONNECTION
94412 field_addr.name = "activity_count";
94413#endif /* FREECIV_JSON_CONNECTION */
94414
94415 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
94416 RECEIVE_PACKET_FIELD_ERROR(activity_count);
94417 }
94418 }
94419
94420 if (BV_ISSET(fields, 9)) {
94421 log_packet_detailed(" got field 'activity_base'");
94422
94423#ifdef FREECIV_JSON_CONNECTION
94424 field_addr.name = "activity_base";
94425#endif /* FREECIV_JSON_CONNECTION */
94426
94427 {
94428 int readin;
94429
94430 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
94431 RECEIVE_PACKET_FIELD_ERROR(activity_base);
94432 }
94433 real_packet->activity_base = readin;
94434 }
94435 }
94436
94437 real_packet->debug = BV_ISSET(fields, 10);
94438
94439 real_packet->moved = BV_ISSET(fields, 11);
94440
94441 real_packet->paradropped = BV_ISSET(fields, 12);
94442
94443 real_packet->done_moving = BV_ISSET(fields, 13);
94444
94445 if (BV_ISSET(fields, 14)) {
94446 log_packet_detailed(" got field 'transported_by'");
94447
94448#ifdef FREECIV_JSON_CONNECTION
94449 field_addr.name = "transported_by";
94450#endif /* FREECIV_JSON_CONNECTION */
94451
94452 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
94453 RECEIVE_PACKET_FIELD_ERROR(transported_by);
94454 }
94455 }
94456
94457 real_packet->stay = BV_ISSET(fields, 15);
94458
94459 if (nullptr == old) {
94460 old = fc_malloc(sizeof(*old));
94462 *old = *real_packet;
94464 } else {
94465 *old = *real_packet;
94466 }
94467
94468#else /* FREECIV_DELTA_PROTOCOL */
94469#ifdef FREECIV_JSON_CONNECTION
94470 field_addr.name = "utype";
94471#endif /* FREECIV_JSON_CONNECTION */
94472
94473 {
94474 int readin;
94475
94476 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94478 }
94479 real_packet->utype = readin;
94480 }
94481
94482#ifdef FREECIV_JSON_CONNECTION
94483 field_addr.name = "owner";
94484#endif /* FREECIV_JSON_CONNECTION */
94485
94486 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94488 }
94489
94490#ifdef FREECIV_JSON_CONNECTION
94491 field_addr.name = "homecity";
94492#endif /* FREECIV_JSON_CONNECTION */
94493
94494 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
94496 }
94497
94498#ifdef FREECIV_JSON_CONNECTION
94499 field_addr.name = "moves_left";
94500#endif /* FREECIV_JSON_CONNECTION */
94501
94502 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
94503 RECEIVE_PACKET_FIELD_ERROR(moves_left);
94504 }
94505
94506#ifdef FREECIV_JSON_CONNECTION
94507 field_addr.name = "hp";
94508#endif /* FREECIV_JSON_CONNECTION */
94509
94510 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
94512 }
94513
94514#ifdef FREECIV_JSON_CONNECTION
94515 field_addr.name = "veteran";
94516#endif /* FREECIV_JSON_CONNECTION */
94517
94518 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
94520 }
94521
94522#ifdef FREECIV_JSON_CONNECTION
94523 field_addr.name = "fuel";
94524#endif /* FREECIV_JSON_CONNECTION */
94525
94526 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
94528 }
94529
94530#ifdef FREECIV_JSON_CONNECTION
94531 field_addr.name = "activity";
94532#endif /* FREECIV_JSON_CONNECTION */
94533
94534 {
94535 int readin;
94536
94537 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
94539 }
94540 real_packet->activity = readin;
94541 }
94542
94543#ifdef FREECIV_JSON_CONNECTION
94544 field_addr.name = "activity_count";
94545#endif /* FREECIV_JSON_CONNECTION */
94546
94547 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
94548 RECEIVE_PACKET_FIELD_ERROR(activity_count);
94549 }
94550
94551#ifdef FREECIV_JSON_CONNECTION
94552 field_addr.name = "activity_base";
94553#endif /* FREECIV_JSON_CONNECTION */
94554
94555 {
94556 int readin;
94557
94558 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
94559 RECEIVE_PACKET_FIELD_ERROR(activity_base);
94560 }
94561 real_packet->activity_base = readin;
94562 }
94563
94564#ifdef FREECIV_JSON_CONNECTION
94565 field_addr.name = "debug";
94566#endif /* FREECIV_JSON_CONNECTION */
94567
94568 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
94570 }
94571
94572#ifdef FREECIV_JSON_CONNECTION
94573 field_addr.name = "moved";
94574#endif /* FREECIV_JSON_CONNECTION */
94575
94576 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->moved)) {
94578 }
94579
94580#ifdef FREECIV_JSON_CONNECTION
94581 field_addr.name = "paradropped";
94582#endif /* FREECIV_JSON_CONNECTION */
94583
94584 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
94585 RECEIVE_PACKET_FIELD_ERROR(paradropped);
94586 }
94587
94588#ifdef FREECIV_JSON_CONNECTION
94589 field_addr.name = "done_moving";
94590#endif /* FREECIV_JSON_CONNECTION */
94591
94592 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
94593 RECEIVE_PACKET_FIELD_ERROR(done_moving);
94594 }
94595
94596#ifdef FREECIV_JSON_CONNECTION
94597 field_addr.name = "transported_by";
94598#endif /* FREECIV_JSON_CONNECTION */
94599
94600 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
94601 RECEIVE_PACKET_FIELD_ERROR(transported_by);
94602 }
94603
94604#ifdef FREECIV_JSON_CONNECTION
94605 field_addr.name = "stay";
94606#endif /* FREECIV_JSON_CONNECTION */
94607
94608 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
94610 }
94611#endif /* FREECIV_DELTA_PROTOCOL */
94612
94614#undef FREE_PACKET_STRUCT
94615}
94616
94617static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
94618{
94619 const struct packet_edit_unit *real_packet = packet;
94620 int e;
94622
94623 log_packet_detailed("packet_edit_unit_100: sending info about (%d)",
94624 real_packet->id);
94625
94626#ifdef FREECIV_DELTA_PROTOCOL
94628 struct packet_edit_unit *old;
94629 bool differ;
94630 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT;
94631
94632 if (nullptr == *hash) {
94634 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
94635 }
94636 BV_CLR_ALL(fields);
94637
94638 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94639 old = fc_malloc(sizeof(*old));
94640 /* temporary bitcopy just to insert correctly */
94641 *old = *real_packet;
94644 }
94645
94646 differ = (old->utype != real_packet->utype);
94647 if (differ) {
94648 BV_SET(fields, 0);
94649 }
94650
94651 differ = (old->owner != real_packet->owner);
94652 if (differ) {
94653 BV_SET(fields, 1);
94654 }
94655
94656 differ = (old->homecity != real_packet->homecity);
94657 if (differ) {
94658 BV_SET(fields, 2);
94659 }
94660
94661 differ = (old->moves_left != real_packet->moves_left);
94662 if (differ) {
94663 BV_SET(fields, 3);
94664 }
94665
94666 differ = (old->hp != real_packet->hp);
94667 if (differ) {
94668 BV_SET(fields, 4);
94669 }
94670
94671 differ = (old->veteran != real_packet->veteran);
94672 if (differ) {
94673 BV_SET(fields, 5);
94674 }
94675
94676 differ = (old->fuel != real_packet->fuel);
94677 if (differ) {
94678 BV_SET(fields, 6);
94679 }
94680
94681 differ = (old->activity != real_packet->activity);
94682 if (differ) {
94683 BV_SET(fields, 7);
94684 }
94685
94686 differ = (old->activity_count != real_packet->activity_count);
94687 if (differ) {
94688 BV_SET(fields, 8);
94689 }
94690
94691 differ = (old->activity_base != real_packet->activity_base);
94692 if (differ) {
94693 BV_SET(fields, 9);
94694 }
94695
94696 /* folded into head */
94697 if (real_packet->debug) {
94698 BV_SET(fields, 10);
94699 }
94700
94701 /* folded into head */
94702 if (real_packet->moved) {
94703 BV_SET(fields, 11);
94704 }
94705
94706 /* folded into head */
94707 if (real_packet->paradropped) {
94708 BV_SET(fields, 12);
94709 }
94710
94711 /* folded into head */
94712 if (real_packet->done_moving) {
94713 BV_SET(fields, 13);
94714 }
94715
94716 differ = (old->transported_by != real_packet->transported_by);
94717 if (differ) {
94718 BV_SET(fields, 14);
94719 }
94720
94721 /* folded into head */
94722 if (real_packet->stay) {
94723 BV_SET(fields, 15);
94724 }
94725#endif /* FREECIV_DELTA_PROTOCOL */
94726
94727#ifdef FREECIV_JSON_CONNECTION
94728 struct plocation field_addr;
94729 {
94730 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94733 }
94734#endif /* FREECIV_JSON_CONNECTION */
94735
94736#ifdef FREECIV_JSON_CONNECTION
94737 field_addr.name = "id";
94738#endif /* FREECIV_JSON_CONNECTION */
94739 e = 0;
94740
94741 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94742
94743 if (e) {
94744 log_packet_detailed("'id' field error detected");
94745 }
94746
94747#ifdef FREECIV_DELTA_PROTOCOL
94748#ifdef FREECIV_JSON_CONNECTION
94749 field_addr.name = "fields";
94750#endif /* FREECIV_JSON_CONNECTION */
94751 e = 0;
94752 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94753 if (e) {
94754 log_packet_detailed("fields bitvector error detected");
94755 }
94756
94757 if (BV_ISSET(fields, 0)) {
94758 log_packet_detailed(" field 'utype' has changed");
94759
94760#ifdef FREECIV_JSON_CONNECTION
94761 field_addr.name = "utype";
94762#endif /* FREECIV_JSON_CONNECTION */
94763 e = 0;
94764
94765 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
94766
94767 if (e) {
94768 log_packet_detailed("'utype' field error detected");
94769 }
94770 }
94771
94772 if (BV_ISSET(fields, 1)) {
94773 log_packet_detailed(" field 'owner' has changed");
94774
94775#ifdef FREECIV_JSON_CONNECTION
94776 field_addr.name = "owner";
94777#endif /* FREECIV_JSON_CONNECTION */
94778 e = 0;
94779
94780 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94781
94782 if (e) {
94783 log_packet_detailed("'owner' field error detected");
94784 }
94785 }
94786
94787 if (BV_ISSET(fields, 2)) {
94788 log_packet_detailed(" field 'homecity' has changed");
94789
94790#ifdef FREECIV_JSON_CONNECTION
94791 field_addr.name = "homecity";
94792#endif /* FREECIV_JSON_CONNECTION */
94793 e = 0;
94794
94795 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
94796
94797 if (e) {
94798 log_packet_detailed("'homecity' field error detected");
94799 }
94800 }
94801
94802 if (BV_ISSET(fields, 3)) {
94803 log_packet_detailed(" field 'moves_left' has changed");
94804
94805#ifdef FREECIV_JSON_CONNECTION
94806 field_addr.name = "moves_left";
94807#endif /* FREECIV_JSON_CONNECTION */
94808 e = 0;
94809
94810 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
94811
94812 if (e) {
94813 log_packet_detailed("'moves_left' field error detected");
94814 }
94815 }
94816
94817 if (BV_ISSET(fields, 4)) {
94818 log_packet_detailed(" field 'hp' has changed");
94819
94820#ifdef FREECIV_JSON_CONNECTION
94821 field_addr.name = "hp";
94822#endif /* FREECIV_JSON_CONNECTION */
94823 e = 0;
94824
94825 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
94826
94827 if (e) {
94828 log_packet_detailed("'hp' field error detected");
94829 }
94830 }
94831
94832 if (BV_ISSET(fields, 5)) {
94833 log_packet_detailed(" field 'veteran' has changed");
94834
94835#ifdef FREECIV_JSON_CONNECTION
94836 field_addr.name = "veteran";
94837#endif /* FREECIV_JSON_CONNECTION */
94838 e = 0;
94839
94840 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
94841
94842 if (e) {
94843 log_packet_detailed("'veteran' field error detected");
94844 }
94845 }
94846
94847 if (BV_ISSET(fields, 6)) {
94848 log_packet_detailed(" field 'fuel' has changed");
94849
94850#ifdef FREECIV_JSON_CONNECTION
94851 field_addr.name = "fuel";
94852#endif /* FREECIV_JSON_CONNECTION */
94853 e = 0;
94854
94855 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
94856
94857 if (e) {
94858 log_packet_detailed("'fuel' field error detected");
94859 }
94860 }
94861
94862 if (BV_ISSET(fields, 7)) {
94863 log_packet_detailed(" field 'activity' has changed");
94864
94865#ifdef FREECIV_JSON_CONNECTION
94866 field_addr.name = "activity";
94867#endif /* FREECIV_JSON_CONNECTION */
94868 e = 0;
94869
94870 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
94871
94872 if (e) {
94873 log_packet_detailed("'activity' field error detected");
94874 }
94875 }
94876
94877 if (BV_ISSET(fields, 8)) {
94878 log_packet_detailed(" field 'activity_count' has changed");
94879
94880#ifdef FREECIV_JSON_CONNECTION
94881 field_addr.name = "activity_count";
94882#endif /* FREECIV_JSON_CONNECTION */
94883 e = 0;
94884
94885 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
94886
94887 if (e) {
94888 log_packet_detailed("'activity_count' field error detected");
94889 }
94890 }
94891
94892 if (BV_ISSET(fields, 9)) {
94893 log_packet_detailed(" field 'activity_base' has changed");
94894
94895#ifdef FREECIV_JSON_CONNECTION
94896 field_addr.name = "activity_base";
94897#endif /* FREECIV_JSON_CONNECTION */
94898 e = 0;
94899
94900 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
94901
94902 if (e) {
94903 log_packet_detailed("'activity_base' field error detected");
94904 }
94905 }
94906
94907 /* field 10 is folded into the header */
94908
94909 /* field 11 is folded into the header */
94910
94911 /* field 12 is folded into the header */
94912
94913 /* field 13 is folded into the header */
94914
94915 if (BV_ISSET(fields, 14)) {
94916 log_packet_detailed(" field 'transported_by' has changed");
94917
94918#ifdef FREECIV_JSON_CONNECTION
94919 field_addr.name = "transported_by";
94920#endif /* FREECIV_JSON_CONNECTION */
94921 e = 0;
94922
94923 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
94924
94925 if (e) {
94926 log_packet_detailed("'transported_by' field error detected");
94927 }
94928 }
94929
94930 /* field 15 is folded into the header */
94931
94932 *old = *real_packet;
94933
94934#else /* FREECIV_DELTA_PROTOCOL */
94935#ifdef FREECIV_JSON_CONNECTION
94936 field_addr.name = "utype";
94937#endif /* FREECIV_JSON_CONNECTION */
94938 e = 0;
94939
94940 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
94941
94942 if (e) {
94943 log_packet_detailed("'utype' field error detected");
94944 }
94945
94946#ifdef FREECIV_JSON_CONNECTION
94947 field_addr.name = "owner";
94948#endif /* FREECIV_JSON_CONNECTION */
94949 e = 0;
94950
94951 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94952
94953 if (e) {
94954 log_packet_detailed("'owner' field error detected");
94955 }
94956
94957#ifdef FREECIV_JSON_CONNECTION
94958 field_addr.name = "homecity";
94959#endif /* FREECIV_JSON_CONNECTION */
94960 e = 0;
94961
94962 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
94963
94964 if (e) {
94965 log_packet_detailed("'homecity' field error detected");
94966 }
94967
94968#ifdef FREECIV_JSON_CONNECTION
94969 field_addr.name = "moves_left";
94970#endif /* FREECIV_JSON_CONNECTION */
94971 e = 0;
94972
94973 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
94974
94975 if (e) {
94976 log_packet_detailed("'moves_left' field error detected");
94977 }
94978
94979#ifdef FREECIV_JSON_CONNECTION
94980 field_addr.name = "hp";
94981#endif /* FREECIV_JSON_CONNECTION */
94982 e = 0;
94983
94984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
94985
94986 if (e) {
94987 log_packet_detailed("'hp' field error detected");
94988 }
94989
94990#ifdef FREECIV_JSON_CONNECTION
94991 field_addr.name = "veteran";
94992#endif /* FREECIV_JSON_CONNECTION */
94993 e = 0;
94994
94995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
94996
94997 if (e) {
94998 log_packet_detailed("'veteran' field error detected");
94999 }
95000
95001#ifdef FREECIV_JSON_CONNECTION
95002 field_addr.name = "fuel";
95003#endif /* FREECIV_JSON_CONNECTION */
95004 e = 0;
95005
95006 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
95007
95008 if (e) {
95009 log_packet_detailed("'fuel' field error detected");
95010 }
95011
95012#ifdef FREECIV_JSON_CONNECTION
95013 field_addr.name = "activity";
95014#endif /* FREECIV_JSON_CONNECTION */
95015 e = 0;
95016
95017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
95018
95019 if (e) {
95020 log_packet_detailed("'activity' field error detected");
95021 }
95022
95023#ifdef FREECIV_JSON_CONNECTION
95024 field_addr.name = "activity_count";
95025#endif /* FREECIV_JSON_CONNECTION */
95026 e = 0;
95027
95028 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
95029
95030 if (e) {
95031 log_packet_detailed("'activity_count' field error detected");
95032 }
95033
95034#ifdef FREECIV_JSON_CONNECTION
95035 field_addr.name = "activity_base";
95036#endif /* FREECIV_JSON_CONNECTION */
95037 e = 0;
95038
95039 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
95040
95041 if (e) {
95042 log_packet_detailed("'activity_base' field error detected");
95043 }
95044
95045#ifdef FREECIV_JSON_CONNECTION
95046 field_addr.name = "debug";
95047#endif /* FREECIV_JSON_CONNECTION */
95048 e = 0;
95049
95050 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
95051
95052 if (e) {
95053 log_packet_detailed("'debug' field error detected");
95054 }
95055
95056#ifdef FREECIV_JSON_CONNECTION
95057 field_addr.name = "moved";
95058#endif /* FREECIV_JSON_CONNECTION */
95059 e = 0;
95060
95061 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->moved);
95062
95063 if (e) {
95064 log_packet_detailed("'moved' field error detected");
95065 }
95066
95067#ifdef FREECIV_JSON_CONNECTION
95068 field_addr.name = "paradropped";
95069#endif /* FREECIV_JSON_CONNECTION */
95070 e = 0;
95071
95072 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
95073
95074 if (e) {
95075 log_packet_detailed("'paradropped' field error detected");
95076 }
95077
95078#ifdef FREECIV_JSON_CONNECTION
95079 field_addr.name = "done_moving";
95080#endif /* FREECIV_JSON_CONNECTION */
95081 e = 0;
95082
95083 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
95084
95085 if (e) {
95086 log_packet_detailed("'done_moving' field error detected");
95087 }
95088
95089#ifdef FREECIV_JSON_CONNECTION
95090 field_addr.name = "transported_by";
95091#endif /* FREECIV_JSON_CONNECTION */
95092 e = 0;
95093
95094 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
95095
95096 if (e) {
95097 log_packet_detailed("'transported_by' field error detected");
95098 }
95099
95100#ifdef FREECIV_JSON_CONNECTION
95101 field_addr.name = "stay";
95102#endif /* FREECIV_JSON_CONNECTION */
95103 e = 0;
95104
95105 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
95106
95107 if (e) {
95108 log_packet_detailed("'stay' field error detected");
95109 }
95110#endif /* FREECIV_DELTA_PROTOCOL */
95111
95113}
95114
95115int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
95116{
95117 if (!pc->used) {
95118 log_error("WARNING: trying to send data to the closed connection %s",
95120 return -1;
95121 }
95122 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT].packet != nullptr, -1,
95123 "Handler for PACKET_EDIT_UNIT not installed");
95124 return pc->phs.handlers->send[PACKET_EDIT_UNIT].packet(pc, packet);
95125}
95126
95128{
95129 memset(packet, 0, sizeof(*packet));
95130}
95131
95132#define free_packet_edit_city_create(_packet) (void) 0
95133#define destroy_packet_edit_city_create free
95134
95135#ifdef FREECIV_DELTA_PROTOCOL
95136#define hash_packet_edit_city_create_100 hash_const
95137#define cmp_packet_edit_city_create_100 cmp_const
95139#endif /* FREECIV_DELTA_PROTOCOL */
95140
95142{
95143#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_create(_packet)
95145
95146#ifdef FREECIV_JSON_CONNECTION
95147 struct plocation field_addr;
95148 {
95149 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95152 }
95153#endif /* FREECIV_JSON_CONNECTION */
95154
95155 log_packet_detailed("packet_edit_city_create_100: got info about ()");
95156
95157#ifdef FREECIV_DELTA_PROTOCOL
95160 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_CREATE;
95161
95162 if (nullptr == *hash) {
95164 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
95165 }
95166
95167 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95168 *real_packet = *old;
95169 } else {
95170 /* packet is already initialized empty */
95171 log_packet_detailed(" no old info");
95172 }
95173
95174#ifdef FREECIV_JSON_CONNECTION
95175 field_addr.name = "fields";
95176#endif /* FREECIV_JSON_CONNECTION */
95177 DIO_BV_GET(&din, &field_addr, fields);
95178
95179 if (BV_ISSET(fields, 0)) {
95180 log_packet_detailed(" got field 'owner'");
95181
95182#ifdef FREECIV_JSON_CONNECTION
95183 field_addr.name = "owner";
95184#endif /* FREECIV_JSON_CONNECTION */
95185
95186 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95188 }
95189 }
95190
95191 if (BV_ISSET(fields, 1)) {
95192 log_packet_detailed(" got field 'tile'");
95193
95194#ifdef FREECIV_JSON_CONNECTION
95195 field_addr.name = "tile";
95196#endif /* FREECIV_JSON_CONNECTION */
95197
95198 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
95200 }
95201 }
95202
95203 if (BV_ISSET(fields, 2)) {
95204 log_packet_detailed(" got field 'size'");
95205
95206#ifdef FREECIV_JSON_CONNECTION
95207 field_addr.name = "size";
95208#endif /* FREECIV_JSON_CONNECTION */
95209
95210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95212 }
95213 }
95214
95215 if (BV_ISSET(fields, 3)) {
95216 log_packet_detailed(" got field 'tag'");
95217
95218#ifdef FREECIV_JSON_CONNECTION
95219 field_addr.name = "tag";
95220#endif /* FREECIV_JSON_CONNECTION */
95221
95222 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
95224 }
95225 }
95226
95227 if (nullptr == old) {
95228 old = fc_malloc(sizeof(*old));
95230 *old = *real_packet;
95232 } else {
95233 *old = *real_packet;
95234 }
95235
95236#else /* FREECIV_DELTA_PROTOCOL */
95237#ifdef FREECIV_JSON_CONNECTION
95238 field_addr.name = "owner";
95239#endif /* FREECIV_JSON_CONNECTION */
95240
95241 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95243 }
95244
95245#ifdef FREECIV_JSON_CONNECTION
95246 field_addr.name = "tile";
95247#endif /* FREECIV_JSON_CONNECTION */
95248
95249 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
95251 }
95252
95253#ifdef FREECIV_JSON_CONNECTION
95254 field_addr.name = "size";
95255#endif /* FREECIV_JSON_CONNECTION */
95256
95257 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95259 }
95260
95261#ifdef FREECIV_JSON_CONNECTION
95262 field_addr.name = "tag";
95263#endif /* FREECIV_JSON_CONNECTION */
95264
95265 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
95267 }
95268#endif /* FREECIV_DELTA_PROTOCOL */
95269
95271#undef FREE_PACKET_STRUCT
95272}
95273
95275{
95276 const struct packet_edit_city_create *real_packet = packet;
95277 int e;
95279
95280 log_packet_detailed("packet_edit_city_create_100: sending info about ()");
95281
95282#ifdef FREECIV_DELTA_PROTOCOL
95285 bool differ;
95286 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_CREATE;
95287
95288 if (nullptr == *hash) {
95290 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
95291 }
95292 BV_CLR_ALL(fields);
95293
95294 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95295 old = fc_malloc(sizeof(*old));
95296 /* temporary bitcopy just to insert correctly */
95297 *old = *real_packet;
95300 }
95301
95302 differ = (old->owner != real_packet->owner);
95303 if (differ) {
95304 BV_SET(fields, 0);
95305 }
95306
95307 differ = (old->tile != real_packet->tile);
95308 if (differ) {
95309 BV_SET(fields, 1);
95310 }
95311
95312 differ = (old->size != real_packet->size);
95313 if (differ) {
95314 BV_SET(fields, 2);
95315 }
95316
95317 differ = (old->tag != real_packet->tag);
95318 if (differ) {
95319 BV_SET(fields, 3);
95320 }
95321#endif /* FREECIV_DELTA_PROTOCOL */
95322
95323#ifdef FREECIV_JSON_CONNECTION
95324 struct plocation field_addr;
95325 {
95326 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95329 }
95330#endif /* FREECIV_JSON_CONNECTION */
95331
95332#ifdef FREECIV_DELTA_PROTOCOL
95333#ifdef FREECIV_JSON_CONNECTION
95334 field_addr.name = "fields";
95335#endif /* FREECIV_JSON_CONNECTION */
95336 e = 0;
95337 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95338 if (e) {
95339 log_packet_detailed("fields bitvector error detected");
95340 }
95341
95342 if (BV_ISSET(fields, 0)) {
95343 log_packet_detailed(" field 'owner' has changed");
95344
95345#ifdef FREECIV_JSON_CONNECTION
95346 field_addr.name = "owner";
95347#endif /* FREECIV_JSON_CONNECTION */
95348 e = 0;
95349
95350 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95351
95352 if (e) {
95353 log_packet_detailed("'owner' field error detected");
95354 }
95355 }
95356
95357 if (BV_ISSET(fields, 1)) {
95358 log_packet_detailed(" field 'tile' has changed");
95359
95360#ifdef FREECIV_JSON_CONNECTION
95361 field_addr.name = "tile";
95362#endif /* FREECIV_JSON_CONNECTION */
95363 e = 0;
95364
95365 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
95366
95367 if (e) {
95368 log_packet_detailed("'tile' field error detected");
95369 }
95370 }
95371
95372 if (BV_ISSET(fields, 2)) {
95373 log_packet_detailed(" field 'size' has changed");
95374
95375#ifdef FREECIV_JSON_CONNECTION
95376 field_addr.name = "size";
95377#endif /* FREECIV_JSON_CONNECTION */
95378 e = 0;
95379
95380 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
95381
95382 if (e) {
95383 log_packet_detailed("'size' field error detected");
95384 }
95385 }
95386
95387 if (BV_ISSET(fields, 3)) {
95388 log_packet_detailed(" field 'tag' has changed");
95389
95390#ifdef FREECIV_JSON_CONNECTION
95391 field_addr.name = "tag";
95392#endif /* FREECIV_JSON_CONNECTION */
95393 e = 0;
95394
95395 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
95396
95397 if (e) {
95398 log_packet_detailed("'tag' field error detected");
95399 }
95400 }
95401
95402 *old = *real_packet;
95403
95404#else /* FREECIV_DELTA_PROTOCOL */
95405#ifdef FREECIV_JSON_CONNECTION
95406 field_addr.name = "owner";
95407#endif /* FREECIV_JSON_CONNECTION */
95408 e = 0;
95409
95410 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95411
95412 if (e) {
95413 log_packet_detailed("'owner' field error detected");
95414 }
95415
95416#ifdef FREECIV_JSON_CONNECTION
95417 field_addr.name = "tile";
95418#endif /* FREECIV_JSON_CONNECTION */
95419 e = 0;
95420
95421 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
95422
95423 if (e) {
95424 log_packet_detailed("'tile' field error detected");
95425 }
95426
95427#ifdef FREECIV_JSON_CONNECTION
95428 field_addr.name = "size";
95429#endif /* FREECIV_JSON_CONNECTION */
95430 e = 0;
95431
95432 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
95433
95434 if (e) {
95435 log_packet_detailed("'size' field error detected");
95436 }
95437
95438#ifdef FREECIV_JSON_CONNECTION
95439 field_addr.name = "tag";
95440#endif /* FREECIV_JSON_CONNECTION */
95441 e = 0;
95442
95443 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
95444
95445 if (e) {
95446 log_packet_detailed("'tag' field error detected");
95447 }
95448#endif /* FREECIV_DELTA_PROTOCOL */
95449
95451}
95452
95454{
95455 if (!pc->used) {
95456 log_error("WARNING: trying to send data to the closed connection %s",
95458 return -1;
95459 }
95460 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet != nullptr, -1,
95461 "Handler for PACKET_EDIT_CITY_CREATE not installed");
95462 return pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet(pc, packet);
95463}
95464
95465int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
95466{
95467 struct packet_edit_city_create packet, *real_packet = &packet;
95468
95471 real_packet->size = size;
95472 real_packet->tag = tag;
95473
95475}
95476
95478{
95479 memset(packet, 0, sizeof(*packet));
95480}
95481
95482#define free_packet_edit_city_remove(_packet) (void) 0
95483#define destroy_packet_edit_city_remove free
95484
95485#ifdef FREECIV_DELTA_PROTOCOL
95486#define hash_packet_edit_city_remove_100 hash_const
95487#define cmp_packet_edit_city_remove_100 cmp_const
95489#endif /* FREECIV_DELTA_PROTOCOL */
95490
95492{
95493#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_remove(_packet)
95495
95496#ifdef FREECIV_JSON_CONNECTION
95497 struct plocation field_addr;
95498 {
95499 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95502 }
95503#endif /* FREECIV_JSON_CONNECTION */
95504
95505 log_packet_detailed("packet_edit_city_remove_100: got info about ()");
95506
95507#ifdef FREECIV_DELTA_PROTOCOL
95510 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_REMOVE;
95511
95512 if (nullptr == *hash) {
95514 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
95515 }
95516
95517 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95518 *real_packet = *old;
95519 } else {
95520 /* packet is already initialized empty */
95521 log_packet_detailed(" no old info");
95522 }
95523
95524#ifdef FREECIV_JSON_CONNECTION
95525 field_addr.name = "fields";
95526#endif /* FREECIV_JSON_CONNECTION */
95527 DIO_BV_GET(&din, &field_addr, fields);
95528
95529 if (BV_ISSET(fields, 0)) {
95530 log_packet_detailed(" got field 'id'");
95531
95532#ifdef FREECIV_JSON_CONNECTION
95533 field_addr.name = "id";
95534#endif /* FREECIV_JSON_CONNECTION */
95535
95536 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95538 }
95539 }
95540
95541 if (nullptr == old) {
95542 old = fc_malloc(sizeof(*old));
95544 *old = *real_packet;
95546 } else {
95547 *old = *real_packet;
95548 }
95549
95550#else /* FREECIV_DELTA_PROTOCOL */
95551#ifdef FREECIV_JSON_CONNECTION
95552 field_addr.name = "id";
95553#endif /* FREECIV_JSON_CONNECTION */
95554
95555 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95557 }
95558#endif /* FREECIV_DELTA_PROTOCOL */
95559
95561#undef FREE_PACKET_STRUCT
95562}
95563
95565{
95566 const struct packet_edit_city_remove *real_packet = packet;
95567 int e;
95569
95570 log_packet_detailed("packet_edit_city_remove_100: sending info about ()");
95571
95572#ifdef FREECIV_DELTA_PROTOCOL
95575 bool differ;
95576 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_REMOVE;
95577
95578 if (nullptr == *hash) {
95580 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
95581 }
95582 BV_CLR_ALL(fields);
95583
95584 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95585 old = fc_malloc(sizeof(*old));
95586 /* temporary bitcopy just to insert correctly */
95587 *old = *real_packet;
95590 }
95591
95592 differ = (old->id != real_packet->id);
95593 if (differ) {
95594 BV_SET(fields, 0);
95595 }
95596#endif /* FREECIV_DELTA_PROTOCOL */
95597
95598#ifdef FREECIV_JSON_CONNECTION
95599 struct plocation field_addr;
95600 {
95601 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95604 }
95605#endif /* FREECIV_JSON_CONNECTION */
95606
95607#ifdef FREECIV_DELTA_PROTOCOL
95608#ifdef FREECIV_JSON_CONNECTION
95609 field_addr.name = "fields";
95610#endif /* FREECIV_JSON_CONNECTION */
95611 e = 0;
95612 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95613 if (e) {
95614 log_packet_detailed("fields bitvector error detected");
95615 }
95616
95617 if (BV_ISSET(fields, 0)) {
95618 log_packet_detailed(" field 'id' has changed");
95619
95620#ifdef FREECIV_JSON_CONNECTION
95621 field_addr.name = "id";
95622#endif /* FREECIV_JSON_CONNECTION */
95623 e = 0;
95624
95625 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95626
95627 if (e) {
95628 log_packet_detailed("'id' field error detected");
95629 }
95630 }
95631
95632 *old = *real_packet;
95633
95634#else /* FREECIV_DELTA_PROTOCOL */
95635#ifdef FREECIV_JSON_CONNECTION
95636 field_addr.name = "id";
95637#endif /* FREECIV_JSON_CONNECTION */
95638 e = 0;
95639
95640 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95641
95642 if (e) {
95643 log_packet_detailed("'id' field error detected");
95644 }
95645#endif /* FREECIV_DELTA_PROTOCOL */
95646
95648}
95649
95651{
95652 if (!pc->used) {
95653 log_error("WARNING: trying to send data to the closed connection %s",
95655 return -1;
95656 }
95657 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet != nullptr, -1,
95658 "Handler for PACKET_EDIT_CITY_REMOVE not installed");
95659 return pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet(pc, packet);
95660}
95661
95663{
95664 struct packet_edit_city_remove packet, *real_packet = &packet;
95665
95666 real_packet->id = id;
95667
95669}
95670
95671static inline void init_packet_edit_city(struct packet_edit_city *packet)
95672{
95673 memset(packet, 0, sizeof(*packet));
95674}
95675
95676#define free_packet_edit_city(_packet) (void) 0
95677#define destroy_packet_edit_city free
95678
95679#ifdef FREECIV_DELTA_PROTOCOL
95681{
95682 const struct packet_edit_city *key = (const struct packet_edit_city *) vkey;
95683 genhash_val_t result = 0;
95684
95685 result += key->id;
95686
95687 result &= 0xFFFFFFFF;
95688 return result;
95689}
95690
95691static bool cmp_packet_edit_city_100(const void *vkey1, const void *vkey2)
95692{
95693 const struct packet_edit_city *old = (const struct packet_edit_city *) vkey1;
95694 const struct packet_edit_city *real_packet = (const struct packet_edit_city *) vkey2;
95695 bool differ;
95696
95697 differ = (old->id != real_packet->id);
95698
95699 return !differ;
95700}
95702#endif /* FREECIV_DELTA_PROTOCOL */
95703
95705{
95706#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city(_packet)
95708
95709#ifdef FREECIV_JSON_CONNECTION
95710 struct plocation field_addr;
95711 {
95712 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95715 }
95716#endif /* FREECIV_JSON_CONNECTION */
95717
95718#ifdef FREECIV_JSON_CONNECTION
95719 field_addr.name = "id";
95720#endif /* FREECIV_JSON_CONNECTION */
95721
95722 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95724 }
95725
95726 log_packet_detailed("packet_edit_city_100: got info about (%d)",
95727 real_packet->id);
95728
95729#ifdef FREECIV_DELTA_PROTOCOL
95731 struct packet_edit_city *old;
95732 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY;
95733
95734 if (nullptr == *hash) {
95736 nullptr, nullptr, nullptr, destroy_packet_edit_city);
95737 }
95738
95739 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95740 *real_packet = *old;
95741 } else {
95742 /* packet is already initialized empty */
95743 log_packet_detailed(" no old info");
95744 }
95745
95746#ifdef FREECIV_JSON_CONNECTION
95747 field_addr.name = "fields";
95748#endif /* FREECIV_JSON_CONNECTION */
95749 DIO_BV_GET(&din, &field_addr, fields);
95750
95751 if (BV_ISSET(fields, 0)) {
95752 log_packet_detailed(" got field 'name'");
95753
95754#ifdef FREECIV_JSON_CONNECTION
95755 field_addr.name = "name";
95756#endif /* FREECIV_JSON_CONNECTION */
95757
95758 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
95760 }
95761 }
95762
95763 if (BV_ISSET(fields, 1)) {
95764 log_packet_detailed(" got field 'owner'");
95765
95766#ifdef FREECIV_JSON_CONNECTION
95767 field_addr.name = "owner";
95768#endif /* FREECIV_JSON_CONNECTION */
95769
95770 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95772 }
95773 }
95774
95775 if (BV_ISSET(fields, 2)) {
95776 log_packet_detailed(" got field 'original'");
95777
95778#ifdef FREECIV_JSON_CONNECTION
95779 field_addr.name = "original";
95780#endif /* FREECIV_JSON_CONNECTION */
95781
95782 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
95784 }
95785 }
95786
95787 if (BV_ISSET(fields, 3)) {
95788 log_packet_detailed(" got field 'size'");
95789
95790#ifdef FREECIV_JSON_CONNECTION
95791 field_addr.name = "size";
95792#endif /* FREECIV_JSON_CONNECTION */
95793
95794 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95796 }
95797 }
95798
95799 if (BV_ISSET(fields, 4)) {
95800 log_packet_detailed(" got field 'history'");
95801
95802#ifdef FREECIV_JSON_CONNECTION
95803 field_addr.name = "history";
95804#endif /* FREECIV_JSON_CONNECTION */
95805
95806 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
95808 }
95809 }
95810
95811 if (BV_ISSET(fields, 5)) {
95812 log_packet_detailed(" got field 'ppl_happy'");
95813
95814#ifdef FREECIV_JSON_CONNECTION
95815 field_addr.name = "ppl_happy";
95816#endif /* FREECIV_JSON_CONNECTION */
95817
95818 {
95819 int i;
95820
95821
95822#ifdef FREECIV_JSON_CONNECTION
95823 /* Enter array. */
95824 field_addr.sub_location = plocation_elem_new(0);
95825#endif /* FREECIV_JSON_CONNECTION */
95826
95827 for (i = 0; i < 5; i++) {
95828#ifdef FREECIV_JSON_CONNECTION
95829 /* Next array element */
95830 field_addr.sub_location->number = i;
95831#endif /* FREECIV_JSON_CONNECTION */
95832
95833 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
95834 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
95835 }
95836 }
95837
95838#ifdef FREECIV_JSON_CONNECTION
95839 /* Exit array. */
95840 FC_FREE(field_addr.sub_location);
95841#endif /* FREECIV_JSON_CONNECTION */
95842 }
95843 }
95844
95845 if (BV_ISSET(fields, 6)) {
95846 log_packet_detailed(" got field 'ppl_content'");
95847
95848#ifdef FREECIV_JSON_CONNECTION
95849 field_addr.name = "ppl_content";
95850#endif /* FREECIV_JSON_CONNECTION */
95851
95852 {
95853 int i;
95854
95855
95856#ifdef FREECIV_JSON_CONNECTION
95857 /* Enter array. */
95858 field_addr.sub_location = plocation_elem_new(0);
95859#endif /* FREECIV_JSON_CONNECTION */
95860
95861 for (i = 0; i < 5; i++) {
95862#ifdef FREECIV_JSON_CONNECTION
95863 /* Next array element */
95864 field_addr.sub_location->number = i;
95865#endif /* FREECIV_JSON_CONNECTION */
95866
95867 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
95868 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
95869 }
95870 }
95871
95872#ifdef FREECIV_JSON_CONNECTION
95873 /* Exit array. */
95874 FC_FREE(field_addr.sub_location);
95875#endif /* FREECIV_JSON_CONNECTION */
95876 }
95877 }
95878
95879 if (BV_ISSET(fields, 7)) {
95880 log_packet_detailed(" got field 'ppl_unhappy'");
95881
95882#ifdef FREECIV_JSON_CONNECTION
95883 field_addr.name = "ppl_unhappy";
95884#endif /* FREECIV_JSON_CONNECTION */
95885
95886 {
95887 int i;
95888
95889
95890#ifdef FREECIV_JSON_CONNECTION
95891 /* Enter array. */
95892 field_addr.sub_location = plocation_elem_new(0);
95893#endif /* FREECIV_JSON_CONNECTION */
95894
95895 for (i = 0; i < 5; i++) {
95896#ifdef FREECIV_JSON_CONNECTION
95897 /* Next array element */
95898 field_addr.sub_location->number = i;
95899#endif /* FREECIV_JSON_CONNECTION */
95900
95901 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
95902 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
95903 }
95904 }
95905
95906#ifdef FREECIV_JSON_CONNECTION
95907 /* Exit array. */
95908 FC_FREE(field_addr.sub_location);
95909#endif /* FREECIV_JSON_CONNECTION */
95910 }
95911 }
95912
95913 if (BV_ISSET(fields, 8)) {
95914 log_packet_detailed(" got field 'ppl_angry'");
95915
95916#ifdef FREECIV_JSON_CONNECTION
95917 field_addr.name = "ppl_angry";
95918#endif /* FREECIV_JSON_CONNECTION */
95919
95920 {
95921 int i;
95922
95923
95924#ifdef FREECIV_JSON_CONNECTION
95925 /* Enter array. */
95926 field_addr.sub_location = plocation_elem_new(0);
95927#endif /* FREECIV_JSON_CONNECTION */
95928
95929 for (i = 0; i < 5; i++) {
95930#ifdef FREECIV_JSON_CONNECTION
95931 /* Next array element */
95932 field_addr.sub_location->number = i;
95933#endif /* FREECIV_JSON_CONNECTION */
95934
95935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
95936 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
95937 }
95938 }
95939
95940#ifdef FREECIV_JSON_CONNECTION
95941 /* Exit array. */
95942 FC_FREE(field_addr.sub_location);
95943#endif /* FREECIV_JSON_CONNECTION */
95944 }
95945 }
95946
95947 if (BV_ISSET(fields, 9)) {
95948 log_packet_detailed(" got field 'specialists_size'");
95949
95950#ifdef FREECIV_JSON_CONNECTION
95951 field_addr.name = "specialists_size";
95952#endif /* FREECIV_JSON_CONNECTION */
95953
95954 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
95955 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
95956 }
95957 }
95958
95959 if (BV_ISSET(fields, 10)) {
95960 log_packet_detailed(" got field 'specialists'");
95961
95962#ifdef FREECIV_JSON_CONNECTION
95963 field_addr.name = "specialists";
95964#endif /* FREECIV_JSON_CONNECTION */
95965
95966 {
95967 int i;
95968
95969 if (real_packet->specialists_size > SP_MAX) {
95970 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
95971 }
95972
95973#ifdef FREECIV_JSON_CONNECTION
95974 /* Enter array. */
95975 field_addr.sub_location = plocation_elem_new(0);
95976#endif /* FREECIV_JSON_CONNECTION */
95977
95978 for (i = 0; i < real_packet->specialists_size; i++) {
95979#ifdef FREECIV_JSON_CONNECTION
95980 /* Next array element */
95981 field_addr.sub_location->number = i;
95982#endif /* FREECIV_JSON_CONNECTION */
95983
95984 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
95986 }
95987 }
95988
95989#ifdef FREECIV_JSON_CONNECTION
95990 /* Exit array. */
95991 FC_FREE(field_addr.sub_location);
95992#endif /* FREECIV_JSON_CONNECTION */
95993 }
95994 }
95995
95996 if (BV_ISSET(fields, 11)) {
95997 log_packet_detailed(" got field 'food_stock'");
95998
95999#ifdef FREECIV_JSON_CONNECTION
96000 field_addr.name = "food_stock";
96001#endif /* FREECIV_JSON_CONNECTION */
96002
96003 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
96004 RECEIVE_PACKET_FIELD_ERROR(food_stock);
96005 }
96006 }
96007
96008 if (BV_ISSET(fields, 12)) {
96009 log_packet_detailed(" got field 'shield_stock'");
96010
96011#ifdef FREECIV_JSON_CONNECTION
96012 field_addr.name = "shield_stock";
96013#endif /* FREECIV_JSON_CONNECTION */
96014
96015 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
96016 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
96017 }
96018 }
96019
96020 real_packet->airlift = BV_ISSET(fields, 13);
96021
96022 real_packet->debug = BV_ISSET(fields, 14);
96023
96024 real_packet->did_buy = BV_ISSET(fields, 15);
96025
96026 real_packet->did_sell = BV_ISSET(fields, 16);
96027
96028 real_packet->was_happy = BV_ISSET(fields, 17);
96029
96030 real_packet->had_famine = BV_ISSET(fields, 18);
96031
96032 if (BV_ISSET(fields, 19)) {
96033 log_packet_detailed(" got field 'anarchy'");
96034
96035#ifdef FREECIV_JSON_CONNECTION
96036 field_addr.name = "anarchy";
96037#endif /* FREECIV_JSON_CONNECTION */
96038
96039 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
96041 }
96042 }
96043
96044 if (BV_ISSET(fields, 20)) {
96045 log_packet_detailed(" got field 'rapture'");
96046
96047#ifdef FREECIV_JSON_CONNECTION
96048 field_addr.name = "rapture";
96049#endif /* FREECIV_JSON_CONNECTION */
96050
96051 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
96053 }
96054 }
96055
96056 if (BV_ISSET(fields, 21)) {
96057 log_packet_detailed(" got field 'steal'");
96058
96059#ifdef FREECIV_JSON_CONNECTION
96060 field_addr.name = "steal";
96061#endif /* FREECIV_JSON_CONNECTION */
96062
96063 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
96065 }
96066 }
96067
96068 if (BV_ISSET(fields, 22)) {
96069 log_packet_detailed(" got field 'turn_founded'");
96070
96071#ifdef FREECIV_JSON_CONNECTION
96072 field_addr.name = "turn_founded";
96073#endif /* FREECIV_JSON_CONNECTION */
96074
96075 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
96076 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
96077 }
96078 }
96079
96080 if (BV_ISSET(fields, 23)) {
96081 log_packet_detailed(" got field 'turn_last_built'");
96082
96083#ifdef FREECIV_JSON_CONNECTION
96084 field_addr.name = "turn_last_built";
96085#endif /* FREECIV_JSON_CONNECTION */
96086
96087 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
96088 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
96089 }
96090 }
96091
96092 if (BV_ISSET(fields, 24)) {
96093 log_packet_detailed(" got field 'built'");
96094
96095#ifdef FREECIV_JSON_CONNECTION
96096 field_addr.name = "built";
96097#endif /* FREECIV_JSON_CONNECTION */
96098
96100#ifdef FREECIV_JSON_CONNECTION
96101 /* Enter array (start at initial element). */
96102 field_addr.sub_location = plocation_elem_new(0);
96103 /* Enter diff array element (start at the index address). */
96104 field_addr.sub_location->sub_location = plocation_field_new("index");
96105#endif /* FREECIV_JSON_CONNECTION */
96106
96107 while (TRUE) {
96108 int i;
96109
96110 /* Read next index */
96111#if B_LAST <= MAX_UINT8
96112 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
96113#else
96114 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
96115#endif
96117 }
96118
96119 if (i == B_LAST) {
96120 break;
96121 }
96122 if (i > B_LAST) {
96124 ": unexpected index %d "
96125 "> length %d in array diff",
96126 i,
96127 B_LAST);
96128 }
96129
96130#ifdef FREECIV_JSON_CONNECTION
96131 /* Content address. */
96132 field_addr.sub_location->sub_location->name = "data";
96133#endif /* FREECIV_JSON_CONNECTION */
96134
96135 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
96137 }
96138
96139#ifdef FREECIV_JSON_CONNECTION
96140 /* Move to the next diff array element. */
96141 field_addr.sub_location->number++;
96142 /* Back to the index address. */
96143 field_addr.sub_location->sub_location->name = "index";
96144#endif /* FREECIV_JSON_CONNECTION */
96145 }
96146
96147#ifdef FREECIV_JSON_CONNECTION
96148 /* Exit diff array element. */
96149 FC_FREE(field_addr.sub_location->sub_location);
96150 /* Exit array. */
96151 FC_FREE(field_addr.sub_location);
96152#endif /* FREECIV_JSON_CONNECTION */
96153 }
96154
96155 if (BV_ISSET(fields, 25)) {
96156 log_packet_detailed(" got field 'production_kind'");
96157
96158#ifdef FREECIV_JSON_CONNECTION
96159 field_addr.name = "production_kind";
96160#endif /* FREECIV_JSON_CONNECTION */
96161
96162 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
96163 RECEIVE_PACKET_FIELD_ERROR(production_kind);
96164 }
96165 }
96166
96167 if (BV_ISSET(fields, 26)) {
96168 log_packet_detailed(" got field 'production_value'");
96169
96170#ifdef FREECIV_JSON_CONNECTION
96171 field_addr.name = "production_value";
96172#endif /* FREECIV_JSON_CONNECTION */
96173
96174 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
96175 RECEIVE_PACKET_FIELD_ERROR(production_value);
96176 }
96177 }
96178
96179 if (nullptr == old) {
96180 old = fc_malloc(sizeof(*old));
96182 *old = *real_packet;
96184 } else {
96185 *old = *real_packet;
96186 }
96187
96188#else /* FREECIV_DELTA_PROTOCOL */
96189#ifdef FREECIV_JSON_CONNECTION
96190 field_addr.name = "name";
96191#endif /* FREECIV_JSON_CONNECTION */
96192
96193 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
96195 }
96196
96197#ifdef FREECIV_JSON_CONNECTION
96198 field_addr.name = "owner";
96199#endif /* FREECIV_JSON_CONNECTION */
96200
96201 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
96203 }
96204
96205#ifdef FREECIV_JSON_CONNECTION
96206 field_addr.name = "original";
96207#endif /* FREECIV_JSON_CONNECTION */
96208
96209 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
96211 }
96212
96213#ifdef FREECIV_JSON_CONNECTION
96214 field_addr.name = "size";
96215#endif /* FREECIV_JSON_CONNECTION */
96216
96217 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
96219 }
96220
96221#ifdef FREECIV_JSON_CONNECTION
96222 field_addr.name = "history";
96223#endif /* FREECIV_JSON_CONNECTION */
96224
96225 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
96227 }
96228
96229#ifdef FREECIV_JSON_CONNECTION
96230 field_addr.name = "ppl_happy";
96231#endif /* FREECIV_JSON_CONNECTION */
96232
96233 {
96234 int i;
96235
96236
96237#ifdef FREECIV_JSON_CONNECTION
96238 /* Enter array. */
96239 field_addr.sub_location = plocation_elem_new(0);
96240#endif /* FREECIV_JSON_CONNECTION */
96241
96242 for (i = 0; i < 5; i++) {
96243#ifdef FREECIV_JSON_CONNECTION
96244 /* Next array element */
96245 field_addr.sub_location->number = i;
96246#endif /* FREECIV_JSON_CONNECTION */
96247
96248 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
96249 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
96250 }
96251 }
96252
96253#ifdef FREECIV_JSON_CONNECTION
96254 /* Exit array. */
96255 FC_FREE(field_addr.sub_location);
96256#endif /* FREECIV_JSON_CONNECTION */
96257 }
96258
96259#ifdef FREECIV_JSON_CONNECTION
96260 field_addr.name = "ppl_content";
96261#endif /* FREECIV_JSON_CONNECTION */
96262
96263 {
96264 int i;
96265
96266
96267#ifdef FREECIV_JSON_CONNECTION
96268 /* Enter array. */
96269 field_addr.sub_location = plocation_elem_new(0);
96270#endif /* FREECIV_JSON_CONNECTION */
96271
96272 for (i = 0; i < 5; i++) {
96273#ifdef FREECIV_JSON_CONNECTION
96274 /* Next array element */
96275 field_addr.sub_location->number = i;
96276#endif /* FREECIV_JSON_CONNECTION */
96277
96278 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
96279 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
96280 }
96281 }
96282
96283#ifdef FREECIV_JSON_CONNECTION
96284 /* Exit array. */
96285 FC_FREE(field_addr.sub_location);
96286#endif /* FREECIV_JSON_CONNECTION */
96287 }
96288
96289#ifdef FREECIV_JSON_CONNECTION
96290 field_addr.name = "ppl_unhappy";
96291#endif /* FREECIV_JSON_CONNECTION */
96292
96293 {
96294 int i;
96295
96296
96297#ifdef FREECIV_JSON_CONNECTION
96298 /* Enter array. */
96299 field_addr.sub_location = plocation_elem_new(0);
96300#endif /* FREECIV_JSON_CONNECTION */
96301
96302 for (i = 0; i < 5; i++) {
96303#ifdef FREECIV_JSON_CONNECTION
96304 /* Next array element */
96305 field_addr.sub_location->number = i;
96306#endif /* FREECIV_JSON_CONNECTION */
96307
96308 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
96309 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
96310 }
96311 }
96312
96313#ifdef FREECIV_JSON_CONNECTION
96314 /* Exit array. */
96315 FC_FREE(field_addr.sub_location);
96316#endif /* FREECIV_JSON_CONNECTION */
96317 }
96318
96319#ifdef FREECIV_JSON_CONNECTION
96320 field_addr.name = "ppl_angry";
96321#endif /* FREECIV_JSON_CONNECTION */
96322
96323 {
96324 int i;
96325
96326
96327#ifdef FREECIV_JSON_CONNECTION
96328 /* Enter array. */
96329 field_addr.sub_location = plocation_elem_new(0);
96330#endif /* FREECIV_JSON_CONNECTION */
96331
96332 for (i = 0; i < 5; i++) {
96333#ifdef FREECIV_JSON_CONNECTION
96334 /* Next array element */
96335 field_addr.sub_location->number = i;
96336#endif /* FREECIV_JSON_CONNECTION */
96337
96338 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
96339 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
96340 }
96341 }
96342
96343#ifdef FREECIV_JSON_CONNECTION
96344 /* Exit array. */
96345 FC_FREE(field_addr.sub_location);
96346#endif /* FREECIV_JSON_CONNECTION */
96347 }
96348
96349#ifdef FREECIV_JSON_CONNECTION
96350 field_addr.name = "specialists_size";
96351#endif /* FREECIV_JSON_CONNECTION */
96352
96353 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
96354 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
96355 }
96356
96357#ifdef FREECIV_JSON_CONNECTION
96358 field_addr.name = "specialists";
96359#endif /* FREECIV_JSON_CONNECTION */
96360
96361 {
96362 int i;
96363
96364 if (real_packet->specialists_size > SP_MAX) {
96365 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
96366 }
96367
96368#ifdef FREECIV_JSON_CONNECTION
96369 /* Enter array. */
96370 field_addr.sub_location = plocation_elem_new(0);
96371#endif /* FREECIV_JSON_CONNECTION */
96372
96373 for (i = 0; i < real_packet->specialists_size; i++) {
96374#ifdef FREECIV_JSON_CONNECTION
96375 /* Next array element */
96376 field_addr.sub_location->number = i;
96377#endif /* FREECIV_JSON_CONNECTION */
96378
96379 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
96381 }
96382 }
96383
96384#ifdef FREECIV_JSON_CONNECTION
96385 /* Exit array. */
96386 FC_FREE(field_addr.sub_location);
96387#endif /* FREECIV_JSON_CONNECTION */
96388 }
96389
96390#ifdef FREECIV_JSON_CONNECTION
96391 field_addr.name = "food_stock";
96392#endif /* FREECIV_JSON_CONNECTION */
96393
96394 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
96395 RECEIVE_PACKET_FIELD_ERROR(food_stock);
96396 }
96397
96398#ifdef FREECIV_JSON_CONNECTION
96399 field_addr.name = "shield_stock";
96400#endif /* FREECIV_JSON_CONNECTION */
96401
96402 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
96403 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
96404 }
96405
96406#ifdef FREECIV_JSON_CONNECTION
96407 field_addr.name = "airlift";
96408#endif /* FREECIV_JSON_CONNECTION */
96409
96410 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift)) {
96412 }
96413
96414#ifdef FREECIV_JSON_CONNECTION
96415 field_addr.name = "debug";
96416#endif /* FREECIV_JSON_CONNECTION */
96417
96418 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
96420 }
96421
96422#ifdef FREECIV_JSON_CONNECTION
96423 field_addr.name = "did_buy";
96424#endif /* FREECIV_JSON_CONNECTION */
96425
96426 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
96428 }
96429
96430#ifdef FREECIV_JSON_CONNECTION
96431 field_addr.name = "did_sell";
96432#endif /* FREECIV_JSON_CONNECTION */
96433
96434 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
96436 }
96437
96438#ifdef FREECIV_JSON_CONNECTION
96439 field_addr.name = "was_happy";
96440#endif /* FREECIV_JSON_CONNECTION */
96441
96442 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
96443 RECEIVE_PACKET_FIELD_ERROR(was_happy);
96444 }
96445
96446#ifdef FREECIV_JSON_CONNECTION
96447 field_addr.name = "had_famine";
96448#endif /* FREECIV_JSON_CONNECTION */
96449
96450 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
96451 RECEIVE_PACKET_FIELD_ERROR(had_famine);
96452 }
96453
96454#ifdef FREECIV_JSON_CONNECTION
96455 field_addr.name = "anarchy";
96456#endif /* FREECIV_JSON_CONNECTION */
96457
96458 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
96460 }
96461
96462#ifdef FREECIV_JSON_CONNECTION
96463 field_addr.name = "rapture";
96464#endif /* FREECIV_JSON_CONNECTION */
96465
96466 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
96468 }
96469
96470#ifdef FREECIV_JSON_CONNECTION
96471 field_addr.name = "steal";
96472#endif /* FREECIV_JSON_CONNECTION */
96473
96474 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
96476 }
96477
96478#ifdef FREECIV_JSON_CONNECTION
96479 field_addr.name = "turn_founded";
96480#endif /* FREECIV_JSON_CONNECTION */
96481
96482 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
96483 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
96484 }
96485
96486#ifdef FREECIV_JSON_CONNECTION
96487 field_addr.name = "turn_last_built";
96488#endif /* FREECIV_JSON_CONNECTION */
96489
96490 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
96491 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
96492 }
96493
96494#ifdef FREECIV_JSON_CONNECTION
96495 field_addr.name = "built";
96496#endif /* FREECIV_JSON_CONNECTION */
96497
96498 {
96499 int i;
96500
96501
96502#ifdef FREECIV_JSON_CONNECTION
96503 /* Enter array. */
96504 field_addr.sub_location = plocation_elem_new(0);
96505#endif /* FREECIV_JSON_CONNECTION */
96506
96507 for (i = 0; i < B_LAST; i++) {
96508#ifdef FREECIV_JSON_CONNECTION
96509 /* Next array element */
96510 field_addr.sub_location->number = i;
96511#endif /* FREECIV_JSON_CONNECTION */
96512
96513 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
96515 }
96516 }
96517
96518#ifdef FREECIV_JSON_CONNECTION
96519 /* Exit array. */
96520 FC_FREE(field_addr.sub_location);
96521#endif /* FREECIV_JSON_CONNECTION */
96522 }
96523
96524#ifdef FREECIV_JSON_CONNECTION
96525 field_addr.name = "production_kind";
96526#endif /* FREECIV_JSON_CONNECTION */
96527
96528 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
96529 RECEIVE_PACKET_FIELD_ERROR(production_kind);
96530 }
96531
96532#ifdef FREECIV_JSON_CONNECTION
96533 field_addr.name = "production_value";
96534#endif /* FREECIV_JSON_CONNECTION */
96535
96536 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
96537 RECEIVE_PACKET_FIELD_ERROR(production_value);
96538 }
96539#endif /* FREECIV_DELTA_PROTOCOL */
96540
96542#undef FREE_PACKET_STRUCT
96543}
96544
96545static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
96546{
96547 const struct packet_edit_city *real_packet = packet;
96548 int e;
96550
96551 log_packet_detailed("packet_edit_city_100: sending info about (%d)",
96552 real_packet->id);
96553
96554#ifdef FREECIV_DELTA_PROTOCOL
96556 struct packet_edit_city *old;
96557 bool differ;
96558 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY;
96559
96560 if (nullptr == *hash) {
96562 nullptr, nullptr, nullptr, destroy_packet_edit_city);
96563 }
96564 BV_CLR_ALL(fields);
96565
96566 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
96567 old = fc_malloc(sizeof(*old));
96568 /* temporary bitcopy just to insert correctly */
96569 *old = *real_packet;
96572 }
96573
96574 differ = (strcmp(old->name, real_packet->name) != 0);
96575 if (differ) {
96576 BV_SET(fields, 0);
96577 }
96578
96579 differ = (old->owner != real_packet->owner);
96580 if (differ) {
96581 BV_SET(fields, 1);
96582 }
96583
96584 differ = (old->original != real_packet->original);
96585 if (differ) {
96586 BV_SET(fields, 2);
96587 }
96588
96589 differ = (old->size != real_packet->size);
96590 if (differ) {
96591 BV_SET(fields, 3);
96592 }
96593
96594 differ = (old->history != real_packet->history);
96595 if (differ) {
96596 BV_SET(fields, 4);
96597 }
96598
96599 differ = FALSE;
96600 {
96601 int i;
96602
96603 for (i = 0; i < 5; i++) {
96604 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
96605 if (differ) {
96606 break;
96607 }
96608 }
96609 }
96610 if (differ) {
96611 BV_SET(fields, 5);
96612 }
96613
96614 differ = FALSE;
96615 {
96616 int i;
96617
96618 for (i = 0; i < 5; i++) {
96619 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
96620 if (differ) {
96621 break;
96622 }
96623 }
96624 }
96625 if (differ) {
96626 BV_SET(fields, 6);
96627 }
96628
96629 differ = FALSE;
96630 {
96631 int i;
96632
96633 for (i = 0; i < 5; i++) {
96634 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
96635 if (differ) {
96636 break;
96637 }
96638 }
96639 }
96640 if (differ) {
96641 BV_SET(fields, 7);
96642 }
96643
96644 differ = FALSE;
96645 {
96646 int i;
96647
96648 for (i = 0; i < 5; i++) {
96649 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
96650 if (differ) {
96651 break;
96652 }
96653 }
96654 }
96655 if (differ) {
96656 BV_SET(fields, 8);
96657 }
96658
96659 differ = (old->specialists_size != real_packet->specialists_size);
96660 if (differ) {
96661 BV_SET(fields, 9);
96662 }
96663
96664 differ = (old->specialists_size != real_packet->specialists_size);
96665 if (!differ) {
96666 int i;
96667
96668 for (i = 0; i < old->specialists_size; i++) {
96669 differ = (old->specialists[i] != real_packet->specialists[i]);
96670 if (differ) {
96671 break;
96672 }
96673 }
96674 }
96675 if (differ) {
96676 BV_SET(fields, 10);
96677 }
96678
96679 differ = (old->food_stock != real_packet->food_stock);
96680 if (differ) {
96681 BV_SET(fields, 11);
96682 }
96683
96684 differ = (old->shield_stock != real_packet->shield_stock);
96685 if (differ) {
96686 BV_SET(fields, 12);
96687 }
96688
96689 /* folded into head */
96690 if (real_packet->airlift) {
96691 BV_SET(fields, 13);
96692 }
96693
96694 /* folded into head */
96695 if (real_packet->debug) {
96696 BV_SET(fields, 14);
96697 }
96698
96699 /* folded into head */
96700 if (real_packet->did_buy) {
96701 BV_SET(fields, 15);
96702 }
96703
96704 /* folded into head */
96705 if (real_packet->did_sell) {
96706 BV_SET(fields, 16);
96707 }
96708
96709 /* folded into head */
96710 if (real_packet->was_happy) {
96711 BV_SET(fields, 17);
96712 }
96713
96714 /* folded into head */
96715 if (real_packet->had_famine) {
96716 BV_SET(fields, 18);
96717 }
96718
96719 differ = (old->anarchy != real_packet->anarchy);
96720 if (differ) {
96721 BV_SET(fields, 19);
96722 }
96723
96724 differ = (old->rapture != real_packet->rapture);
96725 if (differ) {
96726 BV_SET(fields, 20);
96727 }
96728
96729 differ = (old->steal != real_packet->steal);
96730 if (differ) {
96731 BV_SET(fields, 21);
96732 }
96733
96734 differ = (old->turn_founded != real_packet->turn_founded);
96735 if (differ) {
96736 BV_SET(fields, 22);
96737 }
96738
96739 differ = (old->turn_last_built != real_packet->turn_last_built);
96740 if (differ) {
96741 BV_SET(fields, 23);
96742 }
96743
96744 differ = FALSE;
96745 {
96746 int i;
96747
96748 for (i = 0; i < B_LAST; i++) {
96749 differ = (old->built[i] != real_packet->built[i]);
96750 if (differ) {
96751 break;
96752 }
96753 }
96754 }
96755 if (differ) {
96756 BV_SET(fields, 24);
96757 }
96758
96759 differ = (old->production_kind != real_packet->production_kind);
96760 if (differ) {
96761 BV_SET(fields, 25);
96762 }
96763
96764 differ = (old->production_value != real_packet->production_value);
96765 if (differ) {
96766 BV_SET(fields, 26);
96767 }
96768#endif /* FREECIV_DELTA_PROTOCOL */
96769
96770#ifdef FREECIV_JSON_CONNECTION
96771 struct plocation field_addr;
96772 {
96773 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96776 }
96777#endif /* FREECIV_JSON_CONNECTION */
96778
96779#ifdef FREECIV_JSON_CONNECTION
96780 field_addr.name = "id";
96781#endif /* FREECIV_JSON_CONNECTION */
96782 e = 0;
96783
96784 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
96785
96786 if (e) {
96787 log_packet_detailed("'id' field error detected");
96788 }
96789
96790#ifdef FREECIV_DELTA_PROTOCOL
96791#ifdef FREECIV_JSON_CONNECTION
96792 field_addr.name = "fields";
96793#endif /* FREECIV_JSON_CONNECTION */
96794 e = 0;
96795 e |= DIO_BV_PUT(&dout, &field_addr, fields);
96796 if (e) {
96797 log_packet_detailed("fields bitvector error detected");
96798 }
96799
96800 if (BV_ISSET(fields, 0)) {
96801 log_packet_detailed(" field 'name' has changed");
96802
96803#ifdef FREECIV_JSON_CONNECTION
96804 field_addr.name = "name";
96805#endif /* FREECIV_JSON_CONNECTION */
96806 e = 0;
96807
96808 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
96809
96810 if (e) {
96811 log_packet_detailed("'name' field error detected");
96812 }
96813 }
96814
96815 if (BV_ISSET(fields, 1)) {
96816 log_packet_detailed(" field 'owner' has changed");
96817
96818#ifdef FREECIV_JSON_CONNECTION
96819 field_addr.name = "owner";
96820#endif /* FREECIV_JSON_CONNECTION */
96821 e = 0;
96822
96823 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
96824
96825 if (e) {
96826 log_packet_detailed("'owner' field error detected");
96827 }
96828 }
96829
96830 if (BV_ISSET(fields, 2)) {
96831 log_packet_detailed(" field 'original' has changed");
96832
96833#ifdef FREECIV_JSON_CONNECTION
96834 field_addr.name = "original";
96835#endif /* FREECIV_JSON_CONNECTION */
96836 e = 0;
96837
96838 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
96839
96840 if (e) {
96841 log_packet_detailed("'original' field error detected");
96842 }
96843 }
96844
96845 if (BV_ISSET(fields, 3)) {
96846 log_packet_detailed(" field 'size' has changed");
96847
96848#ifdef FREECIV_JSON_CONNECTION
96849 field_addr.name = "size";
96850#endif /* FREECIV_JSON_CONNECTION */
96851 e = 0;
96852
96853 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
96854
96855 if (e) {
96856 log_packet_detailed("'size' field error detected");
96857 }
96858 }
96859
96860 if (BV_ISSET(fields, 4)) {
96861 log_packet_detailed(" field 'history' has changed");
96862
96863#ifdef FREECIV_JSON_CONNECTION
96864 field_addr.name = "history";
96865#endif /* FREECIV_JSON_CONNECTION */
96866 e = 0;
96867
96868 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
96869
96870 if (e) {
96871 log_packet_detailed("'history' field error detected");
96872 }
96873 }
96874
96875 if (BV_ISSET(fields, 5)) {
96876 log_packet_detailed(" field 'ppl_happy' has changed");
96877
96878#ifdef FREECIV_JSON_CONNECTION
96879 field_addr.name = "ppl_happy";
96880#endif /* FREECIV_JSON_CONNECTION */
96881 e = 0;
96882
96883 {
96884 int i;
96885
96886#ifdef FREECIV_JSON_CONNECTION
96887 /* Create the array. */
96888 e |= DIO_PUT(farray, &dout, &field_addr, 5);
96889
96890 /* Enter array. */
96891 field_addr.sub_location = plocation_elem_new(0);
96892#endif /* FREECIV_JSON_CONNECTION */
96893
96894 for (i = 0; i < 5; i++) {
96895#ifdef FREECIV_JSON_CONNECTION
96896 /* Next array element. */
96897 field_addr.sub_location->number = i;
96898#endif /* FREECIV_JSON_CONNECTION */
96899
96900 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
96901 }
96902
96903#ifdef FREECIV_JSON_CONNECTION
96904 /* Exit array. */
96905 FC_FREE(field_addr.sub_location);
96906#endif /* FREECIV_JSON_CONNECTION */
96907 }
96908
96909 if (e) {
96910 log_packet_detailed("'ppl_happy' field error detected");
96911 }
96912 }
96913
96914 if (BV_ISSET(fields, 6)) {
96915 log_packet_detailed(" field 'ppl_content' has changed");
96916
96917#ifdef FREECIV_JSON_CONNECTION
96918 field_addr.name = "ppl_content";
96919#endif /* FREECIV_JSON_CONNECTION */
96920 e = 0;
96921
96922 {
96923 int i;
96924
96925#ifdef FREECIV_JSON_CONNECTION
96926 /* Create the array. */
96927 e |= DIO_PUT(farray, &dout, &field_addr, 5);
96928
96929 /* Enter array. */
96930 field_addr.sub_location = plocation_elem_new(0);
96931#endif /* FREECIV_JSON_CONNECTION */
96932
96933 for (i = 0; i < 5; i++) {
96934#ifdef FREECIV_JSON_CONNECTION
96935 /* Next array element. */
96936 field_addr.sub_location->number = i;
96937#endif /* FREECIV_JSON_CONNECTION */
96938
96939 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
96940 }
96941
96942#ifdef FREECIV_JSON_CONNECTION
96943 /* Exit array. */
96944 FC_FREE(field_addr.sub_location);
96945#endif /* FREECIV_JSON_CONNECTION */
96946 }
96947
96948 if (e) {
96949 log_packet_detailed("'ppl_content' field error detected");
96950 }
96951 }
96952
96953 if (BV_ISSET(fields, 7)) {
96954 log_packet_detailed(" field 'ppl_unhappy' has changed");
96955
96956#ifdef FREECIV_JSON_CONNECTION
96957 field_addr.name = "ppl_unhappy";
96958#endif /* FREECIV_JSON_CONNECTION */
96959 e = 0;
96960
96961 {
96962 int i;
96963
96964#ifdef FREECIV_JSON_CONNECTION
96965 /* Create the array. */
96966 e |= DIO_PUT(farray, &dout, &field_addr, 5);
96967
96968 /* Enter array. */
96969 field_addr.sub_location = plocation_elem_new(0);
96970#endif /* FREECIV_JSON_CONNECTION */
96971
96972 for (i = 0; i < 5; i++) {
96973#ifdef FREECIV_JSON_CONNECTION
96974 /* Next array element. */
96975 field_addr.sub_location->number = i;
96976#endif /* FREECIV_JSON_CONNECTION */
96977
96978 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
96979 }
96980
96981#ifdef FREECIV_JSON_CONNECTION
96982 /* Exit array. */
96983 FC_FREE(field_addr.sub_location);
96984#endif /* FREECIV_JSON_CONNECTION */
96985 }
96986
96987 if (e) {
96988 log_packet_detailed("'ppl_unhappy' field error detected");
96989 }
96990 }
96991
96992 if (BV_ISSET(fields, 8)) {
96993 log_packet_detailed(" field 'ppl_angry' has changed");
96994
96995#ifdef FREECIV_JSON_CONNECTION
96996 field_addr.name = "ppl_angry";
96997#endif /* FREECIV_JSON_CONNECTION */
96998 e = 0;
96999
97000 {
97001 int i;
97002
97003#ifdef FREECIV_JSON_CONNECTION
97004 /* Create the array. */
97005 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97006
97007 /* Enter array. */
97008 field_addr.sub_location = plocation_elem_new(0);
97009#endif /* FREECIV_JSON_CONNECTION */
97010
97011 for (i = 0; i < 5; i++) {
97012#ifdef FREECIV_JSON_CONNECTION
97013 /* Next array element. */
97014 field_addr.sub_location->number = i;
97015#endif /* FREECIV_JSON_CONNECTION */
97016
97017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
97018 }
97019
97020#ifdef FREECIV_JSON_CONNECTION
97021 /* Exit array. */
97022 FC_FREE(field_addr.sub_location);
97023#endif /* FREECIV_JSON_CONNECTION */
97024 }
97025
97026 if (e) {
97027 log_packet_detailed("'ppl_angry' field error detected");
97028 }
97029 }
97030
97031 if (BV_ISSET(fields, 9)) {
97032 log_packet_detailed(" field 'specialists_size' has changed");
97033
97034#ifdef FREECIV_JSON_CONNECTION
97035 field_addr.name = "specialists_size";
97036#endif /* FREECIV_JSON_CONNECTION */
97037 e = 0;
97038
97039 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
97040
97041 if (e) {
97042 log_packet_detailed("'specialists_size' field error detected");
97043 }
97044 }
97045
97046 if (BV_ISSET(fields, 10)) {
97047 log_packet_detailed(" field 'specialists' has changed");
97048
97049#ifdef FREECIV_JSON_CONNECTION
97050 field_addr.name = "specialists";
97051#endif /* FREECIV_JSON_CONNECTION */
97052 e = 0;
97053
97054 {
97055 int i;
97056
97057#ifdef FREECIV_JSON_CONNECTION
97058 /* Create the array. */
97059 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
97060
97061 /* Enter array. */
97062 field_addr.sub_location = plocation_elem_new(0);
97063#endif /* FREECIV_JSON_CONNECTION */
97064
97065 for (i = 0; i < real_packet->specialists_size; i++) {
97066#ifdef FREECIV_JSON_CONNECTION
97067 /* Next array element. */
97068 field_addr.sub_location->number = i;
97069#endif /* FREECIV_JSON_CONNECTION */
97070
97071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
97072 }
97073
97074#ifdef FREECIV_JSON_CONNECTION
97075 /* Exit array. */
97076 FC_FREE(field_addr.sub_location);
97077#endif /* FREECIV_JSON_CONNECTION */
97078 }
97079
97080 if (e) {
97081 log_packet_detailed("'specialists' field error detected");
97082 }
97083 }
97084
97085 if (BV_ISSET(fields, 11)) {
97086 log_packet_detailed(" field 'food_stock' has changed");
97087
97088#ifdef FREECIV_JSON_CONNECTION
97089 field_addr.name = "food_stock";
97090#endif /* FREECIV_JSON_CONNECTION */
97091 e = 0;
97092
97093 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
97094
97095 if (e) {
97096 log_packet_detailed("'food_stock' field error detected");
97097 }
97098 }
97099
97100 if (BV_ISSET(fields, 12)) {
97101 log_packet_detailed(" field 'shield_stock' has changed");
97102
97103#ifdef FREECIV_JSON_CONNECTION
97104 field_addr.name = "shield_stock";
97105#endif /* FREECIV_JSON_CONNECTION */
97106 e = 0;
97107
97108 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
97109
97110 if (e) {
97111 log_packet_detailed("'shield_stock' field error detected");
97112 }
97113 }
97114
97115 /* field 13 is folded into the header */
97116
97117 /* field 14 is folded into the header */
97118
97119 /* field 15 is folded into the header */
97120
97121 /* field 16 is folded into the header */
97122
97123 /* field 17 is folded into the header */
97124
97125 /* field 18 is folded into the header */
97126
97127 if (BV_ISSET(fields, 19)) {
97128 log_packet_detailed(" field 'anarchy' has changed");
97129
97130#ifdef FREECIV_JSON_CONNECTION
97131 field_addr.name = "anarchy";
97132#endif /* FREECIV_JSON_CONNECTION */
97133 e = 0;
97134
97135 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
97136
97137 if (e) {
97138 log_packet_detailed("'anarchy' field error detected");
97139 }
97140 }
97141
97142 if (BV_ISSET(fields, 20)) {
97143 log_packet_detailed(" field 'rapture' has changed");
97144
97145#ifdef FREECIV_JSON_CONNECTION
97146 field_addr.name = "rapture";
97147#endif /* FREECIV_JSON_CONNECTION */
97148 e = 0;
97149
97150 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
97151
97152 if (e) {
97153 log_packet_detailed("'rapture' field error detected");
97154 }
97155 }
97156
97157 if (BV_ISSET(fields, 21)) {
97158 log_packet_detailed(" field 'steal' has changed");
97159
97160#ifdef FREECIV_JSON_CONNECTION
97161 field_addr.name = "steal";
97162#endif /* FREECIV_JSON_CONNECTION */
97163 e = 0;
97164
97165 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
97166
97167 if (e) {
97168 log_packet_detailed("'steal' field error detected");
97169 }
97170 }
97171
97172 if (BV_ISSET(fields, 22)) {
97173 log_packet_detailed(" field 'turn_founded' has changed");
97174
97175#ifdef FREECIV_JSON_CONNECTION
97176 field_addr.name = "turn_founded";
97177#endif /* FREECIV_JSON_CONNECTION */
97178 e = 0;
97179
97180 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
97181
97182 if (e) {
97183 log_packet_detailed("'turn_founded' field error detected");
97184 }
97185 }
97186
97187 if (BV_ISSET(fields, 23)) {
97188 log_packet_detailed(" field 'turn_last_built' has changed");
97189
97190#ifdef FREECIV_JSON_CONNECTION
97191 field_addr.name = "turn_last_built";
97192#endif /* FREECIV_JSON_CONNECTION */
97193 e = 0;
97194
97195 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
97196
97197 if (e) {
97198 log_packet_detailed("'turn_last_built' field error detected");
97199 }
97200 }
97201
97202 if (BV_ISSET(fields, 24)) {
97203 log_packet_detailed(" field 'built' has changed");
97204
97205#ifdef FREECIV_JSON_CONNECTION
97206 field_addr.name = "built";
97207#endif /* FREECIV_JSON_CONNECTION */
97208 e = 0;
97209
97210 {
97211 int i;
97212
97214
97215#ifdef FREECIV_JSON_CONNECTION
97216 size_t count_i = 0;
97217
97218 /* Create the array. */
97219 e |= DIO_PUT(farray, &dout, &field_addr, 0);
97220
97221 /* Enter array. */
97222 field_addr.sub_location = plocation_elem_new(0);
97223#endif /* FREECIV_JSON_CONNECTION */
97224
97225 for (i = 0; i < B_LAST; i++) {
97226 differ = (old->built[i] != real_packet->built[i]);
97227
97228 if (!differ) {
97229 continue;
97230 }
97231
97232#ifdef FREECIV_JSON_CONNECTION
97233 /* Append next diff array element. */
97234 field_addr.sub_location->number = -1;
97235
97236 /* Create the diff array element. */
97237 e |= DIO_PUT(object, &dout, &field_addr);
97238
97239 /* Enter diff array element (start at the index address). */
97240 field_addr.sub_location->number = count_i++;
97241 field_addr.sub_location->sub_location = plocation_field_new("index");
97242#endif /* FREECIV_JSON_CONNECTION */
97243
97244 /* Write the index */
97245#if B_LAST <= MAX_UINT8
97246 e |= DIO_PUT(uint8, &dout, &field_addr, i);
97247#else
97248 e |= DIO_PUT(uint16, &dout, &field_addr, i);
97249#endif
97250
97251#ifdef FREECIV_JSON_CONNECTION
97252 /* Content address. */
97253 field_addr.sub_location->sub_location->name = "data";
97254#endif /* FREECIV_JSON_CONNECTION */
97255
97256 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
97257
97258#ifdef FREECIV_JSON_CONNECTION
97259 /* Exit diff array element. */
97260 FC_FREE(field_addr.sub_location->sub_location);
97261#endif /* FREECIV_JSON_CONNECTION */
97262 }
97263
97264#ifdef FREECIV_JSON_CONNECTION
97265 /* Append diff array element. */
97266 field_addr.sub_location->number = -1;
97267
97268 /* Create the terminating diff array element. */
97269 e |= DIO_PUT(object, &dout, &field_addr);
97270
97271 /* Enter diff array element (start at the index address). */
97272 field_addr.sub_location->number = count_i;
97273 field_addr.sub_location->sub_location = plocation_field_new("index");
97274#endif /* FREECIV_JSON_CONNECTION */
97275
97276 /* Write the sentinel value */
97277#if B_LAST <= MAX_UINT8
97278 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
97279#else
97280 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
97281#endif
97282
97283#ifdef FREECIV_JSON_CONNECTION
97284 /* Exit diff array element. */
97285 FC_FREE(field_addr.sub_location->sub_location);
97286 /* Exit array. */
97287 FC_FREE(field_addr.sub_location);
97288#endif /* FREECIV_JSON_CONNECTION */
97289 }
97290
97291 if (e) {
97292 log_packet_detailed("'built' field error detected");
97293 }
97294 }
97295
97296 if (BV_ISSET(fields, 25)) {
97297 log_packet_detailed(" field 'production_kind' has changed");
97298
97299#ifdef FREECIV_JSON_CONNECTION
97300 field_addr.name = "production_kind";
97301#endif /* FREECIV_JSON_CONNECTION */
97302 e = 0;
97303
97304 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
97305
97306 if (e) {
97307 log_packet_detailed("'production_kind' field error detected");
97308 }
97309 }
97310
97311 if (BV_ISSET(fields, 26)) {
97312 log_packet_detailed(" field 'production_value' has changed");
97313
97314#ifdef FREECIV_JSON_CONNECTION
97315 field_addr.name = "production_value";
97316#endif /* FREECIV_JSON_CONNECTION */
97317 e = 0;
97318
97319 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
97320
97321 if (e) {
97322 log_packet_detailed("'production_value' field error detected");
97323 }
97324 }
97325
97326 *old = *real_packet;
97327
97328#else /* FREECIV_DELTA_PROTOCOL */
97329#ifdef FREECIV_JSON_CONNECTION
97330 field_addr.name = "name";
97331#endif /* FREECIV_JSON_CONNECTION */
97332 e = 0;
97333
97334 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
97335
97336 if (e) {
97337 log_packet_detailed("'name' field error detected");
97338 }
97339
97340#ifdef FREECIV_JSON_CONNECTION
97341 field_addr.name = "owner";
97342#endif /* FREECIV_JSON_CONNECTION */
97343 e = 0;
97344
97345 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
97346
97347 if (e) {
97348 log_packet_detailed("'owner' field error detected");
97349 }
97350
97351#ifdef FREECIV_JSON_CONNECTION
97352 field_addr.name = "original";
97353#endif /* FREECIV_JSON_CONNECTION */
97354 e = 0;
97355
97356 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
97357
97358 if (e) {
97359 log_packet_detailed("'original' field error detected");
97360 }
97361
97362#ifdef FREECIV_JSON_CONNECTION
97363 field_addr.name = "size";
97364#endif /* FREECIV_JSON_CONNECTION */
97365 e = 0;
97366
97367 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
97368
97369 if (e) {
97370 log_packet_detailed("'size' field error detected");
97371 }
97372
97373#ifdef FREECIV_JSON_CONNECTION
97374 field_addr.name = "history";
97375#endif /* FREECIV_JSON_CONNECTION */
97376 e = 0;
97377
97378 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
97379
97380 if (e) {
97381 log_packet_detailed("'history' field error detected");
97382 }
97383
97384#ifdef FREECIV_JSON_CONNECTION
97385 field_addr.name = "ppl_happy";
97386#endif /* FREECIV_JSON_CONNECTION */
97387 e = 0;
97388
97389 {
97390 int i;
97391
97392#ifdef FREECIV_JSON_CONNECTION
97393 /* Create the array. */
97394 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97395
97396 /* Enter array. */
97397 field_addr.sub_location = plocation_elem_new(0);
97398#endif /* FREECIV_JSON_CONNECTION */
97399
97400 for (i = 0; i < 5; i++) {
97401#ifdef FREECIV_JSON_CONNECTION
97402 /* Next array element. */
97403 field_addr.sub_location->number = i;
97404#endif /* FREECIV_JSON_CONNECTION */
97405
97406 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
97407 }
97408
97409#ifdef FREECIV_JSON_CONNECTION
97410 /* Exit array. */
97411 FC_FREE(field_addr.sub_location);
97412#endif /* FREECIV_JSON_CONNECTION */
97413 }
97414
97415 if (e) {
97416 log_packet_detailed("'ppl_happy' field error detected");
97417 }
97418
97419#ifdef FREECIV_JSON_CONNECTION
97420 field_addr.name = "ppl_content";
97421#endif /* FREECIV_JSON_CONNECTION */
97422 e = 0;
97423
97424 {
97425 int i;
97426
97427#ifdef FREECIV_JSON_CONNECTION
97428 /* Create the array. */
97429 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97430
97431 /* Enter array. */
97432 field_addr.sub_location = plocation_elem_new(0);
97433#endif /* FREECIV_JSON_CONNECTION */
97434
97435 for (i = 0; i < 5; i++) {
97436#ifdef FREECIV_JSON_CONNECTION
97437 /* Next array element. */
97438 field_addr.sub_location->number = i;
97439#endif /* FREECIV_JSON_CONNECTION */
97440
97441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
97442 }
97443
97444#ifdef FREECIV_JSON_CONNECTION
97445 /* Exit array. */
97446 FC_FREE(field_addr.sub_location);
97447#endif /* FREECIV_JSON_CONNECTION */
97448 }
97449
97450 if (e) {
97451 log_packet_detailed("'ppl_content' field error detected");
97452 }
97453
97454#ifdef FREECIV_JSON_CONNECTION
97455 field_addr.name = "ppl_unhappy";
97456#endif /* FREECIV_JSON_CONNECTION */
97457 e = 0;
97458
97459 {
97460 int i;
97461
97462#ifdef FREECIV_JSON_CONNECTION
97463 /* Create the array. */
97464 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97465
97466 /* Enter array. */
97467 field_addr.sub_location = plocation_elem_new(0);
97468#endif /* FREECIV_JSON_CONNECTION */
97469
97470 for (i = 0; i < 5; i++) {
97471#ifdef FREECIV_JSON_CONNECTION
97472 /* Next array element. */
97473 field_addr.sub_location->number = i;
97474#endif /* FREECIV_JSON_CONNECTION */
97475
97476 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
97477 }
97478
97479#ifdef FREECIV_JSON_CONNECTION
97480 /* Exit array. */
97481 FC_FREE(field_addr.sub_location);
97482#endif /* FREECIV_JSON_CONNECTION */
97483 }
97484
97485 if (e) {
97486 log_packet_detailed("'ppl_unhappy' field error detected");
97487 }
97488
97489#ifdef FREECIV_JSON_CONNECTION
97490 field_addr.name = "ppl_angry";
97491#endif /* FREECIV_JSON_CONNECTION */
97492 e = 0;
97493
97494 {
97495 int i;
97496
97497#ifdef FREECIV_JSON_CONNECTION
97498 /* Create the array. */
97499 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97500
97501 /* Enter array. */
97502 field_addr.sub_location = plocation_elem_new(0);
97503#endif /* FREECIV_JSON_CONNECTION */
97504
97505 for (i = 0; i < 5; i++) {
97506#ifdef FREECIV_JSON_CONNECTION
97507 /* Next array element. */
97508 field_addr.sub_location->number = i;
97509#endif /* FREECIV_JSON_CONNECTION */
97510
97511 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
97512 }
97513
97514#ifdef FREECIV_JSON_CONNECTION
97515 /* Exit array. */
97516 FC_FREE(field_addr.sub_location);
97517#endif /* FREECIV_JSON_CONNECTION */
97518 }
97519
97520 if (e) {
97521 log_packet_detailed("'ppl_angry' field error detected");
97522 }
97523
97524#ifdef FREECIV_JSON_CONNECTION
97525 field_addr.name = "specialists_size";
97526#endif /* FREECIV_JSON_CONNECTION */
97527 e = 0;
97528
97529 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
97530
97531 if (e) {
97532 log_packet_detailed("'specialists_size' field error detected");
97533 }
97534
97535#ifdef FREECIV_JSON_CONNECTION
97536 field_addr.name = "specialists";
97537#endif /* FREECIV_JSON_CONNECTION */
97538 e = 0;
97539
97540 {
97541 int i;
97542
97543#ifdef FREECIV_JSON_CONNECTION
97544 /* Create the array. */
97545 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
97546
97547 /* Enter array. */
97548 field_addr.sub_location = plocation_elem_new(0);
97549#endif /* FREECIV_JSON_CONNECTION */
97550
97551 for (i = 0; i < real_packet->specialists_size; i++) {
97552#ifdef FREECIV_JSON_CONNECTION
97553 /* Next array element. */
97554 field_addr.sub_location->number = i;
97555#endif /* FREECIV_JSON_CONNECTION */
97556
97557 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
97558 }
97559
97560#ifdef FREECIV_JSON_CONNECTION
97561 /* Exit array. */
97562 FC_FREE(field_addr.sub_location);
97563#endif /* FREECIV_JSON_CONNECTION */
97564 }
97565
97566 if (e) {
97567 log_packet_detailed("'specialists' field error detected");
97568 }
97569
97570#ifdef FREECIV_JSON_CONNECTION
97571 field_addr.name = "food_stock";
97572#endif /* FREECIV_JSON_CONNECTION */
97573 e = 0;
97574
97575 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
97576
97577 if (e) {
97578 log_packet_detailed("'food_stock' field error detected");
97579 }
97580
97581#ifdef FREECIV_JSON_CONNECTION
97582 field_addr.name = "shield_stock";
97583#endif /* FREECIV_JSON_CONNECTION */
97584 e = 0;
97585
97586 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
97587
97588 if (e) {
97589 log_packet_detailed("'shield_stock' field error detected");
97590 }
97591
97592#ifdef FREECIV_JSON_CONNECTION
97593 field_addr.name = "airlift";
97594#endif /* FREECIV_JSON_CONNECTION */
97595 e = 0;
97596
97597 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift);
97598
97599 if (e) {
97600 log_packet_detailed("'airlift' field error detected");
97601 }
97602
97603#ifdef FREECIV_JSON_CONNECTION
97604 field_addr.name = "debug";
97605#endif /* FREECIV_JSON_CONNECTION */
97606 e = 0;
97607
97608 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
97609
97610 if (e) {
97611 log_packet_detailed("'debug' field error detected");
97612 }
97613
97614#ifdef FREECIV_JSON_CONNECTION
97615 field_addr.name = "did_buy";
97616#endif /* FREECIV_JSON_CONNECTION */
97617 e = 0;
97618
97619 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
97620
97621 if (e) {
97622 log_packet_detailed("'did_buy' field error detected");
97623 }
97624
97625#ifdef FREECIV_JSON_CONNECTION
97626 field_addr.name = "did_sell";
97627#endif /* FREECIV_JSON_CONNECTION */
97628 e = 0;
97629
97630 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
97631
97632 if (e) {
97633 log_packet_detailed("'did_sell' field error detected");
97634 }
97635
97636#ifdef FREECIV_JSON_CONNECTION
97637 field_addr.name = "was_happy";
97638#endif /* FREECIV_JSON_CONNECTION */
97639 e = 0;
97640
97641 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
97642
97643 if (e) {
97644 log_packet_detailed("'was_happy' field error detected");
97645 }
97646
97647#ifdef FREECIV_JSON_CONNECTION
97648 field_addr.name = "had_famine";
97649#endif /* FREECIV_JSON_CONNECTION */
97650 e = 0;
97651
97652 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
97653
97654 if (e) {
97655 log_packet_detailed("'had_famine' field error detected");
97656 }
97657
97658#ifdef FREECIV_JSON_CONNECTION
97659 field_addr.name = "anarchy";
97660#endif /* FREECIV_JSON_CONNECTION */
97661 e = 0;
97662
97663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
97664
97665 if (e) {
97666 log_packet_detailed("'anarchy' field error detected");
97667 }
97668
97669#ifdef FREECIV_JSON_CONNECTION
97670 field_addr.name = "rapture";
97671#endif /* FREECIV_JSON_CONNECTION */
97672 e = 0;
97673
97674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
97675
97676 if (e) {
97677 log_packet_detailed("'rapture' field error detected");
97678 }
97679
97680#ifdef FREECIV_JSON_CONNECTION
97681 field_addr.name = "steal";
97682#endif /* FREECIV_JSON_CONNECTION */
97683 e = 0;
97684
97685 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
97686
97687 if (e) {
97688 log_packet_detailed("'steal' field error detected");
97689 }
97690
97691#ifdef FREECIV_JSON_CONNECTION
97692 field_addr.name = "turn_founded";
97693#endif /* FREECIV_JSON_CONNECTION */
97694 e = 0;
97695
97696 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
97697
97698 if (e) {
97699 log_packet_detailed("'turn_founded' field error detected");
97700 }
97701
97702#ifdef FREECIV_JSON_CONNECTION
97703 field_addr.name = "turn_last_built";
97704#endif /* FREECIV_JSON_CONNECTION */
97705 e = 0;
97706
97707 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
97708
97709 if (e) {
97710 log_packet_detailed("'turn_last_built' field error detected");
97711 }
97712
97713#ifdef FREECIV_JSON_CONNECTION
97714 field_addr.name = "built";
97715#endif /* FREECIV_JSON_CONNECTION */
97716 e = 0;
97717
97718 {
97719 int i;
97720
97721#ifdef FREECIV_JSON_CONNECTION
97722 /* Create the array. */
97723 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
97724
97725 /* Enter array. */
97726 field_addr.sub_location = plocation_elem_new(0);
97727#endif /* FREECIV_JSON_CONNECTION */
97728
97729 for (i = 0; i < B_LAST; i++) {
97730#ifdef FREECIV_JSON_CONNECTION
97731 /* Next array element. */
97732 field_addr.sub_location->number = i;
97733#endif /* FREECIV_JSON_CONNECTION */
97734
97735 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
97736 }
97737
97738#ifdef FREECIV_JSON_CONNECTION
97739 /* Exit array. */
97740 FC_FREE(field_addr.sub_location);
97741#endif /* FREECIV_JSON_CONNECTION */
97742 }
97743
97744 if (e) {
97745 log_packet_detailed("'built' field error detected");
97746 }
97747
97748#ifdef FREECIV_JSON_CONNECTION
97749 field_addr.name = "production_kind";
97750#endif /* FREECIV_JSON_CONNECTION */
97751 e = 0;
97752
97753 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
97754
97755 if (e) {
97756 log_packet_detailed("'production_kind' field error detected");
97757 }
97758
97759#ifdef FREECIV_JSON_CONNECTION
97760 field_addr.name = "production_value";
97761#endif /* FREECIV_JSON_CONNECTION */
97762 e = 0;
97763
97764 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
97765
97766 if (e) {
97767 log_packet_detailed("'production_value' field error detected");
97768 }
97769#endif /* FREECIV_DELTA_PROTOCOL */
97770
97772}
97773
97774int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
97775{
97776 if (!pc->used) {
97777 log_error("WARNING: trying to send data to the closed connection %s",
97779 return -1;
97780 }
97781 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY].packet != nullptr, -1,
97782 "Handler for PACKET_EDIT_CITY not installed");
97783 return pc->phs.handlers->send[PACKET_EDIT_CITY].packet(pc, packet);
97784}
97785
97787{
97788 memset(packet, 0, sizeof(*packet));
97789}
97790
97791#define free_packet_edit_player_create(_packet) (void) 0
97792#define destroy_packet_edit_player_create free
97793
97794#ifdef FREECIV_DELTA_PROTOCOL
97795#define hash_packet_edit_player_create_100 hash_const
97796#define cmp_packet_edit_player_create_100 cmp_const
97798#endif /* FREECIV_DELTA_PROTOCOL */
97799
97801{
97802#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_create(_packet)
97804
97805#ifdef FREECIV_JSON_CONNECTION
97806 struct plocation field_addr;
97807 {
97808 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
97811 }
97812#endif /* FREECIV_JSON_CONNECTION */
97813
97814 log_packet_detailed("packet_edit_player_create_100: got info about ()");
97815
97816#ifdef FREECIV_DELTA_PROTOCOL
97819 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_CREATE;
97820
97821 if (nullptr == *hash) {
97823 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
97824 }
97825
97826 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
97827 *real_packet = *old;
97828 } else {
97829 /* packet is already initialized empty */
97830 log_packet_detailed(" no old info");
97831 }
97832
97833#ifdef FREECIV_JSON_CONNECTION
97834 field_addr.name = "fields";
97835#endif /* FREECIV_JSON_CONNECTION */
97836 DIO_BV_GET(&din, &field_addr, fields);
97837
97838 if (BV_ISSET(fields, 0)) {
97839 log_packet_detailed(" got field 'tag'");
97840
97841#ifdef FREECIV_JSON_CONNECTION
97842 field_addr.name = "tag";
97843#endif /* FREECIV_JSON_CONNECTION */
97844
97845 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
97847 }
97848 }
97849
97850 if (nullptr == old) {
97851 old = fc_malloc(sizeof(*old));
97853 *old = *real_packet;
97855 } else {
97856 *old = *real_packet;
97857 }
97858
97859#else /* FREECIV_DELTA_PROTOCOL */
97860#ifdef FREECIV_JSON_CONNECTION
97861 field_addr.name = "tag";
97862#endif /* FREECIV_JSON_CONNECTION */
97863
97864 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
97866 }
97867#endif /* FREECIV_DELTA_PROTOCOL */
97868
97870#undef FREE_PACKET_STRUCT
97871}
97872
97874{
97875 const struct packet_edit_player_create *real_packet = packet;
97876 int e;
97878
97879 log_packet_detailed("packet_edit_player_create_100: sending info about ()");
97880
97881#ifdef FREECIV_DELTA_PROTOCOL
97884 bool differ;
97885 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_CREATE;
97886
97887 if (nullptr == *hash) {
97889 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
97890 }
97891 BV_CLR_ALL(fields);
97892
97893 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
97894 old = fc_malloc(sizeof(*old));
97895 /* temporary bitcopy just to insert correctly */
97896 *old = *real_packet;
97899 }
97900
97901 differ = (old->tag != real_packet->tag);
97902 if (differ) {
97903 BV_SET(fields, 0);
97904 }
97905#endif /* FREECIV_DELTA_PROTOCOL */
97906
97907#ifdef FREECIV_JSON_CONNECTION
97908 struct plocation field_addr;
97909 {
97910 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
97913 }
97914#endif /* FREECIV_JSON_CONNECTION */
97915
97916#ifdef FREECIV_DELTA_PROTOCOL
97917#ifdef FREECIV_JSON_CONNECTION
97918 field_addr.name = "fields";
97919#endif /* FREECIV_JSON_CONNECTION */
97920 e = 0;
97921 e |= DIO_BV_PUT(&dout, &field_addr, fields);
97922 if (e) {
97923 log_packet_detailed("fields bitvector error detected");
97924 }
97925
97926 if (BV_ISSET(fields, 0)) {
97927 log_packet_detailed(" field 'tag' has changed");
97928
97929#ifdef FREECIV_JSON_CONNECTION
97930 field_addr.name = "tag";
97931#endif /* FREECIV_JSON_CONNECTION */
97932 e = 0;
97933
97934 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
97935
97936 if (e) {
97937 log_packet_detailed("'tag' field error detected");
97938 }
97939 }
97940
97941 *old = *real_packet;
97942
97943#else /* FREECIV_DELTA_PROTOCOL */
97944#ifdef FREECIV_JSON_CONNECTION
97945 field_addr.name = "tag";
97946#endif /* FREECIV_JSON_CONNECTION */
97947 e = 0;
97948
97949 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
97950
97951 if (e) {
97952 log_packet_detailed("'tag' field error detected");
97953 }
97954#endif /* FREECIV_DELTA_PROTOCOL */
97955
97957}
97958
97960{
97961 if (!pc->used) {
97962 log_error("WARNING: trying to send data to the closed connection %s",
97964 return -1;
97965 }
97966 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet != nullptr, -1,
97967 "Handler for PACKET_EDIT_PLAYER_CREATE not installed");
97968 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet(pc, packet);
97969}
97970
97972{
97973 struct packet_edit_player_create packet, *real_packet = &packet;
97974
97975 real_packet->tag = tag;
97976
97978}
97979
97981{
97982 memset(packet, 0, sizeof(*packet));
97983}
97984
97985#define free_packet_edit_player_remove(_packet) (void) 0
97986#define destroy_packet_edit_player_remove free
97987
97988#ifdef FREECIV_DELTA_PROTOCOL
97989#define hash_packet_edit_player_remove_100 hash_const
97990#define cmp_packet_edit_player_remove_100 cmp_const
97992#endif /* FREECIV_DELTA_PROTOCOL */
97993
97995{
97996#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_remove(_packet)
97998
97999#ifdef FREECIV_JSON_CONNECTION
98000 struct plocation field_addr;
98001 {
98002 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98005 }
98006#endif /* FREECIV_JSON_CONNECTION */
98007
98008 log_packet_detailed("packet_edit_player_remove_100: got info about ()");
98009
98010#ifdef FREECIV_DELTA_PROTOCOL
98013 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_REMOVE;
98014
98015 if (nullptr == *hash) {
98017 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
98018 }
98019
98020 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98021 *real_packet = *old;
98022 } else {
98023 /* packet is already initialized empty */
98024 log_packet_detailed(" no old info");
98025 }
98026
98027#ifdef FREECIV_JSON_CONNECTION
98028 field_addr.name = "fields";
98029#endif /* FREECIV_JSON_CONNECTION */
98030 DIO_BV_GET(&din, &field_addr, fields);
98031
98032 if (BV_ISSET(fields, 0)) {
98033 log_packet_detailed(" got field 'id'");
98034
98035#ifdef FREECIV_JSON_CONNECTION
98036 field_addr.name = "id";
98037#endif /* FREECIV_JSON_CONNECTION */
98038
98039 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98041 }
98042 }
98043
98044 if (nullptr == old) {
98045 old = fc_malloc(sizeof(*old));
98047 *old = *real_packet;
98049 } else {
98050 *old = *real_packet;
98051 }
98052
98053#else /* FREECIV_DELTA_PROTOCOL */
98054#ifdef FREECIV_JSON_CONNECTION
98055 field_addr.name = "id";
98056#endif /* FREECIV_JSON_CONNECTION */
98057
98058 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98060 }
98061#endif /* FREECIV_DELTA_PROTOCOL */
98062
98064#undef FREE_PACKET_STRUCT
98065}
98066
98068{
98069 const struct packet_edit_player_remove *real_packet = packet;
98070 int e;
98072
98073 log_packet_detailed("packet_edit_player_remove_100: sending info about ()");
98074
98075#ifdef FREECIV_DELTA_PROTOCOL
98078 bool differ;
98079 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_REMOVE;
98080
98081 if (nullptr == *hash) {
98083 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
98084 }
98085 BV_CLR_ALL(fields);
98086
98087 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
98088 old = fc_malloc(sizeof(*old));
98089 /* temporary bitcopy just to insert correctly */
98090 *old = *real_packet;
98093 }
98094
98095 differ = (old->id != real_packet->id);
98096 if (differ) {
98097 BV_SET(fields, 0);
98098 }
98099#endif /* FREECIV_DELTA_PROTOCOL */
98100
98101#ifdef FREECIV_JSON_CONNECTION
98102 struct plocation field_addr;
98103 {
98104 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98107 }
98108#endif /* FREECIV_JSON_CONNECTION */
98109
98110#ifdef FREECIV_DELTA_PROTOCOL
98111#ifdef FREECIV_JSON_CONNECTION
98112 field_addr.name = "fields";
98113#endif /* FREECIV_JSON_CONNECTION */
98114 e = 0;
98115 e |= DIO_BV_PUT(&dout, &field_addr, fields);
98116 if (e) {
98117 log_packet_detailed("fields bitvector error detected");
98118 }
98119
98120 if (BV_ISSET(fields, 0)) {
98121 log_packet_detailed(" field 'id' has changed");
98122
98123#ifdef FREECIV_JSON_CONNECTION
98124 field_addr.name = "id";
98125#endif /* FREECIV_JSON_CONNECTION */
98126 e = 0;
98127
98128 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
98129
98130 if (e) {
98131 log_packet_detailed("'id' field error detected");
98132 }
98133 }
98134
98135 *old = *real_packet;
98136
98137#else /* FREECIV_DELTA_PROTOCOL */
98138#ifdef FREECIV_JSON_CONNECTION
98139 field_addr.name = "id";
98140#endif /* FREECIV_JSON_CONNECTION */
98141 e = 0;
98142
98143 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
98144
98145 if (e) {
98146 log_packet_detailed("'id' field error detected");
98147 }
98148#endif /* FREECIV_DELTA_PROTOCOL */
98149
98151}
98152
98154{
98155 if (!pc->used) {
98156 log_error("WARNING: trying to send data to the closed connection %s",
98158 return -1;
98159 }
98160 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet != nullptr, -1,
98161 "Handler for PACKET_EDIT_PLAYER_REMOVE not installed");
98162 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet(pc, packet);
98163}
98164
98166{
98167 struct packet_edit_player_remove packet, *real_packet = &packet;
98168
98169 real_packet->id = id;
98170
98172}
98173
98174static inline void init_packet_edit_player(struct packet_edit_player *packet)
98175{
98176 memset(packet, 0, sizeof(*packet));
98177}
98178
98179#define free_packet_edit_player(_packet) (void) 0
98180#define destroy_packet_edit_player free
98181
98182#ifdef FREECIV_DELTA_PROTOCOL
98184{
98185 const struct packet_edit_player *key = (const struct packet_edit_player *) vkey;
98186 genhash_val_t result = 0;
98187
98188 result += key->id;
98189
98190 result &= 0xFFFFFFFF;
98191 return result;
98192}
98193
98194static bool cmp_packet_edit_player_100(const void *vkey1, const void *vkey2)
98195{
98196 const struct packet_edit_player *old = (const struct packet_edit_player *) vkey1;
98197 const struct packet_edit_player *real_packet = (const struct packet_edit_player *) vkey2;
98198 bool differ;
98199
98200 differ = (old->id != real_packet->id);
98201
98202 return !differ;
98203}
98205#endif /* FREECIV_DELTA_PROTOCOL */
98206
98208{
98209#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player(_packet)
98211
98212#ifdef FREECIV_JSON_CONNECTION
98213 struct plocation field_addr;
98214 {
98215 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98218 }
98219#endif /* FREECIV_JSON_CONNECTION */
98220
98221#ifdef FREECIV_JSON_CONNECTION
98222 field_addr.name = "id";
98223#endif /* FREECIV_JSON_CONNECTION */
98224
98225 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98227 }
98228
98229 log_packet_detailed("packet_edit_player_100: got info about (%d)",
98230 real_packet->id);
98231
98232#ifdef FREECIV_DELTA_PROTOCOL
98234 struct packet_edit_player *old;
98235 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER;
98236
98237 if (nullptr == *hash) {
98239 nullptr, nullptr, nullptr, destroy_packet_edit_player);
98240 }
98241
98242 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98243 *real_packet = *old;
98244 } else {
98245 /* packet is already initialized empty */
98246 log_packet_detailed(" no old info");
98247 }
98248
98249#ifdef FREECIV_JSON_CONNECTION
98250 field_addr.name = "fields";
98251#endif /* FREECIV_JSON_CONNECTION */
98252 DIO_BV_GET(&din, &field_addr, fields);
98253
98254 if (BV_ISSET(fields, 0)) {
98255 log_packet_detailed(" got field 'name'");
98256
98257#ifdef FREECIV_JSON_CONNECTION
98258 field_addr.name = "name";
98259#endif /* FREECIV_JSON_CONNECTION */
98260
98261 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
98263 }
98264 }
98265
98266 if (BV_ISSET(fields, 1)) {
98267 log_packet_detailed(" got field 'username'");
98268
98269#ifdef FREECIV_JSON_CONNECTION
98270 field_addr.name = "username";
98271#endif /* FREECIV_JSON_CONNECTION */
98272
98273 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
98275 }
98276 }
98277
98278 if (BV_ISSET(fields, 2)) {
98279 log_packet_detailed(" got field 'ranked_username'");
98280
98281#ifdef FREECIV_JSON_CONNECTION
98282 field_addr.name = "ranked_username";
98283#endif /* FREECIV_JSON_CONNECTION */
98284
98285 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
98286 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
98287 }
98288 }
98289
98290 if (BV_ISSET(fields, 3)) {
98291 log_packet_detailed(" got field 'user_turns'");
98292
98293#ifdef FREECIV_JSON_CONNECTION
98294 field_addr.name = "user_turns";
98295#endif /* FREECIV_JSON_CONNECTION */
98296
98297 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
98298 RECEIVE_PACKET_FIELD_ERROR(user_turns);
98299 }
98300 }
98301
98302 real_packet->is_male = BV_ISSET(fields, 4);
98303
98304 if (BV_ISSET(fields, 5)) {
98305 log_packet_detailed(" got field 'government'");
98306
98307#ifdef FREECIV_JSON_CONNECTION
98308 field_addr.name = "government";
98309#endif /* FREECIV_JSON_CONNECTION */
98310
98311 {
98312 int readin;
98313
98314 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98316 }
98317 real_packet->government = readin;
98318 }
98319 }
98320
98321 if (BV_ISSET(fields, 6)) {
98322 log_packet_detailed(" got field 'target_government'");
98323
98324#ifdef FREECIV_JSON_CONNECTION
98325 field_addr.name = "target_government";
98326#endif /* FREECIV_JSON_CONNECTION */
98327
98328 {
98329 int readin;
98330
98331 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98332 RECEIVE_PACKET_FIELD_ERROR(target_government);
98333 }
98334 real_packet->target_government = readin;
98335 }
98336 }
98337
98338 if (BV_ISSET(fields, 7)) {
98339 log_packet_detailed(" got field 'nation'");
98340
98341#ifdef FREECIV_JSON_CONNECTION
98342 field_addr.name = "nation";
98343#endif /* FREECIV_JSON_CONNECTION */
98344
98345 {
98346 int readin;
98347
98348 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
98350 }
98351 real_packet->nation = readin;
98352 }
98353 }
98354
98355 if (BV_ISSET(fields, 8)) {
98356 log_packet_detailed(" got field 'team'");
98357
98358#ifdef FREECIV_JSON_CONNECTION
98359 field_addr.name = "team";
98360#endif /* FREECIV_JSON_CONNECTION */
98361
98362 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
98364 }
98365 }
98366
98367 real_packet->phase_done = BV_ISSET(fields, 9);
98368
98369 if (BV_ISSET(fields, 10)) {
98370 log_packet_detailed(" got field 'nturns_idle'");
98371
98372#ifdef FREECIV_JSON_CONNECTION
98373 field_addr.name = "nturns_idle";
98374#endif /* FREECIV_JSON_CONNECTION */
98375
98376 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
98377 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
98378 }
98379 }
98380
98381 real_packet->is_alive = BV_ISSET(fields, 11);
98382
98383 if (BV_ISSET(fields, 12)) {
98384 log_packet_detailed(" got field 'revolution_finishes'");
98385
98386#ifdef FREECIV_JSON_CONNECTION
98387 field_addr.name = "revolution_finishes";
98388#endif /* FREECIV_JSON_CONNECTION */
98389
98390 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
98391 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
98392 }
98393 }
98394
98395 if (BV_ISSET(fields, 13)) {
98396 log_packet_detailed(" got field 'autoselect_weight'");
98397
98398#ifdef FREECIV_JSON_CONNECTION
98399 field_addr.name = "autoselect_weight";
98400#endif /* FREECIV_JSON_CONNECTION */
98401
98402 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
98403 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
98404 }
98405 }
98406
98407 if (BV_ISSET(fields, 14)) {
98408 log_packet_detailed(" got field 'embassy'");
98409
98410#ifdef FREECIV_JSON_CONNECTION
98411 field_addr.name = "embassy";
98412#endif /* FREECIV_JSON_CONNECTION */
98413
98414 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
98416 }
98417 }
98418
98419 if (BV_ISSET(fields, 15)) {
98420 log_packet_detailed(" got field 'gold'");
98421
98422#ifdef FREECIV_JSON_CONNECTION
98423 field_addr.name = "gold";
98424#endif /* FREECIV_JSON_CONNECTION */
98425
98426 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
98428 }
98429 }
98430
98431 if (BV_ISSET(fields, 16)) {
98432 log_packet_detailed(" got field 'infrapoints'");
98433
98434#ifdef FREECIV_JSON_CONNECTION
98435 field_addr.name = "infrapoints";
98436#endif /* FREECIV_JSON_CONNECTION */
98437
98438 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
98439 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
98440 }
98441 }
98442
98443 if (BV_ISSET(fields, 17)) {
98444 log_packet_detailed(" got field 'tax'");
98445
98446#ifdef FREECIV_JSON_CONNECTION
98447 field_addr.name = "tax";
98448#endif /* FREECIV_JSON_CONNECTION */
98449
98450 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
98452 }
98453 }
98454
98455 if (BV_ISSET(fields, 18)) {
98456 log_packet_detailed(" got field 'science'");
98457
98458#ifdef FREECIV_JSON_CONNECTION
98459 field_addr.name = "science";
98460#endif /* FREECIV_JSON_CONNECTION */
98461
98462 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
98464 }
98465 }
98466
98467 if (BV_ISSET(fields, 19)) {
98468 log_packet_detailed(" got field 'luxury'");
98469
98470#ifdef FREECIV_JSON_CONNECTION
98471 field_addr.name = "luxury";
98472#endif /* FREECIV_JSON_CONNECTION */
98473
98474 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
98476 }
98477 }
98478
98479 if (BV_ISSET(fields, 20)) {
98480 log_packet_detailed(" got field 'future_tech'");
98481
98482#ifdef FREECIV_JSON_CONNECTION
98483 field_addr.name = "future_tech";
98484#endif /* FREECIV_JSON_CONNECTION */
98485
98486 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
98487 RECEIVE_PACKET_FIELD_ERROR(future_tech);
98488 }
98489 }
98490
98491 if (BV_ISSET(fields, 21)) {
98492 log_packet_detailed(" got field 'researching'");
98493
98494#ifdef FREECIV_JSON_CONNECTION
98495 field_addr.name = "researching";
98496#endif /* FREECIV_JSON_CONNECTION */
98497
98498 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
98499 RECEIVE_PACKET_FIELD_ERROR(researching);
98500 }
98501 }
98502
98503 if (BV_ISSET(fields, 22)) {
98504 log_packet_detailed(" got field 'bulbs_researched'");
98505
98506#ifdef FREECIV_JSON_CONNECTION
98507 field_addr.name = "bulbs_researched";
98508#endif /* FREECIV_JSON_CONNECTION */
98509
98510 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
98511 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
98512 }
98513 }
98514
98515 if (BV_ISSET(fields, 23)) {
98516 log_packet_detailed(" got field 'inventions'");
98517
98518#ifdef FREECIV_JSON_CONNECTION
98519 field_addr.name = "inventions";
98520#endif /* FREECIV_JSON_CONNECTION */
98521
98523#ifdef FREECIV_JSON_CONNECTION
98524 /* Enter array (start at initial element). */
98525 field_addr.sub_location = plocation_elem_new(0);
98526 /* Enter diff array element (start at the index address). */
98527 field_addr.sub_location->sub_location = plocation_field_new("index");
98528#endif /* FREECIV_JSON_CONNECTION */
98529
98530 while (TRUE) {
98531 int i;
98532
98533 /* Read next index */
98534#if A_LAST + 1 <= MAX_UINT8
98535 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
98536#else
98537 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
98538#endif
98539 RECEIVE_PACKET_FIELD_ERROR(inventions);
98540 }
98541
98542 if (i == A_LAST + 1) {
98543 break;
98544 }
98545 if (i > A_LAST + 1) {
98546 RECEIVE_PACKET_FIELD_ERROR(inventions,
98547 ": unexpected index %d "
98548 "> length %d in array diff",
98549 i,
98550 A_LAST + 1);
98551 }
98552
98553#ifdef FREECIV_JSON_CONNECTION
98554 /* Content address. */
98555 field_addr.sub_location->sub_location->name = "data";
98556#endif /* FREECIV_JSON_CONNECTION */
98557
98558 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
98559 RECEIVE_PACKET_FIELD_ERROR(inventions);
98560 }
98561
98562#ifdef FREECIV_JSON_CONNECTION
98563 /* Move to the next diff array element. */
98564 field_addr.sub_location->number++;
98565 /* Back to the index address. */
98566 field_addr.sub_location->sub_location->name = "index";
98567#endif /* FREECIV_JSON_CONNECTION */
98568 }
98569
98570#ifdef FREECIV_JSON_CONNECTION
98571 /* Exit diff array element. */
98572 FC_FREE(field_addr.sub_location->sub_location);
98573 /* Exit array. */
98574 FC_FREE(field_addr.sub_location);
98575#endif /* FREECIV_JSON_CONNECTION */
98576 }
98577
98578 real_packet->ai = BV_ISSET(fields, 24);
98579
98580 real_packet->scenario_reserved = BV_ISSET(fields, 25);
98581
98582 if (nullptr == old) {
98583 old = fc_malloc(sizeof(*old));
98585 *old = *real_packet;
98587 } else {
98588 *old = *real_packet;
98589 }
98590
98591#else /* FREECIV_DELTA_PROTOCOL */
98592#ifdef FREECIV_JSON_CONNECTION
98593 field_addr.name = "name";
98594#endif /* FREECIV_JSON_CONNECTION */
98595
98596 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
98598 }
98599
98600#ifdef FREECIV_JSON_CONNECTION
98601 field_addr.name = "username";
98602#endif /* FREECIV_JSON_CONNECTION */
98603
98604 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
98606 }
98607
98608#ifdef FREECIV_JSON_CONNECTION
98609 field_addr.name = "ranked_username";
98610#endif /* FREECIV_JSON_CONNECTION */
98611
98612 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
98613 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
98614 }
98615
98616#ifdef FREECIV_JSON_CONNECTION
98617 field_addr.name = "user_turns";
98618#endif /* FREECIV_JSON_CONNECTION */
98619
98620 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
98621 RECEIVE_PACKET_FIELD_ERROR(user_turns);
98622 }
98623
98624#ifdef FREECIV_JSON_CONNECTION
98625 field_addr.name = "is_male";
98626#endif /* FREECIV_JSON_CONNECTION */
98627
98628 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
98630 }
98631
98632#ifdef FREECIV_JSON_CONNECTION
98633 field_addr.name = "government";
98634#endif /* FREECIV_JSON_CONNECTION */
98635
98636 {
98637 int readin;
98638
98639 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98641 }
98642 real_packet->government = readin;
98643 }
98644
98645#ifdef FREECIV_JSON_CONNECTION
98646 field_addr.name = "target_government";
98647#endif /* FREECIV_JSON_CONNECTION */
98648
98649 {
98650 int readin;
98651
98652 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98653 RECEIVE_PACKET_FIELD_ERROR(target_government);
98654 }
98655 real_packet->target_government = readin;
98656 }
98657
98658#ifdef FREECIV_JSON_CONNECTION
98659 field_addr.name = "nation";
98660#endif /* FREECIV_JSON_CONNECTION */
98661
98662 {
98663 int readin;
98664
98665 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
98667 }
98668 real_packet->nation = readin;
98669 }
98670
98671#ifdef FREECIV_JSON_CONNECTION
98672 field_addr.name = "team";
98673#endif /* FREECIV_JSON_CONNECTION */
98674
98675 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
98677 }
98678
98679#ifdef FREECIV_JSON_CONNECTION
98680 field_addr.name = "phase_done";
98681#endif /* FREECIV_JSON_CONNECTION */
98682
98683 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
98684 RECEIVE_PACKET_FIELD_ERROR(phase_done);
98685 }
98686
98687#ifdef FREECIV_JSON_CONNECTION
98688 field_addr.name = "nturns_idle";
98689#endif /* FREECIV_JSON_CONNECTION */
98690
98691 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
98692 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
98693 }
98694
98695#ifdef FREECIV_JSON_CONNECTION
98696 field_addr.name = "is_alive";
98697#endif /* FREECIV_JSON_CONNECTION */
98698
98699 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
98701 }
98702
98703#ifdef FREECIV_JSON_CONNECTION
98704 field_addr.name = "revolution_finishes";
98705#endif /* FREECIV_JSON_CONNECTION */
98706
98707 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
98708 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
98709 }
98710
98711#ifdef FREECIV_JSON_CONNECTION
98712 field_addr.name = "autoselect_weight";
98713#endif /* FREECIV_JSON_CONNECTION */
98714
98715 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
98716 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
98717 }
98718
98719#ifdef FREECIV_JSON_CONNECTION
98720 field_addr.name = "embassy";
98721#endif /* FREECIV_JSON_CONNECTION */
98722
98723 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
98725 }
98726
98727#ifdef FREECIV_JSON_CONNECTION
98728 field_addr.name = "gold";
98729#endif /* FREECIV_JSON_CONNECTION */
98730
98731 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
98733 }
98734
98735#ifdef FREECIV_JSON_CONNECTION
98736 field_addr.name = "infrapoints";
98737#endif /* FREECIV_JSON_CONNECTION */
98738
98739 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
98740 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
98741 }
98742
98743#ifdef FREECIV_JSON_CONNECTION
98744 field_addr.name = "tax";
98745#endif /* FREECIV_JSON_CONNECTION */
98746
98747 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
98749 }
98750
98751#ifdef FREECIV_JSON_CONNECTION
98752 field_addr.name = "science";
98753#endif /* FREECIV_JSON_CONNECTION */
98754
98755 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
98757 }
98758
98759#ifdef FREECIV_JSON_CONNECTION
98760 field_addr.name = "luxury";
98761#endif /* FREECIV_JSON_CONNECTION */
98762
98763 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
98765 }
98766
98767#ifdef FREECIV_JSON_CONNECTION
98768 field_addr.name = "future_tech";
98769#endif /* FREECIV_JSON_CONNECTION */
98770
98771 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
98772 RECEIVE_PACKET_FIELD_ERROR(future_tech);
98773 }
98774
98775#ifdef FREECIV_JSON_CONNECTION
98776 field_addr.name = "researching";
98777#endif /* FREECIV_JSON_CONNECTION */
98778
98779 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
98780 RECEIVE_PACKET_FIELD_ERROR(researching);
98781 }
98782
98783#ifdef FREECIV_JSON_CONNECTION
98784 field_addr.name = "bulbs_researched";
98785#endif /* FREECIV_JSON_CONNECTION */
98786
98787 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
98788 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
98789 }
98790
98791#ifdef FREECIV_JSON_CONNECTION
98792 field_addr.name = "inventions";
98793#endif /* FREECIV_JSON_CONNECTION */
98794
98795 {
98796 int i;
98797
98798
98799#ifdef FREECIV_JSON_CONNECTION
98800 /* Enter array. */
98801 field_addr.sub_location = plocation_elem_new(0);
98802#endif /* FREECIV_JSON_CONNECTION */
98803
98804 for (i = 0; i < A_LAST + 1; i++) {
98805#ifdef FREECIV_JSON_CONNECTION
98806 /* Next array element */
98807 field_addr.sub_location->number = i;
98808#endif /* FREECIV_JSON_CONNECTION */
98809
98810 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
98811 RECEIVE_PACKET_FIELD_ERROR(inventions);
98812 }
98813 }
98814
98815#ifdef FREECIV_JSON_CONNECTION
98816 /* Exit array. */
98817 FC_FREE(field_addr.sub_location);
98818#endif /* FREECIV_JSON_CONNECTION */
98819 }
98820
98821#ifdef FREECIV_JSON_CONNECTION
98822 field_addr.name = "ai";
98823#endif /* FREECIV_JSON_CONNECTION */
98824
98825 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ai)) {
98827 }
98828
98829#ifdef FREECIV_JSON_CONNECTION
98830 field_addr.name = "scenario_reserved";
98831#endif /* FREECIV_JSON_CONNECTION */
98832
98833 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_reserved)) {
98834 RECEIVE_PACKET_FIELD_ERROR(scenario_reserved);
98835 }
98836#endif /* FREECIV_DELTA_PROTOCOL */
98837
98839#undef FREE_PACKET_STRUCT
98840}
98841
98842static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
98843{
98844 const struct packet_edit_player *real_packet = packet;
98845 int e;
98847
98848 log_packet_detailed("packet_edit_player_100: sending info about (%d)",
98849 real_packet->id);
98850
98851#ifdef FREECIV_DELTA_PROTOCOL
98853 struct packet_edit_player *old;
98854 bool differ;
98855 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER;
98856
98857 if (nullptr == *hash) {
98859 nullptr, nullptr, nullptr, destroy_packet_edit_player);
98860 }
98861 BV_CLR_ALL(fields);
98862
98863 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
98864 old = fc_malloc(sizeof(*old));
98865 /* temporary bitcopy just to insert correctly */
98866 *old = *real_packet;
98869 }
98870
98871 differ = (strcmp(old->name, real_packet->name) != 0);
98872 if (differ) {
98873 BV_SET(fields, 0);
98874 }
98875
98876 differ = (strcmp(old->username, real_packet->username) != 0);
98877 if (differ) {
98878 BV_SET(fields, 1);
98879 }
98880
98881 differ = (strcmp(old->ranked_username, real_packet->ranked_username) != 0);
98882 if (differ) {
98883 BV_SET(fields, 2);
98884 }
98885
98886 differ = (old->user_turns != real_packet->user_turns);
98887 if (differ) {
98888 BV_SET(fields, 3);
98889 }
98890
98891 /* folded into head */
98892 if (real_packet->is_male) {
98893 BV_SET(fields, 4);
98894 }
98895
98896 differ = (old->government != real_packet->government);
98897 if (differ) {
98898 BV_SET(fields, 5);
98899 }
98900
98901 differ = (old->target_government != real_packet->target_government);
98902 if (differ) {
98903 BV_SET(fields, 6);
98904 }
98905
98906 differ = (old->nation != real_packet->nation);
98907 if (differ) {
98908 BV_SET(fields, 7);
98909 }
98910
98911 differ = (old->team != real_packet->team);
98912 if (differ) {
98913 BV_SET(fields, 8);
98914 }
98915
98916 /* folded into head */
98917 if (real_packet->phase_done) {
98918 BV_SET(fields, 9);
98919 }
98920
98921 differ = (old->nturns_idle != real_packet->nturns_idle);
98922 if (differ) {
98923 BV_SET(fields, 10);
98924 }
98925
98926 /* folded into head */
98927 if (real_packet->is_alive) {
98928 BV_SET(fields, 11);
98929 }
98930
98931 differ = (old->revolution_finishes != real_packet->revolution_finishes);
98932 if (differ) {
98933 BV_SET(fields, 12);
98934 }
98935
98936 differ = (old->autoselect_weight != real_packet->autoselect_weight);
98937 if (differ) {
98938 BV_SET(fields, 13);
98939 }
98940
98941 differ = !BV_ARE_EQUAL(old->embassy, real_packet->embassy);
98942 if (differ) {
98943 BV_SET(fields, 14);
98944 }
98945
98946 differ = (old->gold != real_packet->gold);
98947 if (differ) {
98948 BV_SET(fields, 15);
98949 }
98950
98951 differ = (old->infrapoints != real_packet->infrapoints);
98952 if (differ) {
98953 BV_SET(fields, 16);
98954 }
98955
98956 differ = (old->tax != real_packet->tax);
98957 if (differ) {
98958 BV_SET(fields, 17);
98959 }
98960
98961 differ = (old->science != real_packet->science);
98962 if (differ) {
98963 BV_SET(fields, 18);
98964 }
98965
98966 differ = (old->luxury != real_packet->luxury);
98967 if (differ) {
98968 BV_SET(fields, 19);
98969 }
98970
98971 differ = (old->future_tech != real_packet->future_tech);
98972 if (differ) {
98973 BV_SET(fields, 20);
98974 }
98975
98976 differ = (old->researching != real_packet->researching);
98977 if (differ) {
98978 BV_SET(fields, 21);
98979 }
98980
98981 differ = (old->bulbs_researched != real_packet->bulbs_researched);
98982 if (differ) {
98983 BV_SET(fields, 22);
98984 }
98985
98986 differ = FALSE;
98987 {
98988 int i;
98989
98990 for (i = 0; i < A_LAST + 1; i++) {
98991 differ = (old->inventions[i] != real_packet->inventions[i]);
98992 if (differ) {
98993 break;
98994 }
98995 }
98996 }
98997 if (differ) {
98998 BV_SET(fields, 23);
98999 }
99000
99001 /* folded into head */
99002 if (real_packet->ai) {
99003 BV_SET(fields, 24);
99004 }
99005
99006 /* folded into head */
99007 if (real_packet->scenario_reserved) {
99008 BV_SET(fields, 25);
99009 }
99010#endif /* FREECIV_DELTA_PROTOCOL */
99011
99012#ifdef FREECIV_JSON_CONNECTION
99013 struct plocation field_addr;
99014 {
99015 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99018 }
99019#endif /* FREECIV_JSON_CONNECTION */
99020
99021#ifdef FREECIV_JSON_CONNECTION
99022 field_addr.name = "id";
99023#endif /* FREECIV_JSON_CONNECTION */
99024 e = 0;
99025
99026 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
99027
99028 if (e) {
99029 log_packet_detailed("'id' field error detected");
99030 }
99031
99032#ifdef FREECIV_DELTA_PROTOCOL
99033#ifdef FREECIV_JSON_CONNECTION
99034 field_addr.name = "fields";
99035#endif /* FREECIV_JSON_CONNECTION */
99036 e = 0;
99037 e |= DIO_BV_PUT(&dout, &field_addr, fields);
99038 if (e) {
99039 log_packet_detailed("fields bitvector error detected");
99040 }
99041
99042 if (BV_ISSET(fields, 0)) {
99043 log_packet_detailed(" field 'name' has changed");
99044
99045#ifdef FREECIV_JSON_CONNECTION
99046 field_addr.name = "name";
99047#endif /* FREECIV_JSON_CONNECTION */
99048 e = 0;
99049
99050 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
99051
99052 if (e) {
99053 log_packet_detailed("'name' field error detected");
99054 }
99055 }
99056
99057 if (BV_ISSET(fields, 1)) {
99058 log_packet_detailed(" field 'username' has changed");
99059
99060#ifdef FREECIV_JSON_CONNECTION
99061 field_addr.name = "username";
99062#endif /* FREECIV_JSON_CONNECTION */
99063 e = 0;
99064
99065 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
99066
99067 if (e) {
99068 log_packet_detailed("'username' field error detected");
99069 }
99070 }
99071
99072 if (BV_ISSET(fields, 2)) {
99073 log_packet_detailed(" field 'ranked_username' has changed");
99074
99075#ifdef FREECIV_JSON_CONNECTION
99076 field_addr.name = "ranked_username";
99077#endif /* FREECIV_JSON_CONNECTION */
99078 e = 0;
99079
99080 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
99081
99082 if (e) {
99083 log_packet_detailed("'ranked_username' field error detected");
99084 }
99085 }
99086
99087 if (BV_ISSET(fields, 3)) {
99088 log_packet_detailed(" field 'user_turns' has changed");
99089
99090#ifdef FREECIV_JSON_CONNECTION
99091 field_addr.name = "user_turns";
99092#endif /* FREECIV_JSON_CONNECTION */
99093 e = 0;
99094
99095 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
99096
99097 if (e) {
99098 log_packet_detailed("'user_turns' field error detected");
99099 }
99100 }
99101
99102 /* field 4 is folded into the header */
99103
99104 if (BV_ISSET(fields, 5)) {
99105 log_packet_detailed(" field 'government' has changed");
99106
99107#ifdef FREECIV_JSON_CONNECTION
99108 field_addr.name = "government";
99109#endif /* FREECIV_JSON_CONNECTION */
99110 e = 0;
99111
99112 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
99113
99114 if (e) {
99115 log_packet_detailed("'government' field error detected");
99116 }
99117 }
99118
99119 if (BV_ISSET(fields, 6)) {
99120 log_packet_detailed(" field 'target_government' has changed");
99121
99122#ifdef FREECIV_JSON_CONNECTION
99123 field_addr.name = "target_government";
99124#endif /* FREECIV_JSON_CONNECTION */
99125 e = 0;
99126
99127 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
99128
99129 if (e) {
99130 log_packet_detailed("'target_government' field error detected");
99131 }
99132 }
99133
99134 if (BV_ISSET(fields, 7)) {
99135 log_packet_detailed(" field 'nation' has changed");
99136
99137#ifdef FREECIV_JSON_CONNECTION
99138 field_addr.name = "nation";
99139#endif /* FREECIV_JSON_CONNECTION */
99140 e = 0;
99141
99142 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
99143
99144 if (e) {
99145 log_packet_detailed("'nation' field error detected");
99146 }
99147 }
99148
99149 if (BV_ISSET(fields, 8)) {
99150 log_packet_detailed(" field 'team' has changed");
99151
99152#ifdef FREECIV_JSON_CONNECTION
99153 field_addr.name = "team";
99154#endif /* FREECIV_JSON_CONNECTION */
99155 e = 0;
99156
99157 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
99158
99159 if (e) {
99160 log_packet_detailed("'team' field error detected");
99161 }
99162 }
99163
99164 /* field 9 is folded into the header */
99165
99166 if (BV_ISSET(fields, 10)) {
99167 log_packet_detailed(" field 'nturns_idle' has changed");
99168
99169#ifdef FREECIV_JSON_CONNECTION
99170 field_addr.name = "nturns_idle";
99171#endif /* FREECIV_JSON_CONNECTION */
99172 e = 0;
99173
99174 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
99175
99176 if (e) {
99177 log_packet_detailed("'nturns_idle' field error detected");
99178 }
99179 }
99180
99181 /* field 11 is folded into the header */
99182
99183 if (BV_ISSET(fields, 12)) {
99184 log_packet_detailed(" field 'revolution_finishes' has changed");
99185
99186#ifdef FREECIV_JSON_CONNECTION
99187 field_addr.name = "revolution_finishes";
99188#endif /* FREECIV_JSON_CONNECTION */
99189 e = 0;
99190
99191 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
99192
99193 if (e) {
99194 log_packet_detailed("'revolution_finishes' field error detected");
99195 }
99196 }
99197
99198 if (BV_ISSET(fields, 13)) {
99199 log_packet_detailed(" field 'autoselect_weight' has changed");
99200
99201#ifdef FREECIV_JSON_CONNECTION
99202 field_addr.name = "autoselect_weight";
99203#endif /* FREECIV_JSON_CONNECTION */
99204 e = 0;
99205
99206 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
99207
99208 if (e) {
99209 log_packet_detailed("'autoselect_weight' field error detected");
99210 }
99211 }
99212
99213 if (BV_ISSET(fields, 14)) {
99214 log_packet_detailed(" field 'embassy' has changed");
99215
99216#ifdef FREECIV_JSON_CONNECTION
99217 field_addr.name = "embassy";
99218#endif /* FREECIV_JSON_CONNECTION */
99219 e = 0;
99220
99221 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
99222
99223 if (e) {
99224 log_packet_detailed("'embassy' field error detected");
99225 }
99226 }
99227
99228 if (BV_ISSET(fields, 15)) {
99229 log_packet_detailed(" field 'gold' has changed");
99230
99231#ifdef FREECIV_JSON_CONNECTION
99232 field_addr.name = "gold";
99233#endif /* FREECIV_JSON_CONNECTION */
99234 e = 0;
99235
99236 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
99237
99238 if (e) {
99239 log_packet_detailed("'gold' field error detected");
99240 }
99241 }
99242
99243 if (BV_ISSET(fields, 16)) {
99244 log_packet_detailed(" field 'infrapoints' has changed");
99245
99246#ifdef FREECIV_JSON_CONNECTION
99247 field_addr.name = "infrapoints";
99248#endif /* FREECIV_JSON_CONNECTION */
99249 e = 0;
99250
99251 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
99252
99253 if (e) {
99254 log_packet_detailed("'infrapoints' field error detected");
99255 }
99256 }
99257
99258 if (BV_ISSET(fields, 17)) {
99259 log_packet_detailed(" field 'tax' has changed");
99260
99261#ifdef FREECIV_JSON_CONNECTION
99262 field_addr.name = "tax";
99263#endif /* FREECIV_JSON_CONNECTION */
99264 e = 0;
99265
99266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
99267
99268 if (e) {
99269 log_packet_detailed("'tax' field error detected");
99270 }
99271 }
99272
99273 if (BV_ISSET(fields, 18)) {
99274 log_packet_detailed(" field 'science' has changed");
99275
99276#ifdef FREECIV_JSON_CONNECTION
99277 field_addr.name = "science";
99278#endif /* FREECIV_JSON_CONNECTION */
99279 e = 0;
99280
99281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
99282
99283 if (e) {
99284 log_packet_detailed("'science' field error detected");
99285 }
99286 }
99287
99288 if (BV_ISSET(fields, 19)) {
99289 log_packet_detailed(" field 'luxury' has changed");
99290
99291#ifdef FREECIV_JSON_CONNECTION
99292 field_addr.name = "luxury";
99293#endif /* FREECIV_JSON_CONNECTION */
99294 e = 0;
99295
99296 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
99297
99298 if (e) {
99299 log_packet_detailed("'luxury' field error detected");
99300 }
99301 }
99302
99303 if (BV_ISSET(fields, 20)) {
99304 log_packet_detailed(" field 'future_tech' has changed");
99305
99306#ifdef FREECIV_JSON_CONNECTION
99307 field_addr.name = "future_tech";
99308#endif /* FREECIV_JSON_CONNECTION */
99309 e = 0;
99310
99311 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
99312
99313 if (e) {
99314 log_packet_detailed("'future_tech' field error detected");
99315 }
99316 }
99317
99318 if (BV_ISSET(fields, 21)) {
99319 log_packet_detailed(" field 'researching' has changed");
99320
99321#ifdef FREECIV_JSON_CONNECTION
99322 field_addr.name = "researching";
99323#endif /* FREECIV_JSON_CONNECTION */
99324 e = 0;
99325
99326 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
99327
99328 if (e) {
99329 log_packet_detailed("'researching' field error detected");
99330 }
99331 }
99332
99333 if (BV_ISSET(fields, 22)) {
99334 log_packet_detailed(" field 'bulbs_researched' has changed");
99335
99336#ifdef FREECIV_JSON_CONNECTION
99337 field_addr.name = "bulbs_researched";
99338#endif /* FREECIV_JSON_CONNECTION */
99339 e = 0;
99340
99341 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
99342
99343 if (e) {
99344 log_packet_detailed("'bulbs_researched' field error detected");
99345 }
99346 }
99347
99348 if (BV_ISSET(fields, 23)) {
99349 log_packet_detailed(" field 'inventions' has changed");
99350
99351#ifdef FREECIV_JSON_CONNECTION
99352 field_addr.name = "inventions";
99353#endif /* FREECIV_JSON_CONNECTION */
99354 e = 0;
99355
99356 {
99357 int i;
99358
99360
99361#ifdef FREECIV_JSON_CONNECTION
99362 size_t count_i = 0;
99363
99364 /* Create the array. */
99365 e |= DIO_PUT(farray, &dout, &field_addr, 0);
99366
99367 /* Enter array. */
99368 field_addr.sub_location = plocation_elem_new(0);
99369#endif /* FREECIV_JSON_CONNECTION */
99370
99371 for (i = 0; i < A_LAST + 1; i++) {
99372 differ = (old->inventions[i] != real_packet->inventions[i]);
99373
99374 if (!differ) {
99375 continue;
99376 }
99377
99378#ifdef FREECIV_JSON_CONNECTION
99379 /* Append next diff array element. */
99380 field_addr.sub_location->number = -1;
99381
99382 /* Create the diff array element. */
99383 e |= DIO_PUT(object, &dout, &field_addr);
99384
99385 /* Enter diff array element (start at the index address). */
99386 field_addr.sub_location->number = count_i++;
99387 field_addr.sub_location->sub_location = plocation_field_new("index");
99388#endif /* FREECIV_JSON_CONNECTION */
99389
99390 /* Write the index */
99391#if A_LAST + 1 <= MAX_UINT8
99392 e |= DIO_PUT(uint8, &dout, &field_addr, i);
99393#else
99394 e |= DIO_PUT(uint16, &dout, &field_addr, i);
99395#endif
99396
99397#ifdef FREECIV_JSON_CONNECTION
99398 /* Content address. */
99399 field_addr.sub_location->sub_location->name = "data";
99400#endif /* FREECIV_JSON_CONNECTION */
99401
99402 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
99403
99404#ifdef FREECIV_JSON_CONNECTION
99405 /* Exit diff array element. */
99406 FC_FREE(field_addr.sub_location->sub_location);
99407#endif /* FREECIV_JSON_CONNECTION */
99408 }
99409
99410#ifdef FREECIV_JSON_CONNECTION
99411 /* Append diff array element. */
99412 field_addr.sub_location->number = -1;
99413
99414 /* Create the terminating diff array element. */
99415 e |= DIO_PUT(object, &dout, &field_addr);
99416
99417 /* Enter diff array element (start at the index address). */
99418 field_addr.sub_location->number = count_i;
99419 field_addr.sub_location->sub_location = plocation_field_new("index");
99420#endif /* FREECIV_JSON_CONNECTION */
99421
99422 /* Write the sentinel value */
99423#if A_LAST + 1 <= MAX_UINT8
99424 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST + 1);
99425#else
99426 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST + 1);
99427#endif
99428
99429#ifdef FREECIV_JSON_CONNECTION
99430 /* Exit diff array element. */
99431 FC_FREE(field_addr.sub_location->sub_location);
99432 /* Exit array. */
99433 FC_FREE(field_addr.sub_location);
99434#endif /* FREECIV_JSON_CONNECTION */
99435 }
99436
99437 if (e) {
99438 log_packet_detailed("'inventions' field error detected");
99439 }
99440 }
99441
99442 /* field 24 is folded into the header */
99443
99444 /* field 25 is folded into the header */
99445
99446 *old = *real_packet;
99447
99448#else /* FREECIV_DELTA_PROTOCOL */
99449#ifdef FREECIV_JSON_CONNECTION
99450 field_addr.name = "name";
99451#endif /* FREECIV_JSON_CONNECTION */
99452 e = 0;
99453
99454 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
99455
99456 if (e) {
99457 log_packet_detailed("'name' field error detected");
99458 }
99459
99460#ifdef FREECIV_JSON_CONNECTION
99461 field_addr.name = "username";
99462#endif /* FREECIV_JSON_CONNECTION */
99463 e = 0;
99464
99465 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
99466
99467 if (e) {
99468 log_packet_detailed("'username' field error detected");
99469 }
99470
99471#ifdef FREECIV_JSON_CONNECTION
99472 field_addr.name = "ranked_username";
99473#endif /* FREECIV_JSON_CONNECTION */
99474 e = 0;
99475
99476 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
99477
99478 if (e) {
99479 log_packet_detailed("'ranked_username' field error detected");
99480 }
99481
99482#ifdef FREECIV_JSON_CONNECTION
99483 field_addr.name = "user_turns";
99484#endif /* FREECIV_JSON_CONNECTION */
99485 e = 0;
99486
99487 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
99488
99489 if (e) {
99490 log_packet_detailed("'user_turns' field error detected");
99491 }
99492
99493#ifdef FREECIV_JSON_CONNECTION
99494 field_addr.name = "is_male";
99495#endif /* FREECIV_JSON_CONNECTION */
99496 e = 0;
99497
99498 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
99499
99500 if (e) {
99501 log_packet_detailed("'is_male' field error detected");
99502 }
99503
99504#ifdef FREECIV_JSON_CONNECTION
99505 field_addr.name = "government";
99506#endif /* FREECIV_JSON_CONNECTION */
99507 e = 0;
99508
99509 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
99510
99511 if (e) {
99512 log_packet_detailed("'government' field error detected");
99513 }
99514
99515#ifdef FREECIV_JSON_CONNECTION
99516 field_addr.name = "target_government";
99517#endif /* FREECIV_JSON_CONNECTION */
99518 e = 0;
99519
99520 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
99521
99522 if (e) {
99523 log_packet_detailed("'target_government' field error detected");
99524 }
99525
99526#ifdef FREECIV_JSON_CONNECTION
99527 field_addr.name = "nation";
99528#endif /* FREECIV_JSON_CONNECTION */
99529 e = 0;
99530
99531 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
99532
99533 if (e) {
99534 log_packet_detailed("'nation' field error detected");
99535 }
99536
99537#ifdef FREECIV_JSON_CONNECTION
99538 field_addr.name = "team";
99539#endif /* FREECIV_JSON_CONNECTION */
99540 e = 0;
99541
99542 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
99543
99544 if (e) {
99545 log_packet_detailed("'team' field error detected");
99546 }
99547
99548#ifdef FREECIV_JSON_CONNECTION
99549 field_addr.name = "phase_done";
99550#endif /* FREECIV_JSON_CONNECTION */
99551 e = 0;
99552
99553 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
99554
99555 if (e) {
99556 log_packet_detailed("'phase_done' field error detected");
99557 }
99558
99559#ifdef FREECIV_JSON_CONNECTION
99560 field_addr.name = "nturns_idle";
99561#endif /* FREECIV_JSON_CONNECTION */
99562 e = 0;
99563
99564 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
99565
99566 if (e) {
99567 log_packet_detailed("'nturns_idle' field error detected");
99568 }
99569
99570#ifdef FREECIV_JSON_CONNECTION
99571 field_addr.name = "is_alive";
99572#endif /* FREECIV_JSON_CONNECTION */
99573 e = 0;
99574
99575 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
99576
99577 if (e) {
99578 log_packet_detailed("'is_alive' field error detected");
99579 }
99580
99581#ifdef FREECIV_JSON_CONNECTION
99582 field_addr.name = "revolution_finishes";
99583#endif /* FREECIV_JSON_CONNECTION */
99584 e = 0;
99585
99586 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
99587
99588 if (e) {
99589 log_packet_detailed("'revolution_finishes' field error detected");
99590 }
99591
99592#ifdef FREECIV_JSON_CONNECTION
99593 field_addr.name = "autoselect_weight";
99594#endif /* FREECIV_JSON_CONNECTION */
99595 e = 0;
99596
99597 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
99598
99599 if (e) {
99600 log_packet_detailed("'autoselect_weight' field error detected");
99601 }
99602
99603#ifdef FREECIV_JSON_CONNECTION
99604 field_addr.name = "embassy";
99605#endif /* FREECIV_JSON_CONNECTION */
99606 e = 0;
99607
99608 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
99609
99610 if (e) {
99611 log_packet_detailed("'embassy' field error detected");
99612 }
99613
99614#ifdef FREECIV_JSON_CONNECTION
99615 field_addr.name = "gold";
99616#endif /* FREECIV_JSON_CONNECTION */
99617 e = 0;
99618
99619 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
99620
99621 if (e) {
99622 log_packet_detailed("'gold' field error detected");
99623 }
99624
99625#ifdef FREECIV_JSON_CONNECTION
99626 field_addr.name = "infrapoints";
99627#endif /* FREECIV_JSON_CONNECTION */
99628 e = 0;
99629
99630 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
99631
99632 if (e) {
99633 log_packet_detailed("'infrapoints' field error detected");
99634 }
99635
99636#ifdef FREECIV_JSON_CONNECTION
99637 field_addr.name = "tax";
99638#endif /* FREECIV_JSON_CONNECTION */
99639 e = 0;
99640
99641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
99642
99643 if (e) {
99644 log_packet_detailed("'tax' field error detected");
99645 }
99646
99647#ifdef FREECIV_JSON_CONNECTION
99648 field_addr.name = "science";
99649#endif /* FREECIV_JSON_CONNECTION */
99650 e = 0;
99651
99652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
99653
99654 if (e) {
99655 log_packet_detailed("'science' field error detected");
99656 }
99657
99658#ifdef FREECIV_JSON_CONNECTION
99659 field_addr.name = "luxury";
99660#endif /* FREECIV_JSON_CONNECTION */
99661 e = 0;
99662
99663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
99664
99665 if (e) {
99666 log_packet_detailed("'luxury' field error detected");
99667 }
99668
99669#ifdef FREECIV_JSON_CONNECTION
99670 field_addr.name = "future_tech";
99671#endif /* FREECIV_JSON_CONNECTION */
99672 e = 0;
99673
99674 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
99675
99676 if (e) {
99677 log_packet_detailed("'future_tech' field error detected");
99678 }
99679
99680#ifdef FREECIV_JSON_CONNECTION
99681 field_addr.name = "researching";
99682#endif /* FREECIV_JSON_CONNECTION */
99683 e = 0;
99684
99685 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
99686
99687 if (e) {
99688 log_packet_detailed("'researching' field error detected");
99689 }
99690
99691#ifdef FREECIV_JSON_CONNECTION
99692 field_addr.name = "bulbs_researched";
99693#endif /* FREECIV_JSON_CONNECTION */
99694 e = 0;
99695
99696 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
99697
99698 if (e) {
99699 log_packet_detailed("'bulbs_researched' field error detected");
99700 }
99701
99702#ifdef FREECIV_JSON_CONNECTION
99703 field_addr.name = "inventions";
99704#endif /* FREECIV_JSON_CONNECTION */
99705 e = 0;
99706
99707 {
99708 int i;
99709
99710#ifdef FREECIV_JSON_CONNECTION
99711 /* Create the array. */
99712 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST + 1);
99713
99714 /* Enter array. */
99715 field_addr.sub_location = plocation_elem_new(0);
99716#endif /* FREECIV_JSON_CONNECTION */
99717
99718 for (i = 0; i < A_LAST + 1; i++) {
99719#ifdef FREECIV_JSON_CONNECTION
99720 /* Next array element. */
99721 field_addr.sub_location->number = i;
99722#endif /* FREECIV_JSON_CONNECTION */
99723
99724 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
99725 }
99726
99727#ifdef FREECIV_JSON_CONNECTION
99728 /* Exit array. */
99729 FC_FREE(field_addr.sub_location);
99730#endif /* FREECIV_JSON_CONNECTION */
99731 }
99732
99733 if (e) {
99734 log_packet_detailed("'inventions' field error detected");
99735 }
99736
99737#ifdef FREECIV_JSON_CONNECTION
99738 field_addr.name = "ai";
99739#endif /* FREECIV_JSON_CONNECTION */
99740 e = 0;
99741
99742 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ai);
99743
99744 if (e) {
99745 log_packet_detailed("'ai' field error detected");
99746 }
99747
99748#ifdef FREECIV_JSON_CONNECTION
99749 field_addr.name = "scenario_reserved";
99750#endif /* FREECIV_JSON_CONNECTION */
99751 e = 0;
99752
99753 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_reserved);
99754
99755 if (e) {
99756 log_packet_detailed("'scenario_reserved' field error detected");
99757 }
99758#endif /* FREECIV_DELTA_PROTOCOL */
99759
99761}
99762
99764{
99765 if (!pc->used) {
99766 log_error("WARNING: trying to send data to the closed connection %s",
99768 return -1;
99769 }
99770 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet != nullptr, -1,
99771 "Handler for PACKET_EDIT_PLAYER not installed");
99772 return pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet(pc, packet);
99773}
99774
99775void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
99776{
99777 conn_list_iterate(dest, pconn) {
99780}
99781
99783{
99784 memset(packet, 0, sizeof(*packet));
99785}
99786
99787#define free_packet_edit_player_vision(_packet) (void) 0
99788#define destroy_packet_edit_player_vision free
99789
99790#ifdef FREECIV_DELTA_PROTOCOL
99791#define hash_packet_edit_player_vision_100 hash_const
99792#define cmp_packet_edit_player_vision_100 cmp_const
99794#endif /* FREECIV_DELTA_PROTOCOL */
99795
99797{
99798#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_vision(_packet)
99800
99801#ifdef FREECIV_JSON_CONNECTION
99802 struct plocation field_addr;
99803 {
99804 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99807 }
99808#endif /* FREECIV_JSON_CONNECTION */
99809
99810 log_packet_detailed("packet_edit_player_vision_100: got info about ()");
99811
99812#ifdef FREECIV_DELTA_PROTOCOL
99815 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_VISION;
99816
99817 if (nullptr == *hash) {
99819 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
99820 }
99821
99822 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
99823 *real_packet = *old;
99824 } else {
99825 /* packet is already initialized empty */
99826 log_packet_detailed(" no old info");
99827 }
99828
99829#ifdef FREECIV_JSON_CONNECTION
99830 field_addr.name = "fields";
99831#endif /* FREECIV_JSON_CONNECTION */
99832 DIO_BV_GET(&din, &field_addr, fields);
99833
99834 if (BV_ISSET(fields, 0)) {
99835 log_packet_detailed(" got field 'player'");
99836
99837#ifdef FREECIV_JSON_CONNECTION
99838 field_addr.name = "player";
99839#endif /* FREECIV_JSON_CONNECTION */
99840
99841 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
99843 }
99844 }
99845
99846 if (BV_ISSET(fields, 1)) {
99847 log_packet_detailed(" got field 'tile'");
99848
99849#ifdef FREECIV_JSON_CONNECTION
99850 field_addr.name = "tile";
99851#endif /* FREECIV_JSON_CONNECTION */
99852
99853 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
99855 }
99856 }
99857
99858 real_packet->known = BV_ISSET(fields, 2);
99859
99860 if (BV_ISSET(fields, 3)) {
99861 log_packet_detailed(" got field 'size'");
99862
99863#ifdef FREECIV_JSON_CONNECTION
99864 field_addr.name = "size";
99865#endif /* FREECIV_JSON_CONNECTION */
99866
99867 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
99869 }
99870 }
99871
99872 if (nullptr == old) {
99873 old = fc_malloc(sizeof(*old));
99875 *old = *real_packet;
99877 } else {
99878 *old = *real_packet;
99879 }
99880
99881#else /* FREECIV_DELTA_PROTOCOL */
99882#ifdef FREECIV_JSON_CONNECTION
99883 field_addr.name = "player";
99884#endif /* FREECIV_JSON_CONNECTION */
99885
99886 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
99888 }
99889
99890#ifdef FREECIV_JSON_CONNECTION
99891 field_addr.name = "tile";
99892#endif /* FREECIV_JSON_CONNECTION */
99893
99894 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
99896 }
99897
99898#ifdef FREECIV_JSON_CONNECTION
99899 field_addr.name = "known";
99900#endif /* FREECIV_JSON_CONNECTION */
99901
99902 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->known)) {
99904 }
99905
99906#ifdef FREECIV_JSON_CONNECTION
99907 field_addr.name = "size";
99908#endif /* FREECIV_JSON_CONNECTION */
99909
99910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
99912 }
99913#endif /* FREECIV_DELTA_PROTOCOL */
99914
99916#undef FREE_PACKET_STRUCT
99917}
99918
99920{
99921 const struct packet_edit_player_vision *real_packet = packet;
99922 int e;
99924
99925 log_packet_detailed("packet_edit_player_vision_100: sending info about ()");
99926
99927#ifdef FREECIV_DELTA_PROTOCOL
99930 bool differ;
99931 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_VISION;
99932
99933 if (nullptr == *hash) {
99935 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
99936 }
99937 BV_CLR_ALL(fields);
99938
99939 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
99940 old = fc_malloc(sizeof(*old));
99941 /* temporary bitcopy just to insert correctly */
99942 *old = *real_packet;
99945 }
99946
99947 differ = (old->player != real_packet->player);
99948 if (differ) {
99949 BV_SET(fields, 0);
99950 }
99951
99952 differ = (old->tile != real_packet->tile);
99953 if (differ) {
99954 BV_SET(fields, 1);
99955 }
99956
99957 /* folded into head */
99958 if (real_packet->known) {
99959 BV_SET(fields, 2);
99960 }
99961
99962 differ = (old->size != real_packet->size);
99963 if (differ) {
99964 BV_SET(fields, 3);
99965 }
99966#endif /* FREECIV_DELTA_PROTOCOL */
99967
99968#ifdef FREECIV_JSON_CONNECTION
99969 struct plocation field_addr;
99970 {
99971 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99974 }
99975#endif /* FREECIV_JSON_CONNECTION */
99976
99977#ifdef FREECIV_DELTA_PROTOCOL
99978#ifdef FREECIV_JSON_CONNECTION
99979 field_addr.name = "fields";
99980#endif /* FREECIV_JSON_CONNECTION */
99981 e = 0;
99982 e |= DIO_BV_PUT(&dout, &field_addr, fields);
99983 if (e) {
99984 log_packet_detailed("fields bitvector error detected");
99985 }
99986
99987 if (BV_ISSET(fields, 0)) {
99988 log_packet_detailed(" field 'player' has changed");
99989
99990#ifdef FREECIV_JSON_CONNECTION
99991 field_addr.name = "player";
99992#endif /* FREECIV_JSON_CONNECTION */
99993 e = 0;
99994
99995 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
99996
99997 if (e) {
99998 log_packet_detailed("'player' field error detected");
99999 }
100000 }
100001
100002 if (BV_ISSET(fields, 1)) {
100003 log_packet_detailed(" field 'tile' has changed");
100004
100005#ifdef FREECIV_JSON_CONNECTION
100006 field_addr.name = "tile";
100007#endif /* FREECIV_JSON_CONNECTION */
100008 e = 0;
100009
100010 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100011
100012 if (e) {
100013 log_packet_detailed("'tile' field error detected");
100014 }
100015 }
100016
100017 /* field 2 is folded into the header */
100018
100019 if (BV_ISSET(fields, 3)) {
100020 log_packet_detailed(" field 'size' has changed");
100021
100022#ifdef FREECIV_JSON_CONNECTION
100023 field_addr.name = "size";
100024#endif /* FREECIV_JSON_CONNECTION */
100025 e = 0;
100026
100027 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
100028
100029 if (e) {
100030 log_packet_detailed("'size' field error detected");
100031 }
100032 }
100033
100034 *old = *real_packet;
100035
100036#else /* FREECIV_DELTA_PROTOCOL */
100037#ifdef FREECIV_JSON_CONNECTION
100038 field_addr.name = "player";
100039#endif /* FREECIV_JSON_CONNECTION */
100040 e = 0;
100041
100042 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
100043
100044 if (e) {
100045 log_packet_detailed("'player' field error detected");
100046 }
100047
100048#ifdef FREECIV_JSON_CONNECTION
100049 field_addr.name = "tile";
100050#endif /* FREECIV_JSON_CONNECTION */
100051 e = 0;
100052
100053 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100054
100055 if (e) {
100056 log_packet_detailed("'tile' field error detected");
100057 }
100058
100059#ifdef FREECIV_JSON_CONNECTION
100060 field_addr.name = "known";
100061#endif /* FREECIV_JSON_CONNECTION */
100062 e = 0;
100063
100064 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->known);
100065
100066 if (e) {
100067 log_packet_detailed("'known' field error detected");
100068 }
100069
100070#ifdef FREECIV_JSON_CONNECTION
100071 field_addr.name = "size";
100072#endif /* FREECIV_JSON_CONNECTION */
100073 e = 0;
100074
100075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
100076
100077 if (e) {
100078 log_packet_detailed("'size' field error detected");
100079 }
100080#endif /* FREECIV_DELTA_PROTOCOL */
100081
100083}
100084
100086{
100087 if (!pc->used) {
100088 log_error("WARNING: trying to send data to the closed connection %s",
100090 return -1;
100091 }
100092 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet != nullptr, -1,
100093 "Handler for PACKET_EDIT_PLAYER_VISION not installed");
100094 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet(pc, packet);
100095}
100096
100097int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
100098{
100099 struct packet_edit_player_vision packet, *real_packet = &packet;
100100
100102 real_packet->tile = tile;
100103 real_packet->known = known;
100104 real_packet->size = size;
100105
100107}
100108
100109static inline void init_packet_edit_game(struct packet_edit_game *packet)
100110{
100111 memset(packet, 0, sizeof(*packet));
100112}
100113
100114#define free_packet_edit_game(_packet) (void) 0
100115#define destroy_packet_edit_game free
100116
100117#ifdef FREECIV_DELTA_PROTOCOL
100118#define hash_packet_edit_game_100 hash_const
100119#define cmp_packet_edit_game_100 cmp_const
100121#endif /* FREECIV_DELTA_PROTOCOL */
100122
100124{
100125#define FREE_PACKET_STRUCT(_packet) free_packet_edit_game(_packet)
100127
100128#ifdef FREECIV_JSON_CONNECTION
100129 struct plocation field_addr;
100130 {
100131 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100134 }
100135#endif /* FREECIV_JSON_CONNECTION */
100136
100137 log_packet_detailed("packet_edit_game_100: got info about ()");
100138
100139#ifdef FREECIV_DELTA_PROTOCOL
100141 struct packet_edit_game *old;
100142 struct genhash **hash = pc->phs.received + PACKET_EDIT_GAME;
100143
100144 if (nullptr == *hash) {
100146 nullptr, nullptr, nullptr, destroy_packet_edit_game);
100147 }
100148
100149 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100150 *real_packet = *old;
100151 } else {
100152 /* packet is already initialized empty */
100153 log_packet_detailed(" no old info");
100154 }
100155
100156#ifdef FREECIV_JSON_CONNECTION
100157 field_addr.name = "fields";
100158#endif /* FREECIV_JSON_CONNECTION */
100159 DIO_BV_GET(&din, &field_addr, fields);
100160
100161 real_packet->scenario = BV_ISSET(fields, 0);
100162
100163 if (BV_ISSET(fields, 1)) {
100164 log_packet_detailed(" got field 'scenario_name'");
100165
100166#ifdef FREECIV_JSON_CONNECTION
100167 field_addr.name = "scenario_name";
100168#endif /* FREECIV_JSON_CONNECTION */
100169
100170 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
100171 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
100172 }
100173 }
100174
100175 if (BV_ISSET(fields, 2)) {
100176 log_packet_detailed(" got field 'scenario_authors'");
100177
100178#ifdef FREECIV_JSON_CONNECTION
100179 field_addr.name = "scenario_authors";
100180#endif /* FREECIV_JSON_CONNECTION */
100181
100182 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
100184 }
100185 }
100186
100187 real_packet->scenario_random = BV_ISSET(fields, 3);
100188
100189 real_packet->scenario_players = BV_ISSET(fields, 4);
100190
100191 real_packet->startpos_nations = BV_ISSET(fields, 5);
100192
100193 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
100194
100195 real_packet->lake_flooding = BV_ISSET(fields, 7);
100196
100197 real_packet->ruleset_locked = BV_ISSET(fields, 8);
100198
100199 if (nullptr == old) {
100200 old = fc_malloc(sizeof(*old));
100202 *old = *real_packet;
100204 } else {
100205 *old = *real_packet;
100206 }
100207
100208#else /* FREECIV_DELTA_PROTOCOL */
100209#ifdef FREECIV_JSON_CONNECTION
100210 field_addr.name = "scenario";
100211#endif /* FREECIV_JSON_CONNECTION */
100212
100213 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario)) {
100214 RECEIVE_PACKET_FIELD_ERROR(scenario);
100215 }
100216
100217#ifdef FREECIV_JSON_CONNECTION
100218 field_addr.name = "scenario_name";
100219#endif /* FREECIV_JSON_CONNECTION */
100220
100221 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
100222 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
100223 }
100224
100225#ifdef FREECIV_JSON_CONNECTION
100226 field_addr.name = "scenario_authors";
100227#endif /* FREECIV_JSON_CONNECTION */
100228
100229 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
100231 }
100232
100233#ifdef FREECIV_JSON_CONNECTION
100234 field_addr.name = "scenario_random";
100235#endif /* FREECIV_JSON_CONNECTION */
100236
100237 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_random)) {
100238 RECEIVE_PACKET_FIELD_ERROR(scenario_random);
100239 }
100240
100241#ifdef FREECIV_JSON_CONNECTION
100242 field_addr.name = "scenario_players";
100243#endif /* FREECIV_JSON_CONNECTION */
100244
100245 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_players)) {
100246 RECEIVE_PACKET_FIELD_ERROR(scenario_players);
100247 }
100248
100249#ifdef FREECIV_JSON_CONNECTION
100250 field_addr.name = "startpos_nations";
100251#endif /* FREECIV_JSON_CONNECTION */
100252
100253 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
100254 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
100255 }
100256
100257#ifdef FREECIV_JSON_CONNECTION
100258 field_addr.name = "prevent_new_cities";
100259#endif /* FREECIV_JSON_CONNECTION */
100260
100261 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
100262 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
100263 }
100264
100265#ifdef FREECIV_JSON_CONNECTION
100266 field_addr.name = "lake_flooding";
100267#endif /* FREECIV_JSON_CONNECTION */
100268
100269 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
100270 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
100271 }
100272
100273#ifdef FREECIV_JSON_CONNECTION
100274 field_addr.name = "ruleset_locked";
100275#endif /* FREECIV_JSON_CONNECTION */
100276
100277 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
100278 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
100279 }
100280#endif /* FREECIV_DELTA_PROTOCOL */
100281
100283#undef FREE_PACKET_STRUCT
100284}
100285
100286static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
100287{
100288 const struct packet_edit_game *real_packet = packet;
100289 int e;
100291
100292 log_packet_detailed("packet_edit_game_100: sending info about ()");
100293
100294#ifdef FREECIV_DELTA_PROTOCOL
100296 struct packet_edit_game *old;
100297 bool differ;
100298 struct genhash **hash = pc->phs.sent + PACKET_EDIT_GAME;
100299
100300 if (nullptr == *hash) {
100302 nullptr, nullptr, nullptr, destroy_packet_edit_game);
100303 }
100304 BV_CLR_ALL(fields);
100305
100306 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100307 old = fc_malloc(sizeof(*old));
100308 /* temporary bitcopy just to insert correctly */
100309 *old = *real_packet;
100312 }
100313
100314 /* folded into head */
100315 if (real_packet->scenario) {
100316 BV_SET(fields, 0);
100317 }
100318
100319 differ = (strcmp(old->scenario_name, real_packet->scenario_name) != 0);
100320 if (differ) {
100321 BV_SET(fields, 1);
100322 }
100323
100324 differ = (strcmp(old->scenario_authors, real_packet->scenario_authors) != 0);
100325 if (differ) {
100326 BV_SET(fields, 2);
100327 }
100328
100329 /* folded into head */
100330 if (real_packet->scenario_random) {
100331 BV_SET(fields, 3);
100332 }
100333
100334 /* folded into head */
100335 if (real_packet->scenario_players) {
100336 BV_SET(fields, 4);
100337 }
100338
100339 /* folded into head */
100340 if (real_packet->startpos_nations) {
100341 BV_SET(fields, 5);
100342 }
100343
100344 /* folded into head */
100345 if (real_packet->prevent_new_cities) {
100346 BV_SET(fields, 6);
100347 }
100348
100349 /* folded into head */
100350 if (real_packet->lake_flooding) {
100351 BV_SET(fields, 7);
100352 }
100353
100354 /* folded into head */
100355 if (real_packet->ruleset_locked) {
100356 BV_SET(fields, 8);
100357 }
100358#endif /* FREECIV_DELTA_PROTOCOL */
100359
100360#ifdef FREECIV_JSON_CONNECTION
100361 struct plocation field_addr;
100362 {
100363 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100366 }
100367#endif /* FREECIV_JSON_CONNECTION */
100368
100369#ifdef FREECIV_DELTA_PROTOCOL
100370#ifdef FREECIV_JSON_CONNECTION
100371 field_addr.name = "fields";
100372#endif /* FREECIV_JSON_CONNECTION */
100373 e = 0;
100374 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100375 if (e) {
100376 log_packet_detailed("fields bitvector error detected");
100377 }
100378
100379 /* field 0 is folded into the header */
100380
100381 if (BV_ISSET(fields, 1)) {
100382 log_packet_detailed(" field 'scenario_name' has changed");
100383
100384#ifdef FREECIV_JSON_CONNECTION
100385 field_addr.name = "scenario_name";
100386#endif /* FREECIV_JSON_CONNECTION */
100387 e = 0;
100388
100389 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
100390
100391 if (e) {
100392 log_packet_detailed("'scenario_name' field error detected");
100393 }
100394 }
100395
100396 if (BV_ISSET(fields, 2)) {
100397 log_packet_detailed(" field 'scenario_authors' has changed");
100398
100399#ifdef FREECIV_JSON_CONNECTION
100400 field_addr.name = "scenario_authors";
100401#endif /* FREECIV_JSON_CONNECTION */
100402 e = 0;
100403
100404 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
100405
100406 if (e) {
100407 log_packet_detailed("'scenario_authors' field error detected");
100408 }
100409 }
100410
100411 /* field 3 is folded into the header */
100412
100413 /* field 4 is folded into the header */
100414
100415 /* field 5 is folded into the header */
100416
100417 /* field 6 is folded into the header */
100418
100419 /* field 7 is folded into the header */
100420
100421 /* field 8 is folded into the header */
100422
100423 *old = *real_packet;
100424
100425#else /* FREECIV_DELTA_PROTOCOL */
100426#ifdef FREECIV_JSON_CONNECTION
100427 field_addr.name = "scenario";
100428#endif /* FREECIV_JSON_CONNECTION */
100429 e = 0;
100430
100431 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario);
100432
100433 if (e) {
100434 log_packet_detailed("'scenario' field error detected");
100435 }
100436
100437#ifdef FREECIV_JSON_CONNECTION
100438 field_addr.name = "scenario_name";
100439#endif /* FREECIV_JSON_CONNECTION */
100440 e = 0;
100441
100442 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
100443
100444 if (e) {
100445 log_packet_detailed("'scenario_name' field error detected");
100446 }
100447
100448#ifdef FREECIV_JSON_CONNECTION
100449 field_addr.name = "scenario_authors";
100450#endif /* FREECIV_JSON_CONNECTION */
100451 e = 0;
100452
100453 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
100454
100455 if (e) {
100456 log_packet_detailed("'scenario_authors' field error detected");
100457 }
100458
100459#ifdef FREECIV_JSON_CONNECTION
100460 field_addr.name = "scenario_random";
100461#endif /* FREECIV_JSON_CONNECTION */
100462 e = 0;
100463
100464 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_random);
100465
100466 if (e) {
100467 log_packet_detailed("'scenario_random' field error detected");
100468 }
100469
100470#ifdef FREECIV_JSON_CONNECTION
100471 field_addr.name = "scenario_players";
100472#endif /* FREECIV_JSON_CONNECTION */
100473 e = 0;
100474
100475 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_players);
100476
100477 if (e) {
100478 log_packet_detailed("'scenario_players' field error detected");
100479 }
100480
100481#ifdef FREECIV_JSON_CONNECTION
100482 field_addr.name = "startpos_nations";
100483#endif /* FREECIV_JSON_CONNECTION */
100484 e = 0;
100485
100486 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
100487
100488 if (e) {
100489 log_packet_detailed("'startpos_nations' field error detected");
100490 }
100491
100492#ifdef FREECIV_JSON_CONNECTION
100493 field_addr.name = "prevent_new_cities";
100494#endif /* FREECIV_JSON_CONNECTION */
100495 e = 0;
100496
100497 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
100498
100499 if (e) {
100500 log_packet_detailed("'prevent_new_cities' field error detected");
100501 }
100502
100503#ifdef FREECIV_JSON_CONNECTION
100504 field_addr.name = "lake_flooding";
100505#endif /* FREECIV_JSON_CONNECTION */
100506 e = 0;
100507
100508 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
100509
100510 if (e) {
100511 log_packet_detailed("'lake_flooding' field error detected");
100512 }
100513
100514#ifdef FREECIV_JSON_CONNECTION
100515 field_addr.name = "ruleset_locked";
100516#endif /* FREECIV_JSON_CONNECTION */
100517 e = 0;
100518
100519 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
100520
100521 if (e) {
100522 log_packet_detailed("'ruleset_locked' field error detected");
100523 }
100524#endif /* FREECIV_DELTA_PROTOCOL */
100525
100527}
100528
100529int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
100530{
100531 if (!pc->used) {
100532 log_error("WARNING: trying to send data to the closed connection %s",
100534 return -1;
100535 }
100536 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_GAME].packet != nullptr, -1,
100537 "Handler for PACKET_EDIT_GAME not installed");
100538 return pc->phs.handlers->send[PACKET_EDIT_GAME].packet(pc, packet);
100539}
100540
100542{
100543 memset(packet, 0, sizeof(*packet));
100544}
100545
100546#define free_packet_edit_scenario_desc(_packet) (void) 0
100547#define destroy_packet_edit_scenario_desc free
100548
100549#ifdef FREECIV_DELTA_PROTOCOL
100550#define hash_packet_edit_scenario_desc_100 hash_const
100551#define cmp_packet_edit_scenario_desc_100 cmp_const
100553#endif /* FREECIV_DELTA_PROTOCOL */
100554
100556{
100557#define FREE_PACKET_STRUCT(_packet) free_packet_edit_scenario_desc(_packet)
100559
100560#ifdef FREECIV_JSON_CONNECTION
100561 struct plocation field_addr;
100562 {
100563 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100566 }
100567#endif /* FREECIV_JSON_CONNECTION */
100568
100569 log_packet_detailed("packet_edit_scenario_desc_100: got info about ()");
100570
100571#ifdef FREECIV_DELTA_PROTOCOL
100574 struct genhash **hash = pc->phs.received + PACKET_EDIT_SCENARIO_DESC;
100575
100576 if (nullptr == *hash) {
100578 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
100579 }
100580
100581 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100582 *real_packet = *old;
100583 } else {
100584 /* packet is already initialized empty */
100585 log_packet_detailed(" no old info");
100586 }
100587
100588#ifdef FREECIV_JSON_CONNECTION
100589 field_addr.name = "fields";
100590#endif /* FREECIV_JSON_CONNECTION */
100591 DIO_BV_GET(&din, &field_addr, fields);
100592
100593 if (BV_ISSET(fields, 0)) {
100594 log_packet_detailed(" got field 'scenario_desc'");
100595
100596#ifdef FREECIV_JSON_CONNECTION
100597 field_addr.name = "scenario_desc";
100598#endif /* FREECIV_JSON_CONNECTION */
100599
100600 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
100601 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
100602 }
100603 }
100604
100605 if (nullptr == old) {
100606 old = fc_malloc(sizeof(*old));
100608 *old = *real_packet;
100610 } else {
100611 *old = *real_packet;
100612 }
100613
100614#else /* FREECIV_DELTA_PROTOCOL */
100615#ifdef FREECIV_JSON_CONNECTION
100616 field_addr.name = "scenario_desc";
100617#endif /* FREECIV_JSON_CONNECTION */
100618
100619 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
100620 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
100621 }
100622#endif /* FREECIV_DELTA_PROTOCOL */
100623
100625#undef FREE_PACKET_STRUCT
100626}
100627
100629{
100630 const struct packet_edit_scenario_desc *real_packet = packet;
100631 int e;
100633
100634 log_packet_detailed("packet_edit_scenario_desc_100: sending info about ()");
100635
100636#ifdef FREECIV_DELTA_PROTOCOL
100639 bool differ;
100640 struct genhash **hash = pc->phs.sent + PACKET_EDIT_SCENARIO_DESC;
100641
100642 if (nullptr == *hash) {
100644 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
100645 }
100646 BV_CLR_ALL(fields);
100647
100648 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100649 old = fc_malloc(sizeof(*old));
100650 /* temporary bitcopy just to insert correctly */
100651 *old = *real_packet;
100654 }
100655
100656 differ = (strcmp(old->scenario_desc, real_packet->scenario_desc) != 0);
100657 if (differ) {
100658 BV_SET(fields, 0);
100659 }
100660#endif /* FREECIV_DELTA_PROTOCOL */
100661
100662#ifdef FREECIV_JSON_CONNECTION
100663 struct plocation field_addr;
100664 {
100665 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100668 }
100669#endif /* FREECIV_JSON_CONNECTION */
100670
100671#ifdef FREECIV_DELTA_PROTOCOL
100672#ifdef FREECIV_JSON_CONNECTION
100673 field_addr.name = "fields";
100674#endif /* FREECIV_JSON_CONNECTION */
100675 e = 0;
100676 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100677 if (e) {
100678 log_packet_detailed("fields bitvector error detected");
100679 }
100680
100681 if (BV_ISSET(fields, 0)) {
100682 log_packet_detailed(" field 'scenario_desc' has changed");
100683
100684#ifdef FREECIV_JSON_CONNECTION
100685 field_addr.name = "scenario_desc";
100686#endif /* FREECIV_JSON_CONNECTION */
100687 e = 0;
100688
100689 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
100690
100691 if (e) {
100692 log_packet_detailed("'scenario_desc' field error detected");
100693 }
100694 }
100695
100696 *old = *real_packet;
100697
100698#else /* FREECIV_DELTA_PROTOCOL */
100699#ifdef FREECIV_JSON_CONNECTION
100700 field_addr.name = "scenario_desc";
100701#endif /* FREECIV_JSON_CONNECTION */
100702 e = 0;
100703
100704 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
100705
100706 if (e) {
100707 log_packet_detailed("'scenario_desc' field error detected");
100708 }
100709#endif /* FREECIV_DELTA_PROTOCOL */
100710
100712}
100713
100715{
100716 if (!pc->used) {
100717 log_error("WARNING: trying to send data to the closed connection %s",
100719 return -1;
100720 }
100721 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet != nullptr, -1,
100722 "Handler for PACKET_EDIT_SCENARIO_DESC not installed");
100723 return pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet(pc, packet);
100724}
100725
100727{
100728 memset(packet, 0, sizeof(*packet));
100729}
100730
100731#define free_packet_edit_object_created(_packet) (void) 0
100732#define destroy_packet_edit_object_created free
100733
100734#ifdef FREECIV_DELTA_PROTOCOL
100735#define hash_packet_edit_object_created_100 hash_const
100736#define cmp_packet_edit_object_created_100 cmp_const
100738#endif /* FREECIV_DELTA_PROTOCOL */
100739
100741{
100742#define FREE_PACKET_STRUCT(_packet) free_packet_edit_object_created(_packet)
100744
100745#ifdef FREECIV_JSON_CONNECTION
100746 struct plocation field_addr;
100747 {
100748 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100751 }
100752#endif /* FREECIV_JSON_CONNECTION */
100753
100754 log_packet_detailed("packet_edit_object_created_100: got info about ()");
100755
100756#ifdef FREECIV_DELTA_PROTOCOL
100759 struct genhash **hash = pc->phs.received + PACKET_EDIT_OBJECT_CREATED;
100760
100761 if (nullptr == *hash) {
100763 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
100764 }
100765
100766 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100767 *real_packet = *old;
100768 } else {
100769 /* packet is already initialized empty */
100770 log_packet_detailed(" no old info");
100771 }
100772
100773#ifdef FREECIV_JSON_CONNECTION
100774 field_addr.name = "fields";
100775#endif /* FREECIV_JSON_CONNECTION */
100776 DIO_BV_GET(&din, &field_addr, fields);
100777
100778 if (BV_ISSET(fields, 0)) {
100779 log_packet_detailed(" got field 'tag'");
100780
100781#ifdef FREECIV_JSON_CONNECTION
100782 field_addr.name = "tag";
100783#endif /* FREECIV_JSON_CONNECTION */
100784
100785 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
100787 }
100788 }
100789
100790 if (BV_ISSET(fields, 1)) {
100791 log_packet_detailed(" got field 'id'");
100792
100793#ifdef FREECIV_JSON_CONNECTION
100794 field_addr.name = "id";
100795#endif /* FREECIV_JSON_CONNECTION */
100796
100797 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
100799 }
100800 }
100801
100802 if (nullptr == old) {
100803 old = fc_malloc(sizeof(*old));
100805 *old = *real_packet;
100807 } else {
100808 *old = *real_packet;
100809 }
100810
100811#else /* FREECIV_DELTA_PROTOCOL */
100812#ifdef FREECIV_JSON_CONNECTION
100813 field_addr.name = "tag";
100814#endif /* FREECIV_JSON_CONNECTION */
100815
100816 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
100818 }
100819
100820#ifdef FREECIV_JSON_CONNECTION
100821 field_addr.name = "id";
100822#endif /* FREECIV_JSON_CONNECTION */
100823
100824 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
100826 }
100827#endif /* FREECIV_DELTA_PROTOCOL */
100828
100830#undef FREE_PACKET_STRUCT
100831}
100832
100834{
100835 const struct packet_edit_object_created *real_packet = packet;
100836 int e;
100838
100839 log_packet_detailed("packet_edit_object_created_100: sending info about ()");
100840
100841#ifdef FREECIV_DELTA_PROTOCOL
100844 bool differ;
100845 struct genhash **hash = pc->phs.sent + PACKET_EDIT_OBJECT_CREATED;
100846
100847 if (nullptr == *hash) {
100849 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
100850 }
100851 BV_CLR_ALL(fields);
100852
100853 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100854 old = fc_malloc(sizeof(*old));
100855 /* temporary bitcopy just to insert correctly */
100856 *old = *real_packet;
100859 }
100860
100861 differ = (old->tag != real_packet->tag);
100862 if (differ) {
100863 BV_SET(fields, 0);
100864 }
100865
100866 differ = (old->id != real_packet->id);
100867 if (differ) {
100868 BV_SET(fields, 1);
100869 }
100870#endif /* FREECIV_DELTA_PROTOCOL */
100871
100872#ifdef FREECIV_JSON_CONNECTION
100873 struct plocation field_addr;
100874 {
100875 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100878 }
100879#endif /* FREECIV_JSON_CONNECTION */
100880
100881#ifdef FREECIV_DELTA_PROTOCOL
100882#ifdef FREECIV_JSON_CONNECTION
100883 field_addr.name = "fields";
100884#endif /* FREECIV_JSON_CONNECTION */
100885 e = 0;
100886 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100887 if (e) {
100888 log_packet_detailed("fields bitvector error detected");
100889 }
100890
100891 if (BV_ISSET(fields, 0)) {
100892 log_packet_detailed(" field 'tag' has changed");
100893
100894#ifdef FREECIV_JSON_CONNECTION
100895 field_addr.name = "tag";
100896#endif /* FREECIV_JSON_CONNECTION */
100897 e = 0;
100898
100899 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
100900
100901 if (e) {
100902 log_packet_detailed("'tag' field error detected");
100903 }
100904 }
100905
100906 if (BV_ISSET(fields, 1)) {
100907 log_packet_detailed(" field 'id' has changed");
100908
100909#ifdef FREECIV_JSON_CONNECTION
100910 field_addr.name = "id";
100911#endif /* FREECIV_JSON_CONNECTION */
100912 e = 0;
100913
100914 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
100915
100916 if (e) {
100917 log_packet_detailed("'id' field error detected");
100918 }
100919 }
100920
100921 *old = *real_packet;
100922
100923#else /* FREECIV_DELTA_PROTOCOL */
100924#ifdef FREECIV_JSON_CONNECTION
100925 field_addr.name = "tag";
100926#endif /* FREECIV_JSON_CONNECTION */
100927 e = 0;
100928
100929 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
100930
100931 if (e) {
100932 log_packet_detailed("'tag' field error detected");
100933 }
100934
100935#ifdef FREECIV_JSON_CONNECTION
100936 field_addr.name = "id";
100937#endif /* FREECIV_JSON_CONNECTION */
100938 e = 0;
100939
100940 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
100941
100942 if (e) {
100943 log_packet_detailed("'id' field error detected");
100944 }
100945#endif /* FREECIV_DELTA_PROTOCOL */
100946
100948}
100949
100951{
100952 if (!pc->used) {
100953 log_error("WARNING: trying to send data to the closed connection %s",
100955 return -1;
100956 }
100957 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet != nullptr, -1,
100958 "Handler for PACKET_EDIT_OBJECT_CREATED not installed");
100959 return pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet(pc, packet);
100960}
100961
100963{
100964 struct packet_edit_object_created packet, *real_packet = &packet;
100965
100966 real_packet->tag = tag;
100967 real_packet->id = id;
100968
100970}
100971
100972static inline void init_packet_play_music(struct packet_play_music *packet)
100973{
100974 memset(packet, 0, sizeof(*packet));
100975}
100976
100977#define free_packet_play_music(_packet) (void) 0
100978#define destroy_packet_play_music free
100979
100980#ifdef FREECIV_DELTA_PROTOCOL
100981#define hash_packet_play_music_100 hash_const
100982#define cmp_packet_play_music_100 cmp_const
100984#endif /* FREECIV_DELTA_PROTOCOL */
100985
100987{
100988#define FREE_PACKET_STRUCT(_packet) free_packet_play_music(_packet)
100990
100991#ifdef FREECIV_JSON_CONNECTION
100992 struct plocation field_addr;
100993 {
100994 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100997 }
100998#endif /* FREECIV_JSON_CONNECTION */
100999
101000 log_packet_detailed("packet_play_music_100: got info about ()");
101001
101002#ifdef FREECIV_DELTA_PROTOCOL
101004 struct packet_play_music *old;
101005 struct genhash **hash = pc->phs.received + PACKET_PLAY_MUSIC;
101006
101007 if (nullptr == *hash) {
101009 nullptr, nullptr, nullptr, destroy_packet_play_music);
101010 }
101011
101012 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101013 *real_packet = *old;
101014 } else {
101015 /* packet is already initialized empty */
101016 log_packet_detailed(" no old info");
101017 }
101018
101019#ifdef FREECIV_JSON_CONNECTION
101020 field_addr.name = "fields";
101021#endif /* FREECIV_JSON_CONNECTION */
101022 DIO_BV_GET(&din, &field_addr, fields);
101023
101024 if (BV_ISSET(fields, 0)) {
101025 log_packet_detailed(" got field 'tag'");
101026
101027#ifdef FREECIV_JSON_CONNECTION
101028 field_addr.name = "tag";
101029#endif /* FREECIV_JSON_CONNECTION */
101030
101031 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101033 }
101034 }
101035
101036 if (nullptr == old) {
101037 old = fc_malloc(sizeof(*old));
101039 *old = *real_packet;
101041 } else {
101042 *old = *real_packet;
101043 }
101044
101045#else /* FREECIV_DELTA_PROTOCOL */
101046#ifdef FREECIV_JSON_CONNECTION
101047 field_addr.name = "tag";
101048#endif /* FREECIV_JSON_CONNECTION */
101049
101050 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101052 }
101053#endif /* FREECIV_DELTA_PROTOCOL */
101054
101056#undef FREE_PACKET_STRUCT
101057}
101058
101059static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
101060{
101061 const struct packet_play_music *real_packet = packet;
101062 int e;
101064
101065 log_packet_detailed("packet_play_music_100: sending info about ()");
101066
101067#ifdef FREECIV_DELTA_PROTOCOL
101069 struct packet_play_music *old;
101070 bool differ;
101071 struct genhash **hash = pc->phs.sent + PACKET_PLAY_MUSIC;
101072
101073 if (nullptr == *hash) {
101075 nullptr, nullptr, nullptr, destroy_packet_play_music);
101076 }
101077 BV_CLR_ALL(fields);
101078
101079 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101080 old = fc_malloc(sizeof(*old));
101081 /* temporary bitcopy just to insert correctly */
101082 *old = *real_packet;
101085 }
101086
101087 differ = (strcmp(old->tag, real_packet->tag) != 0);
101088 if (differ) {
101089 BV_SET(fields, 0);
101090 }
101091#endif /* FREECIV_DELTA_PROTOCOL */
101092
101093#ifdef FREECIV_JSON_CONNECTION
101094 struct plocation field_addr;
101095 {
101096 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101099 }
101100#endif /* FREECIV_JSON_CONNECTION */
101101
101102#ifdef FREECIV_DELTA_PROTOCOL
101103#ifdef FREECIV_JSON_CONNECTION
101104 field_addr.name = "fields";
101105#endif /* FREECIV_JSON_CONNECTION */
101106 e = 0;
101107 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101108 if (e) {
101109 log_packet_detailed("fields bitvector error detected");
101110 }
101111
101112 if (BV_ISSET(fields, 0)) {
101113 log_packet_detailed(" field 'tag' has changed");
101114
101115#ifdef FREECIV_JSON_CONNECTION
101116 field_addr.name = "tag";
101117#endif /* FREECIV_JSON_CONNECTION */
101118 e = 0;
101119
101120 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101121
101122 if (e) {
101123 log_packet_detailed("'tag' field error detected");
101124 }
101125 }
101126
101127 *old = *real_packet;
101128
101129#else /* FREECIV_DELTA_PROTOCOL */
101130#ifdef FREECIV_JSON_CONNECTION
101131 field_addr.name = "tag";
101132#endif /* FREECIV_JSON_CONNECTION */
101133 e = 0;
101134
101135 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101136
101137 if (e) {
101138 log_packet_detailed("'tag' field error detected");
101139 }
101140#endif /* FREECIV_DELTA_PROTOCOL */
101141
101143}
101144
101145int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
101146{
101147 if (!pc->used) {
101148 log_error("WARNING: trying to send data to the closed connection %s",
101150 return -1;
101151 }
101152 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet != nullptr, -1,
101153 "Handler for PACKET_PLAY_MUSIC not installed");
101154 return pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet(pc, packet);
101155}
101156
101157void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
101158{
101159 conn_list_iterate(dest, pconn) {
101160 send_packet_play_music(pconn, packet);
101162}
101163
101164static inline void init_packet_popup_image(struct packet_popup_image *packet)
101165{
101166 memset(packet, 0, sizeof(*packet));
101167}
101168
101169#define free_packet_popup_image(_packet) (void) 0
101170#define destroy_packet_popup_image free
101171
101172#ifdef FREECIV_DELTA_PROTOCOL
101173#define hash_packet_popup_image_100 hash_const
101174#define cmp_packet_popup_image_100 cmp_const
101176#endif /* FREECIV_DELTA_PROTOCOL */
101177
101179{
101180#define FREE_PACKET_STRUCT(_packet) free_packet_popup_image(_packet)
101182
101183#ifdef FREECIV_JSON_CONNECTION
101184 struct plocation field_addr;
101185 {
101186 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101189 }
101190#endif /* FREECIV_JSON_CONNECTION */
101191
101192 log_packet_detailed("packet_popup_image_100: got info about ()");
101193
101194#ifdef FREECIV_DELTA_PROTOCOL
101196 struct packet_popup_image *old;
101197 struct genhash **hash = pc->phs.received + PACKET_POPUP_IMAGE;
101198
101199 if (nullptr == *hash) {
101201 nullptr, nullptr, nullptr, destroy_packet_popup_image);
101202 }
101203
101204 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101205 *real_packet = *old;
101206 } else {
101207 /* packet is already initialized empty */
101208 log_packet_detailed(" no old info");
101209 }
101210
101211#ifdef FREECIV_JSON_CONNECTION
101212 field_addr.name = "fields";
101213#endif /* FREECIV_JSON_CONNECTION */
101214 DIO_BV_GET(&din, &field_addr, fields);
101215
101216 if (BV_ISSET(fields, 0)) {
101217 log_packet_detailed(" got field 'tag'");
101218
101219#ifdef FREECIV_JSON_CONNECTION
101220 field_addr.name = "tag";
101221#endif /* FREECIV_JSON_CONNECTION */
101222
101223 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101225 }
101226 }
101227
101228 if (nullptr == old) {
101229 old = fc_malloc(sizeof(*old));
101231 *old = *real_packet;
101233 } else {
101234 *old = *real_packet;
101235 }
101236
101237#else /* FREECIV_DELTA_PROTOCOL */
101238#ifdef FREECIV_JSON_CONNECTION
101239 field_addr.name = "tag";
101240#endif /* FREECIV_JSON_CONNECTION */
101241
101242 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101244 }
101245#endif /* FREECIV_DELTA_PROTOCOL */
101246
101248#undef FREE_PACKET_STRUCT
101249}
101250
101251static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
101252{
101253 const struct packet_popup_image *real_packet = packet;
101254 int e;
101256
101257 log_packet_detailed("packet_popup_image_100: sending info about ()");
101258
101259#ifdef FREECIV_DELTA_PROTOCOL
101261 struct packet_popup_image *old;
101262 bool differ;
101263 struct genhash **hash = pc->phs.sent + PACKET_POPUP_IMAGE;
101264
101265 if (nullptr == *hash) {
101267 nullptr, nullptr, nullptr, destroy_packet_popup_image);
101268 }
101269 BV_CLR_ALL(fields);
101270
101271 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101272 old = fc_malloc(sizeof(*old));
101273 /* temporary bitcopy just to insert correctly */
101274 *old = *real_packet;
101277 }
101278
101279 differ = (strcmp(old->tag, real_packet->tag) != 0);
101280 if (differ) {
101281 BV_SET(fields, 0);
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 if (BV_ISSET(fields, 0)) {
101305 log_packet_detailed(" field 'tag' has changed");
101306
101307#ifdef FREECIV_JSON_CONNECTION
101308 field_addr.name = "tag";
101309#endif /* FREECIV_JSON_CONNECTION */
101310 e = 0;
101311
101312 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101313
101314 if (e) {
101315 log_packet_detailed("'tag' field error detected");
101316 }
101317 }
101318
101319 *old = *real_packet;
101320
101321#else /* FREECIV_DELTA_PROTOCOL */
101322#ifdef FREECIV_JSON_CONNECTION
101323 field_addr.name = "tag";
101324#endif /* FREECIV_JSON_CONNECTION */
101325 e = 0;
101326
101327 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101328
101329 if (e) {
101330 log_packet_detailed("'tag' field error detected");
101331 }
101332#endif /* FREECIV_DELTA_PROTOCOL */
101333
101335}
101336
101338{
101339 if (!pc->used) {
101340 log_error("WARNING: trying to send data to the closed connection %s",
101342 return -1;
101343 }
101344 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet != nullptr, -1,
101345 "Handler for PACKET_POPUP_IMAGE not installed");
101346 return pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet(pc, packet);
101347}
101348
101349void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
101350{
101351 conn_list_iterate(dest, pconn) {
101354}
101355
101356static inline void init_packet_sync_serial(struct packet_sync_serial *packet)
101357{
101358 memset(packet, 0, sizeof(*packet));
101359}
101360
101361#define free_packet_sync_serial(_packet) (void) 0
101362#define destroy_packet_sync_serial free
101363
101364#ifdef FREECIV_DELTA_PROTOCOL
101365#define hash_packet_sync_serial_100 hash_const
101366#define cmp_packet_sync_serial_100 cmp_const
101368#endif /* FREECIV_DELTA_PROTOCOL */
101369
101371{
101372#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial(_packet)
101374
101375#ifdef FREECIV_JSON_CONNECTION
101376 struct plocation field_addr;
101377 {
101378 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101381 }
101382#endif /* FREECIV_JSON_CONNECTION */
101383
101384 log_packet_detailed("packet_sync_serial_100: got info about ()");
101385
101386#ifdef FREECIV_DELTA_PROTOCOL
101388 struct packet_sync_serial *old;
101389 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL;
101390
101391 if (nullptr == *hash) {
101393 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
101394 }
101395
101396 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101397 *real_packet = *old;
101398 } else {
101399 /* packet is already initialized empty */
101400 log_packet_detailed(" no old info");
101401 }
101402
101403#ifdef FREECIV_JSON_CONNECTION
101404 field_addr.name = "fields";
101405#endif /* FREECIV_JSON_CONNECTION */
101406 DIO_BV_GET(&din, &field_addr, fields);
101407
101408 if (BV_ISSET(fields, 0)) {
101409 log_packet_detailed(" got field 'serial'");
101410
101411#ifdef FREECIV_JSON_CONNECTION
101412 field_addr.name = "serial";
101413#endif /* FREECIV_JSON_CONNECTION */
101414
101415 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101417 }
101418 }
101419
101420 if (nullptr == old) {
101421 old = fc_malloc(sizeof(*old));
101423 *old = *real_packet;
101425 } else {
101426 *old = *real_packet;
101427 }
101428
101429#else /* FREECIV_DELTA_PROTOCOL */
101430#ifdef FREECIV_JSON_CONNECTION
101431 field_addr.name = "serial";
101432#endif /* FREECIV_JSON_CONNECTION */
101433
101434 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101436 }
101437#endif /* FREECIV_DELTA_PROTOCOL */
101438
101440#undef FREE_PACKET_STRUCT
101441}
101442
101443static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
101444{
101445 const struct packet_sync_serial *real_packet = packet;
101446 int e;
101448
101449 log_packet_detailed("packet_sync_serial_100: sending info about ()");
101450
101451#ifdef FREECIV_DELTA_PROTOCOL
101453 struct packet_sync_serial *old;
101454 bool differ;
101455 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL;
101456
101457 if (nullptr == *hash) {
101459 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
101460 }
101461 BV_CLR_ALL(fields);
101462
101463 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101464 old = fc_malloc(sizeof(*old));
101465 /* temporary bitcopy just to insert correctly */
101466 *old = *real_packet;
101469 }
101470
101471 differ = (old->serial != real_packet->serial);
101472 if (differ) {
101473 BV_SET(fields, 0);
101474 }
101475#endif /* FREECIV_DELTA_PROTOCOL */
101476
101477#ifdef FREECIV_JSON_CONNECTION
101478 struct plocation field_addr;
101479 {
101480 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101483 }
101484#endif /* FREECIV_JSON_CONNECTION */
101485
101486#ifdef FREECIV_DELTA_PROTOCOL
101487#ifdef FREECIV_JSON_CONNECTION
101488 field_addr.name = "fields";
101489#endif /* FREECIV_JSON_CONNECTION */
101490 e = 0;
101491 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101492 if (e) {
101493 log_packet_detailed("fields bitvector error detected");
101494 }
101495
101496 if (BV_ISSET(fields, 0)) {
101497 log_packet_detailed(" field 'serial' has changed");
101498
101499#ifdef FREECIV_JSON_CONNECTION
101500 field_addr.name = "serial";
101501#endif /* FREECIV_JSON_CONNECTION */
101502 e = 0;
101503
101504 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101505
101506 if (e) {
101507 log_packet_detailed("'serial' field error detected");
101508 }
101509 }
101510
101511 *old = *real_packet;
101512
101513#else /* FREECIV_DELTA_PROTOCOL */
101514#ifdef FREECIV_JSON_CONNECTION
101515 field_addr.name = "serial";
101516#endif /* FREECIV_JSON_CONNECTION */
101517 e = 0;
101518
101519 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101520
101521 if (e) {
101522 log_packet_detailed("'serial' field error detected");
101523 }
101524#endif /* FREECIV_DELTA_PROTOCOL */
101525
101527}
101528
101530{
101531 if (!pc->used) {
101532 log_error("WARNING: trying to send data to the closed connection %s",
101534 return -1;
101535 }
101536 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet != nullptr, -1,
101537 "Handler for PACKET_SYNC_SERIAL not installed");
101538 return pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet(pc, packet);
101539}
101540
101542{
101543 struct packet_sync_serial packet, *real_packet = &packet;
101544
101546
101548}
101549
101551{
101552 memset(packet, 0, sizeof(*packet));
101553}
101554
101555#define free_packet_sync_serial_reply(_packet) (void) 0
101556#define destroy_packet_sync_serial_reply free
101557
101558#ifdef FREECIV_DELTA_PROTOCOL
101559#define hash_packet_sync_serial_reply_100 hash_const
101560#define cmp_packet_sync_serial_reply_100 cmp_const
101562#endif /* FREECIV_DELTA_PROTOCOL */
101563
101565{
101566#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial_reply(_packet)
101568
101569#ifdef FREECIV_JSON_CONNECTION
101570 struct plocation field_addr;
101571 {
101572 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101575 }
101576#endif /* FREECIV_JSON_CONNECTION */
101577
101578 log_packet_detailed("packet_sync_serial_reply_100: got info about ()");
101579
101580#ifdef FREECIV_DELTA_PROTOCOL
101583 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL_REPLY;
101584
101585 if (nullptr == *hash) {
101587 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
101588 }
101589
101590 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101591 *real_packet = *old;
101592 } else {
101593 /* packet is already initialized empty */
101594 log_packet_detailed(" no old info");
101595 }
101596
101597#ifdef FREECIV_JSON_CONNECTION
101598 field_addr.name = "fields";
101599#endif /* FREECIV_JSON_CONNECTION */
101600 DIO_BV_GET(&din, &field_addr, fields);
101601
101602 if (BV_ISSET(fields, 0)) {
101603 log_packet_detailed(" got field 'serial'");
101604
101605#ifdef FREECIV_JSON_CONNECTION
101606 field_addr.name = "serial";
101607#endif /* FREECIV_JSON_CONNECTION */
101608
101609 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101611 }
101612 }
101613
101614 if (nullptr == old) {
101615 old = fc_malloc(sizeof(*old));
101617 *old = *real_packet;
101619 } else {
101620 *old = *real_packet;
101621 }
101622
101623#else /* FREECIV_DELTA_PROTOCOL */
101624#ifdef FREECIV_JSON_CONNECTION
101625 field_addr.name = "serial";
101626#endif /* FREECIV_JSON_CONNECTION */
101627
101628 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101630 }
101631#endif /* FREECIV_DELTA_PROTOCOL */
101632
101634#undef FREE_PACKET_STRUCT
101635}
101636
101638{
101639 const struct packet_sync_serial_reply *real_packet = packet;
101640 int e;
101642
101643 log_packet_detailed("packet_sync_serial_reply_100: sending info about ()");
101644
101645#ifdef FREECIV_DELTA_PROTOCOL
101648 bool differ;
101649 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL_REPLY;
101650
101651 if (nullptr == *hash) {
101653 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
101654 }
101655 BV_CLR_ALL(fields);
101656
101657 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101658 old = fc_malloc(sizeof(*old));
101659 /* temporary bitcopy just to insert correctly */
101660 *old = *real_packet;
101663 }
101664
101665 differ = (old->serial != real_packet->serial);
101666 if (differ) {
101667 BV_SET(fields, 0);
101668 }
101669#endif /* FREECIV_DELTA_PROTOCOL */
101670
101671#ifdef FREECIV_JSON_CONNECTION
101672 struct plocation field_addr;
101673 {
101674 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101677 }
101678#endif /* FREECIV_JSON_CONNECTION */
101679
101680#ifdef FREECIV_DELTA_PROTOCOL
101681#ifdef FREECIV_JSON_CONNECTION
101682 field_addr.name = "fields";
101683#endif /* FREECIV_JSON_CONNECTION */
101684 e = 0;
101685 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101686 if (e) {
101687 log_packet_detailed("fields bitvector error detected");
101688 }
101689
101690 if (BV_ISSET(fields, 0)) {
101691 log_packet_detailed(" field 'serial' has changed");
101692
101693#ifdef FREECIV_JSON_CONNECTION
101694 field_addr.name = "serial";
101695#endif /* FREECIV_JSON_CONNECTION */
101696 e = 0;
101697
101698 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101699
101700 if (e) {
101701 log_packet_detailed("'serial' field error detected");
101702 }
101703 }
101704
101705 *old = *real_packet;
101706
101707#else /* FREECIV_DELTA_PROTOCOL */
101708#ifdef FREECIV_JSON_CONNECTION
101709 field_addr.name = "serial";
101710#endif /* FREECIV_JSON_CONNECTION */
101711 e = 0;
101712
101713 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101714
101715 if (e) {
101716 log_packet_detailed("'serial' field error detected");
101717 }
101718#endif /* FREECIV_DELTA_PROTOCOL */
101719
101721}
101722
101724{
101725 if (!pc->used) {
101726 log_error("WARNING: trying to send data to the closed connection %s",
101728 return -1;
101729 }
101730 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet != nullptr, -1,
101731 "Handler for PACKET_SYNC_SERIAL_REPLY not installed");
101732 return pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet(pc, packet);
101733}
101734
101736{
101737 struct packet_sync_serial_reply packet, *real_packet = &packet;
101738
101740
101742}
101743
101745{
101746 memset(packet, 0, sizeof(*packet));
101747}
101748
101749#define free_packet_web_city_info_addition(_packet) (void) 0
101750#define destroy_packet_web_city_info_addition free
101751
101752#ifdef FREECIV_DELTA_PROTOCOL
101754{
101755 const struct packet_web_city_info_addition *key = (const struct packet_web_city_info_addition *) vkey;
101756 genhash_val_t result = 0;
101757
101758 result += key->id;
101759
101760 result &= 0xFFFFFFFF;
101761 return result;
101762}
101763
101764static bool cmp_packet_web_city_info_addition_100(const void *vkey1, const void *vkey2)
101765{
101766 const struct packet_web_city_info_addition *old = (const struct packet_web_city_info_addition *) vkey1;
101768 bool differ;
101769
101770 differ = (old->id != real_packet->id);
101771
101772 return !differ;
101773}
101775#endif /* FREECIV_DELTA_PROTOCOL */
101776
101778{
101779#define FREE_PACKET_STRUCT(_packet) free_packet_web_city_info_addition(_packet)
101781
101782#ifdef FREECIV_JSON_CONNECTION
101783 struct plocation field_addr;
101784 {
101785 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101788 }
101789#endif /* FREECIV_JSON_CONNECTION */
101790
101791#ifdef FREECIV_JSON_CONNECTION
101792 field_addr.name = "id";
101793#endif /* FREECIV_JSON_CONNECTION */
101794
101795 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
101797 }
101798
101799 log_packet_detailed("packet_web_city_info_addition_100: got info about (%d)",
101800 real_packet->id);
101801
101802#ifdef FREECIV_DELTA_PROTOCOL
101805 struct genhash **hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
101806
101807 if (nullptr == *hash) {
101809 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
101810 }
101811
101812 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101813 *real_packet = *old;
101814 } else {
101815 /* packet is already initialized empty */
101816 log_packet_detailed(" no old info");
101817 }
101818
101819#ifdef FREECIV_JSON_CONNECTION
101820 field_addr.name = "fields";
101821#endif /* FREECIV_JSON_CONNECTION */
101822 DIO_BV_GET(&din, &field_addr, fields);
101823
101824 real_packet->cma_enabled = BV_ISSET(fields, 0);
101825
101826 if (BV_ISSET(fields, 1)) {
101827 log_packet_detailed(" got field 'cm_parameter'");
101828
101829#ifdef FREECIV_JSON_CONNECTION
101830 field_addr.name = "cm_parameter";
101831#endif /* FREECIV_JSON_CONNECTION */
101832
101833 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
101835 }
101836 }
101837
101838 if (BV_ISSET(fields, 2)) {
101839 log_packet_detailed(" got field 'granary_size'");
101840
101841#ifdef FREECIV_JSON_CONNECTION
101842 field_addr.name = "granary_size";
101843#endif /* FREECIV_JSON_CONNECTION */
101844
101845 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
101846 RECEIVE_PACKET_FIELD_ERROR(granary_size);
101847 }
101848 }
101849
101850 if (BV_ISSET(fields, 3)) {
101851 log_packet_detailed(" got field 'granary_turns'");
101852
101853#ifdef FREECIV_JSON_CONNECTION
101854 field_addr.name = "granary_turns";
101855#endif /* FREECIV_JSON_CONNECTION */
101856
101857 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
101858 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
101859 }
101860 }
101861
101862 if (BV_ISSET(fields, 4)) {
101863 log_packet_detailed(" got field 'can_build_unit'");
101864
101865#ifdef FREECIV_JSON_CONNECTION
101866 field_addr.name = "can_build_unit";
101867#endif /* FREECIV_JSON_CONNECTION */
101868
101869 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
101870 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
101871 }
101872 }
101873
101874 if (BV_ISSET(fields, 5)) {
101875 log_packet_detailed(" got field 'can_build_improvement'");
101876
101877#ifdef FREECIV_JSON_CONNECTION
101878 field_addr.name = "can_build_improvement";
101879#endif /* FREECIV_JSON_CONNECTION */
101880
101881 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
101882 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
101883 }
101884 }
101885
101886 if (BV_ISSET(fields, 6)) {
101887 log_packet_detailed(" got field 'output_food'");
101888
101889#ifdef FREECIV_JSON_CONNECTION
101890 field_addr.name = "output_food";
101891#endif /* FREECIV_JSON_CONNECTION */
101892
101893 {
101894 int i;
101895
101896
101897#ifdef FREECIV_JSON_CONNECTION
101898 /* Enter array. */
101899 field_addr.sub_location = plocation_elem_new(0);
101900#endif /* FREECIV_JSON_CONNECTION */
101901
101902 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
101903#ifdef FREECIV_JSON_CONNECTION
101904 /* Next array element */
101905 field_addr.sub_location->number = i;
101906#endif /* FREECIV_JSON_CONNECTION */
101907
101908 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
101909 RECEIVE_PACKET_FIELD_ERROR(output_food);
101910 }
101911 }
101912
101913#ifdef FREECIV_JSON_CONNECTION
101914 /* Exit array. */
101915 FC_FREE(field_addr.sub_location);
101916#endif /* FREECIV_JSON_CONNECTION */
101917 }
101918 }
101919
101920 if (BV_ISSET(fields, 7)) {
101921 log_packet_detailed(" got field 'output_shield'");
101922
101923#ifdef FREECIV_JSON_CONNECTION
101924 field_addr.name = "output_shield";
101925#endif /* FREECIV_JSON_CONNECTION */
101926
101927 {
101928 int i;
101929
101930
101931#ifdef FREECIV_JSON_CONNECTION
101932 /* Enter array. */
101933 field_addr.sub_location = plocation_elem_new(0);
101934#endif /* FREECIV_JSON_CONNECTION */
101935
101936 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
101937#ifdef FREECIV_JSON_CONNECTION
101938 /* Next array element */
101939 field_addr.sub_location->number = i;
101940#endif /* FREECIV_JSON_CONNECTION */
101941
101942 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
101943 RECEIVE_PACKET_FIELD_ERROR(output_shield);
101944 }
101945 }
101946
101947#ifdef FREECIV_JSON_CONNECTION
101948 /* Exit array. */
101949 FC_FREE(field_addr.sub_location);
101950#endif /* FREECIV_JSON_CONNECTION */
101951 }
101952 }
101953
101954 if (BV_ISSET(fields, 8)) {
101955 log_packet_detailed(" got field 'output_trade'");
101956
101957#ifdef FREECIV_JSON_CONNECTION
101958 field_addr.name = "output_trade";
101959#endif /* FREECIV_JSON_CONNECTION */
101960
101961 {
101962 int i;
101963
101964
101965#ifdef FREECIV_JSON_CONNECTION
101966 /* Enter array. */
101967 field_addr.sub_location = plocation_elem_new(0);
101968#endif /* FREECIV_JSON_CONNECTION */
101969
101970 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
101971#ifdef FREECIV_JSON_CONNECTION
101972 /* Next array element */
101973 field_addr.sub_location->number = i;
101974#endif /* FREECIV_JSON_CONNECTION */
101975
101976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
101977 RECEIVE_PACKET_FIELD_ERROR(output_trade);
101978 }
101979 }
101980
101981#ifdef FREECIV_JSON_CONNECTION
101982 /* Exit array. */
101983 FC_FREE(field_addr.sub_location);
101984#endif /* FREECIV_JSON_CONNECTION */
101985 }
101986 }
101987
101988 if (nullptr == old) {
101989 old = fc_malloc(sizeof(*old));
101991 *old = *real_packet;
101993 } else {
101994 *old = *real_packet;
101995 }
101996
101997 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
101998 if (nullptr != *hash) {
102000 }
102001
102002#else /* FREECIV_DELTA_PROTOCOL */
102003#ifdef FREECIV_JSON_CONNECTION
102004 field_addr.name = "cma_enabled";
102005#endif /* FREECIV_JSON_CONNECTION */
102006
102007 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->cma_enabled)) {
102008 RECEIVE_PACKET_FIELD_ERROR(cma_enabled);
102009 }
102010
102011#ifdef FREECIV_JSON_CONNECTION
102012 field_addr.name = "cm_parameter";
102013#endif /* FREECIV_JSON_CONNECTION */
102014
102015 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102017 }
102018
102019#ifdef FREECIV_JSON_CONNECTION
102020 field_addr.name = "granary_size";
102021#endif /* FREECIV_JSON_CONNECTION */
102022
102023 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
102024 RECEIVE_PACKET_FIELD_ERROR(granary_size);
102025 }
102026
102027#ifdef FREECIV_JSON_CONNECTION
102028 field_addr.name = "granary_turns";
102029#endif /* FREECIV_JSON_CONNECTION */
102030
102031 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
102032 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
102033 }
102034
102035#ifdef FREECIV_JSON_CONNECTION
102036 field_addr.name = "can_build_unit";
102037#endif /* FREECIV_JSON_CONNECTION */
102038
102039 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
102040 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
102041 }
102042
102043#ifdef FREECIV_JSON_CONNECTION
102044 field_addr.name = "can_build_improvement";
102045#endif /* FREECIV_JSON_CONNECTION */
102046
102047 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
102048 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
102049 }
102050
102051#ifdef FREECIV_JSON_CONNECTION
102052 field_addr.name = "output_food";
102053#endif /* FREECIV_JSON_CONNECTION */
102054
102055 {
102056 int i;
102057
102058
102059#ifdef FREECIV_JSON_CONNECTION
102060 /* Enter array. */
102061 field_addr.sub_location = plocation_elem_new(0);
102062#endif /* FREECIV_JSON_CONNECTION */
102063
102064 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102065#ifdef FREECIV_JSON_CONNECTION
102066 /* Next array element */
102067 field_addr.sub_location->number = i;
102068#endif /* FREECIV_JSON_CONNECTION */
102069
102070 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
102071 RECEIVE_PACKET_FIELD_ERROR(output_food);
102072 }
102073 }
102074
102075#ifdef FREECIV_JSON_CONNECTION
102076 /* Exit array. */
102077 FC_FREE(field_addr.sub_location);
102078#endif /* FREECIV_JSON_CONNECTION */
102079 }
102080
102081#ifdef FREECIV_JSON_CONNECTION
102082 field_addr.name = "output_shield";
102083#endif /* FREECIV_JSON_CONNECTION */
102084
102085 {
102086 int i;
102087
102088
102089#ifdef FREECIV_JSON_CONNECTION
102090 /* Enter array. */
102091 field_addr.sub_location = plocation_elem_new(0);
102092#endif /* FREECIV_JSON_CONNECTION */
102093
102094 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102095#ifdef FREECIV_JSON_CONNECTION
102096 /* Next array element */
102097 field_addr.sub_location->number = i;
102098#endif /* FREECIV_JSON_CONNECTION */
102099
102100 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
102101 RECEIVE_PACKET_FIELD_ERROR(output_shield);
102102 }
102103 }
102104
102105#ifdef FREECIV_JSON_CONNECTION
102106 /* Exit array. */
102107 FC_FREE(field_addr.sub_location);
102108#endif /* FREECIV_JSON_CONNECTION */
102109 }
102110
102111#ifdef FREECIV_JSON_CONNECTION
102112 field_addr.name = "output_trade";
102113#endif /* FREECIV_JSON_CONNECTION */
102114
102115 {
102116 int i;
102117
102118
102119#ifdef FREECIV_JSON_CONNECTION
102120 /* Enter array. */
102121 field_addr.sub_location = plocation_elem_new(0);
102122#endif /* FREECIV_JSON_CONNECTION */
102123
102124 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102125#ifdef FREECIV_JSON_CONNECTION
102126 /* Next array element */
102127 field_addr.sub_location->number = i;
102128#endif /* FREECIV_JSON_CONNECTION */
102129
102130 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
102131 RECEIVE_PACKET_FIELD_ERROR(output_trade);
102132 }
102133 }
102134
102135#ifdef FREECIV_JSON_CONNECTION
102136 /* Exit array. */
102137 FC_FREE(field_addr.sub_location);
102138#endif /* FREECIV_JSON_CONNECTION */
102139 }
102140#endif /* FREECIV_DELTA_PROTOCOL */
102141
102143#undef FREE_PACKET_STRUCT
102144}
102145
102146static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
102147{
102148 const struct packet_web_city_info_addition *real_packet = packet;
102149 int e;
102151
102152 log_packet_detailed("packet_web_city_info_addition_100: sending info about (%d)",
102153 real_packet->id);
102154
102155#ifdef FREECIV_DELTA_PROTOCOL
102158 bool differ;
102159 int different = force_to_send;
102160 struct genhash **hash = pc->phs.sent + PACKET_WEB_CITY_INFO_ADDITION;
102161
102162 if (nullptr == *hash) {
102164 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
102165 }
102166 BV_CLR_ALL(fields);
102167
102168 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102169 old = fc_malloc(sizeof(*old));
102170 /* temporary bitcopy just to insert correctly */
102171 *old = *real_packet;
102174 different = 1; /* Force to send. */
102175 }
102176
102177 differ = (old->cma_enabled != real_packet->cma_enabled);
102178 if (differ) {
102179 different++;
102180 }
102181 /* folded into head */
102182 if (real_packet->cma_enabled) {
102183 BV_SET(fields, 0);
102184 }
102185
102186 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
102187 if (differ) {
102188 different++;
102189 BV_SET(fields, 1);
102190 }
102191
102192 differ = (old->granary_size != real_packet->granary_size);
102193 if (differ) {
102194 different++;
102195 BV_SET(fields, 2);
102196 }
102197
102198 differ = (old->granary_turns != real_packet->granary_turns);
102199 if (differ) {
102200 different++;
102201 BV_SET(fields, 3);
102202 }
102203
102204 differ = !BV_ARE_EQUAL(old->can_build_unit, real_packet->can_build_unit);
102205 if (differ) {
102206 different++;
102207 BV_SET(fields, 4);
102208 }
102209
102210 differ = !BV_ARE_EQUAL(old->can_build_improvement, real_packet->can_build_improvement);
102211 if (differ) {
102212 different++;
102213 BV_SET(fields, 5);
102214 }
102215
102216 differ = FALSE;
102217 {
102218 int i;
102219
102220 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102221 differ = (old->output_food[i] != real_packet->output_food[i]);
102222 if (differ) {
102223 break;
102224 }
102225 }
102226 }
102227 if (differ) {
102228 different++;
102229 BV_SET(fields, 6);
102230 }
102231
102232 differ = FALSE;
102233 {
102234 int i;
102235
102236 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102237 differ = (old->output_shield[i] != real_packet->output_shield[i]);
102238 if (differ) {
102239 break;
102240 }
102241 }
102242 }
102243 if (differ) {
102244 different++;
102245 BV_SET(fields, 7);
102246 }
102247
102248 differ = FALSE;
102249 {
102250 int i;
102251
102252 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102253 differ = (old->output_trade[i] != real_packet->output_trade[i]);
102254 if (differ) {
102255 break;
102256 }
102257 }
102258 }
102259 if (differ) {
102260 different++;
102261 BV_SET(fields, 8);
102262 }
102263
102264 if (different == 0) {
102265 log_packet_detailed(" no change -> discard");
102267 }
102268#endif /* FREECIV_DELTA_PROTOCOL */
102269
102270#ifdef FREECIV_JSON_CONNECTION
102271 struct plocation field_addr;
102272 {
102273 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102276 }
102277#endif /* FREECIV_JSON_CONNECTION */
102278
102279#ifdef FREECIV_JSON_CONNECTION
102280 field_addr.name = "id";
102281#endif /* FREECIV_JSON_CONNECTION */
102282 e = 0;
102283
102284 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
102285
102286 if (e) {
102287 log_packet_detailed("'id' field error detected");
102288 }
102289
102290#ifdef FREECIV_DELTA_PROTOCOL
102291#ifdef FREECIV_JSON_CONNECTION
102292 field_addr.name = "fields";
102293#endif /* FREECIV_JSON_CONNECTION */
102294 e = 0;
102295 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102296 if (e) {
102297 log_packet_detailed("fields bitvector error detected");
102298 }
102299
102300 /* field 0 is folded into the header */
102301
102302 if (BV_ISSET(fields, 1)) {
102303 log_packet_detailed(" field 'cm_parameter' has changed");
102304
102305#ifdef FREECIV_JSON_CONNECTION
102306 field_addr.name = "cm_parameter";
102307#endif /* FREECIV_JSON_CONNECTION */
102308 e = 0;
102309
102310 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102311
102312 if (e) {
102313 log_packet_detailed("'cm_parameter' field error detected");
102314 }
102315 }
102316
102317 if (BV_ISSET(fields, 2)) {
102318 log_packet_detailed(" field 'granary_size' has changed");
102319
102320#ifdef FREECIV_JSON_CONNECTION
102321 field_addr.name = "granary_size";
102322#endif /* FREECIV_JSON_CONNECTION */
102323 e = 0;
102324
102325 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
102326
102327 if (e) {
102328 log_packet_detailed("'granary_size' field error detected");
102329 }
102330 }
102331
102332 if (BV_ISSET(fields, 3)) {
102333 log_packet_detailed(" field 'granary_turns' has changed");
102334
102335#ifdef FREECIV_JSON_CONNECTION
102336 field_addr.name = "granary_turns";
102337#endif /* FREECIV_JSON_CONNECTION */
102338 e = 0;
102339
102340 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
102341
102342 if (e) {
102343 log_packet_detailed("'granary_turns' field error detected");
102344 }
102345 }
102346
102347 if (BV_ISSET(fields, 4)) {
102348 log_packet_detailed(" field 'can_build_unit' has changed");
102349
102350#ifdef FREECIV_JSON_CONNECTION
102351 field_addr.name = "can_build_unit";
102352#endif /* FREECIV_JSON_CONNECTION */
102353 e = 0;
102354
102355 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
102356
102357 if (e) {
102358 log_packet_detailed("'can_build_unit' field error detected");
102359 }
102360 }
102361
102362 if (BV_ISSET(fields, 5)) {
102363 log_packet_detailed(" field 'can_build_improvement' has changed");
102364
102365#ifdef FREECIV_JSON_CONNECTION
102366 field_addr.name = "can_build_improvement";
102367#endif /* FREECIV_JSON_CONNECTION */
102368 e = 0;
102369
102370 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
102371
102372 if (e) {
102373 log_packet_detailed("'can_build_improvement' field error detected");
102374 }
102375 }
102376
102377 if (BV_ISSET(fields, 6)) {
102378 log_packet_detailed(" field 'output_food' has changed");
102379
102380#ifdef FREECIV_JSON_CONNECTION
102381 field_addr.name = "output_food";
102382#endif /* FREECIV_JSON_CONNECTION */
102383 e = 0;
102384
102385 {
102386 int i;
102387
102388#ifdef FREECIV_JSON_CONNECTION
102389 /* Create the array. */
102391
102392 /* Enter array. */
102393 field_addr.sub_location = plocation_elem_new(0);
102394#endif /* FREECIV_JSON_CONNECTION */
102395
102396 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102397#ifdef FREECIV_JSON_CONNECTION
102398 /* Next array element. */
102399 field_addr.sub_location->number = i;
102400#endif /* FREECIV_JSON_CONNECTION */
102401
102402 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
102403 }
102404
102405#ifdef FREECIV_JSON_CONNECTION
102406 /* Exit array. */
102407 FC_FREE(field_addr.sub_location);
102408#endif /* FREECIV_JSON_CONNECTION */
102409 }
102410
102411 if (e) {
102412 log_packet_detailed("'output_food' field error detected");
102413 }
102414 }
102415
102416 if (BV_ISSET(fields, 7)) {
102417 log_packet_detailed(" field 'output_shield' has changed");
102418
102419#ifdef FREECIV_JSON_CONNECTION
102420 field_addr.name = "output_shield";
102421#endif /* FREECIV_JSON_CONNECTION */
102422 e = 0;
102423
102424 {
102425 int i;
102426
102427#ifdef FREECIV_JSON_CONNECTION
102428 /* Create the array. */
102430
102431 /* Enter array. */
102432 field_addr.sub_location = plocation_elem_new(0);
102433#endif /* FREECIV_JSON_CONNECTION */
102434
102435 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102436#ifdef FREECIV_JSON_CONNECTION
102437 /* Next array element. */
102438 field_addr.sub_location->number = i;
102439#endif /* FREECIV_JSON_CONNECTION */
102440
102441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
102442 }
102443
102444#ifdef FREECIV_JSON_CONNECTION
102445 /* Exit array. */
102446 FC_FREE(field_addr.sub_location);
102447#endif /* FREECIV_JSON_CONNECTION */
102448 }
102449
102450 if (e) {
102451 log_packet_detailed("'output_shield' field error detected");
102452 }
102453 }
102454
102455 if (BV_ISSET(fields, 8)) {
102456 log_packet_detailed(" field 'output_trade' has changed");
102457
102458#ifdef FREECIV_JSON_CONNECTION
102459 field_addr.name = "output_trade";
102460#endif /* FREECIV_JSON_CONNECTION */
102461 e = 0;
102462
102463 {
102464 int i;
102465
102466#ifdef FREECIV_JSON_CONNECTION
102467 /* Create the array. */
102469
102470 /* Enter array. */
102471 field_addr.sub_location = plocation_elem_new(0);
102472#endif /* FREECIV_JSON_CONNECTION */
102473
102474 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102475#ifdef FREECIV_JSON_CONNECTION
102476 /* Next array element. */
102477 field_addr.sub_location->number = i;
102478#endif /* FREECIV_JSON_CONNECTION */
102479
102480 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
102481 }
102482
102483#ifdef FREECIV_JSON_CONNECTION
102484 /* Exit array. */
102485 FC_FREE(field_addr.sub_location);
102486#endif /* FREECIV_JSON_CONNECTION */
102487 }
102488
102489 if (e) {
102490 log_packet_detailed("'output_trade' field error detected");
102491 }
102492 }
102493
102494 *old = *real_packet;
102495
102496 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
102497 if (nullptr != *hash) {
102499 }
102500
102501#else /* FREECIV_DELTA_PROTOCOL */
102502#ifdef FREECIV_JSON_CONNECTION
102503 field_addr.name = "cma_enabled";
102504#endif /* FREECIV_JSON_CONNECTION */
102505 e = 0;
102506
102507 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->cma_enabled);
102508
102509 if (e) {
102510 log_packet_detailed("'cma_enabled' field error detected");
102511 }
102512
102513#ifdef FREECIV_JSON_CONNECTION
102514 field_addr.name = "cm_parameter";
102515#endif /* FREECIV_JSON_CONNECTION */
102516 e = 0;
102517
102518 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102519
102520 if (e) {
102521 log_packet_detailed("'cm_parameter' field error detected");
102522 }
102523
102524#ifdef FREECIV_JSON_CONNECTION
102525 field_addr.name = "granary_size";
102526#endif /* FREECIV_JSON_CONNECTION */
102527 e = 0;
102528
102529 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
102530
102531 if (e) {
102532 log_packet_detailed("'granary_size' field error detected");
102533 }
102534
102535#ifdef FREECIV_JSON_CONNECTION
102536 field_addr.name = "granary_turns";
102537#endif /* FREECIV_JSON_CONNECTION */
102538 e = 0;
102539
102540 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
102541
102542 if (e) {
102543 log_packet_detailed("'granary_turns' field error detected");
102544 }
102545
102546#ifdef FREECIV_JSON_CONNECTION
102547 field_addr.name = "can_build_unit";
102548#endif /* FREECIV_JSON_CONNECTION */
102549 e = 0;
102550
102551 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
102552
102553 if (e) {
102554 log_packet_detailed("'can_build_unit' field error detected");
102555 }
102556
102557#ifdef FREECIV_JSON_CONNECTION
102558 field_addr.name = "can_build_improvement";
102559#endif /* FREECIV_JSON_CONNECTION */
102560 e = 0;
102561
102562 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
102563
102564 if (e) {
102565 log_packet_detailed("'can_build_improvement' field error detected");
102566 }
102567
102568#ifdef FREECIV_JSON_CONNECTION
102569 field_addr.name = "output_food";
102570#endif /* FREECIV_JSON_CONNECTION */
102571 e = 0;
102572
102573 {
102574 int i;
102575
102576#ifdef FREECIV_JSON_CONNECTION
102577 /* Create the array. */
102579
102580 /* Enter array. */
102581 field_addr.sub_location = plocation_elem_new(0);
102582#endif /* FREECIV_JSON_CONNECTION */
102583
102584 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102585#ifdef FREECIV_JSON_CONNECTION
102586 /* Next array element. */
102587 field_addr.sub_location->number = i;
102588#endif /* FREECIV_JSON_CONNECTION */
102589
102590 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
102591 }
102592
102593#ifdef FREECIV_JSON_CONNECTION
102594 /* Exit array. */
102595 FC_FREE(field_addr.sub_location);
102596#endif /* FREECIV_JSON_CONNECTION */
102597 }
102598
102599 if (e) {
102600 log_packet_detailed("'output_food' field error detected");
102601 }
102602
102603#ifdef FREECIV_JSON_CONNECTION
102604 field_addr.name = "output_shield";
102605#endif /* FREECIV_JSON_CONNECTION */
102606 e = 0;
102607
102608 {
102609 int i;
102610
102611#ifdef FREECIV_JSON_CONNECTION
102612 /* Create the array. */
102614
102615 /* Enter array. */
102616 field_addr.sub_location = plocation_elem_new(0);
102617#endif /* FREECIV_JSON_CONNECTION */
102618
102619 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102620#ifdef FREECIV_JSON_CONNECTION
102621 /* Next array element. */
102622 field_addr.sub_location->number = i;
102623#endif /* FREECIV_JSON_CONNECTION */
102624
102625 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
102626 }
102627
102628#ifdef FREECIV_JSON_CONNECTION
102629 /* Exit array. */
102630 FC_FREE(field_addr.sub_location);
102631#endif /* FREECIV_JSON_CONNECTION */
102632 }
102633
102634 if (e) {
102635 log_packet_detailed("'output_shield' field error detected");
102636 }
102637
102638#ifdef FREECIV_JSON_CONNECTION
102639 field_addr.name = "output_trade";
102640#endif /* FREECIV_JSON_CONNECTION */
102641 e = 0;
102642
102643 {
102644 int i;
102645
102646#ifdef FREECIV_JSON_CONNECTION
102647 /* Create the array. */
102649
102650 /* Enter array. */
102651 field_addr.sub_location = plocation_elem_new(0);
102652#endif /* FREECIV_JSON_CONNECTION */
102653
102654 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102655#ifdef FREECIV_JSON_CONNECTION
102656 /* Next array element. */
102657 field_addr.sub_location->number = i;
102658#endif /* FREECIV_JSON_CONNECTION */
102659
102660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
102661 }
102662
102663#ifdef FREECIV_JSON_CONNECTION
102664 /* Exit array. */
102665 FC_FREE(field_addr.sub_location);
102666#endif /* FREECIV_JSON_CONNECTION */
102667 }
102668
102669 if (e) {
102670 log_packet_detailed("'output_trade' field error detected");
102671 }
102672#endif /* FREECIV_DELTA_PROTOCOL */
102673
102675}
102676
102677int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
102678{
102679 if (!pc->used) {
102680 log_error("WARNING: trying to send data to the closed connection %s",
102682 return -1;
102683 }
102684 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send != nullptr, -1,
102685 "Handler for PACKET_WEB_CITY_INFO_ADDITION not installed");
102686 return pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send(pc, packet, force_to_send);
102687}
102688
102689void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
102690{
102691 conn_list_iterate(dest, pconn) {
102692 send_packet_web_city_info_addition(pconn, packet, force_to_send);
102694}
102695
102696static inline void init_packet_web_cma_set(struct packet_web_cma_set *packet)
102697{
102698 memset(packet, 0, sizeof(*packet));
102699}
102700
102701#define free_packet_web_cma_set(_packet) (void) 0
102702#define destroy_packet_web_cma_set free
102703
102704#ifdef FREECIV_DELTA_PROTOCOL
102706{
102707 const struct packet_web_cma_set *key = (const struct packet_web_cma_set *) vkey;
102708 genhash_val_t result = 0;
102709
102710 result += key->id;
102711
102712 result &= 0xFFFFFFFF;
102713 return result;
102714}
102715
102716static bool cmp_packet_web_cma_set_100(const void *vkey1, const void *vkey2)
102717{
102718 const struct packet_web_cma_set *old = (const struct packet_web_cma_set *) vkey1;
102719 const struct packet_web_cma_set *real_packet = (const struct packet_web_cma_set *) vkey2;
102720 bool differ;
102721
102722 differ = (old->id != real_packet->id);
102723
102724 return !differ;
102725}
102727#endif /* FREECIV_DELTA_PROTOCOL */
102728
102730{
102731#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_set(_packet)
102733
102734#ifdef FREECIV_JSON_CONNECTION
102735 struct plocation field_addr;
102736 {
102737 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102740 }
102741#endif /* FREECIV_JSON_CONNECTION */
102742
102743#ifdef FREECIV_JSON_CONNECTION
102744 field_addr.name = "id";
102745#endif /* FREECIV_JSON_CONNECTION */
102746
102747 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
102749 }
102750
102751 log_packet_detailed("packet_web_cma_set_100: got info about (%d)",
102752 real_packet->id);
102753
102754#ifdef FREECIV_DELTA_PROTOCOL
102756 struct packet_web_cma_set *old;
102757 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_SET;
102758
102759 if (nullptr == *hash) {
102761 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
102762 }
102763
102764 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102765 *real_packet = *old;
102766 } else {
102767 /* packet is already initialized empty */
102768 log_packet_detailed(" no old info");
102769 }
102770
102771#ifdef FREECIV_JSON_CONNECTION
102772 field_addr.name = "fields";
102773#endif /* FREECIV_JSON_CONNECTION */
102774 DIO_BV_GET(&din, &field_addr, fields);
102775
102776 if (BV_ISSET(fields, 0)) {
102777 log_packet_detailed(" got field 'cm_parameter'");
102778
102779#ifdef FREECIV_JSON_CONNECTION
102780 field_addr.name = "cm_parameter";
102781#endif /* FREECIV_JSON_CONNECTION */
102782
102783 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102785 }
102786 }
102787
102788 if (nullptr == old) {
102789 old = fc_malloc(sizeof(*old));
102791 *old = *real_packet;
102793 } else {
102794 *old = *real_packet;
102795 }
102796
102797#else /* FREECIV_DELTA_PROTOCOL */
102798#ifdef FREECIV_JSON_CONNECTION
102799 field_addr.name = "cm_parameter";
102800#endif /* FREECIV_JSON_CONNECTION */
102801
102802 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102804 }
102805#endif /* FREECIV_DELTA_PROTOCOL */
102806
102808#undef FREE_PACKET_STRUCT
102809}
102810
102811static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
102812{
102813 const struct packet_web_cma_set *real_packet = packet;
102814 int e;
102816
102817 log_packet_detailed("packet_web_cma_set_100: sending info about (%d)",
102818 real_packet->id);
102819
102820#ifdef FREECIV_DELTA_PROTOCOL
102822 struct packet_web_cma_set *old;
102823 bool differ;
102824 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_SET;
102825
102826 if (nullptr == *hash) {
102828 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
102829 }
102830 BV_CLR_ALL(fields);
102831
102832 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102833 old = fc_malloc(sizeof(*old));
102834 /* temporary bitcopy just to insert correctly */
102835 *old = *real_packet;
102838 }
102839
102840 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
102841 if (differ) {
102842 BV_SET(fields, 0);
102843 }
102844#endif /* FREECIV_DELTA_PROTOCOL */
102845
102846#ifdef FREECIV_JSON_CONNECTION
102847 struct plocation field_addr;
102848 {
102849 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102852 }
102853#endif /* FREECIV_JSON_CONNECTION */
102854
102855#ifdef FREECIV_JSON_CONNECTION
102856 field_addr.name = "id";
102857#endif /* FREECIV_JSON_CONNECTION */
102858 e = 0;
102859
102860 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
102861
102862 if (e) {
102863 log_packet_detailed("'id' field error detected");
102864 }
102865
102866#ifdef FREECIV_DELTA_PROTOCOL
102867#ifdef FREECIV_JSON_CONNECTION
102868 field_addr.name = "fields";
102869#endif /* FREECIV_JSON_CONNECTION */
102870 e = 0;
102871 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102872 if (e) {
102873 log_packet_detailed("fields bitvector error detected");
102874 }
102875
102876 if (BV_ISSET(fields, 0)) {
102877 log_packet_detailed(" field 'cm_parameter' has changed");
102878
102879#ifdef FREECIV_JSON_CONNECTION
102880 field_addr.name = "cm_parameter";
102881#endif /* FREECIV_JSON_CONNECTION */
102882 e = 0;
102883
102884 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102885
102886 if (e) {
102887 log_packet_detailed("'cm_parameter' field error detected");
102888 }
102889 }
102890
102891 *old = *real_packet;
102892
102893#else /* FREECIV_DELTA_PROTOCOL */
102894#ifdef FREECIV_JSON_CONNECTION
102895 field_addr.name = "cm_parameter";
102896#endif /* FREECIV_JSON_CONNECTION */
102897 e = 0;
102898
102899 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102900
102901 if (e) {
102902 log_packet_detailed("'cm_parameter' field error detected");
102903 }
102904#endif /* FREECIV_DELTA_PROTOCOL */
102905
102907}
102908
102910{
102911 if (!pc->used) {
102912 log_error("WARNING: trying to send data to the closed connection %s",
102914 return -1;
102915 }
102916 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet != nullptr, -1,
102917 "Handler for PACKET_WEB_CMA_SET not installed");
102918 return pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet(pc, packet);
102919}
102920
102921static inline void init_packet_web_cma_clear(struct packet_web_cma_clear *packet)
102922{
102923 memset(packet, 0, sizeof(*packet));
102924}
102925
102926#define free_packet_web_cma_clear(_packet) (void) 0
102927#define destroy_packet_web_cma_clear free
102928
102929#ifdef FREECIV_DELTA_PROTOCOL
102930#define hash_packet_web_cma_clear_100 hash_const
102931#define cmp_packet_web_cma_clear_100 cmp_const
102933#endif /* FREECIV_DELTA_PROTOCOL */
102934
102936{
102937#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_clear(_packet)
102939
102940#ifdef FREECIV_JSON_CONNECTION
102941 struct plocation field_addr;
102942 {
102943 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102946 }
102947#endif /* FREECIV_JSON_CONNECTION */
102948
102949 log_packet_detailed("packet_web_cma_clear_100: got info about ()");
102950
102951#ifdef FREECIV_DELTA_PROTOCOL
102953 struct packet_web_cma_clear *old;
102954 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_CLEAR;
102955
102956 if (nullptr == *hash) {
102958 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
102959 }
102960
102961 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102962 *real_packet = *old;
102963 } else {
102964 /* packet is already initialized empty */
102965 log_packet_detailed(" no old info");
102966 }
102967
102968#ifdef FREECIV_JSON_CONNECTION
102969 field_addr.name = "fields";
102970#endif /* FREECIV_JSON_CONNECTION */
102971 DIO_BV_GET(&din, &field_addr, fields);
102972
102973 if (BV_ISSET(fields, 0)) {
102974 log_packet_detailed(" got field 'id'");
102975
102976#ifdef FREECIV_JSON_CONNECTION
102977 field_addr.name = "id";
102978#endif /* FREECIV_JSON_CONNECTION */
102979
102980 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
102982 }
102983 }
102984
102985 if (nullptr == old) {
102986 old = fc_malloc(sizeof(*old));
102988 *old = *real_packet;
102990 } else {
102991 *old = *real_packet;
102992 }
102993
102994#else /* FREECIV_DELTA_PROTOCOL */
102995#ifdef FREECIV_JSON_CONNECTION
102996 field_addr.name = "id";
102997#endif /* FREECIV_JSON_CONNECTION */
102998
102999 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103001 }
103002#endif /* FREECIV_DELTA_PROTOCOL */
103003
103005#undef FREE_PACKET_STRUCT
103006}
103007
103008static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
103009{
103010 const struct packet_web_cma_clear *real_packet = packet;
103011 int e;
103013
103014 log_packet_detailed("packet_web_cma_clear_100: sending info about ()");
103015
103016#ifdef FREECIV_DELTA_PROTOCOL
103018 struct packet_web_cma_clear *old;
103019 bool differ;
103020 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_CLEAR;
103021
103022 if (nullptr == *hash) {
103024 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
103025 }
103026 BV_CLR_ALL(fields);
103027
103028 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103029 old = fc_malloc(sizeof(*old));
103030 /* temporary bitcopy just to insert correctly */
103031 *old = *real_packet;
103034 }
103035
103036 differ = (old->id != real_packet->id);
103037 if (differ) {
103038 BV_SET(fields, 0);
103039 }
103040#endif /* FREECIV_DELTA_PROTOCOL */
103041
103042#ifdef FREECIV_JSON_CONNECTION
103043 struct plocation field_addr;
103044 {
103045 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103048 }
103049#endif /* FREECIV_JSON_CONNECTION */
103050
103051#ifdef FREECIV_DELTA_PROTOCOL
103052#ifdef FREECIV_JSON_CONNECTION
103053 field_addr.name = "fields";
103054#endif /* FREECIV_JSON_CONNECTION */
103055 e = 0;
103056 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103057 if (e) {
103058 log_packet_detailed("fields bitvector error detected");
103059 }
103060
103061 if (BV_ISSET(fields, 0)) {
103062 log_packet_detailed(" field 'id' has changed");
103063
103064#ifdef FREECIV_JSON_CONNECTION
103065 field_addr.name = "id";
103066#endif /* FREECIV_JSON_CONNECTION */
103067 e = 0;
103068
103069 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103070
103071 if (e) {
103072 log_packet_detailed("'id' field error detected");
103073 }
103074 }
103075
103076 *old = *real_packet;
103077
103078#else /* FREECIV_DELTA_PROTOCOL */
103079#ifdef FREECIV_JSON_CONNECTION
103080 field_addr.name = "id";
103081#endif /* FREECIV_JSON_CONNECTION */
103082 e = 0;
103083
103084 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103085
103086 if (e) {
103087 log_packet_detailed("'id' field error detected");
103088 }
103089#endif /* FREECIV_DELTA_PROTOCOL */
103090
103092}
103093
103095{
103096 if (!pc->used) {
103097 log_error("WARNING: trying to send data to the closed connection %s",
103099 return -1;
103100 }
103101 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet != nullptr, -1,
103102 "Handler for PACKET_WEB_CMA_CLEAR not installed");
103103 return pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet(pc, packet);
103104}
103105
103107{
103108 memset(packet, 0, sizeof(*packet));
103109}
103110
103111#define free_packet_web_player_info_addition(_packet) (void) 0
103112#define destroy_packet_web_player_info_addition free
103113
103114#ifdef FREECIV_DELTA_PROTOCOL
103116{
103117 const struct packet_web_player_info_addition *key = (const struct packet_web_player_info_addition *) vkey;
103118 genhash_val_t result = 0;
103119
103120 result += key->playerno;
103121
103122 result &= 0xFFFFFFFF;
103123 return result;
103124}
103125
103126static bool cmp_packet_web_player_info_addition_100(const void *vkey1, const void *vkey2)
103127{
103130 bool differ;
103131
103132 differ = (old->playerno != real_packet->playerno);
103133
103134 return !differ;
103135}
103137#endif /* FREECIV_DELTA_PROTOCOL */
103138
103140{
103141#define FREE_PACKET_STRUCT(_packet) free_packet_web_player_info_addition(_packet)
103143
103144#ifdef FREECIV_JSON_CONNECTION
103145 struct plocation field_addr;
103146 {
103147 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103150 }
103151#endif /* FREECIV_JSON_CONNECTION */
103152
103153#ifdef FREECIV_JSON_CONNECTION
103154 field_addr.name = "playerno";
103155#endif /* FREECIV_JSON_CONNECTION */
103156
103157 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
103158 RECEIVE_PACKET_FIELD_ERROR(playerno);
103159 }
103160
103161 log_packet_detailed("packet_web_player_info_addition_100: got info about (%d)",
103162 real_packet->playerno);
103163
103164#ifdef FREECIV_DELTA_PROTOCOL
103167 struct genhash **hash = pc->phs.received + PACKET_WEB_PLAYER_INFO_ADDITION;
103168
103169 if (nullptr == *hash) {
103171 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
103172 }
103173
103174 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103175 *real_packet = *old;
103176 } else {
103177 /* packet is already initialized empty */
103178 log_packet_detailed(" no old info");
103179 }
103180
103181#ifdef FREECIV_JSON_CONNECTION
103182 field_addr.name = "fields";
103183#endif /* FREECIV_JSON_CONNECTION */
103184 DIO_BV_GET(&din, &field_addr, fields);
103185
103186 if (BV_ISSET(fields, 0)) {
103187 log_packet_detailed(" got field 'expected_income'");
103188
103189#ifdef FREECIV_JSON_CONNECTION
103190 field_addr.name = "expected_income";
103191#endif /* FREECIV_JSON_CONNECTION */
103192
103193 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
103194 RECEIVE_PACKET_FIELD_ERROR(expected_income);
103195 }
103196 }
103197
103198 if (nullptr == old) {
103199 old = fc_malloc(sizeof(*old));
103201 *old = *real_packet;
103203 } else {
103204 *old = *real_packet;
103205 }
103206
103207#else /* FREECIV_DELTA_PROTOCOL */
103208#ifdef FREECIV_JSON_CONNECTION
103209 field_addr.name = "expected_income";
103210#endif /* FREECIV_JSON_CONNECTION */
103211
103212 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
103213 RECEIVE_PACKET_FIELD_ERROR(expected_income);
103214 }
103215#endif /* FREECIV_DELTA_PROTOCOL */
103216
103218#undef FREE_PACKET_STRUCT
103219}
103220
103222{
103223 const struct packet_web_player_info_addition *real_packet = packet;
103224 int e;
103226
103227 log_packet_detailed("packet_web_player_info_addition_100: sending info about (%d)",
103228 real_packet->playerno);
103229
103230#ifdef FREECIV_DELTA_PROTOCOL
103233 bool differ;
103234 int different = 0;
103235 struct genhash **hash = pc->phs.sent + PACKET_WEB_PLAYER_INFO_ADDITION;
103236
103237 if (nullptr == *hash) {
103239 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
103240 }
103241 BV_CLR_ALL(fields);
103242
103243 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103244 old = fc_malloc(sizeof(*old));
103245 /* temporary bitcopy just to insert correctly */
103246 *old = *real_packet;
103249 different = 1; /* Force to send. */
103250 }
103251
103252 differ = (old->expected_income != real_packet->expected_income);
103253 if (differ) {
103254 different++;
103255 BV_SET(fields, 0);
103256 }
103257
103258 if (different == 0) {
103259 log_packet_detailed(" no change -> discard");
103261 }
103262#endif /* FREECIV_DELTA_PROTOCOL */
103263
103264#ifdef FREECIV_JSON_CONNECTION
103265 struct plocation field_addr;
103266 {
103267 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103270 }
103271#endif /* FREECIV_JSON_CONNECTION */
103272
103273#ifdef FREECIV_JSON_CONNECTION
103274 field_addr.name = "playerno";
103275#endif /* FREECIV_JSON_CONNECTION */
103276 e = 0;
103277
103278 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
103279
103280 if (e) {
103281 log_packet_detailed("'playerno' field error detected");
103282 }
103283
103284#ifdef FREECIV_DELTA_PROTOCOL
103285#ifdef FREECIV_JSON_CONNECTION
103286 field_addr.name = "fields";
103287#endif /* FREECIV_JSON_CONNECTION */
103288 e = 0;
103289 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103290 if (e) {
103291 log_packet_detailed("fields bitvector error detected");
103292 }
103293
103294 if (BV_ISSET(fields, 0)) {
103295 log_packet_detailed(" field 'expected_income' has changed");
103296
103297#ifdef FREECIV_JSON_CONNECTION
103298 field_addr.name = "expected_income";
103299#endif /* FREECIV_JSON_CONNECTION */
103300 e = 0;
103301
103302 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
103303
103304 if (e) {
103305 log_packet_detailed("'expected_income' field error detected");
103306 }
103307 }
103308
103309 *old = *real_packet;
103310
103311#else /* FREECIV_DELTA_PROTOCOL */
103312#ifdef FREECIV_JSON_CONNECTION
103313 field_addr.name = "expected_income";
103314#endif /* FREECIV_JSON_CONNECTION */
103315 e = 0;
103316
103317 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
103318
103319 if (e) {
103320 log_packet_detailed("'expected_income' field error detected");
103321 }
103322#endif /* FREECIV_DELTA_PROTOCOL */
103323
103325}
103326
103328{
103329 if (!pc->used) {
103330 log_error("WARNING: trying to send data to the closed connection %s",
103332 return -1;
103333 }
103334 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet != nullptr, -1,
103335 "Handler for PACKET_WEB_PLAYER_INFO_ADDITION not installed");
103336 return pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet(pc, packet);
103337}
103338
103340{
103341 memset(packet, 0, sizeof(*packet));
103342}
103343
103344#define free_packet_web_ruleset_unit_addition(_packet) (void) 0
103345#define destroy_packet_web_ruleset_unit_addition free
103346
103347#ifdef FREECIV_DELTA_PROTOCOL
103349{
103350 const struct packet_web_ruleset_unit_addition *key = (const struct packet_web_ruleset_unit_addition *) vkey;
103351 genhash_val_t result = 0;
103352
103353 result += key->id;
103354
103355 result &= 0xFFFFFFFF;
103356 return result;
103357}
103358
103359static bool cmp_packet_web_ruleset_unit_addition_100(const void *vkey1, const void *vkey2)
103360{
103363 bool differ;
103364
103365 differ = (old->id != real_packet->id);
103366
103367 return !differ;
103368}
103370#endif /* FREECIV_DELTA_PROTOCOL */
103371
103373{
103374#define FREE_PACKET_STRUCT(_packet) free_packet_web_ruleset_unit_addition(_packet)
103376
103377#ifdef FREECIV_JSON_CONNECTION
103378 struct plocation field_addr;
103379 {
103380 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103383 }
103384#endif /* FREECIV_JSON_CONNECTION */
103385
103386#ifdef FREECIV_JSON_CONNECTION
103387 field_addr.name = "id";
103388#endif /* FREECIV_JSON_CONNECTION */
103389
103390 {
103391 int readin;
103392
103393 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
103395 }
103396 real_packet->id = readin;
103397 }
103398
103399 log_packet_detailed("packet_web_ruleset_unit_addition_100: got info about (%d)",
103400 real_packet->id);
103401
103402#ifdef FREECIV_DELTA_PROTOCOL
103405 struct genhash **hash = pc->phs.received + PACKET_WEB_RULESET_UNIT_ADDITION;
103406
103407 if (nullptr == *hash) {
103409 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
103410 }
103411
103412 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103413 *real_packet = *old;
103414 } else {
103415 /* packet is already initialized empty */
103416 log_packet_detailed(" no old info");
103417 }
103418
103419#ifdef FREECIV_JSON_CONNECTION
103420 field_addr.name = "fields";
103421#endif /* FREECIV_JSON_CONNECTION */
103422 DIO_BV_GET(&din, &field_addr, fields);
103423
103424 if (BV_ISSET(fields, 0)) {
103425 log_packet_detailed(" got field 'utype_actions'");
103426
103427#ifdef FREECIV_JSON_CONNECTION
103428 field_addr.name = "utype_actions";
103429#endif /* FREECIV_JSON_CONNECTION */
103430
103431 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
103432 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
103433 }
103434 }
103435
103436 if (nullptr == old) {
103437 old = fc_malloc(sizeof(*old));
103439 *old = *real_packet;
103441 } else {
103442 *old = *real_packet;
103443 }
103444
103445#else /* FREECIV_DELTA_PROTOCOL */
103446#ifdef FREECIV_JSON_CONNECTION
103447 field_addr.name = "utype_actions";
103448#endif /* FREECIV_JSON_CONNECTION */
103449
103450 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
103451 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
103452 }
103453#endif /* FREECIV_DELTA_PROTOCOL */
103454
103456#undef FREE_PACKET_STRUCT
103457}
103458
103460{
103461 const struct packet_web_ruleset_unit_addition *real_packet = packet;
103462 int e;
103464
103465 log_packet_detailed("packet_web_ruleset_unit_addition_100: sending info about (%d)",
103466 real_packet->id);
103467
103468#ifdef FREECIV_DELTA_PROTOCOL
103471 bool differ;
103472 struct genhash **hash = pc->phs.sent + PACKET_WEB_RULESET_UNIT_ADDITION;
103473
103474 if (nullptr == *hash) {
103476 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
103477 }
103478 BV_CLR_ALL(fields);
103479
103480 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103481 old = fc_malloc(sizeof(*old));
103482 /* temporary bitcopy just to insert correctly */
103483 *old = *real_packet;
103486 }
103487
103488 differ = !BV_ARE_EQUAL(old->utype_actions, real_packet->utype_actions);
103489 if (differ) {
103490 BV_SET(fields, 0);
103491 }
103492#endif /* FREECIV_DELTA_PROTOCOL */
103493
103494#ifdef FREECIV_JSON_CONNECTION
103495 struct plocation field_addr;
103496 {
103497 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103500 }
103501#endif /* FREECIV_JSON_CONNECTION */
103502
103503#ifdef FREECIV_JSON_CONNECTION
103504 field_addr.name = "id";
103505#endif /* FREECIV_JSON_CONNECTION */
103506 e = 0;
103507
103508 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
103509
103510 if (e) {
103511 log_packet_detailed("'id' field error detected");
103512 }
103513
103514#ifdef FREECIV_DELTA_PROTOCOL
103515#ifdef FREECIV_JSON_CONNECTION
103516 field_addr.name = "fields";
103517#endif /* FREECIV_JSON_CONNECTION */
103518 e = 0;
103519 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103520 if (e) {
103521 log_packet_detailed("fields bitvector error detected");
103522 }
103523
103524 if (BV_ISSET(fields, 0)) {
103525 log_packet_detailed(" field 'utype_actions' has changed");
103526
103527#ifdef FREECIV_JSON_CONNECTION
103528 field_addr.name = "utype_actions";
103529#endif /* FREECIV_JSON_CONNECTION */
103530 e = 0;
103531
103532 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
103533
103534 if (e) {
103535 log_packet_detailed("'utype_actions' field error detected");
103536 }
103537 }
103538
103539 *old = *real_packet;
103540
103541#else /* FREECIV_DELTA_PROTOCOL */
103542#ifdef FREECIV_JSON_CONNECTION
103543 field_addr.name = "utype_actions";
103544#endif /* FREECIV_JSON_CONNECTION */
103545 e = 0;
103546
103547 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
103548
103549 if (e) {
103550 log_packet_detailed("'utype_actions' field error detected");
103551 }
103552#endif /* FREECIV_DELTA_PROTOCOL */
103553
103555}
103556
103558{
103559 if (!pc->used) {
103560 log_error("WARNING: trying to send data to the closed connection %s",
103562 return -1;
103563 }
103564 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet != nullptr, -1,
103565 "Handler for PACKET_WEB_RULESET_UNIT_ADDITION not installed");
103566 return pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet(pc, packet);
103567}
103568
103575
103577{
103578 phandlers->send[PACKET_CITY_RALLY_POINT].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_rally_point_100;
103580 phandlers->send[PACKET_WORKER_TASK].packet = (int(*)(struct connection *, const void *)) send_packet_worker_task_100;
103581 phandlers->receive[PACKET_WORKER_TASK] = (void *(*)(struct connection *)) receive_packet_worker_task_100;
103584 phandlers->send[PACKET_EDIT_STARTPOS].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_100;
103586 phandlers->send[PACKET_EDIT_STARTPOS_FULL].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_full_100;
103588 if (is_server()) {
103591 phandlers->send[PACKET_INVESTIGATE_STARTED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_started_100;
103592 phandlers->send[PACKET_INVESTIGATE_FINISHED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_finished_100;
103593 phandlers->send[PACKET_SERVER_JOIN_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_reply_100;
103594 phandlers->send[PACKET_AUTHENTICATION_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_req_100;
103596 phandlers->send[PACKET_ENDGAME_REPORT].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_report_100;
103597 phandlers->send[PACKET_ENDGAME_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_player_100;
103598 phandlers->send[PACKET_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_tile_info_100;
103599 phandlers->send[PACKET_GAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_game_info_100;
103600 phandlers->send[PACKET_CALENDAR_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_calendar_info_100;
103601 phandlers->send[PACKET_TIMEOUT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_timeout_info_100;
103602 phandlers->send[PACKET_MAP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_map_info_100;
103603 phandlers->send[PACKET_NUKE_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_nuke_tile_info_100;
103604 phandlers->send[PACKET_TEAM_NAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_team_name_info_100;
103605 phandlers->send[PACKET_ACHIEVEMENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_achievement_info_100;
103606 phandlers->send[PACKET_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_100;
103607 phandlers->send[PACKET_EARLY_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_early_chat_msg_100;
103608 phandlers->send[PACKET_CONNECT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_connect_msg_100;
103609 phandlers->send[PACKET_SERVER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_server_info_100;
103610 phandlers->send[PACKET_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_city_remove_100;
103611 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_100;
103612 phandlers->send[PACKET_CITY_NATIONALITIES].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_nationalities_100;
103613 phandlers->send[PACKET_CITY_UPDATE_COUNTERS].packet = (int(*)(struct connection *, const void *)) send_packet_city_update_counters_100;
103614 phandlers->send[PACKET_CITY_SHORT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_city_short_info_100;
103615 phandlers->send[PACKET_TRADE_ROUTE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_trade_route_info_100;
103617 phandlers->send[PACKET_CITY_SABOTAGE_LIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_sabotage_list_100;
103618 phandlers->send[PACKET_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_player_remove_100;
103619 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_100;
103620 phandlers->send[PACKET_PLAYER_DIPLSTATE].packet = (int(*)(struct connection *, const void *)) send_packet_player_diplstate_100;
103621 phandlers->send[PACKET_RESEARCH_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_research_info_100;
103622 phandlers->send[PACKET_UNKNOWN_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_unknown_research_100;
103623 phandlers->send[PACKET_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_remove_100;
103624 phandlers->send[PACKET_UNIT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_info_100;
103625 phandlers->send[PACKET_UNIT_SHORT_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_unit_short_info_100;
103626 phandlers->send[PACKET_UNIT_COMBAT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_combat_info_100;
103627 phandlers->send[PACKET_UNIT_ACTION_ANSWER].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_answer_100;
103628 phandlers->send[PACKET_UNIT_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_actions_100;
103634 phandlers->send[PACKET_PAGE_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_100;
103635 phandlers->send[PACKET_PAGE_MSG_PART].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_part_100;
103636 phandlers->send[PACKET_CONN_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_info_100;
103637 phandlers->send[PACKET_CONN_PING_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_ping_info_100;
103638 phandlers->send[PACKET_CONN_PING].no_packet = (int(*)(struct connection *)) send_packet_conn_ping_100;
103639 phandlers->send[PACKET_END_PHASE].no_packet = (int(*)(struct connection *)) send_packet_end_phase_100;
103640 phandlers->send[PACKET_START_PHASE].packet = (int(*)(struct connection *, const void *)) send_packet_start_phase_100;
103641 phandlers->send[PACKET_NEW_YEAR].packet = (int(*)(struct connection *, const void *)) send_packet_new_year_100;
103642 phandlers->send[PACKET_BEGIN_TURN].no_packet = (int(*)(struct connection *)) send_packet_begin_turn_100;
103643 phandlers->send[PACKET_END_TURN].no_packet = (int(*)(struct connection *)) send_packet_end_turn_100;
103645 phandlers->send[PACKET_THAW_CLIENT].no_packet = (int(*)(struct connection *)) send_packet_thaw_client_100;
103646 phandlers->send[PACKET_SPACESHIP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_info_100;
103647 phandlers->send[PACKET_RULESET_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_100;
103648 phandlers->send[PACKET_RULESET_UNIT_BONUS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_bonus_100;
103649 phandlers->send[PACKET_RULESET_UNIT_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_flag_100;
103651 phandlers->send[PACKET_RULESET_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_game_100;
103652 phandlers->send[PACKET_RULESET_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_specialist_100;
103654 phandlers->send[PACKET_RULESET_TECH].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_100;
103655 phandlers->send[PACKET_RULESET_TECH_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_class_100;
103656 phandlers->send[PACKET_RULESET_TECH_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_flag_100;
103657 phandlers->send[PACKET_RULESET_GOVERNMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_government_100;
103660 phandlers->send[PACKET_RULESET_NATION_SETS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_sets_100;
103662 phandlers->send[PACKET_RULESET_NATION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_100;
103663 phandlers->send[PACKET_NATION_AVAILABILITY].packet = (int(*)(struct connection *, const void *)) send_packet_nation_availability_100;
103664 phandlers->send[PACKET_RULESET_STYLE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_style_100;
103665 phandlers->send[PACKET_RULESET_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_city_100;
103666 phandlers->send[PACKET_RULESET_BUILDING].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_building_100;
103667 phandlers->send[PACKET_RULESET_IMPR_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_impr_flag_100;
103668 phandlers->send[PACKET_RULESET_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_100;
103669 phandlers->send[PACKET_RULESET_TERRAIN_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_flag_100;
103670 phandlers->send[PACKET_RULESET_UNIT_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_class_100;
103671 phandlers->send[PACKET_RULESET_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_100;
103672 phandlers->send[PACKET_RULESET_EXTRA_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_flag_100;
103673 phandlers->send[PACKET_RULESET_BASE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_base_100;
103674 phandlers->send[PACKET_RULESET_ROAD].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_road_100;
103675 phandlers->send[PACKET_RULESET_GOODS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_goods_100;
103676 phandlers->send[PACKET_RULESET_DISASTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_disaster_100;
103677 phandlers->send[PACKET_RULESET_ACHIEVEMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_achievement_100;
103678 phandlers->send[PACKET_RULESET_TRADE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_trade_100;
103679 phandlers->send[PACKET_RULESET_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_100;
103681 phandlers->send[PACKET_RULESET_ACTION_AUTO].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_auto_100;
103682 phandlers->send[PACKET_RULESET_COUNTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_counter_100;
103683 phandlers->send[PACKET_RULESET_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_music_100;
103684 phandlers->send[PACKET_RULESET_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_multiplier_100;
103685 phandlers->send[PACKET_RULESET_CLAUSE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_clause_100;
103686 phandlers->send[PACKET_RULESET_CONTROL].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_control_100;
103687 phandlers->send[PACKET_RULESET_SUMMARY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_summary_100;
103690 phandlers->send[PACKET_RULESET_CHOICES].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_choices_100;
103691 phandlers->send[PACKET_GAME_LOAD].packet = (int(*)(struct connection *, const void *)) send_packet_game_load_100;
103693 phandlers->send[PACKET_SERVER_SETTING_CONST].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_const_100;
103694 phandlers->send[PACKET_SERVER_SETTING_BOOL].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_bool_100;
103695 phandlers->send[PACKET_SERVER_SETTING_INT].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_int_100;
103696 phandlers->send[PACKET_SERVER_SETTING_STR].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_str_100;
103697 phandlers->send[PACKET_SERVER_SETTING_ENUM].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_enum_100;
103699 phandlers->send[PACKET_SET_TOPOLOGY].packet = (int(*)(struct connection *, const void *)) send_packet_set_topology_100;
103700 phandlers->send[PACKET_RULESET_EFFECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_effect_100;
103701 phandlers->send[PACKET_RULESET_RESOURCE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_resource_100;
103702 phandlers->send[PACKET_SCENARIO_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_info_100;
103703 phandlers->send[PACKET_SCENARIO_DESCRIPTION].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_description_100;
103704 phandlers->send[PACKET_VOTE_NEW].packet = (int(*)(struct connection *, const void *)) send_packet_vote_new_100;
103705 phandlers->send[PACKET_VOTE_UPDATE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_update_100;
103706 phandlers->send[PACKET_VOTE_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_remove_100;
103707 phandlers->send[PACKET_VOTE_RESOLVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_resolve_100;
103708 phandlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_fogofwar_state_100;
103709 phandlers->send[PACKET_EDIT_OBJECT_CREATED].packet = (int(*)(struct connection *, const void *)) send_packet_edit_object_created_100;
103710 phandlers->send[PACKET_PLAY_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_play_music_100;
103711 phandlers->send[PACKET_POPUP_IMAGE].packet = (int(*)(struct connection *, const void *)) send_packet_popup_image_100;
103712 phandlers->send[PACKET_SYNC_SERIAL_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_reply_100;
103713 phandlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_web_city_info_addition_100;
103721 phandlers->receive[PACKET_CITY_SELL] = (void *(*)(struct connection *)) receive_packet_city_sell_100;
103722 phandlers->receive[PACKET_CITY_BUY] = (void *(*)(struct connection *)) receive_packet_city_buy_100;
103723 phandlers->receive[PACKET_CITY_CHANGE] = (void *(*)(struct connection *)) receive_packet_city_change_100;
103728 phandlers->receive[PACKET_CITY_RENAME] = (void *(*)(struct connection *)) receive_packet_city_rename_100;
103741 phandlers->receive[PACKET_UNIT_ORDERS] = (void *(*)(struct connection *)) receive_packet_unit_orders_100;
103754 phandlers->receive[PACKET_REPORT_REQ] = (void *(*)(struct connection *)) receive_packet_report_req_100;
103755 phandlers->receive[PACKET_CONN_PONG] = (void *(*)(struct connection *)) receive_packet_conn_pong_100;
103757 phandlers->receive[PACKET_CLIENT_INFO] = (void *(*)(struct connection *)) receive_packet_client_info_100;
103763 phandlers->receive[PACKET_VOTE_SUBMIT] = (void *(*)(struct connection *)) receive_packet_vote_submit_100;
103764 phandlers->receive[PACKET_EDIT_MODE] = (void *(*)(struct connection *)) receive_packet_edit_mode_100;
103770 phandlers->receive[PACKET_EDIT_TILE] = (void *(*)(struct connection *)) receive_packet_edit_tile_100;
103774 phandlers->receive[PACKET_EDIT_UNIT] = (void *(*)(struct connection *)) receive_packet_edit_unit_100;
103777 phandlers->receive[PACKET_EDIT_CITY] = (void *(*)(struct connection *)) receive_packet_edit_city_100;
103780 phandlers->receive[PACKET_EDIT_PLAYER] = (void *(*)(struct connection *)) receive_packet_edit_player_100;
103782 phandlers->receive[PACKET_EDIT_GAME] = (void *(*)(struct connection *)) receive_packet_edit_game_100;
103784 phandlers->receive[PACKET_SYNC_SERIAL] = (void *(*)(struct connection *)) receive_packet_sync_serial_100;
103785 phandlers->receive[PACKET_WEB_CMA_SET] = (void *(*)(struct connection *)) receive_packet_web_cma_set_100;
103787 } else /* not is_server() */ {
103788 phandlers->send[PACKET_SERVER_JOIN_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_req_100;
103789 phandlers->send[PACKET_AUTHENTICATION_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_reply_100;
103790 phandlers->send[PACKET_NATION_SELECT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_nation_select_req_100;
103791 phandlers->send[PACKET_PLAYER_READY].packet = (int(*)(struct connection *, const void *)) send_packet_player_ready_100;
103792 phandlers->send[PACKET_CHAT_MSG_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_req_100;
103793 phandlers->send[PACKET_CITY_SELL].packet = (int(*)(struct connection *, const void *)) send_packet_city_sell_100;
103794 phandlers->send[PACKET_CITY_BUY].packet = (int(*)(struct connection *, const void *)) send_packet_city_buy_100;
103795 phandlers->send[PACKET_CITY_CHANGE].packet = (int(*)(struct connection *, const void *)) send_packet_city_change_100;
103796 phandlers->send[PACKET_CITY_WORKLIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_worklist_100;
103797 phandlers->send[PACKET_CITY_MAKE_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_specialist_100;
103798 phandlers->send[PACKET_CITY_MAKE_WORKER].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_worker_100;
103800 phandlers->send[PACKET_CITY_RENAME].packet = (int(*)(struct connection *, const void *)) send_packet_city_rename_100;
103801 phandlers->send[PACKET_CITY_OPTIONS_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_city_options_req_100;
103802 phandlers->send[PACKET_CITY_REFRESH].packet = (int(*)(struct connection *, const void *)) send_packet_city_refresh_100;
103804 phandlers->send[PACKET_PLAYER_PHASE_DONE].packet = (int(*)(struct connection *, const void *)) send_packet_player_phase_done_100;
103805 phandlers->send[PACKET_PLAYER_RATES].packet = (int(*)(struct connection *, const void *)) send_packet_player_rates_100;
103807 phandlers->send[PACKET_PLAYER_PLACE_INFRA].packet = (int(*)(struct connection *, const void *)) send_packet_player_place_infra_100;
103809 phandlers->send[PACKET_PLAYER_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_player_multiplier_100;
103810 phandlers->send[PACKET_PLAYER_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_player_research_100;
103811 phandlers->send[PACKET_PLAYER_TECH_GOAL].packet = (int(*)(struct connection *, const void *)) send_packet_player_tech_goal_100;
103812 phandlers->send[PACKET_UNIT_SSCS_SET].packet = (int(*)(struct connection *, const void *)) send_packet_unit_sscs_set_100;
103813 phandlers->send[PACKET_UNIT_ORDERS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_orders_100;
103815 phandlers->send[PACKET_UNIT_ACTION_QUERY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_query_100;
103816 phandlers->send[PACKET_UNIT_TYPE_UPGRADE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_type_upgrade_100;
103817 phandlers->send[PACKET_UNIT_DO_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_unit_do_action_100;
103818 phandlers->send[PACKET_UNIT_GET_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_get_actions_100;
103819 phandlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_change_activity_100;
103826 phandlers->send[PACKET_REPORT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_report_req_100;
103827 phandlers->send[PACKET_CONN_PONG].no_packet = (int(*)(struct connection *)) send_packet_conn_pong_100;
103829 phandlers->send[PACKET_CLIENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_client_info_100;
103831 phandlers->send[PACKET_SPACESHIP_PLACE].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_place_100;
103832 phandlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_single_want_hack_req_100;
103833 phandlers->send[PACKET_RULESET_SELECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_select_100;
103834 phandlers->send[PACKET_SAVE_SCENARIO].packet = (int(*)(struct connection *, const void *)) send_packet_save_scenario_100;
103835 phandlers->send[PACKET_VOTE_SUBMIT].packet = (int(*)(struct connection *, const void *)) send_packet_vote_submit_100;
103836 phandlers->send[PACKET_EDIT_MODE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_mode_100;
103839 phandlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet = (int(*)(struct connection *, const void *)) send_packet_edit_toggle_fogofwar_100;
103840 phandlers->send[PACKET_EDIT_TILE_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_terrain_100;
103841 phandlers->send[PACKET_EDIT_TILE_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_extra_100;
103842 phandlers->send[PACKET_EDIT_TILE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_100;
103843 phandlers->send[PACKET_EDIT_UNIT_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_create_100;
103844 phandlers->send[PACKET_EDIT_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_remove_100;
103846 phandlers->send[PACKET_EDIT_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_100;
103847 phandlers->send[PACKET_EDIT_CITY_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_create_100;
103848 phandlers->send[PACKET_EDIT_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_remove_100;
103849 phandlers->send[PACKET_EDIT_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_100;
103850 phandlers->send[PACKET_EDIT_PLAYER_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_create_100;
103851 phandlers->send[PACKET_EDIT_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_remove_100;
103852 phandlers->send[PACKET_EDIT_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_100;
103853 phandlers->send[PACKET_EDIT_PLAYER_VISION].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_vision_100;
103854 phandlers->send[PACKET_EDIT_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_edit_game_100;
103855 phandlers->send[PACKET_EDIT_SCENARIO_DESC].packet = (int(*)(struct connection *, const void *)) send_packet_edit_scenario_desc_100;
103856 phandlers->send[PACKET_SYNC_SERIAL].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_100;
103857 phandlers->send[PACKET_WEB_CMA_SET].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_set_100;
103858 phandlers->send[PACKET_WEB_CMA_CLEAR].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_clear_100;
103868 phandlers->receive[PACKET_TILE_INFO] = (void *(*)(struct connection *)) receive_packet_tile_info_100;
103869 phandlers->receive[PACKET_GAME_INFO] = (void *(*)(struct connection *)) receive_packet_game_info_100;
103872 phandlers->receive[PACKET_MAP_INFO] = (void *(*)(struct connection *)) receive_packet_map_info_100;
103876 phandlers->receive[PACKET_CHAT_MSG] = (void *(*)(struct connection *)) receive_packet_chat_msg_100;
103878 phandlers->receive[PACKET_CONNECT_MSG] = (void *(*)(struct connection *)) receive_packet_connect_msg_100;
103879 phandlers->receive[PACKET_SERVER_INFO] = (void *(*)(struct connection *)) receive_packet_server_info_100;
103880 phandlers->receive[PACKET_CITY_REMOVE] = (void *(*)(struct connection *)) receive_packet_city_remove_100;
103881 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_100;
103889 phandlers->receive[PACKET_PLAYER_INFO] = (void *(*)(struct connection *)) receive_packet_player_info_100;
103893 phandlers->receive[PACKET_UNIT_REMOVE] = (void *(*)(struct connection *)) receive_packet_unit_remove_100;
103894 phandlers->receive[PACKET_UNIT_INFO] = (void *(*)(struct connection *)) receive_packet_unit_info_100;
103904 phandlers->receive[PACKET_PAGE_MSG] = (void *(*)(struct connection *)) receive_packet_page_msg_100;
103906 phandlers->receive[PACKET_CONN_INFO] = (void *(*)(struct connection *)) receive_packet_conn_info_100;
103908 phandlers->receive[PACKET_CONN_PING] = (void *(*)(struct connection *)) receive_packet_conn_ping_100;
103909 phandlers->receive[PACKET_END_PHASE] = (void *(*)(struct connection *)) receive_packet_end_phase_100;
103910 phandlers->receive[PACKET_START_PHASE] = (void *(*)(struct connection *)) receive_packet_start_phase_100;
103911 phandlers->receive[PACKET_NEW_YEAR] = (void *(*)(struct connection *)) receive_packet_new_year_100;
103912 phandlers->receive[PACKET_BEGIN_TURN] = (void *(*)(struct connection *)) receive_packet_begin_turn_100;
103913 phandlers->receive[PACKET_END_TURN] = (void *(*)(struct connection *)) receive_packet_end_turn_100;
103915 phandlers->receive[PACKET_THAW_CLIENT] = (void *(*)(struct connection *)) receive_packet_thaw_client_100;
103961 phandlers->receive[PACKET_GAME_LOAD] = (void *(*)(struct connection *)) receive_packet_game_load_100;
103974 phandlers->receive[PACKET_VOTE_NEW] = (void *(*)(struct connection *)) receive_packet_vote_new_100;
103975 phandlers->receive[PACKET_VOTE_UPDATE] = (void *(*)(struct connection *)) receive_packet_vote_update_100;
103976 phandlers->receive[PACKET_VOTE_REMOVE] = (void *(*)(struct connection *)) receive_packet_vote_remove_100;
103980 phandlers->receive[PACKET_PLAY_MUSIC] = (void *(*)(struct connection *)) receive_packet_play_music_100;
103981 phandlers->receive[PACKET_POPUP_IMAGE] = (void *(*)(struct connection *)) receive_packet_popup_image_100;
103986 }
103987}
103988
103990 const char *capability)
103991{
103992}
103993
103994void packet_destroy(void *packet, enum packet_type type)
103995{
103996 static void (*const destroy_handlers[PACKET_LAST])(void *packet) = {
104200 };
104201 void (*handler)(void *packet) = (type < PACKET_LAST ? destroy_handlers[type] : nullptr);
104202
104203 if (handler == nullptr) {
104204 handler = free;
104205 log_error("packet_destroy(): Invalid packet type %d", type);
104206 }
104207
104208 handler(packet);
104209}
bool are_action_probabilitys_equal(const struct act_prob *ap1, const struct act_prob *ap2)
Definition actions.c:5119
#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:282
bool cm_are_parameter_equal(const struct cm_parameter *const p1, const struct cm_parameter *const p2)
Definition cm.c:2141
char * calendar_fragments
Definition comments.c: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:474
#define conn_list_iterate(connlist, pconn)
Definition connection.h:108
#define conn_list_iterate_end
Definition connection.h:110
static struct counter counters[MAX_COUNTERS]
Definition counters.c:31
#define DIO_BV_PUT(pdout, location, bv)
#define DIO_BV_GET(pdin, location, bv)
#define DIO_GET(f, d, l,...)
#define DIO_PUT(f, d, l,...)
struct plocation * plocation_field_new(char *name)
struct plocation * plocation_elem_new(int number)
static void airlift(QVariant data1, QVariant data2)
Definition dialogs.cpp:1837
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:89
#define MAX_VET_LEVELS
Definition fc_types.h:49
#define MAX_GRANARY_INIS
Definition fc_types.h:72
#define MAX_NUM_NATIONS
Definition fc_types.h:60
#define MAX_NUM_RULESETS
Definition fc_types.h:269
#define MAX_NUM_NATION_SETS
Definition fc_types.h:57
#define MAX_NUM_BUILDING_LIST
Definition fc_types.h:46
int Nation_type_id
Definition fc_types.h:239
int Terrain_type_id
Definition fc_types.h:232
int action_id
Definition fc_types.h:248
#define SP_MAX
Definition fc_types.h:267
int Specialist_type_id
Definition fc_types.h:234
int Government_type_id
Definition fc_types.h:240
#define MAX_CALENDAR_FRAGMENTS
Definition fc_types.h:62
#define MAX_NUM_NATION_GROUPS
Definition fc_types.h:58
#define MAX_NUM_PLAYER_SLOTS
Definition fc_types.h:32
#define MAX_NUM_LEADERS
Definition fc_types.h:56
#define MAX_NUM_MULTIPLIERS
Definition fc_types.h:55
#define MAX_NUM_UNIT_LIST
Definition fc_types.h:45
#define MAX_EXTRA_TYPES
Definition fc_types.h:50
spaceship_place_type
Definition fc_types.h:1005
int Unit_type_id
Definition fc_types.h:241
#define MAX_NUM_TECH_LIST
Definition fc_types.h:44
@ O_LAST
Definition fc_types.h:101
#define MAX_CITY_TILES
Definition fc_types.h:87
#define MAX_COUNTERS
Definition fc_types.h:106
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:71
static int actor_unit_id
static int target_extra_id
struct city * owner
Definition citydlg.c:226
static void load_filename(const char *filename)
Definition pages.c:2856
static GtkWidget * scenario_authors
Definition pages.c:64
static GtkWidget * persistent
GType type
Definition repodlgs.c:1313
static GHashTable * hash
Definition wldlg.c:322
static char * leader_name
Definition dialogs.c:97
#define B_LAST
Definition improvement.h:42
const char * name
Definition inputfile.c:127
#define 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
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:52
static mpqt_worker * worker
Definition mpgui_qt.cpp:54
static struct multiplier multipliers[MAX_NUM_MULTIPLIERS]
Definition multipliers.c:23
Nation_type_id nation_count(void)
Definition nation.c:507
static int num_nation_sets
Definition nation.c:48
static int num_nation_groups
Definition nation.c:50
static struct nation_type * nations
Definition nation.c:46
void post_receive_packet_server_join_reply(struct connection *pconn, const struct packet_server_join_reply *packet)
Definition packets.c:652
void pre_send_packet_player_attribute_chunk(struct connection *pc, struct packet_player_attribute_chunk *packet)
Definition packets.c:793
void post_send_packet_server_join_reply(struct connection *pconn, const struct packet_server_join_reply *packet)
Definition packets.c:640
#define SEND_PACKET_START(packet_type)
Definition packets.h: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
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)
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 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)
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
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_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)
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)
#define destroy_packet_diplomacy_init_meeting
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 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 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_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)
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_GOODS
@ PACKET_ENDGAME_PLAYER
@ PACKET_UNIT_ACTION_ANSWER
@ PACKET_EDIT_PLAYER
@ PACKET_DIPLOMACY_CANCEL_MEETING_REQ
@ PACKET_SERVER_SETTING_ENUM
@ PACKET_SET_TOPOLOGY
@ PACKET_WEB_CITY_INFO_ADDITION
@ PACKET_CONN_PING
@ PACKET_CITY_MAKE_WORKER
@ PACKET_CITY_OPTIONS_REQ
@ PACKET_RULESET_COUNTER
@ PACKET_VOTE_UPDATE
@ PACKET_CITY_NAME_SUGGESTION_INFO
@ PACKET_CITY_CHANGE
@ PACKET_UNIT_SSCS_SET
@ PACKET_PROCESSING_STARTED
@ PACKET_UNIT_DO_ACTION
@ PACKET_UNIT_REMOVE
@ PACKET_END_PHASE
@ PACKET_SERVER_SETTING_INT
@ PACKET_RULESET_EXTRA
@ PACKET_EDIT_PLAYER_CREATE
@ PACKET_EDIT_GAME
@ PACKET_CONN_PING_INFO
@ PACKET_END_TURN
@ PACKET_EDIT_TILE_EXTRA
@ PACKET_SPACESHIP_PLACE
@ PACKET_NEW_YEAR
@ PACKET_NATION_SELECT_REQ
@ PACKET_ENDGAME_REPORT
@ PACKET_RULESET_ACTION_AUTO
@ PACKET_UNIT_COMBAT_INFO
@ PACKET_RULESETS_READY
@ PACKET_UNIT_SHORT_INFO
@ PACKET_SERVER_JOIN_REQ
@ PACKET_REPORT_REQ
@ PACKET_RULESET_UNIT_CLASS_FLAG
@ PACKET_RULESET_TECH_CLASS
@ PACKET_EDIT_CITY_CREATE
@ PACKET_SINGLE_WANT_HACK_REPLY
@ PACKET_GAME_INFO
@ PACKET_DIPLOMACY_INIT_MEETING_REQ
@ PACKET_PROCESSING_FINISHED
@ PACKET_RULESET_ACTION
@ PACKET_PLAYER_ATTRIBUTE_BLOCK
@ PACKET_CITY_SELL
@ PACKET_CITY_NAME_SUGGESTION_REQ
@ PACKET_UNKNOWN_RESEARCH
@ PACKET_CHAT_MSG_REQ
@ PACKET_NUKE_TILE_INFO
@ PACKET_PLAYER_DIPLSTATE
@ PACKET_RULESET_IMPR_FLAG
@ PACKET_RULESET_TECH
@ PACKET_CLIENT_HEARTBEAT
@ PACKET_RULESET_ROAD
@ PACKET_RULESET_NATION_SETS
@ PACKET_CITY_SABOTAGE_LIST
@ PACKET_MAP_INFO
@ PACKET_RULESET_CLAUSE
@ PACKET_DIPLOMACY_CREATE_CLAUSE_REQ
@ PACKET_CITY_BUY
@ PACKET_CHAT_MSG
@ PACKET_EDIT_CITY_REMOVE
@ PACKET_EDIT_STARTPOS
@ PACKET_SERVER_SETTING_CONST
@ PACKET_PLAYER_RESEARCH
@ PACKET_BEGIN_TURN
@ PACKET_RULESET_TERRAIN_CONTROL
@ PACKET_PLAYER_PHASE_DONE
@ PACKET_RULESET_SELECT
@ PACKET_GAME_LOAD
@ PACKET_CITY_UPDATE_COUNTERS
@ PACKET_PLAYER_REMOVE
@ PACKET_CLIENT_INFO
@ PACKET_CITY_WORKLIST
@ PACKET_SYNC_SERIAL
@ PACKET_DIPLOMACY_CANCEL_MEETING
@ PACKET_UNIT_TYPE_UPGRADE
@ PACKET_START_PHASE
@ PACKET_AUTHENTICATION_REPLY
@ PACKET_SPACESHIP_INFO
@ PACKET_UNIT_GET_ACTIONS
@ PACKET_PLAYER_ATTRIBUTE_CHUNK
@ PACKET_RULESET_TERRAIN_FLAG
@ PACKET_CITY_MAKE_SPECIALIST
@ PACKET_RULESET_ACHIEVEMENT
@ PACKET_RULESET_EFFECT
@ PACKET_RULESET_DISASTER
@ PACKET_RULESET_CONTROL
@ PACKET_SINGLE_WANT_HACK_REQ
@ PACKET_PLAYER_PLACE_INFRA
@ PACKET_VOTE_NEW
@ PACKET_AUTHENTICATION_REQ
@ PACKET_RULESET_TRADE
@ PACKET_EDIT_PLAYER_REMOVE
@ PACKET_CONN_INFO
@ PACKET_SERVER_SETTING_BITWISE
@ PACKET_EDIT_TILE_TERRAIN
@ PACKET_DIPLOMACY_INIT_MEETING
@ PACKET_RULESET_SUMMARY
@ PACKET_UNIT_ACTION_QUERY
@ PACKET_PLAY_MUSIC
@ PACKET_TRADE_ROUTE_INFO
@ PACKET_RULESET_STYLE
@ PACKET_RULESET_CITY
@ PACKET_CITY_NATIONALITIES
@ PACKET_EDIT_SCENARIO_DESC
@ PACKET_FREEZE_CLIENT
@ PACKET_VOTE_RESOLVE
@ PACKET_EDIT_UNIT_CREATE
@ PACKET_POPUP_IMAGE
@ PACKET_TIMEOUT_INFO
@ PACKET_RULESET_GAME
@ PACKET_UNIT_CHANGE_ACTIVITY
@ PACKET_EDIT_UNIT_REMOVE
@ PACKET_RULESET_UNIT_FLAG
@ PACKET_EDIT_FOGOFWAR_STATE
@ PACKET_DIPLOMACY_REMOVE_CLAUSE
@ PACKET_TILE_INFO
@ PACKET_EDIT_OBJECT_CREATED
@ PACKET_CITY_SHORT_INFO
@ PACKET_SYNC_SERIAL_REPLY
@ PACKET_CALENDAR_INFO
@ PACKET_SERVER_JOIN_REPLY
@ PACKET_SERVER_SETTING_STR
@ PACKET_VOTE_SUBMIT
@ PACKET_WEB_CMA_CLEAR
@ PACKET_EDIT_PLAYER_VISION
@ PACKET_SCENARIO_INFO
@ PACKET_EDIT_CHECK_TILES
@ PACKET_RULESET_CHOICES
@ PACKET_CITY_CHANGE_SPECIALIST
@ PACKET_RULESET_SPECIALIST
@ PACKET_CITY_REFRESH
@ PACKET_CITY_REMOVE
@ PACKET_UNIT_INFO
@ PACKET_RULESET_NATION_GROUPS
@ PACKET_CONNECT_MSG
@ PACKET_EARLY_CHAT_MSG
@ PACKET_RULESET_UNIT_CLASS
@ PACKET_PLAYER_INFO
@ PACKET_EDIT_TILE
@ PACKET_PLAYER_READY
@ PACKET_WEB_RULESET_UNIT_ADDITION
@ PACKET_SERVER_SHUTDOWN
@ PACKET_RULESET_TERRAIN
@ PACKET_RULESET_EXTRA_FLAG
@ PACKET_RULESET_DESCRIPTION_PART
@ PACKET_EDIT_UNIT
@ PACKET_RULESET_BASE
@ PACKET_SERVER_SETTING_BOOL
@ PACKET_RESEARCH_INFO
@ PACKET_CONN_PONG
@ PACKET_EDIT_RECALCULATE_BORDERS
@ PACKET_PAGE_MSG_PART
@ PACKET_EDIT_CITY
@ PACKET_RULESET_UNIT
@ PACKET_PLAYER_TECH_GOAL
@ PACKET_UNIT_ACTIONS
@ PACKET_INVESTIGATE_FINISHED
@ PACKET_RULESET_ACTION_ENABLER
@ PACKET_INVESTIGATE_STARTED
@ PACKET_CITY_RALLY_POINT
@ PACKET_RULESET_UNIT_BONUS
@ PACKET_RULESET_BUILDING
@ PACKET_RULESET_NATION
@ PACKET_UNIT_SERVER_SIDE_AGENT_SET
@ PACKET_SERVER_INFO
@ PACKET_RULESET_GOVERNMENT_RULER_TITLE
@ PACKET_SPACESHIP_LAUNCH
@ PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ
@ PACKET_DIPLOMACY_ACCEPT_TREATY_REQ
@ PACKET_DIPLOMACY_CREATE_CLAUSE
@ PACKET_RULESET_GOVERNMENT
@ PACKET_SCENARIO_DESCRIPTION
@ PACKET_SERVER_SETTING_CONTROL
@ PACKET_ACHIEVEMENT_INFO
@ PACKET_PAGE_MSG
@ PACKET_RULESET_TECH_FLAG
@ PACKET_RULESET_RESOURCE
@ PACKET_UNIT_ORDERS
@ PACKET_EDIT_UNIT_REMOVE_BY_ID
@ PACKET_EDIT_STARTPOS_FULL
@ PACKET_DIPLOMACY_CANCEL_PACT
@ PACKET_TEAM_NAME_INFO
@ PACKET_CITY_INFO
@ PACKET_PLAYER_RATES
@ PACKET_NATION_AVAILABILITY
@ PACKET_CITY_RENAME
@ PACKET_VOTE_REMOVE
@ PACKET_WORKER_TASK
int parts
Definition packhand.c:132
char * lines
Definition packhand.c:131
int len
Definition packhand.c:127
bool gives_shared_tiles(const struct player *me, const struct player *them)
Definition player.c:1497
bool gives_shared_vision(const struct player *me, const struct player *them)
Definition player.c:1489
bool are_requirements_equal(const struct requirement *req1, const struct requirement *req2)
static struct compatibility compat[]
Definition savecompat.c:115
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:2507
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:317
struct tile * tile
Definition city.h:319
char capability[MAX_LEN_CAPSTR]
Definition connection.h:171
enum authentication_type type
Definition packets_gen.h:62
bv_city_options options
enum city_wl_cancel_behavior wl_cb
Terrain_type_id terrain
Nation_type_id nation_no
Definition packets_gen.h:76
Government_type_id government
enum report_type type
struct requirement_vector reqs
struct requirement_vector actor_reqs
struct requirement_vector target_reqs
struct strvec * helptext
struct requirement_vector reqs
struct requirement_vector obs_reqs
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 requirement_vector appearance_reqs
struct requirement_vector disappearance_reqs
struct requirement_vector rmreqs
struct strvec * helptext
struct requirement_vector reqs
struct strvec * helptext
struct requirement_vector reqs
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 strvec * helptext
struct requirement_vector build_reqs
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:118
static struct goods_type goods[MAX_GOODS_TYPES]
Definition traderoutes.c:43
bool are_unit_orders_equal(const struct unit_order *order1, const struct unit_order *order2)
Definition unit.c:59
void worklist_copy(struct worklist *dst, const struct worklist *src)
Definition worklist.c:112
bool are_worklists_equal(const struct worklist *wlist1, const struct worklist *wlist2)
Definition worklist.c:192