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 if (BV_ISSET(fields, 42)) {
15612 log_packet_detailed(" got field 'anarchy'");
15613
15614#ifdef FREECIV_JSON_CONNECTION
15615 field_addr.name = "anarchy";
15616#endif /* FREECIV_JSON_CONNECTION */
15617
15618 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
15620 }
15621 }
15622
15623 if (BV_ISSET(fields, 43)) {
15624 log_packet_detailed(" got field 'rapture'");
15625
15626#ifdef FREECIV_JSON_CONNECTION
15627 field_addr.name = "rapture";
15628#endif /* FREECIV_JSON_CONNECTION */
15629
15630 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
15632 }
15633 }
15634
15635 real_packet->diplomat_investigate = BV_ISSET(fields, 44);
15636
15637 if (BV_ISSET(fields, 45)) {
15638 log_packet_detailed(" got field 'walls'");
15639
15640#ifdef FREECIV_JSON_CONNECTION
15641 field_addr.name = "walls";
15642#endif /* FREECIV_JSON_CONNECTION */
15643
15644 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
15646 }
15647 }
15648
15649 if (BV_ISSET(fields, 46)) {
15650 log_packet_detailed(" got field 'city_image'");
15651
15652#ifdef FREECIV_JSON_CONNECTION
15653 field_addr.name = "city_image";
15654#endif /* FREECIV_JSON_CONNECTION */
15655
15656 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
15657 RECEIVE_PACKET_FIELD_ERROR(city_image);
15658 }
15659 }
15660
15661 if (BV_ISSET(fields, 47)) {
15662 log_packet_detailed(" got field 'steal'");
15663
15664#ifdef FREECIV_JSON_CONNECTION
15665 field_addr.name = "steal";
15666#endif /* FREECIV_JSON_CONNECTION */
15667
15668 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
15670 }
15671 }
15672
15673 if (BV_ISSET(fields, 48)) {
15674 log_packet_detailed(" got field 'worklist'");
15675
15676#ifdef FREECIV_JSON_CONNECTION
15677 field_addr.name = "worklist";
15678#endif /* FREECIV_JSON_CONNECTION */
15679
15680 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
15682 }
15683 }
15684
15685 if (BV_ISSET(fields, 49)) {
15686 log_packet_detailed(" got field 'improvements'");
15687
15688#ifdef FREECIV_JSON_CONNECTION
15689 field_addr.name = "improvements";
15690#endif /* FREECIV_JSON_CONNECTION */
15691
15692 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
15693 RECEIVE_PACKET_FIELD_ERROR(improvements);
15694 }
15695 }
15696
15697 if (BV_ISSET(fields, 50)) {
15698 log_packet_detailed(" got field 'city_options'");
15699
15700#ifdef FREECIV_JSON_CONNECTION
15701 field_addr.name = "city_options";
15702#endif /* FREECIV_JSON_CONNECTION */
15703
15704 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
15705 RECEIVE_PACKET_FIELD_ERROR(city_options);
15706 }
15707 }
15708
15709 if (BV_ISSET(fields, 51)) {
15710 log_packet_detailed(" got field 'wl_cb'");
15711
15712#ifdef FREECIV_JSON_CONNECTION
15713 field_addr.name = "wl_cb";
15714#endif /* FREECIV_JSON_CONNECTION */
15715
15716 {
15717 int readin;
15718
15719 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15721 }
15722 real_packet->wl_cb = readin;
15723 }
15724 }
15725
15726 if (BV_ISSET(fields, 52)) {
15727 log_packet_detailed(" got field 'acquire_type'");
15728
15729#ifdef FREECIV_JSON_CONNECTION
15730 field_addr.name = "acquire_type";
15731#endif /* FREECIV_JSON_CONNECTION */
15732
15733 {
15734 int readin;
15735
15736 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15737 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
15738 }
15739 real_packet->acquire_type = readin;
15740 }
15741 }
15742
15743 if (BV_ISSET(fields, 53)) {
15744 log_packet_detailed(" got field 'name'");
15745
15746#ifdef FREECIV_JSON_CONNECTION
15747 field_addr.name = "name";
15748#endif /* FREECIV_JSON_CONNECTION */
15749
15750 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
15752 }
15753 }
15754
15755 if (nullptr == old) {
15756 old = fc_malloc(sizeof(*old));
15758 *old = *real_packet;
15760 } else {
15761 *old = *real_packet;
15762 }
15763
15764 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
15765 if (nullptr != *hash) {
15767 }
15768
15769#else /* FREECIV_DELTA_PROTOCOL */
15770#ifdef FREECIV_JSON_CONNECTION
15771 field_addr.name = "tile";
15772#endif /* FREECIV_JSON_CONNECTION */
15773
15774 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
15776 }
15777
15778#ifdef FREECIV_JSON_CONNECTION
15779 field_addr.name = "owner";
15780#endif /* FREECIV_JSON_CONNECTION */
15781
15782 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
15784 }
15785
15786#ifdef FREECIV_JSON_CONNECTION
15787 field_addr.name = "original";
15788#endif /* FREECIV_JSON_CONNECTION */
15789
15790 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
15792 }
15793
15794#ifdef FREECIV_JSON_CONNECTION
15795 field_addr.name = "size";
15796#endif /* FREECIV_JSON_CONNECTION */
15797
15798 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
15800 }
15801
15802#ifdef FREECIV_JSON_CONNECTION
15803 field_addr.name = "city_radius_sq";
15804#endif /* FREECIV_JSON_CONNECTION */
15805
15806 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
15807 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
15808 }
15809
15810#ifdef FREECIV_JSON_CONNECTION
15811 field_addr.name = "style";
15812#endif /* FREECIV_JSON_CONNECTION */
15813
15814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
15816 }
15817
15818#ifdef FREECIV_JSON_CONNECTION
15819 field_addr.name = "capital";
15820#endif /* FREECIV_JSON_CONNECTION */
15821
15822 {
15823 int readin;
15824
15825 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
15827 }
15828 real_packet->capital = readin;
15829 }
15830
15831#ifdef FREECIV_JSON_CONNECTION
15832 field_addr.name = "ppl_happy";
15833#endif /* FREECIV_JSON_CONNECTION */
15834
15835 {
15836 int i;
15837
15838
15839#ifdef FREECIV_JSON_CONNECTION
15840 /* Enter array. */
15841 field_addr.sub_location = plocation_elem_new(0);
15842#endif /* FREECIV_JSON_CONNECTION */
15843
15844 for (i = 0; i < FEELING_LAST; i++) {
15845#ifdef FREECIV_JSON_CONNECTION
15846 /* Next array element */
15847 field_addr.sub_location->number = i;
15848#endif /* FREECIV_JSON_CONNECTION */
15849
15850 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
15851 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
15852 }
15853 }
15854
15855#ifdef FREECIV_JSON_CONNECTION
15856 /* Exit array. */
15857 FC_FREE(field_addr.sub_location);
15858#endif /* FREECIV_JSON_CONNECTION */
15859 }
15860
15861#ifdef FREECIV_JSON_CONNECTION
15862 field_addr.name = "ppl_content";
15863#endif /* FREECIV_JSON_CONNECTION */
15864
15865 {
15866 int i;
15867
15868
15869#ifdef FREECIV_JSON_CONNECTION
15870 /* Enter array. */
15871 field_addr.sub_location = plocation_elem_new(0);
15872#endif /* FREECIV_JSON_CONNECTION */
15873
15874 for (i = 0; i < FEELING_LAST; i++) {
15875#ifdef FREECIV_JSON_CONNECTION
15876 /* Next array element */
15877 field_addr.sub_location->number = i;
15878#endif /* FREECIV_JSON_CONNECTION */
15879
15880 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
15881 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
15882 }
15883 }
15884
15885#ifdef FREECIV_JSON_CONNECTION
15886 /* Exit array. */
15887 FC_FREE(field_addr.sub_location);
15888#endif /* FREECIV_JSON_CONNECTION */
15889 }
15890
15891#ifdef FREECIV_JSON_CONNECTION
15892 field_addr.name = "ppl_unhappy";
15893#endif /* FREECIV_JSON_CONNECTION */
15894
15895 {
15896 int i;
15897
15898
15899#ifdef FREECIV_JSON_CONNECTION
15900 /* Enter array. */
15901 field_addr.sub_location = plocation_elem_new(0);
15902#endif /* FREECIV_JSON_CONNECTION */
15903
15904 for (i = 0; i < FEELING_LAST; i++) {
15905#ifdef FREECIV_JSON_CONNECTION
15906 /* Next array element */
15907 field_addr.sub_location->number = i;
15908#endif /* FREECIV_JSON_CONNECTION */
15909
15910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
15911 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
15912 }
15913 }
15914
15915#ifdef FREECIV_JSON_CONNECTION
15916 /* Exit array. */
15917 FC_FREE(field_addr.sub_location);
15918#endif /* FREECIV_JSON_CONNECTION */
15919 }
15920
15921#ifdef FREECIV_JSON_CONNECTION
15922 field_addr.name = "ppl_angry";
15923#endif /* FREECIV_JSON_CONNECTION */
15924
15925 {
15926 int i;
15927
15928
15929#ifdef FREECIV_JSON_CONNECTION
15930 /* Enter array. */
15931 field_addr.sub_location = plocation_elem_new(0);
15932#endif /* FREECIV_JSON_CONNECTION */
15933
15934 for (i = 0; i < FEELING_LAST; i++) {
15935#ifdef FREECIV_JSON_CONNECTION
15936 /* Next array element */
15937 field_addr.sub_location->number = i;
15938#endif /* FREECIV_JSON_CONNECTION */
15939
15940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
15941 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
15942 }
15943 }
15944
15945#ifdef FREECIV_JSON_CONNECTION
15946 /* Exit array. */
15947 FC_FREE(field_addr.sub_location);
15948#endif /* FREECIV_JSON_CONNECTION */
15949 }
15950
15951#ifdef FREECIV_JSON_CONNECTION
15952 field_addr.name = "specialists_size";
15953#endif /* FREECIV_JSON_CONNECTION */
15954
15955 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
15956 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
15957 }
15958
15959#ifdef FREECIV_JSON_CONNECTION
15960 field_addr.name = "specialists";
15961#endif /* FREECIV_JSON_CONNECTION */
15962
15963 {
15964 int i;
15965
15966 if (real_packet->specialists_size > SP_MAX) {
15967 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
15968 }
15969
15970#ifdef FREECIV_JSON_CONNECTION
15971 /* Enter array. */
15972 field_addr.sub_location = plocation_elem_new(0);
15973#endif /* FREECIV_JSON_CONNECTION */
15974
15975 for (i = 0; i < real_packet->specialists_size; i++) {
15976#ifdef FREECIV_JSON_CONNECTION
15977 /* Next array element */
15978 field_addr.sub_location->number = i;
15979#endif /* FREECIV_JSON_CONNECTION */
15980
15981 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
15983 }
15984 }
15985
15986#ifdef FREECIV_JSON_CONNECTION
15987 /* Exit array. */
15988 FC_FREE(field_addr.sub_location);
15989#endif /* FREECIV_JSON_CONNECTION */
15990 }
15991
15992#ifdef FREECIV_JSON_CONNECTION
15993 field_addr.name = "history";
15994#endif /* FREECIV_JSON_CONNECTION */
15995
15996 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
15998 }
15999
16000#ifdef FREECIV_JSON_CONNECTION
16001 field_addr.name = "culture";
16002#endif /* FREECIV_JSON_CONNECTION */
16003
16004 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
16006 }
16007
16008#ifdef FREECIV_JSON_CONNECTION
16009 field_addr.name = "buy_cost";
16010#endif /* FREECIV_JSON_CONNECTION */
16011
16012 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
16014 }
16015
16016#ifdef FREECIV_JSON_CONNECTION
16017 field_addr.name = "surplus";
16018#endif /* FREECIV_JSON_CONNECTION */
16019
16020 {
16021 int i;
16022
16023
16024#ifdef FREECIV_JSON_CONNECTION
16025 /* Enter array. */
16026 field_addr.sub_location = plocation_elem_new(0);
16027#endif /* FREECIV_JSON_CONNECTION */
16028
16029 for (i = 0; i < O_LAST; i++) {
16030#ifdef FREECIV_JSON_CONNECTION
16031 /* Next array element */
16032 field_addr.sub_location->number = i;
16033#endif /* FREECIV_JSON_CONNECTION */
16034
16035 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
16037 }
16038 }
16039
16040#ifdef FREECIV_JSON_CONNECTION
16041 /* Exit array. */
16042 FC_FREE(field_addr.sub_location);
16043#endif /* FREECIV_JSON_CONNECTION */
16044 }
16045
16046#ifdef FREECIV_JSON_CONNECTION
16047 field_addr.name = "waste";
16048#endif /* FREECIV_JSON_CONNECTION */
16049
16050 {
16051 int i;
16052
16053
16054#ifdef FREECIV_JSON_CONNECTION
16055 /* Enter array. */
16056 field_addr.sub_location = plocation_elem_new(0);
16057#endif /* FREECIV_JSON_CONNECTION */
16058
16059 for (i = 0; i < O_LAST; i++) {
16060#ifdef FREECIV_JSON_CONNECTION
16061 /* Next array element */
16062 field_addr.sub_location->number = i;
16063#endif /* FREECIV_JSON_CONNECTION */
16064
16065 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
16067 }
16068 }
16069
16070#ifdef FREECIV_JSON_CONNECTION
16071 /* Exit array. */
16072 FC_FREE(field_addr.sub_location);
16073#endif /* FREECIV_JSON_CONNECTION */
16074 }
16075
16076#ifdef FREECIV_JSON_CONNECTION
16077 field_addr.name = "unhappy_penalty";
16078#endif /* FREECIV_JSON_CONNECTION */
16079
16080 {
16081 int i;
16082
16083
16084#ifdef FREECIV_JSON_CONNECTION
16085 /* Enter array. */
16086 field_addr.sub_location = plocation_elem_new(0);
16087#endif /* FREECIV_JSON_CONNECTION */
16088
16089 for (i = 0; i < O_LAST; i++) {
16090#ifdef FREECIV_JSON_CONNECTION
16091 /* Next array element */
16092 field_addr.sub_location->number = i;
16093#endif /* FREECIV_JSON_CONNECTION */
16094
16095 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
16096 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
16097 }
16098 }
16099
16100#ifdef FREECIV_JSON_CONNECTION
16101 /* Exit array. */
16102 FC_FREE(field_addr.sub_location);
16103#endif /* FREECIV_JSON_CONNECTION */
16104 }
16105
16106#ifdef FREECIV_JSON_CONNECTION
16107 field_addr.name = "prod";
16108#endif /* FREECIV_JSON_CONNECTION */
16109
16110 {
16111 int i;
16112
16113
16114#ifdef FREECIV_JSON_CONNECTION
16115 /* Enter array. */
16116 field_addr.sub_location = plocation_elem_new(0);
16117#endif /* FREECIV_JSON_CONNECTION */
16118
16119 for (i = 0; i < O_LAST; i++) {
16120#ifdef FREECIV_JSON_CONNECTION
16121 /* Next array element */
16122 field_addr.sub_location->number = i;
16123#endif /* FREECIV_JSON_CONNECTION */
16124
16125 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
16127 }
16128 }
16129
16130#ifdef FREECIV_JSON_CONNECTION
16131 /* Exit array. */
16132 FC_FREE(field_addr.sub_location);
16133#endif /* FREECIV_JSON_CONNECTION */
16134 }
16135
16136#ifdef FREECIV_JSON_CONNECTION
16137 field_addr.name = "citizen_base";
16138#endif /* FREECIV_JSON_CONNECTION */
16139
16140 {
16141 int i;
16142
16143
16144#ifdef FREECIV_JSON_CONNECTION
16145 /* Enter array. */
16146 field_addr.sub_location = plocation_elem_new(0);
16147#endif /* FREECIV_JSON_CONNECTION */
16148
16149 for (i = 0; i < O_LAST; i++) {
16150#ifdef FREECIV_JSON_CONNECTION
16151 /* Next array element */
16152 field_addr.sub_location->number = i;
16153#endif /* FREECIV_JSON_CONNECTION */
16154
16155 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
16156 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
16157 }
16158 }
16159
16160#ifdef FREECIV_JSON_CONNECTION
16161 /* Exit array. */
16162 FC_FREE(field_addr.sub_location);
16163#endif /* FREECIV_JSON_CONNECTION */
16164 }
16165
16166#ifdef FREECIV_JSON_CONNECTION
16167 field_addr.name = "usage";
16168#endif /* FREECIV_JSON_CONNECTION */
16169
16170 {
16171 int i;
16172
16173
16174#ifdef FREECIV_JSON_CONNECTION
16175 /* Enter array. */
16176 field_addr.sub_location = plocation_elem_new(0);
16177#endif /* FREECIV_JSON_CONNECTION */
16178
16179 for (i = 0; i < O_LAST; i++) {
16180#ifdef FREECIV_JSON_CONNECTION
16181 /* Next array element */
16182 field_addr.sub_location->number = i;
16183#endif /* FREECIV_JSON_CONNECTION */
16184
16185 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
16187 }
16188 }
16189
16190#ifdef FREECIV_JSON_CONNECTION
16191 /* Exit array. */
16192 FC_FREE(field_addr.sub_location);
16193#endif /* FREECIV_JSON_CONNECTION */
16194 }
16195
16196#ifdef FREECIV_JSON_CONNECTION
16197 field_addr.name = "food_stock";
16198#endif /* FREECIV_JSON_CONNECTION */
16199
16200 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
16201 RECEIVE_PACKET_FIELD_ERROR(food_stock);
16202 }
16203
16204#ifdef FREECIV_JSON_CONNECTION
16205 field_addr.name = "shield_stock";
16206#endif /* FREECIV_JSON_CONNECTION */
16207
16208 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
16209 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
16210 }
16211
16212#ifdef FREECIV_JSON_CONNECTION
16213 field_addr.name = "trade_route_count";
16214#endif /* FREECIV_JSON_CONNECTION */
16215
16216 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
16217 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
16218 }
16219
16220#ifdef FREECIV_JSON_CONNECTION
16221 field_addr.name = "pollution";
16222#endif /* FREECIV_JSON_CONNECTION */
16223
16224 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
16225 RECEIVE_PACKET_FIELD_ERROR(pollution);
16226 }
16227
16228#ifdef FREECIV_JSON_CONNECTION
16229 field_addr.name = "illness_trade";
16230#endif /* FREECIV_JSON_CONNECTION */
16231
16232 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
16233 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
16234 }
16235
16236#ifdef FREECIV_JSON_CONNECTION
16237 field_addr.name = "production_kind";
16238#endif /* FREECIV_JSON_CONNECTION */
16239
16240 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
16241 RECEIVE_PACKET_FIELD_ERROR(production_kind);
16242 }
16243
16244#ifdef FREECIV_JSON_CONNECTION
16245 field_addr.name = "production_value";
16246#endif /* FREECIV_JSON_CONNECTION */
16247
16248 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
16249 RECEIVE_PACKET_FIELD_ERROR(production_value);
16250 }
16251
16252#ifdef FREECIV_JSON_CONNECTION
16253 field_addr.name = "turn_founded";
16254#endif /* FREECIV_JSON_CONNECTION */
16255
16256 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
16257 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
16258 }
16259
16260#ifdef FREECIV_JSON_CONNECTION
16261 field_addr.name = "turn_last_built";
16262#endif /* FREECIV_JSON_CONNECTION */
16263
16264 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
16265 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
16266 }
16267
16268#ifdef FREECIV_JSON_CONNECTION
16269 field_addr.name = "changed_from_kind";
16270#endif /* FREECIV_JSON_CONNECTION */
16271
16272 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
16273 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
16274 }
16275
16276#ifdef FREECIV_JSON_CONNECTION
16277 field_addr.name = "changed_from_value";
16278#endif /* FREECIV_JSON_CONNECTION */
16279
16280 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
16281 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
16282 }
16283
16284#ifdef FREECIV_JSON_CONNECTION
16285 field_addr.name = "before_change_shields";
16286#endif /* FREECIV_JSON_CONNECTION */
16287
16288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
16289 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
16290 }
16291
16292#ifdef FREECIV_JSON_CONNECTION
16293 field_addr.name = "disbanded_shields";
16294#endif /* FREECIV_JSON_CONNECTION */
16295
16296 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
16297 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
16298 }
16299
16300#ifdef FREECIV_JSON_CONNECTION
16301 field_addr.name = "caravan_shields";
16302#endif /* FREECIV_JSON_CONNECTION */
16303
16304 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
16305 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
16306 }
16307
16308#ifdef FREECIV_JSON_CONNECTION
16309 field_addr.name = "last_turns_shield_surplus";
16310#endif /* FREECIV_JSON_CONNECTION */
16311
16312 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
16313 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
16314 }
16315
16316#ifdef FREECIV_JSON_CONNECTION
16317 field_addr.name = "airlift";
16318#endif /* FREECIV_JSON_CONNECTION */
16319
16320 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
16322 }
16323
16324#ifdef FREECIV_JSON_CONNECTION
16325 field_addr.name = "did_buy";
16326#endif /* FREECIV_JSON_CONNECTION */
16327
16328 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
16330 }
16331
16332#ifdef FREECIV_JSON_CONNECTION
16333 field_addr.name = "did_sell";
16334#endif /* FREECIV_JSON_CONNECTION */
16335
16336 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
16338 }
16339
16340#ifdef FREECIV_JSON_CONNECTION
16341 field_addr.name = "was_happy";
16342#endif /* FREECIV_JSON_CONNECTION */
16343
16344 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
16345 RECEIVE_PACKET_FIELD_ERROR(was_happy);
16346 }
16347
16348#ifdef FREECIV_JSON_CONNECTION
16349 field_addr.name = "had_famine";
16350#endif /* FREECIV_JSON_CONNECTION */
16351
16352 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
16353 RECEIVE_PACKET_FIELD_ERROR(had_famine);
16354 }
16355
16356#ifdef FREECIV_JSON_CONNECTION
16357 field_addr.name = "anarchy";
16358#endif /* FREECIV_JSON_CONNECTION */
16359
16360 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
16362 }
16363
16364#ifdef FREECIV_JSON_CONNECTION
16365 field_addr.name = "rapture";
16366#endif /* FREECIV_JSON_CONNECTION */
16367
16368 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
16370 }
16371
16372#ifdef FREECIV_JSON_CONNECTION
16373 field_addr.name = "diplomat_investigate";
16374#endif /* FREECIV_JSON_CONNECTION */
16375
16376 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->diplomat_investigate)) {
16378 }
16379
16380#ifdef FREECIV_JSON_CONNECTION
16381 field_addr.name = "walls";
16382#endif /* FREECIV_JSON_CONNECTION */
16383
16384 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
16386 }
16387
16388#ifdef FREECIV_JSON_CONNECTION
16389 field_addr.name = "city_image";
16390#endif /* FREECIV_JSON_CONNECTION */
16391
16392 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
16393 RECEIVE_PACKET_FIELD_ERROR(city_image);
16394 }
16395
16396#ifdef FREECIV_JSON_CONNECTION
16397 field_addr.name = "steal";
16398#endif /* FREECIV_JSON_CONNECTION */
16399
16400 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
16402 }
16403
16404#ifdef FREECIV_JSON_CONNECTION
16405 field_addr.name = "worklist";
16406#endif /* FREECIV_JSON_CONNECTION */
16407
16408 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
16410 }
16411
16412#ifdef FREECIV_JSON_CONNECTION
16413 field_addr.name = "improvements";
16414#endif /* FREECIV_JSON_CONNECTION */
16415
16416 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
16417 RECEIVE_PACKET_FIELD_ERROR(improvements);
16418 }
16419
16420#ifdef FREECIV_JSON_CONNECTION
16421 field_addr.name = "city_options";
16422#endif /* FREECIV_JSON_CONNECTION */
16423
16424 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
16425 RECEIVE_PACKET_FIELD_ERROR(city_options);
16426 }
16427
16428#ifdef FREECIV_JSON_CONNECTION
16429 field_addr.name = "wl_cb";
16430#endif /* FREECIV_JSON_CONNECTION */
16431
16432 {
16433 int readin;
16434
16435 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16437 }
16438 real_packet->wl_cb = readin;
16439 }
16440
16441#ifdef FREECIV_JSON_CONNECTION
16442 field_addr.name = "acquire_type";
16443#endif /* FREECIV_JSON_CONNECTION */
16444
16445 {
16446 int readin;
16447
16448 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16449 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
16450 }
16451 real_packet->acquire_type = readin;
16452 }
16453
16454#ifdef FREECIV_JSON_CONNECTION
16455 field_addr.name = "name";
16456#endif /* FREECIV_JSON_CONNECTION */
16457
16458 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
16460 }
16461#endif /* FREECIV_DELTA_PROTOCOL */
16462
16464#undef FREE_PACKET_STRUCT
16465}
16466
16467static int send_packet_city_info_100(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
16468{
16469 const struct packet_city_info *real_packet = packet;
16470 int e;
16472
16473 log_packet_detailed("packet_city_info_100: sending info about (%d)",
16474 real_packet->id);
16475
16476#ifdef FREECIV_DELTA_PROTOCOL
16478 struct packet_city_info *old;
16479 bool differ;
16480 int different = force_to_send;
16481 struct genhash **hash = pc->phs.sent + PACKET_CITY_INFO;
16482
16483 if (nullptr == *hash) {
16485 nullptr, nullptr, nullptr, destroy_packet_city_info);
16486 }
16487 BV_CLR_ALL(fields);
16488
16489 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
16490 old = fc_malloc(sizeof(*old));
16491 /* temporary bitcopy just to insert correctly */
16492 *old = *real_packet;
16495 different = 1; /* Force to send. */
16496 }
16497
16498 differ = (old->tile != real_packet->tile);
16499 if (differ) {
16500 different++;
16501 BV_SET(fields, 0);
16502 }
16503
16504 differ = (old->owner != real_packet->owner);
16505 if (differ) {
16506 different++;
16507 BV_SET(fields, 1);
16508 }
16509
16510 differ = (old->original != real_packet->original);
16511 if (differ) {
16512 different++;
16513 BV_SET(fields, 2);
16514 }
16515
16516 differ = (old->size != real_packet->size);
16517 if (differ) {
16518 different++;
16519 BV_SET(fields, 3);
16520 }
16521
16522 differ = (old->city_radius_sq != real_packet->city_radius_sq);
16523 if (differ) {
16524 different++;
16525 BV_SET(fields, 4);
16526 }
16527
16528 differ = (old->style != real_packet->style);
16529 if (differ) {
16530 different++;
16531 BV_SET(fields, 5);
16532 }
16533
16534 differ = (old->capital != real_packet->capital);
16535 if (differ) {
16536 different++;
16537 BV_SET(fields, 6);
16538 }
16539
16540 differ = FALSE;
16541 {
16542 int i;
16543
16544 for (i = 0; i < FEELING_LAST; i++) {
16545 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
16546 if (differ) {
16547 break;
16548 }
16549 }
16550 }
16551 if (differ) {
16552 different++;
16553 BV_SET(fields, 7);
16554 }
16555
16556 differ = FALSE;
16557 {
16558 int i;
16559
16560 for (i = 0; i < FEELING_LAST; i++) {
16561 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
16562 if (differ) {
16563 break;
16564 }
16565 }
16566 }
16567 if (differ) {
16568 different++;
16569 BV_SET(fields, 8);
16570 }
16571
16572 differ = FALSE;
16573 {
16574 int i;
16575
16576 for (i = 0; i < FEELING_LAST; i++) {
16577 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
16578 if (differ) {
16579 break;
16580 }
16581 }
16582 }
16583 if (differ) {
16584 different++;
16585 BV_SET(fields, 9);
16586 }
16587
16588 differ = FALSE;
16589 {
16590 int i;
16591
16592 for (i = 0; i < FEELING_LAST; i++) {
16593 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
16594 if (differ) {
16595 break;
16596 }
16597 }
16598 }
16599 if (differ) {
16600 different++;
16601 BV_SET(fields, 10);
16602 }
16603
16604 differ = (old->specialists_size != real_packet->specialists_size);
16605 if (differ) {
16606 different++;
16607 BV_SET(fields, 11);
16608 }
16609
16610 differ = (old->specialists_size != real_packet->specialists_size);
16611 if (!differ) {
16612 int i;
16613
16614 for (i = 0; i < old->specialists_size; i++) {
16615 differ = (old->specialists[i] != real_packet->specialists[i]);
16616 if (differ) {
16617 break;
16618 }
16619 }
16620 }
16621 if (differ) {
16622 different++;
16623 BV_SET(fields, 12);
16624 }
16625
16626 differ = (old->history != real_packet->history);
16627 if (differ) {
16628 different++;
16629 BV_SET(fields, 13);
16630 }
16631
16632 differ = (old->culture != real_packet->culture);
16633 if (differ) {
16634 different++;
16635 BV_SET(fields, 14);
16636 }
16637
16638 differ = (old->buy_cost != real_packet->buy_cost);
16639 if (differ) {
16640 different++;
16641 BV_SET(fields, 15);
16642 }
16643
16644 differ = FALSE;
16645 {
16646 int i;
16647
16648 for (i = 0; i < O_LAST; i++) {
16649 differ = (old->surplus[i] != real_packet->surplus[i]);
16650 if (differ) {
16651 break;
16652 }
16653 }
16654 }
16655 if (differ) {
16656 different++;
16657 BV_SET(fields, 16);
16658 }
16659
16660 differ = FALSE;
16661 {
16662 int i;
16663
16664 for (i = 0; i < O_LAST; i++) {
16665 differ = (old->waste[i] != real_packet->waste[i]);
16666 if (differ) {
16667 break;
16668 }
16669 }
16670 }
16671 if (differ) {
16672 different++;
16673 BV_SET(fields, 17);
16674 }
16675
16676 differ = FALSE;
16677 {
16678 int i;
16679
16680 for (i = 0; i < O_LAST; i++) {
16681 differ = (old->unhappy_penalty[i] != real_packet->unhappy_penalty[i]);
16682 if (differ) {
16683 break;
16684 }
16685 }
16686 }
16687 if (differ) {
16688 different++;
16689 BV_SET(fields, 18);
16690 }
16691
16692 differ = FALSE;
16693 {
16694 int i;
16695
16696 for (i = 0; i < O_LAST; i++) {
16697 differ = (old->prod[i] != real_packet->prod[i]);
16698 if (differ) {
16699 break;
16700 }
16701 }
16702 }
16703 if (differ) {
16704 different++;
16705 BV_SET(fields, 19);
16706 }
16707
16708 differ = FALSE;
16709 {
16710 int i;
16711
16712 for (i = 0; i < O_LAST; i++) {
16713 differ = (old->citizen_base[i] != real_packet->citizen_base[i]);
16714 if (differ) {
16715 break;
16716 }
16717 }
16718 }
16719 if (differ) {
16720 different++;
16721 BV_SET(fields, 20);
16722 }
16723
16724 differ = FALSE;
16725 {
16726 int i;
16727
16728 for (i = 0; i < O_LAST; i++) {
16729 differ = (old->usage[i] != real_packet->usage[i]);
16730 if (differ) {
16731 break;
16732 }
16733 }
16734 }
16735 if (differ) {
16736 different++;
16737 BV_SET(fields, 21);
16738 }
16739
16740 differ = (old->food_stock != real_packet->food_stock);
16741 if (differ) {
16742 different++;
16743 BV_SET(fields, 22);
16744 }
16745
16746 differ = (old->shield_stock != real_packet->shield_stock);
16747 if (differ) {
16748 different++;
16749 BV_SET(fields, 23);
16750 }
16751
16752 differ = (old->trade_route_count != real_packet->trade_route_count);
16753 if (differ) {
16754 different++;
16755 BV_SET(fields, 24);
16756 }
16757
16758 differ = (old->pollution != real_packet->pollution);
16759 if (differ) {
16760 different++;
16761 BV_SET(fields, 25);
16762 }
16763
16764 differ = (old->illness_trade != real_packet->illness_trade);
16765 if (differ) {
16766 different++;
16767 BV_SET(fields, 26);
16768 }
16769
16770 differ = (old->production_kind != real_packet->production_kind);
16771 if (differ) {
16772 different++;
16773 BV_SET(fields, 27);
16774 }
16775
16776 differ = (old->production_value != real_packet->production_value);
16777 if (differ) {
16778 different++;
16779 BV_SET(fields, 28);
16780 }
16781
16782 differ = (old->turn_founded != real_packet->turn_founded);
16783 if (differ) {
16784 different++;
16785 BV_SET(fields, 29);
16786 }
16787
16788 differ = (old->turn_last_built != real_packet->turn_last_built);
16789 if (differ) {
16790 different++;
16791 BV_SET(fields, 30);
16792 }
16793
16794 differ = (old->changed_from_kind != real_packet->changed_from_kind);
16795 if (differ) {
16796 different++;
16797 BV_SET(fields, 31);
16798 }
16799
16800 differ = (old->changed_from_value != real_packet->changed_from_value);
16801 if (differ) {
16802 different++;
16803 BV_SET(fields, 32);
16804 }
16805
16806 differ = (old->before_change_shields != real_packet->before_change_shields);
16807 if (differ) {
16808 different++;
16809 BV_SET(fields, 33);
16810 }
16811
16812 differ = (old->disbanded_shields != real_packet->disbanded_shields);
16813 if (differ) {
16814 different++;
16815 BV_SET(fields, 34);
16816 }
16817
16818 differ = (old->caravan_shields != real_packet->caravan_shields);
16819 if (differ) {
16820 different++;
16821 BV_SET(fields, 35);
16822 }
16823
16824 differ = (old->last_turns_shield_surplus != real_packet->last_turns_shield_surplus);
16825 if (differ) {
16826 different++;
16827 BV_SET(fields, 36);
16828 }
16829
16830 differ = (old->airlift != real_packet->airlift);
16831 if (differ) {
16832 different++;
16833 BV_SET(fields, 37);
16834 }
16835
16836 differ = (old->did_buy != real_packet->did_buy);
16837 if (differ) {
16838 different++;
16839 }
16840 /* folded into head */
16841 if (real_packet->did_buy) {
16842 BV_SET(fields, 38);
16843 }
16844
16845 differ = (old->did_sell != real_packet->did_sell);
16846 if (differ) {
16847 different++;
16848 }
16849 /* folded into head */
16850 if (real_packet->did_sell) {
16851 BV_SET(fields, 39);
16852 }
16853
16854 differ = (old->was_happy != real_packet->was_happy);
16855 if (differ) {
16856 different++;
16857 }
16858 /* folded into head */
16859 if (real_packet->was_happy) {
16860 BV_SET(fields, 40);
16861 }
16862
16863 differ = (old->had_famine != real_packet->had_famine);
16864 if (differ) {
16865 different++;
16866 }
16867 /* folded into head */
16868 if (real_packet->had_famine) {
16869 BV_SET(fields, 41);
16870 }
16871
16872 differ = (old->anarchy != real_packet->anarchy);
16873 if (differ) {
16874 different++;
16875 BV_SET(fields, 42);
16876 }
16877
16878 differ = (old->rapture != real_packet->rapture);
16879 if (differ) {
16880 different++;
16881 BV_SET(fields, 43);
16882 }
16883
16884 differ = (old->diplomat_investigate != real_packet->diplomat_investigate);
16885 if (differ) {
16886 different++;
16887 }
16888 /* folded into head */
16889 if (real_packet->diplomat_investigate) {
16890 BV_SET(fields, 44);
16891 }
16892
16893 differ = (old->walls != real_packet->walls);
16894 if (differ) {
16895 different++;
16896 BV_SET(fields, 45);
16897 }
16898
16899 differ = (old->city_image != real_packet->city_image);
16900 if (differ) {
16901 different++;
16902 BV_SET(fields, 46);
16903 }
16904
16905 differ = (old->steal != real_packet->steal);
16906 if (differ) {
16907 different++;
16908 BV_SET(fields, 47);
16909 }
16910
16911 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
16912 if (differ) {
16913 different++;
16914 BV_SET(fields, 48);
16915 }
16916
16917 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
16918 if (differ) {
16919 different++;
16920 BV_SET(fields, 49);
16921 }
16922
16923 differ = !BV_ARE_EQUAL(old->city_options, real_packet->city_options);
16924 if (differ) {
16925 different++;
16926 BV_SET(fields, 50);
16927 }
16928
16929 differ = (old->wl_cb != real_packet->wl_cb);
16930 if (differ) {
16931 different++;
16932 BV_SET(fields, 51);
16933 }
16934
16935 differ = (old->acquire_type != real_packet->acquire_type);
16936 if (differ) {
16937 different++;
16938 BV_SET(fields, 52);
16939 }
16940
16941 differ = (strcmp(old->name, real_packet->name) != 0);
16942 if (differ) {
16943 different++;
16944 BV_SET(fields, 53);
16945 }
16946
16947 if (different == 0) {
16948 log_packet_detailed(" no change -> discard");
16950 }
16951#endif /* FREECIV_DELTA_PROTOCOL */
16952
16953#ifdef FREECIV_JSON_CONNECTION
16954 struct plocation field_addr;
16955 {
16956 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
16959 }
16960#endif /* FREECIV_JSON_CONNECTION */
16961
16962#ifdef FREECIV_JSON_CONNECTION
16963 field_addr.name = "id";
16964#endif /* FREECIV_JSON_CONNECTION */
16965 e = 0;
16966
16967 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
16968
16969 if (e) {
16970 log_packet_detailed("'id' field error detected");
16971 }
16972
16973#ifdef FREECIV_DELTA_PROTOCOL
16974#ifdef FREECIV_JSON_CONNECTION
16975 field_addr.name = "fields";
16976#endif /* FREECIV_JSON_CONNECTION */
16977 e = 0;
16978 e |= DIO_BV_PUT(&dout, &field_addr, fields);
16979 if (e) {
16980 log_packet_detailed("fields bitvector error detected");
16981 }
16982
16983 if (BV_ISSET(fields, 0)) {
16984 log_packet_detailed(" field 'tile' has changed");
16985
16986#ifdef FREECIV_JSON_CONNECTION
16987 field_addr.name = "tile";
16988#endif /* FREECIV_JSON_CONNECTION */
16989 e = 0;
16990
16991 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
16992
16993 if (e) {
16994 log_packet_detailed("'tile' field error detected");
16995 }
16996 }
16997
16998 if (BV_ISSET(fields, 1)) {
16999 log_packet_detailed(" field 'owner' has changed");
17000
17001#ifdef FREECIV_JSON_CONNECTION
17002 field_addr.name = "owner";
17003#endif /* FREECIV_JSON_CONNECTION */
17004 e = 0;
17005
17006 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
17007
17008 if (e) {
17009 log_packet_detailed("'owner' field error detected");
17010 }
17011 }
17012
17013 if (BV_ISSET(fields, 2)) {
17014 log_packet_detailed(" field 'original' has changed");
17015
17016#ifdef FREECIV_JSON_CONNECTION
17017 field_addr.name = "original";
17018#endif /* FREECIV_JSON_CONNECTION */
17019 e = 0;
17020
17021 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
17022
17023 if (e) {
17024 log_packet_detailed("'original' field error detected");
17025 }
17026 }
17027
17028 if (BV_ISSET(fields, 3)) {
17029 log_packet_detailed(" field 'size' has changed");
17030
17031#ifdef FREECIV_JSON_CONNECTION
17032 field_addr.name = "size";
17033#endif /* FREECIV_JSON_CONNECTION */
17034 e = 0;
17035
17036 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
17037
17038 if (e) {
17039 log_packet_detailed("'size' field error detected");
17040 }
17041 }
17042
17043 if (BV_ISSET(fields, 4)) {
17044 log_packet_detailed(" field 'city_radius_sq' has changed");
17045
17046#ifdef FREECIV_JSON_CONNECTION
17047 field_addr.name = "city_radius_sq";
17048#endif /* FREECIV_JSON_CONNECTION */
17049 e = 0;
17050
17051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
17052
17053 if (e) {
17054 log_packet_detailed("'city_radius_sq' field error detected");
17055 }
17056 }
17057
17058 if (BV_ISSET(fields, 5)) {
17059 log_packet_detailed(" field 'style' has changed");
17060
17061#ifdef FREECIV_JSON_CONNECTION
17062 field_addr.name = "style";
17063#endif /* FREECIV_JSON_CONNECTION */
17064 e = 0;
17065
17066 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17067
17068 if (e) {
17069 log_packet_detailed("'style' field error detected");
17070 }
17071 }
17072
17073 if (BV_ISSET(fields, 6)) {
17074 log_packet_detailed(" field 'capital' has changed");
17075
17076#ifdef FREECIV_JSON_CONNECTION
17077 field_addr.name = "capital";
17078#endif /* FREECIV_JSON_CONNECTION */
17079 e = 0;
17080
17081 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17082
17083 if (e) {
17084 log_packet_detailed("'capital' field error detected");
17085 }
17086 }
17087
17088 if (BV_ISSET(fields, 7)) {
17089 log_packet_detailed(" field 'ppl_happy' has changed");
17090
17091#ifdef FREECIV_JSON_CONNECTION
17092 field_addr.name = "ppl_happy";
17093#endif /* FREECIV_JSON_CONNECTION */
17094 e = 0;
17095
17096 {
17097 int i;
17098
17099#ifdef FREECIV_JSON_CONNECTION
17100 /* Create the array. */
17102
17103 /* Enter array. */
17104 field_addr.sub_location = plocation_elem_new(0);
17105#endif /* FREECIV_JSON_CONNECTION */
17106
17107 for (i = 0; i < FEELING_LAST; i++) {
17108#ifdef FREECIV_JSON_CONNECTION
17109 /* Next array element. */
17110 field_addr.sub_location->number = i;
17111#endif /* FREECIV_JSON_CONNECTION */
17112
17113 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
17114 }
17115
17116#ifdef FREECIV_JSON_CONNECTION
17117 /* Exit array. */
17118 FC_FREE(field_addr.sub_location);
17119#endif /* FREECIV_JSON_CONNECTION */
17120 }
17121
17122 if (e) {
17123 log_packet_detailed("'ppl_happy' field error detected");
17124 }
17125 }
17126
17127 if (BV_ISSET(fields, 8)) {
17128 log_packet_detailed(" field 'ppl_content' has changed");
17129
17130#ifdef FREECIV_JSON_CONNECTION
17131 field_addr.name = "ppl_content";
17132#endif /* FREECIV_JSON_CONNECTION */
17133 e = 0;
17134
17135 {
17136 int i;
17137
17138#ifdef FREECIV_JSON_CONNECTION
17139 /* Create the array. */
17141
17142 /* Enter array. */
17143 field_addr.sub_location = plocation_elem_new(0);
17144#endif /* FREECIV_JSON_CONNECTION */
17145
17146 for (i = 0; i < FEELING_LAST; i++) {
17147#ifdef FREECIV_JSON_CONNECTION
17148 /* Next array element. */
17149 field_addr.sub_location->number = i;
17150#endif /* FREECIV_JSON_CONNECTION */
17151
17152 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
17153 }
17154
17155#ifdef FREECIV_JSON_CONNECTION
17156 /* Exit array. */
17157 FC_FREE(field_addr.sub_location);
17158#endif /* FREECIV_JSON_CONNECTION */
17159 }
17160
17161 if (e) {
17162 log_packet_detailed("'ppl_content' field error detected");
17163 }
17164 }
17165
17166 if (BV_ISSET(fields, 9)) {
17167 log_packet_detailed(" field 'ppl_unhappy' has changed");
17168
17169#ifdef FREECIV_JSON_CONNECTION
17170 field_addr.name = "ppl_unhappy";
17171#endif /* FREECIV_JSON_CONNECTION */
17172 e = 0;
17173
17174 {
17175 int i;
17176
17177#ifdef FREECIV_JSON_CONNECTION
17178 /* Create the array. */
17180
17181 /* Enter array. */
17182 field_addr.sub_location = plocation_elem_new(0);
17183#endif /* FREECIV_JSON_CONNECTION */
17184
17185 for (i = 0; i < FEELING_LAST; i++) {
17186#ifdef FREECIV_JSON_CONNECTION
17187 /* Next array element. */
17188 field_addr.sub_location->number = i;
17189#endif /* FREECIV_JSON_CONNECTION */
17190
17191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
17192 }
17193
17194#ifdef FREECIV_JSON_CONNECTION
17195 /* Exit array. */
17196 FC_FREE(field_addr.sub_location);
17197#endif /* FREECIV_JSON_CONNECTION */
17198 }
17199
17200 if (e) {
17201 log_packet_detailed("'ppl_unhappy' field error detected");
17202 }
17203 }
17204
17205 if (BV_ISSET(fields, 10)) {
17206 log_packet_detailed(" field 'ppl_angry' has changed");
17207
17208#ifdef FREECIV_JSON_CONNECTION
17209 field_addr.name = "ppl_angry";
17210#endif /* FREECIV_JSON_CONNECTION */
17211 e = 0;
17212
17213 {
17214 int i;
17215
17216#ifdef FREECIV_JSON_CONNECTION
17217 /* Create the array. */
17219
17220 /* Enter array. */
17221 field_addr.sub_location = plocation_elem_new(0);
17222#endif /* FREECIV_JSON_CONNECTION */
17223
17224 for (i = 0; i < FEELING_LAST; i++) {
17225#ifdef FREECIV_JSON_CONNECTION
17226 /* Next array element. */
17227 field_addr.sub_location->number = i;
17228#endif /* FREECIV_JSON_CONNECTION */
17229
17230 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
17231 }
17232
17233#ifdef FREECIV_JSON_CONNECTION
17234 /* Exit array. */
17235 FC_FREE(field_addr.sub_location);
17236#endif /* FREECIV_JSON_CONNECTION */
17237 }
17238
17239 if (e) {
17240 log_packet_detailed("'ppl_angry' field error detected");
17241 }
17242 }
17243
17244 if (BV_ISSET(fields, 11)) {
17245 log_packet_detailed(" field 'specialists_size' has changed");
17246
17247#ifdef FREECIV_JSON_CONNECTION
17248 field_addr.name = "specialists_size";
17249#endif /* FREECIV_JSON_CONNECTION */
17250 e = 0;
17251
17252 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
17253
17254 if (e) {
17255 log_packet_detailed("'specialists_size' field error detected");
17256 }
17257 }
17258
17259 if (BV_ISSET(fields, 12)) {
17260 log_packet_detailed(" field 'specialists' has changed");
17261
17262#ifdef FREECIV_JSON_CONNECTION
17263 field_addr.name = "specialists";
17264#endif /* FREECIV_JSON_CONNECTION */
17265 e = 0;
17266
17267 {
17268 int i;
17269
17270#ifdef FREECIV_JSON_CONNECTION
17271 /* Create the array. */
17272 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
17273
17274 /* Enter array. */
17275 field_addr.sub_location = plocation_elem_new(0);
17276#endif /* FREECIV_JSON_CONNECTION */
17277
17278 for (i = 0; i < real_packet->specialists_size; i++) {
17279#ifdef FREECIV_JSON_CONNECTION
17280 /* Next array element. */
17281 field_addr.sub_location->number = i;
17282#endif /* FREECIV_JSON_CONNECTION */
17283
17284 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
17285 }
17286
17287#ifdef FREECIV_JSON_CONNECTION
17288 /* Exit array. */
17289 FC_FREE(field_addr.sub_location);
17290#endif /* FREECIV_JSON_CONNECTION */
17291 }
17292
17293 if (e) {
17294 log_packet_detailed("'specialists' field error detected");
17295 }
17296 }
17297
17298 if (BV_ISSET(fields, 13)) {
17299 log_packet_detailed(" field 'history' has changed");
17300
17301#ifdef FREECIV_JSON_CONNECTION
17302 field_addr.name = "history";
17303#endif /* FREECIV_JSON_CONNECTION */
17304 e = 0;
17305
17306 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
17307
17308 if (e) {
17309 log_packet_detailed("'history' field error detected");
17310 }
17311 }
17312
17313 if (BV_ISSET(fields, 14)) {
17314 log_packet_detailed(" field 'culture' has changed");
17315
17316#ifdef FREECIV_JSON_CONNECTION
17317 field_addr.name = "culture";
17318#endif /* FREECIV_JSON_CONNECTION */
17319 e = 0;
17320
17321 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
17322
17323 if (e) {
17324 log_packet_detailed("'culture' field error detected");
17325 }
17326 }
17327
17328 if (BV_ISSET(fields, 15)) {
17329 log_packet_detailed(" field 'buy_cost' has changed");
17330
17331#ifdef FREECIV_JSON_CONNECTION
17332 field_addr.name = "buy_cost";
17333#endif /* FREECIV_JSON_CONNECTION */
17334 e = 0;
17335
17336 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
17337
17338 if (e) {
17339 log_packet_detailed("'buy_cost' field error detected");
17340 }
17341 }
17342
17343 if (BV_ISSET(fields, 16)) {
17344 log_packet_detailed(" field 'surplus' has changed");
17345
17346#ifdef FREECIV_JSON_CONNECTION
17347 field_addr.name = "surplus";
17348#endif /* FREECIV_JSON_CONNECTION */
17349 e = 0;
17350
17351 {
17352 int i;
17353
17354#ifdef FREECIV_JSON_CONNECTION
17355 /* Create the array. */
17356 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17357
17358 /* Enter array. */
17359 field_addr.sub_location = plocation_elem_new(0);
17360#endif /* FREECIV_JSON_CONNECTION */
17361
17362 for (i = 0; i < O_LAST; i++) {
17363#ifdef FREECIV_JSON_CONNECTION
17364 /* Next array element. */
17365 field_addr.sub_location->number = i;
17366#endif /* FREECIV_JSON_CONNECTION */
17367
17368 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
17369 }
17370
17371#ifdef FREECIV_JSON_CONNECTION
17372 /* Exit array. */
17373 FC_FREE(field_addr.sub_location);
17374#endif /* FREECIV_JSON_CONNECTION */
17375 }
17376
17377 if (e) {
17378 log_packet_detailed("'surplus' field error detected");
17379 }
17380 }
17381
17382 if (BV_ISSET(fields, 17)) {
17383 log_packet_detailed(" field 'waste' has changed");
17384
17385#ifdef FREECIV_JSON_CONNECTION
17386 field_addr.name = "waste";
17387#endif /* FREECIV_JSON_CONNECTION */
17388 e = 0;
17389
17390 {
17391 int i;
17392
17393#ifdef FREECIV_JSON_CONNECTION
17394 /* Create the array. */
17395 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17396
17397 /* Enter array. */
17398 field_addr.sub_location = plocation_elem_new(0);
17399#endif /* FREECIV_JSON_CONNECTION */
17400
17401 for (i = 0; i < O_LAST; i++) {
17402#ifdef FREECIV_JSON_CONNECTION
17403 /* Next array element. */
17404 field_addr.sub_location->number = i;
17405#endif /* FREECIV_JSON_CONNECTION */
17406
17407 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
17408 }
17409
17410#ifdef FREECIV_JSON_CONNECTION
17411 /* Exit array. */
17412 FC_FREE(field_addr.sub_location);
17413#endif /* FREECIV_JSON_CONNECTION */
17414 }
17415
17416 if (e) {
17417 log_packet_detailed("'waste' field error detected");
17418 }
17419 }
17420
17421 if (BV_ISSET(fields, 18)) {
17422 log_packet_detailed(" field 'unhappy_penalty' has changed");
17423
17424#ifdef FREECIV_JSON_CONNECTION
17425 field_addr.name = "unhappy_penalty";
17426#endif /* FREECIV_JSON_CONNECTION */
17427 e = 0;
17428
17429 {
17430 int i;
17431
17432#ifdef FREECIV_JSON_CONNECTION
17433 /* Create the array. */
17434 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17435
17436 /* Enter array. */
17437 field_addr.sub_location = plocation_elem_new(0);
17438#endif /* FREECIV_JSON_CONNECTION */
17439
17440 for (i = 0; i < O_LAST; i++) {
17441#ifdef FREECIV_JSON_CONNECTION
17442 /* Next array element. */
17443 field_addr.sub_location->number = i;
17444#endif /* FREECIV_JSON_CONNECTION */
17445
17446 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
17447 }
17448
17449#ifdef FREECIV_JSON_CONNECTION
17450 /* Exit array. */
17451 FC_FREE(field_addr.sub_location);
17452#endif /* FREECIV_JSON_CONNECTION */
17453 }
17454
17455 if (e) {
17456 log_packet_detailed("'unhappy_penalty' field error detected");
17457 }
17458 }
17459
17460 if (BV_ISSET(fields, 19)) {
17461 log_packet_detailed(" field 'prod' has changed");
17462
17463#ifdef FREECIV_JSON_CONNECTION
17464 field_addr.name = "prod";
17465#endif /* FREECIV_JSON_CONNECTION */
17466 e = 0;
17467
17468 {
17469 int i;
17470
17471#ifdef FREECIV_JSON_CONNECTION
17472 /* Create the array. */
17473 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17474
17475 /* Enter array. */
17476 field_addr.sub_location = plocation_elem_new(0);
17477#endif /* FREECIV_JSON_CONNECTION */
17478
17479 for (i = 0; i < O_LAST; i++) {
17480#ifdef FREECIV_JSON_CONNECTION
17481 /* Next array element. */
17482 field_addr.sub_location->number = i;
17483#endif /* FREECIV_JSON_CONNECTION */
17484
17485 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
17486 }
17487
17488#ifdef FREECIV_JSON_CONNECTION
17489 /* Exit array. */
17490 FC_FREE(field_addr.sub_location);
17491#endif /* FREECIV_JSON_CONNECTION */
17492 }
17493
17494 if (e) {
17495 log_packet_detailed("'prod' field error detected");
17496 }
17497 }
17498
17499 if (BV_ISSET(fields, 20)) {
17500 log_packet_detailed(" field 'citizen_base' has changed");
17501
17502#ifdef FREECIV_JSON_CONNECTION
17503 field_addr.name = "citizen_base";
17504#endif /* FREECIV_JSON_CONNECTION */
17505 e = 0;
17506
17507 {
17508 int i;
17509
17510#ifdef FREECIV_JSON_CONNECTION
17511 /* Create the array. */
17512 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17513
17514 /* Enter array. */
17515 field_addr.sub_location = plocation_elem_new(0);
17516#endif /* FREECIV_JSON_CONNECTION */
17517
17518 for (i = 0; i < O_LAST; i++) {
17519#ifdef FREECIV_JSON_CONNECTION
17520 /* Next array element. */
17521 field_addr.sub_location->number = i;
17522#endif /* FREECIV_JSON_CONNECTION */
17523
17524 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
17525 }
17526
17527#ifdef FREECIV_JSON_CONNECTION
17528 /* Exit array. */
17529 FC_FREE(field_addr.sub_location);
17530#endif /* FREECIV_JSON_CONNECTION */
17531 }
17532
17533 if (e) {
17534 log_packet_detailed("'citizen_base' field error detected");
17535 }
17536 }
17537
17538 if (BV_ISSET(fields, 21)) {
17539 log_packet_detailed(" field 'usage' has changed");
17540
17541#ifdef FREECIV_JSON_CONNECTION
17542 field_addr.name = "usage";
17543#endif /* FREECIV_JSON_CONNECTION */
17544 e = 0;
17545
17546 {
17547 int i;
17548
17549#ifdef FREECIV_JSON_CONNECTION
17550 /* Create the array. */
17551 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
17552
17553 /* Enter array. */
17554 field_addr.sub_location = plocation_elem_new(0);
17555#endif /* FREECIV_JSON_CONNECTION */
17556
17557 for (i = 0; i < O_LAST; i++) {
17558#ifdef FREECIV_JSON_CONNECTION
17559 /* Next array element. */
17560 field_addr.sub_location->number = i;
17561#endif /* FREECIV_JSON_CONNECTION */
17562
17563 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
17564 }
17565
17566#ifdef FREECIV_JSON_CONNECTION
17567 /* Exit array. */
17568 FC_FREE(field_addr.sub_location);
17569#endif /* FREECIV_JSON_CONNECTION */
17570 }
17571
17572 if (e) {
17573 log_packet_detailed("'usage' field error detected");
17574 }
17575 }
17576
17577 if (BV_ISSET(fields, 22)) {
17578 log_packet_detailed(" field 'food_stock' has changed");
17579
17580#ifdef FREECIV_JSON_CONNECTION
17581 field_addr.name = "food_stock";
17582#endif /* FREECIV_JSON_CONNECTION */
17583 e = 0;
17584
17585 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
17586
17587 if (e) {
17588 log_packet_detailed("'food_stock' field error detected");
17589 }
17590 }
17591
17592 if (BV_ISSET(fields, 23)) {
17593 log_packet_detailed(" field 'shield_stock' has changed");
17594
17595#ifdef FREECIV_JSON_CONNECTION
17596 field_addr.name = "shield_stock";
17597#endif /* FREECIV_JSON_CONNECTION */
17598 e = 0;
17599
17600 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
17601
17602 if (e) {
17603 log_packet_detailed("'shield_stock' field error detected");
17604 }
17605 }
17606
17607 if (BV_ISSET(fields, 24)) {
17608 log_packet_detailed(" field 'trade_route_count' has changed");
17609
17610#ifdef FREECIV_JSON_CONNECTION
17611 field_addr.name = "trade_route_count";
17612#endif /* FREECIV_JSON_CONNECTION */
17613 e = 0;
17614
17615 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
17616
17617 if (e) {
17618 log_packet_detailed("'trade_route_count' field error detected");
17619 }
17620 }
17621
17622 if (BV_ISSET(fields, 25)) {
17623 log_packet_detailed(" field 'pollution' has changed");
17624
17625#ifdef FREECIV_JSON_CONNECTION
17626 field_addr.name = "pollution";
17627#endif /* FREECIV_JSON_CONNECTION */
17628 e = 0;
17629
17630 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
17631
17632 if (e) {
17633 log_packet_detailed("'pollution' field error detected");
17634 }
17635 }
17636
17637 if (BV_ISSET(fields, 26)) {
17638 log_packet_detailed(" field 'illness_trade' has changed");
17639
17640#ifdef FREECIV_JSON_CONNECTION
17641 field_addr.name = "illness_trade";
17642#endif /* FREECIV_JSON_CONNECTION */
17643 e = 0;
17644
17645 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
17646
17647 if (e) {
17648 log_packet_detailed("'illness_trade' field error detected");
17649 }
17650 }
17651
17652 if (BV_ISSET(fields, 27)) {
17653 log_packet_detailed(" field 'production_kind' has changed");
17654
17655#ifdef FREECIV_JSON_CONNECTION
17656 field_addr.name = "production_kind";
17657#endif /* FREECIV_JSON_CONNECTION */
17658 e = 0;
17659
17660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
17661
17662 if (e) {
17663 log_packet_detailed("'production_kind' field error detected");
17664 }
17665 }
17666
17667 if (BV_ISSET(fields, 28)) {
17668 log_packet_detailed(" field 'production_value' has changed");
17669
17670#ifdef FREECIV_JSON_CONNECTION
17671 field_addr.name = "production_value";
17672#endif /* FREECIV_JSON_CONNECTION */
17673 e = 0;
17674
17675 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
17676
17677 if (e) {
17678 log_packet_detailed("'production_value' field error detected");
17679 }
17680 }
17681
17682 if (BV_ISSET(fields, 29)) {
17683 log_packet_detailed(" field 'turn_founded' has changed");
17684
17685#ifdef FREECIV_JSON_CONNECTION
17686 field_addr.name = "turn_founded";
17687#endif /* FREECIV_JSON_CONNECTION */
17688 e = 0;
17689
17690 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
17691
17692 if (e) {
17693 log_packet_detailed("'turn_founded' field error detected");
17694 }
17695 }
17696
17697 if (BV_ISSET(fields, 30)) {
17698 log_packet_detailed(" field 'turn_last_built' has changed");
17699
17700#ifdef FREECIV_JSON_CONNECTION
17701 field_addr.name = "turn_last_built";
17702#endif /* FREECIV_JSON_CONNECTION */
17703 e = 0;
17704
17705 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
17706
17707 if (e) {
17708 log_packet_detailed("'turn_last_built' field error detected");
17709 }
17710 }
17711
17712 if (BV_ISSET(fields, 31)) {
17713 log_packet_detailed(" field 'changed_from_kind' has changed");
17714
17715#ifdef FREECIV_JSON_CONNECTION
17716 field_addr.name = "changed_from_kind";
17717#endif /* FREECIV_JSON_CONNECTION */
17718 e = 0;
17719
17720 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
17721
17722 if (e) {
17723 log_packet_detailed("'changed_from_kind' field error detected");
17724 }
17725 }
17726
17727 if (BV_ISSET(fields, 32)) {
17728 log_packet_detailed(" field 'changed_from_value' has changed");
17729
17730#ifdef FREECIV_JSON_CONNECTION
17731 field_addr.name = "changed_from_value";
17732#endif /* FREECIV_JSON_CONNECTION */
17733 e = 0;
17734
17735 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
17736
17737 if (e) {
17738 log_packet_detailed("'changed_from_value' field error detected");
17739 }
17740 }
17741
17742 if (BV_ISSET(fields, 33)) {
17743 log_packet_detailed(" field 'before_change_shields' has changed");
17744
17745#ifdef FREECIV_JSON_CONNECTION
17746 field_addr.name = "before_change_shields";
17747#endif /* FREECIV_JSON_CONNECTION */
17748 e = 0;
17749
17750 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
17751
17752 if (e) {
17753 log_packet_detailed("'before_change_shields' field error detected");
17754 }
17755 }
17756
17757 if (BV_ISSET(fields, 34)) {
17758 log_packet_detailed(" field 'disbanded_shields' has changed");
17759
17760#ifdef FREECIV_JSON_CONNECTION
17761 field_addr.name = "disbanded_shields";
17762#endif /* FREECIV_JSON_CONNECTION */
17763 e = 0;
17764
17765 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
17766
17767 if (e) {
17768 log_packet_detailed("'disbanded_shields' field error detected");
17769 }
17770 }
17771
17772 if (BV_ISSET(fields, 35)) {
17773 log_packet_detailed(" field 'caravan_shields' has changed");
17774
17775#ifdef FREECIV_JSON_CONNECTION
17776 field_addr.name = "caravan_shields";
17777#endif /* FREECIV_JSON_CONNECTION */
17778 e = 0;
17779
17780 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
17781
17782 if (e) {
17783 log_packet_detailed("'caravan_shields' field error detected");
17784 }
17785 }
17786
17787 if (BV_ISSET(fields, 36)) {
17788 log_packet_detailed(" field 'last_turns_shield_surplus' has changed");
17789
17790#ifdef FREECIV_JSON_CONNECTION
17791 field_addr.name = "last_turns_shield_surplus";
17792#endif /* FREECIV_JSON_CONNECTION */
17793 e = 0;
17794
17795 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
17796
17797 if (e) {
17798 log_packet_detailed("'last_turns_shield_surplus' field error detected");
17799 }
17800 }
17801
17802 if (BV_ISSET(fields, 37)) {
17803 log_packet_detailed(" field 'airlift' has changed");
17804
17805#ifdef FREECIV_JSON_CONNECTION
17806 field_addr.name = "airlift";
17807#endif /* FREECIV_JSON_CONNECTION */
17808 e = 0;
17809
17810 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
17811
17812 if (e) {
17813 log_packet_detailed("'airlift' field error detected");
17814 }
17815 }
17816
17817 /* field 38 is folded into the header */
17818
17819 /* field 39 is folded into the header */
17820
17821 /* field 40 is folded into the header */
17822
17823 /* field 41 is folded into the header */
17824
17825 if (BV_ISSET(fields, 42)) {
17826 log_packet_detailed(" field 'anarchy' has changed");
17827
17828#ifdef FREECIV_JSON_CONNECTION
17829 field_addr.name = "anarchy";
17830#endif /* FREECIV_JSON_CONNECTION */
17831 e = 0;
17832
17833 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
17834
17835 if (e) {
17836 log_packet_detailed("'anarchy' field error detected");
17837 }
17838 }
17839
17840 if (BV_ISSET(fields, 43)) {
17841 log_packet_detailed(" field 'rapture' has changed");
17842
17843#ifdef FREECIV_JSON_CONNECTION
17844 field_addr.name = "rapture";
17845#endif /* FREECIV_JSON_CONNECTION */
17846 e = 0;
17847
17848 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
17849
17850 if (e) {
17851 log_packet_detailed("'rapture' field error detected");
17852 }
17853 }
17854
17855 /* field 44 is folded into the header */
17856
17857 if (BV_ISSET(fields, 45)) {
17858 log_packet_detailed(" field 'walls' has changed");
17859
17860#ifdef FREECIV_JSON_CONNECTION
17861 field_addr.name = "walls";
17862#endif /* FREECIV_JSON_CONNECTION */
17863 e = 0;
17864
17865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
17866
17867 if (e) {
17868 log_packet_detailed("'walls' field error detected");
17869 }
17870 }
17871
17872 if (BV_ISSET(fields, 46)) {
17873 log_packet_detailed(" field 'city_image' has changed");
17874
17875#ifdef FREECIV_JSON_CONNECTION
17876 field_addr.name = "city_image";
17877#endif /* FREECIV_JSON_CONNECTION */
17878 e = 0;
17879
17880 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
17881
17882 if (e) {
17883 log_packet_detailed("'city_image' field error detected");
17884 }
17885 }
17886
17887 if (BV_ISSET(fields, 47)) {
17888 log_packet_detailed(" field 'steal' has changed");
17889
17890#ifdef FREECIV_JSON_CONNECTION
17891 field_addr.name = "steal";
17892#endif /* FREECIV_JSON_CONNECTION */
17893 e = 0;
17894
17895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
17896
17897 if (e) {
17898 log_packet_detailed("'steal' field error detected");
17899 }
17900 }
17901
17902 if (BV_ISSET(fields, 48)) {
17903 log_packet_detailed(" field 'worklist' has changed");
17904
17905#ifdef FREECIV_JSON_CONNECTION
17906 field_addr.name = "worklist";
17907#endif /* FREECIV_JSON_CONNECTION */
17908 e = 0;
17909
17910 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
17911
17912 if (e) {
17913 log_packet_detailed("'worklist' field error detected");
17914 }
17915 }
17916
17917 if (BV_ISSET(fields, 49)) {
17918 log_packet_detailed(" field 'improvements' has changed");
17919
17920#ifdef FREECIV_JSON_CONNECTION
17921 field_addr.name = "improvements";
17922#endif /* FREECIV_JSON_CONNECTION */
17923 e = 0;
17924
17925 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
17926
17927 if (e) {
17928 log_packet_detailed("'improvements' field error detected");
17929 }
17930 }
17931
17932 if (BV_ISSET(fields, 50)) {
17933 log_packet_detailed(" field 'city_options' has changed");
17934
17935#ifdef FREECIV_JSON_CONNECTION
17936 field_addr.name = "city_options";
17937#endif /* FREECIV_JSON_CONNECTION */
17938 e = 0;
17939
17940 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
17941
17942 if (e) {
17943 log_packet_detailed("'city_options' field error detected");
17944 }
17945 }
17946
17947 if (BV_ISSET(fields, 51)) {
17948 log_packet_detailed(" field 'wl_cb' has changed");
17949
17950#ifdef FREECIV_JSON_CONNECTION
17951 field_addr.name = "wl_cb";
17952#endif /* FREECIV_JSON_CONNECTION */
17953 e = 0;
17954
17955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
17956
17957 if (e) {
17958 log_packet_detailed("'wl_cb' field error detected");
17959 }
17960 }
17961
17962 if (BV_ISSET(fields, 52)) {
17963 log_packet_detailed(" field 'acquire_type' has changed");
17964
17965#ifdef FREECIV_JSON_CONNECTION
17966 field_addr.name = "acquire_type";
17967#endif /* FREECIV_JSON_CONNECTION */
17968 e = 0;
17969
17970 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
17971
17972 if (e) {
17973 log_packet_detailed("'acquire_type' field error detected");
17974 }
17975 }
17976
17977 if (BV_ISSET(fields, 53)) {
17978 log_packet_detailed(" field 'name' has changed");
17979
17980#ifdef FREECIV_JSON_CONNECTION
17981 field_addr.name = "name";
17982#endif /* FREECIV_JSON_CONNECTION */
17983 e = 0;
17984
17985 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
17986
17987 if (e) {
17988 log_packet_detailed("'name' field error detected");
17989 }
17990 }
17991
17992 *old = *real_packet;
17993
17994 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
17995 if (nullptr != *hash) {
17997 }
17998
17999#else /* FREECIV_DELTA_PROTOCOL */
18000#ifdef FREECIV_JSON_CONNECTION
18001 field_addr.name = "tile";
18002#endif /* FREECIV_JSON_CONNECTION */
18003 e = 0;
18004
18005 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
18006
18007 if (e) {
18008 log_packet_detailed("'tile' field error detected");
18009 }
18010
18011#ifdef FREECIV_JSON_CONNECTION
18012 field_addr.name = "owner";
18013#endif /* FREECIV_JSON_CONNECTION */
18014 e = 0;
18015
18016 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
18017
18018 if (e) {
18019 log_packet_detailed("'owner' field error detected");
18020 }
18021
18022#ifdef FREECIV_JSON_CONNECTION
18023 field_addr.name = "original";
18024#endif /* FREECIV_JSON_CONNECTION */
18025 e = 0;
18026
18027 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
18028
18029 if (e) {
18030 log_packet_detailed("'original' field error detected");
18031 }
18032
18033#ifdef FREECIV_JSON_CONNECTION
18034 field_addr.name = "size";
18035#endif /* FREECIV_JSON_CONNECTION */
18036 e = 0;
18037
18038 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
18039
18040 if (e) {
18041 log_packet_detailed("'size' field error detected");
18042 }
18043
18044#ifdef FREECIV_JSON_CONNECTION
18045 field_addr.name = "city_radius_sq";
18046#endif /* FREECIV_JSON_CONNECTION */
18047 e = 0;
18048
18049 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
18050
18051 if (e) {
18052 log_packet_detailed("'city_radius_sq' field error detected");
18053 }
18054
18055#ifdef FREECIV_JSON_CONNECTION
18056 field_addr.name = "style";
18057#endif /* FREECIV_JSON_CONNECTION */
18058 e = 0;
18059
18060 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
18061
18062 if (e) {
18063 log_packet_detailed("'style' field error detected");
18064 }
18065
18066#ifdef FREECIV_JSON_CONNECTION
18067 field_addr.name = "capital";
18068#endif /* FREECIV_JSON_CONNECTION */
18069 e = 0;
18070
18071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
18072
18073 if (e) {
18074 log_packet_detailed("'capital' field error detected");
18075 }
18076
18077#ifdef FREECIV_JSON_CONNECTION
18078 field_addr.name = "ppl_happy";
18079#endif /* FREECIV_JSON_CONNECTION */
18080 e = 0;
18081
18082 {
18083 int i;
18084
18085#ifdef FREECIV_JSON_CONNECTION
18086 /* Create the array. */
18088
18089 /* Enter array. */
18090 field_addr.sub_location = plocation_elem_new(0);
18091#endif /* FREECIV_JSON_CONNECTION */
18092
18093 for (i = 0; i < FEELING_LAST; i++) {
18094#ifdef FREECIV_JSON_CONNECTION
18095 /* Next array element. */
18096 field_addr.sub_location->number = i;
18097#endif /* FREECIV_JSON_CONNECTION */
18098
18099 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
18100 }
18101
18102#ifdef FREECIV_JSON_CONNECTION
18103 /* Exit array. */
18104 FC_FREE(field_addr.sub_location);
18105#endif /* FREECIV_JSON_CONNECTION */
18106 }
18107
18108 if (e) {
18109 log_packet_detailed("'ppl_happy' field error detected");
18110 }
18111
18112#ifdef FREECIV_JSON_CONNECTION
18113 field_addr.name = "ppl_content";
18114#endif /* FREECIV_JSON_CONNECTION */
18115 e = 0;
18116
18117 {
18118 int i;
18119
18120#ifdef FREECIV_JSON_CONNECTION
18121 /* Create the array. */
18123
18124 /* Enter array. */
18125 field_addr.sub_location = plocation_elem_new(0);
18126#endif /* FREECIV_JSON_CONNECTION */
18127
18128 for (i = 0; i < FEELING_LAST; i++) {
18129#ifdef FREECIV_JSON_CONNECTION
18130 /* Next array element. */
18131 field_addr.sub_location->number = i;
18132#endif /* FREECIV_JSON_CONNECTION */
18133
18134 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
18135 }
18136
18137#ifdef FREECIV_JSON_CONNECTION
18138 /* Exit array. */
18139 FC_FREE(field_addr.sub_location);
18140#endif /* FREECIV_JSON_CONNECTION */
18141 }
18142
18143 if (e) {
18144 log_packet_detailed("'ppl_content' field error detected");
18145 }
18146
18147#ifdef FREECIV_JSON_CONNECTION
18148 field_addr.name = "ppl_unhappy";
18149#endif /* FREECIV_JSON_CONNECTION */
18150 e = 0;
18151
18152 {
18153 int i;
18154
18155#ifdef FREECIV_JSON_CONNECTION
18156 /* Create the array. */
18158
18159 /* Enter array. */
18160 field_addr.sub_location = plocation_elem_new(0);
18161#endif /* FREECIV_JSON_CONNECTION */
18162
18163 for (i = 0; i < FEELING_LAST; i++) {
18164#ifdef FREECIV_JSON_CONNECTION
18165 /* Next array element. */
18166 field_addr.sub_location->number = i;
18167#endif /* FREECIV_JSON_CONNECTION */
18168
18169 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
18170 }
18171
18172#ifdef FREECIV_JSON_CONNECTION
18173 /* Exit array. */
18174 FC_FREE(field_addr.sub_location);
18175#endif /* FREECIV_JSON_CONNECTION */
18176 }
18177
18178 if (e) {
18179 log_packet_detailed("'ppl_unhappy' field error detected");
18180 }
18181
18182#ifdef FREECIV_JSON_CONNECTION
18183 field_addr.name = "ppl_angry";
18184#endif /* FREECIV_JSON_CONNECTION */
18185 e = 0;
18186
18187 {
18188 int i;
18189
18190#ifdef FREECIV_JSON_CONNECTION
18191 /* Create the array. */
18193
18194 /* Enter array. */
18195 field_addr.sub_location = plocation_elem_new(0);
18196#endif /* FREECIV_JSON_CONNECTION */
18197
18198 for (i = 0; i < FEELING_LAST; i++) {
18199#ifdef FREECIV_JSON_CONNECTION
18200 /* Next array element. */
18201 field_addr.sub_location->number = i;
18202#endif /* FREECIV_JSON_CONNECTION */
18203
18204 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
18205 }
18206
18207#ifdef FREECIV_JSON_CONNECTION
18208 /* Exit array. */
18209 FC_FREE(field_addr.sub_location);
18210#endif /* FREECIV_JSON_CONNECTION */
18211 }
18212
18213 if (e) {
18214 log_packet_detailed("'ppl_angry' field error detected");
18215 }
18216
18217#ifdef FREECIV_JSON_CONNECTION
18218 field_addr.name = "specialists_size";
18219#endif /* FREECIV_JSON_CONNECTION */
18220 e = 0;
18221
18222 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
18223
18224 if (e) {
18225 log_packet_detailed("'specialists_size' field error detected");
18226 }
18227
18228#ifdef FREECIV_JSON_CONNECTION
18229 field_addr.name = "specialists";
18230#endif /* FREECIV_JSON_CONNECTION */
18231 e = 0;
18232
18233 {
18234 int i;
18235
18236#ifdef FREECIV_JSON_CONNECTION
18237 /* Create the array. */
18238 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
18239
18240 /* Enter array. */
18241 field_addr.sub_location = plocation_elem_new(0);
18242#endif /* FREECIV_JSON_CONNECTION */
18243
18244 for (i = 0; i < real_packet->specialists_size; i++) {
18245#ifdef FREECIV_JSON_CONNECTION
18246 /* Next array element. */
18247 field_addr.sub_location->number = i;
18248#endif /* FREECIV_JSON_CONNECTION */
18249
18250 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
18251 }
18252
18253#ifdef FREECIV_JSON_CONNECTION
18254 /* Exit array. */
18255 FC_FREE(field_addr.sub_location);
18256#endif /* FREECIV_JSON_CONNECTION */
18257 }
18258
18259 if (e) {
18260 log_packet_detailed("'specialists' field error detected");
18261 }
18262
18263#ifdef FREECIV_JSON_CONNECTION
18264 field_addr.name = "history";
18265#endif /* FREECIV_JSON_CONNECTION */
18266 e = 0;
18267
18268 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
18269
18270 if (e) {
18271 log_packet_detailed("'history' field error detected");
18272 }
18273
18274#ifdef FREECIV_JSON_CONNECTION
18275 field_addr.name = "culture";
18276#endif /* FREECIV_JSON_CONNECTION */
18277 e = 0;
18278
18279 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
18280
18281 if (e) {
18282 log_packet_detailed("'culture' field error detected");
18283 }
18284
18285#ifdef FREECIV_JSON_CONNECTION
18286 field_addr.name = "buy_cost";
18287#endif /* FREECIV_JSON_CONNECTION */
18288 e = 0;
18289
18290 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
18291
18292 if (e) {
18293 log_packet_detailed("'buy_cost' field error detected");
18294 }
18295
18296#ifdef FREECIV_JSON_CONNECTION
18297 field_addr.name = "surplus";
18298#endif /* FREECIV_JSON_CONNECTION */
18299 e = 0;
18300
18301 {
18302 int i;
18303
18304#ifdef FREECIV_JSON_CONNECTION
18305 /* Create the array. */
18306 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18307
18308 /* Enter array. */
18309 field_addr.sub_location = plocation_elem_new(0);
18310#endif /* FREECIV_JSON_CONNECTION */
18311
18312 for (i = 0; i < O_LAST; i++) {
18313#ifdef FREECIV_JSON_CONNECTION
18314 /* Next array element. */
18315 field_addr.sub_location->number = i;
18316#endif /* FREECIV_JSON_CONNECTION */
18317
18318 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
18319 }
18320
18321#ifdef FREECIV_JSON_CONNECTION
18322 /* Exit array. */
18323 FC_FREE(field_addr.sub_location);
18324#endif /* FREECIV_JSON_CONNECTION */
18325 }
18326
18327 if (e) {
18328 log_packet_detailed("'surplus' field error detected");
18329 }
18330
18331#ifdef FREECIV_JSON_CONNECTION
18332 field_addr.name = "waste";
18333#endif /* FREECIV_JSON_CONNECTION */
18334 e = 0;
18335
18336 {
18337 int i;
18338
18339#ifdef FREECIV_JSON_CONNECTION
18340 /* Create the array. */
18341 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18342
18343 /* Enter array. */
18344 field_addr.sub_location = plocation_elem_new(0);
18345#endif /* FREECIV_JSON_CONNECTION */
18346
18347 for (i = 0; i < O_LAST; i++) {
18348#ifdef FREECIV_JSON_CONNECTION
18349 /* Next array element. */
18350 field_addr.sub_location->number = i;
18351#endif /* FREECIV_JSON_CONNECTION */
18352
18353 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
18354 }
18355
18356#ifdef FREECIV_JSON_CONNECTION
18357 /* Exit array. */
18358 FC_FREE(field_addr.sub_location);
18359#endif /* FREECIV_JSON_CONNECTION */
18360 }
18361
18362 if (e) {
18363 log_packet_detailed("'waste' field error detected");
18364 }
18365
18366#ifdef FREECIV_JSON_CONNECTION
18367 field_addr.name = "unhappy_penalty";
18368#endif /* FREECIV_JSON_CONNECTION */
18369 e = 0;
18370
18371 {
18372 int i;
18373
18374#ifdef FREECIV_JSON_CONNECTION
18375 /* Create the array. */
18376 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18377
18378 /* Enter array. */
18379 field_addr.sub_location = plocation_elem_new(0);
18380#endif /* FREECIV_JSON_CONNECTION */
18381
18382 for (i = 0; i < O_LAST; i++) {
18383#ifdef FREECIV_JSON_CONNECTION
18384 /* Next array element. */
18385 field_addr.sub_location->number = i;
18386#endif /* FREECIV_JSON_CONNECTION */
18387
18388 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
18389 }
18390
18391#ifdef FREECIV_JSON_CONNECTION
18392 /* Exit array. */
18393 FC_FREE(field_addr.sub_location);
18394#endif /* FREECIV_JSON_CONNECTION */
18395 }
18396
18397 if (e) {
18398 log_packet_detailed("'unhappy_penalty' field error detected");
18399 }
18400
18401#ifdef FREECIV_JSON_CONNECTION
18402 field_addr.name = "prod";
18403#endif /* FREECIV_JSON_CONNECTION */
18404 e = 0;
18405
18406 {
18407 int i;
18408
18409#ifdef FREECIV_JSON_CONNECTION
18410 /* Create the array. */
18411 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18412
18413 /* Enter array. */
18414 field_addr.sub_location = plocation_elem_new(0);
18415#endif /* FREECIV_JSON_CONNECTION */
18416
18417 for (i = 0; i < O_LAST; i++) {
18418#ifdef FREECIV_JSON_CONNECTION
18419 /* Next array element. */
18420 field_addr.sub_location->number = i;
18421#endif /* FREECIV_JSON_CONNECTION */
18422
18423 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
18424 }
18425
18426#ifdef FREECIV_JSON_CONNECTION
18427 /* Exit array. */
18428 FC_FREE(field_addr.sub_location);
18429#endif /* FREECIV_JSON_CONNECTION */
18430 }
18431
18432 if (e) {
18433 log_packet_detailed("'prod' field error detected");
18434 }
18435
18436#ifdef FREECIV_JSON_CONNECTION
18437 field_addr.name = "citizen_base";
18438#endif /* FREECIV_JSON_CONNECTION */
18439 e = 0;
18440
18441 {
18442 int i;
18443
18444#ifdef FREECIV_JSON_CONNECTION
18445 /* Create the array. */
18446 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18447
18448 /* Enter array. */
18449 field_addr.sub_location = plocation_elem_new(0);
18450#endif /* FREECIV_JSON_CONNECTION */
18451
18452 for (i = 0; i < O_LAST; i++) {
18453#ifdef FREECIV_JSON_CONNECTION
18454 /* Next array element. */
18455 field_addr.sub_location->number = i;
18456#endif /* FREECIV_JSON_CONNECTION */
18457
18458 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
18459 }
18460
18461#ifdef FREECIV_JSON_CONNECTION
18462 /* Exit array. */
18463 FC_FREE(field_addr.sub_location);
18464#endif /* FREECIV_JSON_CONNECTION */
18465 }
18466
18467 if (e) {
18468 log_packet_detailed("'citizen_base' field error detected");
18469 }
18470
18471#ifdef FREECIV_JSON_CONNECTION
18472 field_addr.name = "usage";
18473#endif /* FREECIV_JSON_CONNECTION */
18474 e = 0;
18475
18476 {
18477 int i;
18478
18479#ifdef FREECIV_JSON_CONNECTION
18480 /* Create the array. */
18481 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18482
18483 /* Enter array. */
18484 field_addr.sub_location = plocation_elem_new(0);
18485#endif /* FREECIV_JSON_CONNECTION */
18486
18487 for (i = 0; i < O_LAST; i++) {
18488#ifdef FREECIV_JSON_CONNECTION
18489 /* Next array element. */
18490 field_addr.sub_location->number = i;
18491#endif /* FREECIV_JSON_CONNECTION */
18492
18493 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
18494 }
18495
18496#ifdef FREECIV_JSON_CONNECTION
18497 /* Exit array. */
18498 FC_FREE(field_addr.sub_location);
18499#endif /* FREECIV_JSON_CONNECTION */
18500 }
18501
18502 if (e) {
18503 log_packet_detailed("'usage' field error detected");
18504 }
18505
18506#ifdef FREECIV_JSON_CONNECTION
18507 field_addr.name = "food_stock";
18508#endif /* FREECIV_JSON_CONNECTION */
18509 e = 0;
18510
18511 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
18512
18513 if (e) {
18514 log_packet_detailed("'food_stock' field error detected");
18515 }
18516
18517#ifdef FREECIV_JSON_CONNECTION
18518 field_addr.name = "shield_stock";
18519#endif /* FREECIV_JSON_CONNECTION */
18520 e = 0;
18521
18522 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
18523
18524 if (e) {
18525 log_packet_detailed("'shield_stock' field error detected");
18526 }
18527
18528#ifdef FREECIV_JSON_CONNECTION
18529 field_addr.name = "trade_route_count";
18530#endif /* FREECIV_JSON_CONNECTION */
18531 e = 0;
18532
18533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
18534
18535 if (e) {
18536 log_packet_detailed("'trade_route_count' field error detected");
18537 }
18538
18539#ifdef FREECIV_JSON_CONNECTION
18540 field_addr.name = "pollution";
18541#endif /* FREECIV_JSON_CONNECTION */
18542 e = 0;
18543
18544 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
18545
18546 if (e) {
18547 log_packet_detailed("'pollution' field error detected");
18548 }
18549
18550#ifdef FREECIV_JSON_CONNECTION
18551 field_addr.name = "illness_trade";
18552#endif /* FREECIV_JSON_CONNECTION */
18553 e = 0;
18554
18555 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
18556
18557 if (e) {
18558 log_packet_detailed("'illness_trade' field error detected");
18559 }
18560
18561#ifdef FREECIV_JSON_CONNECTION
18562 field_addr.name = "production_kind";
18563#endif /* FREECIV_JSON_CONNECTION */
18564 e = 0;
18565
18566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18567
18568 if (e) {
18569 log_packet_detailed("'production_kind' field error detected");
18570 }
18571
18572#ifdef FREECIV_JSON_CONNECTION
18573 field_addr.name = "production_value";
18574#endif /* FREECIV_JSON_CONNECTION */
18575 e = 0;
18576
18577 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18578
18579 if (e) {
18580 log_packet_detailed("'production_value' field error detected");
18581 }
18582
18583#ifdef FREECIV_JSON_CONNECTION
18584 field_addr.name = "turn_founded";
18585#endif /* FREECIV_JSON_CONNECTION */
18586 e = 0;
18587
18588 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
18589
18590 if (e) {
18591 log_packet_detailed("'turn_founded' field error detected");
18592 }
18593
18594#ifdef FREECIV_JSON_CONNECTION
18595 field_addr.name = "turn_last_built";
18596#endif /* FREECIV_JSON_CONNECTION */
18597 e = 0;
18598
18599 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
18600
18601 if (e) {
18602 log_packet_detailed("'turn_last_built' field error detected");
18603 }
18604
18605#ifdef FREECIV_JSON_CONNECTION
18606 field_addr.name = "changed_from_kind";
18607#endif /* FREECIV_JSON_CONNECTION */
18608 e = 0;
18609
18610 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
18611
18612 if (e) {
18613 log_packet_detailed("'changed_from_kind' field error detected");
18614 }
18615
18616#ifdef FREECIV_JSON_CONNECTION
18617 field_addr.name = "changed_from_value";
18618#endif /* FREECIV_JSON_CONNECTION */
18619 e = 0;
18620
18621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
18622
18623 if (e) {
18624 log_packet_detailed("'changed_from_value' field error detected");
18625 }
18626
18627#ifdef FREECIV_JSON_CONNECTION
18628 field_addr.name = "before_change_shields";
18629#endif /* FREECIV_JSON_CONNECTION */
18630 e = 0;
18631
18632 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
18633
18634 if (e) {
18635 log_packet_detailed("'before_change_shields' field error detected");
18636 }
18637
18638#ifdef FREECIV_JSON_CONNECTION
18639 field_addr.name = "disbanded_shields";
18640#endif /* FREECIV_JSON_CONNECTION */
18641 e = 0;
18642
18643 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
18644
18645 if (e) {
18646 log_packet_detailed("'disbanded_shields' field error detected");
18647 }
18648
18649#ifdef FREECIV_JSON_CONNECTION
18650 field_addr.name = "caravan_shields";
18651#endif /* FREECIV_JSON_CONNECTION */
18652 e = 0;
18653
18654 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
18655
18656 if (e) {
18657 log_packet_detailed("'caravan_shields' field error detected");
18658 }
18659
18660#ifdef FREECIV_JSON_CONNECTION
18661 field_addr.name = "last_turns_shield_surplus";
18662#endif /* FREECIV_JSON_CONNECTION */
18663 e = 0;
18664
18665 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
18666
18667 if (e) {
18668 log_packet_detailed("'last_turns_shield_surplus' field error detected");
18669 }
18670
18671#ifdef FREECIV_JSON_CONNECTION
18672 field_addr.name = "airlift";
18673#endif /* FREECIV_JSON_CONNECTION */
18674 e = 0;
18675
18676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
18677
18678 if (e) {
18679 log_packet_detailed("'airlift' field error detected");
18680 }
18681
18682#ifdef FREECIV_JSON_CONNECTION
18683 field_addr.name = "did_buy";
18684#endif /* FREECIV_JSON_CONNECTION */
18685 e = 0;
18686
18687 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
18688
18689 if (e) {
18690 log_packet_detailed("'did_buy' field error detected");
18691 }
18692
18693#ifdef FREECIV_JSON_CONNECTION
18694 field_addr.name = "did_sell";
18695#endif /* FREECIV_JSON_CONNECTION */
18696 e = 0;
18697
18698 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
18699
18700 if (e) {
18701 log_packet_detailed("'did_sell' field error detected");
18702 }
18703
18704#ifdef FREECIV_JSON_CONNECTION
18705 field_addr.name = "was_happy";
18706#endif /* FREECIV_JSON_CONNECTION */
18707 e = 0;
18708
18709 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
18710
18711 if (e) {
18712 log_packet_detailed("'was_happy' field error detected");
18713 }
18714
18715#ifdef FREECIV_JSON_CONNECTION
18716 field_addr.name = "had_famine";
18717#endif /* FREECIV_JSON_CONNECTION */
18718 e = 0;
18719
18720 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
18721
18722 if (e) {
18723 log_packet_detailed("'had_famine' field error detected");
18724 }
18725
18726#ifdef FREECIV_JSON_CONNECTION
18727 field_addr.name = "anarchy";
18728#endif /* FREECIV_JSON_CONNECTION */
18729 e = 0;
18730
18731 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
18732
18733 if (e) {
18734 log_packet_detailed("'anarchy' field error detected");
18735 }
18736
18737#ifdef FREECIV_JSON_CONNECTION
18738 field_addr.name = "rapture";
18739#endif /* FREECIV_JSON_CONNECTION */
18740 e = 0;
18741
18742 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
18743
18744 if (e) {
18745 log_packet_detailed("'rapture' field error detected");
18746 }
18747
18748#ifdef FREECIV_JSON_CONNECTION
18749 field_addr.name = "diplomat_investigate";
18750#endif /* FREECIV_JSON_CONNECTION */
18751 e = 0;
18752
18753 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->diplomat_investigate);
18754
18755 if (e) {
18756 log_packet_detailed("'diplomat_investigate' field error detected");
18757 }
18758
18759#ifdef FREECIV_JSON_CONNECTION
18760 field_addr.name = "walls";
18761#endif /* FREECIV_JSON_CONNECTION */
18762 e = 0;
18763
18764 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
18765
18766 if (e) {
18767 log_packet_detailed("'walls' field error detected");
18768 }
18769
18770#ifdef FREECIV_JSON_CONNECTION
18771 field_addr.name = "city_image";
18772#endif /* FREECIV_JSON_CONNECTION */
18773 e = 0;
18774
18775 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
18776
18777 if (e) {
18778 log_packet_detailed("'city_image' field error detected");
18779 }
18780
18781#ifdef FREECIV_JSON_CONNECTION
18782 field_addr.name = "steal";
18783#endif /* FREECIV_JSON_CONNECTION */
18784 e = 0;
18785
18786 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
18787
18788 if (e) {
18789 log_packet_detailed("'steal' field error detected");
18790 }
18791
18792#ifdef FREECIV_JSON_CONNECTION
18793 field_addr.name = "worklist";
18794#endif /* FREECIV_JSON_CONNECTION */
18795 e = 0;
18796
18797 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18798
18799 if (e) {
18800 log_packet_detailed("'worklist' field error detected");
18801 }
18802
18803#ifdef FREECIV_JSON_CONNECTION
18804 field_addr.name = "improvements";
18805#endif /* FREECIV_JSON_CONNECTION */
18806 e = 0;
18807
18808 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
18809
18810 if (e) {
18811 log_packet_detailed("'improvements' field error detected");
18812 }
18813
18814#ifdef FREECIV_JSON_CONNECTION
18815 field_addr.name = "city_options";
18816#endif /* FREECIV_JSON_CONNECTION */
18817 e = 0;
18818
18819 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->city_options);
18820
18821 if (e) {
18822 log_packet_detailed("'city_options' field error detected");
18823 }
18824
18825#ifdef FREECIV_JSON_CONNECTION
18826 field_addr.name = "wl_cb";
18827#endif /* FREECIV_JSON_CONNECTION */
18828 e = 0;
18829
18830 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
18831
18832 if (e) {
18833 log_packet_detailed("'wl_cb' field error detected");
18834 }
18835
18836#ifdef FREECIV_JSON_CONNECTION
18837 field_addr.name = "acquire_type";
18838#endif /* FREECIV_JSON_CONNECTION */
18839 e = 0;
18840
18841 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
18842
18843 if (e) {
18844 log_packet_detailed("'acquire_type' field error detected");
18845 }
18846
18847#ifdef FREECIV_JSON_CONNECTION
18848 field_addr.name = "name";
18849#endif /* FREECIV_JSON_CONNECTION */
18850 e = 0;
18851
18852 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
18853
18854 if (e) {
18855 log_packet_detailed("'name' field error detected");
18856 }
18857#endif /* FREECIV_DELTA_PROTOCOL */
18858
18860}
18861
18862int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
18863{
18864 if (!pc->used) {
18865 log_error("WARNING: trying to send data to the closed connection %s",
18867 return -1;
18868 }
18869 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send != nullptr, -1,
18870 "Handler for PACKET_CITY_INFO not installed");
18871 return pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send(pc, packet, force_to_send);
18872}
18873
18874void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
18875{
18876 conn_list_iterate(dest, pconn) {
18877 send_packet_city_info(pconn, packet, force_to_send);
18879}
18880
18882{
18883 memset(packet, 0, sizeof(*packet));
18884}
18885
18886#define free_packet_city_nationalities(_packet) (void) 0
18887#define destroy_packet_city_nationalities free
18888
18889#ifdef FREECIV_DELTA_PROTOCOL
18891{
18892 const struct packet_city_nationalities *key = (const struct packet_city_nationalities *) vkey;
18893 genhash_val_t result = 0;
18894
18895 result += key->id;
18896
18897 result &= 0xFFFFFFFF;
18898 return result;
18899}
18900
18901static bool cmp_packet_city_nationalities_100(const void *vkey1, const void *vkey2)
18902{
18903 const struct packet_city_nationalities *old = (const struct packet_city_nationalities *) vkey1;
18905 bool differ;
18906
18907 differ = (old->id != real_packet->id);
18908
18909 return !differ;
18910}
18912#endif /* FREECIV_DELTA_PROTOCOL */
18913
18915{
18916#define FREE_PACKET_STRUCT(_packet) free_packet_city_nationalities(_packet)
18918
18919#ifdef FREECIV_JSON_CONNECTION
18920 struct plocation field_addr;
18921 {
18922 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
18925 }
18926#endif /* FREECIV_JSON_CONNECTION */
18927
18928#ifdef FREECIV_JSON_CONNECTION
18929 field_addr.name = "id";
18930#endif /* FREECIV_JSON_CONNECTION */
18931
18932 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
18934 }
18935
18936 log_packet_detailed("packet_city_nationalities_100: got info about (%d)",
18937 real_packet->id);
18938
18939#ifdef FREECIV_DELTA_PROTOCOL
18942 struct genhash **hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
18943
18944 if (nullptr == *hash) {
18946 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
18947 }
18948
18949 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18950 *real_packet = *old;
18951 } else {
18952 /* packet is already initialized empty */
18953 log_packet_detailed(" no old info");
18954 }
18955
18956#ifdef FREECIV_JSON_CONNECTION
18957 field_addr.name = "fields";
18958#endif /* FREECIV_JSON_CONNECTION */
18959 DIO_BV_GET(&din, &field_addr, fields);
18960
18961 if (BV_ISSET(fields, 0)) {
18962 log_packet_detailed(" got field 'nationalities_count'");
18963
18964#ifdef FREECIV_JSON_CONNECTION
18965 field_addr.name = "nationalities_count";
18966#endif /* FREECIV_JSON_CONNECTION */
18967
18968 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
18969 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
18970 }
18971 }
18972
18973 if (BV_ISSET(fields, 1)) {
18974 log_packet_detailed(" got field 'nation_id'");
18975
18976#ifdef FREECIV_JSON_CONNECTION
18977 field_addr.name = "nation_id";
18978#endif /* FREECIV_JSON_CONNECTION */
18979
18980 {
18981 int i;
18982
18983 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
18984 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
18985 }
18986
18987#ifdef FREECIV_JSON_CONNECTION
18988 /* Enter array. */
18989 field_addr.sub_location = plocation_elem_new(0);
18990#endif /* FREECIV_JSON_CONNECTION */
18991
18992 for (i = 0; i < real_packet->nationalities_count; i++) {
18993#ifdef FREECIV_JSON_CONNECTION
18994 /* Next array element */
18995 field_addr.sub_location->number = i;
18996#endif /* FREECIV_JSON_CONNECTION */
18997
18998 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
18999 RECEIVE_PACKET_FIELD_ERROR(nation_id);
19000 }
19001 }
19002
19003#ifdef FREECIV_JSON_CONNECTION
19004 /* Exit array. */
19005 FC_FREE(field_addr.sub_location);
19006#endif /* FREECIV_JSON_CONNECTION */
19007 }
19008 }
19009
19010 if (BV_ISSET(fields, 2)) {
19011 log_packet_detailed(" got field 'nation_citizens'");
19012
19013#ifdef FREECIV_JSON_CONNECTION
19014 field_addr.name = "nation_citizens";
19015#endif /* FREECIV_JSON_CONNECTION */
19016
19017 {
19018 int i;
19019
19020 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19021 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
19022 }
19023
19024#ifdef FREECIV_JSON_CONNECTION
19025 /* Enter array. */
19026 field_addr.sub_location = plocation_elem_new(0);
19027#endif /* FREECIV_JSON_CONNECTION */
19028
19029 for (i = 0; i < real_packet->nationalities_count; i++) {
19030#ifdef FREECIV_JSON_CONNECTION
19031 /* Next array element */
19032 field_addr.sub_location->number = i;
19033#endif /* FREECIV_JSON_CONNECTION */
19034
19035 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19036 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19037 }
19038 }
19039
19040#ifdef FREECIV_JSON_CONNECTION
19041 /* Exit array. */
19042 FC_FREE(field_addr.sub_location);
19043#endif /* FREECIV_JSON_CONNECTION */
19044 }
19045 }
19046
19047 if (nullptr == old) {
19048 old = fc_malloc(sizeof(*old));
19050 *old = *real_packet;
19052 } else {
19053 *old = *real_packet;
19054 }
19055
19056#else /* FREECIV_DELTA_PROTOCOL */
19057#ifdef FREECIV_JSON_CONNECTION
19058 field_addr.name = "nationalities_count";
19059#endif /* FREECIV_JSON_CONNECTION */
19060
19061 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
19062 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
19063 }
19064
19065#ifdef FREECIV_JSON_CONNECTION
19066 field_addr.name = "nation_id";
19067#endif /* FREECIV_JSON_CONNECTION */
19068
19069 {
19070 int i;
19071
19072 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19073 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": array truncated");
19074 }
19075
19076#ifdef FREECIV_JSON_CONNECTION
19077 /* Enter array. */
19078 field_addr.sub_location = plocation_elem_new(0);
19079#endif /* FREECIV_JSON_CONNECTION */
19080
19081 for (i = 0; i < real_packet->nationalities_count; i++) {
19082#ifdef FREECIV_JSON_CONNECTION
19083 /* Next array element */
19084 field_addr.sub_location->number = i;
19085#endif /* FREECIV_JSON_CONNECTION */
19086
19087 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nation_id[i])) {
19088 RECEIVE_PACKET_FIELD_ERROR(nation_id);
19089 }
19090 }
19091
19092#ifdef FREECIV_JSON_CONNECTION
19093 /* Exit array. */
19094 FC_FREE(field_addr.sub_location);
19095#endif /* FREECIV_JSON_CONNECTION */
19096 }
19097
19098#ifdef FREECIV_JSON_CONNECTION
19099 field_addr.name = "nation_citizens";
19100#endif /* FREECIV_JSON_CONNECTION */
19101
19102 {
19103 int i;
19104
19105 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19106 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": array truncated");
19107 }
19108
19109#ifdef FREECIV_JSON_CONNECTION
19110 /* Enter array. */
19111 field_addr.sub_location = plocation_elem_new(0);
19112#endif /* FREECIV_JSON_CONNECTION */
19113
19114 for (i = 0; i < real_packet->nationalities_count; i++) {
19115#ifdef FREECIV_JSON_CONNECTION
19116 /* Next array element */
19117 field_addr.sub_location->number = i;
19118#endif /* FREECIV_JSON_CONNECTION */
19119
19120 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19121 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19122 }
19123 }
19124
19125#ifdef FREECIV_JSON_CONNECTION
19126 /* Exit array. */
19127 FC_FREE(field_addr.sub_location);
19128#endif /* FREECIV_JSON_CONNECTION */
19129 }
19130#endif /* FREECIV_DELTA_PROTOCOL */
19131
19133#undef FREE_PACKET_STRUCT
19134}
19135
19136static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19137{
19138 const struct packet_city_nationalities *real_packet = packet;
19139 int e;
19141
19142 log_packet_detailed("packet_city_nationalities_100: sending info about (%d)",
19143 real_packet->id);
19144
19145#ifdef FREECIV_DELTA_PROTOCOL
19148 bool differ;
19149 int different = force_to_send;
19150 struct genhash **hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
19151
19152 if (nullptr == *hash) {
19154 nullptr, nullptr, nullptr, destroy_packet_city_nationalities);
19155 }
19156 BV_CLR_ALL(fields);
19157
19158 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19159 old = fc_malloc(sizeof(*old));
19160 /* temporary bitcopy just to insert correctly */
19161 *old = *real_packet;
19164 different = 1; /* Force to send. */
19165 }
19166
19167 differ = (old->nationalities_count != real_packet->nationalities_count);
19168 if (differ) {
19169 different++;
19170 BV_SET(fields, 0);
19171 }
19172
19173 differ = (old->nationalities_count != real_packet->nationalities_count);
19174 if (!differ) {
19175 int i;
19176
19177 for (i = 0; i < old->nationalities_count; i++) {
19178 differ = (old->nation_id[i] != real_packet->nation_id[i]);
19179 if (differ) {
19180 break;
19181 }
19182 }
19183 }
19184 if (differ) {
19185 different++;
19186 BV_SET(fields, 1);
19187 }
19188
19189 differ = (old->nationalities_count != real_packet->nationalities_count);
19190 if (!differ) {
19191 int i;
19192
19193 for (i = 0; i < old->nationalities_count; i++) {
19194 differ = (old->nation_citizens[i] != real_packet->nation_citizens[i]);
19195 if (differ) {
19196 break;
19197 }
19198 }
19199 }
19200 if (differ) {
19201 different++;
19202 BV_SET(fields, 2);
19203 }
19204
19205 if (different == 0) {
19206 log_packet_detailed(" no change -> discard");
19208 }
19209#endif /* FREECIV_DELTA_PROTOCOL */
19210
19211#ifdef FREECIV_JSON_CONNECTION
19212 struct plocation field_addr;
19213 {
19214 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19217 }
19218#endif /* FREECIV_JSON_CONNECTION */
19219
19220#ifdef FREECIV_JSON_CONNECTION
19221 field_addr.name = "id";
19222#endif /* FREECIV_JSON_CONNECTION */
19223 e = 0;
19224
19225 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
19226
19227 if (e) {
19228 log_packet_detailed("'id' field error detected");
19229 }
19230
19231#ifdef FREECIV_DELTA_PROTOCOL
19232#ifdef FREECIV_JSON_CONNECTION
19233 field_addr.name = "fields";
19234#endif /* FREECIV_JSON_CONNECTION */
19235 e = 0;
19236 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19237 if (e) {
19238 log_packet_detailed("fields bitvector error detected");
19239 }
19240
19241 if (BV_ISSET(fields, 0)) {
19242 log_packet_detailed(" field 'nationalities_count' has changed");
19243
19244#ifdef FREECIV_JSON_CONNECTION
19245 field_addr.name = "nationalities_count";
19246#endif /* FREECIV_JSON_CONNECTION */
19247 e = 0;
19248
19249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19250
19251 if (e) {
19252 log_packet_detailed("'nationalities_count' field error detected");
19253 }
19254 }
19255
19256 if (BV_ISSET(fields, 1)) {
19257 log_packet_detailed(" field 'nation_id' has changed");
19258
19259#ifdef FREECIV_JSON_CONNECTION
19260 field_addr.name = "nation_id";
19261#endif /* FREECIV_JSON_CONNECTION */
19262 e = 0;
19263
19264 {
19265 int i;
19266
19267#ifdef FREECIV_JSON_CONNECTION
19268 /* Create the array. */
19269 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19270
19271 /* Enter array. */
19272 field_addr.sub_location = plocation_elem_new(0);
19273#endif /* FREECIV_JSON_CONNECTION */
19274
19275 for (i = 0; i < real_packet->nationalities_count; i++) {
19276#ifdef FREECIV_JSON_CONNECTION
19277 /* Next array element. */
19278 field_addr.sub_location->number = i;
19279#endif /* FREECIV_JSON_CONNECTION */
19280
19281 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19282 }
19283
19284#ifdef FREECIV_JSON_CONNECTION
19285 /* Exit array. */
19286 FC_FREE(field_addr.sub_location);
19287#endif /* FREECIV_JSON_CONNECTION */
19288 }
19289
19290 if (e) {
19291 log_packet_detailed("'nation_id' field error detected");
19292 }
19293 }
19294
19295 if (BV_ISSET(fields, 2)) {
19296 log_packet_detailed(" field 'nation_citizens' has changed");
19297
19298#ifdef FREECIV_JSON_CONNECTION
19299 field_addr.name = "nation_citizens";
19300#endif /* FREECIV_JSON_CONNECTION */
19301 e = 0;
19302
19303 {
19304 int i;
19305
19306#ifdef FREECIV_JSON_CONNECTION
19307 /* Create the array. */
19308 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19309
19310 /* Enter array. */
19311 field_addr.sub_location = plocation_elem_new(0);
19312#endif /* FREECIV_JSON_CONNECTION */
19313
19314 for (i = 0; i < real_packet->nationalities_count; i++) {
19315#ifdef FREECIV_JSON_CONNECTION
19316 /* Next array element. */
19317 field_addr.sub_location->number = i;
19318#endif /* FREECIV_JSON_CONNECTION */
19319
19320 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19321 }
19322
19323#ifdef FREECIV_JSON_CONNECTION
19324 /* Exit array. */
19325 FC_FREE(field_addr.sub_location);
19326#endif /* FREECIV_JSON_CONNECTION */
19327 }
19328
19329 if (e) {
19330 log_packet_detailed("'nation_citizens' field error detected");
19331 }
19332 }
19333
19334 *old = *real_packet;
19335
19336#else /* FREECIV_DELTA_PROTOCOL */
19337#ifdef FREECIV_JSON_CONNECTION
19338 field_addr.name = "nationalities_count";
19339#endif /* FREECIV_JSON_CONNECTION */
19340 e = 0;
19341
19342 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19343
19344 if (e) {
19345 log_packet_detailed("'nationalities_count' field error detected");
19346 }
19347
19348#ifdef FREECIV_JSON_CONNECTION
19349 field_addr.name = "nation_id";
19350#endif /* FREECIV_JSON_CONNECTION */
19351 e = 0;
19352
19353 {
19354 int i;
19355
19356#ifdef FREECIV_JSON_CONNECTION
19357 /* Create the array. */
19358 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19359
19360 /* Enter array. */
19361 field_addr.sub_location = plocation_elem_new(0);
19362#endif /* FREECIV_JSON_CONNECTION */
19363
19364 for (i = 0; i < real_packet->nationalities_count; i++) {
19365#ifdef FREECIV_JSON_CONNECTION
19366 /* Next array element. */
19367 field_addr.sub_location->number = i;
19368#endif /* FREECIV_JSON_CONNECTION */
19369
19370 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_id[i]);
19371 }
19372
19373#ifdef FREECIV_JSON_CONNECTION
19374 /* Exit array. */
19375 FC_FREE(field_addr.sub_location);
19376#endif /* FREECIV_JSON_CONNECTION */
19377 }
19378
19379 if (e) {
19380 log_packet_detailed("'nation_id' field error detected");
19381 }
19382
19383#ifdef FREECIV_JSON_CONNECTION
19384 field_addr.name = "nation_citizens";
19385#endif /* FREECIV_JSON_CONNECTION */
19386 e = 0;
19387
19388 {
19389 int i;
19390
19391#ifdef FREECIV_JSON_CONNECTION
19392 /* Create the array. */
19393 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19394
19395 /* Enter array. */
19396 field_addr.sub_location = plocation_elem_new(0);
19397#endif /* FREECIV_JSON_CONNECTION */
19398
19399 for (i = 0; i < real_packet->nationalities_count; i++) {
19400#ifdef FREECIV_JSON_CONNECTION
19401 /* Next array element. */
19402 field_addr.sub_location->number = i;
19403#endif /* FREECIV_JSON_CONNECTION */
19404
19405 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19406 }
19407
19408#ifdef FREECIV_JSON_CONNECTION
19409 /* Exit array. */
19410 FC_FREE(field_addr.sub_location);
19411#endif /* FREECIV_JSON_CONNECTION */
19412 }
19413
19414 if (e) {
19415 log_packet_detailed("'nation_citizens' field error detected");
19416 }
19417#endif /* FREECIV_DELTA_PROTOCOL */
19418
19420}
19421
19422int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19423{
19424 if (!pc->used) {
19425 log_error("WARNING: trying to send data to the closed connection %s",
19427 return -1;
19428 }
19429 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send != nullptr, -1,
19430 "Handler for PACKET_CITY_NATIONALITIES not installed");
19431 return pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send(pc, packet, force_to_send);
19432}
19433
19434void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
19435{
19436 conn_list_iterate(dest, pconn) {
19437 send_packet_city_nationalities(pconn, packet, force_to_send);
19439}
19440
19442{
19443 memset(packet, 0, sizeof(*packet));
19444}
19445
19446#define free_packet_city_update_counters(_packet) (void) 0
19447#define destroy_packet_city_update_counters free
19448
19449#ifdef FREECIV_DELTA_PROTOCOL
19451{
19452 const struct packet_city_update_counters *key = (const struct packet_city_update_counters *) vkey;
19453 genhash_val_t result = 0;
19454
19455 result += key->city;
19456
19457 result &= 0xFFFFFFFF;
19458 return result;
19459}
19460
19461static bool cmp_packet_city_update_counters_100(const void *vkey1, const void *vkey2)
19462{
19463 const struct packet_city_update_counters *old = (const struct packet_city_update_counters *) vkey1;
19465 bool differ;
19466
19467 differ = (old->city != real_packet->city);
19468
19469 return !differ;
19470}
19472#endif /* FREECIV_DELTA_PROTOCOL */
19473
19475{
19476#define FREE_PACKET_STRUCT(_packet) free_packet_city_update_counters(_packet)
19478
19479#ifdef FREECIV_JSON_CONNECTION
19480 struct plocation field_addr;
19481 {
19482 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19485 }
19486#endif /* FREECIV_JSON_CONNECTION */
19487
19488#ifdef FREECIV_JSON_CONNECTION
19489 field_addr.name = "city";
19490#endif /* FREECIV_JSON_CONNECTION */
19491
19492 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
19494 }
19495
19496 log_packet_detailed("packet_city_update_counters_100: got info about (%d)",
19497 real_packet->city);
19498
19499#ifdef FREECIV_DELTA_PROTOCOL
19502 struct genhash **hash = pc->phs.received + PACKET_CITY_UPDATE_COUNTERS;
19503
19504 if (nullptr == *hash) {
19506 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19507 }
19508
19509 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19510 *real_packet = *old;
19511 } else {
19512 /* packet is already initialized empty */
19513 log_packet_detailed(" no old info");
19514 }
19515
19516#ifdef FREECIV_JSON_CONNECTION
19517 field_addr.name = "fields";
19518#endif /* FREECIV_JSON_CONNECTION */
19519 DIO_BV_GET(&din, &field_addr, fields);
19520
19521 if (BV_ISSET(fields, 0)) {
19522 log_packet_detailed(" got field 'count'");
19523
19524#ifdef FREECIV_JSON_CONNECTION
19525 field_addr.name = "count";
19526#endif /* FREECIV_JSON_CONNECTION */
19527
19528 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19530 }
19531 }
19532
19533 if (BV_ISSET(fields, 1)) {
19534 log_packet_detailed(" got field 'counters'");
19535
19536#ifdef FREECIV_JSON_CONNECTION
19537 field_addr.name = "counters";
19538#endif /* FREECIV_JSON_CONNECTION */
19539
19540 {
19541 int i;
19542
19543 if (real_packet->count > MAX_COUNTERS) {
19544 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19545 }
19546
19547#ifdef FREECIV_JSON_CONNECTION
19548 /* Enter array. */
19549 field_addr.sub_location = plocation_elem_new(0);
19550#endif /* FREECIV_JSON_CONNECTION */
19551
19552 for (i = 0; i < real_packet->count; i++) {
19553#ifdef FREECIV_JSON_CONNECTION
19554 /* Next array element */
19555 field_addr.sub_location->number = i;
19556#endif /* FREECIV_JSON_CONNECTION */
19557
19558 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19560 }
19561 }
19562
19563#ifdef FREECIV_JSON_CONNECTION
19564 /* Exit array. */
19565 FC_FREE(field_addr.sub_location);
19566#endif /* FREECIV_JSON_CONNECTION */
19567 }
19568 }
19569
19570 if (nullptr == old) {
19571 old = fc_malloc(sizeof(*old));
19573 *old = *real_packet;
19575 } else {
19576 *old = *real_packet;
19577 }
19578
19579#else /* FREECIV_DELTA_PROTOCOL */
19580#ifdef FREECIV_JSON_CONNECTION
19581 field_addr.name = "count";
19582#endif /* FREECIV_JSON_CONNECTION */
19583
19584 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
19586 }
19587
19588#ifdef FREECIV_JSON_CONNECTION
19589 field_addr.name = "counters";
19590#endif /* FREECIV_JSON_CONNECTION */
19591
19592 {
19593 int i;
19594
19595 if (real_packet->count > MAX_COUNTERS) {
19596 RECEIVE_PACKET_FIELD_ERROR(counters, ": array truncated");
19597 }
19598
19599#ifdef FREECIV_JSON_CONNECTION
19600 /* Enter array. */
19601 field_addr.sub_location = plocation_elem_new(0);
19602#endif /* FREECIV_JSON_CONNECTION */
19603
19604 for (i = 0; i < real_packet->count; i++) {
19605#ifdef FREECIV_JSON_CONNECTION
19606 /* Next array element */
19607 field_addr.sub_location->number = i;
19608#endif /* FREECIV_JSON_CONNECTION */
19609
19610 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
19612 }
19613 }
19614
19615#ifdef FREECIV_JSON_CONNECTION
19616 /* Exit array. */
19617 FC_FREE(field_addr.sub_location);
19618#endif /* FREECIV_JSON_CONNECTION */
19619 }
19620#endif /* FREECIV_DELTA_PROTOCOL */
19621
19623#undef FREE_PACKET_STRUCT
19624}
19625
19627{
19628 const struct packet_city_update_counters *real_packet = packet;
19629 int e;
19631
19632 log_packet_detailed("packet_city_update_counters_100: sending info about (%d)",
19633 real_packet->city);
19634
19635#ifdef FREECIV_DELTA_PROTOCOL
19638 bool differ;
19639 int different = 0;
19640 struct genhash **hash = pc->phs.sent + PACKET_CITY_UPDATE_COUNTERS;
19641
19642 if (nullptr == *hash) {
19644 nullptr, nullptr, nullptr, destroy_packet_city_update_counters);
19645 }
19646 BV_CLR_ALL(fields);
19647
19648 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19649 old = fc_malloc(sizeof(*old));
19650 /* temporary bitcopy just to insert correctly */
19651 *old = *real_packet;
19654 different = 1; /* Force to send. */
19655 }
19656
19657 differ = (old->count != real_packet->count);
19658 if (differ) {
19659 different++;
19660 BV_SET(fields, 0);
19661 }
19662
19663 differ = (old->count != real_packet->count);
19664 if (!differ) {
19665 int i;
19666
19667 for (i = 0; i < old->count; i++) {
19668 differ = (old->counters[i] != real_packet->counters[i]);
19669 if (differ) {
19670 break;
19671 }
19672 }
19673 }
19674 if (differ) {
19675 different++;
19676 BV_SET(fields, 1);
19677 }
19678
19679 if (different == 0) {
19680 log_packet_detailed(" no change -> discard");
19682 }
19683#endif /* FREECIV_DELTA_PROTOCOL */
19684
19685#ifdef FREECIV_JSON_CONNECTION
19686 struct plocation field_addr;
19687 {
19688 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19691 }
19692#endif /* FREECIV_JSON_CONNECTION */
19693
19694#ifdef FREECIV_JSON_CONNECTION
19695 field_addr.name = "city";
19696#endif /* FREECIV_JSON_CONNECTION */
19697 e = 0;
19698
19699 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
19700
19701 if (e) {
19702 log_packet_detailed("'city' field error detected");
19703 }
19704
19705#ifdef FREECIV_DELTA_PROTOCOL
19706#ifdef FREECIV_JSON_CONNECTION
19707 field_addr.name = "fields";
19708#endif /* FREECIV_JSON_CONNECTION */
19709 e = 0;
19710 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19711 if (e) {
19712 log_packet_detailed("fields bitvector error detected");
19713 }
19714
19715 if (BV_ISSET(fields, 0)) {
19716 log_packet_detailed(" field 'count' has changed");
19717
19718#ifdef FREECIV_JSON_CONNECTION
19719 field_addr.name = "count";
19720#endif /* FREECIV_JSON_CONNECTION */
19721 e = 0;
19722
19723 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19724
19725 if (e) {
19726 log_packet_detailed("'count' field error detected");
19727 }
19728 }
19729
19730 if (BV_ISSET(fields, 1)) {
19731 log_packet_detailed(" field 'counters' has changed");
19732
19733#ifdef FREECIV_JSON_CONNECTION
19734 field_addr.name = "counters";
19735#endif /* FREECIV_JSON_CONNECTION */
19736 e = 0;
19737
19738 {
19739 int i;
19740
19741#ifdef FREECIV_JSON_CONNECTION
19742 /* Create the array. */
19743 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19744
19745 /* Enter array. */
19746 field_addr.sub_location = plocation_elem_new(0);
19747#endif /* FREECIV_JSON_CONNECTION */
19748
19749 for (i = 0; i < real_packet->count; i++) {
19750#ifdef FREECIV_JSON_CONNECTION
19751 /* Next array element. */
19752 field_addr.sub_location->number = i;
19753#endif /* FREECIV_JSON_CONNECTION */
19754
19755 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19756 }
19757
19758#ifdef FREECIV_JSON_CONNECTION
19759 /* Exit array. */
19760 FC_FREE(field_addr.sub_location);
19761#endif /* FREECIV_JSON_CONNECTION */
19762 }
19763
19764 if (e) {
19765 log_packet_detailed("'counters' field error detected");
19766 }
19767 }
19768
19769 *old = *real_packet;
19770
19771#else /* FREECIV_DELTA_PROTOCOL */
19772#ifdef FREECIV_JSON_CONNECTION
19773 field_addr.name = "count";
19774#endif /* FREECIV_JSON_CONNECTION */
19775 e = 0;
19776
19777 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
19778
19779 if (e) {
19780 log_packet_detailed("'count' field error detected");
19781 }
19782
19783#ifdef FREECIV_JSON_CONNECTION
19784 field_addr.name = "counters";
19785#endif /* FREECIV_JSON_CONNECTION */
19786 e = 0;
19787
19788 {
19789 int i;
19790
19791#ifdef FREECIV_JSON_CONNECTION
19792 /* Create the array. */
19793 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
19794
19795 /* Enter array. */
19796 field_addr.sub_location = plocation_elem_new(0);
19797#endif /* FREECIV_JSON_CONNECTION */
19798
19799 for (i = 0; i < real_packet->count; i++) {
19800#ifdef FREECIV_JSON_CONNECTION
19801 /* Next array element. */
19802 field_addr.sub_location->number = i;
19803#endif /* FREECIV_JSON_CONNECTION */
19804
19805 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
19806 }
19807
19808#ifdef FREECIV_JSON_CONNECTION
19809 /* Exit array. */
19810 FC_FREE(field_addr.sub_location);
19811#endif /* FREECIV_JSON_CONNECTION */
19812 }
19813
19814 if (e) {
19815 log_packet_detailed("'counters' field error detected");
19816 }
19817#endif /* FREECIV_DELTA_PROTOCOL */
19818
19820}
19821
19823{
19824 if (!pc->used) {
19825 log_error("WARNING: trying to send data to the closed connection %s",
19827 return -1;
19828 }
19829 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet != nullptr, -1,
19830 "Handler for PACKET_CITY_UPDATE_COUNTERS not installed");
19831 return pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet(pc, packet);
19832}
19833
19835{
19836 conn_list_iterate(dest, pconn) {
19839}
19840
19841static inline void init_packet_city_short_info(struct packet_city_short_info *packet)
19842{
19843 memset(packet, 0, sizeof(*packet));
19844}
19845
19846#define free_packet_city_short_info(_packet) (void) 0
19847#define destroy_packet_city_short_info free
19848
19849#ifdef FREECIV_DELTA_PROTOCOL
19851{
19852 const struct packet_city_short_info *key = (const struct packet_city_short_info *) vkey;
19853 genhash_val_t result = 0;
19854
19855 result += key->id;
19856
19857 result &= 0xFFFFFFFF;
19858 return result;
19859}
19860
19861static bool cmp_packet_city_short_info_100(const void *vkey1, const void *vkey2)
19862{
19863 const struct packet_city_short_info *old = (const struct packet_city_short_info *) vkey1;
19864 const struct packet_city_short_info *real_packet = (const struct packet_city_short_info *) vkey2;
19865 bool differ;
19866
19867 differ = (old->id != real_packet->id);
19868
19869 return !differ;
19870}
19872#endif /* FREECIV_DELTA_PROTOCOL */
19873
19875{
19876#define FREE_PACKET_STRUCT(_packet) free_packet_city_short_info(_packet)
19878
19879#ifdef FREECIV_JSON_CONNECTION
19880 struct plocation field_addr;
19881 {
19882 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
19885 }
19886#endif /* FREECIV_JSON_CONNECTION */
19887
19888#ifdef FREECIV_JSON_CONNECTION
19889 field_addr.name = "id";
19890#endif /* FREECIV_JSON_CONNECTION */
19891
19892 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
19894 }
19895
19896 log_packet_detailed("packet_city_short_info_100: got info about (%d)",
19897 real_packet->id);
19898
19899#ifdef FREECIV_DELTA_PROTOCOL
19902 struct genhash **hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
19903
19904 if (nullptr == *hash) {
19906 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
19907 }
19908
19909 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19910 *real_packet = *old;
19911 } else {
19912 /* packet is already initialized empty */
19913 log_packet_detailed(" no old info");
19914 }
19915
19916#ifdef FREECIV_JSON_CONNECTION
19917 field_addr.name = "fields";
19918#endif /* FREECIV_JSON_CONNECTION */
19919 DIO_BV_GET(&din, &field_addr, fields);
19920
19921 if (BV_ISSET(fields, 0)) {
19922 log_packet_detailed(" got field 'tile'");
19923
19924#ifdef FREECIV_JSON_CONNECTION
19925 field_addr.name = "tile";
19926#endif /* FREECIV_JSON_CONNECTION */
19927
19928 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
19930 }
19931 }
19932
19933 if (BV_ISSET(fields, 1)) {
19934 log_packet_detailed(" got field 'owner'");
19935
19936#ifdef FREECIV_JSON_CONNECTION
19937 field_addr.name = "owner";
19938#endif /* FREECIV_JSON_CONNECTION */
19939
19940 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
19942 }
19943 }
19944
19945 if (BV_ISSET(fields, 2)) {
19946 log_packet_detailed(" got field 'original'");
19947
19948#ifdef FREECIV_JSON_CONNECTION
19949 field_addr.name = "original";
19950#endif /* FREECIV_JSON_CONNECTION */
19951
19952 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
19954 }
19955 }
19956
19957 if (BV_ISSET(fields, 3)) {
19958 log_packet_detailed(" got field 'size'");
19959
19960#ifdef FREECIV_JSON_CONNECTION
19961 field_addr.name = "size";
19962#endif /* FREECIV_JSON_CONNECTION */
19963
19964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
19966 }
19967 }
19968
19969 if (BV_ISSET(fields, 4)) {
19970 log_packet_detailed(" got field 'style'");
19971
19972#ifdef FREECIV_JSON_CONNECTION
19973 field_addr.name = "style";
19974#endif /* FREECIV_JSON_CONNECTION */
19975
19976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
19978 }
19979 }
19980
19981 if (BV_ISSET(fields, 5)) {
19982 log_packet_detailed(" got field 'capital'");
19983
19984#ifdef FREECIV_JSON_CONNECTION
19985 field_addr.name = "capital";
19986#endif /* FREECIV_JSON_CONNECTION */
19987
19988 {
19989 int readin;
19990
19991 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19993 }
19994 real_packet->capital = readin;
19995 }
19996 }
19997
19998 real_packet->occupied = BV_ISSET(fields, 6);
19999
20000 if (BV_ISSET(fields, 7)) {
20001 log_packet_detailed(" got field 'walls'");
20002
20003#ifdef FREECIV_JSON_CONNECTION
20004 field_addr.name = "walls";
20005#endif /* FREECIV_JSON_CONNECTION */
20006
20007 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20009 }
20010 }
20011
20012 real_packet->happy = BV_ISSET(fields, 8);
20013
20014 real_packet->unhappy = BV_ISSET(fields, 9);
20015
20016 if (BV_ISSET(fields, 10)) {
20017 log_packet_detailed(" got field 'city_image'");
20018
20019#ifdef FREECIV_JSON_CONNECTION
20020 field_addr.name = "city_image";
20021#endif /* FREECIV_JSON_CONNECTION */
20022
20023 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20024 RECEIVE_PACKET_FIELD_ERROR(city_image);
20025 }
20026 }
20027
20028 if (BV_ISSET(fields, 11)) {
20029 log_packet_detailed(" got field 'improvements'");
20030
20031#ifdef FREECIV_JSON_CONNECTION
20032 field_addr.name = "improvements";
20033#endif /* FREECIV_JSON_CONNECTION */
20034
20035 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20036 RECEIVE_PACKET_FIELD_ERROR(improvements);
20037 }
20038 }
20039
20040 if (BV_ISSET(fields, 12)) {
20041 log_packet_detailed(" got field 'name'");
20042
20043#ifdef FREECIV_JSON_CONNECTION
20044 field_addr.name = "name";
20045#endif /* FREECIV_JSON_CONNECTION */
20046
20047 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20049 }
20050 }
20051
20052 if (nullptr == old) {
20053 old = fc_malloc(sizeof(*old));
20055 *old = *real_packet;
20057 } else {
20058 *old = *real_packet;
20059 }
20060
20061 hash = pc->phs.received + PACKET_CITY_INFO;
20062 if (nullptr != *hash) {
20064 }
20065
20066 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
20067 if (nullptr != *hash) {
20069 }
20070
20071 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
20072 if (nullptr != *hash) {
20074 }
20075
20076 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
20077 if (nullptr != *hash) {
20079 }
20080
20081#else /* FREECIV_DELTA_PROTOCOL */
20082#ifdef FREECIV_JSON_CONNECTION
20083 field_addr.name = "tile";
20084#endif /* FREECIV_JSON_CONNECTION */
20085
20086 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
20088 }
20089
20090#ifdef FREECIV_JSON_CONNECTION
20091 field_addr.name = "owner";
20092#endif /* FREECIV_JSON_CONNECTION */
20093
20094 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
20096 }
20097
20098#ifdef FREECIV_JSON_CONNECTION
20099 field_addr.name = "original";
20100#endif /* FREECIV_JSON_CONNECTION */
20101
20102 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
20104 }
20105
20106#ifdef FREECIV_JSON_CONNECTION
20107 field_addr.name = "size";
20108#endif /* FREECIV_JSON_CONNECTION */
20109
20110 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
20112 }
20113
20114#ifdef FREECIV_JSON_CONNECTION
20115 field_addr.name = "style";
20116#endif /* FREECIV_JSON_CONNECTION */
20117
20118 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
20120 }
20121
20122#ifdef FREECIV_JSON_CONNECTION
20123 field_addr.name = "capital";
20124#endif /* FREECIV_JSON_CONNECTION */
20125
20126 {
20127 int readin;
20128
20129 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20131 }
20132 real_packet->capital = readin;
20133 }
20134
20135#ifdef FREECIV_JSON_CONNECTION
20136 field_addr.name = "occupied";
20137#endif /* FREECIV_JSON_CONNECTION */
20138
20139 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
20141 }
20142
20143#ifdef FREECIV_JSON_CONNECTION
20144 field_addr.name = "walls";
20145#endif /* FREECIV_JSON_CONNECTION */
20146
20147 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20149 }
20150
20151#ifdef FREECIV_JSON_CONNECTION
20152 field_addr.name = "happy";
20153#endif /* FREECIV_JSON_CONNECTION */
20154
20155 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->happy)) {
20157 }
20158
20159#ifdef FREECIV_JSON_CONNECTION
20160 field_addr.name = "unhappy";
20161#endif /* FREECIV_JSON_CONNECTION */
20162
20163 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unhappy)) {
20165 }
20166
20167#ifdef FREECIV_JSON_CONNECTION
20168 field_addr.name = "city_image";
20169#endif /* FREECIV_JSON_CONNECTION */
20170
20171 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20172 RECEIVE_PACKET_FIELD_ERROR(city_image);
20173 }
20174
20175#ifdef FREECIV_JSON_CONNECTION
20176 field_addr.name = "improvements";
20177#endif /* FREECIV_JSON_CONNECTION */
20178
20179 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20180 RECEIVE_PACKET_FIELD_ERROR(improvements);
20181 }
20182
20183#ifdef FREECIV_JSON_CONNECTION
20184 field_addr.name = "name";
20185#endif /* FREECIV_JSON_CONNECTION */
20186
20187 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20189 }
20190#endif /* FREECIV_DELTA_PROTOCOL */
20191
20193#undef FREE_PACKET_STRUCT
20194}
20195
20197{
20198 const struct packet_city_short_info *real_packet = packet;
20199 int e;
20201
20202 log_packet_detailed("packet_city_short_info_100: sending info about (%d)",
20203 real_packet->id);
20204
20205#ifdef FREECIV_DELTA_PROTOCOL
20208 bool differ;
20209 int different = 0;
20210 struct genhash **hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
20211
20212 if (nullptr == *hash) {
20214 nullptr, nullptr, nullptr, destroy_packet_city_short_info);
20215 }
20216 BV_CLR_ALL(fields);
20217
20218 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20219 old = fc_malloc(sizeof(*old));
20220 /* temporary bitcopy just to insert correctly */
20221 *old = *real_packet;
20224 different = 1; /* Force to send. */
20225 }
20226
20227 differ = (old->tile != real_packet->tile);
20228 if (differ) {
20229 different++;
20230 BV_SET(fields, 0);
20231 }
20232
20233 differ = (old->owner != real_packet->owner);
20234 if (differ) {
20235 different++;
20236 BV_SET(fields, 1);
20237 }
20238
20239 differ = (old->original != real_packet->original);
20240 if (differ) {
20241 different++;
20242 BV_SET(fields, 2);
20243 }
20244
20245 differ = (old->size != real_packet->size);
20246 if (differ) {
20247 different++;
20248 BV_SET(fields, 3);
20249 }
20250
20251 differ = (old->style != real_packet->style);
20252 if (differ) {
20253 different++;
20254 BV_SET(fields, 4);
20255 }
20256
20257 differ = (old->capital != real_packet->capital);
20258 if (differ) {
20259 different++;
20260 BV_SET(fields, 5);
20261 }
20262
20263 differ = (old->occupied != real_packet->occupied);
20264 if (differ) {
20265 different++;
20266 }
20267 /* folded into head */
20268 if (real_packet->occupied) {
20269 BV_SET(fields, 6);
20270 }
20271
20272 differ = (old->walls != real_packet->walls);
20273 if (differ) {
20274 different++;
20275 BV_SET(fields, 7);
20276 }
20277
20278 differ = (old->happy != real_packet->happy);
20279 if (differ) {
20280 different++;
20281 }
20282 /* folded into head */
20283 if (real_packet->happy) {
20284 BV_SET(fields, 8);
20285 }
20286
20287 differ = (old->unhappy != real_packet->unhappy);
20288 if (differ) {
20289 different++;
20290 }
20291 /* folded into head */
20292 if (real_packet->unhappy) {
20293 BV_SET(fields, 9);
20294 }
20295
20296 differ = (old->city_image != real_packet->city_image);
20297 if (differ) {
20298 different++;
20299 BV_SET(fields, 10);
20300 }
20301
20302 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
20303 if (differ) {
20304 different++;
20305 BV_SET(fields, 11);
20306 }
20307
20308 differ = (strcmp(old->name, real_packet->name) != 0);
20309 if (differ) {
20310 different++;
20311 BV_SET(fields, 12);
20312 }
20313
20314 if (different == 0) {
20315 log_packet_detailed(" no change -> discard");
20317 }
20318#endif /* FREECIV_DELTA_PROTOCOL */
20319
20320#ifdef FREECIV_JSON_CONNECTION
20321 struct plocation field_addr;
20322 {
20323 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20326 }
20327#endif /* FREECIV_JSON_CONNECTION */
20328
20329#ifdef FREECIV_JSON_CONNECTION
20330 field_addr.name = "id";
20331#endif /* FREECIV_JSON_CONNECTION */
20332 e = 0;
20333
20334 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
20335
20336 if (e) {
20337 log_packet_detailed("'id' field error detected");
20338 }
20339
20340#ifdef FREECIV_DELTA_PROTOCOL
20341#ifdef FREECIV_JSON_CONNECTION
20342 field_addr.name = "fields";
20343#endif /* FREECIV_JSON_CONNECTION */
20344 e = 0;
20345 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20346 if (e) {
20347 log_packet_detailed("fields bitvector error detected");
20348 }
20349
20350 if (BV_ISSET(fields, 0)) {
20351 log_packet_detailed(" field 'tile' has changed");
20352
20353#ifdef FREECIV_JSON_CONNECTION
20354 field_addr.name = "tile";
20355#endif /* FREECIV_JSON_CONNECTION */
20356 e = 0;
20357
20358 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20359
20360 if (e) {
20361 log_packet_detailed("'tile' field error detected");
20362 }
20363 }
20364
20365 if (BV_ISSET(fields, 1)) {
20366 log_packet_detailed(" field 'owner' has changed");
20367
20368#ifdef FREECIV_JSON_CONNECTION
20369 field_addr.name = "owner";
20370#endif /* FREECIV_JSON_CONNECTION */
20371 e = 0;
20372
20373 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20374
20375 if (e) {
20376 log_packet_detailed("'owner' field error detected");
20377 }
20378 }
20379
20380 if (BV_ISSET(fields, 2)) {
20381 log_packet_detailed(" field 'original' has changed");
20382
20383#ifdef FREECIV_JSON_CONNECTION
20384 field_addr.name = "original";
20385#endif /* FREECIV_JSON_CONNECTION */
20386 e = 0;
20387
20388 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20389
20390 if (e) {
20391 log_packet_detailed("'original' field error detected");
20392 }
20393 }
20394
20395 if (BV_ISSET(fields, 3)) {
20396 log_packet_detailed(" field 'size' has changed");
20397
20398#ifdef FREECIV_JSON_CONNECTION
20399 field_addr.name = "size";
20400#endif /* FREECIV_JSON_CONNECTION */
20401 e = 0;
20402
20403 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20404
20405 if (e) {
20406 log_packet_detailed("'size' field error detected");
20407 }
20408 }
20409
20410 if (BV_ISSET(fields, 4)) {
20411 log_packet_detailed(" field 'style' has changed");
20412
20413#ifdef FREECIV_JSON_CONNECTION
20414 field_addr.name = "style";
20415#endif /* FREECIV_JSON_CONNECTION */
20416 e = 0;
20417
20418 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20419
20420 if (e) {
20421 log_packet_detailed("'style' field error detected");
20422 }
20423 }
20424
20425 if (BV_ISSET(fields, 5)) {
20426 log_packet_detailed(" field 'capital' has changed");
20427
20428#ifdef FREECIV_JSON_CONNECTION
20429 field_addr.name = "capital";
20430#endif /* FREECIV_JSON_CONNECTION */
20431 e = 0;
20432
20433 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20434
20435 if (e) {
20436 log_packet_detailed("'capital' field error detected");
20437 }
20438 }
20439
20440 /* field 6 is folded into the header */
20441
20442 if (BV_ISSET(fields, 7)) {
20443 log_packet_detailed(" field 'walls' has changed");
20444
20445#ifdef FREECIV_JSON_CONNECTION
20446 field_addr.name = "walls";
20447#endif /* FREECIV_JSON_CONNECTION */
20448 e = 0;
20449
20450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20451
20452 if (e) {
20453 log_packet_detailed("'walls' field error detected");
20454 }
20455 }
20456
20457 /* field 8 is folded into the header */
20458
20459 /* field 9 is folded into the header */
20460
20461 if (BV_ISSET(fields, 10)) {
20462 log_packet_detailed(" field 'city_image' has changed");
20463
20464#ifdef FREECIV_JSON_CONNECTION
20465 field_addr.name = "city_image";
20466#endif /* FREECIV_JSON_CONNECTION */
20467 e = 0;
20468
20469 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20470
20471 if (e) {
20472 log_packet_detailed("'city_image' field error detected");
20473 }
20474 }
20475
20476 if (BV_ISSET(fields, 11)) {
20477 log_packet_detailed(" field 'improvements' has changed");
20478
20479#ifdef FREECIV_JSON_CONNECTION
20480 field_addr.name = "improvements";
20481#endif /* FREECIV_JSON_CONNECTION */
20482 e = 0;
20483
20484 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20485
20486 if (e) {
20487 log_packet_detailed("'improvements' field error detected");
20488 }
20489 }
20490
20491 if (BV_ISSET(fields, 12)) {
20492 log_packet_detailed(" field 'name' has changed");
20493
20494#ifdef FREECIV_JSON_CONNECTION
20495 field_addr.name = "name";
20496#endif /* FREECIV_JSON_CONNECTION */
20497 e = 0;
20498
20499 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20500
20501 if (e) {
20502 log_packet_detailed("'name' field error detected");
20503 }
20504 }
20505
20506 *old = *real_packet;
20507
20508 hash = pc->phs.sent + PACKET_CITY_INFO;
20509 if (nullptr != *hash) {
20511 }
20512
20514 if (nullptr != *hash) {
20516 }
20517
20518 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
20519 if (nullptr != *hash) {
20521 }
20522
20523 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
20524 if (nullptr != *hash) {
20526 }
20527
20528#else /* FREECIV_DELTA_PROTOCOL */
20529#ifdef FREECIV_JSON_CONNECTION
20530 field_addr.name = "tile";
20531#endif /* FREECIV_JSON_CONNECTION */
20532 e = 0;
20533
20534 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20535
20536 if (e) {
20537 log_packet_detailed("'tile' field error detected");
20538 }
20539
20540#ifdef FREECIV_JSON_CONNECTION
20541 field_addr.name = "owner";
20542#endif /* FREECIV_JSON_CONNECTION */
20543 e = 0;
20544
20545 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
20546
20547 if (e) {
20548 log_packet_detailed("'owner' field error detected");
20549 }
20550
20551#ifdef FREECIV_JSON_CONNECTION
20552 field_addr.name = "original";
20553#endif /* FREECIV_JSON_CONNECTION */
20554 e = 0;
20555
20556 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
20557
20558 if (e) {
20559 log_packet_detailed("'original' field error detected");
20560 }
20561
20562#ifdef FREECIV_JSON_CONNECTION
20563 field_addr.name = "size";
20564#endif /* FREECIV_JSON_CONNECTION */
20565 e = 0;
20566
20567 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20568
20569 if (e) {
20570 log_packet_detailed("'size' field error detected");
20571 }
20572
20573#ifdef FREECIV_JSON_CONNECTION
20574 field_addr.name = "style";
20575#endif /* FREECIV_JSON_CONNECTION */
20576 e = 0;
20577
20578 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20579
20580 if (e) {
20581 log_packet_detailed("'style' field error detected");
20582 }
20583
20584#ifdef FREECIV_JSON_CONNECTION
20585 field_addr.name = "capital";
20586#endif /* FREECIV_JSON_CONNECTION */
20587 e = 0;
20588
20589 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20590
20591 if (e) {
20592 log_packet_detailed("'capital' field error detected");
20593 }
20594
20595#ifdef FREECIV_JSON_CONNECTION
20596 field_addr.name = "occupied";
20597#endif /* FREECIV_JSON_CONNECTION */
20598 e = 0;
20599
20600 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
20601
20602 if (e) {
20603 log_packet_detailed("'occupied' field error detected");
20604 }
20605
20606#ifdef FREECIV_JSON_CONNECTION
20607 field_addr.name = "walls";
20608#endif /* FREECIV_JSON_CONNECTION */
20609 e = 0;
20610
20611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20612
20613 if (e) {
20614 log_packet_detailed("'walls' field error detected");
20615 }
20616
20617#ifdef FREECIV_JSON_CONNECTION
20618 field_addr.name = "happy";
20619#endif /* FREECIV_JSON_CONNECTION */
20620 e = 0;
20621
20622 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->happy);
20623
20624 if (e) {
20625 log_packet_detailed("'happy' field error detected");
20626 }
20627
20628#ifdef FREECIV_JSON_CONNECTION
20629 field_addr.name = "unhappy";
20630#endif /* FREECIV_JSON_CONNECTION */
20631 e = 0;
20632
20633 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unhappy);
20634
20635 if (e) {
20636 log_packet_detailed("'unhappy' field error detected");
20637 }
20638
20639#ifdef FREECIV_JSON_CONNECTION
20640 field_addr.name = "city_image";
20641#endif /* FREECIV_JSON_CONNECTION */
20642 e = 0;
20643
20644 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20645
20646 if (e) {
20647 log_packet_detailed("'city_image' field error detected");
20648 }
20649
20650#ifdef FREECIV_JSON_CONNECTION
20651 field_addr.name = "improvements";
20652#endif /* FREECIV_JSON_CONNECTION */
20653 e = 0;
20654
20655 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
20656
20657 if (e) {
20658 log_packet_detailed("'improvements' field error detected");
20659 }
20660
20661#ifdef FREECIV_JSON_CONNECTION
20662 field_addr.name = "name";
20663#endif /* FREECIV_JSON_CONNECTION */
20664 e = 0;
20665
20666 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20667
20668 if (e) {
20669 log_packet_detailed("'name' field error detected");
20670 }
20671#endif /* FREECIV_DELTA_PROTOCOL */
20672
20674}
20675
20677{
20678 if (!pc->used) {
20679 log_error("WARNING: trying to send data to the closed connection %s",
20681 return -1;
20682 }
20683 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet != nullptr, -1,
20684 "Handler for PACKET_CITY_SHORT_INFO not installed");
20685 return pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet(pc, packet);
20686}
20687
20688void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
20689{
20690 conn_list_iterate(dest, pconn) {
20693}
20694
20696{
20697 memset(packet, 0, sizeof(*packet));
20698}
20699
20700#define free_packet_trade_route_info(_packet) (void) 0
20701#define destroy_packet_trade_route_info free
20702
20703#ifdef FREECIV_DELTA_PROTOCOL
20704#define hash_packet_trade_route_info_100 hash_const
20705#define cmp_packet_trade_route_info_100 cmp_const
20707#endif /* FREECIV_DELTA_PROTOCOL */
20708
20710{
20711#define FREE_PACKET_STRUCT(_packet) free_packet_trade_route_info(_packet)
20713
20714#ifdef FREECIV_JSON_CONNECTION
20715 struct plocation field_addr;
20716 {
20717 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20720 }
20721#endif /* FREECIV_JSON_CONNECTION */
20722
20723 log_packet_detailed("packet_trade_route_info_100: got info about ()");
20724
20725#ifdef FREECIV_DELTA_PROTOCOL
20728 struct genhash **hash = pc->phs.received + PACKET_TRADE_ROUTE_INFO;
20729
20730 if (nullptr == *hash) {
20732 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20733 }
20734
20735 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20736 *real_packet = *old;
20737 } else {
20738 /* packet is already initialized empty */
20739 log_packet_detailed(" no old info");
20740 }
20741
20742#ifdef FREECIV_JSON_CONNECTION
20743 field_addr.name = "fields";
20744#endif /* FREECIV_JSON_CONNECTION */
20745 DIO_BV_GET(&din, &field_addr, fields);
20746
20747 if (BV_ISSET(fields, 0)) {
20748 log_packet_detailed(" got field 'city'");
20749
20750#ifdef FREECIV_JSON_CONNECTION
20751 field_addr.name = "city";
20752#endif /* FREECIV_JSON_CONNECTION */
20753
20754 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20756 }
20757 }
20758
20759 if (BV_ISSET(fields, 1)) {
20760 log_packet_detailed(" got field 'index'");
20761
20762#ifdef FREECIV_JSON_CONNECTION
20763 field_addr.name = "index";
20764#endif /* FREECIV_JSON_CONNECTION */
20765
20766 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20768 }
20769 }
20770
20771 if (BV_ISSET(fields, 2)) {
20772 log_packet_detailed(" got field 'partner'");
20773
20774#ifdef FREECIV_JSON_CONNECTION
20775 field_addr.name = "partner";
20776#endif /* FREECIV_JSON_CONNECTION */
20777
20778 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20780 }
20781 }
20782
20783 if (BV_ISSET(fields, 3)) {
20784 log_packet_detailed(" got field 'value'");
20785
20786#ifdef FREECIV_JSON_CONNECTION
20787 field_addr.name = "value";
20788#endif /* FREECIV_JSON_CONNECTION */
20789
20790 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20792 }
20793 }
20794
20795 if (BV_ISSET(fields, 4)) {
20796 log_packet_detailed(" got field 'direction'");
20797
20798#ifdef FREECIV_JSON_CONNECTION
20799 field_addr.name = "direction";
20800#endif /* FREECIV_JSON_CONNECTION */
20801
20802 {
20803 int readin;
20804
20805 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20806 RECEIVE_PACKET_FIELD_ERROR(direction);
20807 }
20808 real_packet->direction = readin;
20809 }
20810 }
20811
20812 if (BV_ISSET(fields, 5)) {
20813 log_packet_detailed(" got field 'goods'");
20814
20815#ifdef FREECIV_JSON_CONNECTION
20816 field_addr.name = "goods";
20817#endif /* FREECIV_JSON_CONNECTION */
20818
20819 {
20820 int readin;
20821
20822 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20824 }
20825 real_packet->goods = readin;
20826 }
20827 }
20828
20829 if (nullptr == old) {
20830 old = fc_malloc(sizeof(*old));
20832 *old = *real_packet;
20834 } else {
20835 *old = *real_packet;
20836 }
20837
20838#else /* FREECIV_DELTA_PROTOCOL */
20839#ifdef FREECIV_JSON_CONNECTION
20840 field_addr.name = "city";
20841#endif /* FREECIV_JSON_CONNECTION */
20842
20843 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20845 }
20846
20847#ifdef FREECIV_JSON_CONNECTION
20848 field_addr.name = "index";
20849#endif /* FREECIV_JSON_CONNECTION */
20850
20851 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
20853 }
20854
20855#ifdef FREECIV_JSON_CONNECTION
20856 field_addr.name = "partner";
20857#endif /* FREECIV_JSON_CONNECTION */
20858
20859 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
20861 }
20862
20863#ifdef FREECIV_JSON_CONNECTION
20864 field_addr.name = "value";
20865#endif /* FREECIV_JSON_CONNECTION */
20866
20867 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
20869 }
20870
20871#ifdef FREECIV_JSON_CONNECTION
20872 field_addr.name = "direction";
20873#endif /* FREECIV_JSON_CONNECTION */
20874
20875 {
20876 int readin;
20877
20878 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20879 RECEIVE_PACKET_FIELD_ERROR(direction);
20880 }
20881 real_packet->direction = readin;
20882 }
20883
20884#ifdef FREECIV_JSON_CONNECTION
20885 field_addr.name = "goods";
20886#endif /* FREECIV_JSON_CONNECTION */
20887
20888 {
20889 int readin;
20890
20891 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20893 }
20894 real_packet->goods = readin;
20895 }
20896#endif /* FREECIV_DELTA_PROTOCOL */
20897
20899#undef FREE_PACKET_STRUCT
20900}
20901
20903{
20904 const struct packet_trade_route_info *real_packet = packet;
20905 int e;
20907
20908 log_packet_detailed("packet_trade_route_info_100: sending info about ()");
20909
20910#ifdef FREECIV_DELTA_PROTOCOL
20913 bool differ;
20914 struct genhash **hash = pc->phs.sent + PACKET_TRADE_ROUTE_INFO;
20915
20916 if (nullptr == *hash) {
20918 nullptr, nullptr, nullptr, destroy_packet_trade_route_info);
20919 }
20920 BV_CLR_ALL(fields);
20921
20922 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20923 old = fc_malloc(sizeof(*old));
20924 /* temporary bitcopy just to insert correctly */
20925 *old = *real_packet;
20928 }
20929
20930 differ = (old->city != real_packet->city);
20931 if (differ) {
20932 BV_SET(fields, 0);
20933 }
20934
20935 differ = (old->index != real_packet->index);
20936 if (differ) {
20937 BV_SET(fields, 1);
20938 }
20939
20940 differ = (old->partner != real_packet->partner);
20941 if (differ) {
20942 BV_SET(fields, 2);
20943 }
20944
20945 differ = (old->value != real_packet->value);
20946 if (differ) {
20947 BV_SET(fields, 3);
20948 }
20949
20950 differ = (old->direction != real_packet->direction);
20951 if (differ) {
20952 BV_SET(fields, 4);
20953 }
20954
20955 differ = (old->goods != real_packet->goods);
20956 if (differ) {
20957 BV_SET(fields, 5);
20958 }
20959#endif /* FREECIV_DELTA_PROTOCOL */
20960
20961#ifdef FREECIV_JSON_CONNECTION
20962 struct plocation field_addr;
20963 {
20964 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
20967 }
20968#endif /* FREECIV_JSON_CONNECTION */
20969
20970#ifdef FREECIV_DELTA_PROTOCOL
20971#ifdef FREECIV_JSON_CONNECTION
20972 field_addr.name = "fields";
20973#endif /* FREECIV_JSON_CONNECTION */
20974 e = 0;
20975 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20976 if (e) {
20977 log_packet_detailed("fields bitvector error detected");
20978 }
20979
20980 if (BV_ISSET(fields, 0)) {
20981 log_packet_detailed(" field 'city' has changed");
20982
20983#ifdef FREECIV_JSON_CONNECTION
20984 field_addr.name = "city";
20985#endif /* FREECIV_JSON_CONNECTION */
20986 e = 0;
20987
20988 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20989
20990 if (e) {
20991 log_packet_detailed("'city' field error detected");
20992 }
20993 }
20994
20995 if (BV_ISSET(fields, 1)) {
20996 log_packet_detailed(" field 'index' has changed");
20997
20998#ifdef FREECIV_JSON_CONNECTION
20999 field_addr.name = "index";
21000#endif /* FREECIV_JSON_CONNECTION */
21001 e = 0;
21002
21003 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
21004
21005 if (e) {
21006 log_packet_detailed("'index' field error detected");
21007 }
21008 }
21009
21010 if (BV_ISSET(fields, 2)) {
21011 log_packet_detailed(" field 'partner' has changed");
21012
21013#ifdef FREECIV_JSON_CONNECTION
21014 field_addr.name = "partner";
21015#endif /* FREECIV_JSON_CONNECTION */
21016 e = 0;
21017
21018 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
21019
21020 if (e) {
21021 log_packet_detailed("'partner' field error detected");
21022 }
21023 }
21024
21025 if (BV_ISSET(fields, 3)) {
21026 log_packet_detailed(" field 'value' has changed");
21027
21028#ifdef FREECIV_JSON_CONNECTION
21029 field_addr.name = "value";
21030#endif /* FREECIV_JSON_CONNECTION */
21031 e = 0;
21032
21033 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21034
21035 if (e) {
21036 log_packet_detailed("'value' field error detected");
21037 }
21038 }
21039
21040 if (BV_ISSET(fields, 4)) {
21041 log_packet_detailed(" field 'direction' has changed");
21042
21043#ifdef FREECIV_JSON_CONNECTION
21044 field_addr.name = "direction";
21045#endif /* FREECIV_JSON_CONNECTION */
21046 e = 0;
21047
21048 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21049
21050 if (e) {
21051 log_packet_detailed("'direction' field error detected");
21052 }
21053 }
21054
21055 if (BV_ISSET(fields, 5)) {
21056 log_packet_detailed(" field 'goods' has changed");
21057
21058#ifdef FREECIV_JSON_CONNECTION
21059 field_addr.name = "goods";
21060#endif /* FREECIV_JSON_CONNECTION */
21061 e = 0;
21062
21063 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21064
21065 if (e) {
21066 log_packet_detailed("'goods' field error detected");
21067 }
21068 }
21069
21070 *old = *real_packet;
21071
21072#else /* FREECIV_DELTA_PROTOCOL */
21073#ifdef FREECIV_JSON_CONNECTION
21074 field_addr.name = "city";
21075#endif /* FREECIV_JSON_CONNECTION */
21076 e = 0;
21077
21078 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
21079
21080 if (e) {
21081 log_packet_detailed("'city' field error detected");
21082 }
21083
21084#ifdef FREECIV_JSON_CONNECTION
21085 field_addr.name = "index";
21086#endif /* FREECIV_JSON_CONNECTION */
21087 e = 0;
21088
21089 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
21090
21091 if (e) {
21092 log_packet_detailed("'index' field error detected");
21093 }
21094
21095#ifdef FREECIV_JSON_CONNECTION
21096 field_addr.name = "partner";
21097#endif /* FREECIV_JSON_CONNECTION */
21098 e = 0;
21099
21100 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
21101
21102 if (e) {
21103 log_packet_detailed("'partner' field error detected");
21104 }
21105
21106#ifdef FREECIV_JSON_CONNECTION
21107 field_addr.name = "value";
21108#endif /* FREECIV_JSON_CONNECTION */
21109 e = 0;
21110
21111 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21112
21113 if (e) {
21114 log_packet_detailed("'value' field error detected");
21115 }
21116
21117#ifdef FREECIV_JSON_CONNECTION
21118 field_addr.name = "direction";
21119#endif /* FREECIV_JSON_CONNECTION */
21120 e = 0;
21121
21122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21123
21124 if (e) {
21125 log_packet_detailed("'direction' field error detected");
21126 }
21127
21128#ifdef FREECIV_JSON_CONNECTION
21129 field_addr.name = "goods";
21130#endif /* FREECIV_JSON_CONNECTION */
21131 e = 0;
21132
21133 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21134
21135 if (e) {
21136 log_packet_detailed("'goods' field error detected");
21137 }
21138#endif /* FREECIV_DELTA_PROTOCOL */
21139
21141}
21142
21144{
21145 if (!pc->used) {
21146 log_error("WARNING: trying to send data to the closed connection %s",
21148 return -1;
21149 }
21150 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet != nullptr, -1,
21151 "Handler for PACKET_TRADE_ROUTE_INFO not installed");
21152 return pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet(pc, packet);
21153}
21154
21156{
21157 conn_list_iterate(dest, pconn) {
21160}
21161
21162static inline void init_packet_city_sell(struct packet_city_sell *packet)
21163{
21164 memset(packet, 0, sizeof(*packet));
21165}
21166
21167#define free_packet_city_sell(_packet) (void) 0
21168#define destroy_packet_city_sell free
21169
21170#ifdef FREECIV_DELTA_PROTOCOL
21171#define hash_packet_city_sell_100 hash_const
21172#define cmp_packet_city_sell_100 cmp_const
21174#endif /* FREECIV_DELTA_PROTOCOL */
21175
21177{
21178#define FREE_PACKET_STRUCT(_packet) free_packet_city_sell(_packet)
21180
21181#ifdef FREECIV_JSON_CONNECTION
21182 struct plocation field_addr;
21183 {
21184 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21187 }
21188#endif /* FREECIV_JSON_CONNECTION */
21189
21190 log_packet_detailed("packet_city_sell_100: got info about ()");
21191
21192#ifdef FREECIV_DELTA_PROTOCOL
21194 struct packet_city_sell *old;
21195 struct genhash **hash = pc->phs.received + PACKET_CITY_SELL;
21196
21197 if (nullptr == *hash) {
21199 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21200 }
21201
21202 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21203 *real_packet = *old;
21204 } else {
21205 /* packet is already initialized empty */
21206 log_packet_detailed(" no old info");
21207 }
21208
21209#ifdef FREECIV_JSON_CONNECTION
21210 field_addr.name = "fields";
21211#endif /* FREECIV_JSON_CONNECTION */
21212 DIO_BV_GET(&din, &field_addr, fields);
21213
21214 if (BV_ISSET(fields, 0)) {
21215 log_packet_detailed(" got field 'city_id'");
21216
21217#ifdef FREECIV_JSON_CONNECTION
21218 field_addr.name = "city_id";
21219#endif /* FREECIV_JSON_CONNECTION */
21220
21221 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21223 }
21224 }
21225
21226 if (BV_ISSET(fields, 1)) {
21227 log_packet_detailed(" got field 'build_id'");
21228
21229#ifdef FREECIV_JSON_CONNECTION
21230 field_addr.name = "build_id";
21231#endif /* FREECIV_JSON_CONNECTION */
21232
21233 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21235 }
21236 }
21237
21238 if (nullptr == old) {
21239 old = fc_malloc(sizeof(*old));
21241 *old = *real_packet;
21243 } else {
21244 *old = *real_packet;
21245 }
21246
21247#else /* FREECIV_DELTA_PROTOCOL */
21248#ifdef FREECIV_JSON_CONNECTION
21249 field_addr.name = "city_id";
21250#endif /* FREECIV_JSON_CONNECTION */
21251
21252 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21254 }
21255
21256#ifdef FREECIV_JSON_CONNECTION
21257 field_addr.name = "build_id";
21258#endif /* FREECIV_JSON_CONNECTION */
21259
21260 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21262 }
21263#endif /* FREECIV_DELTA_PROTOCOL */
21264
21266#undef FREE_PACKET_STRUCT
21267}
21268
21269static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
21270{
21271 const struct packet_city_sell *real_packet = packet;
21272 int e;
21274
21275 log_packet_detailed("packet_city_sell_100: sending info about ()");
21276
21277#ifdef FREECIV_DELTA_PROTOCOL
21279 struct packet_city_sell *old;
21280 bool differ;
21281 struct genhash **hash = pc->phs.sent + PACKET_CITY_SELL;
21282
21283 if (nullptr == *hash) {
21285 nullptr, nullptr, nullptr, destroy_packet_city_sell);
21286 }
21287 BV_CLR_ALL(fields);
21288
21289 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21290 old = fc_malloc(sizeof(*old));
21291 /* temporary bitcopy just to insert correctly */
21292 *old = *real_packet;
21295 }
21296
21297 differ = (old->city_id != real_packet->city_id);
21298 if (differ) {
21299 BV_SET(fields, 0);
21300 }
21301
21302 differ = (old->build_id != real_packet->build_id);
21303 if (differ) {
21304 BV_SET(fields, 1);
21305 }
21306#endif /* FREECIV_DELTA_PROTOCOL */
21307
21308#ifdef FREECIV_JSON_CONNECTION
21309 struct plocation field_addr;
21310 {
21311 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21314 }
21315#endif /* FREECIV_JSON_CONNECTION */
21316
21317#ifdef FREECIV_DELTA_PROTOCOL
21318#ifdef FREECIV_JSON_CONNECTION
21319 field_addr.name = "fields";
21320#endif /* FREECIV_JSON_CONNECTION */
21321 e = 0;
21322 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21323 if (e) {
21324 log_packet_detailed("fields bitvector error detected");
21325 }
21326
21327 if (BV_ISSET(fields, 0)) {
21328 log_packet_detailed(" field 'city_id' has changed");
21329
21330#ifdef FREECIV_JSON_CONNECTION
21331 field_addr.name = "city_id";
21332#endif /* FREECIV_JSON_CONNECTION */
21333 e = 0;
21334
21335 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21336
21337 if (e) {
21338 log_packet_detailed("'city_id' field error detected");
21339 }
21340 }
21341
21342 if (BV_ISSET(fields, 1)) {
21343 log_packet_detailed(" field 'build_id' has changed");
21344
21345#ifdef FREECIV_JSON_CONNECTION
21346 field_addr.name = "build_id";
21347#endif /* FREECIV_JSON_CONNECTION */
21348 e = 0;
21349
21350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21351
21352 if (e) {
21353 log_packet_detailed("'build_id' field error detected");
21354 }
21355 }
21356
21357 *old = *real_packet;
21358
21359#else /* FREECIV_DELTA_PROTOCOL */
21360#ifdef FREECIV_JSON_CONNECTION
21361 field_addr.name = "city_id";
21362#endif /* FREECIV_JSON_CONNECTION */
21363 e = 0;
21364
21365 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21366
21367 if (e) {
21368 log_packet_detailed("'city_id' field error detected");
21369 }
21370
21371#ifdef FREECIV_JSON_CONNECTION
21372 field_addr.name = "build_id";
21373#endif /* FREECIV_JSON_CONNECTION */
21374 e = 0;
21375
21376 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21377
21378 if (e) {
21379 log_packet_detailed("'build_id' field error detected");
21380 }
21381#endif /* FREECIV_DELTA_PROTOCOL */
21382
21384}
21385
21386int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
21387{
21388 if (!pc->used) {
21389 log_error("WARNING: trying to send data to the closed connection %s",
21391 return -1;
21392 }
21393 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SELL].packet != nullptr, -1,
21394 "Handler for PACKET_CITY_SELL not installed");
21395 return pc->phs.handlers->send[PACKET_CITY_SELL].packet(pc, packet);
21396}
21397
21398int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
21399{
21400 struct packet_city_sell packet, *real_packet = &packet;
21401
21403 real_packet->build_id = build_id;
21404
21406}
21407
21408static inline void init_packet_city_buy(struct packet_city_buy *packet)
21409{
21410 memset(packet, 0, sizeof(*packet));
21411}
21412
21413#define free_packet_city_buy(_packet) (void) 0
21414#define destroy_packet_city_buy free
21415
21416#ifdef FREECIV_DELTA_PROTOCOL
21417#define hash_packet_city_buy_100 hash_const
21418#define cmp_packet_city_buy_100 cmp_const
21420#endif /* FREECIV_DELTA_PROTOCOL */
21421
21423{
21424#define FREE_PACKET_STRUCT(_packet) free_packet_city_buy(_packet)
21426
21427#ifdef FREECIV_JSON_CONNECTION
21428 struct plocation field_addr;
21429 {
21430 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21433 }
21434#endif /* FREECIV_JSON_CONNECTION */
21435
21436 log_packet_detailed("packet_city_buy_100: got info about ()");
21437
21438#ifdef FREECIV_DELTA_PROTOCOL
21440 struct packet_city_buy *old;
21441 struct genhash **hash = pc->phs.received + PACKET_CITY_BUY;
21442
21443 if (nullptr == *hash) {
21445 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21446 }
21447
21448 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21449 *real_packet = *old;
21450 } else {
21451 /* packet is already initialized empty */
21452 log_packet_detailed(" no old info");
21453 }
21454
21455#ifdef FREECIV_JSON_CONNECTION
21456 field_addr.name = "fields";
21457#endif /* FREECIV_JSON_CONNECTION */
21458 DIO_BV_GET(&din, &field_addr, fields);
21459
21460 if (BV_ISSET(fields, 0)) {
21461 log_packet_detailed(" got field 'city_id'");
21462
21463#ifdef FREECIV_JSON_CONNECTION
21464 field_addr.name = "city_id";
21465#endif /* FREECIV_JSON_CONNECTION */
21466
21467 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21469 }
21470 }
21471
21472 if (nullptr == old) {
21473 old = fc_malloc(sizeof(*old));
21475 *old = *real_packet;
21477 } else {
21478 *old = *real_packet;
21479 }
21480
21481#else /* FREECIV_DELTA_PROTOCOL */
21482#ifdef FREECIV_JSON_CONNECTION
21483 field_addr.name = "city_id";
21484#endif /* FREECIV_JSON_CONNECTION */
21485
21486 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21488 }
21489#endif /* FREECIV_DELTA_PROTOCOL */
21490
21492#undef FREE_PACKET_STRUCT
21493}
21494
21495static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
21496{
21497 const struct packet_city_buy *real_packet = packet;
21498 int e;
21500
21501 log_packet_detailed("packet_city_buy_100: sending info about ()");
21502
21503#ifdef FREECIV_DELTA_PROTOCOL
21505 struct packet_city_buy *old;
21506 bool differ;
21507 struct genhash **hash = pc->phs.sent + PACKET_CITY_BUY;
21508
21509 if (nullptr == *hash) {
21511 nullptr, nullptr, nullptr, destroy_packet_city_buy);
21512 }
21513 BV_CLR_ALL(fields);
21514
21515 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21516 old = fc_malloc(sizeof(*old));
21517 /* temporary bitcopy just to insert correctly */
21518 *old = *real_packet;
21521 }
21522
21523 differ = (old->city_id != real_packet->city_id);
21524 if (differ) {
21525 BV_SET(fields, 0);
21526 }
21527#endif /* FREECIV_DELTA_PROTOCOL */
21528
21529#ifdef FREECIV_JSON_CONNECTION
21530 struct plocation field_addr;
21531 {
21532 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21535 }
21536#endif /* FREECIV_JSON_CONNECTION */
21537
21538#ifdef FREECIV_DELTA_PROTOCOL
21539#ifdef FREECIV_JSON_CONNECTION
21540 field_addr.name = "fields";
21541#endif /* FREECIV_JSON_CONNECTION */
21542 e = 0;
21543 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21544 if (e) {
21545 log_packet_detailed("fields bitvector error detected");
21546 }
21547
21548 if (BV_ISSET(fields, 0)) {
21549 log_packet_detailed(" field 'city_id' has changed");
21550
21551#ifdef FREECIV_JSON_CONNECTION
21552 field_addr.name = "city_id";
21553#endif /* FREECIV_JSON_CONNECTION */
21554 e = 0;
21555
21556 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21557
21558 if (e) {
21559 log_packet_detailed("'city_id' field error detected");
21560 }
21561 }
21562
21563 *old = *real_packet;
21564
21565#else /* FREECIV_DELTA_PROTOCOL */
21566#ifdef FREECIV_JSON_CONNECTION
21567 field_addr.name = "city_id";
21568#endif /* FREECIV_JSON_CONNECTION */
21569 e = 0;
21570
21571 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21572
21573 if (e) {
21574 log_packet_detailed("'city_id' field error detected");
21575 }
21576#endif /* FREECIV_DELTA_PROTOCOL */
21577
21579}
21580
21581int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
21582{
21583 if (!pc->used) {
21584 log_error("WARNING: trying to send data to the closed connection %s",
21586 return -1;
21587 }
21588 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_BUY].packet != nullptr, -1,
21589 "Handler for PACKET_CITY_BUY not installed");
21590 return pc->phs.handlers->send[PACKET_CITY_BUY].packet(pc, packet);
21591}
21592
21593int dsend_packet_city_buy(struct connection *pc, int city_id)
21594{
21595 struct packet_city_buy packet, *real_packet = &packet;
21596
21598
21600}
21601
21602static inline void init_packet_city_change(struct packet_city_change *packet)
21603{
21604 memset(packet, 0, sizeof(*packet));
21605}
21606
21607#define free_packet_city_change(_packet) (void) 0
21608#define destroy_packet_city_change free
21609
21610#ifdef FREECIV_DELTA_PROTOCOL
21611#define hash_packet_city_change_100 hash_const
21612#define cmp_packet_city_change_100 cmp_const
21614#endif /* FREECIV_DELTA_PROTOCOL */
21615
21617{
21618#define FREE_PACKET_STRUCT(_packet) free_packet_city_change(_packet)
21620
21621#ifdef FREECIV_JSON_CONNECTION
21622 struct plocation field_addr;
21623 {
21624 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21627 }
21628#endif /* FREECIV_JSON_CONNECTION */
21629
21630 log_packet_detailed("packet_city_change_100: got info about ()");
21631
21632#ifdef FREECIV_DELTA_PROTOCOL
21634 struct packet_city_change *old;
21635 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE;
21636
21637 if (nullptr == *hash) {
21639 nullptr, nullptr, nullptr, destroy_packet_city_change);
21640 }
21641
21642 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21643 *real_packet = *old;
21644 } else {
21645 /* packet is already initialized empty */
21646 log_packet_detailed(" no old info");
21647 }
21648
21649#ifdef FREECIV_JSON_CONNECTION
21650 field_addr.name = "fields";
21651#endif /* FREECIV_JSON_CONNECTION */
21652 DIO_BV_GET(&din, &field_addr, fields);
21653
21654 if (BV_ISSET(fields, 0)) {
21655 log_packet_detailed(" got field 'city_id'");
21656
21657#ifdef FREECIV_JSON_CONNECTION
21658 field_addr.name = "city_id";
21659#endif /* FREECIV_JSON_CONNECTION */
21660
21661 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21663 }
21664 }
21665
21666 if (BV_ISSET(fields, 1)) {
21667 log_packet_detailed(" got field 'production_kind'");
21668
21669#ifdef FREECIV_JSON_CONNECTION
21670 field_addr.name = "production_kind";
21671#endif /* FREECIV_JSON_CONNECTION */
21672
21673 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21674 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21675 }
21676 }
21677
21678 if (BV_ISSET(fields, 2)) {
21679 log_packet_detailed(" got field 'production_value'");
21680
21681#ifdef FREECIV_JSON_CONNECTION
21682 field_addr.name = "production_value";
21683#endif /* FREECIV_JSON_CONNECTION */
21684
21685 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21686 RECEIVE_PACKET_FIELD_ERROR(production_value);
21687 }
21688 }
21689
21690 if (nullptr == old) {
21691 old = fc_malloc(sizeof(*old));
21693 *old = *real_packet;
21695 } else {
21696 *old = *real_packet;
21697 }
21698
21699#else /* FREECIV_DELTA_PROTOCOL */
21700#ifdef FREECIV_JSON_CONNECTION
21701 field_addr.name = "city_id";
21702#endif /* FREECIV_JSON_CONNECTION */
21703
21704 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21706 }
21707
21708#ifdef FREECIV_JSON_CONNECTION
21709 field_addr.name = "production_kind";
21710#endif /* FREECIV_JSON_CONNECTION */
21711
21712 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21713 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21714 }
21715
21716#ifdef FREECIV_JSON_CONNECTION
21717 field_addr.name = "production_value";
21718#endif /* FREECIV_JSON_CONNECTION */
21719
21720 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21721 RECEIVE_PACKET_FIELD_ERROR(production_value);
21722 }
21723#endif /* FREECIV_DELTA_PROTOCOL */
21724
21726#undef FREE_PACKET_STRUCT
21727}
21728
21729static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
21730{
21731 const struct packet_city_change *real_packet = packet;
21732 int e;
21734
21735 log_packet_detailed("packet_city_change_100: sending info about ()");
21736
21737#ifdef FREECIV_DELTA_PROTOCOL
21739 struct packet_city_change *old;
21740 bool differ;
21741 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE;
21742
21743 if (nullptr == *hash) {
21745 nullptr, nullptr, nullptr, destroy_packet_city_change);
21746 }
21747 BV_CLR_ALL(fields);
21748
21749 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21750 old = fc_malloc(sizeof(*old));
21751 /* temporary bitcopy just to insert correctly */
21752 *old = *real_packet;
21755 }
21756
21757 differ = (old->city_id != real_packet->city_id);
21758 if (differ) {
21759 BV_SET(fields, 0);
21760 }
21761
21762 differ = (old->production_kind != real_packet->production_kind);
21763 if (differ) {
21764 BV_SET(fields, 1);
21765 }
21766
21767 differ = (old->production_value != real_packet->production_value);
21768 if (differ) {
21769 BV_SET(fields, 2);
21770 }
21771#endif /* FREECIV_DELTA_PROTOCOL */
21772
21773#ifdef FREECIV_JSON_CONNECTION
21774 struct plocation field_addr;
21775 {
21776 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21779 }
21780#endif /* FREECIV_JSON_CONNECTION */
21781
21782#ifdef FREECIV_DELTA_PROTOCOL
21783#ifdef FREECIV_JSON_CONNECTION
21784 field_addr.name = "fields";
21785#endif /* FREECIV_JSON_CONNECTION */
21786 e = 0;
21787 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21788 if (e) {
21789 log_packet_detailed("fields bitvector error detected");
21790 }
21791
21792 if (BV_ISSET(fields, 0)) {
21793 log_packet_detailed(" field 'city_id' has changed");
21794
21795#ifdef FREECIV_JSON_CONNECTION
21796 field_addr.name = "city_id";
21797#endif /* FREECIV_JSON_CONNECTION */
21798 e = 0;
21799
21800 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21801
21802 if (e) {
21803 log_packet_detailed("'city_id' field error detected");
21804 }
21805 }
21806
21807 if (BV_ISSET(fields, 1)) {
21808 log_packet_detailed(" field 'production_kind' has changed");
21809
21810#ifdef FREECIV_JSON_CONNECTION
21811 field_addr.name = "production_kind";
21812#endif /* FREECIV_JSON_CONNECTION */
21813 e = 0;
21814
21815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21816
21817 if (e) {
21818 log_packet_detailed("'production_kind' field error detected");
21819 }
21820 }
21821
21822 if (BV_ISSET(fields, 2)) {
21823 log_packet_detailed(" field 'production_value' has changed");
21824
21825#ifdef FREECIV_JSON_CONNECTION
21826 field_addr.name = "production_value";
21827#endif /* FREECIV_JSON_CONNECTION */
21828 e = 0;
21829
21830 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21831
21832 if (e) {
21833 log_packet_detailed("'production_value' field error detected");
21834 }
21835 }
21836
21837 *old = *real_packet;
21838
21839#else /* FREECIV_DELTA_PROTOCOL */
21840#ifdef FREECIV_JSON_CONNECTION
21841 field_addr.name = "city_id";
21842#endif /* FREECIV_JSON_CONNECTION */
21843 e = 0;
21844
21845 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21846
21847 if (e) {
21848 log_packet_detailed("'city_id' field error detected");
21849 }
21850
21851#ifdef FREECIV_JSON_CONNECTION
21852 field_addr.name = "production_kind";
21853#endif /* FREECIV_JSON_CONNECTION */
21854 e = 0;
21855
21856 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
21857
21858 if (e) {
21859 log_packet_detailed("'production_kind' field error detected");
21860 }
21861
21862#ifdef FREECIV_JSON_CONNECTION
21863 field_addr.name = "production_value";
21864#endif /* FREECIV_JSON_CONNECTION */
21865 e = 0;
21866
21867 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
21868
21869 if (e) {
21870 log_packet_detailed("'production_value' field error detected");
21871 }
21872#endif /* FREECIV_DELTA_PROTOCOL */
21873
21875}
21876
21878{
21879 if (!pc->used) {
21880 log_error("WARNING: trying to send data to the closed connection %s",
21882 return -1;
21883 }
21884 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE].packet != nullptr, -1,
21885 "Handler for PACKET_CITY_CHANGE not installed");
21886 return pc->phs.handlers->send[PACKET_CITY_CHANGE].packet(pc, packet);
21887}
21888
21889int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
21890{
21891 struct packet_city_change packet, *real_packet = &packet;
21892
21894 real_packet->production_kind = production_kind;
21895 real_packet->production_value = production_value;
21896
21898}
21899
21900static inline void init_packet_city_worklist(struct packet_city_worklist *packet)
21901{
21902 memset(packet, 0, sizeof(*packet));
21903}
21904
21905#define free_packet_city_worklist(_packet) (void) 0
21906#define destroy_packet_city_worklist free
21907
21908#ifdef FREECIV_DELTA_PROTOCOL
21909#define hash_packet_city_worklist_100 hash_const
21910#define cmp_packet_city_worklist_100 cmp_const
21912#endif /* FREECIV_DELTA_PROTOCOL */
21913
21915{
21916#define FREE_PACKET_STRUCT(_packet) free_packet_city_worklist(_packet)
21918
21919#ifdef FREECIV_JSON_CONNECTION
21920 struct plocation field_addr;
21921 {
21922 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
21925 }
21926#endif /* FREECIV_JSON_CONNECTION */
21927
21928 log_packet_detailed("packet_city_worklist_100: got info about ()");
21929
21930#ifdef FREECIV_DELTA_PROTOCOL
21932 struct packet_city_worklist *old;
21933 struct genhash **hash = pc->phs.received + PACKET_CITY_WORKLIST;
21934
21935 if (nullptr == *hash) {
21937 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
21938 }
21939
21940 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21941 *real_packet = *old;
21942 } else {
21943 /* packet is already initialized empty */
21944 log_packet_detailed(" no old info");
21945 }
21946
21947#ifdef FREECIV_JSON_CONNECTION
21948 field_addr.name = "fields";
21949#endif /* FREECIV_JSON_CONNECTION */
21950 DIO_BV_GET(&din, &field_addr, fields);
21951
21952 if (BV_ISSET(fields, 0)) {
21953 log_packet_detailed(" got field 'city_id'");
21954
21955#ifdef FREECIV_JSON_CONNECTION
21956 field_addr.name = "city_id";
21957#endif /* FREECIV_JSON_CONNECTION */
21958
21959 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21961 }
21962 }
21963
21964 if (BV_ISSET(fields, 1)) {
21965 log_packet_detailed(" got field 'worklist'");
21966
21967#ifdef FREECIV_JSON_CONNECTION
21968 field_addr.name = "worklist";
21969#endif /* FREECIV_JSON_CONNECTION */
21970
21971 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
21973 }
21974 }
21975
21976 if (nullptr == old) {
21977 old = fc_malloc(sizeof(*old));
21979 *old = *real_packet;
21981 } else {
21982 *old = *real_packet;
21983 }
21984
21985#else /* FREECIV_DELTA_PROTOCOL */
21986#ifdef FREECIV_JSON_CONNECTION
21987 field_addr.name = "city_id";
21988#endif /* FREECIV_JSON_CONNECTION */
21989
21990 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21992 }
21993
21994#ifdef FREECIV_JSON_CONNECTION
21995 field_addr.name = "worklist";
21996#endif /* FREECIV_JSON_CONNECTION */
21997
21998 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
22000 }
22001#endif /* FREECIV_DELTA_PROTOCOL */
22002
22004#undef FREE_PACKET_STRUCT
22005}
22006
22007static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
22008{
22009 const struct packet_city_worklist *real_packet = packet;
22010 int e;
22012
22013 log_packet_detailed("packet_city_worklist_100: sending info about ()");
22014
22015#ifdef FREECIV_DELTA_PROTOCOL
22017 struct packet_city_worklist *old;
22018 bool differ;
22019 struct genhash **hash = pc->phs.sent + PACKET_CITY_WORKLIST;
22020
22021 if (nullptr == *hash) {
22023 nullptr, nullptr, nullptr, destroy_packet_city_worklist);
22024 }
22025 BV_CLR_ALL(fields);
22026
22027 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22028 old = fc_malloc(sizeof(*old));
22029 /* temporary bitcopy just to insert correctly */
22030 *old = *real_packet;
22033 }
22034
22035 differ = (old->city_id != real_packet->city_id);
22036 if (differ) {
22037 BV_SET(fields, 0);
22038 }
22039
22040 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
22041 if (differ) {
22042 BV_SET(fields, 1);
22043 }
22044#endif /* FREECIV_DELTA_PROTOCOL */
22045
22046#ifdef FREECIV_JSON_CONNECTION
22047 struct plocation field_addr;
22048 {
22049 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22052 }
22053#endif /* FREECIV_JSON_CONNECTION */
22054
22055#ifdef FREECIV_DELTA_PROTOCOL
22056#ifdef FREECIV_JSON_CONNECTION
22057 field_addr.name = "fields";
22058#endif /* FREECIV_JSON_CONNECTION */
22059 e = 0;
22060 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22061 if (e) {
22062 log_packet_detailed("fields bitvector error detected");
22063 }
22064
22065 if (BV_ISSET(fields, 0)) {
22066 log_packet_detailed(" field 'city_id' has changed");
22067
22068#ifdef FREECIV_JSON_CONNECTION
22069 field_addr.name = "city_id";
22070#endif /* FREECIV_JSON_CONNECTION */
22071 e = 0;
22072
22073 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22074
22075 if (e) {
22076 log_packet_detailed("'city_id' field error detected");
22077 }
22078 }
22079
22080 if (BV_ISSET(fields, 1)) {
22081 log_packet_detailed(" field 'worklist' has changed");
22082
22083#ifdef FREECIV_JSON_CONNECTION
22084 field_addr.name = "worklist";
22085#endif /* FREECIV_JSON_CONNECTION */
22086 e = 0;
22087
22088 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22089
22090 if (e) {
22091 log_packet_detailed("'worklist' field error detected");
22092 }
22093 }
22094
22095 *old = *real_packet;
22096
22097#else /* FREECIV_DELTA_PROTOCOL */
22098#ifdef FREECIV_JSON_CONNECTION
22099 field_addr.name = "city_id";
22100#endif /* FREECIV_JSON_CONNECTION */
22101 e = 0;
22102
22103 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22104
22105 if (e) {
22106 log_packet_detailed("'city_id' field error detected");
22107 }
22108
22109#ifdef FREECIV_JSON_CONNECTION
22110 field_addr.name = "worklist";
22111#endif /* FREECIV_JSON_CONNECTION */
22112 e = 0;
22113
22114 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22115
22116 if (e) {
22117 log_packet_detailed("'worklist' field error detected");
22118 }
22119#endif /* FREECIV_DELTA_PROTOCOL */
22120
22122}
22123
22125{
22126 if (!pc->used) {
22127 log_error("WARNING: trying to send data to the closed connection %s",
22129 return -1;
22130 }
22131 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet != nullptr, -1,
22132 "Handler for PACKET_CITY_WORKLIST not installed");
22133 return pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet(pc, packet);
22134}
22135
22136int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
22137{
22138 struct packet_city_worklist packet, *real_packet = &packet;
22139
22141 worklist_copy(&real_packet->worklist, worklist);
22142
22144}
22145
22147{
22148 memset(packet, 0, sizeof(*packet));
22149}
22150
22151#define free_packet_city_make_specialist(_packet) (void) 0
22152#define destroy_packet_city_make_specialist free
22153
22154#ifdef FREECIV_DELTA_PROTOCOL
22155#define hash_packet_city_make_specialist_100 hash_const
22156#define cmp_packet_city_make_specialist_100 cmp_const
22158#endif /* FREECIV_DELTA_PROTOCOL */
22159
22161{
22162#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_specialist(_packet)
22164
22165#ifdef FREECIV_JSON_CONNECTION
22166 struct plocation field_addr;
22167 {
22168 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22171 }
22172#endif /* FREECIV_JSON_CONNECTION */
22173
22174 log_packet_detailed("packet_city_make_specialist_100: got info about ()");
22175
22176#ifdef FREECIV_DELTA_PROTOCOL
22179 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_SPECIALIST;
22180
22181 if (nullptr == *hash) {
22183 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22184 }
22185
22186 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22187 *real_packet = *old;
22188 } else {
22189 /* packet is already initialized empty */
22190 log_packet_detailed(" no old info");
22191 }
22192
22193#ifdef FREECIV_JSON_CONNECTION
22194 field_addr.name = "fields";
22195#endif /* FREECIV_JSON_CONNECTION */
22196 DIO_BV_GET(&din, &field_addr, fields);
22197
22198 if (BV_ISSET(fields, 0)) {
22199 log_packet_detailed(" got field 'city_id'");
22200
22201#ifdef FREECIV_JSON_CONNECTION
22202 field_addr.name = "city_id";
22203#endif /* FREECIV_JSON_CONNECTION */
22204
22205 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22207 }
22208 }
22209
22210 if (BV_ISSET(fields, 1)) {
22211 log_packet_detailed(" got field 'tile_id'");
22212
22213#ifdef FREECIV_JSON_CONNECTION
22214 field_addr.name = "tile_id";
22215#endif /* FREECIV_JSON_CONNECTION */
22216
22217 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22219 }
22220 }
22221
22222 if (nullptr == old) {
22223 old = fc_malloc(sizeof(*old));
22225 *old = *real_packet;
22227 } else {
22228 *old = *real_packet;
22229 }
22230
22231#else /* FREECIV_DELTA_PROTOCOL */
22232#ifdef FREECIV_JSON_CONNECTION
22233 field_addr.name = "city_id";
22234#endif /* FREECIV_JSON_CONNECTION */
22235
22236 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22238 }
22239
22240#ifdef FREECIV_JSON_CONNECTION
22241 field_addr.name = "tile_id";
22242#endif /* FREECIV_JSON_CONNECTION */
22243
22244 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22246 }
22247#endif /* FREECIV_DELTA_PROTOCOL */
22248
22250#undef FREE_PACKET_STRUCT
22251}
22252
22254{
22255 const struct packet_city_make_specialist *real_packet = packet;
22256 int e;
22258
22259 log_packet_detailed("packet_city_make_specialist_100: sending info about ()");
22260
22261#ifdef FREECIV_DELTA_PROTOCOL
22264 bool differ;
22265 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_SPECIALIST;
22266
22267 if (nullptr == *hash) {
22269 nullptr, nullptr, nullptr, destroy_packet_city_make_specialist);
22270 }
22271 BV_CLR_ALL(fields);
22272
22273 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22274 old = fc_malloc(sizeof(*old));
22275 /* temporary bitcopy just to insert correctly */
22276 *old = *real_packet;
22279 }
22280
22281 differ = (old->city_id != real_packet->city_id);
22282 if (differ) {
22283 BV_SET(fields, 0);
22284 }
22285
22286 differ = (old->tile_id != real_packet->tile_id);
22287 if (differ) {
22288 BV_SET(fields, 1);
22289 }
22290#endif /* FREECIV_DELTA_PROTOCOL */
22291
22292#ifdef FREECIV_JSON_CONNECTION
22293 struct plocation field_addr;
22294 {
22295 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22298 }
22299#endif /* FREECIV_JSON_CONNECTION */
22300
22301#ifdef FREECIV_DELTA_PROTOCOL
22302#ifdef FREECIV_JSON_CONNECTION
22303 field_addr.name = "fields";
22304#endif /* FREECIV_JSON_CONNECTION */
22305 e = 0;
22306 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22307 if (e) {
22308 log_packet_detailed("fields bitvector error detected");
22309 }
22310
22311 if (BV_ISSET(fields, 0)) {
22312 log_packet_detailed(" field 'city_id' has changed");
22313
22314#ifdef FREECIV_JSON_CONNECTION
22315 field_addr.name = "city_id";
22316#endif /* FREECIV_JSON_CONNECTION */
22317 e = 0;
22318
22319 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22320
22321 if (e) {
22322 log_packet_detailed("'city_id' field error detected");
22323 }
22324 }
22325
22326 if (BV_ISSET(fields, 1)) {
22327 log_packet_detailed(" field 'tile_id' has changed");
22328
22329#ifdef FREECIV_JSON_CONNECTION
22330 field_addr.name = "tile_id";
22331#endif /* FREECIV_JSON_CONNECTION */
22332 e = 0;
22333
22334 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22335
22336 if (e) {
22337 log_packet_detailed("'tile_id' field error detected");
22338 }
22339 }
22340
22341 *old = *real_packet;
22342
22343#else /* FREECIV_DELTA_PROTOCOL */
22344#ifdef FREECIV_JSON_CONNECTION
22345 field_addr.name = "city_id";
22346#endif /* FREECIV_JSON_CONNECTION */
22347 e = 0;
22348
22349 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22350
22351 if (e) {
22352 log_packet_detailed("'city_id' field error detected");
22353 }
22354
22355#ifdef FREECIV_JSON_CONNECTION
22356 field_addr.name = "tile_id";
22357#endif /* FREECIV_JSON_CONNECTION */
22358 e = 0;
22359
22360 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22361
22362 if (e) {
22363 log_packet_detailed("'tile_id' field error detected");
22364 }
22365#endif /* FREECIV_DELTA_PROTOCOL */
22366
22368}
22369
22371{
22372 if (!pc->used) {
22373 log_error("WARNING: trying to send data to the closed connection %s",
22375 return -1;
22376 }
22377 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet != nullptr, -1,
22378 "Handler for PACKET_CITY_MAKE_SPECIALIST not installed");
22379 return pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet(pc, packet);
22380}
22381
22382int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
22383{
22384 struct packet_city_make_specialist packet, *real_packet = &packet;
22385
22387 real_packet->tile_id = tile_id;
22388
22390}
22391
22393{
22394 memset(packet, 0, sizeof(*packet));
22395}
22396
22397#define free_packet_city_make_worker(_packet) (void) 0
22398#define destroy_packet_city_make_worker free
22399
22400#ifdef FREECIV_DELTA_PROTOCOL
22401#define hash_packet_city_make_worker_100 hash_const
22402#define cmp_packet_city_make_worker_100 cmp_const
22404#endif /* FREECIV_DELTA_PROTOCOL */
22405
22407{
22408#define FREE_PACKET_STRUCT(_packet) free_packet_city_make_worker(_packet)
22410
22411#ifdef FREECIV_JSON_CONNECTION
22412 struct plocation field_addr;
22413 {
22414 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22417 }
22418#endif /* FREECIV_JSON_CONNECTION */
22419
22420 log_packet_detailed("packet_city_make_worker_100: got info about ()");
22421
22422#ifdef FREECIV_DELTA_PROTOCOL
22425 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_WORKER;
22426
22427 if (nullptr == *hash) {
22429 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22430 }
22431
22432 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22433 *real_packet = *old;
22434 } else {
22435 /* packet is already initialized empty */
22436 log_packet_detailed(" no old info");
22437 }
22438
22439#ifdef FREECIV_JSON_CONNECTION
22440 field_addr.name = "fields";
22441#endif /* FREECIV_JSON_CONNECTION */
22442 DIO_BV_GET(&din, &field_addr, fields);
22443
22444 if (BV_ISSET(fields, 0)) {
22445 log_packet_detailed(" got field 'city_id'");
22446
22447#ifdef FREECIV_JSON_CONNECTION
22448 field_addr.name = "city_id";
22449#endif /* FREECIV_JSON_CONNECTION */
22450
22451 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22453 }
22454 }
22455
22456 if (BV_ISSET(fields, 1)) {
22457 log_packet_detailed(" got field 'tile_id'");
22458
22459#ifdef FREECIV_JSON_CONNECTION
22460 field_addr.name = "tile_id";
22461#endif /* FREECIV_JSON_CONNECTION */
22462
22463 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22465 }
22466 }
22467
22468 if (nullptr == old) {
22469 old = fc_malloc(sizeof(*old));
22471 *old = *real_packet;
22473 } else {
22474 *old = *real_packet;
22475 }
22476
22477#else /* FREECIV_DELTA_PROTOCOL */
22478#ifdef FREECIV_JSON_CONNECTION
22479 field_addr.name = "city_id";
22480#endif /* FREECIV_JSON_CONNECTION */
22481
22482 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22484 }
22485
22486#ifdef FREECIV_JSON_CONNECTION
22487 field_addr.name = "tile_id";
22488#endif /* FREECIV_JSON_CONNECTION */
22489
22490 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22492 }
22493#endif /* FREECIV_DELTA_PROTOCOL */
22494
22496#undef FREE_PACKET_STRUCT
22497}
22498
22500{
22501 const struct packet_city_make_worker *real_packet = packet;
22502 int e;
22504
22505 log_packet_detailed("packet_city_make_worker_100: sending info about ()");
22506
22507#ifdef FREECIV_DELTA_PROTOCOL
22510 bool differ;
22511 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_WORKER;
22512
22513 if (nullptr == *hash) {
22515 nullptr, nullptr, nullptr, destroy_packet_city_make_worker);
22516 }
22517 BV_CLR_ALL(fields);
22518
22519 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22520 old = fc_malloc(sizeof(*old));
22521 /* temporary bitcopy just to insert correctly */
22522 *old = *real_packet;
22525 }
22526
22527 differ = (old->city_id != real_packet->city_id);
22528 if (differ) {
22529 BV_SET(fields, 0);
22530 }
22531
22532 differ = (old->tile_id != real_packet->tile_id);
22533 if (differ) {
22534 BV_SET(fields, 1);
22535 }
22536#endif /* FREECIV_DELTA_PROTOCOL */
22537
22538#ifdef FREECIV_JSON_CONNECTION
22539 struct plocation field_addr;
22540 {
22541 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22544 }
22545#endif /* FREECIV_JSON_CONNECTION */
22546
22547#ifdef FREECIV_DELTA_PROTOCOL
22548#ifdef FREECIV_JSON_CONNECTION
22549 field_addr.name = "fields";
22550#endif /* FREECIV_JSON_CONNECTION */
22551 e = 0;
22552 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22553 if (e) {
22554 log_packet_detailed("fields bitvector error detected");
22555 }
22556
22557 if (BV_ISSET(fields, 0)) {
22558 log_packet_detailed(" field 'city_id' has changed");
22559
22560#ifdef FREECIV_JSON_CONNECTION
22561 field_addr.name = "city_id";
22562#endif /* FREECIV_JSON_CONNECTION */
22563 e = 0;
22564
22565 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22566
22567 if (e) {
22568 log_packet_detailed("'city_id' field error detected");
22569 }
22570 }
22571
22572 if (BV_ISSET(fields, 1)) {
22573 log_packet_detailed(" field 'tile_id' has changed");
22574
22575#ifdef FREECIV_JSON_CONNECTION
22576 field_addr.name = "tile_id";
22577#endif /* FREECIV_JSON_CONNECTION */
22578 e = 0;
22579
22580 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22581
22582 if (e) {
22583 log_packet_detailed("'tile_id' field error detected");
22584 }
22585 }
22586
22587 *old = *real_packet;
22588
22589#else /* FREECIV_DELTA_PROTOCOL */
22590#ifdef FREECIV_JSON_CONNECTION
22591 field_addr.name = "city_id";
22592#endif /* FREECIV_JSON_CONNECTION */
22593 e = 0;
22594
22595 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22596
22597 if (e) {
22598 log_packet_detailed("'city_id' field error detected");
22599 }
22600
22601#ifdef FREECIV_JSON_CONNECTION
22602 field_addr.name = "tile_id";
22603#endif /* FREECIV_JSON_CONNECTION */
22604 e = 0;
22605
22606 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22607
22608 if (e) {
22609 log_packet_detailed("'tile_id' field error detected");
22610 }
22611#endif /* FREECIV_DELTA_PROTOCOL */
22612
22614}
22615
22617{
22618 if (!pc->used) {
22619 log_error("WARNING: trying to send data to the closed connection %s",
22621 return -1;
22622 }
22623 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet != nullptr, -1,
22624 "Handler for PACKET_CITY_MAKE_WORKER not installed");
22625 return pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet(pc, packet);
22626}
22627
22628int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
22629{
22630 struct packet_city_make_worker packet, *real_packet = &packet;
22631
22633 real_packet->tile_id = tile_id;
22634
22636}
22637
22639{
22640 memset(packet, 0, sizeof(*packet));
22641}
22642
22643#define free_packet_city_change_specialist(_packet) (void) 0
22644#define destroy_packet_city_change_specialist free
22645
22646#ifdef FREECIV_DELTA_PROTOCOL
22647#define hash_packet_city_change_specialist_100 hash_const
22648#define cmp_packet_city_change_specialist_100 cmp_const
22650#endif /* FREECIV_DELTA_PROTOCOL */
22651
22653{
22654#define FREE_PACKET_STRUCT(_packet) free_packet_city_change_specialist(_packet)
22656
22657#ifdef FREECIV_JSON_CONNECTION
22658 struct plocation field_addr;
22659 {
22660 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22663 }
22664#endif /* FREECIV_JSON_CONNECTION */
22665
22666 log_packet_detailed("packet_city_change_specialist_100: got info about ()");
22667
22668#ifdef FREECIV_DELTA_PROTOCOL
22671 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE_SPECIALIST;
22672
22673 if (nullptr == *hash) {
22675 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22676 }
22677
22678 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22679 *real_packet = *old;
22680 } else {
22681 /* packet is already initialized empty */
22682 log_packet_detailed(" no old info");
22683 }
22684
22685#ifdef FREECIV_JSON_CONNECTION
22686 field_addr.name = "fields";
22687#endif /* FREECIV_JSON_CONNECTION */
22688 DIO_BV_GET(&din, &field_addr, fields);
22689
22690 if (BV_ISSET(fields, 0)) {
22691 log_packet_detailed(" got field 'city_id'");
22692
22693#ifdef FREECIV_JSON_CONNECTION
22694 field_addr.name = "city_id";
22695#endif /* FREECIV_JSON_CONNECTION */
22696
22697 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22699 }
22700 }
22701
22702 if (BV_ISSET(fields, 1)) {
22703 log_packet_detailed(" got field 'from'");
22704
22705#ifdef FREECIV_JSON_CONNECTION
22706 field_addr.name = "from";
22707#endif /* FREECIV_JSON_CONNECTION */
22708
22709 {
22710 int readin;
22711
22712 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22714 }
22715 real_packet->from = readin;
22716 }
22717 }
22718
22719 if (BV_ISSET(fields, 2)) {
22720 log_packet_detailed(" got field 'to'");
22721
22722#ifdef FREECIV_JSON_CONNECTION
22723 field_addr.name = "to";
22724#endif /* FREECIV_JSON_CONNECTION */
22725
22726 {
22727 int readin;
22728
22729 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22731 }
22732 real_packet->to = readin;
22733 }
22734 }
22735
22736 if (nullptr == old) {
22737 old = fc_malloc(sizeof(*old));
22739 *old = *real_packet;
22741 } else {
22742 *old = *real_packet;
22743 }
22744
22745#else /* FREECIV_DELTA_PROTOCOL */
22746#ifdef FREECIV_JSON_CONNECTION
22747 field_addr.name = "city_id";
22748#endif /* FREECIV_JSON_CONNECTION */
22749
22750 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22752 }
22753
22754#ifdef FREECIV_JSON_CONNECTION
22755 field_addr.name = "from";
22756#endif /* FREECIV_JSON_CONNECTION */
22757
22758 {
22759 int readin;
22760
22761 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22763 }
22764 real_packet->from = readin;
22765 }
22766
22767#ifdef FREECIV_JSON_CONNECTION
22768 field_addr.name = "to";
22769#endif /* FREECIV_JSON_CONNECTION */
22770
22771 {
22772 int readin;
22773
22774 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22776 }
22777 real_packet->to = readin;
22778 }
22779#endif /* FREECIV_DELTA_PROTOCOL */
22780
22782#undef FREE_PACKET_STRUCT
22783}
22784
22786{
22787 const struct packet_city_change_specialist *real_packet = packet;
22788 int e;
22790
22791 log_packet_detailed("packet_city_change_specialist_100: sending info about ()");
22792
22793#ifdef FREECIV_DELTA_PROTOCOL
22796 bool differ;
22797 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE_SPECIALIST;
22798
22799 if (nullptr == *hash) {
22801 nullptr, nullptr, nullptr, destroy_packet_city_change_specialist);
22802 }
22803 BV_CLR_ALL(fields);
22804
22805 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22806 old = fc_malloc(sizeof(*old));
22807 /* temporary bitcopy just to insert correctly */
22808 *old = *real_packet;
22811 }
22812
22813 differ = (old->city_id != real_packet->city_id);
22814 if (differ) {
22815 BV_SET(fields, 0);
22816 }
22817
22818 differ = (old->from != real_packet->from);
22819 if (differ) {
22820 BV_SET(fields, 1);
22821 }
22822
22823 differ = (old->to != real_packet->to);
22824 if (differ) {
22825 BV_SET(fields, 2);
22826 }
22827#endif /* FREECIV_DELTA_PROTOCOL */
22828
22829#ifdef FREECIV_JSON_CONNECTION
22830 struct plocation field_addr;
22831 {
22832 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22835 }
22836#endif /* FREECIV_JSON_CONNECTION */
22837
22838#ifdef FREECIV_DELTA_PROTOCOL
22839#ifdef FREECIV_JSON_CONNECTION
22840 field_addr.name = "fields";
22841#endif /* FREECIV_JSON_CONNECTION */
22842 e = 0;
22843 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22844 if (e) {
22845 log_packet_detailed("fields bitvector error detected");
22846 }
22847
22848 if (BV_ISSET(fields, 0)) {
22849 log_packet_detailed(" field 'city_id' has changed");
22850
22851#ifdef FREECIV_JSON_CONNECTION
22852 field_addr.name = "city_id";
22853#endif /* FREECIV_JSON_CONNECTION */
22854 e = 0;
22855
22856 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22857
22858 if (e) {
22859 log_packet_detailed("'city_id' field error detected");
22860 }
22861 }
22862
22863 if (BV_ISSET(fields, 1)) {
22864 log_packet_detailed(" field 'from' has changed");
22865
22866#ifdef FREECIV_JSON_CONNECTION
22867 field_addr.name = "from";
22868#endif /* FREECIV_JSON_CONNECTION */
22869 e = 0;
22870
22871 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22872
22873 if (e) {
22874 log_packet_detailed("'from' field error detected");
22875 }
22876 }
22877
22878 if (BV_ISSET(fields, 2)) {
22879 log_packet_detailed(" field 'to' has changed");
22880
22881#ifdef FREECIV_JSON_CONNECTION
22882 field_addr.name = "to";
22883#endif /* FREECIV_JSON_CONNECTION */
22884 e = 0;
22885
22886 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22887
22888 if (e) {
22889 log_packet_detailed("'to' field error detected");
22890 }
22891 }
22892
22893 *old = *real_packet;
22894
22895#else /* FREECIV_DELTA_PROTOCOL */
22896#ifdef FREECIV_JSON_CONNECTION
22897 field_addr.name = "city_id";
22898#endif /* FREECIV_JSON_CONNECTION */
22899 e = 0;
22900
22901 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22902
22903 if (e) {
22904 log_packet_detailed("'city_id' field error detected");
22905 }
22906
22907#ifdef FREECIV_JSON_CONNECTION
22908 field_addr.name = "from";
22909#endif /* FREECIV_JSON_CONNECTION */
22910 e = 0;
22911
22912 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
22913
22914 if (e) {
22915 log_packet_detailed("'from' field error detected");
22916 }
22917
22918#ifdef FREECIV_JSON_CONNECTION
22919 field_addr.name = "to";
22920#endif /* FREECIV_JSON_CONNECTION */
22921 e = 0;
22922
22923 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
22924
22925 if (e) {
22926 log_packet_detailed("'to' field error detected");
22927 }
22928#endif /* FREECIV_DELTA_PROTOCOL */
22929
22931}
22932
22934{
22935 if (!pc->used) {
22936 log_error("WARNING: trying to send data to the closed connection %s",
22938 return -1;
22939 }
22940 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet != nullptr, -1,
22941 "Handler for PACKET_CITY_CHANGE_SPECIALIST not installed");
22942 return pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet(pc, packet);
22943}
22944
22946{
22947 struct packet_city_change_specialist packet, *real_packet = &packet;
22948
22950 real_packet->from = from;
22951 real_packet->to = to;
22952
22954}
22955
22956static inline void init_packet_city_rename(struct packet_city_rename *packet)
22957{
22958 memset(packet, 0, sizeof(*packet));
22959}
22960
22961#define free_packet_city_rename(_packet) (void) 0
22962#define destroy_packet_city_rename free
22963
22964#ifdef FREECIV_DELTA_PROTOCOL
22965#define hash_packet_city_rename_100 hash_const
22966#define cmp_packet_city_rename_100 cmp_const
22968#endif /* FREECIV_DELTA_PROTOCOL */
22969
22971{
22972#define FREE_PACKET_STRUCT(_packet) free_packet_city_rename(_packet)
22974
22975#ifdef FREECIV_JSON_CONNECTION
22976 struct plocation field_addr;
22977 {
22978 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
22981 }
22982#endif /* FREECIV_JSON_CONNECTION */
22983
22984 log_packet_detailed("packet_city_rename_100: got info about ()");
22985
22986#ifdef FREECIV_DELTA_PROTOCOL
22988 struct packet_city_rename *old;
22989 struct genhash **hash = pc->phs.received + PACKET_CITY_RENAME;
22990
22991 if (nullptr == *hash) {
22993 nullptr, nullptr, nullptr, destroy_packet_city_rename);
22994 }
22995
22996 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22997 *real_packet = *old;
22998 } else {
22999 /* packet is already initialized empty */
23000 log_packet_detailed(" no old info");
23001 }
23002
23003#ifdef FREECIV_JSON_CONNECTION
23004 field_addr.name = "fields";
23005#endif /* FREECIV_JSON_CONNECTION */
23006 DIO_BV_GET(&din, &field_addr, fields);
23007
23008 if (BV_ISSET(fields, 0)) {
23009 log_packet_detailed(" got field 'city_id'");
23010
23011#ifdef FREECIV_JSON_CONNECTION
23012 field_addr.name = "city_id";
23013#endif /* FREECIV_JSON_CONNECTION */
23014
23015 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23017 }
23018 }
23019
23020 if (BV_ISSET(fields, 1)) {
23021 log_packet_detailed(" got field 'name'");
23022
23023#ifdef FREECIV_JSON_CONNECTION
23024 field_addr.name = "name";
23025#endif /* FREECIV_JSON_CONNECTION */
23026
23027 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23029 }
23030 }
23031
23032 if (nullptr == old) {
23033 old = fc_malloc(sizeof(*old));
23035 *old = *real_packet;
23037 } else {
23038 *old = *real_packet;
23039 }
23040
23041#else /* FREECIV_DELTA_PROTOCOL */
23042#ifdef FREECIV_JSON_CONNECTION
23043 field_addr.name = "city_id";
23044#endif /* FREECIV_JSON_CONNECTION */
23045
23046 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23048 }
23049
23050#ifdef FREECIV_JSON_CONNECTION
23051 field_addr.name = "name";
23052#endif /* FREECIV_JSON_CONNECTION */
23053
23054 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23056 }
23057#endif /* FREECIV_DELTA_PROTOCOL */
23058
23060#undef FREE_PACKET_STRUCT
23061}
23062
23063static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
23064{
23065 const struct packet_city_rename *real_packet = packet;
23066 int e;
23068
23069 log_packet_detailed("packet_city_rename_100: sending info about ()");
23070
23071#ifdef FREECIV_DELTA_PROTOCOL
23073 struct packet_city_rename *old;
23074 bool differ;
23075 struct genhash **hash = pc->phs.sent + PACKET_CITY_RENAME;
23076
23077 if (nullptr == *hash) {
23079 nullptr, nullptr, nullptr, destroy_packet_city_rename);
23080 }
23081 BV_CLR_ALL(fields);
23082
23083 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23084 old = fc_malloc(sizeof(*old));
23085 /* temporary bitcopy just to insert correctly */
23086 *old = *real_packet;
23089 }
23090
23091 differ = (old->city_id != real_packet->city_id);
23092 if (differ) {
23093 BV_SET(fields, 0);
23094 }
23095
23096 differ = (strcmp(old->name, real_packet->name) != 0);
23097 if (differ) {
23098 BV_SET(fields, 1);
23099 }
23100#endif /* FREECIV_DELTA_PROTOCOL */
23101
23102#ifdef FREECIV_JSON_CONNECTION
23103 struct plocation field_addr;
23104 {
23105 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23108 }
23109#endif /* FREECIV_JSON_CONNECTION */
23110
23111#ifdef FREECIV_DELTA_PROTOCOL
23112#ifdef FREECIV_JSON_CONNECTION
23113 field_addr.name = "fields";
23114#endif /* FREECIV_JSON_CONNECTION */
23115 e = 0;
23116 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23117 if (e) {
23118 log_packet_detailed("fields bitvector error detected");
23119 }
23120
23121 if (BV_ISSET(fields, 0)) {
23122 log_packet_detailed(" field 'city_id' has changed");
23123
23124#ifdef FREECIV_JSON_CONNECTION
23125 field_addr.name = "city_id";
23126#endif /* FREECIV_JSON_CONNECTION */
23127 e = 0;
23128
23129 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23130
23131 if (e) {
23132 log_packet_detailed("'city_id' field error detected");
23133 }
23134 }
23135
23136 if (BV_ISSET(fields, 1)) {
23137 log_packet_detailed(" field 'name' has changed");
23138
23139#ifdef FREECIV_JSON_CONNECTION
23140 field_addr.name = "name";
23141#endif /* FREECIV_JSON_CONNECTION */
23142 e = 0;
23143
23144 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23145
23146 if (e) {
23147 log_packet_detailed("'name' field error detected");
23148 }
23149 }
23150
23151 *old = *real_packet;
23152
23153#else /* FREECIV_DELTA_PROTOCOL */
23154#ifdef FREECIV_JSON_CONNECTION
23155 field_addr.name = "city_id";
23156#endif /* FREECIV_JSON_CONNECTION */
23157 e = 0;
23158
23159 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23160
23161 if (e) {
23162 log_packet_detailed("'city_id' field error detected");
23163 }
23164
23165#ifdef FREECIV_JSON_CONNECTION
23166 field_addr.name = "name";
23167#endif /* FREECIV_JSON_CONNECTION */
23168 e = 0;
23169
23170 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23171
23172 if (e) {
23173 log_packet_detailed("'name' field error detected");
23174 }
23175#endif /* FREECIV_DELTA_PROTOCOL */
23176
23178}
23179
23181{
23182 if (!pc->used) {
23183 log_error("WARNING: trying to send data to the closed connection %s",
23185 return -1;
23186 }
23187 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RENAME].packet != nullptr, -1,
23188 "Handler for PACKET_CITY_RENAME not installed");
23189 return pc->phs.handlers->send[PACKET_CITY_RENAME].packet(pc, packet);
23190}
23191
23192int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
23193{
23194 struct packet_city_rename packet, *real_packet = &packet;
23195
23197 sz_strlcpy(real_packet->name, name);
23198
23200}
23201
23203{
23204 memset(packet, 0, sizeof(*packet));
23205}
23206
23207#define free_packet_city_options_req(_packet) (void) 0
23208#define destroy_packet_city_options_req free
23209
23210#ifdef FREECIV_DELTA_PROTOCOL
23211#define hash_packet_city_options_req_100 hash_const
23212#define cmp_packet_city_options_req_100 cmp_const
23214#endif /* FREECIV_DELTA_PROTOCOL */
23215
23217{
23218#define FREE_PACKET_STRUCT(_packet) free_packet_city_options_req(_packet)
23220
23221#ifdef FREECIV_JSON_CONNECTION
23222 struct plocation field_addr;
23223 {
23224 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23227 }
23228#endif /* FREECIV_JSON_CONNECTION */
23229
23230 log_packet_detailed("packet_city_options_req_100: got info about ()");
23231
23232#ifdef FREECIV_DELTA_PROTOCOL
23235 struct genhash **hash = pc->phs.received + PACKET_CITY_OPTIONS_REQ;
23236
23237 if (nullptr == *hash) {
23239 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23240 }
23241
23242 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23243 *real_packet = *old;
23244 } else {
23245 /* packet is already initialized empty */
23246 log_packet_detailed(" no old info");
23247 }
23248
23249#ifdef FREECIV_JSON_CONNECTION
23250 field_addr.name = "fields";
23251#endif /* FREECIV_JSON_CONNECTION */
23252 DIO_BV_GET(&din, &field_addr, fields);
23253
23254 if (BV_ISSET(fields, 0)) {
23255 log_packet_detailed(" got field 'city_id'");
23256
23257#ifdef FREECIV_JSON_CONNECTION
23258 field_addr.name = "city_id";
23259#endif /* FREECIV_JSON_CONNECTION */
23260
23261 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23263 }
23264 }
23265
23266 if (BV_ISSET(fields, 1)) {
23267 log_packet_detailed(" got field 'options'");
23268
23269#ifdef FREECIV_JSON_CONNECTION
23270 field_addr.name = "options";
23271#endif /* FREECIV_JSON_CONNECTION */
23272
23273 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23275 }
23276 }
23277
23278 if (BV_ISSET(fields, 2)) {
23279 log_packet_detailed(" got field 'wl_cb'");
23280
23281#ifdef FREECIV_JSON_CONNECTION
23282 field_addr.name = "wl_cb";
23283#endif /* FREECIV_JSON_CONNECTION */
23284
23285 {
23286 int readin;
23287
23288 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23290 }
23291 real_packet->wl_cb = readin;
23292 }
23293 }
23294
23295 if (nullptr == old) {
23296 old = fc_malloc(sizeof(*old));
23298 *old = *real_packet;
23300 } else {
23301 *old = *real_packet;
23302 }
23303
23304#else /* FREECIV_DELTA_PROTOCOL */
23305#ifdef FREECIV_JSON_CONNECTION
23306 field_addr.name = "city_id";
23307#endif /* FREECIV_JSON_CONNECTION */
23308
23309 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23311 }
23312
23313#ifdef FREECIV_JSON_CONNECTION
23314 field_addr.name = "options";
23315#endif /* FREECIV_JSON_CONNECTION */
23316
23317 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23319 }
23320
23321#ifdef FREECIV_JSON_CONNECTION
23322 field_addr.name = "wl_cb";
23323#endif /* FREECIV_JSON_CONNECTION */
23324
23325 {
23326 int readin;
23327
23328 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23330 }
23331 real_packet->wl_cb = readin;
23332 }
23333#endif /* FREECIV_DELTA_PROTOCOL */
23334
23336#undef FREE_PACKET_STRUCT
23337}
23338
23340{
23341 const struct packet_city_options_req *real_packet = packet;
23342 int e;
23344
23345 log_packet_detailed("packet_city_options_req_100: sending info about ()");
23346
23347#ifdef FREECIV_DELTA_PROTOCOL
23350 bool differ;
23351 struct genhash **hash = pc->phs.sent + PACKET_CITY_OPTIONS_REQ;
23352
23353 if (nullptr == *hash) {
23355 nullptr, nullptr, nullptr, destroy_packet_city_options_req);
23356 }
23357 BV_CLR_ALL(fields);
23358
23359 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23360 old = fc_malloc(sizeof(*old));
23361 /* temporary bitcopy just to insert correctly */
23362 *old = *real_packet;
23365 }
23366
23367 differ = (old->city_id != real_packet->city_id);
23368 if (differ) {
23369 BV_SET(fields, 0);
23370 }
23371
23372 differ = !BV_ARE_EQUAL(old->options, real_packet->options);
23373 if (differ) {
23374 BV_SET(fields, 1);
23375 }
23376
23377 differ = (old->wl_cb != real_packet->wl_cb);
23378 if (differ) {
23379 BV_SET(fields, 2);
23380 }
23381#endif /* FREECIV_DELTA_PROTOCOL */
23382
23383#ifdef FREECIV_JSON_CONNECTION
23384 struct plocation field_addr;
23385 {
23386 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23389 }
23390#endif /* FREECIV_JSON_CONNECTION */
23391
23392#ifdef FREECIV_DELTA_PROTOCOL
23393#ifdef FREECIV_JSON_CONNECTION
23394 field_addr.name = "fields";
23395#endif /* FREECIV_JSON_CONNECTION */
23396 e = 0;
23397 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23398 if (e) {
23399 log_packet_detailed("fields bitvector error detected");
23400 }
23401
23402 if (BV_ISSET(fields, 0)) {
23403 log_packet_detailed(" field 'city_id' has changed");
23404
23405#ifdef FREECIV_JSON_CONNECTION
23406 field_addr.name = "city_id";
23407#endif /* FREECIV_JSON_CONNECTION */
23408 e = 0;
23409
23410 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23411
23412 if (e) {
23413 log_packet_detailed("'city_id' field error detected");
23414 }
23415 }
23416
23417 if (BV_ISSET(fields, 1)) {
23418 log_packet_detailed(" field 'options' has changed");
23419
23420#ifdef FREECIV_JSON_CONNECTION
23421 field_addr.name = "options";
23422#endif /* FREECIV_JSON_CONNECTION */
23423 e = 0;
23424
23425 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23426
23427 if (e) {
23428 log_packet_detailed("'options' field error detected");
23429 }
23430 }
23431
23432 if (BV_ISSET(fields, 2)) {
23433 log_packet_detailed(" field 'wl_cb' has changed");
23434
23435#ifdef FREECIV_JSON_CONNECTION
23436 field_addr.name = "wl_cb";
23437#endif /* FREECIV_JSON_CONNECTION */
23438 e = 0;
23439
23440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23441
23442 if (e) {
23443 log_packet_detailed("'wl_cb' field error detected");
23444 }
23445 }
23446
23447 *old = *real_packet;
23448
23449#else /* FREECIV_DELTA_PROTOCOL */
23450#ifdef FREECIV_JSON_CONNECTION
23451 field_addr.name = "city_id";
23452#endif /* FREECIV_JSON_CONNECTION */
23453 e = 0;
23454
23455 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23456
23457 if (e) {
23458 log_packet_detailed("'city_id' field error detected");
23459 }
23460
23461#ifdef FREECIV_JSON_CONNECTION
23462 field_addr.name = "options";
23463#endif /* FREECIV_JSON_CONNECTION */
23464 e = 0;
23465
23466 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->options);
23467
23468 if (e) {
23469 log_packet_detailed("'options' field error detected");
23470 }
23471
23472#ifdef FREECIV_JSON_CONNECTION
23473 field_addr.name = "wl_cb";
23474#endif /* FREECIV_JSON_CONNECTION */
23475 e = 0;
23476
23477 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23478
23479 if (e) {
23480 log_packet_detailed("'wl_cb' field error detected");
23481 }
23482#endif /* FREECIV_DELTA_PROTOCOL */
23483
23485}
23486
23488{
23489 if (!pc->used) {
23490 log_error("WARNING: trying to send data to the closed connection %s",
23492 return -1;
23493 }
23494 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet != nullptr, -1,
23495 "Handler for PACKET_CITY_OPTIONS_REQ not installed");
23496 return pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet(pc, packet);
23497}
23498
23500{
23501 struct packet_city_options_req packet, *real_packet = &packet;
23502
23504 real_packet->options = options;
23505 real_packet->wl_cb = wl_cb;
23506
23508}
23509
23510static inline void init_packet_city_refresh(struct packet_city_refresh *packet)
23511{
23512 memset(packet, 0, sizeof(*packet));
23513}
23514
23515#define free_packet_city_refresh(_packet) (void) 0
23516#define destroy_packet_city_refresh free
23517
23518#ifdef FREECIV_DELTA_PROTOCOL
23519#define hash_packet_city_refresh_100 hash_const
23520#define cmp_packet_city_refresh_100 cmp_const
23522#endif /* FREECIV_DELTA_PROTOCOL */
23523
23525{
23526#define FREE_PACKET_STRUCT(_packet) free_packet_city_refresh(_packet)
23528
23529#ifdef FREECIV_JSON_CONNECTION
23530 struct plocation field_addr;
23531 {
23532 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23535 }
23536#endif /* FREECIV_JSON_CONNECTION */
23537
23538 log_packet_detailed("packet_city_refresh_100: got info about ()");
23539
23540#ifdef FREECIV_DELTA_PROTOCOL
23542 struct packet_city_refresh *old;
23543 struct genhash **hash = pc->phs.received + PACKET_CITY_REFRESH;
23544
23545 if (nullptr == *hash) {
23547 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23548 }
23549
23550 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23551 *real_packet = *old;
23552 } else {
23553 /* packet is already initialized empty */
23554 log_packet_detailed(" no old info");
23555 }
23556
23557#ifdef FREECIV_JSON_CONNECTION
23558 field_addr.name = "fields";
23559#endif /* FREECIV_JSON_CONNECTION */
23560 DIO_BV_GET(&din, &field_addr, fields);
23561
23562 if (BV_ISSET(fields, 0)) {
23563 log_packet_detailed(" got field 'city_id'");
23564
23565#ifdef FREECIV_JSON_CONNECTION
23566 field_addr.name = "city_id";
23567#endif /* FREECIV_JSON_CONNECTION */
23568
23569 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23571 }
23572 }
23573
23574 if (nullptr == old) {
23575 old = fc_malloc(sizeof(*old));
23577 *old = *real_packet;
23579 } else {
23580 *old = *real_packet;
23581 }
23582
23583#else /* FREECIV_DELTA_PROTOCOL */
23584#ifdef FREECIV_JSON_CONNECTION
23585 field_addr.name = "city_id";
23586#endif /* FREECIV_JSON_CONNECTION */
23587
23588 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23590 }
23591#endif /* FREECIV_DELTA_PROTOCOL */
23592
23594#undef FREE_PACKET_STRUCT
23595}
23596
23597static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
23598{
23599 const struct packet_city_refresh *real_packet = packet;
23600 int e;
23602
23603 log_packet_detailed("packet_city_refresh_100: sending info about ()");
23604
23605#ifdef FREECIV_DELTA_PROTOCOL
23607 struct packet_city_refresh *old;
23608 bool differ;
23609 struct genhash **hash = pc->phs.sent + PACKET_CITY_REFRESH;
23610
23611 if (nullptr == *hash) {
23613 nullptr, nullptr, nullptr, destroy_packet_city_refresh);
23614 }
23615 BV_CLR_ALL(fields);
23616
23617 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23618 old = fc_malloc(sizeof(*old));
23619 /* temporary bitcopy just to insert correctly */
23620 *old = *real_packet;
23623 }
23624
23625 differ = (old->city_id != real_packet->city_id);
23626 if (differ) {
23627 BV_SET(fields, 0);
23628 }
23629#endif /* FREECIV_DELTA_PROTOCOL */
23630
23631#ifdef FREECIV_JSON_CONNECTION
23632 struct plocation field_addr;
23633 {
23634 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23637 }
23638#endif /* FREECIV_JSON_CONNECTION */
23639
23640#ifdef FREECIV_DELTA_PROTOCOL
23641#ifdef FREECIV_JSON_CONNECTION
23642 field_addr.name = "fields";
23643#endif /* FREECIV_JSON_CONNECTION */
23644 e = 0;
23645 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23646 if (e) {
23647 log_packet_detailed("fields bitvector error detected");
23648 }
23649
23650 if (BV_ISSET(fields, 0)) {
23651 log_packet_detailed(" field 'city_id' has changed");
23652
23653#ifdef FREECIV_JSON_CONNECTION
23654 field_addr.name = "city_id";
23655#endif /* FREECIV_JSON_CONNECTION */
23656 e = 0;
23657
23658 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23659
23660 if (e) {
23661 log_packet_detailed("'city_id' field error detected");
23662 }
23663 }
23664
23665 *old = *real_packet;
23666
23667#else /* FREECIV_DELTA_PROTOCOL */
23668#ifdef FREECIV_JSON_CONNECTION
23669 field_addr.name = "city_id";
23670#endif /* FREECIV_JSON_CONNECTION */
23671 e = 0;
23672
23673 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23674
23675 if (e) {
23676 log_packet_detailed("'city_id' field error detected");
23677 }
23678#endif /* FREECIV_DELTA_PROTOCOL */
23679
23681}
23682
23684{
23685 if (!pc->used) {
23686 log_error("WARNING: trying to send data to the closed connection %s",
23688 return -1;
23689 }
23690 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REFRESH].packet != nullptr, -1,
23691 "Handler for PACKET_CITY_REFRESH not installed");
23692 return pc->phs.handlers->send[PACKET_CITY_REFRESH].packet(pc, packet);
23693}
23694
23695int dsend_packet_city_refresh(struct connection *pc, int city_id)
23696{
23697 struct packet_city_refresh packet, *real_packet = &packet;
23698
23700
23702}
23703
23705{
23706 memset(packet, 0, sizeof(*packet));
23707}
23708
23709#define free_packet_city_name_suggestion_req(_packet) (void) 0
23710#define destroy_packet_city_name_suggestion_req free
23711
23712#ifdef FREECIV_DELTA_PROTOCOL
23713#define hash_packet_city_name_suggestion_req_100 hash_const
23714#define cmp_packet_city_name_suggestion_req_100 cmp_const
23716#endif /* FREECIV_DELTA_PROTOCOL */
23717
23719{
23720#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_req(_packet)
23722
23723#ifdef FREECIV_JSON_CONNECTION
23724 struct plocation field_addr;
23725 {
23726 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23729 }
23730#endif /* FREECIV_JSON_CONNECTION */
23731
23732 log_packet_detailed("packet_city_name_suggestion_req_100: got info about ()");
23733
23734#ifdef FREECIV_DELTA_PROTOCOL
23737 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_REQ;
23738
23739 if (nullptr == *hash) {
23741 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23742 }
23743
23744 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23745 *real_packet = *old;
23746 } else {
23747 /* packet is already initialized empty */
23748 log_packet_detailed(" no old info");
23749 }
23750
23751#ifdef FREECIV_JSON_CONNECTION
23752 field_addr.name = "fields";
23753#endif /* FREECIV_JSON_CONNECTION */
23754 DIO_BV_GET(&din, &field_addr, fields);
23755
23756 if (BV_ISSET(fields, 0)) {
23757 log_packet_detailed(" got field 'unit_id'");
23758
23759#ifdef FREECIV_JSON_CONNECTION
23760 field_addr.name = "unit_id";
23761#endif /* FREECIV_JSON_CONNECTION */
23762
23763 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23765 }
23766 }
23767
23768 if (nullptr == old) {
23769 old = fc_malloc(sizeof(*old));
23771 *old = *real_packet;
23773 } else {
23774 *old = *real_packet;
23775 }
23776
23777#else /* FREECIV_DELTA_PROTOCOL */
23778#ifdef FREECIV_JSON_CONNECTION
23779 field_addr.name = "unit_id";
23780#endif /* FREECIV_JSON_CONNECTION */
23781
23782 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23784 }
23785#endif /* FREECIV_DELTA_PROTOCOL */
23786
23788#undef FREE_PACKET_STRUCT
23789}
23790
23792{
23793 const struct packet_city_name_suggestion_req *real_packet = packet;
23794 int e;
23796
23797 log_packet_detailed("packet_city_name_suggestion_req_100: sending info about ()");
23798
23799#ifdef FREECIV_DELTA_PROTOCOL
23802 bool differ;
23803 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_REQ;
23804
23805 if (nullptr == *hash) {
23807 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_req);
23808 }
23809 BV_CLR_ALL(fields);
23810
23811 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23812 old = fc_malloc(sizeof(*old));
23813 /* temporary bitcopy just to insert correctly */
23814 *old = *real_packet;
23817 }
23818
23819 differ = (old->unit_id != real_packet->unit_id);
23820 if (differ) {
23821 BV_SET(fields, 0);
23822 }
23823#endif /* FREECIV_DELTA_PROTOCOL */
23824
23825#ifdef FREECIV_JSON_CONNECTION
23826 struct plocation field_addr;
23827 {
23828 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23831 }
23832#endif /* FREECIV_JSON_CONNECTION */
23833
23834#ifdef FREECIV_DELTA_PROTOCOL
23835#ifdef FREECIV_JSON_CONNECTION
23836 field_addr.name = "fields";
23837#endif /* FREECIV_JSON_CONNECTION */
23838 e = 0;
23839 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23840 if (e) {
23841 log_packet_detailed("fields bitvector error detected");
23842 }
23843
23844 if (BV_ISSET(fields, 0)) {
23845 log_packet_detailed(" field 'unit_id' has changed");
23846
23847#ifdef FREECIV_JSON_CONNECTION
23848 field_addr.name = "unit_id";
23849#endif /* FREECIV_JSON_CONNECTION */
23850 e = 0;
23851
23852 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23853
23854 if (e) {
23855 log_packet_detailed("'unit_id' field error detected");
23856 }
23857 }
23858
23859 *old = *real_packet;
23860
23861#else /* FREECIV_DELTA_PROTOCOL */
23862#ifdef FREECIV_JSON_CONNECTION
23863 field_addr.name = "unit_id";
23864#endif /* FREECIV_JSON_CONNECTION */
23865 e = 0;
23866
23867 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23868
23869 if (e) {
23870 log_packet_detailed("'unit_id' field error detected");
23871 }
23872#endif /* FREECIV_DELTA_PROTOCOL */
23873
23875}
23876
23878{
23879 if (!pc->used) {
23880 log_error("WARNING: trying to send data to the closed connection %s",
23882 return -1;
23883 }
23884 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet != nullptr, -1,
23885 "Handler for PACKET_CITY_NAME_SUGGESTION_REQ not installed");
23886 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet(pc, packet);
23887}
23888
23890{
23891 struct packet_city_name_suggestion_req packet, *real_packet = &packet;
23892
23894
23896}
23897
23899{
23900 memset(packet, 0, sizeof(*packet));
23901}
23902
23903#define free_packet_city_name_suggestion_info(_packet) (void) 0
23904#define destroy_packet_city_name_suggestion_info free
23905
23906#ifdef FREECIV_DELTA_PROTOCOL
23907#define hash_packet_city_name_suggestion_info_100 hash_const
23908#define cmp_packet_city_name_suggestion_info_100 cmp_const
23910#endif /* FREECIV_DELTA_PROTOCOL */
23911
23913{
23914#define FREE_PACKET_STRUCT(_packet) free_packet_city_name_suggestion_info(_packet)
23916
23917#ifdef FREECIV_JSON_CONNECTION
23918 struct plocation field_addr;
23919 {
23920 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
23923 }
23924#endif /* FREECIV_JSON_CONNECTION */
23925
23926 log_packet_detailed("packet_city_name_suggestion_info_100: got info about ()");
23927
23928#ifdef FREECIV_DELTA_PROTOCOL
23931 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_INFO;
23932
23933 if (nullptr == *hash) {
23935 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
23936 }
23937
23938 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23939 *real_packet = *old;
23940 } else {
23941 /* packet is already initialized empty */
23942 log_packet_detailed(" no old info");
23943 }
23944
23945#ifdef FREECIV_JSON_CONNECTION
23946 field_addr.name = "fields";
23947#endif /* FREECIV_JSON_CONNECTION */
23948 DIO_BV_GET(&din, &field_addr, fields);
23949
23950 if (BV_ISSET(fields, 0)) {
23951 log_packet_detailed(" got field 'unit_id'");
23952
23953#ifdef FREECIV_JSON_CONNECTION
23954 field_addr.name = "unit_id";
23955#endif /* FREECIV_JSON_CONNECTION */
23956
23957 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23959 }
23960 }
23961
23962 if (BV_ISSET(fields, 1)) {
23963 log_packet_detailed(" got field 'name'");
23964
23965#ifdef FREECIV_JSON_CONNECTION
23966 field_addr.name = "name";
23967#endif /* FREECIV_JSON_CONNECTION */
23968
23969 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23971 }
23972 }
23973
23974 if (nullptr == old) {
23975 old = fc_malloc(sizeof(*old));
23977 *old = *real_packet;
23979 } else {
23980 *old = *real_packet;
23981 }
23982
23983#else /* FREECIV_DELTA_PROTOCOL */
23984#ifdef FREECIV_JSON_CONNECTION
23985 field_addr.name = "unit_id";
23986#endif /* FREECIV_JSON_CONNECTION */
23987
23988 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23990 }
23991
23992#ifdef FREECIV_JSON_CONNECTION
23993 field_addr.name = "name";
23994#endif /* FREECIV_JSON_CONNECTION */
23995
23996 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23998 }
23999#endif /* FREECIV_DELTA_PROTOCOL */
24000
24002#undef FREE_PACKET_STRUCT
24003}
24004
24006{
24007 const struct packet_city_name_suggestion_info *real_packet = packet;
24008 int e;
24010
24011 log_packet_detailed("packet_city_name_suggestion_info_100: sending info about ()");
24012
24013#ifdef FREECIV_DELTA_PROTOCOL
24016 bool differ;
24017 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_INFO;
24018
24019 if (nullptr == *hash) {
24021 nullptr, nullptr, nullptr, destroy_packet_city_name_suggestion_info);
24022 }
24023 BV_CLR_ALL(fields);
24024
24025 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24026 old = fc_malloc(sizeof(*old));
24027 /* temporary bitcopy just to insert correctly */
24028 *old = *real_packet;
24031 }
24032
24033 differ = (old->unit_id != real_packet->unit_id);
24034 if (differ) {
24035 BV_SET(fields, 0);
24036 }
24037
24038 differ = (strcmp(old->name, real_packet->name) != 0);
24039 if (differ) {
24040 BV_SET(fields, 1);
24041 }
24042#endif /* FREECIV_DELTA_PROTOCOL */
24043
24044#ifdef FREECIV_JSON_CONNECTION
24045 struct plocation field_addr;
24046 {
24047 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24050 }
24051#endif /* FREECIV_JSON_CONNECTION */
24052
24053#ifdef FREECIV_DELTA_PROTOCOL
24054#ifdef FREECIV_JSON_CONNECTION
24055 field_addr.name = "fields";
24056#endif /* FREECIV_JSON_CONNECTION */
24057 e = 0;
24058 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24059 if (e) {
24060 log_packet_detailed("fields bitvector error detected");
24061 }
24062
24063 if (BV_ISSET(fields, 0)) {
24064 log_packet_detailed(" field 'unit_id' has changed");
24065
24066#ifdef FREECIV_JSON_CONNECTION
24067 field_addr.name = "unit_id";
24068#endif /* FREECIV_JSON_CONNECTION */
24069 e = 0;
24070
24071 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24072
24073 if (e) {
24074 log_packet_detailed("'unit_id' field error detected");
24075 }
24076 }
24077
24078 if (BV_ISSET(fields, 1)) {
24079 log_packet_detailed(" field 'name' has changed");
24080
24081#ifdef FREECIV_JSON_CONNECTION
24082 field_addr.name = "name";
24083#endif /* FREECIV_JSON_CONNECTION */
24084 e = 0;
24085
24086 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24087
24088 if (e) {
24089 log_packet_detailed("'name' field error detected");
24090 }
24091 }
24092
24093 *old = *real_packet;
24094
24095#else /* FREECIV_DELTA_PROTOCOL */
24096#ifdef FREECIV_JSON_CONNECTION
24097 field_addr.name = "unit_id";
24098#endif /* FREECIV_JSON_CONNECTION */
24099 e = 0;
24100
24101 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24102
24103 if (e) {
24104 log_packet_detailed("'unit_id' field error detected");
24105 }
24106
24107#ifdef FREECIV_JSON_CONNECTION
24108 field_addr.name = "name";
24109#endif /* FREECIV_JSON_CONNECTION */
24110 e = 0;
24111
24112 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24113
24114 if (e) {
24115 log_packet_detailed("'name' field error detected");
24116 }
24117#endif /* FREECIV_DELTA_PROTOCOL */
24118
24120}
24121
24123{
24124 if (!pc->used) {
24125 log_error("WARNING: trying to send data to the closed connection %s",
24127 return -1;
24128 }
24129 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet != nullptr, -1,
24130 "Handler for PACKET_CITY_NAME_SUGGESTION_INFO not installed");
24131 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet(pc, packet);
24132}
24133
24140
24141int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
24142{
24143 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24144
24146 sz_strlcpy(real_packet->name, name);
24147
24149}
24150
24152{
24153 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24154
24156 sz_strlcpy(real_packet->name, name);
24157
24159}
24160
24162{
24163 memset(packet, 0, sizeof(*packet));
24164}
24165
24166#define free_packet_city_sabotage_list(_packet) (void) 0
24167#define destroy_packet_city_sabotage_list free
24168
24169#ifdef FREECIV_DELTA_PROTOCOL
24170#define hash_packet_city_sabotage_list_100 hash_const
24171#define cmp_packet_city_sabotage_list_100 cmp_const
24173#endif /* FREECIV_DELTA_PROTOCOL */
24174
24176{
24177#define FREE_PACKET_STRUCT(_packet) free_packet_city_sabotage_list(_packet)
24179
24180#ifdef FREECIV_JSON_CONNECTION
24181 struct plocation field_addr;
24182 {
24183 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24186 }
24187#endif /* FREECIV_JSON_CONNECTION */
24188
24189 log_packet_detailed("packet_city_sabotage_list_100: got info about ()");
24190
24191#ifdef FREECIV_DELTA_PROTOCOL
24194 struct genhash **hash = pc->phs.received + PACKET_CITY_SABOTAGE_LIST;
24195
24196 if (nullptr == *hash) {
24198 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24199 }
24200
24201 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24202 *real_packet = *old;
24203 } else {
24204 /* packet is already initialized empty */
24205 log_packet_detailed(" no old info");
24206 }
24207
24208#ifdef FREECIV_JSON_CONNECTION
24209 field_addr.name = "fields";
24210#endif /* FREECIV_JSON_CONNECTION */
24211 DIO_BV_GET(&din, &field_addr, fields);
24212
24213 if (BV_ISSET(fields, 0)) {
24214 log_packet_detailed(" got field 'actor_id'");
24215
24216#ifdef FREECIV_JSON_CONNECTION
24217 field_addr.name = "actor_id";
24218#endif /* FREECIV_JSON_CONNECTION */
24219
24220 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24222 }
24223 }
24224
24225 if (BV_ISSET(fields, 1)) {
24226 log_packet_detailed(" got field 'city_id'");
24227
24228#ifdef FREECIV_JSON_CONNECTION
24229 field_addr.name = "city_id";
24230#endif /* FREECIV_JSON_CONNECTION */
24231
24232 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24234 }
24235 }
24236
24237 if (BV_ISSET(fields, 2)) {
24238 log_packet_detailed(" got field 'improvements'");
24239
24240#ifdef FREECIV_JSON_CONNECTION
24241 field_addr.name = "improvements";
24242#endif /* FREECIV_JSON_CONNECTION */
24243
24244 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24245 RECEIVE_PACKET_FIELD_ERROR(improvements);
24246 }
24247 }
24248
24249 if (BV_ISSET(fields, 3)) {
24250 log_packet_detailed(" got field 'act_id'");
24251
24252#ifdef FREECIV_JSON_CONNECTION
24253 field_addr.name = "act_id";
24254#endif /* FREECIV_JSON_CONNECTION */
24255
24256 {
24257 int readin;
24258
24259 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24261 }
24262 real_packet->act_id = readin;
24263 }
24264 }
24265
24266 if (BV_ISSET(fields, 4)) {
24267 log_packet_detailed(" got field 'request_kind'");
24268
24269#ifdef FREECIV_JSON_CONNECTION
24270 field_addr.name = "request_kind";
24271#endif /* FREECIV_JSON_CONNECTION */
24272
24273 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24274 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24275 }
24276 }
24277
24278 if (nullptr == old) {
24279 old = fc_malloc(sizeof(*old));
24281 *old = *real_packet;
24283 } else {
24284 *old = *real_packet;
24285 }
24286
24287#else /* FREECIV_DELTA_PROTOCOL */
24288#ifdef FREECIV_JSON_CONNECTION
24289 field_addr.name = "actor_id";
24290#endif /* FREECIV_JSON_CONNECTION */
24291
24292 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24294 }
24295
24296#ifdef FREECIV_JSON_CONNECTION
24297 field_addr.name = "city_id";
24298#endif /* FREECIV_JSON_CONNECTION */
24299
24300 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24302 }
24303
24304#ifdef FREECIV_JSON_CONNECTION
24305 field_addr.name = "improvements";
24306#endif /* FREECIV_JSON_CONNECTION */
24307
24308 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24309 RECEIVE_PACKET_FIELD_ERROR(improvements);
24310 }
24311
24312#ifdef FREECIV_JSON_CONNECTION
24313 field_addr.name = "act_id";
24314#endif /* FREECIV_JSON_CONNECTION */
24315
24316 {
24317 int readin;
24318
24319 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24321 }
24322 real_packet->act_id = readin;
24323 }
24324
24325#ifdef FREECIV_JSON_CONNECTION
24326 field_addr.name = "request_kind";
24327#endif /* FREECIV_JSON_CONNECTION */
24328
24329 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24330 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24331 }
24332#endif /* FREECIV_DELTA_PROTOCOL */
24333
24335#undef FREE_PACKET_STRUCT
24336}
24337
24339{
24340 const struct packet_city_sabotage_list *real_packet = packet;
24341 int e;
24343
24344 log_packet_detailed("packet_city_sabotage_list_100: sending info about ()");
24345
24346#ifdef FREECIV_DELTA_PROTOCOL
24349 bool differ;
24350 struct genhash **hash = pc->phs.sent + PACKET_CITY_SABOTAGE_LIST;
24351
24352 if (nullptr == *hash) {
24354 nullptr, nullptr, nullptr, destroy_packet_city_sabotage_list);
24355 }
24356 BV_CLR_ALL(fields);
24357
24358 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24359 old = fc_malloc(sizeof(*old));
24360 /* temporary bitcopy just to insert correctly */
24361 *old = *real_packet;
24364 }
24365
24366 differ = (old->actor_id != real_packet->actor_id);
24367 if (differ) {
24368 BV_SET(fields, 0);
24369 }
24370
24371 differ = (old->city_id != real_packet->city_id);
24372 if (differ) {
24373 BV_SET(fields, 1);
24374 }
24375
24376 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
24377 if (differ) {
24378 BV_SET(fields, 2);
24379 }
24380
24381 differ = (old->act_id != real_packet->act_id);
24382 if (differ) {
24383 BV_SET(fields, 3);
24384 }
24385
24386 differ = (old->request_kind != real_packet->request_kind);
24387 if (differ) {
24388 BV_SET(fields, 4);
24389 }
24390#endif /* FREECIV_DELTA_PROTOCOL */
24391
24392#ifdef FREECIV_JSON_CONNECTION
24393 struct plocation field_addr;
24394 {
24395 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24398 }
24399#endif /* FREECIV_JSON_CONNECTION */
24400
24401#ifdef FREECIV_DELTA_PROTOCOL
24402#ifdef FREECIV_JSON_CONNECTION
24403 field_addr.name = "fields";
24404#endif /* FREECIV_JSON_CONNECTION */
24405 e = 0;
24406 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24407 if (e) {
24408 log_packet_detailed("fields bitvector error detected");
24409 }
24410
24411 if (BV_ISSET(fields, 0)) {
24412 log_packet_detailed(" field 'actor_id' has changed");
24413
24414#ifdef FREECIV_JSON_CONNECTION
24415 field_addr.name = "actor_id";
24416#endif /* FREECIV_JSON_CONNECTION */
24417 e = 0;
24418
24419 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24420
24421 if (e) {
24422 log_packet_detailed("'actor_id' field error detected");
24423 }
24424 }
24425
24426 if (BV_ISSET(fields, 1)) {
24427 log_packet_detailed(" field 'city_id' has changed");
24428
24429#ifdef FREECIV_JSON_CONNECTION
24430 field_addr.name = "city_id";
24431#endif /* FREECIV_JSON_CONNECTION */
24432 e = 0;
24433
24434 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24435
24436 if (e) {
24437 log_packet_detailed("'city_id' field error detected");
24438 }
24439 }
24440
24441 if (BV_ISSET(fields, 2)) {
24442 log_packet_detailed(" field 'improvements' has changed");
24443
24444#ifdef FREECIV_JSON_CONNECTION
24445 field_addr.name = "improvements";
24446#endif /* FREECIV_JSON_CONNECTION */
24447 e = 0;
24448
24449 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24450
24451 if (e) {
24452 log_packet_detailed("'improvements' field error detected");
24453 }
24454 }
24455
24456 if (BV_ISSET(fields, 3)) {
24457 log_packet_detailed(" field 'act_id' has changed");
24458
24459#ifdef FREECIV_JSON_CONNECTION
24460 field_addr.name = "act_id";
24461#endif /* FREECIV_JSON_CONNECTION */
24462 e = 0;
24463
24464 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24465
24466 if (e) {
24467 log_packet_detailed("'act_id' field error detected");
24468 }
24469 }
24470
24471 if (BV_ISSET(fields, 4)) {
24472 log_packet_detailed(" field 'request_kind' has changed");
24473
24474#ifdef FREECIV_JSON_CONNECTION
24475 field_addr.name = "request_kind";
24476#endif /* FREECIV_JSON_CONNECTION */
24477 e = 0;
24478
24479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24480
24481 if (e) {
24482 log_packet_detailed("'request_kind' field error detected");
24483 }
24484 }
24485
24486 *old = *real_packet;
24487
24488#else /* FREECIV_DELTA_PROTOCOL */
24489#ifdef FREECIV_JSON_CONNECTION
24490 field_addr.name = "actor_id";
24491#endif /* FREECIV_JSON_CONNECTION */
24492 e = 0;
24493
24494 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24495
24496 if (e) {
24497 log_packet_detailed("'actor_id' field error detected");
24498 }
24499
24500#ifdef FREECIV_JSON_CONNECTION
24501 field_addr.name = "city_id";
24502#endif /* FREECIV_JSON_CONNECTION */
24503 e = 0;
24504
24505 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24506
24507 if (e) {
24508 log_packet_detailed("'city_id' field error detected");
24509 }
24510
24511#ifdef FREECIV_JSON_CONNECTION
24512 field_addr.name = "improvements";
24513#endif /* FREECIV_JSON_CONNECTION */
24514 e = 0;
24515
24516 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->improvements);
24517
24518 if (e) {
24519 log_packet_detailed("'improvements' field error detected");
24520 }
24521
24522#ifdef FREECIV_JSON_CONNECTION
24523 field_addr.name = "act_id";
24524#endif /* FREECIV_JSON_CONNECTION */
24525 e = 0;
24526
24527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24528
24529 if (e) {
24530 log_packet_detailed("'act_id' field error detected");
24531 }
24532
24533#ifdef FREECIV_JSON_CONNECTION
24534 field_addr.name = "request_kind";
24535#endif /* FREECIV_JSON_CONNECTION */
24536 e = 0;
24537
24538 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24539
24540 if (e) {
24541 log_packet_detailed("'request_kind' field error detected");
24542 }
24543#endif /* FREECIV_DELTA_PROTOCOL */
24544
24546}
24547
24549{
24550 if (!pc->used) {
24551 log_error("WARNING: trying to send data to the closed connection %s",
24553 return -1;
24554 }
24555 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet != nullptr, -1,
24556 "Handler for PACKET_CITY_SABOTAGE_LIST not installed");
24557 return pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet(pc, packet);
24558}
24559
24561{
24562 conn_list_iterate(dest, pconn) {
24565}
24566
24568{
24569 memset(packet, 0, sizeof(*packet));
24570}
24571
24572#define free_packet_city_rally_point(_packet) (void) 0
24573#define destroy_packet_city_rally_point free
24574
24575#ifdef FREECIV_DELTA_PROTOCOL
24576#define hash_packet_city_rally_point_100 hash_const
24577#define cmp_packet_city_rally_point_100 cmp_const
24579#endif /* FREECIV_DELTA_PROTOCOL */
24580
24582{
24583#define FREE_PACKET_STRUCT(_packet) free_packet_city_rally_point(_packet)
24585
24586#ifdef FREECIV_JSON_CONNECTION
24587 struct plocation field_addr;
24588 {
24589 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24592 }
24593#endif /* FREECIV_JSON_CONNECTION */
24594
24595 log_packet_detailed("packet_city_rally_point_100: got info about ()");
24596
24597#ifdef FREECIV_DELTA_PROTOCOL
24600 struct genhash **hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
24601
24602 if (nullptr == *hash) {
24604 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24605 }
24606
24607 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24608 *real_packet = *old;
24609 } else {
24610 /* packet is already initialized empty */
24611 log_packet_detailed(" no old info");
24612 }
24613
24614#ifdef FREECIV_JSON_CONNECTION
24615 field_addr.name = "fields";
24616#endif /* FREECIV_JSON_CONNECTION */
24617 DIO_BV_GET(&din, &field_addr, fields);
24618
24619 if (BV_ISSET(fields, 0)) {
24620 log_packet_detailed(" got field 'id'");
24621
24622#ifdef FREECIV_JSON_CONNECTION
24623 field_addr.name = "id";
24624#endif /* FREECIV_JSON_CONNECTION */
24625
24626 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24628 }
24629 }
24630
24631 if (BV_ISSET(fields, 1)) {
24632 log_packet_detailed(" got field 'length'");
24633
24634#ifdef FREECIV_JSON_CONNECTION
24635 field_addr.name = "length";
24636#endif /* FREECIV_JSON_CONNECTION */
24637
24638 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24640 }
24641 }
24642
24643 real_packet->persistent = BV_ISSET(fields, 2);
24644
24645 real_packet->vigilant = BV_ISSET(fields, 3);
24646
24647 if (BV_ISSET(fields, 4)) {
24648 log_packet_detailed(" got field 'orders'");
24649
24650#ifdef FREECIV_JSON_CONNECTION
24651 field_addr.name = "orders";
24652#endif /* FREECIV_JSON_CONNECTION */
24653
24654 {
24655 int i;
24656
24657 if (real_packet->length > MAX_LEN_ROUTE) {
24658 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24659 }
24660
24661#ifdef FREECIV_JSON_CONNECTION
24662 /* Enter array. */
24663 field_addr.sub_location = plocation_elem_new(0);
24664#endif /* FREECIV_JSON_CONNECTION */
24665
24666 for (i = 0; i < real_packet->length; i++) {
24667#ifdef FREECIV_JSON_CONNECTION
24668 /* Next array element */
24669 field_addr.sub_location->number = i;
24670#endif /* FREECIV_JSON_CONNECTION */
24671
24672 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24674 }
24675 }
24676
24677#ifdef FREECIV_JSON_CONNECTION
24678 /* Exit array. */
24679 FC_FREE(field_addr.sub_location);
24680#endif /* FREECIV_JSON_CONNECTION */
24681 }
24682 }
24683
24684 if (nullptr == old) {
24685 old = fc_malloc(sizeof(*old));
24687 *old = *real_packet;
24689 } else {
24690 *old = *real_packet;
24691 }
24692
24693#else /* FREECIV_DELTA_PROTOCOL */
24694#ifdef FREECIV_JSON_CONNECTION
24695 field_addr.name = "id";
24696#endif /* FREECIV_JSON_CONNECTION */
24697
24698 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24700 }
24701
24702#ifdef FREECIV_JSON_CONNECTION
24703 field_addr.name = "length";
24704#endif /* FREECIV_JSON_CONNECTION */
24705
24706 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24708 }
24709
24710#ifdef FREECIV_JSON_CONNECTION
24711 field_addr.name = "persistent";
24712#endif /* FREECIV_JSON_CONNECTION */
24713
24714 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->persistent)) {
24716 }
24717
24718#ifdef FREECIV_JSON_CONNECTION
24719 field_addr.name = "vigilant";
24720#endif /* FREECIV_JSON_CONNECTION */
24721
24722 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
24724 }
24725
24726#ifdef FREECIV_JSON_CONNECTION
24727 field_addr.name = "orders";
24728#endif /* FREECIV_JSON_CONNECTION */
24729
24730 {
24731 int i;
24732
24733 if (real_packet->length > MAX_LEN_ROUTE) {
24734 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
24735 }
24736
24737#ifdef FREECIV_JSON_CONNECTION
24738 /* Enter array. */
24739 field_addr.sub_location = plocation_elem_new(0);
24740#endif /* FREECIV_JSON_CONNECTION */
24741
24742 for (i = 0; i < real_packet->length; i++) {
24743#ifdef FREECIV_JSON_CONNECTION
24744 /* Next array element */
24745 field_addr.sub_location->number = i;
24746#endif /* FREECIV_JSON_CONNECTION */
24747
24748 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24750 }
24751 }
24752
24753#ifdef FREECIV_JSON_CONNECTION
24754 /* Exit array. */
24755 FC_FREE(field_addr.sub_location);
24756#endif /* FREECIV_JSON_CONNECTION */
24757 }
24758#endif /* FREECIV_DELTA_PROTOCOL */
24759
24761#undef FREE_PACKET_STRUCT
24762}
24763
24764static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24765{
24766 const struct packet_city_rally_point *real_packet = packet;
24767 int e;
24769
24770 log_packet_detailed("packet_city_rally_point_100: sending info about ()");
24771
24772#ifdef FREECIV_DELTA_PROTOCOL
24775 bool differ;
24776 int different = force_to_send;
24777 struct genhash **hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
24778
24779 if (nullptr == *hash) {
24781 nullptr, nullptr, nullptr, destroy_packet_city_rally_point);
24782 }
24783 BV_CLR_ALL(fields);
24784
24785 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24786 old = fc_malloc(sizeof(*old));
24787 /* temporary bitcopy just to insert correctly */
24788 *old = *real_packet;
24791 different = 1; /* Force to send. */
24792 }
24793
24794 differ = (old->id != real_packet->id);
24795 if (differ) {
24796 different++;
24797 BV_SET(fields, 0);
24798 }
24799
24800 differ = (old->length != real_packet->length);
24801 if (differ) {
24802 different++;
24803 BV_SET(fields, 1);
24804 }
24805
24806 differ = (old->persistent != real_packet->persistent);
24807 if (differ) {
24808 different++;
24809 }
24810 /* folded into head */
24811 if (real_packet->persistent) {
24812 BV_SET(fields, 2);
24813 }
24814
24815 differ = (old->vigilant != real_packet->vigilant);
24816 if (differ) {
24817 different++;
24818 }
24819 /* folded into head */
24820 if (real_packet->vigilant) {
24821 BV_SET(fields, 3);
24822 }
24823
24824 differ = (old->length != real_packet->length);
24825 if (!differ) {
24826 int i;
24827
24828 for (i = 0; i < old->length; i++) {
24829 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
24830 if (differ) {
24831 break;
24832 }
24833 }
24834 }
24835 if (differ) {
24836 different++;
24837 BV_SET(fields, 4);
24838 }
24839
24840 if (different == 0) {
24841 log_packet_detailed(" no change -> discard");
24843 }
24844#endif /* FREECIV_DELTA_PROTOCOL */
24845
24846#ifdef FREECIV_JSON_CONNECTION
24847 struct plocation field_addr;
24848 {
24849 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
24852 }
24853#endif /* FREECIV_JSON_CONNECTION */
24854
24855#ifdef FREECIV_DELTA_PROTOCOL
24856#ifdef FREECIV_JSON_CONNECTION
24857 field_addr.name = "fields";
24858#endif /* FREECIV_JSON_CONNECTION */
24859 e = 0;
24860 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24861 if (e) {
24862 log_packet_detailed("fields bitvector error detected");
24863 }
24864
24865 if (BV_ISSET(fields, 0)) {
24866 log_packet_detailed(" field 'id' has changed");
24867
24868#ifdef FREECIV_JSON_CONNECTION
24869 field_addr.name = "id";
24870#endif /* FREECIV_JSON_CONNECTION */
24871 e = 0;
24872
24873 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24874
24875 if (e) {
24876 log_packet_detailed("'id' field error detected");
24877 }
24878 }
24879
24880 if (BV_ISSET(fields, 1)) {
24881 log_packet_detailed(" field 'length' has changed");
24882
24883#ifdef FREECIV_JSON_CONNECTION
24884 field_addr.name = "length";
24885#endif /* FREECIV_JSON_CONNECTION */
24886 e = 0;
24887
24888 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24889
24890 if (e) {
24891 log_packet_detailed("'length' field error detected");
24892 }
24893 }
24894
24895 /* field 2 is folded into the header */
24896
24897 /* field 3 is folded into the header */
24898
24899 if (BV_ISSET(fields, 4)) {
24900 log_packet_detailed(" field 'orders' has changed");
24901
24902#ifdef FREECIV_JSON_CONNECTION
24903 field_addr.name = "orders";
24904#endif /* FREECIV_JSON_CONNECTION */
24905 e = 0;
24906
24907 {
24908 int i;
24909
24910#ifdef FREECIV_JSON_CONNECTION
24911 /* Create the array. */
24912 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24913
24914 /* Enter array. */
24915 field_addr.sub_location = plocation_elem_new(0);
24916#endif /* FREECIV_JSON_CONNECTION */
24917
24918 for (i = 0; i < real_packet->length; i++) {
24919#ifdef FREECIV_JSON_CONNECTION
24920 /* Next array element. */
24921 field_addr.sub_location->number = i;
24922#endif /* FREECIV_JSON_CONNECTION */
24923
24924 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24925 }
24926
24927#ifdef FREECIV_JSON_CONNECTION
24928 /* Exit array. */
24929 FC_FREE(field_addr.sub_location);
24930#endif /* FREECIV_JSON_CONNECTION */
24931 }
24932
24933 if (e) {
24934 log_packet_detailed("'orders' field error detected");
24935 }
24936 }
24937
24938 *old = *real_packet;
24939
24940#else /* FREECIV_DELTA_PROTOCOL */
24941#ifdef FREECIV_JSON_CONNECTION
24942 field_addr.name = "id";
24943#endif /* FREECIV_JSON_CONNECTION */
24944 e = 0;
24945
24946 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24947
24948 if (e) {
24949 log_packet_detailed("'id' field error detected");
24950 }
24951
24952#ifdef FREECIV_JSON_CONNECTION
24953 field_addr.name = "length";
24954#endif /* FREECIV_JSON_CONNECTION */
24955 e = 0;
24956
24957 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24958
24959 if (e) {
24960 log_packet_detailed("'length' field error detected");
24961 }
24962
24963#ifdef FREECIV_JSON_CONNECTION
24964 field_addr.name = "persistent";
24965#endif /* FREECIV_JSON_CONNECTION */
24966 e = 0;
24967
24968 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->persistent);
24969
24970 if (e) {
24971 log_packet_detailed("'persistent' field error detected");
24972 }
24973
24974#ifdef FREECIV_JSON_CONNECTION
24975 field_addr.name = "vigilant";
24976#endif /* FREECIV_JSON_CONNECTION */
24977 e = 0;
24978
24979 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
24980
24981 if (e) {
24982 log_packet_detailed("'vigilant' field error detected");
24983 }
24984
24985#ifdef FREECIV_JSON_CONNECTION
24986 field_addr.name = "orders";
24987#endif /* FREECIV_JSON_CONNECTION */
24988 e = 0;
24989
24990 {
24991 int i;
24992
24993#ifdef FREECIV_JSON_CONNECTION
24994 /* Create the array. */
24995 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24996
24997 /* Enter array. */
24998 field_addr.sub_location = plocation_elem_new(0);
24999#endif /* FREECIV_JSON_CONNECTION */
25000
25001 for (i = 0; i < real_packet->length; i++) {
25002#ifdef FREECIV_JSON_CONNECTION
25003 /* Next array element. */
25004 field_addr.sub_location->number = i;
25005#endif /* FREECIV_JSON_CONNECTION */
25006
25007 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
25008 }
25009
25010#ifdef FREECIV_JSON_CONNECTION
25011 /* Exit array. */
25012 FC_FREE(field_addr.sub_location);
25013#endif /* FREECIV_JSON_CONNECTION */
25014 }
25015
25016 if (e) {
25017 log_packet_detailed("'orders' field error detected");
25018 }
25019#endif /* FREECIV_DELTA_PROTOCOL */
25020
25022}
25023
25024int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
25025{
25026 if (!pc->used) {
25027 log_error("WARNING: trying to send data to the closed connection %s",
25029 return -1;
25030 }
25031 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send != nullptr, -1,
25032 "Handler for PACKET_CITY_RALLY_POINT not installed");
25033 return pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send(pc, packet, force_to_send);
25034}
25035
25036void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
25037{
25038 conn_list_iterate(dest, pconn) {
25039 send_packet_city_rally_point(pconn, packet, force_to_send);
25041}
25042
25043static inline void init_packet_worker_task(struct packet_worker_task *packet)
25044{
25045 memset(packet, 0, sizeof(*packet));
25046}
25047
25048#define free_packet_worker_task(_packet) (void) 0
25049#define destroy_packet_worker_task free
25050
25051#ifdef FREECIV_DELTA_PROTOCOL
25052#define hash_packet_worker_task_100 hash_const
25053#define cmp_packet_worker_task_100 cmp_const
25055#endif /* FREECIV_DELTA_PROTOCOL */
25056
25058{
25059#define FREE_PACKET_STRUCT(_packet) free_packet_worker_task(_packet)
25061
25062#ifdef FREECIV_JSON_CONNECTION
25063 struct plocation field_addr;
25064 {
25065 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25068 }
25069#endif /* FREECIV_JSON_CONNECTION */
25070
25071 log_packet_detailed("packet_worker_task_100: got info about ()");
25072
25073#ifdef FREECIV_DELTA_PROTOCOL
25075 struct packet_worker_task *old;
25076 struct genhash **hash = pc->phs.received + PACKET_WORKER_TASK;
25077
25078 if (nullptr == *hash) {
25080 nullptr, nullptr, nullptr, destroy_packet_worker_task);
25081 }
25082
25083 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25084 *real_packet = *old;
25085 } else {
25086 /* packet is already initialized empty */
25087 log_packet_detailed(" no old info");
25088 }
25089
25090#ifdef FREECIV_JSON_CONNECTION
25091 field_addr.name = "fields";
25092#endif /* FREECIV_JSON_CONNECTION */
25093 DIO_BV_GET(&din, &field_addr, fields);
25094
25095 if (BV_ISSET(fields, 0)) {
25096 log_packet_detailed(" got field 'city_id'");
25097
25098#ifdef FREECIV_JSON_CONNECTION
25099 field_addr.name = "city_id";
25100#endif /* FREECIV_JSON_CONNECTION */
25101
25102 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25104 }
25105 }
25106
25107 if (BV_ISSET(fields, 1)) {
25108 log_packet_detailed(" got field 'tile_id'");
25109
25110#ifdef FREECIV_JSON_CONNECTION
25111 field_addr.name = "tile_id";
25112#endif /* FREECIV_JSON_CONNECTION */
25113
25114 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25116 }
25117 }
25118
25119 if (BV_ISSET(fields, 2)) {
25120 log_packet_detailed(" got field 'activity'");
25121
25122#ifdef FREECIV_JSON_CONNECTION
25123 field_addr.name = "activity";
25124#endif /* FREECIV_JSON_CONNECTION */
25125
25126 {
25127 int readin;
25128
25129 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25131 }
25132 real_packet->activity = readin;
25133 }
25134 }
25135
25136 if (BV_ISSET(fields, 3)) {
25137 log_packet_detailed(" got field 'tgt'");
25138
25139#ifdef FREECIV_JSON_CONNECTION
25140 field_addr.name = "tgt";
25141#endif /* FREECIV_JSON_CONNECTION */
25142
25143 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25145 }
25146 }
25147
25148 if (BV_ISSET(fields, 4)) {
25149 log_packet_detailed(" got field 'want'");
25150
25151#ifdef FREECIV_JSON_CONNECTION
25152 field_addr.name = "want";
25153#endif /* FREECIV_JSON_CONNECTION */
25154
25155 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25157 }
25158 }
25159
25160 if (nullptr == old) {
25161 old = fc_malloc(sizeof(*old));
25163 *old = *real_packet;
25165 } else {
25166 *old = *real_packet;
25167 }
25168
25169#else /* FREECIV_DELTA_PROTOCOL */
25170#ifdef FREECIV_JSON_CONNECTION
25171 field_addr.name = "city_id";
25172#endif /* FREECIV_JSON_CONNECTION */
25173
25174 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
25176 }
25177
25178#ifdef FREECIV_JSON_CONNECTION
25179 field_addr.name = "tile_id";
25180#endif /* FREECIV_JSON_CONNECTION */
25181
25182 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
25184 }
25185
25186#ifdef FREECIV_JSON_CONNECTION
25187 field_addr.name = "activity";
25188#endif /* FREECIV_JSON_CONNECTION */
25189
25190 {
25191 int readin;
25192
25193 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25195 }
25196 real_packet->activity = readin;
25197 }
25198
25199#ifdef FREECIV_JSON_CONNECTION
25200 field_addr.name = "tgt";
25201#endif /* FREECIV_JSON_CONNECTION */
25202
25203 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25205 }
25206
25207#ifdef FREECIV_JSON_CONNECTION
25208 field_addr.name = "want";
25209#endif /* FREECIV_JSON_CONNECTION */
25210
25211 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25213 }
25214#endif /* FREECIV_DELTA_PROTOCOL */
25215
25217#undef FREE_PACKET_STRUCT
25218}
25219
25220static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
25221{
25222 const struct packet_worker_task *real_packet = packet;
25223 int e;
25225
25226 log_packet_detailed("packet_worker_task_100: sending info about ()");
25227
25228#ifdef FREECIV_DELTA_PROTOCOL
25230 struct packet_worker_task *old;
25231 bool differ;
25232 struct genhash **hash = pc->phs.sent + PACKET_WORKER_TASK;
25233
25234 if (nullptr == *hash) {
25236 nullptr, nullptr, nullptr, destroy_packet_worker_task);
25237 }
25238 BV_CLR_ALL(fields);
25239
25240 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25241 old = fc_malloc(sizeof(*old));
25242 /* temporary bitcopy just to insert correctly */
25243 *old = *real_packet;
25246 }
25247
25248 differ = (old->city_id != real_packet->city_id);
25249 if (differ) {
25250 BV_SET(fields, 0);
25251 }
25252
25253 differ = (old->tile_id != real_packet->tile_id);
25254 if (differ) {
25255 BV_SET(fields, 1);
25256 }
25257
25258 differ = (old->activity != real_packet->activity);
25259 if (differ) {
25260 BV_SET(fields, 2);
25261 }
25262
25263 differ = (old->tgt != real_packet->tgt);
25264 if (differ) {
25265 BV_SET(fields, 3);
25266 }
25267
25268 differ = (old->want != real_packet->want);
25269 if (differ) {
25270 BV_SET(fields, 4);
25271 }
25272#endif /* FREECIV_DELTA_PROTOCOL */
25273
25274#ifdef FREECIV_JSON_CONNECTION
25275 struct plocation field_addr;
25276 {
25277 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25280 }
25281#endif /* FREECIV_JSON_CONNECTION */
25282
25283#ifdef FREECIV_DELTA_PROTOCOL
25284#ifdef FREECIV_JSON_CONNECTION
25285 field_addr.name = "fields";
25286#endif /* FREECIV_JSON_CONNECTION */
25287 e = 0;
25288 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25289 if (e) {
25290 log_packet_detailed("fields bitvector error detected");
25291 }
25292
25293 if (BV_ISSET(fields, 0)) {
25294 log_packet_detailed(" field 'city_id' has changed");
25295
25296#ifdef FREECIV_JSON_CONNECTION
25297 field_addr.name = "city_id";
25298#endif /* FREECIV_JSON_CONNECTION */
25299 e = 0;
25300
25301 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25302
25303 if (e) {
25304 log_packet_detailed("'city_id' field error detected");
25305 }
25306 }
25307
25308 if (BV_ISSET(fields, 1)) {
25309 log_packet_detailed(" field 'tile_id' has changed");
25310
25311#ifdef FREECIV_JSON_CONNECTION
25312 field_addr.name = "tile_id";
25313#endif /* FREECIV_JSON_CONNECTION */
25314 e = 0;
25315
25316 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25317
25318 if (e) {
25319 log_packet_detailed("'tile_id' field error detected");
25320 }
25321 }
25322
25323 if (BV_ISSET(fields, 2)) {
25324 log_packet_detailed(" field 'activity' has changed");
25325
25326#ifdef FREECIV_JSON_CONNECTION
25327 field_addr.name = "activity";
25328#endif /* FREECIV_JSON_CONNECTION */
25329 e = 0;
25330
25331 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25332
25333 if (e) {
25334 log_packet_detailed("'activity' field error detected");
25335 }
25336 }
25337
25338 if (BV_ISSET(fields, 3)) {
25339 log_packet_detailed(" field 'tgt' has changed");
25340
25341#ifdef FREECIV_JSON_CONNECTION
25342 field_addr.name = "tgt";
25343#endif /* FREECIV_JSON_CONNECTION */
25344 e = 0;
25345
25346 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25347
25348 if (e) {
25349 log_packet_detailed("'tgt' field error detected");
25350 }
25351 }
25352
25353 if (BV_ISSET(fields, 4)) {
25354 log_packet_detailed(" field 'want' has changed");
25355
25356#ifdef FREECIV_JSON_CONNECTION
25357 field_addr.name = "want";
25358#endif /* FREECIV_JSON_CONNECTION */
25359 e = 0;
25360
25361 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25362
25363 if (e) {
25364 log_packet_detailed("'want' field error detected");
25365 }
25366 }
25367
25368 *old = *real_packet;
25369
25370#else /* FREECIV_DELTA_PROTOCOL */
25371#ifdef FREECIV_JSON_CONNECTION
25372 field_addr.name = "city_id";
25373#endif /* FREECIV_JSON_CONNECTION */
25374 e = 0;
25375
25376 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25377
25378 if (e) {
25379 log_packet_detailed("'city_id' field error detected");
25380 }
25381
25382#ifdef FREECIV_JSON_CONNECTION
25383 field_addr.name = "tile_id";
25384#endif /* FREECIV_JSON_CONNECTION */
25385 e = 0;
25386
25387 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25388
25389 if (e) {
25390 log_packet_detailed("'tile_id' field error detected");
25391 }
25392
25393#ifdef FREECIV_JSON_CONNECTION
25394 field_addr.name = "activity";
25395#endif /* FREECIV_JSON_CONNECTION */
25396 e = 0;
25397
25398 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25399
25400 if (e) {
25401 log_packet_detailed("'activity' field error detected");
25402 }
25403
25404#ifdef FREECIV_JSON_CONNECTION
25405 field_addr.name = "tgt";
25406#endif /* FREECIV_JSON_CONNECTION */
25407 e = 0;
25408
25409 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25410
25411 if (e) {
25412 log_packet_detailed("'tgt' field error detected");
25413 }
25414
25415#ifdef FREECIV_JSON_CONNECTION
25416 field_addr.name = "want";
25417#endif /* FREECIV_JSON_CONNECTION */
25418 e = 0;
25419
25420 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25421
25422 if (e) {
25423 log_packet_detailed("'want' field error detected");
25424 }
25425#endif /* FREECIV_DELTA_PROTOCOL */
25426
25428}
25429
25431{
25432 if (!pc->used) {
25433 log_error("WARNING: trying to send data to the closed connection %s",
25435 return -1;
25436 }
25437 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WORKER_TASK].packet != nullptr, -1,
25438 "Handler for PACKET_WORKER_TASK not installed");
25439 return pc->phs.handlers->send[PACKET_WORKER_TASK].packet(pc, packet);
25440}
25441
25442void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
25443{
25444 conn_list_iterate(dest, pconn) {
25447}
25448
25449static inline void init_packet_player_remove(struct packet_player_remove *packet)
25450{
25451 memset(packet, 0, sizeof(*packet));
25452}
25453
25454#define free_packet_player_remove(_packet) (void) 0
25455#define destroy_packet_player_remove free
25456
25457#ifdef FREECIV_DELTA_PROTOCOL
25458#define hash_packet_player_remove_100 hash_const
25459#define cmp_packet_player_remove_100 cmp_const
25461#endif /* FREECIV_DELTA_PROTOCOL */
25462
25464{
25465#define FREE_PACKET_STRUCT(_packet) free_packet_player_remove(_packet)
25467
25468#ifdef FREECIV_JSON_CONNECTION
25469 struct plocation field_addr;
25470 {
25471 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25474 }
25475#endif /* FREECIV_JSON_CONNECTION */
25476
25477 log_packet_detailed("packet_player_remove_100: got info about ()");
25478
25479#ifdef FREECIV_DELTA_PROTOCOL
25481 struct packet_player_remove *old;
25482 struct genhash **hash = pc->phs.received + PACKET_PLAYER_REMOVE;
25483
25484 if (nullptr == *hash) {
25486 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25487 }
25488
25489 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25490 *real_packet = *old;
25491 } else {
25492 /* packet is already initialized empty */
25493 log_packet_detailed(" no old info");
25494 }
25495
25496#ifdef FREECIV_JSON_CONNECTION
25497 field_addr.name = "fields";
25498#endif /* FREECIV_JSON_CONNECTION */
25499 DIO_BV_GET(&din, &field_addr, fields);
25500
25501 if (BV_ISSET(fields, 0)) {
25502 log_packet_detailed(" got field 'playerno'");
25503
25504#ifdef FREECIV_JSON_CONNECTION
25505 field_addr.name = "playerno";
25506#endif /* FREECIV_JSON_CONNECTION */
25507
25508 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25510 }
25511 }
25512
25513 if (nullptr == old) {
25514 old = fc_malloc(sizeof(*old));
25516 *old = *real_packet;
25518 } else {
25519 *old = *real_packet;
25520 }
25521
25522 hash = pc->phs.received + PACKET_PLAYER_INFO;
25523 if (nullptr != *hash) {
25525 }
25526
25527#else /* FREECIV_DELTA_PROTOCOL */
25528#ifdef FREECIV_JSON_CONNECTION
25529 field_addr.name = "playerno";
25530#endif /* FREECIV_JSON_CONNECTION */
25531
25532 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25534 }
25535#endif /* FREECIV_DELTA_PROTOCOL */
25536
25538#undef FREE_PACKET_STRUCT
25539}
25540
25541static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
25542{
25543 const struct packet_player_remove *real_packet = packet;
25544 int e;
25546
25547 log_packet_detailed("packet_player_remove_100: sending info about ()");
25548
25549#ifdef FREECIV_DELTA_PROTOCOL
25551 struct packet_player_remove *old;
25552 bool differ;
25553 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_REMOVE;
25554
25555 if (nullptr == *hash) {
25557 nullptr, nullptr, nullptr, destroy_packet_player_remove);
25558 }
25559 BV_CLR_ALL(fields);
25560
25561 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25562 old = fc_malloc(sizeof(*old));
25563 /* temporary bitcopy just to insert correctly */
25564 *old = *real_packet;
25567 }
25568
25569 differ = (old->playerno != real_packet->playerno);
25570 if (differ) {
25571 BV_SET(fields, 0);
25572 }
25573#endif /* FREECIV_DELTA_PROTOCOL */
25574
25575#ifdef FREECIV_JSON_CONNECTION
25576 struct plocation field_addr;
25577 {
25578 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25581 }
25582#endif /* FREECIV_JSON_CONNECTION */
25583
25584#ifdef FREECIV_DELTA_PROTOCOL
25585#ifdef FREECIV_JSON_CONNECTION
25586 field_addr.name = "fields";
25587#endif /* FREECIV_JSON_CONNECTION */
25588 e = 0;
25589 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25590 if (e) {
25591 log_packet_detailed("fields bitvector error detected");
25592 }
25593
25594 if (BV_ISSET(fields, 0)) {
25595 log_packet_detailed(" field 'playerno' has changed");
25596
25597#ifdef FREECIV_JSON_CONNECTION
25598 field_addr.name = "playerno";
25599#endif /* FREECIV_JSON_CONNECTION */
25600 e = 0;
25601
25602 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25603
25604 if (e) {
25605 log_packet_detailed("'playerno' field error detected");
25606 }
25607 }
25608
25609 *old = *real_packet;
25610
25611 hash = pc->phs.sent + PACKET_PLAYER_INFO;
25612 if (nullptr != *hash) {
25614 }
25615
25616#else /* FREECIV_DELTA_PROTOCOL */
25617#ifdef FREECIV_JSON_CONNECTION
25618 field_addr.name = "playerno";
25619#endif /* FREECIV_JSON_CONNECTION */
25620 e = 0;
25621
25622 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
25623
25624 if (e) {
25625 log_packet_detailed("'playerno' field error detected");
25626 }
25627#endif /* FREECIV_DELTA_PROTOCOL */
25628
25630}
25631
25633{
25634 if (!pc->used) {
25635 log_error("WARNING: trying to send data to the closed connection %s",
25637 return -1;
25638 }
25639 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet != nullptr, -1,
25640 "Handler for PACKET_PLAYER_REMOVE not installed");
25641 return pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet(pc, packet);
25642}
25643
25644int dsend_packet_player_remove(struct connection *pc, int playerno)
25645{
25646 struct packet_player_remove packet, *real_packet = &packet;
25647
25649
25651}
25652
25653static inline void init_packet_player_info(struct packet_player_info *packet)
25654{
25655 memset(packet, 0, sizeof(*packet));
25656}
25657
25658#define free_packet_player_info(_packet) (void) 0
25659#define destroy_packet_player_info free
25660
25661#ifdef FREECIV_DELTA_PROTOCOL
25663{
25664 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
25665 genhash_val_t result = 0;
25666
25667 result += key->playerno;
25668
25669 result &= 0xFFFFFFFF;
25670 return result;
25671}
25672
25673static bool cmp_packet_player_info_100(const void *vkey1, const void *vkey2)
25674{
25675 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
25676 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
25677 bool differ;
25678
25679 differ = (old->playerno != real_packet->playerno);
25680
25681 return !differ;
25682}
25684#endif /* FREECIV_DELTA_PROTOCOL */
25685
25687{
25688#define FREE_PACKET_STRUCT(_packet) free_packet_player_info(_packet)
25690
25691#ifdef FREECIV_JSON_CONNECTION
25692 struct plocation field_addr;
25693 {
25694 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
25697 }
25698#endif /* FREECIV_JSON_CONNECTION */
25699
25700#ifdef FREECIV_JSON_CONNECTION
25701 field_addr.name = "playerno";
25702#endif /* FREECIV_JSON_CONNECTION */
25703
25704 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
25706 }
25707
25708 log_packet_detailed("packet_player_info_100: got info about (%d)",
25709 real_packet->playerno);
25710
25711#ifdef FREECIV_DELTA_PROTOCOL
25713 struct packet_player_info *old;
25714 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
25715
25716 if (nullptr == *hash) {
25718 nullptr, nullptr, nullptr, destroy_packet_player_info);
25719 }
25720
25721 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25722 *real_packet = *old;
25723 } else {
25724 /* packet is already initialized empty */
25725 log_packet_detailed(" no old info");
25726 }
25727
25728#ifdef FREECIV_JSON_CONNECTION
25729 field_addr.name = "fields";
25730#endif /* FREECIV_JSON_CONNECTION */
25731 DIO_BV_GET(&din, &field_addr, fields);
25732
25733 if (BV_ISSET(fields, 0)) {
25734 log_packet_detailed(" got field 'name'");
25735
25736#ifdef FREECIV_JSON_CONNECTION
25737 field_addr.name = "name";
25738#endif /* FREECIV_JSON_CONNECTION */
25739
25740 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25742 }
25743 }
25744
25745 if (BV_ISSET(fields, 1)) {
25746 log_packet_detailed(" got field 'username'");
25747
25748#ifdef FREECIV_JSON_CONNECTION
25749 field_addr.name = "username";
25750#endif /* FREECIV_JSON_CONNECTION */
25751
25752 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25754 }
25755 }
25756
25757 real_packet->unassigned_user = BV_ISSET(fields, 2);
25758
25759 if (BV_ISSET(fields, 3)) {
25760 log_packet_detailed(" got field 'score'");
25761
25762#ifdef FREECIV_JSON_CONNECTION
25763 field_addr.name = "score";
25764#endif /* FREECIV_JSON_CONNECTION */
25765
25766 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25768 }
25769 }
25770
25771 real_packet->is_male = BV_ISSET(fields, 4);
25772
25773 real_packet->was_created = BV_ISSET(fields, 5);
25774
25775 if (BV_ISSET(fields, 6)) {
25776 log_packet_detailed(" got field 'government'");
25777
25778#ifdef FREECIV_JSON_CONNECTION
25779 field_addr.name = "government";
25780#endif /* FREECIV_JSON_CONNECTION */
25781
25782 {
25783 int readin;
25784
25785 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25787 }
25788 real_packet->government = readin;
25789 }
25790 }
25791
25792 if (BV_ISSET(fields, 7)) {
25793 log_packet_detailed(" got field 'target_government'");
25794
25795#ifdef FREECIV_JSON_CONNECTION
25796 field_addr.name = "target_government";
25797#endif /* FREECIV_JSON_CONNECTION */
25798
25799 {
25800 int readin;
25801
25802 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25803 RECEIVE_PACKET_FIELD_ERROR(target_government);
25804 }
25805 real_packet->target_government = readin;
25806 }
25807 }
25808
25809 if (BV_ISSET(fields, 8)) {
25810 log_packet_detailed(" got field 'real_embassy'");
25811
25812#ifdef FREECIV_JSON_CONNECTION
25813 field_addr.name = "real_embassy";
25814#endif /* FREECIV_JSON_CONNECTION */
25815
25816 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25817 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25818 }
25819 }
25820
25821 if (BV_ISSET(fields, 9)) {
25822 log_packet_detailed(" got field 'mood'");
25823
25824#ifdef FREECIV_JSON_CONNECTION
25825 field_addr.name = "mood";
25826#endif /* FREECIV_JSON_CONNECTION */
25827
25828 {
25829 int readin;
25830
25831 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25833 }
25834 real_packet->mood = readin;
25835 }
25836 }
25837
25838 if (BV_ISSET(fields, 10)) {
25839 log_packet_detailed(" got field 'style'");
25840
25841#ifdef FREECIV_JSON_CONNECTION
25842 field_addr.name = "style";
25843#endif /* FREECIV_JSON_CONNECTION */
25844
25845 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
25847 }
25848 }
25849
25850 if (BV_ISSET(fields, 11)) {
25851 log_packet_detailed(" got field 'music_style'");
25852
25853#ifdef FREECIV_JSON_CONNECTION
25854 field_addr.name = "music_style";
25855#endif /* FREECIV_JSON_CONNECTION */
25856
25857 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
25859 }
25860 }
25861
25862 if (BV_ISSET(fields, 12)) {
25863 log_packet_detailed(" got field 'nation'");
25864
25865#ifdef FREECIV_JSON_CONNECTION
25866 field_addr.name = "nation";
25867#endif /* FREECIV_JSON_CONNECTION */
25868
25869 {
25870 int readin;
25871
25872 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
25874 }
25875 real_packet->nation = readin;
25876 }
25877 }
25878
25879 if (BV_ISSET(fields, 13)) {
25880 log_packet_detailed(" got field 'team'");
25881
25882#ifdef FREECIV_JSON_CONNECTION
25883 field_addr.name = "team";
25884#endif /* FREECIV_JSON_CONNECTION */
25885
25886 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
25888 }
25889 }
25890
25891 real_packet->is_ready = BV_ISSET(fields, 14);
25892
25893 real_packet->phase_done = BV_ISSET(fields, 15);
25894
25895 if (BV_ISSET(fields, 16)) {
25896 log_packet_detailed(" got field 'nturns_idle'");
25897
25898#ifdef FREECIV_JSON_CONNECTION
25899 field_addr.name = "nturns_idle";
25900#endif /* FREECIV_JSON_CONNECTION */
25901
25902 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
25903 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
25904 }
25905 }
25906
25907 if (BV_ISSET(fields, 17)) {
25908 log_packet_detailed(" got field 'turns_alive'");
25909
25910#ifdef FREECIV_JSON_CONNECTION
25911 field_addr.name = "turns_alive";
25912#endif /* FREECIV_JSON_CONNECTION */
25913
25914 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
25915 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
25916 }
25917 }
25918
25919 real_packet->is_alive = BV_ISSET(fields, 18);
25920
25921 if (BV_ISSET(fields, 19)) {
25922 log_packet_detailed(" got field 'autoselect_weight'");
25923
25924#ifdef FREECIV_JSON_CONNECTION
25925 field_addr.name = "autoselect_weight";
25926#endif /* FREECIV_JSON_CONNECTION */
25927
25928 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
25929 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
25930 }
25931 }
25932
25933 if (BV_ISSET(fields, 20)) {
25934 log_packet_detailed(" got field 'gold'");
25935
25936#ifdef FREECIV_JSON_CONNECTION
25937 field_addr.name = "gold";
25938#endif /* FREECIV_JSON_CONNECTION */
25939
25940 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
25942 }
25943 }
25944
25945 if (BV_ISSET(fields, 21)) {
25946 log_packet_detailed(" got field 'tax'");
25947
25948#ifdef FREECIV_JSON_CONNECTION
25949 field_addr.name = "tax";
25950#endif /* FREECIV_JSON_CONNECTION */
25951
25952 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
25954 }
25955 }
25956
25957 if (BV_ISSET(fields, 22)) {
25958 log_packet_detailed(" got field 'science'");
25959
25960#ifdef FREECIV_JSON_CONNECTION
25961 field_addr.name = "science";
25962#endif /* FREECIV_JSON_CONNECTION */
25963
25964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
25966 }
25967 }
25968
25969 if (BV_ISSET(fields, 23)) {
25970 log_packet_detailed(" got field 'luxury'");
25971
25972#ifdef FREECIV_JSON_CONNECTION
25973 field_addr.name = "luxury";
25974#endif /* FREECIV_JSON_CONNECTION */
25975
25976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
25978 }
25979 }
25980
25981 if (BV_ISSET(fields, 24)) {
25982 log_packet_detailed(" got field 'infrapoints'");
25983
25984#ifdef FREECIV_JSON_CONNECTION
25985 field_addr.name = "infrapoints";
25986#endif /* FREECIV_JSON_CONNECTION */
25987
25988 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
25989 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
25990 }
25991 }
25992
25993 if (BV_ISSET(fields, 25)) {
25994 log_packet_detailed(" got field 'tech_upkeep'");
25995
25996#ifdef FREECIV_JSON_CONNECTION
25997 field_addr.name = "tech_upkeep";
25998#endif /* FREECIV_JSON_CONNECTION */
25999
26000 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
26001 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
26002 }
26003 }
26004
26005 if (BV_ISSET(fields, 26)) {
26006 log_packet_detailed(" got field 'science_cost'");
26007
26008#ifdef FREECIV_JSON_CONNECTION
26009 field_addr.name = "science_cost";
26010#endif /* FREECIV_JSON_CONNECTION */
26011
26012 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
26013 RECEIVE_PACKET_FIELD_ERROR(science_cost);
26014 }
26015 }
26016
26017 real_packet->is_connected = BV_ISSET(fields, 27);
26018
26019 if (BV_ISSET(fields, 28)) {
26020 log_packet_detailed(" got field 'revolution_finishes'");
26021
26022#ifdef FREECIV_JSON_CONNECTION
26023 field_addr.name = "revolution_finishes";
26024#endif /* FREECIV_JSON_CONNECTION */
26025
26026 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
26027 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
26028 }
26029 }
26030
26031 if (BV_ISSET(fields, 29)) {
26032 log_packet_detailed(" got field 'ai_skill_level'");
26033
26034#ifdef FREECIV_JSON_CONNECTION
26035 field_addr.name = "ai_skill_level";
26036#endif /* FREECIV_JSON_CONNECTION */
26037
26038 {
26039 int readin;
26040
26041 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26042 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26043 }
26044 real_packet->ai_skill_level = readin;
26045 }
26046 }
26047
26048 if (BV_ISSET(fields, 30)) {
26049 log_packet_detailed(" got field 'barbarian_type'");
26050
26051#ifdef FREECIV_JSON_CONNECTION
26052 field_addr.name = "barbarian_type";
26053#endif /* FREECIV_JSON_CONNECTION */
26054
26055 {
26056 int readin;
26057
26058 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26059 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26060 }
26061 real_packet->barbarian_type = readin;
26062 }
26063 }
26064
26065 if (BV_ISSET(fields, 31)) {
26066 log_packet_detailed(" got field 'gives_shared_vision'");
26067
26068#ifdef FREECIV_JSON_CONNECTION
26069 field_addr.name = "gives_shared_vision";
26070#endif /* FREECIV_JSON_CONNECTION */
26071
26072 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26074 }
26075 }
26076
26077 if (BV_ISSET(fields, 32)) {
26078 log_packet_detailed(" got field 'gives_shared_tiles'");
26079
26080#ifdef FREECIV_JSON_CONNECTION
26081 field_addr.name = "gives_shared_tiles";
26082#endif /* FREECIV_JSON_CONNECTION */
26083
26084 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26086 }
26087 }
26088
26089 if (BV_ISSET(fields, 33)) {
26090 log_packet_detailed(" got field 'history'");
26091
26092#ifdef FREECIV_JSON_CONNECTION
26093 field_addr.name = "history";
26094#endif /* FREECIV_JSON_CONNECTION */
26095
26096 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26098 }
26099 }
26100
26101 if (BV_ISSET(fields, 34)) {
26102 log_packet_detailed(" got field 'culture'");
26103
26104#ifdef FREECIV_JSON_CONNECTION
26105 field_addr.name = "culture";
26106#endif /* FREECIV_JSON_CONNECTION */
26107
26108 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26110 }
26111 }
26112
26113 if (BV_ISSET(fields, 35)) {
26114 log_packet_detailed(" got field 'love'");
26115
26116#ifdef FREECIV_JSON_CONNECTION
26117 field_addr.name = "love";
26118#endif /* FREECIV_JSON_CONNECTION */
26119
26120 {
26121 int i;
26122
26123
26124#ifdef FREECIV_JSON_CONNECTION
26125 /* Enter array. */
26126 field_addr.sub_location = plocation_elem_new(0);
26127#endif /* FREECIV_JSON_CONNECTION */
26128
26129 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26130#ifdef FREECIV_JSON_CONNECTION
26131 /* Next array element */
26132 field_addr.sub_location->number = i;
26133#endif /* FREECIV_JSON_CONNECTION */
26134
26135 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26137 }
26138 }
26139
26140#ifdef FREECIV_JSON_CONNECTION
26141 /* Exit array. */
26142 FC_FREE(field_addr.sub_location);
26143#endif /* FREECIV_JSON_CONNECTION */
26144 }
26145 }
26146
26147 real_packet->color_valid = BV_ISSET(fields, 36);
26148
26149 real_packet->color_changeable = BV_ISSET(fields, 37);
26150
26151 if (BV_ISSET(fields, 38)) {
26152 log_packet_detailed(" got field 'color_red'");
26153
26154#ifdef FREECIV_JSON_CONNECTION
26155 field_addr.name = "color_red";
26156#endif /* FREECIV_JSON_CONNECTION */
26157
26158 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26159 RECEIVE_PACKET_FIELD_ERROR(color_red);
26160 }
26161 }
26162
26163 if (BV_ISSET(fields, 39)) {
26164 log_packet_detailed(" got field 'color_green'");
26165
26166#ifdef FREECIV_JSON_CONNECTION
26167 field_addr.name = "color_green";
26168#endif /* FREECIV_JSON_CONNECTION */
26169
26170 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26171 RECEIVE_PACKET_FIELD_ERROR(color_green);
26172 }
26173 }
26174
26175 if (BV_ISSET(fields, 40)) {
26176 log_packet_detailed(" got field 'color_blue'");
26177
26178#ifdef FREECIV_JSON_CONNECTION
26179 field_addr.name = "color_blue";
26180#endif /* FREECIV_JSON_CONNECTION */
26181
26182 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26183 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26184 }
26185 }
26186
26187 if (BV_ISSET(fields, 41)) {
26188 log_packet_detailed(" got field 'flags'");
26189
26190#ifdef FREECIV_JSON_CONNECTION
26191 field_addr.name = "flags";
26192#endif /* FREECIV_JSON_CONNECTION */
26193
26194 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26196 }
26197 }
26198
26199 if (BV_ISSET(fields, 42)) {
26200 log_packet_detailed(" got field 'wonders'");
26201
26202#ifdef FREECIV_JSON_CONNECTION
26203 field_addr.name = "wonders";
26204#endif /* FREECIV_JSON_CONNECTION */
26205
26207#ifdef FREECIV_JSON_CONNECTION
26208 /* Enter array (start at initial element). */
26209 field_addr.sub_location = plocation_elem_new(0);
26210 /* Enter diff array element (start at the index address). */
26211 field_addr.sub_location->sub_location = plocation_field_new("index");
26212#endif /* FREECIV_JSON_CONNECTION */
26213
26214 while (TRUE) {
26215 int i;
26216
26217 /* Read next index */
26218#if B_LAST <= MAX_UINT8
26219 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
26220#else
26221 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
26222#endif
26224 }
26225
26226 if (i == B_LAST) {
26227 break;
26228 }
26229 if (i > B_LAST) {
26231 ": unexpected index %d "
26232 "> length %d in array diff",
26233 i,
26234 B_LAST);
26235 }
26236
26237#ifdef FREECIV_JSON_CONNECTION
26238 /* Content address. */
26239 field_addr.sub_location->sub_location->name = "data";
26240#endif /* FREECIV_JSON_CONNECTION */
26241
26242 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26244 }
26245
26246#ifdef FREECIV_JSON_CONNECTION
26247 /* Move to the next diff array element. */
26248 field_addr.sub_location->number++;
26249 /* Back to the index address. */
26250 field_addr.sub_location->sub_location->name = "index";
26251#endif /* FREECIV_JSON_CONNECTION */
26252 }
26253
26254#ifdef FREECIV_JSON_CONNECTION
26255 /* Exit diff array element. */
26256 FC_FREE(field_addr.sub_location->sub_location);
26257 /* Exit array. */
26258 FC_FREE(field_addr.sub_location);
26259#endif /* FREECIV_JSON_CONNECTION */
26260 }
26261
26262 if (BV_ISSET(fields, 43)) {
26263 log_packet_detailed(" got field 'multip_count'");
26264
26265#ifdef FREECIV_JSON_CONNECTION
26266 field_addr.name = "multip_count";
26267#endif /* FREECIV_JSON_CONNECTION */
26268
26269 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26270 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26271 }
26272 }
26273
26274 if (BV_ISSET(fields, 44)) {
26275 log_packet_detailed(" got field 'multiplier'");
26276
26277#ifdef FREECIV_JSON_CONNECTION
26278 field_addr.name = "multiplier";
26279#endif /* FREECIV_JSON_CONNECTION */
26280
26281 {
26282 int i;
26283
26284 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26285 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26286 }
26287
26288#ifdef FREECIV_JSON_CONNECTION
26289 /* Enter array. */
26290 field_addr.sub_location = plocation_elem_new(0);
26291#endif /* FREECIV_JSON_CONNECTION */
26292
26293 for (i = 0; i < real_packet->multip_count; i++) {
26294#ifdef FREECIV_JSON_CONNECTION
26295 /* Next array element */
26296 field_addr.sub_location->number = i;
26297#endif /* FREECIV_JSON_CONNECTION */
26298
26299 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26301 }
26302 }
26303
26304#ifdef FREECIV_JSON_CONNECTION
26305 /* Exit array. */
26306 FC_FREE(field_addr.sub_location);
26307#endif /* FREECIV_JSON_CONNECTION */
26308 }
26309 }
26310
26311 if (BV_ISSET(fields, 45)) {
26312 log_packet_detailed(" got field 'multiplier_target'");
26313
26314#ifdef FREECIV_JSON_CONNECTION
26315 field_addr.name = "multiplier_target";
26316#endif /* FREECIV_JSON_CONNECTION */
26317
26318 {
26319 int i;
26320
26321 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26322 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
26323 }
26324
26325#ifdef FREECIV_JSON_CONNECTION
26326 /* Enter array. */
26327 field_addr.sub_location = plocation_elem_new(0);
26328#endif /* FREECIV_JSON_CONNECTION */
26329
26330 for (i = 0; i < real_packet->multip_count; i++) {
26331#ifdef FREECIV_JSON_CONNECTION
26332 /* Next array element */
26333 field_addr.sub_location->number = i;
26334#endif /* FREECIV_JSON_CONNECTION */
26335
26336 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26337 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26338 }
26339 }
26340
26341#ifdef FREECIV_JSON_CONNECTION
26342 /* Exit array. */
26343 FC_FREE(field_addr.sub_location);
26344#endif /* FREECIV_JSON_CONNECTION */
26345 }
26346 }
26347
26348 if (BV_ISSET(fields, 46)) {
26349 log_packet_detailed(" got field 'multiplier_changed'");
26350
26351#ifdef FREECIV_JSON_CONNECTION
26352 field_addr.name = "multiplier_changed";
26353#endif /* FREECIV_JSON_CONNECTION */
26354
26355 {
26356 int i;
26357
26358 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26359 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": array truncated");
26360 }
26361
26362#ifdef FREECIV_JSON_CONNECTION
26363 /* Enter array. */
26364 field_addr.sub_location = plocation_elem_new(0);
26365#endif /* FREECIV_JSON_CONNECTION */
26366
26367 for (i = 0; i < real_packet->multip_count; i++) {
26368#ifdef FREECIV_JSON_CONNECTION
26369 /* Next array element */
26370 field_addr.sub_location->number = i;
26371#endif /* FREECIV_JSON_CONNECTION */
26372
26373 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26374 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26375 }
26376 }
26377
26378#ifdef FREECIV_JSON_CONNECTION
26379 /* Exit array. */
26380 FC_FREE(field_addr.sub_location);
26381#endif /* FREECIV_JSON_CONNECTION */
26382 }
26383 }
26384
26385 if (nullptr == old) {
26386 old = fc_malloc(sizeof(*old));
26388 *old = *real_packet;
26390 } else {
26391 *old = *real_packet;
26392 }
26393
26394#else /* FREECIV_DELTA_PROTOCOL */
26395#ifdef FREECIV_JSON_CONNECTION
26396 field_addr.name = "name";
26397#endif /* FREECIV_JSON_CONNECTION */
26398
26399 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
26401 }
26402
26403#ifdef FREECIV_JSON_CONNECTION
26404 field_addr.name = "username";
26405#endif /* FREECIV_JSON_CONNECTION */
26406
26407 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
26409 }
26410
26411#ifdef FREECIV_JSON_CONNECTION
26412 field_addr.name = "unassigned_user";
26413#endif /* FREECIV_JSON_CONNECTION */
26414
26415 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
26416 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
26417 }
26418
26419#ifdef FREECIV_JSON_CONNECTION
26420 field_addr.name = "score";
26421#endif /* FREECIV_JSON_CONNECTION */
26422
26423 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
26425 }
26426
26427#ifdef FREECIV_JSON_CONNECTION
26428 field_addr.name = "is_male";
26429#endif /* FREECIV_JSON_CONNECTION */
26430
26431 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
26433 }
26434
26435#ifdef FREECIV_JSON_CONNECTION
26436 field_addr.name = "was_created";
26437#endif /* FREECIV_JSON_CONNECTION */
26438
26439 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
26440 RECEIVE_PACKET_FIELD_ERROR(was_created);
26441 }
26442
26443#ifdef FREECIV_JSON_CONNECTION
26444 field_addr.name = "government";
26445#endif /* FREECIV_JSON_CONNECTION */
26446
26447 {
26448 int readin;
26449
26450 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26452 }
26453 real_packet->government = readin;
26454 }
26455
26456#ifdef FREECIV_JSON_CONNECTION
26457 field_addr.name = "target_government";
26458#endif /* FREECIV_JSON_CONNECTION */
26459
26460 {
26461 int readin;
26462
26463 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
26464 RECEIVE_PACKET_FIELD_ERROR(target_government);
26465 }
26466 real_packet->target_government = readin;
26467 }
26468
26469#ifdef FREECIV_JSON_CONNECTION
26470 field_addr.name = "real_embassy";
26471#endif /* FREECIV_JSON_CONNECTION */
26472
26473 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
26474 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
26475 }
26476
26477#ifdef FREECIV_JSON_CONNECTION
26478 field_addr.name = "mood";
26479#endif /* FREECIV_JSON_CONNECTION */
26480
26481 {
26482 int readin;
26483
26484 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26486 }
26487 real_packet->mood = readin;
26488 }
26489
26490#ifdef FREECIV_JSON_CONNECTION
26491 field_addr.name = "style";
26492#endif /* FREECIV_JSON_CONNECTION */
26493
26494 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
26496 }
26497
26498#ifdef FREECIV_JSON_CONNECTION
26499 field_addr.name = "music_style";
26500#endif /* FREECIV_JSON_CONNECTION */
26501
26502 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
26504 }
26505
26506#ifdef FREECIV_JSON_CONNECTION
26507 field_addr.name = "nation";
26508#endif /* FREECIV_JSON_CONNECTION */
26509
26510 {
26511 int readin;
26512
26513 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
26515 }
26516 real_packet->nation = readin;
26517 }
26518
26519#ifdef FREECIV_JSON_CONNECTION
26520 field_addr.name = "team";
26521#endif /* FREECIV_JSON_CONNECTION */
26522
26523 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
26525 }
26526
26527#ifdef FREECIV_JSON_CONNECTION
26528 field_addr.name = "is_ready";
26529#endif /* FREECIV_JSON_CONNECTION */
26530
26531 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
26533 }
26534
26535#ifdef FREECIV_JSON_CONNECTION
26536 field_addr.name = "phase_done";
26537#endif /* FREECIV_JSON_CONNECTION */
26538
26539 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
26540 RECEIVE_PACKET_FIELD_ERROR(phase_done);
26541 }
26542
26543#ifdef FREECIV_JSON_CONNECTION
26544 field_addr.name = "nturns_idle";
26545#endif /* FREECIV_JSON_CONNECTION */
26546
26547 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
26548 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
26549 }
26550
26551#ifdef FREECIV_JSON_CONNECTION
26552 field_addr.name = "turns_alive";
26553#endif /* FREECIV_JSON_CONNECTION */
26554
26555 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
26556 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
26557 }
26558
26559#ifdef FREECIV_JSON_CONNECTION
26560 field_addr.name = "is_alive";
26561#endif /* FREECIV_JSON_CONNECTION */
26562
26563 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
26565 }
26566
26567#ifdef FREECIV_JSON_CONNECTION
26568 field_addr.name = "autoselect_weight";
26569#endif /* FREECIV_JSON_CONNECTION */
26570
26571 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
26572 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
26573 }
26574
26575#ifdef FREECIV_JSON_CONNECTION
26576 field_addr.name = "gold";
26577#endif /* FREECIV_JSON_CONNECTION */
26578
26579 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
26581 }
26582
26583#ifdef FREECIV_JSON_CONNECTION
26584 field_addr.name = "tax";
26585#endif /* FREECIV_JSON_CONNECTION */
26586
26587 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
26589 }
26590
26591#ifdef FREECIV_JSON_CONNECTION
26592 field_addr.name = "science";
26593#endif /* FREECIV_JSON_CONNECTION */
26594
26595 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
26597 }
26598
26599#ifdef FREECIV_JSON_CONNECTION
26600 field_addr.name = "luxury";
26601#endif /* FREECIV_JSON_CONNECTION */
26602
26603 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
26605 }
26606
26607#ifdef FREECIV_JSON_CONNECTION
26608 field_addr.name = "infrapoints";
26609#endif /* FREECIV_JSON_CONNECTION */
26610
26611 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
26612 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
26613 }
26614
26615#ifdef FREECIV_JSON_CONNECTION
26616 field_addr.name = "tech_upkeep";
26617#endif /* FREECIV_JSON_CONNECTION */
26618
26619 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep)) {
26620 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep);
26621 }
26622
26623#ifdef FREECIV_JSON_CONNECTION
26624 field_addr.name = "science_cost";
26625#endif /* FREECIV_JSON_CONNECTION */
26626
26627 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
26628 RECEIVE_PACKET_FIELD_ERROR(science_cost);
26629 }
26630
26631#ifdef FREECIV_JSON_CONNECTION
26632 field_addr.name = "is_connected";
26633#endif /* FREECIV_JSON_CONNECTION */
26634
26635 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
26636 RECEIVE_PACKET_FIELD_ERROR(is_connected);
26637 }
26638
26639#ifdef FREECIV_JSON_CONNECTION
26640 field_addr.name = "revolution_finishes";
26641#endif /* FREECIV_JSON_CONNECTION */
26642
26643 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
26644 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
26645 }
26646
26647#ifdef FREECIV_JSON_CONNECTION
26648 field_addr.name = "ai_skill_level";
26649#endif /* FREECIV_JSON_CONNECTION */
26650
26651 {
26652 int readin;
26653
26654 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26655 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26656 }
26657 real_packet->ai_skill_level = readin;
26658 }
26659
26660#ifdef FREECIV_JSON_CONNECTION
26661 field_addr.name = "barbarian_type";
26662#endif /* FREECIV_JSON_CONNECTION */
26663
26664 {
26665 int readin;
26666
26667 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26668 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26669 }
26670 real_packet->barbarian_type = readin;
26671 }
26672
26673#ifdef FREECIV_JSON_CONNECTION
26674 field_addr.name = "gives_shared_vision";
26675#endif /* FREECIV_JSON_CONNECTION */
26676
26677 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26679 }
26680
26681#ifdef FREECIV_JSON_CONNECTION
26682 field_addr.name = "gives_shared_tiles";
26683#endif /* FREECIV_JSON_CONNECTION */
26684
26685 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26687 }
26688
26689#ifdef FREECIV_JSON_CONNECTION
26690 field_addr.name = "history";
26691#endif /* FREECIV_JSON_CONNECTION */
26692
26693 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26695 }
26696
26697#ifdef FREECIV_JSON_CONNECTION
26698 field_addr.name = "culture";
26699#endif /* FREECIV_JSON_CONNECTION */
26700
26701 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26703 }
26704
26705#ifdef FREECIV_JSON_CONNECTION
26706 field_addr.name = "love";
26707#endif /* FREECIV_JSON_CONNECTION */
26708
26709 {
26710 int i;
26711
26712
26713#ifdef FREECIV_JSON_CONNECTION
26714 /* Enter array. */
26715 field_addr.sub_location = plocation_elem_new(0);
26716#endif /* FREECIV_JSON_CONNECTION */
26717
26718 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26719#ifdef FREECIV_JSON_CONNECTION
26720 /* Next array element */
26721 field_addr.sub_location->number = i;
26722#endif /* FREECIV_JSON_CONNECTION */
26723
26724 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26726 }
26727 }
26728
26729#ifdef FREECIV_JSON_CONNECTION
26730 /* Exit array. */
26731 FC_FREE(field_addr.sub_location);
26732#endif /* FREECIV_JSON_CONNECTION */
26733 }
26734
26735#ifdef FREECIV_JSON_CONNECTION
26736 field_addr.name = "color_valid";
26737#endif /* FREECIV_JSON_CONNECTION */
26738
26739 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
26740 RECEIVE_PACKET_FIELD_ERROR(color_valid);
26741 }
26742
26743#ifdef FREECIV_JSON_CONNECTION
26744 field_addr.name = "color_changeable";
26745#endif /* FREECIV_JSON_CONNECTION */
26746
26747 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
26748 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
26749 }
26750
26751#ifdef FREECIV_JSON_CONNECTION
26752 field_addr.name = "color_red";
26753#endif /* FREECIV_JSON_CONNECTION */
26754
26755 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26756 RECEIVE_PACKET_FIELD_ERROR(color_red);
26757 }
26758
26759#ifdef FREECIV_JSON_CONNECTION
26760 field_addr.name = "color_green";
26761#endif /* FREECIV_JSON_CONNECTION */
26762
26763 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26764 RECEIVE_PACKET_FIELD_ERROR(color_green);
26765 }
26766
26767#ifdef FREECIV_JSON_CONNECTION
26768 field_addr.name = "color_blue";
26769#endif /* FREECIV_JSON_CONNECTION */
26770
26771 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26772 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26773 }
26774
26775#ifdef FREECIV_JSON_CONNECTION
26776 field_addr.name = "flags";
26777#endif /* FREECIV_JSON_CONNECTION */
26778
26779 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26781 }
26782
26783#ifdef FREECIV_JSON_CONNECTION
26784 field_addr.name = "wonders";
26785#endif /* FREECIV_JSON_CONNECTION */
26786
26787 {
26788 int i;
26789
26790
26791#ifdef FREECIV_JSON_CONNECTION
26792 /* Enter array. */
26793 field_addr.sub_location = plocation_elem_new(0);
26794#endif /* FREECIV_JSON_CONNECTION */
26795
26796 for (i = 0; i < B_LAST; i++) {
26797#ifdef FREECIV_JSON_CONNECTION
26798 /* Next array element */
26799 field_addr.sub_location->number = i;
26800#endif /* FREECIV_JSON_CONNECTION */
26801
26802 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26804 }
26805 }
26806
26807#ifdef FREECIV_JSON_CONNECTION
26808 /* Exit array. */
26809 FC_FREE(field_addr.sub_location);
26810#endif /* FREECIV_JSON_CONNECTION */
26811 }
26812
26813#ifdef FREECIV_JSON_CONNECTION
26814 field_addr.name = "multip_count";
26815#endif /* FREECIV_JSON_CONNECTION */
26816
26817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26818 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26819 }
26820
26821#ifdef FREECIV_JSON_CONNECTION
26822 field_addr.name = "multiplier";
26823#endif /* FREECIV_JSON_CONNECTION */
26824
26825 {
26826 int i;
26827
26828 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26829 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": array truncated");
26830 }
26831
26832#ifdef FREECIV_JSON_CONNECTION
26833 /* Enter array. */
26834 field_addr.sub_location = plocation_elem_new(0);
26835#endif /* FREECIV_JSON_CONNECTION */
26836
26837 for (i = 0; i < real_packet->multip_count; i++) {
26838#ifdef FREECIV_JSON_CONNECTION
26839 /* Next array element */
26840 field_addr.sub_location->number = i;
26841#endif /* FREECIV_JSON_CONNECTION */
26842
26843 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26845 }
26846 }
26847
26848#ifdef FREECIV_JSON_CONNECTION
26849 /* Exit array. */
26850 FC_FREE(field_addr.sub_location);
26851#endif /* FREECIV_JSON_CONNECTION */
26852 }
26853
26854#ifdef FREECIV_JSON_CONNECTION
26855 field_addr.name = "multiplier_target";
26856#endif /* FREECIV_JSON_CONNECTION */
26857
26858 {
26859 int i;
26860
26861 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26862 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": array truncated");
26863 }
26864
26865#ifdef FREECIV_JSON_CONNECTION
26866 /* Enter array. */
26867 field_addr.sub_location = plocation_elem_new(0);
26868#endif /* FREECIV_JSON_CONNECTION */
26869
26870 for (i = 0; i < real_packet->multip_count; i++) {
26871#ifdef FREECIV_JSON_CONNECTION
26872 /* Next array element */
26873 field_addr.sub_location->number = i;
26874#endif /* FREECIV_JSON_CONNECTION */
26875
26876 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26877 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26878 }
26879 }
26880
26881#ifdef FREECIV_JSON_CONNECTION
26882 /* Exit array. */
26883 FC_FREE(field_addr.sub_location);
26884#endif /* FREECIV_JSON_CONNECTION */
26885 }
26886
26887#ifdef FREECIV_JSON_CONNECTION
26888 field_addr.name = "multiplier_changed";
26889#endif /* FREECIV_JSON_CONNECTION */
26890
26891 {
26892 int i;
26893
26894 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26895 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": array truncated");
26896 }
26897
26898#ifdef FREECIV_JSON_CONNECTION
26899 /* Enter array. */
26900 field_addr.sub_location = plocation_elem_new(0);
26901#endif /* FREECIV_JSON_CONNECTION */
26902
26903 for (i = 0; i < real_packet->multip_count; i++) {
26904#ifdef FREECIV_JSON_CONNECTION
26905 /* Next array element */
26906 field_addr.sub_location->number = i;
26907#endif /* FREECIV_JSON_CONNECTION */
26908
26909 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26910 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26911 }
26912 }
26913
26914#ifdef FREECIV_JSON_CONNECTION
26915 /* Exit array. */
26916 FC_FREE(field_addr.sub_location);
26917#endif /* FREECIV_JSON_CONNECTION */
26918 }
26919#endif /* FREECIV_DELTA_PROTOCOL */
26920
26922#undef FREE_PACKET_STRUCT
26923}
26924
26925static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
26926{
26927 const struct packet_player_info *real_packet = packet;
26928 int e;
26930
26931 log_packet_detailed("packet_player_info_100: sending info about (%d)",
26932 real_packet->playerno);
26933
26934#ifdef FREECIV_DELTA_PROTOCOL
26936 struct packet_player_info *old;
26937 bool differ;
26938 int different = 0;
26939 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
26940
26941 if (nullptr == *hash) {
26943 nullptr, nullptr, nullptr, destroy_packet_player_info);
26944 }
26945 BV_CLR_ALL(fields);
26946
26947 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
26948 old = fc_malloc(sizeof(*old));
26949 /* temporary bitcopy just to insert correctly */
26950 *old = *real_packet;
26953 different = 1; /* Force to send. */
26954 }
26955
26956 differ = (strcmp(old->name, real_packet->name) != 0);
26957 if (differ) {
26958 different++;
26959 BV_SET(fields, 0);
26960 }
26961
26962 differ = (strcmp(old->username, real_packet->username) != 0);
26963 if (differ) {
26964 different++;
26965 BV_SET(fields, 1);
26966 }
26967
26968 differ = (old->unassigned_user != real_packet->unassigned_user);
26969 if (differ) {
26970 different++;
26971 }
26972 /* folded into head */
26973 if (real_packet->unassigned_user) {
26974 BV_SET(fields, 2);
26975 }
26976
26977 differ = (old->score != real_packet->score);
26978 if (differ) {
26979 different++;
26980 BV_SET(fields, 3);
26981 }
26982
26983 differ = (old->is_male != real_packet->is_male);
26984 if (differ) {
26985 different++;
26986 }
26987 /* folded into head */
26988 if (real_packet->is_male) {
26989 BV_SET(fields, 4);
26990 }
26991
26992 differ = (old->was_created != real_packet->was_created);
26993 if (differ) {
26994 different++;
26995 }
26996 /* folded into head */
26997 if (real_packet->was_created) {
26998 BV_SET(fields, 5);
26999 }
27000
27001 differ = (old->government != real_packet->government);
27002 if (differ) {
27003 different++;
27004 BV_SET(fields, 6);
27005 }
27006
27007 differ = (old->target_government != real_packet->target_government);
27008 if (differ) {
27009 different++;
27010 BV_SET(fields, 7);
27011 }
27012
27013 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
27014 if (differ) {
27015 different++;
27016 BV_SET(fields, 8);
27017 }
27018
27019 differ = (old->mood != real_packet->mood);
27020 if (differ) {
27021 different++;
27022 BV_SET(fields, 9);
27023 }
27024
27025 differ = (old->style != real_packet->style);
27026 if (differ) {
27027 different++;
27028 BV_SET(fields, 10);
27029 }
27030
27031 differ = (old->music_style != real_packet->music_style);
27032 if (differ) {
27033 different++;
27034 BV_SET(fields, 11);
27035 }
27036
27037 differ = (old->nation != real_packet->nation);
27038 if (differ) {
27039 different++;
27040 BV_SET(fields, 12);
27041 }
27042
27043 differ = (old->team != real_packet->team);
27044 if (differ) {
27045 different++;
27046 BV_SET(fields, 13);
27047 }
27048
27049 differ = (old->is_ready != real_packet->is_ready);
27050 if (differ) {
27051 different++;
27052 }
27053 /* folded into head */
27054 if (real_packet->is_ready) {
27055 BV_SET(fields, 14);
27056 }
27057
27058 differ = (old->phase_done != real_packet->phase_done);
27059 if (differ) {
27060 different++;
27061 }
27062 /* folded into head */
27063 if (real_packet->phase_done) {
27064 BV_SET(fields, 15);
27065 }
27066
27067 differ = (old->nturns_idle != real_packet->nturns_idle);
27068 if (differ) {
27069 different++;
27070 BV_SET(fields, 16);
27071 }
27072
27073 differ = (old->turns_alive != real_packet->turns_alive);
27074 if (differ) {
27075 different++;
27076 BV_SET(fields, 17);
27077 }
27078
27079 differ = (old->is_alive != real_packet->is_alive);
27080 if (differ) {
27081 different++;
27082 }
27083 /* folded into head */
27084 if (real_packet->is_alive) {
27085 BV_SET(fields, 18);
27086 }
27087
27088 differ = (old->autoselect_weight != real_packet->autoselect_weight);
27089 if (differ) {
27090 different++;
27091 BV_SET(fields, 19);
27092 }
27093
27094 differ = (old->gold != real_packet->gold);
27095 if (differ) {
27096 different++;
27097 BV_SET(fields, 20);
27098 }
27099
27100 differ = (old->tax != real_packet->tax);
27101 if (differ) {
27102 different++;
27103 BV_SET(fields, 21);
27104 }
27105
27106 differ = (old->science != real_packet->science);
27107 if (differ) {
27108 different++;
27109 BV_SET(fields, 22);
27110 }
27111
27112 differ = (old->luxury != real_packet->luxury);
27113 if (differ) {
27114 different++;
27115 BV_SET(fields, 23);
27116 }
27117
27118 differ = (old->infrapoints != real_packet->infrapoints);
27119 if (differ) {
27120 different++;
27121 BV_SET(fields, 24);
27122 }
27123
27124 differ = (old->tech_upkeep != real_packet->tech_upkeep);
27125 if (differ) {
27126 different++;
27127 BV_SET(fields, 25);
27128 }
27129
27130 differ = (old->science_cost != real_packet->science_cost);
27131 if (differ) {
27132 different++;
27133 BV_SET(fields, 26);
27134 }
27135
27136 differ = (old->is_connected != real_packet->is_connected);
27137 if (differ) {
27138 different++;
27139 }
27140 /* folded into head */
27141 if (real_packet->is_connected) {
27142 BV_SET(fields, 27);
27143 }
27144
27145 differ = (old->revolution_finishes != real_packet->revolution_finishes);
27146 if (differ) {
27147 different++;
27148 BV_SET(fields, 28);
27149 }
27150
27151 differ = (old->ai_skill_level != real_packet->ai_skill_level);
27152 if (differ) {
27153 different++;
27154 BV_SET(fields, 29);
27155 }
27156
27157 differ = (old->barbarian_type != real_packet->barbarian_type);
27158 if (differ) {
27159 different++;
27160 BV_SET(fields, 30);
27161 }
27162
27163 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
27164 if (differ) {
27165 different++;
27166 BV_SET(fields, 31);
27167 }
27168
27169 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
27170 if (differ) {
27171 different++;
27172 BV_SET(fields, 32);
27173 }
27174
27175 differ = (old->history != real_packet->history);
27176 if (differ) {
27177 different++;
27178 BV_SET(fields, 33);
27179 }
27180
27181 differ = (old->culture != real_packet->culture);
27182 if (differ) {
27183 different++;
27184 BV_SET(fields, 34);
27185 }
27186
27187 differ = FALSE;
27188 {
27189 int i;
27190
27191 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27192 differ = (old->love[i] != real_packet->love[i]);
27193 if (differ) {
27194 break;
27195 }
27196 }
27197 }
27198 if (differ) {
27199 different++;
27200 BV_SET(fields, 35);
27201 }
27202
27203 differ = (old->color_valid != real_packet->color_valid);
27204 if (differ) {
27205 different++;
27206 }
27207 /* folded into head */
27208 if (real_packet->color_valid) {
27209 BV_SET(fields, 36);
27210 }
27211
27212 differ = (old->color_changeable != real_packet->color_changeable);
27213 if (differ) {
27214 different++;
27215 }
27216 /* folded into head */
27217 if (real_packet->color_changeable) {
27218 BV_SET(fields, 37);
27219 }
27220
27221 differ = (old->color_red != real_packet->color_red);
27222 if (differ) {
27223 different++;
27224 BV_SET(fields, 38);
27225 }
27226
27227 differ = (old->color_green != real_packet->color_green);
27228 if (differ) {
27229 different++;
27230 BV_SET(fields, 39);
27231 }
27232
27233 differ = (old->color_blue != real_packet->color_blue);
27234 if (differ) {
27235 different++;
27236 BV_SET(fields, 40);
27237 }
27238
27239 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
27240 if (differ) {
27241 different++;
27242 BV_SET(fields, 41);
27243 }
27244
27245 differ = FALSE;
27246 {
27247 int i;
27248
27249 for (i = 0; i < B_LAST; i++) {
27250 differ = (old->wonders[i] != real_packet->wonders[i]);
27251 if (differ) {
27252 break;
27253 }
27254 }
27255 }
27256 if (differ) {
27257 different++;
27258 BV_SET(fields, 42);
27259 }
27260
27261 differ = (old->multip_count != real_packet->multip_count);
27262 if (differ) {
27263 different++;
27264 BV_SET(fields, 43);
27265 }
27266
27267 differ = (old->multip_count != real_packet->multip_count);
27268 if (!differ) {
27269 int i;
27270
27271 for (i = 0; i < old->multip_count; i++) {
27272 differ = (old->multiplier[i] != real_packet->multiplier[i]);
27273 if (differ) {
27274 break;
27275 }
27276 }
27277 }
27278 if (differ) {
27279 different++;
27280 BV_SET(fields, 44);
27281 }
27282
27283 differ = (old->multip_count != real_packet->multip_count);
27284 if (!differ) {
27285 int i;
27286
27287 for (i = 0; i < old->multip_count; i++) {
27288 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
27289 if (differ) {
27290 break;
27291 }
27292 }
27293 }
27294 if (differ) {
27295 different++;
27296 BV_SET(fields, 45);
27297 }
27298
27299 differ = (old->multip_count != real_packet->multip_count);
27300 if (!differ) {
27301 int i;
27302
27303 for (i = 0; i < old->multip_count; i++) {
27304 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
27305 if (differ) {
27306 break;
27307 }
27308 }
27309 }
27310 if (differ) {
27311 different++;
27312 BV_SET(fields, 46);
27313 }
27314
27315 if (different == 0) {
27316 log_packet_detailed(" no change -> discard");
27318 }
27319#endif /* FREECIV_DELTA_PROTOCOL */
27320
27321#ifdef FREECIV_JSON_CONNECTION
27322 struct plocation field_addr;
27323 {
27324 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
27327 }
27328#endif /* FREECIV_JSON_CONNECTION */
27329
27330#ifdef FREECIV_JSON_CONNECTION
27331 field_addr.name = "playerno";
27332#endif /* FREECIV_JSON_CONNECTION */
27333 e = 0;
27334
27335 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
27336
27337 if (e) {
27338 log_packet_detailed("'playerno' field error detected");
27339 }
27340
27341#ifdef FREECIV_DELTA_PROTOCOL
27342#ifdef FREECIV_JSON_CONNECTION
27343 field_addr.name = "fields";
27344#endif /* FREECIV_JSON_CONNECTION */
27345 e = 0;
27346 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27347 if (e) {
27348 log_packet_detailed("fields bitvector error detected");
27349 }
27350
27351 if (BV_ISSET(fields, 0)) {
27352 log_packet_detailed(" field 'name' has changed");
27353
27354#ifdef FREECIV_JSON_CONNECTION
27355 field_addr.name = "name";
27356#endif /* FREECIV_JSON_CONNECTION */
27357 e = 0;
27358
27359 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
27360
27361 if (e) {
27362 log_packet_detailed("'name' field error detected");
27363 }
27364 }
27365
27366 if (BV_ISSET(fields, 1)) {
27367 log_packet_detailed(" field 'username' has changed");
27368
27369#ifdef FREECIV_JSON_CONNECTION
27370 field_addr.name = "username";
27371#endif /* FREECIV_JSON_CONNECTION */
27372 e = 0;
27373
27374 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
27375
27376 if (e) {
27377 log_packet_detailed("'username' field error detected");
27378 }
27379 }
27380
27381 /* field 2 is folded into the header */
27382
27383 if (BV_ISSET(fields, 3)) {
27384 log_packet_detailed(" field 'score' has changed");
27385
27386#ifdef FREECIV_JSON_CONNECTION
27387 field_addr.name = "score";
27388#endif /* FREECIV_JSON_CONNECTION */
27389 e = 0;
27390
27391 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
27392
27393 if (e) {
27394 log_packet_detailed("'score' field error detected");
27395 }
27396 }
27397
27398 /* field 4 is folded into the header */
27399
27400 /* field 5 is folded into the header */
27401
27402 if (BV_ISSET(fields, 6)) {
27403 log_packet_detailed(" field 'government' has changed");
27404
27405#ifdef FREECIV_JSON_CONNECTION
27406 field_addr.name = "government";
27407#endif /* FREECIV_JSON_CONNECTION */
27408 e = 0;
27409
27410 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27411
27412 if (e) {
27413 log_packet_detailed("'government' field error detected");
27414 }
27415 }
27416
27417 if (BV_ISSET(fields, 7)) {
27418 log_packet_detailed(" field 'target_government' has changed");
27419
27420#ifdef FREECIV_JSON_CONNECTION
27421 field_addr.name = "target_government";
27422#endif /* FREECIV_JSON_CONNECTION */
27423 e = 0;
27424
27425 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
27426
27427 if (e) {
27428 log_packet_detailed("'target_government' field error detected");
27429 }
27430 }
27431
27432 if (BV_ISSET(fields, 8)) {
27433 log_packet_detailed(" field 'real_embassy' has changed");
27434
27435#ifdef FREECIV_JSON_CONNECTION
27436 field_addr.name = "real_embassy";
27437#endif /* FREECIV_JSON_CONNECTION */
27438 e = 0;
27439
27440 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
27441
27442 if (e) {
27443 log_packet_detailed("'real_embassy' field error detected");
27444 }
27445 }
27446
27447 if (BV_ISSET(fields, 9)) {
27448 log_packet_detailed(" field 'mood' has changed");
27449
27450#ifdef FREECIV_JSON_CONNECTION
27451 field_addr.name = "mood";
27452#endif /* FREECIV_JSON_CONNECTION */
27453 e = 0;
27454
27455 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
27456
27457 if (e) {
27458 log_packet_detailed("'mood' field error detected");
27459 }
27460 }
27461
27462 if (BV_ISSET(fields, 10)) {
27463 log_packet_detailed(" field 'style' has changed");
27464
27465#ifdef FREECIV_JSON_CONNECTION
27466 field_addr.name = "style";
27467#endif /* FREECIV_JSON_CONNECTION */
27468 e = 0;
27469
27470 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
27471
27472 if (e) {
27473 log_packet_detailed("'style' field error detected");
27474 }
27475 }
27476
27477 if (BV_ISSET(fields, 11)) {
27478 log_packet_detailed(" field 'music_style' has changed");
27479
27480#ifdef FREECIV_JSON_CONNECTION
27481 field_addr.name = "music_style";
27482#endif /* FREECIV_JSON_CONNECTION */
27483 e = 0;
27484
27485 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
27486
27487 if (e) {
27488 log_packet_detailed("'music_style' field error detected");
27489 }
27490 }
27491
27492 if (BV_ISSET(fields, 12)) {
27493 log_packet_detailed(" field 'nation' has changed");
27494
27495#ifdef FREECIV_JSON_CONNECTION
27496 field_addr.name = "nation";
27497#endif /* FREECIV_JSON_CONNECTION */
27498 e = 0;
27499
27500 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
27501
27502 if (e) {
27503 log_packet_detailed("'nation' field error detected");
27504 }
27505 }
27506
27507 if (BV_ISSET(fields, 13)) {
27508 log_packet_detailed(" field 'team' has changed");
27509
27510#ifdef FREECIV_JSON_CONNECTION
27511 field_addr.name = "team";
27512#endif /* FREECIV_JSON_CONNECTION */
27513 e = 0;
27514
27515 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
27516
27517 if (e) {
27518 log_packet_detailed("'team' field error detected");
27519 }
27520 }
27521
27522 /* field 14 is folded into the header */
27523
27524 /* field 15 is folded into the header */
27525
27526 if (BV_ISSET(fields, 16)) {
27527 log_packet_detailed(" field 'nturns_idle' has changed");
27528
27529#ifdef FREECIV_JSON_CONNECTION
27530 field_addr.name = "nturns_idle";
27531#endif /* FREECIV_JSON_CONNECTION */
27532 e = 0;
27533
27534 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
27535
27536 if (e) {
27537 log_packet_detailed("'nturns_idle' field error detected");
27538 }
27539 }
27540
27541 if (BV_ISSET(fields, 17)) {
27542 log_packet_detailed(" field 'turns_alive' has changed");
27543
27544#ifdef FREECIV_JSON_CONNECTION
27545 field_addr.name = "turns_alive";
27546#endif /* FREECIV_JSON_CONNECTION */
27547 e = 0;
27548
27549 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
27550
27551 if (e) {
27552 log_packet_detailed("'turns_alive' field error detected");
27553 }
27554 }
27555
27556 /* field 18 is folded into the header */
27557
27558 if (BV_ISSET(fields, 19)) {
27559 log_packet_detailed(" field 'autoselect_weight' has changed");
27560
27561#ifdef FREECIV_JSON_CONNECTION
27562 field_addr.name = "autoselect_weight";
27563#endif /* FREECIV_JSON_CONNECTION */
27564 e = 0;
27565
27566 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
27567
27568 if (e) {
27569 log_packet_detailed("'autoselect_weight' field error detected");
27570 }
27571 }
27572
27573 if (BV_ISSET(fields, 20)) {
27574 log_packet_detailed(" field 'gold' has changed");
27575
27576#ifdef FREECIV_JSON_CONNECTION
27577 field_addr.name = "gold";
27578#endif /* FREECIV_JSON_CONNECTION */
27579 e = 0;
27580
27581 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
27582
27583 if (e) {
27584 log_packet_detailed("'gold' field error detected");
27585 }
27586 }
27587
27588 if (BV_ISSET(fields, 21)) {
27589 log_packet_detailed(" field 'tax' has changed");
27590
27591#ifdef FREECIV_JSON_CONNECTION
27592 field_addr.name = "tax";
27593#endif /* FREECIV_JSON_CONNECTION */
27594 e = 0;
27595
27596 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27597
27598 if (e) {
27599 log_packet_detailed("'tax' field error detected");
27600 }
27601 }
27602
27603 if (BV_ISSET(fields, 22)) {
27604 log_packet_detailed(" field 'science' has changed");
27605
27606#ifdef FREECIV_JSON_CONNECTION
27607 field_addr.name = "science";
27608#endif /* FREECIV_JSON_CONNECTION */
27609 e = 0;
27610
27611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27612
27613 if (e) {
27614 log_packet_detailed("'science' field error detected");
27615 }
27616 }
27617
27618 if (BV_ISSET(fields, 23)) {
27619 log_packet_detailed(" field 'luxury' has changed");
27620
27621#ifdef FREECIV_JSON_CONNECTION
27622 field_addr.name = "luxury";
27623#endif /* FREECIV_JSON_CONNECTION */
27624 e = 0;
27625
27626 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27627
27628 if (e) {
27629 log_packet_detailed("'luxury' field error detected");
27630 }
27631 }
27632
27633 if (BV_ISSET(fields, 24)) {
27634 log_packet_detailed(" field 'infrapoints' has changed");
27635
27636#ifdef FREECIV_JSON_CONNECTION
27637 field_addr.name = "infrapoints";
27638#endif /* FREECIV_JSON_CONNECTION */
27639 e = 0;
27640
27641 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
27642
27643 if (e) {
27644 log_packet_detailed("'infrapoints' field error detected");
27645 }
27646 }
27647
27648 if (BV_ISSET(fields, 25)) {
27649 log_packet_detailed(" field 'tech_upkeep' has changed");
27650
27651#ifdef FREECIV_JSON_CONNECTION
27652 field_addr.name = "tech_upkeep";
27653#endif /* FREECIV_JSON_CONNECTION */
27654 e = 0;
27655
27656 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
27657
27658 if (e) {
27659 log_packet_detailed("'tech_upkeep' field error detected");
27660 }
27661 }
27662
27663 if (BV_ISSET(fields, 26)) {
27664 log_packet_detailed(" field 'science_cost' has changed");
27665
27666#ifdef FREECIV_JSON_CONNECTION
27667 field_addr.name = "science_cost";
27668#endif /* FREECIV_JSON_CONNECTION */
27669 e = 0;
27670
27671 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
27672
27673 if (e) {
27674 log_packet_detailed("'science_cost' field error detected");
27675 }
27676 }
27677
27678 /* field 27 is folded into the header */
27679
27680 if (BV_ISSET(fields, 28)) {
27681 log_packet_detailed(" field 'revolution_finishes' has changed");
27682
27683#ifdef FREECIV_JSON_CONNECTION
27684 field_addr.name = "revolution_finishes";
27685#endif /* FREECIV_JSON_CONNECTION */
27686 e = 0;
27687
27688 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
27689
27690 if (e) {
27691 log_packet_detailed("'revolution_finishes' field error detected");
27692 }
27693 }
27694
27695 if (BV_ISSET(fields, 29)) {
27696 log_packet_detailed(" field 'ai_skill_level' has changed");
27697
27698#ifdef FREECIV_JSON_CONNECTION
27699 field_addr.name = "ai_skill_level";
27700#endif /* FREECIV_JSON_CONNECTION */
27701 e = 0;
27702
27703 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
27704
27705 if (e) {
27706 log_packet_detailed("'ai_skill_level' field error detected");
27707 }
27708 }
27709
27710 if (BV_ISSET(fields, 30)) {
27711 log_packet_detailed(" field 'barbarian_type' has changed");
27712
27713#ifdef FREECIV_JSON_CONNECTION
27714 field_addr.name = "barbarian_type";
27715#endif /* FREECIV_JSON_CONNECTION */
27716 e = 0;
27717
27718 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
27719
27720 if (e) {
27721 log_packet_detailed("'barbarian_type' field error detected");
27722 }
27723 }
27724
27725 if (BV_ISSET(fields, 31)) {
27726 log_packet_detailed(" field 'gives_shared_vision' has changed");
27727
27728#ifdef FREECIV_JSON_CONNECTION
27729 field_addr.name = "gives_shared_vision";
27730#endif /* FREECIV_JSON_CONNECTION */
27731 e = 0;
27732
27733 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
27734
27735 if (e) {
27736 log_packet_detailed("'gives_shared_vision' field error detected");
27737 }
27738 }
27739
27740 if (BV_ISSET(fields, 32)) {
27741 log_packet_detailed(" field 'gives_shared_tiles' has changed");
27742
27743#ifdef FREECIV_JSON_CONNECTION
27744 field_addr.name = "gives_shared_tiles";
27745#endif /* FREECIV_JSON_CONNECTION */
27746 e = 0;
27747
27748 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
27749
27750 if (e) {
27751 log_packet_detailed("'gives_shared_tiles' field error detected");
27752 }
27753 }
27754
27755 if (BV_ISSET(fields, 33)) {
27756 log_packet_detailed(" field 'history' has changed");
27757
27758#ifdef FREECIV_JSON_CONNECTION
27759 field_addr.name = "history";
27760#endif /* FREECIV_JSON_CONNECTION */
27761 e = 0;
27762
27763 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
27764
27765 if (e) {
27766 log_packet_detailed("'history' field error detected");
27767 }
27768 }
27769
27770 if (BV_ISSET(fields, 34)) {
27771 log_packet_detailed(" field 'culture' has changed");
27772
27773#ifdef FREECIV_JSON_CONNECTION
27774 field_addr.name = "culture";
27775#endif /* FREECIV_JSON_CONNECTION */
27776 e = 0;
27777
27778 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
27779
27780 if (e) {
27781 log_packet_detailed("'culture' field error detected");
27782 }
27783 }
27784
27785 if (BV_ISSET(fields, 35)) {
27786 log_packet_detailed(" field 'love' has changed");
27787
27788#ifdef FREECIV_JSON_CONNECTION
27789 field_addr.name = "love";
27790#endif /* FREECIV_JSON_CONNECTION */
27791 e = 0;
27792
27793 {
27794 int i;
27795
27796#ifdef FREECIV_JSON_CONNECTION
27797 /* Create the array. */
27799
27800 /* Enter array. */
27801 field_addr.sub_location = plocation_elem_new(0);
27802#endif /* FREECIV_JSON_CONNECTION */
27803
27804 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27805#ifdef FREECIV_JSON_CONNECTION
27806 /* Next array element. */
27807 field_addr.sub_location->number = i;
27808#endif /* FREECIV_JSON_CONNECTION */
27809
27810 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
27811 }
27812
27813#ifdef FREECIV_JSON_CONNECTION
27814 /* Exit array. */
27815 FC_FREE(field_addr.sub_location);
27816#endif /* FREECIV_JSON_CONNECTION */
27817 }
27818
27819 if (e) {
27820 log_packet_detailed("'love' field error detected");
27821 }
27822 }
27823
27824 /* field 36 is folded into the header */
27825
27826 /* field 37 is folded into the header */
27827
27828 if (BV_ISSET(fields, 38)) {
27829 log_packet_detailed(" field 'color_red' has changed");
27830
27831#ifdef FREECIV_JSON_CONNECTION
27832 field_addr.name = "color_red";
27833#endif /* FREECIV_JSON_CONNECTION */
27834 e = 0;
27835
27836 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
27837
27838 if (e) {
27839 log_packet_detailed("'color_red' field error detected");
27840 }
27841 }
27842
27843 if (BV_ISSET(fields, 39)) {
27844 log_packet_detailed(" field 'color_green' has changed");
27845
27846#ifdef FREECIV_JSON_CONNECTION
27847 field_addr.name = "color_green";
27848#endif /* FREECIV_JSON_CONNECTION */
27849 e = 0;
27850
27851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
27852
27853 if (e) {
27854 log_packet_detailed("'color_green' field error detected");
27855 }
27856 }
27857
27858 if (BV_ISSET(fields, 40)) {
27859 log_packet_detailed(" field 'color_blue' has changed");
27860
27861#ifdef FREECIV_JSON_CONNECTION
27862 field_addr.name = "color_blue";
27863#endif /* FREECIV_JSON_CONNECTION */
27864 e = 0;
27865
27866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27867
27868 if (e) {
27869 log_packet_detailed("'color_blue' field error detected");
27870 }
27871 }
27872
27873 if (BV_ISSET(fields, 41)) {
27874 log_packet_detailed(" field 'flags' has changed");
27875
27876#ifdef FREECIV_JSON_CONNECTION
27877 field_addr.name = "flags";
27878#endif /* FREECIV_JSON_CONNECTION */
27879 e = 0;
27880
27881 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
27882
27883 if (e) {
27884 log_packet_detailed("'flags' field error detected");
27885 }
27886 }
27887
27888 if (BV_ISSET(fields, 42)) {
27889 log_packet_detailed(" field 'wonders' has changed");
27890
27891#ifdef FREECIV_JSON_CONNECTION
27892 field_addr.name = "wonders";
27893#endif /* FREECIV_JSON_CONNECTION */
27894 e = 0;
27895
27896 {
27897 int i;
27898
27900
27901#ifdef FREECIV_JSON_CONNECTION
27902 size_t count_i = 0;
27903
27904 /* Create the array. */
27905 e |= DIO_PUT(farray, &dout, &field_addr, 0);
27906
27907 /* Enter array. */
27908 field_addr.sub_location = plocation_elem_new(0);
27909#endif /* FREECIV_JSON_CONNECTION */
27910
27911 for (i = 0; i < B_LAST; i++) {
27912 differ = (old->wonders[i] != real_packet->wonders[i]);
27913
27914 if (!differ) {
27915 continue;
27916 }
27917
27918#ifdef FREECIV_JSON_CONNECTION
27919 /* Append next diff array element. */
27920 field_addr.sub_location->number = -1;
27921
27922 /* Create the diff array element. */
27923 e |= DIO_PUT(object, &dout, &field_addr);
27924
27925 /* Enter diff array element (start at the index address). */
27926 field_addr.sub_location->number = count_i++;
27927 field_addr.sub_location->sub_location = plocation_field_new("index");
27928#endif /* FREECIV_JSON_CONNECTION */
27929
27930 /* Write the index */
27931#if B_LAST <= MAX_UINT8
27932 e |= DIO_PUT(uint8, &dout, &field_addr, i);
27933#else
27934 e |= DIO_PUT(uint16, &dout, &field_addr, i);
27935#endif
27936
27937#ifdef FREECIV_JSON_CONNECTION
27938 /* Content address. */
27939 field_addr.sub_location->sub_location->name = "data";
27940#endif /* FREECIV_JSON_CONNECTION */
27941
27942 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27943
27944#ifdef FREECIV_JSON_CONNECTION
27945 /* Exit diff array element. */
27946 FC_FREE(field_addr.sub_location->sub_location);
27947#endif /* FREECIV_JSON_CONNECTION */
27948 }
27949
27950#ifdef FREECIV_JSON_CONNECTION
27951 /* Append diff array element. */
27952 field_addr.sub_location->number = -1;
27953
27954 /* Create the terminating diff array element. */
27955 e |= DIO_PUT(object, &dout, &field_addr);
27956
27957 /* Enter diff array element (start at the index address). */
27958 field_addr.sub_location->number = count_i;
27959 field_addr.sub_location->sub_location = plocation_field_new("index");
27960#endif /* FREECIV_JSON_CONNECTION */
27961
27962 /* Write the sentinel value */
27963#if B_LAST <= MAX_UINT8
27964 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
27965#else
27966 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
27967#endif
27968
27969#ifdef FREECIV_JSON_CONNECTION
27970 /* Exit diff array element. */
27971 FC_FREE(field_addr.sub_location->sub_location);
27972 /* Exit array. */
27973 FC_FREE(field_addr.sub_location);
27974#endif /* FREECIV_JSON_CONNECTION */
27975 }
27976
27977 if (e) {
27978 log_packet_detailed("'wonders' field error detected");
27979 }
27980 }
27981
27982 if (BV_ISSET(fields, 43)) {
27983 log_packet_detailed(" field 'multip_count' has changed");
27984
27985#ifdef FREECIV_JSON_CONNECTION
27986 field_addr.name = "multip_count";
27987#endif /* FREECIV_JSON_CONNECTION */
27988 e = 0;
27989
27990 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27991
27992 if (e) {
27993 log_packet_detailed("'multip_count' field error detected");
27994 }
27995 }
27996
27997 if (BV_ISSET(fields, 44)) {
27998 log_packet_detailed(" field 'multiplier' has changed");
27999
28000#ifdef FREECIV_JSON_CONNECTION
28001 field_addr.name = "multiplier";
28002#endif /* FREECIV_JSON_CONNECTION */
28003 e = 0;
28004
28005 {
28006 int i;
28007
28008#ifdef FREECIV_JSON_CONNECTION
28009 /* Create the array. */
28010 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28011
28012 /* Enter array. */
28013 field_addr.sub_location = plocation_elem_new(0);
28014#endif /* FREECIV_JSON_CONNECTION */
28015
28016 for (i = 0; i < real_packet->multip_count; i++) {
28017#ifdef FREECIV_JSON_CONNECTION
28018 /* Next array element. */
28019 field_addr.sub_location->number = i;
28020#endif /* FREECIV_JSON_CONNECTION */
28021
28022 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
28023 }
28024
28025#ifdef FREECIV_JSON_CONNECTION
28026 /* Exit array. */
28027 FC_FREE(field_addr.sub_location);
28028#endif /* FREECIV_JSON_CONNECTION */
28029 }
28030
28031 if (e) {
28032 log_packet_detailed("'multiplier' field error detected");
28033 }
28034 }
28035
28036 if (BV_ISSET(fields, 45)) {
28037 log_packet_detailed(" field 'multiplier_target' has changed");
28038
28039#ifdef FREECIV_JSON_CONNECTION
28040 field_addr.name = "multiplier_target";
28041#endif /* FREECIV_JSON_CONNECTION */
28042 e = 0;
28043
28044 {
28045 int i;
28046
28047#ifdef FREECIV_JSON_CONNECTION
28048 /* Create the array. */
28049 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28050
28051 /* Enter array. */
28052 field_addr.sub_location = plocation_elem_new(0);
28053#endif /* FREECIV_JSON_CONNECTION */
28054
28055 for (i = 0; i < real_packet->multip_count; i++) {
28056#ifdef FREECIV_JSON_CONNECTION
28057 /* Next array element. */
28058 field_addr.sub_location->number = i;
28059#endif /* FREECIV_JSON_CONNECTION */
28060
28061 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
28062 }
28063
28064#ifdef FREECIV_JSON_CONNECTION
28065 /* Exit array. */
28066 FC_FREE(field_addr.sub_location);
28067#endif /* FREECIV_JSON_CONNECTION */
28068 }
28069
28070 if (e) {
28071 log_packet_detailed("'multiplier_target' field error detected");
28072 }
28073 }
28074
28075 if (BV_ISSET(fields, 46)) {
28076 log_packet_detailed(" field 'multiplier_changed' has changed");
28077
28078#ifdef FREECIV_JSON_CONNECTION
28079 field_addr.name = "multiplier_changed";
28080#endif /* FREECIV_JSON_CONNECTION */
28081 e = 0;
28082
28083 {
28084 int i;
28085
28086#ifdef FREECIV_JSON_CONNECTION
28087 /* Create the array. */
28088 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28089
28090 /* Enter array. */
28091 field_addr.sub_location = plocation_elem_new(0);
28092#endif /* FREECIV_JSON_CONNECTION */
28093
28094 for (i = 0; i < real_packet->multip_count; i++) {
28095#ifdef FREECIV_JSON_CONNECTION
28096 /* Next array element. */
28097 field_addr.sub_location->number = i;
28098#endif /* FREECIV_JSON_CONNECTION */
28099
28100 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
28101 }
28102
28103#ifdef FREECIV_JSON_CONNECTION
28104 /* Exit array. */
28105 FC_FREE(field_addr.sub_location);
28106#endif /* FREECIV_JSON_CONNECTION */
28107 }
28108
28109 if (e) {
28110 log_packet_detailed("'multiplier_changed' field error detected");
28111 }
28112 }
28113
28114 *old = *real_packet;
28115
28116#else /* FREECIV_DELTA_PROTOCOL */
28117#ifdef FREECIV_JSON_CONNECTION
28118 field_addr.name = "name";
28119#endif /* FREECIV_JSON_CONNECTION */
28120 e = 0;
28121
28122 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
28123
28124 if (e) {
28125 log_packet_detailed("'name' field error detected");
28126 }
28127
28128#ifdef FREECIV_JSON_CONNECTION
28129 field_addr.name = "username";
28130#endif /* FREECIV_JSON_CONNECTION */
28131 e = 0;
28132
28133 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
28134
28135 if (e) {
28136 log_packet_detailed("'username' field error detected");
28137 }
28138
28139#ifdef FREECIV_JSON_CONNECTION
28140 field_addr.name = "unassigned_user";
28141#endif /* FREECIV_JSON_CONNECTION */
28142 e = 0;
28143
28144 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
28145
28146 if (e) {
28147 log_packet_detailed("'unassigned_user' field error detected");
28148 }
28149
28150#ifdef FREECIV_JSON_CONNECTION
28151 field_addr.name = "score";
28152#endif /* FREECIV_JSON_CONNECTION */
28153 e = 0;
28154
28155 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
28156
28157 if (e) {
28158 log_packet_detailed("'score' field error detected");
28159 }
28160
28161#ifdef FREECIV_JSON_CONNECTION
28162 field_addr.name = "is_male";
28163#endif /* FREECIV_JSON_CONNECTION */
28164 e = 0;
28165
28166 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
28167
28168 if (e) {
28169 log_packet_detailed("'is_male' field error detected");
28170 }
28171
28172#ifdef FREECIV_JSON_CONNECTION
28173 field_addr.name = "was_created";
28174#endif /* FREECIV_JSON_CONNECTION */
28175 e = 0;
28176
28177 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
28178
28179 if (e) {
28180 log_packet_detailed("'was_created' field error detected");
28181 }
28182
28183#ifdef FREECIV_JSON_CONNECTION
28184 field_addr.name = "government";
28185#endif /* FREECIV_JSON_CONNECTION */
28186 e = 0;
28187
28188 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
28189
28190 if (e) {
28191 log_packet_detailed("'government' field error detected");
28192 }
28193
28194#ifdef FREECIV_JSON_CONNECTION
28195 field_addr.name = "target_government";
28196#endif /* FREECIV_JSON_CONNECTION */
28197 e = 0;
28198
28199 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
28200
28201 if (e) {
28202 log_packet_detailed("'target_government' field error detected");
28203 }
28204
28205#ifdef FREECIV_JSON_CONNECTION
28206 field_addr.name = "real_embassy";
28207#endif /* FREECIV_JSON_CONNECTION */
28208 e = 0;
28209
28210 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->real_embassy);
28211
28212 if (e) {
28213 log_packet_detailed("'real_embassy' field error detected");
28214 }
28215
28216#ifdef FREECIV_JSON_CONNECTION
28217 field_addr.name = "mood";
28218#endif /* FREECIV_JSON_CONNECTION */
28219 e = 0;
28220
28221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
28222
28223 if (e) {
28224 log_packet_detailed("'mood' field error detected");
28225 }
28226
28227#ifdef FREECIV_JSON_CONNECTION
28228 field_addr.name = "style";
28229#endif /* FREECIV_JSON_CONNECTION */
28230 e = 0;
28231
28232 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
28233
28234 if (e) {
28235 log_packet_detailed("'style' field error detected");
28236 }
28237
28238#ifdef FREECIV_JSON_CONNECTION
28239 field_addr.name = "music_style";
28240#endif /* FREECIV_JSON_CONNECTION */
28241 e = 0;
28242
28243 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
28244
28245 if (e) {
28246 log_packet_detailed("'music_style' field error detected");
28247 }
28248
28249#ifdef FREECIV_JSON_CONNECTION
28250 field_addr.name = "nation";
28251#endif /* FREECIV_JSON_CONNECTION */
28252 e = 0;
28253
28254 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
28255
28256 if (e) {
28257 log_packet_detailed("'nation' field error detected");
28258 }
28259
28260#ifdef FREECIV_JSON_CONNECTION
28261 field_addr.name = "team";
28262#endif /* FREECIV_JSON_CONNECTION */
28263 e = 0;
28264
28265 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
28266
28267 if (e) {
28268 log_packet_detailed("'team' field error detected");
28269 }
28270
28271#ifdef FREECIV_JSON_CONNECTION
28272 field_addr.name = "is_ready";
28273#endif /* FREECIV_JSON_CONNECTION */
28274 e = 0;
28275
28276 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
28277
28278 if (e) {
28279 log_packet_detailed("'is_ready' field error detected");
28280 }
28281
28282#ifdef FREECIV_JSON_CONNECTION
28283 field_addr.name = "phase_done";
28284#endif /* FREECIV_JSON_CONNECTION */
28285 e = 0;
28286
28287 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
28288
28289 if (e) {
28290 log_packet_detailed("'phase_done' field error detected");
28291 }
28292
28293#ifdef FREECIV_JSON_CONNECTION
28294 field_addr.name = "nturns_idle";
28295#endif /* FREECIV_JSON_CONNECTION */
28296 e = 0;
28297
28298 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
28299
28300 if (e) {
28301 log_packet_detailed("'nturns_idle' field error detected");
28302 }
28303
28304#ifdef FREECIV_JSON_CONNECTION
28305 field_addr.name = "turns_alive";
28306#endif /* FREECIV_JSON_CONNECTION */
28307 e = 0;
28308
28309 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
28310
28311 if (e) {
28312 log_packet_detailed("'turns_alive' field error detected");
28313 }
28314
28315#ifdef FREECIV_JSON_CONNECTION
28316 field_addr.name = "is_alive";
28317#endif /* FREECIV_JSON_CONNECTION */
28318 e = 0;
28319
28320 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
28321
28322 if (e) {
28323 log_packet_detailed("'is_alive' field error detected");
28324 }
28325
28326#ifdef FREECIV_JSON_CONNECTION
28327 field_addr.name = "autoselect_weight";
28328#endif /* FREECIV_JSON_CONNECTION */
28329 e = 0;
28330
28331 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
28332
28333 if (e) {
28334 log_packet_detailed("'autoselect_weight' field error detected");
28335 }
28336
28337#ifdef FREECIV_JSON_CONNECTION
28338 field_addr.name = "gold";
28339#endif /* FREECIV_JSON_CONNECTION */
28340 e = 0;
28341
28342 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
28343
28344 if (e) {
28345 log_packet_detailed("'gold' field error detected");
28346 }
28347
28348#ifdef FREECIV_JSON_CONNECTION
28349 field_addr.name = "tax";
28350#endif /* FREECIV_JSON_CONNECTION */
28351 e = 0;
28352
28353 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
28354
28355 if (e) {
28356 log_packet_detailed("'tax' field error detected");
28357 }
28358
28359#ifdef FREECIV_JSON_CONNECTION
28360 field_addr.name = "science";
28361#endif /* FREECIV_JSON_CONNECTION */
28362 e = 0;
28363
28364 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
28365
28366 if (e) {
28367 log_packet_detailed("'science' field error detected");
28368 }
28369
28370#ifdef FREECIV_JSON_CONNECTION
28371 field_addr.name = "luxury";
28372#endif /* FREECIV_JSON_CONNECTION */
28373 e = 0;
28374
28375 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
28376
28377 if (e) {
28378 log_packet_detailed("'luxury' field error detected");
28379 }
28380
28381#ifdef FREECIV_JSON_CONNECTION
28382 field_addr.name = "infrapoints";
28383#endif /* FREECIV_JSON_CONNECTION */
28384 e = 0;
28385
28386 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
28387
28388 if (e) {
28389 log_packet_detailed("'infrapoints' field error detected");
28390 }
28391
28392#ifdef FREECIV_JSON_CONNECTION
28393 field_addr.name = "tech_upkeep";
28394#endif /* FREECIV_JSON_CONNECTION */
28395 e = 0;
28396
28397 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep);
28398
28399 if (e) {
28400 log_packet_detailed("'tech_upkeep' field error detected");
28401 }
28402
28403#ifdef FREECIV_JSON_CONNECTION
28404 field_addr.name = "science_cost";
28405#endif /* FREECIV_JSON_CONNECTION */
28406 e = 0;
28407
28408 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
28409
28410 if (e) {
28411 log_packet_detailed("'science_cost' field error detected");
28412 }
28413
28414#ifdef FREECIV_JSON_CONNECTION
28415 field_addr.name = "is_connected";
28416#endif /* FREECIV_JSON_CONNECTION */
28417 e = 0;
28418
28419 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
28420
28421 if (e) {
28422 log_packet_detailed("'is_connected' field error detected");
28423 }
28424
28425#ifdef FREECIV_JSON_CONNECTION
28426 field_addr.name = "revolution_finishes";
28427#endif /* FREECIV_JSON_CONNECTION */
28428 e = 0;
28429
28430 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
28431
28432 if (e) {
28433 log_packet_detailed("'revolution_finishes' field error detected");
28434 }
28435
28436#ifdef FREECIV_JSON_CONNECTION
28437 field_addr.name = "ai_skill_level";
28438#endif /* FREECIV_JSON_CONNECTION */
28439 e = 0;
28440
28441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
28442
28443 if (e) {
28444 log_packet_detailed("'ai_skill_level' field error detected");
28445 }
28446
28447#ifdef FREECIV_JSON_CONNECTION
28448 field_addr.name = "barbarian_type";
28449#endif /* FREECIV_JSON_CONNECTION */
28450 e = 0;
28451
28452 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
28453
28454 if (e) {
28455 log_packet_detailed("'barbarian_type' field error detected");
28456 }
28457
28458#ifdef FREECIV_JSON_CONNECTION
28459 field_addr.name = "gives_shared_vision";
28460#endif /* FREECIV_JSON_CONNECTION */
28461 e = 0;
28462
28463 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_vision);
28464
28465 if (e) {
28466 log_packet_detailed("'gives_shared_vision' field error detected");
28467 }
28468
28469#ifdef FREECIV_JSON_CONNECTION
28470 field_addr.name = "gives_shared_tiles";
28471#endif /* FREECIV_JSON_CONNECTION */
28472 e = 0;
28473
28474 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->gives_shared_tiles);
28475
28476 if (e) {
28477 log_packet_detailed("'gives_shared_tiles' field error detected");
28478 }
28479
28480#ifdef FREECIV_JSON_CONNECTION
28481 field_addr.name = "history";
28482#endif /* FREECIV_JSON_CONNECTION */
28483 e = 0;
28484
28485 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
28486
28487 if (e) {
28488 log_packet_detailed("'history' field error detected");
28489 }
28490
28491#ifdef FREECIV_JSON_CONNECTION
28492 field_addr.name = "culture";
28493#endif /* FREECIV_JSON_CONNECTION */
28494 e = 0;
28495
28496 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
28497
28498 if (e) {
28499 log_packet_detailed("'culture' field error detected");
28500 }
28501
28502#ifdef FREECIV_JSON_CONNECTION
28503 field_addr.name = "love";
28504#endif /* FREECIV_JSON_CONNECTION */
28505 e = 0;
28506
28507 {
28508 int i;
28509
28510#ifdef FREECIV_JSON_CONNECTION
28511 /* Create the array. */
28513
28514 /* Enter array. */
28515 field_addr.sub_location = plocation_elem_new(0);
28516#endif /* FREECIV_JSON_CONNECTION */
28517
28518 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
28519#ifdef FREECIV_JSON_CONNECTION
28520 /* Next array element. */
28521 field_addr.sub_location->number = i;
28522#endif /* FREECIV_JSON_CONNECTION */
28523
28524 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
28525 }
28526
28527#ifdef FREECIV_JSON_CONNECTION
28528 /* Exit array. */
28529 FC_FREE(field_addr.sub_location);
28530#endif /* FREECIV_JSON_CONNECTION */
28531 }
28532
28533 if (e) {
28534 log_packet_detailed("'love' field error detected");
28535 }
28536
28537#ifdef FREECIV_JSON_CONNECTION
28538 field_addr.name = "color_valid";
28539#endif /* FREECIV_JSON_CONNECTION */
28540 e = 0;
28541
28542 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
28543
28544 if (e) {
28545 log_packet_detailed("'color_valid' field error detected");
28546 }
28547
28548#ifdef FREECIV_JSON_CONNECTION
28549 field_addr.name = "color_changeable";
28550#endif /* FREECIV_JSON_CONNECTION */
28551 e = 0;
28552
28553 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
28554
28555 if (e) {
28556 log_packet_detailed("'color_changeable' field error detected");
28557 }
28558
28559#ifdef FREECIV_JSON_CONNECTION
28560 field_addr.name = "color_red";
28561#endif /* FREECIV_JSON_CONNECTION */
28562 e = 0;
28563
28564 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
28565
28566 if (e) {
28567 log_packet_detailed("'color_red' field error detected");
28568 }
28569
28570#ifdef FREECIV_JSON_CONNECTION
28571 field_addr.name = "color_green";
28572#endif /* FREECIV_JSON_CONNECTION */
28573 e = 0;
28574
28575 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
28576
28577 if (e) {
28578 log_packet_detailed("'color_green' field error detected");
28579 }
28580
28581#ifdef FREECIV_JSON_CONNECTION
28582 field_addr.name = "color_blue";
28583#endif /* FREECIV_JSON_CONNECTION */
28584 e = 0;
28585
28586 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
28587
28588 if (e) {
28589 log_packet_detailed("'color_blue' field error detected");
28590 }
28591
28592#ifdef FREECIV_JSON_CONNECTION
28593 field_addr.name = "flags";
28594#endif /* FREECIV_JSON_CONNECTION */
28595 e = 0;
28596
28597 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
28598
28599 if (e) {
28600 log_packet_detailed("'flags' field error detected");
28601 }
28602
28603#ifdef FREECIV_JSON_CONNECTION
28604 field_addr.name = "wonders";
28605#endif /* FREECIV_JSON_CONNECTION */
28606 e = 0;
28607
28608 {
28609 int i;
28610
28611#ifdef FREECIV_JSON_CONNECTION
28612 /* Create the array. */
28613 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
28614
28615 /* Enter array. */
28616 field_addr.sub_location = plocation_elem_new(0);
28617#endif /* FREECIV_JSON_CONNECTION */
28618
28619 for (i = 0; i < B_LAST; i++) {
28620#ifdef FREECIV_JSON_CONNECTION
28621 /* Next array element. */
28622 field_addr.sub_location->number = i;
28623#endif /* FREECIV_JSON_CONNECTION */
28624
28625 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
28626 }
28627
28628#ifdef FREECIV_JSON_CONNECTION
28629 /* Exit array. */
28630 FC_FREE(field_addr.sub_location);
28631#endif /* FREECIV_JSON_CONNECTION */
28632 }
28633
28634 if (e) {
28635 log_packet_detailed("'wonders' field error detected");
28636 }
28637
28638#ifdef FREECIV_JSON_CONNECTION
28639 field_addr.name = "multip_count";
28640#endif /* FREECIV_JSON_CONNECTION */
28641 e = 0;
28642
28643 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
28644
28645 if (e) {
28646 log_packet_detailed("'multip_count' field error detected");
28647 }
28648
28649#ifdef FREECIV_JSON_CONNECTION
28650 field_addr.name = "multiplier";
28651#endif /* FREECIV_JSON_CONNECTION */
28652 e = 0;
28653
28654 {
28655 int i;
28656
28657#ifdef FREECIV_JSON_CONNECTION
28658 /* Create the array. */
28659 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28660
28661 /* Enter array. */
28662 field_addr.sub_location = plocation_elem_new(0);
28663#endif /* FREECIV_JSON_CONNECTION */
28664
28665 for (i = 0; i < real_packet->multip_count; i++) {
28666#ifdef FREECIV_JSON_CONNECTION
28667 /* Next array element. */
28668 field_addr.sub_location->number = i;
28669#endif /* FREECIV_JSON_CONNECTION */
28670
28671 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
28672 }
28673
28674#ifdef FREECIV_JSON_CONNECTION
28675 /* Exit array. */
28676 FC_FREE(field_addr.sub_location);
28677#endif /* FREECIV_JSON_CONNECTION */
28678 }
28679
28680 if (e) {
28681 log_packet_detailed("'multiplier' field error detected");
28682 }
28683
28684#ifdef FREECIV_JSON_CONNECTION
28685 field_addr.name = "multiplier_target";
28686#endif /* FREECIV_JSON_CONNECTION */
28687 e = 0;
28688
28689 {
28690 int i;
28691
28692#ifdef FREECIV_JSON_CONNECTION
28693 /* Create the array. */
28694 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28695
28696 /* Enter array. */
28697 field_addr.sub_location = plocation_elem_new(0);
28698#endif /* FREECIV_JSON_CONNECTION */
28699
28700 for (i = 0; i < real_packet->multip_count; i++) {
28701#ifdef FREECIV_JSON_CONNECTION
28702 /* Next array element. */
28703 field_addr.sub_location->number = i;
28704#endif /* FREECIV_JSON_CONNECTION */
28705
28706 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
28707 }
28708
28709#ifdef FREECIV_JSON_CONNECTION
28710 /* Exit array. */
28711 FC_FREE(field_addr.sub_location);
28712#endif /* FREECIV_JSON_CONNECTION */
28713 }
28714
28715 if (e) {
28716 log_packet_detailed("'multiplier_target' field error detected");
28717 }
28718
28719#ifdef FREECIV_JSON_CONNECTION
28720 field_addr.name = "multiplier_changed";
28721#endif /* FREECIV_JSON_CONNECTION */
28722 e = 0;
28723
28724 {
28725 int i;
28726
28727#ifdef FREECIV_JSON_CONNECTION
28728 /* Create the array. */
28729 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
28730
28731 /* Enter array. */
28732 field_addr.sub_location = plocation_elem_new(0);
28733#endif /* FREECIV_JSON_CONNECTION */
28734
28735 for (i = 0; i < real_packet->multip_count; i++) {
28736#ifdef FREECIV_JSON_CONNECTION
28737 /* Next array element. */
28738 field_addr.sub_location->number = i;
28739#endif /* FREECIV_JSON_CONNECTION */
28740
28741 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
28742 }
28743
28744#ifdef FREECIV_JSON_CONNECTION
28745 /* Exit array. */
28746 FC_FREE(field_addr.sub_location);
28747#endif /* FREECIV_JSON_CONNECTION */
28748 }
28749
28750 if (e) {
28751 log_packet_detailed("'multiplier_changed' field error detected");
28752 }
28753#endif /* FREECIV_DELTA_PROTOCOL */
28754
28756}
28757
28759{
28760 if (!pc->used) {
28761 log_error("WARNING: trying to send data to the closed connection %s",
28763 return -1;
28764 }
28765 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_INFO].packet != nullptr, -1,
28766 "Handler for PACKET_PLAYER_INFO not installed");
28767 return pc->phs.handlers->send[PACKET_PLAYER_INFO].packet(pc, packet);
28768}
28769
28771{
28772 memset(packet, 0, sizeof(*packet));
28773}
28774
28775#define free_packet_player_phase_done(_packet) (void) 0
28776#define destroy_packet_player_phase_done free
28777
28778#ifdef FREECIV_DELTA_PROTOCOL
28779#define hash_packet_player_phase_done_100 hash_const
28780#define cmp_packet_player_phase_done_100 cmp_const
28782#endif /* FREECIV_DELTA_PROTOCOL */
28783
28785{
28786#define FREE_PACKET_STRUCT(_packet) free_packet_player_phase_done(_packet)
28788
28789#ifdef FREECIV_JSON_CONNECTION
28790 struct plocation field_addr;
28791 {
28792 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28795 }
28796#endif /* FREECIV_JSON_CONNECTION */
28797
28798 log_packet_detailed("packet_player_phase_done_100: got info about ()");
28799
28800#ifdef FREECIV_DELTA_PROTOCOL
28803 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PHASE_DONE;
28804
28805 if (nullptr == *hash) {
28807 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28808 }
28809
28810 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28811 *real_packet = *old;
28812 } else {
28813 /* packet is already initialized empty */
28814 log_packet_detailed(" no old info");
28815 }
28816
28817#ifdef FREECIV_JSON_CONNECTION
28818 field_addr.name = "fields";
28819#endif /* FREECIV_JSON_CONNECTION */
28820 DIO_BV_GET(&din, &field_addr, fields);
28821
28822 if (BV_ISSET(fields, 0)) {
28823 log_packet_detailed(" got field 'turn'");
28824
28825#ifdef FREECIV_JSON_CONNECTION
28826 field_addr.name = "turn";
28827#endif /* FREECIV_JSON_CONNECTION */
28828
28829 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28831 }
28832 }
28833
28834 if (nullptr == old) {
28835 old = fc_malloc(sizeof(*old));
28837 *old = *real_packet;
28839 } else {
28840 *old = *real_packet;
28841 }
28842
28843#else /* FREECIV_DELTA_PROTOCOL */
28844#ifdef FREECIV_JSON_CONNECTION
28845 field_addr.name = "turn";
28846#endif /* FREECIV_JSON_CONNECTION */
28847
28848 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
28850 }
28851#endif /* FREECIV_DELTA_PROTOCOL */
28852
28854#undef FREE_PACKET_STRUCT
28855}
28856
28858{
28859 const struct packet_player_phase_done *real_packet = packet;
28860 int e;
28862
28863 log_packet_detailed("packet_player_phase_done_100: sending info about ()");
28864
28865#ifdef FREECIV_DELTA_PROTOCOL
28868 bool differ;
28869 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PHASE_DONE;
28870
28871 if (nullptr == *hash) {
28873 nullptr, nullptr, nullptr, destroy_packet_player_phase_done);
28874 }
28875 BV_CLR_ALL(fields);
28876
28877 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28878 old = fc_malloc(sizeof(*old));
28879 /* temporary bitcopy just to insert correctly */
28880 *old = *real_packet;
28883 }
28884
28885 differ = (old->turn != real_packet->turn);
28886 if (differ) {
28887 BV_SET(fields, 0);
28888 }
28889#endif /* FREECIV_DELTA_PROTOCOL */
28890
28891#ifdef FREECIV_JSON_CONNECTION
28892 struct plocation field_addr;
28893 {
28894 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28897 }
28898#endif /* FREECIV_JSON_CONNECTION */
28899
28900#ifdef FREECIV_DELTA_PROTOCOL
28901#ifdef FREECIV_JSON_CONNECTION
28902 field_addr.name = "fields";
28903#endif /* FREECIV_JSON_CONNECTION */
28904 e = 0;
28905 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28906 if (e) {
28907 log_packet_detailed("fields bitvector error detected");
28908 }
28909
28910 if (BV_ISSET(fields, 0)) {
28911 log_packet_detailed(" field 'turn' has changed");
28912
28913#ifdef FREECIV_JSON_CONNECTION
28914 field_addr.name = "turn";
28915#endif /* FREECIV_JSON_CONNECTION */
28916 e = 0;
28917
28918 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28919
28920 if (e) {
28921 log_packet_detailed("'turn' field error detected");
28922 }
28923 }
28924
28925 *old = *real_packet;
28926
28927#else /* FREECIV_DELTA_PROTOCOL */
28928#ifdef FREECIV_JSON_CONNECTION
28929 field_addr.name = "turn";
28930#endif /* FREECIV_JSON_CONNECTION */
28931 e = 0;
28932
28933 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
28934
28935 if (e) {
28936 log_packet_detailed("'turn' field error detected");
28937 }
28938#endif /* FREECIV_DELTA_PROTOCOL */
28939
28941}
28942
28944{
28945 if (!pc->used) {
28946 log_error("WARNING: trying to send data to the closed connection %s",
28948 return -1;
28949 }
28950 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet != nullptr, -1,
28951 "Handler for PACKET_PLAYER_PHASE_DONE not installed");
28952 return pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet(pc, packet);
28953}
28954
28956{
28957 struct packet_player_phase_done packet, *real_packet = &packet;
28958
28960
28962}
28963
28964static inline void init_packet_player_rates(struct packet_player_rates *packet)
28965{
28966 memset(packet, 0, sizeof(*packet));
28967}
28968
28969#define free_packet_player_rates(_packet) (void) 0
28970#define destroy_packet_player_rates free
28971
28972#ifdef FREECIV_DELTA_PROTOCOL
28973#define hash_packet_player_rates_100 hash_const
28974#define cmp_packet_player_rates_100 cmp_const
28976#endif /* FREECIV_DELTA_PROTOCOL */
28977
28979{
28980#define FREE_PACKET_STRUCT(_packet) free_packet_player_rates(_packet)
28982
28983#ifdef FREECIV_JSON_CONNECTION
28984 struct plocation field_addr;
28985 {
28986 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
28989 }
28990#endif /* FREECIV_JSON_CONNECTION */
28991
28992 log_packet_detailed("packet_player_rates_100: got info about ()");
28993
28994#ifdef FREECIV_DELTA_PROTOCOL
28996 struct packet_player_rates *old;
28997 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RATES;
28998
28999 if (nullptr == *hash) {
29001 nullptr, nullptr, nullptr, destroy_packet_player_rates);
29002 }
29003
29004 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29005 *real_packet = *old;
29006 } else {
29007 /* packet is already initialized empty */
29008 log_packet_detailed(" no old info");
29009 }
29010
29011#ifdef FREECIV_JSON_CONNECTION
29012 field_addr.name = "fields";
29013#endif /* FREECIV_JSON_CONNECTION */
29014 DIO_BV_GET(&din, &field_addr, fields);
29015
29016 if (BV_ISSET(fields, 0)) {
29017 log_packet_detailed(" got field 'tax'");
29018
29019#ifdef FREECIV_JSON_CONNECTION
29020 field_addr.name = "tax";
29021#endif /* FREECIV_JSON_CONNECTION */
29022
29023 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
29025 }
29026 }
29027
29028 if (BV_ISSET(fields, 1)) {
29029 log_packet_detailed(" got field 'luxury'");
29030
29031#ifdef FREECIV_JSON_CONNECTION
29032 field_addr.name = "luxury";
29033#endif /* FREECIV_JSON_CONNECTION */
29034
29035 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
29037 }
29038 }
29039
29040 if (BV_ISSET(fields, 2)) {
29041 log_packet_detailed(" got field 'science'");
29042
29043#ifdef FREECIV_JSON_CONNECTION
29044 field_addr.name = "science";
29045#endif /* FREECIV_JSON_CONNECTION */
29046
29047 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
29049 }
29050 }
29051
29052 if (nullptr == old) {
29053 old = fc_malloc(sizeof(*old));
29055 *old = *real_packet;
29057 } else {
29058 *old = *real_packet;
29059 }
29060
29061#else /* FREECIV_DELTA_PROTOCOL */
29062#ifdef FREECIV_JSON_CONNECTION
29063 field_addr.name = "tax";
29064#endif /* FREECIV_JSON_CONNECTION */
29065
29066 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
29068 }
29069
29070#ifdef FREECIV_JSON_CONNECTION
29071 field_addr.name = "luxury";
29072#endif /* FREECIV_JSON_CONNECTION */
29073
29074 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
29076 }
29077
29078#ifdef FREECIV_JSON_CONNECTION
29079 field_addr.name = "science";
29080#endif /* FREECIV_JSON_CONNECTION */
29081
29082 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
29084 }
29085#endif /* FREECIV_DELTA_PROTOCOL */
29086
29088#undef FREE_PACKET_STRUCT
29089}
29090
29091static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
29092{
29093 const struct packet_player_rates *real_packet = packet;
29094 int e;
29096
29097 log_packet_detailed("packet_player_rates_100: sending info about ()");
29098
29099#ifdef FREECIV_DELTA_PROTOCOL
29101 struct packet_player_rates *old;
29102 bool differ;
29103 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RATES;
29104
29105 if (nullptr == *hash) {
29107 nullptr, nullptr, nullptr, destroy_packet_player_rates);
29108 }
29109 BV_CLR_ALL(fields);
29110
29111 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29112 old = fc_malloc(sizeof(*old));
29113 /* temporary bitcopy just to insert correctly */
29114 *old = *real_packet;
29117 }
29118
29119 differ = (old->tax != real_packet->tax);
29120 if (differ) {
29121 BV_SET(fields, 0);
29122 }
29123
29124 differ = (old->luxury != real_packet->luxury);
29125 if (differ) {
29126 BV_SET(fields, 1);
29127 }
29128
29129 differ = (old->science != real_packet->science);
29130 if (differ) {
29131 BV_SET(fields, 2);
29132 }
29133#endif /* FREECIV_DELTA_PROTOCOL */
29134
29135#ifdef FREECIV_JSON_CONNECTION
29136 struct plocation field_addr;
29137 {
29138 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29141 }
29142#endif /* FREECIV_JSON_CONNECTION */
29143
29144#ifdef FREECIV_DELTA_PROTOCOL
29145#ifdef FREECIV_JSON_CONNECTION
29146 field_addr.name = "fields";
29147#endif /* FREECIV_JSON_CONNECTION */
29148 e = 0;
29149 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29150 if (e) {
29151 log_packet_detailed("fields bitvector error detected");
29152 }
29153
29154 if (BV_ISSET(fields, 0)) {
29155 log_packet_detailed(" field 'tax' has changed");
29156
29157#ifdef FREECIV_JSON_CONNECTION
29158 field_addr.name = "tax";
29159#endif /* FREECIV_JSON_CONNECTION */
29160 e = 0;
29161
29162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29163
29164 if (e) {
29165 log_packet_detailed("'tax' field error detected");
29166 }
29167 }
29168
29169 if (BV_ISSET(fields, 1)) {
29170 log_packet_detailed(" field 'luxury' has changed");
29171
29172#ifdef FREECIV_JSON_CONNECTION
29173 field_addr.name = "luxury";
29174#endif /* FREECIV_JSON_CONNECTION */
29175 e = 0;
29176
29177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29178
29179 if (e) {
29180 log_packet_detailed("'luxury' field error detected");
29181 }
29182 }
29183
29184 if (BV_ISSET(fields, 2)) {
29185 log_packet_detailed(" field 'science' has changed");
29186
29187#ifdef FREECIV_JSON_CONNECTION
29188 field_addr.name = "science";
29189#endif /* FREECIV_JSON_CONNECTION */
29190 e = 0;
29191
29192 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29193
29194 if (e) {
29195 log_packet_detailed("'science' field error detected");
29196 }
29197 }
29198
29199 *old = *real_packet;
29200
29201#else /* FREECIV_DELTA_PROTOCOL */
29202#ifdef FREECIV_JSON_CONNECTION
29203 field_addr.name = "tax";
29204#endif /* FREECIV_JSON_CONNECTION */
29205 e = 0;
29206
29207 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29208
29209 if (e) {
29210 log_packet_detailed("'tax' field error detected");
29211 }
29212
29213#ifdef FREECIV_JSON_CONNECTION
29214 field_addr.name = "luxury";
29215#endif /* FREECIV_JSON_CONNECTION */
29216 e = 0;
29217
29218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29219
29220 if (e) {
29221 log_packet_detailed("'luxury' field error detected");
29222 }
29223
29224#ifdef FREECIV_JSON_CONNECTION
29225 field_addr.name = "science";
29226#endif /* FREECIV_JSON_CONNECTION */
29227 e = 0;
29228
29229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29230
29231 if (e) {
29232 log_packet_detailed("'science' field error detected");
29233 }
29234#endif /* FREECIV_DELTA_PROTOCOL */
29235
29237}
29238
29240{
29241 if (!pc->used) {
29242 log_error("WARNING: trying to send data to the closed connection %s",
29244 return -1;
29245 }
29246 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RATES].packet != nullptr, -1,
29247 "Handler for PACKET_PLAYER_RATES not installed");
29248 return pc->phs.handlers->send[PACKET_PLAYER_RATES].packet(pc, packet);
29249}
29250
29251int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
29252{
29253 struct packet_player_rates packet, *real_packet = &packet;
29254
29255 real_packet->tax = tax;
29256 real_packet->luxury = luxury;
29257 real_packet->science = science;
29258
29260}
29261
29263{
29264 memset(packet, 0, sizeof(*packet));
29265}
29266
29267#define free_packet_player_change_government(_packet) (void) 0
29268#define destroy_packet_player_change_government free
29269
29270#ifdef FREECIV_DELTA_PROTOCOL
29271#define hash_packet_player_change_government_100 hash_const
29272#define cmp_packet_player_change_government_100 cmp_const
29274#endif /* FREECIV_DELTA_PROTOCOL */
29275
29277{
29278#define FREE_PACKET_STRUCT(_packet) free_packet_player_change_government(_packet)
29280
29281#ifdef FREECIV_JSON_CONNECTION
29282 struct plocation field_addr;
29283 {
29284 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29287 }
29288#endif /* FREECIV_JSON_CONNECTION */
29289
29290 log_packet_detailed("packet_player_change_government_100: got info about ()");
29291
29292#ifdef FREECIV_DELTA_PROTOCOL
29295 struct genhash **hash = pc->phs.received + PACKET_PLAYER_CHANGE_GOVERNMENT;
29296
29297 if (nullptr == *hash) {
29299 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29300 }
29301
29302 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29303 *real_packet = *old;
29304 } else {
29305 /* packet is already initialized empty */
29306 log_packet_detailed(" no old info");
29307 }
29308
29309#ifdef FREECIV_JSON_CONNECTION
29310 field_addr.name = "fields";
29311#endif /* FREECIV_JSON_CONNECTION */
29312 DIO_BV_GET(&din, &field_addr, fields);
29313
29314 if (BV_ISSET(fields, 0)) {
29315 log_packet_detailed(" got field 'government'");
29316
29317#ifdef FREECIV_JSON_CONNECTION
29318 field_addr.name = "government";
29319#endif /* FREECIV_JSON_CONNECTION */
29320
29321 {
29322 int readin;
29323
29324 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29326 }
29327 real_packet->government = readin;
29328 }
29329 }
29330
29331 if (nullptr == old) {
29332 old = fc_malloc(sizeof(*old));
29334 *old = *real_packet;
29336 } else {
29337 *old = *real_packet;
29338 }
29339
29340#else /* FREECIV_DELTA_PROTOCOL */
29341#ifdef FREECIV_JSON_CONNECTION
29342 field_addr.name = "government";
29343#endif /* FREECIV_JSON_CONNECTION */
29344
29345 {
29346 int readin;
29347
29348 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
29350 }
29351 real_packet->government = readin;
29352 }
29353#endif /* FREECIV_DELTA_PROTOCOL */
29354
29356#undef FREE_PACKET_STRUCT
29357}
29358
29360{
29361 const struct packet_player_change_government *real_packet = packet;
29362 int e;
29364
29365 log_packet_detailed("packet_player_change_government_100: sending info about ()");
29366
29367#ifdef FREECIV_DELTA_PROTOCOL
29370 bool differ;
29371 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_CHANGE_GOVERNMENT;
29372
29373 if (nullptr == *hash) {
29375 nullptr, nullptr, nullptr, destroy_packet_player_change_government);
29376 }
29377 BV_CLR_ALL(fields);
29378
29379 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29380 old = fc_malloc(sizeof(*old));
29381 /* temporary bitcopy just to insert correctly */
29382 *old = *real_packet;
29385 }
29386
29387 differ = (old->government != real_packet->government);
29388 if (differ) {
29389 BV_SET(fields, 0);
29390 }
29391#endif /* FREECIV_DELTA_PROTOCOL */
29392
29393#ifdef FREECIV_JSON_CONNECTION
29394 struct plocation field_addr;
29395 {
29396 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29399 }
29400#endif /* FREECIV_JSON_CONNECTION */
29401
29402#ifdef FREECIV_DELTA_PROTOCOL
29403#ifdef FREECIV_JSON_CONNECTION
29404 field_addr.name = "fields";
29405#endif /* FREECIV_JSON_CONNECTION */
29406 e = 0;
29407 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29408 if (e) {
29409 log_packet_detailed("fields bitvector error detected");
29410 }
29411
29412 if (BV_ISSET(fields, 0)) {
29413 log_packet_detailed(" field 'government' has changed");
29414
29415#ifdef FREECIV_JSON_CONNECTION
29416 field_addr.name = "government";
29417#endif /* FREECIV_JSON_CONNECTION */
29418 e = 0;
29419
29420 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29421
29422 if (e) {
29423 log_packet_detailed("'government' field error detected");
29424 }
29425 }
29426
29427 *old = *real_packet;
29428
29429#else /* FREECIV_DELTA_PROTOCOL */
29430#ifdef FREECIV_JSON_CONNECTION
29431 field_addr.name = "government";
29432#endif /* FREECIV_JSON_CONNECTION */
29433 e = 0;
29434
29435 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29436
29437 if (e) {
29438 log_packet_detailed("'government' field error detected");
29439 }
29440#endif /* FREECIV_DELTA_PROTOCOL */
29441
29443}
29444
29446{
29447 if (!pc->used) {
29448 log_error("WARNING: trying to send data to the closed connection %s",
29450 return -1;
29451 }
29452 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet != nullptr, -1,
29453 "Handler for PACKET_PLAYER_CHANGE_GOVERNMENT not installed");
29454 return pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet(pc, packet);
29455}
29456
29465
29467{
29468 memset(packet, 0, sizeof(*packet));
29469}
29470
29471#define free_packet_player_place_infra(_packet) (void) 0
29472#define destroy_packet_player_place_infra free
29473
29474#ifdef FREECIV_DELTA_PROTOCOL
29475#define hash_packet_player_place_infra_100 hash_const
29476#define cmp_packet_player_place_infra_100 cmp_const
29478#endif /* FREECIV_DELTA_PROTOCOL */
29479
29481{
29482#define FREE_PACKET_STRUCT(_packet) free_packet_player_place_infra(_packet)
29484
29485#ifdef FREECIV_JSON_CONNECTION
29486 struct plocation field_addr;
29487 {
29488 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29491 }
29492#endif /* FREECIV_JSON_CONNECTION */
29493
29494 log_packet_detailed("packet_player_place_infra_100: got info about ()");
29495
29496#ifdef FREECIV_DELTA_PROTOCOL
29499 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PLACE_INFRA;
29500
29501 if (nullptr == *hash) {
29503 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29504 }
29505
29506 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29507 *real_packet = *old;
29508 } else {
29509 /* packet is already initialized empty */
29510 log_packet_detailed(" no old info");
29511 }
29512
29513#ifdef FREECIV_JSON_CONNECTION
29514 field_addr.name = "fields";
29515#endif /* FREECIV_JSON_CONNECTION */
29516 DIO_BV_GET(&din, &field_addr, fields);
29517
29518 if (BV_ISSET(fields, 0)) {
29519 log_packet_detailed(" got field 'tile'");
29520
29521#ifdef FREECIV_JSON_CONNECTION
29522 field_addr.name = "tile";
29523#endif /* FREECIV_JSON_CONNECTION */
29524
29525 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29527 }
29528 }
29529
29530 if (BV_ISSET(fields, 1)) {
29531 log_packet_detailed(" got field 'extra'");
29532
29533#ifdef FREECIV_JSON_CONNECTION
29534 field_addr.name = "extra";
29535#endif /* FREECIV_JSON_CONNECTION */
29536
29537 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29539 }
29540 }
29541
29542 if (nullptr == old) {
29543 old = fc_malloc(sizeof(*old));
29545 *old = *real_packet;
29547 } else {
29548 *old = *real_packet;
29549 }
29550
29551#else /* FREECIV_DELTA_PROTOCOL */
29552#ifdef FREECIV_JSON_CONNECTION
29553 field_addr.name = "tile";
29554#endif /* FREECIV_JSON_CONNECTION */
29555
29556 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
29558 }
29559
29560#ifdef FREECIV_JSON_CONNECTION
29561 field_addr.name = "extra";
29562#endif /* FREECIV_JSON_CONNECTION */
29563
29564 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
29566 }
29567#endif /* FREECIV_DELTA_PROTOCOL */
29568
29570#undef FREE_PACKET_STRUCT
29571}
29572
29574{
29575 const struct packet_player_place_infra *real_packet = packet;
29576 int e;
29578
29579 log_packet_detailed("packet_player_place_infra_100: sending info about ()");
29580
29581#ifdef FREECIV_DELTA_PROTOCOL
29584 bool differ;
29585 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PLACE_INFRA;
29586
29587 if (nullptr == *hash) {
29589 nullptr, nullptr, nullptr, destroy_packet_player_place_infra);
29590 }
29591 BV_CLR_ALL(fields);
29592
29593 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29594 old = fc_malloc(sizeof(*old));
29595 /* temporary bitcopy just to insert correctly */
29596 *old = *real_packet;
29599 }
29600
29601 differ = (old->tile != real_packet->tile);
29602 if (differ) {
29603 BV_SET(fields, 0);
29604 }
29605
29606 differ = (old->extra != real_packet->extra);
29607 if (differ) {
29608 BV_SET(fields, 1);
29609 }
29610#endif /* FREECIV_DELTA_PROTOCOL */
29611
29612#ifdef FREECIV_JSON_CONNECTION
29613 struct plocation field_addr;
29614 {
29615 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29618 }
29619#endif /* FREECIV_JSON_CONNECTION */
29620
29621#ifdef FREECIV_DELTA_PROTOCOL
29622#ifdef FREECIV_JSON_CONNECTION
29623 field_addr.name = "fields";
29624#endif /* FREECIV_JSON_CONNECTION */
29625 e = 0;
29626 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29627 if (e) {
29628 log_packet_detailed("fields bitvector error detected");
29629 }
29630
29631 if (BV_ISSET(fields, 0)) {
29632 log_packet_detailed(" field 'tile' has changed");
29633
29634#ifdef FREECIV_JSON_CONNECTION
29635 field_addr.name = "tile";
29636#endif /* FREECIV_JSON_CONNECTION */
29637 e = 0;
29638
29639 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29640
29641 if (e) {
29642 log_packet_detailed("'tile' field error detected");
29643 }
29644 }
29645
29646 if (BV_ISSET(fields, 1)) {
29647 log_packet_detailed(" field 'extra' has changed");
29648
29649#ifdef FREECIV_JSON_CONNECTION
29650 field_addr.name = "extra";
29651#endif /* FREECIV_JSON_CONNECTION */
29652 e = 0;
29653
29654 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29655
29656 if (e) {
29657 log_packet_detailed("'extra' field error detected");
29658 }
29659 }
29660
29661 *old = *real_packet;
29662
29663#else /* FREECIV_DELTA_PROTOCOL */
29664#ifdef FREECIV_JSON_CONNECTION
29665 field_addr.name = "tile";
29666#endif /* FREECIV_JSON_CONNECTION */
29667 e = 0;
29668
29669 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
29670
29671 if (e) {
29672 log_packet_detailed("'tile' field error detected");
29673 }
29674
29675#ifdef FREECIV_JSON_CONNECTION
29676 field_addr.name = "extra";
29677#endif /* FREECIV_JSON_CONNECTION */
29678 e = 0;
29679
29680 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
29681
29682 if (e) {
29683 log_packet_detailed("'extra' field error detected");
29684 }
29685#endif /* FREECIV_DELTA_PROTOCOL */
29686
29688}
29689
29691{
29692 if (!pc->used) {
29693 log_error("WARNING: trying to send data to the closed connection %s",
29695 return -1;
29696 }
29697 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet != nullptr, -1,
29698 "Handler for PACKET_PLAYER_PLACE_INFRA not installed");
29699 return pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet(pc, packet);
29700}
29701
29703{
29704 struct packet_player_place_infra packet, *real_packet = &packet;
29705
29707 real_packet->extra = extra;
29708
29710}
29711
29713{
29714 memset(packet, 0, sizeof(*packet));
29715}
29716
29717#define free_packet_player_attribute_block(_packet) (void) 0
29718#define destroy_packet_player_attribute_block free
29719
29721{
29722#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_block(_packet)
29724
29725 log_packet_detailed("packet_player_attribute_block_100: got info about ()");
29726
29727 real_packet->__dummy = 0xff;
29728
29730#undef FREE_PACKET_STRUCT
29731}
29732
29734{
29736
29737 log_packet_detailed("packet_player_attribute_block_100: sending info about ()");
29738
29740}
29741
29743{
29744 if (!pc->used) {
29745 log_error("WARNING: trying to send data to the closed connection %s",
29747 return -1;
29748 }
29749 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet != nullptr, -1,
29750 "Handler for PACKET_PLAYER_ATTRIBUTE_BLOCK not installed");
29751 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet(pc);
29752}
29753
29755{
29756 memset(packet, 0, sizeof(*packet));
29757}
29758
29759#define free_packet_player_attribute_chunk(_packet) (void) 0
29760#define destroy_packet_player_attribute_chunk free
29761
29762#ifdef FREECIV_DELTA_PROTOCOL
29764{
29765 const struct packet_player_attribute_chunk *key = (const struct packet_player_attribute_chunk *) vkey;
29766 genhash_val_t result = 0;
29767
29768 result += key->offset;
29769
29770 result &= 0xFFFFFFFF;
29771 return result;
29772}
29773
29774static bool cmp_packet_player_attribute_chunk_100(const void *vkey1, const void *vkey2)
29775{
29778 bool differ;
29779
29780 differ = (old->offset != real_packet->offset);
29781
29782 return !differ;
29783}
29785#endif /* FREECIV_DELTA_PROTOCOL */
29786
29788{
29789#define FREE_PACKET_STRUCT(_packet) free_packet_player_attribute_chunk(_packet)
29791
29792#ifdef FREECIV_JSON_CONNECTION
29793 struct plocation field_addr;
29794 {
29795 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29798 }
29799#endif /* FREECIV_JSON_CONNECTION */
29800
29801#ifdef FREECIV_JSON_CONNECTION
29802 field_addr.name = "offset";
29803#endif /* FREECIV_JSON_CONNECTION */
29804
29805 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
29807 }
29808
29809 log_packet_detailed("packet_player_attribute_chunk_100: got info about (%d)",
29810 real_packet->offset);
29811
29812#ifdef FREECIV_DELTA_PROTOCOL
29815 struct genhash **hash = pc->phs.received + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29816
29817 if (nullptr == *hash) {
29819 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29820 }
29821
29822 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29823 *real_packet = *old;
29824 } else {
29825 /* packet is already initialized empty */
29826 log_packet_detailed(" no old info");
29827 }
29828
29829#ifdef FREECIV_JSON_CONNECTION
29830 field_addr.name = "fields";
29831#endif /* FREECIV_JSON_CONNECTION */
29832 DIO_BV_GET(&din, &field_addr, fields);
29833
29834 if (BV_ISSET(fields, 0)) {
29835 log_packet_detailed(" got field 'total_length'");
29836
29837#ifdef FREECIV_JSON_CONNECTION
29838 field_addr.name = "total_length";
29839#endif /* FREECIV_JSON_CONNECTION */
29840
29841 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29842 RECEIVE_PACKET_FIELD_ERROR(total_length);
29843 }
29844 }
29845
29846 if (BV_ISSET(fields, 1)) {
29847 log_packet_detailed(" got field 'chunk_length'");
29848
29849#ifdef FREECIV_JSON_CONNECTION
29850 field_addr.name = "chunk_length";
29851#endif /* FREECIV_JSON_CONNECTION */
29852
29853 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29854 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29855 }
29856 }
29857
29858 if (BV_ISSET(fields, 2)) {
29859 log_packet_detailed(" got field 'data'");
29860
29861#ifdef FREECIV_JSON_CONNECTION
29862 field_addr.name = "data";
29863#endif /* FREECIV_JSON_CONNECTION */
29864
29865 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29866 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29867 }
29868 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29870 }
29871 }
29872
29873 if (nullptr == old) {
29874 old = fc_malloc(sizeof(*old));
29876 *old = *real_packet;
29878 } else {
29879 *old = *real_packet;
29880 }
29881
29882#else /* FREECIV_DELTA_PROTOCOL */
29883#ifdef FREECIV_JSON_CONNECTION
29884 field_addr.name = "total_length";
29885#endif /* FREECIV_JSON_CONNECTION */
29886
29887 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
29888 RECEIVE_PACKET_FIELD_ERROR(total_length);
29889 }
29890
29891#ifdef FREECIV_JSON_CONNECTION
29892 field_addr.name = "chunk_length";
29893#endif /* FREECIV_JSON_CONNECTION */
29894
29895 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
29896 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
29897 }
29898
29899#ifdef FREECIV_JSON_CONNECTION
29900 field_addr.name = "data";
29901#endif /* FREECIV_JSON_CONNECTION */
29902
29903 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
29904 RECEIVE_PACKET_FIELD_ERROR(data, ": array truncated");
29905 }
29906 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
29908 }
29909#endif /* FREECIV_DELTA_PROTOCOL */
29910
29912#undef FREE_PACKET_STRUCT
29913}
29914
29916{
29917 /* copy packet for pre-send */
29920 int e;
29922
29923 log_packet_detailed("packet_player_attribute_chunk_100: sending info about (%d)",
29924 real_packet->offset);
29925
29927
29928#ifdef FREECIV_DELTA_PROTOCOL
29931 bool differ;
29932 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_ATTRIBUTE_CHUNK;
29933
29934 if (nullptr == *hash) {
29936 nullptr, nullptr, nullptr, destroy_packet_player_attribute_chunk);
29937 }
29938 BV_CLR_ALL(fields);
29939
29940 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29941 old = fc_malloc(sizeof(*old));
29942 /* temporary bitcopy just to insert correctly */
29943 *old = *real_packet;
29946 }
29947
29948 differ = (old->total_length != real_packet->total_length);
29949 if (differ) {
29950 BV_SET(fields, 0);
29951 }
29952
29953 differ = (old->chunk_length != real_packet->chunk_length);
29954 if (differ) {
29955 BV_SET(fields, 1);
29956 }
29957
29958 differ = ((old->chunk_length != real_packet->chunk_length)
29959 || (memcmp(old->data, real_packet->data, real_packet->chunk_length) != 0));
29960 if (differ) {
29961 BV_SET(fields, 2);
29962 }
29963#endif /* FREECIV_DELTA_PROTOCOL */
29964
29965#ifdef FREECIV_JSON_CONNECTION
29966 struct plocation field_addr;
29967 {
29968 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
29971 }
29972#endif /* FREECIV_JSON_CONNECTION */
29973
29974#ifdef FREECIV_JSON_CONNECTION
29975 field_addr.name = "offset";
29976#endif /* FREECIV_JSON_CONNECTION */
29977 e = 0;
29978
29979 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
29980
29981 if (e) {
29982 log_packet_detailed("'offset' field error detected");
29983 }
29984
29985#ifdef FREECIV_DELTA_PROTOCOL
29986#ifdef FREECIV_JSON_CONNECTION
29987 field_addr.name = "fields";
29988#endif /* FREECIV_JSON_CONNECTION */
29989 e = 0;
29990 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29991 if (e) {
29992 log_packet_detailed("fields bitvector error detected");
29993 }
29994
29995 if (BV_ISSET(fields, 0)) {
29996 log_packet_detailed(" field 'total_length' has changed");
29997
29998#ifdef FREECIV_JSON_CONNECTION
29999 field_addr.name = "total_length";
30000#endif /* FREECIV_JSON_CONNECTION */
30001 e = 0;
30002
30003 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
30004
30005 if (e) {
30006 log_packet_detailed("'total_length' field error detected");
30007 }
30008 }
30009
30010 if (BV_ISSET(fields, 1)) {
30011 log_packet_detailed(" field 'chunk_length' has changed");
30012
30013#ifdef FREECIV_JSON_CONNECTION
30014 field_addr.name = "chunk_length";
30015#endif /* FREECIV_JSON_CONNECTION */
30016 e = 0;
30017
30018 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
30019
30020 if (e) {
30021 log_packet_detailed("'chunk_length' field error detected");
30022 }
30023 }
30024
30025 if (BV_ISSET(fields, 2)) {
30026 log_packet_detailed(" field 'data' has changed");
30027
30028#ifdef FREECIV_JSON_CONNECTION
30029 field_addr.name = "data";
30030#endif /* FREECIV_JSON_CONNECTION */
30031 e = 0;
30032
30033 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
30034
30035 if (e) {
30036 log_packet_detailed("'data' field error detected");
30037 }
30038 }
30039
30040 *old = *real_packet;
30041
30042#else /* FREECIV_DELTA_PROTOCOL */
30043#ifdef FREECIV_JSON_CONNECTION
30044 field_addr.name = "total_length";
30045#endif /* FREECIV_JSON_CONNECTION */
30046 e = 0;
30047
30048 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
30049
30050 if (e) {
30051 log_packet_detailed("'total_length' field error detected");
30052 }
30053
30054#ifdef FREECIV_JSON_CONNECTION
30055 field_addr.name = "chunk_length";
30056#endif /* FREECIV_JSON_CONNECTION */
30057 e = 0;
30058
30059 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
30060
30061 if (e) {
30062 log_packet_detailed("'chunk_length' field error detected");
30063 }
30064
30065#ifdef FREECIV_JSON_CONNECTION
30066 field_addr.name = "data";
30067#endif /* FREECIV_JSON_CONNECTION */
30068 e = 0;
30069
30070 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
30071
30072 if (e) {
30073 log_packet_detailed("'data' field error detected");
30074 }
30075#endif /* FREECIV_DELTA_PROTOCOL */
30076
30078}
30079
30081{
30082 if (!pc->used) {
30083 log_error("WARNING: trying to send data to the closed connection %s",
30085 return -1;
30086 }
30087 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet != nullptr, -1,
30088 "Handler for PACKET_PLAYER_ATTRIBUTE_CHUNK not installed");
30089 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet(pc, packet);
30090}
30091
30093{
30094 memset(packet, 0, sizeof(*packet));
30095}
30096
30097#define free_packet_player_diplstate(_packet) (void) 0
30098#define destroy_packet_player_diplstate free
30099
30100#ifdef FREECIV_DELTA_PROTOCOL
30102{
30103 const struct packet_player_diplstate *key = (const struct packet_player_diplstate *) vkey;
30104 genhash_val_t result = 0;
30105
30106 result += key->diplstate_id;
30107
30108 result &= 0xFFFFFFFF;
30109 return result;
30110}
30111
30112static bool cmp_packet_player_diplstate_100(const void *vkey1, const void *vkey2)
30113{
30114 const struct packet_player_diplstate *old = (const struct packet_player_diplstate *) vkey1;
30115 const struct packet_player_diplstate *real_packet = (const struct packet_player_diplstate *) vkey2;
30116 bool differ;
30117
30118 differ = (old->diplstate_id != real_packet->diplstate_id);
30119
30120 return !differ;
30121}
30123#endif /* FREECIV_DELTA_PROTOCOL */
30124
30126{
30127#define FREE_PACKET_STRUCT(_packet) free_packet_player_diplstate(_packet)
30129
30130#ifdef FREECIV_JSON_CONNECTION
30131 struct plocation field_addr;
30132 {
30133 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30136 }
30137#endif /* FREECIV_JSON_CONNECTION */
30138
30139#ifdef FREECIV_JSON_CONNECTION
30140 field_addr.name = "diplstate_id";
30141#endif /* FREECIV_JSON_CONNECTION */
30142
30143 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
30144 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
30145 }
30146
30147 log_packet_detailed("packet_player_diplstate_100: got info about (%d)",
30148 real_packet->diplstate_id);
30149
30150#ifdef FREECIV_DELTA_PROTOCOL
30153 struct genhash **hash = pc->phs.received + PACKET_PLAYER_DIPLSTATE;
30154
30155 if (nullptr == *hash) {
30157 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30158 }
30159
30160 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30161 *real_packet = *old;
30162 } else {
30163 /* packet is already initialized empty */
30164 log_packet_detailed(" no old info");
30165 }
30166
30167#ifdef FREECIV_JSON_CONNECTION
30168 field_addr.name = "fields";
30169#endif /* FREECIV_JSON_CONNECTION */
30170 DIO_BV_GET(&din, &field_addr, fields);
30171
30172 if (BV_ISSET(fields, 0)) {
30173 log_packet_detailed(" got field 'plr1'");
30174
30175#ifdef FREECIV_JSON_CONNECTION
30176 field_addr.name = "plr1";
30177#endif /* FREECIV_JSON_CONNECTION */
30178
30179 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30181 }
30182 }
30183
30184 if (BV_ISSET(fields, 1)) {
30185 log_packet_detailed(" got field 'plr2'");
30186
30187#ifdef FREECIV_JSON_CONNECTION
30188 field_addr.name = "plr2";
30189#endif /* FREECIV_JSON_CONNECTION */
30190
30191 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30193 }
30194 }
30195
30196 if (BV_ISSET(fields, 2)) {
30197 log_packet_detailed(" got field 'type'");
30198
30199#ifdef FREECIV_JSON_CONNECTION
30200 field_addr.name = "type";
30201#endif /* FREECIV_JSON_CONNECTION */
30202
30203 {
30204 int readin;
30205
30206 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30208 }
30209 real_packet->type = readin;
30210 }
30211 }
30212
30213 if (BV_ISSET(fields, 3)) {
30214 log_packet_detailed(" got field 'turns_left'");
30215
30216#ifdef FREECIV_JSON_CONNECTION
30217 field_addr.name = "turns_left";
30218#endif /* FREECIV_JSON_CONNECTION */
30219
30220 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30221 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30222 }
30223 }
30224
30225 if (BV_ISSET(fields, 4)) {
30226 log_packet_detailed(" got field 'has_reason_to_cancel'");
30227
30228#ifdef FREECIV_JSON_CONNECTION
30229 field_addr.name = "has_reason_to_cancel";
30230#endif /* FREECIV_JSON_CONNECTION */
30231
30232 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30233 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30234 }
30235 }
30236
30237 if (BV_ISSET(fields, 5)) {
30238 log_packet_detailed(" got field 'contact_turns_left'");
30239
30240#ifdef FREECIV_JSON_CONNECTION
30241 field_addr.name = "contact_turns_left";
30242#endif /* FREECIV_JSON_CONNECTION */
30243
30244 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30245 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30246 }
30247 }
30248
30249 if (nullptr == old) {
30250 old = fc_malloc(sizeof(*old));
30252 *old = *real_packet;
30254 } else {
30255 *old = *real_packet;
30256 }
30257
30258#else /* FREECIV_DELTA_PROTOCOL */
30259#ifdef FREECIV_JSON_CONNECTION
30260 field_addr.name = "plr1";
30261#endif /* FREECIV_JSON_CONNECTION */
30262
30263 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr1)) {
30265 }
30266
30267#ifdef FREECIV_JSON_CONNECTION
30268 field_addr.name = "plr2";
30269#endif /* FREECIV_JSON_CONNECTION */
30270
30271 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->plr2)) {
30273 }
30274
30275#ifdef FREECIV_JSON_CONNECTION
30276 field_addr.name = "type";
30277#endif /* FREECIV_JSON_CONNECTION */
30278
30279 {
30280 int readin;
30281
30282 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30284 }
30285 real_packet->type = readin;
30286 }
30287
30288#ifdef FREECIV_JSON_CONNECTION
30289 field_addr.name = "turns_left";
30290#endif /* FREECIV_JSON_CONNECTION */
30291
30292 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
30293 RECEIVE_PACKET_FIELD_ERROR(turns_left);
30294 }
30295
30296#ifdef FREECIV_JSON_CONNECTION
30297 field_addr.name = "has_reason_to_cancel";
30298#endif /* FREECIV_JSON_CONNECTION */
30299
30300 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
30301 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
30302 }
30303
30304#ifdef FREECIV_JSON_CONNECTION
30305 field_addr.name = "contact_turns_left";
30306#endif /* FREECIV_JSON_CONNECTION */
30307
30308 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
30309 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
30310 }
30311#endif /* FREECIV_DELTA_PROTOCOL */
30312
30314#undef FREE_PACKET_STRUCT
30315}
30316
30318{
30319 const struct packet_player_diplstate *real_packet = packet;
30320 int e;
30322
30323 log_packet_detailed("packet_player_diplstate_100: sending info about (%d)",
30324 real_packet->diplstate_id);
30325
30326#ifdef FREECIV_DELTA_PROTOCOL
30329 bool differ;
30330 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_DIPLSTATE;
30331
30332 if (nullptr == *hash) {
30334 nullptr, nullptr, nullptr, destroy_packet_player_diplstate);
30335 }
30336 BV_CLR_ALL(fields);
30337
30338 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30339 old = fc_malloc(sizeof(*old));
30340 /* temporary bitcopy just to insert correctly */
30341 *old = *real_packet;
30344 }
30345
30346 differ = (old->plr1 != real_packet->plr1);
30347 if (differ) {
30348 BV_SET(fields, 0);
30349 }
30350
30351 differ = (old->plr2 != real_packet->plr2);
30352 if (differ) {
30353 BV_SET(fields, 1);
30354 }
30355
30356 differ = (old->type != real_packet->type);
30357 if (differ) {
30358 BV_SET(fields, 2);
30359 }
30360
30361 differ = (old->turns_left != real_packet->turns_left);
30362 if (differ) {
30363 BV_SET(fields, 3);
30364 }
30365
30366 differ = (old->has_reason_to_cancel != real_packet->has_reason_to_cancel);
30367 if (differ) {
30368 BV_SET(fields, 4);
30369 }
30370
30371 differ = (old->contact_turns_left != real_packet->contact_turns_left);
30372 if (differ) {
30373 BV_SET(fields, 5);
30374 }
30375#endif /* FREECIV_DELTA_PROTOCOL */
30376
30377#ifdef FREECIV_JSON_CONNECTION
30378 struct plocation field_addr;
30379 {
30380 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30383 }
30384#endif /* FREECIV_JSON_CONNECTION */
30385
30386#ifdef FREECIV_JSON_CONNECTION
30387 field_addr.name = "diplstate_id";
30388#endif /* FREECIV_JSON_CONNECTION */
30389 e = 0;
30390
30391 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
30392
30393 if (e) {
30394 log_packet_detailed("'diplstate_id' field error detected");
30395 }
30396
30397#ifdef FREECIV_DELTA_PROTOCOL
30398#ifdef FREECIV_JSON_CONNECTION
30399 field_addr.name = "fields";
30400#endif /* FREECIV_JSON_CONNECTION */
30401 e = 0;
30402 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30403 if (e) {
30404 log_packet_detailed("fields bitvector error detected");
30405 }
30406
30407 if (BV_ISSET(fields, 0)) {
30408 log_packet_detailed(" field 'plr1' has changed");
30409
30410#ifdef FREECIV_JSON_CONNECTION
30411 field_addr.name = "plr1";
30412#endif /* FREECIV_JSON_CONNECTION */
30413 e = 0;
30414
30415 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30416
30417 if (e) {
30418 log_packet_detailed("'plr1' field error detected");
30419 }
30420 }
30421
30422 if (BV_ISSET(fields, 1)) {
30423 log_packet_detailed(" field 'plr2' has changed");
30424
30425#ifdef FREECIV_JSON_CONNECTION
30426 field_addr.name = "plr2";
30427#endif /* FREECIV_JSON_CONNECTION */
30428 e = 0;
30429
30430 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30431
30432 if (e) {
30433 log_packet_detailed("'plr2' field error detected");
30434 }
30435 }
30436
30437 if (BV_ISSET(fields, 2)) {
30438 log_packet_detailed(" field 'type' has changed");
30439
30440#ifdef FREECIV_JSON_CONNECTION
30441 field_addr.name = "type";
30442#endif /* FREECIV_JSON_CONNECTION */
30443 e = 0;
30444
30445 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30446
30447 if (e) {
30448 log_packet_detailed("'type' field error detected");
30449 }
30450 }
30451
30452 if (BV_ISSET(fields, 3)) {
30453 log_packet_detailed(" field 'turns_left' has changed");
30454
30455#ifdef FREECIV_JSON_CONNECTION
30456 field_addr.name = "turns_left";
30457#endif /* FREECIV_JSON_CONNECTION */
30458 e = 0;
30459
30460 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30461
30462 if (e) {
30463 log_packet_detailed("'turns_left' field error detected");
30464 }
30465 }
30466
30467 if (BV_ISSET(fields, 4)) {
30468 log_packet_detailed(" field 'has_reason_to_cancel' has changed");
30469
30470#ifdef FREECIV_JSON_CONNECTION
30471 field_addr.name = "has_reason_to_cancel";
30472#endif /* FREECIV_JSON_CONNECTION */
30473 e = 0;
30474
30475 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
30476
30477 if (e) {
30478 log_packet_detailed("'has_reason_to_cancel' field error detected");
30479 }
30480 }
30481
30482 if (BV_ISSET(fields, 5)) {
30483 log_packet_detailed(" field 'contact_turns_left' has changed");
30484
30485#ifdef FREECIV_JSON_CONNECTION
30486 field_addr.name = "contact_turns_left";
30487#endif /* FREECIV_JSON_CONNECTION */
30488 e = 0;
30489
30490 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30491
30492 if (e) {
30493 log_packet_detailed("'contact_turns_left' field error detected");
30494 }
30495 }
30496
30497 *old = *real_packet;
30498
30499#else /* FREECIV_DELTA_PROTOCOL */
30500#ifdef FREECIV_JSON_CONNECTION
30501 field_addr.name = "plr1";
30502#endif /* FREECIV_JSON_CONNECTION */
30503 e = 0;
30504
30505 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr1);
30506
30507 if (e) {
30508 log_packet_detailed("'plr1' field error detected");
30509 }
30510
30511#ifdef FREECIV_JSON_CONNECTION
30512 field_addr.name = "plr2";
30513#endif /* FREECIV_JSON_CONNECTION */
30514 e = 0;
30515
30516 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->plr2);
30517
30518 if (e) {
30519 log_packet_detailed("'plr2' field error detected");
30520 }
30521
30522#ifdef FREECIV_JSON_CONNECTION
30523 field_addr.name = "type";
30524#endif /* FREECIV_JSON_CONNECTION */
30525 e = 0;
30526
30527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
30528
30529 if (e) {
30530 log_packet_detailed("'type' field error detected");
30531 }
30532
30533#ifdef FREECIV_JSON_CONNECTION
30534 field_addr.name = "turns_left";
30535#endif /* FREECIV_JSON_CONNECTION */
30536 e = 0;
30537
30538 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
30539
30540 if (e) {
30541 log_packet_detailed("'turns_left' field error detected");
30542 }
30543
30544#ifdef FREECIV_JSON_CONNECTION
30545 field_addr.name = "has_reason_to_cancel";
30546#endif /* FREECIV_JSON_CONNECTION */
30547 e = 0;
30548
30549 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
30550
30551 if (e) {
30552 log_packet_detailed("'has_reason_to_cancel' field error detected");
30553 }
30554
30555#ifdef FREECIV_JSON_CONNECTION
30556 field_addr.name = "contact_turns_left";
30557#endif /* FREECIV_JSON_CONNECTION */
30558 e = 0;
30559
30560 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
30561
30562 if (e) {
30563 log_packet_detailed("'contact_turns_left' field error detected");
30564 }
30565#endif /* FREECIV_DELTA_PROTOCOL */
30566
30568}
30569
30571{
30572 if (!pc->used) {
30573 log_error("WARNING: trying to send data to the closed connection %s",
30575 return -1;
30576 }
30577 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet != nullptr, -1,
30578 "Handler for PACKET_PLAYER_DIPLSTATE not installed");
30579 return pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet(pc, packet);
30580}
30581
30583{
30584 memset(packet, 0, sizeof(*packet));
30585}
30586
30587#define free_packet_player_multiplier(_packet) (void) 0
30588#define destroy_packet_player_multiplier free
30589
30590#ifdef FREECIV_DELTA_PROTOCOL
30591#define hash_packet_player_multiplier_100 hash_const
30592#define cmp_packet_player_multiplier_100 cmp_const
30594#endif /* FREECIV_DELTA_PROTOCOL */
30595
30597{
30598#define FREE_PACKET_STRUCT(_packet) free_packet_player_multiplier(_packet)
30600
30601#ifdef FREECIV_JSON_CONNECTION
30602 struct plocation field_addr;
30603 {
30604 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30607 }
30608#endif /* FREECIV_JSON_CONNECTION */
30609
30610 log_packet_detailed("packet_player_multiplier_100: got info about ()");
30611
30612#ifdef FREECIV_DELTA_PROTOCOL
30615 struct genhash **hash = pc->phs.received + PACKET_PLAYER_MULTIPLIER;
30616
30617 if (nullptr == *hash) {
30619 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30620 }
30621
30622 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30623 *real_packet = *old;
30624 } else {
30625 /* packet is already initialized empty */
30626 log_packet_detailed(" no old info");
30627 }
30628
30629#ifdef FREECIV_JSON_CONNECTION
30630 field_addr.name = "fields";
30631#endif /* FREECIV_JSON_CONNECTION */
30632 DIO_BV_GET(&din, &field_addr, fields);
30633
30634 if (BV_ISSET(fields, 0)) {
30635 log_packet_detailed(" got field 'count'");
30636
30637#ifdef FREECIV_JSON_CONNECTION
30638 field_addr.name = "count";
30639#endif /* FREECIV_JSON_CONNECTION */
30640
30641 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30643 }
30644 }
30645
30646 if (BV_ISSET(fields, 1)) {
30647 log_packet_detailed(" got field 'multipliers'");
30648
30649#ifdef FREECIV_JSON_CONNECTION
30650 field_addr.name = "multipliers";
30651#endif /* FREECIV_JSON_CONNECTION */
30652
30653 {
30654 int i;
30655
30656 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30657 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30658 }
30659
30660#ifdef FREECIV_JSON_CONNECTION
30661 /* Enter array. */
30662 field_addr.sub_location = plocation_elem_new(0);
30663#endif /* FREECIV_JSON_CONNECTION */
30664
30665 for (i = 0; i < real_packet->count; i++) {
30666#ifdef FREECIV_JSON_CONNECTION
30667 /* Next array element */
30668 field_addr.sub_location->number = i;
30669#endif /* FREECIV_JSON_CONNECTION */
30670
30671 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30673 }
30674 }
30675
30676#ifdef FREECIV_JSON_CONNECTION
30677 /* Exit array. */
30678 FC_FREE(field_addr.sub_location);
30679#endif /* FREECIV_JSON_CONNECTION */
30680 }
30681 }
30682
30683 if (nullptr == old) {
30684 old = fc_malloc(sizeof(*old));
30686 *old = *real_packet;
30688 } else {
30689 *old = *real_packet;
30690 }
30691
30692#else /* FREECIV_DELTA_PROTOCOL */
30693#ifdef FREECIV_JSON_CONNECTION
30694 field_addr.name = "count";
30695#endif /* FREECIV_JSON_CONNECTION */
30696
30697 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
30699 }
30700
30701#ifdef FREECIV_JSON_CONNECTION
30702 field_addr.name = "multipliers";
30703#endif /* FREECIV_JSON_CONNECTION */
30704
30705 {
30706 int i;
30707
30708 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
30709 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": array truncated");
30710 }
30711
30712#ifdef FREECIV_JSON_CONNECTION
30713 /* Enter array. */
30714 field_addr.sub_location = plocation_elem_new(0);
30715#endif /* FREECIV_JSON_CONNECTION */
30716
30717 for (i = 0; i < real_packet->count; i++) {
30718#ifdef FREECIV_JSON_CONNECTION
30719 /* Next array element */
30720 field_addr.sub_location->number = i;
30721#endif /* FREECIV_JSON_CONNECTION */
30722
30723 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
30725 }
30726 }
30727
30728#ifdef FREECIV_JSON_CONNECTION
30729 /* Exit array. */
30730 FC_FREE(field_addr.sub_location);
30731#endif /* FREECIV_JSON_CONNECTION */
30732 }
30733#endif /* FREECIV_DELTA_PROTOCOL */
30734
30736#undef FREE_PACKET_STRUCT
30737}
30738
30740{
30741 const struct packet_player_multiplier *real_packet = packet;
30742 int e;
30744
30745 log_packet_detailed("packet_player_multiplier_100: sending info about ()");
30746
30747#ifdef FREECIV_DELTA_PROTOCOL
30750 bool differ;
30751 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_MULTIPLIER;
30752
30753 if (nullptr == *hash) {
30755 nullptr, nullptr, nullptr, destroy_packet_player_multiplier);
30756 }
30757 BV_CLR_ALL(fields);
30758
30759 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30760 old = fc_malloc(sizeof(*old));
30761 /* temporary bitcopy just to insert correctly */
30762 *old = *real_packet;
30765 }
30766
30767 differ = (old->count != real_packet->count);
30768 if (differ) {
30769 BV_SET(fields, 0);
30770 }
30771
30772 differ = (old->count != real_packet->count);
30773 if (!differ) {
30774 int i;
30775
30776 for (i = 0; i < old->count; i++) {
30777 differ = (old->multipliers[i] != real_packet->multipliers[i]);
30778 if (differ) {
30779 break;
30780 }
30781 }
30782 }
30783 if (differ) {
30784 BV_SET(fields, 1);
30785 }
30786#endif /* FREECIV_DELTA_PROTOCOL */
30787
30788#ifdef FREECIV_JSON_CONNECTION
30789 struct plocation field_addr;
30790 {
30791 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30794 }
30795#endif /* FREECIV_JSON_CONNECTION */
30796
30797#ifdef FREECIV_DELTA_PROTOCOL
30798#ifdef FREECIV_JSON_CONNECTION
30799 field_addr.name = "fields";
30800#endif /* FREECIV_JSON_CONNECTION */
30801 e = 0;
30802 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30803 if (e) {
30804 log_packet_detailed("fields bitvector error detected");
30805 }
30806
30807 if (BV_ISSET(fields, 0)) {
30808 log_packet_detailed(" field 'count' has changed");
30809
30810#ifdef FREECIV_JSON_CONNECTION
30811 field_addr.name = "count";
30812#endif /* FREECIV_JSON_CONNECTION */
30813 e = 0;
30814
30815 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30816
30817 if (e) {
30818 log_packet_detailed("'count' field error detected");
30819 }
30820 }
30821
30822 if (BV_ISSET(fields, 1)) {
30823 log_packet_detailed(" field 'multipliers' has changed");
30824
30825#ifdef FREECIV_JSON_CONNECTION
30826 field_addr.name = "multipliers";
30827#endif /* FREECIV_JSON_CONNECTION */
30828 e = 0;
30829
30830 {
30831 int i;
30832
30833#ifdef FREECIV_JSON_CONNECTION
30834 /* Create the array. */
30835 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30836
30837 /* Enter array. */
30838 field_addr.sub_location = plocation_elem_new(0);
30839#endif /* FREECIV_JSON_CONNECTION */
30840
30841 for (i = 0; i < real_packet->count; i++) {
30842#ifdef FREECIV_JSON_CONNECTION
30843 /* Next array element. */
30844 field_addr.sub_location->number = i;
30845#endif /* FREECIV_JSON_CONNECTION */
30846
30847 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30848 }
30849
30850#ifdef FREECIV_JSON_CONNECTION
30851 /* Exit array. */
30852 FC_FREE(field_addr.sub_location);
30853#endif /* FREECIV_JSON_CONNECTION */
30854 }
30855
30856 if (e) {
30857 log_packet_detailed("'multipliers' field error detected");
30858 }
30859 }
30860
30861 *old = *real_packet;
30862
30863#else /* FREECIV_DELTA_PROTOCOL */
30864#ifdef FREECIV_JSON_CONNECTION
30865 field_addr.name = "count";
30866#endif /* FREECIV_JSON_CONNECTION */
30867 e = 0;
30868
30869 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
30870
30871 if (e) {
30872 log_packet_detailed("'count' field error detected");
30873 }
30874
30875#ifdef FREECIV_JSON_CONNECTION
30876 field_addr.name = "multipliers";
30877#endif /* FREECIV_JSON_CONNECTION */
30878 e = 0;
30879
30880 {
30881 int i;
30882
30883#ifdef FREECIV_JSON_CONNECTION
30884 /* Create the array. */
30885 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
30886
30887 /* Enter array. */
30888 field_addr.sub_location = plocation_elem_new(0);
30889#endif /* FREECIV_JSON_CONNECTION */
30890
30891 for (i = 0; i < real_packet->count; i++) {
30892#ifdef FREECIV_JSON_CONNECTION
30893 /* Next array element. */
30894 field_addr.sub_location->number = i;
30895#endif /* FREECIV_JSON_CONNECTION */
30896
30897 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
30898 }
30899
30900#ifdef FREECIV_JSON_CONNECTION
30901 /* Exit array. */
30902 FC_FREE(field_addr.sub_location);
30903#endif /* FREECIV_JSON_CONNECTION */
30904 }
30905
30906 if (e) {
30907 log_packet_detailed("'multipliers' field error detected");
30908 }
30909#endif /* FREECIV_DELTA_PROTOCOL */
30910
30912}
30913
30915{
30916 if (!pc->used) {
30917 log_error("WARNING: trying to send data to the closed connection %s",
30919 return -1;
30920 }
30921 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet != nullptr, -1,
30922 "Handler for PACKET_PLAYER_MULTIPLIER not installed");
30923 return pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet(pc, packet);
30924}
30925
30926static inline void init_packet_research_info(struct packet_research_info *packet)
30927{
30928 memset(packet, 0, sizeof(*packet));
30929}
30930
30931#define free_packet_research_info(_packet) (void) 0
30932#define destroy_packet_research_info free
30933
30934#ifdef FREECIV_DELTA_PROTOCOL
30936{
30937 const struct packet_research_info *key = (const struct packet_research_info *) vkey;
30938 genhash_val_t result = 0;
30939
30940 result += key->id;
30941
30942 result &= 0xFFFFFFFF;
30943 return result;
30944}
30945
30946static bool cmp_packet_research_info_100(const void *vkey1, const void *vkey2)
30947{
30948 const struct packet_research_info *old = (const struct packet_research_info *) vkey1;
30949 const struct packet_research_info *real_packet = (const struct packet_research_info *) vkey2;
30950 bool differ;
30951
30952 differ = (old->id != real_packet->id);
30953
30954 return !differ;
30955}
30957#endif /* FREECIV_DELTA_PROTOCOL */
30958
30960{
30961#define FREE_PACKET_STRUCT(_packet) free_packet_research_info(_packet)
30963
30964#ifdef FREECIV_JSON_CONNECTION
30965 struct plocation field_addr;
30966 {
30967 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
30970 }
30971#endif /* FREECIV_JSON_CONNECTION */
30972
30973#ifdef FREECIV_JSON_CONNECTION
30974 field_addr.name = "id";
30975#endif /* FREECIV_JSON_CONNECTION */
30976
30977 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
30979 }
30980
30981 log_packet_detailed("packet_research_info_100: got info about (%d)",
30982 real_packet->id);
30983
30984#ifdef FREECIV_DELTA_PROTOCOL
30986 struct packet_research_info *old;
30987 struct genhash **hash = pc->phs.received + PACKET_RESEARCH_INFO;
30988
30989 if (nullptr == *hash) {
30991 nullptr, nullptr, nullptr, destroy_packet_research_info);
30992 }
30993
30994 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30995 *real_packet = *old;
30996 } else {
30997 /* packet is already initialized empty */
30998 log_packet_detailed(" no old info");
30999 }
31000
31001#ifdef FREECIV_JSON_CONNECTION
31002 field_addr.name = "fields";
31003#endif /* FREECIV_JSON_CONNECTION */
31004 DIO_BV_GET(&din, &field_addr, fields);
31005
31006 if (BV_ISSET(fields, 0)) {
31007 log_packet_detailed(" got field 'techs_researched'");
31008
31009#ifdef FREECIV_JSON_CONNECTION
31010 field_addr.name = "techs_researched";
31011#endif /* FREECIV_JSON_CONNECTION */
31012
31013 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
31014 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
31015 }
31016 }
31017
31018 if (BV_ISSET(fields, 1)) {
31019 log_packet_detailed(" got field 'future_tech'");
31020
31021#ifdef FREECIV_JSON_CONNECTION
31022 field_addr.name = "future_tech";
31023#endif /* FREECIV_JSON_CONNECTION */
31024
31025 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
31026 RECEIVE_PACKET_FIELD_ERROR(future_tech);
31027 }
31028 }
31029
31030 if (BV_ISSET(fields, 2)) {
31031 log_packet_detailed(" got field 'researching'");
31032
31033#ifdef FREECIV_JSON_CONNECTION
31034 field_addr.name = "researching";
31035#endif /* FREECIV_JSON_CONNECTION */
31036
31037 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
31038 RECEIVE_PACKET_FIELD_ERROR(researching);
31039 }
31040 }
31041
31042 if (BV_ISSET(fields, 3)) {
31043 log_packet_detailed(" got field 'researching_cost'");
31044
31045#ifdef FREECIV_JSON_CONNECTION
31046 field_addr.name = "researching_cost";
31047#endif /* FREECIV_JSON_CONNECTION */
31048
31049 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
31050 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
31051 }
31052 }
31053
31054 if (BV_ISSET(fields, 4)) {
31055 log_packet_detailed(" got field 'bulbs_researched'");
31056
31057#ifdef FREECIV_JSON_CONNECTION
31058 field_addr.name = "bulbs_researched";
31059#endif /* FREECIV_JSON_CONNECTION */
31060
31061 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
31062 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
31063 }
31064 }
31065
31066 if (BV_ISSET(fields, 5)) {
31067 log_packet_detailed(" got field 'tech_goal'");
31068
31069#ifdef FREECIV_JSON_CONNECTION
31070 field_addr.name = "tech_goal";
31071#endif /* FREECIV_JSON_CONNECTION */
31072
31073 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
31074 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
31075 }
31076 }
31077
31078 if (BV_ISSET(fields, 6)) {
31079 log_packet_detailed(" got field 'total_bulbs_prod'");
31080
31081#ifdef FREECIV_JSON_CONNECTION
31082 field_addr.name = "total_bulbs_prod";
31083#endif /* FREECIV_JSON_CONNECTION */
31084
31085 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
31086 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
31087 }
31088 }
31089
31090 if (BV_ISSET(fields, 7)) {
31091 log_packet_detailed(" got field 'inventions'");
31092
31093#ifdef FREECIV_JSON_CONNECTION
31094 field_addr.name = "inventions";
31095#endif /* FREECIV_JSON_CONNECTION */
31096
31097 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
31098 RECEIVE_PACKET_FIELD_ERROR(inventions);
31099 }
31100 }
31101
31102 if (nullptr == old) {
31103 old = fc_malloc(sizeof(*old));
31105 *old = *real_packet;
31107 } else {
31108 *old = *real_packet;
31109 }
31110
31111#else /* FREECIV_DELTA_PROTOCOL */
31112#ifdef FREECIV_JSON_CONNECTION
31113 field_addr.name = "techs_researched";
31114#endif /* FREECIV_JSON_CONNECTION */
31115
31116 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
31117 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
31118 }
31119
31120#ifdef FREECIV_JSON_CONNECTION
31121 field_addr.name = "future_tech";
31122#endif /* FREECIV_JSON_CONNECTION */
31123
31124 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
31125 RECEIVE_PACKET_FIELD_ERROR(future_tech);
31126 }
31127
31128#ifdef FREECIV_JSON_CONNECTION
31129 field_addr.name = "researching";
31130#endif /* FREECIV_JSON_CONNECTION */
31131
31132 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
31133 RECEIVE_PACKET_FIELD_ERROR(researching);
31134 }
31135
31136#ifdef FREECIV_JSON_CONNECTION
31137 field_addr.name = "researching_cost";
31138#endif /* FREECIV_JSON_CONNECTION */
31139
31140 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
31141 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
31142 }
31143
31144#ifdef FREECIV_JSON_CONNECTION
31145 field_addr.name = "bulbs_researched";
31146#endif /* FREECIV_JSON_CONNECTION */
31147
31148 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
31149 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
31150 }
31151
31152#ifdef FREECIV_JSON_CONNECTION
31153 field_addr.name = "tech_goal";
31154#endif /* FREECIV_JSON_CONNECTION */
31155
31156 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
31157 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
31158 }
31159
31160#ifdef FREECIV_JSON_CONNECTION
31161 field_addr.name = "total_bulbs_prod";
31162#endif /* FREECIV_JSON_CONNECTION */
31163
31164 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
31165 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
31166 }
31167
31168#ifdef FREECIV_JSON_CONNECTION
31169 field_addr.name = "inventions";
31170#endif /* FREECIV_JSON_CONNECTION */
31171
31172 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
31173 RECEIVE_PACKET_FIELD_ERROR(inventions);
31174 }
31175#endif /* FREECIV_DELTA_PROTOCOL */
31176
31178#undef FREE_PACKET_STRUCT
31179}
31180
31181static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
31182{
31183 const struct packet_research_info *real_packet = packet;
31184 int e;
31186
31187 log_packet_detailed("packet_research_info_100: sending info about (%d)",
31188 real_packet->id);
31189
31190#ifdef FREECIV_DELTA_PROTOCOL
31192 struct packet_research_info *old;
31193 bool differ;
31194 int different = 0;
31195 struct genhash **hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31196
31197 if (nullptr == *hash) {
31199 nullptr, nullptr, nullptr, destroy_packet_research_info);
31200 }
31201 BV_CLR_ALL(fields);
31202
31203 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31204 old = fc_malloc(sizeof(*old));
31205 /* temporary bitcopy just to insert correctly */
31206 *old = *real_packet;
31209 different = 1; /* Force to send. */
31210 }
31211
31212 differ = (old->techs_researched != real_packet->techs_researched);
31213 if (differ) {
31214 different++;
31215 BV_SET(fields, 0);
31216 }
31217
31218 differ = (old->future_tech != real_packet->future_tech);
31219 if (differ) {
31220 different++;
31221 BV_SET(fields, 1);
31222 }
31223
31224 differ = (old->researching != real_packet->researching);
31225 if (differ) {
31226 different++;
31227 BV_SET(fields, 2);
31228 }
31229
31230 differ = (old->researching_cost != real_packet->researching_cost);
31231 if (differ) {
31232 different++;
31233 BV_SET(fields, 3);
31234 }
31235
31236 differ = (old->bulbs_researched != real_packet->bulbs_researched);
31237 if (differ) {
31238 different++;
31239 BV_SET(fields, 4);
31240 }
31241
31242 differ = (old->tech_goal != real_packet->tech_goal);
31243 if (differ) {
31244 different++;
31245 BV_SET(fields, 5);
31246 }
31247
31248 differ = (old->total_bulbs_prod != real_packet->total_bulbs_prod);
31249 if (differ) {
31250 different++;
31251 BV_SET(fields, 6);
31252 }
31253
31254 differ = (strcmp(old->inventions, real_packet->inventions) != 0);
31255 if (differ) {
31256 different++;
31257 BV_SET(fields, 7);
31258 }
31259
31260 if (different == 0) {
31261 log_packet_detailed(" no change -> discard");
31263 }
31264#endif /* FREECIV_DELTA_PROTOCOL */
31265
31266#ifdef FREECIV_JSON_CONNECTION
31267 struct plocation field_addr;
31268 {
31269 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31272 }
31273#endif /* FREECIV_JSON_CONNECTION */
31274
31275#ifdef FREECIV_JSON_CONNECTION
31276 field_addr.name = "id";
31277#endif /* FREECIV_JSON_CONNECTION */
31278 e = 0;
31279
31280 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31281
31282 if (e) {
31283 log_packet_detailed("'id' field error detected");
31284 }
31285
31286#ifdef FREECIV_DELTA_PROTOCOL
31287#ifdef FREECIV_JSON_CONNECTION
31288 field_addr.name = "fields";
31289#endif /* FREECIV_JSON_CONNECTION */
31290 e = 0;
31291 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31292 if (e) {
31293 log_packet_detailed("fields bitvector error detected");
31294 }
31295
31296 if (BV_ISSET(fields, 0)) {
31297 log_packet_detailed(" field 'techs_researched' has changed");
31298
31299#ifdef FREECIV_JSON_CONNECTION
31300 field_addr.name = "techs_researched";
31301#endif /* FREECIV_JSON_CONNECTION */
31302 e = 0;
31303
31304 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31305
31306 if (e) {
31307 log_packet_detailed("'techs_researched' field error detected");
31308 }
31309 }
31310
31311 if (BV_ISSET(fields, 1)) {
31312 log_packet_detailed(" field 'future_tech' has changed");
31313
31314#ifdef FREECIV_JSON_CONNECTION
31315 field_addr.name = "future_tech";
31316#endif /* FREECIV_JSON_CONNECTION */
31317 e = 0;
31318
31319 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31320
31321 if (e) {
31322 log_packet_detailed("'future_tech' field error detected");
31323 }
31324 }
31325
31326 if (BV_ISSET(fields, 2)) {
31327 log_packet_detailed(" field 'researching' has changed");
31328
31329#ifdef FREECIV_JSON_CONNECTION
31330 field_addr.name = "researching";
31331#endif /* FREECIV_JSON_CONNECTION */
31332 e = 0;
31333
31334 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31335
31336 if (e) {
31337 log_packet_detailed("'researching' field error detected");
31338 }
31339 }
31340
31341 if (BV_ISSET(fields, 3)) {
31342 log_packet_detailed(" field 'researching_cost' has changed");
31343
31344#ifdef FREECIV_JSON_CONNECTION
31345 field_addr.name = "researching_cost";
31346#endif /* FREECIV_JSON_CONNECTION */
31347 e = 0;
31348
31349 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31350
31351 if (e) {
31352 log_packet_detailed("'researching_cost' field error detected");
31353 }
31354 }
31355
31356 if (BV_ISSET(fields, 4)) {
31357 log_packet_detailed(" field 'bulbs_researched' has changed");
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
31371 if (BV_ISSET(fields, 5)) {
31372 log_packet_detailed(" field 'tech_goal' has changed");
31373
31374#ifdef FREECIV_JSON_CONNECTION
31375 field_addr.name = "tech_goal";
31376#endif /* FREECIV_JSON_CONNECTION */
31377 e = 0;
31378
31379 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31380
31381 if (e) {
31382 log_packet_detailed("'tech_goal' field error detected");
31383 }
31384 }
31385
31386 if (BV_ISSET(fields, 6)) {
31387 log_packet_detailed(" field 'total_bulbs_prod' has changed");
31388
31389#ifdef FREECIV_JSON_CONNECTION
31390 field_addr.name = "total_bulbs_prod";
31391#endif /* FREECIV_JSON_CONNECTION */
31392 e = 0;
31393
31394 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31395
31396 if (e) {
31397 log_packet_detailed("'total_bulbs_prod' field error detected");
31398 }
31399 }
31400
31401 if (BV_ISSET(fields, 7)) {
31402 log_packet_detailed(" field 'inventions' has changed");
31403
31404#ifdef FREECIV_JSON_CONNECTION
31405 field_addr.name = "inventions";
31406#endif /* FREECIV_JSON_CONNECTION */
31407 e = 0;
31408
31409 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31410
31411 if (e) {
31412 log_packet_detailed("'inventions' field error detected");
31413 }
31414 }
31415
31416 *old = *real_packet;
31417
31418#else /* FREECIV_DELTA_PROTOCOL */
31419#ifdef FREECIV_JSON_CONNECTION
31420 field_addr.name = "techs_researched";
31421#endif /* FREECIV_JSON_CONNECTION */
31422 e = 0;
31423
31424 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
31425
31426 if (e) {
31427 log_packet_detailed("'techs_researched' field error detected");
31428 }
31429
31430#ifdef FREECIV_JSON_CONNECTION
31431 field_addr.name = "future_tech";
31432#endif /* FREECIV_JSON_CONNECTION */
31433 e = 0;
31434
31435 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
31436
31437 if (e) {
31438 log_packet_detailed("'future_tech' field error detected");
31439 }
31440
31441#ifdef FREECIV_JSON_CONNECTION
31442 field_addr.name = "researching";
31443#endif /* FREECIV_JSON_CONNECTION */
31444 e = 0;
31445
31446 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
31447
31448 if (e) {
31449 log_packet_detailed("'researching' field error detected");
31450 }
31451
31452#ifdef FREECIV_JSON_CONNECTION
31453 field_addr.name = "researching_cost";
31454#endif /* FREECIV_JSON_CONNECTION */
31455 e = 0;
31456
31457 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
31458
31459 if (e) {
31460 log_packet_detailed("'researching_cost' field error detected");
31461 }
31462
31463#ifdef FREECIV_JSON_CONNECTION
31464 field_addr.name = "bulbs_researched";
31465#endif /* FREECIV_JSON_CONNECTION */
31466 e = 0;
31467
31468 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
31469
31470 if (e) {
31471 log_packet_detailed("'bulbs_researched' field error detected");
31472 }
31473
31474#ifdef FREECIV_JSON_CONNECTION
31475 field_addr.name = "tech_goal";
31476#endif /* FREECIV_JSON_CONNECTION */
31477 e = 0;
31478
31479 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
31480
31481 if (e) {
31482 log_packet_detailed("'tech_goal' field error detected");
31483 }
31484
31485#ifdef FREECIV_JSON_CONNECTION
31486 field_addr.name = "total_bulbs_prod";
31487#endif /* FREECIV_JSON_CONNECTION */
31488 e = 0;
31489
31490 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
31491
31492 if (e) {
31493 log_packet_detailed("'total_bulbs_prod' field error detected");
31494 }
31495
31496#ifdef FREECIV_JSON_CONNECTION
31497 field_addr.name = "inventions";
31498#endif /* FREECIV_JSON_CONNECTION */
31499 e = 0;
31500
31501 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
31502
31503 if (e) {
31504 log_packet_detailed("'inventions' field error detected");
31505 }
31506#endif /* FREECIV_DELTA_PROTOCOL */
31507
31509}
31510
31512{
31513 if (!pc->used) {
31514 log_error("WARNING: trying to send data to the closed connection %s",
31516 return -1;
31517 }
31518 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet != nullptr, -1,
31519 "Handler for PACKET_RESEARCH_INFO not installed");
31520 return pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet(pc, packet);
31521}
31522
31523void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
31524{
31525 conn_list_iterate(dest, pconn) {
31528}
31529
31531{
31532 memset(packet, 0, sizeof(*packet));
31533}
31534
31535#define free_packet_unknown_research(_packet) (void) 0
31536#define destroy_packet_unknown_research free
31537
31538#ifdef FREECIV_DELTA_PROTOCOL
31539#define hash_packet_unknown_research_100 hash_const
31540#define cmp_packet_unknown_research_100 cmp_const
31542#endif /* FREECIV_DELTA_PROTOCOL */
31543
31545{
31546#define FREE_PACKET_STRUCT(_packet) free_packet_unknown_research(_packet)
31548
31549#ifdef FREECIV_JSON_CONNECTION
31550 struct plocation field_addr;
31551 {
31552 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31555 }
31556#endif /* FREECIV_JSON_CONNECTION */
31557
31558 log_packet_detailed("packet_unknown_research_100: got info about ()");
31559
31560#ifdef FREECIV_DELTA_PROTOCOL
31563 struct genhash **hash = pc->phs.received + PACKET_UNKNOWN_RESEARCH;
31564
31565 if (nullptr == *hash) {
31567 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31568 }
31569
31570 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31571 *real_packet = *old;
31572 } else {
31573 /* packet is already initialized empty */
31574 log_packet_detailed(" no old info");
31575 }
31576
31577#ifdef FREECIV_JSON_CONNECTION
31578 field_addr.name = "fields";
31579#endif /* FREECIV_JSON_CONNECTION */
31580 DIO_BV_GET(&din, &field_addr, fields);
31581
31582 if (BV_ISSET(fields, 0)) {
31583 log_packet_detailed(" got field 'id'");
31584
31585#ifdef FREECIV_JSON_CONNECTION
31586 field_addr.name = "id";
31587#endif /* FREECIV_JSON_CONNECTION */
31588
31589 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31591 }
31592 }
31593
31594 if (nullptr == old) {
31595 old = fc_malloc(sizeof(*old));
31597 *old = *real_packet;
31599 } else {
31600 *old = *real_packet;
31601 }
31602
31603 hash = pc->phs.received + PACKET_RESEARCH_INFO;
31604 if (nullptr != *hash) {
31606 }
31607
31608#else /* FREECIV_DELTA_PROTOCOL */
31609#ifdef FREECIV_JSON_CONNECTION
31610 field_addr.name = "id";
31611#endif /* FREECIV_JSON_CONNECTION */
31612
31613 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
31615 }
31616#endif /* FREECIV_DELTA_PROTOCOL */
31617
31619#undef FREE_PACKET_STRUCT
31620}
31621
31623{
31624 const struct packet_unknown_research *real_packet = packet;
31625 int e;
31627
31628 log_packet_detailed("packet_unknown_research_100: sending info about ()");
31629
31630#ifdef FREECIV_DELTA_PROTOCOL
31633 bool differ;
31634 int different = 0;
31635 struct genhash **hash = pc->phs.sent + PACKET_UNKNOWN_RESEARCH;
31636
31637 if (nullptr == *hash) {
31639 nullptr, nullptr, nullptr, destroy_packet_unknown_research);
31640 }
31641 BV_CLR_ALL(fields);
31642
31643 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31644 old = fc_malloc(sizeof(*old));
31645 /* temporary bitcopy just to insert correctly */
31646 *old = *real_packet;
31649 different = 1; /* Force to send. */
31650 }
31651
31652 differ = (old->id != real_packet->id);
31653 if (differ) {
31654 different++;
31655 BV_SET(fields, 0);
31656 }
31657
31658 if (different == 0) {
31659 log_packet_detailed(" no change -> discard");
31661 }
31662#endif /* FREECIV_DELTA_PROTOCOL */
31663
31664#ifdef FREECIV_JSON_CONNECTION
31665 struct plocation field_addr;
31666 {
31667 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31670 }
31671#endif /* FREECIV_JSON_CONNECTION */
31672
31673#ifdef FREECIV_DELTA_PROTOCOL
31674#ifdef FREECIV_JSON_CONNECTION
31675 field_addr.name = "fields";
31676#endif /* FREECIV_JSON_CONNECTION */
31677 e = 0;
31678 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31679 if (e) {
31680 log_packet_detailed("fields bitvector error detected");
31681 }
31682
31683 if (BV_ISSET(fields, 0)) {
31684 log_packet_detailed(" field 'id' has changed");
31685
31686#ifdef FREECIV_JSON_CONNECTION
31687 field_addr.name = "id";
31688#endif /* FREECIV_JSON_CONNECTION */
31689 e = 0;
31690
31691 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31692
31693 if (e) {
31694 log_packet_detailed("'id' field error detected");
31695 }
31696 }
31697
31698 *old = *real_packet;
31699
31700 hash = pc->phs.sent + PACKET_RESEARCH_INFO;
31701 if (nullptr != *hash) {
31703 }
31704
31705#else /* FREECIV_DELTA_PROTOCOL */
31706#ifdef FREECIV_JSON_CONNECTION
31707 field_addr.name = "id";
31708#endif /* FREECIV_JSON_CONNECTION */
31709 e = 0;
31710
31711 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
31712
31713 if (e) {
31714 log_packet_detailed("'id' field error detected");
31715 }
31716#endif /* FREECIV_DELTA_PROTOCOL */
31717
31719}
31720
31722{
31723 if (!pc->used) {
31724 log_error("WARNING: trying to send data to the closed connection %s",
31726 return -1;
31727 }
31728 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet != nullptr, -1,
31729 "Handler for PACKET_UNKNOWN_RESEARCH not installed");
31730 return pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet(pc, packet);
31731}
31732
31733static inline void init_packet_player_research(struct packet_player_research *packet)
31734{
31735 memset(packet, 0, sizeof(*packet));
31736}
31737
31738#define free_packet_player_research(_packet) (void) 0
31739#define destroy_packet_player_research free
31740
31741#ifdef FREECIV_DELTA_PROTOCOL
31742#define hash_packet_player_research_100 hash_const
31743#define cmp_packet_player_research_100 cmp_const
31745#endif /* FREECIV_DELTA_PROTOCOL */
31746
31748{
31749#define FREE_PACKET_STRUCT(_packet) free_packet_player_research(_packet)
31751
31752#ifdef FREECIV_JSON_CONNECTION
31753 struct plocation field_addr;
31754 {
31755 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31758 }
31759#endif /* FREECIV_JSON_CONNECTION */
31760
31761 log_packet_detailed("packet_player_research_100: got info about ()");
31762
31763#ifdef FREECIV_DELTA_PROTOCOL
31766 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RESEARCH;
31767
31768 if (nullptr == *hash) {
31770 nullptr, nullptr, nullptr, destroy_packet_player_research);
31771 }
31772
31773 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31774 *real_packet = *old;
31775 } else {
31776 /* packet is already initialized empty */
31777 log_packet_detailed(" no old info");
31778 }
31779
31780#ifdef FREECIV_JSON_CONNECTION
31781 field_addr.name = "fields";
31782#endif /* FREECIV_JSON_CONNECTION */
31783 DIO_BV_GET(&din, &field_addr, fields);
31784
31785 if (BV_ISSET(fields, 0)) {
31786 log_packet_detailed(" got field 'tech'");
31787
31788#ifdef FREECIV_JSON_CONNECTION
31789 field_addr.name = "tech";
31790#endif /* FREECIV_JSON_CONNECTION */
31791
31792 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31794 }
31795 }
31796
31797 if (nullptr == old) {
31798 old = fc_malloc(sizeof(*old));
31800 *old = *real_packet;
31802 } else {
31803 *old = *real_packet;
31804 }
31805
31806#else /* FREECIV_DELTA_PROTOCOL */
31807#ifdef FREECIV_JSON_CONNECTION
31808 field_addr.name = "tech";
31809#endif /* FREECIV_JSON_CONNECTION */
31810
31811 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31813 }
31814#endif /* FREECIV_DELTA_PROTOCOL */
31815
31817#undef FREE_PACKET_STRUCT
31818}
31819
31821{
31822 const struct packet_player_research *real_packet = packet;
31823 int e;
31825
31826 log_packet_detailed("packet_player_research_100: sending info about ()");
31827
31828#ifdef FREECIV_DELTA_PROTOCOL
31831 bool differ;
31832 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RESEARCH;
31833
31834 if (nullptr == *hash) {
31836 nullptr, nullptr, nullptr, destroy_packet_player_research);
31837 }
31838 BV_CLR_ALL(fields);
31839
31840 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31841 old = fc_malloc(sizeof(*old));
31842 /* temporary bitcopy just to insert correctly */
31843 *old = *real_packet;
31846 }
31847
31848 differ = (old->tech != real_packet->tech);
31849 if (differ) {
31850 BV_SET(fields, 0);
31851 }
31852#endif /* FREECIV_DELTA_PROTOCOL */
31853
31854#ifdef FREECIV_JSON_CONNECTION
31855 struct plocation field_addr;
31856 {
31857 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31860 }
31861#endif /* FREECIV_JSON_CONNECTION */
31862
31863#ifdef FREECIV_DELTA_PROTOCOL
31864#ifdef FREECIV_JSON_CONNECTION
31865 field_addr.name = "fields";
31866#endif /* FREECIV_JSON_CONNECTION */
31867 e = 0;
31868 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31869 if (e) {
31870 log_packet_detailed("fields bitvector error detected");
31871 }
31872
31873 if (BV_ISSET(fields, 0)) {
31874 log_packet_detailed(" field 'tech' has changed");
31875
31876#ifdef FREECIV_JSON_CONNECTION
31877 field_addr.name = "tech";
31878#endif /* FREECIV_JSON_CONNECTION */
31879 e = 0;
31880
31881 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31882
31883 if (e) {
31884 log_packet_detailed("'tech' field error detected");
31885 }
31886 }
31887
31888 *old = *real_packet;
31889
31890#else /* FREECIV_DELTA_PROTOCOL */
31891#ifdef FREECIV_JSON_CONNECTION
31892 field_addr.name = "tech";
31893#endif /* FREECIV_JSON_CONNECTION */
31894 e = 0;
31895
31896 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
31897
31898 if (e) {
31899 log_packet_detailed("'tech' field error detected");
31900 }
31901#endif /* FREECIV_DELTA_PROTOCOL */
31902
31904}
31905
31907{
31908 if (!pc->used) {
31909 log_error("WARNING: trying to send data to the closed connection %s",
31911 return -1;
31912 }
31913 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet != nullptr, -1,
31914 "Handler for PACKET_PLAYER_RESEARCH not installed");
31915 return pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet(pc, packet);
31916}
31917
31919{
31920 struct packet_player_research packet, *real_packet = &packet;
31921
31923
31925}
31926
31928{
31929 memset(packet, 0, sizeof(*packet));
31930}
31931
31932#define free_packet_player_tech_goal(_packet) (void) 0
31933#define destroy_packet_player_tech_goal free
31934
31935#ifdef FREECIV_DELTA_PROTOCOL
31936#define hash_packet_player_tech_goal_100 hash_const
31937#define cmp_packet_player_tech_goal_100 cmp_const
31939#endif /* FREECIV_DELTA_PROTOCOL */
31940
31942{
31943#define FREE_PACKET_STRUCT(_packet) free_packet_player_tech_goal(_packet)
31945
31946#ifdef FREECIV_JSON_CONNECTION
31947 struct plocation field_addr;
31948 {
31949 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
31952 }
31953#endif /* FREECIV_JSON_CONNECTION */
31954
31955 log_packet_detailed("packet_player_tech_goal_100: got info about ()");
31956
31957#ifdef FREECIV_DELTA_PROTOCOL
31960 struct genhash **hash = pc->phs.received + PACKET_PLAYER_TECH_GOAL;
31961
31962 if (nullptr == *hash) {
31964 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
31965 }
31966
31967 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31968 *real_packet = *old;
31969 } else {
31970 /* packet is already initialized empty */
31971 log_packet_detailed(" no old info");
31972 }
31973
31974#ifdef FREECIV_JSON_CONNECTION
31975 field_addr.name = "fields";
31976#endif /* FREECIV_JSON_CONNECTION */
31977 DIO_BV_GET(&din, &field_addr, fields);
31978
31979 if (BV_ISSET(fields, 0)) {
31980 log_packet_detailed(" got field 'tech'");
31981
31982#ifdef FREECIV_JSON_CONNECTION
31983 field_addr.name = "tech";
31984#endif /* FREECIV_JSON_CONNECTION */
31985
31986 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
31988 }
31989 }
31990
31991 if (nullptr == old) {
31992 old = fc_malloc(sizeof(*old));
31994 *old = *real_packet;
31996 } else {
31997 *old = *real_packet;
31998 }
31999
32000#else /* FREECIV_DELTA_PROTOCOL */
32001#ifdef FREECIV_JSON_CONNECTION
32002 field_addr.name = "tech";
32003#endif /* FREECIV_JSON_CONNECTION */
32004
32005 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
32007 }
32008#endif /* FREECIV_DELTA_PROTOCOL */
32009
32011#undef FREE_PACKET_STRUCT
32012}
32013
32015{
32016 const struct packet_player_tech_goal *real_packet = packet;
32017 int e;
32019
32020 log_packet_detailed("packet_player_tech_goal_100: sending info about ()");
32021
32022#ifdef FREECIV_DELTA_PROTOCOL
32025 bool differ;
32026 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_TECH_GOAL;
32027
32028 if (nullptr == *hash) {
32030 nullptr, nullptr, nullptr, destroy_packet_player_tech_goal);
32031 }
32032 BV_CLR_ALL(fields);
32033
32034 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32035 old = fc_malloc(sizeof(*old));
32036 /* temporary bitcopy just to insert correctly */
32037 *old = *real_packet;
32040 }
32041
32042 differ = (old->tech != real_packet->tech);
32043 if (differ) {
32044 BV_SET(fields, 0);
32045 }
32046#endif /* FREECIV_DELTA_PROTOCOL */
32047
32048#ifdef FREECIV_JSON_CONNECTION
32049 struct plocation field_addr;
32050 {
32051 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32054 }
32055#endif /* FREECIV_JSON_CONNECTION */
32056
32057#ifdef FREECIV_DELTA_PROTOCOL
32058#ifdef FREECIV_JSON_CONNECTION
32059 field_addr.name = "fields";
32060#endif /* FREECIV_JSON_CONNECTION */
32061 e = 0;
32062 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32063 if (e) {
32064 log_packet_detailed("fields bitvector error detected");
32065 }
32066
32067 if (BV_ISSET(fields, 0)) {
32068 log_packet_detailed(" field 'tech' has changed");
32069
32070#ifdef FREECIV_JSON_CONNECTION
32071 field_addr.name = "tech";
32072#endif /* FREECIV_JSON_CONNECTION */
32073 e = 0;
32074
32075 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
32076
32077 if (e) {
32078 log_packet_detailed("'tech' field error detected");
32079 }
32080 }
32081
32082 *old = *real_packet;
32083
32084#else /* FREECIV_DELTA_PROTOCOL */
32085#ifdef FREECIV_JSON_CONNECTION
32086 field_addr.name = "tech";
32087#endif /* FREECIV_JSON_CONNECTION */
32088 e = 0;
32089
32090 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
32091
32092 if (e) {
32093 log_packet_detailed("'tech' field error detected");
32094 }
32095#endif /* FREECIV_DELTA_PROTOCOL */
32096
32098}
32099
32101{
32102 if (!pc->used) {
32103 log_error("WARNING: trying to send data to the closed connection %s",
32105 return -1;
32106 }
32107 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet != nullptr, -1,
32108 "Handler for PACKET_PLAYER_TECH_GOAL not installed");
32109 return pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet(pc, packet);
32110}
32111
32113{
32114 struct packet_player_tech_goal packet, *real_packet = &packet;
32115
32117
32119}
32120
32121static inline void init_packet_unit_remove(struct packet_unit_remove *packet)
32122{
32123 memset(packet, 0, sizeof(*packet));
32124}
32125
32126#define free_packet_unit_remove(_packet) (void) 0
32127#define destroy_packet_unit_remove free
32128
32129#ifdef FREECIV_DELTA_PROTOCOL
32130#define hash_packet_unit_remove_100 hash_const
32131#define cmp_packet_unit_remove_100 cmp_const
32133#endif /* FREECIV_DELTA_PROTOCOL */
32134
32136{
32137#define FREE_PACKET_STRUCT(_packet) free_packet_unit_remove(_packet)
32139
32140#ifdef FREECIV_JSON_CONNECTION
32141 struct plocation field_addr;
32142 {
32143 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32146 }
32147#endif /* FREECIV_JSON_CONNECTION */
32148
32149 log_packet_detailed("packet_unit_remove_100: got info about ()");
32150
32151#ifdef FREECIV_DELTA_PROTOCOL
32153 struct packet_unit_remove *old;
32154 struct genhash **hash = pc->phs.received + PACKET_UNIT_REMOVE;
32155
32156 if (nullptr == *hash) {
32158 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32159 }
32160
32161 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32162 *real_packet = *old;
32163 } else {
32164 /* packet is already initialized empty */
32165 log_packet_detailed(" no old info");
32166 }
32167
32168#ifdef FREECIV_JSON_CONNECTION
32169 field_addr.name = "fields";
32170#endif /* FREECIV_JSON_CONNECTION */
32171 DIO_BV_GET(&din, &field_addr, fields);
32172
32173 if (BV_ISSET(fields, 0)) {
32174 log_packet_detailed(" got field 'unit_id'");
32175
32176#ifdef FREECIV_JSON_CONNECTION
32177 field_addr.name = "unit_id";
32178#endif /* FREECIV_JSON_CONNECTION */
32179
32180 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32182 }
32183 }
32184
32185 if (nullptr == old) {
32186 old = fc_malloc(sizeof(*old));
32188 *old = *real_packet;
32190 } else {
32191 *old = *real_packet;
32192 }
32193
32194 hash = pc->phs.received + PACKET_UNIT_INFO;
32195 if (nullptr != *hash) {
32197 }
32198
32199 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32200 if (nullptr != *hash) {
32202 }
32203
32204#else /* FREECIV_DELTA_PROTOCOL */
32205#ifdef FREECIV_JSON_CONNECTION
32206 field_addr.name = "unit_id";
32207#endif /* FREECIV_JSON_CONNECTION */
32208
32209 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
32211 }
32212#endif /* FREECIV_DELTA_PROTOCOL */
32213
32215#undef FREE_PACKET_STRUCT
32216}
32217
32218static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
32219{
32220 const struct packet_unit_remove *real_packet = packet;
32221 int e;
32223
32224 log_packet_detailed("packet_unit_remove_100: sending info about ()");
32225
32226#ifdef FREECIV_DELTA_PROTOCOL
32228 struct packet_unit_remove *old;
32229 bool differ;
32230 struct genhash **hash = pc->phs.sent + PACKET_UNIT_REMOVE;
32231
32232 if (nullptr == *hash) {
32234 nullptr, nullptr, nullptr, destroy_packet_unit_remove);
32235 }
32236 BV_CLR_ALL(fields);
32237
32238 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32239 old = fc_malloc(sizeof(*old));
32240 /* temporary bitcopy just to insert correctly */
32241 *old = *real_packet;
32244 }
32245
32246 differ = (old->unit_id != real_packet->unit_id);
32247 if (differ) {
32248 BV_SET(fields, 0);
32249 }
32250#endif /* FREECIV_DELTA_PROTOCOL */
32251
32252#ifdef FREECIV_JSON_CONNECTION
32253 struct plocation field_addr;
32254 {
32255 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32258 }
32259#endif /* FREECIV_JSON_CONNECTION */
32260
32261#ifdef FREECIV_DELTA_PROTOCOL
32262#ifdef FREECIV_JSON_CONNECTION
32263 field_addr.name = "fields";
32264#endif /* FREECIV_JSON_CONNECTION */
32265 e = 0;
32266 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32267 if (e) {
32268 log_packet_detailed("fields bitvector error detected");
32269 }
32270
32271 if (BV_ISSET(fields, 0)) {
32272 log_packet_detailed(" field 'unit_id' has changed");
32273
32274#ifdef FREECIV_JSON_CONNECTION
32275 field_addr.name = "unit_id";
32276#endif /* FREECIV_JSON_CONNECTION */
32277 e = 0;
32278
32279 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32280
32281 if (e) {
32282 log_packet_detailed("'unit_id' field error detected");
32283 }
32284 }
32285
32286 *old = *real_packet;
32287
32288 hash = pc->phs.sent + PACKET_UNIT_INFO;
32289 if (nullptr != *hash) {
32291 }
32292
32293 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
32294 if (nullptr != *hash) {
32296 }
32297
32298#else /* FREECIV_DELTA_PROTOCOL */
32299#ifdef FREECIV_JSON_CONNECTION
32300 field_addr.name = "unit_id";
32301#endif /* FREECIV_JSON_CONNECTION */
32302 e = 0;
32303
32304 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
32305
32306 if (e) {
32307 log_packet_detailed("'unit_id' field error detected");
32308 }
32309#endif /* FREECIV_DELTA_PROTOCOL */
32310
32312}
32313
32315{
32316 if (!pc->used) {
32317 log_error("WARNING: trying to send data to the closed connection %s",
32319 return -1;
32320 }
32321 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet != nullptr, -1,
32322 "Handler for PACKET_UNIT_REMOVE not installed");
32323 return pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet(pc, packet);
32324}
32325
32326void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
32327{
32328 conn_list_iterate(dest, pconn) {
32331}
32332
32333int dsend_packet_unit_remove(struct connection *pc, int unit_id)
32334{
32335 struct packet_unit_remove packet, *real_packet = &packet;
32336
32338
32340}
32341
32343{
32344 struct packet_unit_remove packet, *real_packet = &packet;
32345
32347
32349}
32350
32351static inline void init_packet_unit_info(struct packet_unit_info *packet)
32352{
32353 memset(packet, 0, sizeof(*packet));
32354}
32355
32356#define free_packet_unit_info(_packet) (void) 0
32357#define destroy_packet_unit_info free
32358
32359#ifdef FREECIV_DELTA_PROTOCOL
32361{
32362 const struct packet_unit_info *key = (const struct packet_unit_info *) vkey;
32363 genhash_val_t result = 0;
32364
32365 result += key->id;
32366
32367 result &= 0xFFFFFFFF;
32368 return result;
32369}
32370
32371static bool cmp_packet_unit_info_100(const void *vkey1, const void *vkey2)
32372{
32373 const struct packet_unit_info *old = (const struct packet_unit_info *) vkey1;
32374 const struct packet_unit_info *real_packet = (const struct packet_unit_info *) vkey2;
32375 bool differ;
32376
32377 differ = (old->id != real_packet->id);
32378
32379 return !differ;
32380}
32382#endif /* FREECIV_DELTA_PROTOCOL */
32383
32385{
32386#define FREE_PACKET_STRUCT(_packet) free_packet_unit_info(_packet)
32388
32389#ifdef FREECIV_JSON_CONNECTION
32390 struct plocation field_addr;
32391 {
32392 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
32395 }
32396#endif /* FREECIV_JSON_CONNECTION */
32397
32398#ifdef FREECIV_JSON_CONNECTION
32399 field_addr.name = "id";
32400#endif /* FREECIV_JSON_CONNECTION */
32401
32402 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
32404 }
32405
32406 log_packet_detailed("packet_unit_info_100: got info about (%d)",
32407 real_packet->id);
32408
32409#ifdef FREECIV_DELTA_PROTOCOL
32411 struct packet_unit_info *old;
32412 struct genhash **hash = pc->phs.received + PACKET_UNIT_INFO;
32413
32414 if (nullptr == *hash) {
32416 nullptr, nullptr, nullptr, destroy_packet_unit_info);
32417 }
32418
32419 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32420 *real_packet = *old;
32421 } else {
32422 /* packet is already initialized empty */
32423 log_packet_detailed(" no old info");
32424 }
32425
32426#ifdef FREECIV_JSON_CONNECTION
32427 field_addr.name = "fields";
32428#endif /* FREECIV_JSON_CONNECTION */
32429 DIO_BV_GET(&din, &field_addr, fields);
32430
32431 if (BV_ISSET(fields, 0)) {
32432 log_packet_detailed(" got field 'owner'");
32433
32434#ifdef FREECIV_JSON_CONNECTION
32435 field_addr.name = "owner";
32436#endif /* FREECIV_JSON_CONNECTION */
32437
32438 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32440 }
32441 }
32442
32443 if (BV_ISSET(fields, 1)) {
32444 log_packet_detailed(" got field 'nationality'");
32445
32446#ifdef FREECIV_JSON_CONNECTION
32447 field_addr.name = "nationality";
32448#endif /* FREECIV_JSON_CONNECTION */
32449
32450 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32451 RECEIVE_PACKET_FIELD_ERROR(nationality);
32452 }
32453 }
32454
32455 if (BV_ISSET(fields, 2)) {
32456 log_packet_detailed(" got field 'tile'");
32457
32458#ifdef FREECIV_JSON_CONNECTION
32459 field_addr.name = "tile";
32460#endif /* FREECIV_JSON_CONNECTION */
32461
32462 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32464 }
32465 }
32466
32467 if (BV_ISSET(fields, 3)) {
32468 log_packet_detailed(" got field 'facing'");
32469
32470#ifdef FREECIV_JSON_CONNECTION
32471 field_addr.name = "facing";
32472#endif /* FREECIV_JSON_CONNECTION */
32473
32474 {
32475 int readin;
32476
32477 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32479 }
32480 real_packet->facing = readin;
32481 }
32482 }
32483
32484 if (BV_ISSET(fields, 4)) {
32485 log_packet_detailed(" got field 'homecity'");
32486
32487#ifdef FREECIV_JSON_CONNECTION
32488 field_addr.name = "homecity";
32489#endif /* FREECIV_JSON_CONNECTION */
32490
32491 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32493 }
32494 }
32495
32496 if (BV_ISSET(fields, 5)) {
32497 log_packet_detailed(" got field 'upkeep'");
32498
32499#ifdef FREECIV_JSON_CONNECTION
32500 field_addr.name = "upkeep";
32501#endif /* FREECIV_JSON_CONNECTION */
32502
32503 {
32504 int i;
32505
32506
32507#ifdef FREECIV_JSON_CONNECTION
32508 /* Enter array. */
32509 field_addr.sub_location = plocation_elem_new(0);
32510#endif /* FREECIV_JSON_CONNECTION */
32511
32512 for (i = 0; i < O_LAST; i++) {
32513#ifdef FREECIV_JSON_CONNECTION
32514 /* Next array element */
32515 field_addr.sub_location->number = i;
32516#endif /* FREECIV_JSON_CONNECTION */
32517
32518 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32520 }
32521 }
32522
32523#ifdef FREECIV_JSON_CONNECTION
32524 /* Exit array. */
32525 FC_FREE(field_addr.sub_location);
32526#endif /* FREECIV_JSON_CONNECTION */
32527 }
32528 }
32529
32530 if (BV_ISSET(fields, 6)) {
32531 log_packet_detailed(" got field 'veteran'");
32532
32533#ifdef FREECIV_JSON_CONNECTION
32534 field_addr.name = "veteran";
32535#endif /* FREECIV_JSON_CONNECTION */
32536
32537 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32539 }
32540 }
32541
32542 if (BV_ISSET(fields, 7)) {
32543 log_packet_detailed(" got field 'ssa_controller'");
32544
32545#ifdef FREECIV_JSON_CONNECTION
32546 field_addr.name = "ssa_controller";
32547#endif /* FREECIV_JSON_CONNECTION */
32548
32549 {
32550 int readin;
32551
32552 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32553 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32554 }
32555 real_packet->ssa_controller = readin;
32556 }
32557 }
32558
32559 real_packet->paradropped = BV_ISSET(fields, 8);
32560
32561 real_packet->occupied = BV_ISSET(fields, 9);
32562
32563 real_packet->transported = BV_ISSET(fields, 10);
32564
32565 real_packet->done_moving = BV_ISSET(fields, 11);
32566
32567 real_packet->stay = BV_ISSET(fields, 12);
32568
32569 if (BV_ISSET(fields, 13)) {
32570 log_packet_detailed(" got field 'birth_turn'");
32571
32572#ifdef FREECIV_JSON_CONNECTION
32573 field_addr.name = "birth_turn";
32574#endif /* FREECIV_JSON_CONNECTION */
32575
32576 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
32577 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
32578 }
32579 }
32580
32581 if (BV_ISSET(fields, 14)) {
32582 log_packet_detailed(" got field 'current_form_turn'");
32583
32584#ifdef FREECIV_JSON_CONNECTION
32585 field_addr.name = "current_form_turn";
32586#endif /* FREECIV_JSON_CONNECTION */
32587
32588 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
32589 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
32590 }
32591 }
32592
32593 if (BV_ISSET(fields, 15)) {
32594 log_packet_detailed(" got field 'type'");
32595
32596#ifdef FREECIV_JSON_CONNECTION
32597 field_addr.name = "type";
32598#endif /* FREECIV_JSON_CONNECTION */
32599
32600 {
32601 int readin;
32602
32603 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32605 }
32606 real_packet->type = readin;
32607 }
32608 }
32609
32610 if (BV_ISSET(fields, 16)) {
32611 log_packet_detailed(" got field 'transported_by'");
32612
32613#ifdef FREECIV_JSON_CONNECTION
32614 field_addr.name = "transported_by";
32615#endif /* FREECIV_JSON_CONNECTION */
32616
32617 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32618 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32619 }
32620 }
32621
32622 if (BV_ISSET(fields, 17)) {
32623 log_packet_detailed(" got field 'carrying'");
32624
32625#ifdef FREECIV_JSON_CONNECTION
32626 field_addr.name = "carrying";
32627#endif /* FREECIV_JSON_CONNECTION */
32628
32629 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
32631 }
32632 }
32633
32634 if (BV_ISSET(fields, 18)) {
32635 log_packet_detailed(" got field 'movesleft'");
32636
32637#ifdef FREECIV_JSON_CONNECTION
32638 field_addr.name = "movesleft";
32639#endif /* FREECIV_JSON_CONNECTION */
32640
32641 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
32642 RECEIVE_PACKET_FIELD_ERROR(movesleft);
32643 }
32644 }
32645
32646 if (BV_ISSET(fields, 19)) {
32647 log_packet_detailed(" got field 'hp'");
32648
32649#ifdef FREECIV_JSON_CONNECTION
32650 field_addr.name = "hp";
32651#endif /* FREECIV_JSON_CONNECTION */
32652
32653 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32655 }
32656 }
32657
32658 if (BV_ISSET(fields, 20)) {
32659 log_packet_detailed(" got field 'fuel'");
32660
32661#ifdef FREECIV_JSON_CONNECTION
32662 field_addr.name = "fuel";
32663#endif /* FREECIV_JSON_CONNECTION */
32664
32665 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
32667 }
32668 }
32669
32670 if (BV_ISSET(fields, 21)) {
32671 log_packet_detailed(" got field 'activity_count'");
32672
32673#ifdef FREECIV_JSON_CONNECTION
32674 field_addr.name = "activity_count";
32675#endif /* FREECIV_JSON_CONNECTION */
32676
32677 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
32678 RECEIVE_PACKET_FIELD_ERROR(activity_count);
32679 }
32680 }
32681
32682 if (BV_ISSET(fields, 22)) {
32683 log_packet_detailed(" got field 'changed_from_count'");
32684
32685#ifdef FREECIV_JSON_CONNECTION
32686 field_addr.name = "changed_from_count";
32687#endif /* FREECIV_JSON_CONNECTION */
32688
32689 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
32690 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
32691 }
32692 }
32693
32694 if (BV_ISSET(fields, 23)) {
32695 log_packet_detailed(" got field 'goto_tile'");
32696
32697#ifdef FREECIV_JSON_CONNECTION
32698 field_addr.name = "goto_tile";
32699#endif /* FREECIV_JSON_CONNECTION */
32700
32701 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
32702 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
32703 }
32704 }
32705
32706 if (BV_ISSET(fields, 24)) {
32707 log_packet_detailed(" got field 'activity'");
32708
32709#ifdef FREECIV_JSON_CONNECTION
32710 field_addr.name = "activity";
32711#endif /* FREECIV_JSON_CONNECTION */
32712
32713 {
32714 int readin;
32715
32716 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32718 }
32719 real_packet->activity = readin;
32720 }
32721 }
32722
32723 if (BV_ISSET(fields, 25)) {
32724 log_packet_detailed(" got field 'activity_tgt'");
32725
32726#ifdef FREECIV_JSON_CONNECTION
32727 field_addr.name = "activity_tgt";
32728#endif /* FREECIV_JSON_CONNECTION */
32729
32730 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
32731 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
32732 }
32733 }
32734
32735 if (BV_ISSET(fields, 26)) {
32736 log_packet_detailed(" got field 'changed_from'");
32737
32738#ifdef FREECIV_JSON_CONNECTION
32739 field_addr.name = "changed_from";
32740#endif /* FREECIV_JSON_CONNECTION */
32741
32742 {
32743 int readin;
32744
32745 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32746 RECEIVE_PACKET_FIELD_ERROR(changed_from);
32747 }
32748 real_packet->changed_from = readin;
32749 }
32750 }
32751
32752 if (BV_ISSET(fields, 27)) {
32753 log_packet_detailed(" got field 'changed_from_tgt'");
32754
32755#ifdef FREECIV_JSON_CONNECTION
32756 field_addr.name = "changed_from_tgt";
32757#endif /* FREECIV_JSON_CONNECTION */
32758
32759 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
32760 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
32761 }
32762 }
32763
32764 if (BV_ISSET(fields, 28)) {
32765 log_packet_detailed(" got field 'battlegroup'");
32766
32767#ifdef FREECIV_JSON_CONNECTION
32768 field_addr.name = "battlegroup";
32769#endif /* FREECIV_JSON_CONNECTION */
32770
32771 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
32772 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
32773 }
32774 }
32775
32776 real_packet->has_orders = BV_ISSET(fields, 29);
32777
32778 if (BV_ISSET(fields, 30)) {
32779 log_packet_detailed(" got field 'orders_length'");
32780
32781#ifdef FREECIV_JSON_CONNECTION
32782 field_addr.name = "orders_length";
32783#endif /* FREECIV_JSON_CONNECTION */
32784
32785 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
32786 RECEIVE_PACKET_FIELD_ERROR(orders_length);
32787 }
32788 }
32789
32790 if (BV_ISSET(fields, 31)) {
32791 log_packet_detailed(" got field 'orders_index'");
32792
32793#ifdef FREECIV_JSON_CONNECTION
32794 field_addr.name = "orders_index";
32795#endif /* FREECIV_JSON_CONNECTION */
32796
32797 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
32798 RECEIVE_PACKET_FIELD_ERROR(orders_index);
32799 }
32800 }
32801
32802 real_packet->orders_repeat = BV_ISSET(fields, 32);
32803
32804 real_packet->orders_vigilant = BV_ISSET(fields, 33);
32805
32806 if (BV_ISSET(fields, 34)) {
32807 log_packet_detailed(" got field 'orders'");
32808
32809#ifdef FREECIV_JSON_CONNECTION
32810 field_addr.name = "orders";
32811#endif /* FREECIV_JSON_CONNECTION */
32812
32813 {
32814 int i;
32815
32816 if (real_packet->orders_length > MAX_LEN_ROUTE) {
32817 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
32818 }
32819
32820#ifdef FREECIV_JSON_CONNECTION
32821 /* Enter array. */
32822 field_addr.sub_location = plocation_elem_new(0);
32823#endif /* FREECIV_JSON_CONNECTION */
32824
32825 for (i = 0; i < real_packet->orders_length; i++) {
32826#ifdef FREECIV_JSON_CONNECTION
32827 /* Next array element */
32828 field_addr.sub_location->number = i;
32829#endif /* FREECIV_JSON_CONNECTION */
32830
32831 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
32833 }
32834 }
32835
32836#ifdef FREECIV_JSON_CONNECTION
32837 /* Exit array. */
32838 FC_FREE(field_addr.sub_location);
32839#endif /* FREECIV_JSON_CONNECTION */
32840 }
32841 }
32842
32843 if (BV_ISSET(fields, 35)) {
32844 log_packet_detailed(" got field 'action_decision_want'");
32845
32846#ifdef FREECIV_JSON_CONNECTION
32847 field_addr.name = "action_decision_want";
32848#endif /* FREECIV_JSON_CONNECTION */
32849
32850 {
32851 int readin;
32852
32853 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32854 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
32855 }
32856 real_packet->action_decision_want = readin;
32857 }
32858 }
32859
32860 if (BV_ISSET(fields, 36)) {
32861 log_packet_detailed(" got field 'action_decision_tile'");
32862
32863#ifdef FREECIV_JSON_CONNECTION
32864 field_addr.name = "action_decision_tile";
32865#endif /* FREECIV_JSON_CONNECTION */
32866
32867 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
32868 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
32869 }
32870 }
32871
32872 if (nullptr == old) {
32873 old = fc_malloc(sizeof(*old));
32875 *old = *real_packet;
32877 } else {
32878 *old = *real_packet;
32879 }
32880
32881 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32882 if (nullptr != *hash) {
32884 }
32885
32886#else /* FREECIV_DELTA_PROTOCOL */
32887#ifdef FREECIV_JSON_CONNECTION
32888 field_addr.name = "owner";
32889#endif /* FREECIV_JSON_CONNECTION */
32890
32891 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
32893 }
32894
32895#ifdef FREECIV_JSON_CONNECTION
32896 field_addr.name = "nationality";
32897#endif /* FREECIV_JSON_CONNECTION */
32898
32899 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nationality)) {
32900 RECEIVE_PACKET_FIELD_ERROR(nationality);
32901 }
32902
32903#ifdef FREECIV_JSON_CONNECTION
32904 field_addr.name = "tile";
32905#endif /* FREECIV_JSON_CONNECTION */
32906
32907 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32909 }
32910
32911#ifdef FREECIV_JSON_CONNECTION
32912 field_addr.name = "facing";
32913#endif /* FREECIV_JSON_CONNECTION */
32914
32915 {
32916 int readin;
32917
32918 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32920 }
32921 real_packet->facing = readin;
32922 }
32923
32924#ifdef FREECIV_JSON_CONNECTION
32925 field_addr.name = "homecity";
32926#endif /* FREECIV_JSON_CONNECTION */
32927
32928 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
32930 }
32931
32932#ifdef FREECIV_JSON_CONNECTION
32933 field_addr.name = "upkeep";
32934#endif /* FREECIV_JSON_CONNECTION */
32935
32936 {
32937 int i;
32938
32939
32940#ifdef FREECIV_JSON_CONNECTION
32941 /* Enter array. */
32942 field_addr.sub_location = plocation_elem_new(0);
32943#endif /* FREECIV_JSON_CONNECTION */
32944
32945 for (i = 0; i < O_LAST; i++) {
32946#ifdef FREECIV_JSON_CONNECTION
32947 /* Next array element */
32948 field_addr.sub_location->number = i;
32949#endif /* FREECIV_JSON_CONNECTION */
32950
32951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
32953 }
32954 }
32955
32956#ifdef FREECIV_JSON_CONNECTION
32957 /* Exit array. */
32958 FC_FREE(field_addr.sub_location);
32959#endif /* FREECIV_JSON_CONNECTION */
32960 }
32961
32962#ifdef FREECIV_JSON_CONNECTION
32963 field_addr.name = "veteran";
32964#endif /* FREECIV_JSON_CONNECTION */
32965
32966 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32968 }
32969
32970#ifdef FREECIV_JSON_CONNECTION
32971 field_addr.name = "ssa_controller";
32972#endif /* FREECIV_JSON_CONNECTION */
32973
32974 {
32975 int readin;
32976
32977 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
32978 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
32979 }
32980 real_packet->ssa_controller = readin;
32981 }
32982
32983#ifdef FREECIV_JSON_CONNECTION
32984 field_addr.name = "paradropped";
32985#endif /* FREECIV_JSON_CONNECTION */
32986
32987 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
32988 RECEIVE_PACKET_FIELD_ERROR(paradropped);
32989 }
32990
32991#ifdef FREECIV_JSON_CONNECTION
32992 field_addr.name = "occupied";
32993#endif /* FREECIV_JSON_CONNECTION */
32994
32995 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
32997 }
32998
32999#ifdef FREECIV_JSON_CONNECTION
33000 field_addr.name = "transported";
33001#endif /* FREECIV_JSON_CONNECTION */
33002
33003 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
33004 RECEIVE_PACKET_FIELD_ERROR(transported);
33005 }
33006
33007#ifdef FREECIV_JSON_CONNECTION
33008 field_addr.name = "done_moving";
33009#endif /* FREECIV_JSON_CONNECTION */
33010
33011 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
33012 RECEIVE_PACKET_FIELD_ERROR(done_moving);
33013 }
33014
33015#ifdef FREECIV_JSON_CONNECTION
33016 field_addr.name = "stay";
33017#endif /* FREECIV_JSON_CONNECTION */
33018
33019 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
33021 }
33022
33023#ifdef FREECIV_JSON_CONNECTION
33024 field_addr.name = "birth_turn";
33025#endif /* FREECIV_JSON_CONNECTION */
33026
33027 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
33028 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
33029 }
33030
33031#ifdef FREECIV_JSON_CONNECTION
33032 field_addr.name = "current_form_turn";
33033#endif /* FREECIV_JSON_CONNECTION */
33034
33035 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
33036 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
33037 }
33038
33039#ifdef FREECIV_JSON_CONNECTION
33040 field_addr.name = "type";
33041#endif /* FREECIV_JSON_CONNECTION */
33042
33043 {
33044 int readin;
33045
33046 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
33048 }
33049 real_packet->type = readin;
33050 }
33051
33052#ifdef FREECIV_JSON_CONNECTION
33053 field_addr.name = "transported_by";
33054#endif /* FREECIV_JSON_CONNECTION */
33055
33056 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
33057 RECEIVE_PACKET_FIELD_ERROR(transported_by);
33058 }
33059
33060#ifdef FREECIV_JSON_CONNECTION
33061 field_addr.name = "carrying";
33062#endif /* FREECIV_JSON_CONNECTION */
33063
33064 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
33066 }
33067
33068#ifdef FREECIV_JSON_CONNECTION
33069 field_addr.name = "movesleft";
33070#endif /* FREECIV_JSON_CONNECTION */
33071
33072 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
33073 RECEIVE_PACKET_FIELD_ERROR(movesleft);
33074 }
33075
33076#ifdef FREECIV_JSON_CONNECTION
33077 field_addr.name = "hp";
33078#endif /* FREECIV_JSON_CONNECTION */
33079
33080 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
33082 }
33083
33084#ifdef FREECIV_JSON_CONNECTION
33085 field_addr.name = "fuel";
33086#endif /* FREECIV_JSON_CONNECTION */
33087
33088 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
33090 }
33091
33092#ifdef FREECIV_JSON_CONNECTION
33093 field_addr.name = "activity_count";
33094#endif /* FREECIV_JSON_CONNECTION */
33095
33096 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
33097 RECEIVE_PACKET_FIELD_ERROR(activity_count);
33098 }
33099
33100#ifdef FREECIV_JSON_CONNECTION
33101 field_addr.name = "changed_from_count";
33102#endif /* FREECIV_JSON_CONNECTION */
33103
33104 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
33105 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
33106 }
33107
33108#ifdef FREECIV_JSON_CONNECTION
33109 field_addr.name = "goto_tile";
33110#endif /* FREECIV_JSON_CONNECTION */
33111
33112 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
33113 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
33114 }
33115
33116#ifdef FREECIV_JSON_CONNECTION
33117 field_addr.name = "activity";
33118#endif /* FREECIV_JSON_CONNECTION */
33119
33120 {
33121 int readin;
33122
33123 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33125 }
33126 real_packet->activity = readin;
33127 }
33128
33129#ifdef FREECIV_JSON_CONNECTION
33130 field_addr.name = "activity_tgt";
33131#endif /* FREECIV_JSON_CONNECTION */
33132
33133 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
33134 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
33135 }
33136
33137#ifdef FREECIV_JSON_CONNECTION
33138 field_addr.name = "changed_from";
33139#endif /* FREECIV_JSON_CONNECTION */
33140
33141 {
33142 int readin;
33143
33144 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33145 RECEIVE_PACKET_FIELD_ERROR(changed_from);
33146 }
33147 real_packet->changed_from = readin;
33148 }
33149
33150#ifdef FREECIV_JSON_CONNECTION
33151 field_addr.name = "changed_from_tgt";
33152#endif /* FREECIV_JSON_CONNECTION */
33153
33154 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
33155 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
33156 }
33157
33158#ifdef FREECIV_JSON_CONNECTION
33159 field_addr.name = "battlegroup";
33160#endif /* FREECIV_JSON_CONNECTION */
33161
33162 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
33163 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
33164 }
33165
33166#ifdef FREECIV_JSON_CONNECTION
33167 field_addr.name = "has_orders";
33168#endif /* FREECIV_JSON_CONNECTION */
33169
33170 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_orders)) {
33171 RECEIVE_PACKET_FIELD_ERROR(has_orders);
33172 }
33173
33174#ifdef FREECIV_JSON_CONNECTION
33175 field_addr.name = "orders_length";
33176#endif /* FREECIV_JSON_CONNECTION */
33177
33178 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
33179 RECEIVE_PACKET_FIELD_ERROR(orders_length);
33180 }
33181
33182#ifdef FREECIV_JSON_CONNECTION
33183 field_addr.name = "orders_index";
33184#endif /* FREECIV_JSON_CONNECTION */
33185
33186 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
33187 RECEIVE_PACKET_FIELD_ERROR(orders_index);
33188 }
33189
33190#ifdef FREECIV_JSON_CONNECTION
33191 field_addr.name = "orders_repeat";
33192#endif /* FREECIV_JSON_CONNECTION */
33193
33194 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_repeat)) {
33195 RECEIVE_PACKET_FIELD_ERROR(orders_repeat);
33196 }
33197
33198#ifdef FREECIV_JSON_CONNECTION
33199 field_addr.name = "orders_vigilant";
33200#endif /* FREECIV_JSON_CONNECTION */
33201
33202 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_vigilant)) {
33203 RECEIVE_PACKET_FIELD_ERROR(orders_vigilant);
33204 }
33205
33206#ifdef FREECIV_JSON_CONNECTION
33207 field_addr.name = "orders";
33208#endif /* FREECIV_JSON_CONNECTION */
33209
33210 {
33211 int i;
33212
33213 if (real_packet->orders_length > MAX_LEN_ROUTE) {
33214 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
33215 }
33216
33217#ifdef FREECIV_JSON_CONNECTION
33218 /* Enter array. */
33219 field_addr.sub_location = plocation_elem_new(0);
33220#endif /* FREECIV_JSON_CONNECTION */
33221
33222 for (i = 0; i < real_packet->orders_length; i++) {
33223#ifdef FREECIV_JSON_CONNECTION
33224 /* Next array element */
33225 field_addr.sub_location->number = i;
33226#endif /* FREECIV_JSON_CONNECTION */
33227
33228 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
33230 }
33231 }
33232
33233#ifdef FREECIV_JSON_CONNECTION
33234 /* Exit array. */
33235 FC_FREE(field_addr.sub_location);
33236#endif /* FREECIV_JSON_CONNECTION */
33237 }
33238
33239#ifdef FREECIV_JSON_CONNECTION
33240 field_addr.name = "action_decision_want";
33241#endif /* FREECIV_JSON_CONNECTION */
33242
33243 {
33244 int readin;
33245
33246 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33247 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
33248 }
33249 real_packet->action_decision_want = readin;
33250 }
33251
33252#ifdef FREECIV_JSON_CONNECTION
33253 field_addr.name = "action_decision_tile";
33254#endif /* FREECIV_JSON_CONNECTION */
33255
33256 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
33257 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
33258 }
33259#endif /* FREECIV_DELTA_PROTOCOL */
33260
33262#undef FREE_PACKET_STRUCT
33263}
33264
33265static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
33266{
33267 const struct packet_unit_info *real_packet = packet;
33268 int e;
33270
33271 log_packet_detailed("packet_unit_info_100: sending info about (%d)",
33272 real_packet->id);
33273
33274#ifdef FREECIV_DELTA_PROTOCOL
33276 struct packet_unit_info *old;
33277 bool differ;
33278 int different = 0;
33279 struct genhash **hash = pc->phs.sent + PACKET_UNIT_INFO;
33280
33281 if (nullptr == *hash) {
33283 nullptr, nullptr, nullptr, destroy_packet_unit_info);
33284 }
33285 BV_CLR_ALL(fields);
33286
33287 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33288 old = fc_malloc(sizeof(*old));
33289 /* temporary bitcopy just to insert correctly */
33290 *old = *real_packet;
33293 different = 1; /* Force to send. */
33294 }
33295
33296 differ = (old->owner != real_packet->owner);
33297 if (differ) {
33298 different++;
33299 BV_SET(fields, 0);
33300 }
33301
33302 differ = (old->nationality != real_packet->nationality);
33303 if (differ) {
33304 different++;
33305 BV_SET(fields, 1);
33306 }
33307
33308 differ = (old->tile != real_packet->tile);
33309 if (differ) {
33310 different++;
33311 BV_SET(fields, 2);
33312 }
33313
33314 differ = (old->facing != real_packet->facing);
33315 if (differ) {
33316 different++;
33317 BV_SET(fields, 3);
33318 }
33319
33320 differ = (old->homecity != real_packet->homecity);
33321 if (differ) {
33322 different++;
33323 BV_SET(fields, 4);
33324 }
33325
33326 differ = FALSE;
33327 {
33328 int i;
33329
33330 for (i = 0; i < O_LAST; i++) {
33331 differ = (old->upkeep[i] != real_packet->upkeep[i]);
33332 if (differ) {
33333 break;
33334 }
33335 }
33336 }
33337 if (differ) {
33338 different++;
33339 BV_SET(fields, 5);
33340 }
33341
33342 differ = (old->veteran != real_packet->veteran);
33343 if (differ) {
33344 different++;
33345 BV_SET(fields, 6);
33346 }
33347
33348 differ = (old->ssa_controller != real_packet->ssa_controller);
33349 if (differ) {
33350 different++;
33351 BV_SET(fields, 7);
33352 }
33353
33354 differ = (old->paradropped != real_packet->paradropped);
33355 if (differ) {
33356 different++;
33357 }
33358 /* folded into head */
33359 if (real_packet->paradropped) {
33360 BV_SET(fields, 8);
33361 }
33362
33363 differ = (old->occupied != real_packet->occupied);
33364 if (differ) {
33365 different++;
33366 }
33367 /* folded into head */
33368 if (real_packet->occupied) {
33369 BV_SET(fields, 9);
33370 }
33371
33372 differ = (old->transported != real_packet->transported);
33373 if (differ) {
33374 different++;
33375 }
33376 /* folded into head */
33377 if (real_packet->transported) {
33378 BV_SET(fields, 10);
33379 }
33380
33381 differ = (old->done_moving != real_packet->done_moving);
33382 if (differ) {
33383 different++;
33384 }
33385 /* folded into head */
33386 if (real_packet->done_moving) {
33387 BV_SET(fields, 11);
33388 }
33389
33390 differ = (old->stay != real_packet->stay);
33391 if (differ) {
33392 different++;
33393 }
33394 /* folded into head */
33395 if (real_packet->stay) {
33396 BV_SET(fields, 12);
33397 }
33398
33399 differ = (old->birth_turn != real_packet->birth_turn);
33400 if (differ) {
33401 different++;
33402 BV_SET(fields, 13);
33403 }
33404
33405 differ = (old->current_form_turn != real_packet->current_form_turn);
33406 if (differ) {
33407 different++;
33408 BV_SET(fields, 14);
33409 }
33410
33411 differ = (old->type != real_packet->type);
33412 if (differ) {
33413 different++;
33414 BV_SET(fields, 15);
33415 }
33416
33417 differ = (old->transported_by != real_packet->transported_by);
33418 if (differ) {
33419 different++;
33420 BV_SET(fields, 16);
33421 }
33422
33423 differ = (old->carrying != real_packet->carrying);
33424 if (differ) {
33425 different++;
33426 BV_SET(fields, 17);
33427 }
33428
33429 differ = (old->movesleft != real_packet->movesleft);
33430 if (differ) {
33431 different++;
33432 BV_SET(fields, 18);
33433 }
33434
33435 differ = (old->hp != real_packet->hp);
33436 if (differ) {
33437 different++;
33438 BV_SET(fields, 19);
33439 }
33440
33441 differ = (old->fuel != real_packet->fuel);
33442 if (differ) {
33443 different++;
33444 BV_SET(fields, 20);
33445 }
33446
33447 differ = (old->activity_count != real_packet->activity_count);
33448 if (differ) {
33449 different++;
33450 BV_SET(fields, 21);
33451 }
33452
33453 differ = (old->changed_from_count != real_packet->changed_from_count);
33454 if (differ) {
33455 different++;
33456 BV_SET(fields, 22);
33457 }
33458
33459 differ = (old->goto_tile != real_packet->goto_tile);
33460 if (differ) {
33461 different++;
33462 BV_SET(fields, 23);
33463 }
33464
33465 differ = (old->activity != real_packet->activity);
33466 if (differ) {
33467 different++;
33468 BV_SET(fields, 24);
33469 }
33470
33471 differ = (old->activity_tgt != real_packet->activity_tgt);
33472 if (differ) {
33473 different++;
33474 BV_SET(fields, 25);
33475 }
33476
33477 differ = (old->changed_from != real_packet->changed_from);
33478 if (differ) {
33479 different++;
33480 BV_SET(fields, 26);
33481 }
33482
33483 differ = (old->changed_from_tgt != real_packet->changed_from_tgt);
33484 if (differ) {
33485 different++;
33486 BV_SET(fields, 27);
33487 }
33488
33489 differ = (old->battlegroup != real_packet->battlegroup);
33490 if (differ) {
33491 different++;
33492 BV_SET(fields, 28);
33493 }
33494
33495 differ = (old->has_orders != real_packet->has_orders);
33496 if (differ) {
33497 different++;
33498 }
33499 /* folded into head */
33500 if (real_packet->has_orders) {
33501 BV_SET(fields, 29);
33502 }
33503
33504 differ = (old->orders_length != real_packet->orders_length);
33505 if (differ) {
33506 different++;
33507 BV_SET(fields, 30);
33508 }
33509
33510 differ = (old->orders_index != real_packet->orders_index);
33511 if (differ) {
33512 different++;
33513 BV_SET(fields, 31);
33514 }
33515
33516 differ = (old->orders_repeat != real_packet->orders_repeat);
33517 if (differ) {
33518 different++;
33519 }
33520 /* folded into head */
33521 if (real_packet->orders_repeat) {
33522 BV_SET(fields, 32);
33523 }
33524
33525 differ = (old->orders_vigilant != real_packet->orders_vigilant);
33526 if (differ) {
33527 different++;
33528 }
33529 /* folded into head */
33530 if (real_packet->orders_vigilant) {
33531 BV_SET(fields, 33);
33532 }
33533
33534 differ = (old->orders_length != real_packet->orders_length);
33535 if (!differ) {
33536 int i;
33537
33538 for (i = 0; i < old->orders_length; i++) {
33539 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
33540 if (differ) {
33541 break;
33542 }
33543 }
33544 }
33545 if (differ) {
33546 different++;
33547 BV_SET(fields, 34);
33548 }
33549
33550 differ = (old->action_decision_want != real_packet->action_decision_want);
33551 if (differ) {
33552 different++;
33553 BV_SET(fields, 35);
33554 }
33555
33556 differ = (old->action_decision_tile != real_packet->action_decision_tile);
33557 if (differ) {
33558 different++;
33559 BV_SET(fields, 36);
33560 }
33561
33562 if (different == 0) {
33563 log_packet_detailed(" no change -> discard");
33565 }
33566#endif /* FREECIV_DELTA_PROTOCOL */
33567
33568#ifdef FREECIV_JSON_CONNECTION
33569 struct plocation field_addr;
33570 {
33571 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
33574 }
33575#endif /* FREECIV_JSON_CONNECTION */
33576
33577#ifdef FREECIV_JSON_CONNECTION
33578 field_addr.name = "id";
33579#endif /* FREECIV_JSON_CONNECTION */
33580 e = 0;
33581
33582 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
33583
33584 if (e) {
33585 log_packet_detailed("'id' field error detected");
33586 }
33587
33588#ifdef FREECIV_DELTA_PROTOCOL
33589#ifdef FREECIV_JSON_CONNECTION
33590 field_addr.name = "fields";
33591#endif /* FREECIV_JSON_CONNECTION */
33592 e = 0;
33593 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33594 if (e) {
33595 log_packet_detailed("fields bitvector error detected");
33596 }
33597
33598 if (BV_ISSET(fields, 0)) {
33599 log_packet_detailed(" field 'owner' has changed");
33600
33601#ifdef FREECIV_JSON_CONNECTION
33602 field_addr.name = "owner";
33603#endif /* FREECIV_JSON_CONNECTION */
33604 e = 0;
33605
33606 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
33607
33608 if (e) {
33609 log_packet_detailed("'owner' field error detected");
33610 }
33611 }
33612
33613 if (BV_ISSET(fields, 1)) {
33614 log_packet_detailed(" field 'nationality' has changed");
33615
33616#ifdef FREECIV_JSON_CONNECTION
33617 field_addr.name = "nationality";
33618#endif /* FREECIV_JSON_CONNECTION */
33619 e = 0;
33620
33621 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
33622
33623 if (e) {
33624 log_packet_detailed("'nationality' field error detected");
33625 }
33626 }
33627
33628 if (BV_ISSET(fields, 2)) {
33629 log_packet_detailed(" field 'tile' has changed");
33630
33631#ifdef FREECIV_JSON_CONNECTION
33632 field_addr.name = "tile";
33633#endif /* FREECIV_JSON_CONNECTION */
33634 e = 0;
33635
33636 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
33637
33638 if (e) {
33639 log_packet_detailed("'tile' field error detected");
33640 }
33641 }
33642
33643 if (BV_ISSET(fields, 3)) {
33644 log_packet_detailed(" field 'facing' has changed");
33645
33646#ifdef FREECIV_JSON_CONNECTION
33647 field_addr.name = "facing";
33648#endif /* FREECIV_JSON_CONNECTION */
33649 e = 0;
33650
33651 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
33652
33653 if (e) {
33654 log_packet_detailed("'facing' field error detected");
33655 }
33656 }
33657
33658 if (BV_ISSET(fields, 4)) {
33659 log_packet_detailed(" field 'homecity' has changed");
33660
33661#ifdef FREECIV_JSON_CONNECTION
33662 field_addr.name = "homecity";
33663#endif /* FREECIV_JSON_CONNECTION */
33664 e = 0;
33665
33666 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
33667
33668 if (e) {
33669 log_packet_detailed("'homecity' field error detected");
33670 }
33671 }
33672
33673 if (BV_ISSET(fields, 5)) {
33674 log_packet_detailed(" field 'upkeep' has changed");
33675
33676#ifdef FREECIV_JSON_CONNECTION
33677 field_addr.name = "upkeep";
33678#endif /* FREECIV_JSON_CONNECTION */
33679 e = 0;
33680
33681 {
33682 int i;
33683
33684#ifdef FREECIV_JSON_CONNECTION
33685 /* Create the array. */
33686 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
33687
33688 /* Enter array. */
33689 field_addr.sub_location = plocation_elem_new(0);
33690#endif /* FREECIV_JSON_CONNECTION */
33691
33692 for (i = 0; i < O_LAST; i++) {
33693#ifdef FREECIV_JSON_CONNECTION
33694 /* Next array element. */
33695 field_addr.sub_location->number = i;
33696#endif /* FREECIV_JSON_CONNECTION */
33697
33698 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
33699 }
33700
33701#ifdef FREECIV_JSON_CONNECTION
33702 /* Exit array. */
33703 FC_FREE(field_addr.sub_location);
33704#endif /* FREECIV_JSON_CONNECTION */
33705 }
33706
33707 if (e) {
33708 log_packet_detailed("'upkeep' field error detected");
33709 }
33710 }
33711
33712 if (BV_ISSET(fields, 6)) {
33713 log_packet_detailed(" field 'veteran' has changed");
33714
33715#ifdef FREECIV_JSON_CONNECTION
33716 field_addr.name = "veteran";
33717#endif /* FREECIV_JSON_CONNECTION */
33718 e = 0;
33719
33720 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
33721
33722 if (e) {
33723 log_packet_detailed("'veteran' field error detected");
33724 }
33725 }
33726
33727 if (BV_ISSET(fields, 7)) {
33728 log_packet_detailed(" field 'ssa_controller' has changed");
33729
33730#ifdef FREECIV_JSON_CONNECTION
33731 field_addr.name = "ssa_controller";
33732#endif /* FREECIV_JSON_CONNECTION */
33733 e = 0;
33734
33735 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
33736
33737 if (e) {
33738 log_packet_detailed("'ssa_controller' field error detected");
33739 }
33740 }
33741
33742 /* field 8 is folded into the header */
33743
33744 /* field 9 is folded into the header */
33745
33746 /* field 10 is folded into the header */
33747
33748 /* field 11 is folded into the header */
33749
33750 /* field 12 is folded into the header */
33751
33752 if (BV_ISSET(fields, 13)) {
33753 log_packet_detailed(" field 'birth_turn' has changed");
33754
33755#ifdef FREECIV_JSON_CONNECTION
33756 field_addr.name = "birth_turn";
33757#endif /* FREECIV_JSON_CONNECTION */
33758 e = 0;
33759
33760 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
33761
33762 if (e) {
33763 log_packet_detailed("'birth_turn' field error detected");
33764 }
33765 }
33766
33767 if (BV_ISSET(fields, 14)) {
33768 log_packet_detailed(" field 'current_form_turn' has changed");
33769
33770#ifdef FREECIV_JSON_CONNECTION
33771 field_addr.name = "current_form_turn";
33772#endif /* FREECIV_JSON_CONNECTION */
33773 e = 0;
33774
33775 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
33776
33777 if (e) {
33778 log_packet_detailed("'current_form_turn' field error detected");
33779 }
33780 }
33781
33782 if (BV_ISSET(fields, 15)) {
33783 log_packet_detailed(" field 'type' has changed");
33784
33785#ifdef FREECIV_JSON_CONNECTION
33786 field_addr.name = "type";
33787#endif /* FREECIV_JSON_CONNECTION */
33788 e = 0;
33789
33790 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
33791
33792 if (e) {
33793 log_packet_detailed("'type' field error detected");
33794 }
33795 }
33796
33797 if (BV_ISSET(fields, 16)) {
33798 log_packet_detailed(" field 'transported_by' has changed");
33799
33800#ifdef FREECIV_JSON_CONNECTION
33801 field_addr.name = "transported_by";
33802#endif /* FREECIV_JSON_CONNECTION */
33803 e = 0;
33804
33805 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
33806
33807 if (e) {
33808 log_packet_detailed("'transported_by' field error detected");
33809 }
33810 }
33811
33812 if (BV_ISSET(fields, 17)) {
33813 log_packet_detailed(" field 'carrying' has changed");
33814
33815#ifdef FREECIV_JSON_CONNECTION
33816 field_addr.name = "carrying";
33817#endif /* FREECIV_JSON_CONNECTION */
33818 e = 0;
33819
33820 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
33821
33822 if (e) {
33823 log_packet_detailed("'carrying' field error detected");
33824 }
33825 }
33826
33827 if (BV_ISSET(fields, 18)) {
33828 log_packet_detailed(" field 'movesleft' has changed");
33829
33830#ifdef FREECIV_JSON_CONNECTION
33831 field_addr.name = "movesleft";
33832#endif /* FREECIV_JSON_CONNECTION */
33833 e = 0;
33834
33835 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
33836
33837 if (e) {
33838 log_packet_detailed("'movesleft' field error detected");
33839 }
33840 }
33841
33842 if (BV_ISSET(fields, 19)) {
33843 log_packet_detailed(" field 'hp' has changed");
33844
33845#ifdef FREECIV_JSON_CONNECTION
33846 field_addr.name = "hp";
33847#endif /* FREECIV_JSON_CONNECTION */
33848 e = 0;
33849
33850 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
33851
33852 if (e) {
33853 log_packet_detailed("'hp' field error detected");
33854 }
33855 }
33856
33857 if (BV_ISSET(fields, 20)) {
33858 log_packet_detailed(" field 'fuel' has changed");
33859
33860#ifdef FREECIV_JSON_CONNECTION
33861 field_addr.name = "fuel";
33862#endif /* FREECIV_JSON_CONNECTION */
33863 e = 0;
33864
33865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
33866
33867 if (e) {
33868 log_packet_detailed("'fuel' field error detected");
33869 }
33870 }
33871
33872 if (BV_ISSET(fields, 21)) {
33873 log_packet_detailed(" field 'activity_count' has changed");
33874
33875#ifdef FREECIV_JSON_CONNECTION
33876 field_addr.name = "activity_count";
33877#endif /* FREECIV_JSON_CONNECTION */
33878 e = 0;
33879
33880 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
33881
33882 if (e) {
33883 log_packet_detailed("'activity_count' field error detected");
33884 }
33885 }
33886
33887 if (BV_ISSET(fields, 22)) {
33888 log_packet_detailed(" field 'changed_from_count' has changed");
33889
33890#ifdef FREECIV_JSON_CONNECTION
33891 field_addr.name = "changed_from_count";
33892#endif /* FREECIV_JSON_CONNECTION */
33893 e = 0;
33894
33895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
33896
33897 if (e) {
33898 log_packet_detailed("'changed_from_count' field error detected");
33899 }
33900 }
33901
33902 if (BV_ISSET(fields, 23)) {
33903 log_packet_detailed(" field 'goto_tile' has changed");
33904
33905#ifdef FREECIV_JSON_CONNECTION
33906 field_addr.name = "goto_tile";
33907#endif /* FREECIV_JSON_CONNECTION */
33908 e = 0;
33909
33910 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
33911
33912 if (e) {
33913 log_packet_detailed("'goto_tile' field error detected");
33914 }
33915 }
33916
33917 if (BV_ISSET(fields, 24)) {
33918 log_packet_detailed(" field 'activity' has changed");
33919
33920#ifdef FREECIV_JSON_CONNECTION
33921 field_addr.name = "activity";
33922#endif /* FREECIV_JSON_CONNECTION */
33923 e = 0;
33924
33925 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
33926
33927 if (e) {
33928 log_packet_detailed("'activity' field error detected");
33929 }
33930 }
33931
33932 if (BV_ISSET(fields, 25)) {
33933 log_packet_detailed(" field 'activity_tgt' has changed");
33934
33935#ifdef FREECIV_JSON_CONNECTION
33936 field_addr.name = "activity_tgt";
33937#endif /* FREECIV_JSON_CONNECTION */
33938 e = 0;
33939
33940 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
33941
33942 if (e) {
33943 log_packet_detailed("'activity_tgt' field error detected");
33944 }
33945 }
33946
33947 if (BV_ISSET(fields, 26)) {
33948 log_packet_detailed(" field 'changed_from' has changed");
33949
33950#ifdef FREECIV_JSON_CONNECTION
33951 field_addr.name = "changed_from";
33952#endif /* FREECIV_JSON_CONNECTION */
33953 e = 0;
33954
33955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
33956
33957 if (e) {
33958 log_packet_detailed("'changed_from' field error detected");
33959 }
33960 }
33961
33962 if (BV_ISSET(fields, 27)) {
33963 log_packet_detailed(" field 'changed_from_tgt' has changed");
33964
33965#ifdef FREECIV_JSON_CONNECTION
33966 field_addr.name = "changed_from_tgt";
33967#endif /* FREECIV_JSON_CONNECTION */
33968 e = 0;
33969
33970 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
33971
33972 if (e) {
33973 log_packet_detailed("'changed_from_tgt' field error detected");
33974 }
33975 }
33976
33977 if (BV_ISSET(fields, 28)) {
33978 log_packet_detailed(" field 'battlegroup' has changed");
33979
33980#ifdef FREECIV_JSON_CONNECTION
33981 field_addr.name = "battlegroup";
33982#endif /* FREECIV_JSON_CONNECTION */
33983 e = 0;
33984
33985 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
33986
33987 if (e) {
33988 log_packet_detailed("'battlegroup' field error detected");
33989 }
33990 }
33991
33992 /* field 29 is folded into the header */
33993
33994 if (BV_ISSET(fields, 30)) {
33995 log_packet_detailed(" field 'orders_length' has changed");
33996
33997#ifdef FREECIV_JSON_CONNECTION
33998 field_addr.name = "orders_length";
33999#endif /* FREECIV_JSON_CONNECTION */
34000 e = 0;
34001
34002 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
34003
34004 if (e) {
34005 log_packet_detailed("'orders_length' field error detected");
34006 }
34007 }
34008
34009 if (BV_ISSET(fields, 31)) {
34010 log_packet_detailed(" field 'orders_index' has changed");
34011
34012#ifdef FREECIV_JSON_CONNECTION
34013 field_addr.name = "orders_index";
34014#endif /* FREECIV_JSON_CONNECTION */
34015 e = 0;
34016
34017 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
34018
34019 if (e) {
34020 log_packet_detailed("'orders_index' field error detected");
34021 }
34022 }
34023
34024 /* field 32 is folded into the header */
34025
34026 /* field 33 is folded into the header */
34027
34028 if (BV_ISSET(fields, 34)) {
34029 log_packet_detailed(" field 'orders' has changed");
34030
34031#ifdef FREECIV_JSON_CONNECTION
34032 field_addr.name = "orders";
34033#endif /* FREECIV_JSON_CONNECTION */
34034 e = 0;
34035
34036 {
34037 int i;
34038
34039#ifdef FREECIV_JSON_CONNECTION
34040 /* Create the array. */
34041 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
34042
34043 /* Enter array. */
34044 field_addr.sub_location = plocation_elem_new(0);
34045#endif /* FREECIV_JSON_CONNECTION */
34046
34047 for (i = 0; i < real_packet->orders_length; i++) {
34048#ifdef FREECIV_JSON_CONNECTION
34049 /* Next array element. */
34050 field_addr.sub_location->number = i;
34051#endif /* FREECIV_JSON_CONNECTION */
34052
34053 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
34054 }
34055
34056#ifdef FREECIV_JSON_CONNECTION
34057 /* Exit array. */
34058 FC_FREE(field_addr.sub_location);
34059#endif /* FREECIV_JSON_CONNECTION */
34060 }
34061
34062 if (e) {
34063 log_packet_detailed("'orders' field error detected");
34064 }
34065 }
34066
34067 if (BV_ISSET(fields, 35)) {
34068 log_packet_detailed(" field 'action_decision_want' has changed");
34069
34070#ifdef FREECIV_JSON_CONNECTION
34071 field_addr.name = "action_decision_want";
34072#endif /* FREECIV_JSON_CONNECTION */
34073 e = 0;
34074
34075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
34076
34077 if (e) {
34078 log_packet_detailed("'action_decision_want' field error detected");
34079 }
34080 }
34081
34082 if (BV_ISSET(fields, 36)) {
34083 log_packet_detailed(" field 'action_decision_tile' has changed");
34084
34085#ifdef FREECIV_JSON_CONNECTION
34086 field_addr.name = "action_decision_tile";
34087#endif /* FREECIV_JSON_CONNECTION */
34088 e = 0;
34089
34090 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
34091
34092 if (e) {
34093 log_packet_detailed("'action_decision_tile' field error detected");
34094 }
34095 }
34096
34097 *old = *real_packet;
34098
34099 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
34100 if (nullptr != *hash) {
34102 }
34103
34104#else /* FREECIV_DELTA_PROTOCOL */
34105#ifdef FREECIV_JSON_CONNECTION
34106 field_addr.name = "owner";
34107#endif /* FREECIV_JSON_CONNECTION */
34108 e = 0;
34109
34110 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
34111
34112 if (e) {
34113 log_packet_detailed("'owner' field error detected");
34114 }
34115
34116#ifdef FREECIV_JSON_CONNECTION
34117 field_addr.name = "nationality";
34118#endif /* FREECIV_JSON_CONNECTION */
34119 e = 0;
34120
34121 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nationality);
34122
34123 if (e) {
34124 log_packet_detailed("'nationality' field error detected");
34125 }
34126
34127#ifdef FREECIV_JSON_CONNECTION
34128 field_addr.name = "tile";
34129#endif /* FREECIV_JSON_CONNECTION */
34130 e = 0;
34131
34132 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
34133
34134 if (e) {
34135 log_packet_detailed("'tile' field error detected");
34136 }
34137
34138#ifdef FREECIV_JSON_CONNECTION
34139 field_addr.name = "facing";
34140#endif /* FREECIV_JSON_CONNECTION */
34141 e = 0;
34142
34143 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
34144
34145 if (e) {
34146 log_packet_detailed("'facing' field error detected");
34147 }
34148
34149#ifdef FREECIV_JSON_CONNECTION
34150 field_addr.name = "homecity";
34151#endif /* FREECIV_JSON_CONNECTION */
34152 e = 0;
34153
34154 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
34155
34156 if (e) {
34157 log_packet_detailed("'homecity' field error detected");
34158 }
34159
34160#ifdef FREECIV_JSON_CONNECTION
34161 field_addr.name = "upkeep";
34162#endif /* FREECIV_JSON_CONNECTION */
34163 e = 0;
34164
34165 {
34166 int i;
34167
34168#ifdef FREECIV_JSON_CONNECTION
34169 /* Create the array. */
34170 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
34171
34172 /* Enter array. */
34173 field_addr.sub_location = plocation_elem_new(0);
34174#endif /* FREECIV_JSON_CONNECTION */
34175
34176 for (i = 0; i < O_LAST; i++) {
34177#ifdef FREECIV_JSON_CONNECTION
34178 /* Next array element. */
34179 field_addr.sub_location->number = i;
34180#endif /* FREECIV_JSON_CONNECTION */
34181
34182 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
34183 }
34184
34185#ifdef FREECIV_JSON_CONNECTION
34186 /* Exit array. */
34187 FC_FREE(field_addr.sub_location);
34188#endif /* FREECIV_JSON_CONNECTION */
34189 }
34190
34191 if (e) {
34192 log_packet_detailed("'upkeep' field error detected");
34193 }
34194
34195#ifdef FREECIV_JSON_CONNECTION
34196 field_addr.name = "veteran";
34197#endif /* FREECIV_JSON_CONNECTION */
34198 e = 0;
34199
34200 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
34201
34202 if (e) {
34203 log_packet_detailed("'veteran' field error detected");
34204 }
34205
34206#ifdef FREECIV_JSON_CONNECTION
34207 field_addr.name = "ssa_controller";
34208#endif /* FREECIV_JSON_CONNECTION */
34209 e = 0;
34210
34211 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
34212
34213 if (e) {
34214 log_packet_detailed("'ssa_controller' field error detected");
34215 }
34216
34217#ifdef FREECIV_JSON_CONNECTION
34218 field_addr.name = "paradropped";
34219#endif /* FREECIV_JSON_CONNECTION */
34220 e = 0;
34221
34222 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
34223
34224 if (e) {
34225 log_packet_detailed("'paradropped' field error detected");
34226 }
34227
34228#ifdef FREECIV_JSON_CONNECTION
34229 field_addr.name = "occupied";
34230#endif /* FREECIV_JSON_CONNECTION */
34231 e = 0;
34232
34233 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
34234
34235 if (e) {
34236 log_packet_detailed("'occupied' field error detected");
34237 }
34238
34239#ifdef FREECIV_JSON_CONNECTION
34240 field_addr.name = "transported";
34241#endif /* FREECIV_JSON_CONNECTION */
34242 e = 0;
34243
34244 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
34245
34246 if (e) {
34247 log_packet_detailed("'transported' field error detected");
34248 }
34249
34250#ifdef FREECIV_JSON_CONNECTION
34251 field_addr.name = "done_moving";
34252#endif /* FREECIV_JSON_CONNECTION */
34253 e = 0;
34254
34255 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
34256
34257 if (e) {
34258 log_packet_detailed("'done_moving' field error detected");
34259 }
34260
34261#ifdef FREECIV_JSON_CONNECTION
34262 field_addr.name = "stay";
34263#endif /* FREECIV_JSON_CONNECTION */
34264 e = 0;
34265
34266 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
34267
34268 if (e) {
34269 log_packet_detailed("'stay' field error detected");
34270 }
34271
34272#ifdef FREECIV_JSON_CONNECTION
34273 field_addr.name = "birth_turn";
34274#endif /* FREECIV_JSON_CONNECTION */
34275 e = 0;
34276
34277 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
34278
34279 if (e) {
34280 log_packet_detailed("'birth_turn' field error detected");
34281 }
34282
34283#ifdef FREECIV_JSON_CONNECTION
34284 field_addr.name = "current_form_turn";
34285#endif /* FREECIV_JSON_CONNECTION */
34286 e = 0;
34287
34288 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
34289
34290 if (e) {
34291 log_packet_detailed("'current_form_turn' field error detected");
34292 }
34293
34294#ifdef FREECIV_JSON_CONNECTION
34295 field_addr.name = "type";
34296#endif /* FREECIV_JSON_CONNECTION */
34297 e = 0;
34298
34299 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34300
34301 if (e) {
34302 log_packet_detailed("'type' field error detected");
34303 }
34304
34305#ifdef FREECIV_JSON_CONNECTION
34306 field_addr.name = "transported_by";
34307#endif /* FREECIV_JSON_CONNECTION */
34308 e = 0;
34309
34310 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
34311
34312 if (e) {
34313 log_packet_detailed("'transported_by' field error detected");
34314 }
34315
34316#ifdef FREECIV_JSON_CONNECTION
34317 field_addr.name = "carrying";
34318#endif /* FREECIV_JSON_CONNECTION */
34319 e = 0;
34320
34321 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
34322
34323 if (e) {
34324 log_packet_detailed("'carrying' field error detected");
34325 }
34326
34327#ifdef FREECIV_JSON_CONNECTION
34328 field_addr.name = "movesleft";
34329#endif /* FREECIV_JSON_CONNECTION */
34330 e = 0;
34331
34332 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
34333
34334 if (e) {
34335 log_packet_detailed("'movesleft' field error detected");
34336 }
34337
34338#ifdef FREECIV_JSON_CONNECTION
34339 field_addr.name = "hp";
34340#endif /* FREECIV_JSON_CONNECTION */
34341 e = 0;
34342
34343 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
34344
34345 if (e) {
34346 log_packet_detailed("'hp' field error detected");
34347 }
34348
34349#ifdef FREECIV_JSON_CONNECTION
34350 field_addr.name = "fuel";
34351#endif /* FREECIV_JSON_CONNECTION */
34352 e = 0;
34353
34354 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
34355
34356 if (e) {
34357 log_packet_detailed("'fuel' field error detected");
34358 }
34359
34360#ifdef FREECIV_JSON_CONNECTION
34361 field_addr.name = "activity_count";
34362#endif /* FREECIV_JSON_CONNECTION */
34363 e = 0;
34364
34365 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
34366
34367 if (e) {
34368 log_packet_detailed("'activity_count' field error detected");
34369 }
34370
34371#ifdef FREECIV_JSON_CONNECTION
34372 field_addr.name = "changed_from_count";
34373#endif /* FREECIV_JSON_CONNECTION */
34374 e = 0;
34375
34376 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
34377
34378 if (e) {
34379 log_packet_detailed("'changed_from_count' field error detected");
34380 }
34381
34382#ifdef FREECIV_JSON_CONNECTION
34383 field_addr.name = "goto_tile";
34384#endif /* FREECIV_JSON_CONNECTION */
34385 e = 0;
34386
34387 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
34388
34389 if (e) {
34390 log_packet_detailed("'goto_tile' field error detected");
34391 }
34392
34393#ifdef FREECIV_JSON_CONNECTION
34394 field_addr.name = "activity";
34395#endif /* FREECIV_JSON_CONNECTION */
34396 e = 0;
34397
34398 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
34399
34400 if (e) {
34401 log_packet_detailed("'activity' field error detected");
34402 }
34403
34404#ifdef FREECIV_JSON_CONNECTION
34405 field_addr.name = "activity_tgt";
34406#endif /* FREECIV_JSON_CONNECTION */
34407 e = 0;
34408
34409 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
34410
34411 if (e) {
34412 log_packet_detailed("'activity_tgt' field error detected");
34413 }
34414
34415#ifdef FREECIV_JSON_CONNECTION
34416 field_addr.name = "changed_from";
34417#endif /* FREECIV_JSON_CONNECTION */
34418 e = 0;
34419
34420 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
34421
34422 if (e) {
34423 log_packet_detailed("'changed_from' field error detected");
34424 }
34425
34426#ifdef FREECIV_JSON_CONNECTION
34427 field_addr.name = "changed_from_tgt";
34428#endif /* FREECIV_JSON_CONNECTION */
34429 e = 0;
34430
34431 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
34432
34433 if (e) {
34434 log_packet_detailed("'changed_from_tgt' field error detected");
34435 }
34436
34437#ifdef FREECIV_JSON_CONNECTION
34438 field_addr.name = "battlegroup";
34439#endif /* FREECIV_JSON_CONNECTION */
34440 e = 0;
34441
34442 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
34443
34444 if (e) {
34445 log_packet_detailed("'battlegroup' field error detected");
34446 }
34447
34448#ifdef FREECIV_JSON_CONNECTION
34449 field_addr.name = "has_orders";
34450#endif /* FREECIV_JSON_CONNECTION */
34451 e = 0;
34452
34453 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_orders);
34454
34455 if (e) {
34456 log_packet_detailed("'has_orders' field error detected");
34457 }
34458
34459#ifdef FREECIV_JSON_CONNECTION
34460 field_addr.name = "orders_length";
34461#endif /* FREECIV_JSON_CONNECTION */
34462 e = 0;
34463
34464 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
34465
34466 if (e) {
34467 log_packet_detailed("'orders_length' field error detected");
34468 }
34469
34470#ifdef FREECIV_JSON_CONNECTION
34471 field_addr.name = "orders_index";
34472#endif /* FREECIV_JSON_CONNECTION */
34473 e = 0;
34474
34475 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
34476
34477 if (e) {
34478 log_packet_detailed("'orders_index' field error detected");
34479 }
34480
34481#ifdef FREECIV_JSON_CONNECTION
34482 field_addr.name = "orders_repeat";
34483#endif /* FREECIV_JSON_CONNECTION */
34484 e = 0;
34485
34486 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_repeat);
34487
34488 if (e) {
34489 log_packet_detailed("'orders_repeat' field error detected");
34490 }
34491
34492#ifdef FREECIV_JSON_CONNECTION
34493 field_addr.name = "orders_vigilant";
34494#endif /* FREECIV_JSON_CONNECTION */
34495 e = 0;
34496
34497 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_vigilant);
34498
34499 if (e) {
34500 log_packet_detailed("'orders_vigilant' field error detected");
34501 }
34502
34503#ifdef FREECIV_JSON_CONNECTION
34504 field_addr.name = "orders";
34505#endif /* FREECIV_JSON_CONNECTION */
34506 e = 0;
34507
34508 {
34509 int i;
34510
34511#ifdef FREECIV_JSON_CONNECTION
34512 /* Create the array. */
34513 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
34514
34515 /* Enter array. */
34516 field_addr.sub_location = plocation_elem_new(0);
34517#endif /* FREECIV_JSON_CONNECTION */
34518
34519 for (i = 0; i < real_packet->orders_length; i++) {
34520#ifdef FREECIV_JSON_CONNECTION
34521 /* Next array element. */
34522 field_addr.sub_location->number = i;
34523#endif /* FREECIV_JSON_CONNECTION */
34524
34525 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
34526 }
34527
34528#ifdef FREECIV_JSON_CONNECTION
34529 /* Exit array. */
34530 FC_FREE(field_addr.sub_location);
34531#endif /* FREECIV_JSON_CONNECTION */
34532 }
34533
34534 if (e) {
34535 log_packet_detailed("'orders' field error detected");
34536 }
34537
34538#ifdef FREECIV_JSON_CONNECTION
34539 field_addr.name = "action_decision_want";
34540#endif /* FREECIV_JSON_CONNECTION */
34541 e = 0;
34542
34543 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
34544
34545 if (e) {
34546 log_packet_detailed("'action_decision_want' field error detected");
34547 }
34548
34549#ifdef FREECIV_JSON_CONNECTION
34550 field_addr.name = "action_decision_tile";
34551#endif /* FREECIV_JSON_CONNECTION */
34552 e = 0;
34553
34554 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
34555
34556 if (e) {
34557 log_packet_detailed("'action_decision_tile' field error detected");
34558 }
34559#endif /* FREECIV_DELTA_PROTOCOL */
34560
34562}
34563
34564int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
34565{
34566 if (!pc->used) {
34567 log_error("WARNING: trying to send data to the closed connection %s",
34569 return -1;
34570 }
34571 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_INFO].packet != nullptr, -1,
34572 "Handler for PACKET_UNIT_INFO not installed");
34573 return pc->phs.handlers->send[PACKET_UNIT_INFO].packet(pc, packet);
34574}
34575
34576void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
34577{
34578 conn_list_iterate(dest, pconn) {
34581}
34582
34583static inline void init_packet_unit_short_info(struct packet_unit_short_info *packet)
34584{
34585 memset(packet, 0, sizeof(*packet));
34586}
34587
34588#define free_packet_unit_short_info(_packet) (void) 0
34589#define destroy_packet_unit_short_info free
34590
34591#ifdef FREECIV_DELTA_PROTOCOL
34593{
34594 const struct packet_unit_short_info *key = (const struct packet_unit_short_info *) vkey;
34595 genhash_val_t result = 0;
34596
34597 result += key->id;
34598
34599 result &= 0xFFFFFFFF;
34600 return result;
34601}
34602
34603static bool cmp_packet_unit_short_info_100(const void *vkey1, const void *vkey2)
34604{
34605 const struct packet_unit_short_info *old = (const struct packet_unit_short_info *) vkey1;
34606 const struct packet_unit_short_info *real_packet = (const struct packet_unit_short_info *) vkey2;
34607 bool differ;
34608
34609 differ = (old->id != real_packet->id);
34610
34611 return !differ;
34612}
34614#endif /* FREECIV_DELTA_PROTOCOL */
34615
34617{
34618#define FREE_PACKET_STRUCT(_packet) free_packet_unit_short_info(_packet)
34620
34621#ifdef FREECIV_JSON_CONNECTION
34622 struct plocation field_addr;
34623 {
34624 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
34627 }
34628#endif /* FREECIV_JSON_CONNECTION */
34629
34630#ifdef FREECIV_JSON_CONNECTION
34631 field_addr.name = "id";
34632#endif /* FREECIV_JSON_CONNECTION */
34633
34634 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
34636 }
34637
34638 log_packet_detailed("packet_unit_short_info_100: got info about (%d)",
34639 real_packet->id);
34640
34641#ifdef FREECIV_DELTA_PROTOCOL
34644 struct genhash **hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
34645
34646 if (nullptr == *hash) {
34648 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34649 }
34650
34651 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34652 *real_packet = *old;
34653 } else {
34654 /* packet is already initialized empty */
34655 log_packet_detailed(" no old info");
34656 }
34657
34658#ifdef FREECIV_JSON_CONNECTION
34659 field_addr.name = "fields";
34660#endif /* FREECIV_JSON_CONNECTION */
34661 DIO_BV_GET(&din, &field_addr, fields);
34662
34663 if (BV_ISSET(fields, 0)) {
34664 log_packet_detailed(" got field 'owner'");
34665
34666#ifdef FREECIV_JSON_CONNECTION
34667 field_addr.name = "owner";
34668#endif /* FREECIV_JSON_CONNECTION */
34669
34670 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34672 }
34673 }
34674
34675 if (BV_ISSET(fields, 1)) {
34676 log_packet_detailed(" got field 'tile'");
34677
34678#ifdef FREECIV_JSON_CONNECTION
34679 field_addr.name = "tile";
34680#endif /* FREECIV_JSON_CONNECTION */
34681
34682 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34684 }
34685 }
34686
34687 if (BV_ISSET(fields, 2)) {
34688 log_packet_detailed(" got field 'facing'");
34689
34690#ifdef FREECIV_JSON_CONNECTION
34691 field_addr.name = "facing";
34692#endif /* FREECIV_JSON_CONNECTION */
34693
34694 {
34695 int readin;
34696
34697 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34699 }
34700 real_packet->facing = readin;
34701 }
34702 }
34703
34704 if (BV_ISSET(fields, 3)) {
34705 log_packet_detailed(" got field 'type'");
34706
34707#ifdef FREECIV_JSON_CONNECTION
34708 field_addr.name = "type";
34709#endif /* FREECIV_JSON_CONNECTION */
34710
34711 {
34712 int readin;
34713
34714 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34716 }
34717 real_packet->type = readin;
34718 }
34719 }
34720
34721 if (BV_ISSET(fields, 4)) {
34722 log_packet_detailed(" got field 'veteran'");
34723
34724#ifdef FREECIV_JSON_CONNECTION
34725 field_addr.name = "veteran";
34726#endif /* FREECIV_JSON_CONNECTION */
34727
34728 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34730 }
34731 }
34732
34733 real_packet->occupied = BV_ISSET(fields, 5);
34734
34735 real_packet->transported = BV_ISSET(fields, 6);
34736
34737 if (BV_ISSET(fields, 7)) {
34738 log_packet_detailed(" got field 'hp'");
34739
34740#ifdef FREECIV_JSON_CONNECTION
34741 field_addr.name = "hp";
34742#endif /* FREECIV_JSON_CONNECTION */
34743
34744 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34746 }
34747 }
34748
34749 if (BV_ISSET(fields, 8)) {
34750 log_packet_detailed(" got field 'activity'");
34751
34752#ifdef FREECIV_JSON_CONNECTION
34753 field_addr.name = "activity";
34754#endif /* FREECIV_JSON_CONNECTION */
34755
34756 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34758 }
34759 }
34760
34761 if (BV_ISSET(fields, 9)) {
34762 log_packet_detailed(" got field 'activity_tgt'");
34763
34764#ifdef FREECIV_JSON_CONNECTION
34765 field_addr.name = "activity_tgt";
34766#endif /* FREECIV_JSON_CONNECTION */
34767
34768 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34769 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34770 }
34771 }
34772
34773 if (BV_ISSET(fields, 10)) {
34774 log_packet_detailed(" got field 'transported_by'");
34775
34776#ifdef FREECIV_JSON_CONNECTION
34777 field_addr.name = "transported_by";
34778#endif /* FREECIV_JSON_CONNECTION */
34779
34780 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34781 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34782 }
34783 }
34784
34785 if (BV_ISSET(fields, 11)) {
34786 log_packet_detailed(" got field 'packet_use'");
34787
34788#ifdef FREECIV_JSON_CONNECTION
34789 field_addr.name = "packet_use";
34790#endif /* FREECIV_JSON_CONNECTION */
34791
34792 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34793 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34794 }
34795 }
34796
34797 if (BV_ISSET(fields, 12)) {
34798 log_packet_detailed(" got field 'info_city_id'");
34799
34800#ifdef FREECIV_JSON_CONNECTION
34801 field_addr.name = "info_city_id";
34802#endif /* FREECIV_JSON_CONNECTION */
34803
34804 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34805 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34806 }
34807 }
34808
34809 if (nullptr == old) {
34810 old = fc_malloc(sizeof(*old));
34812 *old = *real_packet;
34814 } else {
34815 *old = *real_packet;
34816 }
34817
34818 hash = pc->phs.received + PACKET_UNIT_INFO;
34819 if (nullptr != *hash) {
34821 }
34822
34823#else /* FREECIV_DELTA_PROTOCOL */
34824#ifdef FREECIV_JSON_CONNECTION
34825 field_addr.name = "owner";
34826#endif /* FREECIV_JSON_CONNECTION */
34827
34828 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
34830 }
34831
34832#ifdef FREECIV_JSON_CONNECTION
34833 field_addr.name = "tile";
34834#endif /* FREECIV_JSON_CONNECTION */
34835
34836 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34838 }
34839
34840#ifdef FREECIV_JSON_CONNECTION
34841 field_addr.name = "facing";
34842#endif /* FREECIV_JSON_CONNECTION */
34843
34844 {
34845 int readin;
34846
34847 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34849 }
34850 real_packet->facing = readin;
34851 }
34852
34853#ifdef FREECIV_JSON_CONNECTION
34854 field_addr.name = "type";
34855#endif /* FREECIV_JSON_CONNECTION */
34856
34857 {
34858 int readin;
34859
34860 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34862 }
34863 real_packet->type = readin;
34864 }
34865
34866#ifdef FREECIV_JSON_CONNECTION
34867 field_addr.name = "veteran";
34868#endif /* FREECIV_JSON_CONNECTION */
34869
34870 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34872 }
34873
34874#ifdef FREECIV_JSON_CONNECTION
34875 field_addr.name = "occupied";
34876#endif /* FREECIV_JSON_CONNECTION */
34877
34878 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
34880 }
34881
34882#ifdef FREECIV_JSON_CONNECTION
34883 field_addr.name = "transported";
34884#endif /* FREECIV_JSON_CONNECTION */
34885
34886 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
34887 RECEIVE_PACKET_FIELD_ERROR(transported);
34888 }
34889
34890#ifdef FREECIV_JSON_CONNECTION
34891 field_addr.name = "hp";
34892#endif /* FREECIV_JSON_CONNECTION */
34893
34894 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34896 }
34897
34898#ifdef FREECIV_JSON_CONNECTION
34899 field_addr.name = "activity";
34900#endif /* FREECIV_JSON_CONNECTION */
34901
34902 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
34904 }
34905
34906#ifdef FREECIV_JSON_CONNECTION
34907 field_addr.name = "activity_tgt";
34908#endif /* FREECIV_JSON_CONNECTION */
34909
34910 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34911 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34912 }
34913
34914#ifdef FREECIV_JSON_CONNECTION
34915 field_addr.name = "transported_by";
34916#endif /* FREECIV_JSON_CONNECTION */
34917
34918 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34919 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34920 }
34921
34922#ifdef FREECIV_JSON_CONNECTION
34923 field_addr.name = "packet_use";
34924#endif /* FREECIV_JSON_CONNECTION */
34925
34926 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
34927 RECEIVE_PACKET_FIELD_ERROR(packet_use);
34928 }
34929
34930#ifdef FREECIV_JSON_CONNECTION
34931 field_addr.name = "info_city_id";
34932#endif /* FREECIV_JSON_CONNECTION */
34933
34934 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
34935 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
34936 }
34937#endif /* FREECIV_DELTA_PROTOCOL */
34938
34940#undef FREE_PACKET_STRUCT
34941}
34942
34943static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
34944{
34945 const struct packet_unit_short_info *real_packet = packet;
34946 int e;
34948
34949 log_packet_detailed("packet_unit_short_info_100: sending info about (%d)",
34950 real_packet->id);
34951
34952#ifdef FREECIV_DELTA_PROTOCOL
34955 bool differ;
34956 int different = force_to_send;
34957 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
34958
34959 if (nullptr == *hash) {
34961 nullptr, nullptr, nullptr, destroy_packet_unit_short_info);
34962 }
34963 BV_CLR_ALL(fields);
34964
34965 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34966 old = fc_malloc(sizeof(*old));
34967 /* temporary bitcopy just to insert correctly */
34968 *old = *real_packet;
34971 different = 1; /* Force to send. */
34972 }
34973
34974 differ = (old->owner != real_packet->owner);
34975 if (differ) {
34976 different++;
34977 BV_SET(fields, 0);
34978 }
34979
34980 differ = (old->tile != real_packet->tile);
34981 if (differ) {
34982 different++;
34983 BV_SET(fields, 1);
34984 }
34985
34986 differ = (old->facing != real_packet->facing);
34987 if (differ) {
34988 different++;
34989 BV_SET(fields, 2);
34990 }
34991
34992 differ = (old->type != real_packet->type);
34993 if (differ) {
34994 different++;
34995 BV_SET(fields, 3);
34996 }
34997
34998 differ = (old->veteran != real_packet->veteran);
34999 if (differ) {
35000 different++;
35001 BV_SET(fields, 4);
35002 }
35003
35004 differ = (old->occupied != real_packet->occupied);
35005 if (differ) {
35006 different++;
35007 }
35008 /* folded into head */
35009 if (real_packet->occupied) {
35010 BV_SET(fields, 5);
35011 }
35012
35013 differ = (old->transported != real_packet->transported);
35014 if (differ) {
35015 different++;
35016 }
35017 /* folded into head */
35018 if (real_packet->transported) {
35019 BV_SET(fields, 6);
35020 }
35021
35022 differ = (old->hp != real_packet->hp);
35023 if (differ) {
35024 different++;
35025 BV_SET(fields, 7);
35026 }
35027
35028 differ = (old->activity != real_packet->activity);
35029 if (differ) {
35030 different++;
35031 BV_SET(fields, 8);
35032 }
35033
35034 differ = (old->activity_tgt != real_packet->activity_tgt);
35035 if (differ) {
35036 different++;
35037 BV_SET(fields, 9);
35038 }
35039
35040 differ = (old->transported_by != real_packet->transported_by);
35041 if (differ) {
35042 different++;
35043 BV_SET(fields, 10);
35044 }
35045
35046 differ = (old->packet_use != real_packet->packet_use);
35047 if (differ) {
35048 different++;
35049 BV_SET(fields, 11);
35050 }
35051
35052 differ = (old->info_city_id != real_packet->info_city_id);
35053 if (differ) {
35054 different++;
35055 BV_SET(fields, 12);
35056 }
35057
35058 if (different == 0) {
35059 log_packet_detailed(" no change -> discard");
35061 }
35062#endif /* FREECIV_DELTA_PROTOCOL */
35063
35064#ifdef FREECIV_JSON_CONNECTION
35065 struct plocation field_addr;
35066 {
35067 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35070 }
35071#endif /* FREECIV_JSON_CONNECTION */
35072
35073#ifdef FREECIV_JSON_CONNECTION
35074 field_addr.name = "id";
35075#endif /* FREECIV_JSON_CONNECTION */
35076 e = 0;
35077
35078 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
35079
35080 if (e) {
35081 log_packet_detailed("'id' field error detected");
35082 }
35083
35084#ifdef FREECIV_DELTA_PROTOCOL
35085#ifdef FREECIV_JSON_CONNECTION
35086 field_addr.name = "fields";
35087#endif /* FREECIV_JSON_CONNECTION */
35088 e = 0;
35089 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35090 if (e) {
35091 log_packet_detailed("fields bitvector error detected");
35092 }
35093
35094 if (BV_ISSET(fields, 0)) {
35095 log_packet_detailed(" field 'owner' has changed");
35096
35097#ifdef FREECIV_JSON_CONNECTION
35098 field_addr.name = "owner";
35099#endif /* FREECIV_JSON_CONNECTION */
35100 e = 0;
35101
35102 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
35103
35104 if (e) {
35105 log_packet_detailed("'owner' field error detected");
35106 }
35107 }
35108
35109 if (BV_ISSET(fields, 1)) {
35110 log_packet_detailed(" field 'tile' has changed");
35111
35112#ifdef FREECIV_JSON_CONNECTION
35113 field_addr.name = "tile";
35114#endif /* FREECIV_JSON_CONNECTION */
35115 e = 0;
35116
35117 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35118
35119 if (e) {
35120 log_packet_detailed("'tile' field error detected");
35121 }
35122 }
35123
35124 if (BV_ISSET(fields, 2)) {
35125 log_packet_detailed(" field 'facing' has changed");
35126
35127#ifdef FREECIV_JSON_CONNECTION
35128 field_addr.name = "facing";
35129#endif /* FREECIV_JSON_CONNECTION */
35130 e = 0;
35131
35132 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35133
35134 if (e) {
35135 log_packet_detailed("'facing' field error detected");
35136 }
35137 }
35138
35139 if (BV_ISSET(fields, 3)) {
35140 log_packet_detailed(" field 'type' has changed");
35141
35142#ifdef FREECIV_JSON_CONNECTION
35143 field_addr.name = "type";
35144#endif /* FREECIV_JSON_CONNECTION */
35145 e = 0;
35146
35147 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35148
35149 if (e) {
35150 log_packet_detailed("'type' field error detected");
35151 }
35152 }
35153
35154 if (BV_ISSET(fields, 4)) {
35155 log_packet_detailed(" field 'veteran' has changed");
35156
35157#ifdef FREECIV_JSON_CONNECTION
35158 field_addr.name = "veteran";
35159#endif /* FREECIV_JSON_CONNECTION */
35160 e = 0;
35161
35162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35163
35164 if (e) {
35165 log_packet_detailed("'veteran' field error detected");
35166 }
35167 }
35168
35169 /* field 5 is folded into the header */
35170
35171 /* field 6 is folded into the header */
35172
35173 if (BV_ISSET(fields, 7)) {
35174 log_packet_detailed(" field 'hp' has changed");
35175
35176#ifdef FREECIV_JSON_CONNECTION
35177 field_addr.name = "hp";
35178#endif /* FREECIV_JSON_CONNECTION */
35179 e = 0;
35180
35181 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35182
35183 if (e) {
35184 log_packet_detailed("'hp' field error detected");
35185 }
35186 }
35187
35188 if (BV_ISSET(fields, 8)) {
35189 log_packet_detailed(" field 'activity' has changed");
35190
35191#ifdef FREECIV_JSON_CONNECTION
35192 field_addr.name = "activity";
35193#endif /* FREECIV_JSON_CONNECTION */
35194 e = 0;
35195
35196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35197
35198 if (e) {
35199 log_packet_detailed("'activity' field error detected");
35200 }
35201 }
35202
35203 if (BV_ISSET(fields, 9)) {
35204 log_packet_detailed(" field 'activity_tgt' has changed");
35205
35206#ifdef FREECIV_JSON_CONNECTION
35207 field_addr.name = "activity_tgt";
35208#endif /* FREECIV_JSON_CONNECTION */
35209 e = 0;
35210
35211 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35212
35213 if (e) {
35214 log_packet_detailed("'activity_tgt' field error detected");
35215 }
35216 }
35217
35218 if (BV_ISSET(fields, 10)) {
35219 log_packet_detailed(" field 'transported_by' has changed");
35220
35221#ifdef FREECIV_JSON_CONNECTION
35222 field_addr.name = "transported_by";
35223#endif /* FREECIV_JSON_CONNECTION */
35224 e = 0;
35225
35226 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35227
35228 if (e) {
35229 log_packet_detailed("'transported_by' field error detected");
35230 }
35231 }
35232
35233 if (BV_ISSET(fields, 11)) {
35234 log_packet_detailed(" field 'packet_use' has changed");
35235
35236#ifdef FREECIV_JSON_CONNECTION
35237 field_addr.name = "packet_use";
35238#endif /* FREECIV_JSON_CONNECTION */
35239 e = 0;
35240
35241 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35242
35243 if (e) {
35244 log_packet_detailed("'packet_use' field error detected");
35245 }
35246 }
35247
35248 if (BV_ISSET(fields, 12)) {
35249 log_packet_detailed(" field 'info_city_id' has changed");
35250
35251#ifdef FREECIV_JSON_CONNECTION
35252 field_addr.name = "info_city_id";
35253#endif /* FREECIV_JSON_CONNECTION */
35254 e = 0;
35255
35256 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35257
35258 if (e) {
35259 log_packet_detailed("'info_city_id' field error detected");
35260 }
35261 }
35262
35263 *old = *real_packet;
35264
35265 hash = pc->phs.sent + PACKET_UNIT_INFO;
35266 if (nullptr != *hash) {
35268 }
35269
35270#else /* FREECIV_DELTA_PROTOCOL */
35271#ifdef FREECIV_JSON_CONNECTION
35272 field_addr.name = "owner";
35273#endif /* FREECIV_JSON_CONNECTION */
35274 e = 0;
35275
35276 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
35277
35278 if (e) {
35279 log_packet_detailed("'owner' field error detected");
35280 }
35281
35282#ifdef FREECIV_JSON_CONNECTION
35283 field_addr.name = "tile";
35284#endif /* FREECIV_JSON_CONNECTION */
35285 e = 0;
35286
35287 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35288
35289 if (e) {
35290 log_packet_detailed("'tile' field error detected");
35291 }
35292
35293#ifdef FREECIV_JSON_CONNECTION
35294 field_addr.name = "facing";
35295#endif /* FREECIV_JSON_CONNECTION */
35296 e = 0;
35297
35298 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35299
35300 if (e) {
35301 log_packet_detailed("'facing' field error detected");
35302 }
35303
35304#ifdef FREECIV_JSON_CONNECTION
35305 field_addr.name = "type";
35306#endif /* FREECIV_JSON_CONNECTION */
35307 e = 0;
35308
35309 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35310
35311 if (e) {
35312 log_packet_detailed("'type' field error detected");
35313 }
35314
35315#ifdef FREECIV_JSON_CONNECTION
35316 field_addr.name = "veteran";
35317#endif /* FREECIV_JSON_CONNECTION */
35318 e = 0;
35319
35320 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35321
35322 if (e) {
35323 log_packet_detailed("'veteran' field error detected");
35324 }
35325
35326#ifdef FREECIV_JSON_CONNECTION
35327 field_addr.name = "occupied";
35328#endif /* FREECIV_JSON_CONNECTION */
35329 e = 0;
35330
35331 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
35332
35333 if (e) {
35334 log_packet_detailed("'occupied' field error detected");
35335 }
35336
35337#ifdef FREECIV_JSON_CONNECTION
35338 field_addr.name = "transported";
35339#endif /* FREECIV_JSON_CONNECTION */
35340 e = 0;
35341
35342 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
35343
35344 if (e) {
35345 log_packet_detailed("'transported' field error detected");
35346 }
35347
35348#ifdef FREECIV_JSON_CONNECTION
35349 field_addr.name = "hp";
35350#endif /* FREECIV_JSON_CONNECTION */
35351 e = 0;
35352
35353 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35354
35355 if (e) {
35356 log_packet_detailed("'hp' field error detected");
35357 }
35358
35359#ifdef FREECIV_JSON_CONNECTION
35360 field_addr.name = "activity";
35361#endif /* FREECIV_JSON_CONNECTION */
35362 e = 0;
35363
35364 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35365
35366 if (e) {
35367 log_packet_detailed("'activity' field error detected");
35368 }
35369
35370#ifdef FREECIV_JSON_CONNECTION
35371 field_addr.name = "activity_tgt";
35372#endif /* FREECIV_JSON_CONNECTION */
35373 e = 0;
35374
35375 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35376
35377 if (e) {
35378 log_packet_detailed("'activity_tgt' field error detected");
35379 }
35380
35381#ifdef FREECIV_JSON_CONNECTION
35382 field_addr.name = "transported_by";
35383#endif /* FREECIV_JSON_CONNECTION */
35384 e = 0;
35385
35386 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35387
35388 if (e) {
35389 log_packet_detailed("'transported_by' field error detected");
35390 }
35391
35392#ifdef FREECIV_JSON_CONNECTION
35393 field_addr.name = "packet_use";
35394#endif /* FREECIV_JSON_CONNECTION */
35395 e = 0;
35396
35397 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
35398
35399 if (e) {
35400 log_packet_detailed("'packet_use' field error detected");
35401 }
35402
35403#ifdef FREECIV_JSON_CONNECTION
35404 field_addr.name = "info_city_id";
35405#endif /* FREECIV_JSON_CONNECTION */
35406 e = 0;
35407
35408 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
35409
35410 if (e) {
35411 log_packet_detailed("'info_city_id' field error detected");
35412 }
35413#endif /* FREECIV_DELTA_PROTOCOL */
35414
35416}
35417
35418int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
35419{
35420 if (!pc->used) {
35421 log_error("WARNING: trying to send data to the closed connection %s",
35423 return -1;
35424 }
35425 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send != nullptr, -1,
35426 "Handler for PACKET_UNIT_SHORT_INFO not installed");
35427 return pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send(pc, packet, force_to_send);
35428}
35429
35430void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
35431{
35432 conn_list_iterate(dest, pconn) {
35433 send_packet_unit_short_info(pconn, packet, force_to_send);
35435}
35436
35438{
35439 memset(packet, 0, sizeof(*packet));
35440}
35441
35442#define free_packet_unit_combat_info(_packet) (void) 0
35443#define destroy_packet_unit_combat_info free
35444
35445#ifdef FREECIV_DELTA_PROTOCOL
35446#define hash_packet_unit_combat_info_100 hash_const
35447#define cmp_packet_unit_combat_info_100 cmp_const
35449#endif /* FREECIV_DELTA_PROTOCOL */
35450
35452{
35453#define FREE_PACKET_STRUCT(_packet) free_packet_unit_combat_info(_packet)
35455
35456#ifdef FREECIV_JSON_CONNECTION
35457 struct plocation field_addr;
35458 {
35459 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35462 }
35463#endif /* FREECIV_JSON_CONNECTION */
35464
35465 log_packet_detailed("packet_unit_combat_info_100: got info about ()");
35466
35467#ifdef FREECIV_DELTA_PROTOCOL
35470 struct genhash **hash = pc->phs.received + PACKET_UNIT_COMBAT_INFO;
35471
35472 if (nullptr == *hash) {
35474 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35475 }
35476
35477 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35478 *real_packet = *old;
35479 } else {
35480 /* packet is already initialized empty */
35481 log_packet_detailed(" no old info");
35482 }
35483
35484#ifdef FREECIV_JSON_CONNECTION
35485 field_addr.name = "fields";
35486#endif /* FREECIV_JSON_CONNECTION */
35487 DIO_BV_GET(&din, &field_addr, fields);
35488
35489 if (BV_ISSET(fields, 0)) {
35490 log_packet_detailed(" got field 'attacker_unit_id'");
35491
35492#ifdef FREECIV_JSON_CONNECTION
35493 field_addr.name = "attacker_unit_id";
35494#endif /* FREECIV_JSON_CONNECTION */
35495
35496 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35497 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35498 }
35499 }
35500
35501 if (BV_ISSET(fields, 1)) {
35502 log_packet_detailed(" got field 'defender_unit_id'");
35503
35504#ifdef FREECIV_JSON_CONNECTION
35505 field_addr.name = "defender_unit_id";
35506#endif /* FREECIV_JSON_CONNECTION */
35507
35508 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35509 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35510 }
35511 }
35512
35513 if (BV_ISSET(fields, 2)) {
35514 log_packet_detailed(" got field 'attacker_hp'");
35515
35516#ifdef FREECIV_JSON_CONNECTION
35517 field_addr.name = "attacker_hp";
35518#endif /* FREECIV_JSON_CONNECTION */
35519
35520 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35521 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35522 }
35523 }
35524
35525 if (BV_ISSET(fields, 3)) {
35526 log_packet_detailed(" got field 'defender_hp'");
35527
35528#ifdef FREECIV_JSON_CONNECTION
35529 field_addr.name = "defender_hp";
35530#endif /* FREECIV_JSON_CONNECTION */
35531
35532 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35533 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35534 }
35535 }
35536
35537 real_packet->make_att_veteran = BV_ISSET(fields, 4);
35538
35539 real_packet->make_def_veteran = BV_ISSET(fields, 5);
35540
35541 if (nullptr == old) {
35542 old = fc_malloc(sizeof(*old));
35544 *old = *real_packet;
35546 } else {
35547 *old = *real_packet;
35548 }
35549
35550#else /* FREECIV_DELTA_PROTOCOL */
35551#ifdef FREECIV_JSON_CONNECTION
35552 field_addr.name = "attacker_unit_id";
35553#endif /* FREECIV_JSON_CONNECTION */
35554
35555 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
35556 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
35557 }
35558
35559#ifdef FREECIV_JSON_CONNECTION
35560 field_addr.name = "defender_unit_id";
35561#endif /* FREECIV_JSON_CONNECTION */
35562
35563 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
35564 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
35565 }
35566
35567#ifdef FREECIV_JSON_CONNECTION
35568 field_addr.name = "attacker_hp";
35569#endif /* FREECIV_JSON_CONNECTION */
35570
35571 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
35572 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
35573 }
35574
35575#ifdef FREECIV_JSON_CONNECTION
35576 field_addr.name = "defender_hp";
35577#endif /* FREECIV_JSON_CONNECTION */
35578
35579 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
35580 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
35581 }
35582
35583#ifdef FREECIV_JSON_CONNECTION
35584 field_addr.name = "make_att_veteran";
35585#endif /* FREECIV_JSON_CONNECTION */
35586
35587 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_att_veteran)) {
35588 RECEIVE_PACKET_FIELD_ERROR(make_att_veteran);
35589 }
35590
35591#ifdef FREECIV_JSON_CONNECTION
35592 field_addr.name = "make_def_veteran";
35593#endif /* FREECIV_JSON_CONNECTION */
35594
35595 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_def_veteran)) {
35596 RECEIVE_PACKET_FIELD_ERROR(make_def_veteran);
35597 }
35598#endif /* FREECIV_DELTA_PROTOCOL */
35599
35601#undef FREE_PACKET_STRUCT
35602}
35603
35605{
35606 const struct packet_unit_combat_info *real_packet = packet;
35607 int e;
35609
35610 log_packet_detailed("packet_unit_combat_info_100: sending info about ()");
35611
35612#ifdef FREECIV_DELTA_PROTOCOL
35615 bool differ;
35616 struct genhash **hash = pc->phs.sent + PACKET_UNIT_COMBAT_INFO;
35617
35618 if (nullptr == *hash) {
35620 nullptr, nullptr, nullptr, destroy_packet_unit_combat_info);
35621 }
35622 BV_CLR_ALL(fields);
35623
35624 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35625 old = fc_malloc(sizeof(*old));
35626 /* temporary bitcopy just to insert correctly */
35627 *old = *real_packet;
35630 }
35631
35632 differ = (old->attacker_unit_id != real_packet->attacker_unit_id);
35633 if (differ) {
35634 BV_SET(fields, 0);
35635 }
35636
35637 differ = (old->defender_unit_id != real_packet->defender_unit_id);
35638 if (differ) {
35639 BV_SET(fields, 1);
35640 }
35641
35642 differ = (old->attacker_hp != real_packet->attacker_hp);
35643 if (differ) {
35644 BV_SET(fields, 2);
35645 }
35646
35647 differ = (old->defender_hp != real_packet->defender_hp);
35648 if (differ) {
35649 BV_SET(fields, 3);
35650 }
35651
35652 /* folded into head */
35653 if (real_packet->make_att_veteran) {
35654 BV_SET(fields, 4);
35655 }
35656
35657 /* folded into head */
35658 if (real_packet->make_def_veteran) {
35659 BV_SET(fields, 5);
35660 }
35661#endif /* FREECIV_DELTA_PROTOCOL */
35662
35663#ifdef FREECIV_JSON_CONNECTION
35664 struct plocation field_addr;
35665 {
35666 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35669 }
35670#endif /* FREECIV_JSON_CONNECTION */
35671
35672#ifdef FREECIV_DELTA_PROTOCOL
35673#ifdef FREECIV_JSON_CONNECTION
35674 field_addr.name = "fields";
35675#endif /* FREECIV_JSON_CONNECTION */
35676 e = 0;
35677 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35678 if (e) {
35679 log_packet_detailed("fields bitvector error detected");
35680 }
35681
35682 if (BV_ISSET(fields, 0)) {
35683 log_packet_detailed(" field 'attacker_unit_id' has changed");
35684
35685#ifdef FREECIV_JSON_CONNECTION
35686 field_addr.name = "attacker_unit_id";
35687#endif /* FREECIV_JSON_CONNECTION */
35688 e = 0;
35689
35690 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35691
35692 if (e) {
35693 log_packet_detailed("'attacker_unit_id' field error detected");
35694 }
35695 }
35696
35697 if (BV_ISSET(fields, 1)) {
35698 log_packet_detailed(" field 'defender_unit_id' has changed");
35699
35700#ifdef FREECIV_JSON_CONNECTION
35701 field_addr.name = "defender_unit_id";
35702#endif /* FREECIV_JSON_CONNECTION */
35703 e = 0;
35704
35705 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35706
35707 if (e) {
35708 log_packet_detailed("'defender_unit_id' field error detected");
35709 }
35710 }
35711
35712 if (BV_ISSET(fields, 2)) {
35713 log_packet_detailed(" field 'attacker_hp' has changed");
35714
35715#ifdef FREECIV_JSON_CONNECTION
35716 field_addr.name = "attacker_hp";
35717#endif /* FREECIV_JSON_CONNECTION */
35718 e = 0;
35719
35720 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35721
35722 if (e) {
35723 log_packet_detailed("'attacker_hp' field error detected");
35724 }
35725 }
35726
35727 if (BV_ISSET(fields, 3)) {
35728 log_packet_detailed(" field 'defender_hp' has changed");
35729
35730#ifdef FREECIV_JSON_CONNECTION
35731 field_addr.name = "defender_hp";
35732#endif /* FREECIV_JSON_CONNECTION */
35733 e = 0;
35734
35735 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35736
35737 if (e) {
35738 log_packet_detailed("'defender_hp' field error detected");
35739 }
35740 }
35741
35742 /* field 4 is folded into the header */
35743
35744 /* field 5 is folded into the header */
35745
35746 *old = *real_packet;
35747
35748#else /* FREECIV_DELTA_PROTOCOL */
35749#ifdef FREECIV_JSON_CONNECTION
35750 field_addr.name = "attacker_unit_id";
35751#endif /* FREECIV_JSON_CONNECTION */
35752 e = 0;
35753
35754 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
35755
35756 if (e) {
35757 log_packet_detailed("'attacker_unit_id' field error detected");
35758 }
35759
35760#ifdef FREECIV_JSON_CONNECTION
35761 field_addr.name = "defender_unit_id";
35762#endif /* FREECIV_JSON_CONNECTION */
35763 e = 0;
35764
35765 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
35766
35767 if (e) {
35768 log_packet_detailed("'defender_unit_id' field error detected");
35769 }
35770
35771#ifdef FREECIV_JSON_CONNECTION
35772 field_addr.name = "attacker_hp";
35773#endif /* FREECIV_JSON_CONNECTION */
35774 e = 0;
35775
35776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
35777
35778 if (e) {
35779 log_packet_detailed("'attacker_hp' field error detected");
35780 }
35781
35782#ifdef FREECIV_JSON_CONNECTION
35783 field_addr.name = "defender_hp";
35784#endif /* FREECIV_JSON_CONNECTION */
35785 e = 0;
35786
35787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
35788
35789 if (e) {
35790 log_packet_detailed("'defender_hp' field error detected");
35791 }
35792
35793#ifdef FREECIV_JSON_CONNECTION
35794 field_addr.name = "make_att_veteran";
35795#endif /* FREECIV_JSON_CONNECTION */
35796 e = 0;
35797
35798 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_att_veteran);
35799
35800 if (e) {
35801 log_packet_detailed("'make_att_veteran' field error detected");
35802 }
35803
35804#ifdef FREECIV_JSON_CONNECTION
35805 field_addr.name = "make_def_veteran";
35806#endif /* FREECIV_JSON_CONNECTION */
35807 e = 0;
35808
35809 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_def_veteran);
35810
35811 if (e) {
35812 log_packet_detailed("'make_def_veteran' field error detected");
35813 }
35814#endif /* FREECIV_DELTA_PROTOCOL */
35815
35817}
35818
35820{
35821 if (!pc->used) {
35822 log_error("WARNING: trying to send data to the closed connection %s",
35824 return -1;
35825 }
35826 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet != nullptr, -1,
35827 "Handler for PACKET_UNIT_COMBAT_INFO not installed");
35828 return pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet(pc, packet);
35829}
35830
35832{
35833 conn_list_iterate(dest, pconn) {
35836}
35837
35838static inline void init_packet_unit_sscs_set(struct packet_unit_sscs_set *packet)
35839{
35840 memset(packet, 0, sizeof(*packet));
35841}
35842
35843#define free_packet_unit_sscs_set(_packet) (void) 0
35844#define destroy_packet_unit_sscs_set free
35845
35846#ifdef FREECIV_DELTA_PROTOCOL
35847#define hash_packet_unit_sscs_set_100 hash_const
35848#define cmp_packet_unit_sscs_set_100 cmp_const
35850#endif /* FREECIV_DELTA_PROTOCOL */
35851
35853{
35854#define FREE_PACKET_STRUCT(_packet) free_packet_unit_sscs_set(_packet)
35856
35857#ifdef FREECIV_JSON_CONNECTION
35858 struct plocation field_addr;
35859 {
35860 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
35863 }
35864#endif /* FREECIV_JSON_CONNECTION */
35865
35866 log_packet_detailed("packet_unit_sscs_set_100: got info about ()");
35867
35868#ifdef FREECIV_DELTA_PROTOCOL
35870 struct packet_unit_sscs_set *old;
35871 struct genhash **hash = pc->phs.received + PACKET_UNIT_SSCS_SET;
35872
35873 if (nullptr == *hash) {
35875 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35876 }
35877
35878 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35879 *real_packet = *old;
35880 } else {
35881 /* packet is already initialized empty */
35882 log_packet_detailed(" no old info");
35883 }
35884
35885#ifdef FREECIV_JSON_CONNECTION
35886 field_addr.name = "fields";
35887#endif /* FREECIV_JSON_CONNECTION */
35888 DIO_BV_GET(&din, &field_addr, fields);
35889
35890 if (BV_ISSET(fields, 0)) {
35891 log_packet_detailed(" got field 'unit_id'");
35892
35893#ifdef FREECIV_JSON_CONNECTION
35894 field_addr.name = "unit_id";
35895#endif /* FREECIV_JSON_CONNECTION */
35896
35897 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35899 }
35900 }
35901
35902 if (BV_ISSET(fields, 1)) {
35903 log_packet_detailed(" got field 'type'");
35904
35905#ifdef FREECIV_JSON_CONNECTION
35906 field_addr.name = "type";
35907#endif /* FREECIV_JSON_CONNECTION */
35908
35909 {
35910 int readin;
35911
35912 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35914 }
35915 real_packet->type = readin;
35916 }
35917 }
35918
35919 if (BV_ISSET(fields, 2)) {
35920 log_packet_detailed(" got field 'value'");
35921
35922#ifdef FREECIV_JSON_CONNECTION
35923 field_addr.name = "value";
35924#endif /* FREECIV_JSON_CONNECTION */
35925
35926 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35928 }
35929 }
35930
35931 if (nullptr == old) {
35932 old = fc_malloc(sizeof(*old));
35934 *old = *real_packet;
35936 } else {
35937 *old = *real_packet;
35938 }
35939
35940#else /* FREECIV_DELTA_PROTOCOL */
35941#ifdef FREECIV_JSON_CONNECTION
35942 field_addr.name = "unit_id";
35943#endif /* FREECIV_JSON_CONNECTION */
35944
35945 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
35947 }
35948
35949#ifdef FREECIV_JSON_CONNECTION
35950 field_addr.name = "type";
35951#endif /* FREECIV_JSON_CONNECTION */
35952
35953 {
35954 int readin;
35955
35956 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35958 }
35959 real_packet->type = readin;
35960 }
35961
35962#ifdef FREECIV_JSON_CONNECTION
35963 field_addr.name = "value";
35964#endif /* FREECIV_JSON_CONNECTION */
35965
35966 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
35968 }
35969#endif /* FREECIV_DELTA_PROTOCOL */
35970
35972#undef FREE_PACKET_STRUCT
35973}
35974
35975static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
35976{
35977 const struct packet_unit_sscs_set *real_packet = packet;
35978 int e;
35980
35981 log_packet_detailed("packet_unit_sscs_set_100: sending info about ()");
35982
35983#ifdef FREECIV_DELTA_PROTOCOL
35985 struct packet_unit_sscs_set *old;
35986 bool differ;
35987 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SSCS_SET;
35988
35989 if (nullptr == *hash) {
35991 nullptr, nullptr, nullptr, destroy_packet_unit_sscs_set);
35992 }
35993 BV_CLR_ALL(fields);
35994
35995 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35996 old = fc_malloc(sizeof(*old));
35997 /* temporary bitcopy just to insert correctly */
35998 *old = *real_packet;
36001 }
36002
36003 differ = (old->unit_id != real_packet->unit_id);
36004 if (differ) {
36005 BV_SET(fields, 0);
36006 }
36007
36008 differ = (old->type != real_packet->type);
36009 if (differ) {
36010 BV_SET(fields, 1);
36011 }
36012
36013 differ = (old->value != real_packet->value);
36014 if (differ) {
36015 BV_SET(fields, 2);
36016 }
36017#endif /* FREECIV_DELTA_PROTOCOL */
36018
36019#ifdef FREECIV_JSON_CONNECTION
36020 struct plocation field_addr;
36021 {
36022 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36025 }
36026#endif /* FREECIV_JSON_CONNECTION */
36027
36028#ifdef FREECIV_DELTA_PROTOCOL
36029#ifdef FREECIV_JSON_CONNECTION
36030 field_addr.name = "fields";
36031#endif /* FREECIV_JSON_CONNECTION */
36032 e = 0;
36033 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36034 if (e) {
36035 log_packet_detailed("fields bitvector error detected");
36036 }
36037
36038 if (BV_ISSET(fields, 0)) {
36039 log_packet_detailed(" field 'unit_id' has changed");
36040
36041#ifdef FREECIV_JSON_CONNECTION
36042 field_addr.name = "unit_id";
36043#endif /* FREECIV_JSON_CONNECTION */
36044 e = 0;
36045
36046 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36047
36048 if (e) {
36049 log_packet_detailed("'unit_id' field error detected");
36050 }
36051 }
36052
36053 if (BV_ISSET(fields, 1)) {
36054 log_packet_detailed(" field 'type' has changed");
36055
36056#ifdef FREECIV_JSON_CONNECTION
36057 field_addr.name = "type";
36058#endif /* FREECIV_JSON_CONNECTION */
36059 e = 0;
36060
36061 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36062
36063 if (e) {
36064 log_packet_detailed("'type' field error detected");
36065 }
36066 }
36067
36068 if (BV_ISSET(fields, 2)) {
36069 log_packet_detailed(" field 'value' has changed");
36070
36071#ifdef FREECIV_JSON_CONNECTION
36072 field_addr.name = "value";
36073#endif /* FREECIV_JSON_CONNECTION */
36074 e = 0;
36075
36076 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36077
36078 if (e) {
36079 log_packet_detailed("'value' field error detected");
36080 }
36081 }
36082
36083 *old = *real_packet;
36084
36085#else /* FREECIV_DELTA_PROTOCOL */
36086#ifdef FREECIV_JSON_CONNECTION
36087 field_addr.name = "unit_id";
36088#endif /* FREECIV_JSON_CONNECTION */
36089 e = 0;
36090
36091 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36092
36093 if (e) {
36094 log_packet_detailed("'unit_id' field error detected");
36095 }
36096
36097#ifdef FREECIV_JSON_CONNECTION
36098 field_addr.name = "type";
36099#endif /* FREECIV_JSON_CONNECTION */
36100 e = 0;
36101
36102 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36103
36104 if (e) {
36105 log_packet_detailed("'type' field error detected");
36106 }
36107
36108#ifdef FREECIV_JSON_CONNECTION
36109 field_addr.name = "value";
36110#endif /* FREECIV_JSON_CONNECTION */
36111 e = 0;
36112
36113 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36114
36115 if (e) {
36116 log_packet_detailed("'value' field error detected");
36117 }
36118#endif /* FREECIV_DELTA_PROTOCOL */
36119
36121}
36122
36124{
36125 if (!pc->used) {
36126 log_error("WARNING: trying to send data to the closed connection %s",
36128 return -1;
36129 }
36130 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet != nullptr, -1,
36131 "Handler for PACKET_UNIT_SSCS_SET not installed");
36132 return pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet(pc, packet);
36133}
36134
36135int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
36136{
36137 struct packet_unit_sscs_set packet, *real_packet = &packet;
36138
36140 real_packet->type = type;
36141 real_packet->value = value;
36142
36144}
36145
36146static inline void init_packet_unit_orders(struct packet_unit_orders *packet)
36147{
36148 memset(packet, 0, sizeof(*packet));
36149}
36150
36151#define free_packet_unit_orders(_packet) (void) 0
36152#define destroy_packet_unit_orders free
36153
36154#ifdef FREECIV_DELTA_PROTOCOL
36155#define hash_packet_unit_orders_100 hash_const
36156#define cmp_packet_unit_orders_100 cmp_const
36158#endif /* FREECIV_DELTA_PROTOCOL */
36159
36161{
36162#define FREE_PACKET_STRUCT(_packet) free_packet_unit_orders(_packet)
36164
36165#ifdef FREECIV_JSON_CONNECTION
36166 struct plocation field_addr;
36167 {
36168 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36171 }
36172#endif /* FREECIV_JSON_CONNECTION */
36173
36174 log_packet_detailed("packet_unit_orders_100: got info about ()");
36175
36176#ifdef FREECIV_DELTA_PROTOCOL
36178 struct packet_unit_orders *old;
36179 struct genhash **hash = pc->phs.received + PACKET_UNIT_ORDERS;
36180
36181 if (nullptr == *hash) {
36183 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36184 }
36185
36186 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36187 *real_packet = *old;
36188 } else {
36189 /* packet is already initialized empty */
36190 log_packet_detailed(" no old info");
36191 }
36192
36193#ifdef FREECIV_JSON_CONNECTION
36194 field_addr.name = "fields";
36195#endif /* FREECIV_JSON_CONNECTION */
36196 DIO_BV_GET(&din, &field_addr, fields);
36197
36198 if (BV_ISSET(fields, 0)) {
36199 log_packet_detailed(" got field 'unit_id'");
36200
36201#ifdef FREECIV_JSON_CONNECTION
36202 field_addr.name = "unit_id";
36203#endif /* FREECIV_JSON_CONNECTION */
36204
36205 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36207 }
36208 }
36209
36210 if (BV_ISSET(fields, 1)) {
36211 log_packet_detailed(" got field 'src_tile'");
36212
36213#ifdef FREECIV_JSON_CONNECTION
36214 field_addr.name = "src_tile";
36215#endif /* FREECIV_JSON_CONNECTION */
36216
36217 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36219 }
36220 }
36221
36222 if (BV_ISSET(fields, 2)) {
36223 log_packet_detailed(" got field 'length'");
36224
36225#ifdef FREECIV_JSON_CONNECTION
36226 field_addr.name = "length";
36227#endif /* FREECIV_JSON_CONNECTION */
36228
36229 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36231 }
36232 }
36233
36234 real_packet->repeat = BV_ISSET(fields, 3);
36235
36236 real_packet->vigilant = BV_ISSET(fields, 4);
36237
36238 if (BV_ISSET(fields, 5)) {
36239 log_packet_detailed(" got field 'orders'");
36240
36241#ifdef FREECIV_JSON_CONNECTION
36242 field_addr.name = "orders";
36243#endif /* FREECIV_JSON_CONNECTION */
36244
36245 {
36246 int i;
36247
36248 if (real_packet->length > MAX_LEN_ROUTE) {
36249 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36250 }
36251
36252#ifdef FREECIV_JSON_CONNECTION
36253 /* Enter array. */
36254 field_addr.sub_location = plocation_elem_new(0);
36255#endif /* FREECIV_JSON_CONNECTION */
36256
36257 for (i = 0; i < real_packet->length; i++) {
36258#ifdef FREECIV_JSON_CONNECTION
36259 /* Next array element */
36260 field_addr.sub_location->number = i;
36261#endif /* FREECIV_JSON_CONNECTION */
36262
36263 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36265 }
36266 }
36267
36268#ifdef FREECIV_JSON_CONNECTION
36269 /* Exit array. */
36270 FC_FREE(field_addr.sub_location);
36271#endif /* FREECIV_JSON_CONNECTION */
36272 }
36273 }
36274
36275 if (BV_ISSET(fields, 6)) {
36276 log_packet_detailed(" got field 'dest_tile'");
36277
36278#ifdef FREECIV_JSON_CONNECTION
36279 field_addr.name = "dest_tile";
36280#endif /* FREECIV_JSON_CONNECTION */
36281
36282 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36283 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36284 }
36285 }
36286
36287 if (nullptr == old) {
36288 old = fc_malloc(sizeof(*old));
36290 *old = *real_packet;
36292 } else {
36293 *old = *real_packet;
36294 }
36295
36296#else /* FREECIV_DELTA_PROTOCOL */
36297#ifdef FREECIV_JSON_CONNECTION
36298 field_addr.name = "unit_id";
36299#endif /* FREECIV_JSON_CONNECTION */
36300
36301 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36303 }
36304
36305#ifdef FREECIV_JSON_CONNECTION
36306 field_addr.name = "src_tile";
36307#endif /* FREECIV_JSON_CONNECTION */
36308
36309 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36311 }
36312
36313#ifdef FREECIV_JSON_CONNECTION
36314 field_addr.name = "length";
36315#endif /* FREECIV_JSON_CONNECTION */
36316
36317 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36319 }
36320
36321#ifdef FREECIV_JSON_CONNECTION
36322 field_addr.name = "repeat";
36323#endif /* FREECIV_JSON_CONNECTION */
36324
36325 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->repeat)) {
36327 }
36328
36329#ifdef FREECIV_JSON_CONNECTION
36330 field_addr.name = "vigilant";
36331#endif /* FREECIV_JSON_CONNECTION */
36332
36333 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
36335 }
36336
36337#ifdef FREECIV_JSON_CONNECTION
36338 field_addr.name = "orders";
36339#endif /* FREECIV_JSON_CONNECTION */
36340
36341 {
36342 int i;
36343
36344 if (real_packet->length > MAX_LEN_ROUTE) {
36345 RECEIVE_PACKET_FIELD_ERROR(orders, ": array truncated");
36346 }
36347
36348#ifdef FREECIV_JSON_CONNECTION
36349 /* Enter array. */
36350 field_addr.sub_location = plocation_elem_new(0);
36351#endif /* FREECIV_JSON_CONNECTION */
36352
36353 for (i = 0; i < real_packet->length; i++) {
36354#ifdef FREECIV_JSON_CONNECTION
36355 /* Next array element */
36356 field_addr.sub_location->number = i;
36357#endif /* FREECIV_JSON_CONNECTION */
36358
36359 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36361 }
36362 }
36363
36364#ifdef FREECIV_JSON_CONNECTION
36365 /* Exit array. */
36366 FC_FREE(field_addr.sub_location);
36367#endif /* FREECIV_JSON_CONNECTION */
36368 }
36369
36370#ifdef FREECIV_JSON_CONNECTION
36371 field_addr.name = "dest_tile";
36372#endif /* FREECIV_JSON_CONNECTION */
36373
36374 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36375 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36376 }
36377#endif /* FREECIV_DELTA_PROTOCOL */
36378
36380#undef FREE_PACKET_STRUCT
36381}
36382
36383static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
36384{
36385 const struct packet_unit_orders *real_packet = packet;
36386 int e;
36388
36389 log_packet_detailed("packet_unit_orders_100: sending info about ()");
36390
36391#ifdef FREECIV_DELTA_PROTOCOL
36393 struct packet_unit_orders *old;
36394 bool differ;
36395 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ORDERS;
36396
36397 if (nullptr == *hash) {
36399 nullptr, nullptr, nullptr, destroy_packet_unit_orders);
36400 }
36401 BV_CLR_ALL(fields);
36402
36403 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36404 old = fc_malloc(sizeof(*old));
36405 /* temporary bitcopy just to insert correctly */
36406 *old = *real_packet;
36409 }
36410
36411 differ = (old->unit_id != real_packet->unit_id);
36412 if (differ) {
36413 BV_SET(fields, 0);
36414 }
36415
36416 differ = (old->src_tile != real_packet->src_tile);
36417 if (differ) {
36418 BV_SET(fields, 1);
36419 }
36420
36421 differ = (old->length != real_packet->length);
36422 if (differ) {
36423 BV_SET(fields, 2);
36424 }
36425
36426 /* folded into head */
36427 if (real_packet->repeat) {
36428 BV_SET(fields, 3);
36429 }
36430
36431 /* folded into head */
36432 if (real_packet->vigilant) {
36433 BV_SET(fields, 4);
36434 }
36435
36436 differ = (old->length != real_packet->length);
36437 if (!differ) {
36438 int i;
36439
36440 for (i = 0; i < old->length; i++) {
36441 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
36442 if (differ) {
36443 break;
36444 }
36445 }
36446 }
36447 if (differ) {
36448 BV_SET(fields, 5);
36449 }
36450
36451 differ = (old->dest_tile != real_packet->dest_tile);
36452 if (differ) {
36453 BV_SET(fields, 6);
36454 }
36455#endif /* FREECIV_DELTA_PROTOCOL */
36456
36457#ifdef FREECIV_JSON_CONNECTION
36458 struct plocation field_addr;
36459 {
36460 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36463 }
36464#endif /* FREECIV_JSON_CONNECTION */
36465
36466#ifdef FREECIV_DELTA_PROTOCOL
36467#ifdef FREECIV_JSON_CONNECTION
36468 field_addr.name = "fields";
36469#endif /* FREECIV_JSON_CONNECTION */
36470 e = 0;
36471 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36472 if (e) {
36473 log_packet_detailed("fields bitvector error detected");
36474 }
36475
36476 if (BV_ISSET(fields, 0)) {
36477 log_packet_detailed(" field 'unit_id' has changed");
36478
36479#ifdef FREECIV_JSON_CONNECTION
36480 field_addr.name = "unit_id";
36481#endif /* FREECIV_JSON_CONNECTION */
36482 e = 0;
36483
36484 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36485
36486 if (e) {
36487 log_packet_detailed("'unit_id' field error detected");
36488 }
36489 }
36490
36491 if (BV_ISSET(fields, 1)) {
36492 log_packet_detailed(" field 'src_tile' has changed");
36493
36494#ifdef FREECIV_JSON_CONNECTION
36495 field_addr.name = "src_tile";
36496#endif /* FREECIV_JSON_CONNECTION */
36497 e = 0;
36498
36499 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36500
36501 if (e) {
36502 log_packet_detailed("'src_tile' field error detected");
36503 }
36504 }
36505
36506 if (BV_ISSET(fields, 2)) {
36507 log_packet_detailed(" field 'length' has changed");
36508
36509#ifdef FREECIV_JSON_CONNECTION
36510 field_addr.name = "length";
36511#endif /* FREECIV_JSON_CONNECTION */
36512 e = 0;
36513
36514 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36515
36516 if (e) {
36517 log_packet_detailed("'length' field error detected");
36518 }
36519 }
36520
36521 /* field 3 is folded into the header */
36522
36523 /* field 4 is folded into the header */
36524
36525 if (BV_ISSET(fields, 5)) {
36526 log_packet_detailed(" field 'orders' has changed");
36527
36528#ifdef FREECIV_JSON_CONNECTION
36529 field_addr.name = "orders";
36530#endif /* FREECIV_JSON_CONNECTION */
36531 e = 0;
36532
36533 {
36534 int i;
36535
36536#ifdef FREECIV_JSON_CONNECTION
36537 /* Create the array. */
36538 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36539
36540 /* Enter array. */
36541 field_addr.sub_location = plocation_elem_new(0);
36542#endif /* FREECIV_JSON_CONNECTION */
36543
36544 for (i = 0; i < real_packet->length; i++) {
36545#ifdef FREECIV_JSON_CONNECTION
36546 /* Next array element. */
36547 field_addr.sub_location->number = i;
36548#endif /* FREECIV_JSON_CONNECTION */
36549
36550 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36551 }
36552
36553#ifdef FREECIV_JSON_CONNECTION
36554 /* Exit array. */
36555 FC_FREE(field_addr.sub_location);
36556#endif /* FREECIV_JSON_CONNECTION */
36557 }
36558
36559 if (e) {
36560 log_packet_detailed("'orders' field error detected");
36561 }
36562 }
36563
36564 if (BV_ISSET(fields, 6)) {
36565 log_packet_detailed(" field 'dest_tile' has changed");
36566
36567#ifdef FREECIV_JSON_CONNECTION
36568 field_addr.name = "dest_tile";
36569#endif /* FREECIV_JSON_CONNECTION */
36570 e = 0;
36571
36572 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36573
36574 if (e) {
36575 log_packet_detailed("'dest_tile' field error detected");
36576 }
36577 }
36578
36579 *old = *real_packet;
36580
36581#else /* FREECIV_DELTA_PROTOCOL */
36582#ifdef FREECIV_JSON_CONNECTION
36583 field_addr.name = "unit_id";
36584#endif /* FREECIV_JSON_CONNECTION */
36585 e = 0;
36586
36587 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36588
36589 if (e) {
36590 log_packet_detailed("'unit_id' field error detected");
36591 }
36592
36593#ifdef FREECIV_JSON_CONNECTION
36594 field_addr.name = "src_tile";
36595#endif /* FREECIV_JSON_CONNECTION */
36596 e = 0;
36597
36598 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
36599
36600 if (e) {
36601 log_packet_detailed("'src_tile' field error detected");
36602 }
36603
36604#ifdef FREECIV_JSON_CONNECTION
36605 field_addr.name = "length";
36606#endif /* FREECIV_JSON_CONNECTION */
36607 e = 0;
36608
36609 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
36610
36611 if (e) {
36612 log_packet_detailed("'length' field error detected");
36613 }
36614
36615#ifdef FREECIV_JSON_CONNECTION
36616 field_addr.name = "repeat";
36617#endif /* FREECIV_JSON_CONNECTION */
36618 e = 0;
36619
36620 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->repeat);
36621
36622 if (e) {
36623 log_packet_detailed("'repeat' field error detected");
36624 }
36625
36626#ifdef FREECIV_JSON_CONNECTION
36627 field_addr.name = "vigilant";
36628#endif /* FREECIV_JSON_CONNECTION */
36629 e = 0;
36630
36631 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
36632
36633 if (e) {
36634 log_packet_detailed("'vigilant' field error detected");
36635 }
36636
36637#ifdef FREECIV_JSON_CONNECTION
36638 field_addr.name = "orders";
36639#endif /* FREECIV_JSON_CONNECTION */
36640 e = 0;
36641
36642 {
36643 int i;
36644
36645#ifdef FREECIV_JSON_CONNECTION
36646 /* Create the array. */
36647 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
36648
36649 /* Enter array. */
36650 field_addr.sub_location = plocation_elem_new(0);
36651#endif /* FREECIV_JSON_CONNECTION */
36652
36653 for (i = 0; i < real_packet->length; i++) {
36654#ifdef FREECIV_JSON_CONNECTION
36655 /* Next array element. */
36656 field_addr.sub_location->number = i;
36657#endif /* FREECIV_JSON_CONNECTION */
36658
36659 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
36660 }
36661
36662#ifdef FREECIV_JSON_CONNECTION
36663 /* Exit array. */
36664 FC_FREE(field_addr.sub_location);
36665#endif /* FREECIV_JSON_CONNECTION */
36666 }
36667
36668 if (e) {
36669 log_packet_detailed("'orders' field error detected");
36670 }
36671
36672#ifdef FREECIV_JSON_CONNECTION
36673 field_addr.name = "dest_tile";
36674#endif /* FREECIV_JSON_CONNECTION */
36675 e = 0;
36676
36677 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
36678
36679 if (e) {
36680 log_packet_detailed("'dest_tile' field error detected");
36681 }
36682#endif /* FREECIV_DELTA_PROTOCOL */
36683
36685}
36686
36688{
36689 if (!pc->used) {
36690 log_error("WARNING: trying to send data to the closed connection %s",
36692 return -1;
36693 }
36694 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet != nullptr, -1,
36695 "Handler for PACKET_UNIT_ORDERS not installed");
36696 return pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet(pc, packet);
36697}
36698
36700{
36701 memset(packet, 0, sizeof(*packet));
36702}
36703
36704#define free_packet_unit_server_side_agent_set(_packet) (void) 0
36705#define destroy_packet_unit_server_side_agent_set free
36706
36707#ifdef FREECIV_DELTA_PROTOCOL
36708#define hash_packet_unit_server_side_agent_set_100 hash_const
36709#define cmp_packet_unit_server_side_agent_set_100 cmp_const
36711#endif /* FREECIV_DELTA_PROTOCOL */
36712
36714{
36715#define FREE_PACKET_STRUCT(_packet) free_packet_unit_server_side_agent_set(_packet)
36717
36718#ifdef FREECIV_JSON_CONNECTION
36719 struct plocation field_addr;
36720 {
36721 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36724 }
36725#endif /* FREECIV_JSON_CONNECTION */
36726
36727 log_packet_detailed("packet_unit_server_side_agent_set_100: got info about ()");
36728
36729#ifdef FREECIV_DELTA_PROTOCOL
36732 struct genhash **hash = pc->phs.received + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36733
36734 if (nullptr == *hash) {
36736 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36737 }
36738
36739 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36740 *real_packet = *old;
36741 } else {
36742 /* packet is already initialized empty */
36743 log_packet_detailed(" no old info");
36744 }
36745
36746#ifdef FREECIV_JSON_CONNECTION
36747 field_addr.name = "fields";
36748#endif /* FREECIV_JSON_CONNECTION */
36749 DIO_BV_GET(&din, &field_addr, fields);
36750
36751 if (BV_ISSET(fields, 0)) {
36752 log_packet_detailed(" got field 'unit_id'");
36753
36754#ifdef FREECIV_JSON_CONNECTION
36755 field_addr.name = "unit_id";
36756#endif /* FREECIV_JSON_CONNECTION */
36757
36758 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36760 }
36761 }
36762
36763 if (BV_ISSET(fields, 1)) {
36764 log_packet_detailed(" got field 'agent'");
36765
36766#ifdef FREECIV_JSON_CONNECTION
36767 field_addr.name = "agent";
36768#endif /* FREECIV_JSON_CONNECTION */
36769
36770 {
36771 int readin;
36772
36773 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36775 }
36776 real_packet->agent = readin;
36777 }
36778 }
36779
36780 if (nullptr == old) {
36781 old = fc_malloc(sizeof(*old));
36783 *old = *real_packet;
36785 } else {
36786 *old = *real_packet;
36787 }
36788
36789#else /* FREECIV_DELTA_PROTOCOL */
36790#ifdef FREECIV_JSON_CONNECTION
36791 field_addr.name = "unit_id";
36792#endif /* FREECIV_JSON_CONNECTION */
36793
36794 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36796 }
36797
36798#ifdef FREECIV_JSON_CONNECTION
36799 field_addr.name = "agent";
36800#endif /* FREECIV_JSON_CONNECTION */
36801
36802 {
36803 int readin;
36804
36805 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36807 }
36808 real_packet->agent = readin;
36809 }
36810#endif /* FREECIV_DELTA_PROTOCOL */
36811
36813#undef FREE_PACKET_STRUCT
36814}
36815
36817{
36818 const struct packet_unit_server_side_agent_set *real_packet = packet;
36819 int e;
36821
36822 log_packet_detailed("packet_unit_server_side_agent_set_100: sending info about ()");
36823
36824#ifdef FREECIV_DELTA_PROTOCOL
36827 bool differ;
36828 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
36829
36830 if (nullptr == *hash) {
36832 nullptr, nullptr, nullptr, destroy_packet_unit_server_side_agent_set);
36833 }
36834 BV_CLR_ALL(fields);
36835
36836 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36837 old = fc_malloc(sizeof(*old));
36838 /* temporary bitcopy just to insert correctly */
36839 *old = *real_packet;
36842 }
36843
36844 differ = (old->unit_id != real_packet->unit_id);
36845 if (differ) {
36846 BV_SET(fields, 0);
36847 }
36848
36849 differ = (old->agent != real_packet->agent);
36850 if (differ) {
36851 BV_SET(fields, 1);
36852 }
36853#endif /* FREECIV_DELTA_PROTOCOL */
36854
36855#ifdef FREECIV_JSON_CONNECTION
36856 struct plocation field_addr;
36857 {
36858 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36861 }
36862#endif /* FREECIV_JSON_CONNECTION */
36863
36864#ifdef FREECIV_DELTA_PROTOCOL
36865#ifdef FREECIV_JSON_CONNECTION
36866 field_addr.name = "fields";
36867#endif /* FREECIV_JSON_CONNECTION */
36868 e = 0;
36869 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36870 if (e) {
36871 log_packet_detailed("fields bitvector error detected");
36872 }
36873
36874 if (BV_ISSET(fields, 0)) {
36875 log_packet_detailed(" field 'unit_id' has changed");
36876
36877#ifdef FREECIV_JSON_CONNECTION
36878 field_addr.name = "unit_id";
36879#endif /* FREECIV_JSON_CONNECTION */
36880 e = 0;
36881
36882 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36883
36884 if (e) {
36885 log_packet_detailed("'unit_id' field error detected");
36886 }
36887 }
36888
36889 if (BV_ISSET(fields, 1)) {
36890 log_packet_detailed(" field 'agent' has changed");
36891
36892#ifdef FREECIV_JSON_CONNECTION
36893 field_addr.name = "agent";
36894#endif /* FREECIV_JSON_CONNECTION */
36895 e = 0;
36896
36897 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36898
36899 if (e) {
36900 log_packet_detailed("'agent' field error detected");
36901 }
36902 }
36903
36904 *old = *real_packet;
36905
36906#else /* FREECIV_DELTA_PROTOCOL */
36907#ifdef FREECIV_JSON_CONNECTION
36908 field_addr.name = "unit_id";
36909#endif /* FREECIV_JSON_CONNECTION */
36910 e = 0;
36911
36912 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36913
36914 if (e) {
36915 log_packet_detailed("'unit_id' field error detected");
36916 }
36917
36918#ifdef FREECIV_JSON_CONNECTION
36919 field_addr.name = "agent";
36920#endif /* FREECIV_JSON_CONNECTION */
36921 e = 0;
36922
36923 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
36924
36925 if (e) {
36926 log_packet_detailed("'agent' field error detected");
36927 }
36928#endif /* FREECIV_DELTA_PROTOCOL */
36929
36931}
36932
36934{
36935 if (!pc->used) {
36936 log_error("WARNING: trying to send data to the closed connection %s",
36938 return -1;
36939 }
36940 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet != nullptr, -1,
36941 "Handler for PACKET_UNIT_SERVER_SIDE_AGENT_SET not installed");
36942 return pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet(pc, packet);
36943}
36944
36946{
36947 struct packet_unit_server_side_agent_set packet, *real_packet = &packet;
36948
36950 real_packet->agent = agent;
36951
36953}
36954
36956{
36957 memset(packet, 0, sizeof(*packet));
36958}
36959
36960#define free_packet_unit_action_query(_packet) (void) 0
36961#define destroy_packet_unit_action_query free
36962
36963#ifdef FREECIV_DELTA_PROTOCOL
36964#define hash_packet_unit_action_query_100 hash_const
36965#define cmp_packet_unit_action_query_100 cmp_const
36967#endif /* FREECIV_DELTA_PROTOCOL */
36968
36970{
36971#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_query(_packet)
36973
36974#ifdef FREECIV_JSON_CONNECTION
36975 struct plocation field_addr;
36976 {
36977 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
36980 }
36981#endif /* FREECIV_JSON_CONNECTION */
36982
36983 log_packet_detailed("packet_unit_action_query_100: got info about ()");
36984
36985#ifdef FREECIV_DELTA_PROTOCOL
36988 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_QUERY;
36989
36990 if (nullptr == *hash) {
36992 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
36993 }
36994
36995 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36996 *real_packet = *old;
36997 } else {
36998 /* packet is already initialized empty */
36999 log_packet_detailed(" no old info");
37000 }
37001
37002#ifdef FREECIV_JSON_CONNECTION
37003 field_addr.name = "fields";
37004#endif /* FREECIV_JSON_CONNECTION */
37005 DIO_BV_GET(&din, &field_addr, fields);
37006
37007 if (BV_ISSET(fields, 0)) {
37008 log_packet_detailed(" got field 'actor_id'");
37009
37010#ifdef FREECIV_JSON_CONNECTION
37011 field_addr.name = "actor_id";
37012#endif /* FREECIV_JSON_CONNECTION */
37013
37014 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37016 }
37017 }
37018
37019 if (BV_ISSET(fields, 1)) {
37020 log_packet_detailed(" got field 'target_id'");
37021
37022#ifdef FREECIV_JSON_CONNECTION
37023 field_addr.name = "target_id";
37024#endif /* FREECIV_JSON_CONNECTION */
37025
37026 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37027 RECEIVE_PACKET_FIELD_ERROR(target_id);
37028 }
37029 }
37030
37031 if (BV_ISSET(fields, 2)) {
37032 log_packet_detailed(" got field 'action_type'");
37033
37034#ifdef FREECIV_JSON_CONNECTION
37035 field_addr.name = "action_type";
37036#endif /* FREECIV_JSON_CONNECTION */
37037
37038 {
37039 int readin;
37040
37041 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37042 RECEIVE_PACKET_FIELD_ERROR(action_type);
37043 }
37044 real_packet->action_type = readin;
37045 }
37046 }
37047
37048 if (BV_ISSET(fields, 3)) {
37049 log_packet_detailed(" got field 'request_kind'");
37050
37051#ifdef FREECIV_JSON_CONNECTION
37052 field_addr.name = "request_kind";
37053#endif /* FREECIV_JSON_CONNECTION */
37054
37055 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37056 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37057 }
37058 }
37059
37060 if (nullptr == old) {
37061 old = fc_malloc(sizeof(*old));
37063 *old = *real_packet;
37065 } else {
37066 *old = *real_packet;
37067 }
37068
37069#else /* FREECIV_DELTA_PROTOCOL */
37070#ifdef FREECIV_JSON_CONNECTION
37071 field_addr.name = "actor_id";
37072#endif /* FREECIV_JSON_CONNECTION */
37073
37074 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37076 }
37077
37078#ifdef FREECIV_JSON_CONNECTION
37079 field_addr.name = "target_id";
37080#endif /* FREECIV_JSON_CONNECTION */
37081
37082 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37083 RECEIVE_PACKET_FIELD_ERROR(target_id);
37084 }
37085
37086#ifdef FREECIV_JSON_CONNECTION
37087 field_addr.name = "action_type";
37088#endif /* FREECIV_JSON_CONNECTION */
37089
37090 {
37091 int readin;
37092
37093 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37094 RECEIVE_PACKET_FIELD_ERROR(action_type);
37095 }
37096 real_packet->action_type = readin;
37097 }
37098
37099#ifdef FREECIV_JSON_CONNECTION
37100 field_addr.name = "request_kind";
37101#endif /* FREECIV_JSON_CONNECTION */
37102
37103 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37104 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37105 }
37106#endif /* FREECIV_DELTA_PROTOCOL */
37107
37109#undef FREE_PACKET_STRUCT
37110}
37111
37113{
37114 const struct packet_unit_action_query *real_packet = packet;
37115 int e;
37117
37118 log_packet_detailed("packet_unit_action_query_100: sending info about ()");
37119
37120#ifdef FREECIV_DELTA_PROTOCOL
37123 bool differ;
37124 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_QUERY;
37125
37126 if (nullptr == *hash) {
37128 nullptr, nullptr, nullptr, destroy_packet_unit_action_query);
37129 }
37130 BV_CLR_ALL(fields);
37131
37132 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37133 old = fc_malloc(sizeof(*old));
37134 /* temporary bitcopy just to insert correctly */
37135 *old = *real_packet;
37138 }
37139
37140 differ = (old->actor_id != real_packet->actor_id);
37141 if (differ) {
37142 BV_SET(fields, 0);
37143 }
37144
37145 differ = (old->target_id != real_packet->target_id);
37146 if (differ) {
37147 BV_SET(fields, 1);
37148 }
37149
37150 differ = (old->action_type != real_packet->action_type);
37151 if (differ) {
37152 BV_SET(fields, 2);
37153 }
37154
37155 differ = (old->request_kind != real_packet->request_kind);
37156 if (differ) {
37157 BV_SET(fields, 3);
37158 }
37159#endif /* FREECIV_DELTA_PROTOCOL */
37160
37161#ifdef FREECIV_JSON_CONNECTION
37162 struct plocation field_addr;
37163 {
37164 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37167 }
37168#endif /* FREECIV_JSON_CONNECTION */
37169
37170#ifdef FREECIV_DELTA_PROTOCOL
37171#ifdef FREECIV_JSON_CONNECTION
37172 field_addr.name = "fields";
37173#endif /* FREECIV_JSON_CONNECTION */
37174 e = 0;
37175 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37176 if (e) {
37177 log_packet_detailed("fields bitvector error detected");
37178 }
37179
37180 if (BV_ISSET(fields, 0)) {
37181 log_packet_detailed(" field 'actor_id' has changed");
37182
37183#ifdef FREECIV_JSON_CONNECTION
37184 field_addr.name = "actor_id";
37185#endif /* FREECIV_JSON_CONNECTION */
37186 e = 0;
37187
37188 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37189
37190 if (e) {
37191 log_packet_detailed("'actor_id' field error detected");
37192 }
37193 }
37194
37195 if (BV_ISSET(fields, 1)) {
37196 log_packet_detailed(" field 'target_id' has changed");
37197
37198#ifdef FREECIV_JSON_CONNECTION
37199 field_addr.name = "target_id";
37200#endif /* FREECIV_JSON_CONNECTION */
37201 e = 0;
37202
37203 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37204
37205 if (e) {
37206 log_packet_detailed("'target_id' field error detected");
37207 }
37208 }
37209
37210 if (BV_ISSET(fields, 2)) {
37211 log_packet_detailed(" field 'action_type' has changed");
37212
37213#ifdef FREECIV_JSON_CONNECTION
37214 field_addr.name = "action_type";
37215#endif /* FREECIV_JSON_CONNECTION */
37216 e = 0;
37217
37218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37219
37220 if (e) {
37221 log_packet_detailed("'action_type' field error detected");
37222 }
37223 }
37224
37225 if (BV_ISSET(fields, 3)) {
37226 log_packet_detailed(" field 'request_kind' has changed");
37227
37228#ifdef FREECIV_JSON_CONNECTION
37229 field_addr.name = "request_kind";
37230#endif /* FREECIV_JSON_CONNECTION */
37231 e = 0;
37232
37233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37234
37235 if (e) {
37236 log_packet_detailed("'request_kind' field error detected");
37237 }
37238 }
37239
37240 *old = *real_packet;
37241
37242#else /* FREECIV_DELTA_PROTOCOL */
37243#ifdef FREECIV_JSON_CONNECTION
37244 field_addr.name = "actor_id";
37245#endif /* FREECIV_JSON_CONNECTION */
37246 e = 0;
37247
37248 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37249
37250 if (e) {
37251 log_packet_detailed("'actor_id' field error detected");
37252 }
37253
37254#ifdef FREECIV_JSON_CONNECTION
37255 field_addr.name = "target_id";
37256#endif /* FREECIV_JSON_CONNECTION */
37257 e = 0;
37258
37259 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37260
37261 if (e) {
37262 log_packet_detailed("'target_id' field error detected");
37263 }
37264
37265#ifdef FREECIV_JSON_CONNECTION
37266 field_addr.name = "action_type";
37267#endif /* FREECIV_JSON_CONNECTION */
37268 e = 0;
37269
37270 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37271
37272 if (e) {
37273 log_packet_detailed("'action_type' field error detected");
37274 }
37275
37276#ifdef FREECIV_JSON_CONNECTION
37277 field_addr.name = "request_kind";
37278#endif /* FREECIV_JSON_CONNECTION */
37279 e = 0;
37280
37281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37282
37283 if (e) {
37284 log_packet_detailed("'request_kind' field error detected");
37285 }
37286#endif /* FREECIV_DELTA_PROTOCOL */
37287
37289}
37290
37292{
37293 if (!pc->used) {
37294 log_error("WARNING: trying to send data to the closed connection %s",
37296 return -1;
37297 }
37298 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet != nullptr, -1,
37299 "Handler for PACKET_UNIT_ACTION_QUERY not installed");
37300 return pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet(pc, packet);
37301}
37302
37303int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
37304{
37305 struct packet_unit_action_query packet, *real_packet = &packet;
37306
37308 real_packet->target_id = target_id;
37309 real_packet->action_type = action_type;
37310 real_packet->request_kind = request_kind;
37311
37313}
37314
37316{
37317 memset(packet, 0, sizeof(*packet));
37318}
37319
37320#define free_packet_unit_type_upgrade(_packet) (void) 0
37321#define destroy_packet_unit_type_upgrade free
37322
37323#ifdef FREECIV_DELTA_PROTOCOL
37324#define hash_packet_unit_type_upgrade_100 hash_const
37325#define cmp_packet_unit_type_upgrade_100 cmp_const
37327#endif /* FREECIV_DELTA_PROTOCOL */
37328
37330{
37331#define FREE_PACKET_STRUCT(_packet) free_packet_unit_type_upgrade(_packet)
37333
37334#ifdef FREECIV_JSON_CONNECTION
37335 struct plocation field_addr;
37336 {
37337 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37340 }
37341#endif /* FREECIV_JSON_CONNECTION */
37342
37343 log_packet_detailed("packet_unit_type_upgrade_100: got info about ()");
37344
37345#ifdef FREECIV_DELTA_PROTOCOL
37348 struct genhash **hash = pc->phs.received + PACKET_UNIT_TYPE_UPGRADE;
37349
37350 if (nullptr == *hash) {
37352 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37353 }
37354
37355 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37356 *real_packet = *old;
37357 } else {
37358 /* packet is already initialized empty */
37359 log_packet_detailed(" no old info");
37360 }
37361
37362#ifdef FREECIV_JSON_CONNECTION
37363 field_addr.name = "fields";
37364#endif /* FREECIV_JSON_CONNECTION */
37365 DIO_BV_GET(&din, &field_addr, fields);
37366
37367 if (BV_ISSET(fields, 0)) {
37368 log_packet_detailed(" got field 'type'");
37369
37370#ifdef FREECIV_JSON_CONNECTION
37371 field_addr.name = "type";
37372#endif /* FREECIV_JSON_CONNECTION */
37373
37374 {
37375 int readin;
37376
37377 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37379 }
37380 real_packet->type = readin;
37381 }
37382 }
37383
37384 if (nullptr == old) {
37385 old = fc_malloc(sizeof(*old));
37387 *old = *real_packet;
37389 } else {
37390 *old = *real_packet;
37391 }
37392
37393#else /* FREECIV_DELTA_PROTOCOL */
37394#ifdef FREECIV_JSON_CONNECTION
37395 field_addr.name = "type";
37396#endif /* FREECIV_JSON_CONNECTION */
37397
37398 {
37399 int readin;
37400
37401 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37403 }
37404 real_packet->type = readin;
37405 }
37406#endif /* FREECIV_DELTA_PROTOCOL */
37407
37409#undef FREE_PACKET_STRUCT
37410}
37411
37413{
37414 const struct packet_unit_type_upgrade *real_packet = packet;
37415 int e;
37417
37418 log_packet_detailed("packet_unit_type_upgrade_100: sending info about ()");
37419
37420#ifdef FREECIV_DELTA_PROTOCOL
37423 bool differ;
37424 struct genhash **hash = pc->phs.sent + PACKET_UNIT_TYPE_UPGRADE;
37425
37426 if (nullptr == *hash) {
37428 nullptr, nullptr, nullptr, destroy_packet_unit_type_upgrade);
37429 }
37430 BV_CLR_ALL(fields);
37431
37432 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37433 old = fc_malloc(sizeof(*old));
37434 /* temporary bitcopy just to insert correctly */
37435 *old = *real_packet;
37438 }
37439
37440 differ = (old->type != real_packet->type);
37441 if (differ) {
37442 BV_SET(fields, 0);
37443 }
37444#endif /* FREECIV_DELTA_PROTOCOL */
37445
37446#ifdef FREECIV_JSON_CONNECTION
37447 struct plocation field_addr;
37448 {
37449 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37452 }
37453#endif /* FREECIV_JSON_CONNECTION */
37454
37455#ifdef FREECIV_DELTA_PROTOCOL
37456#ifdef FREECIV_JSON_CONNECTION
37457 field_addr.name = "fields";
37458#endif /* FREECIV_JSON_CONNECTION */
37459 e = 0;
37460 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37461 if (e) {
37462 log_packet_detailed("fields bitvector error detected");
37463 }
37464
37465 if (BV_ISSET(fields, 0)) {
37466 log_packet_detailed(" field 'type' has changed");
37467
37468#ifdef FREECIV_JSON_CONNECTION
37469 field_addr.name = "type";
37470#endif /* FREECIV_JSON_CONNECTION */
37471 e = 0;
37472
37473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37474
37475 if (e) {
37476 log_packet_detailed("'type' field error detected");
37477 }
37478 }
37479
37480 *old = *real_packet;
37481
37482#else /* FREECIV_DELTA_PROTOCOL */
37483#ifdef FREECIV_JSON_CONNECTION
37484 field_addr.name = "type";
37485#endif /* FREECIV_JSON_CONNECTION */
37486 e = 0;
37487
37488 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37489
37490 if (e) {
37491 log_packet_detailed("'type' field error detected");
37492 }
37493#endif /* FREECIV_DELTA_PROTOCOL */
37494
37496}
37497
37499{
37500 if (!pc->used) {
37501 log_error("WARNING: trying to send data to the closed connection %s",
37503 return -1;
37504 }
37505 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet != nullptr, -1,
37506 "Handler for PACKET_UNIT_TYPE_UPGRADE not installed");
37507 return pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet(pc, packet);
37508}
37509
37511{
37512 struct packet_unit_type_upgrade packet, *real_packet = &packet;
37513
37515
37517}
37518
37519static inline void init_packet_unit_do_action(struct packet_unit_do_action *packet)
37520{
37521 memset(packet, 0, sizeof(*packet));
37522}
37523
37524#define free_packet_unit_do_action(_packet) (void) 0
37525#define destroy_packet_unit_do_action free
37526
37527#ifdef FREECIV_DELTA_PROTOCOL
37528#define hash_packet_unit_do_action_100 hash_const
37529#define cmp_packet_unit_do_action_100 cmp_const
37531#endif /* FREECIV_DELTA_PROTOCOL */
37532
37534{
37535#define FREE_PACKET_STRUCT(_packet) free_packet_unit_do_action(_packet)
37537
37538#ifdef FREECIV_JSON_CONNECTION
37539 struct plocation field_addr;
37540 {
37541 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37544 }
37545#endif /* FREECIV_JSON_CONNECTION */
37546
37547 log_packet_detailed("packet_unit_do_action_100: got info about ()");
37548
37549#ifdef FREECIV_DELTA_PROTOCOL
37551 struct packet_unit_do_action *old;
37552 struct genhash **hash = pc->phs.received + PACKET_UNIT_DO_ACTION;
37553
37554 if (nullptr == *hash) {
37556 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37557 }
37558
37559 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37560 *real_packet = *old;
37561 } else {
37562 /* packet is already initialized empty */
37563 log_packet_detailed(" no old info");
37564 }
37565
37566#ifdef FREECIV_JSON_CONNECTION
37567 field_addr.name = "fields";
37568#endif /* FREECIV_JSON_CONNECTION */
37569 DIO_BV_GET(&din, &field_addr, fields);
37570
37571 if (BV_ISSET(fields, 0)) {
37572 log_packet_detailed(" got field 'actor_id'");
37573
37574#ifdef FREECIV_JSON_CONNECTION
37575 field_addr.name = "actor_id";
37576#endif /* FREECIV_JSON_CONNECTION */
37577
37578 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37580 }
37581 }
37582
37583 if (BV_ISSET(fields, 1)) {
37584 log_packet_detailed(" got field 'target_id'");
37585
37586#ifdef FREECIV_JSON_CONNECTION
37587 field_addr.name = "target_id";
37588#endif /* FREECIV_JSON_CONNECTION */
37589
37590 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37591 RECEIVE_PACKET_FIELD_ERROR(target_id);
37592 }
37593 }
37594
37595 if (BV_ISSET(fields, 2)) {
37596 log_packet_detailed(" got field 'sub_tgt_id'");
37597
37598#ifdef FREECIV_JSON_CONNECTION
37599 field_addr.name = "sub_tgt_id";
37600#endif /* FREECIV_JSON_CONNECTION */
37601
37602 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37603 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37604 }
37605 }
37606
37607 if (BV_ISSET(fields, 3)) {
37608 log_packet_detailed(" got field 'name'");
37609
37610#ifdef FREECIV_JSON_CONNECTION
37611 field_addr.name = "name";
37612#endif /* FREECIV_JSON_CONNECTION */
37613
37614 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37616 }
37617 }
37618
37619 if (BV_ISSET(fields, 4)) {
37620 log_packet_detailed(" got field 'action_type'");
37621
37622#ifdef FREECIV_JSON_CONNECTION
37623 field_addr.name = "action_type";
37624#endif /* FREECIV_JSON_CONNECTION */
37625
37626 {
37627 int readin;
37628
37629 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37630 RECEIVE_PACKET_FIELD_ERROR(action_type);
37631 }
37632 real_packet->action_type = readin;
37633 }
37634 }
37635
37636 if (nullptr == old) {
37637 old = fc_malloc(sizeof(*old));
37639 *old = *real_packet;
37641 } else {
37642 *old = *real_packet;
37643 }
37644
37645#else /* FREECIV_DELTA_PROTOCOL */
37646#ifdef FREECIV_JSON_CONNECTION
37647 field_addr.name = "actor_id";
37648#endif /* FREECIV_JSON_CONNECTION */
37649
37650 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37652 }
37653
37654#ifdef FREECIV_JSON_CONNECTION
37655 field_addr.name = "target_id";
37656#endif /* FREECIV_JSON_CONNECTION */
37657
37658 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37659 RECEIVE_PACKET_FIELD_ERROR(target_id);
37660 }
37661
37662#ifdef FREECIV_JSON_CONNECTION
37663 field_addr.name = "sub_tgt_id";
37664#endif /* FREECIV_JSON_CONNECTION */
37665
37666 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
37667 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
37668 }
37669
37670#ifdef FREECIV_JSON_CONNECTION
37671 field_addr.name = "name";
37672#endif /* FREECIV_JSON_CONNECTION */
37673
37674 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
37676 }
37677
37678#ifdef FREECIV_JSON_CONNECTION
37679 field_addr.name = "action_type";
37680#endif /* FREECIV_JSON_CONNECTION */
37681
37682 {
37683 int readin;
37684
37685 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37686 RECEIVE_PACKET_FIELD_ERROR(action_type);
37687 }
37688 real_packet->action_type = readin;
37689 }
37690#endif /* FREECIV_DELTA_PROTOCOL */
37691
37693#undef FREE_PACKET_STRUCT
37694}
37695
37697{
37698 const struct packet_unit_do_action *real_packet = packet;
37699 int e;
37701
37702 log_packet_detailed("packet_unit_do_action_100: sending info about ()");
37703
37704#ifdef FREECIV_DELTA_PROTOCOL
37706 struct packet_unit_do_action *old;
37707 bool differ;
37708 struct genhash **hash = pc->phs.sent + PACKET_UNIT_DO_ACTION;
37709
37710 if (nullptr == *hash) {
37712 nullptr, nullptr, nullptr, destroy_packet_unit_do_action);
37713 }
37714 BV_CLR_ALL(fields);
37715
37716 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37717 old = fc_malloc(sizeof(*old));
37718 /* temporary bitcopy just to insert correctly */
37719 *old = *real_packet;
37722 }
37723
37724 differ = (old->actor_id != real_packet->actor_id);
37725 if (differ) {
37726 BV_SET(fields, 0);
37727 }
37728
37729 differ = (old->target_id != real_packet->target_id);
37730 if (differ) {
37731 BV_SET(fields, 1);
37732 }
37733
37734 differ = (old->sub_tgt_id != real_packet->sub_tgt_id);
37735 if (differ) {
37736 BV_SET(fields, 2);
37737 }
37738
37739 differ = (strcmp(old->name, real_packet->name) != 0);
37740 if (differ) {
37741 BV_SET(fields, 3);
37742 }
37743
37744 differ = (old->action_type != real_packet->action_type);
37745 if (differ) {
37746 BV_SET(fields, 4);
37747 }
37748#endif /* FREECIV_DELTA_PROTOCOL */
37749
37750#ifdef FREECIV_JSON_CONNECTION
37751 struct plocation field_addr;
37752 {
37753 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37756 }
37757#endif /* FREECIV_JSON_CONNECTION */
37758
37759#ifdef FREECIV_DELTA_PROTOCOL
37760#ifdef FREECIV_JSON_CONNECTION
37761 field_addr.name = "fields";
37762#endif /* FREECIV_JSON_CONNECTION */
37763 e = 0;
37764 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37765 if (e) {
37766 log_packet_detailed("fields bitvector error detected");
37767 }
37768
37769 if (BV_ISSET(fields, 0)) {
37770 log_packet_detailed(" field 'actor_id' has changed");
37771
37772#ifdef FREECIV_JSON_CONNECTION
37773 field_addr.name = "actor_id";
37774#endif /* FREECIV_JSON_CONNECTION */
37775 e = 0;
37776
37777 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37778
37779 if (e) {
37780 log_packet_detailed("'actor_id' field error detected");
37781 }
37782 }
37783
37784 if (BV_ISSET(fields, 1)) {
37785 log_packet_detailed(" field 'target_id' has changed");
37786
37787#ifdef FREECIV_JSON_CONNECTION
37788 field_addr.name = "target_id";
37789#endif /* FREECIV_JSON_CONNECTION */
37790 e = 0;
37791
37792 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37793
37794 if (e) {
37795 log_packet_detailed("'target_id' field error detected");
37796 }
37797 }
37798
37799 if (BV_ISSET(fields, 2)) {
37800 log_packet_detailed(" field 'sub_tgt_id' has changed");
37801
37802#ifdef FREECIV_JSON_CONNECTION
37803 field_addr.name = "sub_tgt_id";
37804#endif /* FREECIV_JSON_CONNECTION */
37805 e = 0;
37806
37807 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37808
37809 if (e) {
37810 log_packet_detailed("'sub_tgt_id' field error detected");
37811 }
37812 }
37813
37814 if (BV_ISSET(fields, 3)) {
37815 log_packet_detailed(" field 'name' has changed");
37816
37817#ifdef FREECIV_JSON_CONNECTION
37818 field_addr.name = "name";
37819#endif /* FREECIV_JSON_CONNECTION */
37820 e = 0;
37821
37822 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37823
37824 if (e) {
37825 log_packet_detailed("'name' field error detected");
37826 }
37827 }
37828
37829 if (BV_ISSET(fields, 4)) {
37830 log_packet_detailed(" field 'action_type' has changed");
37831
37832#ifdef FREECIV_JSON_CONNECTION
37833 field_addr.name = "action_type";
37834#endif /* FREECIV_JSON_CONNECTION */
37835 e = 0;
37836
37837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37838
37839 if (e) {
37840 log_packet_detailed("'action_type' field error detected");
37841 }
37842 }
37843
37844 *old = *real_packet;
37845
37846#else /* FREECIV_DELTA_PROTOCOL */
37847#ifdef FREECIV_JSON_CONNECTION
37848 field_addr.name = "actor_id";
37849#endif /* FREECIV_JSON_CONNECTION */
37850 e = 0;
37851
37852 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37853
37854 if (e) {
37855 log_packet_detailed("'actor_id' field error detected");
37856 }
37857
37858#ifdef FREECIV_JSON_CONNECTION
37859 field_addr.name = "target_id";
37860#endif /* FREECIV_JSON_CONNECTION */
37861 e = 0;
37862
37863 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37864
37865 if (e) {
37866 log_packet_detailed("'target_id' field error detected");
37867 }
37868
37869#ifdef FREECIV_JSON_CONNECTION
37870 field_addr.name = "sub_tgt_id";
37871#endif /* FREECIV_JSON_CONNECTION */
37872 e = 0;
37873
37874 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
37875
37876 if (e) {
37877 log_packet_detailed("'sub_tgt_id' field error detected");
37878 }
37879
37880#ifdef FREECIV_JSON_CONNECTION
37881 field_addr.name = "name";
37882#endif /* FREECIV_JSON_CONNECTION */
37883 e = 0;
37884
37885 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
37886
37887 if (e) {
37888 log_packet_detailed("'name' field error detected");
37889 }
37890
37891#ifdef FREECIV_JSON_CONNECTION
37892 field_addr.name = "action_type";
37893#endif /* FREECIV_JSON_CONNECTION */
37894 e = 0;
37895
37896 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37897
37898 if (e) {
37899 log_packet_detailed("'action_type' field error detected");
37900 }
37901#endif /* FREECIV_DELTA_PROTOCOL */
37902
37904}
37905
37907{
37908 if (!pc->used) {
37909 log_error("WARNING: trying to send data to the closed connection %s",
37911 return -1;
37912 }
37913 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet != nullptr, -1,
37914 "Handler for PACKET_UNIT_DO_ACTION not installed");
37915 return pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet(pc, packet);
37916}
37917
37918int 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)
37919{
37920 struct packet_unit_do_action packet, *real_packet = &packet;
37921
37923 real_packet->target_id = target_id;
37924 real_packet->sub_tgt_id = sub_tgt_id;
37925 sz_strlcpy(real_packet->name, name);
37926 real_packet->action_type = action_type;
37927
37929}
37930
37932{
37933 memset(packet, 0, sizeof(*packet));
37934}
37935
37936#define free_packet_unit_action_answer(_packet) (void) 0
37937#define destroy_packet_unit_action_answer free
37938
37939#ifdef FREECIV_DELTA_PROTOCOL
37940#define hash_packet_unit_action_answer_100 hash_const
37941#define cmp_packet_unit_action_answer_100 cmp_const
37943#endif /* FREECIV_DELTA_PROTOCOL */
37944
37946{
37947#define FREE_PACKET_STRUCT(_packet) free_packet_unit_action_answer(_packet)
37949
37950#ifdef FREECIV_JSON_CONNECTION
37951 struct plocation field_addr;
37952 {
37953 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
37956 }
37957#endif /* FREECIV_JSON_CONNECTION */
37958
37959 log_packet_detailed("packet_unit_action_answer_100: got info about ()");
37960
37961#ifdef FREECIV_DELTA_PROTOCOL
37964 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_ANSWER;
37965
37966 if (nullptr == *hash) {
37968 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
37969 }
37970
37971 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37972 *real_packet = *old;
37973 } else {
37974 /* packet is already initialized empty */
37975 log_packet_detailed(" no old info");
37976 }
37977
37978#ifdef FREECIV_JSON_CONNECTION
37979 field_addr.name = "fields";
37980#endif /* FREECIV_JSON_CONNECTION */
37981 DIO_BV_GET(&din, &field_addr, fields);
37982
37983 if (BV_ISSET(fields, 0)) {
37984 log_packet_detailed(" got field 'actor_id'");
37985
37986#ifdef FREECIV_JSON_CONNECTION
37987 field_addr.name = "actor_id";
37988#endif /* FREECIV_JSON_CONNECTION */
37989
37990 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37992 }
37993 }
37994
37995 if (BV_ISSET(fields, 1)) {
37996 log_packet_detailed(" got field 'target_id'");
37997
37998#ifdef FREECIV_JSON_CONNECTION
37999 field_addr.name = "target_id";
38000#endif /* FREECIV_JSON_CONNECTION */
38001
38002 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38003 RECEIVE_PACKET_FIELD_ERROR(target_id);
38004 }
38005 }
38006
38007 if (BV_ISSET(fields, 2)) {
38008 log_packet_detailed(" got field 'cost'");
38009
38010#ifdef FREECIV_JSON_CONNECTION
38011 field_addr.name = "cost";
38012#endif /* FREECIV_JSON_CONNECTION */
38013
38014 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
38016 }
38017 }
38018
38019 if (BV_ISSET(fields, 3)) {
38020 log_packet_detailed(" got field 'action_type'");
38021
38022#ifdef FREECIV_JSON_CONNECTION
38023 field_addr.name = "action_type";
38024#endif /* FREECIV_JSON_CONNECTION */
38025
38026 {
38027 int readin;
38028
38029 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38030 RECEIVE_PACKET_FIELD_ERROR(action_type);
38031 }
38032 real_packet->action_type = readin;
38033 }
38034 }
38035
38036 if (BV_ISSET(fields, 4)) {
38037 log_packet_detailed(" got field 'request_kind'");
38038
38039#ifdef FREECIV_JSON_CONNECTION
38040 field_addr.name = "request_kind";
38041#endif /* FREECIV_JSON_CONNECTION */
38042
38043 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38044 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38045 }
38046 }
38047
38048 if (nullptr == old) {
38049 old = fc_malloc(sizeof(*old));
38051 *old = *real_packet;
38053 } else {
38054 *old = *real_packet;
38055 }
38056
38057#else /* FREECIV_DELTA_PROTOCOL */
38058#ifdef FREECIV_JSON_CONNECTION
38059 field_addr.name = "actor_id";
38060#endif /* FREECIV_JSON_CONNECTION */
38061
38062 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38064 }
38065
38066#ifdef FREECIV_JSON_CONNECTION
38067 field_addr.name = "target_id";
38068#endif /* FREECIV_JSON_CONNECTION */
38069
38070 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38071 RECEIVE_PACKET_FIELD_ERROR(target_id);
38072 }
38073
38074#ifdef FREECIV_JSON_CONNECTION
38075 field_addr.name = "cost";
38076#endif /* FREECIV_JSON_CONNECTION */
38077
38078 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
38080 }
38081
38082#ifdef FREECIV_JSON_CONNECTION
38083 field_addr.name = "action_type";
38084#endif /* FREECIV_JSON_CONNECTION */
38085
38086 {
38087 int readin;
38088
38089 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38090 RECEIVE_PACKET_FIELD_ERROR(action_type);
38091 }
38092 real_packet->action_type = readin;
38093 }
38094
38095#ifdef FREECIV_JSON_CONNECTION
38096 field_addr.name = "request_kind";
38097#endif /* FREECIV_JSON_CONNECTION */
38098
38099 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38100 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38101 }
38102#endif /* FREECIV_DELTA_PROTOCOL */
38103
38105#undef FREE_PACKET_STRUCT
38106}
38107
38109{
38110 const struct packet_unit_action_answer *real_packet = packet;
38111 int e;
38113
38114 log_packet_detailed("packet_unit_action_answer_100: sending info about ()");
38115
38116#ifdef FREECIV_DELTA_PROTOCOL
38119 bool differ;
38120 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_ANSWER;
38121
38122 if (nullptr == *hash) {
38124 nullptr, nullptr, nullptr, destroy_packet_unit_action_answer);
38125 }
38126 BV_CLR_ALL(fields);
38127
38128 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38129 old = fc_malloc(sizeof(*old));
38130 /* temporary bitcopy just to insert correctly */
38131 *old = *real_packet;
38134 }
38135
38136 differ = (old->actor_id != real_packet->actor_id);
38137 if (differ) {
38138 BV_SET(fields, 0);
38139 }
38140
38141 differ = (old->target_id != real_packet->target_id);
38142 if (differ) {
38143 BV_SET(fields, 1);
38144 }
38145
38146 differ = (old->cost != real_packet->cost);
38147 if (differ) {
38148 BV_SET(fields, 2);
38149 }
38150
38151 differ = (old->action_type != real_packet->action_type);
38152 if (differ) {
38153 BV_SET(fields, 3);
38154 }
38155
38156 differ = (old->request_kind != real_packet->request_kind);
38157 if (differ) {
38158 BV_SET(fields, 4);
38159 }
38160#endif /* FREECIV_DELTA_PROTOCOL */
38161
38162#ifdef FREECIV_JSON_CONNECTION
38163 struct plocation field_addr;
38164 {
38165 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38168 }
38169#endif /* FREECIV_JSON_CONNECTION */
38170
38171#ifdef FREECIV_DELTA_PROTOCOL
38172#ifdef FREECIV_JSON_CONNECTION
38173 field_addr.name = "fields";
38174#endif /* FREECIV_JSON_CONNECTION */
38175 e = 0;
38176 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38177 if (e) {
38178 log_packet_detailed("fields bitvector error detected");
38179 }
38180
38181 if (BV_ISSET(fields, 0)) {
38182 log_packet_detailed(" field 'actor_id' has changed");
38183
38184#ifdef FREECIV_JSON_CONNECTION
38185 field_addr.name = "actor_id";
38186#endif /* FREECIV_JSON_CONNECTION */
38187 e = 0;
38188
38189 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38190
38191 if (e) {
38192 log_packet_detailed("'actor_id' field error detected");
38193 }
38194 }
38195
38196 if (BV_ISSET(fields, 1)) {
38197 log_packet_detailed(" field 'target_id' has changed");
38198
38199#ifdef FREECIV_JSON_CONNECTION
38200 field_addr.name = "target_id";
38201#endif /* FREECIV_JSON_CONNECTION */
38202 e = 0;
38203
38204 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38205
38206 if (e) {
38207 log_packet_detailed("'target_id' field error detected");
38208 }
38209 }
38210
38211 if (BV_ISSET(fields, 2)) {
38212 log_packet_detailed(" field 'cost' has changed");
38213
38214#ifdef FREECIV_JSON_CONNECTION
38215 field_addr.name = "cost";
38216#endif /* FREECIV_JSON_CONNECTION */
38217 e = 0;
38218
38219 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38220
38221 if (e) {
38222 log_packet_detailed("'cost' field error detected");
38223 }
38224 }
38225
38226 if (BV_ISSET(fields, 3)) {
38227 log_packet_detailed(" field 'action_type' has changed");
38228
38229#ifdef FREECIV_JSON_CONNECTION
38230 field_addr.name = "action_type";
38231#endif /* FREECIV_JSON_CONNECTION */
38232 e = 0;
38233
38234 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38235
38236 if (e) {
38237 log_packet_detailed("'action_type' field error detected");
38238 }
38239 }
38240
38241 if (BV_ISSET(fields, 4)) {
38242 log_packet_detailed(" field 'request_kind' has changed");
38243
38244#ifdef FREECIV_JSON_CONNECTION
38245 field_addr.name = "request_kind";
38246#endif /* FREECIV_JSON_CONNECTION */
38247 e = 0;
38248
38249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38250
38251 if (e) {
38252 log_packet_detailed("'request_kind' field error detected");
38253 }
38254 }
38255
38256 *old = *real_packet;
38257
38258#else /* FREECIV_DELTA_PROTOCOL */
38259#ifdef FREECIV_JSON_CONNECTION
38260 field_addr.name = "actor_id";
38261#endif /* FREECIV_JSON_CONNECTION */
38262 e = 0;
38263
38264 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38265
38266 if (e) {
38267 log_packet_detailed("'actor_id' field error detected");
38268 }
38269
38270#ifdef FREECIV_JSON_CONNECTION
38271 field_addr.name = "target_id";
38272#endif /* FREECIV_JSON_CONNECTION */
38273 e = 0;
38274
38275 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38276
38277 if (e) {
38278 log_packet_detailed("'target_id' field error detected");
38279 }
38280
38281#ifdef FREECIV_JSON_CONNECTION
38282 field_addr.name = "cost";
38283#endif /* FREECIV_JSON_CONNECTION */
38284 e = 0;
38285
38286 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38287
38288 if (e) {
38289 log_packet_detailed("'cost' field error detected");
38290 }
38291
38292#ifdef FREECIV_JSON_CONNECTION
38293 field_addr.name = "action_type";
38294#endif /* FREECIV_JSON_CONNECTION */
38295 e = 0;
38296
38297 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38298
38299 if (e) {
38300 log_packet_detailed("'action_type' field error detected");
38301 }
38302
38303#ifdef FREECIV_JSON_CONNECTION
38304 field_addr.name = "request_kind";
38305#endif /* FREECIV_JSON_CONNECTION */
38306 e = 0;
38307
38308 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38309
38310 if (e) {
38311 log_packet_detailed("'request_kind' field error detected");
38312 }
38313#endif /* FREECIV_DELTA_PROTOCOL */
38314
38316}
38317
38319{
38320 if (!pc->used) {
38321 log_error("WARNING: trying to send data to the closed connection %s",
38323 return -1;
38324 }
38325 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet != nullptr, -1,
38326 "Handler for PACKET_UNIT_ACTION_ANSWER not installed");
38327 return pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet(pc, packet);
38328}
38329
38330int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
38331{
38332 struct packet_unit_action_answer packet, *real_packet = &packet;
38333
38335 real_packet->target_id = target_id;
38336 real_packet->cost = cost;
38337 real_packet->action_type = action_type;
38338 real_packet->request_kind = request_kind;
38339
38341}
38342
38344{
38345 memset(packet, 0, sizeof(*packet));
38346}
38347
38348#define free_packet_unit_get_actions(_packet) (void) 0
38349#define destroy_packet_unit_get_actions free
38350
38351#ifdef FREECIV_DELTA_PROTOCOL
38352#define hash_packet_unit_get_actions_100 hash_const
38353#define cmp_packet_unit_get_actions_100 cmp_const
38355#endif /* FREECIV_DELTA_PROTOCOL */
38356
38358{
38359#define FREE_PACKET_STRUCT(_packet) free_packet_unit_get_actions(_packet)
38361
38362#ifdef FREECIV_JSON_CONNECTION
38363 struct plocation field_addr;
38364 {
38365 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38368 }
38369#endif /* FREECIV_JSON_CONNECTION */
38370
38371 log_packet_detailed("packet_unit_get_actions_100: got info about ()");
38372
38373#ifdef FREECIV_DELTA_PROTOCOL
38376 struct genhash **hash = pc->phs.received + PACKET_UNIT_GET_ACTIONS;
38377
38378 if (nullptr == *hash) {
38380 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38381 }
38382
38383 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38384 *real_packet = *old;
38385 } else {
38386 /* packet is already initialized empty */
38387 log_packet_detailed(" no old info");
38388 }
38389
38390#ifdef FREECIV_JSON_CONNECTION
38391 field_addr.name = "fields";
38392#endif /* FREECIV_JSON_CONNECTION */
38393 DIO_BV_GET(&din, &field_addr, fields);
38394
38395 if (BV_ISSET(fields, 0)) {
38396 log_packet_detailed(" got field 'actor_unit_id'");
38397
38398#ifdef FREECIV_JSON_CONNECTION
38399 field_addr.name = "actor_unit_id";
38400#endif /* FREECIV_JSON_CONNECTION */
38401
38402 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38404 }
38405 }
38406
38407 if (BV_ISSET(fields, 1)) {
38408 log_packet_detailed(" got field 'target_unit_id'");
38409
38410#ifdef FREECIV_JSON_CONNECTION
38411 field_addr.name = "target_unit_id";
38412#endif /* FREECIV_JSON_CONNECTION */
38413
38414 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38415 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38416 }
38417 }
38418
38419 if (BV_ISSET(fields, 2)) {
38420 log_packet_detailed(" got field 'target_tile_id'");
38421
38422#ifdef FREECIV_JSON_CONNECTION
38423 field_addr.name = "target_tile_id";
38424#endif /* FREECIV_JSON_CONNECTION */
38425
38426 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38427 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38428 }
38429 }
38430
38431 if (BV_ISSET(fields, 3)) {
38432 log_packet_detailed(" got field 'target_extra_id'");
38433
38434#ifdef FREECIV_JSON_CONNECTION
38435 field_addr.name = "target_extra_id";
38436#endif /* FREECIV_JSON_CONNECTION */
38437
38438 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38440 }
38441 }
38442
38443 if (BV_ISSET(fields, 4)) {
38444 log_packet_detailed(" got field 'request_kind'");
38445
38446#ifdef FREECIV_JSON_CONNECTION
38447 field_addr.name = "request_kind";
38448#endif /* FREECIV_JSON_CONNECTION */
38449
38450 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38451 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38452 }
38453 }
38454
38455 if (nullptr == old) {
38456 old = fc_malloc(sizeof(*old));
38458 *old = *real_packet;
38460 } else {
38461 *old = *real_packet;
38462 }
38463
38464#else /* FREECIV_DELTA_PROTOCOL */
38465#ifdef FREECIV_JSON_CONNECTION
38466 field_addr.name = "actor_unit_id";
38467#endif /* FREECIV_JSON_CONNECTION */
38468
38469 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38471 }
38472
38473#ifdef FREECIV_JSON_CONNECTION
38474 field_addr.name = "target_unit_id";
38475#endif /* FREECIV_JSON_CONNECTION */
38476
38477 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38478 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38479 }
38480
38481#ifdef FREECIV_JSON_CONNECTION
38482 field_addr.name = "target_tile_id";
38483#endif /* FREECIV_JSON_CONNECTION */
38484
38485 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38486 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38487 }
38488
38489#ifdef FREECIV_JSON_CONNECTION
38490 field_addr.name = "target_extra_id";
38491#endif /* FREECIV_JSON_CONNECTION */
38492
38493 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38495 }
38496
38497#ifdef FREECIV_JSON_CONNECTION
38498 field_addr.name = "request_kind";
38499#endif /* FREECIV_JSON_CONNECTION */
38500
38501 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38502 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38503 }
38504#endif /* FREECIV_DELTA_PROTOCOL */
38505
38507#undef FREE_PACKET_STRUCT
38508}
38509
38511{
38512 const struct packet_unit_get_actions *real_packet = packet;
38513 int e;
38515
38516 log_packet_detailed("packet_unit_get_actions_100: sending info about ()");
38517
38518#ifdef FREECIV_DELTA_PROTOCOL
38521 bool differ;
38522 struct genhash **hash = pc->phs.sent + PACKET_UNIT_GET_ACTIONS;
38523
38524 if (nullptr == *hash) {
38526 nullptr, nullptr, nullptr, destroy_packet_unit_get_actions);
38527 }
38528 BV_CLR_ALL(fields);
38529
38530 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38531 old = fc_malloc(sizeof(*old));
38532 /* temporary bitcopy just to insert correctly */
38533 *old = *real_packet;
38536 }
38537
38538 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38539 if (differ) {
38540 BV_SET(fields, 0);
38541 }
38542
38543 differ = (old->target_unit_id != real_packet->target_unit_id);
38544 if (differ) {
38545 BV_SET(fields, 1);
38546 }
38547
38548 differ = (old->target_tile_id != real_packet->target_tile_id);
38549 if (differ) {
38550 BV_SET(fields, 2);
38551 }
38552
38553 differ = (old->target_extra_id != real_packet->target_extra_id);
38554 if (differ) {
38555 BV_SET(fields, 3);
38556 }
38557
38558 differ = (old->request_kind != real_packet->request_kind);
38559 if (differ) {
38560 BV_SET(fields, 4);
38561 }
38562#endif /* FREECIV_DELTA_PROTOCOL */
38563
38564#ifdef FREECIV_JSON_CONNECTION
38565 struct plocation field_addr;
38566 {
38567 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38570 }
38571#endif /* FREECIV_JSON_CONNECTION */
38572
38573#ifdef FREECIV_DELTA_PROTOCOL
38574#ifdef FREECIV_JSON_CONNECTION
38575 field_addr.name = "fields";
38576#endif /* FREECIV_JSON_CONNECTION */
38577 e = 0;
38578 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38579 if (e) {
38580 log_packet_detailed("fields bitvector error detected");
38581 }
38582
38583 if (BV_ISSET(fields, 0)) {
38584 log_packet_detailed(" field 'actor_unit_id' has changed");
38585
38586#ifdef FREECIV_JSON_CONNECTION
38587 field_addr.name = "actor_unit_id";
38588#endif /* FREECIV_JSON_CONNECTION */
38589 e = 0;
38590
38591 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38592
38593 if (e) {
38594 log_packet_detailed("'actor_unit_id' field error detected");
38595 }
38596 }
38597
38598 if (BV_ISSET(fields, 1)) {
38599 log_packet_detailed(" field 'target_unit_id' has changed");
38600
38601#ifdef FREECIV_JSON_CONNECTION
38602 field_addr.name = "target_unit_id";
38603#endif /* FREECIV_JSON_CONNECTION */
38604 e = 0;
38605
38606 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38607
38608 if (e) {
38609 log_packet_detailed("'target_unit_id' field error detected");
38610 }
38611 }
38612
38613 if (BV_ISSET(fields, 2)) {
38614 log_packet_detailed(" field 'target_tile_id' has changed");
38615
38616#ifdef FREECIV_JSON_CONNECTION
38617 field_addr.name = "target_tile_id";
38618#endif /* FREECIV_JSON_CONNECTION */
38619 e = 0;
38620
38621 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38622
38623 if (e) {
38624 log_packet_detailed("'target_tile_id' field error detected");
38625 }
38626 }
38627
38628 if (BV_ISSET(fields, 3)) {
38629 log_packet_detailed(" field 'target_extra_id' has changed");
38630
38631#ifdef FREECIV_JSON_CONNECTION
38632 field_addr.name = "target_extra_id";
38633#endif /* FREECIV_JSON_CONNECTION */
38634 e = 0;
38635
38636 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38637
38638 if (e) {
38639 log_packet_detailed("'target_extra_id' field error detected");
38640 }
38641 }
38642
38643 if (BV_ISSET(fields, 4)) {
38644 log_packet_detailed(" field 'request_kind' has changed");
38645
38646#ifdef FREECIV_JSON_CONNECTION
38647 field_addr.name = "request_kind";
38648#endif /* FREECIV_JSON_CONNECTION */
38649 e = 0;
38650
38651 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38652
38653 if (e) {
38654 log_packet_detailed("'request_kind' field error detected");
38655 }
38656 }
38657
38658 *old = *real_packet;
38659
38660#else /* FREECIV_DELTA_PROTOCOL */
38661#ifdef FREECIV_JSON_CONNECTION
38662 field_addr.name = "actor_unit_id";
38663#endif /* FREECIV_JSON_CONNECTION */
38664 e = 0;
38665
38666 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38667
38668 if (e) {
38669 log_packet_detailed("'actor_unit_id' field error detected");
38670 }
38671
38672#ifdef FREECIV_JSON_CONNECTION
38673 field_addr.name = "target_unit_id";
38674#endif /* FREECIV_JSON_CONNECTION */
38675 e = 0;
38676
38677 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38678
38679 if (e) {
38680 log_packet_detailed("'target_unit_id' field error detected");
38681 }
38682
38683#ifdef FREECIV_JSON_CONNECTION
38684 field_addr.name = "target_tile_id";
38685#endif /* FREECIV_JSON_CONNECTION */
38686 e = 0;
38687
38688 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38689
38690 if (e) {
38691 log_packet_detailed("'target_tile_id' field error detected");
38692 }
38693
38694#ifdef FREECIV_JSON_CONNECTION
38695 field_addr.name = "target_extra_id";
38696#endif /* FREECIV_JSON_CONNECTION */
38697 e = 0;
38698
38699 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38700
38701 if (e) {
38702 log_packet_detailed("'target_extra_id' field error detected");
38703 }
38704
38705#ifdef FREECIV_JSON_CONNECTION
38706 field_addr.name = "request_kind";
38707#endif /* FREECIV_JSON_CONNECTION */
38708 e = 0;
38709
38710 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38711
38712 if (e) {
38713 log_packet_detailed("'request_kind' field error detected");
38714 }
38715#endif /* FREECIV_DELTA_PROTOCOL */
38716
38718}
38719
38721{
38722 if (!pc->used) {
38723 log_error("WARNING: trying to send data to the closed connection %s",
38725 return -1;
38726 }
38727 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet != nullptr, -1,
38728 "Handler for PACKET_UNIT_GET_ACTIONS not installed");
38729 return pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet(pc, packet);
38730}
38731
38732int 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)
38733{
38734 struct packet_unit_get_actions packet, *real_packet = &packet;
38735
38737 real_packet->target_unit_id = target_unit_id;
38738 real_packet->target_tile_id = target_tile_id;
38739 real_packet->target_extra_id = target_extra_id;
38740 real_packet->request_kind = request_kind;
38741
38743}
38744
38745static inline void init_packet_unit_actions(struct packet_unit_actions *packet)
38746{
38747 memset(packet, 0, sizeof(*packet));
38748}
38749
38750#define free_packet_unit_actions(_packet) (void) 0
38751#define destroy_packet_unit_actions free
38752
38753#ifdef FREECIV_DELTA_PROTOCOL
38754#define hash_packet_unit_actions_100 hash_const
38755#define cmp_packet_unit_actions_100 cmp_const
38757#endif /* FREECIV_DELTA_PROTOCOL */
38758
38760{
38761#define FREE_PACKET_STRUCT(_packet) free_packet_unit_actions(_packet)
38763
38764#ifdef FREECIV_JSON_CONNECTION
38765 struct plocation field_addr;
38766 {
38767 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
38770 }
38771#endif /* FREECIV_JSON_CONNECTION */
38772
38773 log_packet_detailed("packet_unit_actions_100: got info about ()");
38774
38775#ifdef FREECIV_DELTA_PROTOCOL
38777 struct packet_unit_actions *old;
38778 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTIONS;
38779
38780 if (nullptr == *hash) {
38782 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
38783 }
38784
38785 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38786 *real_packet = *old;
38787 } else {
38788 /* packet is already initialized empty */
38789 log_packet_detailed(" no old info");
38790 }
38791
38792#ifdef FREECIV_JSON_CONNECTION
38793 field_addr.name = "fields";
38794#endif /* FREECIV_JSON_CONNECTION */
38795 DIO_BV_GET(&din, &field_addr, fields);
38796
38797 if (BV_ISSET(fields, 0)) {
38798 log_packet_detailed(" got field 'actor_unit_id'");
38799
38800#ifdef FREECIV_JSON_CONNECTION
38801 field_addr.name = "actor_unit_id";
38802#endif /* FREECIV_JSON_CONNECTION */
38803
38804 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38806 }
38807 }
38808
38809 if (BV_ISSET(fields, 1)) {
38810 log_packet_detailed(" got field 'target_unit_id'");
38811
38812#ifdef FREECIV_JSON_CONNECTION
38813 field_addr.name = "target_unit_id";
38814#endif /* FREECIV_JSON_CONNECTION */
38815
38816 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38817 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38818 }
38819 }
38820
38821 if (BV_ISSET(fields, 2)) {
38822 log_packet_detailed(" got field 'target_city_id'");
38823
38824#ifdef FREECIV_JSON_CONNECTION
38825 field_addr.name = "target_city_id";
38826#endif /* FREECIV_JSON_CONNECTION */
38827
38828 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38829 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38830 }
38831 }
38832
38833 if (BV_ISSET(fields, 3)) {
38834 log_packet_detailed(" got field 'target_tile_id'");
38835
38836#ifdef FREECIV_JSON_CONNECTION
38837 field_addr.name = "target_tile_id";
38838#endif /* FREECIV_JSON_CONNECTION */
38839
38840 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38841 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38842 }
38843 }
38844
38845 if (BV_ISSET(fields, 4)) {
38846 log_packet_detailed(" got field 'target_extra_id'");
38847
38848#ifdef FREECIV_JSON_CONNECTION
38849 field_addr.name = "target_extra_id";
38850#endif /* FREECIV_JSON_CONNECTION */
38851
38852 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38854 }
38855 }
38856
38857 if (BV_ISSET(fields, 5)) {
38858 log_packet_detailed(" got field 'request_kind'");
38859
38860#ifdef FREECIV_JSON_CONNECTION
38861 field_addr.name = "request_kind";
38862#endif /* FREECIV_JSON_CONNECTION */
38863
38864 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38865 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38866 }
38867 }
38868
38869 if (BV_ISSET(fields, 6)) {
38870 log_packet_detailed(" got field 'action_probabilities'");
38871
38872#ifdef FREECIV_JSON_CONNECTION
38873 field_addr.name = "action_probabilities";
38874#endif /* FREECIV_JSON_CONNECTION */
38875
38876 {
38877 int i;
38878
38879
38880#ifdef FREECIV_JSON_CONNECTION
38881 /* Enter array. */
38882 field_addr.sub_location = plocation_elem_new(0);
38883#endif /* FREECIV_JSON_CONNECTION */
38884
38885 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38886#ifdef FREECIV_JSON_CONNECTION
38887 /* Next array element */
38888 field_addr.sub_location->number = i;
38889#endif /* FREECIV_JSON_CONNECTION */
38890
38891 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38892 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38893 }
38894 }
38895
38896#ifdef FREECIV_JSON_CONNECTION
38897 /* Exit array. */
38898 FC_FREE(field_addr.sub_location);
38899#endif /* FREECIV_JSON_CONNECTION */
38900 }
38901 }
38902
38903 if (nullptr == old) {
38904 old = fc_malloc(sizeof(*old));
38906 *old = *real_packet;
38908 } else {
38909 *old = *real_packet;
38910 }
38911
38912#else /* FREECIV_DELTA_PROTOCOL */
38913#ifdef FREECIV_JSON_CONNECTION
38914 field_addr.name = "actor_unit_id";
38915#endif /* FREECIV_JSON_CONNECTION */
38916
38917 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38919 }
38920
38921#ifdef FREECIV_JSON_CONNECTION
38922 field_addr.name = "target_unit_id";
38923#endif /* FREECIV_JSON_CONNECTION */
38924
38925 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38926 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38927 }
38928
38929#ifdef FREECIV_JSON_CONNECTION
38930 field_addr.name = "target_city_id";
38931#endif /* FREECIV_JSON_CONNECTION */
38932
38933 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
38934 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
38935 }
38936
38937#ifdef FREECIV_JSON_CONNECTION
38938 field_addr.name = "target_tile_id";
38939#endif /* FREECIV_JSON_CONNECTION */
38940
38941 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38942 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38943 }
38944
38945#ifdef FREECIV_JSON_CONNECTION
38946 field_addr.name = "target_extra_id";
38947#endif /* FREECIV_JSON_CONNECTION */
38948
38949 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38951 }
38952
38953#ifdef FREECIV_JSON_CONNECTION
38954 field_addr.name = "request_kind";
38955#endif /* FREECIV_JSON_CONNECTION */
38956
38957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38958 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38959 }
38960
38961#ifdef FREECIV_JSON_CONNECTION
38962 field_addr.name = "action_probabilities";
38963#endif /* FREECIV_JSON_CONNECTION */
38964
38965 {
38966 int i;
38967
38968
38969#ifdef FREECIV_JSON_CONNECTION
38970 /* Enter array. */
38971 field_addr.sub_location = plocation_elem_new(0);
38972#endif /* FREECIV_JSON_CONNECTION */
38973
38974 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
38975#ifdef FREECIV_JSON_CONNECTION
38976 /* Next array element */
38977 field_addr.sub_location->number = i;
38978#endif /* FREECIV_JSON_CONNECTION */
38979
38980 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
38981 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
38982 }
38983 }
38984
38985#ifdef FREECIV_JSON_CONNECTION
38986 /* Exit array. */
38987 FC_FREE(field_addr.sub_location);
38988#endif /* FREECIV_JSON_CONNECTION */
38989 }
38990#endif /* FREECIV_DELTA_PROTOCOL */
38991
38993#undef FREE_PACKET_STRUCT
38994}
38995
38996static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
38997{
38998 const struct packet_unit_actions *real_packet = packet;
38999 int e;
39001
39002 log_packet_detailed("packet_unit_actions_100: sending info about ()");
39003
39004#ifdef FREECIV_DELTA_PROTOCOL
39006 struct packet_unit_actions *old;
39007 bool differ;
39008 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTIONS;
39009
39010 if (nullptr == *hash) {
39012 nullptr, nullptr, nullptr, destroy_packet_unit_actions);
39013 }
39014 BV_CLR_ALL(fields);
39015
39016 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39017 old = fc_malloc(sizeof(*old));
39018 /* temporary bitcopy just to insert correctly */
39019 *old = *real_packet;
39022 }
39023
39024 differ = (old->actor_unit_id != real_packet->actor_unit_id);
39025 if (differ) {
39026 BV_SET(fields, 0);
39027 }
39028
39029 differ = (old->target_unit_id != real_packet->target_unit_id);
39030 if (differ) {
39031 BV_SET(fields, 1);
39032 }
39033
39034 differ = (old->target_city_id != real_packet->target_city_id);
39035 if (differ) {
39036 BV_SET(fields, 2);
39037 }
39038
39039 differ = (old->target_tile_id != real_packet->target_tile_id);
39040 if (differ) {
39041 BV_SET(fields, 3);
39042 }
39043
39044 differ = (old->target_extra_id != real_packet->target_extra_id);
39045 if (differ) {
39046 BV_SET(fields, 4);
39047 }
39048
39049 differ = (old->request_kind != real_packet->request_kind);
39050 if (differ) {
39051 BV_SET(fields, 5);
39052 }
39053
39054 differ = FALSE;
39055 {
39056 int i;
39057
39058 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39059 differ = !are_action_probabilitys_equal(&old->action_probabilities[i], &real_packet->action_probabilities[i]);
39060 if (differ) {
39061 break;
39062 }
39063 }
39064 }
39065 if (differ) {
39066 BV_SET(fields, 6);
39067 }
39068#endif /* FREECIV_DELTA_PROTOCOL */
39069
39070#ifdef FREECIV_JSON_CONNECTION
39071 struct plocation field_addr;
39072 {
39073 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39076 }
39077#endif /* FREECIV_JSON_CONNECTION */
39078
39079#ifdef FREECIV_DELTA_PROTOCOL
39080#ifdef FREECIV_JSON_CONNECTION
39081 field_addr.name = "fields";
39082#endif /* FREECIV_JSON_CONNECTION */
39083 e = 0;
39084 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39085 if (e) {
39086 log_packet_detailed("fields bitvector error detected");
39087 }
39088
39089 if (BV_ISSET(fields, 0)) {
39090 log_packet_detailed(" field 'actor_unit_id' has changed");
39091
39092#ifdef FREECIV_JSON_CONNECTION
39093 field_addr.name = "actor_unit_id";
39094#endif /* FREECIV_JSON_CONNECTION */
39095 e = 0;
39096
39097 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39098
39099 if (e) {
39100 log_packet_detailed("'actor_unit_id' field error detected");
39101 }
39102 }
39103
39104 if (BV_ISSET(fields, 1)) {
39105 log_packet_detailed(" field 'target_unit_id' has changed");
39106
39107#ifdef FREECIV_JSON_CONNECTION
39108 field_addr.name = "target_unit_id";
39109#endif /* FREECIV_JSON_CONNECTION */
39110 e = 0;
39111
39112 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39113
39114 if (e) {
39115 log_packet_detailed("'target_unit_id' field error detected");
39116 }
39117 }
39118
39119 if (BV_ISSET(fields, 2)) {
39120 log_packet_detailed(" field 'target_city_id' has changed");
39121
39122#ifdef FREECIV_JSON_CONNECTION
39123 field_addr.name = "target_city_id";
39124#endif /* FREECIV_JSON_CONNECTION */
39125 e = 0;
39126
39127 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39128
39129 if (e) {
39130 log_packet_detailed("'target_city_id' field error detected");
39131 }
39132 }
39133
39134 if (BV_ISSET(fields, 3)) {
39135 log_packet_detailed(" field 'target_tile_id' has changed");
39136
39137#ifdef FREECIV_JSON_CONNECTION
39138 field_addr.name = "target_tile_id";
39139#endif /* FREECIV_JSON_CONNECTION */
39140 e = 0;
39141
39142 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39143
39144 if (e) {
39145 log_packet_detailed("'target_tile_id' field error detected");
39146 }
39147 }
39148
39149 if (BV_ISSET(fields, 4)) {
39150 log_packet_detailed(" field 'target_extra_id' has changed");
39151
39152#ifdef FREECIV_JSON_CONNECTION
39153 field_addr.name = "target_extra_id";
39154#endif /* FREECIV_JSON_CONNECTION */
39155 e = 0;
39156
39157 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39158
39159 if (e) {
39160 log_packet_detailed("'target_extra_id' field error detected");
39161 }
39162 }
39163
39164 if (BV_ISSET(fields, 5)) {
39165 log_packet_detailed(" field 'request_kind' has changed");
39166
39167#ifdef FREECIV_JSON_CONNECTION
39168 field_addr.name = "request_kind";
39169#endif /* FREECIV_JSON_CONNECTION */
39170 e = 0;
39171
39172 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39173
39174 if (e) {
39175 log_packet_detailed("'request_kind' field error detected");
39176 }
39177 }
39178
39179 if (BV_ISSET(fields, 6)) {
39180 log_packet_detailed(" field 'action_probabilities' has changed");
39181
39182#ifdef FREECIV_JSON_CONNECTION
39183 field_addr.name = "action_probabilities";
39184#endif /* FREECIV_JSON_CONNECTION */
39185 e = 0;
39186
39187 {
39188 int i;
39189
39190#ifdef FREECIV_JSON_CONNECTION
39191 /* Create the array. */
39193
39194 /* Enter array. */
39195 field_addr.sub_location = plocation_elem_new(0);
39196#endif /* FREECIV_JSON_CONNECTION */
39197
39198 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39199#ifdef FREECIV_JSON_CONNECTION
39200 /* Next array element. */
39201 field_addr.sub_location->number = i;
39202#endif /* FREECIV_JSON_CONNECTION */
39203
39204 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39205 }
39206
39207#ifdef FREECIV_JSON_CONNECTION
39208 /* Exit array. */
39209 FC_FREE(field_addr.sub_location);
39210#endif /* FREECIV_JSON_CONNECTION */
39211 }
39212
39213 if (e) {
39214 log_packet_detailed("'action_probabilities' field error detected");
39215 }
39216 }
39217
39218 *old = *real_packet;
39219
39220#else /* FREECIV_DELTA_PROTOCOL */
39221#ifdef FREECIV_JSON_CONNECTION
39222 field_addr.name = "actor_unit_id";
39223#endif /* FREECIV_JSON_CONNECTION */
39224 e = 0;
39225
39226 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39227
39228 if (e) {
39229 log_packet_detailed("'actor_unit_id' field error detected");
39230 }
39231
39232#ifdef FREECIV_JSON_CONNECTION
39233 field_addr.name = "target_unit_id";
39234#endif /* FREECIV_JSON_CONNECTION */
39235 e = 0;
39236
39237 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39238
39239 if (e) {
39240 log_packet_detailed("'target_unit_id' field error detected");
39241 }
39242
39243#ifdef FREECIV_JSON_CONNECTION
39244 field_addr.name = "target_city_id";
39245#endif /* FREECIV_JSON_CONNECTION */
39246 e = 0;
39247
39248 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39249
39250 if (e) {
39251 log_packet_detailed("'target_city_id' field error detected");
39252 }
39253
39254#ifdef FREECIV_JSON_CONNECTION
39255 field_addr.name = "target_tile_id";
39256#endif /* FREECIV_JSON_CONNECTION */
39257 e = 0;
39258
39259 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39260
39261 if (e) {
39262 log_packet_detailed("'target_tile_id' field error detected");
39263 }
39264
39265#ifdef FREECIV_JSON_CONNECTION
39266 field_addr.name = "target_extra_id";
39267#endif /* FREECIV_JSON_CONNECTION */
39268 e = 0;
39269
39270 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39271
39272 if (e) {
39273 log_packet_detailed("'target_extra_id' field error detected");
39274 }
39275
39276#ifdef FREECIV_JSON_CONNECTION
39277 field_addr.name = "request_kind";
39278#endif /* FREECIV_JSON_CONNECTION */
39279 e = 0;
39280
39281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39282
39283 if (e) {
39284 log_packet_detailed("'request_kind' field error detected");
39285 }
39286
39287#ifdef FREECIV_JSON_CONNECTION
39288 field_addr.name = "action_probabilities";
39289#endif /* FREECIV_JSON_CONNECTION */
39290 e = 0;
39291
39292 {
39293 int i;
39294
39295#ifdef FREECIV_JSON_CONNECTION
39296 /* Create the array. */
39298
39299 /* Enter array. */
39300 field_addr.sub_location = plocation_elem_new(0);
39301#endif /* FREECIV_JSON_CONNECTION */
39302
39303 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39304#ifdef FREECIV_JSON_CONNECTION
39305 /* Next array element. */
39306 field_addr.sub_location->number = i;
39307#endif /* FREECIV_JSON_CONNECTION */
39308
39309 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39310 }
39311
39312#ifdef FREECIV_JSON_CONNECTION
39313 /* Exit array. */
39314 FC_FREE(field_addr.sub_location);
39315#endif /* FREECIV_JSON_CONNECTION */
39316 }
39317
39318 if (e) {
39319 log_packet_detailed("'action_probabilities' field error detected");
39320 }
39321#endif /* FREECIV_DELTA_PROTOCOL */
39322
39324}
39325
39327{
39328 if (!pc->used) {
39329 log_error("WARNING: trying to send data to the closed connection %s",
39331 return -1;
39332 }
39333 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet != nullptr, -1,
39334 "Handler for PACKET_UNIT_ACTIONS not installed");
39335 return pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet(pc, packet);
39336}
39337
39338int 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)
39339{
39340 struct packet_unit_actions packet, *real_packet = &packet;
39341
39343 real_packet->target_unit_id = target_unit_id;
39344 real_packet->target_city_id = target_city_id;
39345 real_packet->target_tile_id = target_tile_id;
39346 real_packet->target_extra_id = target_extra_id;
39347 real_packet->request_kind = request_kind;
39348 {
39349 int i;
39350
39351 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39352 real_packet->action_probabilities[i] = action_probabilities[i];
39353 }
39354 }
39355
39357}
39358
39360{
39361 memset(packet, 0, sizeof(*packet));
39362}
39363
39364#define free_packet_unit_change_activity(_packet) (void) 0
39365#define destroy_packet_unit_change_activity free
39366
39367#ifdef FREECIV_DELTA_PROTOCOL
39368#define hash_packet_unit_change_activity_100 hash_const
39369#define cmp_packet_unit_change_activity_100 cmp_const
39371#endif /* FREECIV_DELTA_PROTOCOL */
39372
39374{
39375#define FREE_PACKET_STRUCT(_packet) free_packet_unit_change_activity(_packet)
39377
39378#ifdef FREECIV_JSON_CONNECTION
39379 struct plocation field_addr;
39380 {
39381 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39384 }
39385#endif /* FREECIV_JSON_CONNECTION */
39386
39387 log_packet_detailed("packet_unit_change_activity_100: got info about ()");
39388
39389#ifdef FREECIV_DELTA_PROTOCOL
39392 struct genhash **hash = pc->phs.received + PACKET_UNIT_CHANGE_ACTIVITY;
39393
39394 if (nullptr == *hash) {
39396 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39397 }
39398
39399 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39400 *real_packet = *old;
39401 } else {
39402 /* packet is already initialized empty */
39403 log_packet_detailed(" no old info");
39404 }
39405
39406#ifdef FREECIV_JSON_CONNECTION
39407 field_addr.name = "fields";
39408#endif /* FREECIV_JSON_CONNECTION */
39409 DIO_BV_GET(&din, &field_addr, fields);
39410
39411 if (BV_ISSET(fields, 0)) {
39412 log_packet_detailed(" got field 'unit_id'");
39413
39414#ifdef FREECIV_JSON_CONNECTION
39415 field_addr.name = "unit_id";
39416#endif /* FREECIV_JSON_CONNECTION */
39417
39418 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39420 }
39421 }
39422
39423 if (BV_ISSET(fields, 1)) {
39424 log_packet_detailed(" got field 'activity'");
39425
39426#ifdef FREECIV_JSON_CONNECTION
39427 field_addr.name = "activity";
39428#endif /* FREECIV_JSON_CONNECTION */
39429
39430 {
39431 int readin;
39432
39433 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39435 }
39436 real_packet->activity = readin;
39437 }
39438 }
39439
39440 if (BV_ISSET(fields, 2)) {
39441 log_packet_detailed(" got field 'target'");
39442
39443#ifdef FREECIV_JSON_CONNECTION
39444 field_addr.name = "target";
39445#endif /* FREECIV_JSON_CONNECTION */
39446
39447 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39449 }
39450 }
39451
39452 if (nullptr == old) {
39453 old = fc_malloc(sizeof(*old));
39455 *old = *real_packet;
39457 } else {
39458 *old = *real_packet;
39459 }
39460
39461#else /* FREECIV_DELTA_PROTOCOL */
39462#ifdef FREECIV_JSON_CONNECTION
39463 field_addr.name = "unit_id";
39464#endif /* FREECIV_JSON_CONNECTION */
39465
39466 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39468 }
39469
39470#ifdef FREECIV_JSON_CONNECTION
39471 field_addr.name = "activity";
39472#endif /* FREECIV_JSON_CONNECTION */
39473
39474 {
39475 int readin;
39476
39477 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39479 }
39480 real_packet->activity = readin;
39481 }
39482
39483#ifdef FREECIV_JSON_CONNECTION
39484 field_addr.name = "target";
39485#endif /* FREECIV_JSON_CONNECTION */
39486
39487 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39489 }
39490#endif /* FREECIV_DELTA_PROTOCOL */
39491
39493#undef FREE_PACKET_STRUCT
39494}
39495
39497{
39498 const struct packet_unit_change_activity *real_packet = packet;
39499 int e;
39501
39502 log_packet_detailed("packet_unit_change_activity_100: sending info about ()");
39503
39504#ifdef FREECIV_DELTA_PROTOCOL
39507 bool differ;
39508 struct genhash **hash = pc->phs.sent + PACKET_UNIT_CHANGE_ACTIVITY;
39509
39510 if (nullptr == *hash) {
39512 nullptr, nullptr, nullptr, destroy_packet_unit_change_activity);
39513 }
39514 BV_CLR_ALL(fields);
39515
39516 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39517 old = fc_malloc(sizeof(*old));
39518 /* temporary bitcopy just to insert correctly */
39519 *old = *real_packet;
39522 }
39523
39524 differ = (old->unit_id != real_packet->unit_id);
39525 if (differ) {
39526 BV_SET(fields, 0);
39527 }
39528
39529 differ = (old->activity != real_packet->activity);
39530 if (differ) {
39531 BV_SET(fields, 1);
39532 }
39533
39534 differ = (old->target != real_packet->target);
39535 if (differ) {
39536 BV_SET(fields, 2);
39537 }
39538#endif /* FREECIV_DELTA_PROTOCOL */
39539
39540#ifdef FREECIV_JSON_CONNECTION
39541 struct plocation field_addr;
39542 {
39543 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39546 }
39547#endif /* FREECIV_JSON_CONNECTION */
39548
39549#ifdef FREECIV_DELTA_PROTOCOL
39550#ifdef FREECIV_JSON_CONNECTION
39551 field_addr.name = "fields";
39552#endif /* FREECIV_JSON_CONNECTION */
39553 e = 0;
39554 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39555 if (e) {
39556 log_packet_detailed("fields bitvector error detected");
39557 }
39558
39559 if (BV_ISSET(fields, 0)) {
39560 log_packet_detailed(" field 'unit_id' has changed");
39561
39562#ifdef FREECIV_JSON_CONNECTION
39563 field_addr.name = "unit_id";
39564#endif /* FREECIV_JSON_CONNECTION */
39565 e = 0;
39566
39567 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39568
39569 if (e) {
39570 log_packet_detailed("'unit_id' field error detected");
39571 }
39572 }
39573
39574 if (BV_ISSET(fields, 1)) {
39575 log_packet_detailed(" field 'activity' has changed");
39576
39577#ifdef FREECIV_JSON_CONNECTION
39578 field_addr.name = "activity";
39579#endif /* FREECIV_JSON_CONNECTION */
39580 e = 0;
39581
39582 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39583
39584 if (e) {
39585 log_packet_detailed("'activity' field error detected");
39586 }
39587 }
39588
39589 if (BV_ISSET(fields, 2)) {
39590 log_packet_detailed(" field 'target' has changed");
39591
39592#ifdef FREECIV_JSON_CONNECTION
39593 field_addr.name = "target";
39594#endif /* FREECIV_JSON_CONNECTION */
39595 e = 0;
39596
39597 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39598
39599 if (e) {
39600 log_packet_detailed("'target' field error detected");
39601 }
39602 }
39603
39604 *old = *real_packet;
39605
39606#else /* FREECIV_DELTA_PROTOCOL */
39607#ifdef FREECIV_JSON_CONNECTION
39608 field_addr.name = "unit_id";
39609#endif /* FREECIV_JSON_CONNECTION */
39610 e = 0;
39611
39612 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39613
39614 if (e) {
39615 log_packet_detailed("'unit_id' field error detected");
39616 }
39617
39618#ifdef FREECIV_JSON_CONNECTION
39619 field_addr.name = "activity";
39620#endif /* FREECIV_JSON_CONNECTION */
39621 e = 0;
39622
39623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39624
39625 if (e) {
39626 log_packet_detailed("'activity' field error detected");
39627 }
39628
39629#ifdef FREECIV_JSON_CONNECTION
39630 field_addr.name = "target";
39631#endif /* FREECIV_JSON_CONNECTION */
39632 e = 0;
39633
39634 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39635
39636 if (e) {
39637 log_packet_detailed("'target' field error detected");
39638 }
39639#endif /* FREECIV_DELTA_PROTOCOL */
39640
39642}
39643
39645{
39646 if (!pc->used) {
39647 log_error("WARNING: trying to send data to the closed connection %s",
39649 return -1;
39650 }
39651 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet != nullptr, -1,
39652 "Handler for PACKET_UNIT_CHANGE_ACTIVITY not installed");
39653 return pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet(pc, packet);
39654}
39655
39656int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
39657{
39658 struct packet_unit_change_activity packet, *real_packet = &packet;
39659
39661 real_packet->activity = activity;
39662 real_packet->target = target;
39663
39665}
39666
39668{
39669 memset(packet, 0, sizeof(*packet));
39670}
39671
39672#define free_packet_diplomacy_init_meeting_req(_packet) (void) 0
39673#define destroy_packet_diplomacy_init_meeting_req free
39674
39675#ifdef FREECIV_DELTA_PROTOCOL
39676#define hash_packet_diplomacy_init_meeting_req_100 hash_const
39677#define cmp_packet_diplomacy_init_meeting_req_100 cmp_const
39679#endif /* FREECIV_DELTA_PROTOCOL */
39680
39682{
39683#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting_req(_packet)
39685
39686#ifdef FREECIV_JSON_CONNECTION
39687 struct plocation field_addr;
39688 {
39689 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39692 }
39693#endif /* FREECIV_JSON_CONNECTION */
39694
39695 log_packet_detailed("packet_diplomacy_init_meeting_req_100: got info about ()");
39696
39697#ifdef FREECIV_DELTA_PROTOCOL
39700 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39701
39702 if (nullptr == *hash) {
39704 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39705 }
39706
39707 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39708 *real_packet = *old;
39709 } else {
39710 /* packet is already initialized empty */
39711 log_packet_detailed(" no old info");
39712 }
39713
39714#ifdef FREECIV_JSON_CONNECTION
39715 field_addr.name = "fields";
39716#endif /* FREECIV_JSON_CONNECTION */
39717 DIO_BV_GET(&din, &field_addr, fields);
39718
39719 if (BV_ISSET(fields, 0)) {
39720 log_packet_detailed(" got field 'counterpart'");
39721
39722#ifdef FREECIV_JSON_CONNECTION
39723 field_addr.name = "counterpart";
39724#endif /* FREECIV_JSON_CONNECTION */
39725
39726 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39727 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39728 }
39729 }
39730
39731 if (nullptr == old) {
39732 old = fc_malloc(sizeof(*old));
39734 *old = *real_packet;
39736 } else {
39737 *old = *real_packet;
39738 }
39739
39740#else /* FREECIV_DELTA_PROTOCOL */
39741#ifdef FREECIV_JSON_CONNECTION
39742 field_addr.name = "counterpart";
39743#endif /* FREECIV_JSON_CONNECTION */
39744
39745 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39746 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39747 }
39748#endif /* FREECIV_DELTA_PROTOCOL */
39749
39751#undef FREE_PACKET_STRUCT
39752}
39753
39755{
39756 const struct packet_diplomacy_init_meeting_req *real_packet = packet;
39757 int e;
39759
39760 log_packet_detailed("packet_diplomacy_init_meeting_req_100: sending info about ()");
39761
39762#ifdef FREECIV_DELTA_PROTOCOL
39765 bool differ;
39766 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39767
39768 if (nullptr == *hash) {
39770 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting_req);
39771 }
39772 BV_CLR_ALL(fields);
39773
39774 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39775 old = fc_malloc(sizeof(*old));
39776 /* temporary bitcopy just to insert correctly */
39777 *old = *real_packet;
39780 }
39781
39782 differ = (old->counterpart != real_packet->counterpart);
39783 if (differ) {
39784 BV_SET(fields, 0);
39785 }
39786#endif /* FREECIV_DELTA_PROTOCOL */
39787
39788#ifdef FREECIV_JSON_CONNECTION
39789 struct plocation field_addr;
39790 {
39791 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39794 }
39795#endif /* FREECIV_JSON_CONNECTION */
39796
39797#ifdef FREECIV_DELTA_PROTOCOL
39798#ifdef FREECIV_JSON_CONNECTION
39799 field_addr.name = "fields";
39800#endif /* FREECIV_JSON_CONNECTION */
39801 e = 0;
39802 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39803 if (e) {
39804 log_packet_detailed("fields bitvector error detected");
39805 }
39806
39807 if (BV_ISSET(fields, 0)) {
39808 log_packet_detailed(" field 'counterpart' has changed");
39809
39810#ifdef FREECIV_JSON_CONNECTION
39811 field_addr.name = "counterpart";
39812#endif /* FREECIV_JSON_CONNECTION */
39813 e = 0;
39814
39815 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39816
39817 if (e) {
39818 log_packet_detailed("'counterpart' field error detected");
39819 }
39820 }
39821
39822 *old = *real_packet;
39823
39824#else /* FREECIV_DELTA_PROTOCOL */
39825#ifdef FREECIV_JSON_CONNECTION
39826 field_addr.name = "counterpart";
39827#endif /* FREECIV_JSON_CONNECTION */
39828 e = 0;
39829
39830 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
39831
39832 if (e) {
39833 log_packet_detailed("'counterpart' field error detected");
39834 }
39835#endif /* FREECIV_DELTA_PROTOCOL */
39836
39838}
39839
39841{
39842 if (!pc->used) {
39843 log_error("WARNING: trying to send data to the closed connection %s",
39845 return -1;
39846 }
39847 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet != nullptr, -1,
39848 "Handler for PACKET_DIPLOMACY_INIT_MEETING_REQ not installed");
39849 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet(pc, packet);
39850}
39851
39853{
39854 struct packet_diplomacy_init_meeting_req packet, *real_packet = &packet;
39855
39857
39859}
39860
39862{
39863 memset(packet, 0, sizeof(*packet));
39864}
39865
39866#define free_packet_diplomacy_init_meeting(_packet) (void) 0
39867#define destroy_packet_diplomacy_init_meeting free
39868
39869#ifdef FREECIV_DELTA_PROTOCOL
39870#define hash_packet_diplomacy_init_meeting_100 hash_const
39871#define cmp_packet_diplomacy_init_meeting_100 cmp_const
39873#endif /* FREECIV_DELTA_PROTOCOL */
39874
39876{
39877#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_init_meeting(_packet)
39879
39880#ifdef FREECIV_JSON_CONNECTION
39881 struct plocation field_addr;
39882 {
39883 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
39886 }
39887#endif /* FREECIV_JSON_CONNECTION */
39888
39889 log_packet_detailed("packet_diplomacy_init_meeting_100: got info about ()");
39890
39891#ifdef FREECIV_DELTA_PROTOCOL
39894 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING;
39895
39896 if (nullptr == *hash) {
39898 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39899 }
39900
39901 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39902 *real_packet = *old;
39903 } else {
39904 /* packet is already initialized empty */
39905 log_packet_detailed(" no old info");
39906 }
39907
39908#ifdef FREECIV_JSON_CONNECTION
39909 field_addr.name = "fields";
39910#endif /* FREECIV_JSON_CONNECTION */
39911 DIO_BV_GET(&din, &field_addr, fields);
39912
39913 if (BV_ISSET(fields, 0)) {
39914 log_packet_detailed(" got field 'counterpart'");
39915
39916#ifdef FREECIV_JSON_CONNECTION
39917 field_addr.name = "counterpart";
39918#endif /* FREECIV_JSON_CONNECTION */
39919
39920 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39921 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39922 }
39923 }
39924
39925 if (BV_ISSET(fields, 1)) {
39926 log_packet_detailed(" got field 'initiated_from'");
39927
39928#ifdef FREECIV_JSON_CONNECTION
39929 field_addr.name = "initiated_from";
39930#endif /* FREECIV_JSON_CONNECTION */
39931
39932 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39933 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39934 }
39935 }
39936
39937 if (nullptr == old) {
39938 old = fc_malloc(sizeof(*old));
39940 *old = *real_packet;
39942 } else {
39943 *old = *real_packet;
39944 }
39945
39946#else /* FREECIV_DELTA_PROTOCOL */
39947#ifdef FREECIV_JSON_CONNECTION
39948 field_addr.name = "counterpart";
39949#endif /* FREECIV_JSON_CONNECTION */
39950
39951 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
39952 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39953 }
39954
39955#ifdef FREECIV_JSON_CONNECTION
39956 field_addr.name = "initiated_from";
39957#endif /* FREECIV_JSON_CONNECTION */
39958
39959 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
39960 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
39961 }
39962#endif /* FREECIV_DELTA_PROTOCOL */
39963
39965#undef FREE_PACKET_STRUCT
39966}
39967
39969{
39970 const struct packet_diplomacy_init_meeting *real_packet = packet;
39971 int e;
39973
39974 log_packet_detailed("packet_diplomacy_init_meeting_100: sending info about ()");
39975
39976#ifdef FREECIV_DELTA_PROTOCOL
39979 bool differ;
39980 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING;
39981
39982 if (nullptr == *hash) {
39984 nullptr, nullptr, nullptr, destroy_packet_diplomacy_init_meeting);
39985 }
39986 BV_CLR_ALL(fields);
39987
39988 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39989 old = fc_malloc(sizeof(*old));
39990 /* temporary bitcopy just to insert correctly */
39991 *old = *real_packet;
39994 }
39995
39996 differ = (old->counterpart != real_packet->counterpart);
39997 if (differ) {
39998 BV_SET(fields, 0);
39999 }
40000
40001 differ = (old->initiated_from != real_packet->initiated_from);
40002 if (differ) {
40003 BV_SET(fields, 1);
40004 }
40005#endif /* FREECIV_DELTA_PROTOCOL */
40006
40007#ifdef FREECIV_JSON_CONNECTION
40008 struct plocation field_addr;
40009 {
40010 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40013 }
40014#endif /* FREECIV_JSON_CONNECTION */
40015
40016#ifdef FREECIV_DELTA_PROTOCOL
40017#ifdef FREECIV_JSON_CONNECTION
40018 field_addr.name = "fields";
40019#endif /* FREECIV_JSON_CONNECTION */
40020 e = 0;
40021 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40022 if (e) {
40023 log_packet_detailed("fields bitvector error detected");
40024 }
40025
40026 if (BV_ISSET(fields, 0)) {
40027 log_packet_detailed(" field 'counterpart' has changed");
40028
40029#ifdef FREECIV_JSON_CONNECTION
40030 field_addr.name = "counterpart";
40031#endif /* FREECIV_JSON_CONNECTION */
40032 e = 0;
40033
40034 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40035
40036 if (e) {
40037 log_packet_detailed("'counterpart' field error detected");
40038 }
40039 }
40040
40041 if (BV_ISSET(fields, 1)) {
40042 log_packet_detailed(" field 'initiated_from' has changed");
40043
40044#ifdef FREECIV_JSON_CONNECTION
40045 field_addr.name = "initiated_from";
40046#endif /* FREECIV_JSON_CONNECTION */
40047 e = 0;
40048
40049 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40050
40051 if (e) {
40052 log_packet_detailed("'initiated_from' field error detected");
40053 }
40054 }
40055
40056 *old = *real_packet;
40057
40058#else /* FREECIV_DELTA_PROTOCOL */
40059#ifdef FREECIV_JSON_CONNECTION
40060 field_addr.name = "counterpart";
40061#endif /* FREECIV_JSON_CONNECTION */
40062 e = 0;
40063
40064 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40065
40066 if (e) {
40067 log_packet_detailed("'counterpart' field error detected");
40068 }
40069
40070#ifdef FREECIV_JSON_CONNECTION
40071 field_addr.name = "initiated_from";
40072#endif /* FREECIV_JSON_CONNECTION */
40073 e = 0;
40074
40075 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40076
40077 if (e) {
40078 log_packet_detailed("'initiated_from' field error detected");
40079 }
40080#endif /* FREECIV_DELTA_PROTOCOL */
40081
40083}
40084
40086{
40087 if (!pc->used) {
40088 log_error("WARNING: trying to send data to the closed connection %s",
40090 return -1;
40091 }
40092 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet != nullptr, -1,
40093 "Handler for PACKET_DIPLOMACY_INIT_MEETING not installed");
40094 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet(pc, packet);
40095}
40096
40103
40104int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
40105{
40106 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40107
40109 real_packet->initiated_from = initiated_from;
40110
40112}
40113
40115{
40116 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40117
40119 real_packet->initiated_from = initiated_from;
40120
40122}
40123
40125{
40126 memset(packet, 0, sizeof(*packet));
40127}
40128
40129#define free_packet_diplomacy_cancel_meeting_req(_packet) (void) 0
40130#define destroy_packet_diplomacy_cancel_meeting_req free
40131
40132#ifdef FREECIV_DELTA_PROTOCOL
40133#define hash_packet_diplomacy_cancel_meeting_req_100 hash_const
40134#define cmp_packet_diplomacy_cancel_meeting_req_100 cmp_const
40136#endif /* FREECIV_DELTA_PROTOCOL */
40137
40139{
40140#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting_req(_packet)
40142
40143#ifdef FREECIV_JSON_CONNECTION
40144 struct plocation field_addr;
40145 {
40146 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40149 }
40150#endif /* FREECIV_JSON_CONNECTION */
40151
40152 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: got info about ()");
40153
40154#ifdef FREECIV_DELTA_PROTOCOL
40157 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40158
40159 if (nullptr == *hash) {
40161 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40162 }
40163
40164 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40165 *real_packet = *old;
40166 } else {
40167 /* packet is already initialized empty */
40168 log_packet_detailed(" no old info");
40169 }
40170
40171#ifdef FREECIV_JSON_CONNECTION
40172 field_addr.name = "fields";
40173#endif /* FREECIV_JSON_CONNECTION */
40174 DIO_BV_GET(&din, &field_addr, fields);
40175
40176 if (BV_ISSET(fields, 0)) {
40177 log_packet_detailed(" got field 'counterpart'");
40178
40179#ifdef FREECIV_JSON_CONNECTION
40180 field_addr.name = "counterpart";
40181#endif /* FREECIV_JSON_CONNECTION */
40182
40183 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40184 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40185 }
40186 }
40187
40188 if (nullptr == old) {
40189 old = fc_malloc(sizeof(*old));
40191 *old = *real_packet;
40193 } else {
40194 *old = *real_packet;
40195 }
40196
40197#else /* FREECIV_DELTA_PROTOCOL */
40198#ifdef FREECIV_JSON_CONNECTION
40199 field_addr.name = "counterpart";
40200#endif /* FREECIV_JSON_CONNECTION */
40201
40202 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40203 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40204 }
40205#endif /* FREECIV_DELTA_PROTOCOL */
40206
40208#undef FREE_PACKET_STRUCT
40209}
40210
40212{
40213 const struct packet_diplomacy_cancel_meeting_req *real_packet = packet;
40214 int e;
40216
40217 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: sending info about ()");
40218
40219#ifdef FREECIV_DELTA_PROTOCOL
40222 bool differ;
40223 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40224
40225 if (nullptr == *hash) {
40227 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting_req);
40228 }
40229 BV_CLR_ALL(fields);
40230
40231 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40232 old = fc_malloc(sizeof(*old));
40233 /* temporary bitcopy just to insert correctly */
40234 *old = *real_packet;
40237 }
40238
40239 differ = (old->counterpart != real_packet->counterpart);
40240 if (differ) {
40241 BV_SET(fields, 0);
40242 }
40243#endif /* FREECIV_DELTA_PROTOCOL */
40244
40245#ifdef FREECIV_JSON_CONNECTION
40246 struct plocation field_addr;
40247 {
40248 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40251 }
40252#endif /* FREECIV_JSON_CONNECTION */
40253
40254#ifdef FREECIV_DELTA_PROTOCOL
40255#ifdef FREECIV_JSON_CONNECTION
40256 field_addr.name = "fields";
40257#endif /* FREECIV_JSON_CONNECTION */
40258 e = 0;
40259 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40260 if (e) {
40261 log_packet_detailed("fields bitvector error detected");
40262 }
40263
40264 if (BV_ISSET(fields, 0)) {
40265 log_packet_detailed(" field 'counterpart' has changed");
40266
40267#ifdef FREECIV_JSON_CONNECTION
40268 field_addr.name = "counterpart";
40269#endif /* FREECIV_JSON_CONNECTION */
40270 e = 0;
40271
40272 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40273
40274 if (e) {
40275 log_packet_detailed("'counterpart' field error detected");
40276 }
40277 }
40278
40279 *old = *real_packet;
40280
40281#else /* FREECIV_DELTA_PROTOCOL */
40282#ifdef FREECIV_JSON_CONNECTION
40283 field_addr.name = "counterpart";
40284#endif /* FREECIV_JSON_CONNECTION */
40285 e = 0;
40286
40287 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40288
40289 if (e) {
40290 log_packet_detailed("'counterpart' field error detected");
40291 }
40292#endif /* FREECIV_DELTA_PROTOCOL */
40293
40295}
40296
40298{
40299 if (!pc->used) {
40300 log_error("WARNING: trying to send data to the closed connection %s",
40302 return -1;
40303 }
40304 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet != nullptr, -1,
40305 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING_REQ not installed");
40306 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet(pc, packet);
40307}
40308
40310{
40311 struct packet_diplomacy_cancel_meeting_req packet, *real_packet = &packet;
40312
40314
40316}
40317
40319{
40320 memset(packet, 0, sizeof(*packet));
40321}
40322
40323#define free_packet_diplomacy_cancel_meeting(_packet) (void) 0
40324#define destroy_packet_diplomacy_cancel_meeting free
40325
40326#ifdef FREECIV_DELTA_PROTOCOL
40327#define hash_packet_diplomacy_cancel_meeting_100 hash_const
40328#define cmp_packet_diplomacy_cancel_meeting_100 cmp_const
40330#endif /* FREECIV_DELTA_PROTOCOL */
40331
40333{
40334#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_meeting(_packet)
40336
40337#ifdef FREECIV_JSON_CONNECTION
40338 struct plocation field_addr;
40339 {
40340 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40343 }
40344#endif /* FREECIV_JSON_CONNECTION */
40345
40346 log_packet_detailed("packet_diplomacy_cancel_meeting_100: got info about ()");
40347
40348#ifdef FREECIV_DELTA_PROTOCOL
40351 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING;
40352
40353 if (nullptr == *hash) {
40355 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40356 }
40357
40358 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40359 *real_packet = *old;
40360 } else {
40361 /* packet is already initialized empty */
40362 log_packet_detailed(" no old info");
40363 }
40364
40365#ifdef FREECIV_JSON_CONNECTION
40366 field_addr.name = "fields";
40367#endif /* FREECIV_JSON_CONNECTION */
40368 DIO_BV_GET(&din, &field_addr, fields);
40369
40370 if (BV_ISSET(fields, 0)) {
40371 log_packet_detailed(" got field 'counterpart'");
40372
40373#ifdef FREECIV_JSON_CONNECTION
40374 field_addr.name = "counterpart";
40375#endif /* FREECIV_JSON_CONNECTION */
40376
40377 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40378 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40379 }
40380 }
40381
40382 if (BV_ISSET(fields, 1)) {
40383 log_packet_detailed(" got field 'initiated_from'");
40384
40385#ifdef FREECIV_JSON_CONNECTION
40386 field_addr.name = "initiated_from";
40387#endif /* FREECIV_JSON_CONNECTION */
40388
40389 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40390 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40391 }
40392 }
40393
40394 if (nullptr == old) {
40395 old = fc_malloc(sizeof(*old));
40397 *old = *real_packet;
40399 } else {
40400 *old = *real_packet;
40401 }
40402
40403#else /* FREECIV_DELTA_PROTOCOL */
40404#ifdef FREECIV_JSON_CONNECTION
40405 field_addr.name = "counterpart";
40406#endif /* FREECIV_JSON_CONNECTION */
40407
40408 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40409 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40410 }
40411
40412#ifdef FREECIV_JSON_CONNECTION
40413 field_addr.name = "initiated_from";
40414#endif /* FREECIV_JSON_CONNECTION */
40415
40416 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->initiated_from)) {
40417 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40418 }
40419#endif /* FREECIV_DELTA_PROTOCOL */
40420
40422#undef FREE_PACKET_STRUCT
40423}
40424
40426{
40427 const struct packet_diplomacy_cancel_meeting *real_packet = packet;
40428 int e;
40430
40431 log_packet_detailed("packet_diplomacy_cancel_meeting_100: sending info about ()");
40432
40433#ifdef FREECIV_DELTA_PROTOCOL
40436 bool differ;
40437 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING;
40438
40439 if (nullptr == *hash) {
40441 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_meeting);
40442 }
40443 BV_CLR_ALL(fields);
40444
40445 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40446 old = fc_malloc(sizeof(*old));
40447 /* temporary bitcopy just to insert correctly */
40448 *old = *real_packet;
40451 }
40452
40453 differ = (old->counterpart != real_packet->counterpart);
40454 if (differ) {
40455 BV_SET(fields, 0);
40456 }
40457
40458 differ = (old->initiated_from != real_packet->initiated_from);
40459 if (differ) {
40460 BV_SET(fields, 1);
40461 }
40462#endif /* FREECIV_DELTA_PROTOCOL */
40463
40464#ifdef FREECIV_JSON_CONNECTION
40465 struct plocation field_addr;
40466 {
40467 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40470 }
40471#endif /* FREECIV_JSON_CONNECTION */
40472
40473#ifdef FREECIV_DELTA_PROTOCOL
40474#ifdef FREECIV_JSON_CONNECTION
40475 field_addr.name = "fields";
40476#endif /* FREECIV_JSON_CONNECTION */
40477 e = 0;
40478 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40479 if (e) {
40480 log_packet_detailed("fields bitvector error detected");
40481 }
40482
40483 if (BV_ISSET(fields, 0)) {
40484 log_packet_detailed(" field 'counterpart' has changed");
40485
40486#ifdef FREECIV_JSON_CONNECTION
40487 field_addr.name = "counterpart";
40488#endif /* FREECIV_JSON_CONNECTION */
40489 e = 0;
40490
40491 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40492
40493 if (e) {
40494 log_packet_detailed("'counterpart' field error detected");
40495 }
40496 }
40497
40498 if (BV_ISSET(fields, 1)) {
40499 log_packet_detailed(" field 'initiated_from' has changed");
40500
40501#ifdef FREECIV_JSON_CONNECTION
40502 field_addr.name = "initiated_from";
40503#endif /* FREECIV_JSON_CONNECTION */
40504 e = 0;
40505
40506 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40507
40508 if (e) {
40509 log_packet_detailed("'initiated_from' field error detected");
40510 }
40511 }
40512
40513 *old = *real_packet;
40514
40515#else /* FREECIV_DELTA_PROTOCOL */
40516#ifdef FREECIV_JSON_CONNECTION
40517 field_addr.name = "counterpart";
40518#endif /* FREECIV_JSON_CONNECTION */
40519 e = 0;
40520
40521 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40522
40523 if (e) {
40524 log_packet_detailed("'counterpart' field error detected");
40525 }
40526
40527#ifdef FREECIV_JSON_CONNECTION
40528 field_addr.name = "initiated_from";
40529#endif /* FREECIV_JSON_CONNECTION */
40530 e = 0;
40531
40532 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->initiated_from);
40533
40534 if (e) {
40535 log_packet_detailed("'initiated_from' field error detected");
40536 }
40537#endif /* FREECIV_DELTA_PROTOCOL */
40538
40540}
40541
40543{
40544 if (!pc->used) {
40545 log_error("WARNING: trying to send data to the closed connection %s",
40547 return -1;
40548 }
40549 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet != nullptr, -1,
40550 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING not installed");
40551 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet(pc, packet);
40552}
40553
40560
40561int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
40562{
40563 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40564
40566 real_packet->initiated_from = initiated_from;
40567
40569}
40570
40572{
40573 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40574
40576 real_packet->initiated_from = initiated_from;
40577
40579}
40580
40582{
40583 memset(packet, 0, sizeof(*packet));
40584}
40585
40586#define free_packet_diplomacy_create_clause_req(_packet) (void) 0
40587#define destroy_packet_diplomacy_create_clause_req free
40588
40589#ifdef FREECIV_DELTA_PROTOCOL
40590#define hash_packet_diplomacy_create_clause_req_100 hash_const
40591#define cmp_packet_diplomacy_create_clause_req_100 cmp_const
40593#endif /* FREECIV_DELTA_PROTOCOL */
40594
40596{
40597#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause_req(_packet)
40599
40600#ifdef FREECIV_JSON_CONNECTION
40601 struct plocation field_addr;
40602 {
40603 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40606 }
40607#endif /* FREECIV_JSON_CONNECTION */
40608
40609 log_packet_detailed("packet_diplomacy_create_clause_req_100: got info about ()");
40610
40611#ifdef FREECIV_DELTA_PROTOCOL
40614 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40615
40616 if (nullptr == *hash) {
40618 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40619 }
40620
40621 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40622 *real_packet = *old;
40623 } else {
40624 /* packet is already initialized empty */
40625 log_packet_detailed(" no old info");
40626 }
40627
40628#ifdef FREECIV_JSON_CONNECTION
40629 field_addr.name = "fields";
40630#endif /* FREECIV_JSON_CONNECTION */
40631 DIO_BV_GET(&din, &field_addr, fields);
40632
40633 if (BV_ISSET(fields, 0)) {
40634 log_packet_detailed(" got field 'counterpart'");
40635
40636#ifdef FREECIV_JSON_CONNECTION
40637 field_addr.name = "counterpart";
40638#endif /* FREECIV_JSON_CONNECTION */
40639
40640 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40641 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40642 }
40643 }
40644
40645 if (BV_ISSET(fields, 1)) {
40646 log_packet_detailed(" got field 'giver'");
40647
40648#ifdef FREECIV_JSON_CONNECTION
40649 field_addr.name = "giver";
40650#endif /* FREECIV_JSON_CONNECTION */
40651
40652 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40654 }
40655 }
40656
40657 if (BV_ISSET(fields, 2)) {
40658 log_packet_detailed(" got field 'type'");
40659
40660#ifdef FREECIV_JSON_CONNECTION
40661 field_addr.name = "type";
40662#endif /* FREECIV_JSON_CONNECTION */
40663
40664 {
40665 int readin;
40666
40667 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40669 }
40670 real_packet->type = readin;
40671 }
40672 }
40673
40674 if (BV_ISSET(fields, 3)) {
40675 log_packet_detailed(" got field 'value'");
40676
40677#ifdef FREECIV_JSON_CONNECTION
40678 field_addr.name = "value";
40679#endif /* FREECIV_JSON_CONNECTION */
40680
40681 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40683 }
40684 }
40685
40686 if (nullptr == old) {
40687 old = fc_malloc(sizeof(*old));
40689 *old = *real_packet;
40691 } else {
40692 *old = *real_packet;
40693 }
40694
40695#else /* FREECIV_DELTA_PROTOCOL */
40696#ifdef FREECIV_JSON_CONNECTION
40697 field_addr.name = "counterpart";
40698#endif /* FREECIV_JSON_CONNECTION */
40699
40700 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
40701 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40702 }
40703
40704#ifdef FREECIV_JSON_CONNECTION
40705 field_addr.name = "giver";
40706#endif /* FREECIV_JSON_CONNECTION */
40707
40708 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
40710 }
40711
40712#ifdef FREECIV_JSON_CONNECTION
40713 field_addr.name = "type";
40714#endif /* FREECIV_JSON_CONNECTION */
40715
40716 {
40717 int readin;
40718
40719 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40721 }
40722 real_packet->type = readin;
40723 }
40724
40725#ifdef FREECIV_JSON_CONNECTION
40726 field_addr.name = "value";
40727#endif /* FREECIV_JSON_CONNECTION */
40728
40729 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40731 }
40732#endif /* FREECIV_DELTA_PROTOCOL */
40733
40735#undef FREE_PACKET_STRUCT
40736}
40737
40739{
40740 const struct packet_diplomacy_create_clause_req *real_packet = packet;
40741 int e;
40743
40744 log_packet_detailed("packet_diplomacy_create_clause_req_100: sending info about ()");
40745
40746#ifdef FREECIV_DELTA_PROTOCOL
40749 bool differ;
40750 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40751
40752 if (nullptr == *hash) {
40754 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause_req);
40755 }
40756 BV_CLR_ALL(fields);
40757
40758 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40759 old = fc_malloc(sizeof(*old));
40760 /* temporary bitcopy just to insert correctly */
40761 *old = *real_packet;
40764 }
40765
40766 differ = (old->counterpart != real_packet->counterpart);
40767 if (differ) {
40768 BV_SET(fields, 0);
40769 }
40770
40771 differ = (old->giver != real_packet->giver);
40772 if (differ) {
40773 BV_SET(fields, 1);
40774 }
40775
40776 differ = (old->type != real_packet->type);
40777 if (differ) {
40778 BV_SET(fields, 2);
40779 }
40780
40781 differ = (old->value != real_packet->value);
40782 if (differ) {
40783 BV_SET(fields, 3);
40784 }
40785#endif /* FREECIV_DELTA_PROTOCOL */
40786
40787#ifdef FREECIV_JSON_CONNECTION
40788 struct plocation field_addr;
40789 {
40790 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40793 }
40794#endif /* FREECIV_JSON_CONNECTION */
40795
40796#ifdef FREECIV_DELTA_PROTOCOL
40797#ifdef FREECIV_JSON_CONNECTION
40798 field_addr.name = "fields";
40799#endif /* FREECIV_JSON_CONNECTION */
40800 e = 0;
40801 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40802 if (e) {
40803 log_packet_detailed("fields bitvector error detected");
40804 }
40805
40806 if (BV_ISSET(fields, 0)) {
40807 log_packet_detailed(" field 'counterpart' has changed");
40808
40809#ifdef FREECIV_JSON_CONNECTION
40810 field_addr.name = "counterpart";
40811#endif /* FREECIV_JSON_CONNECTION */
40812 e = 0;
40813
40814 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40815
40816 if (e) {
40817 log_packet_detailed("'counterpart' field error detected");
40818 }
40819 }
40820
40821 if (BV_ISSET(fields, 1)) {
40822 log_packet_detailed(" field 'giver' has changed");
40823
40824#ifdef FREECIV_JSON_CONNECTION
40825 field_addr.name = "giver";
40826#endif /* FREECIV_JSON_CONNECTION */
40827 e = 0;
40828
40829 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40830
40831 if (e) {
40832 log_packet_detailed("'giver' field error detected");
40833 }
40834 }
40835
40836 if (BV_ISSET(fields, 2)) {
40837 log_packet_detailed(" field 'type' has changed");
40838
40839#ifdef FREECIV_JSON_CONNECTION
40840 field_addr.name = "type";
40841#endif /* FREECIV_JSON_CONNECTION */
40842 e = 0;
40843
40844 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40845
40846 if (e) {
40847 log_packet_detailed("'type' field error detected");
40848 }
40849 }
40850
40851 if (BV_ISSET(fields, 3)) {
40852 log_packet_detailed(" field 'value' has changed");
40853
40854#ifdef FREECIV_JSON_CONNECTION
40855 field_addr.name = "value";
40856#endif /* FREECIV_JSON_CONNECTION */
40857 e = 0;
40858
40859 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40860
40861 if (e) {
40862 log_packet_detailed("'value' field error detected");
40863 }
40864 }
40865
40866 *old = *real_packet;
40867
40868#else /* FREECIV_DELTA_PROTOCOL */
40869#ifdef FREECIV_JSON_CONNECTION
40870 field_addr.name = "counterpart";
40871#endif /* FREECIV_JSON_CONNECTION */
40872 e = 0;
40873
40874 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
40875
40876 if (e) {
40877 log_packet_detailed("'counterpart' field error detected");
40878 }
40879
40880#ifdef FREECIV_JSON_CONNECTION
40881 field_addr.name = "giver";
40882#endif /* FREECIV_JSON_CONNECTION */
40883 e = 0;
40884
40885 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
40886
40887 if (e) {
40888 log_packet_detailed("'giver' field error detected");
40889 }
40890
40891#ifdef FREECIV_JSON_CONNECTION
40892 field_addr.name = "type";
40893#endif /* FREECIV_JSON_CONNECTION */
40894 e = 0;
40895
40896 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40897
40898 if (e) {
40899 log_packet_detailed("'type' field error detected");
40900 }
40901
40902#ifdef FREECIV_JSON_CONNECTION
40903 field_addr.name = "value";
40904#endif /* FREECIV_JSON_CONNECTION */
40905 e = 0;
40906
40907 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40908
40909 if (e) {
40910 log_packet_detailed("'value' field error detected");
40911 }
40912#endif /* FREECIV_DELTA_PROTOCOL */
40913
40915}
40916
40918{
40919 if (!pc->used) {
40920 log_error("WARNING: trying to send data to the closed connection %s",
40922 return -1;
40923 }
40924 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet != nullptr, -1,
40925 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE_REQ not installed");
40926 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet(pc, packet);
40927}
40928
40929int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
40930{
40931 struct packet_diplomacy_create_clause_req packet, *real_packet = &packet;
40932
40934 real_packet->giver = giver;
40935 real_packet->type = type;
40936 real_packet->value = value;
40937
40939}
40940
40942{
40943 memset(packet, 0, sizeof(*packet));
40944}
40945
40946#define free_packet_diplomacy_create_clause(_packet) (void) 0
40947#define destroy_packet_diplomacy_create_clause free
40948
40949#ifdef FREECIV_DELTA_PROTOCOL
40950#define hash_packet_diplomacy_create_clause_100 hash_const
40951#define cmp_packet_diplomacy_create_clause_100 cmp_const
40953#endif /* FREECIV_DELTA_PROTOCOL */
40954
40956{
40957#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_create_clause(_packet)
40959
40960#ifdef FREECIV_JSON_CONNECTION
40961 struct plocation field_addr;
40962 {
40963 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
40966 }
40967#endif /* FREECIV_JSON_CONNECTION */
40968
40969 log_packet_detailed("packet_diplomacy_create_clause_100: got info about ()");
40970
40971#ifdef FREECIV_DELTA_PROTOCOL
40974 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE;
40975
40976 if (nullptr == *hash) {
40978 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
40979 }
40980
40981 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40982 *real_packet = *old;
40983 } else {
40984 /* packet is already initialized empty */
40985 log_packet_detailed(" no old info");
40986 }
40987
40988#ifdef FREECIV_JSON_CONNECTION
40989 field_addr.name = "fields";
40990#endif /* FREECIV_JSON_CONNECTION */
40991 DIO_BV_GET(&din, &field_addr, fields);
40992
40993 if (BV_ISSET(fields, 0)) {
40994 log_packet_detailed(" got field 'counterpart'");
40995
40996#ifdef FREECIV_JSON_CONNECTION
40997 field_addr.name = "counterpart";
40998#endif /* FREECIV_JSON_CONNECTION */
40999
41000 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41001 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41002 }
41003 }
41004
41005 if (BV_ISSET(fields, 1)) {
41006 log_packet_detailed(" got field 'giver'");
41007
41008#ifdef FREECIV_JSON_CONNECTION
41009 field_addr.name = "giver";
41010#endif /* FREECIV_JSON_CONNECTION */
41011
41012 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41014 }
41015 }
41016
41017 if (BV_ISSET(fields, 2)) {
41018 log_packet_detailed(" got field 'type'");
41019
41020#ifdef FREECIV_JSON_CONNECTION
41021 field_addr.name = "type";
41022#endif /* FREECIV_JSON_CONNECTION */
41023
41024 {
41025 int readin;
41026
41027 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41029 }
41030 real_packet->type = readin;
41031 }
41032 }
41033
41034 if (BV_ISSET(fields, 3)) {
41035 log_packet_detailed(" got field 'value'");
41036
41037#ifdef FREECIV_JSON_CONNECTION
41038 field_addr.name = "value";
41039#endif /* FREECIV_JSON_CONNECTION */
41040
41041 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41043 }
41044 }
41045
41046 if (nullptr == old) {
41047 old = fc_malloc(sizeof(*old));
41049 *old = *real_packet;
41051 } else {
41052 *old = *real_packet;
41053 }
41054
41055#else /* FREECIV_DELTA_PROTOCOL */
41056#ifdef FREECIV_JSON_CONNECTION
41057 field_addr.name = "counterpart";
41058#endif /* FREECIV_JSON_CONNECTION */
41059
41060 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41061 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41062 }
41063
41064#ifdef FREECIV_JSON_CONNECTION
41065 field_addr.name = "giver";
41066#endif /* FREECIV_JSON_CONNECTION */
41067
41068 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41070 }
41071
41072#ifdef FREECIV_JSON_CONNECTION
41073 field_addr.name = "type";
41074#endif /* FREECIV_JSON_CONNECTION */
41075
41076 {
41077 int readin;
41078
41079 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41081 }
41082 real_packet->type = readin;
41083 }
41084
41085#ifdef FREECIV_JSON_CONNECTION
41086 field_addr.name = "value";
41087#endif /* FREECIV_JSON_CONNECTION */
41088
41089 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41091 }
41092#endif /* FREECIV_DELTA_PROTOCOL */
41093
41095#undef FREE_PACKET_STRUCT
41096}
41097
41099{
41100 const struct packet_diplomacy_create_clause *real_packet = packet;
41101 int e;
41103
41104 log_packet_detailed("packet_diplomacy_create_clause_100: sending info about ()");
41105
41106#ifdef FREECIV_DELTA_PROTOCOL
41109 bool differ;
41110 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE;
41111
41112 if (nullptr == *hash) {
41114 nullptr, nullptr, nullptr, destroy_packet_diplomacy_create_clause);
41115 }
41116 BV_CLR_ALL(fields);
41117
41118 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41119 old = fc_malloc(sizeof(*old));
41120 /* temporary bitcopy just to insert correctly */
41121 *old = *real_packet;
41124 }
41125
41126 differ = (old->counterpart != real_packet->counterpart);
41127 if (differ) {
41128 BV_SET(fields, 0);
41129 }
41130
41131 differ = (old->giver != real_packet->giver);
41132 if (differ) {
41133 BV_SET(fields, 1);
41134 }
41135
41136 differ = (old->type != real_packet->type);
41137 if (differ) {
41138 BV_SET(fields, 2);
41139 }
41140
41141 differ = (old->value != real_packet->value);
41142 if (differ) {
41143 BV_SET(fields, 3);
41144 }
41145#endif /* FREECIV_DELTA_PROTOCOL */
41146
41147#ifdef FREECIV_JSON_CONNECTION
41148 struct plocation field_addr;
41149 {
41150 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41153 }
41154#endif /* FREECIV_JSON_CONNECTION */
41155
41156#ifdef FREECIV_DELTA_PROTOCOL
41157#ifdef FREECIV_JSON_CONNECTION
41158 field_addr.name = "fields";
41159#endif /* FREECIV_JSON_CONNECTION */
41160 e = 0;
41161 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41162 if (e) {
41163 log_packet_detailed("fields bitvector error detected");
41164 }
41165
41166 if (BV_ISSET(fields, 0)) {
41167 log_packet_detailed(" field 'counterpart' has changed");
41168
41169#ifdef FREECIV_JSON_CONNECTION
41170 field_addr.name = "counterpart";
41171#endif /* FREECIV_JSON_CONNECTION */
41172 e = 0;
41173
41174 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41175
41176 if (e) {
41177 log_packet_detailed("'counterpart' field error detected");
41178 }
41179 }
41180
41181 if (BV_ISSET(fields, 1)) {
41182 log_packet_detailed(" field 'giver' has changed");
41183
41184#ifdef FREECIV_JSON_CONNECTION
41185 field_addr.name = "giver";
41186#endif /* FREECIV_JSON_CONNECTION */
41187 e = 0;
41188
41189 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41190
41191 if (e) {
41192 log_packet_detailed("'giver' field error detected");
41193 }
41194 }
41195
41196 if (BV_ISSET(fields, 2)) {
41197 log_packet_detailed(" field 'type' has changed");
41198
41199#ifdef FREECIV_JSON_CONNECTION
41200 field_addr.name = "type";
41201#endif /* FREECIV_JSON_CONNECTION */
41202 e = 0;
41203
41204 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41205
41206 if (e) {
41207 log_packet_detailed("'type' field error detected");
41208 }
41209 }
41210
41211 if (BV_ISSET(fields, 3)) {
41212 log_packet_detailed(" field 'value' has changed");
41213
41214#ifdef FREECIV_JSON_CONNECTION
41215 field_addr.name = "value";
41216#endif /* FREECIV_JSON_CONNECTION */
41217 e = 0;
41218
41219 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41220
41221 if (e) {
41222 log_packet_detailed("'value' field error detected");
41223 }
41224 }
41225
41226 *old = *real_packet;
41227
41228#else /* FREECIV_DELTA_PROTOCOL */
41229#ifdef FREECIV_JSON_CONNECTION
41230 field_addr.name = "counterpart";
41231#endif /* FREECIV_JSON_CONNECTION */
41232 e = 0;
41233
41234 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41235
41236 if (e) {
41237 log_packet_detailed("'counterpart' field error detected");
41238 }
41239
41240#ifdef FREECIV_JSON_CONNECTION
41241 field_addr.name = "giver";
41242#endif /* FREECIV_JSON_CONNECTION */
41243 e = 0;
41244
41245 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41246
41247 if (e) {
41248 log_packet_detailed("'giver' field error detected");
41249 }
41250
41251#ifdef FREECIV_JSON_CONNECTION
41252 field_addr.name = "type";
41253#endif /* FREECIV_JSON_CONNECTION */
41254 e = 0;
41255
41256 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41257
41258 if (e) {
41259 log_packet_detailed("'type' field error detected");
41260 }
41261
41262#ifdef FREECIV_JSON_CONNECTION
41263 field_addr.name = "value";
41264#endif /* FREECIV_JSON_CONNECTION */
41265 e = 0;
41266
41267 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41268
41269 if (e) {
41270 log_packet_detailed("'value' field error detected");
41271 }
41272#endif /* FREECIV_DELTA_PROTOCOL */
41273
41275}
41276
41278{
41279 if (!pc->used) {
41280 log_error("WARNING: trying to send data to the closed connection %s",
41282 return -1;
41283 }
41284 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet != nullptr, -1,
41285 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE not installed");
41286 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet(pc, packet);
41287}
41288
41295
41296int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41297{
41298 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41299
41301 real_packet->giver = giver;
41302 real_packet->type = type;
41303 real_packet->value = value;
41304
41306}
41307
41309{
41310 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41311
41313 real_packet->giver = giver;
41314 real_packet->type = type;
41315 real_packet->value = value;
41316
41318}
41319
41321{
41322 memset(packet, 0, sizeof(*packet));
41323}
41324
41325#define free_packet_diplomacy_remove_clause_req(_packet) (void) 0
41326#define destroy_packet_diplomacy_remove_clause_req free
41327
41328#ifdef FREECIV_DELTA_PROTOCOL
41329#define hash_packet_diplomacy_remove_clause_req_100 hash_const
41330#define cmp_packet_diplomacy_remove_clause_req_100 cmp_const
41332#endif /* FREECIV_DELTA_PROTOCOL */
41333
41335{
41336#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause_req(_packet)
41338
41339#ifdef FREECIV_JSON_CONNECTION
41340 struct plocation field_addr;
41341 {
41342 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41345 }
41346#endif /* FREECIV_JSON_CONNECTION */
41347
41348 log_packet_detailed("packet_diplomacy_remove_clause_req_100: got info about ()");
41349
41350#ifdef FREECIV_DELTA_PROTOCOL
41353 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41354
41355 if (nullptr == *hash) {
41357 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41358 }
41359
41360 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41361 *real_packet = *old;
41362 } else {
41363 /* packet is already initialized empty */
41364 log_packet_detailed(" no old info");
41365 }
41366
41367#ifdef FREECIV_JSON_CONNECTION
41368 field_addr.name = "fields";
41369#endif /* FREECIV_JSON_CONNECTION */
41370 DIO_BV_GET(&din, &field_addr, fields);
41371
41372 if (BV_ISSET(fields, 0)) {
41373 log_packet_detailed(" got field 'counterpart'");
41374
41375#ifdef FREECIV_JSON_CONNECTION
41376 field_addr.name = "counterpart";
41377#endif /* FREECIV_JSON_CONNECTION */
41378
41379 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41380 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41381 }
41382 }
41383
41384 if (BV_ISSET(fields, 1)) {
41385 log_packet_detailed(" got field 'giver'");
41386
41387#ifdef FREECIV_JSON_CONNECTION
41388 field_addr.name = "giver";
41389#endif /* FREECIV_JSON_CONNECTION */
41390
41391 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41393 }
41394 }
41395
41396 if (BV_ISSET(fields, 2)) {
41397 log_packet_detailed(" got field 'type'");
41398
41399#ifdef FREECIV_JSON_CONNECTION
41400 field_addr.name = "type";
41401#endif /* FREECIV_JSON_CONNECTION */
41402
41403 {
41404 int readin;
41405
41406 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41408 }
41409 real_packet->type = readin;
41410 }
41411 }
41412
41413 if (BV_ISSET(fields, 3)) {
41414 log_packet_detailed(" got field 'value'");
41415
41416#ifdef FREECIV_JSON_CONNECTION
41417 field_addr.name = "value";
41418#endif /* FREECIV_JSON_CONNECTION */
41419
41420 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41422 }
41423 }
41424
41425 if (nullptr == old) {
41426 old = fc_malloc(sizeof(*old));
41428 *old = *real_packet;
41430 } else {
41431 *old = *real_packet;
41432 }
41433
41434#else /* FREECIV_DELTA_PROTOCOL */
41435#ifdef FREECIV_JSON_CONNECTION
41436 field_addr.name = "counterpart";
41437#endif /* FREECIV_JSON_CONNECTION */
41438
41439 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41440 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41441 }
41442
41443#ifdef FREECIV_JSON_CONNECTION
41444 field_addr.name = "giver";
41445#endif /* FREECIV_JSON_CONNECTION */
41446
41447 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41449 }
41450
41451#ifdef FREECIV_JSON_CONNECTION
41452 field_addr.name = "type";
41453#endif /* FREECIV_JSON_CONNECTION */
41454
41455 {
41456 int readin;
41457
41458 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41460 }
41461 real_packet->type = readin;
41462 }
41463
41464#ifdef FREECIV_JSON_CONNECTION
41465 field_addr.name = "value";
41466#endif /* FREECIV_JSON_CONNECTION */
41467
41468 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41470 }
41471#endif /* FREECIV_DELTA_PROTOCOL */
41472
41474#undef FREE_PACKET_STRUCT
41475}
41476
41478{
41479 const struct packet_diplomacy_remove_clause_req *real_packet = packet;
41480 int e;
41482
41483 log_packet_detailed("packet_diplomacy_remove_clause_req_100: sending info about ()");
41484
41485#ifdef FREECIV_DELTA_PROTOCOL
41488 bool differ;
41489 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41490
41491 if (nullptr == *hash) {
41493 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause_req);
41494 }
41495 BV_CLR_ALL(fields);
41496
41497 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41498 old = fc_malloc(sizeof(*old));
41499 /* temporary bitcopy just to insert correctly */
41500 *old = *real_packet;
41503 }
41504
41505 differ = (old->counterpart != real_packet->counterpart);
41506 if (differ) {
41507 BV_SET(fields, 0);
41508 }
41509
41510 differ = (old->giver != real_packet->giver);
41511 if (differ) {
41512 BV_SET(fields, 1);
41513 }
41514
41515 differ = (old->type != real_packet->type);
41516 if (differ) {
41517 BV_SET(fields, 2);
41518 }
41519
41520 differ = (old->value != real_packet->value);
41521 if (differ) {
41522 BV_SET(fields, 3);
41523 }
41524#endif /* FREECIV_DELTA_PROTOCOL */
41525
41526#ifdef FREECIV_JSON_CONNECTION
41527 struct plocation field_addr;
41528 {
41529 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41532 }
41533#endif /* FREECIV_JSON_CONNECTION */
41534
41535#ifdef FREECIV_DELTA_PROTOCOL
41536#ifdef FREECIV_JSON_CONNECTION
41537 field_addr.name = "fields";
41538#endif /* FREECIV_JSON_CONNECTION */
41539 e = 0;
41540 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41541 if (e) {
41542 log_packet_detailed("fields bitvector error detected");
41543 }
41544
41545 if (BV_ISSET(fields, 0)) {
41546 log_packet_detailed(" field 'counterpart' has changed");
41547
41548#ifdef FREECIV_JSON_CONNECTION
41549 field_addr.name = "counterpart";
41550#endif /* FREECIV_JSON_CONNECTION */
41551 e = 0;
41552
41553 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41554
41555 if (e) {
41556 log_packet_detailed("'counterpart' field error detected");
41557 }
41558 }
41559
41560 if (BV_ISSET(fields, 1)) {
41561 log_packet_detailed(" field 'giver' has changed");
41562
41563#ifdef FREECIV_JSON_CONNECTION
41564 field_addr.name = "giver";
41565#endif /* FREECIV_JSON_CONNECTION */
41566 e = 0;
41567
41568 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41569
41570 if (e) {
41571 log_packet_detailed("'giver' field error detected");
41572 }
41573 }
41574
41575 if (BV_ISSET(fields, 2)) {
41576 log_packet_detailed(" field 'type' has changed");
41577
41578#ifdef FREECIV_JSON_CONNECTION
41579 field_addr.name = "type";
41580#endif /* FREECIV_JSON_CONNECTION */
41581 e = 0;
41582
41583 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41584
41585 if (e) {
41586 log_packet_detailed("'type' field error detected");
41587 }
41588 }
41589
41590 if (BV_ISSET(fields, 3)) {
41591 log_packet_detailed(" field 'value' has changed");
41592
41593#ifdef FREECIV_JSON_CONNECTION
41594 field_addr.name = "value";
41595#endif /* FREECIV_JSON_CONNECTION */
41596 e = 0;
41597
41598 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41599
41600 if (e) {
41601 log_packet_detailed("'value' field error detected");
41602 }
41603 }
41604
41605 *old = *real_packet;
41606
41607#else /* FREECIV_DELTA_PROTOCOL */
41608#ifdef FREECIV_JSON_CONNECTION
41609 field_addr.name = "counterpart";
41610#endif /* FREECIV_JSON_CONNECTION */
41611 e = 0;
41612
41613 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41614
41615 if (e) {
41616 log_packet_detailed("'counterpart' field error detected");
41617 }
41618
41619#ifdef FREECIV_JSON_CONNECTION
41620 field_addr.name = "giver";
41621#endif /* FREECIV_JSON_CONNECTION */
41622 e = 0;
41623
41624 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41625
41626 if (e) {
41627 log_packet_detailed("'giver' field error detected");
41628 }
41629
41630#ifdef FREECIV_JSON_CONNECTION
41631 field_addr.name = "type";
41632#endif /* FREECIV_JSON_CONNECTION */
41633 e = 0;
41634
41635 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41636
41637 if (e) {
41638 log_packet_detailed("'type' field error detected");
41639 }
41640
41641#ifdef FREECIV_JSON_CONNECTION
41642 field_addr.name = "value";
41643#endif /* FREECIV_JSON_CONNECTION */
41644 e = 0;
41645
41646 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41647
41648 if (e) {
41649 log_packet_detailed("'value' field error detected");
41650 }
41651#endif /* FREECIV_DELTA_PROTOCOL */
41652
41654}
41655
41657{
41658 if (!pc->used) {
41659 log_error("WARNING: trying to send data to the closed connection %s",
41661 return -1;
41662 }
41663 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet != nullptr, -1,
41664 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ not installed");
41665 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet(pc, packet);
41666}
41667
41668int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41669{
41670 struct packet_diplomacy_remove_clause_req packet, *real_packet = &packet;
41671
41673 real_packet->giver = giver;
41674 real_packet->type = type;
41675 real_packet->value = value;
41676
41678}
41679
41681{
41682 memset(packet, 0, sizeof(*packet));
41683}
41684
41685#define free_packet_diplomacy_remove_clause(_packet) (void) 0
41686#define destroy_packet_diplomacy_remove_clause free
41687
41688#ifdef FREECIV_DELTA_PROTOCOL
41689#define hash_packet_diplomacy_remove_clause_100 hash_const
41690#define cmp_packet_diplomacy_remove_clause_100 cmp_const
41692#endif /* FREECIV_DELTA_PROTOCOL */
41693
41695{
41696#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_remove_clause(_packet)
41698
41699#ifdef FREECIV_JSON_CONNECTION
41700 struct plocation field_addr;
41701 {
41702 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41705 }
41706#endif /* FREECIV_JSON_CONNECTION */
41707
41708 log_packet_detailed("packet_diplomacy_remove_clause_100: got info about ()");
41709
41710#ifdef FREECIV_DELTA_PROTOCOL
41713 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41714
41715 if (nullptr == *hash) {
41717 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41718 }
41719
41720 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41721 *real_packet = *old;
41722 } else {
41723 /* packet is already initialized empty */
41724 log_packet_detailed(" no old info");
41725 }
41726
41727#ifdef FREECIV_JSON_CONNECTION
41728 field_addr.name = "fields";
41729#endif /* FREECIV_JSON_CONNECTION */
41730 DIO_BV_GET(&din, &field_addr, fields);
41731
41732 if (BV_ISSET(fields, 0)) {
41733 log_packet_detailed(" got field 'counterpart'");
41734
41735#ifdef FREECIV_JSON_CONNECTION
41736 field_addr.name = "counterpart";
41737#endif /* FREECIV_JSON_CONNECTION */
41738
41739 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41740 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41741 }
41742 }
41743
41744 if (BV_ISSET(fields, 1)) {
41745 log_packet_detailed(" got field 'giver'");
41746
41747#ifdef FREECIV_JSON_CONNECTION
41748 field_addr.name = "giver";
41749#endif /* FREECIV_JSON_CONNECTION */
41750
41751 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41753 }
41754 }
41755
41756 if (BV_ISSET(fields, 2)) {
41757 log_packet_detailed(" got field 'type'");
41758
41759#ifdef FREECIV_JSON_CONNECTION
41760 field_addr.name = "type";
41761#endif /* FREECIV_JSON_CONNECTION */
41762
41763 {
41764 int readin;
41765
41766 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41768 }
41769 real_packet->type = readin;
41770 }
41771 }
41772
41773 if (BV_ISSET(fields, 3)) {
41774 log_packet_detailed(" got field 'value'");
41775
41776#ifdef FREECIV_JSON_CONNECTION
41777 field_addr.name = "value";
41778#endif /* FREECIV_JSON_CONNECTION */
41779
41780 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41782 }
41783 }
41784
41785 if (nullptr == old) {
41786 old = fc_malloc(sizeof(*old));
41788 *old = *real_packet;
41790 } else {
41791 *old = *real_packet;
41792 }
41793
41794#else /* FREECIV_DELTA_PROTOCOL */
41795#ifdef FREECIV_JSON_CONNECTION
41796 field_addr.name = "counterpart";
41797#endif /* FREECIV_JSON_CONNECTION */
41798
41799 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
41800 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41801 }
41802
41803#ifdef FREECIV_JSON_CONNECTION
41804 field_addr.name = "giver";
41805#endif /* FREECIV_JSON_CONNECTION */
41806
41807 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->giver)) {
41809 }
41810
41811#ifdef FREECIV_JSON_CONNECTION
41812 field_addr.name = "type";
41813#endif /* FREECIV_JSON_CONNECTION */
41814
41815 {
41816 int readin;
41817
41818 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41820 }
41821 real_packet->type = readin;
41822 }
41823
41824#ifdef FREECIV_JSON_CONNECTION
41825 field_addr.name = "value";
41826#endif /* FREECIV_JSON_CONNECTION */
41827
41828 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41830 }
41831#endif /* FREECIV_DELTA_PROTOCOL */
41832
41834#undef FREE_PACKET_STRUCT
41835}
41836
41838{
41839 const struct packet_diplomacy_remove_clause *real_packet = packet;
41840 int e;
41842
41843 log_packet_detailed("packet_diplomacy_remove_clause_100: sending info about ()");
41844
41845#ifdef FREECIV_DELTA_PROTOCOL
41848 bool differ;
41849 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41850
41851 if (nullptr == *hash) {
41853 nullptr, nullptr, nullptr, destroy_packet_diplomacy_remove_clause);
41854 }
41855 BV_CLR_ALL(fields);
41856
41857 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41858 old = fc_malloc(sizeof(*old));
41859 /* temporary bitcopy just to insert correctly */
41860 *old = *real_packet;
41863 }
41864
41865 differ = (old->counterpart != real_packet->counterpart);
41866 if (differ) {
41867 BV_SET(fields, 0);
41868 }
41869
41870 differ = (old->giver != real_packet->giver);
41871 if (differ) {
41872 BV_SET(fields, 1);
41873 }
41874
41875 differ = (old->type != real_packet->type);
41876 if (differ) {
41877 BV_SET(fields, 2);
41878 }
41879
41880 differ = (old->value != real_packet->value);
41881 if (differ) {
41882 BV_SET(fields, 3);
41883 }
41884#endif /* FREECIV_DELTA_PROTOCOL */
41885
41886#ifdef FREECIV_JSON_CONNECTION
41887 struct plocation field_addr;
41888 {
41889 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
41892 }
41893#endif /* FREECIV_JSON_CONNECTION */
41894
41895#ifdef FREECIV_DELTA_PROTOCOL
41896#ifdef FREECIV_JSON_CONNECTION
41897 field_addr.name = "fields";
41898#endif /* FREECIV_JSON_CONNECTION */
41899 e = 0;
41900 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41901 if (e) {
41902 log_packet_detailed("fields bitvector error detected");
41903 }
41904
41905 if (BV_ISSET(fields, 0)) {
41906 log_packet_detailed(" field 'counterpart' has changed");
41907
41908#ifdef FREECIV_JSON_CONNECTION
41909 field_addr.name = "counterpart";
41910#endif /* FREECIV_JSON_CONNECTION */
41911 e = 0;
41912
41913 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41914
41915 if (e) {
41916 log_packet_detailed("'counterpart' field error detected");
41917 }
41918 }
41919
41920 if (BV_ISSET(fields, 1)) {
41921 log_packet_detailed(" field 'giver' has changed");
41922
41923#ifdef FREECIV_JSON_CONNECTION
41924 field_addr.name = "giver";
41925#endif /* FREECIV_JSON_CONNECTION */
41926 e = 0;
41927
41928 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41929
41930 if (e) {
41931 log_packet_detailed("'giver' field error detected");
41932 }
41933 }
41934
41935 if (BV_ISSET(fields, 2)) {
41936 log_packet_detailed(" field 'type' has changed");
41937
41938#ifdef FREECIV_JSON_CONNECTION
41939 field_addr.name = "type";
41940#endif /* FREECIV_JSON_CONNECTION */
41941 e = 0;
41942
41943 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41944
41945 if (e) {
41946 log_packet_detailed("'type' field error detected");
41947 }
41948 }
41949
41950 if (BV_ISSET(fields, 3)) {
41951 log_packet_detailed(" field 'value' has changed");
41952
41953#ifdef FREECIV_JSON_CONNECTION
41954 field_addr.name = "value";
41955#endif /* FREECIV_JSON_CONNECTION */
41956 e = 0;
41957
41958 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41959
41960 if (e) {
41961 log_packet_detailed("'value' field error detected");
41962 }
41963 }
41964
41965 *old = *real_packet;
41966
41967#else /* FREECIV_DELTA_PROTOCOL */
41968#ifdef FREECIV_JSON_CONNECTION
41969 field_addr.name = "counterpart";
41970#endif /* FREECIV_JSON_CONNECTION */
41971 e = 0;
41972
41973 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
41974
41975 if (e) {
41976 log_packet_detailed("'counterpart' field error detected");
41977 }
41978
41979#ifdef FREECIV_JSON_CONNECTION
41980 field_addr.name = "giver";
41981#endif /* FREECIV_JSON_CONNECTION */
41982 e = 0;
41983
41984 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->giver);
41985
41986 if (e) {
41987 log_packet_detailed("'giver' field error detected");
41988 }
41989
41990#ifdef FREECIV_JSON_CONNECTION
41991 field_addr.name = "type";
41992#endif /* FREECIV_JSON_CONNECTION */
41993 e = 0;
41994
41995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41996
41997 if (e) {
41998 log_packet_detailed("'type' field error detected");
41999 }
42000
42001#ifdef FREECIV_JSON_CONNECTION
42002 field_addr.name = "value";
42003#endif /* FREECIV_JSON_CONNECTION */
42004 e = 0;
42005
42006 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
42007
42008 if (e) {
42009 log_packet_detailed("'value' field error detected");
42010 }
42011#endif /* FREECIV_DELTA_PROTOCOL */
42012
42014}
42015
42017{
42018 if (!pc->used) {
42019 log_error("WARNING: trying to send data to the closed connection %s",
42021 return -1;
42022 }
42023 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet != nullptr, -1,
42024 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE not installed");
42025 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet(pc, packet);
42026}
42027
42034
42035int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
42036{
42037 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
42038
42040 real_packet->giver = giver;
42041 real_packet->type = type;
42042 real_packet->value = value;
42043
42045}
42046
42048{
42049 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
42050
42052 real_packet->giver = giver;
42053 real_packet->type = type;
42054 real_packet->value = value;
42055
42057}
42058
42060{
42061 memset(packet, 0, sizeof(*packet));
42062}
42063
42064#define free_packet_diplomacy_accept_treaty_req(_packet) (void) 0
42065#define destroy_packet_diplomacy_accept_treaty_req free
42066
42067#ifdef FREECIV_DELTA_PROTOCOL
42068#define hash_packet_diplomacy_accept_treaty_req_100 hash_const
42069#define cmp_packet_diplomacy_accept_treaty_req_100 cmp_const
42071#endif /* FREECIV_DELTA_PROTOCOL */
42072
42074{
42075#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty_req(_packet)
42077
42078#ifdef FREECIV_JSON_CONNECTION
42079 struct plocation field_addr;
42080 {
42081 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42084 }
42085#endif /* FREECIV_JSON_CONNECTION */
42086
42087 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: got info about ()");
42088
42089#ifdef FREECIV_DELTA_PROTOCOL
42092 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
42093
42094 if (nullptr == *hash) {
42096 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
42097 }
42098
42099 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42100 *real_packet = *old;
42101 } else {
42102 /* packet is already initialized empty */
42103 log_packet_detailed(" no old info");
42104 }
42105
42106#ifdef FREECIV_JSON_CONNECTION
42107 field_addr.name = "fields";
42108#endif /* FREECIV_JSON_CONNECTION */
42109 DIO_BV_GET(&din, &field_addr, fields);
42110
42111 if (BV_ISSET(fields, 0)) {
42112 log_packet_detailed(" got field 'counterpart'");
42113
42114#ifdef FREECIV_JSON_CONNECTION
42115 field_addr.name = "counterpart";
42116#endif /* FREECIV_JSON_CONNECTION */
42117
42118 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42119 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42120 }
42121 }
42122
42123 if (nullptr == old) {
42124 old = fc_malloc(sizeof(*old));
42126 *old = *real_packet;
42128 } else {
42129 *old = *real_packet;
42130 }
42131
42132#else /* FREECIV_DELTA_PROTOCOL */
42133#ifdef FREECIV_JSON_CONNECTION
42134 field_addr.name = "counterpart";
42135#endif /* FREECIV_JSON_CONNECTION */
42136
42137 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42138 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42139 }
42140#endif /* FREECIV_DELTA_PROTOCOL */
42141
42143#undef FREE_PACKET_STRUCT
42144}
42145
42147{
42148 const struct packet_diplomacy_accept_treaty_req *real_packet = packet;
42149 int e;
42151
42152 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: sending info about ()");
42153
42154#ifdef FREECIV_DELTA_PROTOCOL
42157 bool differ;
42158 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
42159
42160 if (nullptr == *hash) {
42162 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty_req);
42163 }
42164 BV_CLR_ALL(fields);
42165
42166 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42167 old = fc_malloc(sizeof(*old));
42168 /* temporary bitcopy just to insert correctly */
42169 *old = *real_packet;
42172 }
42173
42174 differ = (old->counterpart != real_packet->counterpart);
42175 if (differ) {
42176 BV_SET(fields, 0);
42177 }
42178#endif /* FREECIV_DELTA_PROTOCOL */
42179
42180#ifdef FREECIV_JSON_CONNECTION
42181 struct plocation field_addr;
42182 {
42183 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42186 }
42187#endif /* FREECIV_JSON_CONNECTION */
42188
42189#ifdef FREECIV_DELTA_PROTOCOL
42190#ifdef FREECIV_JSON_CONNECTION
42191 field_addr.name = "fields";
42192#endif /* FREECIV_JSON_CONNECTION */
42193 e = 0;
42194 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42195 if (e) {
42196 log_packet_detailed("fields bitvector error detected");
42197 }
42198
42199 if (BV_ISSET(fields, 0)) {
42200 log_packet_detailed(" field 'counterpart' has changed");
42201
42202#ifdef FREECIV_JSON_CONNECTION
42203 field_addr.name = "counterpart";
42204#endif /* FREECIV_JSON_CONNECTION */
42205 e = 0;
42206
42207 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42208
42209 if (e) {
42210 log_packet_detailed("'counterpart' field error detected");
42211 }
42212 }
42213
42214 *old = *real_packet;
42215
42216#else /* FREECIV_DELTA_PROTOCOL */
42217#ifdef FREECIV_JSON_CONNECTION
42218 field_addr.name = "counterpart";
42219#endif /* FREECIV_JSON_CONNECTION */
42220 e = 0;
42221
42222 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42223
42224 if (e) {
42225 log_packet_detailed("'counterpart' field error detected");
42226 }
42227#endif /* FREECIV_DELTA_PROTOCOL */
42228
42230}
42231
42233{
42234 if (!pc->used) {
42235 log_error("WARNING: trying to send data to the closed connection %s",
42237 return -1;
42238 }
42239 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet != nullptr, -1,
42240 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY_REQ not installed");
42241 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet(pc, packet);
42242}
42243
42245{
42246 struct packet_diplomacy_accept_treaty_req packet, *real_packet = &packet;
42247
42249
42251}
42252
42254{
42255 memset(packet, 0, sizeof(*packet));
42256}
42257
42258#define free_packet_diplomacy_accept_treaty(_packet) (void) 0
42259#define destroy_packet_diplomacy_accept_treaty free
42260
42261#ifdef FREECIV_DELTA_PROTOCOL
42262#define hash_packet_diplomacy_accept_treaty_100 hash_const
42263#define cmp_packet_diplomacy_accept_treaty_100 cmp_const
42265#endif /* FREECIV_DELTA_PROTOCOL */
42266
42268{
42269#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_accept_treaty(_packet)
42271
42272#ifdef FREECIV_JSON_CONNECTION
42273 struct plocation field_addr;
42274 {
42275 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42278 }
42279#endif /* FREECIV_JSON_CONNECTION */
42280
42281 log_packet_detailed("packet_diplomacy_accept_treaty_100: got info about ()");
42282
42283#ifdef FREECIV_DELTA_PROTOCOL
42286 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY;
42287
42288 if (nullptr == *hash) {
42290 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42291 }
42292
42293 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42294 *real_packet = *old;
42295 } else {
42296 /* packet is already initialized empty */
42297 log_packet_detailed(" no old info");
42298 }
42299
42300#ifdef FREECIV_JSON_CONNECTION
42301 field_addr.name = "fields";
42302#endif /* FREECIV_JSON_CONNECTION */
42303 DIO_BV_GET(&din, &field_addr, fields);
42304
42305 if (BV_ISSET(fields, 0)) {
42306 log_packet_detailed(" got field 'counterpart'");
42307
42308#ifdef FREECIV_JSON_CONNECTION
42309 field_addr.name = "counterpart";
42310#endif /* FREECIV_JSON_CONNECTION */
42311
42312 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42313 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42314 }
42315 }
42316
42317 real_packet->I_accepted = BV_ISSET(fields, 1);
42318
42319 real_packet->other_accepted = BV_ISSET(fields, 2);
42320
42321 if (nullptr == old) {
42322 old = fc_malloc(sizeof(*old));
42324 *old = *real_packet;
42326 } else {
42327 *old = *real_packet;
42328 }
42329
42330#else /* FREECIV_DELTA_PROTOCOL */
42331#ifdef FREECIV_JSON_CONNECTION
42332 field_addr.name = "counterpart";
42333#endif /* FREECIV_JSON_CONNECTION */
42334
42335 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->counterpart)) {
42336 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42337 }
42338
42339#ifdef FREECIV_JSON_CONNECTION
42340 field_addr.name = "I_accepted";
42341#endif /* FREECIV_JSON_CONNECTION */
42342
42343 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->I_accepted)) {
42344 RECEIVE_PACKET_FIELD_ERROR(I_accepted);
42345 }
42346
42347#ifdef FREECIV_JSON_CONNECTION
42348 field_addr.name = "other_accepted";
42349#endif /* FREECIV_JSON_CONNECTION */
42350
42351 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->other_accepted)) {
42352 RECEIVE_PACKET_FIELD_ERROR(other_accepted);
42353 }
42354#endif /* FREECIV_DELTA_PROTOCOL */
42355
42357#undef FREE_PACKET_STRUCT
42358}
42359
42361{
42362 const struct packet_diplomacy_accept_treaty *real_packet = packet;
42363 int e;
42365
42366 log_packet_detailed("packet_diplomacy_accept_treaty_100: sending info about ()");
42367
42368#ifdef FREECIV_DELTA_PROTOCOL
42371 bool differ;
42372 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY;
42373
42374 if (nullptr == *hash) {
42376 nullptr, nullptr, nullptr, destroy_packet_diplomacy_accept_treaty);
42377 }
42378 BV_CLR_ALL(fields);
42379
42380 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42381 old = fc_malloc(sizeof(*old));
42382 /* temporary bitcopy just to insert correctly */
42383 *old = *real_packet;
42386 }
42387
42388 differ = (old->counterpart != real_packet->counterpart);
42389 if (differ) {
42390 BV_SET(fields, 0);
42391 }
42392
42393 /* folded into head */
42394 if (real_packet->I_accepted) {
42395 BV_SET(fields, 1);
42396 }
42397
42398 /* folded into head */
42399 if (real_packet->other_accepted) {
42400 BV_SET(fields, 2);
42401 }
42402#endif /* FREECIV_DELTA_PROTOCOL */
42403
42404#ifdef FREECIV_JSON_CONNECTION
42405 struct plocation field_addr;
42406 {
42407 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42410 }
42411#endif /* FREECIV_JSON_CONNECTION */
42412
42413#ifdef FREECIV_DELTA_PROTOCOL
42414#ifdef FREECIV_JSON_CONNECTION
42415 field_addr.name = "fields";
42416#endif /* FREECIV_JSON_CONNECTION */
42417 e = 0;
42418 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42419 if (e) {
42420 log_packet_detailed("fields bitvector error detected");
42421 }
42422
42423 if (BV_ISSET(fields, 0)) {
42424 log_packet_detailed(" field 'counterpart' has changed");
42425
42426#ifdef FREECIV_JSON_CONNECTION
42427 field_addr.name = "counterpart";
42428#endif /* FREECIV_JSON_CONNECTION */
42429 e = 0;
42430
42431 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42432
42433 if (e) {
42434 log_packet_detailed("'counterpart' field error detected");
42435 }
42436 }
42437
42438 /* field 1 is folded into the header */
42439
42440 /* field 2 is folded into the header */
42441
42442 *old = *real_packet;
42443
42444#else /* FREECIV_DELTA_PROTOCOL */
42445#ifdef FREECIV_JSON_CONNECTION
42446 field_addr.name = "counterpart";
42447#endif /* FREECIV_JSON_CONNECTION */
42448 e = 0;
42449
42450 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->counterpart);
42451
42452 if (e) {
42453 log_packet_detailed("'counterpart' field error detected");
42454 }
42455
42456#ifdef FREECIV_JSON_CONNECTION
42457 field_addr.name = "I_accepted";
42458#endif /* FREECIV_JSON_CONNECTION */
42459 e = 0;
42460
42461 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->I_accepted);
42462
42463 if (e) {
42464 log_packet_detailed("'I_accepted' field error detected");
42465 }
42466
42467#ifdef FREECIV_JSON_CONNECTION
42468 field_addr.name = "other_accepted";
42469#endif /* FREECIV_JSON_CONNECTION */
42470 e = 0;
42471
42472 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->other_accepted);
42473
42474 if (e) {
42475 log_packet_detailed("'other_accepted' field error detected");
42476 }
42477#endif /* FREECIV_DELTA_PROTOCOL */
42478
42480}
42481
42483{
42484 if (!pc->used) {
42485 log_error("WARNING: trying to send data to the closed connection %s",
42487 return -1;
42488 }
42489 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet != nullptr, -1,
42490 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY not installed");
42491 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet(pc, packet);
42492}
42493
42500
42501int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
42502{
42503 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42504
42506 real_packet->I_accepted = I_accepted;
42507 real_packet->other_accepted = other_accepted;
42508
42510}
42511
42513{
42514 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42515
42517 real_packet->I_accepted = I_accepted;
42518 real_packet->other_accepted = other_accepted;
42519
42521}
42522
42524{
42525 memset(packet, 0, sizeof(*packet));
42526}
42527
42528#define free_packet_diplomacy_cancel_pact(_packet) (void) 0
42529#define destroy_packet_diplomacy_cancel_pact free
42530
42531#ifdef FREECIV_DELTA_PROTOCOL
42532#define hash_packet_diplomacy_cancel_pact_100 hash_const
42533#define cmp_packet_diplomacy_cancel_pact_100 cmp_const
42535#endif /* FREECIV_DELTA_PROTOCOL */
42536
42538{
42539#define FREE_PACKET_STRUCT(_packet) free_packet_diplomacy_cancel_pact(_packet)
42541
42542#ifdef FREECIV_JSON_CONNECTION
42543 struct plocation field_addr;
42544 {
42545 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42548 }
42549#endif /* FREECIV_JSON_CONNECTION */
42550
42551 log_packet_detailed("packet_diplomacy_cancel_pact_100: got info about ()");
42552
42553#ifdef FREECIV_DELTA_PROTOCOL
42556 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_PACT;
42557
42558 if (nullptr == *hash) {
42560 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42561 }
42562
42563 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42564 *real_packet = *old;
42565 } else {
42566 /* packet is already initialized empty */
42567 log_packet_detailed(" no old info");
42568 }
42569
42570#ifdef FREECIV_JSON_CONNECTION
42571 field_addr.name = "fields";
42572#endif /* FREECIV_JSON_CONNECTION */
42573 DIO_BV_GET(&din, &field_addr, fields);
42574
42575 if (BV_ISSET(fields, 0)) {
42576 log_packet_detailed(" got field 'other_player_id'");
42577
42578#ifdef FREECIV_JSON_CONNECTION
42579 field_addr.name = "other_player_id";
42580#endif /* FREECIV_JSON_CONNECTION */
42581
42582 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42583 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42584 }
42585 }
42586
42587 if (BV_ISSET(fields, 1)) {
42588 log_packet_detailed(" got field 'clause'");
42589
42590#ifdef FREECIV_JSON_CONNECTION
42591 field_addr.name = "clause";
42592#endif /* FREECIV_JSON_CONNECTION */
42593
42594 {
42595 int readin;
42596
42597 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42599 }
42600 real_packet->clause = readin;
42601 }
42602 }
42603
42604 if (nullptr == old) {
42605 old = fc_malloc(sizeof(*old));
42607 *old = *real_packet;
42609 } else {
42610 *old = *real_packet;
42611 }
42612
42613#else /* FREECIV_DELTA_PROTOCOL */
42614#ifdef FREECIV_JSON_CONNECTION
42615 field_addr.name = "other_player_id";
42616#endif /* FREECIV_JSON_CONNECTION */
42617
42618 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->other_player_id)) {
42619 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42620 }
42621
42622#ifdef FREECIV_JSON_CONNECTION
42623 field_addr.name = "clause";
42624#endif /* FREECIV_JSON_CONNECTION */
42625
42626 {
42627 int readin;
42628
42629 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42631 }
42632 real_packet->clause = readin;
42633 }
42634#endif /* FREECIV_DELTA_PROTOCOL */
42635
42637#undef FREE_PACKET_STRUCT
42638}
42639
42641{
42642 const struct packet_diplomacy_cancel_pact *real_packet = packet;
42643 int e;
42645
42646 log_packet_detailed("packet_diplomacy_cancel_pact_100: sending info about ()");
42647
42648#ifdef FREECIV_DELTA_PROTOCOL
42651 bool differ;
42652 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_PACT;
42653
42654 if (nullptr == *hash) {
42656 nullptr, nullptr, nullptr, destroy_packet_diplomacy_cancel_pact);
42657 }
42658 BV_CLR_ALL(fields);
42659
42660 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42661 old = fc_malloc(sizeof(*old));
42662 /* temporary bitcopy just to insert correctly */
42663 *old = *real_packet;
42666 }
42667
42668 differ = (old->other_player_id != real_packet->other_player_id);
42669 if (differ) {
42670 BV_SET(fields, 0);
42671 }
42672
42673 differ = (old->clause != real_packet->clause);
42674 if (differ) {
42675 BV_SET(fields, 1);
42676 }
42677#endif /* FREECIV_DELTA_PROTOCOL */
42678
42679#ifdef FREECIV_JSON_CONNECTION
42680 struct plocation field_addr;
42681 {
42682 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42685 }
42686#endif /* FREECIV_JSON_CONNECTION */
42687
42688#ifdef FREECIV_DELTA_PROTOCOL
42689#ifdef FREECIV_JSON_CONNECTION
42690 field_addr.name = "fields";
42691#endif /* FREECIV_JSON_CONNECTION */
42692 e = 0;
42693 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42694 if (e) {
42695 log_packet_detailed("fields bitvector error detected");
42696 }
42697
42698 if (BV_ISSET(fields, 0)) {
42699 log_packet_detailed(" field 'other_player_id' has changed");
42700
42701#ifdef FREECIV_JSON_CONNECTION
42702 field_addr.name = "other_player_id";
42703#endif /* FREECIV_JSON_CONNECTION */
42704 e = 0;
42705
42706 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42707
42708 if (e) {
42709 log_packet_detailed("'other_player_id' field error detected");
42710 }
42711 }
42712
42713 if (BV_ISSET(fields, 1)) {
42714 log_packet_detailed(" field 'clause' has changed");
42715
42716#ifdef FREECIV_JSON_CONNECTION
42717 field_addr.name = "clause";
42718#endif /* FREECIV_JSON_CONNECTION */
42719 e = 0;
42720
42721 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42722
42723 if (e) {
42724 log_packet_detailed("'clause' field error detected");
42725 }
42726 }
42727
42728 *old = *real_packet;
42729
42730#else /* FREECIV_DELTA_PROTOCOL */
42731#ifdef FREECIV_JSON_CONNECTION
42732 field_addr.name = "other_player_id";
42733#endif /* FREECIV_JSON_CONNECTION */
42734 e = 0;
42735
42736 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->other_player_id);
42737
42738 if (e) {
42739 log_packet_detailed("'other_player_id' field error detected");
42740 }
42741
42742#ifdef FREECIV_JSON_CONNECTION
42743 field_addr.name = "clause";
42744#endif /* FREECIV_JSON_CONNECTION */
42745 e = 0;
42746
42747 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42748
42749 if (e) {
42750 log_packet_detailed("'clause' field error detected");
42751 }
42752#endif /* FREECIV_DELTA_PROTOCOL */
42753
42755}
42756
42758{
42759 if (!pc->used) {
42760 log_error("WARNING: trying to send data to the closed connection %s",
42762 return -1;
42763 }
42764 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet != nullptr, -1,
42765 "Handler for PACKET_DIPLOMACY_CANCEL_PACT not installed");
42766 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet(pc, packet);
42767}
42768
42769int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
42770{
42771 struct packet_diplomacy_cancel_pact packet, *real_packet = &packet;
42772
42774 real_packet->clause = clause;
42775
42777}
42778
42779static inline void init_packet_page_msg(struct packet_page_msg *packet)
42780{
42781 memset(packet, 0, sizeof(*packet));
42782}
42783
42784#define free_packet_page_msg(_packet) (void) 0
42785#define destroy_packet_page_msg free
42786
42787#ifdef FREECIV_DELTA_PROTOCOL
42788#define hash_packet_page_msg_100 hash_const
42789#define cmp_packet_page_msg_100 cmp_const
42791#endif /* FREECIV_DELTA_PROTOCOL */
42792
42794{
42795#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg(_packet)
42797
42798#ifdef FREECIV_JSON_CONNECTION
42799 struct plocation field_addr;
42800 {
42801 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
42804 }
42805#endif /* FREECIV_JSON_CONNECTION */
42806
42807 log_packet_detailed("packet_page_msg_100: got info about ()");
42808
42809#ifdef FREECIV_DELTA_PROTOCOL
42811 struct packet_page_msg *old;
42812 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG;
42813
42814 if (nullptr == *hash) {
42816 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42817 }
42818
42819 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42820 *real_packet = *old;
42821 } else {
42822 /* packet is already initialized empty */
42823 log_packet_detailed(" no old info");
42824 }
42825
42826#ifdef FREECIV_JSON_CONNECTION
42827 field_addr.name = "fields";
42828#endif /* FREECIV_JSON_CONNECTION */
42829 DIO_BV_GET(&din, &field_addr, fields);
42830
42831 if (BV_ISSET(fields, 0)) {
42832 log_packet_detailed(" got field 'caption'");
42833
42834#ifdef FREECIV_JSON_CONNECTION
42835 field_addr.name = "caption";
42836#endif /* FREECIV_JSON_CONNECTION */
42837
42838 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42840 }
42841 }
42842
42843 if (BV_ISSET(fields, 1)) {
42844 log_packet_detailed(" got field 'headline'");
42845
42846#ifdef FREECIV_JSON_CONNECTION
42847 field_addr.name = "headline";
42848#endif /* FREECIV_JSON_CONNECTION */
42849
42850 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42852 }
42853 }
42854
42855 if (BV_ISSET(fields, 2)) {
42856 log_packet_detailed(" got field 'event'");
42857
42858#ifdef FREECIV_JSON_CONNECTION
42859 field_addr.name = "event";
42860#endif /* FREECIV_JSON_CONNECTION */
42861
42862 {
42863 int readin;
42864
42865 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42867 }
42868 real_packet->event = readin;
42869 }
42870 }
42871
42872 if (BV_ISSET(fields, 3)) {
42873 log_packet_detailed(" got field 'len'");
42874
42875#ifdef FREECIV_JSON_CONNECTION
42876 field_addr.name = "len";
42877#endif /* FREECIV_JSON_CONNECTION */
42878
42879 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42881 }
42882 }
42883
42884 if (BV_ISSET(fields, 4)) {
42885 log_packet_detailed(" got field 'parts'");
42886
42887#ifdef FREECIV_JSON_CONNECTION
42888 field_addr.name = "parts";
42889#endif /* FREECIV_JSON_CONNECTION */
42890
42891 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42893 }
42894 }
42895
42896 if (nullptr == old) {
42897 old = fc_malloc(sizeof(*old));
42899 *old = *real_packet;
42901 } else {
42902 *old = *real_packet;
42903 }
42904
42905#else /* FREECIV_DELTA_PROTOCOL */
42906#ifdef FREECIV_JSON_CONNECTION
42907 field_addr.name = "caption";
42908#endif /* FREECIV_JSON_CONNECTION */
42909
42910 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42912 }
42913
42914#ifdef FREECIV_JSON_CONNECTION
42915 field_addr.name = "headline";
42916#endif /* FREECIV_JSON_CONNECTION */
42917
42918 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42920 }
42921
42922#ifdef FREECIV_JSON_CONNECTION
42923 field_addr.name = "event";
42924#endif /* FREECIV_JSON_CONNECTION */
42925
42926 {
42927 int readin;
42928
42929 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42931 }
42932 real_packet->event = readin;
42933 }
42934
42935#ifdef FREECIV_JSON_CONNECTION
42936 field_addr.name = "len";
42937#endif /* FREECIV_JSON_CONNECTION */
42938
42939 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42941 }
42942
42943#ifdef FREECIV_JSON_CONNECTION
42944 field_addr.name = "parts";
42945#endif /* FREECIV_JSON_CONNECTION */
42946
42947 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42949 }
42950#endif /* FREECIV_DELTA_PROTOCOL */
42951
42953#undef FREE_PACKET_STRUCT
42954}
42955
42956static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
42957{
42958 const struct packet_page_msg *real_packet = packet;
42959 int e;
42961
42962 log_packet_detailed("packet_page_msg_100: sending info about ()");
42963
42964#ifdef FREECIV_DELTA_PROTOCOL
42966 struct packet_page_msg *old;
42967 bool differ;
42968 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG;
42969
42970 if (nullptr == *hash) {
42972 nullptr, nullptr, nullptr, destroy_packet_page_msg);
42973 }
42974 BV_CLR_ALL(fields);
42975
42976 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42977 old = fc_malloc(sizeof(*old));
42978 /* temporary bitcopy just to insert correctly */
42979 *old = *real_packet;
42982 }
42983
42984 differ = (strcmp(old->caption, real_packet->caption) != 0);
42985 if (differ) {
42986 BV_SET(fields, 0);
42987 }
42988
42989 differ = (strcmp(old->headline, real_packet->headline) != 0);
42990 if (differ) {
42991 BV_SET(fields, 1);
42992 }
42993
42994 differ = (old->event != real_packet->event);
42995 if (differ) {
42996 BV_SET(fields, 2);
42997 }
42998
42999 differ = (old->len != real_packet->len);
43000 if (differ) {
43001 BV_SET(fields, 3);
43002 }
43003
43004 differ = (old->parts != real_packet->parts);
43005 if (differ) {
43006 BV_SET(fields, 4);
43007 }
43008#endif /* FREECIV_DELTA_PROTOCOL */
43009
43010#ifdef FREECIV_JSON_CONNECTION
43011 struct plocation field_addr;
43012 {
43013 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43016 }
43017#endif /* FREECIV_JSON_CONNECTION */
43018
43019#ifdef FREECIV_DELTA_PROTOCOL
43020#ifdef FREECIV_JSON_CONNECTION
43021 field_addr.name = "fields";
43022#endif /* FREECIV_JSON_CONNECTION */
43023 e = 0;
43024 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43025 if (e) {
43026 log_packet_detailed("fields bitvector error detected");
43027 }
43028
43029 if (BV_ISSET(fields, 0)) {
43030 log_packet_detailed(" field 'caption' has changed");
43031
43032#ifdef FREECIV_JSON_CONNECTION
43033 field_addr.name = "caption";
43034#endif /* FREECIV_JSON_CONNECTION */
43035 e = 0;
43036
43037 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
43038
43039 if (e) {
43040 log_packet_detailed("'caption' field error detected");
43041 }
43042 }
43043
43044 if (BV_ISSET(fields, 1)) {
43045 log_packet_detailed(" field 'headline' has changed");
43046
43047#ifdef FREECIV_JSON_CONNECTION
43048 field_addr.name = "headline";
43049#endif /* FREECIV_JSON_CONNECTION */
43050 e = 0;
43051
43052 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
43053
43054 if (e) {
43055 log_packet_detailed("'headline' field error detected");
43056 }
43057 }
43058
43059 if (BV_ISSET(fields, 2)) {
43060 log_packet_detailed(" field 'event' has changed");
43061
43062#ifdef FREECIV_JSON_CONNECTION
43063 field_addr.name = "event";
43064#endif /* FREECIV_JSON_CONNECTION */
43065 e = 0;
43066
43067 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
43068
43069 if (e) {
43070 log_packet_detailed("'event' field error detected");
43071 }
43072 }
43073
43074 if (BV_ISSET(fields, 3)) {
43075 log_packet_detailed(" field 'len' has changed");
43076
43077#ifdef FREECIV_JSON_CONNECTION
43078 field_addr.name = "len";
43079#endif /* FREECIV_JSON_CONNECTION */
43080 e = 0;
43081
43082 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
43083
43084 if (e) {
43085 log_packet_detailed("'len' field error detected");
43086 }
43087 }
43088
43089 if (BV_ISSET(fields, 4)) {
43090 log_packet_detailed(" field 'parts' has changed");
43091
43092#ifdef FREECIV_JSON_CONNECTION
43093 field_addr.name = "parts";
43094#endif /* FREECIV_JSON_CONNECTION */
43095 e = 0;
43096
43097 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
43098
43099 if (e) {
43100 log_packet_detailed("'parts' field error detected");
43101 }
43102 }
43103
43104 *old = *real_packet;
43105
43106#else /* FREECIV_DELTA_PROTOCOL */
43107#ifdef FREECIV_JSON_CONNECTION
43108 field_addr.name = "caption";
43109#endif /* FREECIV_JSON_CONNECTION */
43110 e = 0;
43111
43112 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
43113
43114 if (e) {
43115 log_packet_detailed("'caption' field error detected");
43116 }
43117
43118#ifdef FREECIV_JSON_CONNECTION
43119 field_addr.name = "headline";
43120#endif /* FREECIV_JSON_CONNECTION */
43121 e = 0;
43122
43123 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
43124
43125 if (e) {
43126 log_packet_detailed("'headline' field error detected");
43127 }
43128
43129#ifdef FREECIV_JSON_CONNECTION
43130 field_addr.name = "event";
43131#endif /* FREECIV_JSON_CONNECTION */
43132 e = 0;
43133
43134 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
43135
43136 if (e) {
43137 log_packet_detailed("'event' field error detected");
43138 }
43139
43140#ifdef FREECIV_JSON_CONNECTION
43141 field_addr.name = "len";
43142#endif /* FREECIV_JSON_CONNECTION */
43143 e = 0;
43144
43145 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
43146
43147 if (e) {
43148 log_packet_detailed("'len' field error detected");
43149 }
43150
43151#ifdef FREECIV_JSON_CONNECTION
43152 field_addr.name = "parts";
43153#endif /* FREECIV_JSON_CONNECTION */
43154 e = 0;
43155
43156 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
43157
43158 if (e) {
43159 log_packet_detailed("'parts' field error detected");
43160 }
43161#endif /* FREECIV_DELTA_PROTOCOL */
43162
43164}
43165
43166int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
43167{
43168 if (!pc->used) {
43169 log_error("WARNING: trying to send data to the closed connection %s",
43171 return -1;
43172 }
43173 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG].packet != nullptr, -1,
43174 "Handler for PACKET_PAGE_MSG not installed");
43175 return pc->phs.handlers->send[PACKET_PAGE_MSG].packet(pc, packet);
43176}
43177
43178void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
43179{
43180 conn_list_iterate(dest, pconn) {
43181 send_packet_page_msg(pconn, packet);
43183}
43184
43185static inline void init_packet_page_msg_part(struct packet_page_msg_part *packet)
43186{
43187 memset(packet, 0, sizeof(*packet));
43188}
43189
43190#define free_packet_page_msg_part(_packet) (void) 0
43191#define destroy_packet_page_msg_part free
43192
43193#ifdef FREECIV_DELTA_PROTOCOL
43194#define hash_packet_page_msg_part_100 hash_const
43195#define cmp_packet_page_msg_part_100 cmp_const
43197#endif /* FREECIV_DELTA_PROTOCOL */
43198
43200{
43201#define FREE_PACKET_STRUCT(_packet) free_packet_page_msg_part(_packet)
43203
43204#ifdef FREECIV_JSON_CONNECTION
43205 struct plocation field_addr;
43206 {
43207 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43210 }
43211#endif /* FREECIV_JSON_CONNECTION */
43212
43213 log_packet_detailed("packet_page_msg_part_100: got info about ()");
43214
43215#ifdef FREECIV_DELTA_PROTOCOL
43217 struct packet_page_msg_part *old;
43218 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG_PART;
43219
43220 if (nullptr == *hash) {
43222 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43223 }
43224
43225 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43226 *real_packet = *old;
43227 } else {
43228 /* packet is already initialized empty */
43229 log_packet_detailed(" no old info");
43230 }
43231
43232#ifdef FREECIV_JSON_CONNECTION
43233 field_addr.name = "fields";
43234#endif /* FREECIV_JSON_CONNECTION */
43235 DIO_BV_GET(&din, &field_addr, fields);
43236
43237 if (BV_ISSET(fields, 0)) {
43238 log_packet_detailed(" got field 'lines'");
43239
43240#ifdef FREECIV_JSON_CONNECTION
43241 field_addr.name = "lines";
43242#endif /* FREECIV_JSON_CONNECTION */
43243
43244 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43246 }
43247 }
43248
43249 if (nullptr == old) {
43250 old = fc_malloc(sizeof(*old));
43252 *old = *real_packet;
43254 } else {
43255 *old = *real_packet;
43256 }
43257
43258#else /* FREECIV_DELTA_PROTOCOL */
43259#ifdef FREECIV_JSON_CONNECTION
43260 field_addr.name = "lines";
43261#endif /* FREECIV_JSON_CONNECTION */
43262
43263 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
43265 }
43266#endif /* FREECIV_DELTA_PROTOCOL */
43267
43269#undef FREE_PACKET_STRUCT
43270}
43271
43272static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
43273{
43274 const struct packet_page_msg_part *real_packet = packet;
43275 int e;
43277
43278 log_packet_detailed("packet_page_msg_part_100: sending info about ()");
43279
43280#ifdef FREECIV_DELTA_PROTOCOL
43282 struct packet_page_msg_part *old;
43283 bool differ;
43284 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG_PART;
43285
43286 if (nullptr == *hash) {
43288 nullptr, nullptr, nullptr, destroy_packet_page_msg_part);
43289 }
43290 BV_CLR_ALL(fields);
43291
43292 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43293 old = fc_malloc(sizeof(*old));
43294 /* temporary bitcopy just to insert correctly */
43295 *old = *real_packet;
43298 }
43299
43300 differ = (strcmp(old->lines, real_packet->lines) != 0);
43301 if (differ) {
43302 BV_SET(fields, 0);
43303 }
43304#endif /* FREECIV_DELTA_PROTOCOL */
43305
43306#ifdef FREECIV_JSON_CONNECTION
43307 struct plocation field_addr;
43308 {
43309 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43312 }
43313#endif /* FREECIV_JSON_CONNECTION */
43314
43315#ifdef FREECIV_DELTA_PROTOCOL
43316#ifdef FREECIV_JSON_CONNECTION
43317 field_addr.name = "fields";
43318#endif /* FREECIV_JSON_CONNECTION */
43319 e = 0;
43320 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43321 if (e) {
43322 log_packet_detailed("fields bitvector error detected");
43323 }
43324
43325 if (BV_ISSET(fields, 0)) {
43326 log_packet_detailed(" field 'lines' has changed");
43327
43328#ifdef FREECIV_JSON_CONNECTION
43329 field_addr.name = "lines";
43330#endif /* FREECIV_JSON_CONNECTION */
43331 e = 0;
43332
43333 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43334
43335 if (e) {
43336 log_packet_detailed("'lines' field error detected");
43337 }
43338 }
43339
43340 *old = *real_packet;
43341
43342#else /* FREECIV_DELTA_PROTOCOL */
43343#ifdef FREECIV_JSON_CONNECTION
43344 field_addr.name = "lines";
43345#endif /* FREECIV_JSON_CONNECTION */
43346 e = 0;
43347
43348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43349
43350 if (e) {
43351 log_packet_detailed("'lines' field error detected");
43352 }
43353#endif /* FREECIV_DELTA_PROTOCOL */
43354
43356}
43357
43359{
43360 if (!pc->used) {
43361 log_error("WARNING: trying to send data to the closed connection %s",
43363 return -1;
43364 }
43365 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet != nullptr, -1,
43366 "Handler for PACKET_PAGE_MSG_PART not installed");
43367 return pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet(pc, packet);
43368}
43369
43370void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
43371{
43372 conn_list_iterate(dest, pconn) {
43375}
43376
43377static inline void init_packet_report_req(struct packet_report_req *packet)
43378{
43379 memset(packet, 0, sizeof(*packet));
43380}
43381
43382#define free_packet_report_req(_packet) (void) 0
43383#define destroy_packet_report_req free
43384
43385#ifdef FREECIV_DELTA_PROTOCOL
43386#define hash_packet_report_req_100 hash_const
43387#define cmp_packet_report_req_100 cmp_const
43389#endif /* FREECIV_DELTA_PROTOCOL */
43390
43392{
43393#define FREE_PACKET_STRUCT(_packet) free_packet_report_req(_packet)
43395
43396#ifdef FREECIV_JSON_CONNECTION
43397 struct plocation field_addr;
43398 {
43399 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43402 }
43403#endif /* FREECIV_JSON_CONNECTION */
43404
43405 log_packet_detailed("packet_report_req_100: got info about ()");
43406
43407#ifdef FREECIV_DELTA_PROTOCOL
43409 struct packet_report_req *old;
43410 struct genhash **hash = pc->phs.received + PACKET_REPORT_REQ;
43411
43412 if (nullptr == *hash) {
43414 nullptr, nullptr, nullptr, destroy_packet_report_req);
43415 }
43416
43417 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43418 *real_packet = *old;
43419 } else {
43420 /* packet is already initialized empty */
43421 log_packet_detailed(" no old info");
43422 }
43423
43424#ifdef FREECIV_JSON_CONNECTION
43425 field_addr.name = "fields";
43426#endif /* FREECIV_JSON_CONNECTION */
43427 DIO_BV_GET(&din, &field_addr, fields);
43428
43429 if (BV_ISSET(fields, 0)) {
43430 log_packet_detailed(" got field 'type'");
43431
43432#ifdef FREECIV_JSON_CONNECTION
43433 field_addr.name = "type";
43434#endif /* FREECIV_JSON_CONNECTION */
43435
43436 {
43437 int readin;
43438
43439 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43441 }
43442 real_packet->type = readin;
43443 }
43444 }
43445
43446 if (nullptr == old) {
43447 old = fc_malloc(sizeof(*old));
43449 *old = *real_packet;
43451 } else {
43452 *old = *real_packet;
43453 }
43454
43455#else /* FREECIV_DELTA_PROTOCOL */
43456#ifdef FREECIV_JSON_CONNECTION
43457 field_addr.name = "type";
43458#endif /* FREECIV_JSON_CONNECTION */
43459
43460 {
43461 int readin;
43462
43463 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43465 }
43466 real_packet->type = readin;
43467 }
43468#endif /* FREECIV_DELTA_PROTOCOL */
43469
43471#undef FREE_PACKET_STRUCT
43472}
43473
43474static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
43475{
43476 const struct packet_report_req *real_packet = packet;
43477 int e;
43479
43480 log_packet_detailed("packet_report_req_100: sending info about ()");
43481
43482#ifdef FREECIV_DELTA_PROTOCOL
43484 struct packet_report_req *old;
43485 bool differ;
43486 struct genhash **hash = pc->phs.sent + PACKET_REPORT_REQ;
43487
43488 if (nullptr == *hash) {
43490 nullptr, nullptr, nullptr, destroy_packet_report_req);
43491 }
43492 BV_CLR_ALL(fields);
43493
43494 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43495 old = fc_malloc(sizeof(*old));
43496 /* temporary bitcopy just to insert correctly */
43497 *old = *real_packet;
43500 }
43501
43502 differ = (old->type != real_packet->type);
43503 if (differ) {
43504 BV_SET(fields, 0);
43505 }
43506#endif /* FREECIV_DELTA_PROTOCOL */
43507
43508#ifdef FREECIV_JSON_CONNECTION
43509 struct plocation field_addr;
43510 {
43511 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43514 }
43515#endif /* FREECIV_JSON_CONNECTION */
43516
43517#ifdef FREECIV_DELTA_PROTOCOL
43518#ifdef FREECIV_JSON_CONNECTION
43519 field_addr.name = "fields";
43520#endif /* FREECIV_JSON_CONNECTION */
43521 e = 0;
43522 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43523 if (e) {
43524 log_packet_detailed("fields bitvector error detected");
43525 }
43526
43527 if (BV_ISSET(fields, 0)) {
43528 log_packet_detailed(" field 'type' has changed");
43529
43530#ifdef FREECIV_JSON_CONNECTION
43531 field_addr.name = "type";
43532#endif /* FREECIV_JSON_CONNECTION */
43533 e = 0;
43534
43535 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43536
43537 if (e) {
43538 log_packet_detailed("'type' field error detected");
43539 }
43540 }
43541
43542 *old = *real_packet;
43543
43544#else /* FREECIV_DELTA_PROTOCOL */
43545#ifdef FREECIV_JSON_CONNECTION
43546 field_addr.name = "type";
43547#endif /* FREECIV_JSON_CONNECTION */
43548 e = 0;
43549
43550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43551
43552 if (e) {
43553 log_packet_detailed("'type' field error detected");
43554 }
43555#endif /* FREECIV_DELTA_PROTOCOL */
43556
43558}
43559
43560int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
43561{
43562 if (!pc->used) {
43563 log_error("WARNING: trying to send data to the closed connection %s",
43565 return -1;
43566 }
43567 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_REPORT_REQ].packet != nullptr, -1,
43568 "Handler for PACKET_REPORT_REQ not installed");
43569 return pc->phs.handlers->send[PACKET_REPORT_REQ].packet(pc, packet);
43570}
43571
43573{
43574 struct packet_report_req packet, *real_packet = &packet;
43575
43577
43579}
43580
43581static inline void init_packet_conn_info(struct packet_conn_info *packet)
43582{
43583 memset(packet, 0, sizeof(*packet));
43584}
43585
43586#define free_packet_conn_info(_packet) (void) 0
43587#define destroy_packet_conn_info free
43588
43589#ifdef FREECIV_DELTA_PROTOCOL
43591{
43592 const struct packet_conn_info *key = (const struct packet_conn_info *) vkey;
43593 genhash_val_t result = 0;
43594
43595 result += key->id;
43596
43597 result &= 0xFFFFFFFF;
43598 return result;
43599}
43600
43601static bool cmp_packet_conn_info_100(const void *vkey1, const void *vkey2)
43602{
43603 const struct packet_conn_info *old = (const struct packet_conn_info *) vkey1;
43604 const struct packet_conn_info *real_packet = (const struct packet_conn_info *) vkey2;
43605 bool differ;
43606
43607 differ = (old->id != real_packet->id);
43608
43609 return !differ;
43610}
43612#endif /* FREECIV_DELTA_PROTOCOL */
43613
43615{
43616#define FREE_PACKET_STRUCT(_packet) free_packet_conn_info(_packet)
43618
43619#ifdef FREECIV_JSON_CONNECTION
43620 struct plocation field_addr;
43621 {
43622 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43625 }
43626#endif /* FREECIV_JSON_CONNECTION */
43627
43628#ifdef FREECIV_JSON_CONNECTION
43629 field_addr.name = "id";
43630#endif /* FREECIV_JSON_CONNECTION */
43631
43632 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
43634 }
43635
43636 log_packet_detailed("packet_conn_info_100: got info about (%d)",
43637 real_packet->id);
43638
43639#ifdef FREECIV_DELTA_PROTOCOL
43641 struct packet_conn_info *old;
43642 struct genhash **hash = pc->phs.received + PACKET_CONN_INFO;
43643
43644 if (nullptr == *hash) {
43646 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43647 }
43648
43649 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43650 *real_packet = *old;
43651 } else {
43652 /* packet is already initialized empty */
43653 log_packet_detailed(" no old info");
43654 }
43655
43656#ifdef FREECIV_JSON_CONNECTION
43657 field_addr.name = "fields";
43658#endif /* FREECIV_JSON_CONNECTION */
43659 DIO_BV_GET(&din, &field_addr, fields);
43660
43661 real_packet->used = BV_ISSET(fields, 0);
43662
43663 real_packet->established = BV_ISSET(fields, 1);
43664
43665 real_packet->observer = BV_ISSET(fields, 2);
43666
43667 if (BV_ISSET(fields, 3)) {
43668 log_packet_detailed(" got field 'player_num'");
43669
43670#ifdef FREECIV_JSON_CONNECTION
43671 field_addr.name = "player_num";
43672#endif /* FREECIV_JSON_CONNECTION */
43673
43674 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43675 RECEIVE_PACKET_FIELD_ERROR(player_num);
43676 }
43677 }
43678
43679 if (BV_ISSET(fields, 4)) {
43680 log_packet_detailed(" got field 'access_level'");
43681
43682#ifdef FREECIV_JSON_CONNECTION
43683 field_addr.name = "access_level";
43684#endif /* FREECIV_JSON_CONNECTION */
43685
43686 {
43687 int readin;
43688
43689 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43690 RECEIVE_PACKET_FIELD_ERROR(access_level);
43691 }
43692 real_packet->access_level = readin;
43693 }
43694 }
43695
43696 if (BV_ISSET(fields, 5)) {
43697 log_packet_detailed(" got field 'username'");
43698
43699#ifdef FREECIV_JSON_CONNECTION
43700 field_addr.name = "username";
43701#endif /* FREECIV_JSON_CONNECTION */
43702
43703 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43705 }
43706 }
43707
43708 if (BV_ISSET(fields, 6)) {
43709 log_packet_detailed(" got field 'addr'");
43710
43711#ifdef FREECIV_JSON_CONNECTION
43712 field_addr.name = "addr";
43713#endif /* FREECIV_JSON_CONNECTION */
43714
43715 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43717 }
43718 }
43719
43720 if (BV_ISSET(fields, 7)) {
43721 log_packet_detailed(" got field 'capability'");
43722
43723#ifdef FREECIV_JSON_CONNECTION
43724 field_addr.name = "capability";
43725#endif /* FREECIV_JSON_CONNECTION */
43726
43727 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43728 RECEIVE_PACKET_FIELD_ERROR(capability);
43729 }
43730 }
43731
43732 if (nullptr == old) {
43733 old = fc_malloc(sizeof(*old));
43735 *old = *real_packet;
43737 } else {
43738 *old = *real_packet;
43739 }
43740
43741#else /* FREECIV_DELTA_PROTOCOL */
43742#ifdef FREECIV_JSON_CONNECTION
43743 field_addr.name = "used";
43744#endif /* FREECIV_JSON_CONNECTION */
43745
43746 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->used)) {
43748 }
43749
43750#ifdef FREECIV_JSON_CONNECTION
43751 field_addr.name = "established";
43752#endif /* FREECIV_JSON_CONNECTION */
43753
43754 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->established)) {
43755 RECEIVE_PACKET_FIELD_ERROR(established);
43756 }
43757
43758#ifdef FREECIV_JSON_CONNECTION
43759 field_addr.name = "observer";
43760#endif /* FREECIV_JSON_CONNECTION */
43761
43762 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->observer)) {
43764 }
43765
43766#ifdef FREECIV_JSON_CONNECTION
43767 field_addr.name = "player_num";
43768#endif /* FREECIV_JSON_CONNECTION */
43769
43770 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
43771 RECEIVE_PACKET_FIELD_ERROR(player_num);
43772 }
43773
43774#ifdef FREECIV_JSON_CONNECTION
43775 field_addr.name = "access_level";
43776#endif /* FREECIV_JSON_CONNECTION */
43777
43778 {
43779 int readin;
43780
43781 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43782 RECEIVE_PACKET_FIELD_ERROR(access_level);
43783 }
43784 real_packet->access_level = readin;
43785 }
43786
43787#ifdef FREECIV_JSON_CONNECTION
43788 field_addr.name = "username";
43789#endif /* FREECIV_JSON_CONNECTION */
43790
43791 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43793 }
43794
43795#ifdef FREECIV_JSON_CONNECTION
43796 field_addr.name = "addr";
43797#endif /* FREECIV_JSON_CONNECTION */
43798
43799 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43801 }
43802
43803#ifdef FREECIV_JSON_CONNECTION
43804 field_addr.name = "capability";
43805#endif /* FREECIV_JSON_CONNECTION */
43806
43807 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43808 RECEIVE_PACKET_FIELD_ERROR(capability);
43809 }
43810#endif /* FREECIV_DELTA_PROTOCOL */
43811
43813#undef FREE_PACKET_STRUCT
43814}
43815
43816static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
43817{
43818 const struct packet_conn_info *real_packet = packet;
43819 int e;
43821
43822 log_packet_detailed("packet_conn_info_100: sending info about (%d)",
43823 real_packet->id);
43824
43825#ifdef FREECIV_DELTA_PROTOCOL
43827 struct packet_conn_info *old;
43828 bool differ;
43829 int different = 0;
43830 struct genhash **hash = pc->phs.sent + PACKET_CONN_INFO;
43831
43832 if (nullptr == *hash) {
43834 nullptr, nullptr, nullptr, destroy_packet_conn_info);
43835 }
43836 BV_CLR_ALL(fields);
43837
43838 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43839 old = fc_malloc(sizeof(*old));
43840 /* temporary bitcopy just to insert correctly */
43841 *old = *real_packet;
43844 different = 1; /* Force to send. */
43845 }
43846
43847 differ = (old->used != real_packet->used);
43848 if (differ) {
43849 different++;
43850 }
43851 /* folded into head */
43852 if (real_packet->used) {
43853 BV_SET(fields, 0);
43854 }
43855
43856 differ = (old->established != real_packet->established);
43857 if (differ) {
43858 different++;
43859 }
43860 /* folded into head */
43861 if (real_packet->established) {
43862 BV_SET(fields, 1);
43863 }
43864
43865 differ = (old->observer != real_packet->observer);
43866 if (differ) {
43867 different++;
43868 }
43869 /* folded into head */
43870 if (real_packet->observer) {
43871 BV_SET(fields, 2);
43872 }
43873
43874 differ = (old->player_num != real_packet->player_num);
43875 if (differ) {
43876 different++;
43877 BV_SET(fields, 3);
43878 }
43879
43880 differ = (old->access_level != real_packet->access_level);
43881 if (differ) {
43882 different++;
43883 BV_SET(fields, 4);
43884 }
43885
43886 differ = (strcmp(old->username, real_packet->username) != 0);
43887 if (differ) {
43888 different++;
43889 BV_SET(fields, 5);
43890 }
43891
43892 differ = (strcmp(old->addr, real_packet->addr) != 0);
43893 if (differ) {
43894 different++;
43895 BV_SET(fields, 6);
43896 }
43897
43898 differ = (strcmp(old->capability, real_packet->capability) != 0);
43899 if (differ) {
43900 different++;
43901 BV_SET(fields, 7);
43902 }
43903
43904 if (different == 0) {
43905 log_packet_detailed(" no change -> discard");
43907 }
43908#endif /* FREECIV_DELTA_PROTOCOL */
43909
43910#ifdef FREECIV_JSON_CONNECTION
43911 struct plocation field_addr;
43912 {
43913 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
43916 }
43917#endif /* FREECIV_JSON_CONNECTION */
43918
43919#ifdef FREECIV_JSON_CONNECTION
43920 field_addr.name = "id";
43921#endif /* FREECIV_JSON_CONNECTION */
43922 e = 0;
43923
43924 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
43925
43926 if (e) {
43927 log_packet_detailed("'id' field error detected");
43928 }
43929
43930#ifdef FREECIV_DELTA_PROTOCOL
43931#ifdef FREECIV_JSON_CONNECTION
43932 field_addr.name = "fields";
43933#endif /* FREECIV_JSON_CONNECTION */
43934 e = 0;
43935 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43936 if (e) {
43937 log_packet_detailed("fields bitvector error detected");
43938 }
43939
43940 /* field 0 is folded into the header */
43941
43942 /* field 1 is folded into the header */
43943
43944 /* field 2 is folded into the header */
43945
43946 if (BV_ISSET(fields, 3)) {
43947 log_packet_detailed(" field 'player_num' has changed");
43948
43949#ifdef FREECIV_JSON_CONNECTION
43950 field_addr.name = "player_num";
43951#endif /* FREECIV_JSON_CONNECTION */
43952 e = 0;
43953
43954 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
43955
43956 if (e) {
43957 log_packet_detailed("'player_num' field error detected");
43958 }
43959 }
43960
43961 if (BV_ISSET(fields, 4)) {
43962 log_packet_detailed(" field 'access_level' has changed");
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
43976 if (BV_ISSET(fields, 5)) {
43977 log_packet_detailed(" field 'username' has changed");
43978
43979#ifdef FREECIV_JSON_CONNECTION
43980 field_addr.name = "username";
43981#endif /* FREECIV_JSON_CONNECTION */
43982 e = 0;
43983
43984 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43985
43986 if (e) {
43987 log_packet_detailed("'username' field error detected");
43988 }
43989 }
43990
43991 if (BV_ISSET(fields, 6)) {
43992 log_packet_detailed(" field 'addr' has changed");
43993
43994#ifdef FREECIV_JSON_CONNECTION
43995 field_addr.name = "addr";
43996#endif /* FREECIV_JSON_CONNECTION */
43997 e = 0;
43998
43999 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
44000
44001 if (e) {
44002 log_packet_detailed("'addr' field error detected");
44003 }
44004 }
44005
44006 if (BV_ISSET(fields, 7)) {
44007 log_packet_detailed(" field 'capability' has changed");
44008
44009#ifdef FREECIV_JSON_CONNECTION
44010 field_addr.name = "capability";
44011#endif /* FREECIV_JSON_CONNECTION */
44012 e = 0;
44013
44014 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
44015
44016 if (e) {
44017 log_packet_detailed("'capability' field error detected");
44018 }
44019 }
44020
44021 *old = *real_packet;
44022
44023#else /* FREECIV_DELTA_PROTOCOL */
44024#ifdef FREECIV_JSON_CONNECTION
44025 field_addr.name = "used";
44026#endif /* FREECIV_JSON_CONNECTION */
44027 e = 0;
44028
44029 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->used);
44030
44031 if (e) {
44032 log_packet_detailed("'used' field error detected");
44033 }
44034
44035#ifdef FREECIV_JSON_CONNECTION
44036 field_addr.name = "established";
44037#endif /* FREECIV_JSON_CONNECTION */
44038 e = 0;
44039
44040 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->established);
44041
44042 if (e) {
44043 log_packet_detailed("'established' field error detected");
44044 }
44045
44046#ifdef FREECIV_JSON_CONNECTION
44047 field_addr.name = "observer";
44048#endif /* FREECIV_JSON_CONNECTION */
44049 e = 0;
44050
44051 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->observer);
44052
44053 if (e) {
44054 log_packet_detailed("'observer' field error detected");
44055 }
44056
44057#ifdef FREECIV_JSON_CONNECTION
44058 field_addr.name = "player_num";
44059#endif /* FREECIV_JSON_CONNECTION */
44060 e = 0;
44061
44062 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
44063
44064 if (e) {
44065 log_packet_detailed("'player_num' field error detected");
44066 }
44067
44068#ifdef FREECIV_JSON_CONNECTION
44069 field_addr.name = "access_level";
44070#endif /* FREECIV_JSON_CONNECTION */
44071 e = 0;
44072
44073 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
44074
44075 if (e) {
44076 log_packet_detailed("'access_level' field error detected");
44077 }
44078
44079#ifdef FREECIV_JSON_CONNECTION
44080 field_addr.name = "username";
44081#endif /* FREECIV_JSON_CONNECTION */
44082 e = 0;
44083
44084 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
44085
44086 if (e) {
44087 log_packet_detailed("'username' field error detected");
44088 }
44089
44090#ifdef FREECIV_JSON_CONNECTION
44091 field_addr.name = "addr";
44092#endif /* FREECIV_JSON_CONNECTION */
44093 e = 0;
44094
44095 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
44096
44097 if (e) {
44098 log_packet_detailed("'addr' field error detected");
44099 }
44100
44101#ifdef FREECIV_JSON_CONNECTION
44102 field_addr.name = "capability";
44103#endif /* FREECIV_JSON_CONNECTION */
44104 e = 0;
44105
44106 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
44107
44108 if (e) {
44109 log_packet_detailed("'capability' field error detected");
44110 }
44111#endif /* FREECIV_DELTA_PROTOCOL */
44112
44114}
44115
44116int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
44117{
44118 if (!pc->used) {
44119 log_error("WARNING: trying to send data to the closed connection %s",
44121 return -1;
44122 }
44123 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_INFO].packet != nullptr, -1,
44124 "Handler for PACKET_CONN_INFO not installed");
44125 return pc->phs.handlers->send[PACKET_CONN_INFO].packet(pc, packet);
44126}
44127
44128void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
44129{
44130 conn_list_iterate(dest, pconn) {
44133}
44134
44135static inline void init_packet_conn_ping_info(struct packet_conn_ping_info *packet)
44136{
44137 memset(packet, 0, sizeof(*packet));
44138}
44139
44140#define free_packet_conn_ping_info(_packet) (void) 0
44141#define destroy_packet_conn_ping_info free
44142
44143#ifdef FREECIV_DELTA_PROTOCOL
44144#define hash_packet_conn_ping_info_100 hash_const
44145#define cmp_packet_conn_ping_info_100 cmp_const
44147#endif /* FREECIV_DELTA_PROTOCOL */
44148
44150{
44151#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping_info(_packet)
44153
44154#ifdef FREECIV_JSON_CONNECTION
44155 struct plocation field_addr;
44156 {
44157 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44160 }
44161#endif /* FREECIV_JSON_CONNECTION */
44162
44163 log_packet_detailed("packet_conn_ping_info_100: got info about ()");
44164
44165#ifdef FREECIV_DELTA_PROTOCOL
44167 struct packet_conn_ping_info *old;
44168 struct genhash **hash = pc->phs.received + PACKET_CONN_PING_INFO;
44169
44170 if (nullptr == *hash) {
44172 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44173 }
44174
44175 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44176 *real_packet = *old;
44177 } else {
44178 /* packet is already initialized empty */
44179 log_packet_detailed(" no old info");
44180 }
44181
44182#ifdef FREECIV_JSON_CONNECTION
44183 field_addr.name = "fields";
44184#endif /* FREECIV_JSON_CONNECTION */
44185 DIO_BV_GET(&din, &field_addr, fields);
44186
44187 if (BV_ISSET(fields, 0)) {
44188 log_packet_detailed(" got field 'connections'");
44189
44190#ifdef FREECIV_JSON_CONNECTION
44191 field_addr.name = "connections";
44192#endif /* FREECIV_JSON_CONNECTION */
44193
44194 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44196 }
44197 }
44198
44199 if (BV_ISSET(fields, 1)) {
44200 log_packet_detailed(" got field 'conn_id'");
44201
44202#ifdef FREECIV_JSON_CONNECTION
44203 field_addr.name = "conn_id";
44204#endif /* FREECIV_JSON_CONNECTION */
44205
44206 {
44207 int i;
44208
44209 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44210 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44211 }
44212
44213#ifdef FREECIV_JSON_CONNECTION
44214 /* Enter array. */
44215 field_addr.sub_location = plocation_elem_new(0);
44216#endif /* FREECIV_JSON_CONNECTION */
44217
44218 for (i = 0; i < real_packet->connections; i++) {
44219#ifdef FREECIV_JSON_CONNECTION
44220 /* Next array element */
44221 field_addr.sub_location->number = i;
44222#endif /* FREECIV_JSON_CONNECTION */
44223
44224 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44226 }
44227 }
44228
44229#ifdef FREECIV_JSON_CONNECTION
44230 /* Exit array. */
44231 FC_FREE(field_addr.sub_location);
44232#endif /* FREECIV_JSON_CONNECTION */
44233 }
44234 }
44235
44236 if (BV_ISSET(fields, 2)) {
44237 log_packet_detailed(" got field 'ping_time'");
44238
44239#ifdef FREECIV_JSON_CONNECTION
44240 field_addr.name = "ping_time";
44241#endif /* FREECIV_JSON_CONNECTION */
44242
44243 {
44244 int i;
44245
44246 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44247 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44248 }
44249
44250#ifdef FREECIV_JSON_CONNECTION
44251 /* Enter array. */
44252 field_addr.sub_location = plocation_elem_new(0);
44253#endif /* FREECIV_JSON_CONNECTION */
44254
44255 for (i = 0; i < real_packet->connections; i++) {
44256#ifdef FREECIV_JSON_CONNECTION
44257 /* Next array element */
44258 field_addr.sub_location->number = i;
44259#endif /* FREECIV_JSON_CONNECTION */
44260
44261 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44262 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44263 }
44264 }
44265
44266#ifdef FREECIV_JSON_CONNECTION
44267 /* Exit array. */
44268 FC_FREE(field_addr.sub_location);
44269#endif /* FREECIV_JSON_CONNECTION */
44270 }
44271 }
44272
44273 if (nullptr == old) {
44274 old = fc_malloc(sizeof(*old));
44276 *old = *real_packet;
44278 } else {
44279 *old = *real_packet;
44280 }
44281
44282#else /* FREECIV_DELTA_PROTOCOL */
44283#ifdef FREECIV_JSON_CONNECTION
44284 field_addr.name = "connections";
44285#endif /* FREECIV_JSON_CONNECTION */
44286
44287 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
44289 }
44290
44291#ifdef FREECIV_JSON_CONNECTION
44292 field_addr.name = "conn_id";
44293#endif /* FREECIV_JSON_CONNECTION */
44294
44295 {
44296 int i;
44297
44298 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44299 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": array truncated");
44300 }
44301
44302#ifdef FREECIV_JSON_CONNECTION
44303 /* Enter array. */
44304 field_addr.sub_location = plocation_elem_new(0);
44305#endif /* FREECIV_JSON_CONNECTION */
44306
44307 for (i = 0; i < real_packet->connections; i++) {
44308#ifdef FREECIV_JSON_CONNECTION
44309 /* Next array element */
44310 field_addr.sub_location->number = i;
44311#endif /* FREECIV_JSON_CONNECTION */
44312
44313 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
44315 }
44316 }
44317
44318#ifdef FREECIV_JSON_CONNECTION
44319 /* Exit array. */
44320 FC_FREE(field_addr.sub_location);
44321#endif /* FREECIV_JSON_CONNECTION */
44322 }
44323
44324#ifdef FREECIV_JSON_CONNECTION
44325 field_addr.name = "ping_time";
44326#endif /* FREECIV_JSON_CONNECTION */
44327
44328 {
44329 int i;
44330
44331 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
44332 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": array truncated");
44333 }
44334
44335#ifdef FREECIV_JSON_CONNECTION
44336 /* Enter array. */
44337 field_addr.sub_location = plocation_elem_new(0);
44338#endif /* FREECIV_JSON_CONNECTION */
44339
44340 for (i = 0; i < real_packet->connections; i++) {
44341#ifdef FREECIV_JSON_CONNECTION
44342 /* Next array element */
44343 field_addr.sub_location->number = i;
44344#endif /* FREECIV_JSON_CONNECTION */
44345
44346 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
44347 RECEIVE_PACKET_FIELD_ERROR(ping_time);
44348 }
44349 }
44350
44351#ifdef FREECIV_JSON_CONNECTION
44352 /* Exit array. */
44353 FC_FREE(field_addr.sub_location);
44354#endif /* FREECIV_JSON_CONNECTION */
44355 }
44356#endif /* FREECIV_DELTA_PROTOCOL */
44357
44359#undef FREE_PACKET_STRUCT
44360}
44361
44363{
44364 const struct packet_conn_ping_info *real_packet = packet;
44365 int e;
44367
44368 log_packet_detailed("packet_conn_ping_info_100: sending info about ()");
44369
44370#ifdef FREECIV_DELTA_PROTOCOL
44372 struct packet_conn_ping_info *old;
44373 bool differ;
44374 struct genhash **hash = pc->phs.sent + PACKET_CONN_PING_INFO;
44375
44376 if (nullptr == *hash) {
44378 nullptr, nullptr, nullptr, destroy_packet_conn_ping_info);
44379 }
44380 BV_CLR_ALL(fields);
44381
44382 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44383 old = fc_malloc(sizeof(*old));
44384 /* temporary bitcopy just to insert correctly */
44385 *old = *real_packet;
44388 }
44389
44390 differ = (old->connections != real_packet->connections);
44391 if (differ) {
44392 BV_SET(fields, 0);
44393 }
44394
44395 differ = (old->connections != real_packet->connections);
44396 if (!differ) {
44397 int i;
44398
44399 for (i = 0; i < old->connections; i++) {
44400 differ = (old->conn_id[i] != real_packet->conn_id[i]);
44401 if (differ) {
44402 break;
44403 }
44404 }
44405 }
44406 if (differ) {
44407 BV_SET(fields, 1);
44408 }
44409
44410 differ = (old->connections != real_packet->connections);
44411 if (!differ) {
44412 int i;
44413
44414 for (i = 0; i < old->connections; i++) {
44415 differ = ((int) (old->ping_time[i] * 100000) != (int) (real_packet->ping_time[i] * 100000));
44416 if (differ) {
44417 break;
44418 }
44419 }
44420 }
44421 if (differ) {
44422 BV_SET(fields, 2);
44423 }
44424#endif /* FREECIV_DELTA_PROTOCOL */
44425
44426#ifdef FREECIV_JSON_CONNECTION
44427 struct plocation field_addr;
44428 {
44429 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44432 }
44433#endif /* FREECIV_JSON_CONNECTION */
44434
44435#ifdef FREECIV_DELTA_PROTOCOL
44436#ifdef FREECIV_JSON_CONNECTION
44437 field_addr.name = "fields";
44438#endif /* FREECIV_JSON_CONNECTION */
44439 e = 0;
44440 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44441 if (e) {
44442 log_packet_detailed("fields bitvector error detected");
44443 }
44444
44445 if (BV_ISSET(fields, 0)) {
44446 log_packet_detailed(" field 'connections' has changed");
44447
44448#ifdef FREECIV_JSON_CONNECTION
44449 field_addr.name = "connections";
44450#endif /* FREECIV_JSON_CONNECTION */
44451 e = 0;
44452
44453 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44454
44455 if (e) {
44456 log_packet_detailed("'connections' field error detected");
44457 }
44458 }
44459
44460 if (BV_ISSET(fields, 1)) {
44461 log_packet_detailed(" field 'conn_id' has changed");
44462
44463#ifdef FREECIV_JSON_CONNECTION
44464 field_addr.name = "conn_id";
44465#endif /* FREECIV_JSON_CONNECTION */
44466 e = 0;
44467
44468 {
44469 int i;
44470
44471#ifdef FREECIV_JSON_CONNECTION
44472 /* Create the array. */
44473 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44474
44475 /* Enter array. */
44476 field_addr.sub_location = plocation_elem_new(0);
44477#endif /* FREECIV_JSON_CONNECTION */
44478
44479 for (i = 0; i < real_packet->connections; i++) {
44480#ifdef FREECIV_JSON_CONNECTION
44481 /* Next array element. */
44482 field_addr.sub_location->number = i;
44483#endif /* FREECIV_JSON_CONNECTION */
44484
44485 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44486 }
44487
44488#ifdef FREECIV_JSON_CONNECTION
44489 /* Exit array. */
44490 FC_FREE(field_addr.sub_location);
44491#endif /* FREECIV_JSON_CONNECTION */
44492 }
44493
44494 if (e) {
44495 log_packet_detailed("'conn_id' field error detected");
44496 }
44497 }
44498
44499 if (BV_ISSET(fields, 2)) {
44500 log_packet_detailed(" field 'ping_time' has changed");
44501
44502#ifdef FREECIV_JSON_CONNECTION
44503 field_addr.name = "ping_time";
44504#endif /* FREECIV_JSON_CONNECTION */
44505 e = 0;
44506
44507 {
44508 int i;
44509
44510#ifdef FREECIV_JSON_CONNECTION
44511 /* Create the array. */
44512 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44513
44514 /* Enter array. */
44515 field_addr.sub_location = plocation_elem_new(0);
44516#endif /* FREECIV_JSON_CONNECTION */
44517
44518 for (i = 0; i < real_packet->connections; i++) {
44519#ifdef FREECIV_JSON_CONNECTION
44520 /* Next array element. */
44521 field_addr.sub_location->number = i;
44522#endif /* FREECIV_JSON_CONNECTION */
44523
44524 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44525 }
44526
44527#ifdef FREECIV_JSON_CONNECTION
44528 /* Exit array. */
44529 FC_FREE(field_addr.sub_location);
44530#endif /* FREECIV_JSON_CONNECTION */
44531 }
44532
44533 if (e) {
44534 log_packet_detailed("'ping_time' field error detected");
44535 }
44536 }
44537
44538 *old = *real_packet;
44539
44540#else /* FREECIV_DELTA_PROTOCOL */
44541#ifdef FREECIV_JSON_CONNECTION
44542 field_addr.name = "connections";
44543#endif /* FREECIV_JSON_CONNECTION */
44544 e = 0;
44545
44546 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44547
44548 if (e) {
44549 log_packet_detailed("'connections' field error detected");
44550 }
44551
44552#ifdef FREECIV_JSON_CONNECTION
44553 field_addr.name = "conn_id";
44554#endif /* FREECIV_JSON_CONNECTION */
44555 e = 0;
44556
44557 {
44558 int i;
44559
44560#ifdef FREECIV_JSON_CONNECTION
44561 /* Create the array. */
44562 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44563
44564 /* Enter array. */
44565 field_addr.sub_location = plocation_elem_new(0);
44566#endif /* FREECIV_JSON_CONNECTION */
44567
44568 for (i = 0; i < real_packet->connections; i++) {
44569#ifdef FREECIV_JSON_CONNECTION
44570 /* Next array element. */
44571 field_addr.sub_location->number = i;
44572#endif /* FREECIV_JSON_CONNECTION */
44573
44574 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44575 }
44576
44577#ifdef FREECIV_JSON_CONNECTION
44578 /* Exit array. */
44579 FC_FREE(field_addr.sub_location);
44580#endif /* FREECIV_JSON_CONNECTION */
44581 }
44582
44583 if (e) {
44584 log_packet_detailed("'conn_id' field error detected");
44585 }
44586
44587#ifdef FREECIV_JSON_CONNECTION
44588 field_addr.name = "ping_time";
44589#endif /* FREECIV_JSON_CONNECTION */
44590 e = 0;
44591
44592 {
44593 int i;
44594
44595#ifdef FREECIV_JSON_CONNECTION
44596 /* Create the array. */
44597 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44598
44599 /* Enter array. */
44600 field_addr.sub_location = plocation_elem_new(0);
44601#endif /* FREECIV_JSON_CONNECTION */
44602
44603 for (i = 0; i < real_packet->connections; i++) {
44604#ifdef FREECIV_JSON_CONNECTION
44605 /* Next array element. */
44606 field_addr.sub_location->number = i;
44607#endif /* FREECIV_JSON_CONNECTION */
44608
44609 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44610 }
44611
44612#ifdef FREECIV_JSON_CONNECTION
44613 /* Exit array. */
44614 FC_FREE(field_addr.sub_location);
44615#endif /* FREECIV_JSON_CONNECTION */
44616 }
44617
44618 if (e) {
44619 log_packet_detailed("'ping_time' field error detected");
44620 }
44621#endif /* FREECIV_DELTA_PROTOCOL */
44622
44624}
44625
44627{
44628 if (!pc->used) {
44629 log_error("WARNING: trying to send data to the closed connection %s",
44631 return -1;
44632 }
44633 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet != nullptr, -1,
44634 "Handler for PACKET_CONN_PING_INFO not installed");
44635 return pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet(pc, packet);
44636}
44637
44638void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
44639{
44640 conn_list_iterate(dest, pconn) {
44643}
44644
44645static inline void init_packet_conn_ping(struct packet_conn_ping *packet)
44646{
44647 memset(packet, 0, sizeof(*packet));
44648}
44649
44650#define free_packet_conn_ping(_packet) (void) 0
44651#define destroy_packet_conn_ping free
44652
44654{
44655#define FREE_PACKET_STRUCT(_packet) free_packet_conn_ping(_packet)
44657
44658 log_packet_detailed("packet_conn_ping_100: got info about ()");
44659
44660 real_packet->__dummy = 0xff;
44661
44663#undef FREE_PACKET_STRUCT
44664}
44665
44667{
44669
44670 log_packet_detailed("packet_conn_ping_100: sending info about ()");
44671
44673}
44674
44676{
44677 if (!pc->used) {
44678 log_error("WARNING: trying to send data to the closed connection %s",
44680 return -1;
44681 }
44682 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING].no_packet != nullptr, -1,
44683 "Handler for PACKET_CONN_PING not installed");
44684 return pc->phs.handlers->send[PACKET_CONN_PING].no_packet(pc);
44685}
44686
44687static inline void init_packet_conn_pong(struct packet_conn_pong *packet)
44688{
44689 memset(packet, 0, sizeof(*packet));
44690}
44691
44692#define free_packet_conn_pong(_packet) (void) 0
44693#define destroy_packet_conn_pong free
44694
44696{
44697#define FREE_PACKET_STRUCT(_packet) free_packet_conn_pong(_packet)
44699
44700 log_packet_detailed("packet_conn_pong_100: got info about ()");
44701
44702 real_packet->__dummy = 0xff;
44703
44705#undef FREE_PACKET_STRUCT
44706}
44707
44709{
44711
44712 log_packet_detailed("packet_conn_pong_100: sending info about ()");
44713
44715}
44716
44718{
44719 if (!pc->used) {
44720 log_error("WARNING: trying to send data to the closed connection %s",
44722 return -1;
44723 }
44724 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PONG].no_packet != nullptr, -1,
44725 "Handler for PACKET_CONN_PONG not installed");
44726 return pc->phs.handlers->send[PACKET_CONN_PONG].no_packet(pc);
44727}
44728
44730{
44731 memset(packet, 0, sizeof(*packet));
44732}
44733
44734#define free_packet_client_heartbeat(_packet) (void) 0
44735#define destroy_packet_client_heartbeat free
44736
44738{
44739#define FREE_PACKET_STRUCT(_packet) free_packet_client_heartbeat(_packet)
44741
44742 log_packet_detailed("packet_client_heartbeat_100: got info about ()");
44743
44744 real_packet->__dummy = 0xff;
44745
44747#undef FREE_PACKET_STRUCT
44748}
44749
44751{
44753
44754 log_packet_detailed("packet_client_heartbeat_100: sending info about ()");
44755
44757}
44758
44760{
44761 if (!pc->used) {
44762 log_error("WARNING: trying to send data to the closed connection %s",
44764 return -1;
44765 }
44766 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet != nullptr, -1,
44767 "Handler for PACKET_CLIENT_HEARTBEAT not installed");
44768 return pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet(pc);
44769}
44770
44771static inline void init_packet_client_info(struct packet_client_info *packet)
44772{
44773 memset(packet, 0, sizeof(*packet));
44774}
44775
44776#define free_packet_client_info(_packet) (void) 0
44777#define destroy_packet_client_info free
44778
44779#ifdef FREECIV_DELTA_PROTOCOL
44780#define hash_packet_client_info_100 hash_const
44781#define cmp_packet_client_info_100 cmp_const
44783#endif /* FREECIV_DELTA_PROTOCOL */
44784
44786{
44787#define FREE_PACKET_STRUCT(_packet) free_packet_client_info(_packet)
44789
44790#ifdef FREECIV_JSON_CONNECTION
44791 struct plocation field_addr;
44792 {
44793 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44796 }
44797#endif /* FREECIV_JSON_CONNECTION */
44798
44799 log_packet_detailed("packet_client_info_100: got info about ()");
44800
44801#ifdef FREECIV_DELTA_PROTOCOL
44803 struct packet_client_info *old;
44804 struct genhash **hash = pc->phs.received + PACKET_CLIENT_INFO;
44805
44806 if (nullptr == *hash) {
44808 nullptr, nullptr, nullptr, destroy_packet_client_info);
44809 }
44810
44811 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44812 *real_packet = *old;
44813 } else {
44814 /* packet is already initialized empty */
44815 log_packet_detailed(" no old info");
44816 }
44817
44818#ifdef FREECIV_JSON_CONNECTION
44819 field_addr.name = "fields";
44820#endif /* FREECIV_JSON_CONNECTION */
44821 DIO_BV_GET(&din, &field_addr, fields);
44822
44823 if (BV_ISSET(fields, 0)) {
44824 log_packet_detailed(" got field 'gui'");
44825
44826#ifdef FREECIV_JSON_CONNECTION
44827 field_addr.name = "gui";
44828#endif /* FREECIV_JSON_CONNECTION */
44829
44830 {
44831 int readin;
44832
44833 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44835 }
44836 real_packet->gui = readin;
44837 }
44838 }
44839
44840 if (BV_ISSET(fields, 1)) {
44841 log_packet_detailed(" got field 'emerg_version'");
44842
44843#ifdef FREECIV_JSON_CONNECTION
44844 field_addr.name = "emerg_version";
44845#endif /* FREECIV_JSON_CONNECTION */
44846
44847 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44848 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44849 }
44850 }
44851
44852 if (BV_ISSET(fields, 2)) {
44853 log_packet_detailed(" got field 'distribution'");
44854
44855#ifdef FREECIV_JSON_CONNECTION
44856 field_addr.name = "distribution";
44857#endif /* FREECIV_JSON_CONNECTION */
44858
44859 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44860 RECEIVE_PACKET_FIELD_ERROR(distribution);
44861 }
44862 }
44863
44864 if (nullptr == old) {
44865 old = fc_malloc(sizeof(*old));
44867 *old = *real_packet;
44869 } else {
44870 *old = *real_packet;
44871 }
44872
44873#else /* FREECIV_DELTA_PROTOCOL */
44874#ifdef FREECIV_JSON_CONNECTION
44875 field_addr.name = "gui";
44876#endif /* FREECIV_JSON_CONNECTION */
44877
44878 {
44879 int readin;
44880
44881 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44883 }
44884 real_packet->gui = readin;
44885 }
44886
44887#ifdef FREECIV_JSON_CONNECTION
44888 field_addr.name = "emerg_version";
44889#endif /* FREECIV_JSON_CONNECTION */
44890
44891 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44892 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44893 }
44894
44895#ifdef FREECIV_JSON_CONNECTION
44896 field_addr.name = "distribution";
44897#endif /* FREECIV_JSON_CONNECTION */
44898
44899 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44900 RECEIVE_PACKET_FIELD_ERROR(distribution);
44901 }
44902#endif /* FREECIV_DELTA_PROTOCOL */
44903
44905#undef FREE_PACKET_STRUCT
44906}
44907
44908static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
44909{
44910 const struct packet_client_info *real_packet = packet;
44911 int e;
44913
44914 log_packet_detailed("packet_client_info_100: sending info about ()");
44915
44916#ifdef FREECIV_DELTA_PROTOCOL
44918 struct packet_client_info *old;
44919 bool differ;
44920 struct genhash **hash = pc->phs.sent + PACKET_CLIENT_INFO;
44921
44922 if (nullptr == *hash) {
44924 nullptr, nullptr, nullptr, destroy_packet_client_info);
44925 }
44926 BV_CLR_ALL(fields);
44927
44928 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44929 old = fc_malloc(sizeof(*old));
44930 /* temporary bitcopy just to insert correctly */
44931 *old = *real_packet;
44934 }
44935
44936 differ = (old->gui != real_packet->gui);
44937 if (differ) {
44938 BV_SET(fields, 0);
44939 }
44940
44941 differ = (old->emerg_version != real_packet->emerg_version);
44942 if (differ) {
44943 BV_SET(fields, 1);
44944 }
44945
44946 differ = (strcmp(old->distribution, real_packet->distribution) != 0);
44947 if (differ) {
44948 BV_SET(fields, 2);
44949 }
44950#endif /* FREECIV_DELTA_PROTOCOL */
44951
44952#ifdef FREECIV_JSON_CONNECTION
44953 struct plocation field_addr;
44954 {
44955 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
44958 }
44959#endif /* FREECIV_JSON_CONNECTION */
44960
44961#ifdef FREECIV_DELTA_PROTOCOL
44962#ifdef FREECIV_JSON_CONNECTION
44963 field_addr.name = "fields";
44964#endif /* FREECIV_JSON_CONNECTION */
44965 e = 0;
44966 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44967 if (e) {
44968 log_packet_detailed("fields bitvector error detected");
44969 }
44970
44971 if (BV_ISSET(fields, 0)) {
44972 log_packet_detailed(" field 'gui' has changed");
44973
44974#ifdef FREECIV_JSON_CONNECTION
44975 field_addr.name = "gui";
44976#endif /* FREECIV_JSON_CONNECTION */
44977 e = 0;
44978
44979 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44980
44981 if (e) {
44982 log_packet_detailed("'gui' field error detected");
44983 }
44984 }
44985
44986 if (BV_ISSET(fields, 1)) {
44987 log_packet_detailed(" field 'emerg_version' has changed");
44988
44989#ifdef FREECIV_JSON_CONNECTION
44990 field_addr.name = "emerg_version";
44991#endif /* FREECIV_JSON_CONNECTION */
44992 e = 0;
44993
44994 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44995
44996 if (e) {
44997 log_packet_detailed("'emerg_version' field error detected");
44998 }
44999 }
45000
45001 if (BV_ISSET(fields, 2)) {
45002 log_packet_detailed(" field 'distribution' has changed");
45003
45004#ifdef FREECIV_JSON_CONNECTION
45005 field_addr.name = "distribution";
45006#endif /* FREECIV_JSON_CONNECTION */
45007 e = 0;
45008
45009 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
45010
45011 if (e) {
45012 log_packet_detailed("'distribution' field error detected");
45013 }
45014 }
45015
45016 *old = *real_packet;
45017
45018#else /* FREECIV_DELTA_PROTOCOL */
45019#ifdef FREECIV_JSON_CONNECTION
45020 field_addr.name = "gui";
45021#endif /* FREECIV_JSON_CONNECTION */
45022 e = 0;
45023
45024 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
45025
45026 if (e) {
45027 log_packet_detailed("'gui' field error detected");
45028 }
45029
45030#ifdef FREECIV_JSON_CONNECTION
45031 field_addr.name = "emerg_version";
45032#endif /* FREECIV_JSON_CONNECTION */
45033 e = 0;
45034
45035 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
45036
45037 if (e) {
45038 log_packet_detailed("'emerg_version' field error detected");
45039 }
45040
45041#ifdef FREECIV_JSON_CONNECTION
45042 field_addr.name = "distribution";
45043#endif /* FREECIV_JSON_CONNECTION */
45044 e = 0;
45045
45046 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
45047
45048 if (e) {
45049 log_packet_detailed("'distribution' field error detected");
45050 }
45051#endif /* FREECIV_DELTA_PROTOCOL */
45052
45054}
45055
45057{
45058 if (!pc->used) {
45059 log_error("WARNING: trying to send data to the closed connection %s",
45061 return -1;
45062 }
45063 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_INFO].packet != nullptr, -1,
45064 "Handler for PACKET_CLIENT_INFO not installed");
45065 return pc->phs.handlers->send[PACKET_CLIENT_INFO].packet(pc, packet);
45066}
45067
45068static inline void init_packet_end_phase(struct packet_end_phase *packet)
45069{
45070 memset(packet, 0, sizeof(*packet));
45071}
45072
45073#define free_packet_end_phase(_packet) (void) 0
45074#define destroy_packet_end_phase free
45075
45077{
45078#define FREE_PACKET_STRUCT(_packet) free_packet_end_phase(_packet)
45080
45081 log_packet_detailed("packet_end_phase_100: got info about ()");
45082
45083 real_packet->__dummy = 0xff;
45084
45086#undef FREE_PACKET_STRUCT
45087}
45088
45090{
45092
45093 log_packet_detailed("packet_end_phase_100: sending info about ()");
45094
45096}
45097
45099{
45100 if (!pc->used) {
45101 log_error("WARNING: trying to send data to the closed connection %s",
45103 return -1;
45104 }
45105 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_PHASE].no_packet != nullptr, -1,
45106 "Handler for PACKET_END_PHASE not installed");
45107 return pc->phs.handlers->send[PACKET_END_PHASE].no_packet(pc);
45108}
45109
45111{
45112 conn_list_iterate(dest, pconn) {
45115}
45116
45117static inline void init_packet_start_phase(struct packet_start_phase *packet)
45118{
45119 memset(packet, 0, sizeof(*packet));
45120}
45121
45122#define free_packet_start_phase(_packet) (void) 0
45123#define destroy_packet_start_phase free
45124
45125#ifdef FREECIV_DELTA_PROTOCOL
45126#define hash_packet_start_phase_100 hash_const
45127#define cmp_packet_start_phase_100 cmp_const
45129#endif /* FREECIV_DELTA_PROTOCOL */
45130
45132{
45133#define FREE_PACKET_STRUCT(_packet) free_packet_start_phase(_packet)
45135
45136#ifdef FREECIV_JSON_CONNECTION
45137 struct plocation field_addr;
45138 {
45139 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45142 }
45143#endif /* FREECIV_JSON_CONNECTION */
45144
45145 log_packet_detailed("packet_start_phase_100: got info about ()");
45146
45147#ifdef FREECIV_DELTA_PROTOCOL
45149 struct packet_start_phase *old;
45150 struct genhash **hash = pc->phs.received + PACKET_START_PHASE;
45151
45152 if (nullptr == *hash) {
45154 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45155 }
45156
45157 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45158 *real_packet = *old;
45159 } else {
45160 /* packet is already initialized empty */
45161 log_packet_detailed(" no old info");
45162 }
45163
45164#ifdef FREECIV_JSON_CONNECTION
45165 field_addr.name = "fields";
45166#endif /* FREECIV_JSON_CONNECTION */
45167 DIO_BV_GET(&din, &field_addr, fields);
45168
45169 if (BV_ISSET(fields, 0)) {
45170 log_packet_detailed(" got field 'phase'");
45171
45172#ifdef FREECIV_JSON_CONNECTION
45173 field_addr.name = "phase";
45174#endif /* FREECIV_JSON_CONNECTION */
45175
45176 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45178 }
45179 }
45180
45181 if (nullptr == old) {
45182 old = fc_malloc(sizeof(*old));
45184 *old = *real_packet;
45186 } else {
45187 *old = *real_packet;
45188 }
45189
45190#else /* FREECIV_DELTA_PROTOCOL */
45191#ifdef FREECIV_JSON_CONNECTION
45192 field_addr.name = "phase";
45193#endif /* FREECIV_JSON_CONNECTION */
45194
45195 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
45197 }
45198#endif /* FREECIV_DELTA_PROTOCOL */
45199
45201#undef FREE_PACKET_STRUCT
45202}
45203
45204static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
45205{
45206 const struct packet_start_phase *real_packet = packet;
45207 int e;
45209
45210 log_packet_detailed("packet_start_phase_100: sending info about ()");
45211
45212#ifdef FREECIV_DELTA_PROTOCOL
45214 struct packet_start_phase *old;
45215 bool differ;
45216 struct genhash **hash = pc->phs.sent + PACKET_START_PHASE;
45217
45218 if (nullptr == *hash) {
45220 nullptr, nullptr, nullptr, destroy_packet_start_phase);
45221 }
45222 BV_CLR_ALL(fields);
45223
45224 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45225 old = fc_malloc(sizeof(*old));
45226 /* temporary bitcopy just to insert correctly */
45227 *old = *real_packet;
45230 }
45231
45232 differ = (old->phase != real_packet->phase);
45233 if (differ) {
45234 BV_SET(fields, 0);
45235 }
45236#endif /* FREECIV_DELTA_PROTOCOL */
45237
45238#ifdef FREECIV_JSON_CONNECTION
45239 struct plocation field_addr;
45240 {
45241 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45244 }
45245#endif /* FREECIV_JSON_CONNECTION */
45246
45247#ifdef FREECIV_DELTA_PROTOCOL
45248#ifdef FREECIV_JSON_CONNECTION
45249 field_addr.name = "fields";
45250#endif /* FREECIV_JSON_CONNECTION */
45251 e = 0;
45252 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45253 if (e) {
45254 log_packet_detailed("fields bitvector error detected");
45255 }
45256
45257 if (BV_ISSET(fields, 0)) {
45258 log_packet_detailed(" field 'phase' has changed");
45259
45260#ifdef FREECIV_JSON_CONNECTION
45261 field_addr.name = "phase";
45262#endif /* FREECIV_JSON_CONNECTION */
45263 e = 0;
45264
45265 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45266
45267 if (e) {
45268 log_packet_detailed("'phase' field error detected");
45269 }
45270 }
45271
45272 *old = *real_packet;
45273
45274#else /* FREECIV_DELTA_PROTOCOL */
45275#ifdef FREECIV_JSON_CONNECTION
45276 field_addr.name = "phase";
45277#endif /* FREECIV_JSON_CONNECTION */
45278 e = 0;
45279
45280 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
45281
45282 if (e) {
45283 log_packet_detailed("'phase' field error detected");
45284 }
45285#endif /* FREECIV_DELTA_PROTOCOL */
45286
45288}
45289
45291{
45292 if (!pc->used) {
45293 log_error("WARNING: trying to send data to the closed connection %s",
45295 return -1;
45296 }
45297 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_START_PHASE].packet != nullptr, -1,
45298 "Handler for PACKET_START_PHASE not installed");
45299 return pc->phs.handlers->send[PACKET_START_PHASE].packet(pc, packet);
45300}
45301
45302void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
45303{
45304 conn_list_iterate(dest, pconn) {
45307}
45308
45310{
45311 struct packet_start_phase packet, *real_packet = &packet;
45312
45314
45316}
45317
45319{
45320 struct packet_start_phase packet, *real_packet = &packet;
45321
45323
45325}
45326
45327static inline void init_packet_new_year(struct packet_new_year *packet)
45328{
45329 memset(packet, 0, sizeof(*packet));
45330}
45331
45332#define free_packet_new_year(_packet) (void) 0
45333#define destroy_packet_new_year free
45334
45335#ifdef FREECIV_DELTA_PROTOCOL
45336#define hash_packet_new_year_100 hash_const
45337#define cmp_packet_new_year_100 cmp_const
45339#endif /* FREECIV_DELTA_PROTOCOL */
45340
45342{
45343#define FREE_PACKET_STRUCT(_packet) free_packet_new_year(_packet)
45345
45346#ifdef FREECIV_JSON_CONNECTION
45347 struct plocation field_addr;
45348 {
45349 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45352 }
45353#endif /* FREECIV_JSON_CONNECTION */
45354
45355 log_packet_detailed("packet_new_year_100: got info about ()");
45356
45357#ifdef FREECIV_DELTA_PROTOCOL
45359 struct packet_new_year *old;
45360 struct genhash **hash = pc->phs.received + PACKET_NEW_YEAR;
45361
45362 if (nullptr == *hash) {
45364 nullptr, nullptr, nullptr, destroy_packet_new_year);
45365 }
45366
45367 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45368 *real_packet = *old;
45369 } else {
45370 /* packet is already initialized empty */
45371 log_packet_detailed(" no old info");
45372 }
45373
45374#ifdef FREECIV_JSON_CONNECTION
45375 field_addr.name = "fields";
45376#endif /* FREECIV_JSON_CONNECTION */
45377 DIO_BV_GET(&din, &field_addr, fields);
45378
45379 if (BV_ISSET(fields, 0)) {
45380 log_packet_detailed(" got field 'year'");
45381
45382#ifdef FREECIV_JSON_CONNECTION
45383 field_addr.name = "year";
45384#endif /* FREECIV_JSON_CONNECTION */
45385
45386 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45388 }
45389 }
45390
45391 if (BV_ISSET(fields, 1)) {
45392 log_packet_detailed(" got field 'fragments'");
45393
45394#ifdef FREECIV_JSON_CONNECTION
45395 field_addr.name = "fragments";
45396#endif /* FREECIV_JSON_CONNECTION */
45397
45398 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45399 RECEIVE_PACKET_FIELD_ERROR(fragments);
45400 }
45401 }
45402
45403 if (BV_ISSET(fields, 2)) {
45404 log_packet_detailed(" got field 'turn'");
45405
45406#ifdef FREECIV_JSON_CONNECTION
45407 field_addr.name = "turn";
45408#endif /* FREECIV_JSON_CONNECTION */
45409
45410 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45412 }
45413 }
45414
45415 if (nullptr == old) {
45416 old = fc_malloc(sizeof(*old));
45418 *old = *real_packet;
45420 } else {
45421 *old = *real_packet;
45422 }
45423
45424#else /* FREECIV_DELTA_PROTOCOL */
45425#ifdef FREECIV_JSON_CONNECTION
45426 field_addr.name = "year";
45427#endif /* FREECIV_JSON_CONNECTION */
45428
45429 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
45431 }
45432
45433#ifdef FREECIV_JSON_CONNECTION
45434 field_addr.name = "fragments";
45435#endif /* FREECIV_JSON_CONNECTION */
45436
45437 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
45438 RECEIVE_PACKET_FIELD_ERROR(fragments);
45439 }
45440
45441#ifdef FREECIV_JSON_CONNECTION
45442 field_addr.name = "turn";
45443#endif /* FREECIV_JSON_CONNECTION */
45444
45445 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
45447 }
45448#endif /* FREECIV_DELTA_PROTOCOL */
45449
45451#undef FREE_PACKET_STRUCT
45452}
45453
45454static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
45455{
45456 const struct packet_new_year *real_packet = packet;
45457 int e;
45459
45460 log_packet_detailed("packet_new_year_100: sending info about ()");
45461
45462#ifdef FREECIV_DELTA_PROTOCOL
45464 struct packet_new_year *old;
45465 bool differ;
45466 struct genhash **hash = pc->phs.sent + PACKET_NEW_YEAR;
45467
45468 if (nullptr == *hash) {
45470 nullptr, nullptr, nullptr, destroy_packet_new_year);
45471 }
45472 BV_CLR_ALL(fields);
45473
45474 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45475 old = fc_malloc(sizeof(*old));
45476 /* temporary bitcopy just to insert correctly */
45477 *old = *real_packet;
45480 }
45481
45482 differ = (old->year != real_packet->year);
45483 if (differ) {
45484 BV_SET(fields, 0);
45485 }
45486
45487 differ = (old->fragments != real_packet->fragments);
45488 if (differ) {
45489 BV_SET(fields, 1);
45490 }
45491
45492 differ = (old->turn != real_packet->turn);
45493 if (differ) {
45494 BV_SET(fields, 2);
45495 }
45496#endif /* FREECIV_DELTA_PROTOCOL */
45497
45498#ifdef FREECIV_JSON_CONNECTION
45499 struct plocation field_addr;
45500 {
45501 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45504 }
45505#endif /* FREECIV_JSON_CONNECTION */
45506
45507#ifdef FREECIV_DELTA_PROTOCOL
45508#ifdef FREECIV_JSON_CONNECTION
45509 field_addr.name = "fields";
45510#endif /* FREECIV_JSON_CONNECTION */
45511 e = 0;
45512 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45513 if (e) {
45514 log_packet_detailed("fields bitvector error detected");
45515 }
45516
45517 if (BV_ISSET(fields, 0)) {
45518 log_packet_detailed(" field 'year' has changed");
45519
45520#ifdef FREECIV_JSON_CONNECTION
45521 field_addr.name = "year";
45522#endif /* FREECIV_JSON_CONNECTION */
45523 e = 0;
45524
45525 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45526
45527 if (e) {
45528 log_packet_detailed("'year' field error detected");
45529 }
45530 }
45531
45532 if (BV_ISSET(fields, 1)) {
45533 log_packet_detailed(" field 'fragments' has changed");
45534
45535#ifdef FREECIV_JSON_CONNECTION
45536 field_addr.name = "fragments";
45537#endif /* FREECIV_JSON_CONNECTION */
45538 e = 0;
45539
45540 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45541
45542 if (e) {
45543 log_packet_detailed("'fragments' field error detected");
45544 }
45545 }
45546
45547 if (BV_ISSET(fields, 2)) {
45548 log_packet_detailed(" field 'turn' has changed");
45549
45550#ifdef FREECIV_JSON_CONNECTION
45551 field_addr.name = "turn";
45552#endif /* FREECIV_JSON_CONNECTION */
45553 e = 0;
45554
45555 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45556
45557 if (e) {
45558 log_packet_detailed("'turn' field error detected");
45559 }
45560 }
45561
45562 *old = *real_packet;
45563
45564#else /* FREECIV_DELTA_PROTOCOL */
45565#ifdef FREECIV_JSON_CONNECTION
45566 field_addr.name = "year";
45567#endif /* FREECIV_JSON_CONNECTION */
45568 e = 0;
45569
45570 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
45571
45572 if (e) {
45573 log_packet_detailed("'year' field error detected");
45574 }
45575
45576#ifdef FREECIV_JSON_CONNECTION
45577 field_addr.name = "fragments";
45578#endif /* FREECIV_JSON_CONNECTION */
45579 e = 0;
45580
45581 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
45582
45583 if (e) {
45584 log_packet_detailed("'fragments' field error detected");
45585 }
45586
45587#ifdef FREECIV_JSON_CONNECTION
45588 field_addr.name = "turn";
45589#endif /* FREECIV_JSON_CONNECTION */
45590 e = 0;
45591
45592 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
45593
45594 if (e) {
45595 log_packet_detailed("'turn' field error detected");
45596 }
45597#endif /* FREECIV_DELTA_PROTOCOL */
45598
45600}
45601
45602int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
45603{
45604 if (!pc->used) {
45605 log_error("WARNING: trying to send data to the closed connection %s",
45607 return -1;
45608 }
45609 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NEW_YEAR].packet != nullptr, -1,
45610 "Handler for PACKET_NEW_YEAR not installed");
45611 return pc->phs.handlers->send[PACKET_NEW_YEAR].packet(pc, packet);
45612}
45613
45614void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
45615{
45616 conn_list_iterate(dest, pconn) {
45617 send_packet_new_year(pconn, packet);
45619}
45620
45621static inline void init_packet_begin_turn(struct packet_begin_turn *packet)
45622{
45623 memset(packet, 0, sizeof(*packet));
45624}
45625
45626#define free_packet_begin_turn(_packet) (void) 0
45627#define destroy_packet_begin_turn free
45628
45630{
45631#define FREE_PACKET_STRUCT(_packet) free_packet_begin_turn(_packet)
45633
45634 log_packet_detailed("packet_begin_turn_100: got info about ()");
45635
45636 real_packet->__dummy = 0xff;
45637
45639#undef FREE_PACKET_STRUCT
45640}
45641
45643{
45645
45646 log_packet_detailed("packet_begin_turn_100: sending info about ()");
45647
45649}
45650
45652{
45653 if (!pc->used) {
45654 log_error("WARNING: trying to send data to the closed connection %s",
45656 return -1;
45657 }
45658 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet != nullptr, -1,
45659 "Handler for PACKET_BEGIN_TURN not installed");
45660 return pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet(pc);
45661}
45662
45664{
45665 conn_list_iterate(dest, pconn) {
45668}
45669
45670static inline void init_packet_end_turn(struct packet_end_turn *packet)
45671{
45672 memset(packet, 0, sizeof(*packet));
45673}
45674
45675#define free_packet_end_turn(_packet) (void) 0
45676#define destroy_packet_end_turn free
45677
45679{
45680#define FREE_PACKET_STRUCT(_packet) free_packet_end_turn(_packet)
45682
45683 log_packet_detailed("packet_end_turn_100: got info about ()");
45684
45685 real_packet->__dummy = 0xff;
45686
45688#undef FREE_PACKET_STRUCT
45689}
45690
45692{
45694
45695 log_packet_detailed("packet_end_turn_100: sending info about ()");
45696
45698}
45699
45701{
45702 if (!pc->used) {
45703 log_error("WARNING: trying to send data to the closed connection %s",
45705 return -1;
45706 }
45707 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_TURN].no_packet != nullptr, -1,
45708 "Handler for PACKET_END_TURN not installed");
45709 return pc->phs.handlers->send[PACKET_END_TURN].no_packet(pc);
45710}
45711
45713{
45714 conn_list_iterate(dest, pconn) {
45717}
45718
45719static inline void init_packet_freeze_client(struct packet_freeze_client *packet)
45720{
45721 memset(packet, 0, sizeof(*packet));
45722}
45723
45724#define free_packet_freeze_client(_packet) (void) 0
45725#define destroy_packet_freeze_client free
45726
45728{
45729#define FREE_PACKET_STRUCT(_packet) free_packet_freeze_client(_packet)
45731
45732 log_packet_detailed("packet_freeze_client_100: got info about ()");
45733
45734 real_packet->__dummy = 0xff;
45735
45737#undef FREE_PACKET_STRUCT
45738}
45739
45741{
45743
45744 log_packet_detailed("packet_freeze_client_100: sending info about ()");
45745
45747}
45748
45750{
45751 if (!pc->used) {
45752 log_error("WARNING: trying to send data to the closed connection %s",
45754 return -1;
45755 }
45756 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet != nullptr, -1,
45757 "Handler for PACKET_FREEZE_CLIENT not installed");
45758 return pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet(pc);
45759}
45760
45767
45768static inline void init_packet_thaw_client(struct packet_thaw_client *packet)
45769{
45770 memset(packet, 0, sizeof(*packet));
45771}
45772
45773#define free_packet_thaw_client(_packet) (void) 0
45774#define destroy_packet_thaw_client free
45775
45777{
45778#define FREE_PACKET_STRUCT(_packet) free_packet_thaw_client(_packet)
45780
45781 log_packet_detailed("packet_thaw_client_100: got info about ()");
45782
45783 real_packet->__dummy = 0xff;
45784
45786#undef FREE_PACKET_STRUCT
45787}
45788
45790{
45792
45793 log_packet_detailed("packet_thaw_client_100: sending info about ()");
45794
45796}
45797
45799{
45800 if (!pc->used) {
45801 log_error("WARNING: trying to send data to the closed connection %s",
45803 return -1;
45804 }
45805 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet != nullptr, -1,
45806 "Handler for PACKET_THAW_CLIENT not installed");
45807 return pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet(pc);
45808}
45809
45811{
45812 conn_list_iterate(dest, pconn) {
45815}
45816
45818{
45819 memset(packet, 0, sizeof(*packet));
45820}
45821
45822#define free_packet_spaceship_launch(_packet) (void) 0
45823#define destroy_packet_spaceship_launch free
45824
45826{
45827#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_launch(_packet)
45829
45830 log_packet_detailed("packet_spaceship_launch_100: got info about ()");
45831
45832 real_packet->__dummy = 0xff;
45833
45835#undef FREE_PACKET_STRUCT
45836}
45837
45839{
45841
45842 log_packet_detailed("packet_spaceship_launch_100: sending info about ()");
45843
45845}
45846
45848{
45849 if (!pc->used) {
45850 log_error("WARNING: trying to send data to the closed connection %s",
45852 return -1;
45853 }
45854 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet != nullptr, -1,
45855 "Handler for PACKET_SPACESHIP_LAUNCH not installed");
45856 return pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet(pc);
45857}
45858
45859static inline void init_packet_spaceship_place(struct packet_spaceship_place *packet)
45860{
45861 memset(packet, 0, sizeof(*packet));
45862}
45863
45864#define free_packet_spaceship_place(_packet) (void) 0
45865#define destroy_packet_spaceship_place free
45866
45867#ifdef FREECIV_DELTA_PROTOCOL
45868#define hash_packet_spaceship_place_100 hash_const
45869#define cmp_packet_spaceship_place_100 cmp_const
45871#endif /* FREECIV_DELTA_PROTOCOL */
45872
45874{
45875#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_place(_packet)
45877
45878#ifdef FREECIV_JSON_CONNECTION
45879 struct plocation field_addr;
45880 {
45881 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
45884 }
45885#endif /* FREECIV_JSON_CONNECTION */
45886
45887 log_packet_detailed("packet_spaceship_place_100: got info about ()");
45888
45889#ifdef FREECIV_DELTA_PROTOCOL
45892 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_PLACE;
45893
45894 if (nullptr == *hash) {
45896 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45897 }
45898
45899 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45900 *real_packet = *old;
45901 } else {
45902 /* packet is already initialized empty */
45903 log_packet_detailed(" no old info");
45904 }
45905
45906#ifdef FREECIV_JSON_CONNECTION
45907 field_addr.name = "fields";
45908#endif /* FREECIV_JSON_CONNECTION */
45909 DIO_BV_GET(&din, &field_addr, fields);
45910
45911 if (BV_ISSET(fields, 0)) {
45912 log_packet_detailed(" got field 'type'");
45913
45914#ifdef FREECIV_JSON_CONNECTION
45915 field_addr.name = "type";
45916#endif /* FREECIV_JSON_CONNECTION */
45917
45918 {
45919 int readin;
45920
45921 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45923 }
45924 real_packet->type = readin;
45925 }
45926 }
45927
45928 if (BV_ISSET(fields, 1)) {
45929 log_packet_detailed(" got field 'num'");
45930
45931#ifdef FREECIV_JSON_CONNECTION
45932 field_addr.name = "num";
45933#endif /* FREECIV_JSON_CONNECTION */
45934
45935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45937 }
45938 }
45939
45940 if (nullptr == old) {
45941 old = fc_malloc(sizeof(*old));
45943 *old = *real_packet;
45945 } else {
45946 *old = *real_packet;
45947 }
45948
45949#else /* FREECIV_DELTA_PROTOCOL */
45950#ifdef FREECIV_JSON_CONNECTION
45951 field_addr.name = "type";
45952#endif /* FREECIV_JSON_CONNECTION */
45953
45954 {
45955 int readin;
45956
45957 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45959 }
45960 real_packet->type = readin;
45961 }
45962
45963#ifdef FREECIV_JSON_CONNECTION
45964 field_addr.name = "num";
45965#endif /* FREECIV_JSON_CONNECTION */
45966
45967 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45969 }
45970#endif /* FREECIV_DELTA_PROTOCOL */
45971
45973#undef FREE_PACKET_STRUCT
45974}
45975
45977{
45978 const struct packet_spaceship_place *real_packet = packet;
45979 int e;
45981
45982 log_packet_detailed("packet_spaceship_place_100: sending info about ()");
45983
45984#ifdef FREECIV_DELTA_PROTOCOL
45987 bool differ;
45988 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_PLACE;
45989
45990 if (nullptr == *hash) {
45992 nullptr, nullptr, nullptr, destroy_packet_spaceship_place);
45993 }
45994 BV_CLR_ALL(fields);
45995
45996 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45997 old = fc_malloc(sizeof(*old));
45998 /* temporary bitcopy just to insert correctly */
45999 *old = *real_packet;
46002 }
46003
46004 differ = (old->type != real_packet->type);
46005 if (differ) {
46006 BV_SET(fields, 0);
46007 }
46008
46009 differ = (old->num != real_packet->num);
46010 if (differ) {
46011 BV_SET(fields, 1);
46012 }
46013#endif /* FREECIV_DELTA_PROTOCOL */
46014
46015#ifdef FREECIV_JSON_CONNECTION
46016 struct plocation field_addr;
46017 {
46018 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46021 }
46022#endif /* FREECIV_JSON_CONNECTION */
46023
46024#ifdef FREECIV_DELTA_PROTOCOL
46025#ifdef FREECIV_JSON_CONNECTION
46026 field_addr.name = "fields";
46027#endif /* FREECIV_JSON_CONNECTION */
46028 e = 0;
46029 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46030 if (e) {
46031 log_packet_detailed("fields bitvector error detected");
46032 }
46033
46034 if (BV_ISSET(fields, 0)) {
46035 log_packet_detailed(" field 'type' has changed");
46036
46037#ifdef FREECIV_JSON_CONNECTION
46038 field_addr.name = "type";
46039#endif /* FREECIV_JSON_CONNECTION */
46040 e = 0;
46041
46042 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
46043
46044 if (e) {
46045 log_packet_detailed("'type' field error detected");
46046 }
46047 }
46048
46049 if (BV_ISSET(fields, 1)) {
46050 log_packet_detailed(" field 'num' has changed");
46051
46052#ifdef FREECIV_JSON_CONNECTION
46053 field_addr.name = "num";
46054#endif /* FREECIV_JSON_CONNECTION */
46055 e = 0;
46056
46057 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
46058
46059 if (e) {
46060 log_packet_detailed("'num' field error detected");
46061 }
46062 }
46063
46064 *old = *real_packet;
46065
46066#else /* FREECIV_DELTA_PROTOCOL */
46067#ifdef FREECIV_JSON_CONNECTION
46068 field_addr.name = "type";
46069#endif /* FREECIV_JSON_CONNECTION */
46070 e = 0;
46071
46072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
46073
46074 if (e) {
46075 log_packet_detailed("'type' field error detected");
46076 }
46077
46078#ifdef FREECIV_JSON_CONNECTION
46079 field_addr.name = "num";
46080#endif /* FREECIV_JSON_CONNECTION */
46081 e = 0;
46082
46083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
46084
46085 if (e) {
46086 log_packet_detailed("'num' field error detected");
46087 }
46088#endif /* FREECIV_DELTA_PROTOCOL */
46089
46091}
46092
46094{
46095 if (!pc->used) {
46096 log_error("WARNING: trying to send data to the closed connection %s",
46098 return -1;
46099 }
46100 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet != nullptr, -1,
46101 "Handler for PACKET_SPACESHIP_PLACE not installed");
46102 return pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet(pc, packet);
46103}
46104
46106{
46107 struct packet_spaceship_place packet, *real_packet = &packet;
46108
46110 real_packet->num = num;
46111
46113}
46114
46115static inline void init_packet_spaceship_info(struct packet_spaceship_info *packet)
46116{
46117 memset(packet, 0, sizeof(*packet));
46118}
46119
46120#define free_packet_spaceship_info(_packet) (void) 0
46121#define destroy_packet_spaceship_info free
46122
46123#ifdef FREECIV_DELTA_PROTOCOL
46125{
46126 const struct packet_spaceship_info *key = (const struct packet_spaceship_info *) vkey;
46127 genhash_val_t result = 0;
46128
46129 result += key->player_num;
46130
46131 result &= 0xFFFFFFFF;
46132 return result;
46133}
46134
46135static bool cmp_packet_spaceship_info_100(const void *vkey1, const void *vkey2)
46136{
46137 const struct packet_spaceship_info *old = (const struct packet_spaceship_info *) vkey1;
46138 const struct packet_spaceship_info *real_packet = (const struct packet_spaceship_info *) vkey2;
46139 bool differ;
46140
46141 differ = (old->player_num != real_packet->player_num);
46142
46143 return !differ;
46144}
46146#endif /* FREECIV_DELTA_PROTOCOL */
46147
46149{
46150#define FREE_PACKET_STRUCT(_packet) free_packet_spaceship_info(_packet)
46152
46153#ifdef FREECIV_JSON_CONNECTION
46154 struct plocation field_addr;
46155 {
46156 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46159 }
46160#endif /* FREECIV_JSON_CONNECTION */
46161
46162#ifdef FREECIV_JSON_CONNECTION
46163 field_addr.name = "player_num";
46164#endif /* FREECIV_JSON_CONNECTION */
46165
46166 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player_num)) {
46167 RECEIVE_PACKET_FIELD_ERROR(player_num);
46168 }
46169
46170 log_packet_detailed("packet_spaceship_info_100: got info about (%d)",
46171 real_packet->player_num);
46172
46173#ifdef FREECIV_DELTA_PROTOCOL
46175 struct packet_spaceship_info *old;
46176 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_INFO;
46177
46178 if (nullptr == *hash) {
46180 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46181 }
46182
46183 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46184 *real_packet = *old;
46185 } else {
46186 /* packet is already initialized empty */
46187 log_packet_detailed(" no old info");
46188 }
46189
46190#ifdef FREECIV_JSON_CONNECTION
46191 field_addr.name = "fields";
46192#endif /* FREECIV_JSON_CONNECTION */
46193 DIO_BV_GET(&din, &field_addr, fields);
46194
46195 if (BV_ISSET(fields, 0)) {
46196 log_packet_detailed(" got field 'sship_state'");
46197
46198#ifdef FREECIV_JSON_CONNECTION
46199 field_addr.name = "sship_state";
46200#endif /* FREECIV_JSON_CONNECTION */
46201
46202 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46203 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46204 }
46205 }
46206
46207 if (BV_ISSET(fields, 1)) {
46208 log_packet_detailed(" got field 'structurals'");
46209
46210#ifdef FREECIV_JSON_CONNECTION
46211 field_addr.name = "structurals";
46212#endif /* FREECIV_JSON_CONNECTION */
46213
46214 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46215 RECEIVE_PACKET_FIELD_ERROR(structurals);
46216 }
46217 }
46218
46219 if (BV_ISSET(fields, 2)) {
46220 log_packet_detailed(" got field 'components'");
46221
46222#ifdef FREECIV_JSON_CONNECTION
46223 field_addr.name = "components";
46224#endif /* FREECIV_JSON_CONNECTION */
46225
46226 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46227 RECEIVE_PACKET_FIELD_ERROR(components);
46228 }
46229 }
46230
46231 if (BV_ISSET(fields, 3)) {
46232 log_packet_detailed(" got field 'modules'");
46233
46234#ifdef FREECIV_JSON_CONNECTION
46235 field_addr.name = "modules";
46236#endif /* FREECIV_JSON_CONNECTION */
46237
46238 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46240 }
46241 }
46242
46243 if (BV_ISSET(fields, 4)) {
46244 log_packet_detailed(" got field 'fuel'");
46245
46246#ifdef FREECIV_JSON_CONNECTION
46247 field_addr.name = "fuel";
46248#endif /* FREECIV_JSON_CONNECTION */
46249
46250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46252 }
46253 }
46254
46255 if (BV_ISSET(fields, 5)) {
46256 log_packet_detailed(" got field 'propulsion'");
46257
46258#ifdef FREECIV_JSON_CONNECTION
46259 field_addr.name = "propulsion";
46260#endif /* FREECIV_JSON_CONNECTION */
46261
46262 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46263 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46264 }
46265 }
46266
46267 if (BV_ISSET(fields, 6)) {
46268 log_packet_detailed(" got field 'habitation'");
46269
46270#ifdef FREECIV_JSON_CONNECTION
46271 field_addr.name = "habitation";
46272#endif /* FREECIV_JSON_CONNECTION */
46273
46274 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46275 RECEIVE_PACKET_FIELD_ERROR(habitation);
46276 }
46277 }
46278
46279 if (BV_ISSET(fields, 7)) {
46280 log_packet_detailed(" got field 'life_support'");
46281
46282#ifdef FREECIV_JSON_CONNECTION
46283 field_addr.name = "life_support";
46284#endif /* FREECIV_JSON_CONNECTION */
46285
46286 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46287 RECEIVE_PACKET_FIELD_ERROR(life_support);
46288 }
46289 }
46290
46291 if (BV_ISSET(fields, 8)) {
46292 log_packet_detailed(" got field 'solar_panels'");
46293
46294#ifdef FREECIV_JSON_CONNECTION
46295 field_addr.name = "solar_panels";
46296#endif /* FREECIV_JSON_CONNECTION */
46297
46298 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46299 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46300 }
46301 }
46302
46303 if (BV_ISSET(fields, 9)) {
46304 log_packet_detailed(" got field 'launch_year'");
46305
46306#ifdef FREECIV_JSON_CONNECTION
46307 field_addr.name = "launch_year";
46308#endif /* FREECIV_JSON_CONNECTION */
46309
46310 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46311 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46312 }
46313 }
46314
46315 if (BV_ISSET(fields, 10)) {
46316 log_packet_detailed(" got field 'population'");
46317
46318#ifdef FREECIV_JSON_CONNECTION
46319 field_addr.name = "population";
46320#endif /* FREECIV_JSON_CONNECTION */
46321
46322 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46323 RECEIVE_PACKET_FIELD_ERROR(population);
46324 }
46325 }
46326
46327 if (BV_ISSET(fields, 11)) {
46328 log_packet_detailed(" got field 'mass'");
46329
46330#ifdef FREECIV_JSON_CONNECTION
46331 field_addr.name = "mass";
46332#endif /* FREECIV_JSON_CONNECTION */
46333
46334 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46336 }
46337 }
46338
46339 if (BV_ISSET(fields, 12)) {
46340 log_packet_detailed(" got field 'structure'");
46341
46342#ifdef FREECIV_JSON_CONNECTION
46343 field_addr.name = "structure";
46344#endif /* FREECIV_JSON_CONNECTION */
46345
46346 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46347 RECEIVE_PACKET_FIELD_ERROR(structure);
46348 }
46349 }
46350
46351 if (BV_ISSET(fields, 13)) {
46352 log_packet_detailed(" got field 'support_rate'");
46353
46354#ifdef FREECIV_JSON_CONNECTION
46355 field_addr.name = "support_rate";
46356#endif /* FREECIV_JSON_CONNECTION */
46357
46358 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46359 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46360 }
46361 }
46362
46363 if (BV_ISSET(fields, 14)) {
46364 log_packet_detailed(" got field 'energy_rate'");
46365
46366#ifdef FREECIV_JSON_CONNECTION
46367 field_addr.name = "energy_rate";
46368#endif /* FREECIV_JSON_CONNECTION */
46369
46370 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46371 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46372 }
46373 }
46374
46375 if (BV_ISSET(fields, 15)) {
46376 log_packet_detailed(" got field 'success_rate'");
46377
46378#ifdef FREECIV_JSON_CONNECTION
46379 field_addr.name = "success_rate";
46380#endif /* FREECIV_JSON_CONNECTION */
46381
46382 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46383 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46384 }
46385 }
46386
46387 if (BV_ISSET(fields, 16)) {
46388 log_packet_detailed(" got field 'travel_time'");
46389
46390#ifdef FREECIV_JSON_CONNECTION
46391 field_addr.name = "travel_time";
46392#endif /* FREECIV_JSON_CONNECTION */
46393
46394 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46395 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46396 }
46397 }
46398
46399 if (nullptr == old) {
46400 old = fc_malloc(sizeof(*old));
46402 *old = *real_packet;
46404 } else {
46405 *old = *real_packet;
46406 }
46407
46408#else /* FREECIV_DELTA_PROTOCOL */
46409#ifdef FREECIV_JSON_CONNECTION
46410 field_addr.name = "sship_state";
46411#endif /* FREECIV_JSON_CONNECTION */
46412
46413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
46414 RECEIVE_PACKET_FIELD_ERROR(sship_state);
46415 }
46416
46417#ifdef FREECIV_JSON_CONNECTION
46418 field_addr.name = "structurals";
46419#endif /* FREECIV_JSON_CONNECTION */
46420
46421 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
46422 RECEIVE_PACKET_FIELD_ERROR(structurals);
46423 }
46424
46425#ifdef FREECIV_JSON_CONNECTION
46426 field_addr.name = "components";
46427#endif /* FREECIV_JSON_CONNECTION */
46428
46429 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
46430 RECEIVE_PACKET_FIELD_ERROR(components);
46431 }
46432
46433#ifdef FREECIV_JSON_CONNECTION
46434 field_addr.name = "modules";
46435#endif /* FREECIV_JSON_CONNECTION */
46436
46437 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
46439 }
46440
46441#ifdef FREECIV_JSON_CONNECTION
46442 field_addr.name = "fuel";
46443#endif /* FREECIV_JSON_CONNECTION */
46444
46445 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46447 }
46448
46449#ifdef FREECIV_JSON_CONNECTION
46450 field_addr.name = "propulsion";
46451#endif /* FREECIV_JSON_CONNECTION */
46452
46453 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
46454 RECEIVE_PACKET_FIELD_ERROR(propulsion);
46455 }
46456
46457#ifdef FREECIV_JSON_CONNECTION
46458 field_addr.name = "habitation";
46459#endif /* FREECIV_JSON_CONNECTION */
46460
46461 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
46462 RECEIVE_PACKET_FIELD_ERROR(habitation);
46463 }
46464
46465#ifdef FREECIV_JSON_CONNECTION
46466 field_addr.name = "life_support";
46467#endif /* FREECIV_JSON_CONNECTION */
46468
46469 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
46470 RECEIVE_PACKET_FIELD_ERROR(life_support);
46471 }
46472
46473#ifdef FREECIV_JSON_CONNECTION
46474 field_addr.name = "solar_panels";
46475#endif /* FREECIV_JSON_CONNECTION */
46476
46477 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
46478 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
46479 }
46480
46481#ifdef FREECIV_JSON_CONNECTION
46482 field_addr.name = "launch_year";
46483#endif /* FREECIV_JSON_CONNECTION */
46484
46485 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
46486 RECEIVE_PACKET_FIELD_ERROR(launch_year);
46487 }
46488
46489#ifdef FREECIV_JSON_CONNECTION
46490 field_addr.name = "population";
46491#endif /* FREECIV_JSON_CONNECTION */
46492
46493 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
46494 RECEIVE_PACKET_FIELD_ERROR(population);
46495 }
46496
46497#ifdef FREECIV_JSON_CONNECTION
46498 field_addr.name = "mass";
46499#endif /* FREECIV_JSON_CONNECTION */
46500
46501 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
46503 }
46504
46505#ifdef FREECIV_JSON_CONNECTION
46506 field_addr.name = "structure";
46507#endif /* FREECIV_JSON_CONNECTION */
46508
46509 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
46510 RECEIVE_PACKET_FIELD_ERROR(structure);
46511 }
46512
46513#ifdef FREECIV_JSON_CONNECTION
46514 field_addr.name = "support_rate";
46515#endif /* FREECIV_JSON_CONNECTION */
46516
46517 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
46518 RECEIVE_PACKET_FIELD_ERROR(support_rate);
46519 }
46520
46521#ifdef FREECIV_JSON_CONNECTION
46522 field_addr.name = "energy_rate";
46523#endif /* FREECIV_JSON_CONNECTION */
46524
46525 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
46526 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
46527 }
46528
46529#ifdef FREECIV_JSON_CONNECTION
46530 field_addr.name = "success_rate";
46531#endif /* FREECIV_JSON_CONNECTION */
46532
46533 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
46534 RECEIVE_PACKET_FIELD_ERROR(success_rate);
46535 }
46536
46537#ifdef FREECIV_JSON_CONNECTION
46538 field_addr.name = "travel_time";
46539#endif /* FREECIV_JSON_CONNECTION */
46540
46541 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
46542 RECEIVE_PACKET_FIELD_ERROR(travel_time);
46543 }
46544#endif /* FREECIV_DELTA_PROTOCOL */
46545
46547#undef FREE_PACKET_STRUCT
46548}
46549
46551{
46552 const struct packet_spaceship_info *real_packet = packet;
46553 int e;
46555
46556 log_packet_detailed("packet_spaceship_info_100: sending info about (%d)",
46557 real_packet->player_num);
46558
46559#ifdef FREECIV_DELTA_PROTOCOL
46561 struct packet_spaceship_info *old;
46562 bool differ;
46563 int different = 0;
46564 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_INFO;
46565
46566 if (nullptr == *hash) {
46568 nullptr, nullptr, nullptr, destroy_packet_spaceship_info);
46569 }
46570 BV_CLR_ALL(fields);
46571
46572 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
46573 old = fc_malloc(sizeof(*old));
46574 /* temporary bitcopy just to insert correctly */
46575 *old = *real_packet;
46578 different = 1; /* Force to send. */
46579 }
46580
46581 differ = (old->sship_state != real_packet->sship_state);
46582 if (differ) {
46583 different++;
46584 BV_SET(fields, 0);
46585 }
46586
46587 differ = (old->structurals != real_packet->structurals);
46588 if (differ) {
46589 different++;
46590 BV_SET(fields, 1);
46591 }
46592
46593 differ = (old->components != real_packet->components);
46594 if (differ) {
46595 different++;
46596 BV_SET(fields, 2);
46597 }
46598
46599 differ = (old->modules != real_packet->modules);
46600 if (differ) {
46601 different++;
46602 BV_SET(fields, 3);
46603 }
46604
46605 differ = (old->fuel != real_packet->fuel);
46606 if (differ) {
46607 different++;
46608 BV_SET(fields, 4);
46609 }
46610
46611 differ = (old->propulsion != real_packet->propulsion);
46612 if (differ) {
46613 different++;
46614 BV_SET(fields, 5);
46615 }
46616
46617 differ = (old->habitation != real_packet->habitation);
46618 if (differ) {
46619 different++;
46620 BV_SET(fields, 6);
46621 }
46622
46623 differ = (old->life_support != real_packet->life_support);
46624 if (differ) {
46625 different++;
46626 BV_SET(fields, 7);
46627 }
46628
46629 differ = (old->solar_panels != real_packet->solar_panels);
46630 if (differ) {
46631 different++;
46632 BV_SET(fields, 8);
46633 }
46634
46635 differ = (old->launch_year != real_packet->launch_year);
46636 if (differ) {
46637 different++;
46638 BV_SET(fields, 9);
46639 }
46640
46641 differ = (old->population != real_packet->population);
46642 if (differ) {
46643 different++;
46644 BV_SET(fields, 10);
46645 }
46646
46647 differ = (old->mass != real_packet->mass);
46648 if (differ) {
46649 different++;
46650 BV_SET(fields, 11);
46651 }
46652
46653 differ = !BV_ARE_EQUAL(old->structure, real_packet->structure);
46654 if (differ) {
46655 different++;
46656 BV_SET(fields, 12);
46657 }
46658
46659 differ = ((int) (old->support_rate * 10000) != (int) (real_packet->support_rate * 10000));
46660 if (differ) {
46661 different++;
46662 BV_SET(fields, 13);
46663 }
46664
46665 differ = ((int) (old->energy_rate * 10000) != (int) (real_packet->energy_rate * 10000));
46666 if (differ) {
46667 different++;
46668 BV_SET(fields, 14);
46669 }
46670
46671 differ = ((int) (old->success_rate * 10000) != (int) (real_packet->success_rate * 10000));
46672 if (differ) {
46673 different++;
46674 BV_SET(fields, 15);
46675 }
46676
46677 differ = ((int) (old->travel_time * 10000) != (int) (real_packet->travel_time * 10000));
46678 if (differ) {
46679 different++;
46680 BV_SET(fields, 16);
46681 }
46682
46683 if (different == 0) {
46684 log_packet_detailed(" no change -> discard");
46686 }
46687#endif /* FREECIV_DELTA_PROTOCOL */
46688
46689#ifdef FREECIV_JSON_CONNECTION
46690 struct plocation field_addr;
46691 {
46692 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
46695 }
46696#endif /* FREECIV_JSON_CONNECTION */
46697
46698#ifdef FREECIV_JSON_CONNECTION
46699 field_addr.name = "player_num";
46700#endif /* FREECIV_JSON_CONNECTION */
46701 e = 0;
46702
46703 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player_num);
46704
46705 if (e) {
46706 log_packet_detailed("'player_num' field error detected");
46707 }
46708
46709#ifdef FREECIV_DELTA_PROTOCOL
46710#ifdef FREECIV_JSON_CONNECTION
46711 field_addr.name = "fields";
46712#endif /* FREECIV_JSON_CONNECTION */
46713 e = 0;
46714 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46715 if (e) {
46716 log_packet_detailed("fields bitvector error detected");
46717 }
46718
46719 if (BV_ISSET(fields, 0)) {
46720 log_packet_detailed(" field 'sship_state' has changed");
46721
46722#ifdef FREECIV_JSON_CONNECTION
46723 field_addr.name = "sship_state";
46724#endif /* FREECIV_JSON_CONNECTION */
46725 e = 0;
46726
46727 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46728
46729 if (e) {
46730 log_packet_detailed("'sship_state' field error detected");
46731 }
46732 }
46733
46734 if (BV_ISSET(fields, 1)) {
46735 log_packet_detailed(" field 'structurals' has changed");
46736
46737#ifdef FREECIV_JSON_CONNECTION
46738 field_addr.name = "structurals";
46739#endif /* FREECIV_JSON_CONNECTION */
46740 e = 0;
46741
46742 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46743
46744 if (e) {
46745 log_packet_detailed("'structurals' field error detected");
46746 }
46747 }
46748
46749 if (BV_ISSET(fields, 2)) {
46750 log_packet_detailed(" field 'components' has changed");
46751
46752#ifdef FREECIV_JSON_CONNECTION
46753 field_addr.name = "components";
46754#endif /* FREECIV_JSON_CONNECTION */
46755 e = 0;
46756
46757 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46758
46759 if (e) {
46760 log_packet_detailed("'components' field error detected");
46761 }
46762 }
46763
46764 if (BV_ISSET(fields, 3)) {
46765 log_packet_detailed(" field 'modules' has changed");
46766
46767#ifdef FREECIV_JSON_CONNECTION
46768 field_addr.name = "modules";
46769#endif /* FREECIV_JSON_CONNECTION */
46770 e = 0;
46771
46772 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46773
46774 if (e) {
46775 log_packet_detailed("'modules' field error detected");
46776 }
46777 }
46778
46779 if (BV_ISSET(fields, 4)) {
46780 log_packet_detailed(" field 'fuel' has changed");
46781
46782#ifdef FREECIV_JSON_CONNECTION
46783 field_addr.name = "fuel";
46784#endif /* FREECIV_JSON_CONNECTION */
46785 e = 0;
46786
46787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46788
46789 if (e) {
46790 log_packet_detailed("'fuel' field error detected");
46791 }
46792 }
46793
46794 if (BV_ISSET(fields, 5)) {
46795 log_packet_detailed(" field 'propulsion' has changed");
46796
46797#ifdef FREECIV_JSON_CONNECTION
46798 field_addr.name = "propulsion";
46799#endif /* FREECIV_JSON_CONNECTION */
46800 e = 0;
46801
46802 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
46803
46804 if (e) {
46805 log_packet_detailed("'propulsion' field error detected");
46806 }
46807 }
46808
46809 if (BV_ISSET(fields, 6)) {
46810 log_packet_detailed(" field 'habitation' has changed");
46811
46812#ifdef FREECIV_JSON_CONNECTION
46813 field_addr.name = "habitation";
46814#endif /* FREECIV_JSON_CONNECTION */
46815 e = 0;
46816
46817 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
46818
46819 if (e) {
46820 log_packet_detailed("'habitation' field error detected");
46821 }
46822 }
46823
46824 if (BV_ISSET(fields, 7)) {
46825 log_packet_detailed(" field 'life_support' has changed");
46826
46827#ifdef FREECIV_JSON_CONNECTION
46828 field_addr.name = "life_support";
46829#endif /* FREECIV_JSON_CONNECTION */
46830 e = 0;
46831
46832 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
46833
46834 if (e) {
46835 log_packet_detailed("'life_support' field error detected");
46836 }
46837 }
46838
46839 if (BV_ISSET(fields, 8)) {
46840 log_packet_detailed(" field 'solar_panels' has changed");
46841
46842#ifdef FREECIV_JSON_CONNECTION
46843 field_addr.name = "solar_panels";
46844#endif /* FREECIV_JSON_CONNECTION */
46845 e = 0;
46846
46847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
46848
46849 if (e) {
46850 log_packet_detailed("'solar_panels' field error detected");
46851 }
46852 }
46853
46854 if (BV_ISSET(fields, 9)) {
46855 log_packet_detailed(" field 'launch_year' has changed");
46856
46857#ifdef FREECIV_JSON_CONNECTION
46858 field_addr.name = "launch_year";
46859#endif /* FREECIV_JSON_CONNECTION */
46860 e = 0;
46861
46862 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46863
46864 if (e) {
46865 log_packet_detailed("'launch_year' field error detected");
46866 }
46867 }
46868
46869 if (BV_ISSET(fields, 10)) {
46870 log_packet_detailed(" field 'population' has changed");
46871
46872#ifdef FREECIV_JSON_CONNECTION
46873 field_addr.name = "population";
46874#endif /* FREECIV_JSON_CONNECTION */
46875 e = 0;
46876
46877 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46878
46879 if (e) {
46880 log_packet_detailed("'population' field error detected");
46881 }
46882 }
46883
46884 if (BV_ISSET(fields, 11)) {
46885 log_packet_detailed(" field 'mass' has changed");
46886
46887#ifdef FREECIV_JSON_CONNECTION
46888 field_addr.name = "mass";
46889#endif /* FREECIV_JSON_CONNECTION */
46890 e = 0;
46891
46892 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
46893
46894 if (e) {
46895 log_packet_detailed("'mass' field error detected");
46896 }
46897 }
46898
46899 if (BV_ISSET(fields, 12)) {
46900 log_packet_detailed(" field 'structure' has changed");
46901
46902#ifdef FREECIV_JSON_CONNECTION
46903 field_addr.name = "structure";
46904#endif /* FREECIV_JSON_CONNECTION */
46905 e = 0;
46906
46907 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
46908
46909 if (e) {
46910 log_packet_detailed("'structure' field error detected");
46911 }
46912 }
46913
46914 if (BV_ISSET(fields, 13)) {
46915 log_packet_detailed(" field 'support_rate' has changed");
46916
46917#ifdef FREECIV_JSON_CONNECTION
46918 field_addr.name = "support_rate";
46919#endif /* FREECIV_JSON_CONNECTION */
46920 e = 0;
46921
46922 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
46923
46924 if (e) {
46925 log_packet_detailed("'support_rate' field error detected");
46926 }
46927 }
46928
46929 if (BV_ISSET(fields, 14)) {
46930 log_packet_detailed(" field 'energy_rate' has changed");
46931
46932#ifdef FREECIV_JSON_CONNECTION
46933 field_addr.name = "energy_rate";
46934#endif /* FREECIV_JSON_CONNECTION */
46935 e = 0;
46936
46937 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
46938
46939 if (e) {
46940 log_packet_detailed("'energy_rate' field error detected");
46941 }
46942 }
46943
46944 if (BV_ISSET(fields, 15)) {
46945 log_packet_detailed(" field 'success_rate' has changed");
46946
46947#ifdef FREECIV_JSON_CONNECTION
46948 field_addr.name = "success_rate";
46949#endif /* FREECIV_JSON_CONNECTION */
46950 e = 0;
46951
46952 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
46953
46954 if (e) {
46955 log_packet_detailed("'success_rate' field error detected");
46956 }
46957 }
46958
46959 if (BV_ISSET(fields, 16)) {
46960 log_packet_detailed(" field 'travel_time' has changed");
46961
46962#ifdef FREECIV_JSON_CONNECTION
46963 field_addr.name = "travel_time";
46964#endif /* FREECIV_JSON_CONNECTION */
46965 e = 0;
46966
46967 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
46968
46969 if (e) {
46970 log_packet_detailed("'travel_time' field error detected");
46971 }
46972 }
46973
46974 *old = *real_packet;
46975
46976#else /* FREECIV_DELTA_PROTOCOL */
46977#ifdef FREECIV_JSON_CONNECTION
46978 field_addr.name = "sship_state";
46979#endif /* FREECIV_JSON_CONNECTION */
46980 e = 0;
46981
46982 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46983
46984 if (e) {
46985 log_packet_detailed("'sship_state' field error detected");
46986 }
46987
46988#ifdef FREECIV_JSON_CONNECTION
46989 field_addr.name = "structurals";
46990#endif /* FREECIV_JSON_CONNECTION */
46991 e = 0;
46992
46993 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46994
46995 if (e) {
46996 log_packet_detailed("'structurals' field error detected");
46997 }
46998
46999#ifdef FREECIV_JSON_CONNECTION
47000 field_addr.name = "components";
47001#endif /* FREECIV_JSON_CONNECTION */
47002 e = 0;
47003
47004 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
47005
47006 if (e) {
47007 log_packet_detailed("'components' field error detected");
47008 }
47009
47010#ifdef FREECIV_JSON_CONNECTION
47011 field_addr.name = "modules";
47012#endif /* FREECIV_JSON_CONNECTION */
47013 e = 0;
47014
47015 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
47016
47017 if (e) {
47018 log_packet_detailed("'modules' field error detected");
47019 }
47020
47021#ifdef FREECIV_JSON_CONNECTION
47022 field_addr.name = "fuel";
47023#endif /* FREECIV_JSON_CONNECTION */
47024 e = 0;
47025
47026 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
47027
47028 if (e) {
47029 log_packet_detailed("'fuel' field error detected");
47030 }
47031
47032#ifdef FREECIV_JSON_CONNECTION
47033 field_addr.name = "propulsion";
47034#endif /* FREECIV_JSON_CONNECTION */
47035 e = 0;
47036
47037 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
47038
47039 if (e) {
47040 log_packet_detailed("'propulsion' field error detected");
47041 }
47042
47043#ifdef FREECIV_JSON_CONNECTION
47044 field_addr.name = "habitation";
47045#endif /* FREECIV_JSON_CONNECTION */
47046 e = 0;
47047
47048 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
47049
47050 if (e) {
47051 log_packet_detailed("'habitation' field error detected");
47052 }
47053
47054#ifdef FREECIV_JSON_CONNECTION
47055 field_addr.name = "life_support";
47056#endif /* FREECIV_JSON_CONNECTION */
47057 e = 0;
47058
47059 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
47060
47061 if (e) {
47062 log_packet_detailed("'life_support' field error detected");
47063 }
47064
47065#ifdef FREECIV_JSON_CONNECTION
47066 field_addr.name = "solar_panels";
47067#endif /* FREECIV_JSON_CONNECTION */
47068 e = 0;
47069
47070 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
47071
47072 if (e) {
47073 log_packet_detailed("'solar_panels' field error detected");
47074 }
47075
47076#ifdef FREECIV_JSON_CONNECTION
47077 field_addr.name = "launch_year";
47078#endif /* FREECIV_JSON_CONNECTION */
47079 e = 0;
47080
47081 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
47082
47083 if (e) {
47084 log_packet_detailed("'launch_year' field error detected");
47085 }
47086
47087#ifdef FREECIV_JSON_CONNECTION
47088 field_addr.name = "population";
47089#endif /* FREECIV_JSON_CONNECTION */
47090 e = 0;
47091
47092 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
47093
47094 if (e) {
47095 log_packet_detailed("'population' field error detected");
47096 }
47097
47098#ifdef FREECIV_JSON_CONNECTION
47099 field_addr.name = "mass";
47100#endif /* FREECIV_JSON_CONNECTION */
47101 e = 0;
47102
47103 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
47104
47105 if (e) {
47106 log_packet_detailed("'mass' field error detected");
47107 }
47108
47109#ifdef FREECIV_JSON_CONNECTION
47110 field_addr.name = "structure";
47111#endif /* FREECIV_JSON_CONNECTION */
47112 e = 0;
47113
47114 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->structure);
47115
47116 if (e) {
47117 log_packet_detailed("'structure' field error detected");
47118 }
47119
47120#ifdef FREECIV_JSON_CONNECTION
47121 field_addr.name = "support_rate";
47122#endif /* FREECIV_JSON_CONNECTION */
47123 e = 0;
47124
47125 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
47126
47127 if (e) {
47128 log_packet_detailed("'support_rate' field error detected");
47129 }
47130
47131#ifdef FREECIV_JSON_CONNECTION
47132 field_addr.name = "energy_rate";
47133#endif /* FREECIV_JSON_CONNECTION */
47134 e = 0;
47135
47136 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
47137
47138 if (e) {
47139 log_packet_detailed("'energy_rate' field error detected");
47140 }
47141
47142#ifdef FREECIV_JSON_CONNECTION
47143 field_addr.name = "success_rate";
47144#endif /* FREECIV_JSON_CONNECTION */
47145 e = 0;
47146
47147 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
47148
47149 if (e) {
47150 log_packet_detailed("'success_rate' field error detected");
47151 }
47152
47153#ifdef FREECIV_JSON_CONNECTION
47154 field_addr.name = "travel_time";
47155#endif /* FREECIV_JSON_CONNECTION */
47156 e = 0;
47157
47158 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
47159
47160 if (e) {
47161 log_packet_detailed("'travel_time' field error detected");
47162 }
47163#endif /* FREECIV_DELTA_PROTOCOL */
47164
47166}
47167
47169{
47170 if (!pc->used) {
47171 log_error("WARNING: trying to send data to the closed connection %s",
47173 return -1;
47174 }
47175 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet != nullptr, -1,
47176 "Handler for PACKET_SPACESHIP_INFO not installed");
47177 return pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet(pc, packet);
47178}
47179
47180void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
47181{
47182 conn_list_iterate(dest, pconn) {
47185}
47186
47187static inline void init_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47188{
47189 memset(packet, 0, sizeof(*packet));
47190
47192 packet->helptext = strvec_new();
47193}
47194
47195static inline void free_packet_ruleset_unit(struct packet_ruleset_unit *packet)
47196{
47197 if (packet->helptext) {
47198 strvec_destroy(packet->helptext);
47199 packet->helptext = nullptr;
47200 }
47202}
47203
47204static inline void destroy_packet_ruleset_unit(void *packet)
47205{
47207 free(packet);
47208}
47209
47210#ifdef FREECIV_DELTA_PROTOCOL
47211#define hash_packet_ruleset_unit_100 hash_const
47212#define cmp_packet_ruleset_unit_100 cmp_const
47214#endif /* FREECIV_DELTA_PROTOCOL */
47215
47217{
47218#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit(_packet)
47220
47221#ifdef FREECIV_JSON_CONNECTION
47222 struct plocation field_addr;
47223 {
47224 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
47227 }
47228#endif /* FREECIV_JSON_CONNECTION */
47229
47230 log_packet_detailed("packet_ruleset_unit_100: got info about ()");
47231
47232#ifdef FREECIV_DELTA_PROTOCOL
47234 struct packet_ruleset_unit *old;
47235 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT;
47236
47237 if (nullptr == *hash) {
47239 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
47240 }
47241
47242 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
47243 real_packet->id = old->id;
47244 sz_strlcpy(real_packet->name, old->name);
47245 sz_strlcpy(real_packet->rule_name, old->rule_name);
47246 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
47247 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
47248 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
47249 sz_strlcpy(real_packet->sound_move, old->sound_move);
47250 sz_strlcpy(real_packet->sound_move_alt, old->sound_move_alt);
47251 sz_strlcpy(real_packet->sound_fight, old->sound_fight);
47252 sz_strlcpy(real_packet->sound_fight_alt, old->sound_fight_alt);
47253 real_packet->unit_class_id = old->unit_class_id;
47254 real_packet->build_cost = old->build_cost;
47255 real_packet->pop_cost = old->pop_cost;
47256 real_packet->attack_strength = old->attack_strength;
47257 real_packet->defense_strength = old->defense_strength;
47258 real_packet->move_rate = old->move_rate;
47259 requirement_vector_copy(&real_packet->build_reqs, &old->build_reqs);
47260 real_packet->vision_radius_sq = old->vision_radius_sq;
47261 real_packet->transport_capacity = old->transport_capacity;
47262 real_packet->hp = old->hp;
47263 real_packet->firepower = old->firepower;
47264 real_packet->obsoleted_by = old->obsoleted_by;
47265 real_packet->converted_to = old->converted_to;
47266 real_packet->convert_time = old->convert_time;
47267 real_packet->fuel = old->fuel;
47268 real_packet->happy_cost = old->happy_cost;
47269 {
47270 int i;
47271
47272 for (i = 0; i < O_LAST; i++) {
47273 real_packet->upkeep[i] = old->upkeep[i];
47274 }
47275 }
47276 real_packet->paratroopers_range = old->paratroopers_range;
47277 real_packet->veteran_levels = old->veteran_levels;
47278 {
47279 int i;
47280
47281 for (i = 0; i < old->veteran_levels; i++) {
47282 sz_strlcpy(real_packet->veteran_name[i], old->veteran_name[i]);
47283 }
47284 }
47285 {
47286 int i;
47287
47288 for (i = 0; i < old->veteran_levels; i++) {
47289 real_packet->power_fact[i] = old->power_fact[i];
47290 }
47291 }
47292 {
47293 int i;
47294
47295 for (i = 0; i < old->veteran_levels; i++) {
47296 real_packet->move_bonus[i] = old->move_bonus[i];
47297 }
47298 }
47299 {
47300 int i;
47301
47302 for (i = 0; i < old->veteran_levels; i++) {
47303 real_packet->base_raise_chance[i] = old->base_raise_chance[i];
47304 }
47305 }
47306 {
47307 int i;
47308
47309 for (i = 0; i < old->veteran_levels; i++) {
47310 real_packet->work_raise_chance[i] = old->work_raise_chance[i];
47311 }
47312 }
47313 real_packet->bombard_rate = old->bombard_rate;
47314 real_packet->city_size = old->city_size;
47315 real_packet->city_slots = old->city_slots;
47316 real_packet->tp_defense = old->tp_defense;
47317 real_packet->cargo = old->cargo;
47318 real_packet->targets = old->targets;
47319 real_packet->embarks = old->embarks;
47320 real_packet->disembarks = old->disembarks;
47321 real_packet->vlayer = old->vlayer;
47322 if (old->helptext) {
47323 strvec_copy(real_packet->helptext, old->helptext);
47324 } else {
47325 strvec_clear(real_packet->helptext);
47326 }
47327 real_packet->flags = old->flags;
47328 real_packet->roles = old->roles;
47329 real_packet->worker = old->worker;
47330 } else {
47331 /* packet is already initialized empty */
47332 log_packet_detailed(" no old info");
47333 }
47334
47335#ifdef FREECIV_JSON_CONNECTION
47336 field_addr.name = "fields";
47337#endif /* FREECIV_JSON_CONNECTION */
47338 DIO_BV_GET(&din, &field_addr, fields);
47339
47340 if (BV_ISSET(fields, 0)) {
47341 log_packet_detailed(" got field 'id'");
47342
47343#ifdef FREECIV_JSON_CONNECTION
47344 field_addr.name = "id";
47345#endif /* FREECIV_JSON_CONNECTION */
47346
47347 {
47348 int readin;
47349
47350 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
47352 }
47353 real_packet->id = readin;
47354 }
47355 }
47356
47357 if (BV_ISSET(fields, 1)) {
47358 log_packet_detailed(" got field 'name'");
47359
47360#ifdef FREECIV_JSON_CONNECTION
47361 field_addr.name = "name";
47362#endif /* FREECIV_JSON_CONNECTION */
47363
47364 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
47366 }
47367 }
47368
47369 if (BV_ISSET(fields, 2)) {
47370 log_packet_detailed(" got field 'rule_name'");
47371
47372#ifdef FREECIV_JSON_CONNECTION
47373 field_addr.name = "rule_name";
47374#endif /* FREECIV_JSON_CONNECTION */
47375
47376 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
47377 RECEIVE_PACKET_FIELD_ERROR(rule_name);
47378 }
47379 }
47380
47381 if (BV_ISSET(fields, 3)) {
47382 log_packet_detailed(" got field 'graphic_str'");
47383
47384#ifdef FREECIV_JSON_CONNECTION
47385 field_addr.name = "graphic_str";
47386#endif /* FREECIV_JSON_CONNECTION */
47387
47388 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
47389 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
47390 }
47391 }
47392
47393 if (BV_ISSET(fields, 4)) {
47394 log_packet_detailed(" got field 'graphic_alt'");
47395
47396#ifdef FREECIV_JSON_CONNECTION
47397 field_addr.name = "graphic_alt";
47398#endif /* FREECIV_JSON_CONNECTION */
47399
47400 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
47401 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
47402 }
47403 }
47404
47405 if (BV_ISSET(fields, 5)) {
47406 log_packet_detailed(" got field 'graphic_alt2'");
47407
47408#ifdef FREECIV_JSON_CONNECTION
47409 field_addr.name = "graphic_alt2";
47410#endif /* FREECIV_JSON_CONNECTION */
47411
47412 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
47413 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
47414 }
47415 }
47416
47417 if (BV_ISSET(fields, 6)) {
47418 log_packet_detailed(" got field 'sound_move'");
47419
47420#ifdef FREECIV_JSON_CONNECTION
47421 field_addr.name = "sound_move";
47422#endif /* FREECIV_JSON_CONNECTION */
47423
47424 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
47425 RECEIVE_PACKET_FIELD_ERROR(sound_move);
47426 }
47427 }
47428
47429 if (BV_ISSET(fields, 7)) {
47430 log_packet_detailed(" got field 'sound_move_alt'");
47431
47432#ifdef FREECIV_JSON_CONNECTION
47433 field_addr.name = "sound_move_alt";
47434#endif /* FREECIV_JSON_CONNECTION */
47435
47436 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
47437 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
47438 }
47439 }
47440
47441 if (BV_ISSET(fields, 8)) {
47442 log_packet_detailed(" got field 'sound_fight'");
47443
47444#ifdef FREECIV_JSON_CONNECTION
47445 field_addr.name = "sound_fight";
47446#endif /* FREECIV_JSON_CONNECTION */
47447
47448 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
47449 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
47450 }
47451 }
47452
47453 if (BV_ISSET(fields, 9)) {
47454 log_packet_detailed(" got field 'sound_fight_alt'");
47455
47456#ifdef FREECIV_JSON_CONNECTION
47457 field_addr.name = "sound_fight_alt";
47458#endif /* FREECIV_JSON_CONNECTION */
47459
47460 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
47461 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
47462 }
47463 }
47464
47465 if (BV_ISSET(fields, 10)) {
47466 log_packet_detailed(" got field 'unit_class_id'");
47467
47468#ifdef FREECIV_JSON_CONNECTION
47469 field_addr.name = "unit_class_id";
47470#endif /* FREECIV_JSON_CONNECTION */
47471
47472 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
47473 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
47474 }
47475 }
47476
47477 if (BV_ISSET(fields, 11)) {
47478 log_packet_detailed(" got field 'build_cost'");
47479
47480#ifdef FREECIV_JSON_CONNECTION
47481 field_addr.name = "build_cost";
47482#endif /* FREECIV_JSON_CONNECTION */
47483
47484 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
47485 RECEIVE_PACKET_FIELD_ERROR(build_cost);
47486 }
47487 }
47488
47489 if (BV_ISSET(fields, 12)) {
47490 log_packet_detailed(" got field 'pop_cost'");
47491
47492#ifdef FREECIV_JSON_CONNECTION
47493 field_addr.name = "pop_cost";
47494#endif /* FREECIV_JSON_CONNECTION */
47495
47496 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
47498 }
47499 }
47500
47501 if (BV_ISSET(fields, 13)) {
47502 log_packet_detailed(" got field 'attack_strength'");
47503
47504#ifdef FREECIV_JSON_CONNECTION
47505 field_addr.name = "attack_strength";
47506#endif /* FREECIV_JSON_CONNECTION */
47507
47508 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
47509 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
47510 }
47511 }
47512
47513 if (BV_ISSET(fields, 14)) {
47514 log_packet_detailed(" got field 'defense_strength'");
47515
47516#ifdef FREECIV_JSON_CONNECTION
47517 field_addr.name = "defense_strength";
47518#endif /* FREECIV_JSON_CONNECTION */
47519
47520 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
47521 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
47522 }
47523 }
47524
47525 if (BV_ISSET(fields, 15)) {
47526 log_packet_detailed(" got field 'move_rate'");
47527
47528#ifdef FREECIV_JSON_CONNECTION
47529 field_addr.name = "move_rate";
47530#endif /* FREECIV_JSON_CONNECTION */
47531
47532 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
47533 RECEIVE_PACKET_FIELD_ERROR(move_rate);
47534 }
47535 }
47536
47537 if (BV_ISSET(fields, 16)) {
47538 log_packet_detailed(" got field 'build_reqs'");
47539
47540#ifdef FREECIV_JSON_CONNECTION
47541 field_addr.name = "build_reqs";
47542#endif /* FREECIV_JSON_CONNECTION */
47543
47544 {
47545 int i;
47546
47547 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
47548 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47549 }
47551
47552#ifdef FREECIV_JSON_CONNECTION
47553 /* Enter array. */
47554 field_addr.sub_location = plocation_elem_new(0);
47555#endif /* FREECIV_JSON_CONNECTION */
47556
47557 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
47558#ifdef FREECIV_JSON_CONNECTION
47559 /* Next array element */
47560 field_addr.sub_location->number = i;
47561#endif /* FREECIV_JSON_CONNECTION */
47562
47563 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
47564 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
47565 }
47566 }
47567
47568#ifdef FREECIV_JSON_CONNECTION
47569 /* Exit array. */
47570 FC_FREE(field_addr.sub_location);
47571#endif /* FREECIV_JSON_CONNECTION */
47572 }
47573 }
47574
47575 if (BV_ISSET(fields, 17)) {
47576 log_packet_detailed(" got field 'vision_radius_sq'");
47577
47578#ifdef FREECIV_JSON_CONNECTION
47579 field_addr.name = "vision_radius_sq";
47580#endif /* FREECIV_JSON_CONNECTION */
47581
47582 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
47583 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
47584 }
47585 }
47586
47587 if (BV_ISSET(fields, 18)) {
47588 log_packet_detailed(" got field 'transport_capacity'");
47589
47590#ifdef FREECIV_JSON_CONNECTION
47591 field_addr.name = "transport_capacity";
47592#endif /* FREECIV_JSON_CONNECTION */
47593
47594 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
47595 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
47596 }
47597 }
47598
47599 if (BV_ISSET(fields, 19)) {
47600 log_packet_detailed(" got field 'hp'");
47601
47602#ifdef FREECIV_JSON_CONNECTION
47603 field_addr.name = "hp";
47604#endif /* FREECIV_JSON_CONNECTION */
47605
47606 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
47608 }
47609 }
47610
47611 if (BV_ISSET(fields, 20)) {
47612 log_packet_detailed(" got field 'firepower'");
47613
47614#ifdef FREECIV_JSON_CONNECTION
47615 field_addr.name = "firepower";
47616#endif /* FREECIV_JSON_CONNECTION */
47617
47618 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
47619 RECEIVE_PACKET_FIELD_ERROR(firepower);
47620 }
47621 }
47622
47623 if (BV_ISSET(fields, 21)) {
47624 log_packet_detailed(" got field 'obsoleted_by'");
47625
47626#ifdef FREECIV_JSON_CONNECTION
47627 field_addr.name = "obsoleted_by";
47628#endif /* FREECIV_JSON_CONNECTION */
47629
47630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
47631 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
47632 }
47633 }
47634
47635 if (BV_ISSET(fields, 22)) {
47636 log_packet_detailed(" got field 'converted_to'");
47637
47638#ifdef FREECIV_JSON_CONNECTION
47639 field_addr.name = "converted_to";
47640#endif /* FREECIV_JSON_CONNECTION */
47641
47642 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
47643 RECEIVE_PACKET_FIELD_ERROR(converted_to);
47644 }
47645 }
47646
47647 if (BV_ISSET(fields, 23)) {
47648 log_packet_detailed(" got field 'convert_time'");
47649
47650#ifdef FREECIV_JSON_CONNECTION
47651 field_addr.name = "convert_time";
47652#endif /* FREECIV_JSON_CONNECTION */
47653
47654 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
47655 RECEIVE_PACKET_FIELD_ERROR(convert_time);
47656 }
47657 }
47658
47659 if (BV_ISSET(fields, 24)) {
47660 log_packet_detailed(" got field 'fuel'");
47661
47662#ifdef FREECIV_JSON_CONNECTION
47663 field_addr.name = "fuel";
47664#endif /* FREECIV_JSON_CONNECTION */
47665
47666 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
47668 }
47669 }
47670
47671 if (BV_ISSET(fields, 25)) {
47672 log_packet_detailed(" got field 'happy_cost'");
47673
47674#ifdef FREECIV_JSON_CONNECTION
47675 field_addr.name = "happy_cost";
47676#endif /* FREECIV_JSON_CONNECTION */
47677
47678 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
47679 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
47680 }
47681 }
47682
47683 if (BV_ISSET(fields, 26)) {
47684 log_packet_detailed(" got field 'upkeep'");
47685
47686#ifdef FREECIV_JSON_CONNECTION
47687 field_addr.name = "upkeep";
47688#endif /* FREECIV_JSON_CONNECTION */
47689
47690 {
47691 int i;
47692
47693
47694#ifdef FREECIV_JSON_CONNECTION
47695 /* Enter array. */
47696 field_addr.sub_location = plocation_elem_new(0);
47697#endif /* FREECIV_JSON_CONNECTION */
47698
47699 for (i = 0; i < O_LAST; i++) {
47700#ifdef FREECIV_JSON_CONNECTION
47701 /* Next array element */
47702 field_addr.sub_location->number = i;
47703#endif /* FREECIV_JSON_CONNECTION */
47704
47705 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
47707 }
47708 }
47709
47710#ifdef FREECIV_JSON_CONNECTION
47711 /* Exit array. */
47712 FC_FREE(field_addr.sub_location);
47713#endif /* FREECIV_JSON_CONNECTION */
47714 }
47715 }
47716
47717 if (BV_ISSET(fields, 27)) {
47718 log_packet_detailed(" got field 'paratroopers_range'");
47719
47720#ifdef FREECIV_JSON_CONNECTION
47721 field_addr.name = "paratroopers_range";
47722#endif /* FREECIV_JSON_CONNECTION */
47723
47724 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
47725 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
47726 }
47727 }
47728
47729 if (BV_ISSET(fields, 28)) {
47730 log_packet_detailed(" got field 'veteran_levels'");
47731
47732#ifdef FREECIV_JSON_CONNECTION
47733 field_addr.name = "veteran_levels";
47734#endif /* FREECIV_JSON_CONNECTION */
47735
47736 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
47737 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
47738 }
47739 }
47740
47741 if (BV_ISSET(fields, 29)) {
47742 log_packet_detailed(" got field 'veteran_name'");
47743
47744#ifdef FREECIV_JSON_CONNECTION
47745 field_addr.name = "veteran_name";
47746#endif /* FREECIV_JSON_CONNECTION */
47747
47748 {
47749 int i;
47750
47751 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47752 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
47753 }
47754
47755#ifdef FREECIV_JSON_CONNECTION
47756 /* Enter array. */
47757 field_addr.sub_location = plocation_elem_new(0);
47758#endif /* FREECIV_JSON_CONNECTION */
47759
47760 for (i = 0; i < real_packet->veteran_levels; i++) {
47761#ifdef FREECIV_JSON_CONNECTION
47762 /* Next array element */
47763 field_addr.sub_location->number = i;
47764#endif /* FREECIV_JSON_CONNECTION */
47765
47766 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
47767 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
47768 }
47769 }
47770
47771#ifdef FREECIV_JSON_CONNECTION
47772 /* Exit array. */
47773 FC_FREE(field_addr.sub_location);
47774#endif /* FREECIV_JSON_CONNECTION */
47775 }
47776 }
47777
47778 if (BV_ISSET(fields, 30)) {
47779 log_packet_detailed(" got field 'power_fact'");
47780
47781#ifdef FREECIV_JSON_CONNECTION
47782 field_addr.name = "power_fact";
47783#endif /* FREECIV_JSON_CONNECTION */
47784
47785 {
47786 int i;
47787
47788 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47789 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
47790 }
47791
47792#ifdef FREECIV_JSON_CONNECTION
47793 /* Enter array. */
47794 field_addr.sub_location = plocation_elem_new(0);
47795#endif /* FREECIV_JSON_CONNECTION */
47796
47797 for (i = 0; i < real_packet->veteran_levels; i++) {
47798#ifdef FREECIV_JSON_CONNECTION
47799 /* Next array element */
47800 field_addr.sub_location->number = i;
47801#endif /* FREECIV_JSON_CONNECTION */
47802
47803 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
47804 RECEIVE_PACKET_FIELD_ERROR(power_fact);
47805 }
47806 }
47807
47808#ifdef FREECIV_JSON_CONNECTION
47809 /* Exit array. */
47810 FC_FREE(field_addr.sub_location);
47811#endif /* FREECIV_JSON_CONNECTION */
47812 }
47813 }
47814
47815 if (BV_ISSET(fields, 31)) {
47816 log_packet_detailed(" got field 'move_bonus'");
47817
47818#ifdef FREECIV_JSON_CONNECTION
47819 field_addr.name = "move_bonus";
47820#endif /* FREECIV_JSON_CONNECTION */
47821
47822 {
47823 int i;
47824
47825 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47826 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
47827 }
47828
47829#ifdef FREECIV_JSON_CONNECTION
47830 /* Enter array. */
47831 field_addr.sub_location = plocation_elem_new(0);
47832#endif /* FREECIV_JSON_CONNECTION */
47833
47834 for (i = 0; i < real_packet->veteran_levels; i++) {
47835#ifdef FREECIV_JSON_CONNECTION
47836 /* Next array element */
47837 field_addr.sub_location->number = i;
47838#endif /* FREECIV_JSON_CONNECTION */
47839
47840 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
47841 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
47842 }
47843 }
47844
47845#ifdef FREECIV_JSON_CONNECTION
47846 /* Exit array. */
47847 FC_FREE(field_addr.sub_location);
47848#endif /* FREECIV_JSON_CONNECTION */
47849 }
47850 }
47851
47852 if (BV_ISSET(fields, 32)) {
47853 log_packet_detailed(" got field 'base_raise_chance'");
47854
47855#ifdef FREECIV_JSON_CONNECTION
47856 field_addr.name = "base_raise_chance";
47857#endif /* FREECIV_JSON_CONNECTION */
47858
47859 {
47860 int i;
47861
47862 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47863 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
47864 }
47865
47866#ifdef FREECIV_JSON_CONNECTION
47867 /* Enter array. */
47868 field_addr.sub_location = plocation_elem_new(0);
47869#endif /* FREECIV_JSON_CONNECTION */
47870
47871 for (i = 0; i < real_packet->veteran_levels; i++) {
47872#ifdef FREECIV_JSON_CONNECTION
47873 /* Next array element */
47874 field_addr.sub_location->number = i;
47875#endif /* FREECIV_JSON_CONNECTION */
47876
47877 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
47878 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
47879 }
47880 }
47881
47882#ifdef FREECIV_JSON_CONNECTION
47883 /* Exit array. */
47884 FC_FREE(field_addr.sub_location);
47885#endif /* FREECIV_JSON_CONNECTION */
47886 }
47887 }
47888
47889 if (BV_ISSET(fields, 33)) {
47890 log_packet_detailed(" got field 'work_raise_chance'");
47891
47892#ifdef FREECIV_JSON_CONNECTION
47893 field_addr.name = "work_raise_chance";
47894#endif /* FREECIV_JSON_CONNECTION */
47895
47896 {
47897 int i;
47898
47899 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47900 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
47901 }
47902
47903#ifdef FREECIV_JSON_CONNECTION
47904 /* Enter array. */
47905 field_addr.sub_location = plocation_elem_new(0);
47906#endif /* FREECIV_JSON_CONNECTION */
47907
47908 for (i = 0; i < real_packet->veteran_levels; i++) {
47909#ifdef FREECIV_JSON_CONNECTION
47910 /* Next array element */
47911 field_addr.sub_location->number = i;
47912#endif /* FREECIV_JSON_CONNECTION */
47913
47914 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
47915 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
47916 }
47917 }
47918
47919#ifdef FREECIV_JSON_CONNECTION
47920 /* Exit array. */
47921 FC_FREE(field_addr.sub_location);
47922#endif /* FREECIV_JSON_CONNECTION */
47923 }
47924 }
47925
47926 if (BV_ISSET(fields, 34)) {
47927 log_packet_detailed(" got field 'bombard_rate'");
47928
47929#ifdef FREECIV_JSON_CONNECTION
47930 field_addr.name = "bombard_rate";
47931#endif /* FREECIV_JSON_CONNECTION */
47932
47933 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
47934 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
47935 }
47936 }
47937
47938 if (BV_ISSET(fields, 35)) {
47939 log_packet_detailed(" got field 'city_size'");
47940
47941#ifdef FREECIV_JSON_CONNECTION
47942 field_addr.name = "city_size";
47943#endif /* FREECIV_JSON_CONNECTION */
47944
47945 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
47946 RECEIVE_PACKET_FIELD_ERROR(city_size);
47947 }
47948 }
47949
47950 if (BV_ISSET(fields, 36)) {
47951 log_packet_detailed(" got field 'city_slots'");
47952
47953#ifdef FREECIV_JSON_CONNECTION
47954 field_addr.name = "city_slots";
47955#endif /* FREECIV_JSON_CONNECTION */
47956
47957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
47958 RECEIVE_PACKET_FIELD_ERROR(city_slots);
47959 }
47960 }
47961
47962 if (BV_ISSET(fields, 37)) {
47963 log_packet_detailed(" got field 'tp_defense'");
47964
47965#ifdef FREECIV_JSON_CONNECTION
47966 field_addr.name = "tp_defense";
47967#endif /* FREECIV_JSON_CONNECTION */
47968
47969 {
47970 int readin;
47971
47972 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47973 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
47974 }
47975 real_packet->tp_defense = readin;
47976 }
47977 }
47978
47979 if (BV_ISSET(fields, 38)) {
47980 log_packet_detailed(" got field 'cargo'");
47981
47982#ifdef FREECIV_JSON_CONNECTION
47983 field_addr.name = "cargo";
47984#endif /* FREECIV_JSON_CONNECTION */
47985
47986 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
47988 }
47989 }
47990
47991 if (BV_ISSET(fields, 39)) {
47992 log_packet_detailed(" got field 'targets'");
47993
47994#ifdef FREECIV_JSON_CONNECTION
47995 field_addr.name = "targets";
47996#endif /* FREECIV_JSON_CONNECTION */
47997
47998 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
48000 }
48001 }
48002
48003 if (BV_ISSET(fields, 40)) {
48004 log_packet_detailed(" got field 'embarks'");
48005
48006#ifdef FREECIV_JSON_CONNECTION
48007 field_addr.name = "embarks";
48008#endif /* FREECIV_JSON_CONNECTION */
48009
48010 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
48012 }
48013 }
48014
48015 if (BV_ISSET(fields, 41)) {
48016 log_packet_detailed(" got field 'disembarks'");
48017
48018#ifdef FREECIV_JSON_CONNECTION
48019 field_addr.name = "disembarks";
48020#endif /* FREECIV_JSON_CONNECTION */
48021
48022 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
48023 RECEIVE_PACKET_FIELD_ERROR(disembarks);
48024 }
48025 }
48026
48027 if (BV_ISSET(fields, 42)) {
48028 log_packet_detailed(" got field 'vlayer'");
48029
48030#ifdef FREECIV_JSON_CONNECTION
48031 field_addr.name = "vlayer";
48032#endif /* FREECIV_JSON_CONNECTION */
48033
48034 {
48035 int readin;
48036
48037 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48039 }
48040 real_packet->vlayer = readin;
48041 }
48042 }
48043
48044 if (BV_ISSET(fields, 43)) {
48045 log_packet_detailed(" got field 'helptext'");
48046
48047#ifdef FREECIV_JSON_CONNECTION
48048 field_addr.name = "helptext";
48049#endif /* FREECIV_JSON_CONNECTION */
48050
48051 {
48052 int i;
48053
48054 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48056 }
48057 strvec_reserve(real_packet->helptext, i);
48058
48059#ifdef FREECIV_JSON_CONNECTION
48060 /* Enter array. */
48061 field_addr.sub_location = plocation_elem_new(0);
48062#endif /* FREECIV_JSON_CONNECTION */
48063
48064 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
48065#ifdef FREECIV_JSON_CONNECTION
48066 /* Next array element */
48067 field_addr.sub_location->number = i;
48068#endif /* FREECIV_JSON_CONNECTION */
48069
48070 {
48071 char readin[MAX_LEN_PACKET];
48072
48073 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
48074 || !strvec_set(real_packet->helptext, i, readin)) {
48076 }
48077 }
48078 }
48079
48080#ifdef FREECIV_JSON_CONNECTION
48081 /* Exit array. */
48082 FC_FREE(field_addr.sub_location);
48083#endif /* FREECIV_JSON_CONNECTION */
48084 }
48085 }
48086
48087 if (BV_ISSET(fields, 44)) {
48088 log_packet_detailed(" got field 'flags'");
48089
48090#ifdef FREECIV_JSON_CONNECTION
48091 field_addr.name = "flags";
48092#endif /* FREECIV_JSON_CONNECTION */
48093
48094 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48096 }
48097 }
48098
48099 if (BV_ISSET(fields, 45)) {
48100 log_packet_detailed(" got field 'roles'");
48101
48102#ifdef FREECIV_JSON_CONNECTION
48103 field_addr.name = "roles";
48104#endif /* FREECIV_JSON_CONNECTION */
48105
48106 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48108 }
48109 }
48110
48111 real_packet->worker = BV_ISSET(fields, 46);
48112
48113 if (nullptr == old) {
48114 old = fc_malloc(sizeof(*old));
48116 old->id = real_packet->id;
48117 sz_strlcpy(old->name, real_packet->name);
48118 sz_strlcpy(old->rule_name, real_packet->rule_name);
48119 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48120 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48121 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48122 sz_strlcpy(old->sound_move, real_packet->sound_move);
48123 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48124 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48125 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48126 old->unit_class_id = real_packet->unit_class_id;
48127 old->build_cost = real_packet->build_cost;
48128 old->pop_cost = real_packet->pop_cost;
48129 old->attack_strength = real_packet->attack_strength;
48130 old->defense_strength = real_packet->defense_strength;
48131 old->move_rate = real_packet->move_rate;
48132 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48133 old->vision_radius_sq = real_packet->vision_radius_sq;
48134 old->transport_capacity = real_packet->transport_capacity;
48135 old->hp = real_packet->hp;
48136 old->firepower = real_packet->firepower;
48137 old->obsoleted_by = real_packet->obsoleted_by;
48138 old->converted_to = real_packet->converted_to;
48139 old->convert_time = real_packet->convert_time;
48140 old->fuel = real_packet->fuel;
48141 old->happy_cost = real_packet->happy_cost;
48142 {
48143 int i;
48144
48145 for (i = 0; i < O_LAST; i++) {
48146 old->upkeep[i] = real_packet->upkeep[i];
48147 }
48148 }
48149 old->paratroopers_range = real_packet->paratroopers_range;
48150 old->veteran_levels = real_packet->veteran_levels;
48151 {
48152 int i;
48153
48154 for (i = 0; i < real_packet->veteran_levels; i++) {
48155 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48156 }
48157 }
48158 {
48159 int i;
48160
48161 for (i = 0; i < real_packet->veteran_levels; i++) {
48162 old->power_fact[i] = real_packet->power_fact[i];
48163 }
48164 }
48165 {
48166 int i;
48167
48168 for (i = 0; i < real_packet->veteran_levels; i++) {
48169 old->move_bonus[i] = real_packet->move_bonus[i];
48170 }
48171 }
48172 {
48173 int i;
48174
48175 for (i = 0; i < real_packet->veteran_levels; i++) {
48176 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48177 }
48178 }
48179 {
48180 int i;
48181
48182 for (i = 0; i < real_packet->veteran_levels; i++) {
48183 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48184 }
48185 }
48186 old->bombard_rate = real_packet->bombard_rate;
48187 old->city_size = real_packet->city_size;
48188 old->city_slots = real_packet->city_slots;
48189 old->tp_defense = real_packet->tp_defense;
48190 old->cargo = real_packet->cargo;
48191 old->targets = real_packet->targets;
48192 old->embarks = real_packet->embarks;
48193 old->disembarks = real_packet->disembarks;
48194 old->vlayer = real_packet->vlayer;
48195 if (real_packet->helptext) {
48196 strvec_copy(old->helptext, real_packet->helptext);
48197 } else {
48198 strvec_clear(old->helptext);
48199 }
48200 old->flags = real_packet->flags;
48201 old->roles = real_packet->roles;
48202 old->worker = real_packet->worker;
48204 } else {
48205 old->id = real_packet->id;
48206 sz_strlcpy(old->name, real_packet->name);
48207 sz_strlcpy(old->rule_name, real_packet->rule_name);
48208 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
48209 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
48210 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
48211 sz_strlcpy(old->sound_move, real_packet->sound_move);
48212 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
48213 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
48214 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
48215 old->unit_class_id = real_packet->unit_class_id;
48216 old->build_cost = real_packet->build_cost;
48217 old->pop_cost = real_packet->pop_cost;
48218 old->attack_strength = real_packet->attack_strength;
48219 old->defense_strength = real_packet->defense_strength;
48220 old->move_rate = real_packet->move_rate;
48221 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
48222 old->vision_radius_sq = real_packet->vision_radius_sq;
48223 old->transport_capacity = real_packet->transport_capacity;
48224 old->hp = real_packet->hp;
48225 old->firepower = real_packet->firepower;
48226 old->obsoleted_by = real_packet->obsoleted_by;
48227 old->converted_to = real_packet->converted_to;
48228 old->convert_time = real_packet->convert_time;
48229 old->fuel = real_packet->fuel;
48230 old->happy_cost = real_packet->happy_cost;
48231 {
48232 int i;
48233
48234 for (i = 0; i < O_LAST; i++) {
48235 old->upkeep[i] = real_packet->upkeep[i];
48236 }
48237 }
48238 old->paratroopers_range = real_packet->paratroopers_range;
48239 old->veteran_levels = real_packet->veteran_levels;
48240 {
48241 int i;
48242
48243 for (i = 0; i < real_packet->veteran_levels; i++) {
48244 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
48245 }
48246 }
48247 {
48248 int i;
48249
48250 for (i = 0; i < real_packet->veteran_levels; i++) {
48251 old->power_fact[i] = real_packet->power_fact[i];
48252 }
48253 }
48254 {
48255 int i;
48256
48257 for (i = 0; i < real_packet->veteran_levels; i++) {
48258 old->move_bonus[i] = real_packet->move_bonus[i];
48259 }
48260 }
48261 {
48262 int i;
48263
48264 for (i = 0; i < real_packet->veteran_levels; i++) {
48265 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
48266 }
48267 }
48268 {
48269 int i;
48270
48271 for (i = 0; i < real_packet->veteran_levels; i++) {
48272 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
48273 }
48274 }
48275 old->bombard_rate = real_packet->bombard_rate;
48276 old->city_size = real_packet->city_size;
48277 old->city_slots = real_packet->city_slots;
48278 old->tp_defense = real_packet->tp_defense;
48279 old->cargo = real_packet->cargo;
48280 old->targets = real_packet->targets;
48281 old->embarks = real_packet->embarks;
48282 old->disembarks = real_packet->disembarks;
48283 old->vlayer = real_packet->vlayer;
48284 if (real_packet->helptext) {
48285 strvec_copy(old->helptext, real_packet->helptext);
48286 } else {
48287 strvec_clear(old->helptext);
48288 }
48289 old->flags = real_packet->flags;
48290 old->roles = real_packet->roles;
48291 old->worker = real_packet->worker;
48292 }
48293
48294#else /* FREECIV_DELTA_PROTOCOL */
48295#ifdef FREECIV_JSON_CONNECTION
48296 field_addr.name = "id";
48297#endif /* FREECIV_JSON_CONNECTION */
48298
48299 {
48300 int readin;
48301
48302 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
48304 }
48305 real_packet->id = readin;
48306 }
48307
48308#ifdef FREECIV_JSON_CONNECTION
48309 field_addr.name = "name";
48310#endif /* FREECIV_JSON_CONNECTION */
48311
48312 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
48314 }
48315
48316#ifdef FREECIV_JSON_CONNECTION
48317 field_addr.name = "rule_name";
48318#endif /* FREECIV_JSON_CONNECTION */
48319
48320 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
48321 RECEIVE_PACKET_FIELD_ERROR(rule_name);
48322 }
48323
48324#ifdef FREECIV_JSON_CONNECTION
48325 field_addr.name = "graphic_str";
48326#endif /* FREECIV_JSON_CONNECTION */
48327
48328 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
48329 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
48330 }
48331
48332#ifdef FREECIV_JSON_CONNECTION
48333 field_addr.name = "graphic_alt";
48334#endif /* FREECIV_JSON_CONNECTION */
48335
48336 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
48337 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
48338 }
48339
48340#ifdef FREECIV_JSON_CONNECTION
48341 field_addr.name = "graphic_alt2";
48342#endif /* FREECIV_JSON_CONNECTION */
48343
48344 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
48345 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
48346 }
48347
48348#ifdef FREECIV_JSON_CONNECTION
48349 field_addr.name = "sound_move";
48350#endif /* FREECIV_JSON_CONNECTION */
48351
48352 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
48353 RECEIVE_PACKET_FIELD_ERROR(sound_move);
48354 }
48355
48356#ifdef FREECIV_JSON_CONNECTION
48357 field_addr.name = "sound_move_alt";
48358#endif /* FREECIV_JSON_CONNECTION */
48359
48360 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
48361 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
48362 }
48363
48364#ifdef FREECIV_JSON_CONNECTION
48365 field_addr.name = "sound_fight";
48366#endif /* FREECIV_JSON_CONNECTION */
48367
48368 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
48369 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
48370 }
48371
48372#ifdef FREECIV_JSON_CONNECTION
48373 field_addr.name = "sound_fight_alt";
48374#endif /* FREECIV_JSON_CONNECTION */
48375
48376 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
48377 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
48378 }
48379
48380#ifdef FREECIV_JSON_CONNECTION
48381 field_addr.name = "unit_class_id";
48382#endif /* FREECIV_JSON_CONNECTION */
48383
48384 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
48385 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
48386 }
48387
48388#ifdef FREECIV_JSON_CONNECTION
48389 field_addr.name = "build_cost";
48390#endif /* FREECIV_JSON_CONNECTION */
48391
48392 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
48393 RECEIVE_PACKET_FIELD_ERROR(build_cost);
48394 }
48395
48396#ifdef FREECIV_JSON_CONNECTION
48397 field_addr.name = "pop_cost";
48398#endif /* FREECIV_JSON_CONNECTION */
48399
48400 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
48402 }
48403
48404#ifdef FREECIV_JSON_CONNECTION
48405 field_addr.name = "attack_strength";
48406#endif /* FREECIV_JSON_CONNECTION */
48407
48408 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
48409 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
48410 }
48411
48412#ifdef FREECIV_JSON_CONNECTION
48413 field_addr.name = "defense_strength";
48414#endif /* FREECIV_JSON_CONNECTION */
48415
48416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
48417 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
48418 }
48419
48420#ifdef FREECIV_JSON_CONNECTION
48421 field_addr.name = "move_rate";
48422#endif /* FREECIV_JSON_CONNECTION */
48423
48424 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
48425 RECEIVE_PACKET_FIELD_ERROR(move_rate);
48426 }
48427
48428#ifdef FREECIV_JSON_CONNECTION
48429 field_addr.name = "build_reqs";
48430#endif /* FREECIV_JSON_CONNECTION */
48431
48432 {
48433 int i;
48434
48435 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48436 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48437 }
48439
48440#ifdef FREECIV_JSON_CONNECTION
48441 /* Enter array. */
48442 field_addr.sub_location = plocation_elem_new(0);
48443#endif /* FREECIV_JSON_CONNECTION */
48444
48445 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
48446#ifdef FREECIV_JSON_CONNECTION
48447 /* Next array element */
48448 field_addr.sub_location->number = i;
48449#endif /* FREECIV_JSON_CONNECTION */
48450
48451 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs.p[i])) {
48452 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
48453 }
48454 }
48455
48456#ifdef FREECIV_JSON_CONNECTION
48457 /* Exit array. */
48458 FC_FREE(field_addr.sub_location);
48459#endif /* FREECIV_JSON_CONNECTION */
48460 }
48461
48462#ifdef FREECIV_JSON_CONNECTION
48463 field_addr.name = "vision_radius_sq";
48464#endif /* FREECIV_JSON_CONNECTION */
48465
48466 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
48467 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
48468 }
48469
48470#ifdef FREECIV_JSON_CONNECTION
48471 field_addr.name = "transport_capacity";
48472#endif /* FREECIV_JSON_CONNECTION */
48473
48474 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
48475 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
48476 }
48477
48478#ifdef FREECIV_JSON_CONNECTION
48479 field_addr.name = "hp";
48480#endif /* FREECIV_JSON_CONNECTION */
48481
48482 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
48484 }
48485
48486#ifdef FREECIV_JSON_CONNECTION
48487 field_addr.name = "firepower";
48488#endif /* FREECIV_JSON_CONNECTION */
48489
48490 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
48491 RECEIVE_PACKET_FIELD_ERROR(firepower);
48492 }
48493
48494#ifdef FREECIV_JSON_CONNECTION
48495 field_addr.name = "obsoleted_by";
48496#endif /* FREECIV_JSON_CONNECTION */
48497
48498 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
48499 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
48500 }
48501
48502#ifdef FREECIV_JSON_CONNECTION
48503 field_addr.name = "converted_to";
48504#endif /* FREECIV_JSON_CONNECTION */
48505
48506 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
48507 RECEIVE_PACKET_FIELD_ERROR(converted_to);
48508 }
48509
48510#ifdef FREECIV_JSON_CONNECTION
48511 field_addr.name = "convert_time";
48512#endif /* FREECIV_JSON_CONNECTION */
48513
48514 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
48515 RECEIVE_PACKET_FIELD_ERROR(convert_time);
48516 }
48517
48518#ifdef FREECIV_JSON_CONNECTION
48519 field_addr.name = "fuel";
48520#endif /* FREECIV_JSON_CONNECTION */
48521
48522 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
48524 }
48525
48526#ifdef FREECIV_JSON_CONNECTION
48527 field_addr.name = "happy_cost";
48528#endif /* FREECIV_JSON_CONNECTION */
48529
48530 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
48531 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
48532 }
48533
48534#ifdef FREECIV_JSON_CONNECTION
48535 field_addr.name = "upkeep";
48536#endif /* FREECIV_JSON_CONNECTION */
48537
48538 {
48539 int i;
48540
48541
48542#ifdef FREECIV_JSON_CONNECTION
48543 /* Enter array. */
48544 field_addr.sub_location = plocation_elem_new(0);
48545#endif /* FREECIV_JSON_CONNECTION */
48546
48547 for (i = 0; i < O_LAST; i++) {
48548#ifdef FREECIV_JSON_CONNECTION
48549 /* Next array element */
48550 field_addr.sub_location->number = i;
48551#endif /* FREECIV_JSON_CONNECTION */
48552
48553 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
48555 }
48556 }
48557
48558#ifdef FREECIV_JSON_CONNECTION
48559 /* Exit array. */
48560 FC_FREE(field_addr.sub_location);
48561#endif /* FREECIV_JSON_CONNECTION */
48562 }
48563
48564#ifdef FREECIV_JSON_CONNECTION
48565 field_addr.name = "paratroopers_range";
48566#endif /* FREECIV_JSON_CONNECTION */
48567
48568 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
48569 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
48570 }
48571
48572#ifdef FREECIV_JSON_CONNECTION
48573 field_addr.name = "veteran_levels";
48574#endif /* FREECIV_JSON_CONNECTION */
48575
48576 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
48577 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
48578 }
48579
48580#ifdef FREECIV_JSON_CONNECTION
48581 field_addr.name = "veteran_name";
48582#endif /* FREECIV_JSON_CONNECTION */
48583
48584 {
48585 int i;
48586
48587 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48588 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
48589 }
48590
48591#ifdef FREECIV_JSON_CONNECTION
48592 /* Enter array. */
48593 field_addr.sub_location = plocation_elem_new(0);
48594#endif /* FREECIV_JSON_CONNECTION */
48595
48596 for (i = 0; i < real_packet->veteran_levels; i++) {
48597#ifdef FREECIV_JSON_CONNECTION
48598 /* Next array element */
48599 field_addr.sub_location->number = i;
48600#endif /* FREECIV_JSON_CONNECTION */
48601
48602 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
48603 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
48604 }
48605 }
48606
48607#ifdef FREECIV_JSON_CONNECTION
48608 /* Exit array. */
48609 FC_FREE(field_addr.sub_location);
48610#endif /* FREECIV_JSON_CONNECTION */
48611 }
48612
48613#ifdef FREECIV_JSON_CONNECTION
48614 field_addr.name = "power_fact";
48615#endif /* FREECIV_JSON_CONNECTION */
48616
48617 {
48618 int i;
48619
48620 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48621 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
48622 }
48623
48624#ifdef FREECIV_JSON_CONNECTION
48625 /* Enter array. */
48626 field_addr.sub_location = plocation_elem_new(0);
48627#endif /* FREECIV_JSON_CONNECTION */
48628
48629 for (i = 0; i < real_packet->veteran_levels; i++) {
48630#ifdef FREECIV_JSON_CONNECTION
48631 /* Next array element */
48632 field_addr.sub_location->number = i;
48633#endif /* FREECIV_JSON_CONNECTION */
48634
48635 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
48636 RECEIVE_PACKET_FIELD_ERROR(power_fact);
48637 }
48638 }
48639
48640#ifdef FREECIV_JSON_CONNECTION
48641 /* Exit array. */
48642 FC_FREE(field_addr.sub_location);
48643#endif /* FREECIV_JSON_CONNECTION */
48644 }
48645
48646#ifdef FREECIV_JSON_CONNECTION
48647 field_addr.name = "move_bonus";
48648#endif /* FREECIV_JSON_CONNECTION */
48649
48650 {
48651 int i;
48652
48653 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48654 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
48655 }
48656
48657#ifdef FREECIV_JSON_CONNECTION
48658 /* Enter array. */
48659 field_addr.sub_location = plocation_elem_new(0);
48660#endif /* FREECIV_JSON_CONNECTION */
48661
48662 for (i = 0; i < real_packet->veteran_levels; i++) {
48663#ifdef FREECIV_JSON_CONNECTION
48664 /* Next array element */
48665 field_addr.sub_location->number = i;
48666#endif /* FREECIV_JSON_CONNECTION */
48667
48668 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
48669 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
48670 }
48671 }
48672
48673#ifdef FREECIV_JSON_CONNECTION
48674 /* Exit array. */
48675 FC_FREE(field_addr.sub_location);
48676#endif /* FREECIV_JSON_CONNECTION */
48677 }
48678
48679#ifdef FREECIV_JSON_CONNECTION
48680 field_addr.name = "base_raise_chance";
48681#endif /* FREECIV_JSON_CONNECTION */
48682
48683 {
48684 int i;
48685
48686 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48687 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
48688 }
48689
48690#ifdef FREECIV_JSON_CONNECTION
48691 /* Enter array. */
48692 field_addr.sub_location = plocation_elem_new(0);
48693#endif /* FREECIV_JSON_CONNECTION */
48694
48695 for (i = 0; i < real_packet->veteran_levels; i++) {
48696#ifdef FREECIV_JSON_CONNECTION
48697 /* Next array element */
48698 field_addr.sub_location->number = i;
48699#endif /* FREECIV_JSON_CONNECTION */
48700
48701 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
48702 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
48703 }
48704 }
48705
48706#ifdef FREECIV_JSON_CONNECTION
48707 /* Exit array. */
48708 FC_FREE(field_addr.sub_location);
48709#endif /* FREECIV_JSON_CONNECTION */
48710 }
48711
48712#ifdef FREECIV_JSON_CONNECTION
48713 field_addr.name = "work_raise_chance";
48714#endif /* FREECIV_JSON_CONNECTION */
48715
48716 {
48717 int i;
48718
48719 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
48720 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
48721 }
48722
48723#ifdef FREECIV_JSON_CONNECTION
48724 /* Enter array. */
48725 field_addr.sub_location = plocation_elem_new(0);
48726#endif /* FREECIV_JSON_CONNECTION */
48727
48728 for (i = 0; i < real_packet->veteran_levels; i++) {
48729#ifdef FREECIV_JSON_CONNECTION
48730 /* Next array element */
48731 field_addr.sub_location->number = i;
48732#endif /* FREECIV_JSON_CONNECTION */
48733
48734 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
48735 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
48736 }
48737 }
48738
48739#ifdef FREECIV_JSON_CONNECTION
48740 /* Exit array. */
48741 FC_FREE(field_addr.sub_location);
48742#endif /* FREECIV_JSON_CONNECTION */
48743 }
48744
48745#ifdef FREECIV_JSON_CONNECTION
48746 field_addr.name = "bombard_rate";
48747#endif /* FREECIV_JSON_CONNECTION */
48748
48749 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
48750 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
48751 }
48752
48753#ifdef FREECIV_JSON_CONNECTION
48754 field_addr.name = "city_size";
48755#endif /* FREECIV_JSON_CONNECTION */
48756
48757 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
48758 RECEIVE_PACKET_FIELD_ERROR(city_size);
48759 }
48760
48761#ifdef FREECIV_JSON_CONNECTION
48762 field_addr.name = "city_slots";
48763#endif /* FREECIV_JSON_CONNECTION */
48764
48765 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
48766 RECEIVE_PACKET_FIELD_ERROR(city_slots);
48767 }
48768
48769#ifdef FREECIV_JSON_CONNECTION
48770 field_addr.name = "tp_defense";
48771#endif /* FREECIV_JSON_CONNECTION */
48772
48773 {
48774 int readin;
48775
48776 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48777 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
48778 }
48779 real_packet->tp_defense = readin;
48780 }
48781
48782#ifdef FREECIV_JSON_CONNECTION
48783 field_addr.name = "cargo";
48784#endif /* FREECIV_JSON_CONNECTION */
48785
48786 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
48788 }
48789
48790#ifdef FREECIV_JSON_CONNECTION
48791 field_addr.name = "targets";
48792#endif /* FREECIV_JSON_CONNECTION */
48793
48794 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
48796 }
48797
48798#ifdef FREECIV_JSON_CONNECTION
48799 field_addr.name = "embarks";
48800#endif /* FREECIV_JSON_CONNECTION */
48801
48802 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
48804 }
48805
48806#ifdef FREECIV_JSON_CONNECTION
48807 field_addr.name = "disembarks";
48808#endif /* FREECIV_JSON_CONNECTION */
48809
48810 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
48811 RECEIVE_PACKET_FIELD_ERROR(disembarks);
48812 }
48813
48814#ifdef FREECIV_JSON_CONNECTION
48815 field_addr.name = "vlayer";
48816#endif /* FREECIV_JSON_CONNECTION */
48817
48818 {
48819 int readin;
48820
48821 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48823 }
48824 real_packet->vlayer = readin;
48825 }
48826
48827#ifdef FREECIV_JSON_CONNECTION
48828 field_addr.name = "helptext";
48829#endif /* FREECIV_JSON_CONNECTION */
48830
48831 {
48832 int i;
48833
48834 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
48836 }
48837 strvec_reserve(real_packet->helptext, i);
48838
48839#ifdef FREECIV_JSON_CONNECTION
48840 /* Enter array. */
48841 field_addr.sub_location = plocation_elem_new(0);
48842#endif /* FREECIV_JSON_CONNECTION */
48843
48844 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
48845#ifdef FREECIV_JSON_CONNECTION
48846 /* Next array element */
48847 field_addr.sub_location->number = i;
48848#endif /* FREECIV_JSON_CONNECTION */
48849
48850 {
48851 char readin[MAX_LEN_PACKET];
48852
48853 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
48854 || !strvec_set(real_packet->helptext, i, readin)) {
48856 }
48857 }
48858 }
48859
48860#ifdef FREECIV_JSON_CONNECTION
48861 /* Exit array. */
48862 FC_FREE(field_addr.sub_location);
48863#endif /* FREECIV_JSON_CONNECTION */
48864 }
48865
48866#ifdef FREECIV_JSON_CONNECTION
48867 field_addr.name = "flags";
48868#endif /* FREECIV_JSON_CONNECTION */
48869
48870 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48872 }
48873
48874#ifdef FREECIV_JSON_CONNECTION
48875 field_addr.name = "roles";
48876#endif /* FREECIV_JSON_CONNECTION */
48877
48878 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
48880 }
48881
48882#ifdef FREECIV_JSON_CONNECTION
48883 field_addr.name = "worker";
48884#endif /* FREECIV_JSON_CONNECTION */
48885
48886 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->worker)) {
48888 }
48889#endif /* FREECIV_DELTA_PROTOCOL */
48890
48892#undef FREE_PACKET_STRUCT
48893}
48894
48895static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
48896{
48897 const struct packet_ruleset_unit *real_packet = packet;
48898 int e;
48900
48901 log_packet_detailed("packet_ruleset_unit_100: sending info about ()");
48902
48903#ifdef FREECIV_DELTA_PROTOCOL
48905 struct packet_ruleset_unit *old;
48906 bool differ;
48907 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT;
48908
48909 if (nullptr == *hash) {
48911 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit);
48912 }
48913 BV_CLR_ALL(fields);
48914
48915 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
48916 old = fc_malloc(sizeof(*old));
48917 /* temporary bitcopy just to insert correctly */
48918 *old = *real_packet;
48921 }
48922
48923 differ = (old->id != real_packet->id);
48924 if (differ) {
48925 BV_SET(fields, 0);
48926 }
48927
48928 differ = (strcmp(old->name, real_packet->name) != 0);
48929 if (differ) {
48930 BV_SET(fields, 1);
48931 }
48932
48933 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
48934 if (differ) {
48935 BV_SET(fields, 2);
48936 }
48937
48938 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
48939 if (differ) {
48940 BV_SET(fields, 3);
48941 }
48942
48943 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
48944 if (differ) {
48945 BV_SET(fields, 4);
48946 }
48947
48948 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
48949 if (differ) {
48950 BV_SET(fields, 5);
48951 }
48952
48953 differ = (strcmp(old->sound_move, real_packet->sound_move) != 0);
48954 if (differ) {
48955 BV_SET(fields, 6);
48956 }
48957
48958 differ = (strcmp(old->sound_move_alt, real_packet->sound_move_alt) != 0);
48959 if (differ) {
48960 BV_SET(fields, 7);
48961 }
48962
48963 differ = (strcmp(old->sound_fight, real_packet->sound_fight) != 0);
48964 if (differ) {
48965 BV_SET(fields, 8);
48966 }
48967
48968 differ = (strcmp(old->sound_fight_alt, real_packet->sound_fight_alt) != 0);
48969 if (differ) {
48970 BV_SET(fields, 9);
48971 }
48972
48973 differ = (old->unit_class_id != real_packet->unit_class_id);
48974 if (differ) {
48975 BV_SET(fields, 10);
48976 }
48977
48978 differ = (old->build_cost != real_packet->build_cost);
48979 if (differ) {
48980 BV_SET(fields, 11);
48981 }
48982
48983 differ = (old->pop_cost != real_packet->pop_cost);
48984 if (differ) {
48985 BV_SET(fields, 12);
48986 }
48987
48988 differ = (old->attack_strength != real_packet->attack_strength);
48989 if (differ) {
48990 BV_SET(fields, 13);
48991 }
48992
48993 differ = (old->defense_strength != real_packet->defense_strength);
48994 if (differ) {
48995 BV_SET(fields, 14);
48996 }
48997
48998 differ = (old->move_rate != real_packet->move_rate);
48999 if (differ) {
49000 BV_SET(fields, 15);
49001 }
49002
49003 differ = (requirement_vector_size(&old->build_reqs) != requirement_vector_size(&real_packet->build_reqs));
49004 if (!differ) {
49005 int i;
49006
49007 for (i = 0; i < requirement_vector_size(&old->build_reqs); i++) {
49008 differ = !are_requirements_equal(&old->build_reqs.p[i], &real_packet->build_reqs.p[i]);
49009 if (differ) {
49010 break;
49011 }
49012 }
49013 }
49014 if (differ) {
49015 BV_SET(fields, 16);
49016 }
49017
49018 differ = (old->vision_radius_sq != real_packet->vision_radius_sq);
49019 if (differ) {
49020 BV_SET(fields, 17);
49021 }
49022
49023 differ = (old->transport_capacity != real_packet->transport_capacity);
49024 if (differ) {
49025 BV_SET(fields, 18);
49026 }
49027
49028 differ = (old->hp != real_packet->hp);
49029 if (differ) {
49030 BV_SET(fields, 19);
49031 }
49032
49033 differ = (old->firepower != real_packet->firepower);
49034 if (differ) {
49035 BV_SET(fields, 20);
49036 }
49037
49038 differ = (old->obsoleted_by != real_packet->obsoleted_by);
49039 if (differ) {
49040 BV_SET(fields, 21);
49041 }
49042
49043 differ = (old->converted_to != real_packet->converted_to);
49044 if (differ) {
49045 BV_SET(fields, 22);
49046 }
49047
49048 differ = (old->convert_time != real_packet->convert_time);
49049 if (differ) {
49050 BV_SET(fields, 23);
49051 }
49052
49053 differ = (old->fuel != real_packet->fuel);
49054 if (differ) {
49055 BV_SET(fields, 24);
49056 }
49057
49058 differ = (old->happy_cost != real_packet->happy_cost);
49059 if (differ) {
49060 BV_SET(fields, 25);
49061 }
49062
49063 differ = FALSE;
49064 {
49065 int i;
49066
49067 for (i = 0; i < O_LAST; i++) {
49068 differ = (old->upkeep[i] != real_packet->upkeep[i]);
49069 if (differ) {
49070 break;
49071 }
49072 }
49073 }
49074 if (differ) {
49075 BV_SET(fields, 26);
49076 }
49077
49078 differ = (old->paratroopers_range != real_packet->paratroopers_range);
49079 if (differ) {
49080 BV_SET(fields, 27);
49081 }
49082
49083 differ = (old->veteran_levels != real_packet->veteran_levels);
49084 if (differ) {
49085 BV_SET(fields, 28);
49086 }
49087
49088 differ = (old->veteran_levels != real_packet->veteran_levels);
49089 if (!differ) {
49090 int i;
49091
49092 for (i = 0; i < old->veteran_levels; i++) {
49093 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
49094 if (differ) {
49095 break;
49096 }
49097 }
49098 }
49099 if (differ) {
49100 BV_SET(fields, 29);
49101 }
49102
49103 differ = (old->veteran_levels != real_packet->veteran_levels);
49104 if (!differ) {
49105 int i;
49106
49107 for (i = 0; i < old->veteran_levels; i++) {
49108 differ = (old->power_fact[i] != real_packet->power_fact[i]);
49109 if (differ) {
49110 break;
49111 }
49112 }
49113 }
49114 if (differ) {
49115 BV_SET(fields, 30);
49116 }
49117
49118 differ = (old->veteran_levels != real_packet->veteran_levels);
49119 if (!differ) {
49120 int i;
49121
49122 for (i = 0; i < old->veteran_levels; i++) {
49123 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
49124 if (differ) {
49125 break;
49126 }
49127 }
49128 }
49129 if (differ) {
49130 BV_SET(fields, 31);
49131 }
49132
49133 differ = (old->veteran_levels != real_packet->veteran_levels);
49134 if (!differ) {
49135 int i;
49136
49137 for (i = 0; i < old->veteran_levels; i++) {
49138 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
49139 if (differ) {
49140 break;
49141 }
49142 }
49143 }
49144 if (differ) {
49145 BV_SET(fields, 32);
49146 }
49147
49148 differ = (old->veteran_levels != real_packet->veteran_levels);
49149 if (!differ) {
49150 int i;
49151
49152 for (i = 0; i < old->veteran_levels; i++) {
49153 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
49154 if (differ) {
49155 break;
49156 }
49157 }
49158 }
49159 if (differ) {
49160 BV_SET(fields, 33);
49161 }
49162
49163 differ = (old->bombard_rate != real_packet->bombard_rate);
49164 if (differ) {
49165 BV_SET(fields, 34);
49166 }
49167
49168 differ = (old->city_size != real_packet->city_size);
49169 if (differ) {
49170 BV_SET(fields, 35);
49171 }
49172
49173 differ = (old->city_slots != real_packet->city_slots);
49174 if (differ) {
49175 BV_SET(fields, 36);
49176 }
49177
49178 differ = (old->tp_defense != real_packet->tp_defense);
49179 if (differ) {
49180 BV_SET(fields, 37);
49181 }
49182
49183 differ = !BV_ARE_EQUAL(old->cargo, real_packet->cargo);
49184 if (differ) {
49185 BV_SET(fields, 38);
49186 }
49187
49188 differ = !BV_ARE_EQUAL(old->targets, real_packet->targets);
49189 if (differ) {
49190 BV_SET(fields, 39);
49191 }
49192
49193 differ = !BV_ARE_EQUAL(old->embarks, real_packet->embarks);
49194 if (differ) {
49195 BV_SET(fields, 40);
49196 }
49197
49198 differ = !BV_ARE_EQUAL(old->disembarks, real_packet->disembarks);
49199 if (differ) {
49200 BV_SET(fields, 41);
49201 }
49202
49203 differ = (old->vlayer != real_packet->vlayer);
49204 if (differ) {
49205 BV_SET(fields, 42);
49206 }
49207
49208 if (real_packet->helptext) {
49209 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
49210 } else {
49211 differ = (strvec_size(old->helptext) > 0);
49212 }
49213 if (differ) {
49214 BV_SET(fields, 43);
49215 }
49216
49217 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
49218 if (differ) {
49219 BV_SET(fields, 44);
49220 }
49221
49222 differ = !BV_ARE_EQUAL(old->roles, real_packet->roles);
49223 if (differ) {
49224 BV_SET(fields, 45);
49225 }
49226
49227 /* folded into head */
49228 if (real_packet->worker) {
49229 BV_SET(fields, 46);
49230 }
49231#endif /* FREECIV_DELTA_PROTOCOL */
49232
49233#ifdef FREECIV_JSON_CONNECTION
49234 struct plocation field_addr;
49235 {
49236 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
49239 }
49240#endif /* FREECIV_JSON_CONNECTION */
49241
49242#ifdef FREECIV_DELTA_PROTOCOL
49243#ifdef FREECIV_JSON_CONNECTION
49244 field_addr.name = "fields";
49245#endif /* FREECIV_JSON_CONNECTION */
49246 e = 0;
49247 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49248 if (e) {
49249 log_packet_detailed("fields bitvector error detected");
49250 }
49251
49252 if (BV_ISSET(fields, 0)) {
49253 log_packet_detailed(" field 'id' has changed");
49254
49255#ifdef FREECIV_JSON_CONNECTION
49256 field_addr.name = "id";
49257#endif /* FREECIV_JSON_CONNECTION */
49258 e = 0;
49259
49260 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49261
49262 if (e) {
49263 log_packet_detailed("'id' field error detected");
49264 }
49265 }
49266
49267 if (BV_ISSET(fields, 1)) {
49268 log_packet_detailed(" field 'name' has changed");
49269
49270#ifdef FREECIV_JSON_CONNECTION
49271 field_addr.name = "name";
49272#endif /* FREECIV_JSON_CONNECTION */
49273 e = 0;
49274
49275 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49276
49277 if (e) {
49278 log_packet_detailed("'name' field error detected");
49279 }
49280 }
49281
49282 if (BV_ISSET(fields, 2)) {
49283 log_packet_detailed(" field 'rule_name' has changed");
49284
49285#ifdef FREECIV_JSON_CONNECTION
49286 field_addr.name = "rule_name";
49287#endif /* FREECIV_JSON_CONNECTION */
49288 e = 0;
49289
49290 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49291
49292 if (e) {
49293 log_packet_detailed("'rule_name' field error detected");
49294 }
49295 }
49296
49297 if (BV_ISSET(fields, 3)) {
49298 log_packet_detailed(" field 'graphic_str' has changed");
49299
49300#ifdef FREECIV_JSON_CONNECTION
49301 field_addr.name = "graphic_str";
49302#endif /* FREECIV_JSON_CONNECTION */
49303 e = 0;
49304
49305 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
49306
49307 if (e) {
49308 log_packet_detailed("'graphic_str' field error detected");
49309 }
49310 }
49311
49312 if (BV_ISSET(fields, 4)) {
49313 log_packet_detailed(" field 'graphic_alt' has changed");
49314
49315#ifdef FREECIV_JSON_CONNECTION
49316 field_addr.name = "graphic_alt";
49317#endif /* FREECIV_JSON_CONNECTION */
49318 e = 0;
49319
49320 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
49321
49322 if (e) {
49323 log_packet_detailed("'graphic_alt' field error detected");
49324 }
49325 }
49326
49327 if (BV_ISSET(fields, 5)) {
49328 log_packet_detailed(" field 'graphic_alt2' has changed");
49329
49330#ifdef FREECIV_JSON_CONNECTION
49331 field_addr.name = "graphic_alt2";
49332#endif /* FREECIV_JSON_CONNECTION */
49333 e = 0;
49334
49335 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
49336
49337 if (e) {
49338 log_packet_detailed("'graphic_alt2' field error detected");
49339 }
49340 }
49341
49342 if (BV_ISSET(fields, 6)) {
49343 log_packet_detailed(" field 'sound_move' has changed");
49344
49345#ifdef FREECIV_JSON_CONNECTION
49346 field_addr.name = "sound_move";
49347#endif /* FREECIV_JSON_CONNECTION */
49348 e = 0;
49349
49350 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
49351
49352 if (e) {
49353 log_packet_detailed("'sound_move' field error detected");
49354 }
49355 }
49356
49357 if (BV_ISSET(fields, 7)) {
49358 log_packet_detailed(" field 'sound_move_alt' has changed");
49359
49360#ifdef FREECIV_JSON_CONNECTION
49361 field_addr.name = "sound_move_alt";
49362#endif /* FREECIV_JSON_CONNECTION */
49363 e = 0;
49364
49365 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
49366
49367 if (e) {
49368 log_packet_detailed("'sound_move_alt' field error detected");
49369 }
49370 }
49371
49372 if (BV_ISSET(fields, 8)) {
49373 log_packet_detailed(" field 'sound_fight' has changed");
49374
49375#ifdef FREECIV_JSON_CONNECTION
49376 field_addr.name = "sound_fight";
49377#endif /* FREECIV_JSON_CONNECTION */
49378 e = 0;
49379
49380 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
49381
49382 if (e) {
49383 log_packet_detailed("'sound_fight' field error detected");
49384 }
49385 }
49386
49387 if (BV_ISSET(fields, 9)) {
49388 log_packet_detailed(" field 'sound_fight_alt' has changed");
49389
49390#ifdef FREECIV_JSON_CONNECTION
49391 field_addr.name = "sound_fight_alt";
49392#endif /* FREECIV_JSON_CONNECTION */
49393 e = 0;
49394
49395 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
49396
49397 if (e) {
49398 log_packet_detailed("'sound_fight_alt' field error detected");
49399 }
49400 }
49401
49402 if (BV_ISSET(fields, 10)) {
49403 log_packet_detailed(" field 'unit_class_id' has changed");
49404
49405#ifdef FREECIV_JSON_CONNECTION
49406 field_addr.name = "unit_class_id";
49407#endif /* FREECIV_JSON_CONNECTION */
49408 e = 0;
49409
49410 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
49411
49412 if (e) {
49413 log_packet_detailed("'unit_class_id' field error detected");
49414 }
49415 }
49416
49417 if (BV_ISSET(fields, 11)) {
49418 log_packet_detailed(" field 'build_cost' has changed");
49419
49420#ifdef FREECIV_JSON_CONNECTION
49421 field_addr.name = "build_cost";
49422#endif /* FREECIV_JSON_CONNECTION */
49423 e = 0;
49424
49425 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
49426
49427 if (e) {
49428 log_packet_detailed("'build_cost' field error detected");
49429 }
49430 }
49431
49432 if (BV_ISSET(fields, 12)) {
49433 log_packet_detailed(" field 'pop_cost' has changed");
49434
49435#ifdef FREECIV_JSON_CONNECTION
49436 field_addr.name = "pop_cost";
49437#endif /* FREECIV_JSON_CONNECTION */
49438 e = 0;
49439
49440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
49441
49442 if (e) {
49443 log_packet_detailed("'pop_cost' field error detected");
49444 }
49445 }
49446
49447 if (BV_ISSET(fields, 13)) {
49448 log_packet_detailed(" field 'attack_strength' has changed");
49449
49450#ifdef FREECIV_JSON_CONNECTION
49451 field_addr.name = "attack_strength";
49452#endif /* FREECIV_JSON_CONNECTION */
49453 e = 0;
49454
49455 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
49456
49457 if (e) {
49458 log_packet_detailed("'attack_strength' field error detected");
49459 }
49460 }
49461
49462 if (BV_ISSET(fields, 14)) {
49463 log_packet_detailed(" field 'defense_strength' has changed");
49464
49465#ifdef FREECIV_JSON_CONNECTION
49466 field_addr.name = "defense_strength";
49467#endif /* FREECIV_JSON_CONNECTION */
49468 e = 0;
49469
49470 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
49471
49472 if (e) {
49473 log_packet_detailed("'defense_strength' field error detected");
49474 }
49475 }
49476
49477 if (BV_ISSET(fields, 15)) {
49478 log_packet_detailed(" field 'move_rate' has changed");
49479
49480#ifdef FREECIV_JSON_CONNECTION
49481 field_addr.name = "move_rate";
49482#endif /* FREECIV_JSON_CONNECTION */
49483 e = 0;
49484
49485 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
49486
49487 if (e) {
49488 log_packet_detailed("'move_rate' field error detected");
49489 }
49490 }
49491
49492 if (BV_ISSET(fields, 16)) {
49493 log_packet_detailed(" field 'build_reqs' has changed");
49494
49495#ifdef FREECIV_JSON_CONNECTION
49496 field_addr.name = "build_reqs";
49497#endif /* FREECIV_JSON_CONNECTION */
49498 e = 0;
49499
49500 {
49501 int i;
49502
49505
49506#ifdef FREECIV_JSON_CONNECTION
49507 /* Enter array. */
49508 field_addr.sub_location = plocation_elem_new(0);
49509#endif /* FREECIV_JSON_CONNECTION */
49510
49511 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
49512#ifdef FREECIV_JSON_CONNECTION
49513 /* Next array element. */
49514 field_addr.sub_location->number = i;
49515#endif /* FREECIV_JSON_CONNECTION */
49516
49517 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
49518 }
49519
49520#ifdef FREECIV_JSON_CONNECTION
49521 /* Exit array. */
49522 FC_FREE(field_addr.sub_location);
49523#endif /* FREECIV_JSON_CONNECTION */
49524 }
49525
49526 if (e) {
49527 log_packet_detailed("'build_reqs' field error detected");
49528 }
49529 }
49530
49531 if (BV_ISSET(fields, 17)) {
49532 log_packet_detailed(" field 'vision_radius_sq' has changed");
49533
49534#ifdef FREECIV_JSON_CONNECTION
49535 field_addr.name = "vision_radius_sq";
49536#endif /* FREECIV_JSON_CONNECTION */
49537 e = 0;
49538
49539 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
49540
49541 if (e) {
49542 log_packet_detailed("'vision_radius_sq' field error detected");
49543 }
49544 }
49545
49546 if (BV_ISSET(fields, 18)) {
49547 log_packet_detailed(" field 'transport_capacity' has changed");
49548
49549#ifdef FREECIV_JSON_CONNECTION
49550 field_addr.name = "transport_capacity";
49551#endif /* FREECIV_JSON_CONNECTION */
49552 e = 0;
49553
49554 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
49555
49556 if (e) {
49557 log_packet_detailed("'transport_capacity' field error detected");
49558 }
49559 }
49560
49561 if (BV_ISSET(fields, 19)) {
49562 log_packet_detailed(" field 'hp' has changed");
49563
49564#ifdef FREECIV_JSON_CONNECTION
49565 field_addr.name = "hp";
49566#endif /* FREECIV_JSON_CONNECTION */
49567 e = 0;
49568
49569 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
49570
49571 if (e) {
49572 log_packet_detailed("'hp' field error detected");
49573 }
49574 }
49575
49576 if (BV_ISSET(fields, 20)) {
49577 log_packet_detailed(" field 'firepower' has changed");
49578
49579#ifdef FREECIV_JSON_CONNECTION
49580 field_addr.name = "firepower";
49581#endif /* FREECIV_JSON_CONNECTION */
49582 e = 0;
49583
49584 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
49585
49586 if (e) {
49587 log_packet_detailed("'firepower' field error detected");
49588 }
49589 }
49590
49591 if (BV_ISSET(fields, 21)) {
49592 log_packet_detailed(" field 'obsoleted_by' has changed");
49593
49594#ifdef FREECIV_JSON_CONNECTION
49595 field_addr.name = "obsoleted_by";
49596#endif /* FREECIV_JSON_CONNECTION */
49597 e = 0;
49598
49599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
49600
49601 if (e) {
49602 log_packet_detailed("'obsoleted_by' field error detected");
49603 }
49604 }
49605
49606 if (BV_ISSET(fields, 22)) {
49607 log_packet_detailed(" field 'converted_to' has changed");
49608
49609#ifdef FREECIV_JSON_CONNECTION
49610 field_addr.name = "converted_to";
49611#endif /* FREECIV_JSON_CONNECTION */
49612 e = 0;
49613
49614 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
49615
49616 if (e) {
49617 log_packet_detailed("'converted_to' field error detected");
49618 }
49619 }
49620
49621 if (BV_ISSET(fields, 23)) {
49622 log_packet_detailed(" field 'convert_time' has changed");
49623
49624#ifdef FREECIV_JSON_CONNECTION
49625 field_addr.name = "convert_time";
49626#endif /* FREECIV_JSON_CONNECTION */
49627 e = 0;
49628
49629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
49630
49631 if (e) {
49632 log_packet_detailed("'convert_time' field error detected");
49633 }
49634 }
49635
49636 if (BV_ISSET(fields, 24)) {
49637 log_packet_detailed(" field 'fuel' has changed");
49638
49639#ifdef FREECIV_JSON_CONNECTION
49640 field_addr.name = "fuel";
49641#endif /* FREECIV_JSON_CONNECTION */
49642 e = 0;
49643
49644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
49645
49646 if (e) {
49647 log_packet_detailed("'fuel' field error detected");
49648 }
49649 }
49650
49651 if (BV_ISSET(fields, 25)) {
49652 log_packet_detailed(" field 'happy_cost' has changed");
49653
49654#ifdef FREECIV_JSON_CONNECTION
49655 field_addr.name = "happy_cost";
49656#endif /* FREECIV_JSON_CONNECTION */
49657 e = 0;
49658
49659 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
49660
49661 if (e) {
49662 log_packet_detailed("'happy_cost' field error detected");
49663 }
49664 }
49665
49666 if (BV_ISSET(fields, 26)) {
49667 log_packet_detailed(" field 'upkeep' has changed");
49668
49669#ifdef FREECIV_JSON_CONNECTION
49670 field_addr.name = "upkeep";
49671#endif /* FREECIV_JSON_CONNECTION */
49672 e = 0;
49673
49674 {
49675 int i;
49676
49677#ifdef FREECIV_JSON_CONNECTION
49678 /* Create the array. */
49679 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
49680
49681 /* Enter array. */
49682 field_addr.sub_location = plocation_elem_new(0);
49683#endif /* FREECIV_JSON_CONNECTION */
49684
49685 for (i = 0; i < O_LAST; i++) {
49686#ifdef FREECIV_JSON_CONNECTION
49687 /* Next array element. */
49688 field_addr.sub_location->number = i;
49689#endif /* FREECIV_JSON_CONNECTION */
49690
49691 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
49692 }
49693
49694#ifdef FREECIV_JSON_CONNECTION
49695 /* Exit array. */
49696 FC_FREE(field_addr.sub_location);
49697#endif /* FREECIV_JSON_CONNECTION */
49698 }
49699
49700 if (e) {
49701 log_packet_detailed("'upkeep' field error detected");
49702 }
49703 }
49704
49705 if (BV_ISSET(fields, 27)) {
49706 log_packet_detailed(" field 'paratroopers_range' has changed");
49707
49708#ifdef FREECIV_JSON_CONNECTION
49709 field_addr.name = "paratroopers_range";
49710#endif /* FREECIV_JSON_CONNECTION */
49711 e = 0;
49712
49713 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
49714
49715 if (e) {
49716 log_packet_detailed("'paratroopers_range' field error detected");
49717 }
49718 }
49719
49720 if (BV_ISSET(fields, 28)) {
49721 log_packet_detailed(" field 'veteran_levels' has changed");
49722
49723#ifdef FREECIV_JSON_CONNECTION
49724 field_addr.name = "veteran_levels";
49725#endif /* FREECIV_JSON_CONNECTION */
49726 e = 0;
49727
49728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
49729
49730 if (e) {
49731 log_packet_detailed("'veteran_levels' field error detected");
49732 }
49733 }
49734
49735 if (BV_ISSET(fields, 29)) {
49736 log_packet_detailed(" field 'veteran_name' has changed");
49737
49738#ifdef FREECIV_JSON_CONNECTION
49739 field_addr.name = "veteran_name";
49740#endif /* FREECIV_JSON_CONNECTION */
49741 e = 0;
49742
49743 {
49744 int i;
49745
49746#ifdef FREECIV_JSON_CONNECTION
49747 /* Create the array. */
49748 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49749
49750 /* Enter array. */
49751 field_addr.sub_location = plocation_elem_new(0);
49752#endif /* FREECIV_JSON_CONNECTION */
49753
49754 for (i = 0; i < real_packet->veteran_levels; i++) {
49755#ifdef FREECIV_JSON_CONNECTION
49756 /* Next array element. */
49757 field_addr.sub_location->number = i;
49758#endif /* FREECIV_JSON_CONNECTION */
49759
49760 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
49761 }
49762
49763#ifdef FREECIV_JSON_CONNECTION
49764 /* Exit array. */
49765 FC_FREE(field_addr.sub_location);
49766#endif /* FREECIV_JSON_CONNECTION */
49767 }
49768
49769 if (e) {
49770 log_packet_detailed("'veteran_name' field error detected");
49771 }
49772 }
49773
49774 if (BV_ISSET(fields, 30)) {
49775 log_packet_detailed(" field 'power_fact' has changed");
49776
49777#ifdef FREECIV_JSON_CONNECTION
49778 field_addr.name = "power_fact";
49779#endif /* FREECIV_JSON_CONNECTION */
49780 e = 0;
49781
49782 {
49783 int i;
49784
49785#ifdef FREECIV_JSON_CONNECTION
49786 /* Create the array. */
49787 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49788
49789 /* Enter array. */
49790 field_addr.sub_location = plocation_elem_new(0);
49791#endif /* FREECIV_JSON_CONNECTION */
49792
49793 for (i = 0; i < real_packet->veteran_levels; i++) {
49794#ifdef FREECIV_JSON_CONNECTION
49795 /* Next array element. */
49796 field_addr.sub_location->number = i;
49797#endif /* FREECIV_JSON_CONNECTION */
49798
49799 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
49800 }
49801
49802#ifdef FREECIV_JSON_CONNECTION
49803 /* Exit array. */
49804 FC_FREE(field_addr.sub_location);
49805#endif /* FREECIV_JSON_CONNECTION */
49806 }
49807
49808 if (e) {
49809 log_packet_detailed("'power_fact' field error detected");
49810 }
49811 }
49812
49813 if (BV_ISSET(fields, 31)) {
49814 log_packet_detailed(" field 'move_bonus' has changed");
49815
49816#ifdef FREECIV_JSON_CONNECTION
49817 field_addr.name = "move_bonus";
49818#endif /* FREECIV_JSON_CONNECTION */
49819 e = 0;
49820
49821 {
49822 int i;
49823
49824#ifdef FREECIV_JSON_CONNECTION
49825 /* Create the array. */
49826 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49827
49828 /* Enter array. */
49829 field_addr.sub_location = plocation_elem_new(0);
49830#endif /* FREECIV_JSON_CONNECTION */
49831
49832 for (i = 0; i < real_packet->veteran_levels; i++) {
49833#ifdef FREECIV_JSON_CONNECTION
49834 /* Next array element. */
49835 field_addr.sub_location->number = i;
49836#endif /* FREECIV_JSON_CONNECTION */
49837
49838 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
49839 }
49840
49841#ifdef FREECIV_JSON_CONNECTION
49842 /* Exit array. */
49843 FC_FREE(field_addr.sub_location);
49844#endif /* FREECIV_JSON_CONNECTION */
49845 }
49846
49847 if (e) {
49848 log_packet_detailed("'move_bonus' field error detected");
49849 }
49850 }
49851
49852 if (BV_ISSET(fields, 32)) {
49853 log_packet_detailed(" field 'base_raise_chance' has changed");
49854
49855#ifdef FREECIV_JSON_CONNECTION
49856 field_addr.name = "base_raise_chance";
49857#endif /* FREECIV_JSON_CONNECTION */
49858 e = 0;
49859
49860 {
49861 int i;
49862
49863#ifdef FREECIV_JSON_CONNECTION
49864 /* Create the array. */
49865 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49866
49867 /* Enter array. */
49868 field_addr.sub_location = plocation_elem_new(0);
49869#endif /* FREECIV_JSON_CONNECTION */
49870
49871 for (i = 0; i < real_packet->veteran_levels; i++) {
49872#ifdef FREECIV_JSON_CONNECTION
49873 /* Next array element. */
49874 field_addr.sub_location->number = i;
49875#endif /* FREECIV_JSON_CONNECTION */
49876
49877 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
49878 }
49879
49880#ifdef FREECIV_JSON_CONNECTION
49881 /* Exit array. */
49882 FC_FREE(field_addr.sub_location);
49883#endif /* FREECIV_JSON_CONNECTION */
49884 }
49885
49886 if (e) {
49887 log_packet_detailed("'base_raise_chance' field error detected");
49888 }
49889 }
49890
49891 if (BV_ISSET(fields, 33)) {
49892 log_packet_detailed(" field 'work_raise_chance' has changed");
49893
49894#ifdef FREECIV_JSON_CONNECTION
49895 field_addr.name = "work_raise_chance";
49896#endif /* FREECIV_JSON_CONNECTION */
49897 e = 0;
49898
49899 {
49900 int i;
49901
49902#ifdef FREECIV_JSON_CONNECTION
49903 /* Create the array. */
49904 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
49905
49906 /* Enter array. */
49907 field_addr.sub_location = plocation_elem_new(0);
49908#endif /* FREECIV_JSON_CONNECTION */
49909
49910 for (i = 0; i < real_packet->veteran_levels; i++) {
49911#ifdef FREECIV_JSON_CONNECTION
49912 /* Next array element. */
49913 field_addr.sub_location->number = i;
49914#endif /* FREECIV_JSON_CONNECTION */
49915
49916 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
49917 }
49918
49919#ifdef FREECIV_JSON_CONNECTION
49920 /* Exit array. */
49921 FC_FREE(field_addr.sub_location);
49922#endif /* FREECIV_JSON_CONNECTION */
49923 }
49924
49925 if (e) {
49926 log_packet_detailed("'work_raise_chance' field error detected");
49927 }
49928 }
49929
49930 if (BV_ISSET(fields, 34)) {
49931 log_packet_detailed(" field 'bombard_rate' has changed");
49932
49933#ifdef FREECIV_JSON_CONNECTION
49934 field_addr.name = "bombard_rate";
49935#endif /* FREECIV_JSON_CONNECTION */
49936 e = 0;
49937
49938 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
49939
49940 if (e) {
49941 log_packet_detailed("'bombard_rate' field error detected");
49942 }
49943 }
49944
49945 if (BV_ISSET(fields, 35)) {
49946 log_packet_detailed(" field 'city_size' has changed");
49947
49948#ifdef FREECIV_JSON_CONNECTION
49949 field_addr.name = "city_size";
49950#endif /* FREECIV_JSON_CONNECTION */
49951 e = 0;
49952
49953 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
49954
49955 if (e) {
49956 log_packet_detailed("'city_size' field error detected");
49957 }
49958 }
49959
49960 if (BV_ISSET(fields, 36)) {
49961 log_packet_detailed(" field 'city_slots' has changed");
49962
49963#ifdef FREECIV_JSON_CONNECTION
49964 field_addr.name = "city_slots";
49965#endif /* FREECIV_JSON_CONNECTION */
49966 e = 0;
49967
49968 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
49969
49970 if (e) {
49971 log_packet_detailed("'city_slots' field error detected");
49972 }
49973 }
49974
49975 if (BV_ISSET(fields, 37)) {
49976 log_packet_detailed(" field 'tp_defense' has changed");
49977
49978#ifdef FREECIV_JSON_CONNECTION
49979 field_addr.name = "tp_defense";
49980#endif /* FREECIV_JSON_CONNECTION */
49981 e = 0;
49982
49983 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
49984
49985 if (e) {
49986 log_packet_detailed("'tp_defense' field error detected");
49987 }
49988 }
49989
49990 if (BV_ISSET(fields, 38)) {
49991 log_packet_detailed(" field 'cargo' has changed");
49992
49993#ifdef FREECIV_JSON_CONNECTION
49994 field_addr.name = "cargo";
49995#endif /* FREECIV_JSON_CONNECTION */
49996 e = 0;
49997
49998 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
49999
50000 if (e) {
50001 log_packet_detailed("'cargo' field error detected");
50002 }
50003 }
50004
50005 if (BV_ISSET(fields, 39)) {
50006 log_packet_detailed(" field 'targets' has changed");
50007
50008#ifdef FREECIV_JSON_CONNECTION
50009 field_addr.name = "targets";
50010#endif /* FREECIV_JSON_CONNECTION */
50011 e = 0;
50012
50013 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
50014
50015 if (e) {
50016 log_packet_detailed("'targets' field error detected");
50017 }
50018 }
50019
50020 if (BV_ISSET(fields, 40)) {
50021 log_packet_detailed(" field 'embarks' has changed");
50022
50023#ifdef FREECIV_JSON_CONNECTION
50024 field_addr.name = "embarks";
50025#endif /* FREECIV_JSON_CONNECTION */
50026 e = 0;
50027
50028 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
50029
50030 if (e) {
50031 log_packet_detailed("'embarks' field error detected");
50032 }
50033 }
50034
50035 if (BV_ISSET(fields, 41)) {
50036 log_packet_detailed(" field 'disembarks' has changed");
50037
50038#ifdef FREECIV_JSON_CONNECTION
50039 field_addr.name = "disembarks";
50040#endif /* FREECIV_JSON_CONNECTION */
50041 e = 0;
50042
50043 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
50044
50045 if (e) {
50046 log_packet_detailed("'disembarks' field error detected");
50047 }
50048 }
50049
50050 if (BV_ISSET(fields, 42)) {
50051 log_packet_detailed(" field 'vlayer' has changed");
50052
50053#ifdef FREECIV_JSON_CONNECTION
50054 field_addr.name = "vlayer";
50055#endif /* FREECIV_JSON_CONNECTION */
50056 e = 0;
50057
50058 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
50059
50060 if (e) {
50061 log_packet_detailed("'vlayer' field error detected");
50062 }
50063 }
50064
50065 if (BV_ISSET(fields, 43)) {
50066 log_packet_detailed(" field 'helptext' has changed");
50067
50068#ifdef FREECIV_JSON_CONNECTION
50069 field_addr.name = "helptext";
50070#endif /* FREECIV_JSON_CONNECTION */
50071 e = 0;
50072
50073 if (!real_packet->helptext) {
50074 /* Transmit null as empty */
50075 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
50076 } else {
50077 int i;
50078
50080 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
50081
50082#ifdef FREECIV_JSON_CONNECTION
50083 /* Enter array. */
50084 field_addr.sub_location = plocation_elem_new(0);
50085#endif /* FREECIV_JSON_CONNECTION */
50086
50087 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
50088#ifdef FREECIV_JSON_CONNECTION
50089 /* Next array element. */
50090 field_addr.sub_location->number = i;
50091#endif /* FREECIV_JSON_CONNECTION */
50092
50093 {
50094 const char *pstr = strvec_get(real_packet->helptext, i);
50095
50096 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
50097 }
50098 }
50099
50100#ifdef FREECIV_JSON_CONNECTION
50101 /* Exit array. */
50102 FC_FREE(field_addr.sub_location);
50103#endif /* FREECIV_JSON_CONNECTION */
50104 }
50105
50106 if (e) {
50107 log_packet_detailed("'helptext' field error detected");
50108 }
50109 }
50110
50111 if (BV_ISSET(fields, 44)) {
50112 log_packet_detailed(" field 'flags' has changed");
50113
50114#ifdef FREECIV_JSON_CONNECTION
50115 field_addr.name = "flags";
50116#endif /* FREECIV_JSON_CONNECTION */
50117 e = 0;
50118
50119 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50120
50121 if (e) {
50122 log_packet_detailed("'flags' field error detected");
50123 }
50124 }
50125
50126 if (BV_ISSET(fields, 45)) {
50127 log_packet_detailed(" field 'roles' has changed");
50128
50129#ifdef FREECIV_JSON_CONNECTION
50130 field_addr.name = "roles";
50131#endif /* FREECIV_JSON_CONNECTION */
50132 e = 0;
50133
50134 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50135
50136 if (e) {
50137 log_packet_detailed("'roles' field error detected");
50138 }
50139 }
50140
50141 /* field 46 is folded into the header */
50142
50143 old->id = real_packet->id;
50144 sz_strlcpy(old->name, real_packet->name);
50145 sz_strlcpy(old->rule_name, real_packet->rule_name);
50146 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
50147 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
50148 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
50149 sz_strlcpy(old->sound_move, real_packet->sound_move);
50150 sz_strlcpy(old->sound_move_alt, real_packet->sound_move_alt);
50151 sz_strlcpy(old->sound_fight, real_packet->sound_fight);
50152 sz_strlcpy(old->sound_fight_alt, real_packet->sound_fight_alt);
50153 old->unit_class_id = real_packet->unit_class_id;
50154 old->build_cost = real_packet->build_cost;
50155 old->pop_cost = real_packet->pop_cost;
50156 old->attack_strength = real_packet->attack_strength;
50157 old->defense_strength = real_packet->defense_strength;
50158 old->move_rate = real_packet->move_rate;
50159 requirement_vector_copy(&old->build_reqs, &real_packet->build_reqs);
50160 old->vision_radius_sq = real_packet->vision_radius_sq;
50161 old->transport_capacity = real_packet->transport_capacity;
50162 old->hp = real_packet->hp;
50163 old->firepower = real_packet->firepower;
50164 old->obsoleted_by = real_packet->obsoleted_by;
50165 old->converted_to = real_packet->converted_to;
50166 old->convert_time = real_packet->convert_time;
50167 old->fuel = real_packet->fuel;
50168 old->happy_cost = real_packet->happy_cost;
50169 {
50170 int i;
50171
50172 for (i = 0; i < O_LAST; i++) {
50173 old->upkeep[i] = real_packet->upkeep[i];
50174 }
50175 }
50176 old->paratroopers_range = real_packet->paratroopers_range;
50177 old->veteran_levels = real_packet->veteran_levels;
50178 {
50179 int i;
50180
50181 for (i = 0; i < real_packet->veteran_levels; i++) {
50182 sz_strlcpy(old->veteran_name[i], real_packet->veteran_name[i]);
50183 }
50184 }
50185 {
50186 int i;
50187
50188 for (i = 0; i < real_packet->veteran_levels; i++) {
50189 old->power_fact[i] = real_packet->power_fact[i];
50190 }
50191 }
50192 {
50193 int i;
50194
50195 for (i = 0; i < real_packet->veteran_levels; i++) {
50196 old->move_bonus[i] = real_packet->move_bonus[i];
50197 }
50198 }
50199 {
50200 int i;
50201
50202 for (i = 0; i < real_packet->veteran_levels; i++) {
50203 old->base_raise_chance[i] = real_packet->base_raise_chance[i];
50204 }
50205 }
50206 {
50207 int i;
50208
50209 for (i = 0; i < real_packet->veteran_levels; i++) {
50210 old->work_raise_chance[i] = real_packet->work_raise_chance[i];
50211 }
50212 }
50213 old->bombard_rate = real_packet->bombard_rate;
50214 old->city_size = real_packet->city_size;
50215 old->city_slots = real_packet->city_slots;
50216 old->tp_defense = real_packet->tp_defense;
50217 old->cargo = real_packet->cargo;
50218 old->targets = real_packet->targets;
50219 old->embarks = real_packet->embarks;
50220 old->disembarks = real_packet->disembarks;
50221 old->vlayer = real_packet->vlayer;
50222 if (real_packet->helptext) {
50223 strvec_copy(old->helptext, real_packet->helptext);
50224 } else {
50225 strvec_clear(old->helptext);
50226 }
50227 old->flags = real_packet->flags;
50228 old->roles = real_packet->roles;
50229 old->worker = real_packet->worker;
50230
50231#else /* FREECIV_DELTA_PROTOCOL */
50232#ifdef FREECIV_JSON_CONNECTION
50233 field_addr.name = "id";
50234#endif /* FREECIV_JSON_CONNECTION */
50235 e = 0;
50236
50237 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
50238
50239 if (e) {
50240 log_packet_detailed("'id' field error detected");
50241 }
50242
50243#ifdef FREECIV_JSON_CONNECTION
50244 field_addr.name = "name";
50245#endif /* FREECIV_JSON_CONNECTION */
50246 e = 0;
50247
50248 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50249
50250 if (e) {
50251 log_packet_detailed("'name' field error detected");
50252 }
50253
50254#ifdef FREECIV_JSON_CONNECTION
50255 field_addr.name = "rule_name";
50256#endif /* FREECIV_JSON_CONNECTION */
50257 e = 0;
50258
50259 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
50260
50261 if (e) {
50262 log_packet_detailed("'rule_name' field error detected");
50263 }
50264
50265#ifdef FREECIV_JSON_CONNECTION
50266 field_addr.name = "graphic_str";
50267#endif /* FREECIV_JSON_CONNECTION */
50268 e = 0;
50269
50270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
50271
50272 if (e) {
50273 log_packet_detailed("'graphic_str' field error detected");
50274 }
50275
50276#ifdef FREECIV_JSON_CONNECTION
50277 field_addr.name = "graphic_alt";
50278#endif /* FREECIV_JSON_CONNECTION */
50279 e = 0;
50280
50281 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
50282
50283 if (e) {
50284 log_packet_detailed("'graphic_alt' field error detected");
50285 }
50286
50287#ifdef FREECIV_JSON_CONNECTION
50288 field_addr.name = "graphic_alt2";
50289#endif /* FREECIV_JSON_CONNECTION */
50290 e = 0;
50291
50292 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
50293
50294 if (e) {
50295 log_packet_detailed("'graphic_alt2' field error detected");
50296 }
50297
50298#ifdef FREECIV_JSON_CONNECTION
50299 field_addr.name = "sound_move";
50300#endif /* FREECIV_JSON_CONNECTION */
50301 e = 0;
50302
50303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
50304
50305 if (e) {
50306 log_packet_detailed("'sound_move' field error detected");
50307 }
50308
50309#ifdef FREECIV_JSON_CONNECTION
50310 field_addr.name = "sound_move_alt";
50311#endif /* FREECIV_JSON_CONNECTION */
50312 e = 0;
50313
50314 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
50315
50316 if (e) {
50317 log_packet_detailed("'sound_move_alt' field error detected");
50318 }
50319
50320#ifdef FREECIV_JSON_CONNECTION
50321 field_addr.name = "sound_fight";
50322#endif /* FREECIV_JSON_CONNECTION */
50323 e = 0;
50324
50325 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
50326
50327 if (e) {
50328 log_packet_detailed("'sound_fight' field error detected");
50329 }
50330
50331#ifdef FREECIV_JSON_CONNECTION
50332 field_addr.name = "sound_fight_alt";
50333#endif /* FREECIV_JSON_CONNECTION */
50334 e = 0;
50335
50336 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
50337
50338 if (e) {
50339 log_packet_detailed("'sound_fight_alt' field error detected");
50340 }
50341
50342#ifdef FREECIV_JSON_CONNECTION
50343 field_addr.name = "unit_class_id";
50344#endif /* FREECIV_JSON_CONNECTION */
50345 e = 0;
50346
50347 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
50348
50349 if (e) {
50350 log_packet_detailed("'unit_class_id' field error detected");
50351 }
50352
50353#ifdef FREECIV_JSON_CONNECTION
50354 field_addr.name = "build_cost";
50355#endif /* FREECIV_JSON_CONNECTION */
50356 e = 0;
50357
50358 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
50359
50360 if (e) {
50361 log_packet_detailed("'build_cost' field error detected");
50362 }
50363
50364#ifdef FREECIV_JSON_CONNECTION
50365 field_addr.name = "pop_cost";
50366#endif /* FREECIV_JSON_CONNECTION */
50367 e = 0;
50368
50369 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
50370
50371 if (e) {
50372 log_packet_detailed("'pop_cost' field error detected");
50373 }
50374
50375#ifdef FREECIV_JSON_CONNECTION
50376 field_addr.name = "attack_strength";
50377#endif /* FREECIV_JSON_CONNECTION */
50378 e = 0;
50379
50380 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
50381
50382 if (e) {
50383 log_packet_detailed("'attack_strength' field error detected");
50384 }
50385
50386#ifdef FREECIV_JSON_CONNECTION
50387 field_addr.name = "defense_strength";
50388#endif /* FREECIV_JSON_CONNECTION */
50389 e = 0;
50390
50391 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
50392
50393 if (e) {
50394 log_packet_detailed("'defense_strength' field error detected");
50395 }
50396
50397#ifdef FREECIV_JSON_CONNECTION
50398 field_addr.name = "move_rate";
50399#endif /* FREECIV_JSON_CONNECTION */
50400 e = 0;
50401
50402 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
50403
50404 if (e) {
50405 log_packet_detailed("'move_rate' field error detected");
50406 }
50407
50408#ifdef FREECIV_JSON_CONNECTION
50409 field_addr.name = "build_reqs";
50410#endif /* FREECIV_JSON_CONNECTION */
50411 e = 0;
50412
50413 {
50414 int i;
50415
50418
50419#ifdef FREECIV_JSON_CONNECTION
50420 /* Enter array. */
50421 field_addr.sub_location = plocation_elem_new(0);
50422#endif /* FREECIV_JSON_CONNECTION */
50423
50424 for (i = 0; i < requirement_vector_size(&real_packet->build_reqs); i++) {
50425#ifdef FREECIV_JSON_CONNECTION
50426 /* Next array element. */
50427 field_addr.sub_location->number = i;
50428#endif /* FREECIV_JSON_CONNECTION */
50429
50430 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs.p[i]);
50431 }
50432
50433#ifdef FREECIV_JSON_CONNECTION
50434 /* Exit array. */
50435 FC_FREE(field_addr.sub_location);
50436#endif /* FREECIV_JSON_CONNECTION */
50437 }
50438
50439 if (e) {
50440 log_packet_detailed("'build_reqs' field error detected");
50441 }
50442
50443#ifdef FREECIV_JSON_CONNECTION
50444 field_addr.name = "vision_radius_sq";
50445#endif /* FREECIV_JSON_CONNECTION */
50446 e = 0;
50447
50448 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
50449
50450 if (e) {
50451 log_packet_detailed("'vision_radius_sq' field error detected");
50452 }
50453
50454#ifdef FREECIV_JSON_CONNECTION
50455 field_addr.name = "transport_capacity";
50456#endif /* FREECIV_JSON_CONNECTION */
50457 e = 0;
50458
50459 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
50460
50461 if (e) {
50462 log_packet_detailed("'transport_capacity' field error detected");
50463 }
50464
50465#ifdef FREECIV_JSON_CONNECTION
50466 field_addr.name = "hp";
50467#endif /* FREECIV_JSON_CONNECTION */
50468 e = 0;
50469
50470 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
50471
50472 if (e) {
50473 log_packet_detailed("'hp' field error detected");
50474 }
50475
50476#ifdef FREECIV_JSON_CONNECTION
50477 field_addr.name = "firepower";
50478#endif /* FREECIV_JSON_CONNECTION */
50479 e = 0;
50480
50481 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
50482
50483 if (e) {
50484 log_packet_detailed("'firepower' field error detected");
50485 }
50486
50487#ifdef FREECIV_JSON_CONNECTION
50488 field_addr.name = "obsoleted_by";
50489#endif /* FREECIV_JSON_CONNECTION */
50490 e = 0;
50491
50492 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
50493
50494 if (e) {
50495 log_packet_detailed("'obsoleted_by' field error detected");
50496 }
50497
50498#ifdef FREECIV_JSON_CONNECTION
50499 field_addr.name = "converted_to";
50500#endif /* FREECIV_JSON_CONNECTION */
50501 e = 0;
50502
50503 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
50504
50505 if (e) {
50506 log_packet_detailed("'converted_to' field error detected");
50507 }
50508
50509#ifdef FREECIV_JSON_CONNECTION
50510 field_addr.name = "convert_time";
50511#endif /* FREECIV_JSON_CONNECTION */
50512 e = 0;
50513
50514 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
50515
50516 if (e) {
50517 log_packet_detailed("'convert_time' field error detected");
50518 }
50519
50520#ifdef FREECIV_JSON_CONNECTION
50521 field_addr.name = "fuel";
50522#endif /* FREECIV_JSON_CONNECTION */
50523 e = 0;
50524
50525 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
50526
50527 if (e) {
50528 log_packet_detailed("'fuel' field error detected");
50529 }
50530
50531#ifdef FREECIV_JSON_CONNECTION
50532 field_addr.name = "happy_cost";
50533#endif /* FREECIV_JSON_CONNECTION */
50534 e = 0;
50535
50536 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
50537
50538 if (e) {
50539 log_packet_detailed("'happy_cost' field error detected");
50540 }
50541
50542#ifdef FREECIV_JSON_CONNECTION
50543 field_addr.name = "upkeep";
50544#endif /* FREECIV_JSON_CONNECTION */
50545 e = 0;
50546
50547 {
50548 int i;
50549
50550#ifdef FREECIV_JSON_CONNECTION
50551 /* Create the array. */
50552 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
50553
50554 /* Enter array. */
50555 field_addr.sub_location = plocation_elem_new(0);
50556#endif /* FREECIV_JSON_CONNECTION */
50557
50558 for (i = 0; i < O_LAST; i++) {
50559#ifdef FREECIV_JSON_CONNECTION
50560 /* Next array element. */
50561 field_addr.sub_location->number = i;
50562#endif /* FREECIV_JSON_CONNECTION */
50563
50564 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
50565 }
50566
50567#ifdef FREECIV_JSON_CONNECTION
50568 /* Exit array. */
50569 FC_FREE(field_addr.sub_location);
50570#endif /* FREECIV_JSON_CONNECTION */
50571 }
50572
50573 if (e) {
50574 log_packet_detailed("'upkeep' field error detected");
50575 }
50576
50577#ifdef FREECIV_JSON_CONNECTION
50578 field_addr.name = "paratroopers_range";
50579#endif /* FREECIV_JSON_CONNECTION */
50580 e = 0;
50581
50582 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
50583
50584 if (e) {
50585 log_packet_detailed("'paratroopers_range' field error detected");
50586 }
50587
50588#ifdef FREECIV_JSON_CONNECTION
50589 field_addr.name = "veteran_levels";
50590#endif /* FREECIV_JSON_CONNECTION */
50591 e = 0;
50592
50593 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
50594
50595 if (e) {
50596 log_packet_detailed("'veteran_levels' field error detected");
50597 }
50598
50599#ifdef FREECIV_JSON_CONNECTION
50600 field_addr.name = "veteran_name";
50601#endif /* FREECIV_JSON_CONNECTION */
50602 e = 0;
50603
50604 {
50605 int i;
50606
50607#ifdef FREECIV_JSON_CONNECTION
50608 /* Create the array. */
50609 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50610
50611 /* Enter array. */
50612 field_addr.sub_location = plocation_elem_new(0);
50613#endif /* FREECIV_JSON_CONNECTION */
50614
50615 for (i = 0; i < real_packet->veteran_levels; i++) {
50616#ifdef FREECIV_JSON_CONNECTION
50617 /* Next array element. */
50618 field_addr.sub_location->number = i;
50619#endif /* FREECIV_JSON_CONNECTION */
50620
50621 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
50622 }
50623
50624#ifdef FREECIV_JSON_CONNECTION
50625 /* Exit array. */
50626 FC_FREE(field_addr.sub_location);
50627#endif /* FREECIV_JSON_CONNECTION */
50628 }
50629
50630 if (e) {
50631 log_packet_detailed("'veteran_name' field error detected");
50632 }
50633
50634#ifdef FREECIV_JSON_CONNECTION
50635 field_addr.name = "power_fact";
50636#endif /* FREECIV_JSON_CONNECTION */
50637 e = 0;
50638
50639 {
50640 int i;
50641
50642#ifdef FREECIV_JSON_CONNECTION
50643 /* Create the array. */
50644 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50645
50646 /* Enter array. */
50647 field_addr.sub_location = plocation_elem_new(0);
50648#endif /* FREECIV_JSON_CONNECTION */
50649
50650 for (i = 0; i < real_packet->veteran_levels; i++) {
50651#ifdef FREECIV_JSON_CONNECTION
50652 /* Next array element. */
50653 field_addr.sub_location->number = i;
50654#endif /* FREECIV_JSON_CONNECTION */
50655
50656 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
50657 }
50658
50659#ifdef FREECIV_JSON_CONNECTION
50660 /* Exit array. */
50661 FC_FREE(field_addr.sub_location);
50662#endif /* FREECIV_JSON_CONNECTION */
50663 }
50664
50665 if (e) {
50666 log_packet_detailed("'power_fact' field error detected");
50667 }
50668
50669#ifdef FREECIV_JSON_CONNECTION
50670 field_addr.name = "move_bonus";
50671#endif /* FREECIV_JSON_CONNECTION */
50672 e = 0;
50673
50674 {
50675 int i;
50676
50677#ifdef FREECIV_JSON_CONNECTION
50678 /* Create the array. */
50679 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50680
50681 /* Enter array. */
50682 field_addr.sub_location = plocation_elem_new(0);
50683#endif /* FREECIV_JSON_CONNECTION */
50684
50685 for (i = 0; i < real_packet->veteran_levels; i++) {
50686#ifdef FREECIV_JSON_CONNECTION
50687 /* Next array element. */
50688 field_addr.sub_location->number = i;
50689#endif /* FREECIV_JSON_CONNECTION */
50690
50691 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
50692 }
50693
50694#ifdef FREECIV_JSON_CONNECTION
50695 /* Exit array. */
50696 FC_FREE(field_addr.sub_location);
50697#endif /* FREECIV_JSON_CONNECTION */
50698 }
50699
50700 if (e) {
50701 log_packet_detailed("'move_bonus' field error detected");
50702 }
50703
50704#ifdef FREECIV_JSON_CONNECTION
50705 field_addr.name = "base_raise_chance";
50706#endif /* FREECIV_JSON_CONNECTION */
50707 e = 0;
50708
50709 {
50710 int i;
50711
50712#ifdef FREECIV_JSON_CONNECTION
50713 /* Create the array. */
50714 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50715
50716 /* Enter array. */
50717 field_addr.sub_location = plocation_elem_new(0);
50718#endif /* FREECIV_JSON_CONNECTION */
50719
50720 for (i = 0; i < real_packet->veteran_levels; i++) {
50721#ifdef FREECIV_JSON_CONNECTION
50722 /* Next array element. */
50723 field_addr.sub_location->number = i;
50724#endif /* FREECIV_JSON_CONNECTION */
50725
50726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
50727 }
50728
50729#ifdef FREECIV_JSON_CONNECTION
50730 /* Exit array. */
50731 FC_FREE(field_addr.sub_location);
50732#endif /* FREECIV_JSON_CONNECTION */
50733 }
50734
50735 if (e) {
50736 log_packet_detailed("'base_raise_chance' field error detected");
50737 }
50738
50739#ifdef FREECIV_JSON_CONNECTION
50740 field_addr.name = "work_raise_chance";
50741#endif /* FREECIV_JSON_CONNECTION */
50742 e = 0;
50743
50744 {
50745 int i;
50746
50747#ifdef FREECIV_JSON_CONNECTION
50748 /* Create the array. */
50749 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50750
50751 /* Enter array. */
50752 field_addr.sub_location = plocation_elem_new(0);
50753#endif /* FREECIV_JSON_CONNECTION */
50754
50755 for (i = 0; i < real_packet->veteran_levels; i++) {
50756#ifdef FREECIV_JSON_CONNECTION
50757 /* Next array element. */
50758 field_addr.sub_location->number = i;
50759#endif /* FREECIV_JSON_CONNECTION */
50760
50761 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
50762 }
50763
50764#ifdef FREECIV_JSON_CONNECTION
50765 /* Exit array. */
50766 FC_FREE(field_addr.sub_location);
50767#endif /* FREECIV_JSON_CONNECTION */
50768 }
50769
50770 if (e) {
50771 log_packet_detailed("'work_raise_chance' field error detected");
50772 }
50773
50774#ifdef FREECIV_JSON_CONNECTION
50775 field_addr.name = "bombard_rate";
50776#endif /* FREECIV_JSON_CONNECTION */
50777 e = 0;
50778
50779 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
50780
50781 if (e) {
50782 log_packet_detailed("'bombard_rate' field error detected");
50783 }
50784
50785#ifdef FREECIV_JSON_CONNECTION
50786 field_addr.name = "city_size";
50787#endif /* FREECIV_JSON_CONNECTION */
50788 e = 0;
50789
50790 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
50791
50792 if (e) {
50793 log_packet_detailed("'city_size' field error detected");
50794 }
50795
50796#ifdef FREECIV_JSON_CONNECTION
50797 field_addr.name = "city_slots";
50798#endif /* FREECIV_JSON_CONNECTION */
50799 e = 0;
50800
50801 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
50802
50803 if (e) {
50804 log_packet_detailed("'city_slots' field error detected");
50805 }
50806
50807#ifdef FREECIV_JSON_CONNECTION
50808 field_addr.name = "tp_defense";
50809#endif /* FREECIV_JSON_CONNECTION */
50810 e = 0;
50811
50812 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
50813
50814 if (e) {
50815 log_packet_detailed("'tp_defense' field error detected");
50816 }
50817
50818#ifdef FREECIV_JSON_CONNECTION
50819 field_addr.name = "cargo";
50820#endif /* FREECIV_JSON_CONNECTION */
50821 e = 0;
50822
50823 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->cargo);
50824
50825 if (e) {
50826 log_packet_detailed("'cargo' field error detected");
50827 }
50828
50829#ifdef FREECIV_JSON_CONNECTION
50830 field_addr.name = "targets";
50831#endif /* FREECIV_JSON_CONNECTION */
50832 e = 0;
50833
50834 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->targets);
50835
50836 if (e) {
50837 log_packet_detailed("'targets' field error detected");
50838 }
50839
50840#ifdef FREECIV_JSON_CONNECTION
50841 field_addr.name = "embarks";
50842#endif /* FREECIV_JSON_CONNECTION */
50843 e = 0;
50844
50845 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embarks);
50846
50847 if (e) {
50848 log_packet_detailed("'embarks' field error detected");
50849 }
50850
50851#ifdef FREECIV_JSON_CONNECTION
50852 field_addr.name = "disembarks";
50853#endif /* FREECIV_JSON_CONNECTION */
50854 e = 0;
50855
50856 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->disembarks);
50857
50858 if (e) {
50859 log_packet_detailed("'disembarks' field error detected");
50860 }
50861
50862#ifdef FREECIV_JSON_CONNECTION
50863 field_addr.name = "vlayer";
50864#endif /* FREECIV_JSON_CONNECTION */
50865 e = 0;
50866
50867 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
50868
50869 if (e) {
50870 log_packet_detailed("'vlayer' field error detected");
50871 }
50872
50873#ifdef FREECIV_JSON_CONNECTION
50874 field_addr.name = "helptext";
50875#endif /* FREECIV_JSON_CONNECTION */
50876 e = 0;
50877
50878 if (!real_packet->helptext) {
50879 /* Transmit null as empty */
50880 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
50881 } else {
50882 int i;
50883
50885 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
50886
50887#ifdef FREECIV_JSON_CONNECTION
50888 /* Enter array. */
50889 field_addr.sub_location = plocation_elem_new(0);
50890#endif /* FREECIV_JSON_CONNECTION */
50891
50892 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
50893#ifdef FREECIV_JSON_CONNECTION
50894 /* Next array element. */
50895 field_addr.sub_location->number = i;
50896#endif /* FREECIV_JSON_CONNECTION */
50897
50898 {
50899 const char *pstr = strvec_get(real_packet->helptext, i);
50900
50901 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
50902 }
50903 }
50904
50905#ifdef FREECIV_JSON_CONNECTION
50906 /* Exit array. */
50907 FC_FREE(field_addr.sub_location);
50908#endif /* FREECIV_JSON_CONNECTION */
50909 }
50910
50911 if (e) {
50912 log_packet_detailed("'helptext' field error detected");
50913 }
50914
50915#ifdef FREECIV_JSON_CONNECTION
50916 field_addr.name = "flags";
50917#endif /* FREECIV_JSON_CONNECTION */
50918 e = 0;
50919
50920 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
50921
50922 if (e) {
50923 log_packet_detailed("'flags' field error detected");
50924 }
50925
50926#ifdef FREECIV_JSON_CONNECTION
50927 field_addr.name = "roles";
50928#endif /* FREECIV_JSON_CONNECTION */
50929 e = 0;
50930
50931 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->roles);
50932
50933 if (e) {
50934 log_packet_detailed("'roles' field error detected");
50935 }
50936
50937#ifdef FREECIV_JSON_CONNECTION
50938 field_addr.name = "worker";
50939#endif /* FREECIV_JSON_CONNECTION */
50940 e = 0;
50941
50942 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->worker);
50943
50944 if (e) {
50945 log_packet_detailed("'worker' field error detected");
50946 }
50947#endif /* FREECIV_DELTA_PROTOCOL */
50948
50950}
50951
50953{
50954 if (!pc->used) {
50955 log_error("WARNING: trying to send data to the closed connection %s",
50957 return -1;
50958 }
50959 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT].packet != nullptr, -1,
50960 "Handler for PACKET_RULESET_UNIT not installed");
50961 return pc->phs.handlers->send[PACKET_RULESET_UNIT].packet(pc, packet);
50962}
50963
50964void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
50965{
50966 conn_list_iterate(dest, pconn) {
50969}
50970
50972{
50973 memset(packet, 0, sizeof(*packet));
50974}
50975
50976#define free_packet_ruleset_unit_bonus(_packet) (void) 0
50977#define destroy_packet_ruleset_unit_bonus free
50978
50979#ifdef FREECIV_DELTA_PROTOCOL
50980#define hash_packet_ruleset_unit_bonus_100 hash_const
50981#define cmp_packet_ruleset_unit_bonus_100 cmp_const
50983#endif /* FREECIV_DELTA_PROTOCOL */
50984
50986{
50987#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_bonus(_packet)
50989
50990#ifdef FREECIV_JSON_CONNECTION
50991 struct plocation field_addr;
50992 {
50993 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
50996 }
50997#endif /* FREECIV_JSON_CONNECTION */
50998
50999 log_packet_detailed("packet_ruleset_unit_bonus_100: got info about ()");
51000
51001#ifdef FREECIV_DELTA_PROTOCOL
51004 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_BONUS;
51005
51006 if (nullptr == *hash) {
51008 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
51009 }
51010
51011 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51012 *real_packet = *old;
51013 } else {
51014 /* packet is already initialized empty */
51015 log_packet_detailed(" no old info");
51016 }
51017
51018#ifdef FREECIV_JSON_CONNECTION
51019 field_addr.name = "fields";
51020#endif /* FREECIV_JSON_CONNECTION */
51021 DIO_BV_GET(&din, &field_addr, fields);
51022
51023 if (BV_ISSET(fields, 0)) {
51024 log_packet_detailed(" got field 'unit'");
51025
51026#ifdef FREECIV_JSON_CONNECTION
51027 field_addr.name = "unit";
51028#endif /* FREECIV_JSON_CONNECTION */
51029
51030 {
51031 int readin;
51032
51033 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
51035 }
51036 real_packet->unit = readin;
51037 }
51038 }
51039
51040 if (BV_ISSET(fields, 1)) {
51041 log_packet_detailed(" got field 'flag'");
51042
51043#ifdef FREECIV_JSON_CONNECTION
51044 field_addr.name = "flag";
51045#endif /* FREECIV_JSON_CONNECTION */
51046
51047 {
51048 int readin;
51049
51050 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51052 }
51053 real_packet->flag = readin;
51054 }
51055 }
51056
51057 if (BV_ISSET(fields, 2)) {
51058 log_packet_detailed(" got field 'type'");
51059
51060#ifdef FREECIV_JSON_CONNECTION
51061 field_addr.name = "type";
51062#endif /* FREECIV_JSON_CONNECTION */
51063
51064 {
51065 int readin;
51066
51067 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51069 }
51070 real_packet->type = readin;
51071 }
51072 }
51073
51074 if (BV_ISSET(fields, 3)) {
51075 log_packet_detailed(" got field 'value'");
51076
51077#ifdef FREECIV_JSON_CONNECTION
51078 field_addr.name = "value";
51079#endif /* FREECIV_JSON_CONNECTION */
51080
51081 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
51083 }
51084 }
51085
51086 real_packet->quiet = BV_ISSET(fields, 4);
51087
51088 if (nullptr == old) {
51089 old = fc_malloc(sizeof(*old));
51091 *old = *real_packet;
51093 } else {
51094 *old = *real_packet;
51095 }
51096
51097#else /* FREECIV_DELTA_PROTOCOL */
51098#ifdef FREECIV_JSON_CONNECTION
51099 field_addr.name = "unit";
51100#endif /* FREECIV_JSON_CONNECTION */
51101
51102 {
51103 int readin;
51104
51105 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
51107 }
51108 real_packet->unit = readin;
51109 }
51110
51111#ifdef FREECIV_JSON_CONNECTION
51112 field_addr.name = "flag";
51113#endif /* FREECIV_JSON_CONNECTION */
51114
51115 {
51116 int readin;
51117
51118 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51120 }
51121 real_packet->flag = readin;
51122 }
51123
51124#ifdef FREECIV_JSON_CONNECTION
51125 field_addr.name = "type";
51126#endif /* FREECIV_JSON_CONNECTION */
51127
51128 {
51129 int readin;
51130
51131 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51133 }
51134 real_packet->type = readin;
51135 }
51136
51137#ifdef FREECIV_JSON_CONNECTION
51138 field_addr.name = "value";
51139#endif /* FREECIV_JSON_CONNECTION */
51140
51141 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
51143 }
51144
51145#ifdef FREECIV_JSON_CONNECTION
51146 field_addr.name = "quiet";
51147#endif /* FREECIV_JSON_CONNECTION */
51148
51149 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
51151 }
51152#endif /* FREECIV_DELTA_PROTOCOL */
51153
51155#undef FREE_PACKET_STRUCT
51156}
51157
51159{
51160 const struct packet_ruleset_unit_bonus *real_packet = packet;
51161 int e;
51163
51164 log_packet_detailed("packet_ruleset_unit_bonus_100: sending info about ()");
51165
51166#ifdef FREECIV_DELTA_PROTOCOL
51169 bool differ;
51170 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_BONUS;
51171
51172 if (nullptr == *hash) {
51174 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_bonus);
51175 }
51176 BV_CLR_ALL(fields);
51177
51178 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51179 old = fc_malloc(sizeof(*old));
51180 /* temporary bitcopy just to insert correctly */
51181 *old = *real_packet;
51184 }
51185
51186 differ = (old->unit != real_packet->unit);
51187 if (differ) {
51188 BV_SET(fields, 0);
51189 }
51190
51191 differ = (old->flag != real_packet->flag);
51192 if (differ) {
51193 BV_SET(fields, 1);
51194 }
51195
51196 differ = (old->type != real_packet->type);
51197 if (differ) {
51198 BV_SET(fields, 2);
51199 }
51200
51201 differ = (old->value != real_packet->value);
51202 if (differ) {
51203 BV_SET(fields, 3);
51204 }
51205
51206 /* folded into head */
51207 if (real_packet->quiet) {
51208 BV_SET(fields, 4);
51209 }
51210#endif /* FREECIV_DELTA_PROTOCOL */
51211
51212#ifdef FREECIV_JSON_CONNECTION
51213 struct plocation field_addr;
51214 {
51215 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51218 }
51219#endif /* FREECIV_JSON_CONNECTION */
51220
51221#ifdef FREECIV_DELTA_PROTOCOL
51222#ifdef FREECIV_JSON_CONNECTION
51223 field_addr.name = "fields";
51224#endif /* FREECIV_JSON_CONNECTION */
51225 e = 0;
51226 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51227 if (e) {
51228 log_packet_detailed("fields bitvector error detected");
51229 }
51230
51231 if (BV_ISSET(fields, 0)) {
51232 log_packet_detailed(" field 'unit' has changed");
51233
51234#ifdef FREECIV_JSON_CONNECTION
51235 field_addr.name = "unit";
51236#endif /* FREECIV_JSON_CONNECTION */
51237 e = 0;
51238
51239 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51240
51241 if (e) {
51242 log_packet_detailed("'unit' field error detected");
51243 }
51244 }
51245
51246 if (BV_ISSET(fields, 1)) {
51247 log_packet_detailed(" field 'flag' has changed");
51248
51249#ifdef FREECIV_JSON_CONNECTION
51250 field_addr.name = "flag";
51251#endif /* FREECIV_JSON_CONNECTION */
51252 e = 0;
51253
51254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51255
51256 if (e) {
51257 log_packet_detailed("'flag' field error detected");
51258 }
51259 }
51260
51261 if (BV_ISSET(fields, 2)) {
51262 log_packet_detailed(" field 'type' has changed");
51263
51264#ifdef FREECIV_JSON_CONNECTION
51265 field_addr.name = "type";
51266#endif /* FREECIV_JSON_CONNECTION */
51267 e = 0;
51268
51269 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51270
51271 if (e) {
51272 log_packet_detailed("'type' field error detected");
51273 }
51274 }
51275
51276 if (BV_ISSET(fields, 3)) {
51277 log_packet_detailed(" field 'value' has changed");
51278
51279#ifdef FREECIV_JSON_CONNECTION
51280 field_addr.name = "value";
51281#endif /* FREECIV_JSON_CONNECTION */
51282 e = 0;
51283
51284 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51285
51286 if (e) {
51287 log_packet_detailed("'value' field error detected");
51288 }
51289 }
51290
51291 /* field 4 is folded into the header */
51292
51293 *old = *real_packet;
51294
51295#else /* FREECIV_DELTA_PROTOCOL */
51296#ifdef FREECIV_JSON_CONNECTION
51297 field_addr.name = "unit";
51298#endif /* FREECIV_JSON_CONNECTION */
51299 e = 0;
51300
51301 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
51302
51303 if (e) {
51304 log_packet_detailed("'unit' field error detected");
51305 }
51306
51307#ifdef FREECIV_JSON_CONNECTION
51308 field_addr.name = "flag";
51309#endif /* FREECIV_JSON_CONNECTION */
51310 e = 0;
51311
51312 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
51313
51314 if (e) {
51315 log_packet_detailed("'flag' field error detected");
51316 }
51317
51318#ifdef FREECIV_JSON_CONNECTION
51319 field_addr.name = "type";
51320#endif /* FREECIV_JSON_CONNECTION */
51321 e = 0;
51322
51323 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
51324
51325 if (e) {
51326 log_packet_detailed("'type' field error detected");
51327 }
51328
51329#ifdef FREECIV_JSON_CONNECTION
51330 field_addr.name = "value";
51331#endif /* FREECIV_JSON_CONNECTION */
51332 e = 0;
51333
51334 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
51335
51336 if (e) {
51337 log_packet_detailed("'value' field error detected");
51338 }
51339
51340#ifdef FREECIV_JSON_CONNECTION
51341 field_addr.name = "quiet";
51342#endif /* FREECIV_JSON_CONNECTION */
51343 e = 0;
51344
51345 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
51346
51347 if (e) {
51348 log_packet_detailed("'quiet' field error detected");
51349 }
51350#endif /* FREECIV_DELTA_PROTOCOL */
51351
51353}
51354
51356{
51357 if (!pc->used) {
51358 log_error("WARNING: trying to send data to the closed connection %s",
51360 return -1;
51361 }
51362 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet != nullptr, -1,
51363 "Handler for PACKET_RULESET_UNIT_BONUS not installed");
51364 return pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet(pc, packet);
51365}
51366
51368{
51369 conn_list_iterate(dest, pconn) {
51372}
51373
51375{
51376 memset(packet, 0, sizeof(*packet));
51377}
51378
51379#define free_packet_ruleset_unit_flag(_packet) (void) 0
51380#define destroy_packet_ruleset_unit_flag free
51381
51382#ifdef FREECIV_DELTA_PROTOCOL
51383#define hash_packet_ruleset_unit_flag_100 hash_const
51384#define cmp_packet_ruleset_unit_flag_100 cmp_const
51386#endif /* FREECIV_DELTA_PROTOCOL */
51387
51389{
51390#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_flag(_packet)
51392
51393#ifdef FREECIV_JSON_CONNECTION
51394 struct plocation field_addr;
51395 {
51396 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51399 }
51400#endif /* FREECIV_JSON_CONNECTION */
51401
51402 log_packet_detailed("packet_ruleset_unit_flag_100: got info about ()");
51403
51404#ifdef FREECIV_DELTA_PROTOCOL
51407 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_FLAG;
51408
51409 if (nullptr == *hash) {
51411 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51412 }
51413
51414 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51415 *real_packet = *old;
51416 } else {
51417 /* packet is already initialized empty */
51418 log_packet_detailed(" no old info");
51419 }
51420
51421#ifdef FREECIV_JSON_CONNECTION
51422 field_addr.name = "fields";
51423#endif /* FREECIV_JSON_CONNECTION */
51424 DIO_BV_GET(&din, &field_addr, fields);
51425
51426 if (BV_ISSET(fields, 0)) {
51427 log_packet_detailed(" got field 'id'");
51428
51429#ifdef FREECIV_JSON_CONNECTION
51430 field_addr.name = "id";
51431#endif /* FREECIV_JSON_CONNECTION */
51432
51433 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51435 }
51436 }
51437
51438 if (BV_ISSET(fields, 1)) {
51439 log_packet_detailed(" got field 'name'");
51440
51441#ifdef FREECIV_JSON_CONNECTION
51442 field_addr.name = "name";
51443#endif /* FREECIV_JSON_CONNECTION */
51444
51445 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51447 }
51448 }
51449
51450 if (BV_ISSET(fields, 2)) {
51451 log_packet_detailed(" got field 'helptxt'");
51452
51453#ifdef FREECIV_JSON_CONNECTION
51454 field_addr.name = "helptxt";
51455#endif /* FREECIV_JSON_CONNECTION */
51456
51457 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51459 }
51460 }
51461
51462 if (nullptr == old) {
51463 old = fc_malloc(sizeof(*old));
51465 *old = *real_packet;
51467 } else {
51468 *old = *real_packet;
51469 }
51470
51471#else /* FREECIV_DELTA_PROTOCOL */
51472#ifdef FREECIV_JSON_CONNECTION
51473 field_addr.name = "id";
51474#endif /* FREECIV_JSON_CONNECTION */
51475
51476 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51478 }
51479
51480#ifdef FREECIV_JSON_CONNECTION
51481 field_addr.name = "name";
51482#endif /* FREECIV_JSON_CONNECTION */
51483
51484 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51486 }
51487
51488#ifdef FREECIV_JSON_CONNECTION
51489 field_addr.name = "helptxt";
51490#endif /* FREECIV_JSON_CONNECTION */
51491
51492 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51494 }
51495#endif /* FREECIV_DELTA_PROTOCOL */
51496
51498#undef FREE_PACKET_STRUCT
51499}
51500
51502{
51503 const struct packet_ruleset_unit_flag *real_packet = packet;
51504 int e;
51506
51507 log_packet_detailed("packet_ruleset_unit_flag_100: sending info about ()");
51508
51509#ifdef FREECIV_DELTA_PROTOCOL
51512 bool differ;
51513 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_FLAG;
51514
51515 if (nullptr == *hash) {
51517 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_flag);
51518 }
51519 BV_CLR_ALL(fields);
51520
51521 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51522 old = fc_malloc(sizeof(*old));
51523 /* temporary bitcopy just to insert correctly */
51524 *old = *real_packet;
51527 }
51528
51529 differ = (old->id != real_packet->id);
51530 if (differ) {
51531 BV_SET(fields, 0);
51532 }
51533
51534 differ = (strcmp(old->name, real_packet->name) != 0);
51535 if (differ) {
51536 BV_SET(fields, 1);
51537 }
51538
51539 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51540 if (differ) {
51541 BV_SET(fields, 2);
51542 }
51543#endif /* FREECIV_DELTA_PROTOCOL */
51544
51545#ifdef FREECIV_JSON_CONNECTION
51546 struct plocation field_addr;
51547 {
51548 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51551 }
51552#endif /* FREECIV_JSON_CONNECTION */
51553
51554#ifdef FREECIV_DELTA_PROTOCOL
51555#ifdef FREECIV_JSON_CONNECTION
51556 field_addr.name = "fields";
51557#endif /* FREECIV_JSON_CONNECTION */
51558 e = 0;
51559 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51560 if (e) {
51561 log_packet_detailed("fields bitvector error detected");
51562 }
51563
51564 if (BV_ISSET(fields, 0)) {
51565 log_packet_detailed(" field 'id' has changed");
51566
51567#ifdef FREECIV_JSON_CONNECTION
51568 field_addr.name = "id";
51569#endif /* FREECIV_JSON_CONNECTION */
51570 e = 0;
51571
51572 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51573
51574 if (e) {
51575 log_packet_detailed("'id' field error detected");
51576 }
51577 }
51578
51579 if (BV_ISSET(fields, 1)) {
51580 log_packet_detailed(" field 'name' has changed");
51581
51582#ifdef FREECIV_JSON_CONNECTION
51583 field_addr.name = "name";
51584#endif /* FREECIV_JSON_CONNECTION */
51585 e = 0;
51586
51587 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51588
51589 if (e) {
51590 log_packet_detailed("'name' field error detected");
51591 }
51592 }
51593
51594 if (BV_ISSET(fields, 2)) {
51595 log_packet_detailed(" field 'helptxt' has changed");
51596
51597#ifdef FREECIV_JSON_CONNECTION
51598 field_addr.name = "helptxt";
51599#endif /* FREECIV_JSON_CONNECTION */
51600 e = 0;
51601
51602 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51603
51604 if (e) {
51605 log_packet_detailed("'helptxt' field error detected");
51606 }
51607 }
51608
51609 *old = *real_packet;
51610
51611#else /* FREECIV_DELTA_PROTOCOL */
51612#ifdef FREECIV_JSON_CONNECTION
51613 field_addr.name = "id";
51614#endif /* FREECIV_JSON_CONNECTION */
51615 e = 0;
51616
51617 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51618
51619 if (e) {
51620 log_packet_detailed("'id' field error detected");
51621 }
51622
51623#ifdef FREECIV_JSON_CONNECTION
51624 field_addr.name = "name";
51625#endif /* FREECIV_JSON_CONNECTION */
51626 e = 0;
51627
51628 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51629
51630 if (e) {
51631 log_packet_detailed("'name' field error detected");
51632 }
51633
51634#ifdef FREECIV_JSON_CONNECTION
51635 field_addr.name = "helptxt";
51636#endif /* FREECIV_JSON_CONNECTION */
51637 e = 0;
51638
51639 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51640
51641 if (e) {
51642 log_packet_detailed("'helptxt' field error detected");
51643 }
51644#endif /* FREECIV_DELTA_PROTOCOL */
51645
51647}
51648
51650{
51651 if (!pc->used) {
51652 log_error("WARNING: trying to send data to the closed connection %s",
51654 return -1;
51655 }
51656 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet != nullptr, -1,
51657 "Handler for PACKET_RULESET_UNIT_FLAG not installed");
51658 return pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet(pc, packet);
51659}
51660
51662{
51663 conn_list_iterate(dest, pconn) {
51666}
51667
51669{
51670 memset(packet, 0, sizeof(*packet));
51671}
51672
51673#define free_packet_ruleset_unit_class_flag(_packet) (void) 0
51674#define destroy_packet_ruleset_unit_class_flag free
51675
51676#ifdef FREECIV_DELTA_PROTOCOL
51677#define hash_packet_ruleset_unit_class_flag_100 hash_const
51678#define cmp_packet_ruleset_unit_class_flag_100 cmp_const
51680#endif /* FREECIV_DELTA_PROTOCOL */
51681
51683{
51684#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class_flag(_packet)
51686
51687#ifdef FREECIV_JSON_CONNECTION
51688 struct plocation field_addr;
51689 {
51690 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51693 }
51694#endif /* FREECIV_JSON_CONNECTION */
51695
51696 log_packet_detailed("packet_ruleset_unit_class_flag_100: got info about ()");
51697
51698#ifdef FREECIV_DELTA_PROTOCOL
51701 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS_FLAG;
51702
51703 if (nullptr == *hash) {
51705 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51706 }
51707
51708 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51709 *real_packet = *old;
51710 } else {
51711 /* packet is already initialized empty */
51712 log_packet_detailed(" no old info");
51713 }
51714
51715#ifdef FREECIV_JSON_CONNECTION
51716 field_addr.name = "fields";
51717#endif /* FREECIV_JSON_CONNECTION */
51718 DIO_BV_GET(&din, &field_addr, fields);
51719
51720 if (BV_ISSET(fields, 0)) {
51721 log_packet_detailed(" got field 'id'");
51722
51723#ifdef FREECIV_JSON_CONNECTION
51724 field_addr.name = "id";
51725#endif /* FREECIV_JSON_CONNECTION */
51726
51727 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51729 }
51730 }
51731
51732 if (BV_ISSET(fields, 1)) {
51733 log_packet_detailed(" got field 'name'");
51734
51735#ifdef FREECIV_JSON_CONNECTION
51736 field_addr.name = "name";
51737#endif /* FREECIV_JSON_CONNECTION */
51738
51739 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51741 }
51742 }
51743
51744 if (BV_ISSET(fields, 2)) {
51745 log_packet_detailed(" got field 'helptxt'");
51746
51747#ifdef FREECIV_JSON_CONNECTION
51748 field_addr.name = "helptxt";
51749#endif /* FREECIV_JSON_CONNECTION */
51750
51751 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51753 }
51754 }
51755
51756 if (nullptr == old) {
51757 old = fc_malloc(sizeof(*old));
51759 *old = *real_packet;
51761 } else {
51762 *old = *real_packet;
51763 }
51764
51765#else /* FREECIV_DELTA_PROTOCOL */
51766#ifdef FREECIV_JSON_CONNECTION
51767 field_addr.name = "id";
51768#endif /* FREECIV_JSON_CONNECTION */
51769
51770 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
51772 }
51773
51774#ifdef FREECIV_JSON_CONNECTION
51775 field_addr.name = "name";
51776#endif /* FREECIV_JSON_CONNECTION */
51777
51778 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
51780 }
51781
51782#ifdef FREECIV_JSON_CONNECTION
51783 field_addr.name = "helptxt";
51784#endif /* FREECIV_JSON_CONNECTION */
51785
51786 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
51788 }
51789#endif /* FREECIV_DELTA_PROTOCOL */
51790
51792#undef FREE_PACKET_STRUCT
51793}
51794
51796{
51797 const struct packet_ruleset_unit_class_flag *real_packet = packet;
51798 int e;
51800
51801 log_packet_detailed("packet_ruleset_unit_class_flag_100: sending info about ()");
51802
51803#ifdef FREECIV_DELTA_PROTOCOL
51806 bool differ;
51807 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS_FLAG;
51808
51809 if (nullptr == *hash) {
51811 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class_flag);
51812 }
51813 BV_CLR_ALL(fields);
51814
51815 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51816 old = fc_malloc(sizeof(*old));
51817 /* temporary bitcopy just to insert correctly */
51818 *old = *real_packet;
51821 }
51822
51823 differ = (old->id != real_packet->id);
51824 if (differ) {
51825 BV_SET(fields, 0);
51826 }
51827
51828 differ = (strcmp(old->name, real_packet->name) != 0);
51829 if (differ) {
51830 BV_SET(fields, 1);
51831 }
51832
51833 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
51834 if (differ) {
51835 BV_SET(fields, 2);
51836 }
51837#endif /* FREECIV_DELTA_PROTOCOL */
51838
51839#ifdef FREECIV_JSON_CONNECTION
51840 struct plocation field_addr;
51841 {
51842 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51845 }
51846#endif /* FREECIV_JSON_CONNECTION */
51847
51848#ifdef FREECIV_DELTA_PROTOCOL
51849#ifdef FREECIV_JSON_CONNECTION
51850 field_addr.name = "fields";
51851#endif /* FREECIV_JSON_CONNECTION */
51852 e = 0;
51853 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51854 if (e) {
51855 log_packet_detailed("fields bitvector error detected");
51856 }
51857
51858 if (BV_ISSET(fields, 0)) {
51859 log_packet_detailed(" field 'id' has changed");
51860
51861#ifdef FREECIV_JSON_CONNECTION
51862 field_addr.name = "id";
51863#endif /* FREECIV_JSON_CONNECTION */
51864 e = 0;
51865
51866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51867
51868 if (e) {
51869 log_packet_detailed("'id' field error detected");
51870 }
51871 }
51872
51873 if (BV_ISSET(fields, 1)) {
51874 log_packet_detailed(" field 'name' has changed");
51875
51876#ifdef FREECIV_JSON_CONNECTION
51877 field_addr.name = "name";
51878#endif /* FREECIV_JSON_CONNECTION */
51879 e = 0;
51880
51881 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51882
51883 if (e) {
51884 log_packet_detailed("'name' field error detected");
51885 }
51886 }
51887
51888 if (BV_ISSET(fields, 2)) {
51889 log_packet_detailed(" field 'helptxt' has changed");
51890
51891#ifdef FREECIV_JSON_CONNECTION
51892 field_addr.name = "helptxt";
51893#endif /* FREECIV_JSON_CONNECTION */
51894 e = 0;
51895
51896 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51897
51898 if (e) {
51899 log_packet_detailed("'helptxt' field error detected");
51900 }
51901 }
51902
51903 *old = *real_packet;
51904
51905#else /* FREECIV_DELTA_PROTOCOL */
51906#ifdef FREECIV_JSON_CONNECTION
51907 field_addr.name = "id";
51908#endif /* FREECIV_JSON_CONNECTION */
51909 e = 0;
51910
51911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51912
51913 if (e) {
51914 log_packet_detailed("'id' field error detected");
51915 }
51916
51917#ifdef FREECIV_JSON_CONNECTION
51918 field_addr.name = "name";
51919#endif /* FREECIV_JSON_CONNECTION */
51920 e = 0;
51921
51922 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
51923
51924 if (e) {
51925 log_packet_detailed("'name' field error detected");
51926 }
51927
51928#ifdef FREECIV_JSON_CONNECTION
51929 field_addr.name = "helptxt";
51930#endif /* FREECIV_JSON_CONNECTION */
51931 e = 0;
51932
51933 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
51934
51935 if (e) {
51936 log_packet_detailed("'helptxt' field error detected");
51937 }
51938#endif /* FREECIV_DELTA_PROTOCOL */
51939
51941}
51942
51944{
51945 if (!pc->used) {
51946 log_error("WARNING: trying to send data to the closed connection %s",
51948 return -1;
51949 }
51950 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet != nullptr, -1,
51951 "Handler for PACKET_RULESET_UNIT_CLASS_FLAG not installed");
51952 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet(pc, packet);
51953}
51954
51961
51962static inline void init_packet_ruleset_game(struct packet_ruleset_game *packet)
51963{
51964 memset(packet, 0, sizeof(*packet));
51965}
51966
51967#define free_packet_ruleset_game(_packet) (void) 0
51968#define destroy_packet_ruleset_game free
51969
51970#ifdef FREECIV_DELTA_PROTOCOL
51971#define hash_packet_ruleset_game_100 hash_const
51972#define cmp_packet_ruleset_game_100 cmp_const
51974#endif /* FREECIV_DELTA_PROTOCOL */
51975
51977{
51978#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_game(_packet)
51980
51981#ifdef FREECIV_JSON_CONNECTION
51982 struct plocation field_addr;
51983 {
51984 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
51987 }
51988#endif /* FREECIV_JSON_CONNECTION */
51989
51990 log_packet_detailed("packet_ruleset_game_100: got info about ()");
51991
51992#ifdef FREECIV_DELTA_PROTOCOL
51994 struct packet_ruleset_game *old;
51995 struct genhash **hash = pc->phs.received + PACKET_RULESET_GAME;
51996
51997 if (nullptr == *hash) {
51999 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
52000 }
52001
52002 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52003 *real_packet = *old;
52004 } else {
52005 /* packet is already initialized empty */
52006 log_packet_detailed(" no old info");
52007 }
52008
52009#ifdef FREECIV_JSON_CONNECTION
52010 field_addr.name = "fields";
52011#endif /* FREECIV_JSON_CONNECTION */
52012 DIO_BV_GET(&din, &field_addr, fields);
52013
52014 if (BV_ISSET(fields, 0)) {
52015 log_packet_detailed(" got field 'default_specialist'");
52016
52017#ifdef FREECIV_JSON_CONNECTION
52018 field_addr.name = "default_specialist";
52019#endif /* FREECIV_JSON_CONNECTION */
52020
52021 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
52023 }
52024 }
52025
52026 if (BV_ISSET(fields, 1)) {
52027 log_packet_detailed(" got field 'global_init_techs_count'");
52028
52029#ifdef FREECIV_JSON_CONNECTION
52030 field_addr.name = "global_init_techs_count";
52031#endif /* FREECIV_JSON_CONNECTION */
52032
52033 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
52034 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
52035 }
52036 }
52037
52038 if (BV_ISSET(fields, 2)) {
52039 log_packet_detailed(" got field 'global_init_techs'");
52040
52041#ifdef FREECIV_JSON_CONNECTION
52042 field_addr.name = "global_init_techs";
52043#endif /* FREECIV_JSON_CONNECTION */
52044
52045 {
52046 int i;
52047
52048 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
52049 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
52050 }
52051
52052#ifdef FREECIV_JSON_CONNECTION
52053 /* Enter array. */
52054 field_addr.sub_location = plocation_elem_new(0);
52055#endif /* FREECIV_JSON_CONNECTION */
52056
52057 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52058#ifdef FREECIV_JSON_CONNECTION
52059 /* Next array element */
52060 field_addr.sub_location->number = i;
52061#endif /* FREECIV_JSON_CONNECTION */
52062
52063 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
52064 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
52065 }
52066 }
52067
52068#ifdef FREECIV_JSON_CONNECTION
52069 /* Exit array. */
52070 FC_FREE(field_addr.sub_location);
52071#endif /* FREECIV_JSON_CONNECTION */
52072 }
52073 }
52074
52075 if (BV_ISSET(fields, 3)) {
52076 log_packet_detailed(" got field 'global_init_buildings_count'");
52077
52078#ifdef FREECIV_JSON_CONNECTION
52079 field_addr.name = "global_init_buildings_count";
52080#endif /* FREECIV_JSON_CONNECTION */
52081
52082 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
52083 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
52084 }
52085 }
52086
52087 if (BV_ISSET(fields, 4)) {
52088 log_packet_detailed(" got field 'global_init_buildings'");
52089
52090#ifdef FREECIV_JSON_CONNECTION
52091 field_addr.name = "global_init_buildings";
52092#endif /* FREECIV_JSON_CONNECTION */
52093
52094 {
52095 int i;
52096
52097 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
52098 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
52099 }
52100
52101#ifdef FREECIV_JSON_CONNECTION
52102 /* Enter array. */
52103 field_addr.sub_location = plocation_elem_new(0);
52104#endif /* FREECIV_JSON_CONNECTION */
52105
52106 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52107#ifdef FREECIV_JSON_CONNECTION
52108 /* Next array element */
52109 field_addr.sub_location->number = i;
52110#endif /* FREECIV_JSON_CONNECTION */
52111
52112 {
52113 int readin;
52114
52115 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52116 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52117 }
52118 real_packet->global_init_buildings[i] = readin;
52119 }
52120 }
52121
52122#ifdef FREECIV_JSON_CONNECTION
52123 /* Exit array. */
52124 FC_FREE(field_addr.sub_location);
52125#endif /* FREECIV_JSON_CONNECTION */
52126 }
52127 }
52128
52129 if (BV_ISSET(fields, 5)) {
52130 log_packet_detailed(" got field 'veteran_levels'");
52131
52132#ifdef FREECIV_JSON_CONNECTION
52133 field_addr.name = "veteran_levels";
52134#endif /* FREECIV_JSON_CONNECTION */
52135
52136 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52137 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52138 }
52139 }
52140
52141 if (BV_ISSET(fields, 6)) {
52142 log_packet_detailed(" got field 'veteran_name'");
52143
52144#ifdef FREECIV_JSON_CONNECTION
52145 field_addr.name = "veteran_name";
52146#endif /* FREECIV_JSON_CONNECTION */
52147
52148 {
52149 int i;
52150
52151 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52152 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52153 }
52154
52155#ifdef FREECIV_JSON_CONNECTION
52156 /* Enter array. */
52157 field_addr.sub_location = plocation_elem_new(0);
52158#endif /* FREECIV_JSON_CONNECTION */
52159
52160 for (i = 0; i < real_packet->veteran_levels; i++) {
52161#ifdef FREECIV_JSON_CONNECTION
52162 /* Next array element */
52163 field_addr.sub_location->number = i;
52164#endif /* FREECIV_JSON_CONNECTION */
52165
52166 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52167 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52168 }
52169 }
52170
52171#ifdef FREECIV_JSON_CONNECTION
52172 /* Exit array. */
52173 FC_FREE(field_addr.sub_location);
52174#endif /* FREECIV_JSON_CONNECTION */
52175 }
52176 }
52177
52178 if (BV_ISSET(fields, 7)) {
52179 log_packet_detailed(" got field 'power_fact'");
52180
52181#ifdef FREECIV_JSON_CONNECTION
52182 field_addr.name = "power_fact";
52183#endif /* FREECIV_JSON_CONNECTION */
52184
52185 {
52186 int i;
52187
52188 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52189 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52190 }
52191
52192#ifdef FREECIV_JSON_CONNECTION
52193 /* Enter array. */
52194 field_addr.sub_location = plocation_elem_new(0);
52195#endif /* FREECIV_JSON_CONNECTION */
52196
52197 for (i = 0; i < real_packet->veteran_levels; i++) {
52198#ifdef FREECIV_JSON_CONNECTION
52199 /* Next array element */
52200 field_addr.sub_location->number = i;
52201#endif /* FREECIV_JSON_CONNECTION */
52202
52203 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52204 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52205 }
52206 }
52207
52208#ifdef FREECIV_JSON_CONNECTION
52209 /* Exit array. */
52210 FC_FREE(field_addr.sub_location);
52211#endif /* FREECIV_JSON_CONNECTION */
52212 }
52213 }
52214
52215 if (BV_ISSET(fields, 8)) {
52216 log_packet_detailed(" got field 'move_bonus'");
52217
52218#ifdef FREECIV_JSON_CONNECTION
52219 field_addr.name = "move_bonus";
52220#endif /* FREECIV_JSON_CONNECTION */
52221
52222 {
52223 int i;
52224
52225 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52226 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52227 }
52228
52229#ifdef FREECIV_JSON_CONNECTION
52230 /* Enter array. */
52231 field_addr.sub_location = plocation_elem_new(0);
52232#endif /* FREECIV_JSON_CONNECTION */
52233
52234 for (i = 0; i < real_packet->veteran_levels; i++) {
52235#ifdef FREECIV_JSON_CONNECTION
52236 /* Next array element */
52237 field_addr.sub_location->number = i;
52238#endif /* FREECIV_JSON_CONNECTION */
52239
52240 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52241 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52242 }
52243 }
52244
52245#ifdef FREECIV_JSON_CONNECTION
52246 /* Exit array. */
52247 FC_FREE(field_addr.sub_location);
52248#endif /* FREECIV_JSON_CONNECTION */
52249 }
52250 }
52251
52252 if (BV_ISSET(fields, 9)) {
52253 log_packet_detailed(" got field 'base_raise_chance'");
52254
52255#ifdef FREECIV_JSON_CONNECTION
52256 field_addr.name = "base_raise_chance";
52257#endif /* FREECIV_JSON_CONNECTION */
52258
52259 {
52260 int i;
52261
52262 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52263 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52264 }
52265
52266#ifdef FREECIV_JSON_CONNECTION
52267 /* Enter array. */
52268 field_addr.sub_location = plocation_elem_new(0);
52269#endif /* FREECIV_JSON_CONNECTION */
52270
52271 for (i = 0; i < real_packet->veteran_levels; i++) {
52272#ifdef FREECIV_JSON_CONNECTION
52273 /* Next array element */
52274 field_addr.sub_location->number = i;
52275#endif /* FREECIV_JSON_CONNECTION */
52276
52277 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52278 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52279 }
52280 }
52281
52282#ifdef FREECIV_JSON_CONNECTION
52283 /* Exit array. */
52284 FC_FREE(field_addr.sub_location);
52285#endif /* FREECIV_JSON_CONNECTION */
52286 }
52287 }
52288
52289 if (BV_ISSET(fields, 10)) {
52290 log_packet_detailed(" got field 'work_raise_chance'");
52291
52292#ifdef FREECIV_JSON_CONNECTION
52293 field_addr.name = "work_raise_chance";
52294#endif /* FREECIV_JSON_CONNECTION */
52295
52296 {
52297 int i;
52298
52299 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52300 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52301 }
52302
52303#ifdef FREECIV_JSON_CONNECTION
52304 /* Enter array. */
52305 field_addr.sub_location = plocation_elem_new(0);
52306#endif /* FREECIV_JSON_CONNECTION */
52307
52308 for (i = 0; i < real_packet->veteran_levels; i++) {
52309#ifdef FREECIV_JSON_CONNECTION
52310 /* Next array element */
52311 field_addr.sub_location->number = i;
52312#endif /* FREECIV_JSON_CONNECTION */
52313
52314 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52315 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52316 }
52317 }
52318
52319#ifdef FREECIV_JSON_CONNECTION
52320 /* Exit array. */
52321 FC_FREE(field_addr.sub_location);
52322#endif /* FREECIV_JSON_CONNECTION */
52323 }
52324 }
52325
52326 if (BV_ISSET(fields, 11)) {
52327 log_packet_detailed(" got field 'background_red'");
52328
52329#ifdef FREECIV_JSON_CONNECTION
52330 field_addr.name = "background_red";
52331#endif /* FREECIV_JSON_CONNECTION */
52332
52333 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52334 RECEIVE_PACKET_FIELD_ERROR(background_red);
52335 }
52336 }
52337
52338 if (BV_ISSET(fields, 12)) {
52339 log_packet_detailed(" got field 'background_green'");
52340
52341#ifdef FREECIV_JSON_CONNECTION
52342 field_addr.name = "background_green";
52343#endif /* FREECIV_JSON_CONNECTION */
52344
52345 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52346 RECEIVE_PACKET_FIELD_ERROR(background_green);
52347 }
52348 }
52349
52350 if (BV_ISSET(fields, 13)) {
52351 log_packet_detailed(" got field 'background_blue'");
52352
52353#ifdef FREECIV_JSON_CONNECTION
52354 field_addr.name = "background_blue";
52355#endif /* FREECIV_JSON_CONNECTION */
52356
52357 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52358 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52359 }
52360 }
52361
52362 if (nullptr == old) {
52363 old = fc_malloc(sizeof(*old));
52365 *old = *real_packet;
52367 } else {
52368 *old = *real_packet;
52369 }
52370
52371#else /* FREECIV_DELTA_PROTOCOL */
52372#ifdef FREECIV_JSON_CONNECTION
52373 field_addr.name = "default_specialist";
52374#endif /* FREECIV_JSON_CONNECTION */
52375
52376 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
52378 }
52379
52380#ifdef FREECIV_JSON_CONNECTION
52381 field_addr.name = "global_init_techs_count";
52382#endif /* FREECIV_JSON_CONNECTION */
52383
52384 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
52385 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
52386 }
52387
52388#ifdef FREECIV_JSON_CONNECTION
52389 field_addr.name = "global_init_techs";
52390#endif /* FREECIV_JSON_CONNECTION */
52391
52392 {
52393 int i;
52394
52395 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
52396 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": array truncated");
52397 }
52398
52399#ifdef FREECIV_JSON_CONNECTION
52400 /* Enter array. */
52401 field_addr.sub_location = plocation_elem_new(0);
52402#endif /* FREECIV_JSON_CONNECTION */
52403
52404 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52405#ifdef FREECIV_JSON_CONNECTION
52406 /* Next array element */
52407 field_addr.sub_location->number = i;
52408#endif /* FREECIV_JSON_CONNECTION */
52409
52410 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
52411 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
52412 }
52413 }
52414
52415#ifdef FREECIV_JSON_CONNECTION
52416 /* Exit array. */
52417 FC_FREE(field_addr.sub_location);
52418#endif /* FREECIV_JSON_CONNECTION */
52419 }
52420
52421#ifdef FREECIV_JSON_CONNECTION
52422 field_addr.name = "global_init_buildings_count";
52423#endif /* FREECIV_JSON_CONNECTION */
52424
52425 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
52426 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
52427 }
52428
52429#ifdef FREECIV_JSON_CONNECTION
52430 field_addr.name = "global_init_buildings";
52431#endif /* FREECIV_JSON_CONNECTION */
52432
52433 {
52434 int i;
52435
52436 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
52437 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": array truncated");
52438 }
52439
52440#ifdef FREECIV_JSON_CONNECTION
52441 /* Enter array. */
52442 field_addr.sub_location = plocation_elem_new(0);
52443#endif /* FREECIV_JSON_CONNECTION */
52444
52445 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52446#ifdef FREECIV_JSON_CONNECTION
52447 /* Next array element */
52448 field_addr.sub_location->number = i;
52449#endif /* FREECIV_JSON_CONNECTION */
52450
52451 {
52452 int readin;
52453
52454 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52455 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
52456 }
52457 real_packet->global_init_buildings[i] = readin;
52458 }
52459 }
52460
52461#ifdef FREECIV_JSON_CONNECTION
52462 /* Exit array. */
52463 FC_FREE(field_addr.sub_location);
52464#endif /* FREECIV_JSON_CONNECTION */
52465 }
52466
52467#ifdef FREECIV_JSON_CONNECTION
52468 field_addr.name = "veteran_levels";
52469#endif /* FREECIV_JSON_CONNECTION */
52470
52471 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
52472 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
52473 }
52474
52475#ifdef FREECIV_JSON_CONNECTION
52476 field_addr.name = "veteran_name";
52477#endif /* FREECIV_JSON_CONNECTION */
52478
52479 {
52480 int i;
52481
52482 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52483 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": array truncated");
52484 }
52485
52486#ifdef FREECIV_JSON_CONNECTION
52487 /* Enter array. */
52488 field_addr.sub_location = plocation_elem_new(0);
52489#endif /* FREECIV_JSON_CONNECTION */
52490
52491 for (i = 0; i < real_packet->veteran_levels; i++) {
52492#ifdef FREECIV_JSON_CONNECTION
52493 /* Next array element */
52494 field_addr.sub_location->number = i;
52495#endif /* FREECIV_JSON_CONNECTION */
52496
52497 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
52498 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
52499 }
52500 }
52501
52502#ifdef FREECIV_JSON_CONNECTION
52503 /* Exit array. */
52504 FC_FREE(field_addr.sub_location);
52505#endif /* FREECIV_JSON_CONNECTION */
52506 }
52507
52508#ifdef FREECIV_JSON_CONNECTION
52509 field_addr.name = "power_fact";
52510#endif /* FREECIV_JSON_CONNECTION */
52511
52512 {
52513 int i;
52514
52515 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52516 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": array truncated");
52517 }
52518
52519#ifdef FREECIV_JSON_CONNECTION
52520 /* Enter array. */
52521 field_addr.sub_location = plocation_elem_new(0);
52522#endif /* FREECIV_JSON_CONNECTION */
52523
52524 for (i = 0; i < real_packet->veteran_levels; i++) {
52525#ifdef FREECIV_JSON_CONNECTION
52526 /* Next array element */
52527 field_addr.sub_location->number = i;
52528#endif /* FREECIV_JSON_CONNECTION */
52529
52530 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
52531 RECEIVE_PACKET_FIELD_ERROR(power_fact);
52532 }
52533 }
52534
52535#ifdef FREECIV_JSON_CONNECTION
52536 /* Exit array. */
52537 FC_FREE(field_addr.sub_location);
52538#endif /* FREECIV_JSON_CONNECTION */
52539 }
52540
52541#ifdef FREECIV_JSON_CONNECTION
52542 field_addr.name = "move_bonus";
52543#endif /* FREECIV_JSON_CONNECTION */
52544
52545 {
52546 int i;
52547
52548 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52549 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": array truncated");
52550 }
52551
52552#ifdef FREECIV_JSON_CONNECTION
52553 /* Enter array. */
52554 field_addr.sub_location = plocation_elem_new(0);
52555#endif /* FREECIV_JSON_CONNECTION */
52556
52557 for (i = 0; i < real_packet->veteran_levels; i++) {
52558#ifdef FREECIV_JSON_CONNECTION
52559 /* Next array element */
52560 field_addr.sub_location->number = i;
52561#endif /* FREECIV_JSON_CONNECTION */
52562
52563 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
52564 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
52565 }
52566 }
52567
52568#ifdef FREECIV_JSON_CONNECTION
52569 /* Exit array. */
52570 FC_FREE(field_addr.sub_location);
52571#endif /* FREECIV_JSON_CONNECTION */
52572 }
52573
52574#ifdef FREECIV_JSON_CONNECTION
52575 field_addr.name = "base_raise_chance";
52576#endif /* FREECIV_JSON_CONNECTION */
52577
52578 {
52579 int i;
52580
52581 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52582 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": array truncated");
52583 }
52584
52585#ifdef FREECIV_JSON_CONNECTION
52586 /* Enter array. */
52587 field_addr.sub_location = plocation_elem_new(0);
52588#endif /* FREECIV_JSON_CONNECTION */
52589
52590 for (i = 0; i < real_packet->veteran_levels; i++) {
52591#ifdef FREECIV_JSON_CONNECTION
52592 /* Next array element */
52593 field_addr.sub_location->number = i;
52594#endif /* FREECIV_JSON_CONNECTION */
52595
52596 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
52597 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
52598 }
52599 }
52600
52601#ifdef FREECIV_JSON_CONNECTION
52602 /* Exit array. */
52603 FC_FREE(field_addr.sub_location);
52604#endif /* FREECIV_JSON_CONNECTION */
52605 }
52606
52607#ifdef FREECIV_JSON_CONNECTION
52608 field_addr.name = "work_raise_chance";
52609#endif /* FREECIV_JSON_CONNECTION */
52610
52611 {
52612 int i;
52613
52614 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
52615 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": array truncated");
52616 }
52617
52618#ifdef FREECIV_JSON_CONNECTION
52619 /* Enter array. */
52620 field_addr.sub_location = plocation_elem_new(0);
52621#endif /* FREECIV_JSON_CONNECTION */
52622
52623 for (i = 0; i < real_packet->veteran_levels; i++) {
52624#ifdef FREECIV_JSON_CONNECTION
52625 /* Next array element */
52626 field_addr.sub_location->number = i;
52627#endif /* FREECIV_JSON_CONNECTION */
52628
52629 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
52630 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
52631 }
52632 }
52633
52634#ifdef FREECIV_JSON_CONNECTION
52635 /* Exit array. */
52636 FC_FREE(field_addr.sub_location);
52637#endif /* FREECIV_JSON_CONNECTION */
52638 }
52639
52640#ifdef FREECIV_JSON_CONNECTION
52641 field_addr.name = "background_red";
52642#endif /* FREECIV_JSON_CONNECTION */
52643
52644 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
52645 RECEIVE_PACKET_FIELD_ERROR(background_red);
52646 }
52647
52648#ifdef FREECIV_JSON_CONNECTION
52649 field_addr.name = "background_green";
52650#endif /* FREECIV_JSON_CONNECTION */
52651
52652 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
52653 RECEIVE_PACKET_FIELD_ERROR(background_green);
52654 }
52655
52656#ifdef FREECIV_JSON_CONNECTION
52657 field_addr.name = "background_blue";
52658#endif /* FREECIV_JSON_CONNECTION */
52659
52660 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
52661 RECEIVE_PACKET_FIELD_ERROR(background_blue);
52662 }
52663#endif /* FREECIV_DELTA_PROTOCOL */
52664
52666#undef FREE_PACKET_STRUCT
52667}
52668
52669static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
52670{
52671 const struct packet_ruleset_game *real_packet = packet;
52672 int e;
52674
52675 log_packet_detailed("packet_ruleset_game_100: sending info about ()");
52676
52677#ifdef FREECIV_DELTA_PROTOCOL
52679 struct packet_ruleset_game *old;
52680 bool differ;
52681 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GAME;
52682
52683 if (nullptr == *hash) {
52685 nullptr, nullptr, nullptr, destroy_packet_ruleset_game);
52686 }
52687 BV_CLR_ALL(fields);
52688
52689 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52690 old = fc_malloc(sizeof(*old));
52691 /* temporary bitcopy just to insert correctly */
52692 *old = *real_packet;
52695 }
52696
52697 differ = (old->default_specialist != real_packet->default_specialist);
52698 if (differ) {
52699 BV_SET(fields, 0);
52700 }
52701
52702 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52703 if (differ) {
52704 BV_SET(fields, 1);
52705 }
52706
52707 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
52708 if (!differ) {
52709 int i;
52710
52711 for (i = 0; i < old->global_init_techs_count; i++) {
52712 differ = (old->global_init_techs[i] != real_packet->global_init_techs[i]);
52713 if (differ) {
52714 break;
52715 }
52716 }
52717 }
52718 if (differ) {
52719 BV_SET(fields, 2);
52720 }
52721
52722 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52723 if (differ) {
52724 BV_SET(fields, 3);
52725 }
52726
52727 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
52728 if (!differ) {
52729 int i;
52730
52731 for (i = 0; i < old->global_init_buildings_count; i++) {
52732 differ = (old->global_init_buildings[i] != real_packet->global_init_buildings[i]);
52733 if (differ) {
52734 break;
52735 }
52736 }
52737 }
52738 if (differ) {
52739 BV_SET(fields, 4);
52740 }
52741
52742 differ = (old->veteran_levels != real_packet->veteran_levels);
52743 if (differ) {
52744 BV_SET(fields, 5);
52745 }
52746
52747 differ = (old->veteran_levels != real_packet->veteran_levels);
52748 if (!differ) {
52749 int i;
52750
52751 for (i = 0; i < old->veteran_levels; i++) {
52752 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
52753 if (differ) {
52754 break;
52755 }
52756 }
52757 }
52758 if (differ) {
52759 BV_SET(fields, 6);
52760 }
52761
52762 differ = (old->veteran_levels != real_packet->veteran_levels);
52763 if (!differ) {
52764 int i;
52765
52766 for (i = 0; i < old->veteran_levels; i++) {
52767 differ = (old->power_fact[i] != real_packet->power_fact[i]);
52768 if (differ) {
52769 break;
52770 }
52771 }
52772 }
52773 if (differ) {
52774 BV_SET(fields, 7);
52775 }
52776
52777 differ = (old->veteran_levels != real_packet->veteran_levels);
52778 if (!differ) {
52779 int i;
52780
52781 for (i = 0; i < old->veteran_levels; i++) {
52782 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
52783 if (differ) {
52784 break;
52785 }
52786 }
52787 }
52788 if (differ) {
52789 BV_SET(fields, 8);
52790 }
52791
52792 differ = (old->veteran_levels != real_packet->veteran_levels);
52793 if (!differ) {
52794 int i;
52795
52796 for (i = 0; i < old->veteran_levels; i++) {
52797 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
52798 if (differ) {
52799 break;
52800 }
52801 }
52802 }
52803 if (differ) {
52804 BV_SET(fields, 9);
52805 }
52806
52807 differ = (old->veteran_levels != real_packet->veteran_levels);
52808 if (!differ) {
52809 int i;
52810
52811 for (i = 0; i < old->veteran_levels; i++) {
52812 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
52813 if (differ) {
52814 break;
52815 }
52816 }
52817 }
52818 if (differ) {
52819 BV_SET(fields, 10);
52820 }
52821
52822 differ = (old->background_red != real_packet->background_red);
52823 if (differ) {
52824 BV_SET(fields, 11);
52825 }
52826
52827 differ = (old->background_green != real_packet->background_green);
52828 if (differ) {
52829 BV_SET(fields, 12);
52830 }
52831
52832 differ = (old->background_blue != real_packet->background_blue);
52833 if (differ) {
52834 BV_SET(fields, 13);
52835 }
52836#endif /* FREECIV_DELTA_PROTOCOL */
52837
52838#ifdef FREECIV_JSON_CONNECTION
52839 struct plocation field_addr;
52840 {
52841 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
52844 }
52845#endif /* FREECIV_JSON_CONNECTION */
52846
52847#ifdef FREECIV_DELTA_PROTOCOL
52848#ifdef FREECIV_JSON_CONNECTION
52849 field_addr.name = "fields";
52850#endif /* FREECIV_JSON_CONNECTION */
52851 e = 0;
52852 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52853 if (e) {
52854 log_packet_detailed("fields bitvector error detected");
52855 }
52856
52857 if (BV_ISSET(fields, 0)) {
52858 log_packet_detailed(" field 'default_specialist' has changed");
52859
52860#ifdef FREECIV_JSON_CONNECTION
52861 field_addr.name = "default_specialist";
52862#endif /* FREECIV_JSON_CONNECTION */
52863 e = 0;
52864
52865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
52866
52867 if (e) {
52868 log_packet_detailed("'default_specialist' field error detected");
52869 }
52870 }
52871
52872 if (BV_ISSET(fields, 1)) {
52873 log_packet_detailed(" field 'global_init_techs_count' has changed");
52874
52875#ifdef FREECIV_JSON_CONNECTION
52876 field_addr.name = "global_init_techs_count";
52877#endif /* FREECIV_JSON_CONNECTION */
52878 e = 0;
52879
52880 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
52881
52882 if (e) {
52883 log_packet_detailed("'global_init_techs_count' field error detected");
52884 }
52885 }
52886
52887 if (BV_ISSET(fields, 2)) {
52888 log_packet_detailed(" field 'global_init_techs' has changed");
52889
52890#ifdef FREECIV_JSON_CONNECTION
52891 field_addr.name = "global_init_techs";
52892#endif /* FREECIV_JSON_CONNECTION */
52893 e = 0;
52894
52895 {
52896 int i;
52897
52898#ifdef FREECIV_JSON_CONNECTION
52899 /* Create the array. */
52900 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
52901
52902 /* Enter array. */
52903 field_addr.sub_location = plocation_elem_new(0);
52904#endif /* FREECIV_JSON_CONNECTION */
52905
52906 for (i = 0; i < real_packet->global_init_techs_count; i++) {
52907#ifdef FREECIV_JSON_CONNECTION
52908 /* Next array element. */
52909 field_addr.sub_location->number = i;
52910#endif /* FREECIV_JSON_CONNECTION */
52911
52912 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
52913 }
52914
52915#ifdef FREECIV_JSON_CONNECTION
52916 /* Exit array. */
52917 FC_FREE(field_addr.sub_location);
52918#endif /* FREECIV_JSON_CONNECTION */
52919 }
52920
52921 if (e) {
52922 log_packet_detailed("'global_init_techs' field error detected");
52923 }
52924 }
52925
52926 if (BV_ISSET(fields, 3)) {
52927 log_packet_detailed(" field 'global_init_buildings_count' has changed");
52928
52929#ifdef FREECIV_JSON_CONNECTION
52930 field_addr.name = "global_init_buildings_count";
52931#endif /* FREECIV_JSON_CONNECTION */
52932 e = 0;
52933
52934 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
52935
52936 if (e) {
52937 log_packet_detailed("'global_init_buildings_count' field error detected");
52938 }
52939 }
52940
52941 if (BV_ISSET(fields, 4)) {
52942 log_packet_detailed(" field 'global_init_buildings' has changed");
52943
52944#ifdef FREECIV_JSON_CONNECTION
52945 field_addr.name = "global_init_buildings";
52946#endif /* FREECIV_JSON_CONNECTION */
52947 e = 0;
52948
52949 {
52950 int i;
52951
52952#ifdef FREECIV_JSON_CONNECTION
52953 /* Create the array. */
52954 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
52955
52956 /* Enter array. */
52957 field_addr.sub_location = plocation_elem_new(0);
52958#endif /* FREECIV_JSON_CONNECTION */
52959
52960 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
52961#ifdef FREECIV_JSON_CONNECTION
52962 /* Next array element. */
52963 field_addr.sub_location->number = i;
52964#endif /* FREECIV_JSON_CONNECTION */
52965
52966 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
52967 }
52968
52969#ifdef FREECIV_JSON_CONNECTION
52970 /* Exit array. */
52971 FC_FREE(field_addr.sub_location);
52972#endif /* FREECIV_JSON_CONNECTION */
52973 }
52974
52975 if (e) {
52976 log_packet_detailed("'global_init_buildings' field error detected");
52977 }
52978 }
52979
52980 if (BV_ISSET(fields, 5)) {
52981 log_packet_detailed(" field 'veteran_levels' has changed");
52982
52983#ifdef FREECIV_JSON_CONNECTION
52984 field_addr.name = "veteran_levels";
52985#endif /* FREECIV_JSON_CONNECTION */
52986 e = 0;
52987
52988 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
52989
52990 if (e) {
52991 log_packet_detailed("'veteran_levels' field error detected");
52992 }
52993 }
52994
52995 if (BV_ISSET(fields, 6)) {
52996 log_packet_detailed(" field 'veteran_name' has changed");
52997
52998#ifdef FREECIV_JSON_CONNECTION
52999 field_addr.name = "veteran_name";
53000#endif /* FREECIV_JSON_CONNECTION */
53001 e = 0;
53002
53003 {
53004 int i;
53005
53006#ifdef FREECIV_JSON_CONNECTION
53007 /* Create the array. */
53008 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53009
53010 /* Enter array. */
53011 field_addr.sub_location = plocation_elem_new(0);
53012#endif /* FREECIV_JSON_CONNECTION */
53013
53014 for (i = 0; i < real_packet->veteran_levels; i++) {
53015#ifdef FREECIV_JSON_CONNECTION
53016 /* Next array element. */
53017 field_addr.sub_location->number = i;
53018#endif /* FREECIV_JSON_CONNECTION */
53019
53020 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
53021 }
53022
53023#ifdef FREECIV_JSON_CONNECTION
53024 /* Exit array. */
53025 FC_FREE(field_addr.sub_location);
53026#endif /* FREECIV_JSON_CONNECTION */
53027 }
53028
53029 if (e) {
53030 log_packet_detailed("'veteran_name' field error detected");
53031 }
53032 }
53033
53034 if (BV_ISSET(fields, 7)) {
53035 log_packet_detailed(" field 'power_fact' has changed");
53036
53037#ifdef FREECIV_JSON_CONNECTION
53038 field_addr.name = "power_fact";
53039#endif /* FREECIV_JSON_CONNECTION */
53040 e = 0;
53041
53042 {
53043 int i;
53044
53045#ifdef FREECIV_JSON_CONNECTION
53046 /* Create the array. */
53047 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53048
53049 /* Enter array. */
53050 field_addr.sub_location = plocation_elem_new(0);
53051#endif /* FREECIV_JSON_CONNECTION */
53052
53053 for (i = 0; i < real_packet->veteran_levels; i++) {
53054#ifdef FREECIV_JSON_CONNECTION
53055 /* Next array element. */
53056 field_addr.sub_location->number = i;
53057#endif /* FREECIV_JSON_CONNECTION */
53058
53059 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
53060 }
53061
53062#ifdef FREECIV_JSON_CONNECTION
53063 /* Exit array. */
53064 FC_FREE(field_addr.sub_location);
53065#endif /* FREECIV_JSON_CONNECTION */
53066 }
53067
53068 if (e) {
53069 log_packet_detailed("'power_fact' field error detected");
53070 }
53071 }
53072
53073 if (BV_ISSET(fields, 8)) {
53074 log_packet_detailed(" field 'move_bonus' has changed");
53075
53076#ifdef FREECIV_JSON_CONNECTION
53077 field_addr.name = "move_bonus";
53078#endif /* FREECIV_JSON_CONNECTION */
53079 e = 0;
53080
53081 {
53082 int i;
53083
53084#ifdef FREECIV_JSON_CONNECTION
53085 /* Create the array. */
53086 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53087
53088 /* Enter array. */
53089 field_addr.sub_location = plocation_elem_new(0);
53090#endif /* FREECIV_JSON_CONNECTION */
53091
53092 for (i = 0; i < real_packet->veteran_levels; i++) {
53093#ifdef FREECIV_JSON_CONNECTION
53094 /* Next array element. */
53095 field_addr.sub_location->number = i;
53096#endif /* FREECIV_JSON_CONNECTION */
53097
53098 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
53099 }
53100
53101#ifdef FREECIV_JSON_CONNECTION
53102 /* Exit array. */
53103 FC_FREE(field_addr.sub_location);
53104#endif /* FREECIV_JSON_CONNECTION */
53105 }
53106
53107 if (e) {
53108 log_packet_detailed("'move_bonus' field error detected");
53109 }
53110 }
53111
53112 if (BV_ISSET(fields, 9)) {
53113 log_packet_detailed(" field 'base_raise_chance' has changed");
53114
53115#ifdef FREECIV_JSON_CONNECTION
53116 field_addr.name = "base_raise_chance";
53117#endif /* FREECIV_JSON_CONNECTION */
53118 e = 0;
53119
53120 {
53121 int i;
53122
53123#ifdef FREECIV_JSON_CONNECTION
53124 /* Create the array. */
53125 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53126
53127 /* Enter array. */
53128 field_addr.sub_location = plocation_elem_new(0);
53129#endif /* FREECIV_JSON_CONNECTION */
53130
53131 for (i = 0; i < real_packet->veteran_levels; i++) {
53132#ifdef FREECIV_JSON_CONNECTION
53133 /* Next array element. */
53134 field_addr.sub_location->number = i;
53135#endif /* FREECIV_JSON_CONNECTION */
53136
53137 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53138 }
53139
53140#ifdef FREECIV_JSON_CONNECTION
53141 /* Exit array. */
53142 FC_FREE(field_addr.sub_location);
53143#endif /* FREECIV_JSON_CONNECTION */
53144 }
53145
53146 if (e) {
53147 log_packet_detailed("'base_raise_chance' field error detected");
53148 }
53149 }
53150
53151 if (BV_ISSET(fields, 10)) {
53152 log_packet_detailed(" field 'work_raise_chance' has changed");
53153
53154#ifdef FREECIV_JSON_CONNECTION
53155 field_addr.name = "work_raise_chance";
53156#endif /* FREECIV_JSON_CONNECTION */
53157 e = 0;
53158
53159 {
53160 int i;
53161
53162#ifdef FREECIV_JSON_CONNECTION
53163 /* Create the array. */
53164 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53165
53166 /* Enter array. */
53167 field_addr.sub_location = plocation_elem_new(0);
53168#endif /* FREECIV_JSON_CONNECTION */
53169
53170 for (i = 0; i < real_packet->veteran_levels; i++) {
53171#ifdef FREECIV_JSON_CONNECTION
53172 /* Next array element. */
53173 field_addr.sub_location->number = i;
53174#endif /* FREECIV_JSON_CONNECTION */
53175
53176 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53177 }
53178
53179#ifdef FREECIV_JSON_CONNECTION
53180 /* Exit array. */
53181 FC_FREE(field_addr.sub_location);
53182#endif /* FREECIV_JSON_CONNECTION */
53183 }
53184
53185 if (e) {
53186 log_packet_detailed("'work_raise_chance' field error detected");
53187 }
53188 }
53189
53190 if (BV_ISSET(fields, 11)) {
53191 log_packet_detailed(" field 'background_red' has changed");
53192
53193#ifdef FREECIV_JSON_CONNECTION
53194 field_addr.name = "background_red";
53195#endif /* FREECIV_JSON_CONNECTION */
53196 e = 0;
53197
53198 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53199
53200 if (e) {
53201 log_packet_detailed("'background_red' field error detected");
53202 }
53203 }
53204
53205 if (BV_ISSET(fields, 12)) {
53206 log_packet_detailed(" field 'background_green' has changed");
53207
53208#ifdef FREECIV_JSON_CONNECTION
53209 field_addr.name = "background_green";
53210#endif /* FREECIV_JSON_CONNECTION */
53211 e = 0;
53212
53213 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53214
53215 if (e) {
53216 log_packet_detailed("'background_green' field error detected");
53217 }
53218 }
53219
53220 if (BV_ISSET(fields, 13)) {
53221 log_packet_detailed(" field 'background_blue' has changed");
53222
53223#ifdef FREECIV_JSON_CONNECTION
53224 field_addr.name = "background_blue";
53225#endif /* FREECIV_JSON_CONNECTION */
53226 e = 0;
53227
53228 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53229
53230 if (e) {
53231 log_packet_detailed("'background_blue' field error detected");
53232 }
53233 }
53234
53235 *old = *real_packet;
53236
53237#else /* FREECIV_DELTA_PROTOCOL */
53238#ifdef FREECIV_JSON_CONNECTION
53239 field_addr.name = "default_specialist";
53240#endif /* FREECIV_JSON_CONNECTION */
53241 e = 0;
53242
53243 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
53244
53245 if (e) {
53246 log_packet_detailed("'default_specialist' field error detected");
53247 }
53248
53249#ifdef FREECIV_JSON_CONNECTION
53250 field_addr.name = "global_init_techs_count";
53251#endif /* FREECIV_JSON_CONNECTION */
53252 e = 0;
53253
53254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
53255
53256 if (e) {
53257 log_packet_detailed("'global_init_techs_count' field error detected");
53258 }
53259
53260#ifdef FREECIV_JSON_CONNECTION
53261 field_addr.name = "global_init_techs";
53262#endif /* FREECIV_JSON_CONNECTION */
53263 e = 0;
53264
53265 {
53266 int i;
53267
53268#ifdef FREECIV_JSON_CONNECTION
53269 /* Create the array. */
53270 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
53271
53272 /* Enter array. */
53273 field_addr.sub_location = plocation_elem_new(0);
53274#endif /* FREECIV_JSON_CONNECTION */
53275
53276 for (i = 0; i < real_packet->global_init_techs_count; i++) {
53277#ifdef FREECIV_JSON_CONNECTION
53278 /* Next array element. */
53279 field_addr.sub_location->number = i;
53280#endif /* FREECIV_JSON_CONNECTION */
53281
53282 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
53283 }
53284
53285#ifdef FREECIV_JSON_CONNECTION
53286 /* Exit array. */
53287 FC_FREE(field_addr.sub_location);
53288#endif /* FREECIV_JSON_CONNECTION */
53289 }
53290
53291 if (e) {
53292 log_packet_detailed("'global_init_techs' field error detected");
53293 }
53294
53295#ifdef FREECIV_JSON_CONNECTION
53296 field_addr.name = "global_init_buildings_count";
53297#endif /* FREECIV_JSON_CONNECTION */
53298 e = 0;
53299
53300 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
53301
53302 if (e) {
53303 log_packet_detailed("'global_init_buildings_count' field error detected");
53304 }
53305
53306#ifdef FREECIV_JSON_CONNECTION
53307 field_addr.name = "global_init_buildings";
53308#endif /* FREECIV_JSON_CONNECTION */
53309 e = 0;
53310
53311 {
53312 int i;
53313
53314#ifdef FREECIV_JSON_CONNECTION
53315 /* Create the array. */
53316 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
53317
53318 /* Enter array. */
53319 field_addr.sub_location = plocation_elem_new(0);
53320#endif /* FREECIV_JSON_CONNECTION */
53321
53322 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
53323#ifdef FREECIV_JSON_CONNECTION
53324 /* Next array element. */
53325 field_addr.sub_location->number = i;
53326#endif /* FREECIV_JSON_CONNECTION */
53327
53328 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
53329 }
53330
53331#ifdef FREECIV_JSON_CONNECTION
53332 /* Exit array. */
53333 FC_FREE(field_addr.sub_location);
53334#endif /* FREECIV_JSON_CONNECTION */
53335 }
53336
53337 if (e) {
53338 log_packet_detailed("'global_init_buildings' field error detected");
53339 }
53340
53341#ifdef FREECIV_JSON_CONNECTION
53342 field_addr.name = "veteran_levels";
53343#endif /* FREECIV_JSON_CONNECTION */
53344 e = 0;
53345
53346 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
53347
53348 if (e) {
53349 log_packet_detailed("'veteran_levels' field error detected");
53350 }
53351
53352#ifdef FREECIV_JSON_CONNECTION
53353 field_addr.name = "veteran_name";
53354#endif /* FREECIV_JSON_CONNECTION */
53355 e = 0;
53356
53357 {
53358 int i;
53359
53360#ifdef FREECIV_JSON_CONNECTION
53361 /* Create the array. */
53362 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53363
53364 /* Enter array. */
53365 field_addr.sub_location = plocation_elem_new(0);
53366#endif /* FREECIV_JSON_CONNECTION */
53367
53368 for (i = 0; i < real_packet->veteran_levels; i++) {
53369#ifdef FREECIV_JSON_CONNECTION
53370 /* Next array element. */
53371 field_addr.sub_location->number = i;
53372#endif /* FREECIV_JSON_CONNECTION */
53373
53374 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
53375 }
53376
53377#ifdef FREECIV_JSON_CONNECTION
53378 /* Exit array. */
53379 FC_FREE(field_addr.sub_location);
53380#endif /* FREECIV_JSON_CONNECTION */
53381 }
53382
53383 if (e) {
53384 log_packet_detailed("'veteran_name' field error detected");
53385 }
53386
53387#ifdef FREECIV_JSON_CONNECTION
53388 field_addr.name = "power_fact";
53389#endif /* FREECIV_JSON_CONNECTION */
53390 e = 0;
53391
53392 {
53393 int i;
53394
53395#ifdef FREECIV_JSON_CONNECTION
53396 /* Create the array. */
53397 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53398
53399 /* Enter array. */
53400 field_addr.sub_location = plocation_elem_new(0);
53401#endif /* FREECIV_JSON_CONNECTION */
53402
53403 for (i = 0; i < real_packet->veteran_levels; i++) {
53404#ifdef FREECIV_JSON_CONNECTION
53405 /* Next array element. */
53406 field_addr.sub_location->number = i;
53407#endif /* FREECIV_JSON_CONNECTION */
53408
53409 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
53410 }
53411
53412#ifdef FREECIV_JSON_CONNECTION
53413 /* Exit array. */
53414 FC_FREE(field_addr.sub_location);
53415#endif /* FREECIV_JSON_CONNECTION */
53416 }
53417
53418 if (e) {
53419 log_packet_detailed("'power_fact' field error detected");
53420 }
53421
53422#ifdef FREECIV_JSON_CONNECTION
53423 field_addr.name = "move_bonus";
53424#endif /* FREECIV_JSON_CONNECTION */
53425 e = 0;
53426
53427 {
53428 int i;
53429
53430#ifdef FREECIV_JSON_CONNECTION
53431 /* Create the array. */
53432 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53433
53434 /* Enter array. */
53435 field_addr.sub_location = plocation_elem_new(0);
53436#endif /* FREECIV_JSON_CONNECTION */
53437
53438 for (i = 0; i < real_packet->veteran_levels; i++) {
53439#ifdef FREECIV_JSON_CONNECTION
53440 /* Next array element. */
53441 field_addr.sub_location->number = i;
53442#endif /* FREECIV_JSON_CONNECTION */
53443
53444 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
53445 }
53446
53447#ifdef FREECIV_JSON_CONNECTION
53448 /* Exit array. */
53449 FC_FREE(field_addr.sub_location);
53450#endif /* FREECIV_JSON_CONNECTION */
53451 }
53452
53453 if (e) {
53454 log_packet_detailed("'move_bonus' field error detected");
53455 }
53456
53457#ifdef FREECIV_JSON_CONNECTION
53458 field_addr.name = "base_raise_chance";
53459#endif /* FREECIV_JSON_CONNECTION */
53460 e = 0;
53461
53462 {
53463 int i;
53464
53465#ifdef FREECIV_JSON_CONNECTION
53466 /* Create the array. */
53467 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53468
53469 /* Enter array. */
53470 field_addr.sub_location = plocation_elem_new(0);
53471#endif /* FREECIV_JSON_CONNECTION */
53472
53473 for (i = 0; i < real_packet->veteran_levels; i++) {
53474#ifdef FREECIV_JSON_CONNECTION
53475 /* Next array element. */
53476 field_addr.sub_location->number = i;
53477#endif /* FREECIV_JSON_CONNECTION */
53478
53479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
53480 }
53481
53482#ifdef FREECIV_JSON_CONNECTION
53483 /* Exit array. */
53484 FC_FREE(field_addr.sub_location);
53485#endif /* FREECIV_JSON_CONNECTION */
53486 }
53487
53488 if (e) {
53489 log_packet_detailed("'base_raise_chance' field error detected");
53490 }
53491
53492#ifdef FREECIV_JSON_CONNECTION
53493 field_addr.name = "work_raise_chance";
53494#endif /* FREECIV_JSON_CONNECTION */
53495 e = 0;
53496
53497 {
53498 int i;
53499
53500#ifdef FREECIV_JSON_CONNECTION
53501 /* Create the array. */
53502 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
53503
53504 /* Enter array. */
53505 field_addr.sub_location = plocation_elem_new(0);
53506#endif /* FREECIV_JSON_CONNECTION */
53507
53508 for (i = 0; i < real_packet->veteran_levels; i++) {
53509#ifdef FREECIV_JSON_CONNECTION
53510 /* Next array element. */
53511 field_addr.sub_location->number = i;
53512#endif /* FREECIV_JSON_CONNECTION */
53513
53514 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
53515 }
53516
53517#ifdef FREECIV_JSON_CONNECTION
53518 /* Exit array. */
53519 FC_FREE(field_addr.sub_location);
53520#endif /* FREECIV_JSON_CONNECTION */
53521 }
53522
53523 if (e) {
53524 log_packet_detailed("'work_raise_chance' field error detected");
53525 }
53526
53527#ifdef FREECIV_JSON_CONNECTION
53528 field_addr.name = "background_red";
53529#endif /* FREECIV_JSON_CONNECTION */
53530 e = 0;
53531
53532 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
53533
53534 if (e) {
53535 log_packet_detailed("'background_red' field error detected");
53536 }
53537
53538#ifdef FREECIV_JSON_CONNECTION
53539 field_addr.name = "background_green";
53540#endif /* FREECIV_JSON_CONNECTION */
53541 e = 0;
53542
53543 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
53544
53545 if (e) {
53546 log_packet_detailed("'background_green' field error detected");
53547 }
53548
53549#ifdef FREECIV_JSON_CONNECTION
53550 field_addr.name = "background_blue";
53551#endif /* FREECIV_JSON_CONNECTION */
53552 e = 0;
53553
53554 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
53555
53556 if (e) {
53557 log_packet_detailed("'background_blue' field error detected");
53558 }
53559#endif /* FREECIV_DELTA_PROTOCOL */
53560
53562}
53563
53565{
53566 if (!pc->used) {
53567 log_error("WARNING: trying to send data to the closed connection %s",
53569 return -1;
53570 }
53571 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GAME].packet != nullptr, -1,
53572 "Handler for PACKET_RULESET_GAME not installed");
53573 return pc->phs.handlers->send[PACKET_RULESET_GAME].packet(pc, packet);
53574}
53575
53576void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
53577{
53578 conn_list_iterate(dest, pconn) {
53581}
53582
53584{
53585 memset(packet, 0, sizeof(*packet));
53586
53587 requirement_vector_init(&packet->reqs);
53588 packet->helptext = strvec_new();
53589}
53590
53592{
53593 if (packet->helptext) {
53594 strvec_destroy(packet->helptext);
53595 packet->helptext = nullptr;
53596 }
53597 requirement_vector_free(&packet->reqs);
53598}
53599
53600static inline void destroy_packet_ruleset_specialist(void *packet)
53601{
53603 free(packet);
53604}
53605
53606#ifdef FREECIV_DELTA_PROTOCOL
53607#define hash_packet_ruleset_specialist_100 hash_const
53608#define cmp_packet_ruleset_specialist_100 cmp_const
53610#endif /* FREECIV_DELTA_PROTOCOL */
53611
53613{
53614#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_specialist(_packet)
53616
53617#ifdef FREECIV_JSON_CONNECTION
53618 struct plocation field_addr;
53619 {
53620 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
53623 }
53624#endif /* FREECIV_JSON_CONNECTION */
53625
53626 log_packet_detailed("packet_ruleset_specialist_100: got info about ()");
53627
53628#ifdef FREECIV_DELTA_PROTOCOL
53631 struct genhash **hash = pc->phs.received + PACKET_RULESET_SPECIALIST;
53632
53633 if (nullptr == *hash) {
53635 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
53636 }
53637
53638 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
53639 real_packet->id = old->id;
53640 sz_strlcpy(real_packet->plural_name, old->plural_name);
53641 sz_strlcpy(real_packet->rule_name, old->rule_name);
53642 sz_strlcpy(real_packet->short_name, old->short_name);
53643 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
53644 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
53645 requirement_vector_copy(&real_packet->reqs, &old->reqs);
53646 if (old->helptext) {
53647 strvec_copy(real_packet->helptext, old->helptext);
53648 } else {
53649 strvec_clear(real_packet->helptext);
53650 }
53651 } else {
53652 /* packet is already initialized empty */
53653 log_packet_detailed(" no old info");
53654 }
53655
53656#ifdef FREECIV_JSON_CONNECTION
53657 field_addr.name = "fields";
53658#endif /* FREECIV_JSON_CONNECTION */
53659 DIO_BV_GET(&din, &field_addr, fields);
53660
53661 if (BV_ISSET(fields, 0)) {
53662 log_packet_detailed(" got field 'id'");
53663
53664#ifdef FREECIV_JSON_CONNECTION
53665 field_addr.name = "id";
53666#endif /* FREECIV_JSON_CONNECTION */
53667
53668 {
53669 int readin;
53670
53671 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53673 }
53674 real_packet->id = readin;
53675 }
53676 }
53677
53678 if (BV_ISSET(fields, 1)) {
53679 log_packet_detailed(" got field 'plural_name'");
53680
53681#ifdef FREECIV_JSON_CONNECTION
53682 field_addr.name = "plural_name";
53683#endif /* FREECIV_JSON_CONNECTION */
53684
53685 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53686 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53687 }
53688 }
53689
53690 if (BV_ISSET(fields, 2)) {
53691 log_packet_detailed(" got field 'rule_name'");
53692
53693#ifdef FREECIV_JSON_CONNECTION
53694 field_addr.name = "rule_name";
53695#endif /* FREECIV_JSON_CONNECTION */
53696
53697 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53698 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53699 }
53700 }
53701
53702 if (BV_ISSET(fields, 3)) {
53703 log_packet_detailed(" got field 'short_name'");
53704
53705#ifdef FREECIV_JSON_CONNECTION
53706 field_addr.name = "short_name";
53707#endif /* FREECIV_JSON_CONNECTION */
53708
53709 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53710 RECEIVE_PACKET_FIELD_ERROR(short_name);
53711 }
53712 }
53713
53714 if (BV_ISSET(fields, 4)) {
53715 log_packet_detailed(" got field 'graphic_str'");
53716
53717#ifdef FREECIV_JSON_CONNECTION
53718 field_addr.name = "graphic_str";
53719#endif /* FREECIV_JSON_CONNECTION */
53720
53721 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53722 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53723 }
53724 }
53725
53726 if (BV_ISSET(fields, 5)) {
53727 log_packet_detailed(" got field 'graphic_alt'");
53728
53729#ifdef FREECIV_JSON_CONNECTION
53730 field_addr.name = "graphic_alt";
53731#endif /* FREECIV_JSON_CONNECTION */
53732
53733 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53734 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53735 }
53736 }
53737
53738 if (BV_ISSET(fields, 6)) {
53739 log_packet_detailed(" got field 'reqs'");
53740
53741#ifdef FREECIV_JSON_CONNECTION
53742 field_addr.name = "reqs";
53743#endif /* FREECIV_JSON_CONNECTION */
53744
53745 {
53746 int i;
53747
53748 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53750 }
53752
53753#ifdef FREECIV_JSON_CONNECTION
53754 /* Enter array. */
53755 field_addr.sub_location = plocation_elem_new(0);
53756#endif /* FREECIV_JSON_CONNECTION */
53757
53758 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53759#ifdef FREECIV_JSON_CONNECTION
53760 /* Next array element */
53761 field_addr.sub_location->number = i;
53762#endif /* FREECIV_JSON_CONNECTION */
53763
53764 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53766 }
53767 }
53768
53769#ifdef FREECIV_JSON_CONNECTION
53770 /* Exit array. */
53771 FC_FREE(field_addr.sub_location);
53772#endif /* FREECIV_JSON_CONNECTION */
53773 }
53774 }
53775
53776 if (BV_ISSET(fields, 7)) {
53777 log_packet_detailed(" got field 'helptext'");
53778
53779#ifdef FREECIV_JSON_CONNECTION
53780 field_addr.name = "helptext";
53781#endif /* FREECIV_JSON_CONNECTION */
53782
53783 {
53784 int i;
53785
53786 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53788 }
53789 strvec_reserve(real_packet->helptext, i);
53790
53791#ifdef FREECIV_JSON_CONNECTION
53792 /* Enter array. */
53793 field_addr.sub_location = plocation_elem_new(0);
53794#endif /* FREECIV_JSON_CONNECTION */
53795
53796 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53797#ifdef FREECIV_JSON_CONNECTION
53798 /* Next array element */
53799 field_addr.sub_location->number = i;
53800#endif /* FREECIV_JSON_CONNECTION */
53801
53802 {
53803 char readin[MAX_LEN_PACKET];
53804
53805 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53806 || !strvec_set(real_packet->helptext, i, readin)) {
53808 }
53809 }
53810 }
53811
53812#ifdef FREECIV_JSON_CONNECTION
53813 /* Exit array. */
53814 FC_FREE(field_addr.sub_location);
53815#endif /* FREECIV_JSON_CONNECTION */
53816 }
53817 }
53818
53819 if (nullptr == old) {
53820 old = fc_malloc(sizeof(*old));
53822 old->id = real_packet->id;
53823 sz_strlcpy(old->plural_name, real_packet->plural_name);
53824 sz_strlcpy(old->rule_name, real_packet->rule_name);
53825 sz_strlcpy(old->short_name, real_packet->short_name);
53826 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53827 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53828 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53829 if (real_packet->helptext) {
53830 strvec_copy(old->helptext, real_packet->helptext);
53831 } else {
53832 strvec_clear(old->helptext);
53833 }
53835 } else {
53836 old->id = real_packet->id;
53837 sz_strlcpy(old->plural_name, real_packet->plural_name);
53838 sz_strlcpy(old->rule_name, real_packet->rule_name);
53839 sz_strlcpy(old->short_name, real_packet->short_name);
53840 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
53841 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
53842 requirement_vector_copy(&old->reqs, &real_packet->reqs);
53843 if (real_packet->helptext) {
53844 strvec_copy(old->helptext, real_packet->helptext);
53845 } else {
53846 strvec_clear(old->helptext);
53847 }
53848 }
53849
53850#else /* FREECIV_DELTA_PROTOCOL */
53851#ifdef FREECIV_JSON_CONNECTION
53852 field_addr.name = "id";
53853#endif /* FREECIV_JSON_CONNECTION */
53854
53855 {
53856 int readin;
53857
53858 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53860 }
53861 real_packet->id = readin;
53862 }
53863
53864#ifdef FREECIV_JSON_CONNECTION
53865 field_addr.name = "plural_name";
53866#endif /* FREECIV_JSON_CONNECTION */
53867
53868 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
53869 RECEIVE_PACKET_FIELD_ERROR(plural_name);
53870 }
53871
53872#ifdef FREECIV_JSON_CONNECTION
53873 field_addr.name = "rule_name";
53874#endif /* FREECIV_JSON_CONNECTION */
53875
53876 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53877 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53878 }
53879
53880#ifdef FREECIV_JSON_CONNECTION
53881 field_addr.name = "short_name";
53882#endif /* FREECIV_JSON_CONNECTION */
53883
53884 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
53885 RECEIVE_PACKET_FIELD_ERROR(short_name);
53886 }
53887
53888#ifdef FREECIV_JSON_CONNECTION
53889 field_addr.name = "graphic_str";
53890#endif /* FREECIV_JSON_CONNECTION */
53891
53892 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53893 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53894 }
53895
53896#ifdef FREECIV_JSON_CONNECTION
53897 field_addr.name = "graphic_alt";
53898#endif /* FREECIV_JSON_CONNECTION */
53899
53900 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53901 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53902 }
53903
53904#ifdef FREECIV_JSON_CONNECTION
53905 field_addr.name = "reqs";
53906#endif /* FREECIV_JSON_CONNECTION */
53907
53908 {
53909 int i;
53910
53911 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53913 }
53915
53916#ifdef FREECIV_JSON_CONNECTION
53917 /* Enter array. */
53918 field_addr.sub_location = plocation_elem_new(0);
53919#endif /* FREECIV_JSON_CONNECTION */
53920
53921 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
53922#ifdef FREECIV_JSON_CONNECTION
53923 /* Next array element */
53924 field_addr.sub_location->number = i;
53925#endif /* FREECIV_JSON_CONNECTION */
53926
53927 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
53929 }
53930 }
53931
53932#ifdef FREECIV_JSON_CONNECTION
53933 /* Exit array. */
53934 FC_FREE(field_addr.sub_location);
53935#endif /* FREECIV_JSON_CONNECTION */
53936 }
53937
53938#ifdef FREECIV_JSON_CONNECTION
53939 field_addr.name = "helptext";
53940#endif /* FREECIV_JSON_CONNECTION */
53941
53942 {
53943 int i;
53944
53945 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
53947 }
53948 strvec_reserve(real_packet->helptext, i);
53949
53950#ifdef FREECIV_JSON_CONNECTION
53951 /* Enter array. */
53952 field_addr.sub_location = plocation_elem_new(0);
53953#endif /* FREECIV_JSON_CONNECTION */
53954
53955 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
53956#ifdef FREECIV_JSON_CONNECTION
53957 /* Next array element */
53958 field_addr.sub_location->number = i;
53959#endif /* FREECIV_JSON_CONNECTION */
53960
53961 {
53962 char readin[MAX_LEN_PACKET];
53963
53964 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
53965 || !strvec_set(real_packet->helptext, i, readin)) {
53967 }
53968 }
53969 }
53970
53971#ifdef FREECIV_JSON_CONNECTION
53972 /* Exit array. */
53973 FC_FREE(field_addr.sub_location);
53974#endif /* FREECIV_JSON_CONNECTION */
53975 }
53976#endif /* FREECIV_DELTA_PROTOCOL */
53977
53979#undef FREE_PACKET_STRUCT
53980}
53981
53983{
53984 const struct packet_ruleset_specialist *real_packet = packet;
53985 int e;
53987
53988 log_packet_detailed("packet_ruleset_specialist_100: sending info about ()");
53989
53990#ifdef FREECIV_DELTA_PROTOCOL
53993 bool differ;
53994 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SPECIALIST;
53995
53996 if (nullptr == *hash) {
53998 nullptr, nullptr, nullptr, destroy_packet_ruleset_specialist);
53999 }
54000 BV_CLR_ALL(fields);
54001
54002 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54003 old = fc_malloc(sizeof(*old));
54004 /* temporary bitcopy just to insert correctly */
54005 *old = *real_packet;
54008 }
54009
54010 differ = (old->id != real_packet->id);
54011 if (differ) {
54012 BV_SET(fields, 0);
54013 }
54014
54015 differ = (strcmp(old->plural_name, real_packet->plural_name) != 0);
54016 if (differ) {
54017 BV_SET(fields, 1);
54018 }
54019
54020 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
54021 if (differ) {
54022 BV_SET(fields, 2);
54023 }
54024
54025 differ = (strcmp(old->short_name, real_packet->short_name) != 0);
54026 if (differ) {
54027 BV_SET(fields, 3);
54028 }
54029
54030 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
54031 if (differ) {
54032 BV_SET(fields, 4);
54033 }
54034
54035 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
54036 if (differ) {
54037 BV_SET(fields, 5);
54038 }
54039
54041 if (!differ) {
54042 int i;
54043
54044 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
54045 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
54046 if (differ) {
54047 break;
54048 }
54049 }
54050 }
54051 if (differ) {
54052 BV_SET(fields, 6);
54053 }
54054
54055 if (real_packet->helptext) {
54056 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
54057 } else {
54058 differ = (strvec_size(old->helptext) > 0);
54059 }
54060 if (differ) {
54061 BV_SET(fields, 7);
54062 }
54063#endif /* FREECIV_DELTA_PROTOCOL */
54064
54065#ifdef FREECIV_JSON_CONNECTION
54066 struct plocation field_addr;
54067 {
54068 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54071 }
54072#endif /* FREECIV_JSON_CONNECTION */
54073
54074#ifdef FREECIV_DELTA_PROTOCOL
54075#ifdef FREECIV_JSON_CONNECTION
54076 field_addr.name = "fields";
54077#endif /* FREECIV_JSON_CONNECTION */
54078 e = 0;
54079 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54080 if (e) {
54081 log_packet_detailed("fields bitvector error detected");
54082 }
54083
54084 if (BV_ISSET(fields, 0)) {
54085 log_packet_detailed(" field 'id' has changed");
54086
54087#ifdef FREECIV_JSON_CONNECTION
54088 field_addr.name = "id";
54089#endif /* FREECIV_JSON_CONNECTION */
54090 e = 0;
54091
54092 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54093
54094 if (e) {
54095 log_packet_detailed("'id' field error detected");
54096 }
54097 }
54098
54099 if (BV_ISSET(fields, 1)) {
54100 log_packet_detailed(" field 'plural_name' has changed");
54101
54102#ifdef FREECIV_JSON_CONNECTION
54103 field_addr.name = "plural_name";
54104#endif /* FREECIV_JSON_CONNECTION */
54105 e = 0;
54106
54107 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54108
54109 if (e) {
54110 log_packet_detailed("'plural_name' field error detected");
54111 }
54112 }
54113
54114 if (BV_ISSET(fields, 2)) {
54115 log_packet_detailed(" field 'rule_name' has changed");
54116
54117#ifdef FREECIV_JSON_CONNECTION
54118 field_addr.name = "rule_name";
54119#endif /* FREECIV_JSON_CONNECTION */
54120 e = 0;
54121
54122 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54123
54124 if (e) {
54125 log_packet_detailed("'rule_name' field error detected");
54126 }
54127 }
54128
54129 if (BV_ISSET(fields, 3)) {
54130 log_packet_detailed(" field 'short_name' has changed");
54131
54132#ifdef FREECIV_JSON_CONNECTION
54133 field_addr.name = "short_name";
54134#endif /* FREECIV_JSON_CONNECTION */
54135 e = 0;
54136
54137 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54138
54139 if (e) {
54140 log_packet_detailed("'short_name' field error detected");
54141 }
54142 }
54143
54144 if (BV_ISSET(fields, 4)) {
54145 log_packet_detailed(" field 'graphic_str' has changed");
54146
54147#ifdef FREECIV_JSON_CONNECTION
54148 field_addr.name = "graphic_str";
54149#endif /* FREECIV_JSON_CONNECTION */
54150 e = 0;
54151
54152 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54153
54154 if (e) {
54155 log_packet_detailed("'graphic_str' field error detected");
54156 }
54157 }
54158
54159 if (BV_ISSET(fields, 5)) {
54160 log_packet_detailed(" field 'graphic_alt' has changed");
54161
54162#ifdef FREECIV_JSON_CONNECTION
54163 field_addr.name = "graphic_alt";
54164#endif /* FREECIV_JSON_CONNECTION */
54165 e = 0;
54166
54167 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54168
54169 if (e) {
54170 log_packet_detailed("'graphic_alt' field error detected");
54171 }
54172 }
54173
54174 if (BV_ISSET(fields, 6)) {
54175 log_packet_detailed(" field 'reqs' has changed");
54176
54177#ifdef FREECIV_JSON_CONNECTION
54178 field_addr.name = "reqs";
54179#endif /* FREECIV_JSON_CONNECTION */
54180 e = 0;
54181
54182 {
54183 int i;
54184
54187
54188#ifdef FREECIV_JSON_CONNECTION
54189 /* Enter array. */
54190 field_addr.sub_location = plocation_elem_new(0);
54191#endif /* FREECIV_JSON_CONNECTION */
54192
54193 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54194#ifdef FREECIV_JSON_CONNECTION
54195 /* Next array element. */
54196 field_addr.sub_location->number = i;
54197#endif /* FREECIV_JSON_CONNECTION */
54198
54199 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54200 }
54201
54202#ifdef FREECIV_JSON_CONNECTION
54203 /* Exit array. */
54204 FC_FREE(field_addr.sub_location);
54205#endif /* FREECIV_JSON_CONNECTION */
54206 }
54207
54208 if (e) {
54209 log_packet_detailed("'reqs' field error detected");
54210 }
54211 }
54212
54213 if (BV_ISSET(fields, 7)) {
54214 log_packet_detailed(" field 'helptext' has changed");
54215
54216#ifdef FREECIV_JSON_CONNECTION
54217 field_addr.name = "helptext";
54218#endif /* FREECIV_JSON_CONNECTION */
54219 e = 0;
54220
54221 if (!real_packet->helptext) {
54222 /* Transmit null as empty */
54223 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54224 } else {
54225 int i;
54226
54228 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54229
54230#ifdef FREECIV_JSON_CONNECTION
54231 /* Enter array. */
54232 field_addr.sub_location = plocation_elem_new(0);
54233#endif /* FREECIV_JSON_CONNECTION */
54234
54235 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54236#ifdef FREECIV_JSON_CONNECTION
54237 /* Next array element. */
54238 field_addr.sub_location->number = i;
54239#endif /* FREECIV_JSON_CONNECTION */
54240
54241 {
54242 const char *pstr = strvec_get(real_packet->helptext, i);
54243
54244 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54245 }
54246 }
54247
54248#ifdef FREECIV_JSON_CONNECTION
54249 /* Exit array. */
54250 FC_FREE(field_addr.sub_location);
54251#endif /* FREECIV_JSON_CONNECTION */
54252 }
54253
54254 if (e) {
54255 log_packet_detailed("'helptext' field error detected");
54256 }
54257 }
54258
54259 old->id = real_packet->id;
54260 sz_strlcpy(old->plural_name, real_packet->plural_name);
54261 sz_strlcpy(old->rule_name, real_packet->rule_name);
54262 sz_strlcpy(old->short_name, real_packet->short_name);
54263 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
54264 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
54265 requirement_vector_copy(&old->reqs, &real_packet->reqs);
54266 if (real_packet->helptext) {
54267 strvec_copy(old->helptext, real_packet->helptext);
54268 } else {
54269 strvec_clear(old->helptext);
54270 }
54271
54272#else /* FREECIV_DELTA_PROTOCOL */
54273#ifdef FREECIV_JSON_CONNECTION
54274 field_addr.name = "id";
54275#endif /* FREECIV_JSON_CONNECTION */
54276 e = 0;
54277
54278 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54279
54280 if (e) {
54281 log_packet_detailed("'id' field error detected");
54282 }
54283
54284#ifdef FREECIV_JSON_CONNECTION
54285 field_addr.name = "plural_name";
54286#endif /* FREECIV_JSON_CONNECTION */
54287 e = 0;
54288
54289 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
54290
54291 if (e) {
54292 log_packet_detailed("'plural_name' field error detected");
54293 }
54294
54295#ifdef FREECIV_JSON_CONNECTION
54296 field_addr.name = "rule_name";
54297#endif /* FREECIV_JSON_CONNECTION */
54298 e = 0;
54299
54300 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54301
54302 if (e) {
54303 log_packet_detailed("'rule_name' field error detected");
54304 }
54305
54306#ifdef FREECIV_JSON_CONNECTION
54307 field_addr.name = "short_name";
54308#endif /* FREECIV_JSON_CONNECTION */
54309 e = 0;
54310
54311 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
54312
54313 if (e) {
54314 log_packet_detailed("'short_name' field error detected");
54315 }
54316
54317#ifdef FREECIV_JSON_CONNECTION
54318 field_addr.name = "graphic_str";
54319#endif /* FREECIV_JSON_CONNECTION */
54320 e = 0;
54321
54322 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54323
54324 if (e) {
54325 log_packet_detailed("'graphic_str' field error detected");
54326 }
54327
54328#ifdef FREECIV_JSON_CONNECTION
54329 field_addr.name = "graphic_alt";
54330#endif /* FREECIV_JSON_CONNECTION */
54331 e = 0;
54332
54333 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54334
54335 if (e) {
54336 log_packet_detailed("'graphic_alt' field error detected");
54337 }
54338
54339#ifdef FREECIV_JSON_CONNECTION
54340 field_addr.name = "reqs";
54341#endif /* FREECIV_JSON_CONNECTION */
54342 e = 0;
54343
54344 {
54345 int i;
54346
54349
54350#ifdef FREECIV_JSON_CONNECTION
54351 /* Enter array. */
54352 field_addr.sub_location = plocation_elem_new(0);
54353#endif /* FREECIV_JSON_CONNECTION */
54354
54355 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
54356#ifdef FREECIV_JSON_CONNECTION
54357 /* Next array element. */
54358 field_addr.sub_location->number = i;
54359#endif /* FREECIV_JSON_CONNECTION */
54360
54361 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
54362 }
54363
54364#ifdef FREECIV_JSON_CONNECTION
54365 /* Exit array. */
54366 FC_FREE(field_addr.sub_location);
54367#endif /* FREECIV_JSON_CONNECTION */
54368 }
54369
54370 if (e) {
54371 log_packet_detailed("'reqs' field error detected");
54372 }
54373
54374#ifdef FREECIV_JSON_CONNECTION
54375 field_addr.name = "helptext";
54376#endif /* FREECIV_JSON_CONNECTION */
54377 e = 0;
54378
54379 if (!real_packet->helptext) {
54380 /* Transmit null as empty */
54381 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
54382 } else {
54383 int i;
54384
54386 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
54387
54388#ifdef FREECIV_JSON_CONNECTION
54389 /* Enter array. */
54390 field_addr.sub_location = plocation_elem_new(0);
54391#endif /* FREECIV_JSON_CONNECTION */
54392
54393 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
54394#ifdef FREECIV_JSON_CONNECTION
54395 /* Next array element. */
54396 field_addr.sub_location->number = i;
54397#endif /* FREECIV_JSON_CONNECTION */
54398
54399 {
54400 const char *pstr = strvec_get(real_packet->helptext, i);
54401
54402 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
54403 }
54404 }
54405
54406#ifdef FREECIV_JSON_CONNECTION
54407 /* Exit array. */
54408 FC_FREE(field_addr.sub_location);
54409#endif /* FREECIV_JSON_CONNECTION */
54410 }
54411
54412 if (e) {
54413 log_packet_detailed("'helptext' field error detected");
54414 }
54415#endif /* FREECIV_DELTA_PROTOCOL */
54416
54418}
54419
54421{
54422 if (!pc->used) {
54423 log_error("WARNING: trying to send data to the closed connection %s",
54425 return -1;
54426 }
54427 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet != nullptr, -1,
54428 "Handler for PACKET_RULESET_SPECIALIST not installed");
54429 return pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet(pc, packet);
54430}
54431
54433{
54434 conn_list_iterate(dest, pconn) {
54437}
54438
54440{
54441 memset(packet, 0, sizeof(*packet));
54442}
54443
54444#define free_packet_ruleset_government_ruler_title(_packet) (void) 0
54445#define destroy_packet_ruleset_government_ruler_title free
54446
54447#ifdef FREECIV_DELTA_PROTOCOL
54448#define hash_packet_ruleset_government_ruler_title_100 hash_const
54449#define cmp_packet_ruleset_government_ruler_title_100 cmp_const
54451#endif /* FREECIV_DELTA_PROTOCOL */
54452
54454{
54455#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government_ruler_title(_packet)
54457
54458#ifdef FREECIV_JSON_CONNECTION
54459 struct plocation field_addr;
54460 {
54461 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54464 }
54465#endif /* FREECIV_JSON_CONNECTION */
54466
54467 log_packet_detailed("packet_ruleset_government_ruler_title_100: got info about ()");
54468
54469#ifdef FREECIV_DELTA_PROTOCOL
54472 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT_RULER_TITLE;
54473
54474 if (nullptr == *hash) {
54476 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54477 }
54478
54479 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54480 *real_packet = *old;
54481 } else {
54482 /* packet is already initialized empty */
54483 log_packet_detailed(" no old info");
54484 }
54485
54486#ifdef FREECIV_JSON_CONNECTION
54487 field_addr.name = "fields";
54488#endif /* FREECIV_JSON_CONNECTION */
54489 DIO_BV_GET(&din, &field_addr, fields);
54490
54491 if (BV_ISSET(fields, 0)) {
54492 log_packet_detailed(" got field 'gov'");
54493
54494#ifdef FREECIV_JSON_CONNECTION
54495 field_addr.name = "gov";
54496#endif /* FREECIV_JSON_CONNECTION */
54497
54498 {
54499 int readin;
54500
54501 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54503 }
54504 real_packet->gov = readin;
54505 }
54506 }
54507
54508 if (BV_ISSET(fields, 1)) {
54509 log_packet_detailed(" got field 'nation'");
54510
54511#ifdef FREECIV_JSON_CONNECTION
54512 field_addr.name = "nation";
54513#endif /* FREECIV_JSON_CONNECTION */
54514
54515 {
54516 int readin;
54517
54518 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54520 }
54521 real_packet->nation = readin;
54522 }
54523 }
54524
54525 if (BV_ISSET(fields, 2)) {
54526 log_packet_detailed(" got field 'male_title'");
54527
54528#ifdef FREECIV_JSON_CONNECTION
54529 field_addr.name = "male_title";
54530#endif /* FREECIV_JSON_CONNECTION */
54531
54532 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54533 RECEIVE_PACKET_FIELD_ERROR(male_title);
54534 }
54535 }
54536
54537 if (BV_ISSET(fields, 3)) {
54538 log_packet_detailed(" got field 'female_title'");
54539
54540#ifdef FREECIV_JSON_CONNECTION
54541 field_addr.name = "female_title";
54542#endif /* FREECIV_JSON_CONNECTION */
54543
54544 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54545 RECEIVE_PACKET_FIELD_ERROR(female_title);
54546 }
54547 }
54548
54549 if (nullptr == old) {
54550 old = fc_malloc(sizeof(*old));
54552 *old = *real_packet;
54554 } else {
54555 *old = *real_packet;
54556 }
54557
54558#else /* FREECIV_DELTA_PROTOCOL */
54559#ifdef FREECIV_JSON_CONNECTION
54560 field_addr.name = "gov";
54561#endif /* FREECIV_JSON_CONNECTION */
54562
54563 {
54564 int readin;
54565
54566 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
54568 }
54569 real_packet->gov = readin;
54570 }
54571
54572#ifdef FREECIV_JSON_CONNECTION
54573 field_addr.name = "nation";
54574#endif /* FREECIV_JSON_CONNECTION */
54575
54576 {
54577 int readin;
54578
54579 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
54581 }
54582 real_packet->nation = readin;
54583 }
54584
54585#ifdef FREECIV_JSON_CONNECTION
54586 field_addr.name = "male_title";
54587#endif /* FREECIV_JSON_CONNECTION */
54588
54589 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
54590 RECEIVE_PACKET_FIELD_ERROR(male_title);
54591 }
54592
54593#ifdef FREECIV_JSON_CONNECTION
54594 field_addr.name = "female_title";
54595#endif /* FREECIV_JSON_CONNECTION */
54596
54597 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
54598 RECEIVE_PACKET_FIELD_ERROR(female_title);
54599 }
54600#endif /* FREECIV_DELTA_PROTOCOL */
54601
54603#undef FREE_PACKET_STRUCT
54604}
54605
54607{
54609 int e;
54611
54612 log_packet_detailed("packet_ruleset_government_ruler_title_100: sending info about ()");
54613
54614#ifdef FREECIV_DELTA_PROTOCOL
54617 bool differ;
54619
54620 if (nullptr == *hash) {
54622 nullptr, nullptr, nullptr, destroy_packet_ruleset_government_ruler_title);
54623 }
54624 BV_CLR_ALL(fields);
54625
54626 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54627 old = fc_malloc(sizeof(*old));
54628 /* temporary bitcopy just to insert correctly */
54629 *old = *real_packet;
54632 }
54633
54634 differ = (old->gov != real_packet->gov);
54635 if (differ) {
54636 BV_SET(fields, 0);
54637 }
54638
54639 differ = (old->nation != real_packet->nation);
54640 if (differ) {
54641 BV_SET(fields, 1);
54642 }
54643
54644 differ = (strcmp(old->male_title, real_packet->male_title) != 0);
54645 if (differ) {
54646 BV_SET(fields, 2);
54647 }
54648
54649 differ = (strcmp(old->female_title, real_packet->female_title) != 0);
54650 if (differ) {
54651 BV_SET(fields, 3);
54652 }
54653#endif /* FREECIV_DELTA_PROTOCOL */
54654
54655#ifdef FREECIV_JSON_CONNECTION
54656 struct plocation field_addr;
54657 {
54658 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54661 }
54662#endif /* FREECIV_JSON_CONNECTION */
54663
54664#ifdef FREECIV_DELTA_PROTOCOL
54665#ifdef FREECIV_JSON_CONNECTION
54666 field_addr.name = "fields";
54667#endif /* FREECIV_JSON_CONNECTION */
54668 e = 0;
54669 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54670 if (e) {
54671 log_packet_detailed("fields bitvector error detected");
54672 }
54673
54674 if (BV_ISSET(fields, 0)) {
54675 log_packet_detailed(" field 'gov' has changed");
54676
54677#ifdef FREECIV_JSON_CONNECTION
54678 field_addr.name = "gov";
54679#endif /* FREECIV_JSON_CONNECTION */
54680 e = 0;
54681
54682 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54683
54684 if (e) {
54685 log_packet_detailed("'gov' field error detected");
54686 }
54687 }
54688
54689 if (BV_ISSET(fields, 1)) {
54690 log_packet_detailed(" field 'nation' has changed");
54691
54692#ifdef FREECIV_JSON_CONNECTION
54693 field_addr.name = "nation";
54694#endif /* FREECIV_JSON_CONNECTION */
54695 e = 0;
54696
54697 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54698
54699 if (e) {
54700 log_packet_detailed("'nation' field error detected");
54701 }
54702 }
54703
54704 if (BV_ISSET(fields, 2)) {
54705 log_packet_detailed(" field 'male_title' has changed");
54706
54707#ifdef FREECIV_JSON_CONNECTION
54708 field_addr.name = "male_title";
54709#endif /* FREECIV_JSON_CONNECTION */
54710 e = 0;
54711
54712 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54713
54714 if (e) {
54715 log_packet_detailed("'male_title' field error detected");
54716 }
54717 }
54718
54719 if (BV_ISSET(fields, 3)) {
54720 log_packet_detailed(" field 'female_title' has changed");
54721
54722#ifdef FREECIV_JSON_CONNECTION
54723 field_addr.name = "female_title";
54724#endif /* FREECIV_JSON_CONNECTION */
54725 e = 0;
54726
54727 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54728
54729 if (e) {
54730 log_packet_detailed("'female_title' field error detected");
54731 }
54732 }
54733
54734 *old = *real_packet;
54735
54736#else /* FREECIV_DELTA_PROTOCOL */
54737#ifdef FREECIV_JSON_CONNECTION
54738 field_addr.name = "gov";
54739#endif /* FREECIV_JSON_CONNECTION */
54740 e = 0;
54741
54742 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
54743
54744 if (e) {
54745 log_packet_detailed("'gov' field error detected");
54746 }
54747
54748#ifdef FREECIV_JSON_CONNECTION
54749 field_addr.name = "nation";
54750#endif /* FREECIV_JSON_CONNECTION */
54751 e = 0;
54752
54753 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
54754
54755 if (e) {
54756 log_packet_detailed("'nation' field error detected");
54757 }
54758
54759#ifdef FREECIV_JSON_CONNECTION
54760 field_addr.name = "male_title";
54761#endif /* FREECIV_JSON_CONNECTION */
54762 e = 0;
54763
54764 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
54765
54766 if (e) {
54767 log_packet_detailed("'male_title' field error detected");
54768 }
54769
54770#ifdef FREECIV_JSON_CONNECTION
54771 field_addr.name = "female_title";
54772#endif /* FREECIV_JSON_CONNECTION */
54773 e = 0;
54774
54775 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
54776
54777 if (e) {
54778 log_packet_detailed("'female_title' field error detected");
54779 }
54780#endif /* FREECIV_DELTA_PROTOCOL */
54781
54783}
54784
54786{
54787 if (!pc->used) {
54788 log_error("WARNING: trying to send data to the closed connection %s",
54790 return -1;
54791 }
54792 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet != nullptr, -1,
54793 "Handler for PACKET_RULESET_GOVERNMENT_RULER_TITLE not installed");
54794 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet(pc, packet);
54795}
54796
54803
54804static inline void init_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54805{
54806 memset(packet, 0, sizeof(*packet));
54807
54809 packet->helptext = strvec_new();
54810}
54811
54812static inline void free_packet_ruleset_tech(struct packet_ruleset_tech *packet)
54813{
54814 if (packet->helptext) {
54815 strvec_destroy(packet->helptext);
54816 packet->helptext = nullptr;
54817 }
54819}
54820
54821static inline void destroy_packet_ruleset_tech(void *packet)
54822{
54824 free(packet);
54825}
54826
54827#ifdef FREECIV_DELTA_PROTOCOL
54828#define hash_packet_ruleset_tech_100 hash_const
54829#define cmp_packet_ruleset_tech_100 cmp_const
54831#endif /* FREECIV_DELTA_PROTOCOL */
54832
54834{
54835#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech(_packet)
54837
54838#ifdef FREECIV_JSON_CONNECTION
54839 struct plocation field_addr;
54840 {
54841 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
54844 }
54845#endif /* FREECIV_JSON_CONNECTION */
54846
54847 log_packet_detailed("packet_ruleset_tech_100: got info about ()");
54848
54849#ifdef FREECIV_DELTA_PROTOCOL
54851 struct packet_ruleset_tech *old;
54852 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH;
54853
54854 if (nullptr == *hash) {
54856 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
54857 }
54858
54859 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54860 real_packet->id = old->id;
54861 real_packet->root_req = old->root_req;
54862 requirement_vector_copy(&real_packet->research_reqs, &old->research_reqs);
54863 real_packet->tclass = old->tclass;
54864 real_packet->removed = old->removed;
54865 real_packet->flags = old->flags;
54866 real_packet->cost = old->cost;
54867 real_packet->num_reqs = old->num_reqs;
54868 sz_strlcpy(real_packet->name, old->name);
54869 sz_strlcpy(real_packet->rule_name, old->rule_name);
54870 if (old->helptext) {
54871 strvec_copy(real_packet->helptext, old->helptext);
54872 } else {
54873 strvec_clear(real_packet->helptext);
54874 }
54875 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
54876 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
54877 } else {
54878 /* packet is already initialized empty */
54879 log_packet_detailed(" no old info");
54880 }
54881
54882#ifdef FREECIV_JSON_CONNECTION
54883 field_addr.name = "fields";
54884#endif /* FREECIV_JSON_CONNECTION */
54885 DIO_BV_GET(&din, &field_addr, fields);
54886
54887 if (BV_ISSET(fields, 0)) {
54888 log_packet_detailed(" got field 'id'");
54889
54890#ifdef FREECIV_JSON_CONNECTION
54891 field_addr.name = "id";
54892#endif /* FREECIV_JSON_CONNECTION */
54893
54894 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
54896 }
54897 }
54898
54899 if (BV_ISSET(fields, 1)) {
54900 log_packet_detailed(" got field 'root_req'");
54901
54902#ifdef FREECIV_JSON_CONNECTION
54903 field_addr.name = "root_req";
54904#endif /* FREECIV_JSON_CONNECTION */
54905
54906 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
54908 }
54909 }
54910
54911 if (BV_ISSET(fields, 2)) {
54912 log_packet_detailed(" got field 'research_reqs'");
54913
54914#ifdef FREECIV_JSON_CONNECTION
54915 field_addr.name = "research_reqs";
54916#endif /* FREECIV_JSON_CONNECTION */
54917
54918 {
54919 int i;
54920
54921 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
54922 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54923 }
54924 requirement_vector_reserve(&real_packet->research_reqs, i);
54925
54926#ifdef FREECIV_JSON_CONNECTION
54927 /* Enter array. */
54928 field_addr.sub_location = plocation_elem_new(0);
54929#endif /* FREECIV_JSON_CONNECTION */
54930
54931 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
54932#ifdef FREECIV_JSON_CONNECTION
54933 /* Next array element */
54934 field_addr.sub_location->number = i;
54935#endif /* FREECIV_JSON_CONNECTION */
54936
54937 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
54938 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
54939 }
54940 }
54941
54942#ifdef FREECIV_JSON_CONNECTION
54943 /* Exit array. */
54944 FC_FREE(field_addr.sub_location);
54945#endif /* FREECIV_JSON_CONNECTION */
54946 }
54947 }
54948
54949 if (BV_ISSET(fields, 3)) {
54950 log_packet_detailed(" got field 'tclass'");
54951
54952#ifdef FREECIV_JSON_CONNECTION
54953 field_addr.name = "tclass";
54954#endif /* FREECIV_JSON_CONNECTION */
54955
54956 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
54958 }
54959 }
54960
54961 real_packet->removed = BV_ISSET(fields, 4);
54962
54963 if (BV_ISSET(fields, 5)) {
54964 log_packet_detailed(" got field 'flags'");
54965
54966#ifdef FREECIV_JSON_CONNECTION
54967 field_addr.name = "flags";
54968#endif /* FREECIV_JSON_CONNECTION */
54969
54970 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
54972 }
54973 }
54974
54975 if (BV_ISSET(fields, 6)) {
54976 log_packet_detailed(" got field 'cost'");
54977
54978#ifdef FREECIV_JSON_CONNECTION
54979 field_addr.name = "cost";
54980#endif /* FREECIV_JSON_CONNECTION */
54981
54982 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
54984 }
54985 }
54986
54987 if (BV_ISSET(fields, 7)) {
54988 log_packet_detailed(" got field 'num_reqs'");
54989
54990#ifdef FREECIV_JSON_CONNECTION
54991 field_addr.name = "num_reqs";
54992#endif /* FREECIV_JSON_CONNECTION */
54993
54994 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
54996 }
54997 }
54998
54999 if (BV_ISSET(fields, 8)) {
55000 log_packet_detailed(" got field 'name'");
55001
55002#ifdef FREECIV_JSON_CONNECTION
55003 field_addr.name = "name";
55004#endif /* FREECIV_JSON_CONNECTION */
55005
55006 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55008 }
55009 }
55010
55011 if (BV_ISSET(fields, 9)) {
55012 log_packet_detailed(" got field 'rule_name'");
55013
55014#ifdef FREECIV_JSON_CONNECTION
55015 field_addr.name = "rule_name";
55016#endif /* FREECIV_JSON_CONNECTION */
55017
55018 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55019 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55020 }
55021 }
55022
55023 if (BV_ISSET(fields, 10)) {
55024 log_packet_detailed(" got field 'helptext'");
55025
55026#ifdef FREECIV_JSON_CONNECTION
55027 field_addr.name = "helptext";
55028#endif /* FREECIV_JSON_CONNECTION */
55029
55030 {
55031 int i;
55032
55033 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55035 }
55036 strvec_reserve(real_packet->helptext, i);
55037
55038#ifdef FREECIV_JSON_CONNECTION
55039 /* Enter array. */
55040 field_addr.sub_location = plocation_elem_new(0);
55041#endif /* FREECIV_JSON_CONNECTION */
55042
55043 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55044#ifdef FREECIV_JSON_CONNECTION
55045 /* Next array element */
55046 field_addr.sub_location->number = i;
55047#endif /* FREECIV_JSON_CONNECTION */
55048
55049 {
55050 char readin[MAX_LEN_PACKET];
55051
55052 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
55053 || !strvec_set(real_packet->helptext, i, readin)) {
55055 }
55056 }
55057 }
55058
55059#ifdef FREECIV_JSON_CONNECTION
55060 /* Exit array. */
55061 FC_FREE(field_addr.sub_location);
55062#endif /* FREECIV_JSON_CONNECTION */
55063 }
55064 }
55065
55066 if (BV_ISSET(fields, 11)) {
55067 log_packet_detailed(" got field 'graphic_str'");
55068
55069#ifdef FREECIV_JSON_CONNECTION
55070 field_addr.name = "graphic_str";
55071#endif /* FREECIV_JSON_CONNECTION */
55072
55073 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55074 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55075 }
55076 }
55077
55078 if (BV_ISSET(fields, 12)) {
55079 log_packet_detailed(" got field 'graphic_alt'");
55080
55081#ifdef FREECIV_JSON_CONNECTION
55082 field_addr.name = "graphic_alt";
55083#endif /* FREECIV_JSON_CONNECTION */
55084
55085 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55086 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55087 }
55088 }
55089
55090 if (nullptr == old) {
55091 old = fc_malloc(sizeof(*old));
55093 old->id = real_packet->id;
55094 old->root_req = real_packet->root_req;
55095 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55096 old->tclass = real_packet->tclass;
55097 old->removed = real_packet->removed;
55098 old->flags = real_packet->flags;
55099 old->cost = real_packet->cost;
55100 old->num_reqs = real_packet->num_reqs;
55101 sz_strlcpy(old->name, real_packet->name);
55102 sz_strlcpy(old->rule_name, real_packet->rule_name);
55103 if (real_packet->helptext) {
55104 strvec_copy(old->helptext, real_packet->helptext);
55105 } else {
55106 strvec_clear(old->helptext);
55107 }
55108 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55109 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55111 } else {
55112 old->id = real_packet->id;
55113 old->root_req = real_packet->root_req;
55114 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55115 old->tclass = real_packet->tclass;
55116 old->removed = real_packet->removed;
55117 old->flags = real_packet->flags;
55118 old->cost = real_packet->cost;
55119 old->num_reqs = real_packet->num_reqs;
55120 sz_strlcpy(old->name, real_packet->name);
55121 sz_strlcpy(old->rule_name, real_packet->rule_name);
55122 if (real_packet->helptext) {
55123 strvec_copy(old->helptext, real_packet->helptext);
55124 } else {
55125 strvec_clear(old->helptext);
55126 }
55127 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55128 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55129 }
55130
55131#else /* FREECIV_DELTA_PROTOCOL */
55132#ifdef FREECIV_JSON_CONNECTION
55133 field_addr.name = "id";
55134#endif /* FREECIV_JSON_CONNECTION */
55135
55136 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55138 }
55139
55140#ifdef FREECIV_JSON_CONNECTION
55141 field_addr.name = "root_req";
55142#endif /* FREECIV_JSON_CONNECTION */
55143
55144 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
55146 }
55147
55148#ifdef FREECIV_JSON_CONNECTION
55149 field_addr.name = "research_reqs";
55150#endif /* FREECIV_JSON_CONNECTION */
55151
55152 {
55153 int i;
55154
55155 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55156 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55157 }
55158 requirement_vector_reserve(&real_packet->research_reqs, i);
55159
55160#ifdef FREECIV_JSON_CONNECTION
55161 /* Enter array. */
55162 field_addr.sub_location = plocation_elem_new(0);
55163#endif /* FREECIV_JSON_CONNECTION */
55164
55165 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55166#ifdef FREECIV_JSON_CONNECTION
55167 /* Next array element */
55168 field_addr.sub_location->number = i;
55169#endif /* FREECIV_JSON_CONNECTION */
55170
55171 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs.p[i])) {
55172 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
55173 }
55174 }
55175
55176#ifdef FREECIV_JSON_CONNECTION
55177 /* Exit array. */
55178 FC_FREE(field_addr.sub_location);
55179#endif /* FREECIV_JSON_CONNECTION */
55180 }
55181
55182#ifdef FREECIV_JSON_CONNECTION
55183 field_addr.name = "tclass";
55184#endif /* FREECIV_JSON_CONNECTION */
55185
55186 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
55188 }
55189
55190#ifdef FREECIV_JSON_CONNECTION
55191 field_addr.name = "removed";
55192#endif /* FREECIV_JSON_CONNECTION */
55193
55194 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removed)) {
55196 }
55197
55198#ifdef FREECIV_JSON_CONNECTION
55199 field_addr.name = "flags";
55200#endif /* FREECIV_JSON_CONNECTION */
55201
55202 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
55204 }
55205
55206#ifdef FREECIV_JSON_CONNECTION
55207 field_addr.name = "cost";
55208#endif /* FREECIV_JSON_CONNECTION */
55209
55210 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
55212 }
55213
55214#ifdef FREECIV_JSON_CONNECTION
55215 field_addr.name = "num_reqs";
55216#endif /* FREECIV_JSON_CONNECTION */
55217
55218 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
55220 }
55221
55222#ifdef FREECIV_JSON_CONNECTION
55223 field_addr.name = "name";
55224#endif /* FREECIV_JSON_CONNECTION */
55225
55226 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55228 }
55229
55230#ifdef FREECIV_JSON_CONNECTION
55231 field_addr.name = "rule_name";
55232#endif /* FREECIV_JSON_CONNECTION */
55233
55234 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55235 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55236 }
55237
55238#ifdef FREECIV_JSON_CONNECTION
55239 field_addr.name = "helptext";
55240#endif /* FREECIV_JSON_CONNECTION */
55241
55242 {
55243 int i;
55244
55245 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
55247 }
55248 strvec_reserve(real_packet->helptext, i);
55249
55250#ifdef FREECIV_JSON_CONNECTION
55251 /* Enter array. */
55252 field_addr.sub_location = plocation_elem_new(0);
55253#endif /* FREECIV_JSON_CONNECTION */
55254
55255 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55256#ifdef FREECIV_JSON_CONNECTION
55257 /* Next array element */
55258 field_addr.sub_location->number = i;
55259#endif /* FREECIV_JSON_CONNECTION */
55260
55261 {
55262 char readin[MAX_LEN_PACKET];
55263
55264 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
55265 || !strvec_set(real_packet->helptext, i, readin)) {
55267 }
55268 }
55269 }
55270
55271#ifdef FREECIV_JSON_CONNECTION
55272 /* Exit array. */
55273 FC_FREE(field_addr.sub_location);
55274#endif /* FREECIV_JSON_CONNECTION */
55275 }
55276
55277#ifdef FREECIV_JSON_CONNECTION
55278 field_addr.name = "graphic_str";
55279#endif /* FREECIV_JSON_CONNECTION */
55280
55281 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55282 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55283 }
55284
55285#ifdef FREECIV_JSON_CONNECTION
55286 field_addr.name = "graphic_alt";
55287#endif /* FREECIV_JSON_CONNECTION */
55288
55289 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55290 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55291 }
55292#endif /* FREECIV_DELTA_PROTOCOL */
55293
55295#undef FREE_PACKET_STRUCT
55296}
55297
55298static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
55299{
55300 const struct packet_ruleset_tech *real_packet = packet;
55301 int e;
55303
55304 log_packet_detailed("packet_ruleset_tech_100: sending info about ()");
55305
55306#ifdef FREECIV_DELTA_PROTOCOL
55308 struct packet_ruleset_tech *old;
55309 bool differ;
55310 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH;
55311
55312 if (nullptr == *hash) {
55314 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech);
55315 }
55316 BV_CLR_ALL(fields);
55317
55318 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55319 old = fc_malloc(sizeof(*old));
55320 /* temporary bitcopy just to insert correctly */
55321 *old = *real_packet;
55324 }
55325
55326 differ = (old->id != real_packet->id);
55327 if (differ) {
55328 BV_SET(fields, 0);
55329 }
55330
55331 differ = (old->root_req != real_packet->root_req);
55332 if (differ) {
55333 BV_SET(fields, 1);
55334 }
55335
55336 differ = (requirement_vector_size(&old->research_reqs) != requirement_vector_size(&real_packet->research_reqs));
55337 if (!differ) {
55338 int i;
55339
55340 for (i = 0; i < requirement_vector_size(&old->research_reqs); i++) {
55341 differ = !are_requirements_equal(&old->research_reqs.p[i], &real_packet->research_reqs.p[i]);
55342 if (differ) {
55343 break;
55344 }
55345 }
55346 }
55347 if (differ) {
55348 BV_SET(fields, 2);
55349 }
55350
55351 differ = (old->tclass != real_packet->tclass);
55352 if (differ) {
55353 BV_SET(fields, 3);
55354 }
55355
55356 /* folded into head */
55357 if (real_packet->removed) {
55358 BV_SET(fields, 4);
55359 }
55360
55361 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
55362 if (differ) {
55363 BV_SET(fields, 5);
55364 }
55365
55366 differ = ((int) (old->cost * 100) != (int) (real_packet->cost * 100));
55367 if (differ) {
55368 BV_SET(fields, 6);
55369 }
55370
55371 differ = (old->num_reqs != real_packet->num_reqs);
55372 if (differ) {
55373 BV_SET(fields, 7);
55374 }
55375
55376 differ = (strcmp(old->name, real_packet->name) != 0);
55377 if (differ) {
55378 BV_SET(fields, 8);
55379 }
55380
55381 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55382 if (differ) {
55383 BV_SET(fields, 9);
55384 }
55385
55386 if (real_packet->helptext) {
55387 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
55388 } else {
55389 differ = (strvec_size(old->helptext) > 0);
55390 }
55391 if (differ) {
55392 BV_SET(fields, 10);
55393 }
55394
55395 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
55396 if (differ) {
55397 BV_SET(fields, 11);
55398 }
55399
55400 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
55401 if (differ) {
55402 BV_SET(fields, 12);
55403 }
55404#endif /* FREECIV_DELTA_PROTOCOL */
55405
55406#ifdef FREECIV_JSON_CONNECTION
55407 struct plocation field_addr;
55408 {
55409 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55412 }
55413#endif /* FREECIV_JSON_CONNECTION */
55414
55415#ifdef FREECIV_DELTA_PROTOCOL
55416#ifdef FREECIV_JSON_CONNECTION
55417 field_addr.name = "fields";
55418#endif /* FREECIV_JSON_CONNECTION */
55419 e = 0;
55420 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55421 if (e) {
55422 log_packet_detailed("fields bitvector error detected");
55423 }
55424
55425 if (BV_ISSET(fields, 0)) {
55426 log_packet_detailed(" field 'id' has changed");
55427
55428#ifdef FREECIV_JSON_CONNECTION
55429 field_addr.name = "id";
55430#endif /* FREECIV_JSON_CONNECTION */
55431 e = 0;
55432
55433 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55434
55435 if (e) {
55436 log_packet_detailed("'id' field error detected");
55437 }
55438 }
55439
55440 if (BV_ISSET(fields, 1)) {
55441 log_packet_detailed(" field 'root_req' has changed");
55442
55443#ifdef FREECIV_JSON_CONNECTION
55444 field_addr.name = "root_req";
55445#endif /* FREECIV_JSON_CONNECTION */
55446 e = 0;
55447
55448 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55449
55450 if (e) {
55451 log_packet_detailed("'root_req' field error detected");
55452 }
55453 }
55454
55455 if (BV_ISSET(fields, 2)) {
55456 log_packet_detailed(" field 'research_reqs' has changed");
55457
55458#ifdef FREECIV_JSON_CONNECTION
55459 field_addr.name = "research_reqs";
55460#endif /* FREECIV_JSON_CONNECTION */
55461 e = 0;
55462
55463 {
55464 int i;
55465
55468
55469#ifdef FREECIV_JSON_CONNECTION
55470 /* Enter array. */
55471 field_addr.sub_location = plocation_elem_new(0);
55472#endif /* FREECIV_JSON_CONNECTION */
55473
55474 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55475#ifdef FREECIV_JSON_CONNECTION
55476 /* Next array element. */
55477 field_addr.sub_location->number = i;
55478#endif /* FREECIV_JSON_CONNECTION */
55479
55480 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55481 }
55482
55483#ifdef FREECIV_JSON_CONNECTION
55484 /* Exit array. */
55485 FC_FREE(field_addr.sub_location);
55486#endif /* FREECIV_JSON_CONNECTION */
55487 }
55488
55489 if (e) {
55490 log_packet_detailed("'research_reqs' field error detected");
55491 }
55492 }
55493
55494 if (BV_ISSET(fields, 3)) {
55495 log_packet_detailed(" field 'tclass' has changed");
55496
55497#ifdef FREECIV_JSON_CONNECTION
55498 field_addr.name = "tclass";
55499#endif /* FREECIV_JSON_CONNECTION */
55500 e = 0;
55501
55502 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55503
55504 if (e) {
55505 log_packet_detailed("'tclass' field error detected");
55506 }
55507 }
55508
55509 /* field 4 is folded into the header */
55510
55511 if (BV_ISSET(fields, 5)) {
55512 log_packet_detailed(" field 'flags' has changed");
55513
55514#ifdef FREECIV_JSON_CONNECTION
55515 field_addr.name = "flags";
55516#endif /* FREECIV_JSON_CONNECTION */
55517 e = 0;
55518
55519 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55520
55521 if (e) {
55522 log_packet_detailed("'flags' field error detected");
55523 }
55524 }
55525
55526 if (BV_ISSET(fields, 6)) {
55527 log_packet_detailed(" field 'cost' has changed");
55528
55529#ifdef FREECIV_JSON_CONNECTION
55530 field_addr.name = "cost";
55531#endif /* FREECIV_JSON_CONNECTION */
55532 e = 0;
55533
55534 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55535
55536 if (e) {
55537 log_packet_detailed("'cost' field error detected");
55538 }
55539 }
55540
55541 if (BV_ISSET(fields, 7)) {
55542 log_packet_detailed(" field 'num_reqs' has changed");
55543
55544#ifdef FREECIV_JSON_CONNECTION
55545 field_addr.name = "num_reqs";
55546#endif /* FREECIV_JSON_CONNECTION */
55547 e = 0;
55548
55549 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55550
55551 if (e) {
55552 log_packet_detailed("'num_reqs' field error detected");
55553 }
55554 }
55555
55556 if (BV_ISSET(fields, 8)) {
55557 log_packet_detailed(" field 'name' has changed");
55558
55559#ifdef FREECIV_JSON_CONNECTION
55560 field_addr.name = "name";
55561#endif /* FREECIV_JSON_CONNECTION */
55562 e = 0;
55563
55564 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55565
55566 if (e) {
55567 log_packet_detailed("'name' field error detected");
55568 }
55569 }
55570
55571 if (BV_ISSET(fields, 9)) {
55572 log_packet_detailed(" field 'rule_name' has changed");
55573
55574#ifdef FREECIV_JSON_CONNECTION
55575 field_addr.name = "rule_name";
55576#endif /* FREECIV_JSON_CONNECTION */
55577 e = 0;
55578
55579 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55580
55581 if (e) {
55582 log_packet_detailed("'rule_name' field error detected");
55583 }
55584 }
55585
55586 if (BV_ISSET(fields, 10)) {
55587 log_packet_detailed(" field 'helptext' has changed");
55588
55589#ifdef FREECIV_JSON_CONNECTION
55590 field_addr.name = "helptext";
55591#endif /* FREECIV_JSON_CONNECTION */
55592 e = 0;
55593
55594 if (!real_packet->helptext) {
55595 /* Transmit null as empty */
55596 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55597 } else {
55598 int i;
55599
55601 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55602
55603#ifdef FREECIV_JSON_CONNECTION
55604 /* Enter array. */
55605 field_addr.sub_location = plocation_elem_new(0);
55606#endif /* FREECIV_JSON_CONNECTION */
55607
55608 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55609#ifdef FREECIV_JSON_CONNECTION
55610 /* Next array element. */
55611 field_addr.sub_location->number = i;
55612#endif /* FREECIV_JSON_CONNECTION */
55613
55614 {
55615 const char *pstr = strvec_get(real_packet->helptext, i);
55616
55617 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55618 }
55619 }
55620
55621#ifdef FREECIV_JSON_CONNECTION
55622 /* Exit array. */
55623 FC_FREE(field_addr.sub_location);
55624#endif /* FREECIV_JSON_CONNECTION */
55625 }
55626
55627 if (e) {
55628 log_packet_detailed("'helptext' field error detected");
55629 }
55630 }
55631
55632 if (BV_ISSET(fields, 11)) {
55633 log_packet_detailed(" field 'graphic_str' has changed");
55634
55635#ifdef FREECIV_JSON_CONNECTION
55636 field_addr.name = "graphic_str";
55637#endif /* FREECIV_JSON_CONNECTION */
55638 e = 0;
55639
55640 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55641
55642 if (e) {
55643 log_packet_detailed("'graphic_str' field error detected");
55644 }
55645 }
55646
55647 if (BV_ISSET(fields, 12)) {
55648 log_packet_detailed(" field 'graphic_alt' has changed");
55649
55650#ifdef FREECIV_JSON_CONNECTION
55651 field_addr.name = "graphic_alt";
55652#endif /* FREECIV_JSON_CONNECTION */
55653 e = 0;
55654
55655 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55656
55657 if (e) {
55658 log_packet_detailed("'graphic_alt' field error detected");
55659 }
55660 }
55661
55662 old->id = real_packet->id;
55663 old->root_req = real_packet->root_req;
55664 requirement_vector_copy(&old->research_reqs, &real_packet->research_reqs);
55665 old->tclass = real_packet->tclass;
55666 old->removed = real_packet->removed;
55667 old->flags = real_packet->flags;
55668 old->cost = real_packet->cost;
55669 old->num_reqs = real_packet->num_reqs;
55670 sz_strlcpy(old->name, real_packet->name);
55671 sz_strlcpy(old->rule_name, real_packet->rule_name);
55672 if (real_packet->helptext) {
55673 strvec_copy(old->helptext, real_packet->helptext);
55674 } else {
55675 strvec_clear(old->helptext);
55676 }
55677 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
55678 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
55679
55680#else /* FREECIV_DELTA_PROTOCOL */
55681#ifdef FREECIV_JSON_CONNECTION
55682 field_addr.name = "id";
55683#endif /* FREECIV_JSON_CONNECTION */
55684 e = 0;
55685
55686 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
55687
55688 if (e) {
55689 log_packet_detailed("'id' field error detected");
55690 }
55691
55692#ifdef FREECIV_JSON_CONNECTION
55693 field_addr.name = "root_req";
55694#endif /* FREECIV_JSON_CONNECTION */
55695 e = 0;
55696
55697 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
55698
55699 if (e) {
55700 log_packet_detailed("'root_req' field error detected");
55701 }
55702
55703#ifdef FREECIV_JSON_CONNECTION
55704 field_addr.name = "research_reqs";
55705#endif /* FREECIV_JSON_CONNECTION */
55706 e = 0;
55707
55708 {
55709 int i;
55710
55713
55714#ifdef FREECIV_JSON_CONNECTION
55715 /* Enter array. */
55716 field_addr.sub_location = plocation_elem_new(0);
55717#endif /* FREECIV_JSON_CONNECTION */
55718
55719 for (i = 0; i < requirement_vector_size(&real_packet->research_reqs); i++) {
55720#ifdef FREECIV_JSON_CONNECTION
55721 /* Next array element. */
55722 field_addr.sub_location->number = i;
55723#endif /* FREECIV_JSON_CONNECTION */
55724
55725 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs.p[i]);
55726 }
55727
55728#ifdef FREECIV_JSON_CONNECTION
55729 /* Exit array. */
55730 FC_FREE(field_addr.sub_location);
55731#endif /* FREECIV_JSON_CONNECTION */
55732 }
55733
55734 if (e) {
55735 log_packet_detailed("'research_reqs' field error detected");
55736 }
55737
55738#ifdef FREECIV_JSON_CONNECTION
55739 field_addr.name = "tclass";
55740#endif /* FREECIV_JSON_CONNECTION */
55741 e = 0;
55742
55743 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
55744
55745 if (e) {
55746 log_packet_detailed("'tclass' field error detected");
55747 }
55748
55749#ifdef FREECIV_JSON_CONNECTION
55750 field_addr.name = "removed";
55751#endif /* FREECIV_JSON_CONNECTION */
55752 e = 0;
55753
55754 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removed);
55755
55756 if (e) {
55757 log_packet_detailed("'removed' field error detected");
55758 }
55759
55760#ifdef FREECIV_JSON_CONNECTION
55761 field_addr.name = "flags";
55762#endif /* FREECIV_JSON_CONNECTION */
55763 e = 0;
55764
55765 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
55766
55767 if (e) {
55768 log_packet_detailed("'flags' field error detected");
55769 }
55770
55771#ifdef FREECIV_JSON_CONNECTION
55772 field_addr.name = "cost";
55773#endif /* FREECIV_JSON_CONNECTION */
55774 e = 0;
55775
55776 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
55777
55778 if (e) {
55779 log_packet_detailed("'cost' field error detected");
55780 }
55781
55782#ifdef FREECIV_JSON_CONNECTION
55783 field_addr.name = "num_reqs";
55784#endif /* FREECIV_JSON_CONNECTION */
55785 e = 0;
55786
55787 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
55788
55789 if (e) {
55790 log_packet_detailed("'num_reqs' field error detected");
55791 }
55792
55793#ifdef FREECIV_JSON_CONNECTION
55794 field_addr.name = "name";
55795#endif /* FREECIV_JSON_CONNECTION */
55796 e = 0;
55797
55798 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55799
55800 if (e) {
55801 log_packet_detailed("'name' field error detected");
55802 }
55803
55804#ifdef FREECIV_JSON_CONNECTION
55805 field_addr.name = "rule_name";
55806#endif /* FREECIV_JSON_CONNECTION */
55807 e = 0;
55808
55809 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55810
55811 if (e) {
55812 log_packet_detailed("'rule_name' field error detected");
55813 }
55814
55815#ifdef FREECIV_JSON_CONNECTION
55816 field_addr.name = "helptext";
55817#endif /* FREECIV_JSON_CONNECTION */
55818 e = 0;
55819
55820 if (!real_packet->helptext) {
55821 /* Transmit null as empty */
55822 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
55823 } else {
55824 int i;
55825
55827 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
55828
55829#ifdef FREECIV_JSON_CONNECTION
55830 /* Enter array. */
55831 field_addr.sub_location = plocation_elem_new(0);
55832#endif /* FREECIV_JSON_CONNECTION */
55833
55834 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
55835#ifdef FREECIV_JSON_CONNECTION
55836 /* Next array element. */
55837 field_addr.sub_location->number = i;
55838#endif /* FREECIV_JSON_CONNECTION */
55839
55840 {
55841 const char *pstr = strvec_get(real_packet->helptext, i);
55842
55843 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
55844 }
55845 }
55846
55847#ifdef FREECIV_JSON_CONNECTION
55848 /* Exit array. */
55849 FC_FREE(field_addr.sub_location);
55850#endif /* FREECIV_JSON_CONNECTION */
55851 }
55852
55853 if (e) {
55854 log_packet_detailed("'helptext' field error detected");
55855 }
55856
55857#ifdef FREECIV_JSON_CONNECTION
55858 field_addr.name = "graphic_str";
55859#endif /* FREECIV_JSON_CONNECTION */
55860 e = 0;
55861
55862 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
55863
55864 if (e) {
55865 log_packet_detailed("'graphic_str' field error detected");
55866 }
55867
55868#ifdef FREECIV_JSON_CONNECTION
55869 field_addr.name = "graphic_alt";
55870#endif /* FREECIV_JSON_CONNECTION */
55871 e = 0;
55872
55873 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55874
55875 if (e) {
55876 log_packet_detailed("'graphic_alt' field error detected");
55877 }
55878#endif /* FREECIV_DELTA_PROTOCOL */
55879
55881}
55882
55884{
55885 if (!pc->used) {
55886 log_error("WARNING: trying to send data to the closed connection %s",
55888 return -1;
55889 }
55890 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH].packet != nullptr, -1,
55891 "Handler for PACKET_RULESET_TECH not installed");
55892 return pc->phs.handlers->send[PACKET_RULESET_TECH].packet(pc, packet);
55893}
55894
55895void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
55896{
55897 conn_list_iterate(dest, pconn) {
55900}
55901
55903{
55904 memset(packet, 0, sizeof(*packet));
55905}
55906
55907#define free_packet_ruleset_tech_class(_packet) (void) 0
55908#define destroy_packet_ruleset_tech_class free
55909
55910#ifdef FREECIV_DELTA_PROTOCOL
55911#define hash_packet_ruleset_tech_class_100 hash_const
55912#define cmp_packet_ruleset_tech_class_100 cmp_const
55914#endif /* FREECIV_DELTA_PROTOCOL */
55915
55917{
55918#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_class(_packet)
55920
55921#ifdef FREECIV_JSON_CONNECTION
55922 struct plocation field_addr;
55923 {
55924 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
55927 }
55928#endif /* FREECIV_JSON_CONNECTION */
55929
55930 log_packet_detailed("packet_ruleset_tech_class_100: got info about ()");
55931
55932#ifdef FREECIV_DELTA_PROTOCOL
55935 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_CLASS;
55936
55937 if (nullptr == *hash) {
55939 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
55940 }
55941
55942 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55943 *real_packet = *old;
55944 } else {
55945 /* packet is already initialized empty */
55946 log_packet_detailed(" no old info");
55947 }
55948
55949#ifdef FREECIV_JSON_CONNECTION
55950 field_addr.name = "fields";
55951#endif /* FREECIV_JSON_CONNECTION */
55952 DIO_BV_GET(&din, &field_addr, fields);
55953
55954 if (BV_ISSET(fields, 0)) {
55955 log_packet_detailed(" got field 'id'");
55956
55957#ifdef FREECIV_JSON_CONNECTION
55958 field_addr.name = "id";
55959#endif /* FREECIV_JSON_CONNECTION */
55960
55961 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
55963 }
55964 }
55965
55966 if (BV_ISSET(fields, 1)) {
55967 log_packet_detailed(" got field 'name'");
55968
55969#ifdef FREECIV_JSON_CONNECTION
55970 field_addr.name = "name";
55971#endif /* FREECIV_JSON_CONNECTION */
55972
55973 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55975 }
55976 }
55977
55978 if (BV_ISSET(fields, 2)) {
55979 log_packet_detailed(" got field 'rule_name'");
55980
55981#ifdef FREECIV_JSON_CONNECTION
55982 field_addr.name = "rule_name";
55983#endif /* FREECIV_JSON_CONNECTION */
55984
55985 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55986 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55987 }
55988 }
55989
55990 if (BV_ISSET(fields, 3)) {
55991 log_packet_detailed(" got field 'cost_pct'");
55992
55993#ifdef FREECIV_JSON_CONNECTION
55994 field_addr.name = "cost_pct";
55995#endif /* FREECIV_JSON_CONNECTION */
55996
55997 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
55999 }
56000 }
56001
56002 if (nullptr == old) {
56003 old = fc_malloc(sizeof(*old));
56005 *old = *real_packet;
56007 } else {
56008 *old = *real_packet;
56009 }
56010
56011#else /* FREECIV_DELTA_PROTOCOL */
56012#ifdef FREECIV_JSON_CONNECTION
56013 field_addr.name = "id";
56014#endif /* FREECIV_JSON_CONNECTION */
56015
56016 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
56018 }
56019
56020#ifdef FREECIV_JSON_CONNECTION
56021 field_addr.name = "name";
56022#endif /* FREECIV_JSON_CONNECTION */
56023
56024 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56026 }
56027
56028#ifdef FREECIV_JSON_CONNECTION
56029 field_addr.name = "rule_name";
56030#endif /* FREECIV_JSON_CONNECTION */
56031
56032 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56033 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56034 }
56035
56036#ifdef FREECIV_JSON_CONNECTION
56037 field_addr.name = "cost_pct";
56038#endif /* FREECIV_JSON_CONNECTION */
56039
56040 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
56042 }
56043#endif /* FREECIV_DELTA_PROTOCOL */
56044
56046#undef FREE_PACKET_STRUCT
56047}
56048
56050{
56051 const struct packet_ruleset_tech_class *real_packet = packet;
56052 int e;
56054
56055 log_packet_detailed("packet_ruleset_tech_class_100: sending info about ()");
56056
56057#ifdef FREECIV_DELTA_PROTOCOL
56060 bool differ;
56061 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_CLASS;
56062
56063 if (nullptr == *hash) {
56065 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_class);
56066 }
56067 BV_CLR_ALL(fields);
56068
56069 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56070 old = fc_malloc(sizeof(*old));
56071 /* temporary bitcopy just to insert correctly */
56072 *old = *real_packet;
56075 }
56076
56077 differ = (old->id != real_packet->id);
56078 if (differ) {
56079 BV_SET(fields, 0);
56080 }
56081
56082 differ = (strcmp(old->name, real_packet->name) != 0);
56083 if (differ) {
56084 BV_SET(fields, 1);
56085 }
56086
56087 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
56088 if (differ) {
56089 BV_SET(fields, 2);
56090 }
56091
56092 differ = (old->cost_pct != real_packet->cost_pct);
56093 if (differ) {
56094 BV_SET(fields, 3);
56095 }
56096#endif /* FREECIV_DELTA_PROTOCOL */
56097
56098#ifdef FREECIV_JSON_CONNECTION
56099 struct plocation field_addr;
56100 {
56101 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56104 }
56105#endif /* FREECIV_JSON_CONNECTION */
56106
56107#ifdef FREECIV_DELTA_PROTOCOL
56108#ifdef FREECIV_JSON_CONNECTION
56109 field_addr.name = "fields";
56110#endif /* FREECIV_JSON_CONNECTION */
56111 e = 0;
56112 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56113 if (e) {
56114 log_packet_detailed("fields bitvector error detected");
56115 }
56116
56117 if (BV_ISSET(fields, 0)) {
56118 log_packet_detailed(" field 'id' has changed");
56119
56120#ifdef FREECIV_JSON_CONNECTION
56121 field_addr.name = "id";
56122#endif /* FREECIV_JSON_CONNECTION */
56123 e = 0;
56124
56125 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56126
56127 if (e) {
56128 log_packet_detailed("'id' field error detected");
56129 }
56130 }
56131
56132 if (BV_ISSET(fields, 1)) {
56133 log_packet_detailed(" field 'name' has changed");
56134
56135#ifdef FREECIV_JSON_CONNECTION
56136 field_addr.name = "name";
56137#endif /* FREECIV_JSON_CONNECTION */
56138 e = 0;
56139
56140 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56141
56142 if (e) {
56143 log_packet_detailed("'name' field error detected");
56144 }
56145 }
56146
56147 if (BV_ISSET(fields, 2)) {
56148 log_packet_detailed(" field 'rule_name' has changed");
56149
56150#ifdef FREECIV_JSON_CONNECTION
56151 field_addr.name = "rule_name";
56152#endif /* FREECIV_JSON_CONNECTION */
56153 e = 0;
56154
56155 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56156
56157 if (e) {
56158 log_packet_detailed("'rule_name' field error detected");
56159 }
56160 }
56161
56162 if (BV_ISSET(fields, 3)) {
56163 log_packet_detailed(" field 'cost_pct' has changed");
56164
56165#ifdef FREECIV_JSON_CONNECTION
56166 field_addr.name = "cost_pct";
56167#endif /* FREECIV_JSON_CONNECTION */
56168 e = 0;
56169
56170 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56171
56172 if (e) {
56173 log_packet_detailed("'cost_pct' field error detected");
56174 }
56175 }
56176
56177 *old = *real_packet;
56178
56179#else /* FREECIV_DELTA_PROTOCOL */
56180#ifdef FREECIV_JSON_CONNECTION
56181 field_addr.name = "id";
56182#endif /* FREECIV_JSON_CONNECTION */
56183 e = 0;
56184
56185 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
56186
56187 if (e) {
56188 log_packet_detailed("'id' field error detected");
56189 }
56190
56191#ifdef FREECIV_JSON_CONNECTION
56192 field_addr.name = "name";
56193#endif /* FREECIV_JSON_CONNECTION */
56194 e = 0;
56195
56196 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56197
56198 if (e) {
56199 log_packet_detailed("'name' field error detected");
56200 }
56201
56202#ifdef FREECIV_JSON_CONNECTION
56203 field_addr.name = "rule_name";
56204#endif /* FREECIV_JSON_CONNECTION */
56205 e = 0;
56206
56207 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56208
56209 if (e) {
56210 log_packet_detailed("'rule_name' field error detected");
56211 }
56212
56213#ifdef FREECIV_JSON_CONNECTION
56214 field_addr.name = "cost_pct";
56215#endif /* FREECIV_JSON_CONNECTION */
56216 e = 0;
56217
56218 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
56219
56220 if (e) {
56221 log_packet_detailed("'cost_pct' field error detected");
56222 }
56223#endif /* FREECIV_DELTA_PROTOCOL */
56224
56226}
56227
56229{
56230 if (!pc->used) {
56231 log_error("WARNING: trying to send data to the closed connection %s",
56233 return -1;
56234 }
56235 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet != nullptr, -1,
56236 "Handler for PACKET_RULESET_TECH_CLASS not installed");
56237 return pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet(pc, packet);
56238}
56239
56241{
56242 conn_list_iterate(dest, pconn) {
56245}
56246
56248{
56249 memset(packet, 0, sizeof(*packet));
56250}
56251
56252#define free_packet_ruleset_tech_flag(_packet) (void) 0
56253#define destroy_packet_ruleset_tech_flag free
56254
56255#ifdef FREECIV_DELTA_PROTOCOL
56256#define hash_packet_ruleset_tech_flag_100 hash_const
56257#define cmp_packet_ruleset_tech_flag_100 cmp_const
56259#endif /* FREECIV_DELTA_PROTOCOL */
56260
56262{
56263#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_tech_flag(_packet)
56265
56266#ifdef FREECIV_JSON_CONNECTION
56267 struct plocation field_addr;
56268 {
56269 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56272 }
56273#endif /* FREECIV_JSON_CONNECTION */
56274
56275 log_packet_detailed("packet_ruleset_tech_flag_100: got info about ()");
56276
56277#ifdef FREECIV_DELTA_PROTOCOL
56280 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_FLAG;
56281
56282 if (nullptr == *hash) {
56284 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56285 }
56286
56287 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56288 *real_packet = *old;
56289 } else {
56290 /* packet is already initialized empty */
56291 log_packet_detailed(" no old info");
56292 }
56293
56294#ifdef FREECIV_JSON_CONNECTION
56295 field_addr.name = "fields";
56296#endif /* FREECIV_JSON_CONNECTION */
56297 DIO_BV_GET(&din, &field_addr, fields);
56298
56299 if (BV_ISSET(fields, 0)) {
56300 log_packet_detailed(" got field 'id'");
56301
56302#ifdef FREECIV_JSON_CONNECTION
56303 field_addr.name = "id";
56304#endif /* FREECIV_JSON_CONNECTION */
56305
56306 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56308 }
56309 }
56310
56311 if (BV_ISSET(fields, 1)) {
56312 log_packet_detailed(" got field 'name'");
56313
56314#ifdef FREECIV_JSON_CONNECTION
56315 field_addr.name = "name";
56316#endif /* FREECIV_JSON_CONNECTION */
56317
56318 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56320 }
56321 }
56322
56323 if (BV_ISSET(fields, 2)) {
56324 log_packet_detailed(" got field 'helptxt'");
56325
56326#ifdef FREECIV_JSON_CONNECTION
56327 field_addr.name = "helptxt";
56328#endif /* FREECIV_JSON_CONNECTION */
56329
56330 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56332 }
56333 }
56334
56335 if (nullptr == old) {
56336 old = fc_malloc(sizeof(*old));
56338 *old = *real_packet;
56340 } else {
56341 *old = *real_packet;
56342 }
56343
56344#else /* FREECIV_DELTA_PROTOCOL */
56345#ifdef FREECIV_JSON_CONNECTION
56346 field_addr.name = "id";
56347#endif /* FREECIV_JSON_CONNECTION */
56348
56349 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56351 }
56352
56353#ifdef FREECIV_JSON_CONNECTION
56354 field_addr.name = "name";
56355#endif /* FREECIV_JSON_CONNECTION */
56356
56357 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56359 }
56360
56361#ifdef FREECIV_JSON_CONNECTION
56362 field_addr.name = "helptxt";
56363#endif /* FREECIV_JSON_CONNECTION */
56364
56365 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56367 }
56368#endif /* FREECIV_DELTA_PROTOCOL */
56369
56371#undef FREE_PACKET_STRUCT
56372}
56373
56375{
56376 const struct packet_ruleset_tech_flag *real_packet = packet;
56377 int e;
56379
56380 log_packet_detailed("packet_ruleset_tech_flag_100: sending info about ()");
56381
56382#ifdef FREECIV_DELTA_PROTOCOL
56385 bool differ;
56386 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_FLAG;
56387
56388 if (nullptr == *hash) {
56390 nullptr, nullptr, nullptr, destroy_packet_ruleset_tech_flag);
56391 }
56392 BV_CLR_ALL(fields);
56393
56394 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56395 old = fc_malloc(sizeof(*old));
56396 /* temporary bitcopy just to insert correctly */
56397 *old = *real_packet;
56400 }
56401
56402 differ = (old->id != real_packet->id);
56403 if (differ) {
56404 BV_SET(fields, 0);
56405 }
56406
56407 differ = (strcmp(old->name, real_packet->name) != 0);
56408 if (differ) {
56409 BV_SET(fields, 1);
56410 }
56411
56412 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
56413 if (differ) {
56414 BV_SET(fields, 2);
56415 }
56416#endif /* FREECIV_DELTA_PROTOCOL */
56417
56418#ifdef FREECIV_JSON_CONNECTION
56419 struct plocation field_addr;
56420 {
56421 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56424 }
56425#endif /* FREECIV_JSON_CONNECTION */
56426
56427#ifdef FREECIV_DELTA_PROTOCOL
56428#ifdef FREECIV_JSON_CONNECTION
56429 field_addr.name = "fields";
56430#endif /* FREECIV_JSON_CONNECTION */
56431 e = 0;
56432 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56433 if (e) {
56434 log_packet_detailed("fields bitvector error detected");
56435 }
56436
56437 if (BV_ISSET(fields, 0)) {
56438 log_packet_detailed(" field 'id' has changed");
56439
56440#ifdef FREECIV_JSON_CONNECTION
56441 field_addr.name = "id";
56442#endif /* FREECIV_JSON_CONNECTION */
56443 e = 0;
56444
56445 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56446
56447 if (e) {
56448 log_packet_detailed("'id' field error detected");
56449 }
56450 }
56451
56452 if (BV_ISSET(fields, 1)) {
56453 log_packet_detailed(" field 'name' has changed");
56454
56455#ifdef FREECIV_JSON_CONNECTION
56456 field_addr.name = "name";
56457#endif /* FREECIV_JSON_CONNECTION */
56458 e = 0;
56459
56460 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56461
56462 if (e) {
56463 log_packet_detailed("'name' field error detected");
56464 }
56465 }
56466
56467 if (BV_ISSET(fields, 2)) {
56468 log_packet_detailed(" field 'helptxt' has changed");
56469
56470#ifdef FREECIV_JSON_CONNECTION
56471 field_addr.name = "helptxt";
56472#endif /* FREECIV_JSON_CONNECTION */
56473 e = 0;
56474
56475 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56476
56477 if (e) {
56478 log_packet_detailed("'helptxt' field error detected");
56479 }
56480 }
56481
56482 *old = *real_packet;
56483
56484#else /* FREECIV_DELTA_PROTOCOL */
56485#ifdef FREECIV_JSON_CONNECTION
56486 field_addr.name = "id";
56487#endif /* FREECIV_JSON_CONNECTION */
56488 e = 0;
56489
56490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56491
56492 if (e) {
56493 log_packet_detailed("'id' field error detected");
56494 }
56495
56496#ifdef FREECIV_JSON_CONNECTION
56497 field_addr.name = "name";
56498#endif /* FREECIV_JSON_CONNECTION */
56499 e = 0;
56500
56501 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56502
56503 if (e) {
56504 log_packet_detailed("'name' field error detected");
56505 }
56506
56507#ifdef FREECIV_JSON_CONNECTION
56508 field_addr.name = "helptxt";
56509#endif /* FREECIV_JSON_CONNECTION */
56510 e = 0;
56511
56512 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56513
56514 if (e) {
56515 log_packet_detailed("'helptxt' field error detected");
56516 }
56517#endif /* FREECIV_DELTA_PROTOCOL */
56518
56520}
56521
56523{
56524 if (!pc->used) {
56525 log_error("WARNING: trying to send data to the closed connection %s",
56527 return -1;
56528 }
56529 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet != nullptr, -1,
56530 "Handler for PACKET_RULESET_TECH_FLAG not installed");
56531 return pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet(pc, packet);
56532}
56533
56535{
56536 conn_list_iterate(dest, pconn) {
56539}
56540
56542{
56543 memset(packet, 0, sizeof(*packet));
56544
56545 requirement_vector_init(&packet->reqs);
56546 packet->helptext = strvec_new();
56547}
56548
56550{
56551 if (packet->helptext) {
56552 strvec_destroy(packet->helptext);
56553 packet->helptext = nullptr;
56554 }
56555 requirement_vector_free(&packet->reqs);
56556}
56557
56558static inline void destroy_packet_ruleset_government(void *packet)
56559{
56561 free(packet);
56562}
56563
56564#ifdef FREECIV_DELTA_PROTOCOL
56565#define hash_packet_ruleset_government_100 hash_const
56566#define cmp_packet_ruleset_government_100 cmp_const
56568#endif /* FREECIV_DELTA_PROTOCOL */
56569
56571{
56572#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_government(_packet)
56574
56575#ifdef FREECIV_JSON_CONNECTION
56576 struct plocation field_addr;
56577 {
56578 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
56581 }
56582#endif /* FREECIV_JSON_CONNECTION */
56583
56584 log_packet_detailed("packet_ruleset_government_100: got info about ()");
56585
56586#ifdef FREECIV_DELTA_PROTOCOL
56589 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT;
56590
56591 if (nullptr == *hash) {
56593 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
56594 }
56595
56596 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56597 real_packet->id = old->id;
56598 requirement_vector_copy(&real_packet->reqs, &old->reqs);
56599 sz_strlcpy(real_packet->name, old->name);
56600 sz_strlcpy(real_packet->rule_name, old->rule_name);
56601 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
56602 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
56603 sz_strlcpy(real_packet->sound_str, old->sound_str);
56604 sz_strlcpy(real_packet->sound_alt, old->sound_alt);
56605 sz_strlcpy(real_packet->sound_alt2, old->sound_alt2);
56606 if (old->helptext) {
56607 strvec_copy(real_packet->helptext, old->helptext);
56608 } else {
56609 strvec_clear(real_packet->helptext);
56610 }
56611 } else {
56612 /* packet is already initialized empty */
56613 log_packet_detailed(" no old info");
56614 }
56615
56616#ifdef FREECIV_JSON_CONNECTION
56617 field_addr.name = "fields";
56618#endif /* FREECIV_JSON_CONNECTION */
56619 DIO_BV_GET(&din, &field_addr, fields);
56620
56621 if (BV_ISSET(fields, 0)) {
56622 log_packet_detailed(" got field 'id'");
56623
56624#ifdef FREECIV_JSON_CONNECTION
56625 field_addr.name = "id";
56626#endif /* FREECIV_JSON_CONNECTION */
56627
56628 {
56629 int readin;
56630
56631 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56633 }
56634 real_packet->id = readin;
56635 }
56636 }
56637
56638 if (BV_ISSET(fields, 1)) {
56639 log_packet_detailed(" got field 'reqs'");
56640
56641#ifdef FREECIV_JSON_CONNECTION
56642 field_addr.name = "reqs";
56643#endif /* FREECIV_JSON_CONNECTION */
56644
56645 {
56646 int i;
56647
56648 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56650 }
56652
56653#ifdef FREECIV_JSON_CONNECTION
56654 /* Enter array. */
56655 field_addr.sub_location = plocation_elem_new(0);
56656#endif /* FREECIV_JSON_CONNECTION */
56657
56658 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56659#ifdef FREECIV_JSON_CONNECTION
56660 /* Next array element */
56661 field_addr.sub_location->number = i;
56662#endif /* FREECIV_JSON_CONNECTION */
56663
56664 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56666 }
56667 }
56668
56669#ifdef FREECIV_JSON_CONNECTION
56670 /* Exit array. */
56671 FC_FREE(field_addr.sub_location);
56672#endif /* FREECIV_JSON_CONNECTION */
56673 }
56674 }
56675
56676 if (BV_ISSET(fields, 2)) {
56677 log_packet_detailed(" got field 'name'");
56678
56679#ifdef FREECIV_JSON_CONNECTION
56680 field_addr.name = "name";
56681#endif /* FREECIV_JSON_CONNECTION */
56682
56683 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56685 }
56686 }
56687
56688 if (BV_ISSET(fields, 3)) {
56689 log_packet_detailed(" got field 'rule_name'");
56690
56691#ifdef FREECIV_JSON_CONNECTION
56692 field_addr.name = "rule_name";
56693#endif /* FREECIV_JSON_CONNECTION */
56694
56695 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56696 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56697 }
56698 }
56699
56700 if (BV_ISSET(fields, 4)) {
56701 log_packet_detailed(" got field 'graphic_str'");
56702
56703#ifdef FREECIV_JSON_CONNECTION
56704 field_addr.name = "graphic_str";
56705#endif /* FREECIV_JSON_CONNECTION */
56706
56707 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56708 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56709 }
56710 }
56711
56712 if (BV_ISSET(fields, 5)) {
56713 log_packet_detailed(" got field 'graphic_alt'");
56714
56715#ifdef FREECIV_JSON_CONNECTION
56716 field_addr.name = "graphic_alt";
56717#endif /* FREECIV_JSON_CONNECTION */
56718
56719 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56720 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56721 }
56722 }
56723
56724 if (BV_ISSET(fields, 6)) {
56725 log_packet_detailed(" got field 'sound_str'");
56726
56727#ifdef FREECIV_JSON_CONNECTION
56728 field_addr.name = "sound_str";
56729#endif /* FREECIV_JSON_CONNECTION */
56730
56731 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56732 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56733 }
56734 }
56735
56736 if (BV_ISSET(fields, 7)) {
56737 log_packet_detailed(" got field 'sound_alt'");
56738
56739#ifdef FREECIV_JSON_CONNECTION
56740 field_addr.name = "sound_alt";
56741#endif /* FREECIV_JSON_CONNECTION */
56742
56743 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56744 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56745 }
56746 }
56747
56748 if (BV_ISSET(fields, 8)) {
56749 log_packet_detailed(" got field 'sound_alt2'");
56750
56751#ifdef FREECIV_JSON_CONNECTION
56752 field_addr.name = "sound_alt2";
56753#endif /* FREECIV_JSON_CONNECTION */
56754
56755 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56756 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56757 }
56758 }
56759
56760 if (BV_ISSET(fields, 9)) {
56761 log_packet_detailed(" got field 'helptext'");
56762
56763#ifdef FREECIV_JSON_CONNECTION
56764 field_addr.name = "helptext";
56765#endif /* FREECIV_JSON_CONNECTION */
56766
56767 {
56768 int i;
56769
56770 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56772 }
56773 strvec_reserve(real_packet->helptext, i);
56774
56775#ifdef FREECIV_JSON_CONNECTION
56776 /* Enter array. */
56777 field_addr.sub_location = plocation_elem_new(0);
56778#endif /* FREECIV_JSON_CONNECTION */
56779
56780 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
56781#ifdef FREECIV_JSON_CONNECTION
56782 /* Next array element */
56783 field_addr.sub_location->number = i;
56784#endif /* FREECIV_JSON_CONNECTION */
56785
56786 {
56787 char readin[MAX_LEN_PACKET];
56788
56789 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
56790 || !strvec_set(real_packet->helptext, i, readin)) {
56792 }
56793 }
56794 }
56795
56796#ifdef FREECIV_JSON_CONNECTION
56797 /* Exit array. */
56798 FC_FREE(field_addr.sub_location);
56799#endif /* FREECIV_JSON_CONNECTION */
56800 }
56801 }
56802
56803 if (nullptr == old) {
56804 old = fc_malloc(sizeof(*old));
56806 old->id = real_packet->id;
56807 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56808 sz_strlcpy(old->name, real_packet->name);
56809 sz_strlcpy(old->rule_name, real_packet->rule_name);
56810 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56811 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56812 sz_strlcpy(old->sound_str, real_packet->sound_str);
56813 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56814 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56815 if (real_packet->helptext) {
56816 strvec_copy(old->helptext, real_packet->helptext);
56817 } else {
56818 strvec_clear(old->helptext);
56819 }
56821 } else {
56822 old->id = real_packet->id;
56823 requirement_vector_copy(&old->reqs, &real_packet->reqs);
56824 sz_strlcpy(old->name, real_packet->name);
56825 sz_strlcpy(old->rule_name, real_packet->rule_name);
56826 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
56827 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
56828 sz_strlcpy(old->sound_str, real_packet->sound_str);
56829 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
56830 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
56831 if (real_packet->helptext) {
56832 strvec_copy(old->helptext, real_packet->helptext);
56833 } else {
56834 strvec_clear(old->helptext);
56835 }
56836 }
56837
56838#else /* FREECIV_DELTA_PROTOCOL */
56839#ifdef FREECIV_JSON_CONNECTION
56840 field_addr.name = "id";
56841#endif /* FREECIV_JSON_CONNECTION */
56842
56843 {
56844 int readin;
56845
56846 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56848 }
56849 real_packet->id = readin;
56850 }
56851
56852#ifdef FREECIV_JSON_CONNECTION
56853 field_addr.name = "reqs";
56854#endif /* FREECIV_JSON_CONNECTION */
56855
56856 {
56857 int i;
56858
56859 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56861 }
56863
56864#ifdef FREECIV_JSON_CONNECTION
56865 /* Enter array. */
56866 field_addr.sub_location = plocation_elem_new(0);
56867#endif /* FREECIV_JSON_CONNECTION */
56868
56869 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
56870#ifdef FREECIV_JSON_CONNECTION
56871 /* Next array element */
56872 field_addr.sub_location->number = i;
56873#endif /* FREECIV_JSON_CONNECTION */
56874
56875 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
56877 }
56878 }
56879
56880#ifdef FREECIV_JSON_CONNECTION
56881 /* Exit array. */
56882 FC_FREE(field_addr.sub_location);
56883#endif /* FREECIV_JSON_CONNECTION */
56884 }
56885
56886#ifdef FREECIV_JSON_CONNECTION
56887 field_addr.name = "name";
56888#endif /* FREECIV_JSON_CONNECTION */
56889
56890 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56892 }
56893
56894#ifdef FREECIV_JSON_CONNECTION
56895 field_addr.name = "rule_name";
56896#endif /* FREECIV_JSON_CONNECTION */
56897
56898 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56899 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56900 }
56901
56902#ifdef FREECIV_JSON_CONNECTION
56903 field_addr.name = "graphic_str";
56904#endif /* FREECIV_JSON_CONNECTION */
56905
56906 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56907 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56908 }
56909
56910#ifdef FREECIV_JSON_CONNECTION
56911 field_addr.name = "graphic_alt";
56912#endif /* FREECIV_JSON_CONNECTION */
56913
56914 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56915 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56916 }
56917
56918#ifdef FREECIV_JSON_CONNECTION
56919 field_addr.name = "sound_str";
56920#endif /* FREECIV_JSON_CONNECTION */
56921
56922 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
56923 RECEIVE_PACKET_FIELD_ERROR(sound_str);
56924 }
56925
56926#ifdef FREECIV_JSON_CONNECTION
56927 field_addr.name = "sound_alt";
56928#endif /* FREECIV_JSON_CONNECTION */
56929
56930 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
56931 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
56932 }
56933
56934#ifdef FREECIV_JSON_CONNECTION
56935 field_addr.name = "sound_alt2";
56936#endif /* FREECIV_JSON_CONNECTION */
56937
56938 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
56939 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
56940 }
56941
56942#ifdef FREECIV_JSON_CONNECTION
56943 field_addr.name = "helptext";
56944#endif /* FREECIV_JSON_CONNECTION */
56945
56946 {
56947 int i;
56948
56949 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
56951 }
56952 strvec_reserve(real_packet->helptext, i);
56953
56954#ifdef FREECIV_JSON_CONNECTION
56955 /* Enter array. */
56956 field_addr.sub_location = plocation_elem_new(0);
56957#endif /* FREECIV_JSON_CONNECTION */
56958
56959 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
56960#ifdef FREECIV_JSON_CONNECTION
56961 /* Next array element */
56962 field_addr.sub_location->number = i;
56963#endif /* FREECIV_JSON_CONNECTION */
56964
56965 {
56966 char readin[MAX_LEN_PACKET];
56967
56968 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
56969 || !strvec_set(real_packet->helptext, i, readin)) {
56971 }
56972 }
56973 }
56974
56975#ifdef FREECIV_JSON_CONNECTION
56976 /* Exit array. */
56977 FC_FREE(field_addr.sub_location);
56978#endif /* FREECIV_JSON_CONNECTION */
56979 }
56980#endif /* FREECIV_DELTA_PROTOCOL */
56981
56983#undef FREE_PACKET_STRUCT
56984}
56985
56987{
56988 const struct packet_ruleset_government *real_packet = packet;
56989 int e;
56991
56992 log_packet_detailed("packet_ruleset_government_100: sending info about ()");
56993
56994#ifdef FREECIV_DELTA_PROTOCOL
56997 bool differ;
56998 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOVERNMENT;
56999
57000 if (nullptr == *hash) {
57002 nullptr, nullptr, nullptr, destroy_packet_ruleset_government);
57003 }
57004 BV_CLR_ALL(fields);
57005
57006 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57007 old = fc_malloc(sizeof(*old));
57008 /* temporary bitcopy just to insert correctly */
57009 *old = *real_packet;
57012 }
57013
57014 differ = (old->id != real_packet->id);
57015 if (differ) {
57016 BV_SET(fields, 0);
57017 }
57018
57020 if (!differ) {
57021 int i;
57022
57023 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
57024 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
57025 if (differ) {
57026 break;
57027 }
57028 }
57029 }
57030 if (differ) {
57031 BV_SET(fields, 1);
57032 }
57033
57034 differ = (strcmp(old->name, real_packet->name) != 0);
57035 if (differ) {
57036 BV_SET(fields, 2);
57037 }
57038
57039 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
57040 if (differ) {
57041 BV_SET(fields, 3);
57042 }
57043
57044 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
57045 if (differ) {
57046 BV_SET(fields, 4);
57047 }
57048
57049 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
57050 if (differ) {
57051 BV_SET(fields, 5);
57052 }
57053
57054 differ = (strcmp(old->sound_str, real_packet->sound_str) != 0);
57055 if (differ) {
57056 BV_SET(fields, 6);
57057 }
57058
57059 differ = (strcmp(old->sound_alt, real_packet->sound_alt) != 0);
57060 if (differ) {
57061 BV_SET(fields, 7);
57062 }
57063
57064 differ = (strcmp(old->sound_alt2, real_packet->sound_alt2) != 0);
57065 if (differ) {
57066 BV_SET(fields, 8);
57067 }
57068
57069 if (real_packet->helptext) {
57070 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
57071 } else {
57072 differ = (strvec_size(old->helptext) > 0);
57073 }
57074 if (differ) {
57075 BV_SET(fields, 9);
57076 }
57077#endif /* FREECIV_DELTA_PROTOCOL */
57078
57079#ifdef FREECIV_JSON_CONNECTION
57080 struct plocation field_addr;
57081 {
57082 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57085 }
57086#endif /* FREECIV_JSON_CONNECTION */
57087
57088#ifdef FREECIV_DELTA_PROTOCOL
57089#ifdef FREECIV_JSON_CONNECTION
57090 field_addr.name = "fields";
57091#endif /* FREECIV_JSON_CONNECTION */
57092 e = 0;
57093 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57094 if (e) {
57095 log_packet_detailed("fields bitvector error detected");
57096 }
57097
57098 if (BV_ISSET(fields, 0)) {
57099 log_packet_detailed(" field 'id' has changed");
57100
57101#ifdef FREECIV_JSON_CONNECTION
57102 field_addr.name = "id";
57103#endif /* FREECIV_JSON_CONNECTION */
57104 e = 0;
57105
57106 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57107
57108 if (e) {
57109 log_packet_detailed("'id' field error detected");
57110 }
57111 }
57112
57113 if (BV_ISSET(fields, 1)) {
57114 log_packet_detailed(" field 'reqs' has changed");
57115
57116#ifdef FREECIV_JSON_CONNECTION
57117 field_addr.name = "reqs";
57118#endif /* FREECIV_JSON_CONNECTION */
57119 e = 0;
57120
57121 {
57122 int i;
57123
57126
57127#ifdef FREECIV_JSON_CONNECTION
57128 /* Enter array. */
57129 field_addr.sub_location = plocation_elem_new(0);
57130#endif /* FREECIV_JSON_CONNECTION */
57131
57132 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57133#ifdef FREECIV_JSON_CONNECTION
57134 /* Next array element. */
57135 field_addr.sub_location->number = i;
57136#endif /* FREECIV_JSON_CONNECTION */
57137
57138 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57139 }
57140
57141#ifdef FREECIV_JSON_CONNECTION
57142 /* Exit array. */
57143 FC_FREE(field_addr.sub_location);
57144#endif /* FREECIV_JSON_CONNECTION */
57145 }
57146
57147 if (e) {
57148 log_packet_detailed("'reqs' field error detected");
57149 }
57150 }
57151
57152 if (BV_ISSET(fields, 2)) {
57153 log_packet_detailed(" field 'name' has changed");
57154
57155#ifdef FREECIV_JSON_CONNECTION
57156 field_addr.name = "name";
57157#endif /* FREECIV_JSON_CONNECTION */
57158 e = 0;
57159
57160 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57161
57162 if (e) {
57163 log_packet_detailed("'name' field error detected");
57164 }
57165 }
57166
57167 if (BV_ISSET(fields, 3)) {
57168 log_packet_detailed(" field 'rule_name' has changed");
57169
57170#ifdef FREECIV_JSON_CONNECTION
57171 field_addr.name = "rule_name";
57172#endif /* FREECIV_JSON_CONNECTION */
57173 e = 0;
57174
57175 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57176
57177 if (e) {
57178 log_packet_detailed("'rule_name' field error detected");
57179 }
57180 }
57181
57182 if (BV_ISSET(fields, 4)) {
57183 log_packet_detailed(" field 'graphic_str' has changed");
57184
57185#ifdef FREECIV_JSON_CONNECTION
57186 field_addr.name = "graphic_str";
57187#endif /* FREECIV_JSON_CONNECTION */
57188 e = 0;
57189
57190 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57191
57192 if (e) {
57193 log_packet_detailed("'graphic_str' field error detected");
57194 }
57195 }
57196
57197 if (BV_ISSET(fields, 5)) {
57198 log_packet_detailed(" field 'graphic_alt' has changed");
57199
57200#ifdef FREECIV_JSON_CONNECTION
57201 field_addr.name = "graphic_alt";
57202#endif /* FREECIV_JSON_CONNECTION */
57203 e = 0;
57204
57205 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57206
57207 if (e) {
57208 log_packet_detailed("'graphic_alt' field error detected");
57209 }
57210 }
57211
57212 if (BV_ISSET(fields, 6)) {
57213 log_packet_detailed(" field 'sound_str' has changed");
57214
57215#ifdef FREECIV_JSON_CONNECTION
57216 field_addr.name = "sound_str";
57217#endif /* FREECIV_JSON_CONNECTION */
57218 e = 0;
57219
57220 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57221
57222 if (e) {
57223 log_packet_detailed("'sound_str' field error detected");
57224 }
57225 }
57226
57227 if (BV_ISSET(fields, 7)) {
57228 log_packet_detailed(" field 'sound_alt' has changed");
57229
57230#ifdef FREECIV_JSON_CONNECTION
57231 field_addr.name = "sound_alt";
57232#endif /* FREECIV_JSON_CONNECTION */
57233 e = 0;
57234
57235 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57236
57237 if (e) {
57238 log_packet_detailed("'sound_alt' field error detected");
57239 }
57240 }
57241
57242 if (BV_ISSET(fields, 8)) {
57243 log_packet_detailed(" field 'sound_alt2' has changed");
57244
57245#ifdef FREECIV_JSON_CONNECTION
57246 field_addr.name = "sound_alt2";
57247#endif /* FREECIV_JSON_CONNECTION */
57248 e = 0;
57249
57250 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57251
57252 if (e) {
57253 log_packet_detailed("'sound_alt2' field error detected");
57254 }
57255 }
57256
57257 if (BV_ISSET(fields, 9)) {
57258 log_packet_detailed(" field 'helptext' has changed");
57259
57260#ifdef FREECIV_JSON_CONNECTION
57261 field_addr.name = "helptext";
57262#endif /* FREECIV_JSON_CONNECTION */
57263 e = 0;
57264
57265 if (!real_packet->helptext) {
57266 /* Transmit null as empty */
57267 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57268 } else {
57269 int i;
57270
57272 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57273
57274#ifdef FREECIV_JSON_CONNECTION
57275 /* Enter array. */
57276 field_addr.sub_location = plocation_elem_new(0);
57277#endif /* FREECIV_JSON_CONNECTION */
57278
57279 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57280#ifdef FREECIV_JSON_CONNECTION
57281 /* Next array element. */
57282 field_addr.sub_location->number = i;
57283#endif /* FREECIV_JSON_CONNECTION */
57284
57285 {
57286 const char *pstr = strvec_get(real_packet->helptext, i);
57287
57288 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57289 }
57290 }
57291
57292#ifdef FREECIV_JSON_CONNECTION
57293 /* Exit array. */
57294 FC_FREE(field_addr.sub_location);
57295#endif /* FREECIV_JSON_CONNECTION */
57296 }
57297
57298 if (e) {
57299 log_packet_detailed("'helptext' field error detected");
57300 }
57301 }
57302
57303 old->id = real_packet->id;
57304 requirement_vector_copy(&old->reqs, &real_packet->reqs);
57305 sz_strlcpy(old->name, real_packet->name);
57306 sz_strlcpy(old->rule_name, real_packet->rule_name);
57307 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
57308 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
57309 sz_strlcpy(old->sound_str, real_packet->sound_str);
57310 sz_strlcpy(old->sound_alt, real_packet->sound_alt);
57311 sz_strlcpy(old->sound_alt2, real_packet->sound_alt2);
57312 if (real_packet->helptext) {
57313 strvec_copy(old->helptext, real_packet->helptext);
57314 } else {
57315 strvec_clear(old->helptext);
57316 }
57317
57318#else /* FREECIV_DELTA_PROTOCOL */
57319#ifdef FREECIV_JSON_CONNECTION
57320 field_addr.name = "id";
57321#endif /* FREECIV_JSON_CONNECTION */
57322 e = 0;
57323
57324 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
57325
57326 if (e) {
57327 log_packet_detailed("'id' field error detected");
57328 }
57329
57330#ifdef FREECIV_JSON_CONNECTION
57331 field_addr.name = "reqs";
57332#endif /* FREECIV_JSON_CONNECTION */
57333 e = 0;
57334
57335 {
57336 int i;
57337
57340
57341#ifdef FREECIV_JSON_CONNECTION
57342 /* Enter array. */
57343 field_addr.sub_location = plocation_elem_new(0);
57344#endif /* FREECIV_JSON_CONNECTION */
57345
57346 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
57347#ifdef FREECIV_JSON_CONNECTION
57348 /* Next array element. */
57349 field_addr.sub_location->number = i;
57350#endif /* FREECIV_JSON_CONNECTION */
57351
57352 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
57353 }
57354
57355#ifdef FREECIV_JSON_CONNECTION
57356 /* Exit array. */
57357 FC_FREE(field_addr.sub_location);
57358#endif /* FREECIV_JSON_CONNECTION */
57359 }
57360
57361 if (e) {
57362 log_packet_detailed("'reqs' field error detected");
57363 }
57364
57365#ifdef FREECIV_JSON_CONNECTION
57366 field_addr.name = "name";
57367#endif /* FREECIV_JSON_CONNECTION */
57368 e = 0;
57369
57370 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
57371
57372 if (e) {
57373 log_packet_detailed("'name' field error detected");
57374 }
57375
57376#ifdef FREECIV_JSON_CONNECTION
57377 field_addr.name = "rule_name";
57378#endif /* FREECIV_JSON_CONNECTION */
57379 e = 0;
57380
57381 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57382
57383 if (e) {
57384 log_packet_detailed("'rule_name' field error detected");
57385 }
57386
57387#ifdef FREECIV_JSON_CONNECTION
57388 field_addr.name = "graphic_str";
57389#endif /* FREECIV_JSON_CONNECTION */
57390 e = 0;
57391
57392 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57393
57394 if (e) {
57395 log_packet_detailed("'graphic_str' field error detected");
57396 }
57397
57398#ifdef FREECIV_JSON_CONNECTION
57399 field_addr.name = "graphic_alt";
57400#endif /* FREECIV_JSON_CONNECTION */
57401 e = 0;
57402
57403 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57404
57405 if (e) {
57406 log_packet_detailed("'graphic_alt' field error detected");
57407 }
57408
57409#ifdef FREECIV_JSON_CONNECTION
57410 field_addr.name = "sound_str";
57411#endif /* FREECIV_JSON_CONNECTION */
57412 e = 0;
57413
57414 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
57415
57416 if (e) {
57417 log_packet_detailed("'sound_str' field error detected");
57418 }
57419
57420#ifdef FREECIV_JSON_CONNECTION
57421 field_addr.name = "sound_alt";
57422#endif /* FREECIV_JSON_CONNECTION */
57423 e = 0;
57424
57425 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
57426
57427 if (e) {
57428 log_packet_detailed("'sound_alt' field error detected");
57429 }
57430
57431#ifdef FREECIV_JSON_CONNECTION
57432 field_addr.name = "sound_alt2";
57433#endif /* FREECIV_JSON_CONNECTION */
57434 e = 0;
57435
57436 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
57437
57438 if (e) {
57439 log_packet_detailed("'sound_alt2' field error detected");
57440 }
57441
57442#ifdef FREECIV_JSON_CONNECTION
57443 field_addr.name = "helptext";
57444#endif /* FREECIV_JSON_CONNECTION */
57445 e = 0;
57446
57447 if (!real_packet->helptext) {
57448 /* Transmit null as empty */
57449 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
57450 } else {
57451 int i;
57452
57454 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
57455
57456#ifdef FREECIV_JSON_CONNECTION
57457 /* Enter array. */
57458 field_addr.sub_location = plocation_elem_new(0);
57459#endif /* FREECIV_JSON_CONNECTION */
57460
57461 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
57462#ifdef FREECIV_JSON_CONNECTION
57463 /* Next array element. */
57464 field_addr.sub_location->number = i;
57465#endif /* FREECIV_JSON_CONNECTION */
57466
57467 {
57468 const char *pstr = strvec_get(real_packet->helptext, i);
57469
57470 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
57471 }
57472 }
57473
57474#ifdef FREECIV_JSON_CONNECTION
57475 /* Exit array. */
57476 FC_FREE(field_addr.sub_location);
57477#endif /* FREECIV_JSON_CONNECTION */
57478 }
57479
57480 if (e) {
57481 log_packet_detailed("'helptext' field error detected");
57482 }
57483#endif /* FREECIV_DELTA_PROTOCOL */
57484
57486}
57487
57489{
57490 if (!pc->used) {
57491 log_error("WARNING: trying to send data to the closed connection %s",
57493 return -1;
57494 }
57495 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet != nullptr, -1,
57496 "Handler for PACKET_RULESET_GOVERNMENT not installed");
57497 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet(pc, packet);
57498}
57499
57501{
57502 conn_list_iterate(dest, pconn) {
57505}
57506
57508{
57509 memset(packet, 0, sizeof(*packet));
57510}
57511
57512#define free_packet_ruleset_terrain_control(_packet) (void) 0
57513#define destroy_packet_ruleset_terrain_control free
57514
57515#ifdef FREECIV_DELTA_PROTOCOL
57516#define hash_packet_ruleset_terrain_control_100 hash_const
57517#define cmp_packet_ruleset_terrain_control_100 cmp_const
57519#endif /* FREECIV_DELTA_PROTOCOL */
57520
57522{
57523#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_control(_packet)
57525
57526#ifdef FREECIV_JSON_CONNECTION
57527 struct plocation field_addr;
57528 {
57529 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57532 }
57533#endif /* FREECIV_JSON_CONNECTION */
57534
57535 log_packet_detailed("packet_ruleset_terrain_control_100: got info about ()");
57536
57537#ifdef FREECIV_DELTA_PROTOCOL
57540 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_CONTROL;
57541
57542 if (nullptr == *hash) {
57544 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
57545 }
57546
57547 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57548 *real_packet = *old;
57549 } else {
57550 /* packet is already initialized empty */
57551 log_packet_detailed(" no old info");
57552 }
57553
57554#ifdef FREECIV_JSON_CONNECTION
57555 field_addr.name = "fields";
57556#endif /* FREECIV_JSON_CONNECTION */
57557 DIO_BV_GET(&din, &field_addr, fields);
57558
57559 if (BV_ISSET(fields, 0)) {
57560 log_packet_detailed(" got field 'ocean_reclaim_requirement_pct'");
57561
57562#ifdef FREECIV_JSON_CONNECTION
57563 field_addr.name = "ocean_reclaim_requirement_pct";
57564#endif /* FREECIV_JSON_CONNECTION */
57565
57566 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
57567 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
57568 }
57569 }
57570
57571 if (BV_ISSET(fields, 1)) {
57572 log_packet_detailed(" got field 'land_channel_requirement_pct'");
57573
57574#ifdef FREECIV_JSON_CONNECTION
57575 field_addr.name = "land_channel_requirement_pct";
57576#endif /* FREECIV_JSON_CONNECTION */
57577
57578 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
57579 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
57580 }
57581 }
57582
57583 if (BV_ISSET(fields, 2)) {
57584 log_packet_detailed(" got field 'terrain_thaw_requirement_pct'");
57585
57586#ifdef FREECIV_JSON_CONNECTION
57587 field_addr.name = "terrain_thaw_requirement_pct";
57588#endif /* FREECIV_JSON_CONNECTION */
57589
57590 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
57591 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
57592 }
57593 }
57594
57595 if (BV_ISSET(fields, 3)) {
57596 log_packet_detailed(" got field 'terrain_freeze_requirement_pct'");
57597
57598#ifdef FREECIV_JSON_CONNECTION
57599 field_addr.name = "terrain_freeze_requirement_pct";
57600#endif /* FREECIV_JSON_CONNECTION */
57601
57602 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
57603 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
57604 }
57605 }
57606
57607 if (BV_ISSET(fields, 4)) {
57608 log_packet_detailed(" got field 'lake_max_size'");
57609
57610#ifdef FREECIV_JSON_CONNECTION
57611 field_addr.name = "lake_max_size";
57612#endif /* FREECIV_JSON_CONNECTION */
57613
57614 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
57615 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
57616 }
57617 }
57618
57619 if (BV_ISSET(fields, 5)) {
57620 log_packet_detailed(" got field 'min_start_native_area'");
57621
57622#ifdef FREECIV_JSON_CONNECTION
57623 field_addr.name = "min_start_native_area";
57624#endif /* FREECIV_JSON_CONNECTION */
57625
57626 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
57627 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
57628 }
57629 }
57630
57631 if (BV_ISSET(fields, 6)) {
57632 log_packet_detailed(" got field 'move_fragments'");
57633
57634#ifdef FREECIV_JSON_CONNECTION
57635 field_addr.name = "move_fragments";
57636#endif /* FREECIV_JSON_CONNECTION */
57637
57638 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
57639 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
57640 }
57641 }
57642
57643 if (BV_ISSET(fields, 7)) {
57644 log_packet_detailed(" got field 'igter_cost'");
57645
57646#ifdef FREECIV_JSON_CONNECTION
57647 field_addr.name = "igter_cost";
57648#endif /* FREECIV_JSON_CONNECTION */
57649
57650 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
57651 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
57652 }
57653 }
57654
57655 real_packet->pythagorean_diagonal = BV_ISSET(fields, 8);
57656
57657 real_packet->infrapoints = BV_ISSET(fields, 9);
57658
57659 if (BV_ISSET(fields, 10)) {
57660 log_packet_detailed(" got field 'gui_type_base0'");
57661
57662#ifdef FREECIV_JSON_CONNECTION
57663 field_addr.name = "gui_type_base0";
57664#endif /* FREECIV_JSON_CONNECTION */
57665
57666 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
57667 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
57668 }
57669 }
57670
57671 if (BV_ISSET(fields, 11)) {
57672 log_packet_detailed(" got field 'gui_type_base1'");
57673
57674#ifdef FREECIV_JSON_CONNECTION
57675 field_addr.name = "gui_type_base1";
57676#endif /* FREECIV_JSON_CONNECTION */
57677
57678 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
57679 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
57680 }
57681 }
57682
57683 if (nullptr == old) {
57684 old = fc_malloc(sizeof(*old));
57686 *old = *real_packet;
57688 } else {
57689 *old = *real_packet;
57690 }
57691
57692#else /* FREECIV_DELTA_PROTOCOL */
57693#ifdef FREECIV_JSON_CONNECTION
57694 field_addr.name = "ocean_reclaim_requirement_pct";
57695#endif /* FREECIV_JSON_CONNECTION */
57696
57697 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
57698 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
57699 }
57700
57701#ifdef FREECIV_JSON_CONNECTION
57702 field_addr.name = "land_channel_requirement_pct";
57703#endif /* FREECIV_JSON_CONNECTION */
57704
57705 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
57706 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
57707 }
57708
57709#ifdef FREECIV_JSON_CONNECTION
57710 field_addr.name = "terrain_thaw_requirement_pct";
57711#endif /* FREECIV_JSON_CONNECTION */
57712
57713 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
57714 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
57715 }
57716
57717#ifdef FREECIV_JSON_CONNECTION
57718 field_addr.name = "terrain_freeze_requirement_pct";
57719#endif /* FREECIV_JSON_CONNECTION */
57720
57721 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
57722 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
57723 }
57724
57725#ifdef FREECIV_JSON_CONNECTION
57726 field_addr.name = "lake_max_size";
57727#endif /* FREECIV_JSON_CONNECTION */
57728
57729 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
57730 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
57731 }
57732
57733#ifdef FREECIV_JSON_CONNECTION
57734 field_addr.name = "min_start_native_area";
57735#endif /* FREECIV_JSON_CONNECTION */
57736
57737 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
57738 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
57739 }
57740
57741#ifdef FREECIV_JSON_CONNECTION
57742 field_addr.name = "move_fragments";
57743#endif /* FREECIV_JSON_CONNECTION */
57744
57745 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
57746 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
57747 }
57748
57749#ifdef FREECIV_JSON_CONNECTION
57750 field_addr.name = "igter_cost";
57751#endif /* FREECIV_JSON_CONNECTION */
57752
57753 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
57754 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
57755 }
57756
57757#ifdef FREECIV_JSON_CONNECTION
57758 field_addr.name = "pythagorean_diagonal";
57759#endif /* FREECIV_JSON_CONNECTION */
57760
57761 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pythagorean_diagonal)) {
57762 RECEIVE_PACKET_FIELD_ERROR(pythagorean_diagonal);
57763 }
57764
57765#ifdef FREECIV_JSON_CONNECTION
57766 field_addr.name = "infrapoints";
57767#endif /* FREECIV_JSON_CONNECTION */
57768
57769 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->infrapoints)) {
57770 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
57771 }
57772
57773#ifdef FREECIV_JSON_CONNECTION
57774 field_addr.name = "gui_type_base0";
57775#endif /* FREECIV_JSON_CONNECTION */
57776
57777 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
57778 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
57779 }
57780
57781#ifdef FREECIV_JSON_CONNECTION
57782 field_addr.name = "gui_type_base1";
57783#endif /* FREECIV_JSON_CONNECTION */
57784
57785 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
57786 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
57787 }
57788#endif /* FREECIV_DELTA_PROTOCOL */
57789
57791#undef FREE_PACKET_STRUCT
57792}
57793
57795{
57796 const struct packet_ruleset_terrain_control *real_packet = packet;
57797 int e;
57799
57800 log_packet_detailed("packet_ruleset_terrain_control_100: sending info about ()");
57801
57802#ifdef FREECIV_DELTA_PROTOCOL
57805 bool differ;
57806 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_CONTROL;
57807
57808 if (nullptr == *hash) {
57810 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_control);
57811 }
57812 BV_CLR_ALL(fields);
57813
57814 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57815 old = fc_malloc(sizeof(*old));
57816 /* temporary bitcopy just to insert correctly */
57817 *old = *real_packet;
57820 }
57821
57822 differ = (old->ocean_reclaim_requirement_pct != real_packet->ocean_reclaim_requirement_pct);
57823 if (differ) {
57824 BV_SET(fields, 0);
57825 }
57826
57827 differ = (old->land_channel_requirement_pct != real_packet->land_channel_requirement_pct);
57828 if (differ) {
57829 BV_SET(fields, 1);
57830 }
57831
57832 differ = (old->terrain_thaw_requirement_pct != real_packet->terrain_thaw_requirement_pct);
57833 if (differ) {
57834 BV_SET(fields, 2);
57835 }
57836
57837 differ = (old->terrain_freeze_requirement_pct != real_packet->terrain_freeze_requirement_pct);
57838 if (differ) {
57839 BV_SET(fields, 3);
57840 }
57841
57842 differ = (old->lake_max_size != real_packet->lake_max_size);
57843 if (differ) {
57844 BV_SET(fields, 4);
57845 }
57846
57847 differ = (old->min_start_native_area != real_packet->min_start_native_area);
57848 if (differ) {
57849 BV_SET(fields, 5);
57850 }
57851
57852 differ = (old->move_fragments != real_packet->move_fragments);
57853 if (differ) {
57854 BV_SET(fields, 6);
57855 }
57856
57857 differ = (old->igter_cost != real_packet->igter_cost);
57858 if (differ) {
57859 BV_SET(fields, 7);
57860 }
57861
57862 /* folded into head */
57863 if (real_packet->pythagorean_diagonal) {
57864 BV_SET(fields, 8);
57865 }
57866
57867 /* folded into head */
57868 if (real_packet->infrapoints) {
57869 BV_SET(fields, 9);
57870 }
57871
57872 differ = (strcmp(old->gui_type_base0, real_packet->gui_type_base0) != 0);
57873 if (differ) {
57874 BV_SET(fields, 10);
57875 }
57876
57877 differ = (strcmp(old->gui_type_base1, real_packet->gui_type_base1) != 0);
57878 if (differ) {
57879 BV_SET(fields, 11);
57880 }
57881#endif /* FREECIV_DELTA_PROTOCOL */
57882
57883#ifdef FREECIV_JSON_CONNECTION
57884 struct plocation field_addr;
57885 {
57886 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
57889 }
57890#endif /* FREECIV_JSON_CONNECTION */
57891
57892#ifdef FREECIV_DELTA_PROTOCOL
57893#ifdef FREECIV_JSON_CONNECTION
57894 field_addr.name = "fields";
57895#endif /* FREECIV_JSON_CONNECTION */
57896 e = 0;
57897 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57898 if (e) {
57899 log_packet_detailed("fields bitvector error detected");
57900 }
57901
57902 if (BV_ISSET(fields, 0)) {
57903 log_packet_detailed(" field 'ocean_reclaim_requirement_pct' has changed");
57904
57905#ifdef FREECIV_JSON_CONNECTION
57906 field_addr.name = "ocean_reclaim_requirement_pct";
57907#endif /* FREECIV_JSON_CONNECTION */
57908 e = 0;
57909
57910 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
57911
57912 if (e) {
57913 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
57914 }
57915 }
57916
57917 if (BV_ISSET(fields, 1)) {
57918 log_packet_detailed(" field 'land_channel_requirement_pct' has changed");
57919
57920#ifdef FREECIV_JSON_CONNECTION
57921 field_addr.name = "land_channel_requirement_pct";
57922#endif /* FREECIV_JSON_CONNECTION */
57923 e = 0;
57924
57925 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
57926
57927 if (e) {
57928 log_packet_detailed("'land_channel_requirement_pct' field error detected");
57929 }
57930 }
57931
57932 if (BV_ISSET(fields, 2)) {
57933 log_packet_detailed(" field 'terrain_thaw_requirement_pct' has changed");
57934
57935#ifdef FREECIV_JSON_CONNECTION
57936 field_addr.name = "terrain_thaw_requirement_pct";
57937#endif /* FREECIV_JSON_CONNECTION */
57938 e = 0;
57939
57940 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
57941
57942 if (e) {
57943 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
57944 }
57945 }
57946
57947 if (BV_ISSET(fields, 3)) {
57948 log_packet_detailed(" field 'terrain_freeze_requirement_pct' has changed");
57949
57950#ifdef FREECIV_JSON_CONNECTION
57951 field_addr.name = "terrain_freeze_requirement_pct";
57952#endif /* FREECIV_JSON_CONNECTION */
57953 e = 0;
57954
57955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
57956
57957 if (e) {
57958 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
57959 }
57960 }
57961
57962 if (BV_ISSET(fields, 4)) {
57963 log_packet_detailed(" field 'lake_max_size' has changed");
57964
57965#ifdef FREECIV_JSON_CONNECTION
57966 field_addr.name = "lake_max_size";
57967#endif /* FREECIV_JSON_CONNECTION */
57968 e = 0;
57969
57970 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
57971
57972 if (e) {
57973 log_packet_detailed("'lake_max_size' field error detected");
57974 }
57975 }
57976
57977 if (BV_ISSET(fields, 5)) {
57978 log_packet_detailed(" field 'min_start_native_area' has changed");
57979
57980#ifdef FREECIV_JSON_CONNECTION
57981 field_addr.name = "min_start_native_area";
57982#endif /* FREECIV_JSON_CONNECTION */
57983 e = 0;
57984
57985 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
57986
57987 if (e) {
57988 log_packet_detailed("'min_start_native_area' field error detected");
57989 }
57990 }
57991
57992 if (BV_ISSET(fields, 6)) {
57993 log_packet_detailed(" field 'move_fragments' has changed");
57994
57995#ifdef FREECIV_JSON_CONNECTION
57996 field_addr.name = "move_fragments";
57997#endif /* FREECIV_JSON_CONNECTION */
57998 e = 0;
57999
58000 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
58001
58002 if (e) {
58003 log_packet_detailed("'move_fragments' field error detected");
58004 }
58005 }
58006
58007 if (BV_ISSET(fields, 7)) {
58008 log_packet_detailed(" field 'igter_cost' has changed");
58009
58010#ifdef FREECIV_JSON_CONNECTION
58011 field_addr.name = "igter_cost";
58012#endif /* FREECIV_JSON_CONNECTION */
58013 e = 0;
58014
58015 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
58016
58017 if (e) {
58018 log_packet_detailed("'igter_cost' field error detected");
58019 }
58020 }
58021
58022 /* field 8 is folded into the header */
58023
58024 /* field 9 is folded into the header */
58025
58026 if (BV_ISSET(fields, 10)) {
58027 log_packet_detailed(" field 'gui_type_base0' has changed");
58028
58029#ifdef FREECIV_JSON_CONNECTION
58030 field_addr.name = "gui_type_base0";
58031#endif /* FREECIV_JSON_CONNECTION */
58032 e = 0;
58033
58034 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
58035
58036 if (e) {
58037 log_packet_detailed("'gui_type_base0' field error detected");
58038 }
58039 }
58040
58041 if (BV_ISSET(fields, 11)) {
58042 log_packet_detailed(" field 'gui_type_base1' has changed");
58043
58044#ifdef FREECIV_JSON_CONNECTION
58045 field_addr.name = "gui_type_base1";
58046#endif /* FREECIV_JSON_CONNECTION */
58047 e = 0;
58048
58049 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
58050
58051 if (e) {
58052 log_packet_detailed("'gui_type_base1' field error detected");
58053 }
58054 }
58055
58056 *old = *real_packet;
58057
58058#else /* FREECIV_DELTA_PROTOCOL */
58059#ifdef FREECIV_JSON_CONNECTION
58060 field_addr.name = "ocean_reclaim_requirement_pct";
58061#endif /* FREECIV_JSON_CONNECTION */
58062 e = 0;
58063
58064 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
58065
58066 if (e) {
58067 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
58068 }
58069
58070#ifdef FREECIV_JSON_CONNECTION
58071 field_addr.name = "land_channel_requirement_pct";
58072#endif /* FREECIV_JSON_CONNECTION */
58073 e = 0;
58074
58075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
58076
58077 if (e) {
58078 log_packet_detailed("'land_channel_requirement_pct' field error detected");
58079 }
58080
58081#ifdef FREECIV_JSON_CONNECTION
58082 field_addr.name = "terrain_thaw_requirement_pct";
58083#endif /* FREECIV_JSON_CONNECTION */
58084 e = 0;
58085
58086 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
58087
58088 if (e) {
58089 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
58090 }
58091
58092#ifdef FREECIV_JSON_CONNECTION
58093 field_addr.name = "terrain_freeze_requirement_pct";
58094#endif /* FREECIV_JSON_CONNECTION */
58095 e = 0;
58096
58097 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
58098
58099 if (e) {
58100 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
58101 }
58102
58103#ifdef FREECIV_JSON_CONNECTION
58104 field_addr.name = "lake_max_size";
58105#endif /* FREECIV_JSON_CONNECTION */
58106 e = 0;
58107
58108 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
58109
58110 if (e) {
58111 log_packet_detailed("'lake_max_size' field error detected");
58112 }
58113
58114#ifdef FREECIV_JSON_CONNECTION
58115 field_addr.name = "min_start_native_area";
58116#endif /* FREECIV_JSON_CONNECTION */
58117 e = 0;
58118
58119 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
58120
58121 if (e) {
58122 log_packet_detailed("'min_start_native_area' field error detected");
58123 }
58124
58125#ifdef FREECIV_JSON_CONNECTION
58126 field_addr.name = "move_fragments";
58127#endif /* FREECIV_JSON_CONNECTION */
58128 e = 0;
58129
58130 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
58131
58132 if (e) {
58133 log_packet_detailed("'move_fragments' field error detected");
58134 }
58135
58136#ifdef FREECIV_JSON_CONNECTION
58137 field_addr.name = "igter_cost";
58138#endif /* FREECIV_JSON_CONNECTION */
58139 e = 0;
58140
58141 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
58142
58143 if (e) {
58144 log_packet_detailed("'igter_cost' field error detected");
58145 }
58146
58147#ifdef FREECIV_JSON_CONNECTION
58148 field_addr.name = "pythagorean_diagonal";
58149#endif /* FREECIV_JSON_CONNECTION */
58150 e = 0;
58151
58152 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pythagorean_diagonal);
58153
58154 if (e) {
58155 log_packet_detailed("'pythagorean_diagonal' field error detected");
58156 }
58157
58158#ifdef FREECIV_JSON_CONNECTION
58159 field_addr.name = "infrapoints";
58160#endif /* FREECIV_JSON_CONNECTION */
58161 e = 0;
58162
58163 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->infrapoints);
58164
58165 if (e) {
58166 log_packet_detailed("'infrapoints' field error detected");
58167 }
58168
58169#ifdef FREECIV_JSON_CONNECTION
58170 field_addr.name = "gui_type_base0";
58171#endif /* FREECIV_JSON_CONNECTION */
58172 e = 0;
58173
58174 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
58175
58176 if (e) {
58177 log_packet_detailed("'gui_type_base0' field error detected");
58178 }
58179
58180#ifdef FREECIV_JSON_CONNECTION
58181 field_addr.name = "gui_type_base1";
58182#endif /* FREECIV_JSON_CONNECTION */
58183 e = 0;
58184
58185 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
58186
58187 if (e) {
58188 log_packet_detailed("'gui_type_base1' field error detected");
58189 }
58190#endif /* FREECIV_DELTA_PROTOCOL */
58191
58193}
58194
58196{
58197 if (!pc->used) {
58198 log_error("WARNING: trying to send data to the closed connection %s",
58200 return -1;
58201 }
58202 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet != nullptr, -1,
58203 "Handler for PACKET_RULESET_TERRAIN_CONTROL not installed");
58204 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet(pc, packet);
58205}
58206
58213
58214static inline void init_packet_rulesets_ready(struct packet_rulesets_ready *packet)
58215{
58216 memset(packet, 0, sizeof(*packet));
58217}
58218
58219#define free_packet_rulesets_ready(_packet) (void) 0
58220#define destroy_packet_rulesets_ready free
58221
58223{
58224#define FREE_PACKET_STRUCT(_packet) free_packet_rulesets_ready(_packet)
58226
58227 log_packet_detailed("packet_rulesets_ready_100: got info about ()");
58228
58229 real_packet->__dummy = 0xff;
58230
58232#undef FREE_PACKET_STRUCT
58233}
58234
58236{
58238
58239 log_packet_detailed("packet_rulesets_ready_100: sending info about ()");
58240
58242}
58243
58245{
58246 if (!pc->used) {
58247 log_error("WARNING: trying to send data to the closed connection %s",
58249 return -1;
58250 }
58251 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet != nullptr, -1,
58252 "Handler for PACKET_RULESETS_READY not installed");
58253 return pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet(pc);
58254}
58255
58262
58264{
58265 memset(packet, 0, sizeof(*packet));
58266}
58267
58268#define free_packet_ruleset_nation_sets(_packet) (void) 0
58269#define destroy_packet_ruleset_nation_sets free
58270
58271#ifdef FREECIV_DELTA_PROTOCOL
58272#define hash_packet_ruleset_nation_sets_100 hash_const
58273#define cmp_packet_ruleset_nation_sets_100 cmp_const
58275#endif /* FREECIV_DELTA_PROTOCOL */
58276
58278{
58279#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_sets(_packet)
58281
58282#ifdef FREECIV_JSON_CONNECTION
58283 struct plocation field_addr;
58284 {
58285 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58288 }
58289#endif /* FREECIV_JSON_CONNECTION */
58290
58291 log_packet_detailed("packet_ruleset_nation_sets_100: got info about ()");
58292
58293#ifdef FREECIV_DELTA_PROTOCOL
58296 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_SETS;
58297
58298 if (nullptr == *hash) {
58300 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58301 }
58302
58303 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58304 *real_packet = *old;
58305 } else {
58306 /* packet is already initialized empty */
58307 log_packet_detailed(" no old info");
58308 }
58309
58310#ifdef FREECIV_JSON_CONNECTION
58311 field_addr.name = "fields";
58312#endif /* FREECIV_JSON_CONNECTION */
58313 DIO_BV_GET(&din, &field_addr, fields);
58314
58315 if (BV_ISSET(fields, 0)) {
58316 log_packet_detailed(" got field 'nsets'");
58317
58318#ifdef FREECIV_JSON_CONNECTION
58319 field_addr.name = "nsets";
58320#endif /* FREECIV_JSON_CONNECTION */
58321
58322 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58324 }
58325 }
58326
58327 if (BV_ISSET(fields, 1)) {
58328 log_packet_detailed(" got field 'names'");
58329
58330#ifdef FREECIV_JSON_CONNECTION
58331 field_addr.name = "names";
58332#endif /* FREECIV_JSON_CONNECTION */
58333
58334 {
58335 int i;
58336
58337 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58338 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58339 }
58340
58341#ifdef FREECIV_JSON_CONNECTION
58342 /* Enter array. */
58343 field_addr.sub_location = plocation_elem_new(0);
58344#endif /* FREECIV_JSON_CONNECTION */
58345
58346 for (i = 0; i < real_packet->nsets; i++) {
58347#ifdef FREECIV_JSON_CONNECTION
58348 /* Next array element */
58349 field_addr.sub_location->number = i;
58350#endif /* FREECIV_JSON_CONNECTION */
58351
58352 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58354 }
58355 }
58356
58357#ifdef FREECIV_JSON_CONNECTION
58358 /* Exit array. */
58359 FC_FREE(field_addr.sub_location);
58360#endif /* FREECIV_JSON_CONNECTION */
58361 }
58362 }
58363
58364 if (BV_ISSET(fields, 2)) {
58365 log_packet_detailed(" got field 'rule_names'");
58366
58367#ifdef FREECIV_JSON_CONNECTION
58368 field_addr.name = "rule_names";
58369#endif /* FREECIV_JSON_CONNECTION */
58370
58371 {
58372 int i;
58373
58374 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58375 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58376 }
58377
58378#ifdef FREECIV_JSON_CONNECTION
58379 /* Enter array. */
58380 field_addr.sub_location = plocation_elem_new(0);
58381#endif /* FREECIV_JSON_CONNECTION */
58382
58383 for (i = 0; i < real_packet->nsets; i++) {
58384#ifdef FREECIV_JSON_CONNECTION
58385 /* Next array element */
58386 field_addr.sub_location->number = i;
58387#endif /* FREECIV_JSON_CONNECTION */
58388
58389 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58390 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58391 }
58392 }
58393
58394#ifdef FREECIV_JSON_CONNECTION
58395 /* Exit array. */
58396 FC_FREE(field_addr.sub_location);
58397#endif /* FREECIV_JSON_CONNECTION */
58398 }
58399 }
58400
58401 if (BV_ISSET(fields, 3)) {
58402 log_packet_detailed(" got field 'descriptions'");
58403
58404#ifdef FREECIV_JSON_CONNECTION
58405 field_addr.name = "descriptions";
58406#endif /* FREECIV_JSON_CONNECTION */
58407
58408 {
58409 int i;
58410
58411 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58412 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58413 }
58414
58415#ifdef FREECIV_JSON_CONNECTION
58416 /* Enter array. */
58417 field_addr.sub_location = plocation_elem_new(0);
58418#endif /* FREECIV_JSON_CONNECTION */
58419
58420 for (i = 0; i < real_packet->nsets; i++) {
58421#ifdef FREECIV_JSON_CONNECTION
58422 /* Next array element */
58423 field_addr.sub_location->number = i;
58424#endif /* FREECIV_JSON_CONNECTION */
58425
58426 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58427 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58428 }
58429 }
58430
58431#ifdef FREECIV_JSON_CONNECTION
58432 /* Exit array. */
58433 FC_FREE(field_addr.sub_location);
58434#endif /* FREECIV_JSON_CONNECTION */
58435 }
58436 }
58437
58438 if (nullptr == old) {
58439 old = fc_malloc(sizeof(*old));
58441 *old = *real_packet;
58443 } else {
58444 *old = *real_packet;
58445 }
58446
58447#else /* FREECIV_DELTA_PROTOCOL */
58448#ifdef FREECIV_JSON_CONNECTION
58449 field_addr.name = "nsets";
58450#endif /* FREECIV_JSON_CONNECTION */
58451
58452 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
58454 }
58455
58456#ifdef FREECIV_JSON_CONNECTION
58457 field_addr.name = "names";
58458#endif /* FREECIV_JSON_CONNECTION */
58459
58460 {
58461 int i;
58462
58463 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58464 RECEIVE_PACKET_FIELD_ERROR(names, ": array truncated");
58465 }
58466
58467#ifdef FREECIV_JSON_CONNECTION
58468 /* Enter array. */
58469 field_addr.sub_location = plocation_elem_new(0);
58470#endif /* FREECIV_JSON_CONNECTION */
58471
58472 for (i = 0; i < real_packet->nsets; i++) {
58473#ifdef FREECIV_JSON_CONNECTION
58474 /* Next array element */
58475 field_addr.sub_location->number = i;
58476#endif /* FREECIV_JSON_CONNECTION */
58477
58478 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
58480 }
58481 }
58482
58483#ifdef FREECIV_JSON_CONNECTION
58484 /* Exit array. */
58485 FC_FREE(field_addr.sub_location);
58486#endif /* FREECIV_JSON_CONNECTION */
58487 }
58488
58489#ifdef FREECIV_JSON_CONNECTION
58490 field_addr.name = "rule_names";
58491#endif /* FREECIV_JSON_CONNECTION */
58492
58493 {
58494 int i;
58495
58496 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58497 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": array truncated");
58498 }
58499
58500#ifdef FREECIV_JSON_CONNECTION
58501 /* Enter array. */
58502 field_addr.sub_location = plocation_elem_new(0);
58503#endif /* FREECIV_JSON_CONNECTION */
58504
58505 for (i = 0; i < real_packet->nsets; i++) {
58506#ifdef FREECIV_JSON_CONNECTION
58507 /* Next array element */
58508 field_addr.sub_location->number = i;
58509#endif /* FREECIV_JSON_CONNECTION */
58510
58511 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
58512 RECEIVE_PACKET_FIELD_ERROR(rule_names);
58513 }
58514 }
58515
58516#ifdef FREECIV_JSON_CONNECTION
58517 /* Exit array. */
58518 FC_FREE(field_addr.sub_location);
58519#endif /* FREECIV_JSON_CONNECTION */
58520 }
58521
58522#ifdef FREECIV_JSON_CONNECTION
58523 field_addr.name = "descriptions";
58524#endif /* FREECIV_JSON_CONNECTION */
58525
58526 {
58527 int i;
58528
58529 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
58530 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": array truncated");
58531 }
58532
58533#ifdef FREECIV_JSON_CONNECTION
58534 /* Enter array. */
58535 field_addr.sub_location = plocation_elem_new(0);
58536#endif /* FREECIV_JSON_CONNECTION */
58537
58538 for (i = 0; i < real_packet->nsets; i++) {
58539#ifdef FREECIV_JSON_CONNECTION
58540 /* Next array element */
58541 field_addr.sub_location->number = i;
58542#endif /* FREECIV_JSON_CONNECTION */
58543
58544 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
58545 RECEIVE_PACKET_FIELD_ERROR(descriptions);
58546 }
58547 }
58548
58549#ifdef FREECIV_JSON_CONNECTION
58550 /* Exit array. */
58551 FC_FREE(field_addr.sub_location);
58552#endif /* FREECIV_JSON_CONNECTION */
58553 }
58554#endif /* FREECIV_DELTA_PROTOCOL */
58555
58557#undef FREE_PACKET_STRUCT
58558}
58559
58561{
58562 const struct packet_ruleset_nation_sets *real_packet = packet;
58563 int e;
58565
58566 log_packet_detailed("packet_ruleset_nation_sets_100: sending info about ()");
58567
58568#ifdef FREECIV_DELTA_PROTOCOL
58571 bool differ;
58572 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_SETS;
58573
58574 if (nullptr == *hash) {
58576 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_sets);
58577 }
58578 BV_CLR_ALL(fields);
58579
58580 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58581 old = fc_malloc(sizeof(*old));
58582 /* temporary bitcopy just to insert correctly */
58583 *old = *real_packet;
58586 }
58587
58588 differ = (old->nsets != real_packet->nsets);
58589 if (differ) {
58590 BV_SET(fields, 0);
58591 }
58592
58593 differ = (old->nsets != real_packet->nsets);
58594 if (!differ) {
58595 int i;
58596
58597 for (i = 0; i < old->nsets; i++) {
58598 differ = (strcmp(old->names[i], real_packet->names[i]) != 0);
58599 if (differ) {
58600 break;
58601 }
58602 }
58603 }
58604 if (differ) {
58605 BV_SET(fields, 1);
58606 }
58607
58608 differ = (old->nsets != real_packet->nsets);
58609 if (!differ) {
58610 int i;
58611
58612 for (i = 0; i < old->nsets; i++) {
58613 differ = (strcmp(old->rule_names[i], real_packet->rule_names[i]) != 0);
58614 if (differ) {
58615 break;
58616 }
58617 }
58618 }
58619 if (differ) {
58620 BV_SET(fields, 2);
58621 }
58622
58623 differ = (old->nsets != real_packet->nsets);
58624 if (!differ) {
58625 int i;
58626
58627 for (i = 0; i < old->nsets; i++) {
58628 differ = (strcmp(old->descriptions[i], real_packet->descriptions[i]) != 0);
58629 if (differ) {
58630 break;
58631 }
58632 }
58633 }
58634 if (differ) {
58635 BV_SET(fields, 3);
58636 }
58637#endif /* FREECIV_DELTA_PROTOCOL */
58638
58639#ifdef FREECIV_JSON_CONNECTION
58640 struct plocation field_addr;
58641 {
58642 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58645 }
58646#endif /* FREECIV_JSON_CONNECTION */
58647
58648#ifdef FREECIV_DELTA_PROTOCOL
58649#ifdef FREECIV_JSON_CONNECTION
58650 field_addr.name = "fields";
58651#endif /* FREECIV_JSON_CONNECTION */
58652 e = 0;
58653 e |= DIO_BV_PUT(&dout, &field_addr, fields);
58654 if (e) {
58655 log_packet_detailed("fields bitvector error detected");
58656 }
58657
58658 if (BV_ISSET(fields, 0)) {
58659 log_packet_detailed(" field 'nsets' has changed");
58660
58661#ifdef FREECIV_JSON_CONNECTION
58662 field_addr.name = "nsets";
58663#endif /* FREECIV_JSON_CONNECTION */
58664 e = 0;
58665
58666 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
58667
58668 if (e) {
58669 log_packet_detailed("'nsets' field error detected");
58670 }
58671 }
58672
58673 if (BV_ISSET(fields, 1)) {
58674 log_packet_detailed(" field 'names' has changed");
58675
58676#ifdef FREECIV_JSON_CONNECTION
58677 field_addr.name = "names";
58678#endif /* FREECIV_JSON_CONNECTION */
58679 e = 0;
58680
58681 {
58682 int i;
58683
58684#ifdef FREECIV_JSON_CONNECTION
58685 /* Create the array. */
58686 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58687
58688 /* Enter array. */
58689 field_addr.sub_location = plocation_elem_new(0);
58690#endif /* FREECIV_JSON_CONNECTION */
58691
58692 for (i = 0; i < real_packet->nsets; i++) {
58693#ifdef FREECIV_JSON_CONNECTION
58694 /* Next array element. */
58695 field_addr.sub_location->number = i;
58696#endif /* FREECIV_JSON_CONNECTION */
58697
58698 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
58699 }
58700
58701#ifdef FREECIV_JSON_CONNECTION
58702 /* Exit array. */
58703 FC_FREE(field_addr.sub_location);
58704#endif /* FREECIV_JSON_CONNECTION */
58705 }
58706
58707 if (e) {
58708 log_packet_detailed("'names' field error detected");
58709 }
58710 }
58711
58712 if (BV_ISSET(fields, 2)) {
58713 log_packet_detailed(" field 'rule_names' has changed");
58714
58715#ifdef FREECIV_JSON_CONNECTION
58716 field_addr.name = "rule_names";
58717#endif /* FREECIV_JSON_CONNECTION */
58718 e = 0;
58719
58720 {
58721 int i;
58722
58723#ifdef FREECIV_JSON_CONNECTION
58724 /* Create the array. */
58725 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58726
58727 /* Enter array. */
58728 field_addr.sub_location = plocation_elem_new(0);
58729#endif /* FREECIV_JSON_CONNECTION */
58730
58731 for (i = 0; i < real_packet->nsets; i++) {
58732#ifdef FREECIV_JSON_CONNECTION
58733 /* Next array element. */
58734 field_addr.sub_location->number = i;
58735#endif /* FREECIV_JSON_CONNECTION */
58736
58737 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
58738 }
58739
58740#ifdef FREECIV_JSON_CONNECTION
58741 /* Exit array. */
58742 FC_FREE(field_addr.sub_location);
58743#endif /* FREECIV_JSON_CONNECTION */
58744 }
58745
58746 if (e) {
58747 log_packet_detailed("'rule_names' field error detected");
58748 }
58749 }
58750
58751 if (BV_ISSET(fields, 3)) {
58752 log_packet_detailed(" field 'descriptions' has changed");
58753
58754#ifdef FREECIV_JSON_CONNECTION
58755 field_addr.name = "descriptions";
58756#endif /* FREECIV_JSON_CONNECTION */
58757 e = 0;
58758
58759 {
58760 int i;
58761
58762#ifdef FREECIV_JSON_CONNECTION
58763 /* Create the array. */
58764 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58765
58766 /* Enter array. */
58767 field_addr.sub_location = plocation_elem_new(0);
58768#endif /* FREECIV_JSON_CONNECTION */
58769
58770 for (i = 0; i < real_packet->nsets; i++) {
58771#ifdef FREECIV_JSON_CONNECTION
58772 /* Next array element. */
58773 field_addr.sub_location->number = i;
58774#endif /* FREECIV_JSON_CONNECTION */
58775
58776 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
58777 }
58778
58779#ifdef FREECIV_JSON_CONNECTION
58780 /* Exit array. */
58781 FC_FREE(field_addr.sub_location);
58782#endif /* FREECIV_JSON_CONNECTION */
58783 }
58784
58785 if (e) {
58786 log_packet_detailed("'descriptions' field error detected");
58787 }
58788 }
58789
58790 *old = *real_packet;
58791
58792#else /* FREECIV_DELTA_PROTOCOL */
58793#ifdef FREECIV_JSON_CONNECTION
58794 field_addr.name = "nsets";
58795#endif /* FREECIV_JSON_CONNECTION */
58796 e = 0;
58797
58798 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
58799
58800 if (e) {
58801 log_packet_detailed("'nsets' field error detected");
58802 }
58803
58804#ifdef FREECIV_JSON_CONNECTION
58805 field_addr.name = "names";
58806#endif /* FREECIV_JSON_CONNECTION */
58807 e = 0;
58808
58809 {
58810 int i;
58811
58812#ifdef FREECIV_JSON_CONNECTION
58813 /* Create the array. */
58814 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58815
58816 /* Enter array. */
58817 field_addr.sub_location = plocation_elem_new(0);
58818#endif /* FREECIV_JSON_CONNECTION */
58819
58820 for (i = 0; i < real_packet->nsets; i++) {
58821#ifdef FREECIV_JSON_CONNECTION
58822 /* Next array element. */
58823 field_addr.sub_location->number = i;
58824#endif /* FREECIV_JSON_CONNECTION */
58825
58826 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
58827 }
58828
58829#ifdef FREECIV_JSON_CONNECTION
58830 /* Exit array. */
58831 FC_FREE(field_addr.sub_location);
58832#endif /* FREECIV_JSON_CONNECTION */
58833 }
58834
58835 if (e) {
58836 log_packet_detailed("'names' field error detected");
58837 }
58838
58839#ifdef FREECIV_JSON_CONNECTION
58840 field_addr.name = "rule_names";
58841#endif /* FREECIV_JSON_CONNECTION */
58842 e = 0;
58843
58844 {
58845 int i;
58846
58847#ifdef FREECIV_JSON_CONNECTION
58848 /* Create the array. */
58849 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58850
58851 /* Enter array. */
58852 field_addr.sub_location = plocation_elem_new(0);
58853#endif /* FREECIV_JSON_CONNECTION */
58854
58855 for (i = 0; i < real_packet->nsets; i++) {
58856#ifdef FREECIV_JSON_CONNECTION
58857 /* Next array element. */
58858 field_addr.sub_location->number = i;
58859#endif /* FREECIV_JSON_CONNECTION */
58860
58861 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
58862 }
58863
58864#ifdef FREECIV_JSON_CONNECTION
58865 /* Exit array. */
58866 FC_FREE(field_addr.sub_location);
58867#endif /* FREECIV_JSON_CONNECTION */
58868 }
58869
58870 if (e) {
58871 log_packet_detailed("'rule_names' field error detected");
58872 }
58873
58874#ifdef FREECIV_JSON_CONNECTION
58875 field_addr.name = "descriptions";
58876#endif /* FREECIV_JSON_CONNECTION */
58877 e = 0;
58878
58879 {
58880 int i;
58881
58882#ifdef FREECIV_JSON_CONNECTION
58883 /* Create the array. */
58884 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
58885
58886 /* Enter array. */
58887 field_addr.sub_location = plocation_elem_new(0);
58888#endif /* FREECIV_JSON_CONNECTION */
58889
58890 for (i = 0; i < real_packet->nsets; i++) {
58891#ifdef FREECIV_JSON_CONNECTION
58892 /* Next array element. */
58893 field_addr.sub_location->number = i;
58894#endif /* FREECIV_JSON_CONNECTION */
58895
58896 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
58897 }
58898
58899#ifdef FREECIV_JSON_CONNECTION
58900 /* Exit array. */
58901 FC_FREE(field_addr.sub_location);
58902#endif /* FREECIV_JSON_CONNECTION */
58903 }
58904
58905 if (e) {
58906 log_packet_detailed("'descriptions' field error detected");
58907 }
58908#endif /* FREECIV_DELTA_PROTOCOL */
58909
58911}
58912
58914{
58915 if (!pc->used) {
58916 log_error("WARNING: trying to send data to the closed connection %s",
58918 return -1;
58919 }
58920 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet != nullptr, -1,
58921 "Handler for PACKET_RULESET_NATION_SETS not installed");
58922 return pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet(pc, packet);
58923}
58924
58926{
58927 conn_list_iterate(dest, pconn) {
58930}
58931
58933{
58934 memset(packet, 0, sizeof(*packet));
58935}
58936
58937#define free_packet_ruleset_nation_groups(_packet) (void) 0
58938#define destroy_packet_ruleset_nation_groups free
58939
58940#ifdef FREECIV_DELTA_PROTOCOL
58941#define hash_packet_ruleset_nation_groups_100 hash_const
58942#define cmp_packet_ruleset_nation_groups_100 cmp_const
58944#endif /* FREECIV_DELTA_PROTOCOL */
58945
58947{
58948#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation_groups(_packet)
58950
58951#ifdef FREECIV_JSON_CONNECTION
58952 struct plocation field_addr;
58953 {
58954 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
58957 }
58958#endif /* FREECIV_JSON_CONNECTION */
58959
58960 log_packet_detailed("packet_ruleset_nation_groups_100: got info about ()");
58961
58962#ifdef FREECIV_DELTA_PROTOCOL
58965 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_GROUPS;
58966
58967 if (nullptr == *hash) {
58969 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
58970 }
58971
58972 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58973 *real_packet = *old;
58974 } else {
58975 /* packet is already initialized empty */
58976 log_packet_detailed(" no old info");
58977 }
58978
58979#ifdef FREECIV_JSON_CONNECTION
58980 field_addr.name = "fields";
58981#endif /* FREECIV_JSON_CONNECTION */
58982 DIO_BV_GET(&din, &field_addr, fields);
58983
58984 if (BV_ISSET(fields, 0)) {
58985 log_packet_detailed(" got field 'ngroups'");
58986
58987#ifdef FREECIV_JSON_CONNECTION
58988 field_addr.name = "ngroups";
58989#endif /* FREECIV_JSON_CONNECTION */
58990
58991 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
58993 }
58994 }
58995
58996 if (BV_ISSET(fields, 1)) {
58997 log_packet_detailed(" got field 'groups'");
58998
58999#ifdef FREECIV_JSON_CONNECTION
59000 field_addr.name = "groups";
59001#endif /* FREECIV_JSON_CONNECTION */
59002
59003 {
59004 int i;
59005
59006 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59007 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59008 }
59009
59010#ifdef FREECIV_JSON_CONNECTION
59011 /* Enter array. */
59012 field_addr.sub_location = plocation_elem_new(0);
59013#endif /* FREECIV_JSON_CONNECTION */
59014
59015 for (i = 0; i < real_packet->ngroups; i++) {
59016#ifdef FREECIV_JSON_CONNECTION
59017 /* Next array element */
59018 field_addr.sub_location->number = i;
59019#endif /* FREECIV_JSON_CONNECTION */
59020
59021 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
59023 }
59024 }
59025
59026#ifdef FREECIV_JSON_CONNECTION
59027 /* Exit array. */
59028 FC_FREE(field_addr.sub_location);
59029#endif /* FREECIV_JSON_CONNECTION */
59030 }
59031 }
59032
59033 if (BV_ISSET(fields, 2)) {
59034 log_packet_detailed(" got field 'hidden'");
59035
59036#ifdef FREECIV_JSON_CONNECTION
59037 field_addr.name = "hidden";
59038#endif /* FREECIV_JSON_CONNECTION */
59039
59040 {
59041 int i;
59042
59043 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59044 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
59045 }
59046
59047#ifdef FREECIV_JSON_CONNECTION
59048 /* Enter array. */
59049 field_addr.sub_location = plocation_elem_new(0);
59050#endif /* FREECIV_JSON_CONNECTION */
59051
59052 for (i = 0; i < real_packet->ngroups; i++) {
59053#ifdef FREECIV_JSON_CONNECTION
59054 /* Next array element */
59055 field_addr.sub_location->number = i;
59056#endif /* FREECIV_JSON_CONNECTION */
59057
59058 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
59060 }
59061 }
59062
59063#ifdef FREECIV_JSON_CONNECTION
59064 /* Exit array. */
59065 FC_FREE(field_addr.sub_location);
59066#endif /* FREECIV_JSON_CONNECTION */
59067 }
59068 }
59069
59070 if (nullptr == old) {
59071 old = fc_malloc(sizeof(*old));
59073 *old = *real_packet;
59075 } else {
59076 *old = *real_packet;
59077 }
59078
59079#else /* FREECIV_DELTA_PROTOCOL */
59080#ifdef FREECIV_JSON_CONNECTION
59081 field_addr.name = "ngroups";
59082#endif /* FREECIV_JSON_CONNECTION */
59083
59084 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
59086 }
59087
59088#ifdef FREECIV_JSON_CONNECTION
59089 field_addr.name = "groups";
59090#endif /* FREECIV_JSON_CONNECTION */
59091
59092 {
59093 int i;
59094
59095 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59096 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59097 }
59098
59099#ifdef FREECIV_JSON_CONNECTION
59100 /* Enter array. */
59101 field_addr.sub_location = plocation_elem_new(0);
59102#endif /* FREECIV_JSON_CONNECTION */
59103
59104 for (i = 0; i < real_packet->ngroups; i++) {
59105#ifdef FREECIV_JSON_CONNECTION
59106 /* Next array element */
59107 field_addr.sub_location->number = i;
59108#endif /* FREECIV_JSON_CONNECTION */
59109
59110 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
59112 }
59113 }
59114
59115#ifdef FREECIV_JSON_CONNECTION
59116 /* Exit array. */
59117 FC_FREE(field_addr.sub_location);
59118#endif /* FREECIV_JSON_CONNECTION */
59119 }
59120
59121#ifdef FREECIV_JSON_CONNECTION
59122 field_addr.name = "hidden";
59123#endif /* FREECIV_JSON_CONNECTION */
59124
59125 {
59126 int i;
59127
59128 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59129 RECEIVE_PACKET_FIELD_ERROR(hidden, ": array truncated");
59130 }
59131
59132#ifdef FREECIV_JSON_CONNECTION
59133 /* Enter array. */
59134 field_addr.sub_location = plocation_elem_new(0);
59135#endif /* FREECIV_JSON_CONNECTION */
59136
59137 for (i = 0; i < real_packet->ngroups; i++) {
59138#ifdef FREECIV_JSON_CONNECTION
59139 /* Next array element */
59140 field_addr.sub_location->number = i;
59141#endif /* FREECIV_JSON_CONNECTION */
59142
59143 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
59145 }
59146 }
59147
59148#ifdef FREECIV_JSON_CONNECTION
59149 /* Exit array. */
59150 FC_FREE(field_addr.sub_location);
59151#endif /* FREECIV_JSON_CONNECTION */
59152 }
59153#endif /* FREECIV_DELTA_PROTOCOL */
59154
59156#undef FREE_PACKET_STRUCT
59157}
59158
59160{
59161 const struct packet_ruleset_nation_groups *real_packet = packet;
59162 int e;
59164
59165 log_packet_detailed("packet_ruleset_nation_groups_100: sending info about ()");
59166
59167#ifdef FREECIV_DELTA_PROTOCOL
59170 bool differ;
59171 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_GROUPS;
59172
59173 if (nullptr == *hash) {
59175 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation_groups);
59176 }
59177 BV_CLR_ALL(fields);
59178
59179 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59180 old = fc_malloc(sizeof(*old));
59181 /* temporary bitcopy just to insert correctly */
59182 *old = *real_packet;
59185 }
59186
59187 differ = (old->ngroups != real_packet->ngroups);
59188 if (differ) {
59189 BV_SET(fields, 0);
59190 }
59191
59192 differ = (old->ngroups != real_packet->ngroups);
59193 if (!differ) {
59194 int i;
59195
59196 for (i = 0; i < old->ngroups; i++) {
59197 differ = (strcmp(old->groups[i], real_packet->groups[i]) != 0);
59198 if (differ) {
59199 break;
59200 }
59201 }
59202 }
59203 if (differ) {
59204 BV_SET(fields, 1);
59205 }
59206
59207 differ = (old->ngroups != real_packet->ngroups);
59208 if (!differ) {
59209 int i;
59210
59211 for (i = 0; i < old->ngroups; i++) {
59212 differ = (old->hidden[i] != real_packet->hidden[i]);
59213 if (differ) {
59214 break;
59215 }
59216 }
59217 }
59218 if (differ) {
59219 BV_SET(fields, 2);
59220 }
59221#endif /* FREECIV_DELTA_PROTOCOL */
59222
59223#ifdef FREECIV_JSON_CONNECTION
59224 struct plocation field_addr;
59225 {
59226 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59229 }
59230#endif /* FREECIV_JSON_CONNECTION */
59231
59232#ifdef FREECIV_DELTA_PROTOCOL
59233#ifdef FREECIV_JSON_CONNECTION
59234 field_addr.name = "fields";
59235#endif /* FREECIV_JSON_CONNECTION */
59236 e = 0;
59237 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59238 if (e) {
59239 log_packet_detailed("fields bitvector error detected");
59240 }
59241
59242 if (BV_ISSET(fields, 0)) {
59243 log_packet_detailed(" field 'ngroups' has changed");
59244
59245#ifdef FREECIV_JSON_CONNECTION
59246 field_addr.name = "ngroups";
59247#endif /* FREECIV_JSON_CONNECTION */
59248 e = 0;
59249
59250 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59251
59252 if (e) {
59253 log_packet_detailed("'ngroups' field error detected");
59254 }
59255 }
59256
59257 if (BV_ISSET(fields, 1)) {
59258 log_packet_detailed(" field 'groups' has changed");
59259
59260#ifdef FREECIV_JSON_CONNECTION
59261 field_addr.name = "groups";
59262#endif /* FREECIV_JSON_CONNECTION */
59263 e = 0;
59264
59265 {
59266 int i;
59267
59268#ifdef FREECIV_JSON_CONNECTION
59269 /* Create the array. */
59270 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59271
59272 /* Enter array. */
59273 field_addr.sub_location = plocation_elem_new(0);
59274#endif /* FREECIV_JSON_CONNECTION */
59275
59276 for (i = 0; i < real_packet->ngroups; i++) {
59277#ifdef FREECIV_JSON_CONNECTION
59278 /* Next array element. */
59279 field_addr.sub_location->number = i;
59280#endif /* FREECIV_JSON_CONNECTION */
59281
59282 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59283 }
59284
59285#ifdef FREECIV_JSON_CONNECTION
59286 /* Exit array. */
59287 FC_FREE(field_addr.sub_location);
59288#endif /* FREECIV_JSON_CONNECTION */
59289 }
59290
59291 if (e) {
59292 log_packet_detailed("'groups' field error detected");
59293 }
59294 }
59295
59296 if (BV_ISSET(fields, 2)) {
59297 log_packet_detailed(" field 'hidden' has changed");
59298
59299#ifdef FREECIV_JSON_CONNECTION
59300 field_addr.name = "hidden";
59301#endif /* FREECIV_JSON_CONNECTION */
59302 e = 0;
59303
59304 {
59305 int i;
59306
59307#ifdef FREECIV_JSON_CONNECTION
59308 /* Create the array. */
59309 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59310
59311 /* Enter array. */
59312 field_addr.sub_location = plocation_elem_new(0);
59313#endif /* FREECIV_JSON_CONNECTION */
59314
59315 for (i = 0; i < real_packet->ngroups; i++) {
59316#ifdef FREECIV_JSON_CONNECTION
59317 /* Next array element. */
59318 field_addr.sub_location->number = i;
59319#endif /* FREECIV_JSON_CONNECTION */
59320
59321 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59322 }
59323
59324#ifdef FREECIV_JSON_CONNECTION
59325 /* Exit array. */
59326 FC_FREE(field_addr.sub_location);
59327#endif /* FREECIV_JSON_CONNECTION */
59328 }
59329
59330 if (e) {
59331 log_packet_detailed("'hidden' field error detected");
59332 }
59333 }
59334
59335 *old = *real_packet;
59336
59337#else /* FREECIV_DELTA_PROTOCOL */
59338#ifdef FREECIV_JSON_CONNECTION
59339 field_addr.name = "ngroups";
59340#endif /* FREECIV_JSON_CONNECTION */
59341 e = 0;
59342
59343 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
59344
59345 if (e) {
59346 log_packet_detailed("'ngroups' field error detected");
59347 }
59348
59349#ifdef FREECIV_JSON_CONNECTION
59350 field_addr.name = "groups";
59351#endif /* FREECIV_JSON_CONNECTION */
59352 e = 0;
59353
59354 {
59355 int i;
59356
59357#ifdef FREECIV_JSON_CONNECTION
59358 /* Create the array. */
59359 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59360
59361 /* Enter array. */
59362 field_addr.sub_location = plocation_elem_new(0);
59363#endif /* FREECIV_JSON_CONNECTION */
59364
59365 for (i = 0; i < real_packet->ngroups; i++) {
59366#ifdef FREECIV_JSON_CONNECTION
59367 /* Next array element. */
59368 field_addr.sub_location->number = i;
59369#endif /* FREECIV_JSON_CONNECTION */
59370
59371 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
59372 }
59373
59374#ifdef FREECIV_JSON_CONNECTION
59375 /* Exit array. */
59376 FC_FREE(field_addr.sub_location);
59377#endif /* FREECIV_JSON_CONNECTION */
59378 }
59379
59380 if (e) {
59381 log_packet_detailed("'groups' field error detected");
59382 }
59383
59384#ifdef FREECIV_JSON_CONNECTION
59385 field_addr.name = "hidden";
59386#endif /* FREECIV_JSON_CONNECTION */
59387 e = 0;
59388
59389 {
59390 int i;
59391
59392#ifdef FREECIV_JSON_CONNECTION
59393 /* Create the array. */
59394 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
59395
59396 /* Enter array. */
59397 field_addr.sub_location = plocation_elem_new(0);
59398#endif /* FREECIV_JSON_CONNECTION */
59399
59400 for (i = 0; i < real_packet->ngroups; i++) {
59401#ifdef FREECIV_JSON_CONNECTION
59402 /* Next array element. */
59403 field_addr.sub_location->number = i;
59404#endif /* FREECIV_JSON_CONNECTION */
59405
59406 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
59407 }
59408
59409#ifdef FREECIV_JSON_CONNECTION
59410 /* Exit array. */
59411 FC_FREE(field_addr.sub_location);
59412#endif /* FREECIV_JSON_CONNECTION */
59413 }
59414
59415 if (e) {
59416 log_packet_detailed("'hidden' field error detected");
59417 }
59418#endif /* FREECIV_DELTA_PROTOCOL */
59419
59421}
59422
59424{
59425 if (!pc->used) {
59426 log_error("WARNING: trying to send data to the closed connection %s",
59428 return -1;
59429 }
59430 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet != nullptr, -1,
59431 "Handler for PACKET_RULESET_NATION_GROUPS not installed");
59432 return pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet(pc, packet);
59433}
59434
59441
59442static inline void init_packet_ruleset_nation(struct packet_ruleset_nation *packet)
59443{
59444 memset(packet, 0, sizeof(*packet));
59445}
59446
59447#define free_packet_ruleset_nation(_packet) (void) 0
59448#define destroy_packet_ruleset_nation free
59449
59450#ifdef FREECIV_DELTA_PROTOCOL
59452{
59453 const struct packet_ruleset_nation *key = (const struct packet_ruleset_nation *) vkey;
59454 genhash_val_t result = 0;
59455
59456 result += key->id;
59457
59458 result &= 0xFFFFFFFF;
59459 return result;
59460}
59461
59462static bool cmp_packet_ruleset_nation_100(const void *vkey1, const void *vkey2)
59463{
59464 const struct packet_ruleset_nation *old = (const struct packet_ruleset_nation *) vkey1;
59465 const struct packet_ruleset_nation *real_packet = (const struct packet_ruleset_nation *) vkey2;
59466 bool differ;
59467
59468 differ = (old->id != real_packet->id);
59469
59470 return !differ;
59471}
59473#endif /* FREECIV_DELTA_PROTOCOL */
59474
59476{
59477#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_nation(_packet)
59479
59480#ifdef FREECIV_JSON_CONNECTION
59481 struct plocation field_addr;
59482 {
59483 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
59486 }
59487#endif /* FREECIV_JSON_CONNECTION */
59488
59489#ifdef FREECIV_JSON_CONNECTION
59490 field_addr.name = "id";
59491#endif /* FREECIV_JSON_CONNECTION */
59492
59493 {
59494 int readin;
59495
59496 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
59498 }
59499 real_packet->id = readin;
59500 }
59501
59502 log_packet_detailed("packet_ruleset_nation_100: got info about (%d)",
59503 real_packet->id);
59504
59505#ifdef FREECIV_DELTA_PROTOCOL
59507 struct packet_ruleset_nation *old;
59508 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION;
59509
59510 if (nullptr == *hash) {
59512 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
59513 }
59514
59515 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59516 *real_packet = *old;
59517 } else {
59518 /* packet is already initialized empty */
59519 log_packet_detailed(" no old info");
59520 }
59521
59522#ifdef FREECIV_JSON_CONNECTION
59523 field_addr.name = "fields";
59524#endif /* FREECIV_JSON_CONNECTION */
59525 DIO_BV_GET(&din, &field_addr, fields);
59526
59527 if (BV_ISSET(fields, 0)) {
59528 log_packet_detailed(" got field 'translation_domain'");
59529
59530#ifdef FREECIV_JSON_CONNECTION
59531 field_addr.name = "translation_domain";
59532#endif /* FREECIV_JSON_CONNECTION */
59533
59534 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
59535 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
59536 }
59537 }
59538
59539 if (BV_ISSET(fields, 1)) {
59540 log_packet_detailed(" got field 'adjective'");
59541
59542#ifdef FREECIV_JSON_CONNECTION
59543 field_addr.name = "adjective";
59544#endif /* FREECIV_JSON_CONNECTION */
59545
59546 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
59547 RECEIVE_PACKET_FIELD_ERROR(adjective);
59548 }
59549 }
59550
59551 if (BV_ISSET(fields, 2)) {
59552 log_packet_detailed(" got field 'rule_name'");
59553
59554#ifdef FREECIV_JSON_CONNECTION
59555 field_addr.name = "rule_name";
59556#endif /* FREECIV_JSON_CONNECTION */
59557
59558 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59559 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59560 }
59561 }
59562
59563 if (BV_ISSET(fields, 3)) {
59564 log_packet_detailed(" got field 'noun_plural'");
59565
59566#ifdef FREECIV_JSON_CONNECTION
59567 field_addr.name = "noun_plural";
59568#endif /* FREECIV_JSON_CONNECTION */
59569
59570 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
59571 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
59572 }
59573 }
59574
59575 if (BV_ISSET(fields, 4)) {
59576 log_packet_detailed(" got field 'graphic_str'");
59577
59578#ifdef FREECIV_JSON_CONNECTION
59579 field_addr.name = "graphic_str";
59580#endif /* FREECIV_JSON_CONNECTION */
59581
59582 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59583 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59584 }
59585 }
59586
59587 if (BV_ISSET(fields, 5)) {
59588 log_packet_detailed(" got field 'graphic_alt'");
59589
59590#ifdef FREECIV_JSON_CONNECTION
59591 field_addr.name = "graphic_alt";
59592#endif /* FREECIV_JSON_CONNECTION */
59593
59594 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59595 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59596 }
59597 }
59598
59599 if (BV_ISSET(fields, 6)) {
59600 log_packet_detailed(" got field 'legend'");
59601
59602#ifdef FREECIV_JSON_CONNECTION
59603 field_addr.name = "legend";
59604#endif /* FREECIV_JSON_CONNECTION */
59605
59606 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
59608 }
59609 }
59610
59611 if (BV_ISSET(fields, 7)) {
59612 log_packet_detailed(" got field 'style'");
59613
59614#ifdef FREECIV_JSON_CONNECTION
59615 field_addr.name = "style";
59616#endif /* FREECIV_JSON_CONNECTION */
59617
59618 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
59620 }
59621 }
59622
59623 if (BV_ISSET(fields, 8)) {
59624 log_packet_detailed(" got field 'leader_count'");
59625
59626#ifdef FREECIV_JSON_CONNECTION
59627 field_addr.name = "leader_count";
59628#endif /* FREECIV_JSON_CONNECTION */
59629
59630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
59631 RECEIVE_PACKET_FIELD_ERROR(leader_count);
59632 }
59633 }
59634
59635 if (BV_ISSET(fields, 9)) {
59636 log_packet_detailed(" got field 'leader_name'");
59637
59638#ifdef FREECIV_JSON_CONNECTION
59639 field_addr.name = "leader_name";
59640#endif /* FREECIV_JSON_CONNECTION */
59641
59642 {
59643 int i;
59644
59645 if (real_packet->leader_count > MAX_NUM_LEADERS) {
59646 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
59647 }
59648
59649#ifdef FREECIV_JSON_CONNECTION
59650 /* Enter array. */
59651 field_addr.sub_location = plocation_elem_new(0);
59652#endif /* FREECIV_JSON_CONNECTION */
59653
59654 for (i = 0; i < real_packet->leader_count; i++) {
59655#ifdef FREECIV_JSON_CONNECTION
59656 /* Next array element */
59657 field_addr.sub_location->number = i;
59658#endif /* FREECIV_JSON_CONNECTION */
59659
59660 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
59662 }
59663 }
59664
59665#ifdef FREECIV_JSON_CONNECTION
59666 /* Exit array. */
59667 FC_FREE(field_addr.sub_location);
59668#endif /* FREECIV_JSON_CONNECTION */
59669 }
59670 }
59671
59672 if (BV_ISSET(fields, 10)) {
59673 log_packet_detailed(" got field 'leader_is_male'");
59674
59675#ifdef FREECIV_JSON_CONNECTION
59676 field_addr.name = "leader_is_male";
59677#endif /* FREECIV_JSON_CONNECTION */
59678
59679 {
59680 int i;
59681
59682 if (real_packet->leader_count > MAX_NUM_LEADERS) {
59683 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
59684 }
59685
59686#ifdef FREECIV_JSON_CONNECTION
59687 /* Enter array. */
59688 field_addr.sub_location = plocation_elem_new(0);
59689#endif /* FREECIV_JSON_CONNECTION */
59690
59691 for (i = 0; i < real_packet->leader_count; i++) {
59692#ifdef FREECIV_JSON_CONNECTION
59693 /* Next array element */
59694 field_addr.sub_location->number = i;
59695#endif /* FREECIV_JSON_CONNECTION */
59696
59697 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
59698 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
59699 }
59700 }
59701
59702#ifdef FREECIV_JSON_CONNECTION
59703 /* Exit array. */
59704 FC_FREE(field_addr.sub_location);
59705#endif /* FREECIV_JSON_CONNECTION */
59706 }
59707 }
59708
59709 real_packet->is_playable = BV_ISSET(fields, 11);
59710
59711 if (BV_ISSET(fields, 12)) {
59712 log_packet_detailed(" got field 'barbarian_type'");
59713
59714#ifdef FREECIV_JSON_CONNECTION
59715 field_addr.name = "barbarian_type";
59716#endif /* FREECIV_JSON_CONNECTION */
59717
59718 {
59719 int readin;
59720
59721 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59722 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
59723 }
59724 real_packet->barbarian_type = readin;
59725 }
59726 }
59727
59728 if (BV_ISSET(fields, 13)) {
59729 log_packet_detailed(" got field 'nsets'");
59730
59731#ifdef FREECIV_JSON_CONNECTION
59732 field_addr.name = "nsets";
59733#endif /* FREECIV_JSON_CONNECTION */
59734
59735 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
59737 }
59738 }
59739
59740 if (BV_ISSET(fields, 14)) {
59741 log_packet_detailed(" got field 'sets'");
59742
59743#ifdef FREECIV_JSON_CONNECTION
59744 field_addr.name = "sets";
59745#endif /* FREECIV_JSON_CONNECTION */
59746
59747 {
59748 int i;
59749
59750 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
59751 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
59752 }
59753
59754#ifdef FREECIV_JSON_CONNECTION
59755 /* Enter array. */
59756 field_addr.sub_location = plocation_elem_new(0);
59757#endif /* FREECIV_JSON_CONNECTION */
59758
59759 for (i = 0; i < real_packet->nsets; i++) {
59760#ifdef FREECIV_JSON_CONNECTION
59761 /* Next array element */
59762 field_addr.sub_location->number = i;
59763#endif /* FREECIV_JSON_CONNECTION */
59764
59765 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
59767 }
59768 }
59769
59770#ifdef FREECIV_JSON_CONNECTION
59771 /* Exit array. */
59772 FC_FREE(field_addr.sub_location);
59773#endif /* FREECIV_JSON_CONNECTION */
59774 }
59775 }
59776
59777 if (BV_ISSET(fields, 15)) {
59778 log_packet_detailed(" got field 'ngroups'");
59779
59780#ifdef FREECIV_JSON_CONNECTION
59781 field_addr.name = "ngroups";
59782#endif /* FREECIV_JSON_CONNECTION */
59783
59784 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
59786 }
59787 }
59788
59789 if (BV_ISSET(fields, 16)) {
59790 log_packet_detailed(" got field 'groups'");
59791
59792#ifdef FREECIV_JSON_CONNECTION
59793 field_addr.name = "groups";
59794#endif /* FREECIV_JSON_CONNECTION */
59795
59796 {
59797 int i;
59798
59799 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
59800 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
59801 }
59802
59803#ifdef FREECIV_JSON_CONNECTION
59804 /* Enter array. */
59805 field_addr.sub_location = plocation_elem_new(0);
59806#endif /* FREECIV_JSON_CONNECTION */
59807
59808 for (i = 0; i < real_packet->ngroups; i++) {
59809#ifdef FREECIV_JSON_CONNECTION
59810 /* Next array element */
59811 field_addr.sub_location->number = i;
59812#endif /* FREECIV_JSON_CONNECTION */
59813
59814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
59816 }
59817 }
59818
59819#ifdef FREECIV_JSON_CONNECTION
59820 /* Exit array. */
59821 FC_FREE(field_addr.sub_location);
59822#endif /* FREECIV_JSON_CONNECTION */
59823 }
59824 }
59825
59826 if (BV_ISSET(fields, 17)) {
59827 log_packet_detailed(" got field 'init_government_id'");
59828
59829#ifdef FREECIV_JSON_CONNECTION
59830 field_addr.name = "init_government_id";
59831#endif /* FREECIV_JSON_CONNECTION */
59832
59833 {
59834 int readin;
59835
59836 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
59837 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
59838 }
59839 real_packet->init_government_id = readin;
59840 }
59841 }
59842
59843 if (BV_ISSET(fields, 18)) {
59844 log_packet_detailed(" got field 'init_techs_count'");
59845
59846#ifdef FREECIV_JSON_CONNECTION
59847 field_addr.name = "init_techs_count";
59848#endif /* FREECIV_JSON_CONNECTION */
59849
59850 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
59851 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
59852 }
59853 }
59854
59855 if (BV_ISSET(fields, 19)) {
59856 log_packet_detailed(" got field 'init_techs'");
59857
59858#ifdef FREECIV_JSON_CONNECTION
59859 field_addr.name = "init_techs";
59860#endif /* FREECIV_JSON_CONNECTION */
59861
59862 {
59863 int i;
59864
59865 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
59866 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
59867 }
59868
59869#ifdef FREECIV_JSON_CONNECTION
59870 /* Enter array. */
59871 field_addr.sub_location = plocation_elem_new(0);
59872#endif /* FREECIV_JSON_CONNECTION */
59873
59874 for (i = 0; i < real_packet->init_techs_count; i++) {
59875#ifdef FREECIV_JSON_CONNECTION
59876 /* Next array element */
59877 field_addr.sub_location->number = i;
59878#endif /* FREECIV_JSON_CONNECTION */
59879
59880 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
59881 RECEIVE_PACKET_FIELD_ERROR(init_techs);
59882 }
59883 }
59884
59885#ifdef FREECIV_JSON_CONNECTION
59886 /* Exit array. */
59887 FC_FREE(field_addr.sub_location);
59888#endif /* FREECIV_JSON_CONNECTION */
59889 }
59890 }
59891
59892 if (BV_ISSET(fields, 20)) {
59893 log_packet_detailed(" got field 'init_units_count'");
59894
59895#ifdef FREECIV_JSON_CONNECTION
59896 field_addr.name = "init_units_count";
59897#endif /* FREECIV_JSON_CONNECTION */
59898
59899 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
59900 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
59901 }
59902 }
59903
59904 if (BV_ISSET(fields, 21)) {
59905 log_packet_detailed(" got field 'init_units'");
59906
59907#ifdef FREECIV_JSON_CONNECTION
59908 field_addr.name = "init_units";
59909#endif /* FREECIV_JSON_CONNECTION */
59910
59911 {
59912 int i;
59913
59914 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
59915 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
59916 }
59917
59918#ifdef FREECIV_JSON_CONNECTION
59919 /* Enter array. */
59920 field_addr.sub_location = plocation_elem_new(0);
59921#endif /* FREECIV_JSON_CONNECTION */
59922
59923 for (i = 0; i < real_packet->init_units_count; i++) {
59924#ifdef FREECIV_JSON_CONNECTION
59925 /* Next array element */
59926 field_addr.sub_location->number = i;
59927#endif /* FREECIV_JSON_CONNECTION */
59928
59929 {
59930 int readin;
59931
59932 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
59933 RECEIVE_PACKET_FIELD_ERROR(init_units);
59934 }
59935 real_packet->init_units[i] = readin;
59936 }
59937 }
59938
59939#ifdef FREECIV_JSON_CONNECTION
59940 /* Exit array. */
59941 FC_FREE(field_addr.sub_location);
59942#endif /* FREECIV_JSON_CONNECTION */
59943 }
59944 }
59945
59946 if (BV_ISSET(fields, 22)) {
59947 log_packet_detailed(" got field 'init_buildings_count'");
59948
59949#ifdef FREECIV_JSON_CONNECTION
59950 field_addr.name = "init_buildings_count";
59951#endif /* FREECIV_JSON_CONNECTION */
59952
59953 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
59954 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
59955 }
59956 }
59957
59958 if (BV_ISSET(fields, 23)) {
59959 log_packet_detailed(" got field 'init_buildings'");
59960
59961#ifdef FREECIV_JSON_CONNECTION
59962 field_addr.name = "init_buildings";
59963#endif /* FREECIV_JSON_CONNECTION */
59964
59965 {
59966 int i;
59967
59968 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
59969 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
59970 }
59971
59972#ifdef FREECIV_JSON_CONNECTION
59973 /* Enter array. */
59974 field_addr.sub_location = plocation_elem_new(0);
59975#endif /* FREECIV_JSON_CONNECTION */
59976
59977 for (i = 0; i < real_packet->init_buildings_count; i++) {
59978#ifdef FREECIV_JSON_CONNECTION
59979 /* Next array element */
59980 field_addr.sub_location->number = i;
59981#endif /* FREECIV_JSON_CONNECTION */
59982
59983 {
59984 int readin;
59985
59986 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59987 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
59988 }
59989 real_packet->init_buildings[i] = readin;
59990 }
59991 }
59992
59993#ifdef FREECIV_JSON_CONNECTION
59994 /* Exit array. */
59995 FC_FREE(field_addr.sub_location);
59996#endif /* FREECIV_JSON_CONNECTION */
59997 }
59998 }
59999
60000 if (nullptr == old) {
60001 old = fc_malloc(sizeof(*old));
60003 *old = *real_packet;
60005 } else {
60006 *old = *real_packet;
60007 }
60008
60009#else /* FREECIV_DELTA_PROTOCOL */
60010#ifdef FREECIV_JSON_CONNECTION
60011 field_addr.name = "translation_domain";
60012#endif /* FREECIV_JSON_CONNECTION */
60013
60014 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
60015 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
60016 }
60017
60018#ifdef FREECIV_JSON_CONNECTION
60019 field_addr.name = "adjective";
60020#endif /* FREECIV_JSON_CONNECTION */
60021
60022 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
60023 RECEIVE_PACKET_FIELD_ERROR(adjective);
60024 }
60025
60026#ifdef FREECIV_JSON_CONNECTION
60027 field_addr.name = "rule_name";
60028#endif /* FREECIV_JSON_CONNECTION */
60029
60030 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
60031 RECEIVE_PACKET_FIELD_ERROR(rule_name);
60032 }
60033
60034#ifdef FREECIV_JSON_CONNECTION
60035 field_addr.name = "noun_plural";
60036#endif /* FREECIV_JSON_CONNECTION */
60037
60038 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
60039 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
60040 }
60041
60042#ifdef FREECIV_JSON_CONNECTION
60043 field_addr.name = "graphic_str";
60044#endif /* FREECIV_JSON_CONNECTION */
60045
60046 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
60047 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
60048 }
60049
60050#ifdef FREECIV_JSON_CONNECTION
60051 field_addr.name = "graphic_alt";
60052#endif /* FREECIV_JSON_CONNECTION */
60053
60054 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
60055 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
60056 }
60057
60058#ifdef FREECIV_JSON_CONNECTION
60059 field_addr.name = "legend";
60060#endif /* FREECIV_JSON_CONNECTION */
60061
60062 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
60064 }
60065
60066#ifdef FREECIV_JSON_CONNECTION
60067 field_addr.name = "style";
60068#endif /* FREECIV_JSON_CONNECTION */
60069
60070 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
60072 }
60073
60074#ifdef FREECIV_JSON_CONNECTION
60075 field_addr.name = "leader_count";
60076#endif /* FREECIV_JSON_CONNECTION */
60077
60078 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
60079 RECEIVE_PACKET_FIELD_ERROR(leader_count);
60080 }
60081
60082#ifdef FREECIV_JSON_CONNECTION
60083 field_addr.name = "leader_name";
60084#endif /* FREECIV_JSON_CONNECTION */
60085
60086 {
60087 int i;
60088
60089 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60090 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": array truncated");
60091 }
60092
60093#ifdef FREECIV_JSON_CONNECTION
60094 /* Enter array. */
60095 field_addr.sub_location = plocation_elem_new(0);
60096#endif /* FREECIV_JSON_CONNECTION */
60097
60098 for (i = 0; i < real_packet->leader_count; i++) {
60099#ifdef FREECIV_JSON_CONNECTION
60100 /* Next array element */
60101 field_addr.sub_location->number = i;
60102#endif /* FREECIV_JSON_CONNECTION */
60103
60104 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
60106 }
60107 }
60108
60109#ifdef FREECIV_JSON_CONNECTION
60110 /* Exit array. */
60111 FC_FREE(field_addr.sub_location);
60112#endif /* FREECIV_JSON_CONNECTION */
60113 }
60114
60115#ifdef FREECIV_JSON_CONNECTION
60116 field_addr.name = "leader_is_male";
60117#endif /* FREECIV_JSON_CONNECTION */
60118
60119 {
60120 int i;
60121
60122 if (real_packet->leader_count > MAX_NUM_LEADERS) {
60123 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": array truncated");
60124 }
60125
60126#ifdef FREECIV_JSON_CONNECTION
60127 /* Enter array. */
60128 field_addr.sub_location = plocation_elem_new(0);
60129#endif /* FREECIV_JSON_CONNECTION */
60130
60131 for (i = 0; i < real_packet->leader_count; i++) {
60132#ifdef FREECIV_JSON_CONNECTION
60133 /* Next array element */
60134 field_addr.sub_location->number = i;
60135#endif /* FREECIV_JSON_CONNECTION */
60136
60137 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
60138 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
60139 }
60140 }
60141
60142#ifdef FREECIV_JSON_CONNECTION
60143 /* Exit array. */
60144 FC_FREE(field_addr.sub_location);
60145#endif /* FREECIV_JSON_CONNECTION */
60146 }
60147
60148#ifdef FREECIV_JSON_CONNECTION
60149 field_addr.name = "is_playable";
60150#endif /* FREECIV_JSON_CONNECTION */
60151
60152 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_playable)) {
60153 RECEIVE_PACKET_FIELD_ERROR(is_playable);
60154 }
60155
60156#ifdef FREECIV_JSON_CONNECTION
60157 field_addr.name = "barbarian_type";
60158#endif /* FREECIV_JSON_CONNECTION */
60159
60160 {
60161 int readin;
60162
60163 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60164 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
60165 }
60166 real_packet->barbarian_type = readin;
60167 }
60168
60169#ifdef FREECIV_JSON_CONNECTION
60170 field_addr.name = "nsets";
60171#endif /* FREECIV_JSON_CONNECTION */
60172
60173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
60175 }
60176
60177#ifdef FREECIV_JSON_CONNECTION
60178 field_addr.name = "sets";
60179#endif /* FREECIV_JSON_CONNECTION */
60180
60181 {
60182 int i;
60183
60184 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
60185 RECEIVE_PACKET_FIELD_ERROR(sets, ": array truncated");
60186 }
60187
60188#ifdef FREECIV_JSON_CONNECTION
60189 /* Enter array. */
60190 field_addr.sub_location = plocation_elem_new(0);
60191#endif /* FREECIV_JSON_CONNECTION */
60192
60193 for (i = 0; i < real_packet->nsets; i++) {
60194#ifdef FREECIV_JSON_CONNECTION
60195 /* Next array element */
60196 field_addr.sub_location->number = i;
60197#endif /* FREECIV_JSON_CONNECTION */
60198
60199 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
60201 }
60202 }
60203
60204#ifdef FREECIV_JSON_CONNECTION
60205 /* Exit array. */
60206 FC_FREE(field_addr.sub_location);
60207#endif /* FREECIV_JSON_CONNECTION */
60208 }
60209
60210#ifdef FREECIV_JSON_CONNECTION
60211 field_addr.name = "ngroups";
60212#endif /* FREECIV_JSON_CONNECTION */
60213
60214 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
60216 }
60217
60218#ifdef FREECIV_JSON_CONNECTION
60219 field_addr.name = "groups";
60220#endif /* FREECIV_JSON_CONNECTION */
60221
60222 {
60223 int i;
60224
60225 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
60226 RECEIVE_PACKET_FIELD_ERROR(groups, ": array truncated");
60227 }
60228
60229#ifdef FREECIV_JSON_CONNECTION
60230 /* Enter array. */
60231 field_addr.sub_location = plocation_elem_new(0);
60232#endif /* FREECIV_JSON_CONNECTION */
60233
60234 for (i = 0; i < real_packet->ngroups; i++) {
60235#ifdef FREECIV_JSON_CONNECTION
60236 /* Next array element */
60237 field_addr.sub_location->number = i;
60238#endif /* FREECIV_JSON_CONNECTION */
60239
60240 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
60242 }
60243 }
60244
60245#ifdef FREECIV_JSON_CONNECTION
60246 /* Exit array. */
60247 FC_FREE(field_addr.sub_location);
60248#endif /* FREECIV_JSON_CONNECTION */
60249 }
60250
60251#ifdef FREECIV_JSON_CONNECTION
60252 field_addr.name = "init_government_id";
60253#endif /* FREECIV_JSON_CONNECTION */
60254
60255 {
60256 int readin;
60257
60258 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
60259 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
60260 }
60261 real_packet->init_government_id = readin;
60262 }
60263
60264#ifdef FREECIV_JSON_CONNECTION
60265 field_addr.name = "init_techs_count";
60266#endif /* FREECIV_JSON_CONNECTION */
60267
60268 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
60269 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
60270 }
60271
60272#ifdef FREECIV_JSON_CONNECTION
60273 field_addr.name = "init_techs";
60274#endif /* FREECIV_JSON_CONNECTION */
60275
60276 {
60277 int i;
60278
60279 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
60280 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": array truncated");
60281 }
60282
60283#ifdef FREECIV_JSON_CONNECTION
60284 /* Enter array. */
60285 field_addr.sub_location = plocation_elem_new(0);
60286#endif /* FREECIV_JSON_CONNECTION */
60287
60288 for (i = 0; i < real_packet->init_techs_count; i++) {
60289#ifdef FREECIV_JSON_CONNECTION
60290 /* Next array element */
60291 field_addr.sub_location->number = i;
60292#endif /* FREECIV_JSON_CONNECTION */
60293
60294 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
60295 RECEIVE_PACKET_FIELD_ERROR(init_techs);
60296 }
60297 }
60298
60299#ifdef FREECIV_JSON_CONNECTION
60300 /* Exit array. */
60301 FC_FREE(field_addr.sub_location);
60302#endif /* FREECIV_JSON_CONNECTION */
60303 }
60304
60305#ifdef FREECIV_JSON_CONNECTION
60306 field_addr.name = "init_units_count";
60307#endif /* FREECIV_JSON_CONNECTION */
60308
60309 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
60310 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
60311 }
60312
60313#ifdef FREECIV_JSON_CONNECTION
60314 field_addr.name = "init_units";
60315#endif /* FREECIV_JSON_CONNECTION */
60316
60317 {
60318 int i;
60319
60320 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
60321 RECEIVE_PACKET_FIELD_ERROR(init_units, ": array truncated");
60322 }
60323
60324#ifdef FREECIV_JSON_CONNECTION
60325 /* Enter array. */
60326 field_addr.sub_location = plocation_elem_new(0);
60327#endif /* FREECIV_JSON_CONNECTION */
60328
60329 for (i = 0; i < real_packet->init_units_count; i++) {
60330#ifdef FREECIV_JSON_CONNECTION
60331 /* Next array element */
60332 field_addr.sub_location->number = i;
60333#endif /* FREECIV_JSON_CONNECTION */
60334
60335 {
60336 int readin;
60337
60338 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
60339 RECEIVE_PACKET_FIELD_ERROR(init_units);
60340 }
60341 real_packet->init_units[i] = readin;
60342 }
60343 }
60344
60345#ifdef FREECIV_JSON_CONNECTION
60346 /* Exit array. */
60347 FC_FREE(field_addr.sub_location);
60348#endif /* FREECIV_JSON_CONNECTION */
60349 }
60350
60351#ifdef FREECIV_JSON_CONNECTION
60352 field_addr.name = "init_buildings_count";
60353#endif /* FREECIV_JSON_CONNECTION */
60354
60355 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
60356 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
60357 }
60358
60359#ifdef FREECIV_JSON_CONNECTION
60360 field_addr.name = "init_buildings";
60361#endif /* FREECIV_JSON_CONNECTION */
60362
60363 {
60364 int i;
60365
60366 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
60367 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": array truncated");
60368 }
60369
60370#ifdef FREECIV_JSON_CONNECTION
60371 /* Enter array. */
60372 field_addr.sub_location = plocation_elem_new(0);
60373#endif /* FREECIV_JSON_CONNECTION */
60374
60375 for (i = 0; i < real_packet->init_buildings_count; i++) {
60376#ifdef FREECIV_JSON_CONNECTION
60377 /* Next array element */
60378 field_addr.sub_location->number = i;
60379#endif /* FREECIV_JSON_CONNECTION */
60380
60381 {
60382 int readin;
60383
60384 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60385 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
60386 }
60387 real_packet->init_buildings[i] = readin;
60388 }
60389 }
60390
60391#ifdef FREECIV_JSON_CONNECTION
60392 /* Exit array. */
60393 FC_FREE(field_addr.sub_location);
60394#endif /* FREECIV_JSON_CONNECTION */
60395 }
60396#endif /* FREECIV_DELTA_PROTOCOL */
60397
60399#undef FREE_PACKET_STRUCT
60400}
60401
60403{
60404 const struct packet_ruleset_nation *real_packet = packet;
60405 int e;
60407
60408 log_packet_detailed("packet_ruleset_nation_100: sending info about (%d)",
60409 real_packet->id);
60410
60411#ifdef FREECIV_DELTA_PROTOCOL
60413 struct packet_ruleset_nation *old;
60414 bool differ;
60415 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION;
60416
60417 if (nullptr == *hash) {
60419 nullptr, nullptr, nullptr, destroy_packet_ruleset_nation);
60420 }
60421 BV_CLR_ALL(fields);
60422
60423 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
60424 old = fc_malloc(sizeof(*old));
60425 /* temporary bitcopy just to insert correctly */
60426 *old = *real_packet;
60429 }
60430
60431 differ = (strcmp(old->translation_domain, real_packet->translation_domain) != 0);
60432 if (differ) {
60433 BV_SET(fields, 0);
60434 }
60435
60436 differ = (strcmp(old->adjective, real_packet->adjective) != 0);
60437 if (differ) {
60438 BV_SET(fields, 1);
60439 }
60440
60441 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
60442 if (differ) {
60443 BV_SET(fields, 2);
60444 }
60445
60446 differ = (strcmp(old->noun_plural, real_packet->noun_plural) != 0);
60447 if (differ) {
60448 BV_SET(fields, 3);
60449 }
60450
60451 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
60452 if (differ) {
60453 BV_SET(fields, 4);
60454 }
60455
60456 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
60457 if (differ) {
60458 BV_SET(fields, 5);
60459 }
60460
60461 differ = (strcmp(old->legend, real_packet->legend) != 0);
60462 if (differ) {
60463 BV_SET(fields, 6);
60464 }
60465
60466 differ = (old->style != real_packet->style);
60467 if (differ) {
60468 BV_SET(fields, 7);
60469 }
60470
60471 differ = (old->leader_count != real_packet->leader_count);
60472 if (differ) {
60473 BV_SET(fields, 8);
60474 }
60475
60476 differ = (old->leader_count != real_packet->leader_count);
60477 if (!differ) {
60478 int i;
60479
60480 for (i = 0; i < old->leader_count; i++) {
60481 differ = (strcmp(old->leader_name[i], real_packet->leader_name[i]) != 0);
60482 if (differ) {
60483 break;
60484 }
60485 }
60486 }
60487 if (differ) {
60488 BV_SET(fields, 9);
60489 }
60490
60491 differ = (old->leader_count != real_packet->leader_count);
60492 if (!differ) {
60493 int i;
60494
60495 for (i = 0; i < old->leader_count; i++) {
60496 differ = (old->leader_is_male[i] != real_packet->leader_is_male[i]);
60497 if (differ) {
60498 break;
60499 }
60500 }
60501 }
60502 if (differ) {
60503 BV_SET(fields, 10);
60504 }
60505
60506 /* folded into head */
60507 if (real_packet->is_playable) {
60508 BV_SET(fields, 11);
60509 }
60510
60511 differ = (old->barbarian_type != real_packet->barbarian_type);
60512 if (differ) {
60513 BV_SET(fields, 12);
60514 }
60515
60516 differ = (old->nsets != real_packet->nsets);
60517 if (differ) {
60518 BV_SET(fields, 13);
60519 }
60520
60521 differ = (old->nsets != real_packet->nsets);
60522 if (!differ) {
60523 int i;
60524
60525 for (i = 0; i < old->nsets; i++) {
60526 differ = (old->sets[i] != real_packet->sets[i]);
60527 if (differ) {
60528 break;
60529 }
60530 }
60531 }
60532 if (differ) {
60533 BV_SET(fields, 14);
60534 }
60535
60536 differ = (old->ngroups != real_packet->ngroups);
60537 if (differ) {
60538 BV_SET(fields, 15);
60539 }
60540
60541 differ = (old->ngroups != real_packet->ngroups);
60542 if (!differ) {
60543 int i;
60544
60545 for (i = 0; i < old->ngroups; i++) {
60546 differ = (old->groups[i] != real_packet->groups[i]);
60547 if (differ) {
60548 break;
60549 }
60550 }
60551 }
60552 if (differ) {
60553 BV_SET(fields, 16);
60554 }
60555
60556 differ = (old->init_government_id != real_packet->init_government_id);
60557 if (differ) {
60558 BV_SET(fields, 17);
60559 }
60560
60561 differ = (old->init_techs_count != real_packet->init_techs_count);
60562 if (differ) {
60563 BV_SET(fields, 18);
60564 }
60565
60566 differ = (old->init_techs_count != real_packet->init_techs_count);
60567 if (!differ) {
60568 int i;
60569
60570 for (i = 0; i < old->init_techs_count; i++) {
60571 differ = (old->init_techs[i] != real_packet->init_techs[i]);
60572 if (differ) {
60573 break;
60574 }
60575 }
60576 }
60577 if (differ) {
60578 BV_SET(fields, 19);
60579 }
60580
60581 differ = (old->init_units_count != real_packet->init_units_count);
60582 if (differ) {
60583 BV_SET(fields, 20);
60584 }
60585
60586 differ = (old->init_units_count != real_packet->init_units_count);
60587 if (!differ) {
60588 int i;
60589
60590 for (i = 0; i < old->init_units_count; i++) {
60591 differ = (old->init_units[i] != real_packet->init_units[i]);
60592 if (differ) {
60593 break;
60594 }
60595 }
60596 }
60597 if (differ) {
60598 BV_SET(fields, 21);
60599 }
60600
60601 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60602 if (differ) {
60603 BV_SET(fields, 22);
60604 }
60605
60606 differ = (old->init_buildings_count != real_packet->init_buildings_count);
60607 if (!differ) {
60608 int i;
60609
60610 for (i = 0; i < old->init_buildings_count; i++) {
60611 differ = (old->init_buildings[i] != real_packet->init_buildings[i]);
60612 if (differ) {
60613 break;
60614 }
60615 }
60616 }
60617 if (differ) {
60618 BV_SET(fields, 23);
60619 }
60620#endif /* FREECIV_DELTA_PROTOCOL */
60621
60622#ifdef FREECIV_JSON_CONNECTION
60623 struct plocation field_addr;
60624 {
60625 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
60628 }
60629#endif /* FREECIV_JSON_CONNECTION */
60630
60631#ifdef FREECIV_JSON_CONNECTION
60632 field_addr.name = "id";
60633#endif /* FREECIV_JSON_CONNECTION */
60634 e = 0;
60635
60636 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
60637
60638 if (e) {
60639 log_packet_detailed("'id' field error detected");
60640 }
60641
60642#ifdef FREECIV_DELTA_PROTOCOL
60643#ifdef FREECIV_JSON_CONNECTION
60644 field_addr.name = "fields";
60645#endif /* FREECIV_JSON_CONNECTION */
60646 e = 0;
60647 e |= DIO_BV_PUT(&dout, &field_addr, fields);
60648 if (e) {
60649 log_packet_detailed("fields bitvector error detected");
60650 }
60651
60652 if (BV_ISSET(fields, 0)) {
60653 log_packet_detailed(" field 'translation_domain' has changed");
60654
60655#ifdef FREECIV_JSON_CONNECTION
60656 field_addr.name = "translation_domain";
60657#endif /* FREECIV_JSON_CONNECTION */
60658 e = 0;
60659
60660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
60661
60662 if (e) {
60663 log_packet_detailed("'translation_domain' field error detected");
60664 }
60665 }
60666
60667 if (BV_ISSET(fields, 1)) {
60668 log_packet_detailed(" field 'adjective' has changed");
60669
60670#ifdef FREECIV_JSON_CONNECTION
60671 field_addr.name = "adjective";
60672#endif /* FREECIV_JSON_CONNECTION */
60673 e = 0;
60674
60675 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
60676
60677 if (e) {
60678 log_packet_detailed("'adjective' field error detected");
60679 }
60680 }
60681
60682 if (BV_ISSET(fields, 2)) {
60683 log_packet_detailed(" field 'rule_name' has changed");
60684
60685#ifdef FREECIV_JSON_CONNECTION
60686 field_addr.name = "rule_name";
60687#endif /* FREECIV_JSON_CONNECTION */
60688 e = 0;
60689
60690 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
60691
60692 if (e) {
60693 log_packet_detailed("'rule_name' field error detected");
60694 }
60695 }
60696
60697 if (BV_ISSET(fields, 3)) {
60698 log_packet_detailed(" field 'noun_plural' has changed");
60699
60700#ifdef FREECIV_JSON_CONNECTION
60701 field_addr.name = "noun_plural";
60702#endif /* FREECIV_JSON_CONNECTION */
60703 e = 0;
60704
60705 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
60706
60707 if (e) {
60708 log_packet_detailed("'noun_plural' field error detected");
60709 }
60710 }
60711
60712 if (BV_ISSET(fields, 4)) {
60713 log_packet_detailed(" field 'graphic_str' has changed");
60714
60715#ifdef FREECIV_JSON_CONNECTION
60716 field_addr.name = "graphic_str";
60717#endif /* FREECIV_JSON_CONNECTION */
60718 e = 0;
60719
60720 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
60721
60722 if (e) {
60723 log_packet_detailed("'graphic_str' field error detected");
60724 }
60725 }
60726
60727 if (BV_ISSET(fields, 5)) {
60728 log_packet_detailed(" field 'graphic_alt' has changed");
60729
60730#ifdef FREECIV_JSON_CONNECTION
60731 field_addr.name = "graphic_alt";
60732#endif /* FREECIV_JSON_CONNECTION */
60733 e = 0;
60734
60735 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
60736
60737 if (e) {
60738 log_packet_detailed("'graphic_alt' field error detected");
60739 }
60740 }
60741
60742 if (BV_ISSET(fields, 6)) {
60743 log_packet_detailed(" field 'legend' has changed");
60744
60745#ifdef FREECIV_JSON_CONNECTION
60746 field_addr.name = "legend";
60747#endif /* FREECIV_JSON_CONNECTION */
60748 e = 0;
60749
60750 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
60751
60752 if (e) {
60753 log_packet_detailed("'legend' field error detected");
60754 }
60755 }
60756
60757 if (BV_ISSET(fields, 7)) {
60758 log_packet_detailed(" field 'style' has changed");
60759
60760#ifdef FREECIV_JSON_CONNECTION
60761 field_addr.name = "style";
60762#endif /* FREECIV_JSON_CONNECTION */
60763 e = 0;
60764
60765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
60766
60767 if (e) {
60768 log_packet_detailed("'style' field error detected");
60769 }
60770 }
60771
60772 if (BV_ISSET(fields, 8)) {
60773 log_packet_detailed(" field 'leader_count' has changed");
60774
60775#ifdef FREECIV_JSON_CONNECTION
60776 field_addr.name = "leader_count";
60777#endif /* FREECIV_JSON_CONNECTION */
60778 e = 0;
60779
60780 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
60781
60782 if (e) {
60783 log_packet_detailed("'leader_count' field error detected");
60784 }
60785 }
60786
60787 if (BV_ISSET(fields, 9)) {
60788 log_packet_detailed(" field 'leader_name' has changed");
60789
60790#ifdef FREECIV_JSON_CONNECTION
60791 field_addr.name = "leader_name";
60792#endif /* FREECIV_JSON_CONNECTION */
60793 e = 0;
60794
60795 {
60796 int i;
60797
60798#ifdef FREECIV_JSON_CONNECTION
60799 /* Create the array. */
60800 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
60801
60802 /* Enter array. */
60803 field_addr.sub_location = plocation_elem_new(0);
60804#endif /* FREECIV_JSON_CONNECTION */
60805
60806 for (i = 0; i < real_packet->leader_count; i++) {
60807#ifdef FREECIV_JSON_CONNECTION
60808 /* Next array element. */
60809 field_addr.sub_location->number = i;
60810#endif /* FREECIV_JSON_CONNECTION */
60811
60812 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
60813 }
60814
60815#ifdef FREECIV_JSON_CONNECTION
60816 /* Exit array. */
60817 FC_FREE(field_addr.sub_location);
60818#endif /* FREECIV_JSON_CONNECTION */
60819 }
60820
60821 if (e) {
60822 log_packet_detailed("'leader_name' field error detected");
60823 }
60824 }
60825
60826 if (BV_ISSET(fields, 10)) {
60827 log_packet_detailed(" field 'leader_is_male' has changed");
60828
60829#ifdef FREECIV_JSON_CONNECTION
60830 field_addr.name = "leader_is_male";
60831#endif /* FREECIV_JSON_CONNECTION */
60832 e = 0;
60833
60834 {
60835 int i;
60836
60837#ifdef FREECIV_JSON_CONNECTION
60838 /* Create the array. */
60839 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
60840
60841 /* Enter array. */
60842 field_addr.sub_location = plocation_elem_new(0);
60843#endif /* FREECIV_JSON_CONNECTION */
60844
60845 for (i = 0; i < real_packet->leader_count; i++) {
60846#ifdef FREECIV_JSON_CONNECTION
60847 /* Next array element. */
60848 field_addr.sub_location->number = i;
60849#endif /* FREECIV_JSON_CONNECTION */
60850
60851 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
60852 }
60853
60854#ifdef FREECIV_JSON_CONNECTION
60855 /* Exit array. */
60856 FC_FREE(field_addr.sub_location);
60857#endif /* FREECIV_JSON_CONNECTION */
60858 }
60859
60860 if (e) {
60861 log_packet_detailed("'leader_is_male' field error detected");
60862 }
60863 }
60864
60865 /* field 11 is folded into the header */
60866
60867 if (BV_ISSET(fields, 12)) {
60868 log_packet_detailed(" field 'barbarian_type' has changed");
60869
60870#ifdef FREECIV_JSON_CONNECTION
60871 field_addr.name = "barbarian_type";
60872#endif /* FREECIV_JSON_CONNECTION */
60873 e = 0;
60874
60875 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
60876
60877 if (e) {
60878 log_packet_detailed("'barbarian_type' field error detected");
60879 }
60880 }
60881
60882 if (BV_ISSET(fields, 13)) {
60883 log_packet_detailed(" field 'nsets' has changed");
60884
60885#ifdef FREECIV_JSON_CONNECTION
60886 field_addr.name = "nsets";
60887#endif /* FREECIV_JSON_CONNECTION */
60888 e = 0;
60889
60890 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
60891
60892 if (e) {
60893 log_packet_detailed("'nsets' field error detected");
60894 }
60895 }
60896
60897 if (BV_ISSET(fields, 14)) {
60898 log_packet_detailed(" field 'sets' has changed");
60899
60900#ifdef FREECIV_JSON_CONNECTION
60901 field_addr.name = "sets";
60902#endif /* FREECIV_JSON_CONNECTION */
60903 e = 0;
60904
60905 {
60906 int i;
60907
60908#ifdef FREECIV_JSON_CONNECTION
60909 /* Create the array. */
60910 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
60911
60912 /* Enter array. */
60913 field_addr.sub_location = plocation_elem_new(0);
60914#endif /* FREECIV_JSON_CONNECTION */
60915
60916 for (i = 0; i < real_packet->nsets; i++) {
60917#ifdef FREECIV_JSON_CONNECTION
60918 /* Next array element. */
60919 field_addr.sub_location->number = i;
60920#endif /* FREECIV_JSON_CONNECTION */
60921
60922 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
60923 }
60924
60925#ifdef FREECIV_JSON_CONNECTION
60926 /* Exit array. */
60927 FC_FREE(field_addr.sub_location);
60928#endif /* FREECIV_JSON_CONNECTION */
60929 }
60930
60931 if (e) {
60932 log_packet_detailed("'sets' field error detected");
60933 }
60934 }
60935
60936 if (BV_ISSET(fields, 15)) {
60937 log_packet_detailed(" field 'ngroups' has changed");
60938
60939#ifdef FREECIV_JSON_CONNECTION
60940 field_addr.name = "ngroups";
60941#endif /* FREECIV_JSON_CONNECTION */
60942 e = 0;
60943
60944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
60945
60946 if (e) {
60947 log_packet_detailed("'ngroups' field error detected");
60948 }
60949 }
60950
60951 if (BV_ISSET(fields, 16)) {
60952 log_packet_detailed(" field 'groups' has changed");
60953
60954#ifdef FREECIV_JSON_CONNECTION
60955 field_addr.name = "groups";
60956#endif /* FREECIV_JSON_CONNECTION */
60957 e = 0;
60958
60959 {
60960 int i;
60961
60962#ifdef FREECIV_JSON_CONNECTION
60963 /* Create the array. */
60964 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
60965
60966 /* Enter array. */
60967 field_addr.sub_location = plocation_elem_new(0);
60968#endif /* FREECIV_JSON_CONNECTION */
60969
60970 for (i = 0; i < real_packet->ngroups; i++) {
60971#ifdef FREECIV_JSON_CONNECTION
60972 /* Next array element. */
60973 field_addr.sub_location->number = i;
60974#endif /* FREECIV_JSON_CONNECTION */
60975
60976 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
60977 }
60978
60979#ifdef FREECIV_JSON_CONNECTION
60980 /* Exit array. */
60981 FC_FREE(field_addr.sub_location);
60982#endif /* FREECIV_JSON_CONNECTION */
60983 }
60984
60985 if (e) {
60986 log_packet_detailed("'groups' field error detected");
60987 }
60988 }
60989
60990 if (BV_ISSET(fields, 17)) {
60991 log_packet_detailed(" field 'init_government_id' has changed");
60992
60993#ifdef FREECIV_JSON_CONNECTION
60994 field_addr.name = "init_government_id";
60995#endif /* FREECIV_JSON_CONNECTION */
60996 e = 0;
60997
60998 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
60999
61000 if (e) {
61001 log_packet_detailed("'init_government_id' field error detected");
61002 }
61003 }
61004
61005 if (BV_ISSET(fields, 18)) {
61006 log_packet_detailed(" field 'init_techs_count' has changed");
61007
61008#ifdef FREECIV_JSON_CONNECTION
61009 field_addr.name = "init_techs_count";
61010#endif /* FREECIV_JSON_CONNECTION */
61011 e = 0;
61012
61013 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
61014
61015 if (e) {
61016 log_packet_detailed("'init_techs_count' field error detected");
61017 }
61018 }
61019
61020 if (BV_ISSET(fields, 19)) {
61021 log_packet_detailed(" field 'init_techs' has changed");
61022
61023#ifdef FREECIV_JSON_CONNECTION
61024 field_addr.name = "init_techs";
61025#endif /* FREECIV_JSON_CONNECTION */
61026 e = 0;
61027
61028 {
61029 int i;
61030
61031#ifdef FREECIV_JSON_CONNECTION
61032 /* Create the array. */
61033 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
61034
61035 /* Enter array. */
61036 field_addr.sub_location = plocation_elem_new(0);
61037#endif /* FREECIV_JSON_CONNECTION */
61038
61039 for (i = 0; i < real_packet->init_techs_count; i++) {
61040#ifdef FREECIV_JSON_CONNECTION
61041 /* Next array element. */
61042 field_addr.sub_location->number = i;
61043#endif /* FREECIV_JSON_CONNECTION */
61044
61045 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
61046 }
61047
61048#ifdef FREECIV_JSON_CONNECTION
61049 /* Exit array. */
61050 FC_FREE(field_addr.sub_location);
61051#endif /* FREECIV_JSON_CONNECTION */
61052 }
61053
61054 if (e) {
61055 log_packet_detailed("'init_techs' field error detected");
61056 }
61057 }
61058
61059 if (BV_ISSET(fields, 20)) {
61060 log_packet_detailed(" field 'init_units_count' has changed");
61061
61062#ifdef FREECIV_JSON_CONNECTION
61063 field_addr.name = "init_units_count";
61064#endif /* FREECIV_JSON_CONNECTION */
61065 e = 0;
61066
61067 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
61068
61069 if (e) {
61070 log_packet_detailed("'init_units_count' field error detected");
61071 }
61072 }
61073
61074 if (BV_ISSET(fields, 21)) {
61075 log_packet_detailed(" field 'init_units' has changed");
61076
61077#ifdef FREECIV_JSON_CONNECTION
61078 field_addr.name = "init_units";
61079#endif /* FREECIV_JSON_CONNECTION */
61080 e = 0;
61081
61082 {
61083 int i;
61084
61085#ifdef FREECIV_JSON_CONNECTION
61086 /* Create the array. */
61087 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
61088
61089 /* Enter array. */
61090 field_addr.sub_location = plocation_elem_new(0);
61091#endif /* FREECIV_JSON_CONNECTION */
61092
61093 for (i = 0; i < real_packet->init_units_count; i++) {
61094#ifdef FREECIV_JSON_CONNECTION
61095 /* Next array element. */
61096 field_addr.sub_location->number = i;
61097#endif /* FREECIV_JSON_CONNECTION */
61098
61099 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
61100 }
61101
61102#ifdef FREECIV_JSON_CONNECTION
61103 /* Exit array. */
61104 FC_FREE(field_addr.sub_location);
61105#endif /* FREECIV_JSON_CONNECTION */
61106 }
61107
61108 if (e) {
61109 log_packet_detailed("'init_units' field error detected");
61110 }
61111 }
61112
61113 if (BV_ISSET(fields, 22)) {
61114 log_packet_detailed(" field 'init_buildings_count' has changed");
61115
61116#ifdef FREECIV_JSON_CONNECTION
61117 field_addr.name = "init_buildings_count";
61118#endif /* FREECIV_JSON_CONNECTION */
61119 e = 0;
61120
61121 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61122
61123 if (e) {
61124 log_packet_detailed("'init_buildings_count' field error detected");
61125 }
61126 }
61127
61128 if (BV_ISSET(fields, 23)) {
61129 log_packet_detailed(" field 'init_buildings' has changed");
61130
61131#ifdef FREECIV_JSON_CONNECTION
61132 field_addr.name = "init_buildings";
61133#endif /* FREECIV_JSON_CONNECTION */
61134 e = 0;
61135
61136 {
61137 int i;
61138
61139#ifdef FREECIV_JSON_CONNECTION
61140 /* Create the array. */
61141 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61142
61143 /* Enter array. */
61144 field_addr.sub_location = plocation_elem_new(0);
61145#endif /* FREECIV_JSON_CONNECTION */
61146
61147 for (i = 0; i < real_packet->init_buildings_count; i++) {
61148#ifdef FREECIV_JSON_CONNECTION
61149 /* Next array element. */
61150 field_addr.sub_location->number = i;
61151#endif /* FREECIV_JSON_CONNECTION */
61152
61153 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61154 }
61155
61156#ifdef FREECIV_JSON_CONNECTION
61157 /* Exit array. */
61158 FC_FREE(field_addr.sub_location);
61159#endif /* FREECIV_JSON_CONNECTION */
61160 }
61161
61162 if (e) {
61163 log_packet_detailed("'init_buildings' field error detected");
61164 }
61165 }
61166
61167 *old = *real_packet;
61168
61169#else /* FREECIV_DELTA_PROTOCOL */
61170#ifdef FREECIV_JSON_CONNECTION
61171 field_addr.name = "translation_domain";
61172#endif /* FREECIV_JSON_CONNECTION */
61173 e = 0;
61174
61175 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
61176
61177 if (e) {
61178 log_packet_detailed("'translation_domain' field error detected");
61179 }
61180
61181#ifdef FREECIV_JSON_CONNECTION
61182 field_addr.name = "adjective";
61183#endif /* FREECIV_JSON_CONNECTION */
61184 e = 0;
61185
61186 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
61187
61188 if (e) {
61189 log_packet_detailed("'adjective' field error detected");
61190 }
61191
61192#ifdef FREECIV_JSON_CONNECTION
61193 field_addr.name = "rule_name";
61194#endif /* FREECIV_JSON_CONNECTION */
61195 e = 0;
61196
61197 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61198
61199 if (e) {
61200 log_packet_detailed("'rule_name' field error detected");
61201 }
61202
61203#ifdef FREECIV_JSON_CONNECTION
61204 field_addr.name = "noun_plural";
61205#endif /* FREECIV_JSON_CONNECTION */
61206 e = 0;
61207
61208 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
61209
61210 if (e) {
61211 log_packet_detailed("'noun_plural' field error detected");
61212 }
61213
61214#ifdef FREECIV_JSON_CONNECTION
61215 field_addr.name = "graphic_str";
61216#endif /* FREECIV_JSON_CONNECTION */
61217 e = 0;
61218
61219 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61220
61221 if (e) {
61222 log_packet_detailed("'graphic_str' field error detected");
61223 }
61224
61225#ifdef FREECIV_JSON_CONNECTION
61226 field_addr.name = "graphic_alt";
61227#endif /* FREECIV_JSON_CONNECTION */
61228 e = 0;
61229
61230 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61231
61232 if (e) {
61233 log_packet_detailed("'graphic_alt' field error detected");
61234 }
61235
61236#ifdef FREECIV_JSON_CONNECTION
61237 field_addr.name = "legend";
61238#endif /* FREECIV_JSON_CONNECTION */
61239 e = 0;
61240
61241 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
61242
61243 if (e) {
61244 log_packet_detailed("'legend' field error detected");
61245 }
61246
61247#ifdef FREECIV_JSON_CONNECTION
61248 field_addr.name = "style";
61249#endif /* FREECIV_JSON_CONNECTION */
61250 e = 0;
61251
61252 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
61253
61254 if (e) {
61255 log_packet_detailed("'style' field error detected");
61256 }
61257
61258#ifdef FREECIV_JSON_CONNECTION
61259 field_addr.name = "leader_count";
61260#endif /* FREECIV_JSON_CONNECTION */
61261 e = 0;
61262
61263 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
61264
61265 if (e) {
61266 log_packet_detailed("'leader_count' field error detected");
61267 }
61268
61269#ifdef FREECIV_JSON_CONNECTION
61270 field_addr.name = "leader_name";
61271#endif /* FREECIV_JSON_CONNECTION */
61272 e = 0;
61273
61274 {
61275 int i;
61276
61277#ifdef FREECIV_JSON_CONNECTION
61278 /* Create the array. */
61279 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61280
61281 /* Enter array. */
61282 field_addr.sub_location = plocation_elem_new(0);
61283#endif /* FREECIV_JSON_CONNECTION */
61284
61285 for (i = 0; i < real_packet->leader_count; i++) {
61286#ifdef FREECIV_JSON_CONNECTION
61287 /* Next array element. */
61288 field_addr.sub_location->number = i;
61289#endif /* FREECIV_JSON_CONNECTION */
61290
61291 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
61292 }
61293
61294#ifdef FREECIV_JSON_CONNECTION
61295 /* Exit array. */
61296 FC_FREE(field_addr.sub_location);
61297#endif /* FREECIV_JSON_CONNECTION */
61298 }
61299
61300 if (e) {
61301 log_packet_detailed("'leader_name' field error detected");
61302 }
61303
61304#ifdef FREECIV_JSON_CONNECTION
61305 field_addr.name = "leader_is_male";
61306#endif /* FREECIV_JSON_CONNECTION */
61307 e = 0;
61308
61309 {
61310 int i;
61311
61312#ifdef FREECIV_JSON_CONNECTION
61313 /* Create the array. */
61314 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
61315
61316 /* Enter array. */
61317 field_addr.sub_location = plocation_elem_new(0);
61318#endif /* FREECIV_JSON_CONNECTION */
61319
61320 for (i = 0; i < real_packet->leader_count; i++) {
61321#ifdef FREECIV_JSON_CONNECTION
61322 /* Next array element. */
61323 field_addr.sub_location->number = i;
61324#endif /* FREECIV_JSON_CONNECTION */
61325
61326 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
61327 }
61328
61329#ifdef FREECIV_JSON_CONNECTION
61330 /* Exit array. */
61331 FC_FREE(field_addr.sub_location);
61332#endif /* FREECIV_JSON_CONNECTION */
61333 }
61334
61335 if (e) {
61336 log_packet_detailed("'leader_is_male' field error detected");
61337 }
61338
61339#ifdef FREECIV_JSON_CONNECTION
61340 field_addr.name = "is_playable";
61341#endif /* FREECIV_JSON_CONNECTION */
61342 e = 0;
61343
61344 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_playable);
61345
61346 if (e) {
61347 log_packet_detailed("'is_playable' field error detected");
61348 }
61349
61350#ifdef FREECIV_JSON_CONNECTION
61351 field_addr.name = "barbarian_type";
61352#endif /* FREECIV_JSON_CONNECTION */
61353 e = 0;
61354
61355 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
61356
61357 if (e) {
61358 log_packet_detailed("'barbarian_type' field error detected");
61359 }
61360
61361#ifdef FREECIV_JSON_CONNECTION
61362 field_addr.name = "nsets";
61363#endif /* FREECIV_JSON_CONNECTION */
61364 e = 0;
61365
61366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
61367
61368 if (e) {
61369 log_packet_detailed("'nsets' field error detected");
61370 }
61371
61372#ifdef FREECIV_JSON_CONNECTION
61373 field_addr.name = "sets";
61374#endif /* FREECIV_JSON_CONNECTION */
61375 e = 0;
61376
61377 {
61378 int i;
61379
61380#ifdef FREECIV_JSON_CONNECTION
61381 /* Create the array. */
61382 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
61383
61384 /* Enter array. */
61385 field_addr.sub_location = plocation_elem_new(0);
61386#endif /* FREECIV_JSON_CONNECTION */
61387
61388 for (i = 0; i < real_packet->nsets; i++) {
61389#ifdef FREECIV_JSON_CONNECTION
61390 /* Next array element. */
61391 field_addr.sub_location->number = i;
61392#endif /* FREECIV_JSON_CONNECTION */
61393
61394 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
61395 }
61396
61397#ifdef FREECIV_JSON_CONNECTION
61398 /* Exit array. */
61399 FC_FREE(field_addr.sub_location);
61400#endif /* FREECIV_JSON_CONNECTION */
61401 }
61402
61403 if (e) {
61404 log_packet_detailed("'sets' field error detected");
61405 }
61406
61407#ifdef FREECIV_JSON_CONNECTION
61408 field_addr.name = "ngroups";
61409#endif /* FREECIV_JSON_CONNECTION */
61410 e = 0;
61411
61412 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
61413
61414 if (e) {
61415 log_packet_detailed("'ngroups' field error detected");
61416 }
61417
61418#ifdef FREECIV_JSON_CONNECTION
61419 field_addr.name = "groups";
61420#endif /* FREECIV_JSON_CONNECTION */
61421 e = 0;
61422
61423 {
61424 int i;
61425
61426#ifdef FREECIV_JSON_CONNECTION
61427 /* Create the array. */
61428 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
61429
61430 /* Enter array. */
61431 field_addr.sub_location = plocation_elem_new(0);
61432#endif /* FREECIV_JSON_CONNECTION */
61433
61434 for (i = 0; i < real_packet->ngroups; i++) {
61435#ifdef FREECIV_JSON_CONNECTION
61436 /* Next array element. */
61437 field_addr.sub_location->number = i;
61438#endif /* FREECIV_JSON_CONNECTION */
61439
61440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
61441 }
61442
61443#ifdef FREECIV_JSON_CONNECTION
61444 /* Exit array. */
61445 FC_FREE(field_addr.sub_location);
61446#endif /* FREECIV_JSON_CONNECTION */
61447 }
61448
61449 if (e) {
61450 log_packet_detailed("'groups' field error detected");
61451 }
61452
61453#ifdef FREECIV_JSON_CONNECTION
61454 field_addr.name = "init_government_id";
61455#endif /* FREECIV_JSON_CONNECTION */
61456 e = 0;
61457
61458 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
61459
61460 if (e) {
61461 log_packet_detailed("'init_government_id' field error detected");
61462 }
61463
61464#ifdef FREECIV_JSON_CONNECTION
61465 field_addr.name = "init_techs_count";
61466#endif /* FREECIV_JSON_CONNECTION */
61467 e = 0;
61468
61469 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
61470
61471 if (e) {
61472 log_packet_detailed("'init_techs_count' field error detected");
61473 }
61474
61475#ifdef FREECIV_JSON_CONNECTION
61476 field_addr.name = "init_techs";
61477#endif /* FREECIV_JSON_CONNECTION */
61478 e = 0;
61479
61480 {
61481 int i;
61482
61483#ifdef FREECIV_JSON_CONNECTION
61484 /* Create the array. */
61485 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
61486
61487 /* Enter array. */
61488 field_addr.sub_location = plocation_elem_new(0);
61489#endif /* FREECIV_JSON_CONNECTION */
61490
61491 for (i = 0; i < real_packet->init_techs_count; i++) {
61492#ifdef FREECIV_JSON_CONNECTION
61493 /* Next array element. */
61494 field_addr.sub_location->number = i;
61495#endif /* FREECIV_JSON_CONNECTION */
61496
61497 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
61498 }
61499
61500#ifdef FREECIV_JSON_CONNECTION
61501 /* Exit array. */
61502 FC_FREE(field_addr.sub_location);
61503#endif /* FREECIV_JSON_CONNECTION */
61504 }
61505
61506 if (e) {
61507 log_packet_detailed("'init_techs' field error detected");
61508 }
61509
61510#ifdef FREECIV_JSON_CONNECTION
61511 field_addr.name = "init_units_count";
61512#endif /* FREECIV_JSON_CONNECTION */
61513 e = 0;
61514
61515 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
61516
61517 if (e) {
61518 log_packet_detailed("'init_units_count' field error detected");
61519 }
61520
61521#ifdef FREECIV_JSON_CONNECTION
61522 field_addr.name = "init_units";
61523#endif /* FREECIV_JSON_CONNECTION */
61524 e = 0;
61525
61526 {
61527 int i;
61528
61529#ifdef FREECIV_JSON_CONNECTION
61530 /* Create the array. */
61531 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
61532
61533 /* Enter array. */
61534 field_addr.sub_location = plocation_elem_new(0);
61535#endif /* FREECIV_JSON_CONNECTION */
61536
61537 for (i = 0; i < real_packet->init_units_count; i++) {
61538#ifdef FREECIV_JSON_CONNECTION
61539 /* Next array element. */
61540 field_addr.sub_location->number = i;
61541#endif /* FREECIV_JSON_CONNECTION */
61542
61543 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
61544 }
61545
61546#ifdef FREECIV_JSON_CONNECTION
61547 /* Exit array. */
61548 FC_FREE(field_addr.sub_location);
61549#endif /* FREECIV_JSON_CONNECTION */
61550 }
61551
61552 if (e) {
61553 log_packet_detailed("'init_units' field error detected");
61554 }
61555
61556#ifdef FREECIV_JSON_CONNECTION
61557 field_addr.name = "init_buildings_count";
61558#endif /* FREECIV_JSON_CONNECTION */
61559 e = 0;
61560
61561 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
61562
61563 if (e) {
61564 log_packet_detailed("'init_buildings_count' field error detected");
61565 }
61566
61567#ifdef FREECIV_JSON_CONNECTION
61568 field_addr.name = "init_buildings";
61569#endif /* FREECIV_JSON_CONNECTION */
61570 e = 0;
61571
61572 {
61573 int i;
61574
61575#ifdef FREECIV_JSON_CONNECTION
61576 /* Create the array. */
61577 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
61578
61579 /* Enter array. */
61580 field_addr.sub_location = plocation_elem_new(0);
61581#endif /* FREECIV_JSON_CONNECTION */
61582
61583 for (i = 0; i < real_packet->init_buildings_count; i++) {
61584#ifdef FREECIV_JSON_CONNECTION
61585 /* Next array element. */
61586 field_addr.sub_location->number = i;
61587#endif /* FREECIV_JSON_CONNECTION */
61588
61589 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
61590 }
61591
61592#ifdef FREECIV_JSON_CONNECTION
61593 /* Exit array. */
61594 FC_FREE(field_addr.sub_location);
61595#endif /* FREECIV_JSON_CONNECTION */
61596 }
61597
61598 if (e) {
61599 log_packet_detailed("'init_buildings' field error detected");
61600 }
61601#endif /* FREECIV_DELTA_PROTOCOL */
61602
61604}
61605
61607{
61608 if (!pc->used) {
61609 log_error("WARNING: trying to send data to the closed connection %s",
61611 return -1;
61612 }
61613 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION].packet != nullptr, -1,
61614 "Handler for PACKET_RULESET_NATION not installed");
61615 return pc->phs.handlers->send[PACKET_RULESET_NATION].packet(pc, packet);
61616}
61617
61618void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
61619{
61620 conn_list_iterate(dest, pconn) {
61623}
61624
61626{
61627 memset(packet, 0, sizeof(*packet));
61628}
61629
61630#define free_packet_nation_availability(_packet) (void) 0
61631#define destroy_packet_nation_availability free
61632
61633#ifdef FREECIV_DELTA_PROTOCOL
61634#define hash_packet_nation_availability_100 hash_const
61635#define cmp_packet_nation_availability_100 cmp_const
61637#endif /* FREECIV_DELTA_PROTOCOL */
61638
61640{
61641#define FREE_PACKET_STRUCT(_packet) free_packet_nation_availability(_packet)
61643
61644#ifdef FREECIV_JSON_CONNECTION
61645 struct plocation field_addr;
61646 {
61647 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61650 }
61651#endif /* FREECIV_JSON_CONNECTION */
61652
61653 log_packet_detailed("packet_nation_availability_100: got info about ()");
61654
61655#ifdef FREECIV_DELTA_PROTOCOL
61658 struct genhash **hash = pc->phs.received + PACKET_NATION_AVAILABILITY;
61659
61660 if (nullptr == *hash) {
61662 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
61663 }
61664
61665 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
61666 *real_packet = *old;
61667 } else {
61668 /* packet is already initialized empty */
61669 log_packet_detailed(" no old info");
61670 }
61671
61672#ifdef FREECIV_JSON_CONNECTION
61673 field_addr.name = "fields";
61674#endif /* FREECIV_JSON_CONNECTION */
61675 DIO_BV_GET(&din, &field_addr, fields);
61676
61677 if (BV_ISSET(fields, 0)) {
61678 log_packet_detailed(" got field 'ncount'");
61679
61680#ifdef FREECIV_JSON_CONNECTION
61681 field_addr.name = "ncount";
61682#endif /* FREECIV_JSON_CONNECTION */
61683
61684 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
61686 }
61687 }
61688
61689 if (BV_ISSET(fields, 1)) {
61690 log_packet_detailed(" got field 'is_pickable'");
61691
61692#ifdef FREECIV_JSON_CONNECTION
61693 field_addr.name = "is_pickable";
61694#endif /* FREECIV_JSON_CONNECTION */
61695
61696 {
61697 int i;
61698
61699 if (real_packet->ncount > MAX_NUM_NATIONS) {
61700 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
61701 }
61702
61703#ifdef FREECIV_JSON_CONNECTION
61704 /* Enter array. */
61705 field_addr.sub_location = plocation_elem_new(0);
61706#endif /* FREECIV_JSON_CONNECTION */
61707
61708 for (i = 0; i < real_packet->ncount; i++) {
61709#ifdef FREECIV_JSON_CONNECTION
61710 /* Next array element */
61711 field_addr.sub_location->number = i;
61712#endif /* FREECIV_JSON_CONNECTION */
61713
61714 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
61715 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
61716 }
61717 }
61718
61719#ifdef FREECIV_JSON_CONNECTION
61720 /* Exit array. */
61721 FC_FREE(field_addr.sub_location);
61722#endif /* FREECIV_JSON_CONNECTION */
61723 }
61724 }
61725
61726 real_packet->nationset_change = BV_ISSET(fields, 2);
61727
61728 if (nullptr == old) {
61729 old = fc_malloc(sizeof(*old));
61731 *old = *real_packet;
61733 } else {
61734 *old = *real_packet;
61735 }
61736
61737#else /* FREECIV_DELTA_PROTOCOL */
61738#ifdef FREECIV_JSON_CONNECTION
61739 field_addr.name = "ncount";
61740#endif /* FREECIV_JSON_CONNECTION */
61741
61742 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
61744 }
61745
61746#ifdef FREECIV_JSON_CONNECTION
61747 field_addr.name = "is_pickable";
61748#endif /* FREECIV_JSON_CONNECTION */
61749
61750 {
61751 int i;
61752
61753 if (real_packet->ncount > MAX_NUM_NATIONS) {
61754 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": array truncated");
61755 }
61756
61757#ifdef FREECIV_JSON_CONNECTION
61758 /* Enter array. */
61759 field_addr.sub_location = plocation_elem_new(0);
61760#endif /* FREECIV_JSON_CONNECTION */
61761
61762 for (i = 0; i < real_packet->ncount; i++) {
61763#ifdef FREECIV_JSON_CONNECTION
61764 /* Next array element */
61765 field_addr.sub_location->number = i;
61766#endif /* FREECIV_JSON_CONNECTION */
61767
61768 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
61769 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
61770 }
61771 }
61772
61773#ifdef FREECIV_JSON_CONNECTION
61774 /* Exit array. */
61775 FC_FREE(field_addr.sub_location);
61776#endif /* FREECIV_JSON_CONNECTION */
61777 }
61778
61779#ifdef FREECIV_JSON_CONNECTION
61780 field_addr.name = "nationset_change";
61781#endif /* FREECIV_JSON_CONNECTION */
61782
61783 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nationset_change)) {
61784 RECEIVE_PACKET_FIELD_ERROR(nationset_change);
61785 }
61786#endif /* FREECIV_DELTA_PROTOCOL */
61787
61789#undef FREE_PACKET_STRUCT
61790}
61791
61793{
61794 const struct packet_nation_availability *real_packet = packet;
61795 int e;
61797
61798 log_packet_detailed("packet_nation_availability_100: sending info about ()");
61799
61800#ifdef FREECIV_DELTA_PROTOCOL
61803 bool differ;
61804 struct genhash **hash = pc->phs.sent + PACKET_NATION_AVAILABILITY;
61805
61806 if (nullptr == *hash) {
61808 nullptr, nullptr, nullptr, destroy_packet_nation_availability);
61809 }
61810 BV_CLR_ALL(fields);
61811
61812 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
61813 old = fc_malloc(sizeof(*old));
61814 /* temporary bitcopy just to insert correctly */
61815 *old = *real_packet;
61818 }
61819
61820 differ = (old->ncount != real_packet->ncount);
61821 if (differ) {
61822 BV_SET(fields, 0);
61823 }
61824
61825 differ = (old->ncount != real_packet->ncount);
61826 if (!differ) {
61827 int i;
61828
61829 for (i = 0; i < old->ncount; i++) {
61830 differ = (old->is_pickable[i] != real_packet->is_pickable[i]);
61831 if (differ) {
61832 break;
61833 }
61834 }
61835 }
61836 if (differ) {
61837 BV_SET(fields, 1);
61838 }
61839
61840 /* folded into head */
61841 if (real_packet->nationset_change) {
61842 BV_SET(fields, 2);
61843 }
61844#endif /* FREECIV_DELTA_PROTOCOL */
61845
61846#ifdef FREECIV_JSON_CONNECTION
61847 struct plocation field_addr;
61848 {
61849 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
61852 }
61853#endif /* FREECIV_JSON_CONNECTION */
61854
61855#ifdef FREECIV_DELTA_PROTOCOL
61856#ifdef FREECIV_JSON_CONNECTION
61857 field_addr.name = "fields";
61858#endif /* FREECIV_JSON_CONNECTION */
61859 e = 0;
61860 e |= DIO_BV_PUT(&dout, &field_addr, fields);
61861 if (e) {
61862 log_packet_detailed("fields bitvector error detected");
61863 }
61864
61865 if (BV_ISSET(fields, 0)) {
61866 log_packet_detailed(" field 'ncount' has changed");
61867
61868#ifdef FREECIV_JSON_CONNECTION
61869 field_addr.name = "ncount";
61870#endif /* FREECIV_JSON_CONNECTION */
61871 e = 0;
61872
61873 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
61874
61875 if (e) {
61876 log_packet_detailed("'ncount' field error detected");
61877 }
61878 }
61879
61880 if (BV_ISSET(fields, 1)) {
61881 log_packet_detailed(" field 'is_pickable' has changed");
61882
61883#ifdef FREECIV_JSON_CONNECTION
61884 field_addr.name = "is_pickable";
61885#endif /* FREECIV_JSON_CONNECTION */
61886 e = 0;
61887
61888 {
61889 int i;
61890
61891#ifdef FREECIV_JSON_CONNECTION
61892 /* Create the array. */
61893 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
61894
61895 /* Enter array. */
61896 field_addr.sub_location = plocation_elem_new(0);
61897#endif /* FREECIV_JSON_CONNECTION */
61898
61899 for (i = 0; i < real_packet->ncount; i++) {
61900#ifdef FREECIV_JSON_CONNECTION
61901 /* Next array element. */
61902 field_addr.sub_location->number = i;
61903#endif /* FREECIV_JSON_CONNECTION */
61904
61905 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
61906 }
61907
61908#ifdef FREECIV_JSON_CONNECTION
61909 /* Exit array. */
61910 FC_FREE(field_addr.sub_location);
61911#endif /* FREECIV_JSON_CONNECTION */
61912 }
61913
61914 if (e) {
61915 log_packet_detailed("'is_pickable' field error detected");
61916 }
61917 }
61918
61919 /* field 2 is folded into the header */
61920
61921 *old = *real_packet;
61922
61923#else /* FREECIV_DELTA_PROTOCOL */
61924#ifdef FREECIV_JSON_CONNECTION
61925 field_addr.name = "ncount";
61926#endif /* FREECIV_JSON_CONNECTION */
61927 e = 0;
61928
61929 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
61930
61931 if (e) {
61932 log_packet_detailed("'ncount' field error detected");
61933 }
61934
61935#ifdef FREECIV_JSON_CONNECTION
61936 field_addr.name = "is_pickable";
61937#endif /* FREECIV_JSON_CONNECTION */
61938 e = 0;
61939
61940 {
61941 int i;
61942
61943#ifdef FREECIV_JSON_CONNECTION
61944 /* Create the array. */
61945 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
61946
61947 /* Enter array. */
61948 field_addr.sub_location = plocation_elem_new(0);
61949#endif /* FREECIV_JSON_CONNECTION */
61950
61951 for (i = 0; i < real_packet->ncount; i++) {
61952#ifdef FREECIV_JSON_CONNECTION
61953 /* Next array element. */
61954 field_addr.sub_location->number = i;
61955#endif /* FREECIV_JSON_CONNECTION */
61956
61957 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
61958 }
61959
61960#ifdef FREECIV_JSON_CONNECTION
61961 /* Exit array. */
61962 FC_FREE(field_addr.sub_location);
61963#endif /* FREECIV_JSON_CONNECTION */
61964 }
61965
61966 if (e) {
61967 log_packet_detailed("'is_pickable' field error detected");
61968 }
61969
61970#ifdef FREECIV_JSON_CONNECTION
61971 field_addr.name = "nationset_change";
61972#endif /* FREECIV_JSON_CONNECTION */
61973 e = 0;
61974
61975 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nationset_change);
61976
61977 if (e) {
61978 log_packet_detailed("'nationset_change' field error detected");
61979 }
61980#endif /* FREECIV_DELTA_PROTOCOL */
61981
61983}
61984
61986{
61987 if (!pc->used) {
61988 log_error("WARNING: trying to send data to the closed connection %s",
61990 return -1;
61991 }
61992 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet != nullptr, -1,
61993 "Handler for PACKET_NATION_AVAILABILITY not installed");
61994 return pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet(pc, packet);
61995}
61996
61998{
61999 conn_list_iterate(dest, pconn) {
62002}
62003
62004static inline void init_packet_ruleset_style(struct packet_ruleset_style *packet)
62005{
62006 memset(packet, 0, sizeof(*packet));
62007}
62008
62009#define free_packet_ruleset_style(_packet) (void) 0
62010#define destroy_packet_ruleset_style free
62011
62012#ifdef FREECIV_DELTA_PROTOCOL
62013#define hash_packet_ruleset_style_100 hash_const
62014#define cmp_packet_ruleset_style_100 cmp_const
62016#endif /* FREECIV_DELTA_PROTOCOL */
62017
62019{
62020#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_style(_packet)
62022
62023#ifdef FREECIV_JSON_CONNECTION
62024 struct plocation field_addr;
62025 {
62026 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62029 }
62030#endif /* FREECIV_JSON_CONNECTION */
62031
62032 log_packet_detailed("packet_ruleset_style_100: got info about ()");
62033
62034#ifdef FREECIV_DELTA_PROTOCOL
62036 struct packet_ruleset_style *old;
62037 struct genhash **hash = pc->phs.received + PACKET_RULESET_STYLE;
62038
62039 if (nullptr == *hash) {
62041 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
62042 }
62043
62044 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62045 *real_packet = *old;
62046 } else {
62047 /* packet is already initialized empty */
62048 log_packet_detailed(" no old info");
62049 }
62050
62051#ifdef FREECIV_JSON_CONNECTION
62052 field_addr.name = "fields";
62053#endif /* FREECIV_JSON_CONNECTION */
62054 DIO_BV_GET(&din, &field_addr, fields);
62055
62056 if (BV_ISSET(fields, 0)) {
62057 log_packet_detailed(" got field 'id'");
62058
62059#ifdef FREECIV_JSON_CONNECTION
62060 field_addr.name = "id";
62061#endif /* FREECIV_JSON_CONNECTION */
62062
62063 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62065 }
62066 }
62067
62068 if (BV_ISSET(fields, 1)) {
62069 log_packet_detailed(" got field 'name'");
62070
62071#ifdef FREECIV_JSON_CONNECTION
62072 field_addr.name = "name";
62073#endif /* FREECIV_JSON_CONNECTION */
62074
62075 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62077 }
62078 }
62079
62080 if (BV_ISSET(fields, 2)) {
62081 log_packet_detailed(" got field 'rule_name'");
62082
62083#ifdef FREECIV_JSON_CONNECTION
62084 field_addr.name = "rule_name";
62085#endif /* FREECIV_JSON_CONNECTION */
62086
62087 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62088 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62089 }
62090 }
62091
62092 if (nullptr == old) {
62093 old = fc_malloc(sizeof(*old));
62095 *old = *real_packet;
62097 } else {
62098 *old = *real_packet;
62099 }
62100
62101#else /* FREECIV_DELTA_PROTOCOL */
62102#ifdef FREECIV_JSON_CONNECTION
62103 field_addr.name = "id";
62104#endif /* FREECIV_JSON_CONNECTION */
62105
62106 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62108 }
62109
62110#ifdef FREECIV_JSON_CONNECTION
62111 field_addr.name = "name";
62112#endif /* FREECIV_JSON_CONNECTION */
62113
62114 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62116 }
62117
62118#ifdef FREECIV_JSON_CONNECTION
62119 field_addr.name = "rule_name";
62120#endif /* FREECIV_JSON_CONNECTION */
62121
62122 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62123 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62124 }
62125#endif /* FREECIV_DELTA_PROTOCOL */
62126
62128#undef FREE_PACKET_STRUCT
62129}
62130
62131static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
62132{
62133 const struct packet_ruleset_style *real_packet = packet;
62134 int e;
62136
62137 log_packet_detailed("packet_ruleset_style_100: sending info about ()");
62138
62139#ifdef FREECIV_DELTA_PROTOCOL
62141 struct packet_ruleset_style *old;
62142 bool differ;
62143 struct genhash **hash = pc->phs.sent + PACKET_RULESET_STYLE;
62144
62145 if (nullptr == *hash) {
62147 nullptr, nullptr, nullptr, destroy_packet_ruleset_style);
62148 }
62149 BV_CLR_ALL(fields);
62150
62151 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62152 old = fc_malloc(sizeof(*old));
62153 /* temporary bitcopy just to insert correctly */
62154 *old = *real_packet;
62157 }
62158
62159 differ = (old->id != real_packet->id);
62160 if (differ) {
62161 BV_SET(fields, 0);
62162 }
62163
62164 differ = (strcmp(old->name, real_packet->name) != 0);
62165 if (differ) {
62166 BV_SET(fields, 1);
62167 }
62168
62169 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62170 if (differ) {
62171 BV_SET(fields, 2);
62172 }
62173#endif /* FREECIV_DELTA_PROTOCOL */
62174
62175#ifdef FREECIV_JSON_CONNECTION
62176 struct plocation field_addr;
62177 {
62178 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62181 }
62182#endif /* FREECIV_JSON_CONNECTION */
62183
62184#ifdef FREECIV_DELTA_PROTOCOL
62185#ifdef FREECIV_JSON_CONNECTION
62186 field_addr.name = "fields";
62187#endif /* FREECIV_JSON_CONNECTION */
62188 e = 0;
62189 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62190 if (e) {
62191 log_packet_detailed("fields bitvector error detected");
62192 }
62193
62194 if (BV_ISSET(fields, 0)) {
62195 log_packet_detailed(" field 'id' has changed");
62196
62197#ifdef FREECIV_JSON_CONNECTION
62198 field_addr.name = "id";
62199#endif /* FREECIV_JSON_CONNECTION */
62200 e = 0;
62201
62202 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62203
62204 if (e) {
62205 log_packet_detailed("'id' field error detected");
62206 }
62207 }
62208
62209 if (BV_ISSET(fields, 1)) {
62210 log_packet_detailed(" field 'name' has changed");
62211
62212#ifdef FREECIV_JSON_CONNECTION
62213 field_addr.name = "name";
62214#endif /* FREECIV_JSON_CONNECTION */
62215 e = 0;
62216
62217 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62218
62219 if (e) {
62220 log_packet_detailed("'name' field error detected");
62221 }
62222 }
62223
62224 if (BV_ISSET(fields, 2)) {
62225 log_packet_detailed(" field 'rule_name' has changed");
62226
62227#ifdef FREECIV_JSON_CONNECTION
62228 field_addr.name = "rule_name";
62229#endif /* FREECIV_JSON_CONNECTION */
62230 e = 0;
62231
62232 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62233
62234 if (e) {
62235 log_packet_detailed("'rule_name' field error detected");
62236 }
62237 }
62238
62239 *old = *real_packet;
62240
62241#else /* FREECIV_DELTA_PROTOCOL */
62242#ifdef FREECIV_JSON_CONNECTION
62243 field_addr.name = "id";
62244#endif /* FREECIV_JSON_CONNECTION */
62245 e = 0;
62246
62247 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62248
62249 if (e) {
62250 log_packet_detailed("'id' field error detected");
62251 }
62252
62253#ifdef FREECIV_JSON_CONNECTION
62254 field_addr.name = "name";
62255#endif /* FREECIV_JSON_CONNECTION */
62256 e = 0;
62257
62258 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62259
62260 if (e) {
62261 log_packet_detailed("'name' field error detected");
62262 }
62263
62264#ifdef FREECIV_JSON_CONNECTION
62265 field_addr.name = "rule_name";
62266#endif /* FREECIV_JSON_CONNECTION */
62267 e = 0;
62268
62269 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62270
62271 if (e) {
62272 log_packet_detailed("'rule_name' field error detected");
62273 }
62274#endif /* FREECIV_DELTA_PROTOCOL */
62275
62277}
62278
62280{
62281 if (!pc->used) {
62282 log_error("WARNING: trying to send data to the closed connection %s",
62284 return -1;
62285 }
62286 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_STYLE].packet != nullptr, -1,
62287 "Handler for PACKET_RULESET_STYLE not installed");
62288 return pc->phs.handlers->send[PACKET_RULESET_STYLE].packet(pc, packet);
62289}
62290
62291void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
62292{
62293 conn_list_iterate(dest, pconn) {
62296}
62297
62298static inline void init_packet_ruleset_city(struct packet_ruleset_city *packet)
62299{
62300 memset(packet, 0, sizeof(*packet));
62301
62302 requirement_vector_init(&packet->reqs);
62303}
62304
62305static inline void free_packet_ruleset_city(struct packet_ruleset_city *packet)
62306{
62307 requirement_vector_free(&packet->reqs);
62308}
62309
62310static inline void destroy_packet_ruleset_city(void *packet)
62311{
62313 free(packet);
62314}
62315
62316#ifdef FREECIV_DELTA_PROTOCOL
62317#define hash_packet_ruleset_city_100 hash_const
62318#define cmp_packet_ruleset_city_100 cmp_const
62320#endif /* FREECIV_DELTA_PROTOCOL */
62321
62323{
62324#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_city(_packet)
62326
62327#ifdef FREECIV_JSON_CONNECTION
62328 struct plocation field_addr;
62329 {
62330 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62333 }
62334#endif /* FREECIV_JSON_CONNECTION */
62335
62336 log_packet_detailed("packet_ruleset_city_100: got info about ()");
62337
62338#ifdef FREECIV_DELTA_PROTOCOL
62340 struct packet_ruleset_city *old;
62341 struct genhash **hash = pc->phs.received + PACKET_RULESET_CITY;
62342
62343 if (nullptr == *hash) {
62345 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62346 }
62347
62348 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62349 real_packet->style_id = old->style_id;
62350 sz_strlcpy(real_packet->name, old->name);
62351 sz_strlcpy(real_packet->rule_name, old->rule_name);
62352 sz_strlcpy(real_packet->citizens_graphic, old->citizens_graphic);
62353 requirement_vector_copy(&real_packet->reqs, &old->reqs);
62354 sz_strlcpy(real_packet->graphic, old->graphic);
62355 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
62356 } else {
62357 /* packet is already initialized empty */
62358 log_packet_detailed(" no old info");
62359 }
62360
62361#ifdef FREECIV_JSON_CONNECTION
62362 field_addr.name = "fields";
62363#endif /* FREECIV_JSON_CONNECTION */
62364 DIO_BV_GET(&din, &field_addr, fields);
62365
62366 if (BV_ISSET(fields, 0)) {
62367 log_packet_detailed(" got field 'style_id'");
62368
62369#ifdef FREECIV_JSON_CONNECTION
62370 field_addr.name = "style_id";
62371#endif /* FREECIV_JSON_CONNECTION */
62372
62373 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62375 }
62376 }
62377
62378 if (BV_ISSET(fields, 1)) {
62379 log_packet_detailed(" got field 'name'");
62380
62381#ifdef FREECIV_JSON_CONNECTION
62382 field_addr.name = "name";
62383#endif /* FREECIV_JSON_CONNECTION */
62384
62385 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62387 }
62388 }
62389
62390 if (BV_ISSET(fields, 2)) {
62391 log_packet_detailed(" got field 'rule_name'");
62392
62393#ifdef FREECIV_JSON_CONNECTION
62394 field_addr.name = "rule_name";
62395#endif /* FREECIV_JSON_CONNECTION */
62396
62397 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62398 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62399 }
62400 }
62401
62402 if (BV_ISSET(fields, 3)) {
62403 log_packet_detailed(" got field 'citizens_graphic'");
62404
62405#ifdef FREECIV_JSON_CONNECTION
62406 field_addr.name = "citizens_graphic";
62407#endif /* FREECIV_JSON_CONNECTION */
62408
62409 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62410 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62411 }
62412 }
62413
62414 if (BV_ISSET(fields, 4)) {
62415 log_packet_detailed(" got field 'reqs'");
62416
62417#ifdef FREECIV_JSON_CONNECTION
62418 field_addr.name = "reqs";
62419#endif /* FREECIV_JSON_CONNECTION */
62420
62421 {
62422 int i;
62423
62424 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62426 }
62428
62429#ifdef FREECIV_JSON_CONNECTION
62430 /* Enter array. */
62431 field_addr.sub_location = plocation_elem_new(0);
62432#endif /* FREECIV_JSON_CONNECTION */
62433
62434 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62435#ifdef FREECIV_JSON_CONNECTION
62436 /* Next array element */
62437 field_addr.sub_location->number = i;
62438#endif /* FREECIV_JSON_CONNECTION */
62439
62440 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62442 }
62443 }
62444
62445#ifdef FREECIV_JSON_CONNECTION
62446 /* Exit array. */
62447 FC_FREE(field_addr.sub_location);
62448#endif /* FREECIV_JSON_CONNECTION */
62449 }
62450 }
62451
62452 if (BV_ISSET(fields, 5)) {
62453 log_packet_detailed(" got field 'graphic'");
62454
62455#ifdef FREECIV_JSON_CONNECTION
62456 field_addr.name = "graphic";
62457#endif /* FREECIV_JSON_CONNECTION */
62458
62459 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62461 }
62462 }
62463
62464 if (BV_ISSET(fields, 6)) {
62465 log_packet_detailed(" got field 'graphic_alt'");
62466
62467#ifdef FREECIV_JSON_CONNECTION
62468 field_addr.name = "graphic_alt";
62469#endif /* FREECIV_JSON_CONNECTION */
62470
62471 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62472 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62473 }
62474 }
62475
62476 if (nullptr == old) {
62477 old = fc_malloc(sizeof(*old));
62479 old->style_id = real_packet->style_id;
62480 sz_strlcpy(old->name, real_packet->name);
62481 sz_strlcpy(old->rule_name, real_packet->rule_name);
62482 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62483 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62484 sz_strlcpy(old->graphic, real_packet->graphic);
62485 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62487 } else {
62488 old->style_id = real_packet->style_id;
62489 sz_strlcpy(old->name, real_packet->name);
62490 sz_strlcpy(old->rule_name, real_packet->rule_name);
62491 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62492 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62493 sz_strlcpy(old->graphic, real_packet->graphic);
62494 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62495 }
62496
62497#else /* FREECIV_DELTA_PROTOCOL */
62498#ifdef FREECIV_JSON_CONNECTION
62499 field_addr.name = "style_id";
62500#endif /* FREECIV_JSON_CONNECTION */
62501
62502 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
62504 }
62505
62506#ifdef FREECIV_JSON_CONNECTION
62507 field_addr.name = "name";
62508#endif /* FREECIV_JSON_CONNECTION */
62509
62510 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62512 }
62513
62514#ifdef FREECIV_JSON_CONNECTION
62515 field_addr.name = "rule_name";
62516#endif /* FREECIV_JSON_CONNECTION */
62517
62518 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62519 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62520 }
62521
62522#ifdef FREECIV_JSON_CONNECTION
62523 field_addr.name = "citizens_graphic";
62524#endif /* FREECIV_JSON_CONNECTION */
62525
62526 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
62527 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
62528 }
62529
62530#ifdef FREECIV_JSON_CONNECTION
62531 field_addr.name = "reqs";
62532#endif /* FREECIV_JSON_CONNECTION */
62533
62534 {
62535 int i;
62536
62537 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
62539 }
62541
62542#ifdef FREECIV_JSON_CONNECTION
62543 /* Enter array. */
62544 field_addr.sub_location = plocation_elem_new(0);
62545#endif /* FREECIV_JSON_CONNECTION */
62546
62547 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62548#ifdef FREECIV_JSON_CONNECTION
62549 /* Next array element */
62550 field_addr.sub_location->number = i;
62551#endif /* FREECIV_JSON_CONNECTION */
62552
62553 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
62555 }
62556 }
62557
62558#ifdef FREECIV_JSON_CONNECTION
62559 /* Exit array. */
62560 FC_FREE(field_addr.sub_location);
62561#endif /* FREECIV_JSON_CONNECTION */
62562 }
62563
62564#ifdef FREECIV_JSON_CONNECTION
62565 field_addr.name = "graphic";
62566#endif /* FREECIV_JSON_CONNECTION */
62567
62568 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
62570 }
62571
62572#ifdef FREECIV_JSON_CONNECTION
62573 field_addr.name = "graphic_alt";
62574#endif /* FREECIV_JSON_CONNECTION */
62575
62576 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
62577 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
62578 }
62579#endif /* FREECIV_DELTA_PROTOCOL */
62580
62582#undef FREE_PACKET_STRUCT
62583}
62584
62585static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
62586{
62587 const struct packet_ruleset_city *real_packet = packet;
62588 int e;
62590
62591 log_packet_detailed("packet_ruleset_city_100: sending info about ()");
62592
62593#ifdef FREECIV_DELTA_PROTOCOL
62595 struct packet_ruleset_city *old;
62596 bool differ;
62597 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CITY;
62598
62599 if (nullptr == *hash) {
62601 nullptr, nullptr, nullptr, destroy_packet_ruleset_city);
62602 }
62603 BV_CLR_ALL(fields);
62604
62605 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62606 old = fc_malloc(sizeof(*old));
62607 /* temporary bitcopy just to insert correctly */
62608 *old = *real_packet;
62611 }
62612
62613 differ = (old->style_id != real_packet->style_id);
62614 if (differ) {
62615 BV_SET(fields, 0);
62616 }
62617
62618 differ = (strcmp(old->name, real_packet->name) != 0);
62619 if (differ) {
62620 BV_SET(fields, 1);
62621 }
62622
62623 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62624 if (differ) {
62625 BV_SET(fields, 2);
62626 }
62627
62628 differ = (strcmp(old->citizens_graphic, real_packet->citizens_graphic) != 0);
62629 if (differ) {
62630 BV_SET(fields, 3);
62631 }
62632
62634 if (!differ) {
62635 int i;
62636
62637 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
62638 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
62639 if (differ) {
62640 break;
62641 }
62642 }
62643 }
62644 if (differ) {
62645 BV_SET(fields, 4);
62646 }
62647
62648 differ = (strcmp(old->graphic, real_packet->graphic) != 0);
62649 if (differ) {
62650 BV_SET(fields, 5);
62651 }
62652
62653 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
62654 if (differ) {
62655 BV_SET(fields, 6);
62656 }
62657#endif /* FREECIV_DELTA_PROTOCOL */
62658
62659#ifdef FREECIV_JSON_CONNECTION
62660 struct plocation field_addr;
62661 {
62662 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62665 }
62666#endif /* FREECIV_JSON_CONNECTION */
62667
62668#ifdef FREECIV_DELTA_PROTOCOL
62669#ifdef FREECIV_JSON_CONNECTION
62670 field_addr.name = "fields";
62671#endif /* FREECIV_JSON_CONNECTION */
62672 e = 0;
62673 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62674 if (e) {
62675 log_packet_detailed("fields bitvector error detected");
62676 }
62677
62678 if (BV_ISSET(fields, 0)) {
62679 log_packet_detailed(" field 'style_id' has changed");
62680
62681#ifdef FREECIV_JSON_CONNECTION
62682 field_addr.name = "style_id";
62683#endif /* FREECIV_JSON_CONNECTION */
62684 e = 0;
62685
62686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
62687
62688 if (e) {
62689 log_packet_detailed("'style_id' field error detected");
62690 }
62691 }
62692
62693 if (BV_ISSET(fields, 1)) {
62694 log_packet_detailed(" field 'name' has changed");
62695
62696#ifdef FREECIV_JSON_CONNECTION
62697 field_addr.name = "name";
62698#endif /* FREECIV_JSON_CONNECTION */
62699 e = 0;
62700
62701 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62702
62703 if (e) {
62704 log_packet_detailed("'name' field error detected");
62705 }
62706 }
62707
62708 if (BV_ISSET(fields, 2)) {
62709 log_packet_detailed(" field 'rule_name' has changed");
62710
62711#ifdef FREECIV_JSON_CONNECTION
62712 field_addr.name = "rule_name";
62713#endif /* FREECIV_JSON_CONNECTION */
62714 e = 0;
62715
62716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62717
62718 if (e) {
62719 log_packet_detailed("'rule_name' field error detected");
62720 }
62721 }
62722
62723 if (BV_ISSET(fields, 3)) {
62724 log_packet_detailed(" field 'citizens_graphic' has changed");
62725
62726#ifdef FREECIV_JSON_CONNECTION
62727 field_addr.name = "citizens_graphic";
62728#endif /* FREECIV_JSON_CONNECTION */
62729 e = 0;
62730
62731 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
62732
62733 if (e) {
62734 log_packet_detailed("'citizens_graphic' field error detected");
62735 }
62736 }
62737
62738 if (BV_ISSET(fields, 4)) {
62739 log_packet_detailed(" field 'reqs' has changed");
62740
62741#ifdef FREECIV_JSON_CONNECTION
62742 field_addr.name = "reqs";
62743#endif /* FREECIV_JSON_CONNECTION */
62744 e = 0;
62745
62746 {
62747 int i;
62748
62751
62752#ifdef FREECIV_JSON_CONNECTION
62753 /* Enter array. */
62754 field_addr.sub_location = plocation_elem_new(0);
62755#endif /* FREECIV_JSON_CONNECTION */
62756
62757 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62758#ifdef FREECIV_JSON_CONNECTION
62759 /* Next array element. */
62760 field_addr.sub_location->number = i;
62761#endif /* FREECIV_JSON_CONNECTION */
62762
62763 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
62764 }
62765
62766#ifdef FREECIV_JSON_CONNECTION
62767 /* Exit array. */
62768 FC_FREE(field_addr.sub_location);
62769#endif /* FREECIV_JSON_CONNECTION */
62770 }
62771
62772 if (e) {
62773 log_packet_detailed("'reqs' field error detected");
62774 }
62775 }
62776
62777 if (BV_ISSET(fields, 5)) {
62778 log_packet_detailed(" field 'graphic' has changed");
62779
62780#ifdef FREECIV_JSON_CONNECTION
62781 field_addr.name = "graphic";
62782#endif /* FREECIV_JSON_CONNECTION */
62783 e = 0;
62784
62785 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
62786
62787 if (e) {
62788 log_packet_detailed("'graphic' field error detected");
62789 }
62790 }
62791
62792 if (BV_ISSET(fields, 6)) {
62793 log_packet_detailed(" field 'graphic_alt' has changed");
62794
62795#ifdef FREECIV_JSON_CONNECTION
62796 field_addr.name = "graphic_alt";
62797#endif /* FREECIV_JSON_CONNECTION */
62798 e = 0;
62799
62800 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
62801
62802 if (e) {
62803 log_packet_detailed("'graphic_alt' field error detected");
62804 }
62805 }
62806
62807 old->style_id = real_packet->style_id;
62808 sz_strlcpy(old->name, real_packet->name);
62809 sz_strlcpy(old->rule_name, real_packet->rule_name);
62810 sz_strlcpy(old->citizens_graphic, real_packet->citizens_graphic);
62811 requirement_vector_copy(&old->reqs, &real_packet->reqs);
62812 sz_strlcpy(old->graphic, real_packet->graphic);
62813 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
62814
62815#else /* FREECIV_DELTA_PROTOCOL */
62816#ifdef FREECIV_JSON_CONNECTION
62817 field_addr.name = "style_id";
62818#endif /* FREECIV_JSON_CONNECTION */
62819 e = 0;
62820
62821 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
62822
62823 if (e) {
62824 log_packet_detailed("'style_id' field error detected");
62825 }
62826
62827#ifdef FREECIV_JSON_CONNECTION
62828 field_addr.name = "name";
62829#endif /* FREECIV_JSON_CONNECTION */
62830 e = 0;
62831
62832 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62833
62834 if (e) {
62835 log_packet_detailed("'name' field error detected");
62836 }
62837
62838#ifdef FREECIV_JSON_CONNECTION
62839 field_addr.name = "rule_name";
62840#endif /* FREECIV_JSON_CONNECTION */
62841 e = 0;
62842
62843 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62844
62845 if (e) {
62846 log_packet_detailed("'rule_name' field error detected");
62847 }
62848
62849#ifdef FREECIV_JSON_CONNECTION
62850 field_addr.name = "citizens_graphic";
62851#endif /* FREECIV_JSON_CONNECTION */
62852 e = 0;
62853
62854 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
62855
62856 if (e) {
62857 log_packet_detailed("'citizens_graphic' field error detected");
62858 }
62859
62860#ifdef FREECIV_JSON_CONNECTION
62861 field_addr.name = "reqs";
62862#endif /* FREECIV_JSON_CONNECTION */
62863 e = 0;
62864
62865 {
62866 int i;
62867
62870
62871#ifdef FREECIV_JSON_CONNECTION
62872 /* Enter array. */
62873 field_addr.sub_location = plocation_elem_new(0);
62874#endif /* FREECIV_JSON_CONNECTION */
62875
62876 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
62877#ifdef FREECIV_JSON_CONNECTION
62878 /* Next array element. */
62879 field_addr.sub_location->number = i;
62880#endif /* FREECIV_JSON_CONNECTION */
62881
62882 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
62883 }
62884
62885#ifdef FREECIV_JSON_CONNECTION
62886 /* Exit array. */
62887 FC_FREE(field_addr.sub_location);
62888#endif /* FREECIV_JSON_CONNECTION */
62889 }
62890
62891 if (e) {
62892 log_packet_detailed("'reqs' field error detected");
62893 }
62894
62895#ifdef FREECIV_JSON_CONNECTION
62896 field_addr.name = "graphic";
62897#endif /* FREECIV_JSON_CONNECTION */
62898 e = 0;
62899
62900 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
62901
62902 if (e) {
62903 log_packet_detailed("'graphic' field error detected");
62904 }
62905
62906#ifdef FREECIV_JSON_CONNECTION
62907 field_addr.name = "graphic_alt";
62908#endif /* FREECIV_JSON_CONNECTION */
62909 e = 0;
62910
62911 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
62912
62913 if (e) {
62914 log_packet_detailed("'graphic_alt' field error detected");
62915 }
62916#endif /* FREECIV_DELTA_PROTOCOL */
62917
62919}
62920
62922{
62923 if (!pc->used) {
62924 log_error("WARNING: trying to send data to the closed connection %s",
62926 return -1;
62927 }
62928 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CITY].packet != nullptr, -1,
62929 "Handler for PACKET_RULESET_CITY not installed");
62930 return pc->phs.handlers->send[PACKET_RULESET_CITY].packet(pc, packet);
62931}
62932
62933void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
62934{
62935 conn_list_iterate(dest, pconn) {
62938}
62939
62941{
62942 memset(packet, 0, sizeof(*packet));
62943
62944 requirement_vector_init(&packet->reqs);
62946 packet->helptext = strvec_new();
62947}
62948
62950{
62951 if (packet->helptext) {
62952 strvec_destroy(packet->helptext);
62953 packet->helptext = nullptr;
62954 }
62956 requirement_vector_free(&packet->reqs);
62957}
62958
62959static inline void destroy_packet_ruleset_building(void *packet)
62960{
62962 free(packet);
62963}
62964
62965#ifdef FREECIV_DELTA_PROTOCOL
62966#define hash_packet_ruleset_building_100 hash_const
62967#define cmp_packet_ruleset_building_100 cmp_const
62969#endif /* FREECIV_DELTA_PROTOCOL */
62970
62972{
62973#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_building(_packet)
62975
62976#ifdef FREECIV_JSON_CONNECTION
62977 struct plocation field_addr;
62978 {
62979 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
62982 }
62983#endif /* FREECIV_JSON_CONNECTION */
62984
62985 log_packet_detailed("packet_ruleset_building_100: got info about ()");
62986
62987#ifdef FREECIV_DELTA_PROTOCOL
62990 struct genhash **hash = pc->phs.received + PACKET_RULESET_BUILDING;
62991
62992 if (nullptr == *hash) {
62994 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
62995 }
62996
62997 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62998 real_packet->id = old->id;
62999 real_packet->genus = old->genus;
63000 sz_strlcpy(real_packet->name, old->name);
63001 sz_strlcpy(real_packet->rule_name, old->rule_name);
63002 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
63003 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
63004 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
63005 requirement_vector_copy(&real_packet->reqs, &old->reqs);
63006 requirement_vector_copy(&real_packet->obs_reqs, &old->obs_reqs);
63007 real_packet->build_cost = old->build_cost;
63008 real_packet->upkeep = old->upkeep;
63009 real_packet->sabotage = old->sabotage;
63010 real_packet->flags = old->flags;
63011 sz_strlcpy(real_packet->soundtag, old->soundtag);
63012 sz_strlcpy(real_packet->soundtag_alt, old->soundtag_alt);
63013 sz_strlcpy(real_packet->soundtag_alt2, old->soundtag_alt2);
63014 if (old->helptext) {
63015 strvec_copy(real_packet->helptext, old->helptext);
63016 } else {
63017 strvec_clear(real_packet->helptext);
63018 }
63019 } else {
63020 /* packet is already initialized empty */
63021 log_packet_detailed(" no old info");
63022 }
63023
63024#ifdef FREECIV_JSON_CONNECTION
63025 field_addr.name = "fields";
63026#endif /* FREECIV_JSON_CONNECTION */
63027 DIO_BV_GET(&din, &field_addr, fields);
63028
63029 if (BV_ISSET(fields, 0)) {
63030 log_packet_detailed(" got field 'id'");
63031
63032#ifdef FREECIV_JSON_CONNECTION
63033 field_addr.name = "id";
63034#endif /* FREECIV_JSON_CONNECTION */
63035
63036 {
63037 int readin;
63038
63039 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63041 }
63042 real_packet->id = readin;
63043 }
63044 }
63045
63046 if (BV_ISSET(fields, 1)) {
63047 log_packet_detailed(" got field 'genus'");
63048
63049#ifdef FREECIV_JSON_CONNECTION
63050 field_addr.name = "genus";
63051#endif /* FREECIV_JSON_CONNECTION */
63052
63053 {
63054 int readin;
63055
63056 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63058 }
63059 real_packet->genus = readin;
63060 }
63061 }
63062
63063 if (BV_ISSET(fields, 2)) {
63064 log_packet_detailed(" got field 'name'");
63065
63066#ifdef FREECIV_JSON_CONNECTION
63067 field_addr.name = "name";
63068#endif /* FREECIV_JSON_CONNECTION */
63069
63070 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63072 }
63073 }
63074
63075 if (BV_ISSET(fields, 3)) {
63076 log_packet_detailed(" got field 'rule_name'");
63077
63078#ifdef FREECIV_JSON_CONNECTION
63079 field_addr.name = "rule_name";
63080#endif /* FREECIV_JSON_CONNECTION */
63081
63082 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63083 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63084 }
63085 }
63086
63087 if (BV_ISSET(fields, 4)) {
63088 log_packet_detailed(" got field 'graphic_str'");
63089
63090#ifdef FREECIV_JSON_CONNECTION
63091 field_addr.name = "graphic_str";
63092#endif /* FREECIV_JSON_CONNECTION */
63093
63094 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63095 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63096 }
63097 }
63098
63099 if (BV_ISSET(fields, 5)) {
63100 log_packet_detailed(" got field 'graphic_alt'");
63101
63102#ifdef FREECIV_JSON_CONNECTION
63103 field_addr.name = "graphic_alt";
63104#endif /* FREECIV_JSON_CONNECTION */
63105
63106 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63107 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63108 }
63109 }
63110
63111 if (BV_ISSET(fields, 6)) {
63112 log_packet_detailed(" got field 'graphic_alt2'");
63113
63114#ifdef FREECIV_JSON_CONNECTION
63115 field_addr.name = "graphic_alt2";
63116#endif /* FREECIV_JSON_CONNECTION */
63117
63118 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63119 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63120 }
63121 }
63122
63123 if (BV_ISSET(fields, 7)) {
63124 log_packet_detailed(" got field 'reqs'");
63125
63126#ifdef FREECIV_JSON_CONNECTION
63127 field_addr.name = "reqs";
63128#endif /* FREECIV_JSON_CONNECTION */
63129
63130 {
63131 int i;
63132
63133 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63135 }
63137
63138#ifdef FREECIV_JSON_CONNECTION
63139 /* Enter array. */
63140 field_addr.sub_location = plocation_elem_new(0);
63141#endif /* FREECIV_JSON_CONNECTION */
63142
63143 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63144#ifdef FREECIV_JSON_CONNECTION
63145 /* Next array element */
63146 field_addr.sub_location->number = i;
63147#endif /* FREECIV_JSON_CONNECTION */
63148
63149 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63151 }
63152 }
63153
63154#ifdef FREECIV_JSON_CONNECTION
63155 /* Exit array. */
63156 FC_FREE(field_addr.sub_location);
63157#endif /* FREECIV_JSON_CONNECTION */
63158 }
63159 }
63160
63161 if (BV_ISSET(fields, 8)) {
63162 log_packet_detailed(" got field 'obs_reqs'");
63163
63164#ifdef FREECIV_JSON_CONNECTION
63165 field_addr.name = "obs_reqs";
63166#endif /* FREECIV_JSON_CONNECTION */
63167
63168 {
63169 int i;
63170
63171 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63173 }
63175
63176#ifdef FREECIV_JSON_CONNECTION
63177 /* Enter array. */
63178 field_addr.sub_location = plocation_elem_new(0);
63179#endif /* FREECIV_JSON_CONNECTION */
63180
63181 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63182#ifdef FREECIV_JSON_CONNECTION
63183 /* Next array element */
63184 field_addr.sub_location->number = i;
63185#endif /* FREECIV_JSON_CONNECTION */
63186
63187 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63189 }
63190 }
63191
63192#ifdef FREECIV_JSON_CONNECTION
63193 /* Exit array. */
63194 FC_FREE(field_addr.sub_location);
63195#endif /* FREECIV_JSON_CONNECTION */
63196 }
63197 }
63198
63199 if (BV_ISSET(fields, 9)) {
63200 log_packet_detailed(" got field 'build_cost'");
63201
63202#ifdef FREECIV_JSON_CONNECTION
63203 field_addr.name = "build_cost";
63204#endif /* FREECIV_JSON_CONNECTION */
63205
63206 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63207 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63208 }
63209 }
63210
63211 if (BV_ISSET(fields, 10)) {
63212 log_packet_detailed(" got field 'upkeep'");
63213
63214#ifdef FREECIV_JSON_CONNECTION
63215 field_addr.name = "upkeep";
63216#endif /* FREECIV_JSON_CONNECTION */
63217
63218 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63220 }
63221 }
63222
63223 if (BV_ISSET(fields, 11)) {
63224 log_packet_detailed(" got field 'sabotage'");
63225
63226#ifdef FREECIV_JSON_CONNECTION
63227 field_addr.name = "sabotage";
63228#endif /* FREECIV_JSON_CONNECTION */
63229
63230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63232 }
63233 }
63234
63235 if (BV_ISSET(fields, 12)) {
63236 log_packet_detailed(" got field 'flags'");
63237
63238#ifdef FREECIV_JSON_CONNECTION
63239 field_addr.name = "flags";
63240#endif /* FREECIV_JSON_CONNECTION */
63241
63242 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63244 }
63245 }
63246
63247 if (BV_ISSET(fields, 13)) {
63248 log_packet_detailed(" got field 'soundtag'");
63249
63250#ifdef FREECIV_JSON_CONNECTION
63251 field_addr.name = "soundtag";
63252#endif /* FREECIV_JSON_CONNECTION */
63253
63254 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63256 }
63257 }
63258
63259 if (BV_ISSET(fields, 14)) {
63260 log_packet_detailed(" got field 'soundtag_alt'");
63261
63262#ifdef FREECIV_JSON_CONNECTION
63263 field_addr.name = "soundtag_alt";
63264#endif /* FREECIV_JSON_CONNECTION */
63265
63266 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63267 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63268 }
63269 }
63270
63271 if (BV_ISSET(fields, 15)) {
63272 log_packet_detailed(" got field 'soundtag_alt2'");
63273
63274#ifdef FREECIV_JSON_CONNECTION
63275 field_addr.name = "soundtag_alt2";
63276#endif /* FREECIV_JSON_CONNECTION */
63277
63278 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63279 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63280 }
63281 }
63282
63283 if (BV_ISSET(fields, 16)) {
63284 log_packet_detailed(" got field 'helptext'");
63285
63286#ifdef FREECIV_JSON_CONNECTION
63287 field_addr.name = "helptext";
63288#endif /* FREECIV_JSON_CONNECTION */
63289
63290 {
63291 int i;
63292
63293 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63295 }
63296 strvec_reserve(real_packet->helptext, i);
63297
63298#ifdef FREECIV_JSON_CONNECTION
63299 /* Enter array. */
63300 field_addr.sub_location = plocation_elem_new(0);
63301#endif /* FREECIV_JSON_CONNECTION */
63302
63303 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63304#ifdef FREECIV_JSON_CONNECTION
63305 /* Next array element */
63306 field_addr.sub_location->number = i;
63307#endif /* FREECIV_JSON_CONNECTION */
63308
63309 {
63310 char readin[MAX_LEN_PACKET];
63311
63312 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63313 || !strvec_set(real_packet->helptext, i, readin)) {
63315 }
63316 }
63317 }
63318
63319#ifdef FREECIV_JSON_CONNECTION
63320 /* Exit array. */
63321 FC_FREE(field_addr.sub_location);
63322#endif /* FREECIV_JSON_CONNECTION */
63323 }
63324 }
63325
63326 if (nullptr == old) {
63327 old = fc_malloc(sizeof(*old));
63329 old->id = real_packet->id;
63330 old->genus = real_packet->genus;
63331 sz_strlcpy(old->name, real_packet->name);
63332 sz_strlcpy(old->rule_name, real_packet->rule_name);
63333 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63334 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63335 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63336 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63337 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63338 old->build_cost = real_packet->build_cost;
63339 old->upkeep = real_packet->upkeep;
63340 old->sabotage = real_packet->sabotage;
63341 old->flags = real_packet->flags;
63342 sz_strlcpy(old->soundtag, real_packet->soundtag);
63343 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63344 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63345 if (real_packet->helptext) {
63346 strvec_copy(old->helptext, real_packet->helptext);
63347 } else {
63348 strvec_clear(old->helptext);
63349 }
63351 } else {
63352 old->id = real_packet->id;
63353 old->genus = real_packet->genus;
63354 sz_strlcpy(old->name, real_packet->name);
63355 sz_strlcpy(old->rule_name, real_packet->rule_name);
63356 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
63357 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
63358 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
63359 requirement_vector_copy(&old->reqs, &real_packet->reqs);
63360 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
63361 old->build_cost = real_packet->build_cost;
63362 old->upkeep = real_packet->upkeep;
63363 old->sabotage = real_packet->sabotage;
63364 old->flags = real_packet->flags;
63365 sz_strlcpy(old->soundtag, real_packet->soundtag);
63366 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
63367 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
63368 if (real_packet->helptext) {
63369 strvec_copy(old->helptext, real_packet->helptext);
63370 } else {
63371 strvec_clear(old->helptext);
63372 }
63373 }
63374
63375#else /* FREECIV_DELTA_PROTOCOL */
63376#ifdef FREECIV_JSON_CONNECTION
63377 field_addr.name = "id";
63378#endif /* FREECIV_JSON_CONNECTION */
63379
63380 {
63381 int readin;
63382
63383 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63385 }
63386 real_packet->id = readin;
63387 }
63388
63389#ifdef FREECIV_JSON_CONNECTION
63390 field_addr.name = "genus";
63391#endif /* FREECIV_JSON_CONNECTION */
63392
63393 {
63394 int readin;
63395
63396 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63398 }
63399 real_packet->genus = readin;
63400 }
63401
63402#ifdef FREECIV_JSON_CONNECTION
63403 field_addr.name = "name";
63404#endif /* FREECIV_JSON_CONNECTION */
63405
63406 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63408 }
63409
63410#ifdef FREECIV_JSON_CONNECTION
63411 field_addr.name = "rule_name";
63412#endif /* FREECIV_JSON_CONNECTION */
63413
63414 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63415 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63416 }
63417
63418#ifdef FREECIV_JSON_CONNECTION
63419 field_addr.name = "graphic_str";
63420#endif /* FREECIV_JSON_CONNECTION */
63421
63422 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63423 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63424 }
63425
63426#ifdef FREECIV_JSON_CONNECTION
63427 field_addr.name = "graphic_alt";
63428#endif /* FREECIV_JSON_CONNECTION */
63429
63430 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63431 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63432 }
63433
63434#ifdef FREECIV_JSON_CONNECTION
63435 field_addr.name = "graphic_alt2";
63436#endif /* FREECIV_JSON_CONNECTION */
63437
63438 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
63439 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
63440 }
63441
63442#ifdef FREECIV_JSON_CONNECTION
63443 field_addr.name = "reqs";
63444#endif /* FREECIV_JSON_CONNECTION */
63445
63446 {
63447 int i;
63448
63449 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63451 }
63453
63454#ifdef FREECIV_JSON_CONNECTION
63455 /* Enter array. */
63456 field_addr.sub_location = plocation_elem_new(0);
63457#endif /* FREECIV_JSON_CONNECTION */
63458
63459 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63460#ifdef FREECIV_JSON_CONNECTION
63461 /* Next array element */
63462 field_addr.sub_location->number = i;
63463#endif /* FREECIV_JSON_CONNECTION */
63464
63465 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
63467 }
63468 }
63469
63470#ifdef FREECIV_JSON_CONNECTION
63471 /* Exit array. */
63472 FC_FREE(field_addr.sub_location);
63473#endif /* FREECIV_JSON_CONNECTION */
63474 }
63475
63476#ifdef FREECIV_JSON_CONNECTION
63477 field_addr.name = "obs_reqs";
63478#endif /* FREECIV_JSON_CONNECTION */
63479
63480 {
63481 int i;
63482
63483 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63485 }
63487
63488#ifdef FREECIV_JSON_CONNECTION
63489 /* Enter array. */
63490 field_addr.sub_location = plocation_elem_new(0);
63491#endif /* FREECIV_JSON_CONNECTION */
63492
63493 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63494#ifdef FREECIV_JSON_CONNECTION
63495 /* Next array element */
63496 field_addr.sub_location->number = i;
63497#endif /* FREECIV_JSON_CONNECTION */
63498
63499 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs.p[i])) {
63501 }
63502 }
63503
63504#ifdef FREECIV_JSON_CONNECTION
63505 /* Exit array. */
63506 FC_FREE(field_addr.sub_location);
63507#endif /* FREECIV_JSON_CONNECTION */
63508 }
63509
63510#ifdef FREECIV_JSON_CONNECTION
63511 field_addr.name = "build_cost";
63512#endif /* FREECIV_JSON_CONNECTION */
63513
63514 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
63515 RECEIVE_PACKET_FIELD_ERROR(build_cost);
63516 }
63517
63518#ifdef FREECIV_JSON_CONNECTION
63519 field_addr.name = "upkeep";
63520#endif /* FREECIV_JSON_CONNECTION */
63521
63522 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
63524 }
63525
63526#ifdef FREECIV_JSON_CONNECTION
63527 field_addr.name = "sabotage";
63528#endif /* FREECIV_JSON_CONNECTION */
63529
63530 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
63532 }
63533
63534#ifdef FREECIV_JSON_CONNECTION
63535 field_addr.name = "flags";
63536#endif /* FREECIV_JSON_CONNECTION */
63537
63538 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63540 }
63541
63542#ifdef FREECIV_JSON_CONNECTION
63543 field_addr.name = "soundtag";
63544#endif /* FREECIV_JSON_CONNECTION */
63545
63546 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
63548 }
63549
63550#ifdef FREECIV_JSON_CONNECTION
63551 field_addr.name = "soundtag_alt";
63552#endif /* FREECIV_JSON_CONNECTION */
63553
63554 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
63555 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
63556 }
63557
63558#ifdef FREECIV_JSON_CONNECTION
63559 field_addr.name = "soundtag_alt2";
63560#endif /* FREECIV_JSON_CONNECTION */
63561
63562 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
63563 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
63564 }
63565
63566#ifdef FREECIV_JSON_CONNECTION
63567 field_addr.name = "helptext";
63568#endif /* FREECIV_JSON_CONNECTION */
63569
63570 {
63571 int i;
63572
63573 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
63575 }
63576 strvec_reserve(real_packet->helptext, i);
63577
63578#ifdef FREECIV_JSON_CONNECTION
63579 /* Enter array. */
63580 field_addr.sub_location = plocation_elem_new(0);
63581#endif /* FREECIV_JSON_CONNECTION */
63582
63583 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
63584#ifdef FREECIV_JSON_CONNECTION
63585 /* Next array element */
63586 field_addr.sub_location->number = i;
63587#endif /* FREECIV_JSON_CONNECTION */
63588
63589 {
63590 char readin[MAX_LEN_PACKET];
63591
63592 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
63593 || !strvec_set(real_packet->helptext, i, readin)) {
63595 }
63596 }
63597 }
63598
63599#ifdef FREECIV_JSON_CONNECTION
63600 /* Exit array. */
63601 FC_FREE(field_addr.sub_location);
63602#endif /* FREECIV_JSON_CONNECTION */
63603 }
63604#endif /* FREECIV_DELTA_PROTOCOL */
63605
63607#undef FREE_PACKET_STRUCT
63608}
63609
63611{
63612 const struct packet_ruleset_building *real_packet = packet;
63613 int e;
63615
63616 log_packet_detailed("packet_ruleset_building_100: sending info about ()");
63617
63618#ifdef FREECIV_DELTA_PROTOCOL
63621 bool differ;
63622 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BUILDING;
63623
63624 if (nullptr == *hash) {
63626 nullptr, nullptr, nullptr, destroy_packet_ruleset_building);
63627 }
63628 BV_CLR_ALL(fields);
63629
63630 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
63631 old = fc_malloc(sizeof(*old));
63632 /* temporary bitcopy just to insert correctly */
63633 *old = *real_packet;
63636 }
63637
63638 differ = (old->id != real_packet->id);
63639 if (differ) {
63640 BV_SET(fields, 0);
63641 }
63642
63643 differ = (old->genus != real_packet->genus);
63644 if (differ) {
63645 BV_SET(fields, 1);
63646 }
63647
63648 differ = (strcmp(old->name, real_packet->name) != 0);
63649 if (differ) {
63650 BV_SET(fields, 2);
63651 }
63652
63653 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
63654 if (differ) {
63655 BV_SET(fields, 3);
63656 }
63657
63658 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
63659 if (differ) {
63660 BV_SET(fields, 4);
63661 }
63662
63663 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
63664 if (differ) {
63665 BV_SET(fields, 5);
63666 }
63667
63668 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
63669 if (differ) {
63670 BV_SET(fields, 6);
63671 }
63672
63674 if (!differ) {
63675 int i;
63676
63677 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
63678 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
63679 if (differ) {
63680 break;
63681 }
63682 }
63683 }
63684 if (differ) {
63685 BV_SET(fields, 7);
63686 }
63687
63689 if (!differ) {
63690 int i;
63691
63692 for (i = 0; i < requirement_vector_size(&old->obs_reqs); i++) {
63693 differ = !are_requirements_equal(&old->obs_reqs.p[i], &real_packet->obs_reqs.p[i]);
63694 if (differ) {
63695 break;
63696 }
63697 }
63698 }
63699 if (differ) {
63700 BV_SET(fields, 8);
63701 }
63702
63703 differ = (old->build_cost != real_packet->build_cost);
63704 if (differ) {
63705 BV_SET(fields, 9);
63706 }
63707
63708 differ = (old->upkeep != real_packet->upkeep);
63709 if (differ) {
63710 BV_SET(fields, 10);
63711 }
63712
63713 differ = (old->sabotage != real_packet->sabotage);
63714 if (differ) {
63715 BV_SET(fields, 11);
63716 }
63717
63718 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
63719 if (differ) {
63720 BV_SET(fields, 12);
63721 }
63722
63723 differ = (strcmp(old->soundtag, real_packet->soundtag) != 0);
63724 if (differ) {
63725 BV_SET(fields, 13);
63726 }
63727
63728 differ = (strcmp(old->soundtag_alt, real_packet->soundtag_alt) != 0);
63729 if (differ) {
63730 BV_SET(fields, 14);
63731 }
63732
63733 differ = (strcmp(old->soundtag_alt2, real_packet->soundtag_alt2) != 0);
63734 if (differ) {
63735 BV_SET(fields, 15);
63736 }
63737
63738 if (real_packet->helptext) {
63739 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
63740 } else {
63741 differ = (strvec_size(old->helptext) > 0);
63742 }
63743 if (differ) {
63744 BV_SET(fields, 16);
63745 }
63746#endif /* FREECIV_DELTA_PROTOCOL */
63747
63748#ifdef FREECIV_JSON_CONNECTION
63749 struct plocation field_addr;
63750 {
63751 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
63754 }
63755#endif /* FREECIV_JSON_CONNECTION */
63756
63757#ifdef FREECIV_DELTA_PROTOCOL
63758#ifdef FREECIV_JSON_CONNECTION
63759 field_addr.name = "fields";
63760#endif /* FREECIV_JSON_CONNECTION */
63761 e = 0;
63762 e |= DIO_BV_PUT(&dout, &field_addr, fields);
63763 if (e) {
63764 log_packet_detailed("fields bitvector error detected");
63765 }
63766
63767 if (BV_ISSET(fields, 0)) {
63768 log_packet_detailed(" field 'id' has changed");
63769
63770#ifdef FREECIV_JSON_CONNECTION
63771 field_addr.name = "id";
63772#endif /* FREECIV_JSON_CONNECTION */
63773 e = 0;
63774
63775 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
63776
63777 if (e) {
63778 log_packet_detailed("'id' field error detected");
63779 }
63780 }
63781
63782 if (BV_ISSET(fields, 1)) {
63783 log_packet_detailed(" field 'genus' has changed");
63784
63785#ifdef FREECIV_JSON_CONNECTION
63786 field_addr.name = "genus";
63787#endif /* FREECIV_JSON_CONNECTION */
63788 e = 0;
63789
63790 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
63791
63792 if (e) {
63793 log_packet_detailed("'genus' field error detected");
63794 }
63795 }
63796
63797 if (BV_ISSET(fields, 2)) {
63798 log_packet_detailed(" field 'name' has changed");
63799
63800#ifdef FREECIV_JSON_CONNECTION
63801 field_addr.name = "name";
63802#endif /* FREECIV_JSON_CONNECTION */
63803 e = 0;
63804
63805 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63806
63807 if (e) {
63808 log_packet_detailed("'name' field error detected");
63809 }
63810 }
63811
63812 if (BV_ISSET(fields, 3)) {
63813 log_packet_detailed(" field 'rule_name' has changed");
63814
63815#ifdef FREECIV_JSON_CONNECTION
63816 field_addr.name = "rule_name";
63817#endif /* FREECIV_JSON_CONNECTION */
63818 e = 0;
63819
63820 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63821
63822 if (e) {
63823 log_packet_detailed("'rule_name' field error detected");
63824 }
63825 }
63826
63827 if (BV_ISSET(fields, 4)) {
63828 log_packet_detailed(" field 'graphic_str' has changed");
63829
63830#ifdef FREECIV_JSON_CONNECTION
63831 field_addr.name = "graphic_str";
63832#endif /* FREECIV_JSON_CONNECTION */
63833 e = 0;
63834
63835 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
63836
63837 if (e) {
63838 log_packet_detailed("'graphic_str' field error detected");
63839 }
63840 }
63841
63842 if (BV_ISSET(fields, 5)) {
63843 log_packet_detailed(" field 'graphic_alt' has changed");
63844
63845#ifdef FREECIV_JSON_CONNECTION
63846 field_addr.name = "graphic_alt";
63847#endif /* FREECIV_JSON_CONNECTION */
63848 e = 0;
63849
63850 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
63851
63852 if (e) {
63853 log_packet_detailed("'graphic_alt' field error detected");
63854 }
63855 }
63856
63857 if (BV_ISSET(fields, 6)) {
63858 log_packet_detailed(" field 'graphic_alt2' has changed");
63859
63860#ifdef FREECIV_JSON_CONNECTION
63861 field_addr.name = "graphic_alt2";
63862#endif /* FREECIV_JSON_CONNECTION */
63863 e = 0;
63864
63865 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
63866
63867 if (e) {
63868 log_packet_detailed("'graphic_alt2' field error detected");
63869 }
63870 }
63871
63872 if (BV_ISSET(fields, 7)) {
63873 log_packet_detailed(" field 'reqs' has changed");
63874
63875#ifdef FREECIV_JSON_CONNECTION
63876 field_addr.name = "reqs";
63877#endif /* FREECIV_JSON_CONNECTION */
63878 e = 0;
63879
63880 {
63881 int i;
63882
63885
63886#ifdef FREECIV_JSON_CONNECTION
63887 /* Enter array. */
63888 field_addr.sub_location = plocation_elem_new(0);
63889#endif /* FREECIV_JSON_CONNECTION */
63890
63891 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
63892#ifdef FREECIV_JSON_CONNECTION
63893 /* Next array element. */
63894 field_addr.sub_location->number = i;
63895#endif /* FREECIV_JSON_CONNECTION */
63896
63897 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
63898 }
63899
63900#ifdef FREECIV_JSON_CONNECTION
63901 /* Exit array. */
63902 FC_FREE(field_addr.sub_location);
63903#endif /* FREECIV_JSON_CONNECTION */
63904 }
63905
63906 if (e) {
63907 log_packet_detailed("'reqs' field error detected");
63908 }
63909 }
63910
63911 if (BV_ISSET(fields, 8)) {
63912 log_packet_detailed(" field 'obs_reqs' has changed");
63913
63914#ifdef FREECIV_JSON_CONNECTION
63915 field_addr.name = "obs_reqs";
63916#endif /* FREECIV_JSON_CONNECTION */
63917 e = 0;
63918
63919 {
63920 int i;
63921
63924
63925#ifdef FREECIV_JSON_CONNECTION
63926 /* Enter array. */
63927 field_addr.sub_location = plocation_elem_new(0);
63928#endif /* FREECIV_JSON_CONNECTION */
63929
63930 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
63931#ifdef FREECIV_JSON_CONNECTION
63932 /* Next array element. */
63933 field_addr.sub_location->number = i;
63934#endif /* FREECIV_JSON_CONNECTION */
63935
63936 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
63937 }
63938
63939#ifdef FREECIV_JSON_CONNECTION
63940 /* Exit array. */
63941 FC_FREE(field_addr.sub_location);
63942#endif /* FREECIV_JSON_CONNECTION */
63943 }
63944
63945 if (e) {
63946 log_packet_detailed("'obs_reqs' field error detected");
63947 }
63948 }
63949
63950 if (BV_ISSET(fields, 9)) {
63951 log_packet_detailed(" field 'build_cost' has changed");
63952
63953#ifdef FREECIV_JSON_CONNECTION
63954 field_addr.name = "build_cost";
63955#endif /* FREECIV_JSON_CONNECTION */
63956 e = 0;
63957
63958 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
63959
63960 if (e) {
63961 log_packet_detailed("'build_cost' field error detected");
63962 }
63963 }
63964
63965 if (BV_ISSET(fields, 10)) {
63966 log_packet_detailed(" field 'upkeep' has changed");
63967
63968#ifdef FREECIV_JSON_CONNECTION
63969 field_addr.name = "upkeep";
63970#endif /* FREECIV_JSON_CONNECTION */
63971 e = 0;
63972
63973 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
63974
63975 if (e) {
63976 log_packet_detailed("'upkeep' field error detected");
63977 }
63978 }
63979
63980 if (BV_ISSET(fields, 11)) {
63981 log_packet_detailed(" field 'sabotage' has changed");
63982
63983#ifdef FREECIV_JSON_CONNECTION
63984 field_addr.name = "sabotage";
63985#endif /* FREECIV_JSON_CONNECTION */
63986 e = 0;
63987
63988 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
63989
63990 if (e) {
63991 log_packet_detailed("'sabotage' field error detected");
63992 }
63993 }
63994
63995 if (BV_ISSET(fields, 12)) {
63996 log_packet_detailed(" field 'flags' has changed");
63997
63998#ifdef FREECIV_JSON_CONNECTION
63999 field_addr.name = "flags";
64000#endif /* FREECIV_JSON_CONNECTION */
64001 e = 0;
64002
64003 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
64004
64005 if (e) {
64006 log_packet_detailed("'flags' field error detected");
64007 }
64008 }
64009
64010 if (BV_ISSET(fields, 13)) {
64011 log_packet_detailed(" field 'soundtag' has changed");
64012
64013#ifdef FREECIV_JSON_CONNECTION
64014 field_addr.name = "soundtag";
64015#endif /* FREECIV_JSON_CONNECTION */
64016 e = 0;
64017
64018 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
64019
64020 if (e) {
64021 log_packet_detailed("'soundtag' field error detected");
64022 }
64023 }
64024
64025 if (BV_ISSET(fields, 14)) {
64026 log_packet_detailed(" field 'soundtag_alt' has changed");
64027
64028#ifdef FREECIV_JSON_CONNECTION
64029 field_addr.name = "soundtag_alt";
64030#endif /* FREECIV_JSON_CONNECTION */
64031 e = 0;
64032
64033 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
64034
64035 if (e) {
64036 log_packet_detailed("'soundtag_alt' field error detected");
64037 }
64038 }
64039
64040 if (BV_ISSET(fields, 15)) {
64041 log_packet_detailed(" field 'soundtag_alt2' has changed");
64042
64043#ifdef FREECIV_JSON_CONNECTION
64044 field_addr.name = "soundtag_alt2";
64045#endif /* FREECIV_JSON_CONNECTION */
64046 e = 0;
64047
64048 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
64049
64050 if (e) {
64051 log_packet_detailed("'soundtag_alt2' field error detected");
64052 }
64053 }
64054
64055 if (BV_ISSET(fields, 16)) {
64056 log_packet_detailed(" field 'helptext' has changed");
64057
64058#ifdef FREECIV_JSON_CONNECTION
64059 field_addr.name = "helptext";
64060#endif /* FREECIV_JSON_CONNECTION */
64061 e = 0;
64062
64063 if (!real_packet->helptext) {
64064 /* Transmit null as empty */
64065 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
64066 } else {
64067 int i;
64068
64070 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
64071
64072#ifdef FREECIV_JSON_CONNECTION
64073 /* Enter array. */
64074 field_addr.sub_location = plocation_elem_new(0);
64075#endif /* FREECIV_JSON_CONNECTION */
64076
64077 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
64078#ifdef FREECIV_JSON_CONNECTION
64079 /* Next array element. */
64080 field_addr.sub_location->number = i;
64081#endif /* FREECIV_JSON_CONNECTION */
64082
64083 {
64084 const char *pstr = strvec_get(real_packet->helptext, i);
64085
64086 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
64087 }
64088 }
64089
64090#ifdef FREECIV_JSON_CONNECTION
64091 /* Exit array. */
64092 FC_FREE(field_addr.sub_location);
64093#endif /* FREECIV_JSON_CONNECTION */
64094 }
64095
64096 if (e) {
64097 log_packet_detailed("'helptext' field error detected");
64098 }
64099 }
64100
64101 old->id = real_packet->id;
64102 old->genus = real_packet->genus;
64103 sz_strlcpy(old->name, real_packet->name);
64104 sz_strlcpy(old->rule_name, real_packet->rule_name);
64105 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
64106 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
64107 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
64108 requirement_vector_copy(&old->reqs, &real_packet->reqs);
64109 requirement_vector_copy(&old->obs_reqs, &real_packet->obs_reqs);
64110 old->build_cost = real_packet->build_cost;
64111 old->upkeep = real_packet->upkeep;
64112 old->sabotage = real_packet->sabotage;
64113 old->flags = real_packet->flags;
64114 sz_strlcpy(old->soundtag, real_packet->soundtag);
64115 sz_strlcpy(old->soundtag_alt, real_packet->soundtag_alt);
64116 sz_strlcpy(old->soundtag_alt2, real_packet->soundtag_alt2);
64117 if (real_packet->helptext) {
64118 strvec_copy(old->helptext, real_packet->helptext);
64119 } else {
64120 strvec_clear(old->helptext);
64121 }
64122
64123#else /* FREECIV_DELTA_PROTOCOL */
64124#ifdef FREECIV_JSON_CONNECTION
64125 field_addr.name = "id";
64126#endif /* FREECIV_JSON_CONNECTION */
64127 e = 0;
64128
64129 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64130
64131 if (e) {
64132 log_packet_detailed("'id' field error detected");
64133 }
64134
64135#ifdef FREECIV_JSON_CONNECTION
64136 field_addr.name = "genus";
64137#endif /* FREECIV_JSON_CONNECTION */
64138 e = 0;
64139
64140 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
64141
64142 if (e) {
64143 log_packet_detailed("'genus' field error detected");
64144 }
64145
64146#ifdef FREECIV_JSON_CONNECTION
64147 field_addr.name = "name";
64148#endif /* FREECIV_JSON_CONNECTION */
64149 e = 0;
64150
64151 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64152
64153 if (e) {
64154 log_packet_detailed("'name' field error detected");
64155 }
64156
64157#ifdef FREECIV_JSON_CONNECTION
64158 field_addr.name = "rule_name";
64159#endif /* FREECIV_JSON_CONNECTION */
64160 e = 0;
64161
64162 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64163
64164 if (e) {
64165 log_packet_detailed("'rule_name' field error detected");
64166 }
64167
64168#ifdef FREECIV_JSON_CONNECTION
64169 field_addr.name = "graphic_str";
64170#endif /* FREECIV_JSON_CONNECTION */
64171 e = 0;
64172
64173 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64174
64175 if (e) {
64176 log_packet_detailed("'graphic_str' field error detected");
64177 }
64178
64179#ifdef FREECIV_JSON_CONNECTION
64180 field_addr.name = "graphic_alt";
64181#endif /* FREECIV_JSON_CONNECTION */
64182 e = 0;
64183
64184 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64185
64186 if (e) {
64187 log_packet_detailed("'graphic_alt' field error detected");
64188 }
64189
64190#ifdef FREECIV_JSON_CONNECTION
64191 field_addr.name = "graphic_alt2";
64192#endif /* FREECIV_JSON_CONNECTION */
64193 e = 0;
64194
64195 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
64196
64197 if (e) {
64198 log_packet_detailed("'graphic_alt2' field error detected");
64199 }
64200
64201#ifdef FREECIV_JSON_CONNECTION
64202 field_addr.name = "reqs";
64203#endif /* FREECIV_JSON_CONNECTION */
64204 e = 0;
64205
64206 {
64207 int i;
64208
64211
64212#ifdef FREECIV_JSON_CONNECTION
64213 /* Enter array. */
64214 field_addr.sub_location = plocation_elem_new(0);
64215#endif /* FREECIV_JSON_CONNECTION */
64216
64217 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
64218#ifdef FREECIV_JSON_CONNECTION
64219 /* Next array element. */
64220 field_addr.sub_location->number = i;
64221#endif /* FREECIV_JSON_CONNECTION */
64222
64223 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
64224 }
64225
64226#ifdef FREECIV_JSON_CONNECTION
64227 /* Exit array. */
64228 FC_FREE(field_addr.sub_location);
64229#endif /* FREECIV_JSON_CONNECTION */
64230 }
64231
64232 if (e) {
64233 log_packet_detailed("'reqs' field error detected");
64234 }
64235
64236#ifdef FREECIV_JSON_CONNECTION
64237 field_addr.name = "obs_reqs";
64238#endif /* FREECIV_JSON_CONNECTION */
64239 e = 0;
64240
64241 {
64242 int i;
64243
64246
64247#ifdef FREECIV_JSON_CONNECTION
64248 /* Enter array. */
64249 field_addr.sub_location = plocation_elem_new(0);
64250#endif /* FREECIV_JSON_CONNECTION */
64251
64252 for (i = 0; i < requirement_vector_size(&real_packet->obs_reqs); i++) {
64253#ifdef FREECIV_JSON_CONNECTION
64254 /* Next array element. */
64255 field_addr.sub_location->number = i;
64256#endif /* FREECIV_JSON_CONNECTION */
64257
64258 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs.p[i]);
64259 }
64260
64261#ifdef FREECIV_JSON_CONNECTION
64262 /* Exit array. */
64263 FC_FREE(field_addr.sub_location);
64264#endif /* FREECIV_JSON_CONNECTION */
64265 }
64266
64267 if (e) {
64268 log_packet_detailed("'obs_reqs' field error detected");
64269 }
64270
64271#ifdef FREECIV_JSON_CONNECTION
64272 field_addr.name = "build_cost";
64273#endif /* FREECIV_JSON_CONNECTION */
64274 e = 0;
64275
64276 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
64277
64278 if (e) {
64279 log_packet_detailed("'build_cost' field error detected");
64280 }
64281
64282#ifdef FREECIV_JSON_CONNECTION
64283 field_addr.name = "upkeep";
64284#endif /* FREECIV_JSON_CONNECTION */
64285 e = 0;
64286
64287 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
64288
64289 if (e) {
64290 log_packet_detailed("'upkeep' field error detected");
64291 }
64292
64293#ifdef FREECIV_JSON_CONNECTION
64294 field_addr.name = "sabotage";
64295#endif /* FREECIV_JSON_CONNECTION */
64296 e = 0;
64297
64298 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
64299
64300 if (e) {
64301 log_packet_detailed("'sabotage' field error detected");
64302 }
64303
64304#ifdef FREECIV_JSON_CONNECTION
64305 field_addr.name = "flags";
64306#endif /* FREECIV_JSON_CONNECTION */
64307 e = 0;
64308
64309 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
64310
64311 if (e) {
64312 log_packet_detailed("'flags' field error detected");
64313 }
64314
64315#ifdef FREECIV_JSON_CONNECTION
64316 field_addr.name = "soundtag";
64317#endif /* FREECIV_JSON_CONNECTION */
64318 e = 0;
64319
64320 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
64321
64322 if (e) {
64323 log_packet_detailed("'soundtag' field error detected");
64324 }
64325
64326#ifdef FREECIV_JSON_CONNECTION
64327 field_addr.name = "soundtag_alt";
64328#endif /* FREECIV_JSON_CONNECTION */
64329 e = 0;
64330
64331 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
64332
64333 if (e) {
64334 log_packet_detailed("'soundtag_alt' field error detected");
64335 }
64336
64337#ifdef FREECIV_JSON_CONNECTION
64338 field_addr.name = "soundtag_alt2";
64339#endif /* FREECIV_JSON_CONNECTION */
64340 e = 0;
64341
64342 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
64343
64344 if (e) {
64345 log_packet_detailed("'soundtag_alt2' field error detected");
64346 }
64347
64348#ifdef FREECIV_JSON_CONNECTION
64349 field_addr.name = "helptext";
64350#endif /* FREECIV_JSON_CONNECTION */
64351 e = 0;
64352
64353 if (!real_packet->helptext) {
64354 /* Transmit null as empty */
64355 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
64356 } else {
64357 int i;
64358
64360 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
64361
64362#ifdef FREECIV_JSON_CONNECTION
64363 /* Enter array. */
64364 field_addr.sub_location = plocation_elem_new(0);
64365#endif /* FREECIV_JSON_CONNECTION */
64366
64367 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
64368#ifdef FREECIV_JSON_CONNECTION
64369 /* Next array element. */
64370 field_addr.sub_location->number = i;
64371#endif /* FREECIV_JSON_CONNECTION */
64372
64373 {
64374 const char *pstr = strvec_get(real_packet->helptext, i);
64375
64376 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
64377 }
64378 }
64379
64380#ifdef FREECIV_JSON_CONNECTION
64381 /* Exit array. */
64382 FC_FREE(field_addr.sub_location);
64383#endif /* FREECIV_JSON_CONNECTION */
64384 }
64385
64386 if (e) {
64387 log_packet_detailed("'helptext' field error detected");
64388 }
64389#endif /* FREECIV_DELTA_PROTOCOL */
64390
64392}
64393
64395{
64396 if (!pc->used) {
64397 log_error("WARNING: trying to send data to the closed connection %s",
64399 return -1;
64400 }
64401 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet != nullptr, -1,
64402 "Handler for PACKET_RULESET_BUILDING not installed");
64403 return pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet(pc, packet);
64404}
64405
64407{
64408 conn_list_iterate(dest, pconn) {
64411}
64412
64414{
64415 memset(packet, 0, sizeof(*packet));
64416}
64417
64418#define free_packet_ruleset_impr_flag(_packet) (void) 0
64419#define destroy_packet_ruleset_impr_flag free
64420
64421#ifdef FREECIV_DELTA_PROTOCOL
64422#define hash_packet_ruleset_impr_flag_100 hash_const
64423#define cmp_packet_ruleset_impr_flag_100 cmp_const
64425#endif /* FREECIV_DELTA_PROTOCOL */
64426
64428{
64429#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_impr_flag(_packet)
64431
64432#ifdef FREECIV_JSON_CONNECTION
64433 struct plocation field_addr;
64434 {
64435 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64438 }
64439#endif /* FREECIV_JSON_CONNECTION */
64440
64441 log_packet_detailed("packet_ruleset_impr_flag_100: got info about ()");
64442
64443#ifdef FREECIV_DELTA_PROTOCOL
64446 struct genhash **hash = pc->phs.received + PACKET_RULESET_IMPR_FLAG;
64447
64448 if (nullptr == *hash) {
64450 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64451 }
64452
64453 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64454 *real_packet = *old;
64455 } else {
64456 /* packet is already initialized empty */
64457 log_packet_detailed(" no old info");
64458 }
64459
64460#ifdef FREECIV_JSON_CONNECTION
64461 field_addr.name = "fields";
64462#endif /* FREECIV_JSON_CONNECTION */
64463 DIO_BV_GET(&din, &field_addr, fields);
64464
64465 if (BV_ISSET(fields, 0)) {
64466 log_packet_detailed(" got field 'id'");
64467
64468#ifdef FREECIV_JSON_CONNECTION
64469 field_addr.name = "id";
64470#endif /* FREECIV_JSON_CONNECTION */
64471
64472 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64474 }
64475 }
64476
64477 if (BV_ISSET(fields, 1)) {
64478 log_packet_detailed(" got field 'name'");
64479
64480#ifdef FREECIV_JSON_CONNECTION
64481 field_addr.name = "name";
64482#endif /* FREECIV_JSON_CONNECTION */
64483
64484 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64486 }
64487 }
64488
64489 if (BV_ISSET(fields, 2)) {
64490 log_packet_detailed(" got field 'helptxt'");
64491
64492#ifdef FREECIV_JSON_CONNECTION
64493 field_addr.name = "helptxt";
64494#endif /* FREECIV_JSON_CONNECTION */
64495
64496 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64498 }
64499 }
64500
64501 if (nullptr == old) {
64502 old = fc_malloc(sizeof(*old));
64504 *old = *real_packet;
64506 } else {
64507 *old = *real_packet;
64508 }
64509
64510#else /* FREECIV_DELTA_PROTOCOL */
64511#ifdef FREECIV_JSON_CONNECTION
64512 field_addr.name = "id";
64513#endif /* FREECIV_JSON_CONNECTION */
64514
64515 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64517 }
64518
64519#ifdef FREECIV_JSON_CONNECTION
64520 field_addr.name = "name";
64521#endif /* FREECIV_JSON_CONNECTION */
64522
64523 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64525 }
64526
64527#ifdef FREECIV_JSON_CONNECTION
64528 field_addr.name = "helptxt";
64529#endif /* FREECIV_JSON_CONNECTION */
64530
64531 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
64533 }
64534#endif /* FREECIV_DELTA_PROTOCOL */
64535
64537#undef FREE_PACKET_STRUCT
64538}
64539
64541{
64542 const struct packet_ruleset_impr_flag *real_packet = packet;
64543 int e;
64545
64546 log_packet_detailed("packet_ruleset_impr_flag_100: sending info about ()");
64547
64548#ifdef FREECIV_DELTA_PROTOCOL
64551 bool differ;
64552 struct genhash **hash = pc->phs.sent + PACKET_RULESET_IMPR_FLAG;
64553
64554 if (nullptr == *hash) {
64556 nullptr, nullptr, nullptr, destroy_packet_ruleset_impr_flag);
64557 }
64558 BV_CLR_ALL(fields);
64559
64560 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64561 old = fc_malloc(sizeof(*old));
64562 /* temporary bitcopy just to insert correctly */
64563 *old = *real_packet;
64566 }
64567
64568 differ = (old->id != real_packet->id);
64569 if (differ) {
64570 BV_SET(fields, 0);
64571 }
64572
64573 differ = (strcmp(old->name, real_packet->name) != 0);
64574 if (differ) {
64575 BV_SET(fields, 1);
64576 }
64577
64578 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
64579 if (differ) {
64580 BV_SET(fields, 2);
64581 }
64582#endif /* FREECIV_DELTA_PROTOCOL */
64583
64584#ifdef FREECIV_JSON_CONNECTION
64585 struct plocation field_addr;
64586 {
64587 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64590 }
64591#endif /* FREECIV_JSON_CONNECTION */
64592
64593#ifdef FREECIV_DELTA_PROTOCOL
64594#ifdef FREECIV_JSON_CONNECTION
64595 field_addr.name = "fields";
64596#endif /* FREECIV_JSON_CONNECTION */
64597 e = 0;
64598 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64599 if (e) {
64600 log_packet_detailed("fields bitvector error detected");
64601 }
64602
64603 if (BV_ISSET(fields, 0)) {
64604 log_packet_detailed(" field 'id' has changed");
64605
64606#ifdef FREECIV_JSON_CONNECTION
64607 field_addr.name = "id";
64608#endif /* FREECIV_JSON_CONNECTION */
64609 e = 0;
64610
64611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64612
64613 if (e) {
64614 log_packet_detailed("'id' field error detected");
64615 }
64616 }
64617
64618 if (BV_ISSET(fields, 1)) {
64619 log_packet_detailed(" field 'name' has changed");
64620
64621#ifdef FREECIV_JSON_CONNECTION
64622 field_addr.name = "name";
64623#endif /* FREECIV_JSON_CONNECTION */
64624 e = 0;
64625
64626 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64627
64628 if (e) {
64629 log_packet_detailed("'name' field error detected");
64630 }
64631 }
64632
64633 if (BV_ISSET(fields, 2)) {
64634 log_packet_detailed(" field 'helptxt' has changed");
64635
64636#ifdef FREECIV_JSON_CONNECTION
64637 field_addr.name = "helptxt";
64638#endif /* FREECIV_JSON_CONNECTION */
64639 e = 0;
64640
64641 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
64642
64643 if (e) {
64644 log_packet_detailed("'helptxt' field error detected");
64645 }
64646 }
64647
64648 *old = *real_packet;
64649
64650#else /* FREECIV_DELTA_PROTOCOL */
64651#ifdef FREECIV_JSON_CONNECTION
64652 field_addr.name = "id";
64653#endif /* FREECIV_JSON_CONNECTION */
64654 e = 0;
64655
64656 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64657
64658 if (e) {
64659 log_packet_detailed("'id' field error detected");
64660 }
64661
64662#ifdef FREECIV_JSON_CONNECTION
64663 field_addr.name = "name";
64664#endif /* FREECIV_JSON_CONNECTION */
64665 e = 0;
64666
64667 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64668
64669 if (e) {
64670 log_packet_detailed("'name' field error detected");
64671 }
64672
64673#ifdef FREECIV_JSON_CONNECTION
64674 field_addr.name = "helptxt";
64675#endif /* FREECIV_JSON_CONNECTION */
64676 e = 0;
64677
64678 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
64679
64680 if (e) {
64681 log_packet_detailed("'helptxt' field error detected");
64682 }
64683#endif /* FREECIV_DELTA_PROTOCOL */
64684
64686}
64687
64689{
64690 if (!pc->used) {
64691 log_error("WARNING: trying to send data to the closed connection %s",
64693 return -1;
64694 }
64695 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet != nullptr, -1,
64696 "Handler for PACKET_RULESET_IMPR_FLAG not installed");
64697 return pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet(pc, packet);
64698}
64699
64701{
64702 conn_list_iterate(dest, pconn) {
64705}
64706
64707static inline void init_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
64708{
64709 memset(packet, 0, sizeof(*packet));
64710
64711 packet->helptext = strvec_new();
64712}
64713
64714static inline void free_packet_ruleset_terrain(struct packet_ruleset_terrain *packet)
64715{
64716 if (packet->helptext) {
64717 strvec_destroy(packet->helptext);
64718 packet->helptext = nullptr;
64719 }
64720}
64721
64722static inline void destroy_packet_ruleset_terrain(void *packet)
64723{
64725 free(packet);
64726}
64727
64728#ifdef FREECIV_DELTA_PROTOCOL
64729#define hash_packet_ruleset_terrain_100 hash_const
64730#define cmp_packet_ruleset_terrain_100 cmp_const
64732#endif /* FREECIV_DELTA_PROTOCOL */
64733
64735{
64736#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain(_packet)
64738
64739#ifdef FREECIV_JSON_CONNECTION
64740 struct plocation field_addr;
64741 {
64742 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
64745 }
64746#endif /* FREECIV_JSON_CONNECTION */
64747
64748 log_packet_detailed("packet_ruleset_terrain_100: got info about ()");
64749
64750#ifdef FREECIV_DELTA_PROTOCOL
64753 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN;
64754
64755 if (nullptr == *hash) {
64757 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
64758 }
64759
64760 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64761 real_packet->id = old->id;
64762 real_packet->tclass = old->tclass;
64763 real_packet->flags = old->flags;
64764 real_packet->native_to = old->native_to;
64765 sz_strlcpy(real_packet->name, old->name);
64766 sz_strlcpy(real_packet->rule_name, old->rule_name);
64767 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
64768 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
64769 sz_strlcpy(real_packet->graphic_alt2, old->graphic_alt2);
64770 real_packet->movement_cost = old->movement_cost;
64771 real_packet->defense_bonus = old->defense_bonus;
64772 {
64773 int i;
64774
64775 for (i = 0; i < O_LAST; i++) {
64776 real_packet->output[i] = old->output[i];
64777 }
64778 }
64779 real_packet->num_resources = old->num_resources;
64780 {
64781 int i;
64782
64783 for (i = 0; i < old->num_resources; i++) {
64784 real_packet->resources[i] = old->resources[i];
64785 }
64786 }
64787 {
64788 int i;
64789
64790 for (i = 0; i < old->num_resources; i++) {
64791 real_packet->resource_freq[i] = old->resource_freq[i];
64792 }
64793 }
64794 {
64795 int i;
64796
64797 for (i = 0; i < O_LAST; i++) {
64798 real_packet->road_output_incr_pct[i] = old->road_output_incr_pct[i];
64799 }
64800 }
64801 real_packet->base_time = old->base_time;
64802 real_packet->road_time = old->road_time;
64803 real_packet->cultivate_result = old->cultivate_result;
64804 real_packet->cultivate_time = old->cultivate_time;
64805 real_packet->plant_result = old->plant_result;
64806 real_packet->plant_time = old->plant_time;
64807 real_packet->irrigation_food_incr = old->irrigation_food_incr;
64808 real_packet->irrigation_time = old->irrigation_time;
64809 real_packet->mining_shield_incr = old->mining_shield_incr;
64810 real_packet->mining_time = old->mining_time;
64811 real_packet->animal = old->animal;
64812 real_packet->transform_result = old->transform_result;
64813 real_packet->transform_time = old->transform_time;
64814 real_packet->placing_time = old->placing_time;
64815 real_packet->pillage_time = old->pillage_time;
64816 real_packet->extra_count = old->extra_count;
64817 {
64818 int i;
64819
64820 for (i = 0; i < old->extra_count; i++) {
64821 real_packet->extra_removal_times[i] = old->extra_removal_times[i];
64822 }
64823 }
64824 real_packet->color_red = old->color_red;
64825 real_packet->color_green = old->color_green;
64826 real_packet->color_blue = old->color_blue;
64827 if (old->helptext) {
64828 strvec_copy(real_packet->helptext, old->helptext);
64829 } else {
64830 strvec_clear(real_packet->helptext);
64831 }
64832 } else {
64833 /* packet is already initialized empty */
64834 log_packet_detailed(" no old info");
64835 }
64836
64837#ifdef FREECIV_JSON_CONNECTION
64838 field_addr.name = "fields";
64839#endif /* FREECIV_JSON_CONNECTION */
64840 DIO_BV_GET(&din, &field_addr, fields);
64841
64842 if (BV_ISSET(fields, 0)) {
64843 log_packet_detailed(" got field 'id'");
64844
64845#ifdef FREECIV_JSON_CONNECTION
64846 field_addr.name = "id";
64847#endif /* FREECIV_JSON_CONNECTION */
64848
64849 {
64850 int readin;
64851
64852 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64854 }
64855 real_packet->id = readin;
64856 }
64857 }
64858
64859 if (BV_ISSET(fields, 1)) {
64860 log_packet_detailed(" got field 'tclass'");
64861
64862#ifdef FREECIV_JSON_CONNECTION
64863 field_addr.name = "tclass";
64864#endif /* FREECIV_JSON_CONNECTION */
64865
64866 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
64868 }
64869 }
64870
64871 if (BV_ISSET(fields, 2)) {
64872 log_packet_detailed(" got field 'flags'");
64873
64874#ifdef FREECIV_JSON_CONNECTION
64875 field_addr.name = "flags";
64876#endif /* FREECIV_JSON_CONNECTION */
64877
64878 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
64880 }
64881 }
64882
64883 if (BV_ISSET(fields, 3)) {
64884 log_packet_detailed(" got field 'native_to'");
64885
64886#ifdef FREECIV_JSON_CONNECTION
64887 field_addr.name = "native_to";
64888#endif /* FREECIV_JSON_CONNECTION */
64889
64890 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
64891 RECEIVE_PACKET_FIELD_ERROR(native_to);
64892 }
64893 }
64894
64895 if (BV_ISSET(fields, 4)) {
64896 log_packet_detailed(" got field 'name'");
64897
64898#ifdef FREECIV_JSON_CONNECTION
64899 field_addr.name = "name";
64900#endif /* FREECIV_JSON_CONNECTION */
64901
64902 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64904 }
64905 }
64906
64907 if (BV_ISSET(fields, 5)) {
64908 log_packet_detailed(" got field 'rule_name'");
64909
64910#ifdef FREECIV_JSON_CONNECTION
64911 field_addr.name = "rule_name";
64912#endif /* FREECIV_JSON_CONNECTION */
64913
64914 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64915 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64916 }
64917 }
64918
64919 if (BV_ISSET(fields, 6)) {
64920 log_packet_detailed(" got field 'graphic_str'");
64921
64922#ifdef FREECIV_JSON_CONNECTION
64923 field_addr.name = "graphic_str";
64924#endif /* FREECIV_JSON_CONNECTION */
64925
64926 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
64927 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
64928 }
64929 }
64930
64931 if (BV_ISSET(fields, 7)) {
64932 log_packet_detailed(" got field 'graphic_alt'");
64933
64934#ifdef FREECIV_JSON_CONNECTION
64935 field_addr.name = "graphic_alt";
64936#endif /* FREECIV_JSON_CONNECTION */
64937
64938 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
64939 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
64940 }
64941 }
64942
64943 if (BV_ISSET(fields, 8)) {
64944 log_packet_detailed(" got field 'graphic_alt2'");
64945
64946#ifdef FREECIV_JSON_CONNECTION
64947 field_addr.name = "graphic_alt2";
64948#endif /* FREECIV_JSON_CONNECTION */
64949
64950 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
64951 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
64952 }
64953 }
64954
64955 if (BV_ISSET(fields, 9)) {
64956 log_packet_detailed(" got field 'movement_cost'");
64957
64958#ifdef FREECIV_JSON_CONNECTION
64959 field_addr.name = "movement_cost";
64960#endif /* FREECIV_JSON_CONNECTION */
64961
64962 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
64963 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
64964 }
64965 }
64966
64967 if (BV_ISSET(fields, 10)) {
64968 log_packet_detailed(" got field 'defense_bonus'");
64969
64970#ifdef FREECIV_JSON_CONNECTION
64971 field_addr.name = "defense_bonus";
64972#endif /* FREECIV_JSON_CONNECTION */
64973
64974 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
64975 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
64976 }
64977 }
64978
64979 if (BV_ISSET(fields, 11)) {
64980 log_packet_detailed(" got field 'output'");
64981
64982#ifdef FREECIV_JSON_CONNECTION
64983 field_addr.name = "output";
64984#endif /* FREECIV_JSON_CONNECTION */
64985
64986 {
64987 int i;
64988
64989
64990#ifdef FREECIV_JSON_CONNECTION
64991 /* Enter array. */
64992 field_addr.sub_location = plocation_elem_new(0);
64993#endif /* FREECIV_JSON_CONNECTION */
64994
64995 for (i = 0; i < O_LAST; i++) {
64996#ifdef FREECIV_JSON_CONNECTION
64997 /* Next array element */
64998 field_addr.sub_location->number = i;
64999#endif /* FREECIV_JSON_CONNECTION */
65000
65001 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
65003 }
65004 }
65005
65006#ifdef FREECIV_JSON_CONNECTION
65007 /* Exit array. */
65008 FC_FREE(field_addr.sub_location);
65009#endif /* FREECIV_JSON_CONNECTION */
65010 }
65011 }
65012
65013 if (BV_ISSET(fields, 12)) {
65014 log_packet_detailed(" got field 'num_resources'");
65015
65016#ifdef FREECIV_JSON_CONNECTION
65017 field_addr.name = "num_resources";
65018#endif /* FREECIV_JSON_CONNECTION */
65019
65020 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
65021 RECEIVE_PACKET_FIELD_ERROR(num_resources);
65022 }
65023 }
65024
65025 if (BV_ISSET(fields, 13)) {
65026 log_packet_detailed(" got field 'resources'");
65027
65028#ifdef FREECIV_JSON_CONNECTION
65029 field_addr.name = "resources";
65030#endif /* FREECIV_JSON_CONNECTION */
65031
65032 {
65033 int i;
65034
65035 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65036 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
65037 }
65038
65039#ifdef FREECIV_JSON_CONNECTION
65040 /* Enter array. */
65041 field_addr.sub_location = plocation_elem_new(0);
65042#endif /* FREECIV_JSON_CONNECTION */
65043
65044 for (i = 0; i < real_packet->num_resources; i++) {
65045#ifdef FREECIV_JSON_CONNECTION
65046 /* Next array element */
65047 field_addr.sub_location->number = i;
65048#endif /* FREECIV_JSON_CONNECTION */
65049
65050 {
65051 int readin;
65052
65053 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65055 }
65056 real_packet->resources[i] = readin;
65057 }
65058 }
65059
65060#ifdef FREECIV_JSON_CONNECTION
65061 /* Exit array. */
65062 FC_FREE(field_addr.sub_location);
65063#endif /* FREECIV_JSON_CONNECTION */
65064 }
65065 }
65066
65067 if (BV_ISSET(fields, 14)) {
65068 log_packet_detailed(" got field 'resource_freq'");
65069
65070#ifdef FREECIV_JSON_CONNECTION
65071 field_addr.name = "resource_freq";
65072#endif /* FREECIV_JSON_CONNECTION */
65073
65074 {
65075 int i;
65076
65077 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65078 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
65079 }
65080
65081#ifdef FREECIV_JSON_CONNECTION
65082 /* Enter array. */
65083 field_addr.sub_location = plocation_elem_new(0);
65084#endif /* FREECIV_JSON_CONNECTION */
65085
65086 for (i = 0; i < real_packet->num_resources; i++) {
65087#ifdef FREECIV_JSON_CONNECTION
65088 /* Next array element */
65089 field_addr.sub_location->number = i;
65090#endif /* FREECIV_JSON_CONNECTION */
65091
65092 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
65093 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
65094 }
65095 }
65096
65097#ifdef FREECIV_JSON_CONNECTION
65098 /* Exit array. */
65099 FC_FREE(field_addr.sub_location);
65100#endif /* FREECIV_JSON_CONNECTION */
65101 }
65102 }
65103
65104 if (BV_ISSET(fields, 15)) {
65105 log_packet_detailed(" got field 'road_output_incr_pct'");
65106
65107#ifdef FREECIV_JSON_CONNECTION
65108 field_addr.name = "road_output_incr_pct";
65109#endif /* FREECIV_JSON_CONNECTION */
65110
65111 {
65112 int i;
65113
65114
65115#ifdef FREECIV_JSON_CONNECTION
65116 /* Enter array. */
65117 field_addr.sub_location = plocation_elem_new(0);
65118#endif /* FREECIV_JSON_CONNECTION */
65119
65120 for (i = 0; i < O_LAST; i++) {
65121#ifdef FREECIV_JSON_CONNECTION
65122 /* Next array element */
65123 field_addr.sub_location->number = i;
65124#endif /* FREECIV_JSON_CONNECTION */
65125
65126 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
65127 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
65128 }
65129 }
65130
65131#ifdef FREECIV_JSON_CONNECTION
65132 /* Exit array. */
65133 FC_FREE(field_addr.sub_location);
65134#endif /* FREECIV_JSON_CONNECTION */
65135 }
65136 }
65137
65138 if (BV_ISSET(fields, 16)) {
65139 log_packet_detailed(" got field 'base_time'");
65140
65141#ifdef FREECIV_JSON_CONNECTION
65142 field_addr.name = "base_time";
65143#endif /* FREECIV_JSON_CONNECTION */
65144
65145 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
65146 RECEIVE_PACKET_FIELD_ERROR(base_time);
65147 }
65148 }
65149
65150 if (BV_ISSET(fields, 17)) {
65151 log_packet_detailed(" got field 'road_time'");
65152
65153#ifdef FREECIV_JSON_CONNECTION
65154 field_addr.name = "road_time";
65155#endif /* FREECIV_JSON_CONNECTION */
65156
65157 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
65158 RECEIVE_PACKET_FIELD_ERROR(road_time);
65159 }
65160 }
65161
65162 if (BV_ISSET(fields, 18)) {
65163 log_packet_detailed(" got field 'cultivate_result'");
65164
65165#ifdef FREECIV_JSON_CONNECTION
65166 field_addr.name = "cultivate_result";
65167#endif /* FREECIV_JSON_CONNECTION */
65168
65169 {
65170 int readin;
65171
65172 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65173 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
65174 }
65175 real_packet->cultivate_result = readin;
65176 }
65177 }
65178
65179 if (BV_ISSET(fields, 19)) {
65180 log_packet_detailed(" got field 'cultivate_time'");
65181
65182#ifdef FREECIV_JSON_CONNECTION
65183 field_addr.name = "cultivate_time";
65184#endif /* FREECIV_JSON_CONNECTION */
65185
65186 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
65187 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
65188 }
65189 }
65190
65191 if (BV_ISSET(fields, 20)) {
65192 log_packet_detailed(" got field 'plant_result'");
65193
65194#ifdef FREECIV_JSON_CONNECTION
65195 field_addr.name = "plant_result";
65196#endif /* FREECIV_JSON_CONNECTION */
65197
65198 {
65199 int readin;
65200
65201 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65202 RECEIVE_PACKET_FIELD_ERROR(plant_result);
65203 }
65204 real_packet->plant_result = readin;
65205 }
65206 }
65207
65208 if (BV_ISSET(fields, 21)) {
65209 log_packet_detailed(" got field 'plant_time'");
65210
65211#ifdef FREECIV_JSON_CONNECTION
65212 field_addr.name = "plant_time";
65213#endif /* FREECIV_JSON_CONNECTION */
65214
65215 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
65216 RECEIVE_PACKET_FIELD_ERROR(plant_time);
65217 }
65218 }
65219
65220 if (BV_ISSET(fields, 22)) {
65221 log_packet_detailed(" got field 'irrigation_food_incr'");
65222
65223#ifdef FREECIV_JSON_CONNECTION
65224 field_addr.name = "irrigation_food_incr";
65225#endif /* FREECIV_JSON_CONNECTION */
65226
65227 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
65228 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
65229 }
65230 }
65231
65232 if (BV_ISSET(fields, 23)) {
65233 log_packet_detailed(" got field 'irrigation_time'");
65234
65235#ifdef FREECIV_JSON_CONNECTION
65236 field_addr.name = "irrigation_time";
65237#endif /* FREECIV_JSON_CONNECTION */
65238
65239 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
65240 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
65241 }
65242 }
65243
65244 if (BV_ISSET(fields, 24)) {
65245 log_packet_detailed(" got field 'mining_shield_incr'");
65246
65247#ifdef FREECIV_JSON_CONNECTION
65248 field_addr.name = "mining_shield_incr";
65249#endif /* FREECIV_JSON_CONNECTION */
65250
65251 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
65252 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
65253 }
65254 }
65255
65256 if (BV_ISSET(fields, 25)) {
65257 log_packet_detailed(" got field 'mining_time'");
65258
65259#ifdef FREECIV_JSON_CONNECTION
65260 field_addr.name = "mining_time";
65261#endif /* FREECIV_JSON_CONNECTION */
65262
65263 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
65264 RECEIVE_PACKET_FIELD_ERROR(mining_time);
65265 }
65266 }
65267
65268 if (BV_ISSET(fields, 26)) {
65269 log_packet_detailed(" got field 'animal'");
65270
65271#ifdef FREECIV_JSON_CONNECTION
65272 field_addr.name = "animal";
65273#endif /* FREECIV_JSON_CONNECTION */
65274
65275 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
65277 }
65278 }
65279
65280 if (BV_ISSET(fields, 27)) {
65281 log_packet_detailed(" got field 'transform_result'");
65282
65283#ifdef FREECIV_JSON_CONNECTION
65284 field_addr.name = "transform_result";
65285#endif /* FREECIV_JSON_CONNECTION */
65286
65287 {
65288 int readin;
65289
65290 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65291 RECEIVE_PACKET_FIELD_ERROR(transform_result);
65292 }
65293 real_packet->transform_result = readin;
65294 }
65295 }
65296
65297 if (BV_ISSET(fields, 28)) {
65298 log_packet_detailed(" got field 'transform_time'");
65299
65300#ifdef FREECIV_JSON_CONNECTION
65301 field_addr.name = "transform_time";
65302#endif /* FREECIV_JSON_CONNECTION */
65303
65304 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
65305 RECEIVE_PACKET_FIELD_ERROR(transform_time);
65306 }
65307 }
65308
65309 if (BV_ISSET(fields, 29)) {
65310 log_packet_detailed(" got field 'placing_time'");
65311
65312#ifdef FREECIV_JSON_CONNECTION
65313 field_addr.name = "placing_time";
65314#endif /* FREECIV_JSON_CONNECTION */
65315
65316 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
65317 RECEIVE_PACKET_FIELD_ERROR(placing_time);
65318 }
65319 }
65320
65321 if (BV_ISSET(fields, 30)) {
65322 log_packet_detailed(" got field 'pillage_time'");
65323
65324#ifdef FREECIV_JSON_CONNECTION
65325 field_addr.name = "pillage_time";
65326#endif /* FREECIV_JSON_CONNECTION */
65327
65328 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
65329 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
65330 }
65331 }
65332
65333 if (BV_ISSET(fields, 31)) {
65334 log_packet_detailed(" got field 'extra_count'");
65335
65336#ifdef FREECIV_JSON_CONNECTION
65337 field_addr.name = "extra_count";
65338#endif /* FREECIV_JSON_CONNECTION */
65339
65340 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
65342 }
65343 }
65344
65345 if (BV_ISSET(fields, 32)) {
65346 log_packet_detailed(" got field 'extra_removal_times'");
65347
65348#ifdef FREECIV_JSON_CONNECTION
65349 field_addr.name = "extra_removal_times";
65350#endif /* FREECIV_JSON_CONNECTION */
65351
65352 {
65353 int i;
65354
65355 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
65356 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
65357 }
65358
65359#ifdef FREECIV_JSON_CONNECTION
65360 /* Enter array. */
65361 field_addr.sub_location = plocation_elem_new(0);
65362#endif /* FREECIV_JSON_CONNECTION */
65363
65364 for (i = 0; i < real_packet->extra_count; i++) {
65365#ifdef FREECIV_JSON_CONNECTION
65366 /* Next array element */
65367 field_addr.sub_location->number = i;
65368#endif /* FREECIV_JSON_CONNECTION */
65369
65370 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
65371 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
65372 }
65373 }
65374
65375#ifdef FREECIV_JSON_CONNECTION
65376 /* Exit array. */
65377 FC_FREE(field_addr.sub_location);
65378#endif /* FREECIV_JSON_CONNECTION */
65379 }
65380 }
65381
65382 if (BV_ISSET(fields, 33)) {
65383 log_packet_detailed(" got field 'color_red'");
65384
65385#ifdef FREECIV_JSON_CONNECTION
65386 field_addr.name = "color_red";
65387#endif /* FREECIV_JSON_CONNECTION */
65388
65389 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
65390 RECEIVE_PACKET_FIELD_ERROR(color_red);
65391 }
65392 }
65393
65394 if (BV_ISSET(fields, 34)) {
65395 log_packet_detailed(" got field 'color_green'");
65396
65397#ifdef FREECIV_JSON_CONNECTION
65398 field_addr.name = "color_green";
65399#endif /* FREECIV_JSON_CONNECTION */
65400
65401 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
65402 RECEIVE_PACKET_FIELD_ERROR(color_green);
65403 }
65404 }
65405
65406 if (BV_ISSET(fields, 35)) {
65407 log_packet_detailed(" got field 'color_blue'");
65408
65409#ifdef FREECIV_JSON_CONNECTION
65410 field_addr.name = "color_blue";
65411#endif /* FREECIV_JSON_CONNECTION */
65412
65413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
65414 RECEIVE_PACKET_FIELD_ERROR(color_blue);
65415 }
65416 }
65417
65418 if (BV_ISSET(fields, 36)) {
65419 log_packet_detailed(" got field 'helptext'");
65420
65421#ifdef FREECIV_JSON_CONNECTION
65422 field_addr.name = "helptext";
65423#endif /* FREECIV_JSON_CONNECTION */
65424
65425 {
65426 int i;
65427
65428 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
65430 }
65431 strvec_reserve(real_packet->helptext, i);
65432
65433#ifdef FREECIV_JSON_CONNECTION
65434 /* Enter array. */
65435 field_addr.sub_location = plocation_elem_new(0);
65436#endif /* FREECIV_JSON_CONNECTION */
65437
65438 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
65439#ifdef FREECIV_JSON_CONNECTION
65440 /* Next array element */
65441 field_addr.sub_location->number = i;
65442#endif /* FREECIV_JSON_CONNECTION */
65443
65444 {
65445 char readin[MAX_LEN_PACKET];
65446
65447 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
65448 || !strvec_set(real_packet->helptext, i, readin)) {
65450 }
65451 }
65452 }
65453
65454#ifdef FREECIV_JSON_CONNECTION
65455 /* Exit array. */
65456 FC_FREE(field_addr.sub_location);
65457#endif /* FREECIV_JSON_CONNECTION */
65458 }
65459 }
65460
65461 if (nullptr == old) {
65462 old = fc_malloc(sizeof(*old));
65464 old->id = real_packet->id;
65465 old->tclass = real_packet->tclass;
65466 old->flags = real_packet->flags;
65467 old->native_to = real_packet->native_to;
65468 sz_strlcpy(old->name, real_packet->name);
65469 sz_strlcpy(old->rule_name, real_packet->rule_name);
65470 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65471 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65472 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65473 old->movement_cost = real_packet->movement_cost;
65474 old->defense_bonus = real_packet->defense_bonus;
65475 {
65476 int i;
65477
65478 for (i = 0; i < O_LAST; i++) {
65479 old->output[i] = real_packet->output[i];
65480 }
65481 }
65482 old->num_resources = real_packet->num_resources;
65483 {
65484 int i;
65485
65486 for (i = 0; i < real_packet->num_resources; i++) {
65487 old->resources[i] = real_packet->resources[i];
65488 }
65489 }
65490 {
65491 int i;
65492
65493 for (i = 0; i < real_packet->num_resources; i++) {
65494 old->resource_freq[i] = real_packet->resource_freq[i];
65495 }
65496 }
65497 {
65498 int i;
65499
65500 for (i = 0; i < O_LAST; i++) {
65501 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65502 }
65503 }
65504 old->base_time = real_packet->base_time;
65505 old->road_time = real_packet->road_time;
65506 old->cultivate_result = real_packet->cultivate_result;
65507 old->cultivate_time = real_packet->cultivate_time;
65508 old->plant_result = real_packet->plant_result;
65509 old->plant_time = real_packet->plant_time;
65510 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65511 old->irrigation_time = real_packet->irrigation_time;
65512 old->mining_shield_incr = real_packet->mining_shield_incr;
65513 old->mining_time = real_packet->mining_time;
65514 old->animal = real_packet->animal;
65515 old->transform_result = real_packet->transform_result;
65516 old->transform_time = real_packet->transform_time;
65517 old->placing_time = real_packet->placing_time;
65518 old->pillage_time = real_packet->pillage_time;
65519 old->extra_count = real_packet->extra_count;
65520 {
65521 int i;
65522
65523 for (i = 0; i < real_packet->extra_count; i++) {
65524 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65525 }
65526 }
65527 old->color_red = real_packet->color_red;
65528 old->color_green = real_packet->color_green;
65529 old->color_blue = real_packet->color_blue;
65530 if (real_packet->helptext) {
65531 strvec_copy(old->helptext, real_packet->helptext);
65532 } else {
65533 strvec_clear(old->helptext);
65534 }
65536 } else {
65537 old->id = real_packet->id;
65538 old->tclass = real_packet->tclass;
65539 old->flags = real_packet->flags;
65540 old->native_to = real_packet->native_to;
65541 sz_strlcpy(old->name, real_packet->name);
65542 sz_strlcpy(old->rule_name, real_packet->rule_name);
65543 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
65544 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
65545 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
65546 old->movement_cost = real_packet->movement_cost;
65547 old->defense_bonus = real_packet->defense_bonus;
65548 {
65549 int i;
65550
65551 for (i = 0; i < O_LAST; i++) {
65552 old->output[i] = real_packet->output[i];
65553 }
65554 }
65555 old->num_resources = real_packet->num_resources;
65556 {
65557 int i;
65558
65559 for (i = 0; i < real_packet->num_resources; i++) {
65560 old->resources[i] = real_packet->resources[i];
65561 }
65562 }
65563 {
65564 int i;
65565
65566 for (i = 0; i < real_packet->num_resources; i++) {
65567 old->resource_freq[i] = real_packet->resource_freq[i];
65568 }
65569 }
65570 {
65571 int i;
65572
65573 for (i = 0; i < O_LAST; i++) {
65574 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
65575 }
65576 }
65577 old->base_time = real_packet->base_time;
65578 old->road_time = real_packet->road_time;
65579 old->cultivate_result = real_packet->cultivate_result;
65580 old->cultivate_time = real_packet->cultivate_time;
65581 old->plant_result = real_packet->plant_result;
65582 old->plant_time = real_packet->plant_time;
65583 old->irrigation_food_incr = real_packet->irrigation_food_incr;
65584 old->irrigation_time = real_packet->irrigation_time;
65585 old->mining_shield_incr = real_packet->mining_shield_incr;
65586 old->mining_time = real_packet->mining_time;
65587 old->animal = real_packet->animal;
65588 old->transform_result = real_packet->transform_result;
65589 old->transform_time = real_packet->transform_time;
65590 old->placing_time = real_packet->placing_time;
65591 old->pillage_time = real_packet->pillage_time;
65592 old->extra_count = real_packet->extra_count;
65593 {
65594 int i;
65595
65596 for (i = 0; i < real_packet->extra_count; i++) {
65597 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
65598 }
65599 }
65600 old->color_red = real_packet->color_red;
65601 old->color_green = real_packet->color_green;
65602 old->color_blue = real_packet->color_blue;
65603 if (real_packet->helptext) {
65604 strvec_copy(old->helptext, real_packet->helptext);
65605 } else {
65606 strvec_clear(old->helptext);
65607 }
65608 }
65609
65610#else /* FREECIV_DELTA_PROTOCOL */
65611#ifdef FREECIV_JSON_CONNECTION
65612 field_addr.name = "id";
65613#endif /* FREECIV_JSON_CONNECTION */
65614
65615 {
65616 int readin;
65617
65618 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65620 }
65621 real_packet->id = readin;
65622 }
65623
65624#ifdef FREECIV_JSON_CONNECTION
65625 field_addr.name = "tclass";
65626#endif /* FREECIV_JSON_CONNECTION */
65627
65628 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
65630 }
65631
65632#ifdef FREECIV_JSON_CONNECTION
65633 field_addr.name = "flags";
65634#endif /* FREECIV_JSON_CONNECTION */
65635
65636 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
65638 }
65639
65640#ifdef FREECIV_JSON_CONNECTION
65641 field_addr.name = "native_to";
65642#endif /* FREECIV_JSON_CONNECTION */
65643
65644 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
65645 RECEIVE_PACKET_FIELD_ERROR(native_to);
65646 }
65647
65648#ifdef FREECIV_JSON_CONNECTION
65649 field_addr.name = "name";
65650#endif /* FREECIV_JSON_CONNECTION */
65651
65652 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
65654 }
65655
65656#ifdef FREECIV_JSON_CONNECTION
65657 field_addr.name = "rule_name";
65658#endif /* FREECIV_JSON_CONNECTION */
65659
65660 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
65661 RECEIVE_PACKET_FIELD_ERROR(rule_name);
65662 }
65663
65664#ifdef FREECIV_JSON_CONNECTION
65665 field_addr.name = "graphic_str";
65666#endif /* FREECIV_JSON_CONNECTION */
65667
65668 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
65669 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
65670 }
65671
65672#ifdef FREECIV_JSON_CONNECTION
65673 field_addr.name = "graphic_alt";
65674#endif /* FREECIV_JSON_CONNECTION */
65675
65676 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
65677 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
65678 }
65679
65680#ifdef FREECIV_JSON_CONNECTION
65681 field_addr.name = "graphic_alt2";
65682#endif /* FREECIV_JSON_CONNECTION */
65683
65684 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
65685 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
65686 }
65687
65688#ifdef FREECIV_JSON_CONNECTION
65689 field_addr.name = "movement_cost";
65690#endif /* FREECIV_JSON_CONNECTION */
65691
65692 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
65693 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
65694 }
65695
65696#ifdef FREECIV_JSON_CONNECTION
65697 field_addr.name = "defense_bonus";
65698#endif /* FREECIV_JSON_CONNECTION */
65699
65700 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
65701 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
65702 }
65703
65704#ifdef FREECIV_JSON_CONNECTION
65705 field_addr.name = "output";
65706#endif /* FREECIV_JSON_CONNECTION */
65707
65708 {
65709 int i;
65710
65711
65712#ifdef FREECIV_JSON_CONNECTION
65713 /* Enter array. */
65714 field_addr.sub_location = plocation_elem_new(0);
65715#endif /* FREECIV_JSON_CONNECTION */
65716
65717 for (i = 0; i < O_LAST; i++) {
65718#ifdef FREECIV_JSON_CONNECTION
65719 /* Next array element */
65720 field_addr.sub_location->number = i;
65721#endif /* FREECIV_JSON_CONNECTION */
65722
65723 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
65725 }
65726 }
65727
65728#ifdef FREECIV_JSON_CONNECTION
65729 /* Exit array. */
65730 FC_FREE(field_addr.sub_location);
65731#endif /* FREECIV_JSON_CONNECTION */
65732 }
65733
65734#ifdef FREECIV_JSON_CONNECTION
65735 field_addr.name = "num_resources";
65736#endif /* FREECIV_JSON_CONNECTION */
65737
65738 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
65739 RECEIVE_PACKET_FIELD_ERROR(num_resources);
65740 }
65741
65742#ifdef FREECIV_JSON_CONNECTION
65743 field_addr.name = "resources";
65744#endif /* FREECIV_JSON_CONNECTION */
65745
65746 {
65747 int i;
65748
65749 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65750 RECEIVE_PACKET_FIELD_ERROR(resources, ": array truncated");
65751 }
65752
65753#ifdef FREECIV_JSON_CONNECTION
65754 /* Enter array. */
65755 field_addr.sub_location = plocation_elem_new(0);
65756#endif /* FREECIV_JSON_CONNECTION */
65757
65758 for (i = 0; i < real_packet->num_resources; i++) {
65759#ifdef FREECIV_JSON_CONNECTION
65760 /* Next array element */
65761 field_addr.sub_location->number = i;
65762#endif /* FREECIV_JSON_CONNECTION */
65763
65764 {
65765 int readin;
65766
65767 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65769 }
65770 real_packet->resources[i] = readin;
65771 }
65772 }
65773
65774#ifdef FREECIV_JSON_CONNECTION
65775 /* Exit array. */
65776 FC_FREE(field_addr.sub_location);
65777#endif /* FREECIV_JSON_CONNECTION */
65778 }
65779
65780#ifdef FREECIV_JSON_CONNECTION
65781 field_addr.name = "resource_freq";
65782#endif /* FREECIV_JSON_CONNECTION */
65783
65784 {
65785 int i;
65786
65787 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
65788 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": array truncated");
65789 }
65790
65791#ifdef FREECIV_JSON_CONNECTION
65792 /* Enter array. */
65793 field_addr.sub_location = plocation_elem_new(0);
65794#endif /* FREECIV_JSON_CONNECTION */
65795
65796 for (i = 0; i < real_packet->num_resources; i++) {
65797#ifdef FREECIV_JSON_CONNECTION
65798 /* Next array element */
65799 field_addr.sub_location->number = i;
65800#endif /* FREECIV_JSON_CONNECTION */
65801
65802 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
65803 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
65804 }
65805 }
65806
65807#ifdef FREECIV_JSON_CONNECTION
65808 /* Exit array. */
65809 FC_FREE(field_addr.sub_location);
65810#endif /* FREECIV_JSON_CONNECTION */
65811 }
65812
65813#ifdef FREECIV_JSON_CONNECTION
65814 field_addr.name = "road_output_incr_pct";
65815#endif /* FREECIV_JSON_CONNECTION */
65816
65817 {
65818 int i;
65819
65820
65821#ifdef FREECIV_JSON_CONNECTION
65822 /* Enter array. */
65823 field_addr.sub_location = plocation_elem_new(0);
65824#endif /* FREECIV_JSON_CONNECTION */
65825
65826 for (i = 0; i < O_LAST; i++) {
65827#ifdef FREECIV_JSON_CONNECTION
65828 /* Next array element */
65829 field_addr.sub_location->number = i;
65830#endif /* FREECIV_JSON_CONNECTION */
65831
65832 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
65833 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
65834 }
65835 }
65836
65837#ifdef FREECIV_JSON_CONNECTION
65838 /* Exit array. */
65839 FC_FREE(field_addr.sub_location);
65840#endif /* FREECIV_JSON_CONNECTION */
65841 }
65842
65843#ifdef FREECIV_JSON_CONNECTION
65844 field_addr.name = "base_time";
65845#endif /* FREECIV_JSON_CONNECTION */
65846
65847 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
65848 RECEIVE_PACKET_FIELD_ERROR(base_time);
65849 }
65850
65851#ifdef FREECIV_JSON_CONNECTION
65852 field_addr.name = "road_time";
65853#endif /* FREECIV_JSON_CONNECTION */
65854
65855 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
65856 RECEIVE_PACKET_FIELD_ERROR(road_time);
65857 }
65858
65859#ifdef FREECIV_JSON_CONNECTION
65860 field_addr.name = "cultivate_result";
65861#endif /* FREECIV_JSON_CONNECTION */
65862
65863 {
65864 int readin;
65865
65866 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65867 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
65868 }
65869 real_packet->cultivate_result = readin;
65870 }
65871
65872#ifdef FREECIV_JSON_CONNECTION
65873 field_addr.name = "cultivate_time";
65874#endif /* FREECIV_JSON_CONNECTION */
65875
65876 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
65877 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
65878 }
65879
65880#ifdef FREECIV_JSON_CONNECTION
65881 field_addr.name = "plant_result";
65882#endif /* FREECIV_JSON_CONNECTION */
65883
65884 {
65885 int readin;
65886
65887 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65888 RECEIVE_PACKET_FIELD_ERROR(plant_result);
65889 }
65890 real_packet->plant_result = readin;
65891 }
65892
65893#ifdef FREECIV_JSON_CONNECTION
65894 field_addr.name = "plant_time";
65895#endif /* FREECIV_JSON_CONNECTION */
65896
65897 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
65898 RECEIVE_PACKET_FIELD_ERROR(plant_time);
65899 }
65900
65901#ifdef FREECIV_JSON_CONNECTION
65902 field_addr.name = "irrigation_food_incr";
65903#endif /* FREECIV_JSON_CONNECTION */
65904
65905 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
65906 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
65907 }
65908
65909#ifdef FREECIV_JSON_CONNECTION
65910 field_addr.name = "irrigation_time";
65911#endif /* FREECIV_JSON_CONNECTION */
65912
65913 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
65914 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
65915 }
65916
65917#ifdef FREECIV_JSON_CONNECTION
65918 field_addr.name = "mining_shield_incr";
65919#endif /* FREECIV_JSON_CONNECTION */
65920
65921 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
65922 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
65923 }
65924
65925#ifdef FREECIV_JSON_CONNECTION
65926 field_addr.name = "mining_time";
65927#endif /* FREECIV_JSON_CONNECTION */
65928
65929 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
65930 RECEIVE_PACKET_FIELD_ERROR(mining_time);
65931 }
65932
65933#ifdef FREECIV_JSON_CONNECTION
65934 field_addr.name = "animal";
65935#endif /* FREECIV_JSON_CONNECTION */
65936
65937 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
65939 }
65940
65941#ifdef FREECIV_JSON_CONNECTION
65942 field_addr.name = "transform_result";
65943#endif /* FREECIV_JSON_CONNECTION */
65944
65945 {
65946 int readin;
65947
65948 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65949 RECEIVE_PACKET_FIELD_ERROR(transform_result);
65950 }
65951 real_packet->transform_result = readin;
65952 }
65953
65954#ifdef FREECIV_JSON_CONNECTION
65955 field_addr.name = "transform_time";
65956#endif /* FREECIV_JSON_CONNECTION */
65957
65958 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
65959 RECEIVE_PACKET_FIELD_ERROR(transform_time);
65960 }
65961
65962#ifdef FREECIV_JSON_CONNECTION
65963 field_addr.name = "placing_time";
65964#endif /* FREECIV_JSON_CONNECTION */
65965
65966 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
65967 RECEIVE_PACKET_FIELD_ERROR(placing_time);
65968 }
65969
65970#ifdef FREECIV_JSON_CONNECTION
65971 field_addr.name = "pillage_time";
65972#endif /* FREECIV_JSON_CONNECTION */
65973
65974 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
65975 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
65976 }
65977
65978#ifdef FREECIV_JSON_CONNECTION
65979 field_addr.name = "extra_count";
65980#endif /* FREECIV_JSON_CONNECTION */
65981
65982 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
65984 }
65985
65986#ifdef FREECIV_JSON_CONNECTION
65987 field_addr.name = "extra_removal_times";
65988#endif /* FREECIV_JSON_CONNECTION */
65989
65990 {
65991 int i;
65992
65993 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
65994 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": array truncated");
65995 }
65996
65997#ifdef FREECIV_JSON_CONNECTION
65998 /* Enter array. */
65999 field_addr.sub_location = plocation_elem_new(0);
66000#endif /* FREECIV_JSON_CONNECTION */
66001
66002 for (i = 0; i < real_packet->extra_count; i++) {
66003#ifdef FREECIV_JSON_CONNECTION
66004 /* Next array element */
66005 field_addr.sub_location->number = i;
66006#endif /* FREECIV_JSON_CONNECTION */
66007
66008 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
66009 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
66010 }
66011 }
66012
66013#ifdef FREECIV_JSON_CONNECTION
66014 /* Exit array. */
66015 FC_FREE(field_addr.sub_location);
66016#endif /* FREECIV_JSON_CONNECTION */
66017 }
66018
66019#ifdef FREECIV_JSON_CONNECTION
66020 field_addr.name = "color_red";
66021#endif /* FREECIV_JSON_CONNECTION */
66022
66023 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
66024 RECEIVE_PACKET_FIELD_ERROR(color_red);
66025 }
66026
66027#ifdef FREECIV_JSON_CONNECTION
66028 field_addr.name = "color_green";
66029#endif /* FREECIV_JSON_CONNECTION */
66030
66031 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
66032 RECEIVE_PACKET_FIELD_ERROR(color_green);
66033 }
66034
66035#ifdef FREECIV_JSON_CONNECTION
66036 field_addr.name = "color_blue";
66037#endif /* FREECIV_JSON_CONNECTION */
66038
66039 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
66040 RECEIVE_PACKET_FIELD_ERROR(color_blue);
66041 }
66042
66043#ifdef FREECIV_JSON_CONNECTION
66044 field_addr.name = "helptext";
66045#endif /* FREECIV_JSON_CONNECTION */
66046
66047 {
66048 int i;
66049
66050 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
66052 }
66053 strvec_reserve(real_packet->helptext, i);
66054
66055#ifdef FREECIV_JSON_CONNECTION
66056 /* Enter array. */
66057 field_addr.sub_location = plocation_elem_new(0);
66058#endif /* FREECIV_JSON_CONNECTION */
66059
66060 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
66061#ifdef FREECIV_JSON_CONNECTION
66062 /* Next array element */
66063 field_addr.sub_location->number = i;
66064#endif /* FREECIV_JSON_CONNECTION */
66065
66066 {
66067 char readin[MAX_LEN_PACKET];
66068
66069 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
66070 || !strvec_set(real_packet->helptext, i, readin)) {
66072 }
66073 }
66074 }
66075
66076#ifdef FREECIV_JSON_CONNECTION
66077 /* Exit array. */
66078 FC_FREE(field_addr.sub_location);
66079#endif /* FREECIV_JSON_CONNECTION */
66080 }
66081#endif /* FREECIV_DELTA_PROTOCOL */
66082
66084#undef FREE_PACKET_STRUCT
66085}
66086
66088{
66089 const struct packet_ruleset_terrain *real_packet = packet;
66090 int e;
66092
66093 log_packet_detailed("packet_ruleset_terrain_100: sending info about ()");
66094
66095#ifdef FREECIV_DELTA_PROTOCOL
66098 bool differ;
66099 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN;
66100
66101 if (nullptr == *hash) {
66103 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain);
66104 }
66105 BV_CLR_ALL(fields);
66106
66107 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66108 old = fc_malloc(sizeof(*old));
66109 /* temporary bitcopy just to insert correctly */
66110 *old = *real_packet;
66113 }
66114
66115 differ = (old->id != real_packet->id);
66116 if (differ) {
66117 BV_SET(fields, 0);
66118 }
66119
66120 differ = (old->tclass != real_packet->tclass);
66121 if (differ) {
66122 BV_SET(fields, 1);
66123 }
66124
66125 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
66126 if (differ) {
66127 BV_SET(fields, 2);
66128 }
66129
66130 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
66131 if (differ) {
66132 BV_SET(fields, 3);
66133 }
66134
66135 differ = (strcmp(old->name, real_packet->name) != 0);
66136 if (differ) {
66137 BV_SET(fields, 4);
66138 }
66139
66140 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
66141 if (differ) {
66142 BV_SET(fields, 5);
66143 }
66144
66145 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
66146 if (differ) {
66147 BV_SET(fields, 6);
66148 }
66149
66150 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
66151 if (differ) {
66152 BV_SET(fields, 7);
66153 }
66154
66155 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
66156 if (differ) {
66157 BV_SET(fields, 8);
66158 }
66159
66160 differ = (old->movement_cost != real_packet->movement_cost);
66161 if (differ) {
66162 BV_SET(fields, 9);
66163 }
66164
66165 differ = (old->defense_bonus != real_packet->defense_bonus);
66166 if (differ) {
66167 BV_SET(fields, 10);
66168 }
66169
66170 differ = FALSE;
66171 {
66172 int i;
66173
66174 for (i = 0; i < O_LAST; i++) {
66175 differ = (old->output[i] != real_packet->output[i]);
66176 if (differ) {
66177 break;
66178 }
66179 }
66180 }
66181 if (differ) {
66182 BV_SET(fields, 11);
66183 }
66184
66185 differ = (old->num_resources != real_packet->num_resources);
66186 if (differ) {
66187 BV_SET(fields, 12);
66188 }
66189
66190 differ = (old->num_resources != real_packet->num_resources);
66191 if (!differ) {
66192 int i;
66193
66194 for (i = 0; i < old->num_resources; i++) {
66195 differ = (old->resources[i] != real_packet->resources[i]);
66196 if (differ) {
66197 break;
66198 }
66199 }
66200 }
66201 if (differ) {
66202 BV_SET(fields, 13);
66203 }
66204
66205 differ = (old->num_resources != real_packet->num_resources);
66206 if (!differ) {
66207 int i;
66208
66209 for (i = 0; i < old->num_resources; i++) {
66210 differ = (old->resource_freq[i] != real_packet->resource_freq[i]);
66211 if (differ) {
66212 break;
66213 }
66214 }
66215 }
66216 if (differ) {
66217 BV_SET(fields, 14);
66218 }
66219
66220 differ = FALSE;
66221 {
66222 int i;
66223
66224 for (i = 0; i < O_LAST; i++) {
66225 differ = (old->road_output_incr_pct[i] != real_packet->road_output_incr_pct[i]);
66226 if (differ) {
66227 break;
66228 }
66229 }
66230 }
66231 if (differ) {
66232 BV_SET(fields, 15);
66233 }
66234
66235 differ = (old->base_time != real_packet->base_time);
66236 if (differ) {
66237 BV_SET(fields, 16);
66238 }
66239
66240 differ = (old->road_time != real_packet->road_time);
66241 if (differ) {
66242 BV_SET(fields, 17);
66243 }
66244
66245 differ = (old->cultivate_result != real_packet->cultivate_result);
66246 if (differ) {
66247 BV_SET(fields, 18);
66248 }
66249
66250 differ = (old->cultivate_time != real_packet->cultivate_time);
66251 if (differ) {
66252 BV_SET(fields, 19);
66253 }
66254
66255 differ = (old->plant_result != real_packet->plant_result);
66256 if (differ) {
66257 BV_SET(fields, 20);
66258 }
66259
66260 differ = (old->plant_time != real_packet->plant_time);
66261 if (differ) {
66262 BV_SET(fields, 21);
66263 }
66264
66265 differ = (old->irrigation_food_incr != real_packet->irrigation_food_incr);
66266 if (differ) {
66267 BV_SET(fields, 22);
66268 }
66269
66270 differ = (old->irrigation_time != real_packet->irrigation_time);
66271 if (differ) {
66272 BV_SET(fields, 23);
66273 }
66274
66275 differ = (old->mining_shield_incr != real_packet->mining_shield_incr);
66276 if (differ) {
66277 BV_SET(fields, 24);
66278 }
66279
66280 differ = (old->mining_time != real_packet->mining_time);
66281 if (differ) {
66282 BV_SET(fields, 25);
66283 }
66284
66285 differ = (old->animal != real_packet->animal);
66286 if (differ) {
66287 BV_SET(fields, 26);
66288 }
66289
66290 differ = (old->transform_result != real_packet->transform_result);
66291 if (differ) {
66292 BV_SET(fields, 27);
66293 }
66294
66295 differ = (old->transform_time != real_packet->transform_time);
66296 if (differ) {
66297 BV_SET(fields, 28);
66298 }
66299
66300 differ = (old->placing_time != real_packet->placing_time);
66301 if (differ) {
66302 BV_SET(fields, 29);
66303 }
66304
66305 differ = (old->pillage_time != real_packet->pillage_time);
66306 if (differ) {
66307 BV_SET(fields, 30);
66308 }
66309
66310 differ = (old->extra_count != real_packet->extra_count);
66311 if (differ) {
66312 BV_SET(fields, 31);
66313 }
66314
66315 differ = (old->extra_count != real_packet->extra_count);
66316 if (!differ) {
66317 int i;
66318
66319 for (i = 0; i < old->extra_count; i++) {
66320 differ = (old->extra_removal_times[i] != real_packet->extra_removal_times[i]);
66321 if (differ) {
66322 break;
66323 }
66324 }
66325 }
66326 if (differ) {
66327 BV_SET(fields, 32);
66328 }
66329
66330 differ = (old->color_red != real_packet->color_red);
66331 if (differ) {
66332 BV_SET(fields, 33);
66333 }
66334
66335 differ = (old->color_green != real_packet->color_green);
66336 if (differ) {
66337 BV_SET(fields, 34);
66338 }
66339
66340 differ = (old->color_blue != real_packet->color_blue);
66341 if (differ) {
66342 BV_SET(fields, 35);
66343 }
66344
66345 if (real_packet->helptext) {
66346 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
66347 } else {
66348 differ = (strvec_size(old->helptext) > 0);
66349 }
66350 if (differ) {
66351 BV_SET(fields, 36);
66352 }
66353#endif /* FREECIV_DELTA_PROTOCOL */
66354
66355#ifdef FREECIV_JSON_CONNECTION
66356 struct plocation field_addr;
66357 {
66358 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
66361 }
66362#endif /* FREECIV_JSON_CONNECTION */
66363
66364#ifdef FREECIV_DELTA_PROTOCOL
66365#ifdef FREECIV_JSON_CONNECTION
66366 field_addr.name = "fields";
66367#endif /* FREECIV_JSON_CONNECTION */
66368 e = 0;
66369 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66370 if (e) {
66371 log_packet_detailed("fields bitvector error detected");
66372 }
66373
66374 if (BV_ISSET(fields, 0)) {
66375 log_packet_detailed(" field 'id' has changed");
66376
66377#ifdef FREECIV_JSON_CONNECTION
66378 field_addr.name = "id";
66379#endif /* FREECIV_JSON_CONNECTION */
66380 e = 0;
66381
66382 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66383
66384 if (e) {
66385 log_packet_detailed("'id' field error detected");
66386 }
66387 }
66388
66389 if (BV_ISSET(fields, 1)) {
66390 log_packet_detailed(" field 'tclass' has changed");
66391
66392#ifdef FREECIV_JSON_CONNECTION
66393 field_addr.name = "tclass";
66394#endif /* FREECIV_JSON_CONNECTION */
66395 e = 0;
66396
66397 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
66398
66399 if (e) {
66400 log_packet_detailed("'tclass' field error detected");
66401 }
66402 }
66403
66404 if (BV_ISSET(fields, 2)) {
66405 log_packet_detailed(" field 'flags' has changed");
66406
66407#ifdef FREECIV_JSON_CONNECTION
66408 field_addr.name = "flags";
66409#endif /* FREECIV_JSON_CONNECTION */
66410 e = 0;
66411
66412 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
66413
66414 if (e) {
66415 log_packet_detailed("'flags' field error detected");
66416 }
66417 }
66418
66419 if (BV_ISSET(fields, 3)) {
66420 log_packet_detailed(" field 'native_to' has changed");
66421
66422#ifdef FREECIV_JSON_CONNECTION
66423 field_addr.name = "native_to";
66424#endif /* FREECIV_JSON_CONNECTION */
66425 e = 0;
66426
66427 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
66428
66429 if (e) {
66430 log_packet_detailed("'native_to' field error detected");
66431 }
66432 }
66433
66434 if (BV_ISSET(fields, 4)) {
66435 log_packet_detailed(" field 'name' has changed");
66436
66437#ifdef FREECIV_JSON_CONNECTION
66438 field_addr.name = "name";
66439#endif /* FREECIV_JSON_CONNECTION */
66440 e = 0;
66441
66442 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
66443
66444 if (e) {
66445 log_packet_detailed("'name' field error detected");
66446 }
66447 }
66448
66449 if (BV_ISSET(fields, 5)) {
66450 log_packet_detailed(" field 'rule_name' has changed");
66451
66452#ifdef FREECIV_JSON_CONNECTION
66453 field_addr.name = "rule_name";
66454#endif /* FREECIV_JSON_CONNECTION */
66455 e = 0;
66456
66457 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
66458
66459 if (e) {
66460 log_packet_detailed("'rule_name' field error detected");
66461 }
66462 }
66463
66464 if (BV_ISSET(fields, 6)) {
66465 log_packet_detailed(" field 'graphic_str' has changed");
66466
66467#ifdef FREECIV_JSON_CONNECTION
66468 field_addr.name = "graphic_str";
66469#endif /* FREECIV_JSON_CONNECTION */
66470 e = 0;
66471
66472 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
66473
66474 if (e) {
66475 log_packet_detailed("'graphic_str' field error detected");
66476 }
66477 }
66478
66479 if (BV_ISSET(fields, 7)) {
66480 log_packet_detailed(" field 'graphic_alt' has changed");
66481
66482#ifdef FREECIV_JSON_CONNECTION
66483 field_addr.name = "graphic_alt";
66484#endif /* FREECIV_JSON_CONNECTION */
66485 e = 0;
66486
66487 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
66488
66489 if (e) {
66490 log_packet_detailed("'graphic_alt' field error detected");
66491 }
66492 }
66493
66494 if (BV_ISSET(fields, 8)) {
66495 log_packet_detailed(" field 'graphic_alt2' has changed");
66496
66497#ifdef FREECIV_JSON_CONNECTION
66498 field_addr.name = "graphic_alt2";
66499#endif /* FREECIV_JSON_CONNECTION */
66500 e = 0;
66501
66502 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
66503
66504 if (e) {
66505 log_packet_detailed("'graphic_alt2' field error detected");
66506 }
66507 }
66508
66509 if (BV_ISSET(fields, 9)) {
66510 log_packet_detailed(" field 'movement_cost' has changed");
66511
66512#ifdef FREECIV_JSON_CONNECTION
66513 field_addr.name = "movement_cost";
66514#endif /* FREECIV_JSON_CONNECTION */
66515 e = 0;
66516
66517 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
66518
66519 if (e) {
66520 log_packet_detailed("'movement_cost' field error detected");
66521 }
66522 }
66523
66524 if (BV_ISSET(fields, 10)) {
66525 log_packet_detailed(" field 'defense_bonus' has changed");
66526
66527#ifdef FREECIV_JSON_CONNECTION
66528 field_addr.name = "defense_bonus";
66529#endif /* FREECIV_JSON_CONNECTION */
66530 e = 0;
66531
66532 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
66533
66534 if (e) {
66535 log_packet_detailed("'defense_bonus' field error detected");
66536 }
66537 }
66538
66539 if (BV_ISSET(fields, 11)) {
66540 log_packet_detailed(" field 'output' has changed");
66541
66542#ifdef FREECIV_JSON_CONNECTION
66543 field_addr.name = "output";
66544#endif /* FREECIV_JSON_CONNECTION */
66545 e = 0;
66546
66547 {
66548 int i;
66549
66550#ifdef FREECIV_JSON_CONNECTION
66551 /* Create the array. */
66552 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66553
66554 /* Enter array. */
66555 field_addr.sub_location = plocation_elem_new(0);
66556#endif /* FREECIV_JSON_CONNECTION */
66557
66558 for (i = 0; i < O_LAST; i++) {
66559#ifdef FREECIV_JSON_CONNECTION
66560 /* Next array element. */
66561 field_addr.sub_location->number = i;
66562#endif /* FREECIV_JSON_CONNECTION */
66563
66564 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
66565 }
66566
66567#ifdef FREECIV_JSON_CONNECTION
66568 /* Exit array. */
66569 FC_FREE(field_addr.sub_location);
66570#endif /* FREECIV_JSON_CONNECTION */
66571 }
66572
66573 if (e) {
66574 log_packet_detailed("'output' field error detected");
66575 }
66576 }
66577
66578 if (BV_ISSET(fields, 12)) {
66579 log_packet_detailed(" field 'num_resources' has changed");
66580
66581#ifdef FREECIV_JSON_CONNECTION
66582 field_addr.name = "num_resources";
66583#endif /* FREECIV_JSON_CONNECTION */
66584 e = 0;
66585
66586 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
66587
66588 if (e) {
66589 log_packet_detailed("'num_resources' field error detected");
66590 }
66591 }
66592
66593 if (BV_ISSET(fields, 13)) {
66594 log_packet_detailed(" field 'resources' has changed");
66595
66596#ifdef FREECIV_JSON_CONNECTION
66597 field_addr.name = "resources";
66598#endif /* FREECIV_JSON_CONNECTION */
66599 e = 0;
66600
66601 {
66602 int i;
66603
66604#ifdef FREECIV_JSON_CONNECTION
66605 /* Create the array. */
66606 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
66607
66608 /* Enter array. */
66609 field_addr.sub_location = plocation_elem_new(0);
66610#endif /* FREECIV_JSON_CONNECTION */
66611
66612 for (i = 0; i < real_packet->num_resources; i++) {
66613#ifdef FREECIV_JSON_CONNECTION
66614 /* Next array element. */
66615 field_addr.sub_location->number = i;
66616#endif /* FREECIV_JSON_CONNECTION */
66617
66618 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
66619 }
66620
66621#ifdef FREECIV_JSON_CONNECTION
66622 /* Exit array. */
66623 FC_FREE(field_addr.sub_location);
66624#endif /* FREECIV_JSON_CONNECTION */
66625 }
66626
66627 if (e) {
66628 log_packet_detailed("'resources' field error detected");
66629 }
66630 }
66631
66632 if (BV_ISSET(fields, 14)) {
66633 log_packet_detailed(" field 'resource_freq' has changed");
66634
66635#ifdef FREECIV_JSON_CONNECTION
66636 field_addr.name = "resource_freq";
66637#endif /* FREECIV_JSON_CONNECTION */
66638 e = 0;
66639
66640 {
66641 int i;
66642
66643#ifdef FREECIV_JSON_CONNECTION
66644 /* Create the array. */
66645 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
66646
66647 /* Enter array. */
66648 field_addr.sub_location = plocation_elem_new(0);
66649#endif /* FREECIV_JSON_CONNECTION */
66650
66651 for (i = 0; i < real_packet->num_resources; i++) {
66652#ifdef FREECIV_JSON_CONNECTION
66653 /* Next array element. */
66654 field_addr.sub_location->number = i;
66655#endif /* FREECIV_JSON_CONNECTION */
66656
66657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
66658 }
66659
66660#ifdef FREECIV_JSON_CONNECTION
66661 /* Exit array. */
66662 FC_FREE(field_addr.sub_location);
66663#endif /* FREECIV_JSON_CONNECTION */
66664 }
66665
66666 if (e) {
66667 log_packet_detailed("'resource_freq' field error detected");
66668 }
66669 }
66670
66671 if (BV_ISSET(fields, 15)) {
66672 log_packet_detailed(" field 'road_output_incr_pct' has changed");
66673
66674#ifdef FREECIV_JSON_CONNECTION
66675 field_addr.name = "road_output_incr_pct";
66676#endif /* FREECIV_JSON_CONNECTION */
66677 e = 0;
66678
66679 {
66680 int i;
66681
66682#ifdef FREECIV_JSON_CONNECTION
66683 /* Create the array. */
66684 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66685
66686 /* Enter array. */
66687 field_addr.sub_location = plocation_elem_new(0);
66688#endif /* FREECIV_JSON_CONNECTION */
66689
66690 for (i = 0; i < O_LAST; i++) {
66691#ifdef FREECIV_JSON_CONNECTION
66692 /* Next array element. */
66693 field_addr.sub_location->number = i;
66694#endif /* FREECIV_JSON_CONNECTION */
66695
66696 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
66697 }
66698
66699#ifdef FREECIV_JSON_CONNECTION
66700 /* Exit array. */
66701 FC_FREE(field_addr.sub_location);
66702#endif /* FREECIV_JSON_CONNECTION */
66703 }
66704
66705 if (e) {
66706 log_packet_detailed("'road_output_incr_pct' field error detected");
66707 }
66708 }
66709
66710 if (BV_ISSET(fields, 16)) {
66711 log_packet_detailed(" field 'base_time' has changed");
66712
66713#ifdef FREECIV_JSON_CONNECTION
66714 field_addr.name = "base_time";
66715#endif /* FREECIV_JSON_CONNECTION */
66716 e = 0;
66717
66718 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
66719
66720 if (e) {
66721 log_packet_detailed("'base_time' field error detected");
66722 }
66723 }
66724
66725 if (BV_ISSET(fields, 17)) {
66726 log_packet_detailed(" field 'road_time' has changed");
66727
66728#ifdef FREECIV_JSON_CONNECTION
66729 field_addr.name = "road_time";
66730#endif /* FREECIV_JSON_CONNECTION */
66731 e = 0;
66732
66733 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
66734
66735 if (e) {
66736 log_packet_detailed("'road_time' field error detected");
66737 }
66738 }
66739
66740 if (BV_ISSET(fields, 18)) {
66741 log_packet_detailed(" field 'cultivate_result' has changed");
66742
66743#ifdef FREECIV_JSON_CONNECTION
66744 field_addr.name = "cultivate_result";
66745#endif /* FREECIV_JSON_CONNECTION */
66746 e = 0;
66747
66748 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
66749
66750 if (e) {
66751 log_packet_detailed("'cultivate_result' field error detected");
66752 }
66753 }
66754
66755 if (BV_ISSET(fields, 19)) {
66756 log_packet_detailed(" field 'cultivate_time' has changed");
66757
66758#ifdef FREECIV_JSON_CONNECTION
66759 field_addr.name = "cultivate_time";
66760#endif /* FREECIV_JSON_CONNECTION */
66761 e = 0;
66762
66763 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
66764
66765 if (e) {
66766 log_packet_detailed("'cultivate_time' field error detected");
66767 }
66768 }
66769
66770 if (BV_ISSET(fields, 20)) {
66771 log_packet_detailed(" field 'plant_result' has changed");
66772
66773#ifdef FREECIV_JSON_CONNECTION
66774 field_addr.name = "plant_result";
66775#endif /* FREECIV_JSON_CONNECTION */
66776 e = 0;
66777
66778 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
66779
66780 if (e) {
66781 log_packet_detailed("'plant_result' field error detected");
66782 }
66783 }
66784
66785 if (BV_ISSET(fields, 21)) {
66786 log_packet_detailed(" field 'plant_time' has changed");
66787
66788#ifdef FREECIV_JSON_CONNECTION
66789 field_addr.name = "plant_time";
66790#endif /* FREECIV_JSON_CONNECTION */
66791 e = 0;
66792
66793 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
66794
66795 if (e) {
66796 log_packet_detailed("'plant_time' field error detected");
66797 }
66798 }
66799
66800 if (BV_ISSET(fields, 22)) {
66801 log_packet_detailed(" field 'irrigation_food_incr' has changed");
66802
66803#ifdef FREECIV_JSON_CONNECTION
66804 field_addr.name = "irrigation_food_incr";
66805#endif /* FREECIV_JSON_CONNECTION */
66806 e = 0;
66807
66808 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
66809
66810 if (e) {
66811 log_packet_detailed("'irrigation_food_incr' field error detected");
66812 }
66813 }
66814
66815 if (BV_ISSET(fields, 23)) {
66816 log_packet_detailed(" field 'irrigation_time' has changed");
66817
66818#ifdef FREECIV_JSON_CONNECTION
66819 field_addr.name = "irrigation_time";
66820#endif /* FREECIV_JSON_CONNECTION */
66821 e = 0;
66822
66823 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
66824
66825 if (e) {
66826 log_packet_detailed("'irrigation_time' field error detected");
66827 }
66828 }
66829
66830 if (BV_ISSET(fields, 24)) {
66831 log_packet_detailed(" field 'mining_shield_incr' has changed");
66832
66833#ifdef FREECIV_JSON_CONNECTION
66834 field_addr.name = "mining_shield_incr";
66835#endif /* FREECIV_JSON_CONNECTION */
66836 e = 0;
66837
66838 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
66839
66840 if (e) {
66841 log_packet_detailed("'mining_shield_incr' field error detected");
66842 }
66843 }
66844
66845 if (BV_ISSET(fields, 25)) {
66846 log_packet_detailed(" field 'mining_time' has changed");
66847
66848#ifdef FREECIV_JSON_CONNECTION
66849 field_addr.name = "mining_time";
66850#endif /* FREECIV_JSON_CONNECTION */
66851 e = 0;
66852
66853 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
66854
66855 if (e) {
66856 log_packet_detailed("'mining_time' field error detected");
66857 }
66858 }
66859
66860 if (BV_ISSET(fields, 26)) {
66861 log_packet_detailed(" field 'animal' has changed");
66862
66863#ifdef FREECIV_JSON_CONNECTION
66864 field_addr.name = "animal";
66865#endif /* FREECIV_JSON_CONNECTION */
66866 e = 0;
66867
66868 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
66869
66870 if (e) {
66871 log_packet_detailed("'animal' field error detected");
66872 }
66873 }
66874
66875 if (BV_ISSET(fields, 27)) {
66876 log_packet_detailed(" field 'transform_result' has changed");
66877
66878#ifdef FREECIV_JSON_CONNECTION
66879 field_addr.name = "transform_result";
66880#endif /* FREECIV_JSON_CONNECTION */
66881 e = 0;
66882
66883 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
66884
66885 if (e) {
66886 log_packet_detailed("'transform_result' field error detected");
66887 }
66888 }
66889
66890 if (BV_ISSET(fields, 28)) {
66891 log_packet_detailed(" field 'transform_time' has changed");
66892
66893#ifdef FREECIV_JSON_CONNECTION
66894 field_addr.name = "transform_time";
66895#endif /* FREECIV_JSON_CONNECTION */
66896 e = 0;
66897
66898 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
66899
66900 if (e) {
66901 log_packet_detailed("'transform_time' field error detected");
66902 }
66903 }
66904
66905 if (BV_ISSET(fields, 29)) {
66906 log_packet_detailed(" field 'placing_time' has changed");
66907
66908#ifdef FREECIV_JSON_CONNECTION
66909 field_addr.name = "placing_time";
66910#endif /* FREECIV_JSON_CONNECTION */
66911 e = 0;
66912
66913 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
66914
66915 if (e) {
66916 log_packet_detailed("'placing_time' field error detected");
66917 }
66918 }
66919
66920 if (BV_ISSET(fields, 30)) {
66921 log_packet_detailed(" field 'pillage_time' has changed");
66922
66923#ifdef FREECIV_JSON_CONNECTION
66924 field_addr.name = "pillage_time";
66925#endif /* FREECIV_JSON_CONNECTION */
66926 e = 0;
66927
66928 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
66929
66930 if (e) {
66931 log_packet_detailed("'pillage_time' field error detected");
66932 }
66933 }
66934
66935 if (BV_ISSET(fields, 31)) {
66936 log_packet_detailed(" field 'extra_count' has changed");
66937
66938#ifdef FREECIV_JSON_CONNECTION
66939 field_addr.name = "extra_count";
66940#endif /* FREECIV_JSON_CONNECTION */
66941 e = 0;
66942
66943 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
66944
66945 if (e) {
66946 log_packet_detailed("'extra_count' field error detected");
66947 }
66948 }
66949
66950 if (BV_ISSET(fields, 32)) {
66951 log_packet_detailed(" field 'extra_removal_times' has changed");
66952
66953#ifdef FREECIV_JSON_CONNECTION
66954 field_addr.name = "extra_removal_times";
66955#endif /* FREECIV_JSON_CONNECTION */
66956 e = 0;
66957
66958 {
66959 int i;
66960
66961#ifdef FREECIV_JSON_CONNECTION
66962 /* Create the array. */
66963 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
66964
66965 /* Enter array. */
66966 field_addr.sub_location = plocation_elem_new(0);
66967#endif /* FREECIV_JSON_CONNECTION */
66968
66969 for (i = 0; i < real_packet->extra_count; i++) {
66970#ifdef FREECIV_JSON_CONNECTION
66971 /* Next array element. */
66972 field_addr.sub_location->number = i;
66973#endif /* FREECIV_JSON_CONNECTION */
66974
66975 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
66976 }
66977
66978#ifdef FREECIV_JSON_CONNECTION
66979 /* Exit array. */
66980 FC_FREE(field_addr.sub_location);
66981#endif /* FREECIV_JSON_CONNECTION */
66982 }
66983
66984 if (e) {
66985 log_packet_detailed("'extra_removal_times' field error detected");
66986 }
66987 }
66988
66989 if (BV_ISSET(fields, 33)) {
66990 log_packet_detailed(" field 'color_red' has changed");
66991
66992#ifdef FREECIV_JSON_CONNECTION
66993 field_addr.name = "color_red";
66994#endif /* FREECIV_JSON_CONNECTION */
66995 e = 0;
66996
66997 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
66998
66999 if (e) {
67000 log_packet_detailed("'color_red' field error detected");
67001 }
67002 }
67003
67004 if (BV_ISSET(fields, 34)) {
67005 log_packet_detailed(" field 'color_green' has changed");
67006
67007#ifdef FREECIV_JSON_CONNECTION
67008 field_addr.name = "color_green";
67009#endif /* FREECIV_JSON_CONNECTION */
67010 e = 0;
67011
67012 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
67013
67014 if (e) {
67015 log_packet_detailed("'color_green' field error detected");
67016 }
67017 }
67018
67019 if (BV_ISSET(fields, 35)) {
67020 log_packet_detailed(" field 'color_blue' has changed");
67021
67022#ifdef FREECIV_JSON_CONNECTION
67023 field_addr.name = "color_blue";
67024#endif /* FREECIV_JSON_CONNECTION */
67025 e = 0;
67026
67027 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
67028
67029 if (e) {
67030 log_packet_detailed("'color_blue' field error detected");
67031 }
67032 }
67033
67034 if (BV_ISSET(fields, 36)) {
67035 log_packet_detailed(" field 'helptext' has changed");
67036
67037#ifdef FREECIV_JSON_CONNECTION
67038 field_addr.name = "helptext";
67039#endif /* FREECIV_JSON_CONNECTION */
67040 e = 0;
67041
67042 if (!real_packet->helptext) {
67043 /* Transmit null as empty */
67044 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
67045 } else {
67046 int i;
67047
67049 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
67050
67051#ifdef FREECIV_JSON_CONNECTION
67052 /* Enter array. */
67053 field_addr.sub_location = plocation_elem_new(0);
67054#endif /* FREECIV_JSON_CONNECTION */
67055
67056 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
67057#ifdef FREECIV_JSON_CONNECTION
67058 /* Next array element. */
67059 field_addr.sub_location->number = i;
67060#endif /* FREECIV_JSON_CONNECTION */
67061
67062 {
67063 const char *pstr = strvec_get(real_packet->helptext, i);
67064
67065 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
67066 }
67067 }
67068
67069#ifdef FREECIV_JSON_CONNECTION
67070 /* Exit array. */
67071 FC_FREE(field_addr.sub_location);
67072#endif /* FREECIV_JSON_CONNECTION */
67073 }
67074
67075 if (e) {
67076 log_packet_detailed("'helptext' field error detected");
67077 }
67078 }
67079
67080 old->id = real_packet->id;
67081 old->tclass = real_packet->tclass;
67082 old->flags = real_packet->flags;
67083 old->native_to = real_packet->native_to;
67084 sz_strlcpy(old->name, real_packet->name);
67085 sz_strlcpy(old->rule_name, real_packet->rule_name);
67086 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
67087 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
67088 sz_strlcpy(old->graphic_alt2, real_packet->graphic_alt2);
67089 old->movement_cost = real_packet->movement_cost;
67090 old->defense_bonus = real_packet->defense_bonus;
67091 {
67092 int i;
67093
67094 for (i = 0; i < O_LAST; i++) {
67095 old->output[i] = real_packet->output[i];
67096 }
67097 }
67098 old->num_resources = real_packet->num_resources;
67099 {
67100 int i;
67101
67102 for (i = 0; i < real_packet->num_resources; i++) {
67103 old->resources[i] = real_packet->resources[i];
67104 }
67105 }
67106 {
67107 int i;
67108
67109 for (i = 0; i < real_packet->num_resources; i++) {
67110 old->resource_freq[i] = real_packet->resource_freq[i];
67111 }
67112 }
67113 {
67114 int i;
67115
67116 for (i = 0; i < O_LAST; i++) {
67117 old->road_output_incr_pct[i] = real_packet->road_output_incr_pct[i];
67118 }
67119 }
67120 old->base_time = real_packet->base_time;
67121 old->road_time = real_packet->road_time;
67122 old->cultivate_result = real_packet->cultivate_result;
67123 old->cultivate_time = real_packet->cultivate_time;
67124 old->plant_result = real_packet->plant_result;
67125 old->plant_time = real_packet->plant_time;
67126 old->irrigation_food_incr = real_packet->irrigation_food_incr;
67127 old->irrigation_time = real_packet->irrigation_time;
67128 old->mining_shield_incr = real_packet->mining_shield_incr;
67129 old->mining_time = real_packet->mining_time;
67130 old->animal = real_packet->animal;
67131 old->transform_result = real_packet->transform_result;
67132 old->transform_time = real_packet->transform_time;
67133 old->placing_time = real_packet->placing_time;
67134 old->pillage_time = real_packet->pillage_time;
67135 old->extra_count = real_packet->extra_count;
67136 {
67137 int i;
67138
67139 for (i = 0; i < real_packet->extra_count; i++) {
67140 old->extra_removal_times[i] = real_packet->extra_removal_times[i];
67141 }
67142 }
67143 old->color_red = real_packet->color_red;
67144 old->color_green = real_packet->color_green;
67145 old->color_blue = real_packet->color_blue;
67146 if (real_packet->helptext) {
67147 strvec_copy(old->helptext, real_packet->helptext);
67148 } else {
67149 strvec_clear(old->helptext);
67150 }
67151
67152#else /* FREECIV_DELTA_PROTOCOL */
67153#ifdef FREECIV_JSON_CONNECTION
67154 field_addr.name = "id";
67155#endif /* FREECIV_JSON_CONNECTION */
67156 e = 0;
67157
67158 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67159
67160 if (e) {
67161 log_packet_detailed("'id' field error detected");
67162 }
67163
67164#ifdef FREECIV_JSON_CONNECTION
67165 field_addr.name = "tclass";
67166#endif /* FREECIV_JSON_CONNECTION */
67167 e = 0;
67168
67169 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
67170
67171 if (e) {
67172 log_packet_detailed("'tclass' field error detected");
67173 }
67174
67175#ifdef FREECIV_JSON_CONNECTION
67176 field_addr.name = "flags";
67177#endif /* FREECIV_JSON_CONNECTION */
67178 e = 0;
67179
67180 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
67181
67182 if (e) {
67183 log_packet_detailed("'flags' field error detected");
67184 }
67185
67186#ifdef FREECIV_JSON_CONNECTION
67187 field_addr.name = "native_to";
67188#endif /* FREECIV_JSON_CONNECTION */
67189 e = 0;
67190
67191 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
67192
67193 if (e) {
67194 log_packet_detailed("'native_to' field error detected");
67195 }
67196
67197#ifdef FREECIV_JSON_CONNECTION
67198 field_addr.name = "name";
67199#endif /* FREECIV_JSON_CONNECTION */
67200 e = 0;
67201
67202 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67203
67204 if (e) {
67205 log_packet_detailed("'name' field error detected");
67206 }
67207
67208#ifdef FREECIV_JSON_CONNECTION
67209 field_addr.name = "rule_name";
67210#endif /* FREECIV_JSON_CONNECTION */
67211 e = 0;
67212
67213 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67214
67215 if (e) {
67216 log_packet_detailed("'rule_name' field error detected");
67217 }
67218
67219#ifdef FREECIV_JSON_CONNECTION
67220 field_addr.name = "graphic_str";
67221#endif /* FREECIV_JSON_CONNECTION */
67222 e = 0;
67223
67224 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
67225
67226 if (e) {
67227 log_packet_detailed("'graphic_str' field error detected");
67228 }
67229
67230#ifdef FREECIV_JSON_CONNECTION
67231 field_addr.name = "graphic_alt";
67232#endif /* FREECIV_JSON_CONNECTION */
67233 e = 0;
67234
67235 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
67236
67237 if (e) {
67238 log_packet_detailed("'graphic_alt' field error detected");
67239 }
67240
67241#ifdef FREECIV_JSON_CONNECTION
67242 field_addr.name = "graphic_alt2";
67243#endif /* FREECIV_JSON_CONNECTION */
67244 e = 0;
67245
67246 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
67247
67248 if (e) {
67249 log_packet_detailed("'graphic_alt2' field error detected");
67250 }
67251
67252#ifdef FREECIV_JSON_CONNECTION
67253 field_addr.name = "movement_cost";
67254#endif /* FREECIV_JSON_CONNECTION */
67255 e = 0;
67256
67257 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
67258
67259 if (e) {
67260 log_packet_detailed("'movement_cost' field error detected");
67261 }
67262
67263#ifdef FREECIV_JSON_CONNECTION
67264 field_addr.name = "defense_bonus";
67265#endif /* FREECIV_JSON_CONNECTION */
67266 e = 0;
67267
67268 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
67269
67270 if (e) {
67271 log_packet_detailed("'defense_bonus' field error detected");
67272 }
67273
67274#ifdef FREECIV_JSON_CONNECTION
67275 field_addr.name = "output";
67276#endif /* FREECIV_JSON_CONNECTION */
67277 e = 0;
67278
67279 {
67280 int i;
67281
67282#ifdef FREECIV_JSON_CONNECTION
67283 /* Create the array. */
67284 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67285
67286 /* Enter array. */
67287 field_addr.sub_location = plocation_elem_new(0);
67288#endif /* FREECIV_JSON_CONNECTION */
67289
67290 for (i = 0; i < O_LAST; i++) {
67291#ifdef FREECIV_JSON_CONNECTION
67292 /* Next array element. */
67293 field_addr.sub_location->number = i;
67294#endif /* FREECIV_JSON_CONNECTION */
67295
67296 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
67297 }
67298
67299#ifdef FREECIV_JSON_CONNECTION
67300 /* Exit array. */
67301 FC_FREE(field_addr.sub_location);
67302#endif /* FREECIV_JSON_CONNECTION */
67303 }
67304
67305 if (e) {
67306 log_packet_detailed("'output' field error detected");
67307 }
67308
67309#ifdef FREECIV_JSON_CONNECTION
67310 field_addr.name = "num_resources";
67311#endif /* FREECIV_JSON_CONNECTION */
67312 e = 0;
67313
67314 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
67315
67316 if (e) {
67317 log_packet_detailed("'num_resources' field error detected");
67318 }
67319
67320#ifdef FREECIV_JSON_CONNECTION
67321 field_addr.name = "resources";
67322#endif /* FREECIV_JSON_CONNECTION */
67323 e = 0;
67324
67325 {
67326 int i;
67327
67328#ifdef FREECIV_JSON_CONNECTION
67329 /* Create the array. */
67330 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67331
67332 /* Enter array. */
67333 field_addr.sub_location = plocation_elem_new(0);
67334#endif /* FREECIV_JSON_CONNECTION */
67335
67336 for (i = 0; i < real_packet->num_resources; i++) {
67337#ifdef FREECIV_JSON_CONNECTION
67338 /* Next array element. */
67339 field_addr.sub_location->number = i;
67340#endif /* FREECIV_JSON_CONNECTION */
67341
67342 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
67343 }
67344
67345#ifdef FREECIV_JSON_CONNECTION
67346 /* Exit array. */
67347 FC_FREE(field_addr.sub_location);
67348#endif /* FREECIV_JSON_CONNECTION */
67349 }
67350
67351 if (e) {
67352 log_packet_detailed("'resources' field error detected");
67353 }
67354
67355#ifdef FREECIV_JSON_CONNECTION
67356 field_addr.name = "resource_freq";
67357#endif /* FREECIV_JSON_CONNECTION */
67358 e = 0;
67359
67360 {
67361 int i;
67362
67363#ifdef FREECIV_JSON_CONNECTION
67364 /* Create the array. */
67365 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
67366
67367 /* Enter array. */
67368 field_addr.sub_location = plocation_elem_new(0);
67369#endif /* FREECIV_JSON_CONNECTION */
67370
67371 for (i = 0; i < real_packet->num_resources; i++) {
67372#ifdef FREECIV_JSON_CONNECTION
67373 /* Next array element. */
67374 field_addr.sub_location->number = i;
67375#endif /* FREECIV_JSON_CONNECTION */
67376
67377 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
67378 }
67379
67380#ifdef FREECIV_JSON_CONNECTION
67381 /* Exit array. */
67382 FC_FREE(field_addr.sub_location);
67383#endif /* FREECIV_JSON_CONNECTION */
67384 }
67385
67386 if (e) {
67387 log_packet_detailed("'resource_freq' field error detected");
67388 }
67389
67390#ifdef FREECIV_JSON_CONNECTION
67391 field_addr.name = "road_output_incr_pct";
67392#endif /* FREECIV_JSON_CONNECTION */
67393 e = 0;
67394
67395 {
67396 int i;
67397
67398#ifdef FREECIV_JSON_CONNECTION
67399 /* Create the array. */
67400 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
67401
67402 /* Enter array. */
67403 field_addr.sub_location = plocation_elem_new(0);
67404#endif /* FREECIV_JSON_CONNECTION */
67405
67406 for (i = 0; i < O_LAST; i++) {
67407#ifdef FREECIV_JSON_CONNECTION
67408 /* Next array element. */
67409 field_addr.sub_location->number = i;
67410#endif /* FREECIV_JSON_CONNECTION */
67411
67412 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
67413 }
67414
67415#ifdef FREECIV_JSON_CONNECTION
67416 /* Exit array. */
67417 FC_FREE(field_addr.sub_location);
67418#endif /* FREECIV_JSON_CONNECTION */
67419 }
67420
67421 if (e) {
67422 log_packet_detailed("'road_output_incr_pct' field error detected");
67423 }
67424
67425#ifdef FREECIV_JSON_CONNECTION
67426 field_addr.name = "base_time";
67427#endif /* FREECIV_JSON_CONNECTION */
67428 e = 0;
67429
67430 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
67431
67432 if (e) {
67433 log_packet_detailed("'base_time' field error detected");
67434 }
67435
67436#ifdef FREECIV_JSON_CONNECTION
67437 field_addr.name = "road_time";
67438#endif /* FREECIV_JSON_CONNECTION */
67439 e = 0;
67440
67441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
67442
67443 if (e) {
67444 log_packet_detailed("'road_time' field error detected");
67445 }
67446
67447#ifdef FREECIV_JSON_CONNECTION
67448 field_addr.name = "cultivate_result";
67449#endif /* FREECIV_JSON_CONNECTION */
67450 e = 0;
67451
67452 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
67453
67454 if (e) {
67455 log_packet_detailed("'cultivate_result' field error detected");
67456 }
67457
67458#ifdef FREECIV_JSON_CONNECTION
67459 field_addr.name = "cultivate_time";
67460#endif /* FREECIV_JSON_CONNECTION */
67461 e = 0;
67462
67463 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
67464
67465 if (e) {
67466 log_packet_detailed("'cultivate_time' field error detected");
67467 }
67468
67469#ifdef FREECIV_JSON_CONNECTION
67470 field_addr.name = "plant_result";
67471#endif /* FREECIV_JSON_CONNECTION */
67472 e = 0;
67473
67474 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
67475
67476 if (e) {
67477 log_packet_detailed("'plant_result' field error detected");
67478 }
67479
67480#ifdef FREECIV_JSON_CONNECTION
67481 field_addr.name = "plant_time";
67482#endif /* FREECIV_JSON_CONNECTION */
67483 e = 0;
67484
67485 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
67486
67487 if (e) {
67488 log_packet_detailed("'plant_time' field error detected");
67489 }
67490
67491#ifdef FREECIV_JSON_CONNECTION
67492 field_addr.name = "irrigation_food_incr";
67493#endif /* FREECIV_JSON_CONNECTION */
67494 e = 0;
67495
67496 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
67497
67498 if (e) {
67499 log_packet_detailed("'irrigation_food_incr' field error detected");
67500 }
67501
67502#ifdef FREECIV_JSON_CONNECTION
67503 field_addr.name = "irrigation_time";
67504#endif /* FREECIV_JSON_CONNECTION */
67505 e = 0;
67506
67507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
67508
67509 if (e) {
67510 log_packet_detailed("'irrigation_time' field error detected");
67511 }
67512
67513#ifdef FREECIV_JSON_CONNECTION
67514 field_addr.name = "mining_shield_incr";
67515#endif /* FREECIV_JSON_CONNECTION */
67516 e = 0;
67517
67518 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
67519
67520 if (e) {
67521 log_packet_detailed("'mining_shield_incr' field error detected");
67522 }
67523
67524#ifdef FREECIV_JSON_CONNECTION
67525 field_addr.name = "mining_time";
67526#endif /* FREECIV_JSON_CONNECTION */
67527 e = 0;
67528
67529 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
67530
67531 if (e) {
67532 log_packet_detailed("'mining_time' field error detected");
67533 }
67534
67535#ifdef FREECIV_JSON_CONNECTION
67536 field_addr.name = "animal";
67537#endif /* FREECIV_JSON_CONNECTION */
67538 e = 0;
67539
67540 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
67541
67542 if (e) {
67543 log_packet_detailed("'animal' field error detected");
67544 }
67545
67546#ifdef FREECIV_JSON_CONNECTION
67547 field_addr.name = "transform_result";
67548#endif /* FREECIV_JSON_CONNECTION */
67549 e = 0;
67550
67551 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
67552
67553 if (e) {
67554 log_packet_detailed("'transform_result' field error detected");
67555 }
67556
67557#ifdef FREECIV_JSON_CONNECTION
67558 field_addr.name = "transform_time";
67559#endif /* FREECIV_JSON_CONNECTION */
67560 e = 0;
67561
67562 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
67563
67564 if (e) {
67565 log_packet_detailed("'transform_time' field error detected");
67566 }
67567
67568#ifdef FREECIV_JSON_CONNECTION
67569 field_addr.name = "placing_time";
67570#endif /* FREECIV_JSON_CONNECTION */
67571 e = 0;
67572
67573 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
67574
67575 if (e) {
67576 log_packet_detailed("'placing_time' field error detected");
67577 }
67578
67579#ifdef FREECIV_JSON_CONNECTION
67580 field_addr.name = "pillage_time";
67581#endif /* FREECIV_JSON_CONNECTION */
67582 e = 0;
67583
67584 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
67585
67586 if (e) {
67587 log_packet_detailed("'pillage_time' field error detected");
67588 }
67589
67590#ifdef FREECIV_JSON_CONNECTION
67591 field_addr.name = "extra_count";
67592#endif /* FREECIV_JSON_CONNECTION */
67593 e = 0;
67594
67595 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
67596
67597 if (e) {
67598 log_packet_detailed("'extra_count' field error detected");
67599 }
67600
67601#ifdef FREECIV_JSON_CONNECTION
67602 field_addr.name = "extra_removal_times";
67603#endif /* FREECIV_JSON_CONNECTION */
67604 e = 0;
67605
67606 {
67607 int i;
67608
67609#ifdef FREECIV_JSON_CONNECTION
67610 /* Create the array. */
67611 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
67612
67613 /* Enter array. */
67614 field_addr.sub_location = plocation_elem_new(0);
67615#endif /* FREECIV_JSON_CONNECTION */
67616
67617 for (i = 0; i < real_packet->extra_count; i++) {
67618#ifdef FREECIV_JSON_CONNECTION
67619 /* Next array element. */
67620 field_addr.sub_location->number = i;
67621#endif /* FREECIV_JSON_CONNECTION */
67622
67623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
67624 }
67625
67626#ifdef FREECIV_JSON_CONNECTION
67627 /* Exit array. */
67628 FC_FREE(field_addr.sub_location);
67629#endif /* FREECIV_JSON_CONNECTION */
67630 }
67631
67632 if (e) {
67633 log_packet_detailed("'extra_removal_times' field error detected");
67634 }
67635
67636#ifdef FREECIV_JSON_CONNECTION
67637 field_addr.name = "color_red";
67638#endif /* FREECIV_JSON_CONNECTION */
67639 e = 0;
67640
67641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
67642
67643 if (e) {
67644 log_packet_detailed("'color_red' field error detected");
67645 }
67646
67647#ifdef FREECIV_JSON_CONNECTION
67648 field_addr.name = "color_green";
67649#endif /* FREECIV_JSON_CONNECTION */
67650 e = 0;
67651
67652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
67653
67654 if (e) {
67655 log_packet_detailed("'color_green' field error detected");
67656 }
67657
67658#ifdef FREECIV_JSON_CONNECTION
67659 field_addr.name = "color_blue";
67660#endif /* FREECIV_JSON_CONNECTION */
67661 e = 0;
67662
67663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
67664
67665 if (e) {
67666 log_packet_detailed("'color_blue' field error detected");
67667 }
67668
67669#ifdef FREECIV_JSON_CONNECTION
67670 field_addr.name = "helptext";
67671#endif /* FREECIV_JSON_CONNECTION */
67672 e = 0;
67673
67674 if (!real_packet->helptext) {
67675 /* Transmit null as empty */
67676 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
67677 } else {
67678 int i;
67679
67681 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
67682
67683#ifdef FREECIV_JSON_CONNECTION
67684 /* Enter array. */
67685 field_addr.sub_location = plocation_elem_new(0);
67686#endif /* FREECIV_JSON_CONNECTION */
67687
67688 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
67689#ifdef FREECIV_JSON_CONNECTION
67690 /* Next array element. */
67691 field_addr.sub_location->number = i;
67692#endif /* FREECIV_JSON_CONNECTION */
67693
67694 {
67695 const char *pstr = strvec_get(real_packet->helptext, i);
67696
67697 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
67698 }
67699 }
67700
67701#ifdef FREECIV_JSON_CONNECTION
67702 /* Exit array. */
67703 FC_FREE(field_addr.sub_location);
67704#endif /* FREECIV_JSON_CONNECTION */
67705 }
67706
67707 if (e) {
67708 log_packet_detailed("'helptext' field error detected");
67709 }
67710#endif /* FREECIV_DELTA_PROTOCOL */
67711
67713}
67714
67716{
67717 if (!pc->used) {
67718 log_error("WARNING: trying to send data to the closed connection %s",
67720 return -1;
67721 }
67722 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet != nullptr, -1,
67723 "Handler for PACKET_RULESET_TERRAIN not installed");
67724 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet(pc, packet);
67725}
67726
67727void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
67728{
67729 conn_list_iterate(dest, pconn) {
67732}
67733
67735{
67736 memset(packet, 0, sizeof(*packet));
67737}
67738
67739#define free_packet_ruleset_terrain_flag(_packet) (void) 0
67740#define destroy_packet_ruleset_terrain_flag free
67741
67742#ifdef FREECIV_DELTA_PROTOCOL
67743#define hash_packet_ruleset_terrain_flag_100 hash_const
67744#define cmp_packet_ruleset_terrain_flag_100 cmp_const
67746#endif /* FREECIV_DELTA_PROTOCOL */
67747
67749{
67750#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_terrain_flag(_packet)
67752
67753#ifdef FREECIV_JSON_CONNECTION
67754 struct plocation field_addr;
67755 {
67756 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
67759 }
67760#endif /* FREECIV_JSON_CONNECTION */
67761
67762 log_packet_detailed("packet_ruleset_terrain_flag_100: got info about ()");
67763
67764#ifdef FREECIV_DELTA_PROTOCOL
67767 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_FLAG;
67768
67769 if (nullptr == *hash) {
67771 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
67772 }
67773
67774 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67775 *real_packet = *old;
67776 } else {
67777 /* packet is already initialized empty */
67778 log_packet_detailed(" no old info");
67779 }
67780
67781#ifdef FREECIV_JSON_CONNECTION
67782 field_addr.name = "fields";
67783#endif /* FREECIV_JSON_CONNECTION */
67784 DIO_BV_GET(&din, &field_addr, fields);
67785
67786 if (BV_ISSET(fields, 0)) {
67787 log_packet_detailed(" got field 'id'");
67788
67789#ifdef FREECIV_JSON_CONNECTION
67790 field_addr.name = "id";
67791#endif /* FREECIV_JSON_CONNECTION */
67792
67793 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67795 }
67796 }
67797
67798 if (BV_ISSET(fields, 1)) {
67799 log_packet_detailed(" got field 'name'");
67800
67801#ifdef FREECIV_JSON_CONNECTION
67802 field_addr.name = "name";
67803#endif /* FREECIV_JSON_CONNECTION */
67804
67805 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67807 }
67808 }
67809
67810 if (BV_ISSET(fields, 2)) {
67811 log_packet_detailed(" got field 'helptxt'");
67812
67813#ifdef FREECIV_JSON_CONNECTION
67814 field_addr.name = "helptxt";
67815#endif /* FREECIV_JSON_CONNECTION */
67816
67817 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
67819 }
67820 }
67821
67822 if (nullptr == old) {
67823 old = fc_malloc(sizeof(*old));
67825 *old = *real_packet;
67827 } else {
67828 *old = *real_packet;
67829 }
67830
67831#else /* FREECIV_DELTA_PROTOCOL */
67832#ifdef FREECIV_JSON_CONNECTION
67833 field_addr.name = "id";
67834#endif /* FREECIV_JSON_CONNECTION */
67835
67836 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67838 }
67839
67840#ifdef FREECIV_JSON_CONNECTION
67841 field_addr.name = "name";
67842#endif /* FREECIV_JSON_CONNECTION */
67843
67844 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67846 }
67847
67848#ifdef FREECIV_JSON_CONNECTION
67849 field_addr.name = "helptxt";
67850#endif /* FREECIV_JSON_CONNECTION */
67851
67852 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
67854 }
67855#endif /* FREECIV_DELTA_PROTOCOL */
67856
67858#undef FREE_PACKET_STRUCT
67859}
67860
67862{
67863 const struct packet_ruleset_terrain_flag *real_packet = packet;
67864 int e;
67866
67867 log_packet_detailed("packet_ruleset_terrain_flag_100: sending info about ()");
67868
67869#ifdef FREECIV_DELTA_PROTOCOL
67872 bool differ;
67873 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_FLAG;
67874
67875 if (nullptr == *hash) {
67877 nullptr, nullptr, nullptr, destroy_packet_ruleset_terrain_flag);
67878 }
67879 BV_CLR_ALL(fields);
67880
67881 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67882 old = fc_malloc(sizeof(*old));
67883 /* temporary bitcopy just to insert correctly */
67884 *old = *real_packet;
67887 }
67888
67889 differ = (old->id != real_packet->id);
67890 if (differ) {
67891 BV_SET(fields, 0);
67892 }
67893
67894 differ = (strcmp(old->name, real_packet->name) != 0);
67895 if (differ) {
67896 BV_SET(fields, 1);
67897 }
67898
67899 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
67900 if (differ) {
67901 BV_SET(fields, 2);
67902 }
67903#endif /* FREECIV_DELTA_PROTOCOL */
67904
67905#ifdef FREECIV_JSON_CONNECTION
67906 struct plocation field_addr;
67907 {
67908 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
67911 }
67912#endif /* FREECIV_JSON_CONNECTION */
67913
67914#ifdef FREECIV_DELTA_PROTOCOL
67915#ifdef FREECIV_JSON_CONNECTION
67916 field_addr.name = "fields";
67917#endif /* FREECIV_JSON_CONNECTION */
67918 e = 0;
67919 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67920 if (e) {
67921 log_packet_detailed("fields bitvector error detected");
67922 }
67923
67924 if (BV_ISSET(fields, 0)) {
67925 log_packet_detailed(" field 'id' has changed");
67926
67927#ifdef FREECIV_JSON_CONNECTION
67928 field_addr.name = "id";
67929#endif /* FREECIV_JSON_CONNECTION */
67930 e = 0;
67931
67932 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67933
67934 if (e) {
67935 log_packet_detailed("'id' field error detected");
67936 }
67937 }
67938
67939 if (BV_ISSET(fields, 1)) {
67940 log_packet_detailed(" field 'name' has changed");
67941
67942#ifdef FREECIV_JSON_CONNECTION
67943 field_addr.name = "name";
67944#endif /* FREECIV_JSON_CONNECTION */
67945 e = 0;
67946
67947 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67948
67949 if (e) {
67950 log_packet_detailed("'name' field error detected");
67951 }
67952 }
67953
67954 if (BV_ISSET(fields, 2)) {
67955 log_packet_detailed(" field 'helptxt' has changed");
67956
67957#ifdef FREECIV_JSON_CONNECTION
67958 field_addr.name = "helptxt";
67959#endif /* FREECIV_JSON_CONNECTION */
67960 e = 0;
67961
67962 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
67963
67964 if (e) {
67965 log_packet_detailed("'helptxt' field error detected");
67966 }
67967 }
67968
67969 *old = *real_packet;
67970
67971#else /* FREECIV_DELTA_PROTOCOL */
67972#ifdef FREECIV_JSON_CONNECTION
67973 field_addr.name = "id";
67974#endif /* FREECIV_JSON_CONNECTION */
67975 e = 0;
67976
67977 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67978
67979 if (e) {
67980 log_packet_detailed("'id' field error detected");
67981 }
67982
67983#ifdef FREECIV_JSON_CONNECTION
67984 field_addr.name = "name";
67985#endif /* FREECIV_JSON_CONNECTION */
67986 e = 0;
67987
67988 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67989
67990 if (e) {
67991 log_packet_detailed("'name' field error detected");
67992 }
67993
67994#ifdef FREECIV_JSON_CONNECTION
67995 field_addr.name = "helptxt";
67996#endif /* FREECIV_JSON_CONNECTION */
67997 e = 0;
67998
67999 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
68000
68001 if (e) {
68002 log_packet_detailed("'helptxt' field error detected");
68003 }
68004#endif /* FREECIV_DELTA_PROTOCOL */
68005
68007}
68008
68010{
68011 if (!pc->used) {
68012 log_error("WARNING: trying to send data to the closed connection %s",
68014 return -1;
68015 }
68016 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet != nullptr, -1,
68017 "Handler for PACKET_RULESET_TERRAIN_FLAG not installed");
68018 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet(pc, packet);
68019}
68020
68022{
68023 conn_list_iterate(dest, pconn) {
68026}
68027
68029{
68030 memset(packet, 0, sizeof(*packet));
68031
68032 packet->helptext = strvec_new();
68033}
68034
68036{
68037 if (packet->helptext) {
68038 strvec_destroy(packet->helptext);
68039 packet->helptext = nullptr;
68040 }
68041}
68042
68043static inline void destroy_packet_ruleset_unit_class(void *packet)
68044{
68046 free(packet);
68047}
68048
68049#ifdef FREECIV_DELTA_PROTOCOL
68050#define hash_packet_ruleset_unit_class_100 hash_const
68051#define cmp_packet_ruleset_unit_class_100 cmp_const
68053#endif /* FREECIV_DELTA_PROTOCOL */
68054
68056{
68057#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_unit_class(_packet)
68059
68060#ifdef FREECIV_JSON_CONNECTION
68061 struct plocation field_addr;
68062 {
68063 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68066 }
68067#endif /* FREECIV_JSON_CONNECTION */
68068
68069 log_packet_detailed("packet_ruleset_unit_class_100: got info about ()");
68070
68071#ifdef FREECIV_DELTA_PROTOCOL
68074 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS;
68075
68076 if (nullptr == *hash) {
68078 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
68079 }
68080
68081 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68082 real_packet->id = old->id;
68083 sz_strlcpy(real_packet->name, old->name);
68084 sz_strlcpy(real_packet->rule_name, old->rule_name);
68085 real_packet->min_speed = old->min_speed;
68086 real_packet->hp_loss_pct = old->hp_loss_pct;
68087 real_packet->non_native_def_pct = old->non_native_def_pct;
68088 real_packet->flags = old->flags;
68089 if (old->helptext) {
68090 strvec_copy(real_packet->helptext, old->helptext);
68091 } else {
68092 strvec_clear(real_packet->helptext);
68093 }
68094 } else {
68095 /* packet is already initialized empty */
68096 log_packet_detailed(" no old info");
68097 }
68098
68099#ifdef FREECIV_JSON_CONNECTION
68100 field_addr.name = "fields";
68101#endif /* FREECIV_JSON_CONNECTION */
68102 DIO_BV_GET(&din, &field_addr, fields);
68103
68104 if (BV_ISSET(fields, 0)) {
68105 log_packet_detailed(" got field 'id'");
68106
68107#ifdef FREECIV_JSON_CONNECTION
68108 field_addr.name = "id";
68109#endif /* FREECIV_JSON_CONNECTION */
68110
68111 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68113 }
68114 }
68115
68116 if (BV_ISSET(fields, 1)) {
68117 log_packet_detailed(" got field 'name'");
68118
68119#ifdef FREECIV_JSON_CONNECTION
68120 field_addr.name = "name";
68121#endif /* FREECIV_JSON_CONNECTION */
68122
68123 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68125 }
68126 }
68127
68128 if (BV_ISSET(fields, 2)) {
68129 log_packet_detailed(" got field 'rule_name'");
68130
68131#ifdef FREECIV_JSON_CONNECTION
68132 field_addr.name = "rule_name";
68133#endif /* FREECIV_JSON_CONNECTION */
68134
68135 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68136 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68137 }
68138 }
68139
68140 if (BV_ISSET(fields, 3)) {
68141 log_packet_detailed(" got field 'min_speed'");
68142
68143#ifdef FREECIV_JSON_CONNECTION
68144 field_addr.name = "min_speed";
68145#endif /* FREECIV_JSON_CONNECTION */
68146
68147 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68148 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68149 }
68150 }
68151
68152 if (BV_ISSET(fields, 4)) {
68153 log_packet_detailed(" got field 'hp_loss_pct'");
68154
68155#ifdef FREECIV_JSON_CONNECTION
68156 field_addr.name = "hp_loss_pct";
68157#endif /* FREECIV_JSON_CONNECTION */
68158
68159 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68160 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68161 }
68162 }
68163
68164 if (BV_ISSET(fields, 5)) {
68165 log_packet_detailed(" got field 'non_native_def_pct'");
68166
68167#ifdef FREECIV_JSON_CONNECTION
68168 field_addr.name = "non_native_def_pct";
68169#endif /* FREECIV_JSON_CONNECTION */
68170
68171 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68172 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68173 }
68174 }
68175
68176 if (BV_ISSET(fields, 6)) {
68177 log_packet_detailed(" got field 'flags'");
68178
68179#ifdef FREECIV_JSON_CONNECTION
68180 field_addr.name = "flags";
68181#endif /* FREECIV_JSON_CONNECTION */
68182
68183 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68185 }
68186 }
68187
68188 if (BV_ISSET(fields, 7)) {
68189 log_packet_detailed(" got field 'helptext'");
68190
68191#ifdef FREECIV_JSON_CONNECTION
68192 field_addr.name = "helptext";
68193#endif /* FREECIV_JSON_CONNECTION */
68194
68195 {
68196 int i;
68197
68198 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68200 }
68201 strvec_reserve(real_packet->helptext, i);
68202
68203#ifdef FREECIV_JSON_CONNECTION
68204 /* Enter array. */
68205 field_addr.sub_location = plocation_elem_new(0);
68206#endif /* FREECIV_JSON_CONNECTION */
68207
68208 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68209#ifdef FREECIV_JSON_CONNECTION
68210 /* Next array element */
68211 field_addr.sub_location->number = i;
68212#endif /* FREECIV_JSON_CONNECTION */
68213
68214 {
68215 char readin[MAX_LEN_PACKET];
68216
68217 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68218 || !strvec_set(real_packet->helptext, i, readin)) {
68220 }
68221 }
68222 }
68223
68224#ifdef FREECIV_JSON_CONNECTION
68225 /* Exit array. */
68226 FC_FREE(field_addr.sub_location);
68227#endif /* FREECIV_JSON_CONNECTION */
68228 }
68229 }
68230
68231 if (nullptr == old) {
68232 old = fc_malloc(sizeof(*old));
68234 old->id = real_packet->id;
68235 sz_strlcpy(old->name, real_packet->name);
68236 sz_strlcpy(old->rule_name, real_packet->rule_name);
68237 old->min_speed = real_packet->min_speed;
68238 old->hp_loss_pct = real_packet->hp_loss_pct;
68239 old->non_native_def_pct = real_packet->non_native_def_pct;
68240 old->flags = real_packet->flags;
68241 if (real_packet->helptext) {
68242 strvec_copy(old->helptext, real_packet->helptext);
68243 } else {
68244 strvec_clear(old->helptext);
68245 }
68247 } else {
68248 old->id = real_packet->id;
68249 sz_strlcpy(old->name, real_packet->name);
68250 sz_strlcpy(old->rule_name, real_packet->rule_name);
68251 old->min_speed = real_packet->min_speed;
68252 old->hp_loss_pct = real_packet->hp_loss_pct;
68253 old->non_native_def_pct = real_packet->non_native_def_pct;
68254 old->flags = real_packet->flags;
68255 if (real_packet->helptext) {
68256 strvec_copy(old->helptext, real_packet->helptext);
68257 } else {
68258 strvec_clear(old->helptext);
68259 }
68260 }
68261
68262#else /* FREECIV_DELTA_PROTOCOL */
68263#ifdef FREECIV_JSON_CONNECTION
68264 field_addr.name = "id";
68265#endif /* FREECIV_JSON_CONNECTION */
68266
68267 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68269 }
68270
68271#ifdef FREECIV_JSON_CONNECTION
68272 field_addr.name = "name";
68273#endif /* FREECIV_JSON_CONNECTION */
68274
68275 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68277 }
68278
68279#ifdef FREECIV_JSON_CONNECTION
68280 field_addr.name = "rule_name";
68281#endif /* FREECIV_JSON_CONNECTION */
68282
68283 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68284 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68285 }
68286
68287#ifdef FREECIV_JSON_CONNECTION
68288 field_addr.name = "min_speed";
68289#endif /* FREECIV_JSON_CONNECTION */
68290
68291 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
68292 RECEIVE_PACKET_FIELD_ERROR(min_speed);
68293 }
68294
68295#ifdef FREECIV_JSON_CONNECTION
68296 field_addr.name = "hp_loss_pct";
68297#endif /* FREECIV_JSON_CONNECTION */
68298
68299 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
68300 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
68301 }
68302
68303#ifdef FREECIV_JSON_CONNECTION
68304 field_addr.name = "non_native_def_pct";
68305#endif /* FREECIV_JSON_CONNECTION */
68306
68307 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
68308 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
68309 }
68310
68311#ifdef FREECIV_JSON_CONNECTION
68312 field_addr.name = "flags";
68313#endif /* FREECIV_JSON_CONNECTION */
68314
68315 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
68317 }
68318
68319#ifdef FREECIV_JSON_CONNECTION
68320 field_addr.name = "helptext";
68321#endif /* FREECIV_JSON_CONNECTION */
68322
68323 {
68324 int i;
68325
68326 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
68328 }
68329 strvec_reserve(real_packet->helptext, i);
68330
68331#ifdef FREECIV_JSON_CONNECTION
68332 /* Enter array. */
68333 field_addr.sub_location = plocation_elem_new(0);
68334#endif /* FREECIV_JSON_CONNECTION */
68335
68336 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68337#ifdef FREECIV_JSON_CONNECTION
68338 /* Next array element */
68339 field_addr.sub_location->number = i;
68340#endif /* FREECIV_JSON_CONNECTION */
68341
68342 {
68343 char readin[MAX_LEN_PACKET];
68344
68345 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
68346 || !strvec_set(real_packet->helptext, i, readin)) {
68348 }
68349 }
68350 }
68351
68352#ifdef FREECIV_JSON_CONNECTION
68353 /* Exit array. */
68354 FC_FREE(field_addr.sub_location);
68355#endif /* FREECIV_JSON_CONNECTION */
68356 }
68357#endif /* FREECIV_DELTA_PROTOCOL */
68358
68360#undef FREE_PACKET_STRUCT
68361}
68362
68364{
68365 const struct packet_ruleset_unit_class *real_packet = packet;
68366 int e;
68368
68369 log_packet_detailed("packet_ruleset_unit_class_100: sending info about ()");
68370
68371#ifdef FREECIV_DELTA_PROTOCOL
68374 bool differ;
68375 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS;
68376
68377 if (nullptr == *hash) {
68379 nullptr, nullptr, nullptr, destroy_packet_ruleset_unit_class);
68380 }
68381 BV_CLR_ALL(fields);
68382
68383 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68384 old = fc_malloc(sizeof(*old));
68385 /* temporary bitcopy just to insert correctly */
68386 *old = *real_packet;
68389 }
68390
68391 differ = (old->id != real_packet->id);
68392 if (differ) {
68393 BV_SET(fields, 0);
68394 }
68395
68396 differ = (strcmp(old->name, real_packet->name) != 0);
68397 if (differ) {
68398 BV_SET(fields, 1);
68399 }
68400
68401 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
68402 if (differ) {
68403 BV_SET(fields, 2);
68404 }
68405
68406 differ = (old->min_speed != real_packet->min_speed);
68407 if (differ) {
68408 BV_SET(fields, 3);
68409 }
68410
68411 differ = (old->hp_loss_pct != real_packet->hp_loss_pct);
68412 if (differ) {
68413 BV_SET(fields, 4);
68414 }
68415
68416 differ = (old->non_native_def_pct != real_packet->non_native_def_pct);
68417 if (differ) {
68418 BV_SET(fields, 5);
68419 }
68420
68421 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
68422 if (differ) {
68423 BV_SET(fields, 6);
68424 }
68425
68426 if (real_packet->helptext) {
68427 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
68428 } else {
68429 differ = (strvec_size(old->helptext) > 0);
68430 }
68431 if (differ) {
68432 BV_SET(fields, 7);
68433 }
68434#endif /* FREECIV_DELTA_PROTOCOL */
68435
68436#ifdef FREECIV_JSON_CONNECTION
68437 struct plocation field_addr;
68438 {
68439 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68442 }
68443#endif /* FREECIV_JSON_CONNECTION */
68444
68445#ifdef FREECIV_DELTA_PROTOCOL
68446#ifdef FREECIV_JSON_CONNECTION
68447 field_addr.name = "fields";
68448#endif /* FREECIV_JSON_CONNECTION */
68449 e = 0;
68450 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68451 if (e) {
68452 log_packet_detailed("fields bitvector error detected");
68453 }
68454
68455 if (BV_ISSET(fields, 0)) {
68456 log_packet_detailed(" field 'id' has changed");
68457
68458#ifdef FREECIV_JSON_CONNECTION
68459 field_addr.name = "id";
68460#endif /* FREECIV_JSON_CONNECTION */
68461 e = 0;
68462
68463 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68464
68465 if (e) {
68466 log_packet_detailed("'id' field error detected");
68467 }
68468 }
68469
68470 if (BV_ISSET(fields, 1)) {
68471 log_packet_detailed(" field 'name' has changed");
68472
68473#ifdef FREECIV_JSON_CONNECTION
68474 field_addr.name = "name";
68475#endif /* FREECIV_JSON_CONNECTION */
68476 e = 0;
68477
68478 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68479
68480 if (e) {
68481 log_packet_detailed("'name' field error detected");
68482 }
68483 }
68484
68485 if (BV_ISSET(fields, 2)) {
68486 log_packet_detailed(" field 'rule_name' has changed");
68487
68488#ifdef FREECIV_JSON_CONNECTION
68489 field_addr.name = "rule_name";
68490#endif /* FREECIV_JSON_CONNECTION */
68491 e = 0;
68492
68493 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68494
68495 if (e) {
68496 log_packet_detailed("'rule_name' field error detected");
68497 }
68498 }
68499
68500 if (BV_ISSET(fields, 3)) {
68501 log_packet_detailed(" field 'min_speed' has changed");
68502
68503#ifdef FREECIV_JSON_CONNECTION
68504 field_addr.name = "min_speed";
68505#endif /* FREECIV_JSON_CONNECTION */
68506 e = 0;
68507
68508 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
68509
68510 if (e) {
68511 log_packet_detailed("'min_speed' field error detected");
68512 }
68513 }
68514
68515 if (BV_ISSET(fields, 4)) {
68516 log_packet_detailed(" field 'hp_loss_pct' has changed");
68517
68518#ifdef FREECIV_JSON_CONNECTION
68519 field_addr.name = "hp_loss_pct";
68520#endif /* FREECIV_JSON_CONNECTION */
68521 e = 0;
68522
68523 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
68524
68525 if (e) {
68526 log_packet_detailed("'hp_loss_pct' field error detected");
68527 }
68528 }
68529
68530 if (BV_ISSET(fields, 5)) {
68531 log_packet_detailed(" field 'non_native_def_pct' has changed");
68532
68533#ifdef FREECIV_JSON_CONNECTION
68534 field_addr.name = "non_native_def_pct";
68535#endif /* FREECIV_JSON_CONNECTION */
68536 e = 0;
68537
68538 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
68539
68540 if (e) {
68541 log_packet_detailed("'non_native_def_pct' field error detected");
68542 }
68543 }
68544
68545 if (BV_ISSET(fields, 6)) {
68546 log_packet_detailed(" field 'flags' has changed");
68547
68548#ifdef FREECIV_JSON_CONNECTION
68549 field_addr.name = "flags";
68550#endif /* FREECIV_JSON_CONNECTION */
68551 e = 0;
68552
68553 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
68554
68555 if (e) {
68556 log_packet_detailed("'flags' field error detected");
68557 }
68558 }
68559
68560 if (BV_ISSET(fields, 7)) {
68561 log_packet_detailed(" field 'helptext' has changed");
68562
68563#ifdef FREECIV_JSON_CONNECTION
68564 field_addr.name = "helptext";
68565#endif /* FREECIV_JSON_CONNECTION */
68566 e = 0;
68567
68568 if (!real_packet->helptext) {
68569 /* Transmit null as empty */
68570 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68571 } else {
68572 int i;
68573
68575 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68576
68577#ifdef FREECIV_JSON_CONNECTION
68578 /* Enter array. */
68579 field_addr.sub_location = plocation_elem_new(0);
68580#endif /* FREECIV_JSON_CONNECTION */
68581
68582 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68583#ifdef FREECIV_JSON_CONNECTION
68584 /* Next array element. */
68585 field_addr.sub_location->number = i;
68586#endif /* FREECIV_JSON_CONNECTION */
68587
68588 {
68589 const char *pstr = strvec_get(real_packet->helptext, i);
68590
68591 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68592 }
68593 }
68594
68595#ifdef FREECIV_JSON_CONNECTION
68596 /* Exit array. */
68597 FC_FREE(field_addr.sub_location);
68598#endif /* FREECIV_JSON_CONNECTION */
68599 }
68600
68601 if (e) {
68602 log_packet_detailed("'helptext' field error detected");
68603 }
68604 }
68605
68606 old->id = real_packet->id;
68607 sz_strlcpy(old->name, real_packet->name);
68608 sz_strlcpy(old->rule_name, real_packet->rule_name);
68609 old->min_speed = real_packet->min_speed;
68610 old->hp_loss_pct = real_packet->hp_loss_pct;
68611 old->non_native_def_pct = real_packet->non_native_def_pct;
68612 old->flags = real_packet->flags;
68613 if (real_packet->helptext) {
68614 strvec_copy(old->helptext, real_packet->helptext);
68615 } else {
68616 strvec_clear(old->helptext);
68617 }
68618
68619#else /* FREECIV_DELTA_PROTOCOL */
68620#ifdef FREECIV_JSON_CONNECTION
68621 field_addr.name = "id";
68622#endif /* FREECIV_JSON_CONNECTION */
68623 e = 0;
68624
68625 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68626
68627 if (e) {
68628 log_packet_detailed("'id' field error detected");
68629 }
68630
68631#ifdef FREECIV_JSON_CONNECTION
68632 field_addr.name = "name";
68633#endif /* FREECIV_JSON_CONNECTION */
68634 e = 0;
68635
68636 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68637
68638 if (e) {
68639 log_packet_detailed("'name' field error detected");
68640 }
68641
68642#ifdef FREECIV_JSON_CONNECTION
68643 field_addr.name = "rule_name";
68644#endif /* FREECIV_JSON_CONNECTION */
68645 e = 0;
68646
68647 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68648
68649 if (e) {
68650 log_packet_detailed("'rule_name' field error detected");
68651 }
68652
68653#ifdef FREECIV_JSON_CONNECTION
68654 field_addr.name = "min_speed";
68655#endif /* FREECIV_JSON_CONNECTION */
68656 e = 0;
68657
68658 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
68659
68660 if (e) {
68661 log_packet_detailed("'min_speed' field error detected");
68662 }
68663
68664#ifdef FREECIV_JSON_CONNECTION
68665 field_addr.name = "hp_loss_pct";
68666#endif /* FREECIV_JSON_CONNECTION */
68667 e = 0;
68668
68669 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
68670
68671 if (e) {
68672 log_packet_detailed("'hp_loss_pct' field error detected");
68673 }
68674
68675#ifdef FREECIV_JSON_CONNECTION
68676 field_addr.name = "non_native_def_pct";
68677#endif /* FREECIV_JSON_CONNECTION */
68678 e = 0;
68679
68680 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
68681
68682 if (e) {
68683 log_packet_detailed("'non_native_def_pct' field error detected");
68684 }
68685
68686#ifdef FREECIV_JSON_CONNECTION
68687 field_addr.name = "flags";
68688#endif /* FREECIV_JSON_CONNECTION */
68689 e = 0;
68690
68691 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
68692
68693 if (e) {
68694 log_packet_detailed("'flags' field error detected");
68695 }
68696
68697#ifdef FREECIV_JSON_CONNECTION
68698 field_addr.name = "helptext";
68699#endif /* FREECIV_JSON_CONNECTION */
68700 e = 0;
68701
68702 if (!real_packet->helptext) {
68703 /* Transmit null as empty */
68704 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
68705 } else {
68706 int i;
68707
68709 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
68710
68711#ifdef FREECIV_JSON_CONNECTION
68712 /* Enter array. */
68713 field_addr.sub_location = plocation_elem_new(0);
68714#endif /* FREECIV_JSON_CONNECTION */
68715
68716 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
68717#ifdef FREECIV_JSON_CONNECTION
68718 /* Next array element. */
68719 field_addr.sub_location->number = i;
68720#endif /* FREECIV_JSON_CONNECTION */
68721
68722 {
68723 const char *pstr = strvec_get(real_packet->helptext, i);
68724
68725 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
68726 }
68727 }
68728
68729#ifdef FREECIV_JSON_CONNECTION
68730 /* Exit array. */
68731 FC_FREE(field_addr.sub_location);
68732#endif /* FREECIV_JSON_CONNECTION */
68733 }
68734
68735 if (e) {
68736 log_packet_detailed("'helptext' field error detected");
68737 }
68738#endif /* FREECIV_DELTA_PROTOCOL */
68739
68741}
68742
68744{
68745 if (!pc->used) {
68746 log_error("WARNING: trying to send data to the closed connection %s",
68748 return -1;
68749 }
68750 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet != nullptr, -1,
68751 "Handler for PACKET_RULESET_UNIT_CLASS not installed");
68752 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet(pc, packet);
68753}
68754
68756{
68757 conn_list_iterate(dest, pconn) {
68760}
68761
68762static inline void init_packet_ruleset_extra(struct packet_ruleset_extra *packet)
68763{
68764 memset(packet, 0, sizeof(*packet));
68765
68766 requirement_vector_init(&packet->reqs);
68770 packet->helptext = strvec_new();
68771}
68772
68773static inline void free_packet_ruleset_extra(struct packet_ruleset_extra *packet)
68774{
68775 if (packet->helptext) {
68776 strvec_destroy(packet->helptext);
68777 packet->helptext = nullptr;
68778 }
68782 requirement_vector_free(&packet->reqs);
68783}
68784
68785static inline void destroy_packet_ruleset_extra(void *packet)
68786{
68788 free(packet);
68789}
68790
68791#ifdef FREECIV_DELTA_PROTOCOL
68792#define hash_packet_ruleset_extra_100 hash_const
68793#define cmp_packet_ruleset_extra_100 cmp_const
68795#endif /* FREECIV_DELTA_PROTOCOL */
68796
68798{
68799#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra(_packet)
68801
68802#ifdef FREECIV_JSON_CONNECTION
68803 struct plocation field_addr;
68804 {
68805 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
68808 }
68809#endif /* FREECIV_JSON_CONNECTION */
68810
68811 log_packet_detailed("packet_ruleset_extra_100: got info about ()");
68812
68813#ifdef FREECIV_DELTA_PROTOCOL
68815 struct packet_ruleset_extra *old;
68816 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA;
68817
68818 if (nullptr == *hash) {
68820 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
68821 }
68822
68823 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68824 real_packet->id = old->id;
68825 sz_strlcpy(real_packet->name, old->name);
68826 sz_strlcpy(real_packet->rule_name, old->rule_name);
68827 real_packet->category = old->category;
68828 real_packet->causes = old->causes;
68829 real_packet->rmcauses = old->rmcauses;
68830 sz_strlcpy(real_packet->activity_gfx, old->activity_gfx);
68831 sz_strlcpy(real_packet->act_gfx_alt, old->act_gfx_alt);
68832 sz_strlcpy(real_packet->act_gfx_alt2, old->act_gfx_alt2);
68833 sz_strlcpy(real_packet->rmact_gfx, old->rmact_gfx);
68834 sz_strlcpy(real_packet->rmact_gfx_alt, old->rmact_gfx_alt);
68835 sz_strlcpy(real_packet->rmact_gfx_alt2, old->rmact_gfx_alt2);
68836 sz_strlcpy(real_packet->graphic_str, old->graphic_str);
68837 sz_strlcpy(real_packet->graphic_alt, old->graphic_alt);
68838 requirement_vector_copy(&real_packet->reqs, &old->reqs);
68839 requirement_vector_copy(&real_packet->rmreqs, &old->rmreqs);
68840 real_packet->appearance_chance = old->appearance_chance;
68841 requirement_vector_copy(&real_packet->appearance_reqs, &old->appearance_reqs);
68842 real_packet->disappearance_chance = old->disappearance_chance;
68843 requirement_vector_copy(&real_packet->disappearance_reqs, &old->disappearance_reqs);
68844 real_packet->visibility_req = old->visibility_req;
68845 real_packet->buildable = old->buildable;
68846 real_packet->generated = old->generated;
68847 real_packet->build_time = old->build_time;
68848 real_packet->build_time_factor = old->build_time_factor;
68849 real_packet->removal_time = old->removal_time;
68850 real_packet->removal_time_factor = old->removal_time_factor;
68851 real_packet->infracost = old->infracost;
68852 real_packet->defense_bonus = old->defense_bonus;
68853 real_packet->eus = old->eus;
68854 real_packet->native_to = old->native_to;
68855 real_packet->flags = old->flags;
68856 real_packet->hidden_by = old->hidden_by;
68857 real_packet->bridged_over = old->bridged_over;
68858 real_packet->conflicts = old->conflicts;
68859 real_packet->no_aggr_near_city = old->no_aggr_near_city;
68860 if (old->helptext) {
68861 strvec_copy(real_packet->helptext, old->helptext);
68862 } else {
68863 strvec_clear(real_packet->helptext);
68864 }
68865 } else {
68866 /* packet is already initialized empty */
68867 log_packet_detailed(" no old info");
68868 }
68869
68870#ifdef FREECIV_JSON_CONNECTION
68871 field_addr.name = "fields";
68872#endif /* FREECIV_JSON_CONNECTION */
68873 DIO_BV_GET(&din, &field_addr, fields);
68874
68875 if (BV_ISSET(fields, 0)) {
68876 log_packet_detailed(" got field 'id'");
68877
68878#ifdef FREECIV_JSON_CONNECTION
68879 field_addr.name = "id";
68880#endif /* FREECIV_JSON_CONNECTION */
68881
68882 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68884 }
68885 }
68886
68887 if (BV_ISSET(fields, 1)) {
68888 log_packet_detailed(" got field 'name'");
68889
68890#ifdef FREECIV_JSON_CONNECTION
68891 field_addr.name = "name";
68892#endif /* FREECIV_JSON_CONNECTION */
68893
68894 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68896 }
68897 }
68898
68899 if (BV_ISSET(fields, 2)) {
68900 log_packet_detailed(" got field 'rule_name'");
68901
68902#ifdef FREECIV_JSON_CONNECTION
68903 field_addr.name = "rule_name";
68904#endif /* FREECIV_JSON_CONNECTION */
68905
68906 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68907 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68908 }
68909 }
68910
68911 if (BV_ISSET(fields, 3)) {
68912 log_packet_detailed(" got field 'category'");
68913
68914#ifdef FREECIV_JSON_CONNECTION
68915 field_addr.name = "category";
68916#endif /* FREECIV_JSON_CONNECTION */
68917
68918 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
68920 }
68921 }
68922
68923 if (BV_ISSET(fields, 4)) {
68924 log_packet_detailed(" got field 'causes'");
68925
68926#ifdef FREECIV_JSON_CONNECTION
68927 field_addr.name = "causes";
68928#endif /* FREECIV_JSON_CONNECTION */
68929
68930 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
68932 }
68933 }
68934
68935 if (BV_ISSET(fields, 5)) {
68936 log_packet_detailed(" got field 'rmcauses'");
68937
68938#ifdef FREECIV_JSON_CONNECTION
68939 field_addr.name = "rmcauses";
68940#endif /* FREECIV_JSON_CONNECTION */
68941
68942 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
68944 }
68945 }
68946
68947 if (BV_ISSET(fields, 6)) {
68948 log_packet_detailed(" got field 'activity_gfx'");
68949
68950#ifdef FREECIV_JSON_CONNECTION
68951 field_addr.name = "activity_gfx";
68952#endif /* FREECIV_JSON_CONNECTION */
68953
68954 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
68955 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
68956 }
68957 }
68958
68959 if (BV_ISSET(fields, 7)) {
68960 log_packet_detailed(" got field 'act_gfx_alt'");
68961
68962#ifdef FREECIV_JSON_CONNECTION
68963 field_addr.name = "act_gfx_alt";
68964#endif /* FREECIV_JSON_CONNECTION */
68965
68966 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
68967 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
68968 }
68969 }
68970
68971 if (BV_ISSET(fields, 8)) {
68972 log_packet_detailed(" got field 'act_gfx_alt2'");
68973
68974#ifdef FREECIV_JSON_CONNECTION
68975 field_addr.name = "act_gfx_alt2";
68976#endif /* FREECIV_JSON_CONNECTION */
68977
68978 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
68979 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
68980 }
68981 }
68982
68983 if (BV_ISSET(fields, 9)) {
68984 log_packet_detailed(" got field 'rmact_gfx'");
68985
68986#ifdef FREECIV_JSON_CONNECTION
68987 field_addr.name = "rmact_gfx";
68988#endif /* FREECIV_JSON_CONNECTION */
68989
68990 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
68991 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
68992 }
68993 }
68994
68995 if (BV_ISSET(fields, 10)) {
68996 log_packet_detailed(" got field 'rmact_gfx_alt'");
68997
68998#ifdef FREECIV_JSON_CONNECTION
68999 field_addr.name = "rmact_gfx_alt";
69000#endif /* FREECIV_JSON_CONNECTION */
69001
69002 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
69003 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
69004 }
69005 }
69006
69007 if (BV_ISSET(fields, 11)) {
69008 log_packet_detailed(" got field 'rmact_gfx_alt2'");
69009
69010#ifdef FREECIV_JSON_CONNECTION
69011 field_addr.name = "rmact_gfx_alt2";
69012#endif /* FREECIV_JSON_CONNECTION */
69013
69014 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
69015 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
69016 }
69017 }
69018
69019 if (BV_ISSET(fields, 12)) {
69020 log_packet_detailed(" got field 'graphic_str'");
69021
69022#ifdef FREECIV_JSON_CONNECTION
69023 field_addr.name = "graphic_str";
69024#endif /* FREECIV_JSON_CONNECTION */
69025
69026 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
69027 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
69028 }
69029 }
69030
69031 if (BV_ISSET(fields, 13)) {
69032 log_packet_detailed(" got field 'graphic_alt'");
69033
69034#ifdef FREECIV_JSON_CONNECTION
69035 field_addr.name = "graphic_alt";
69036#endif /* FREECIV_JSON_CONNECTION */
69037
69038 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
69039 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
69040 }
69041 }
69042
69043 if (BV_ISSET(fields, 14)) {
69044 log_packet_detailed(" got field 'reqs'");
69045
69046#ifdef FREECIV_JSON_CONNECTION
69047 field_addr.name = "reqs";
69048#endif /* FREECIV_JSON_CONNECTION */
69049
69050 {
69051 int i;
69052
69053 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69055 }
69057
69058#ifdef FREECIV_JSON_CONNECTION
69059 /* Enter array. */
69060 field_addr.sub_location = plocation_elem_new(0);
69061#endif /* FREECIV_JSON_CONNECTION */
69062
69063 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
69064#ifdef FREECIV_JSON_CONNECTION
69065 /* Next array element */
69066 field_addr.sub_location->number = i;
69067#endif /* FREECIV_JSON_CONNECTION */
69068
69069 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
69071 }
69072 }
69073
69074#ifdef FREECIV_JSON_CONNECTION
69075 /* Exit array. */
69076 FC_FREE(field_addr.sub_location);
69077#endif /* FREECIV_JSON_CONNECTION */
69078 }
69079 }
69080
69081 if (BV_ISSET(fields, 15)) {
69082 log_packet_detailed(" got field 'rmreqs'");
69083
69084#ifdef FREECIV_JSON_CONNECTION
69085 field_addr.name = "rmreqs";
69086#endif /* FREECIV_JSON_CONNECTION */
69087
69088 {
69089 int i;
69090
69091 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69093 }
69095
69096#ifdef FREECIV_JSON_CONNECTION
69097 /* Enter array. */
69098 field_addr.sub_location = plocation_elem_new(0);
69099#endif /* FREECIV_JSON_CONNECTION */
69100
69101 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
69102#ifdef FREECIV_JSON_CONNECTION
69103 /* Next array element */
69104 field_addr.sub_location->number = i;
69105#endif /* FREECIV_JSON_CONNECTION */
69106
69107 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
69109 }
69110 }
69111
69112#ifdef FREECIV_JSON_CONNECTION
69113 /* Exit array. */
69114 FC_FREE(field_addr.sub_location);
69115#endif /* FREECIV_JSON_CONNECTION */
69116 }
69117 }
69118
69119 if (BV_ISSET(fields, 16)) {
69120 log_packet_detailed(" got field 'appearance_chance'");
69121
69122#ifdef FREECIV_JSON_CONNECTION
69123 field_addr.name = "appearance_chance";
69124#endif /* FREECIV_JSON_CONNECTION */
69125
69126 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
69127 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
69128 }
69129 }
69130
69131 if (BV_ISSET(fields, 17)) {
69132 log_packet_detailed(" got field 'appearance_reqs'");
69133
69134#ifdef FREECIV_JSON_CONNECTION
69135 field_addr.name = "appearance_reqs";
69136#endif /* FREECIV_JSON_CONNECTION */
69137
69138 {
69139 int i;
69140
69141 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69142 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69143 }
69144 requirement_vector_reserve(&real_packet->appearance_reqs, i);
69145
69146#ifdef FREECIV_JSON_CONNECTION
69147 /* Enter array. */
69148 field_addr.sub_location = plocation_elem_new(0);
69149#endif /* FREECIV_JSON_CONNECTION */
69150
69151 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
69152#ifdef FREECIV_JSON_CONNECTION
69153 /* Next array element */
69154 field_addr.sub_location->number = i;
69155#endif /* FREECIV_JSON_CONNECTION */
69156
69157 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
69158 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69159 }
69160 }
69161
69162#ifdef FREECIV_JSON_CONNECTION
69163 /* Exit array. */
69164 FC_FREE(field_addr.sub_location);
69165#endif /* FREECIV_JSON_CONNECTION */
69166 }
69167 }
69168
69169 if (BV_ISSET(fields, 18)) {
69170 log_packet_detailed(" got field 'disappearance_chance'");
69171
69172#ifdef FREECIV_JSON_CONNECTION
69173 field_addr.name = "disappearance_chance";
69174#endif /* FREECIV_JSON_CONNECTION */
69175
69176 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
69177 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
69178 }
69179 }
69180
69181 if (BV_ISSET(fields, 19)) {
69182 log_packet_detailed(" got field 'disappearance_reqs'");
69183
69184#ifdef FREECIV_JSON_CONNECTION
69185 field_addr.name = "disappearance_reqs";
69186#endif /* FREECIV_JSON_CONNECTION */
69187
69188 {
69189 int i;
69190
69191 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69192 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69193 }
69194 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
69195
69196#ifdef FREECIV_JSON_CONNECTION
69197 /* Enter array. */
69198 field_addr.sub_location = plocation_elem_new(0);
69199#endif /* FREECIV_JSON_CONNECTION */
69200
69201 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
69202#ifdef FREECIV_JSON_CONNECTION
69203 /* Next array element */
69204 field_addr.sub_location->number = i;
69205#endif /* FREECIV_JSON_CONNECTION */
69206
69207 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
69208 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69209 }
69210 }
69211
69212#ifdef FREECIV_JSON_CONNECTION
69213 /* Exit array. */
69214 FC_FREE(field_addr.sub_location);
69215#endif /* FREECIV_JSON_CONNECTION */
69216 }
69217 }
69218
69219 if (BV_ISSET(fields, 20)) {
69220 log_packet_detailed(" got field 'visibility_req'");
69221
69222#ifdef FREECIV_JSON_CONNECTION
69223 field_addr.name = "visibility_req";
69224#endif /* FREECIV_JSON_CONNECTION */
69225
69226 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
69227 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
69228 }
69229 }
69230
69231 real_packet->buildable = BV_ISSET(fields, 21);
69232
69233 real_packet->generated = BV_ISSET(fields, 22);
69234
69235 if (BV_ISSET(fields, 23)) {
69236 log_packet_detailed(" got field 'build_time'");
69237
69238#ifdef FREECIV_JSON_CONNECTION
69239 field_addr.name = "build_time";
69240#endif /* FREECIV_JSON_CONNECTION */
69241
69242 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
69243 RECEIVE_PACKET_FIELD_ERROR(build_time);
69244 }
69245 }
69246
69247 if (BV_ISSET(fields, 24)) {
69248 log_packet_detailed(" got field 'build_time_factor'");
69249
69250#ifdef FREECIV_JSON_CONNECTION
69251 field_addr.name = "build_time_factor";
69252#endif /* FREECIV_JSON_CONNECTION */
69253
69254 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
69255 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
69256 }
69257 }
69258
69259 if (BV_ISSET(fields, 25)) {
69260 log_packet_detailed(" got field 'removal_time'");
69261
69262#ifdef FREECIV_JSON_CONNECTION
69263 field_addr.name = "removal_time";
69264#endif /* FREECIV_JSON_CONNECTION */
69265
69266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
69267 RECEIVE_PACKET_FIELD_ERROR(removal_time);
69268 }
69269 }
69270
69271 if (BV_ISSET(fields, 26)) {
69272 log_packet_detailed(" got field 'removal_time_factor'");
69273
69274#ifdef FREECIV_JSON_CONNECTION
69275 field_addr.name = "removal_time_factor";
69276#endif /* FREECIV_JSON_CONNECTION */
69277
69278 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
69279 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
69280 }
69281 }
69282
69283 if (BV_ISSET(fields, 27)) {
69284 log_packet_detailed(" got field 'infracost'");
69285
69286#ifdef FREECIV_JSON_CONNECTION
69287 field_addr.name = "infracost";
69288#endif /* FREECIV_JSON_CONNECTION */
69289
69290 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
69291 RECEIVE_PACKET_FIELD_ERROR(infracost);
69292 }
69293 }
69294
69295 if (BV_ISSET(fields, 28)) {
69296 log_packet_detailed(" got field 'defense_bonus'");
69297
69298#ifdef FREECIV_JSON_CONNECTION
69299 field_addr.name = "defense_bonus";
69300#endif /* FREECIV_JSON_CONNECTION */
69301
69302 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
69303 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
69304 }
69305 }
69306
69307 if (BV_ISSET(fields, 29)) {
69308 log_packet_detailed(" got field 'eus'");
69309
69310#ifdef FREECIV_JSON_CONNECTION
69311 field_addr.name = "eus";
69312#endif /* FREECIV_JSON_CONNECTION */
69313
69314 {
69315 int readin;
69316
69317 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69319 }
69320 real_packet->eus = readin;
69321 }
69322 }
69323
69324 if (BV_ISSET(fields, 30)) {
69325 log_packet_detailed(" got field 'native_to'");
69326
69327#ifdef FREECIV_JSON_CONNECTION
69328 field_addr.name = "native_to";
69329#endif /* FREECIV_JSON_CONNECTION */
69330
69331 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
69332 RECEIVE_PACKET_FIELD_ERROR(native_to);
69333 }
69334 }
69335
69336 if (BV_ISSET(fields, 31)) {
69337 log_packet_detailed(" got field 'flags'");
69338
69339#ifdef FREECIV_JSON_CONNECTION
69340 field_addr.name = "flags";
69341#endif /* FREECIV_JSON_CONNECTION */
69342
69343 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
69345 }
69346 }
69347
69348 if (BV_ISSET(fields, 32)) {
69349 log_packet_detailed(" got field 'hidden_by'");
69350
69351#ifdef FREECIV_JSON_CONNECTION
69352 field_addr.name = "hidden_by";
69353#endif /* FREECIV_JSON_CONNECTION */
69354
69355 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
69356 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
69357 }
69358 }
69359
69360 if (BV_ISSET(fields, 33)) {
69361 log_packet_detailed(" got field 'bridged_over'");
69362
69363#ifdef FREECIV_JSON_CONNECTION
69364 field_addr.name = "bridged_over";
69365#endif /* FREECIV_JSON_CONNECTION */
69366
69367 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
69368 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
69369 }
69370 }
69371
69372 if (BV_ISSET(fields, 34)) {
69373 log_packet_detailed(" got field 'conflicts'");
69374
69375#ifdef FREECIV_JSON_CONNECTION
69376 field_addr.name = "conflicts";
69377#endif /* FREECIV_JSON_CONNECTION */
69378
69379 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
69380 RECEIVE_PACKET_FIELD_ERROR(conflicts);
69381 }
69382 }
69383
69384 if (BV_ISSET(fields, 35)) {
69385 log_packet_detailed(" got field 'no_aggr_near_city'");
69386
69387#ifdef FREECIV_JSON_CONNECTION
69388 field_addr.name = "no_aggr_near_city";
69389#endif /* FREECIV_JSON_CONNECTION */
69390
69391 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
69392 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
69393 }
69394 }
69395
69396 if (BV_ISSET(fields, 36)) {
69397 log_packet_detailed(" got field 'helptext'");
69398
69399#ifdef FREECIV_JSON_CONNECTION
69400 field_addr.name = "helptext";
69401#endif /* FREECIV_JSON_CONNECTION */
69402
69403 {
69404 int i;
69405
69406 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69408 }
69409 strvec_reserve(real_packet->helptext, i);
69410
69411#ifdef FREECIV_JSON_CONNECTION
69412 /* Enter array. */
69413 field_addr.sub_location = plocation_elem_new(0);
69414#endif /* FREECIV_JSON_CONNECTION */
69415
69416 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69417#ifdef FREECIV_JSON_CONNECTION
69418 /* Next array element */
69419 field_addr.sub_location->number = i;
69420#endif /* FREECIV_JSON_CONNECTION */
69421
69422 {
69423 char readin[MAX_LEN_PACKET];
69424
69425 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
69426 || !strvec_set(real_packet->helptext, i, readin)) {
69428 }
69429 }
69430 }
69431
69432#ifdef FREECIV_JSON_CONNECTION
69433 /* Exit array. */
69434 FC_FREE(field_addr.sub_location);
69435#endif /* FREECIV_JSON_CONNECTION */
69436 }
69437 }
69438
69439 if (nullptr == old) {
69440 old = fc_malloc(sizeof(*old));
69442 old->id = real_packet->id;
69443 sz_strlcpy(old->name, real_packet->name);
69444 sz_strlcpy(old->rule_name, real_packet->rule_name);
69445 old->category = real_packet->category;
69446 old->causes = real_packet->causes;
69447 old->rmcauses = real_packet->rmcauses;
69448 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69449 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69450 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69451 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69452 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69453 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69454 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69455 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69456 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69457 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69458 old->appearance_chance = real_packet->appearance_chance;
69459 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69460 old->disappearance_chance = real_packet->disappearance_chance;
69461 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69462 old->visibility_req = real_packet->visibility_req;
69463 old->buildable = real_packet->buildable;
69464 old->generated = real_packet->generated;
69465 old->build_time = real_packet->build_time;
69466 old->build_time_factor = real_packet->build_time_factor;
69467 old->removal_time = real_packet->removal_time;
69468 old->removal_time_factor = real_packet->removal_time_factor;
69469 old->infracost = real_packet->infracost;
69470 old->defense_bonus = real_packet->defense_bonus;
69471 old->eus = real_packet->eus;
69472 old->native_to = real_packet->native_to;
69473 old->flags = real_packet->flags;
69474 old->hidden_by = real_packet->hidden_by;
69475 old->bridged_over = real_packet->bridged_over;
69476 old->conflicts = real_packet->conflicts;
69477 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69478 if (real_packet->helptext) {
69479 strvec_copy(old->helptext, real_packet->helptext);
69480 } else {
69481 strvec_clear(old->helptext);
69482 }
69484 } else {
69485 old->id = real_packet->id;
69486 sz_strlcpy(old->name, real_packet->name);
69487 sz_strlcpy(old->rule_name, real_packet->rule_name);
69488 old->category = real_packet->category;
69489 old->causes = real_packet->causes;
69490 old->rmcauses = real_packet->rmcauses;
69491 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
69492 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
69493 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
69494 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
69495 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
69496 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
69497 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
69498 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
69499 requirement_vector_copy(&old->reqs, &real_packet->reqs);
69500 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
69501 old->appearance_chance = real_packet->appearance_chance;
69502 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
69503 old->disappearance_chance = real_packet->disappearance_chance;
69504 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
69505 old->visibility_req = real_packet->visibility_req;
69506 old->buildable = real_packet->buildable;
69507 old->generated = real_packet->generated;
69508 old->build_time = real_packet->build_time;
69509 old->build_time_factor = real_packet->build_time_factor;
69510 old->removal_time = real_packet->removal_time;
69511 old->removal_time_factor = real_packet->removal_time_factor;
69512 old->infracost = real_packet->infracost;
69513 old->defense_bonus = real_packet->defense_bonus;
69514 old->eus = real_packet->eus;
69515 old->native_to = real_packet->native_to;
69516 old->flags = real_packet->flags;
69517 old->hidden_by = real_packet->hidden_by;
69518 old->bridged_over = real_packet->bridged_over;
69519 old->conflicts = real_packet->conflicts;
69520 old->no_aggr_near_city = real_packet->no_aggr_near_city;
69521 if (real_packet->helptext) {
69522 strvec_copy(old->helptext, real_packet->helptext);
69523 } else {
69524 strvec_clear(old->helptext);
69525 }
69526 }
69527
69528#else /* FREECIV_DELTA_PROTOCOL */
69529#ifdef FREECIV_JSON_CONNECTION
69530 field_addr.name = "id";
69531#endif /* FREECIV_JSON_CONNECTION */
69532
69533 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69535 }
69536
69537#ifdef FREECIV_JSON_CONNECTION
69538 field_addr.name = "name";
69539#endif /* FREECIV_JSON_CONNECTION */
69540
69541 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69543 }
69544
69545#ifdef FREECIV_JSON_CONNECTION
69546 field_addr.name = "rule_name";
69547#endif /* FREECIV_JSON_CONNECTION */
69548
69549 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
69550 RECEIVE_PACKET_FIELD_ERROR(rule_name);
69551 }
69552
69553#ifdef FREECIV_JSON_CONNECTION
69554 field_addr.name = "category";
69555#endif /* FREECIV_JSON_CONNECTION */
69556
69557 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
69559 }
69560
69561#ifdef FREECIV_JSON_CONNECTION
69562 field_addr.name = "causes";
69563#endif /* FREECIV_JSON_CONNECTION */
69564
69565 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
69567 }
69568
69569#ifdef FREECIV_JSON_CONNECTION
69570 field_addr.name = "rmcauses";
69571#endif /* FREECIV_JSON_CONNECTION */
69572
69573 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
69575 }
69576
69577#ifdef FREECIV_JSON_CONNECTION
69578 field_addr.name = "activity_gfx";
69579#endif /* FREECIV_JSON_CONNECTION */
69580
69581 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
69582 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
69583 }
69584
69585#ifdef FREECIV_JSON_CONNECTION
69586 field_addr.name = "act_gfx_alt";
69587#endif /* FREECIV_JSON_CONNECTION */
69588
69589 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
69590 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
69591 }
69592
69593#ifdef FREECIV_JSON_CONNECTION
69594 field_addr.name = "act_gfx_alt2";
69595#endif /* FREECIV_JSON_CONNECTION */
69596
69597 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
69598 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
69599 }
69600
69601#ifdef FREECIV_JSON_CONNECTION
69602 field_addr.name = "rmact_gfx";
69603#endif /* FREECIV_JSON_CONNECTION */
69604
69605 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
69606 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
69607 }
69608
69609#ifdef FREECIV_JSON_CONNECTION
69610 field_addr.name = "rmact_gfx_alt";
69611#endif /* FREECIV_JSON_CONNECTION */
69612
69613 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
69614 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
69615 }
69616
69617#ifdef FREECIV_JSON_CONNECTION
69618 field_addr.name = "rmact_gfx_alt2";
69619#endif /* FREECIV_JSON_CONNECTION */
69620
69621 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
69622 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
69623 }
69624
69625#ifdef FREECIV_JSON_CONNECTION
69626 field_addr.name = "graphic_str";
69627#endif /* FREECIV_JSON_CONNECTION */
69628
69629 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
69630 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
69631 }
69632
69633#ifdef FREECIV_JSON_CONNECTION
69634 field_addr.name = "graphic_alt";
69635#endif /* FREECIV_JSON_CONNECTION */
69636
69637 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
69638 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
69639 }
69640
69641#ifdef FREECIV_JSON_CONNECTION
69642 field_addr.name = "reqs";
69643#endif /* FREECIV_JSON_CONNECTION */
69644
69645 {
69646 int i;
69647
69648 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69650 }
69652
69653#ifdef FREECIV_JSON_CONNECTION
69654 /* Enter array. */
69655 field_addr.sub_location = plocation_elem_new(0);
69656#endif /* FREECIV_JSON_CONNECTION */
69657
69658 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
69659#ifdef FREECIV_JSON_CONNECTION
69660 /* Next array element */
69661 field_addr.sub_location->number = i;
69662#endif /* FREECIV_JSON_CONNECTION */
69663
69664 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
69666 }
69667 }
69668
69669#ifdef FREECIV_JSON_CONNECTION
69670 /* Exit array. */
69671 FC_FREE(field_addr.sub_location);
69672#endif /* FREECIV_JSON_CONNECTION */
69673 }
69674
69675#ifdef FREECIV_JSON_CONNECTION
69676 field_addr.name = "rmreqs";
69677#endif /* FREECIV_JSON_CONNECTION */
69678
69679 {
69680 int i;
69681
69682 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69684 }
69686
69687#ifdef FREECIV_JSON_CONNECTION
69688 /* Enter array. */
69689 field_addr.sub_location = plocation_elem_new(0);
69690#endif /* FREECIV_JSON_CONNECTION */
69691
69692 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
69693#ifdef FREECIV_JSON_CONNECTION
69694 /* Next array element */
69695 field_addr.sub_location->number = i;
69696#endif /* FREECIV_JSON_CONNECTION */
69697
69698 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs.p[i])) {
69700 }
69701 }
69702
69703#ifdef FREECIV_JSON_CONNECTION
69704 /* Exit array. */
69705 FC_FREE(field_addr.sub_location);
69706#endif /* FREECIV_JSON_CONNECTION */
69707 }
69708
69709#ifdef FREECIV_JSON_CONNECTION
69710 field_addr.name = "appearance_chance";
69711#endif /* FREECIV_JSON_CONNECTION */
69712
69713 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
69714 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
69715 }
69716
69717#ifdef FREECIV_JSON_CONNECTION
69718 field_addr.name = "appearance_reqs";
69719#endif /* FREECIV_JSON_CONNECTION */
69720
69721 {
69722 int i;
69723
69724 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69725 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69726 }
69727 requirement_vector_reserve(&real_packet->appearance_reqs, i);
69728
69729#ifdef FREECIV_JSON_CONNECTION
69730 /* Enter array. */
69731 field_addr.sub_location = plocation_elem_new(0);
69732#endif /* FREECIV_JSON_CONNECTION */
69733
69734 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
69735#ifdef FREECIV_JSON_CONNECTION
69736 /* Next array element */
69737 field_addr.sub_location->number = i;
69738#endif /* FREECIV_JSON_CONNECTION */
69739
69740 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs.p[i])) {
69741 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
69742 }
69743 }
69744
69745#ifdef FREECIV_JSON_CONNECTION
69746 /* Exit array. */
69747 FC_FREE(field_addr.sub_location);
69748#endif /* FREECIV_JSON_CONNECTION */
69749 }
69750
69751#ifdef FREECIV_JSON_CONNECTION
69752 field_addr.name = "disappearance_chance";
69753#endif /* FREECIV_JSON_CONNECTION */
69754
69755 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
69756 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
69757 }
69758
69759#ifdef FREECIV_JSON_CONNECTION
69760 field_addr.name = "disappearance_reqs";
69761#endif /* FREECIV_JSON_CONNECTION */
69762
69763 {
69764 int i;
69765
69766 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69767 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69768 }
69769 requirement_vector_reserve(&real_packet->disappearance_reqs, i);
69770
69771#ifdef FREECIV_JSON_CONNECTION
69772 /* Enter array. */
69773 field_addr.sub_location = plocation_elem_new(0);
69774#endif /* FREECIV_JSON_CONNECTION */
69775
69776 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
69777#ifdef FREECIV_JSON_CONNECTION
69778 /* Next array element */
69779 field_addr.sub_location->number = i;
69780#endif /* FREECIV_JSON_CONNECTION */
69781
69782 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs.p[i])) {
69783 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
69784 }
69785 }
69786
69787#ifdef FREECIV_JSON_CONNECTION
69788 /* Exit array. */
69789 FC_FREE(field_addr.sub_location);
69790#endif /* FREECIV_JSON_CONNECTION */
69791 }
69792
69793#ifdef FREECIV_JSON_CONNECTION
69794 field_addr.name = "visibility_req";
69795#endif /* FREECIV_JSON_CONNECTION */
69796
69797 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
69798 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
69799 }
69800
69801#ifdef FREECIV_JSON_CONNECTION
69802 field_addr.name = "buildable";
69803#endif /* FREECIV_JSON_CONNECTION */
69804
69805 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->buildable)) {
69806 RECEIVE_PACKET_FIELD_ERROR(buildable);
69807 }
69808
69809#ifdef FREECIV_JSON_CONNECTION
69810 field_addr.name = "generated";
69811#endif /* FREECIV_JSON_CONNECTION */
69812
69813 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->generated)) {
69814 RECEIVE_PACKET_FIELD_ERROR(generated);
69815 }
69816
69817#ifdef FREECIV_JSON_CONNECTION
69818 field_addr.name = "build_time";
69819#endif /* FREECIV_JSON_CONNECTION */
69820
69821 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
69822 RECEIVE_PACKET_FIELD_ERROR(build_time);
69823 }
69824
69825#ifdef FREECIV_JSON_CONNECTION
69826 field_addr.name = "build_time_factor";
69827#endif /* FREECIV_JSON_CONNECTION */
69828
69829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
69830 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
69831 }
69832
69833#ifdef FREECIV_JSON_CONNECTION
69834 field_addr.name = "removal_time";
69835#endif /* FREECIV_JSON_CONNECTION */
69836
69837 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
69838 RECEIVE_PACKET_FIELD_ERROR(removal_time);
69839 }
69840
69841#ifdef FREECIV_JSON_CONNECTION
69842 field_addr.name = "removal_time_factor";
69843#endif /* FREECIV_JSON_CONNECTION */
69844
69845 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
69846 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
69847 }
69848
69849#ifdef FREECIV_JSON_CONNECTION
69850 field_addr.name = "infracost";
69851#endif /* FREECIV_JSON_CONNECTION */
69852
69853 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
69854 RECEIVE_PACKET_FIELD_ERROR(infracost);
69855 }
69856
69857#ifdef FREECIV_JSON_CONNECTION
69858 field_addr.name = "defense_bonus";
69859#endif /* FREECIV_JSON_CONNECTION */
69860
69861 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
69862 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
69863 }
69864
69865#ifdef FREECIV_JSON_CONNECTION
69866 field_addr.name = "eus";
69867#endif /* FREECIV_JSON_CONNECTION */
69868
69869 {
69870 int readin;
69871
69872 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69874 }
69875 real_packet->eus = readin;
69876 }
69877
69878#ifdef FREECIV_JSON_CONNECTION
69879 field_addr.name = "native_to";
69880#endif /* FREECIV_JSON_CONNECTION */
69881
69882 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
69883 RECEIVE_PACKET_FIELD_ERROR(native_to);
69884 }
69885
69886#ifdef FREECIV_JSON_CONNECTION
69887 field_addr.name = "flags";
69888#endif /* FREECIV_JSON_CONNECTION */
69889
69890 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
69892 }
69893
69894#ifdef FREECIV_JSON_CONNECTION
69895 field_addr.name = "hidden_by";
69896#endif /* FREECIV_JSON_CONNECTION */
69897
69898 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
69899 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
69900 }
69901
69902#ifdef FREECIV_JSON_CONNECTION
69903 field_addr.name = "bridged_over";
69904#endif /* FREECIV_JSON_CONNECTION */
69905
69906 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
69907 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
69908 }
69909
69910#ifdef FREECIV_JSON_CONNECTION
69911 field_addr.name = "conflicts";
69912#endif /* FREECIV_JSON_CONNECTION */
69913
69914 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
69915 RECEIVE_PACKET_FIELD_ERROR(conflicts);
69916 }
69917
69918#ifdef FREECIV_JSON_CONNECTION
69919 field_addr.name = "no_aggr_near_city";
69920#endif /* FREECIV_JSON_CONNECTION */
69921
69922 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
69923 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
69924 }
69925
69926#ifdef FREECIV_JSON_CONNECTION
69927 field_addr.name = "helptext";
69928#endif /* FREECIV_JSON_CONNECTION */
69929
69930 {
69931 int i;
69932
69933 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
69935 }
69936 strvec_reserve(real_packet->helptext, i);
69937
69938#ifdef FREECIV_JSON_CONNECTION
69939 /* Enter array. */
69940 field_addr.sub_location = plocation_elem_new(0);
69941#endif /* FREECIV_JSON_CONNECTION */
69942
69943 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
69944#ifdef FREECIV_JSON_CONNECTION
69945 /* Next array element */
69946 field_addr.sub_location->number = i;
69947#endif /* FREECIV_JSON_CONNECTION */
69948
69949 {
69950 char readin[MAX_LEN_PACKET];
69951
69952 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
69953 || !strvec_set(real_packet->helptext, i, readin)) {
69955 }
69956 }
69957 }
69958
69959#ifdef FREECIV_JSON_CONNECTION
69960 /* Exit array. */
69961 FC_FREE(field_addr.sub_location);
69962#endif /* FREECIV_JSON_CONNECTION */
69963 }
69964#endif /* FREECIV_DELTA_PROTOCOL */
69965
69967#undef FREE_PACKET_STRUCT
69968}
69969
69970static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
69971{
69972 const struct packet_ruleset_extra *real_packet = packet;
69973 int e;
69975
69976 log_packet_detailed("packet_ruleset_extra_100: sending info about ()");
69977
69978#ifdef FREECIV_DELTA_PROTOCOL
69980 struct packet_ruleset_extra *old;
69981 bool differ;
69982 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA;
69983
69984 if (nullptr == *hash) {
69986 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra);
69987 }
69988 BV_CLR_ALL(fields);
69989
69990 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
69991 old = fc_malloc(sizeof(*old));
69992 /* temporary bitcopy just to insert correctly */
69993 *old = *real_packet;
69996 }
69997
69998 differ = (old->id != real_packet->id);
69999 if (differ) {
70000 BV_SET(fields, 0);
70001 }
70002
70003 differ = (strcmp(old->name, real_packet->name) != 0);
70004 if (differ) {
70005 BV_SET(fields, 1);
70006 }
70007
70008 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
70009 if (differ) {
70010 BV_SET(fields, 2);
70011 }
70012
70013 differ = (old->category != real_packet->category);
70014 if (differ) {
70015 BV_SET(fields, 3);
70016 }
70017
70018 differ = !BV_ARE_EQUAL(old->causes, real_packet->causes);
70019 if (differ) {
70020 BV_SET(fields, 4);
70021 }
70022
70023 differ = !BV_ARE_EQUAL(old->rmcauses, real_packet->rmcauses);
70024 if (differ) {
70025 BV_SET(fields, 5);
70026 }
70027
70028 differ = (strcmp(old->activity_gfx, real_packet->activity_gfx) != 0);
70029 if (differ) {
70030 BV_SET(fields, 6);
70031 }
70032
70033 differ = (strcmp(old->act_gfx_alt, real_packet->act_gfx_alt) != 0);
70034 if (differ) {
70035 BV_SET(fields, 7);
70036 }
70037
70038 differ = (strcmp(old->act_gfx_alt2, real_packet->act_gfx_alt2) != 0);
70039 if (differ) {
70040 BV_SET(fields, 8);
70041 }
70042
70043 differ = (strcmp(old->rmact_gfx, real_packet->rmact_gfx) != 0);
70044 if (differ) {
70045 BV_SET(fields, 9);
70046 }
70047
70048 differ = (strcmp(old->rmact_gfx_alt, real_packet->rmact_gfx_alt) != 0);
70049 if (differ) {
70050 BV_SET(fields, 10);
70051 }
70052
70053 differ = (strcmp(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2) != 0);
70054 if (differ) {
70055 BV_SET(fields, 11);
70056 }
70057
70058 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
70059 if (differ) {
70060 BV_SET(fields, 12);
70061 }
70062
70063 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
70064 if (differ) {
70065 BV_SET(fields, 13);
70066 }
70067
70069 if (!differ) {
70070 int i;
70071
70072 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
70073 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
70074 if (differ) {
70075 break;
70076 }
70077 }
70078 }
70079 if (differ) {
70080 BV_SET(fields, 14);
70081 }
70082
70084 if (!differ) {
70085 int i;
70086
70087 for (i = 0; i < requirement_vector_size(&old->rmreqs); i++) {
70088 differ = !are_requirements_equal(&old->rmreqs.p[i], &real_packet->rmreqs.p[i]);
70089 if (differ) {
70090 break;
70091 }
70092 }
70093 }
70094 if (differ) {
70095 BV_SET(fields, 15);
70096 }
70097
70098 differ = (old->appearance_chance != real_packet->appearance_chance);
70099 if (differ) {
70100 BV_SET(fields, 16);
70101 }
70102
70103 differ = (requirement_vector_size(&old->appearance_reqs) != requirement_vector_size(&real_packet->appearance_reqs));
70104 if (!differ) {
70105 int i;
70106
70107 for (i = 0; i < requirement_vector_size(&old->appearance_reqs); i++) {
70108 differ = !are_requirements_equal(&old->appearance_reqs.p[i], &real_packet->appearance_reqs.p[i]);
70109 if (differ) {
70110 break;
70111 }
70112 }
70113 }
70114 if (differ) {
70115 BV_SET(fields, 17);
70116 }
70117
70118 differ = (old->disappearance_chance != real_packet->disappearance_chance);
70119 if (differ) {
70120 BV_SET(fields, 18);
70121 }
70122
70123 differ = (requirement_vector_size(&old->disappearance_reqs) != requirement_vector_size(&real_packet->disappearance_reqs));
70124 if (!differ) {
70125 int i;
70126
70127 for (i = 0; i < requirement_vector_size(&old->disappearance_reqs); i++) {
70128 differ = !are_requirements_equal(&old->disappearance_reqs.p[i], &real_packet->disappearance_reqs.p[i]);
70129 if (differ) {
70130 break;
70131 }
70132 }
70133 }
70134 if (differ) {
70135 BV_SET(fields, 19);
70136 }
70137
70138 differ = (old->visibility_req != real_packet->visibility_req);
70139 if (differ) {
70140 BV_SET(fields, 20);
70141 }
70142
70143 /* folded into head */
70144 if (real_packet->buildable) {
70145 BV_SET(fields, 21);
70146 }
70147
70148 /* folded into head */
70149 if (real_packet->generated) {
70150 BV_SET(fields, 22);
70151 }
70152
70153 differ = (old->build_time != real_packet->build_time);
70154 if (differ) {
70155 BV_SET(fields, 23);
70156 }
70157
70158 differ = (old->build_time_factor != real_packet->build_time_factor);
70159 if (differ) {
70160 BV_SET(fields, 24);
70161 }
70162
70163 differ = (old->removal_time != real_packet->removal_time);
70164 if (differ) {
70165 BV_SET(fields, 25);
70166 }
70167
70168 differ = (old->removal_time_factor != real_packet->removal_time_factor);
70169 if (differ) {
70170 BV_SET(fields, 26);
70171 }
70172
70173 differ = (old->infracost != real_packet->infracost);
70174 if (differ) {
70175 BV_SET(fields, 27);
70176 }
70177
70178 differ = (old->defense_bonus != real_packet->defense_bonus);
70179 if (differ) {
70180 BV_SET(fields, 28);
70181 }
70182
70183 differ = (old->eus != real_packet->eus);
70184 if (differ) {
70185 BV_SET(fields, 29);
70186 }
70187
70188 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
70189 if (differ) {
70190 BV_SET(fields, 30);
70191 }
70192
70193 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
70194 if (differ) {
70195 BV_SET(fields, 31);
70196 }
70197
70198 differ = !BV_ARE_EQUAL(old->hidden_by, real_packet->hidden_by);
70199 if (differ) {
70200 BV_SET(fields, 32);
70201 }
70202
70203 differ = !BV_ARE_EQUAL(old->bridged_over, real_packet->bridged_over);
70204 if (differ) {
70205 BV_SET(fields, 33);
70206 }
70207
70208 differ = !BV_ARE_EQUAL(old->conflicts, real_packet->conflicts);
70209 if (differ) {
70210 BV_SET(fields, 34);
70211 }
70212
70213 differ = (old->no_aggr_near_city != real_packet->no_aggr_near_city);
70214 if (differ) {
70215 BV_SET(fields, 35);
70216 }
70217
70218 if (real_packet->helptext) {
70219 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
70220 } else {
70221 differ = (strvec_size(old->helptext) > 0);
70222 }
70223 if (differ) {
70224 BV_SET(fields, 36);
70225 }
70226#endif /* FREECIV_DELTA_PROTOCOL */
70227
70228#ifdef FREECIV_JSON_CONNECTION
70229 struct plocation field_addr;
70230 {
70231 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
70234 }
70235#endif /* FREECIV_JSON_CONNECTION */
70236
70237#ifdef FREECIV_DELTA_PROTOCOL
70238#ifdef FREECIV_JSON_CONNECTION
70239 field_addr.name = "fields";
70240#endif /* FREECIV_JSON_CONNECTION */
70241 e = 0;
70242 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70243 if (e) {
70244 log_packet_detailed("fields bitvector error detected");
70245 }
70246
70247 if (BV_ISSET(fields, 0)) {
70248 log_packet_detailed(" field 'id' has changed");
70249
70250#ifdef FREECIV_JSON_CONNECTION
70251 field_addr.name = "id";
70252#endif /* FREECIV_JSON_CONNECTION */
70253 e = 0;
70254
70255 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70256
70257 if (e) {
70258 log_packet_detailed("'id' field error detected");
70259 }
70260 }
70261
70262 if (BV_ISSET(fields, 1)) {
70263 log_packet_detailed(" field 'name' has changed");
70264
70265#ifdef FREECIV_JSON_CONNECTION
70266 field_addr.name = "name";
70267#endif /* FREECIV_JSON_CONNECTION */
70268 e = 0;
70269
70270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70271
70272 if (e) {
70273 log_packet_detailed("'name' field error detected");
70274 }
70275 }
70276
70277 if (BV_ISSET(fields, 2)) {
70278 log_packet_detailed(" field 'rule_name' has changed");
70279
70280#ifdef FREECIV_JSON_CONNECTION
70281 field_addr.name = "rule_name";
70282#endif /* FREECIV_JSON_CONNECTION */
70283 e = 0;
70284
70285 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70286
70287 if (e) {
70288 log_packet_detailed("'rule_name' field error detected");
70289 }
70290 }
70291
70292 if (BV_ISSET(fields, 3)) {
70293 log_packet_detailed(" field 'category' has changed");
70294
70295#ifdef FREECIV_JSON_CONNECTION
70296 field_addr.name = "category";
70297#endif /* FREECIV_JSON_CONNECTION */
70298 e = 0;
70299
70300 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
70301
70302 if (e) {
70303 log_packet_detailed("'category' field error detected");
70304 }
70305 }
70306
70307 if (BV_ISSET(fields, 4)) {
70308 log_packet_detailed(" field 'causes' has changed");
70309
70310#ifdef FREECIV_JSON_CONNECTION
70311 field_addr.name = "causes";
70312#endif /* FREECIV_JSON_CONNECTION */
70313 e = 0;
70314
70315 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
70316
70317 if (e) {
70318 log_packet_detailed("'causes' field error detected");
70319 }
70320 }
70321
70322 if (BV_ISSET(fields, 5)) {
70323 log_packet_detailed(" field 'rmcauses' has changed");
70324
70325#ifdef FREECIV_JSON_CONNECTION
70326 field_addr.name = "rmcauses";
70327#endif /* FREECIV_JSON_CONNECTION */
70328 e = 0;
70329
70330 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
70331
70332 if (e) {
70333 log_packet_detailed("'rmcauses' field error detected");
70334 }
70335 }
70336
70337 if (BV_ISSET(fields, 6)) {
70338 log_packet_detailed(" field 'activity_gfx' has changed");
70339
70340#ifdef FREECIV_JSON_CONNECTION
70341 field_addr.name = "activity_gfx";
70342#endif /* FREECIV_JSON_CONNECTION */
70343 e = 0;
70344
70345 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
70346
70347 if (e) {
70348 log_packet_detailed("'activity_gfx' field error detected");
70349 }
70350 }
70351
70352 if (BV_ISSET(fields, 7)) {
70353 log_packet_detailed(" field 'act_gfx_alt' has changed");
70354
70355#ifdef FREECIV_JSON_CONNECTION
70356 field_addr.name = "act_gfx_alt";
70357#endif /* FREECIV_JSON_CONNECTION */
70358 e = 0;
70359
70360 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
70361
70362 if (e) {
70363 log_packet_detailed("'act_gfx_alt' field error detected");
70364 }
70365 }
70366
70367 if (BV_ISSET(fields, 8)) {
70368 log_packet_detailed(" field 'act_gfx_alt2' has changed");
70369
70370#ifdef FREECIV_JSON_CONNECTION
70371 field_addr.name = "act_gfx_alt2";
70372#endif /* FREECIV_JSON_CONNECTION */
70373 e = 0;
70374
70375 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
70376
70377 if (e) {
70378 log_packet_detailed("'act_gfx_alt2' field error detected");
70379 }
70380 }
70381
70382 if (BV_ISSET(fields, 9)) {
70383 log_packet_detailed(" field 'rmact_gfx' has changed");
70384
70385#ifdef FREECIV_JSON_CONNECTION
70386 field_addr.name = "rmact_gfx";
70387#endif /* FREECIV_JSON_CONNECTION */
70388 e = 0;
70389
70390 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
70391
70392 if (e) {
70393 log_packet_detailed("'rmact_gfx' field error detected");
70394 }
70395 }
70396
70397 if (BV_ISSET(fields, 10)) {
70398 log_packet_detailed(" field 'rmact_gfx_alt' has changed");
70399
70400#ifdef FREECIV_JSON_CONNECTION
70401 field_addr.name = "rmact_gfx_alt";
70402#endif /* FREECIV_JSON_CONNECTION */
70403 e = 0;
70404
70405 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
70406
70407 if (e) {
70408 log_packet_detailed("'rmact_gfx_alt' field error detected");
70409 }
70410 }
70411
70412 if (BV_ISSET(fields, 11)) {
70413 log_packet_detailed(" field 'rmact_gfx_alt2' has changed");
70414
70415#ifdef FREECIV_JSON_CONNECTION
70416 field_addr.name = "rmact_gfx_alt2";
70417#endif /* FREECIV_JSON_CONNECTION */
70418 e = 0;
70419
70420 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
70421
70422 if (e) {
70423 log_packet_detailed("'rmact_gfx_alt2' field error detected");
70424 }
70425 }
70426
70427 if (BV_ISSET(fields, 12)) {
70428 log_packet_detailed(" field 'graphic_str' has changed");
70429
70430#ifdef FREECIV_JSON_CONNECTION
70431 field_addr.name = "graphic_str";
70432#endif /* FREECIV_JSON_CONNECTION */
70433 e = 0;
70434
70435 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
70436
70437 if (e) {
70438 log_packet_detailed("'graphic_str' field error detected");
70439 }
70440 }
70441
70442 if (BV_ISSET(fields, 13)) {
70443 log_packet_detailed(" field 'graphic_alt' has changed");
70444
70445#ifdef FREECIV_JSON_CONNECTION
70446 field_addr.name = "graphic_alt";
70447#endif /* FREECIV_JSON_CONNECTION */
70448 e = 0;
70449
70450 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
70451
70452 if (e) {
70453 log_packet_detailed("'graphic_alt' field error detected");
70454 }
70455 }
70456
70457 if (BV_ISSET(fields, 14)) {
70458 log_packet_detailed(" field 'reqs' has changed");
70459
70460#ifdef FREECIV_JSON_CONNECTION
70461 field_addr.name = "reqs";
70462#endif /* FREECIV_JSON_CONNECTION */
70463 e = 0;
70464
70465 {
70466 int i;
70467
70470
70471#ifdef FREECIV_JSON_CONNECTION
70472 /* Enter array. */
70473 field_addr.sub_location = plocation_elem_new(0);
70474#endif /* FREECIV_JSON_CONNECTION */
70475
70476 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
70477#ifdef FREECIV_JSON_CONNECTION
70478 /* Next array element. */
70479 field_addr.sub_location->number = i;
70480#endif /* FREECIV_JSON_CONNECTION */
70481
70482 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
70483 }
70484
70485#ifdef FREECIV_JSON_CONNECTION
70486 /* Exit array. */
70487 FC_FREE(field_addr.sub_location);
70488#endif /* FREECIV_JSON_CONNECTION */
70489 }
70490
70491 if (e) {
70492 log_packet_detailed("'reqs' field error detected");
70493 }
70494 }
70495
70496 if (BV_ISSET(fields, 15)) {
70497 log_packet_detailed(" field 'rmreqs' has changed");
70498
70499#ifdef FREECIV_JSON_CONNECTION
70500 field_addr.name = "rmreqs";
70501#endif /* FREECIV_JSON_CONNECTION */
70502 e = 0;
70503
70504 {
70505 int i;
70506
70509
70510#ifdef FREECIV_JSON_CONNECTION
70511 /* Enter array. */
70512 field_addr.sub_location = plocation_elem_new(0);
70513#endif /* FREECIV_JSON_CONNECTION */
70514
70515 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
70516#ifdef FREECIV_JSON_CONNECTION
70517 /* Next array element. */
70518 field_addr.sub_location->number = i;
70519#endif /* FREECIV_JSON_CONNECTION */
70520
70521 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
70522 }
70523
70524#ifdef FREECIV_JSON_CONNECTION
70525 /* Exit array. */
70526 FC_FREE(field_addr.sub_location);
70527#endif /* FREECIV_JSON_CONNECTION */
70528 }
70529
70530 if (e) {
70531 log_packet_detailed("'rmreqs' field error detected");
70532 }
70533 }
70534
70535 if (BV_ISSET(fields, 16)) {
70536 log_packet_detailed(" field 'appearance_chance' has changed");
70537
70538#ifdef FREECIV_JSON_CONNECTION
70539 field_addr.name = "appearance_chance";
70540#endif /* FREECIV_JSON_CONNECTION */
70541 e = 0;
70542
70543 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
70544
70545 if (e) {
70546 log_packet_detailed("'appearance_chance' field error detected");
70547 }
70548 }
70549
70550 if (BV_ISSET(fields, 17)) {
70551 log_packet_detailed(" field 'appearance_reqs' has changed");
70552
70553#ifdef FREECIV_JSON_CONNECTION
70554 field_addr.name = "appearance_reqs";
70555#endif /* FREECIV_JSON_CONNECTION */
70556 e = 0;
70557
70558 {
70559 int i;
70560
70562 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
70563
70564#ifdef FREECIV_JSON_CONNECTION
70565 /* Enter array. */
70566 field_addr.sub_location = plocation_elem_new(0);
70567#endif /* FREECIV_JSON_CONNECTION */
70568
70569 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
70570#ifdef FREECIV_JSON_CONNECTION
70571 /* Next array element. */
70572 field_addr.sub_location->number = i;
70573#endif /* FREECIV_JSON_CONNECTION */
70574
70575 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
70576 }
70577
70578#ifdef FREECIV_JSON_CONNECTION
70579 /* Exit array. */
70580 FC_FREE(field_addr.sub_location);
70581#endif /* FREECIV_JSON_CONNECTION */
70582 }
70583
70584 if (e) {
70585 log_packet_detailed("'appearance_reqs' field error detected");
70586 }
70587 }
70588
70589 if (BV_ISSET(fields, 18)) {
70590 log_packet_detailed(" field 'disappearance_chance' has changed");
70591
70592#ifdef FREECIV_JSON_CONNECTION
70593 field_addr.name = "disappearance_chance";
70594#endif /* FREECIV_JSON_CONNECTION */
70595 e = 0;
70596
70597 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
70598
70599 if (e) {
70600 log_packet_detailed("'disappearance_chance' field error detected");
70601 }
70602 }
70603
70604 if (BV_ISSET(fields, 19)) {
70605 log_packet_detailed(" field 'disappearance_reqs' has changed");
70606
70607#ifdef FREECIV_JSON_CONNECTION
70608 field_addr.name = "disappearance_reqs";
70609#endif /* FREECIV_JSON_CONNECTION */
70610 e = 0;
70611
70612 {
70613 int i;
70614
70616 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
70617
70618#ifdef FREECIV_JSON_CONNECTION
70619 /* Enter array. */
70620 field_addr.sub_location = plocation_elem_new(0);
70621#endif /* FREECIV_JSON_CONNECTION */
70622
70623 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
70624#ifdef FREECIV_JSON_CONNECTION
70625 /* Next array element. */
70626 field_addr.sub_location->number = i;
70627#endif /* FREECIV_JSON_CONNECTION */
70628
70629 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
70630 }
70631
70632#ifdef FREECIV_JSON_CONNECTION
70633 /* Exit array. */
70634 FC_FREE(field_addr.sub_location);
70635#endif /* FREECIV_JSON_CONNECTION */
70636 }
70637
70638 if (e) {
70639 log_packet_detailed("'disappearance_reqs' field error detected");
70640 }
70641 }
70642
70643 if (BV_ISSET(fields, 20)) {
70644 log_packet_detailed(" field 'visibility_req' has changed");
70645
70646#ifdef FREECIV_JSON_CONNECTION
70647 field_addr.name = "visibility_req";
70648#endif /* FREECIV_JSON_CONNECTION */
70649 e = 0;
70650
70651 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
70652
70653 if (e) {
70654 log_packet_detailed("'visibility_req' field error detected");
70655 }
70656 }
70657
70658 /* field 21 is folded into the header */
70659
70660 /* field 22 is folded into the header */
70661
70662 if (BV_ISSET(fields, 23)) {
70663 log_packet_detailed(" field 'build_time' has changed");
70664
70665#ifdef FREECIV_JSON_CONNECTION
70666 field_addr.name = "build_time";
70667#endif /* FREECIV_JSON_CONNECTION */
70668 e = 0;
70669
70670 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
70671
70672 if (e) {
70673 log_packet_detailed("'build_time' field error detected");
70674 }
70675 }
70676
70677 if (BV_ISSET(fields, 24)) {
70678 log_packet_detailed(" field 'build_time_factor' has changed");
70679
70680#ifdef FREECIV_JSON_CONNECTION
70681 field_addr.name = "build_time_factor";
70682#endif /* FREECIV_JSON_CONNECTION */
70683 e = 0;
70684
70685 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
70686
70687 if (e) {
70688 log_packet_detailed("'build_time_factor' field error detected");
70689 }
70690 }
70691
70692 if (BV_ISSET(fields, 25)) {
70693 log_packet_detailed(" field 'removal_time' has changed");
70694
70695#ifdef FREECIV_JSON_CONNECTION
70696 field_addr.name = "removal_time";
70697#endif /* FREECIV_JSON_CONNECTION */
70698 e = 0;
70699
70700 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
70701
70702 if (e) {
70703 log_packet_detailed("'removal_time' field error detected");
70704 }
70705 }
70706
70707 if (BV_ISSET(fields, 26)) {
70708 log_packet_detailed(" field 'removal_time_factor' has changed");
70709
70710#ifdef FREECIV_JSON_CONNECTION
70711 field_addr.name = "removal_time_factor";
70712#endif /* FREECIV_JSON_CONNECTION */
70713 e = 0;
70714
70715 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
70716
70717 if (e) {
70718 log_packet_detailed("'removal_time_factor' field error detected");
70719 }
70720 }
70721
70722 if (BV_ISSET(fields, 27)) {
70723 log_packet_detailed(" field 'infracost' has changed");
70724
70725#ifdef FREECIV_JSON_CONNECTION
70726 field_addr.name = "infracost";
70727#endif /* FREECIV_JSON_CONNECTION */
70728 e = 0;
70729
70730 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
70731
70732 if (e) {
70733 log_packet_detailed("'infracost' field error detected");
70734 }
70735 }
70736
70737 if (BV_ISSET(fields, 28)) {
70738 log_packet_detailed(" field 'defense_bonus' has changed");
70739
70740#ifdef FREECIV_JSON_CONNECTION
70741 field_addr.name = "defense_bonus";
70742#endif /* FREECIV_JSON_CONNECTION */
70743 e = 0;
70744
70745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
70746
70747 if (e) {
70748 log_packet_detailed("'defense_bonus' field error detected");
70749 }
70750 }
70751
70752 if (BV_ISSET(fields, 29)) {
70753 log_packet_detailed(" field 'eus' has changed");
70754
70755#ifdef FREECIV_JSON_CONNECTION
70756 field_addr.name = "eus";
70757#endif /* FREECIV_JSON_CONNECTION */
70758 e = 0;
70759
70760 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
70761
70762 if (e) {
70763 log_packet_detailed("'eus' field error detected");
70764 }
70765 }
70766
70767 if (BV_ISSET(fields, 30)) {
70768 log_packet_detailed(" field 'native_to' has changed");
70769
70770#ifdef FREECIV_JSON_CONNECTION
70771 field_addr.name = "native_to";
70772#endif /* FREECIV_JSON_CONNECTION */
70773 e = 0;
70774
70775 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
70776
70777 if (e) {
70778 log_packet_detailed("'native_to' field error detected");
70779 }
70780 }
70781
70782 if (BV_ISSET(fields, 31)) {
70783 log_packet_detailed(" field 'flags' has changed");
70784
70785#ifdef FREECIV_JSON_CONNECTION
70786 field_addr.name = "flags";
70787#endif /* FREECIV_JSON_CONNECTION */
70788 e = 0;
70789
70790 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
70791
70792 if (e) {
70793 log_packet_detailed("'flags' field error detected");
70794 }
70795 }
70796
70797 if (BV_ISSET(fields, 32)) {
70798 log_packet_detailed(" field 'hidden_by' has changed");
70799
70800#ifdef FREECIV_JSON_CONNECTION
70801 field_addr.name = "hidden_by";
70802#endif /* FREECIV_JSON_CONNECTION */
70803 e = 0;
70804
70805 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
70806
70807 if (e) {
70808 log_packet_detailed("'hidden_by' field error detected");
70809 }
70810 }
70811
70812 if (BV_ISSET(fields, 33)) {
70813 log_packet_detailed(" field 'bridged_over' has changed");
70814
70815#ifdef FREECIV_JSON_CONNECTION
70816 field_addr.name = "bridged_over";
70817#endif /* FREECIV_JSON_CONNECTION */
70818 e = 0;
70819
70820 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
70821
70822 if (e) {
70823 log_packet_detailed("'bridged_over' field error detected");
70824 }
70825 }
70826
70827 if (BV_ISSET(fields, 34)) {
70828 log_packet_detailed(" field 'conflicts' has changed");
70829
70830#ifdef FREECIV_JSON_CONNECTION
70831 field_addr.name = "conflicts";
70832#endif /* FREECIV_JSON_CONNECTION */
70833 e = 0;
70834
70835 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
70836
70837 if (e) {
70838 log_packet_detailed("'conflicts' field error detected");
70839 }
70840 }
70841
70842 if (BV_ISSET(fields, 35)) {
70843 log_packet_detailed(" field 'no_aggr_near_city' has changed");
70844
70845#ifdef FREECIV_JSON_CONNECTION
70846 field_addr.name = "no_aggr_near_city";
70847#endif /* FREECIV_JSON_CONNECTION */
70848 e = 0;
70849
70850 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
70851
70852 if (e) {
70853 log_packet_detailed("'no_aggr_near_city' field error detected");
70854 }
70855 }
70856
70857 if (BV_ISSET(fields, 36)) {
70858 log_packet_detailed(" field 'helptext' has changed");
70859
70860#ifdef FREECIV_JSON_CONNECTION
70861 field_addr.name = "helptext";
70862#endif /* FREECIV_JSON_CONNECTION */
70863 e = 0;
70864
70865 if (!real_packet->helptext) {
70866 /* Transmit null as empty */
70867 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
70868 } else {
70869 int i;
70870
70872 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
70873
70874#ifdef FREECIV_JSON_CONNECTION
70875 /* Enter array. */
70876 field_addr.sub_location = plocation_elem_new(0);
70877#endif /* FREECIV_JSON_CONNECTION */
70878
70879 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
70880#ifdef FREECIV_JSON_CONNECTION
70881 /* Next array element. */
70882 field_addr.sub_location->number = i;
70883#endif /* FREECIV_JSON_CONNECTION */
70884
70885 {
70886 const char *pstr = strvec_get(real_packet->helptext, i);
70887
70888 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
70889 }
70890 }
70891
70892#ifdef FREECIV_JSON_CONNECTION
70893 /* Exit array. */
70894 FC_FREE(field_addr.sub_location);
70895#endif /* FREECIV_JSON_CONNECTION */
70896 }
70897
70898 if (e) {
70899 log_packet_detailed("'helptext' field error detected");
70900 }
70901 }
70902
70903 old->id = real_packet->id;
70904 sz_strlcpy(old->name, real_packet->name);
70905 sz_strlcpy(old->rule_name, real_packet->rule_name);
70906 old->category = real_packet->category;
70907 old->causes = real_packet->causes;
70908 old->rmcauses = real_packet->rmcauses;
70909 sz_strlcpy(old->activity_gfx, real_packet->activity_gfx);
70910 sz_strlcpy(old->act_gfx_alt, real_packet->act_gfx_alt);
70911 sz_strlcpy(old->act_gfx_alt2, real_packet->act_gfx_alt2);
70912 sz_strlcpy(old->rmact_gfx, real_packet->rmact_gfx);
70913 sz_strlcpy(old->rmact_gfx_alt, real_packet->rmact_gfx_alt);
70914 sz_strlcpy(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2);
70915 sz_strlcpy(old->graphic_str, real_packet->graphic_str);
70916 sz_strlcpy(old->graphic_alt, real_packet->graphic_alt);
70917 requirement_vector_copy(&old->reqs, &real_packet->reqs);
70918 requirement_vector_copy(&old->rmreqs, &real_packet->rmreqs);
70919 old->appearance_chance = real_packet->appearance_chance;
70920 requirement_vector_copy(&old->appearance_reqs, &real_packet->appearance_reqs);
70921 old->disappearance_chance = real_packet->disappearance_chance;
70922 requirement_vector_copy(&old->disappearance_reqs, &real_packet->disappearance_reqs);
70923 old->visibility_req = real_packet->visibility_req;
70924 old->buildable = real_packet->buildable;
70925 old->generated = real_packet->generated;
70926 old->build_time = real_packet->build_time;
70927 old->build_time_factor = real_packet->build_time_factor;
70928 old->removal_time = real_packet->removal_time;
70929 old->removal_time_factor = real_packet->removal_time_factor;
70930 old->infracost = real_packet->infracost;
70931 old->defense_bonus = real_packet->defense_bonus;
70932 old->eus = real_packet->eus;
70933 old->native_to = real_packet->native_to;
70934 old->flags = real_packet->flags;
70935 old->hidden_by = real_packet->hidden_by;
70936 old->bridged_over = real_packet->bridged_over;
70937 old->conflicts = real_packet->conflicts;
70938 old->no_aggr_near_city = real_packet->no_aggr_near_city;
70939 if (real_packet->helptext) {
70940 strvec_copy(old->helptext, real_packet->helptext);
70941 } else {
70942 strvec_clear(old->helptext);
70943 }
70944
70945#else /* FREECIV_DELTA_PROTOCOL */
70946#ifdef FREECIV_JSON_CONNECTION
70947 field_addr.name = "id";
70948#endif /* FREECIV_JSON_CONNECTION */
70949 e = 0;
70950
70951 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70952
70953 if (e) {
70954 log_packet_detailed("'id' field error detected");
70955 }
70956
70957#ifdef FREECIV_JSON_CONNECTION
70958 field_addr.name = "name";
70959#endif /* FREECIV_JSON_CONNECTION */
70960 e = 0;
70961
70962 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70963
70964 if (e) {
70965 log_packet_detailed("'name' field error detected");
70966 }
70967
70968#ifdef FREECIV_JSON_CONNECTION
70969 field_addr.name = "rule_name";
70970#endif /* FREECIV_JSON_CONNECTION */
70971 e = 0;
70972
70973 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70974
70975 if (e) {
70976 log_packet_detailed("'rule_name' field error detected");
70977 }
70978
70979#ifdef FREECIV_JSON_CONNECTION
70980 field_addr.name = "category";
70981#endif /* FREECIV_JSON_CONNECTION */
70982 e = 0;
70983
70984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
70985
70986 if (e) {
70987 log_packet_detailed("'category' field error detected");
70988 }
70989
70990#ifdef FREECIV_JSON_CONNECTION
70991 field_addr.name = "causes";
70992#endif /* FREECIV_JSON_CONNECTION */
70993 e = 0;
70994
70995 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->causes);
70996
70997 if (e) {
70998 log_packet_detailed("'causes' field error detected");
70999 }
71000
71001#ifdef FREECIV_JSON_CONNECTION
71002 field_addr.name = "rmcauses";
71003#endif /* FREECIV_JSON_CONNECTION */
71004 e = 0;
71005
71006 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->rmcauses);
71007
71008 if (e) {
71009 log_packet_detailed("'rmcauses' field error detected");
71010 }
71011
71012#ifdef FREECIV_JSON_CONNECTION
71013 field_addr.name = "activity_gfx";
71014#endif /* FREECIV_JSON_CONNECTION */
71015 e = 0;
71016
71017 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
71018
71019 if (e) {
71020 log_packet_detailed("'activity_gfx' field error detected");
71021 }
71022
71023#ifdef FREECIV_JSON_CONNECTION
71024 field_addr.name = "act_gfx_alt";
71025#endif /* FREECIV_JSON_CONNECTION */
71026 e = 0;
71027
71028 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
71029
71030 if (e) {
71031 log_packet_detailed("'act_gfx_alt' field error detected");
71032 }
71033
71034#ifdef FREECIV_JSON_CONNECTION
71035 field_addr.name = "act_gfx_alt2";
71036#endif /* FREECIV_JSON_CONNECTION */
71037 e = 0;
71038
71039 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
71040
71041 if (e) {
71042 log_packet_detailed("'act_gfx_alt2' field error detected");
71043 }
71044
71045#ifdef FREECIV_JSON_CONNECTION
71046 field_addr.name = "rmact_gfx";
71047#endif /* FREECIV_JSON_CONNECTION */
71048 e = 0;
71049
71050 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
71051
71052 if (e) {
71053 log_packet_detailed("'rmact_gfx' field error detected");
71054 }
71055
71056#ifdef FREECIV_JSON_CONNECTION
71057 field_addr.name = "rmact_gfx_alt";
71058#endif /* FREECIV_JSON_CONNECTION */
71059 e = 0;
71060
71061 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
71062
71063 if (e) {
71064 log_packet_detailed("'rmact_gfx_alt' field error detected");
71065 }
71066
71067#ifdef FREECIV_JSON_CONNECTION
71068 field_addr.name = "rmact_gfx_alt2";
71069#endif /* FREECIV_JSON_CONNECTION */
71070 e = 0;
71071
71072 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
71073
71074 if (e) {
71075 log_packet_detailed("'rmact_gfx_alt2' field error detected");
71076 }
71077
71078#ifdef FREECIV_JSON_CONNECTION
71079 field_addr.name = "graphic_str";
71080#endif /* FREECIV_JSON_CONNECTION */
71081 e = 0;
71082
71083 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
71084
71085 if (e) {
71086 log_packet_detailed("'graphic_str' field error detected");
71087 }
71088
71089#ifdef FREECIV_JSON_CONNECTION
71090 field_addr.name = "graphic_alt";
71091#endif /* FREECIV_JSON_CONNECTION */
71092 e = 0;
71093
71094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
71095
71096 if (e) {
71097 log_packet_detailed("'graphic_alt' field error detected");
71098 }
71099
71100#ifdef FREECIV_JSON_CONNECTION
71101 field_addr.name = "reqs";
71102#endif /* FREECIV_JSON_CONNECTION */
71103 e = 0;
71104
71105 {
71106 int i;
71107
71110
71111#ifdef FREECIV_JSON_CONNECTION
71112 /* Enter array. */
71113 field_addr.sub_location = plocation_elem_new(0);
71114#endif /* FREECIV_JSON_CONNECTION */
71115
71116 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
71117#ifdef FREECIV_JSON_CONNECTION
71118 /* Next array element. */
71119 field_addr.sub_location->number = i;
71120#endif /* FREECIV_JSON_CONNECTION */
71121
71122 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
71123 }
71124
71125#ifdef FREECIV_JSON_CONNECTION
71126 /* Exit array. */
71127 FC_FREE(field_addr.sub_location);
71128#endif /* FREECIV_JSON_CONNECTION */
71129 }
71130
71131 if (e) {
71132 log_packet_detailed("'reqs' field error detected");
71133 }
71134
71135#ifdef FREECIV_JSON_CONNECTION
71136 field_addr.name = "rmreqs";
71137#endif /* FREECIV_JSON_CONNECTION */
71138 e = 0;
71139
71140 {
71141 int i;
71142
71145
71146#ifdef FREECIV_JSON_CONNECTION
71147 /* Enter array. */
71148 field_addr.sub_location = plocation_elem_new(0);
71149#endif /* FREECIV_JSON_CONNECTION */
71150
71151 for (i = 0; i < requirement_vector_size(&real_packet->rmreqs); i++) {
71152#ifdef FREECIV_JSON_CONNECTION
71153 /* Next array element. */
71154 field_addr.sub_location->number = i;
71155#endif /* FREECIV_JSON_CONNECTION */
71156
71157 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs.p[i]);
71158 }
71159
71160#ifdef FREECIV_JSON_CONNECTION
71161 /* Exit array. */
71162 FC_FREE(field_addr.sub_location);
71163#endif /* FREECIV_JSON_CONNECTION */
71164 }
71165
71166 if (e) {
71167 log_packet_detailed("'rmreqs' field error detected");
71168 }
71169
71170#ifdef FREECIV_JSON_CONNECTION
71171 field_addr.name = "appearance_chance";
71172#endif /* FREECIV_JSON_CONNECTION */
71173 e = 0;
71174
71175 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
71176
71177 if (e) {
71178 log_packet_detailed("'appearance_chance' field error detected");
71179 }
71180
71181#ifdef FREECIV_JSON_CONNECTION
71182 field_addr.name = "appearance_reqs";
71183#endif /* FREECIV_JSON_CONNECTION */
71184 e = 0;
71185
71186 {
71187 int i;
71188
71190 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->appearance_reqs));
71191
71192#ifdef FREECIV_JSON_CONNECTION
71193 /* Enter array. */
71194 field_addr.sub_location = plocation_elem_new(0);
71195#endif /* FREECIV_JSON_CONNECTION */
71196
71197 for (i = 0; i < requirement_vector_size(&real_packet->appearance_reqs); i++) {
71198#ifdef FREECIV_JSON_CONNECTION
71199 /* Next array element. */
71200 field_addr.sub_location->number = i;
71201#endif /* FREECIV_JSON_CONNECTION */
71202
71203 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs.p[i]);
71204 }
71205
71206#ifdef FREECIV_JSON_CONNECTION
71207 /* Exit array. */
71208 FC_FREE(field_addr.sub_location);
71209#endif /* FREECIV_JSON_CONNECTION */
71210 }
71211
71212 if (e) {
71213 log_packet_detailed("'appearance_reqs' field error detected");
71214 }
71215
71216#ifdef FREECIV_JSON_CONNECTION
71217 field_addr.name = "disappearance_chance";
71218#endif /* FREECIV_JSON_CONNECTION */
71219 e = 0;
71220
71221 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
71222
71223 if (e) {
71224 log_packet_detailed("'disappearance_chance' field error detected");
71225 }
71226
71227#ifdef FREECIV_JSON_CONNECTION
71228 field_addr.name = "disappearance_reqs";
71229#endif /* FREECIV_JSON_CONNECTION */
71230 e = 0;
71231
71232 {
71233 int i;
71234
71236 e |= DIO_PUT(arraylen, &dout, &field_addr, requirement_vector_size(&real_packet->disappearance_reqs));
71237
71238#ifdef FREECIV_JSON_CONNECTION
71239 /* Enter array. */
71240 field_addr.sub_location = plocation_elem_new(0);
71241#endif /* FREECIV_JSON_CONNECTION */
71242
71243 for (i = 0; i < requirement_vector_size(&real_packet->disappearance_reqs); i++) {
71244#ifdef FREECIV_JSON_CONNECTION
71245 /* Next array element. */
71246 field_addr.sub_location->number = i;
71247#endif /* FREECIV_JSON_CONNECTION */
71248
71249 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs.p[i]);
71250 }
71251
71252#ifdef FREECIV_JSON_CONNECTION
71253 /* Exit array. */
71254 FC_FREE(field_addr.sub_location);
71255#endif /* FREECIV_JSON_CONNECTION */
71256 }
71257
71258 if (e) {
71259 log_packet_detailed("'disappearance_reqs' field error detected");
71260 }
71261
71262#ifdef FREECIV_JSON_CONNECTION
71263 field_addr.name = "visibility_req";
71264#endif /* FREECIV_JSON_CONNECTION */
71265 e = 0;
71266
71267 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
71268
71269 if (e) {
71270 log_packet_detailed("'visibility_req' field error detected");
71271 }
71272
71273#ifdef FREECIV_JSON_CONNECTION
71274 field_addr.name = "buildable";
71275#endif /* FREECIV_JSON_CONNECTION */
71276 e = 0;
71277
71278 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->buildable);
71279
71280 if (e) {
71281 log_packet_detailed("'buildable' field error detected");
71282 }
71283
71284#ifdef FREECIV_JSON_CONNECTION
71285 field_addr.name = "generated";
71286#endif /* FREECIV_JSON_CONNECTION */
71287 e = 0;
71288
71289 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->generated);
71290
71291 if (e) {
71292 log_packet_detailed("'generated' field error detected");
71293 }
71294
71295#ifdef FREECIV_JSON_CONNECTION
71296 field_addr.name = "build_time";
71297#endif /* FREECIV_JSON_CONNECTION */
71298 e = 0;
71299
71300 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
71301
71302 if (e) {
71303 log_packet_detailed("'build_time' field error detected");
71304 }
71305
71306#ifdef FREECIV_JSON_CONNECTION
71307 field_addr.name = "build_time_factor";
71308#endif /* FREECIV_JSON_CONNECTION */
71309 e = 0;
71310
71311 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
71312
71313 if (e) {
71314 log_packet_detailed("'build_time_factor' field error detected");
71315 }
71316
71317#ifdef FREECIV_JSON_CONNECTION
71318 field_addr.name = "removal_time";
71319#endif /* FREECIV_JSON_CONNECTION */
71320 e = 0;
71321
71322 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
71323
71324 if (e) {
71325 log_packet_detailed("'removal_time' field error detected");
71326 }
71327
71328#ifdef FREECIV_JSON_CONNECTION
71329 field_addr.name = "removal_time_factor";
71330#endif /* FREECIV_JSON_CONNECTION */
71331 e = 0;
71332
71333 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
71334
71335 if (e) {
71336 log_packet_detailed("'removal_time_factor' field error detected");
71337 }
71338
71339#ifdef FREECIV_JSON_CONNECTION
71340 field_addr.name = "infracost";
71341#endif /* FREECIV_JSON_CONNECTION */
71342 e = 0;
71343
71344 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
71345
71346 if (e) {
71347 log_packet_detailed("'infracost' field error detected");
71348 }
71349
71350#ifdef FREECIV_JSON_CONNECTION
71351 field_addr.name = "defense_bonus";
71352#endif /* FREECIV_JSON_CONNECTION */
71353 e = 0;
71354
71355 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
71356
71357 if (e) {
71358 log_packet_detailed("'defense_bonus' field error detected");
71359 }
71360
71361#ifdef FREECIV_JSON_CONNECTION
71362 field_addr.name = "eus";
71363#endif /* FREECIV_JSON_CONNECTION */
71364 e = 0;
71365
71366 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
71367
71368 if (e) {
71369 log_packet_detailed("'eus' field error detected");
71370 }
71371
71372#ifdef FREECIV_JSON_CONNECTION
71373 field_addr.name = "native_to";
71374#endif /* FREECIV_JSON_CONNECTION */
71375 e = 0;
71376
71377 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->native_to);
71378
71379 if (e) {
71380 log_packet_detailed("'native_to' field error detected");
71381 }
71382
71383#ifdef FREECIV_JSON_CONNECTION
71384 field_addr.name = "flags";
71385#endif /* FREECIV_JSON_CONNECTION */
71386 e = 0;
71387
71388 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
71389
71390 if (e) {
71391 log_packet_detailed("'flags' field error detected");
71392 }
71393
71394#ifdef FREECIV_JSON_CONNECTION
71395 field_addr.name = "hidden_by";
71396#endif /* FREECIV_JSON_CONNECTION */
71397 e = 0;
71398
71399 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->hidden_by);
71400
71401 if (e) {
71402 log_packet_detailed("'hidden_by' field error detected");
71403 }
71404
71405#ifdef FREECIV_JSON_CONNECTION
71406 field_addr.name = "bridged_over";
71407#endif /* FREECIV_JSON_CONNECTION */
71408 e = 0;
71409
71410 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->bridged_over);
71411
71412 if (e) {
71413 log_packet_detailed("'bridged_over' field error detected");
71414 }
71415
71416#ifdef FREECIV_JSON_CONNECTION
71417 field_addr.name = "conflicts";
71418#endif /* FREECIV_JSON_CONNECTION */
71419 e = 0;
71420
71421 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->conflicts);
71422
71423 if (e) {
71424 log_packet_detailed("'conflicts' field error detected");
71425 }
71426
71427#ifdef FREECIV_JSON_CONNECTION
71428 field_addr.name = "no_aggr_near_city";
71429#endif /* FREECIV_JSON_CONNECTION */
71430 e = 0;
71431
71432 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
71433
71434 if (e) {
71435 log_packet_detailed("'no_aggr_near_city' field error detected");
71436 }
71437
71438#ifdef FREECIV_JSON_CONNECTION
71439 field_addr.name = "helptext";
71440#endif /* FREECIV_JSON_CONNECTION */
71441 e = 0;
71442
71443 if (!real_packet->helptext) {
71444 /* Transmit null as empty */
71445 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
71446 } else {
71447 int i;
71448
71450 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
71451
71452#ifdef FREECIV_JSON_CONNECTION
71453 /* Enter array. */
71454 field_addr.sub_location = plocation_elem_new(0);
71455#endif /* FREECIV_JSON_CONNECTION */
71456
71457 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
71458#ifdef FREECIV_JSON_CONNECTION
71459 /* Next array element. */
71460 field_addr.sub_location->number = i;
71461#endif /* FREECIV_JSON_CONNECTION */
71462
71463 {
71464 const char *pstr = strvec_get(real_packet->helptext, i);
71465
71466 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
71467 }
71468 }
71469
71470#ifdef FREECIV_JSON_CONNECTION
71471 /* Exit array. */
71472 FC_FREE(field_addr.sub_location);
71473#endif /* FREECIV_JSON_CONNECTION */
71474 }
71475
71476 if (e) {
71477 log_packet_detailed("'helptext' field error detected");
71478 }
71479#endif /* FREECIV_DELTA_PROTOCOL */
71480
71482}
71483
71485{
71486 if (!pc->used) {
71487 log_error("WARNING: trying to send data to the closed connection %s",
71489 return -1;
71490 }
71491 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet != nullptr, -1,
71492 "Handler for PACKET_RULESET_EXTRA not installed");
71493 return pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet(pc, packet);
71494}
71495
71496void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
71497{
71498 conn_list_iterate(dest, pconn) {
71501}
71502
71504{
71505 memset(packet, 0, sizeof(*packet));
71506}
71507
71508#define free_packet_ruleset_extra_flag(_packet) (void) 0
71509#define destroy_packet_ruleset_extra_flag free
71510
71511#ifdef FREECIV_DELTA_PROTOCOL
71512#define hash_packet_ruleset_extra_flag_100 hash_const
71513#define cmp_packet_ruleset_extra_flag_100 cmp_const
71515#endif /* FREECIV_DELTA_PROTOCOL */
71516
71518{
71519#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_extra_flag(_packet)
71521
71522#ifdef FREECIV_JSON_CONNECTION
71523 struct plocation field_addr;
71524 {
71525 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71528 }
71529#endif /* FREECIV_JSON_CONNECTION */
71530
71531 log_packet_detailed("packet_ruleset_extra_flag_100: got info about ()");
71532
71533#ifdef FREECIV_DELTA_PROTOCOL
71536 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA_FLAG;
71537
71538 if (nullptr == *hash) {
71540 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
71541 }
71542
71543 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71544 *real_packet = *old;
71545 } else {
71546 /* packet is already initialized empty */
71547 log_packet_detailed(" no old info");
71548 }
71549
71550#ifdef FREECIV_JSON_CONNECTION
71551 field_addr.name = "fields";
71552#endif /* FREECIV_JSON_CONNECTION */
71553 DIO_BV_GET(&din, &field_addr, fields);
71554
71555 if (BV_ISSET(fields, 0)) {
71556 log_packet_detailed(" got field 'id'");
71557
71558#ifdef FREECIV_JSON_CONNECTION
71559 field_addr.name = "id";
71560#endif /* FREECIV_JSON_CONNECTION */
71561
71562 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71564 }
71565 }
71566
71567 if (BV_ISSET(fields, 1)) {
71568 log_packet_detailed(" got field 'name'");
71569
71570#ifdef FREECIV_JSON_CONNECTION
71571 field_addr.name = "name";
71572#endif /* FREECIV_JSON_CONNECTION */
71573
71574 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71576 }
71577 }
71578
71579 if (BV_ISSET(fields, 2)) {
71580 log_packet_detailed(" got field 'helptxt'");
71581
71582#ifdef FREECIV_JSON_CONNECTION
71583 field_addr.name = "helptxt";
71584#endif /* FREECIV_JSON_CONNECTION */
71585
71586 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71588 }
71589 }
71590
71591 if (nullptr == old) {
71592 old = fc_malloc(sizeof(*old));
71594 *old = *real_packet;
71596 } else {
71597 *old = *real_packet;
71598 }
71599
71600#else /* FREECIV_DELTA_PROTOCOL */
71601#ifdef FREECIV_JSON_CONNECTION
71602 field_addr.name = "id";
71603#endif /* FREECIV_JSON_CONNECTION */
71604
71605 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71607 }
71608
71609#ifdef FREECIV_JSON_CONNECTION
71610 field_addr.name = "name";
71611#endif /* FREECIV_JSON_CONNECTION */
71612
71613 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71615 }
71616
71617#ifdef FREECIV_JSON_CONNECTION
71618 field_addr.name = "helptxt";
71619#endif /* FREECIV_JSON_CONNECTION */
71620
71621 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
71623 }
71624#endif /* FREECIV_DELTA_PROTOCOL */
71625
71627#undef FREE_PACKET_STRUCT
71628}
71629
71631{
71632 const struct packet_ruleset_extra_flag *real_packet = packet;
71633 int e;
71635
71636 log_packet_detailed("packet_ruleset_extra_flag_100: sending info about ()");
71637
71638#ifdef FREECIV_DELTA_PROTOCOL
71641 bool differ;
71642 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA_FLAG;
71643
71644 if (nullptr == *hash) {
71646 nullptr, nullptr, nullptr, destroy_packet_ruleset_extra_flag);
71647 }
71648 BV_CLR_ALL(fields);
71649
71650 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71651 old = fc_malloc(sizeof(*old));
71652 /* temporary bitcopy just to insert correctly */
71653 *old = *real_packet;
71656 }
71657
71658 differ = (old->id != real_packet->id);
71659 if (differ) {
71660 BV_SET(fields, 0);
71661 }
71662
71663 differ = (strcmp(old->name, real_packet->name) != 0);
71664 if (differ) {
71665 BV_SET(fields, 1);
71666 }
71667
71668 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
71669 if (differ) {
71670 BV_SET(fields, 2);
71671 }
71672#endif /* FREECIV_DELTA_PROTOCOL */
71673
71674#ifdef FREECIV_JSON_CONNECTION
71675 struct plocation field_addr;
71676 {
71677 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71680 }
71681#endif /* FREECIV_JSON_CONNECTION */
71682
71683#ifdef FREECIV_DELTA_PROTOCOL
71684#ifdef FREECIV_JSON_CONNECTION
71685 field_addr.name = "fields";
71686#endif /* FREECIV_JSON_CONNECTION */
71687 e = 0;
71688 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71689 if (e) {
71690 log_packet_detailed("fields bitvector error detected");
71691 }
71692
71693 if (BV_ISSET(fields, 0)) {
71694 log_packet_detailed(" field 'id' has changed");
71695
71696#ifdef FREECIV_JSON_CONNECTION
71697 field_addr.name = "id";
71698#endif /* FREECIV_JSON_CONNECTION */
71699 e = 0;
71700
71701 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71702
71703 if (e) {
71704 log_packet_detailed("'id' field error detected");
71705 }
71706 }
71707
71708 if (BV_ISSET(fields, 1)) {
71709 log_packet_detailed(" field 'name' has changed");
71710
71711#ifdef FREECIV_JSON_CONNECTION
71712 field_addr.name = "name";
71713#endif /* FREECIV_JSON_CONNECTION */
71714 e = 0;
71715
71716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71717
71718 if (e) {
71719 log_packet_detailed("'name' field error detected");
71720 }
71721 }
71722
71723 if (BV_ISSET(fields, 2)) {
71724 log_packet_detailed(" field 'helptxt' has changed");
71725
71726#ifdef FREECIV_JSON_CONNECTION
71727 field_addr.name = "helptxt";
71728#endif /* FREECIV_JSON_CONNECTION */
71729 e = 0;
71730
71731 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
71732
71733 if (e) {
71734 log_packet_detailed("'helptxt' field error detected");
71735 }
71736 }
71737
71738 *old = *real_packet;
71739
71740#else /* FREECIV_DELTA_PROTOCOL */
71741#ifdef FREECIV_JSON_CONNECTION
71742 field_addr.name = "id";
71743#endif /* FREECIV_JSON_CONNECTION */
71744 e = 0;
71745
71746 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71747
71748 if (e) {
71749 log_packet_detailed("'id' field error detected");
71750 }
71751
71752#ifdef FREECIV_JSON_CONNECTION
71753 field_addr.name = "name";
71754#endif /* FREECIV_JSON_CONNECTION */
71755 e = 0;
71756
71757 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71758
71759 if (e) {
71760 log_packet_detailed("'name' field error detected");
71761 }
71762
71763#ifdef FREECIV_JSON_CONNECTION
71764 field_addr.name = "helptxt";
71765#endif /* FREECIV_JSON_CONNECTION */
71766 e = 0;
71767
71768 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
71769
71770 if (e) {
71771 log_packet_detailed("'helptxt' field error detected");
71772 }
71773#endif /* FREECIV_DELTA_PROTOCOL */
71774
71776}
71777
71779{
71780 if (!pc->used) {
71781 log_error("WARNING: trying to send data to the closed connection %s",
71783 return -1;
71784 }
71785 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet != nullptr, -1,
71786 "Handler for PACKET_RULESET_EXTRA_FLAG not installed");
71787 return pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet(pc, packet);
71788}
71789
71791{
71792 conn_list_iterate(dest, pconn) {
71795}
71796
71797static inline void init_packet_ruleset_base(struct packet_ruleset_base *packet)
71798{
71799 memset(packet, 0, sizeof(*packet));
71800}
71801
71802#define free_packet_ruleset_base(_packet) (void) 0
71803#define destroy_packet_ruleset_base free
71804
71805#ifdef FREECIV_DELTA_PROTOCOL
71806#define hash_packet_ruleset_base_100 hash_const
71807#define cmp_packet_ruleset_base_100 cmp_const
71809#endif /* FREECIV_DELTA_PROTOCOL */
71810
71812{
71813#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_base(_packet)
71815
71816#ifdef FREECIV_JSON_CONNECTION
71817 struct plocation field_addr;
71818 {
71819 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
71822 }
71823#endif /* FREECIV_JSON_CONNECTION */
71824
71825 log_packet_detailed("packet_ruleset_base_100: got info about ()");
71826
71827#ifdef FREECIV_DELTA_PROTOCOL
71829 struct packet_ruleset_base *old;
71830 struct genhash **hash = pc->phs.received + PACKET_RULESET_BASE;
71831
71832 if (nullptr == *hash) {
71834 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
71835 }
71836
71837 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71838 *real_packet = *old;
71839 } else {
71840 /* packet is already initialized empty */
71841 log_packet_detailed(" no old info");
71842 }
71843
71844#ifdef FREECIV_JSON_CONNECTION
71845 field_addr.name = "fields";
71846#endif /* FREECIV_JSON_CONNECTION */
71847 DIO_BV_GET(&din, &field_addr, fields);
71848
71849 if (BV_ISSET(fields, 0)) {
71850 log_packet_detailed(" got field 'id'");
71851
71852#ifdef FREECIV_JSON_CONNECTION
71853 field_addr.name = "id";
71854#endif /* FREECIV_JSON_CONNECTION */
71855
71856 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71858 }
71859 }
71860
71861 if (BV_ISSET(fields, 1)) {
71862 log_packet_detailed(" got field 'gui_type'");
71863
71864#ifdef FREECIV_JSON_CONNECTION
71865 field_addr.name = "gui_type";
71866#endif /* FREECIV_JSON_CONNECTION */
71867
71868 {
71869 int readin;
71870
71871 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71873 }
71874 real_packet->gui_type = readin;
71875 }
71876 }
71877
71878 if (BV_ISSET(fields, 2)) {
71879 log_packet_detailed(" got field 'border_sq'");
71880
71881#ifdef FREECIV_JSON_CONNECTION
71882 field_addr.name = "border_sq";
71883#endif /* FREECIV_JSON_CONNECTION */
71884
71885 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
71886 RECEIVE_PACKET_FIELD_ERROR(border_sq);
71887 }
71888 }
71889
71890 if (BV_ISSET(fields, 3)) {
71891 log_packet_detailed(" got field 'vision_main_sq'");
71892
71893#ifdef FREECIV_JSON_CONNECTION
71894 field_addr.name = "vision_main_sq";
71895#endif /* FREECIV_JSON_CONNECTION */
71896
71897 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
71898 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
71899 }
71900 }
71901
71902 if (BV_ISSET(fields, 4)) {
71903 log_packet_detailed(" got field 'vision_invis_sq'");
71904
71905#ifdef FREECIV_JSON_CONNECTION
71906 field_addr.name = "vision_invis_sq";
71907#endif /* FREECIV_JSON_CONNECTION */
71908
71909 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
71910 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
71911 }
71912 }
71913
71914 if (BV_ISSET(fields, 5)) {
71915 log_packet_detailed(" got field 'vision_subs_sq'");
71916
71917#ifdef FREECIV_JSON_CONNECTION
71918 field_addr.name = "vision_subs_sq";
71919#endif /* FREECIV_JSON_CONNECTION */
71920
71921 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
71922 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
71923 }
71924 }
71925
71926 if (nullptr == old) {
71927 old = fc_malloc(sizeof(*old));
71929 *old = *real_packet;
71931 } else {
71932 *old = *real_packet;
71933 }
71934
71935#else /* FREECIV_DELTA_PROTOCOL */
71936#ifdef FREECIV_JSON_CONNECTION
71937 field_addr.name = "id";
71938#endif /* FREECIV_JSON_CONNECTION */
71939
71940 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
71942 }
71943
71944#ifdef FREECIV_JSON_CONNECTION
71945 field_addr.name = "gui_type";
71946#endif /* FREECIV_JSON_CONNECTION */
71947
71948 {
71949 int readin;
71950
71951 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71953 }
71954 real_packet->gui_type = readin;
71955 }
71956
71957#ifdef FREECIV_JSON_CONNECTION
71958 field_addr.name = "border_sq";
71959#endif /* FREECIV_JSON_CONNECTION */
71960
71961 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
71962 RECEIVE_PACKET_FIELD_ERROR(border_sq);
71963 }
71964
71965#ifdef FREECIV_JSON_CONNECTION
71966 field_addr.name = "vision_main_sq";
71967#endif /* FREECIV_JSON_CONNECTION */
71968
71969 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
71970 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
71971 }
71972
71973#ifdef FREECIV_JSON_CONNECTION
71974 field_addr.name = "vision_invis_sq";
71975#endif /* FREECIV_JSON_CONNECTION */
71976
71977 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
71978 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
71979 }
71980
71981#ifdef FREECIV_JSON_CONNECTION
71982 field_addr.name = "vision_subs_sq";
71983#endif /* FREECIV_JSON_CONNECTION */
71984
71985 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
71986 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
71987 }
71988#endif /* FREECIV_DELTA_PROTOCOL */
71989
71991#undef FREE_PACKET_STRUCT
71992}
71993
71994static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
71995{
71996 const struct packet_ruleset_base *real_packet = packet;
71997 int e;
71999
72000 log_packet_detailed("packet_ruleset_base_100: sending info about ()");
72001
72002#ifdef FREECIV_DELTA_PROTOCOL
72004 struct packet_ruleset_base *old;
72005 bool differ;
72006 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BASE;
72007
72008 if (nullptr == *hash) {
72010 nullptr, nullptr, nullptr, destroy_packet_ruleset_base);
72011 }
72012 BV_CLR_ALL(fields);
72013
72014 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72015 old = fc_malloc(sizeof(*old));
72016 /* temporary bitcopy just to insert correctly */
72017 *old = *real_packet;
72020 }
72021
72022 differ = (old->id != real_packet->id);
72023 if (differ) {
72024 BV_SET(fields, 0);
72025 }
72026
72027 differ = (old->gui_type != real_packet->gui_type);
72028 if (differ) {
72029 BV_SET(fields, 1);
72030 }
72031
72032 differ = (old->border_sq != real_packet->border_sq);
72033 if (differ) {
72034 BV_SET(fields, 2);
72035 }
72036
72037 differ = (old->vision_main_sq != real_packet->vision_main_sq);
72038 if (differ) {
72039 BV_SET(fields, 3);
72040 }
72041
72042 differ = (old->vision_invis_sq != real_packet->vision_invis_sq);
72043 if (differ) {
72044 BV_SET(fields, 4);
72045 }
72046
72047 differ = (old->vision_subs_sq != real_packet->vision_subs_sq);
72048 if (differ) {
72049 BV_SET(fields, 5);
72050 }
72051#endif /* FREECIV_DELTA_PROTOCOL */
72052
72053#ifdef FREECIV_JSON_CONNECTION
72054 struct plocation field_addr;
72055 {
72056 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72059 }
72060#endif /* FREECIV_JSON_CONNECTION */
72061
72062#ifdef FREECIV_DELTA_PROTOCOL
72063#ifdef FREECIV_JSON_CONNECTION
72064 field_addr.name = "fields";
72065#endif /* FREECIV_JSON_CONNECTION */
72066 e = 0;
72067 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72068 if (e) {
72069 log_packet_detailed("fields bitvector error detected");
72070 }
72071
72072 if (BV_ISSET(fields, 0)) {
72073 log_packet_detailed(" field 'id' has changed");
72074
72075#ifdef FREECIV_JSON_CONNECTION
72076 field_addr.name = "id";
72077#endif /* FREECIV_JSON_CONNECTION */
72078 e = 0;
72079
72080 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72081
72082 if (e) {
72083 log_packet_detailed("'id' field error detected");
72084 }
72085 }
72086
72087 if (BV_ISSET(fields, 1)) {
72088 log_packet_detailed(" field 'gui_type' has changed");
72089
72090#ifdef FREECIV_JSON_CONNECTION
72091 field_addr.name = "gui_type";
72092#endif /* FREECIV_JSON_CONNECTION */
72093 e = 0;
72094
72095 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72096
72097 if (e) {
72098 log_packet_detailed("'gui_type' field error detected");
72099 }
72100 }
72101
72102 if (BV_ISSET(fields, 2)) {
72103 log_packet_detailed(" field 'border_sq' has changed");
72104
72105#ifdef FREECIV_JSON_CONNECTION
72106 field_addr.name = "border_sq";
72107#endif /* FREECIV_JSON_CONNECTION */
72108 e = 0;
72109
72110 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72111
72112 if (e) {
72113 log_packet_detailed("'border_sq' field error detected");
72114 }
72115 }
72116
72117 if (BV_ISSET(fields, 3)) {
72118 log_packet_detailed(" field 'vision_main_sq' has changed");
72119
72120#ifdef FREECIV_JSON_CONNECTION
72121 field_addr.name = "vision_main_sq";
72122#endif /* FREECIV_JSON_CONNECTION */
72123 e = 0;
72124
72125 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72126
72127 if (e) {
72128 log_packet_detailed("'vision_main_sq' field error detected");
72129 }
72130 }
72131
72132 if (BV_ISSET(fields, 4)) {
72133 log_packet_detailed(" field 'vision_invis_sq' has changed");
72134
72135#ifdef FREECIV_JSON_CONNECTION
72136 field_addr.name = "vision_invis_sq";
72137#endif /* FREECIV_JSON_CONNECTION */
72138 e = 0;
72139
72140 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72141
72142 if (e) {
72143 log_packet_detailed("'vision_invis_sq' field error detected");
72144 }
72145 }
72146
72147 if (BV_ISSET(fields, 5)) {
72148 log_packet_detailed(" field 'vision_subs_sq' has changed");
72149
72150#ifdef FREECIV_JSON_CONNECTION
72151 field_addr.name = "vision_subs_sq";
72152#endif /* FREECIV_JSON_CONNECTION */
72153 e = 0;
72154
72155 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72156
72157 if (e) {
72158 log_packet_detailed("'vision_subs_sq' field error detected");
72159 }
72160 }
72161
72162 *old = *real_packet;
72163
72164#else /* FREECIV_DELTA_PROTOCOL */
72165#ifdef FREECIV_JSON_CONNECTION
72166 field_addr.name = "id";
72167#endif /* FREECIV_JSON_CONNECTION */
72168 e = 0;
72169
72170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
72171
72172 if (e) {
72173 log_packet_detailed("'id' field error detected");
72174 }
72175
72176#ifdef FREECIV_JSON_CONNECTION
72177 field_addr.name = "gui_type";
72178#endif /* FREECIV_JSON_CONNECTION */
72179 e = 0;
72180
72181 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
72182
72183 if (e) {
72184 log_packet_detailed("'gui_type' field error detected");
72185 }
72186
72187#ifdef FREECIV_JSON_CONNECTION
72188 field_addr.name = "border_sq";
72189#endif /* FREECIV_JSON_CONNECTION */
72190 e = 0;
72191
72192 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
72193
72194 if (e) {
72195 log_packet_detailed("'border_sq' field error detected");
72196 }
72197
72198#ifdef FREECIV_JSON_CONNECTION
72199 field_addr.name = "vision_main_sq";
72200#endif /* FREECIV_JSON_CONNECTION */
72201 e = 0;
72202
72203 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
72204
72205 if (e) {
72206 log_packet_detailed("'vision_main_sq' field error detected");
72207 }
72208
72209#ifdef FREECIV_JSON_CONNECTION
72210 field_addr.name = "vision_invis_sq";
72211#endif /* FREECIV_JSON_CONNECTION */
72212 e = 0;
72213
72214 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
72215
72216 if (e) {
72217 log_packet_detailed("'vision_invis_sq' field error detected");
72218 }
72219
72220#ifdef FREECIV_JSON_CONNECTION
72221 field_addr.name = "vision_subs_sq";
72222#endif /* FREECIV_JSON_CONNECTION */
72223 e = 0;
72224
72225 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
72226
72227 if (e) {
72228 log_packet_detailed("'vision_subs_sq' field error detected");
72229 }
72230#endif /* FREECIV_DELTA_PROTOCOL */
72231
72233}
72234
72236{
72237 if (!pc->used) {
72238 log_error("WARNING: trying to send data to the closed connection %s",
72240 return -1;
72241 }
72242 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BASE].packet != nullptr, -1,
72243 "Handler for PACKET_RULESET_BASE not installed");
72244 return pc->phs.handlers->send[PACKET_RULESET_BASE].packet(pc, packet);
72245}
72246
72247void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
72248{
72249 conn_list_iterate(dest, pconn) {
72252}
72253
72254static inline void init_packet_ruleset_road(struct packet_ruleset_road *packet)
72255{
72256 memset(packet, 0, sizeof(*packet));
72257
72259}
72260
72261static inline void free_packet_ruleset_road(struct packet_ruleset_road *packet)
72262{
72264}
72265
72266static inline void destroy_packet_ruleset_road(void *packet)
72267{
72269 free(packet);
72270}
72271
72272#ifdef FREECIV_DELTA_PROTOCOL
72273#define hash_packet_ruleset_road_100 hash_const
72274#define cmp_packet_ruleset_road_100 cmp_const
72276#endif /* FREECIV_DELTA_PROTOCOL */
72277
72279{
72280#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_road(_packet)
72282
72283#ifdef FREECIV_JSON_CONNECTION
72284 struct plocation field_addr;
72285 {
72286 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72289 }
72290#endif /* FREECIV_JSON_CONNECTION */
72291
72292 log_packet_detailed("packet_ruleset_road_100: got info about ()");
72293
72294#ifdef FREECIV_DELTA_PROTOCOL
72296 struct packet_ruleset_road *old;
72297 struct genhash **hash = pc->phs.received + PACKET_RULESET_ROAD;
72298
72299 if (nullptr == *hash) {
72301 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
72302 }
72303
72304 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72305 real_packet->id = old->id;
72306 real_packet->gui_type = old->gui_type;
72307 requirement_vector_copy(&real_packet->first_reqs, &old->first_reqs);
72308 real_packet->move_cost = old->move_cost;
72309 real_packet->move_mode = old->move_mode;
72310 {
72311 int i;
72312
72313 for (i = 0; i < O_LAST; i++) {
72314 real_packet->tile_incr_const[i] = old->tile_incr_const[i];
72315 }
72316 }
72317 {
72318 int i;
72319
72320 for (i = 0; i < O_LAST; i++) {
72321 real_packet->tile_incr[i] = old->tile_incr[i];
72322 }
72323 }
72324 {
72325 int i;
72326
72327 for (i = 0; i < O_LAST; i++) {
72328 real_packet->tile_bonus[i] = old->tile_bonus[i];
72329 }
72330 }
72331 real_packet->compat = old->compat;
72332 real_packet->integrates = old->integrates;
72333 real_packet->flags = old->flags;
72334 } else {
72335 /* packet is already initialized empty */
72336 log_packet_detailed(" no old info");
72337 }
72338
72339#ifdef FREECIV_JSON_CONNECTION
72340 field_addr.name = "fields";
72341#endif /* FREECIV_JSON_CONNECTION */
72342 DIO_BV_GET(&din, &field_addr, fields);
72343
72344 if (BV_ISSET(fields, 0)) {
72345 log_packet_detailed(" got field 'id'");
72346
72347#ifdef FREECIV_JSON_CONNECTION
72348 field_addr.name = "id";
72349#endif /* FREECIV_JSON_CONNECTION */
72350
72351 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72353 }
72354 }
72355
72356 if (BV_ISSET(fields, 1)) {
72357 log_packet_detailed(" got field 'gui_type'");
72358
72359#ifdef FREECIV_JSON_CONNECTION
72360 field_addr.name = "gui_type";
72361#endif /* FREECIV_JSON_CONNECTION */
72362
72363 {
72364 int readin;
72365
72366 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72368 }
72369 real_packet->gui_type = readin;
72370 }
72371 }
72372
72373 if (BV_ISSET(fields, 2)) {
72374 log_packet_detailed(" got field 'first_reqs'");
72375
72376#ifdef FREECIV_JSON_CONNECTION
72377 field_addr.name = "first_reqs";
72378#endif /* FREECIV_JSON_CONNECTION */
72379
72380 {
72381 int i;
72382
72383 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
72384 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72385 }
72387
72388#ifdef FREECIV_JSON_CONNECTION
72389 /* Enter array. */
72390 field_addr.sub_location = plocation_elem_new(0);
72391#endif /* FREECIV_JSON_CONNECTION */
72392
72393 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72394#ifdef FREECIV_JSON_CONNECTION
72395 /* Next array element */
72396 field_addr.sub_location->number = i;
72397#endif /* FREECIV_JSON_CONNECTION */
72398
72399 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
72400 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72401 }
72402 }
72403
72404#ifdef FREECIV_JSON_CONNECTION
72405 /* Exit array. */
72406 FC_FREE(field_addr.sub_location);
72407#endif /* FREECIV_JSON_CONNECTION */
72408 }
72409 }
72410
72411 if (BV_ISSET(fields, 3)) {
72412 log_packet_detailed(" got field 'move_cost'");
72413
72414#ifdef FREECIV_JSON_CONNECTION
72415 field_addr.name = "move_cost";
72416#endif /* FREECIV_JSON_CONNECTION */
72417
72418 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
72419 RECEIVE_PACKET_FIELD_ERROR(move_cost);
72420 }
72421 }
72422
72423 if (BV_ISSET(fields, 4)) {
72424 log_packet_detailed(" got field 'move_mode'");
72425
72426#ifdef FREECIV_JSON_CONNECTION
72427 field_addr.name = "move_mode";
72428#endif /* FREECIV_JSON_CONNECTION */
72429
72430 {
72431 int readin;
72432
72433 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72434 RECEIVE_PACKET_FIELD_ERROR(move_mode);
72435 }
72436 real_packet->move_mode = readin;
72437 }
72438 }
72439
72440 if (BV_ISSET(fields, 5)) {
72441 log_packet_detailed(" got field 'tile_incr_const'");
72442
72443#ifdef FREECIV_JSON_CONNECTION
72444 field_addr.name = "tile_incr_const";
72445#endif /* FREECIV_JSON_CONNECTION */
72446
72447 {
72448 int i;
72449
72450
72451#ifdef FREECIV_JSON_CONNECTION
72452 /* Enter array. */
72453 field_addr.sub_location = plocation_elem_new(0);
72454#endif /* FREECIV_JSON_CONNECTION */
72455
72456 for (i = 0; i < O_LAST; i++) {
72457#ifdef FREECIV_JSON_CONNECTION
72458 /* Next array element */
72459 field_addr.sub_location->number = i;
72460#endif /* FREECIV_JSON_CONNECTION */
72461
72462 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
72463 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
72464 }
72465 }
72466
72467#ifdef FREECIV_JSON_CONNECTION
72468 /* Exit array. */
72469 FC_FREE(field_addr.sub_location);
72470#endif /* FREECIV_JSON_CONNECTION */
72471 }
72472 }
72473
72474 if (BV_ISSET(fields, 6)) {
72475 log_packet_detailed(" got field 'tile_incr'");
72476
72477#ifdef FREECIV_JSON_CONNECTION
72478 field_addr.name = "tile_incr";
72479#endif /* FREECIV_JSON_CONNECTION */
72480
72481 {
72482 int i;
72483
72484
72485#ifdef FREECIV_JSON_CONNECTION
72486 /* Enter array. */
72487 field_addr.sub_location = plocation_elem_new(0);
72488#endif /* FREECIV_JSON_CONNECTION */
72489
72490 for (i = 0; i < O_LAST; i++) {
72491#ifdef FREECIV_JSON_CONNECTION
72492 /* Next array element */
72493 field_addr.sub_location->number = i;
72494#endif /* FREECIV_JSON_CONNECTION */
72495
72496 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
72497 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
72498 }
72499 }
72500
72501#ifdef FREECIV_JSON_CONNECTION
72502 /* Exit array. */
72503 FC_FREE(field_addr.sub_location);
72504#endif /* FREECIV_JSON_CONNECTION */
72505 }
72506 }
72507
72508 if (BV_ISSET(fields, 7)) {
72509 log_packet_detailed(" got field 'tile_bonus'");
72510
72511#ifdef FREECIV_JSON_CONNECTION
72512 field_addr.name = "tile_bonus";
72513#endif /* FREECIV_JSON_CONNECTION */
72514
72515 {
72516 int i;
72517
72518
72519#ifdef FREECIV_JSON_CONNECTION
72520 /* Enter array. */
72521 field_addr.sub_location = plocation_elem_new(0);
72522#endif /* FREECIV_JSON_CONNECTION */
72523
72524 for (i = 0; i < O_LAST; i++) {
72525#ifdef FREECIV_JSON_CONNECTION
72526 /* Next array element */
72527 field_addr.sub_location->number = i;
72528#endif /* FREECIV_JSON_CONNECTION */
72529
72530 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
72531 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
72532 }
72533 }
72534
72535#ifdef FREECIV_JSON_CONNECTION
72536 /* Exit array. */
72537 FC_FREE(field_addr.sub_location);
72538#endif /* FREECIV_JSON_CONNECTION */
72539 }
72540 }
72541
72542 if (BV_ISSET(fields, 8)) {
72543 log_packet_detailed(" got field 'compat'");
72544
72545#ifdef FREECIV_JSON_CONNECTION
72546 field_addr.name = "compat";
72547#endif /* FREECIV_JSON_CONNECTION */
72548
72549 {
72550 int readin;
72551
72552 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72554 }
72555 real_packet->compat = readin;
72556 }
72557 }
72558
72559 if (BV_ISSET(fields, 9)) {
72560 log_packet_detailed(" got field 'integrates'");
72561
72562#ifdef FREECIV_JSON_CONNECTION
72563 field_addr.name = "integrates";
72564#endif /* FREECIV_JSON_CONNECTION */
72565
72566 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
72567 RECEIVE_PACKET_FIELD_ERROR(integrates);
72568 }
72569 }
72570
72571 if (BV_ISSET(fields, 10)) {
72572 log_packet_detailed(" got field 'flags'");
72573
72574#ifdef FREECIV_JSON_CONNECTION
72575 field_addr.name = "flags";
72576#endif /* FREECIV_JSON_CONNECTION */
72577
72578 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
72580 }
72581 }
72582
72583 if (nullptr == old) {
72584 old = fc_malloc(sizeof(*old));
72586 old->id = real_packet->id;
72587 old->gui_type = real_packet->gui_type;
72588 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72589 old->move_cost = real_packet->move_cost;
72590 old->move_mode = real_packet->move_mode;
72591 {
72592 int i;
72593
72594 for (i = 0; i < O_LAST; i++) {
72595 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
72596 }
72597 }
72598 {
72599 int i;
72600
72601 for (i = 0; i < O_LAST; i++) {
72602 old->tile_incr[i] = real_packet->tile_incr[i];
72603 }
72604 }
72605 {
72606 int i;
72607
72608 for (i = 0; i < O_LAST; i++) {
72609 old->tile_bonus[i] = real_packet->tile_bonus[i];
72610 }
72611 }
72612 old->compat = real_packet->compat;
72613 old->integrates = real_packet->integrates;
72614 old->flags = real_packet->flags;
72616 } else {
72617 old->id = real_packet->id;
72618 old->gui_type = real_packet->gui_type;
72619 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
72620 old->move_cost = real_packet->move_cost;
72621 old->move_mode = real_packet->move_mode;
72622 {
72623 int i;
72624
72625 for (i = 0; i < O_LAST; i++) {
72626 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
72627 }
72628 }
72629 {
72630 int i;
72631
72632 for (i = 0; i < O_LAST; i++) {
72633 old->tile_incr[i] = real_packet->tile_incr[i];
72634 }
72635 }
72636 {
72637 int i;
72638
72639 for (i = 0; i < O_LAST; i++) {
72640 old->tile_bonus[i] = real_packet->tile_bonus[i];
72641 }
72642 }
72643 old->compat = real_packet->compat;
72644 old->integrates = real_packet->integrates;
72645 old->flags = real_packet->flags;
72646 }
72647
72648#else /* FREECIV_DELTA_PROTOCOL */
72649#ifdef FREECIV_JSON_CONNECTION
72650 field_addr.name = "id";
72651#endif /* FREECIV_JSON_CONNECTION */
72652
72653 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
72655 }
72656
72657#ifdef FREECIV_JSON_CONNECTION
72658 field_addr.name = "gui_type";
72659#endif /* FREECIV_JSON_CONNECTION */
72660
72661 {
72662 int readin;
72663
72664 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72666 }
72667 real_packet->gui_type = readin;
72668 }
72669
72670#ifdef FREECIV_JSON_CONNECTION
72671 field_addr.name = "first_reqs";
72672#endif /* FREECIV_JSON_CONNECTION */
72673
72674 {
72675 int i;
72676
72677 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
72678 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72679 }
72681
72682#ifdef FREECIV_JSON_CONNECTION
72683 /* Enter array. */
72684 field_addr.sub_location = plocation_elem_new(0);
72685#endif /* FREECIV_JSON_CONNECTION */
72686
72687 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
72688#ifdef FREECIV_JSON_CONNECTION
72689 /* Next array element */
72690 field_addr.sub_location->number = i;
72691#endif /* FREECIV_JSON_CONNECTION */
72692
72693 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs.p[i])) {
72694 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
72695 }
72696 }
72697
72698#ifdef FREECIV_JSON_CONNECTION
72699 /* Exit array. */
72700 FC_FREE(field_addr.sub_location);
72701#endif /* FREECIV_JSON_CONNECTION */
72702 }
72703
72704#ifdef FREECIV_JSON_CONNECTION
72705 field_addr.name = "move_cost";
72706#endif /* FREECIV_JSON_CONNECTION */
72707
72708 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
72709 RECEIVE_PACKET_FIELD_ERROR(move_cost);
72710 }
72711
72712#ifdef FREECIV_JSON_CONNECTION
72713 field_addr.name = "move_mode";
72714#endif /* FREECIV_JSON_CONNECTION */
72715
72716 {
72717 int readin;
72718
72719 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72720 RECEIVE_PACKET_FIELD_ERROR(move_mode);
72721 }
72722 real_packet->move_mode = readin;
72723 }
72724
72725#ifdef FREECIV_JSON_CONNECTION
72726 field_addr.name = "tile_incr_const";
72727#endif /* FREECIV_JSON_CONNECTION */
72728
72729 {
72730 int i;
72731
72732
72733#ifdef FREECIV_JSON_CONNECTION
72734 /* Enter array. */
72735 field_addr.sub_location = plocation_elem_new(0);
72736#endif /* FREECIV_JSON_CONNECTION */
72737
72738 for (i = 0; i < O_LAST; i++) {
72739#ifdef FREECIV_JSON_CONNECTION
72740 /* Next array element */
72741 field_addr.sub_location->number = i;
72742#endif /* FREECIV_JSON_CONNECTION */
72743
72744 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
72745 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
72746 }
72747 }
72748
72749#ifdef FREECIV_JSON_CONNECTION
72750 /* Exit array. */
72751 FC_FREE(field_addr.sub_location);
72752#endif /* FREECIV_JSON_CONNECTION */
72753 }
72754
72755#ifdef FREECIV_JSON_CONNECTION
72756 field_addr.name = "tile_incr";
72757#endif /* FREECIV_JSON_CONNECTION */
72758
72759 {
72760 int i;
72761
72762
72763#ifdef FREECIV_JSON_CONNECTION
72764 /* Enter array. */
72765 field_addr.sub_location = plocation_elem_new(0);
72766#endif /* FREECIV_JSON_CONNECTION */
72767
72768 for (i = 0; i < O_LAST; i++) {
72769#ifdef FREECIV_JSON_CONNECTION
72770 /* Next array element */
72771 field_addr.sub_location->number = i;
72772#endif /* FREECIV_JSON_CONNECTION */
72773
72774 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
72775 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
72776 }
72777 }
72778
72779#ifdef FREECIV_JSON_CONNECTION
72780 /* Exit array. */
72781 FC_FREE(field_addr.sub_location);
72782#endif /* FREECIV_JSON_CONNECTION */
72783 }
72784
72785#ifdef FREECIV_JSON_CONNECTION
72786 field_addr.name = "tile_bonus";
72787#endif /* FREECIV_JSON_CONNECTION */
72788
72789 {
72790 int i;
72791
72792
72793#ifdef FREECIV_JSON_CONNECTION
72794 /* Enter array. */
72795 field_addr.sub_location = plocation_elem_new(0);
72796#endif /* FREECIV_JSON_CONNECTION */
72797
72798 for (i = 0; i < O_LAST; i++) {
72799#ifdef FREECIV_JSON_CONNECTION
72800 /* Next array element */
72801 field_addr.sub_location->number = i;
72802#endif /* FREECIV_JSON_CONNECTION */
72803
72804 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
72805 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
72806 }
72807 }
72808
72809#ifdef FREECIV_JSON_CONNECTION
72810 /* Exit array. */
72811 FC_FREE(field_addr.sub_location);
72812#endif /* FREECIV_JSON_CONNECTION */
72813 }
72814
72815#ifdef FREECIV_JSON_CONNECTION
72816 field_addr.name = "compat";
72817#endif /* FREECIV_JSON_CONNECTION */
72818
72819 {
72820 int readin;
72821
72822 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72824 }
72825 real_packet->compat = readin;
72826 }
72827
72828#ifdef FREECIV_JSON_CONNECTION
72829 field_addr.name = "integrates";
72830#endif /* FREECIV_JSON_CONNECTION */
72831
72832 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
72833 RECEIVE_PACKET_FIELD_ERROR(integrates);
72834 }
72835
72836#ifdef FREECIV_JSON_CONNECTION
72837 field_addr.name = "flags";
72838#endif /* FREECIV_JSON_CONNECTION */
72839
72840 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
72842 }
72843#endif /* FREECIV_DELTA_PROTOCOL */
72844
72846#undef FREE_PACKET_STRUCT
72847}
72848
72849static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
72850{
72851 const struct packet_ruleset_road *real_packet = packet;
72852 int e;
72854
72855 log_packet_detailed("packet_ruleset_road_100: sending info about ()");
72856
72857#ifdef FREECIV_DELTA_PROTOCOL
72859 struct packet_ruleset_road *old;
72860 bool differ;
72861 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ROAD;
72862
72863 if (nullptr == *hash) {
72865 nullptr, nullptr, nullptr, destroy_packet_ruleset_road);
72866 }
72867 BV_CLR_ALL(fields);
72868
72869 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72870 old = fc_malloc(sizeof(*old));
72871 /* temporary bitcopy just to insert correctly */
72872 *old = *real_packet;
72875 }
72876
72877 differ = (old->id != real_packet->id);
72878 if (differ) {
72879 BV_SET(fields, 0);
72880 }
72881
72882 differ = (old->gui_type != real_packet->gui_type);
72883 if (differ) {
72884 BV_SET(fields, 1);
72885 }
72886
72887 differ = (requirement_vector_size(&old->first_reqs) != requirement_vector_size(&real_packet->first_reqs));
72888 if (!differ) {
72889 int i;
72890
72891 for (i = 0; i < requirement_vector_size(&old->first_reqs); i++) {
72892 differ = !are_requirements_equal(&old->first_reqs.p[i], &real_packet->first_reqs.p[i]);
72893 if (differ) {
72894 break;
72895 }
72896 }
72897 }
72898 if (differ) {
72899 BV_SET(fields, 2);
72900 }
72901
72902 differ = (old->move_cost != real_packet->move_cost);
72903 if (differ) {
72904 BV_SET(fields, 3);
72905 }
72906
72907 differ = (old->move_mode != real_packet->move_mode);
72908 if (differ) {
72909 BV_SET(fields, 4);
72910 }
72911
72912 differ = FALSE;
72913 {
72914 int i;
72915
72916 for (i = 0; i < O_LAST; i++) {
72917 differ = (old->tile_incr_const[i] != real_packet->tile_incr_const[i]);
72918 if (differ) {
72919 break;
72920 }
72921 }
72922 }
72923 if (differ) {
72924 BV_SET(fields, 5);
72925 }
72926
72927 differ = FALSE;
72928 {
72929 int i;
72930
72931 for (i = 0; i < O_LAST; i++) {
72932 differ = (old->tile_incr[i] != real_packet->tile_incr[i]);
72933 if (differ) {
72934 break;
72935 }
72936 }
72937 }
72938 if (differ) {
72939 BV_SET(fields, 6);
72940 }
72941
72942 differ = FALSE;
72943 {
72944 int i;
72945
72946 for (i = 0; i < O_LAST; i++) {
72947 differ = (old->tile_bonus[i] != real_packet->tile_bonus[i]);
72948 if (differ) {
72949 break;
72950 }
72951 }
72952 }
72953 if (differ) {
72954 BV_SET(fields, 7);
72955 }
72956
72957 differ = (old->compat != real_packet->compat);
72958 if (differ) {
72959 BV_SET(fields, 8);
72960 }
72961
72962 differ = !BV_ARE_EQUAL(old->integrates, real_packet->integrates);
72963 if (differ) {
72964 BV_SET(fields, 9);
72965 }
72966
72967 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
72968 if (differ) {
72969 BV_SET(fields, 10);
72970 }
72971#endif /* FREECIV_DELTA_PROTOCOL */
72972
72973#ifdef FREECIV_JSON_CONNECTION
72974 struct plocation field_addr;
72975 {
72976 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
72979 }
72980#endif /* FREECIV_JSON_CONNECTION */
72981
72982#ifdef FREECIV_DELTA_PROTOCOL
72983#ifdef FREECIV_JSON_CONNECTION
72984 field_addr.name = "fields";
72985#endif /* FREECIV_JSON_CONNECTION */
72986 e = 0;
72987 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72988 if (e) {
72989 log_packet_detailed("fields bitvector error detected");
72990 }
72991
72992 if (BV_ISSET(fields, 0)) {
72993 log_packet_detailed(" field 'id' has changed");
72994
72995#ifdef FREECIV_JSON_CONNECTION
72996 field_addr.name = "id";
72997#endif /* FREECIV_JSON_CONNECTION */
72998 e = 0;
72999
73000 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
73001
73002 if (e) {
73003 log_packet_detailed("'id' field error detected");
73004 }
73005 }
73006
73007 if (BV_ISSET(fields, 1)) {
73008 log_packet_detailed(" field 'gui_type' has changed");
73009
73010#ifdef FREECIV_JSON_CONNECTION
73011 field_addr.name = "gui_type";
73012#endif /* FREECIV_JSON_CONNECTION */
73013 e = 0;
73014
73015 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
73016
73017 if (e) {
73018 log_packet_detailed("'gui_type' field error detected");
73019 }
73020 }
73021
73022 if (BV_ISSET(fields, 2)) {
73023 log_packet_detailed(" field 'first_reqs' has changed");
73024
73025#ifdef FREECIV_JSON_CONNECTION
73026 field_addr.name = "first_reqs";
73027#endif /* FREECIV_JSON_CONNECTION */
73028 e = 0;
73029
73030 {
73031 int i;
73032
73035
73036#ifdef FREECIV_JSON_CONNECTION
73037 /* Enter array. */
73038 field_addr.sub_location = plocation_elem_new(0);
73039#endif /* FREECIV_JSON_CONNECTION */
73040
73041 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73042#ifdef FREECIV_JSON_CONNECTION
73043 /* Next array element. */
73044 field_addr.sub_location->number = i;
73045#endif /* FREECIV_JSON_CONNECTION */
73046
73047 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
73048 }
73049
73050#ifdef FREECIV_JSON_CONNECTION
73051 /* Exit array. */
73052 FC_FREE(field_addr.sub_location);
73053#endif /* FREECIV_JSON_CONNECTION */
73054 }
73055
73056 if (e) {
73057 log_packet_detailed("'first_reqs' field error detected");
73058 }
73059 }
73060
73061 if (BV_ISSET(fields, 3)) {
73062 log_packet_detailed(" field 'move_cost' has changed");
73063
73064#ifdef FREECIV_JSON_CONNECTION
73065 field_addr.name = "move_cost";
73066#endif /* FREECIV_JSON_CONNECTION */
73067 e = 0;
73068
73069 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
73070
73071 if (e) {
73072 log_packet_detailed("'move_cost' field error detected");
73073 }
73074 }
73075
73076 if (BV_ISSET(fields, 4)) {
73077 log_packet_detailed(" field 'move_mode' has changed");
73078
73079#ifdef FREECIV_JSON_CONNECTION
73080 field_addr.name = "move_mode";
73081#endif /* FREECIV_JSON_CONNECTION */
73082 e = 0;
73083
73084 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
73085
73086 if (e) {
73087 log_packet_detailed("'move_mode' field error detected");
73088 }
73089 }
73090
73091 if (BV_ISSET(fields, 5)) {
73092 log_packet_detailed(" field 'tile_incr_const' has changed");
73093
73094#ifdef FREECIV_JSON_CONNECTION
73095 field_addr.name = "tile_incr_const";
73096#endif /* FREECIV_JSON_CONNECTION */
73097 e = 0;
73098
73099 {
73100 int i;
73101
73102#ifdef FREECIV_JSON_CONNECTION
73103 /* Create the array. */
73104 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73105
73106 /* Enter array. */
73107 field_addr.sub_location = plocation_elem_new(0);
73108#endif /* FREECIV_JSON_CONNECTION */
73109
73110 for (i = 0; i < O_LAST; i++) {
73111#ifdef FREECIV_JSON_CONNECTION
73112 /* Next array element. */
73113 field_addr.sub_location->number = i;
73114#endif /* FREECIV_JSON_CONNECTION */
73115
73116 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73117 }
73118
73119#ifdef FREECIV_JSON_CONNECTION
73120 /* Exit array. */
73121 FC_FREE(field_addr.sub_location);
73122#endif /* FREECIV_JSON_CONNECTION */
73123 }
73124
73125 if (e) {
73126 log_packet_detailed("'tile_incr_const' field error detected");
73127 }
73128 }
73129
73130 if (BV_ISSET(fields, 6)) {
73131 log_packet_detailed(" field 'tile_incr' has changed");
73132
73133#ifdef FREECIV_JSON_CONNECTION
73134 field_addr.name = "tile_incr";
73135#endif /* FREECIV_JSON_CONNECTION */
73136 e = 0;
73137
73138 {
73139 int i;
73140
73141#ifdef FREECIV_JSON_CONNECTION
73142 /* Create the array. */
73143 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73144
73145 /* Enter array. */
73146 field_addr.sub_location = plocation_elem_new(0);
73147#endif /* FREECIV_JSON_CONNECTION */
73148
73149 for (i = 0; i < O_LAST; i++) {
73150#ifdef FREECIV_JSON_CONNECTION
73151 /* Next array element. */
73152 field_addr.sub_location->number = i;
73153#endif /* FREECIV_JSON_CONNECTION */
73154
73155 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73156 }
73157
73158#ifdef FREECIV_JSON_CONNECTION
73159 /* Exit array. */
73160 FC_FREE(field_addr.sub_location);
73161#endif /* FREECIV_JSON_CONNECTION */
73162 }
73163
73164 if (e) {
73165 log_packet_detailed("'tile_incr' field error detected");
73166 }
73167 }
73168
73169 if (BV_ISSET(fields, 7)) {
73170 log_packet_detailed(" field 'tile_bonus' has changed");
73171
73172#ifdef FREECIV_JSON_CONNECTION
73173 field_addr.name = "tile_bonus";
73174#endif /* FREECIV_JSON_CONNECTION */
73175 e = 0;
73176
73177 {
73178 int i;
73179
73180#ifdef FREECIV_JSON_CONNECTION
73181 /* Create the array. */
73182 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73183
73184 /* Enter array. */
73185 field_addr.sub_location = plocation_elem_new(0);
73186#endif /* FREECIV_JSON_CONNECTION */
73187
73188 for (i = 0; i < O_LAST; i++) {
73189#ifdef FREECIV_JSON_CONNECTION
73190 /* Next array element. */
73191 field_addr.sub_location->number = i;
73192#endif /* FREECIV_JSON_CONNECTION */
73193
73194 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73195 }
73196
73197#ifdef FREECIV_JSON_CONNECTION
73198 /* Exit array. */
73199 FC_FREE(field_addr.sub_location);
73200#endif /* FREECIV_JSON_CONNECTION */
73201 }
73202
73203 if (e) {
73204 log_packet_detailed("'tile_bonus' field error detected");
73205 }
73206 }
73207
73208 if (BV_ISSET(fields, 8)) {
73209 log_packet_detailed(" field 'compat' has changed");
73210
73211#ifdef FREECIV_JSON_CONNECTION
73212 field_addr.name = "compat";
73213#endif /* FREECIV_JSON_CONNECTION */
73214 e = 0;
73215
73216 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73217
73218 if (e) {
73219 log_packet_detailed("'compat' field error detected");
73220 }
73221 }
73222
73223 if (BV_ISSET(fields, 9)) {
73224 log_packet_detailed(" field 'integrates' has changed");
73225
73226#ifdef FREECIV_JSON_CONNECTION
73227 field_addr.name = "integrates";
73228#endif /* FREECIV_JSON_CONNECTION */
73229 e = 0;
73230
73231 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73232
73233 if (e) {
73234 log_packet_detailed("'integrates' field error detected");
73235 }
73236 }
73237
73238 if (BV_ISSET(fields, 10)) {
73239 log_packet_detailed(" field 'flags' has changed");
73240
73241#ifdef FREECIV_JSON_CONNECTION
73242 field_addr.name = "flags";
73243#endif /* FREECIV_JSON_CONNECTION */
73244 e = 0;
73245
73246 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73247
73248 if (e) {
73249 log_packet_detailed("'flags' field error detected");
73250 }
73251 }
73252
73253 old->id = real_packet->id;
73254 old->gui_type = real_packet->gui_type;
73255 requirement_vector_copy(&old->first_reqs, &real_packet->first_reqs);
73256 old->move_cost = real_packet->move_cost;
73257 old->move_mode = real_packet->move_mode;
73258 {
73259 int i;
73260
73261 for (i = 0; i < O_LAST; i++) {
73262 old->tile_incr_const[i] = real_packet->tile_incr_const[i];
73263 }
73264 }
73265 {
73266 int i;
73267
73268 for (i = 0; i < O_LAST; i++) {
73269 old->tile_incr[i] = real_packet->tile_incr[i];
73270 }
73271 }
73272 {
73273 int i;
73274
73275 for (i = 0; i < O_LAST; i++) {
73276 old->tile_bonus[i] = real_packet->tile_bonus[i];
73277 }
73278 }
73279 old->compat = real_packet->compat;
73280 old->integrates = real_packet->integrates;
73281 old->flags = real_packet->flags;
73282
73283#else /* FREECIV_DELTA_PROTOCOL */
73284#ifdef FREECIV_JSON_CONNECTION
73285 field_addr.name = "id";
73286#endif /* FREECIV_JSON_CONNECTION */
73287 e = 0;
73288
73289 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
73290
73291 if (e) {
73292 log_packet_detailed("'id' field error detected");
73293 }
73294
73295#ifdef FREECIV_JSON_CONNECTION
73296 field_addr.name = "gui_type";
73297#endif /* FREECIV_JSON_CONNECTION */
73298 e = 0;
73299
73300 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
73301
73302 if (e) {
73303 log_packet_detailed("'gui_type' field error detected");
73304 }
73305
73306#ifdef FREECIV_JSON_CONNECTION
73307 field_addr.name = "first_reqs";
73308#endif /* FREECIV_JSON_CONNECTION */
73309 e = 0;
73310
73311 {
73312 int i;
73313
73316
73317#ifdef FREECIV_JSON_CONNECTION
73318 /* Enter array. */
73319 field_addr.sub_location = plocation_elem_new(0);
73320#endif /* FREECIV_JSON_CONNECTION */
73321
73322 for (i = 0; i < requirement_vector_size(&real_packet->first_reqs); i++) {
73323#ifdef FREECIV_JSON_CONNECTION
73324 /* Next array element. */
73325 field_addr.sub_location->number = i;
73326#endif /* FREECIV_JSON_CONNECTION */
73327
73328 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs.p[i]);
73329 }
73330
73331#ifdef FREECIV_JSON_CONNECTION
73332 /* Exit array. */
73333 FC_FREE(field_addr.sub_location);
73334#endif /* FREECIV_JSON_CONNECTION */
73335 }
73336
73337 if (e) {
73338 log_packet_detailed("'first_reqs' field error detected");
73339 }
73340
73341#ifdef FREECIV_JSON_CONNECTION
73342 field_addr.name = "move_cost";
73343#endif /* FREECIV_JSON_CONNECTION */
73344 e = 0;
73345
73346 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
73347
73348 if (e) {
73349 log_packet_detailed("'move_cost' field error detected");
73350 }
73351
73352#ifdef FREECIV_JSON_CONNECTION
73353 field_addr.name = "move_mode";
73354#endif /* FREECIV_JSON_CONNECTION */
73355 e = 0;
73356
73357 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
73358
73359 if (e) {
73360 log_packet_detailed("'move_mode' field error detected");
73361 }
73362
73363#ifdef FREECIV_JSON_CONNECTION
73364 field_addr.name = "tile_incr_const";
73365#endif /* FREECIV_JSON_CONNECTION */
73366 e = 0;
73367
73368 {
73369 int i;
73370
73371#ifdef FREECIV_JSON_CONNECTION
73372 /* Create the array. */
73373 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73374
73375 /* Enter array. */
73376 field_addr.sub_location = plocation_elem_new(0);
73377#endif /* FREECIV_JSON_CONNECTION */
73378
73379 for (i = 0; i < O_LAST; i++) {
73380#ifdef FREECIV_JSON_CONNECTION
73381 /* Next array element. */
73382 field_addr.sub_location->number = i;
73383#endif /* FREECIV_JSON_CONNECTION */
73384
73385 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
73386 }
73387
73388#ifdef FREECIV_JSON_CONNECTION
73389 /* Exit array. */
73390 FC_FREE(field_addr.sub_location);
73391#endif /* FREECIV_JSON_CONNECTION */
73392 }
73393
73394 if (e) {
73395 log_packet_detailed("'tile_incr_const' field error detected");
73396 }
73397
73398#ifdef FREECIV_JSON_CONNECTION
73399 field_addr.name = "tile_incr";
73400#endif /* FREECIV_JSON_CONNECTION */
73401 e = 0;
73402
73403 {
73404 int i;
73405
73406#ifdef FREECIV_JSON_CONNECTION
73407 /* Create the array. */
73408 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73409
73410 /* Enter array. */
73411 field_addr.sub_location = plocation_elem_new(0);
73412#endif /* FREECIV_JSON_CONNECTION */
73413
73414 for (i = 0; i < O_LAST; i++) {
73415#ifdef FREECIV_JSON_CONNECTION
73416 /* Next array element. */
73417 field_addr.sub_location->number = i;
73418#endif /* FREECIV_JSON_CONNECTION */
73419
73420 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
73421 }
73422
73423#ifdef FREECIV_JSON_CONNECTION
73424 /* Exit array. */
73425 FC_FREE(field_addr.sub_location);
73426#endif /* FREECIV_JSON_CONNECTION */
73427 }
73428
73429 if (e) {
73430 log_packet_detailed("'tile_incr' field error detected");
73431 }
73432
73433#ifdef FREECIV_JSON_CONNECTION
73434 field_addr.name = "tile_bonus";
73435#endif /* FREECIV_JSON_CONNECTION */
73436 e = 0;
73437
73438 {
73439 int i;
73440
73441#ifdef FREECIV_JSON_CONNECTION
73442 /* Create the array. */
73443 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
73444
73445 /* Enter array. */
73446 field_addr.sub_location = plocation_elem_new(0);
73447#endif /* FREECIV_JSON_CONNECTION */
73448
73449 for (i = 0; i < O_LAST; i++) {
73450#ifdef FREECIV_JSON_CONNECTION
73451 /* Next array element. */
73452 field_addr.sub_location->number = i;
73453#endif /* FREECIV_JSON_CONNECTION */
73454
73455 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
73456 }
73457
73458#ifdef FREECIV_JSON_CONNECTION
73459 /* Exit array. */
73460 FC_FREE(field_addr.sub_location);
73461#endif /* FREECIV_JSON_CONNECTION */
73462 }
73463
73464 if (e) {
73465 log_packet_detailed("'tile_bonus' field error detected");
73466 }
73467
73468#ifdef FREECIV_JSON_CONNECTION
73469 field_addr.name = "compat";
73470#endif /* FREECIV_JSON_CONNECTION */
73471 e = 0;
73472
73473 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
73474
73475 if (e) {
73476 log_packet_detailed("'compat' field error detected");
73477 }
73478
73479#ifdef FREECIV_JSON_CONNECTION
73480 field_addr.name = "integrates";
73481#endif /* FREECIV_JSON_CONNECTION */
73482 e = 0;
73483
73484 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->integrates);
73485
73486 if (e) {
73487 log_packet_detailed("'integrates' field error detected");
73488 }
73489
73490#ifdef FREECIV_JSON_CONNECTION
73491 field_addr.name = "flags";
73492#endif /* FREECIV_JSON_CONNECTION */
73493 e = 0;
73494
73495 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
73496
73497 if (e) {
73498 log_packet_detailed("'flags' field error detected");
73499 }
73500#endif /* FREECIV_DELTA_PROTOCOL */
73501
73503}
73504
73506{
73507 if (!pc->used) {
73508 log_error("WARNING: trying to send data to the closed connection %s",
73510 return -1;
73511 }
73512 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ROAD].packet != nullptr, -1,
73513 "Handler for PACKET_RULESET_ROAD not installed");
73514 return pc->phs.handlers->send[PACKET_RULESET_ROAD].packet(pc, packet);
73515}
73516
73517void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
73518{
73519 conn_list_iterate(dest, pconn) {
73522}
73523
73524static inline void init_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73525{
73526 memset(packet, 0, sizeof(*packet));
73527
73528 requirement_vector_init(&packet->reqs);
73529 packet->helptext = strvec_new();
73530}
73531
73532static inline void free_packet_ruleset_goods(struct packet_ruleset_goods *packet)
73533{
73534 if (packet->helptext) {
73535 strvec_destroy(packet->helptext);
73536 packet->helptext = nullptr;
73537 }
73538 requirement_vector_free(&packet->reqs);
73539}
73540
73541static inline void destroy_packet_ruleset_goods(void *packet)
73542{
73544 free(packet);
73545}
73546
73547#ifdef FREECIV_DELTA_PROTOCOL
73548#define hash_packet_ruleset_goods_100 hash_const
73549#define cmp_packet_ruleset_goods_100 cmp_const
73551#endif /* FREECIV_DELTA_PROTOCOL */
73552
73554{
73555#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_goods(_packet)
73557
73558#ifdef FREECIV_JSON_CONNECTION
73559 struct plocation field_addr;
73560 {
73561 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
73564 }
73565#endif /* FREECIV_JSON_CONNECTION */
73566
73567 log_packet_detailed("packet_ruleset_goods_100: got info about ()");
73568
73569#ifdef FREECIV_DELTA_PROTOCOL
73571 struct packet_ruleset_goods *old;
73572 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOODS;
73573
73574 if (nullptr == *hash) {
73576 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
73577 }
73578
73579 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73580 real_packet->id = old->id;
73581 sz_strlcpy(real_packet->name, old->name);
73582 sz_strlcpy(real_packet->rule_name, old->rule_name);
73583 requirement_vector_copy(&real_packet->reqs, &old->reqs);
73584 real_packet->from_pct = old->from_pct;
73585 real_packet->to_pct = old->to_pct;
73586 real_packet->onetime_pct = old->onetime_pct;
73587 real_packet->select_priority = old->select_priority;
73588 real_packet->replace_priority = old->replace_priority;
73589 real_packet->flags = old->flags;
73590 if (old->helptext) {
73591 strvec_copy(real_packet->helptext, old->helptext);
73592 } else {
73593 strvec_clear(real_packet->helptext);
73594 }
73595 } else {
73596 /* packet is already initialized empty */
73597 log_packet_detailed(" no old info");
73598 }
73599
73600#ifdef FREECIV_JSON_CONNECTION
73601 field_addr.name = "fields";
73602#endif /* FREECIV_JSON_CONNECTION */
73603 DIO_BV_GET(&din, &field_addr, fields);
73604
73605 if (BV_ISSET(fields, 0)) {
73606 log_packet_detailed(" got field 'id'");
73607
73608#ifdef FREECIV_JSON_CONNECTION
73609 field_addr.name = "id";
73610#endif /* FREECIV_JSON_CONNECTION */
73611
73612 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73614 }
73615 }
73616
73617 if (BV_ISSET(fields, 1)) {
73618 log_packet_detailed(" got field 'name'");
73619
73620#ifdef FREECIV_JSON_CONNECTION
73621 field_addr.name = "name";
73622#endif /* FREECIV_JSON_CONNECTION */
73623
73624 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
73626 }
73627 }
73628
73629 if (BV_ISSET(fields, 2)) {
73630 log_packet_detailed(" got field 'rule_name'");
73631
73632#ifdef FREECIV_JSON_CONNECTION
73633 field_addr.name = "rule_name";
73634#endif /* FREECIV_JSON_CONNECTION */
73635
73636 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
73637 RECEIVE_PACKET_FIELD_ERROR(rule_name);
73638 }
73639 }
73640
73641 if (BV_ISSET(fields, 3)) {
73642 log_packet_detailed(" got field 'reqs'");
73643
73644#ifdef FREECIV_JSON_CONNECTION
73645 field_addr.name = "reqs";
73646#endif /* FREECIV_JSON_CONNECTION */
73647
73648 {
73649 int i;
73650
73651 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73653 }
73655
73656#ifdef FREECIV_JSON_CONNECTION
73657 /* Enter array. */
73658 field_addr.sub_location = plocation_elem_new(0);
73659#endif /* FREECIV_JSON_CONNECTION */
73660
73661 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
73662#ifdef FREECIV_JSON_CONNECTION
73663 /* Next array element */
73664 field_addr.sub_location->number = i;
73665#endif /* FREECIV_JSON_CONNECTION */
73666
73667 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
73669 }
73670 }
73671
73672#ifdef FREECIV_JSON_CONNECTION
73673 /* Exit array. */
73674 FC_FREE(field_addr.sub_location);
73675#endif /* FREECIV_JSON_CONNECTION */
73676 }
73677 }
73678
73679 if (BV_ISSET(fields, 4)) {
73680 log_packet_detailed(" got field 'from_pct'");
73681
73682#ifdef FREECIV_JSON_CONNECTION
73683 field_addr.name = "from_pct";
73684#endif /* FREECIV_JSON_CONNECTION */
73685
73686 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
73688 }
73689 }
73690
73691 if (BV_ISSET(fields, 5)) {
73692 log_packet_detailed(" got field 'to_pct'");
73693
73694#ifdef FREECIV_JSON_CONNECTION
73695 field_addr.name = "to_pct";
73696#endif /* FREECIV_JSON_CONNECTION */
73697
73698 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
73700 }
73701 }
73702
73703 if (BV_ISSET(fields, 6)) {
73704 log_packet_detailed(" got field 'onetime_pct'");
73705
73706#ifdef FREECIV_JSON_CONNECTION
73707 field_addr.name = "onetime_pct";
73708#endif /* FREECIV_JSON_CONNECTION */
73709
73710 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
73711 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
73712 }
73713 }
73714
73715 if (BV_ISSET(fields, 7)) {
73716 log_packet_detailed(" got field 'select_priority'");
73717
73718#ifdef FREECIV_JSON_CONNECTION
73719 field_addr.name = "select_priority";
73720#endif /* FREECIV_JSON_CONNECTION */
73721
73722 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
73723 RECEIVE_PACKET_FIELD_ERROR(select_priority);
73724 }
73725 }
73726
73727 if (BV_ISSET(fields, 8)) {
73728 log_packet_detailed(" got field 'replace_priority'");
73729
73730#ifdef FREECIV_JSON_CONNECTION
73731 field_addr.name = "replace_priority";
73732#endif /* FREECIV_JSON_CONNECTION */
73733
73734 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
73735 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
73736 }
73737 }
73738
73739 if (BV_ISSET(fields, 9)) {
73740 log_packet_detailed(" got field 'flags'");
73741
73742#ifdef FREECIV_JSON_CONNECTION
73743 field_addr.name = "flags";
73744#endif /* FREECIV_JSON_CONNECTION */
73745
73746 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
73748 }
73749 }
73750
73751 if (BV_ISSET(fields, 10)) {
73752 log_packet_detailed(" got field 'helptext'");
73753
73754#ifdef FREECIV_JSON_CONNECTION
73755 field_addr.name = "helptext";
73756#endif /* FREECIV_JSON_CONNECTION */
73757
73758 {
73759 int i;
73760
73761 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73763 }
73764 strvec_reserve(real_packet->helptext, i);
73765
73766#ifdef FREECIV_JSON_CONNECTION
73767 /* Enter array. */
73768 field_addr.sub_location = plocation_elem_new(0);
73769#endif /* FREECIV_JSON_CONNECTION */
73770
73771 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
73772#ifdef FREECIV_JSON_CONNECTION
73773 /* Next array element */
73774 field_addr.sub_location->number = i;
73775#endif /* FREECIV_JSON_CONNECTION */
73776
73777 {
73778 char readin[MAX_LEN_PACKET];
73779
73780 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
73781 || !strvec_set(real_packet->helptext, i, readin)) {
73783 }
73784 }
73785 }
73786
73787#ifdef FREECIV_JSON_CONNECTION
73788 /* Exit array. */
73789 FC_FREE(field_addr.sub_location);
73790#endif /* FREECIV_JSON_CONNECTION */
73791 }
73792 }
73793
73794 if (nullptr == old) {
73795 old = fc_malloc(sizeof(*old));
73797 old->id = real_packet->id;
73798 sz_strlcpy(old->name, real_packet->name);
73799 sz_strlcpy(old->rule_name, real_packet->rule_name);
73800 requirement_vector_copy(&old->reqs, &real_packet->reqs);
73801 old->from_pct = real_packet->from_pct;
73802 old->to_pct = real_packet->to_pct;
73803 old->onetime_pct = real_packet->onetime_pct;
73804 old->select_priority = real_packet->select_priority;
73805 old->replace_priority = real_packet->replace_priority;
73806 old->flags = real_packet->flags;
73807 if (real_packet->helptext) {
73808 strvec_copy(old->helptext, real_packet->helptext);
73809 } else {
73810 strvec_clear(old->helptext);
73811 }
73813 } else {
73814 old->id = real_packet->id;
73815 sz_strlcpy(old->name, real_packet->name);
73816 sz_strlcpy(old->rule_name, real_packet->rule_name);
73817 requirement_vector_copy(&old->reqs, &real_packet->reqs);
73818 old->from_pct = real_packet->from_pct;
73819 old->to_pct = real_packet->to_pct;
73820 old->onetime_pct = real_packet->onetime_pct;
73821 old->select_priority = real_packet->select_priority;
73822 old->replace_priority = real_packet->replace_priority;
73823 old->flags = real_packet->flags;
73824 if (real_packet->helptext) {
73825 strvec_copy(old->helptext, real_packet->helptext);
73826 } else {
73827 strvec_clear(old->helptext);
73828 }
73829 }
73830
73831#else /* FREECIV_DELTA_PROTOCOL */
73832#ifdef FREECIV_JSON_CONNECTION
73833 field_addr.name = "id";
73834#endif /* FREECIV_JSON_CONNECTION */
73835
73836 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
73838 }
73839
73840#ifdef FREECIV_JSON_CONNECTION
73841 field_addr.name = "name";
73842#endif /* FREECIV_JSON_CONNECTION */
73843
73844 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
73846 }
73847
73848#ifdef FREECIV_JSON_CONNECTION
73849 field_addr.name = "rule_name";
73850#endif /* FREECIV_JSON_CONNECTION */
73851
73852 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
73853 RECEIVE_PACKET_FIELD_ERROR(rule_name);
73854 }
73855
73856#ifdef FREECIV_JSON_CONNECTION
73857 field_addr.name = "reqs";
73858#endif /* FREECIV_JSON_CONNECTION */
73859
73860 {
73861 int i;
73862
73863 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73865 }
73867
73868#ifdef FREECIV_JSON_CONNECTION
73869 /* Enter array. */
73870 field_addr.sub_location = plocation_elem_new(0);
73871#endif /* FREECIV_JSON_CONNECTION */
73872
73873 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
73874#ifdef FREECIV_JSON_CONNECTION
73875 /* Next array element */
73876 field_addr.sub_location->number = i;
73877#endif /* FREECIV_JSON_CONNECTION */
73878
73879 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
73881 }
73882 }
73883
73884#ifdef FREECIV_JSON_CONNECTION
73885 /* Exit array. */
73886 FC_FREE(field_addr.sub_location);
73887#endif /* FREECIV_JSON_CONNECTION */
73888 }
73889
73890#ifdef FREECIV_JSON_CONNECTION
73891 field_addr.name = "from_pct";
73892#endif /* FREECIV_JSON_CONNECTION */
73893
73894 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
73896 }
73897
73898#ifdef FREECIV_JSON_CONNECTION
73899 field_addr.name = "to_pct";
73900#endif /* FREECIV_JSON_CONNECTION */
73901
73902 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
73904 }
73905
73906#ifdef FREECIV_JSON_CONNECTION
73907 field_addr.name = "onetime_pct";
73908#endif /* FREECIV_JSON_CONNECTION */
73909
73910 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
73911 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
73912 }
73913
73914#ifdef FREECIV_JSON_CONNECTION
73915 field_addr.name = "select_priority";
73916#endif /* FREECIV_JSON_CONNECTION */
73917
73918 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->select_priority)) {
73919 RECEIVE_PACKET_FIELD_ERROR(select_priority);
73920 }
73921
73922#ifdef FREECIV_JSON_CONNECTION
73923 field_addr.name = "replace_priority";
73924#endif /* FREECIV_JSON_CONNECTION */
73925
73926 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->replace_priority)) {
73927 RECEIVE_PACKET_FIELD_ERROR(replace_priority);
73928 }
73929
73930#ifdef FREECIV_JSON_CONNECTION
73931 field_addr.name = "flags";
73932#endif /* FREECIV_JSON_CONNECTION */
73933
73934 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
73936 }
73937
73938#ifdef FREECIV_JSON_CONNECTION
73939 field_addr.name = "helptext";
73940#endif /* FREECIV_JSON_CONNECTION */
73941
73942 {
73943 int i;
73944
73945 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
73947 }
73948 strvec_reserve(real_packet->helptext, i);
73949
73950#ifdef FREECIV_JSON_CONNECTION
73951 /* Enter array. */
73952 field_addr.sub_location = plocation_elem_new(0);
73953#endif /* FREECIV_JSON_CONNECTION */
73954
73955 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
73956#ifdef FREECIV_JSON_CONNECTION
73957 /* Next array element */
73958 field_addr.sub_location->number = i;
73959#endif /* FREECIV_JSON_CONNECTION */
73960
73961 {
73962 char readin[MAX_LEN_PACKET];
73963
73964 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
73965 || !strvec_set(real_packet->helptext, i, readin)) {
73967 }
73968 }
73969 }
73970
73971#ifdef FREECIV_JSON_CONNECTION
73972 /* Exit array. */
73973 FC_FREE(field_addr.sub_location);
73974#endif /* FREECIV_JSON_CONNECTION */
73975 }
73976#endif /* FREECIV_DELTA_PROTOCOL */
73977
73979#undef FREE_PACKET_STRUCT
73980}
73981
73982static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
73983{
73984 const struct packet_ruleset_goods *real_packet = packet;
73985 int e;
73987
73988 log_packet_detailed("packet_ruleset_goods_100: sending info about ()");
73989
73990#ifdef FREECIV_DELTA_PROTOCOL
73992 struct packet_ruleset_goods *old;
73993 bool differ;
73994 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOODS;
73995
73996 if (nullptr == *hash) {
73998 nullptr, nullptr, nullptr, destroy_packet_ruleset_goods);
73999 }
74000 BV_CLR_ALL(fields);
74001
74002 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74003 old = fc_malloc(sizeof(*old));
74004 /* temporary bitcopy just to insert correctly */
74005 *old = *real_packet;
74008 }
74009
74010 differ = (old->id != real_packet->id);
74011 if (differ) {
74012 BV_SET(fields, 0);
74013 }
74014
74015 differ = (strcmp(old->name, real_packet->name) != 0);
74016 if (differ) {
74017 BV_SET(fields, 1);
74018 }
74019
74020 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
74021 if (differ) {
74022 BV_SET(fields, 2);
74023 }
74024
74026 if (!differ) {
74027 int i;
74028
74029 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
74030 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
74031 if (differ) {
74032 break;
74033 }
74034 }
74035 }
74036 if (differ) {
74037 BV_SET(fields, 3);
74038 }
74039
74040 differ = (old->from_pct != real_packet->from_pct);
74041 if (differ) {
74042 BV_SET(fields, 4);
74043 }
74044
74045 differ = (old->to_pct != real_packet->to_pct);
74046 if (differ) {
74047 BV_SET(fields, 5);
74048 }
74049
74050 differ = (old->onetime_pct != real_packet->onetime_pct);
74051 if (differ) {
74052 BV_SET(fields, 6);
74053 }
74054
74055 differ = (old->select_priority != real_packet->select_priority);
74056 if (differ) {
74057 BV_SET(fields, 7);
74058 }
74059
74060 differ = (old->replace_priority != real_packet->replace_priority);
74061 if (differ) {
74062 BV_SET(fields, 8);
74063 }
74064
74065 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
74066 if (differ) {
74067 BV_SET(fields, 9);
74068 }
74069
74070 if (real_packet->helptext) {
74071 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
74072 } else {
74073 differ = (strvec_size(old->helptext) > 0);
74074 }
74075 if (differ) {
74076 BV_SET(fields, 10);
74077 }
74078#endif /* FREECIV_DELTA_PROTOCOL */
74079
74080#ifdef FREECIV_JSON_CONNECTION
74081 struct plocation field_addr;
74082 {
74083 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74086 }
74087#endif /* FREECIV_JSON_CONNECTION */
74088
74089#ifdef FREECIV_DELTA_PROTOCOL
74090#ifdef FREECIV_JSON_CONNECTION
74091 field_addr.name = "fields";
74092#endif /* FREECIV_JSON_CONNECTION */
74093 e = 0;
74094 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74095 if (e) {
74096 log_packet_detailed("fields bitvector error detected");
74097 }
74098
74099 if (BV_ISSET(fields, 0)) {
74100 log_packet_detailed(" field 'id' has changed");
74101
74102#ifdef FREECIV_JSON_CONNECTION
74103 field_addr.name = "id";
74104#endif /* FREECIV_JSON_CONNECTION */
74105 e = 0;
74106
74107 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74108
74109 if (e) {
74110 log_packet_detailed("'id' field error detected");
74111 }
74112 }
74113
74114 if (BV_ISSET(fields, 1)) {
74115 log_packet_detailed(" field 'name' has changed");
74116
74117#ifdef FREECIV_JSON_CONNECTION
74118 field_addr.name = "name";
74119#endif /* FREECIV_JSON_CONNECTION */
74120 e = 0;
74121
74122 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74123
74124 if (e) {
74125 log_packet_detailed("'name' field error detected");
74126 }
74127 }
74128
74129 if (BV_ISSET(fields, 2)) {
74130 log_packet_detailed(" field 'rule_name' has changed");
74131
74132#ifdef FREECIV_JSON_CONNECTION
74133 field_addr.name = "rule_name";
74134#endif /* FREECIV_JSON_CONNECTION */
74135 e = 0;
74136
74137 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74138
74139 if (e) {
74140 log_packet_detailed("'rule_name' field error detected");
74141 }
74142 }
74143
74144 if (BV_ISSET(fields, 3)) {
74145 log_packet_detailed(" field 'reqs' has changed");
74146
74147#ifdef FREECIV_JSON_CONNECTION
74148 field_addr.name = "reqs";
74149#endif /* FREECIV_JSON_CONNECTION */
74150 e = 0;
74151
74152 {
74153 int i;
74154
74157
74158#ifdef FREECIV_JSON_CONNECTION
74159 /* Enter array. */
74160 field_addr.sub_location = plocation_elem_new(0);
74161#endif /* FREECIV_JSON_CONNECTION */
74162
74163 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74164#ifdef FREECIV_JSON_CONNECTION
74165 /* Next array element. */
74166 field_addr.sub_location->number = i;
74167#endif /* FREECIV_JSON_CONNECTION */
74168
74169 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74170 }
74171
74172#ifdef FREECIV_JSON_CONNECTION
74173 /* Exit array. */
74174 FC_FREE(field_addr.sub_location);
74175#endif /* FREECIV_JSON_CONNECTION */
74176 }
74177
74178 if (e) {
74179 log_packet_detailed("'reqs' field error detected");
74180 }
74181 }
74182
74183 if (BV_ISSET(fields, 4)) {
74184 log_packet_detailed(" field 'from_pct' has changed");
74185
74186#ifdef FREECIV_JSON_CONNECTION
74187 field_addr.name = "from_pct";
74188#endif /* FREECIV_JSON_CONNECTION */
74189 e = 0;
74190
74191 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74192
74193 if (e) {
74194 log_packet_detailed("'from_pct' field error detected");
74195 }
74196 }
74197
74198 if (BV_ISSET(fields, 5)) {
74199 log_packet_detailed(" field 'to_pct' has changed");
74200
74201#ifdef FREECIV_JSON_CONNECTION
74202 field_addr.name = "to_pct";
74203#endif /* FREECIV_JSON_CONNECTION */
74204 e = 0;
74205
74206 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74207
74208 if (e) {
74209 log_packet_detailed("'to_pct' field error detected");
74210 }
74211 }
74212
74213 if (BV_ISSET(fields, 6)) {
74214 log_packet_detailed(" field 'onetime_pct' has changed");
74215
74216#ifdef FREECIV_JSON_CONNECTION
74217 field_addr.name = "onetime_pct";
74218#endif /* FREECIV_JSON_CONNECTION */
74219 e = 0;
74220
74221 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74222
74223 if (e) {
74224 log_packet_detailed("'onetime_pct' field error detected");
74225 }
74226 }
74227
74228 if (BV_ISSET(fields, 7)) {
74229 log_packet_detailed(" field 'select_priority' has changed");
74230
74231#ifdef FREECIV_JSON_CONNECTION
74232 field_addr.name = "select_priority";
74233#endif /* FREECIV_JSON_CONNECTION */
74234 e = 0;
74235
74236 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74237
74238 if (e) {
74239 log_packet_detailed("'select_priority' field error detected");
74240 }
74241 }
74242
74243 if (BV_ISSET(fields, 8)) {
74244 log_packet_detailed(" field 'replace_priority' has changed");
74245
74246#ifdef FREECIV_JSON_CONNECTION
74247 field_addr.name = "replace_priority";
74248#endif /* FREECIV_JSON_CONNECTION */
74249 e = 0;
74250
74251 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74252
74253 if (e) {
74254 log_packet_detailed("'replace_priority' field error detected");
74255 }
74256 }
74257
74258 if (BV_ISSET(fields, 9)) {
74259 log_packet_detailed(" field 'flags' has changed");
74260
74261#ifdef FREECIV_JSON_CONNECTION
74262 field_addr.name = "flags";
74263#endif /* FREECIV_JSON_CONNECTION */
74264 e = 0;
74265
74266 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74267
74268 if (e) {
74269 log_packet_detailed("'flags' field error detected");
74270 }
74271 }
74272
74273 if (BV_ISSET(fields, 10)) {
74274 log_packet_detailed(" field 'helptext' has changed");
74275
74276#ifdef FREECIV_JSON_CONNECTION
74277 field_addr.name = "helptext";
74278#endif /* FREECIV_JSON_CONNECTION */
74279 e = 0;
74280
74281 if (!real_packet->helptext) {
74282 /* Transmit null as empty */
74283 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74284 } else {
74285 int i;
74286
74288 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74289
74290#ifdef FREECIV_JSON_CONNECTION
74291 /* Enter array. */
74292 field_addr.sub_location = plocation_elem_new(0);
74293#endif /* FREECIV_JSON_CONNECTION */
74294
74295 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74296#ifdef FREECIV_JSON_CONNECTION
74297 /* Next array element. */
74298 field_addr.sub_location->number = i;
74299#endif /* FREECIV_JSON_CONNECTION */
74300
74301 {
74302 const char *pstr = strvec_get(real_packet->helptext, i);
74303
74304 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74305 }
74306 }
74307
74308#ifdef FREECIV_JSON_CONNECTION
74309 /* Exit array. */
74310 FC_FREE(field_addr.sub_location);
74311#endif /* FREECIV_JSON_CONNECTION */
74312 }
74313
74314 if (e) {
74315 log_packet_detailed("'helptext' field error detected");
74316 }
74317 }
74318
74319 old->id = real_packet->id;
74320 sz_strlcpy(old->name, real_packet->name);
74321 sz_strlcpy(old->rule_name, real_packet->rule_name);
74322 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74323 old->from_pct = real_packet->from_pct;
74324 old->to_pct = real_packet->to_pct;
74325 old->onetime_pct = real_packet->onetime_pct;
74326 old->select_priority = real_packet->select_priority;
74327 old->replace_priority = real_packet->replace_priority;
74328 old->flags = real_packet->flags;
74329 if (real_packet->helptext) {
74330 strvec_copy(old->helptext, real_packet->helptext);
74331 } else {
74332 strvec_clear(old->helptext);
74333 }
74334
74335#else /* FREECIV_DELTA_PROTOCOL */
74336#ifdef FREECIV_JSON_CONNECTION
74337 field_addr.name = "id";
74338#endif /* FREECIV_JSON_CONNECTION */
74339 e = 0;
74340
74341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74342
74343 if (e) {
74344 log_packet_detailed("'id' field error detected");
74345 }
74346
74347#ifdef FREECIV_JSON_CONNECTION
74348 field_addr.name = "name";
74349#endif /* FREECIV_JSON_CONNECTION */
74350 e = 0;
74351
74352 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74353
74354 if (e) {
74355 log_packet_detailed("'name' field error detected");
74356 }
74357
74358#ifdef FREECIV_JSON_CONNECTION
74359 field_addr.name = "rule_name";
74360#endif /* FREECIV_JSON_CONNECTION */
74361 e = 0;
74362
74363 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74364
74365 if (e) {
74366 log_packet_detailed("'rule_name' field error detected");
74367 }
74368
74369#ifdef FREECIV_JSON_CONNECTION
74370 field_addr.name = "reqs";
74371#endif /* FREECIV_JSON_CONNECTION */
74372 e = 0;
74373
74374 {
74375 int i;
74376
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 < requirement_vector_size(&real_packet->reqs); i++) {
74386#ifdef FREECIV_JSON_CONNECTION
74387 /* Next array element. */
74388 field_addr.sub_location->number = i;
74389#endif /* FREECIV_JSON_CONNECTION */
74390
74391 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74392 }
74393
74394#ifdef FREECIV_JSON_CONNECTION
74395 /* Exit array. */
74396 FC_FREE(field_addr.sub_location);
74397#endif /* FREECIV_JSON_CONNECTION */
74398 }
74399
74400 if (e) {
74401 log_packet_detailed("'reqs' field error detected");
74402 }
74403
74404#ifdef FREECIV_JSON_CONNECTION
74405 field_addr.name = "from_pct";
74406#endif /* FREECIV_JSON_CONNECTION */
74407 e = 0;
74408
74409 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
74410
74411 if (e) {
74412 log_packet_detailed("'from_pct' field error detected");
74413 }
74414
74415#ifdef FREECIV_JSON_CONNECTION
74416 field_addr.name = "to_pct";
74417#endif /* FREECIV_JSON_CONNECTION */
74418 e = 0;
74419
74420 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
74421
74422 if (e) {
74423 log_packet_detailed("'to_pct' field error detected");
74424 }
74425
74426#ifdef FREECIV_JSON_CONNECTION
74427 field_addr.name = "onetime_pct";
74428#endif /* FREECIV_JSON_CONNECTION */
74429 e = 0;
74430
74431 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
74432
74433 if (e) {
74434 log_packet_detailed("'onetime_pct' field error detected");
74435 }
74436
74437#ifdef FREECIV_JSON_CONNECTION
74438 field_addr.name = "select_priority";
74439#endif /* FREECIV_JSON_CONNECTION */
74440 e = 0;
74441
74442 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->select_priority);
74443
74444 if (e) {
74445 log_packet_detailed("'select_priority' field error detected");
74446 }
74447
74448#ifdef FREECIV_JSON_CONNECTION
74449 field_addr.name = "replace_priority";
74450#endif /* FREECIV_JSON_CONNECTION */
74451 e = 0;
74452
74453 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->replace_priority);
74454
74455 if (e) {
74456 log_packet_detailed("'replace_priority' field error detected");
74457 }
74458
74459#ifdef FREECIV_JSON_CONNECTION
74460 field_addr.name = "flags";
74461#endif /* FREECIV_JSON_CONNECTION */
74462 e = 0;
74463
74464 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->flags);
74465
74466 if (e) {
74467 log_packet_detailed("'flags' field error detected");
74468 }
74469
74470#ifdef FREECIV_JSON_CONNECTION
74471 field_addr.name = "helptext";
74472#endif /* FREECIV_JSON_CONNECTION */
74473 e = 0;
74474
74475 if (!real_packet->helptext) {
74476 /* Transmit null as empty */
74477 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
74478 } else {
74479 int i;
74480
74482 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
74483
74484#ifdef FREECIV_JSON_CONNECTION
74485 /* Enter array. */
74486 field_addr.sub_location = plocation_elem_new(0);
74487#endif /* FREECIV_JSON_CONNECTION */
74488
74489 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
74490#ifdef FREECIV_JSON_CONNECTION
74491 /* Next array element. */
74492 field_addr.sub_location->number = i;
74493#endif /* FREECIV_JSON_CONNECTION */
74494
74495 {
74496 const char *pstr = strvec_get(real_packet->helptext, i);
74497
74498 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
74499 }
74500 }
74501
74502#ifdef FREECIV_JSON_CONNECTION
74503 /* Exit array. */
74504 FC_FREE(field_addr.sub_location);
74505#endif /* FREECIV_JSON_CONNECTION */
74506 }
74507
74508 if (e) {
74509 log_packet_detailed("'helptext' field error detected");
74510 }
74511#endif /* FREECIV_DELTA_PROTOCOL */
74512
74514}
74515
74517{
74518 if (!pc->used) {
74519 log_error("WARNING: trying to send data to the closed connection %s",
74521 return -1;
74522 }
74523 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOODS].packet != nullptr, -1,
74524 "Handler for PACKET_RULESET_GOODS not installed");
74525 return pc->phs.handlers->send[PACKET_RULESET_GOODS].packet(pc, packet);
74526}
74527
74528void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
74529{
74530 conn_list_iterate(dest, pconn) {
74533}
74534
74536{
74537 memset(packet, 0, sizeof(*packet));
74538
74539 requirement_vector_init(&packet->reqs);
74540}
74541
74543{
74544 requirement_vector_free(&packet->reqs);
74545}
74546
74547static inline void destroy_packet_ruleset_disaster(void *packet)
74548{
74550 free(packet);
74551}
74552
74553#ifdef FREECIV_DELTA_PROTOCOL
74554#define hash_packet_ruleset_disaster_100 hash_const
74555#define cmp_packet_ruleset_disaster_100 cmp_const
74557#endif /* FREECIV_DELTA_PROTOCOL */
74558
74560{
74561#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_disaster(_packet)
74563
74564#ifdef FREECIV_JSON_CONNECTION
74565 struct plocation field_addr;
74566 {
74567 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74570 }
74571#endif /* FREECIV_JSON_CONNECTION */
74572
74573 log_packet_detailed("packet_ruleset_disaster_100: got info about ()");
74574
74575#ifdef FREECIV_DELTA_PROTOCOL
74578 struct genhash **hash = pc->phs.received + PACKET_RULESET_DISASTER;
74579
74580 if (nullptr == *hash) {
74582 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
74583 }
74584
74585 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74586 real_packet->id = old->id;
74587 sz_strlcpy(real_packet->name, old->name);
74588 sz_strlcpy(real_packet->rule_name, old->rule_name);
74589 requirement_vector_copy(&real_packet->reqs, &old->reqs);
74590 real_packet->frequency = old->frequency;
74591 real_packet->effects = old->effects;
74592 } else {
74593 /* packet is already initialized empty */
74594 log_packet_detailed(" no old info");
74595 }
74596
74597#ifdef FREECIV_JSON_CONNECTION
74598 field_addr.name = "fields";
74599#endif /* FREECIV_JSON_CONNECTION */
74600 DIO_BV_GET(&din, &field_addr, fields);
74601
74602 if (BV_ISSET(fields, 0)) {
74603 log_packet_detailed(" got field 'id'");
74604
74605#ifdef FREECIV_JSON_CONNECTION
74606 field_addr.name = "id";
74607#endif /* FREECIV_JSON_CONNECTION */
74608
74609 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74611 }
74612 }
74613
74614 if (BV_ISSET(fields, 1)) {
74615 log_packet_detailed(" got field 'name'");
74616
74617#ifdef FREECIV_JSON_CONNECTION
74618 field_addr.name = "name";
74619#endif /* FREECIV_JSON_CONNECTION */
74620
74621 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74623 }
74624 }
74625
74626 if (BV_ISSET(fields, 2)) {
74627 log_packet_detailed(" got field 'rule_name'");
74628
74629#ifdef FREECIV_JSON_CONNECTION
74630 field_addr.name = "rule_name";
74631#endif /* FREECIV_JSON_CONNECTION */
74632
74633 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74634 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74635 }
74636 }
74637
74638 if (BV_ISSET(fields, 3)) {
74639 log_packet_detailed(" got field 'reqs'");
74640
74641#ifdef FREECIV_JSON_CONNECTION
74642 field_addr.name = "reqs";
74643#endif /* FREECIV_JSON_CONNECTION */
74644
74645 {
74646 int i;
74647
74648 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74650 }
74652
74653#ifdef FREECIV_JSON_CONNECTION
74654 /* Enter array. */
74655 field_addr.sub_location = plocation_elem_new(0);
74656#endif /* FREECIV_JSON_CONNECTION */
74657
74658 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74659#ifdef FREECIV_JSON_CONNECTION
74660 /* Next array element */
74661 field_addr.sub_location->number = i;
74662#endif /* FREECIV_JSON_CONNECTION */
74663
74664 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74666 }
74667 }
74668
74669#ifdef FREECIV_JSON_CONNECTION
74670 /* Exit array. */
74671 FC_FREE(field_addr.sub_location);
74672#endif /* FREECIV_JSON_CONNECTION */
74673 }
74674 }
74675
74676 if (BV_ISSET(fields, 4)) {
74677 log_packet_detailed(" got field 'frequency'");
74678
74679#ifdef FREECIV_JSON_CONNECTION
74680 field_addr.name = "frequency";
74681#endif /* FREECIV_JSON_CONNECTION */
74682
74683 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
74684 RECEIVE_PACKET_FIELD_ERROR(frequency);
74685 }
74686 }
74687
74688 if (BV_ISSET(fields, 5)) {
74689 log_packet_detailed(" got field 'effects'");
74690
74691#ifdef FREECIV_JSON_CONNECTION
74692 field_addr.name = "effects";
74693#endif /* FREECIV_JSON_CONNECTION */
74694
74695 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
74697 }
74698 }
74699
74700 if (nullptr == old) {
74701 old = fc_malloc(sizeof(*old));
74703 old->id = real_packet->id;
74704 sz_strlcpy(old->name, real_packet->name);
74705 sz_strlcpy(old->rule_name, real_packet->rule_name);
74706 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74707 old->frequency = real_packet->frequency;
74708 old->effects = real_packet->effects;
74710 } else {
74711 old->id = real_packet->id;
74712 sz_strlcpy(old->name, real_packet->name);
74713 sz_strlcpy(old->rule_name, real_packet->rule_name);
74714 requirement_vector_copy(&old->reqs, &real_packet->reqs);
74715 old->frequency = real_packet->frequency;
74716 old->effects = real_packet->effects;
74717 }
74718
74719#else /* FREECIV_DELTA_PROTOCOL */
74720#ifdef FREECIV_JSON_CONNECTION
74721 field_addr.name = "id";
74722#endif /* FREECIV_JSON_CONNECTION */
74723
74724 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
74726 }
74727
74728#ifdef FREECIV_JSON_CONNECTION
74729 field_addr.name = "name";
74730#endif /* FREECIV_JSON_CONNECTION */
74731
74732 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
74734 }
74735
74736#ifdef FREECIV_JSON_CONNECTION
74737 field_addr.name = "rule_name";
74738#endif /* FREECIV_JSON_CONNECTION */
74739
74740 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
74741 RECEIVE_PACKET_FIELD_ERROR(rule_name);
74742 }
74743
74744#ifdef FREECIV_JSON_CONNECTION
74745 field_addr.name = "reqs";
74746#endif /* FREECIV_JSON_CONNECTION */
74747
74748 {
74749 int i;
74750
74751 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
74753 }
74755
74756#ifdef FREECIV_JSON_CONNECTION
74757 /* Enter array. */
74758 field_addr.sub_location = plocation_elem_new(0);
74759#endif /* FREECIV_JSON_CONNECTION */
74760
74761 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74762#ifdef FREECIV_JSON_CONNECTION
74763 /* Next array element */
74764 field_addr.sub_location->number = i;
74765#endif /* FREECIV_JSON_CONNECTION */
74766
74767 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
74769 }
74770 }
74771
74772#ifdef FREECIV_JSON_CONNECTION
74773 /* Exit array. */
74774 FC_FREE(field_addr.sub_location);
74775#endif /* FREECIV_JSON_CONNECTION */
74776 }
74777
74778#ifdef FREECIV_JSON_CONNECTION
74779 field_addr.name = "frequency";
74780#endif /* FREECIV_JSON_CONNECTION */
74781
74782 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
74783 RECEIVE_PACKET_FIELD_ERROR(frequency);
74784 }
74785
74786#ifdef FREECIV_JSON_CONNECTION
74787 field_addr.name = "effects";
74788#endif /* FREECIV_JSON_CONNECTION */
74789
74790 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
74792 }
74793#endif /* FREECIV_DELTA_PROTOCOL */
74794
74796#undef FREE_PACKET_STRUCT
74797}
74798
74800{
74801 const struct packet_ruleset_disaster *real_packet = packet;
74802 int e;
74804
74805 log_packet_detailed("packet_ruleset_disaster_100: sending info about ()");
74806
74807#ifdef FREECIV_DELTA_PROTOCOL
74810 bool differ;
74811 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DISASTER;
74812
74813 if (nullptr == *hash) {
74815 nullptr, nullptr, nullptr, destroy_packet_ruleset_disaster);
74816 }
74817 BV_CLR_ALL(fields);
74818
74819 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74820 old = fc_malloc(sizeof(*old));
74821 /* temporary bitcopy just to insert correctly */
74822 *old = *real_packet;
74825 }
74826
74827 differ = (old->id != real_packet->id);
74828 if (differ) {
74829 BV_SET(fields, 0);
74830 }
74831
74832 differ = (strcmp(old->name, real_packet->name) != 0);
74833 if (differ) {
74834 BV_SET(fields, 1);
74835 }
74836
74837 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
74838 if (differ) {
74839 BV_SET(fields, 2);
74840 }
74841
74843 if (!differ) {
74844 int i;
74845
74846 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
74847 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
74848 if (differ) {
74849 break;
74850 }
74851 }
74852 }
74853 if (differ) {
74854 BV_SET(fields, 3);
74855 }
74856
74857 differ = (old->frequency != real_packet->frequency);
74858 if (differ) {
74859 BV_SET(fields, 4);
74860 }
74861
74862 differ = !BV_ARE_EQUAL(old->effects, real_packet->effects);
74863 if (differ) {
74864 BV_SET(fields, 5);
74865 }
74866#endif /* FREECIV_DELTA_PROTOCOL */
74867
74868#ifdef FREECIV_JSON_CONNECTION
74869 struct plocation field_addr;
74870 {
74871 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
74874 }
74875#endif /* FREECIV_JSON_CONNECTION */
74876
74877#ifdef FREECIV_DELTA_PROTOCOL
74878#ifdef FREECIV_JSON_CONNECTION
74879 field_addr.name = "fields";
74880#endif /* FREECIV_JSON_CONNECTION */
74881 e = 0;
74882 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74883 if (e) {
74884 log_packet_detailed("fields bitvector error detected");
74885 }
74886
74887 if (BV_ISSET(fields, 0)) {
74888 log_packet_detailed(" field 'id' has changed");
74889
74890#ifdef FREECIV_JSON_CONNECTION
74891 field_addr.name = "id";
74892#endif /* FREECIV_JSON_CONNECTION */
74893 e = 0;
74894
74895 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
74896
74897 if (e) {
74898 log_packet_detailed("'id' field error detected");
74899 }
74900 }
74901
74902 if (BV_ISSET(fields, 1)) {
74903 log_packet_detailed(" field 'name' has changed");
74904
74905#ifdef FREECIV_JSON_CONNECTION
74906 field_addr.name = "name";
74907#endif /* FREECIV_JSON_CONNECTION */
74908 e = 0;
74909
74910 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
74911
74912 if (e) {
74913 log_packet_detailed("'name' field error detected");
74914 }
74915 }
74916
74917 if (BV_ISSET(fields, 2)) {
74918 log_packet_detailed(" field 'rule_name' has changed");
74919
74920#ifdef FREECIV_JSON_CONNECTION
74921 field_addr.name = "rule_name";
74922#endif /* FREECIV_JSON_CONNECTION */
74923 e = 0;
74924
74925 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
74926
74927 if (e) {
74928 log_packet_detailed("'rule_name' field error detected");
74929 }
74930 }
74931
74932 if (BV_ISSET(fields, 3)) {
74933 log_packet_detailed(" field 'reqs' has changed");
74934
74935#ifdef FREECIV_JSON_CONNECTION
74936 field_addr.name = "reqs";
74937#endif /* FREECIV_JSON_CONNECTION */
74938 e = 0;
74939
74940 {
74941 int i;
74942
74945
74946#ifdef FREECIV_JSON_CONNECTION
74947 /* Enter array. */
74948 field_addr.sub_location = plocation_elem_new(0);
74949#endif /* FREECIV_JSON_CONNECTION */
74950
74951 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
74952#ifdef FREECIV_JSON_CONNECTION
74953 /* Next array element. */
74954 field_addr.sub_location->number = i;
74955#endif /* FREECIV_JSON_CONNECTION */
74956
74957 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
74958 }
74959
74960#ifdef FREECIV_JSON_CONNECTION
74961 /* Exit array. */
74962 FC_FREE(field_addr.sub_location);
74963#endif /* FREECIV_JSON_CONNECTION */
74964 }
74965
74966 if (e) {
74967 log_packet_detailed("'reqs' field error detected");
74968 }
74969 }
74970
74971 if (BV_ISSET(fields, 4)) {
74972 log_packet_detailed(" field 'frequency' has changed");
74973
74974#ifdef FREECIV_JSON_CONNECTION
74975 field_addr.name = "frequency";
74976#endif /* FREECIV_JSON_CONNECTION */
74977 e = 0;
74978
74979 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
74980
74981 if (e) {
74982 log_packet_detailed("'frequency' field error detected");
74983 }
74984 }
74985
74986 if (BV_ISSET(fields, 5)) {
74987 log_packet_detailed(" field 'effects' has changed");
74988
74989#ifdef FREECIV_JSON_CONNECTION
74990 field_addr.name = "effects";
74991#endif /* FREECIV_JSON_CONNECTION */
74992 e = 0;
74993
74994 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
74995
74996 if (e) {
74997 log_packet_detailed("'effects' field error detected");
74998 }
74999 }
75000
75001 old->id = real_packet->id;
75002 sz_strlcpy(old->name, real_packet->name);
75003 sz_strlcpy(old->rule_name, real_packet->rule_name);
75004 requirement_vector_copy(&old->reqs, &real_packet->reqs);
75005 old->frequency = real_packet->frequency;
75006 old->effects = real_packet->effects;
75007
75008#else /* FREECIV_DELTA_PROTOCOL */
75009#ifdef FREECIV_JSON_CONNECTION
75010 field_addr.name = "id";
75011#endif /* FREECIV_JSON_CONNECTION */
75012 e = 0;
75013
75014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75015
75016 if (e) {
75017 log_packet_detailed("'id' field error detected");
75018 }
75019
75020#ifdef FREECIV_JSON_CONNECTION
75021 field_addr.name = "name";
75022#endif /* FREECIV_JSON_CONNECTION */
75023 e = 0;
75024
75025 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75026
75027 if (e) {
75028 log_packet_detailed("'name' field error detected");
75029 }
75030
75031#ifdef FREECIV_JSON_CONNECTION
75032 field_addr.name = "rule_name";
75033#endif /* FREECIV_JSON_CONNECTION */
75034 e = 0;
75035
75036 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75037
75038 if (e) {
75039 log_packet_detailed("'rule_name' field error detected");
75040 }
75041
75042#ifdef FREECIV_JSON_CONNECTION
75043 field_addr.name = "reqs";
75044#endif /* FREECIV_JSON_CONNECTION */
75045 e = 0;
75046
75047 {
75048 int i;
75049
75052
75053#ifdef FREECIV_JSON_CONNECTION
75054 /* Enter array. */
75055 field_addr.sub_location = plocation_elem_new(0);
75056#endif /* FREECIV_JSON_CONNECTION */
75057
75058 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
75059#ifdef FREECIV_JSON_CONNECTION
75060 /* Next array element. */
75061 field_addr.sub_location->number = i;
75062#endif /* FREECIV_JSON_CONNECTION */
75063
75064 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
75065 }
75066
75067#ifdef FREECIV_JSON_CONNECTION
75068 /* Exit array. */
75069 FC_FREE(field_addr.sub_location);
75070#endif /* FREECIV_JSON_CONNECTION */
75071 }
75072
75073 if (e) {
75074 log_packet_detailed("'reqs' field error detected");
75075 }
75076
75077#ifdef FREECIV_JSON_CONNECTION
75078 field_addr.name = "frequency";
75079#endif /* FREECIV_JSON_CONNECTION */
75080 e = 0;
75081
75082 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
75083
75084 if (e) {
75085 log_packet_detailed("'frequency' field error detected");
75086 }
75087
75088#ifdef FREECIV_JSON_CONNECTION
75089 field_addr.name = "effects";
75090#endif /* FREECIV_JSON_CONNECTION */
75091 e = 0;
75092
75093 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->effects);
75094
75095 if (e) {
75096 log_packet_detailed("'effects' field error detected");
75097 }
75098#endif /* FREECIV_DELTA_PROTOCOL */
75099
75101}
75102
75104{
75105 if (!pc->used) {
75106 log_error("WARNING: trying to send data to the closed connection %s",
75108 return -1;
75109 }
75110 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet != nullptr, -1,
75111 "Handler for PACKET_RULESET_DISASTER not installed");
75112 return pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet(pc, packet);
75113}
75114
75116{
75117 conn_list_iterate(dest, pconn) {
75120}
75121
75123{
75124 memset(packet, 0, sizeof(*packet));
75125}
75126
75127#define free_packet_ruleset_achievement(_packet) (void) 0
75128#define destroy_packet_ruleset_achievement free
75129
75130#ifdef FREECIV_DELTA_PROTOCOL
75131#define hash_packet_ruleset_achievement_100 hash_const
75132#define cmp_packet_ruleset_achievement_100 cmp_const
75134#endif /* FREECIV_DELTA_PROTOCOL */
75135
75137{
75138#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_achievement(_packet)
75140
75141#ifdef FREECIV_JSON_CONNECTION
75142 struct plocation field_addr;
75143 {
75144 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75147 }
75148#endif /* FREECIV_JSON_CONNECTION */
75149
75150 log_packet_detailed("packet_ruleset_achievement_100: got info about ()");
75151
75152#ifdef FREECIV_DELTA_PROTOCOL
75155 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACHIEVEMENT;
75156
75157 if (nullptr == *hash) {
75159 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75160 }
75161
75162 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75163 *real_packet = *old;
75164 } else {
75165 /* packet is already initialized empty */
75166 log_packet_detailed(" no old info");
75167 }
75168
75169#ifdef FREECIV_JSON_CONNECTION
75170 field_addr.name = "fields";
75171#endif /* FREECIV_JSON_CONNECTION */
75172 DIO_BV_GET(&din, &field_addr, fields);
75173
75174 if (BV_ISSET(fields, 0)) {
75175 log_packet_detailed(" got field 'id'");
75176
75177#ifdef FREECIV_JSON_CONNECTION
75178 field_addr.name = "id";
75179#endif /* FREECIV_JSON_CONNECTION */
75180
75181 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75183 }
75184 }
75185
75186 if (BV_ISSET(fields, 1)) {
75187 log_packet_detailed(" got field 'name'");
75188
75189#ifdef FREECIV_JSON_CONNECTION
75190 field_addr.name = "name";
75191#endif /* FREECIV_JSON_CONNECTION */
75192
75193 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75195 }
75196 }
75197
75198 if (BV_ISSET(fields, 2)) {
75199 log_packet_detailed(" got field 'rule_name'");
75200
75201#ifdef FREECIV_JSON_CONNECTION
75202 field_addr.name = "rule_name";
75203#endif /* FREECIV_JSON_CONNECTION */
75204
75205 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75206 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75207 }
75208 }
75209
75210 if (BV_ISSET(fields, 3)) {
75211 log_packet_detailed(" got field 'type'");
75212
75213#ifdef FREECIV_JSON_CONNECTION
75214 field_addr.name = "type";
75215#endif /* FREECIV_JSON_CONNECTION */
75216
75217 {
75218 int readin;
75219
75220 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75222 }
75223 real_packet->type = readin;
75224 }
75225 }
75226
75227 real_packet->unique = BV_ISSET(fields, 4);
75228
75229 if (BV_ISSET(fields, 5)) {
75230 log_packet_detailed(" got field 'value'");
75231
75232#ifdef FREECIV_JSON_CONNECTION
75233 field_addr.name = "value";
75234#endif /* FREECIV_JSON_CONNECTION */
75235
75236 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75238 }
75239 }
75240
75241 if (nullptr == old) {
75242 old = fc_malloc(sizeof(*old));
75244 *old = *real_packet;
75246 } else {
75247 *old = *real_packet;
75248 }
75249
75250#else /* FREECIV_DELTA_PROTOCOL */
75251#ifdef FREECIV_JSON_CONNECTION
75252 field_addr.name = "id";
75253#endif /* FREECIV_JSON_CONNECTION */
75254
75255 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75257 }
75258
75259#ifdef FREECIV_JSON_CONNECTION
75260 field_addr.name = "name";
75261#endif /* FREECIV_JSON_CONNECTION */
75262
75263 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75265 }
75266
75267#ifdef FREECIV_JSON_CONNECTION
75268 field_addr.name = "rule_name";
75269#endif /* FREECIV_JSON_CONNECTION */
75270
75271 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
75272 RECEIVE_PACKET_FIELD_ERROR(rule_name);
75273 }
75274
75275#ifdef FREECIV_JSON_CONNECTION
75276 field_addr.name = "type";
75277#endif /* FREECIV_JSON_CONNECTION */
75278
75279 {
75280 int readin;
75281
75282 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75284 }
75285 real_packet->type = readin;
75286 }
75287
75288#ifdef FREECIV_JSON_CONNECTION
75289 field_addr.name = "unique";
75290#endif /* FREECIV_JSON_CONNECTION */
75291
75292 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unique)) {
75294 }
75295
75296#ifdef FREECIV_JSON_CONNECTION
75297 field_addr.name = "value";
75298#endif /* FREECIV_JSON_CONNECTION */
75299
75300 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
75302 }
75303#endif /* FREECIV_DELTA_PROTOCOL */
75304
75306#undef FREE_PACKET_STRUCT
75307}
75308
75310{
75311 const struct packet_ruleset_achievement *real_packet = packet;
75312 int e;
75314
75315 log_packet_detailed("packet_ruleset_achievement_100: sending info about ()");
75316
75317#ifdef FREECIV_DELTA_PROTOCOL
75320 bool differ;
75321 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACHIEVEMENT;
75322
75323 if (nullptr == *hash) {
75325 nullptr, nullptr, nullptr, destroy_packet_ruleset_achievement);
75326 }
75327 BV_CLR_ALL(fields);
75328
75329 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75330 old = fc_malloc(sizeof(*old));
75331 /* temporary bitcopy just to insert correctly */
75332 *old = *real_packet;
75335 }
75336
75337 differ = (old->id != real_packet->id);
75338 if (differ) {
75339 BV_SET(fields, 0);
75340 }
75341
75342 differ = (strcmp(old->name, real_packet->name) != 0);
75343 if (differ) {
75344 BV_SET(fields, 1);
75345 }
75346
75347 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
75348 if (differ) {
75349 BV_SET(fields, 2);
75350 }
75351
75352 differ = (old->type != real_packet->type);
75353 if (differ) {
75354 BV_SET(fields, 3);
75355 }
75356
75357 /* folded into head */
75358 if (real_packet->unique) {
75359 BV_SET(fields, 4);
75360 }
75361
75362 differ = (old->value != real_packet->value);
75363 if (differ) {
75364 BV_SET(fields, 5);
75365 }
75366#endif /* FREECIV_DELTA_PROTOCOL */
75367
75368#ifdef FREECIV_JSON_CONNECTION
75369 struct plocation field_addr;
75370 {
75371 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75374 }
75375#endif /* FREECIV_JSON_CONNECTION */
75376
75377#ifdef FREECIV_DELTA_PROTOCOL
75378#ifdef FREECIV_JSON_CONNECTION
75379 field_addr.name = "fields";
75380#endif /* FREECIV_JSON_CONNECTION */
75381 e = 0;
75382 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75383 if (e) {
75384 log_packet_detailed("fields bitvector error detected");
75385 }
75386
75387 if (BV_ISSET(fields, 0)) {
75388 log_packet_detailed(" field 'id' has changed");
75389
75390#ifdef FREECIV_JSON_CONNECTION
75391 field_addr.name = "id";
75392#endif /* FREECIV_JSON_CONNECTION */
75393 e = 0;
75394
75395 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75396
75397 if (e) {
75398 log_packet_detailed("'id' field error detected");
75399 }
75400 }
75401
75402 if (BV_ISSET(fields, 1)) {
75403 log_packet_detailed(" field 'name' has changed");
75404
75405#ifdef FREECIV_JSON_CONNECTION
75406 field_addr.name = "name";
75407#endif /* FREECIV_JSON_CONNECTION */
75408 e = 0;
75409
75410 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75411
75412 if (e) {
75413 log_packet_detailed("'name' field error detected");
75414 }
75415 }
75416
75417 if (BV_ISSET(fields, 2)) {
75418 log_packet_detailed(" field 'rule_name' has changed");
75419
75420#ifdef FREECIV_JSON_CONNECTION
75421 field_addr.name = "rule_name";
75422#endif /* FREECIV_JSON_CONNECTION */
75423 e = 0;
75424
75425 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75426
75427 if (e) {
75428 log_packet_detailed("'rule_name' field error detected");
75429 }
75430 }
75431
75432 if (BV_ISSET(fields, 3)) {
75433 log_packet_detailed(" field 'type' has changed");
75434
75435#ifdef FREECIV_JSON_CONNECTION
75436 field_addr.name = "type";
75437#endif /* FREECIV_JSON_CONNECTION */
75438 e = 0;
75439
75440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75441
75442 if (e) {
75443 log_packet_detailed("'type' field error detected");
75444 }
75445 }
75446
75447 /* field 4 is folded into the header */
75448
75449 if (BV_ISSET(fields, 5)) {
75450 log_packet_detailed(" field 'value' has changed");
75451
75452#ifdef FREECIV_JSON_CONNECTION
75453 field_addr.name = "value";
75454#endif /* FREECIV_JSON_CONNECTION */
75455 e = 0;
75456
75457 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75458
75459 if (e) {
75460 log_packet_detailed("'value' field error detected");
75461 }
75462 }
75463
75464 *old = *real_packet;
75465
75466#else /* FREECIV_DELTA_PROTOCOL */
75467#ifdef FREECIV_JSON_CONNECTION
75468 field_addr.name = "id";
75469#endif /* FREECIV_JSON_CONNECTION */
75470 e = 0;
75471
75472 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75473
75474 if (e) {
75475 log_packet_detailed("'id' field error detected");
75476 }
75477
75478#ifdef FREECIV_JSON_CONNECTION
75479 field_addr.name = "name";
75480#endif /* FREECIV_JSON_CONNECTION */
75481 e = 0;
75482
75483 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75484
75485 if (e) {
75486 log_packet_detailed("'name' field error detected");
75487 }
75488
75489#ifdef FREECIV_JSON_CONNECTION
75490 field_addr.name = "rule_name";
75491#endif /* FREECIV_JSON_CONNECTION */
75492 e = 0;
75493
75494 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
75495
75496 if (e) {
75497 log_packet_detailed("'rule_name' field error detected");
75498 }
75499
75500#ifdef FREECIV_JSON_CONNECTION
75501 field_addr.name = "type";
75502#endif /* FREECIV_JSON_CONNECTION */
75503 e = 0;
75504
75505 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
75506
75507 if (e) {
75508 log_packet_detailed("'type' field error detected");
75509 }
75510
75511#ifdef FREECIV_JSON_CONNECTION
75512 field_addr.name = "unique";
75513#endif /* FREECIV_JSON_CONNECTION */
75514 e = 0;
75515
75516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unique);
75517
75518 if (e) {
75519 log_packet_detailed("'unique' field error detected");
75520 }
75521
75522#ifdef FREECIV_JSON_CONNECTION
75523 field_addr.name = "value";
75524#endif /* FREECIV_JSON_CONNECTION */
75525 e = 0;
75526
75527 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
75528
75529 if (e) {
75530 log_packet_detailed("'value' field error detected");
75531 }
75532#endif /* FREECIV_DELTA_PROTOCOL */
75533
75535}
75536
75538{
75539 if (!pc->used) {
75540 log_error("WARNING: trying to send data to the closed connection %s",
75542 return -1;
75543 }
75544 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet != nullptr, -1,
75545 "Handler for PACKET_RULESET_ACHIEVEMENT not installed");
75546 return pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet(pc, packet);
75547}
75548
75550{
75551 conn_list_iterate(dest, pconn) {
75554}
75555
75556static inline void init_packet_ruleset_trade(struct packet_ruleset_trade *packet)
75557{
75558 memset(packet, 0, sizeof(*packet));
75559}
75560
75561#define free_packet_ruleset_trade(_packet) (void) 0
75562#define destroy_packet_ruleset_trade free
75563
75564#ifdef FREECIV_DELTA_PROTOCOL
75565#define hash_packet_ruleset_trade_100 hash_const
75566#define cmp_packet_ruleset_trade_100 cmp_const
75568#endif /* FREECIV_DELTA_PROTOCOL */
75569
75571{
75572#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_trade(_packet)
75574
75575#ifdef FREECIV_JSON_CONNECTION
75576 struct plocation field_addr;
75577 {
75578 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75581 }
75582#endif /* FREECIV_JSON_CONNECTION */
75583
75584 log_packet_detailed("packet_ruleset_trade_100: got info about ()");
75585
75586#ifdef FREECIV_DELTA_PROTOCOL
75588 struct packet_ruleset_trade *old;
75589 struct genhash **hash = pc->phs.received + PACKET_RULESET_TRADE;
75590
75591 if (nullptr == *hash) {
75593 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
75594 }
75595
75596 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75597 *real_packet = *old;
75598 } else {
75599 /* packet is already initialized empty */
75600 log_packet_detailed(" no old info");
75601 }
75602
75603#ifdef FREECIV_JSON_CONNECTION
75604 field_addr.name = "fields";
75605#endif /* FREECIV_JSON_CONNECTION */
75606 DIO_BV_GET(&din, &field_addr, fields);
75607
75608 if (BV_ISSET(fields, 0)) {
75609 log_packet_detailed(" got field 'id'");
75610
75611#ifdef FREECIV_JSON_CONNECTION
75612 field_addr.name = "id";
75613#endif /* FREECIV_JSON_CONNECTION */
75614
75615 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75617 }
75618 }
75619
75620 if (BV_ISSET(fields, 1)) {
75621 log_packet_detailed(" got field 'trade_pct'");
75622
75623#ifdef FREECIV_JSON_CONNECTION
75624 field_addr.name = "trade_pct";
75625#endif /* FREECIV_JSON_CONNECTION */
75626
75627 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
75628 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
75629 }
75630 }
75631
75632 if (BV_ISSET(fields, 2)) {
75633 log_packet_detailed(" got field 'cancelling'");
75634
75635#ifdef FREECIV_JSON_CONNECTION
75636 field_addr.name = "cancelling";
75637#endif /* FREECIV_JSON_CONNECTION */
75638
75639 {
75640 int readin;
75641
75642 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75643 RECEIVE_PACKET_FIELD_ERROR(cancelling);
75644 }
75645 real_packet->cancelling = readin;
75646 }
75647 }
75648
75649 if (BV_ISSET(fields, 3)) {
75650 log_packet_detailed(" got field 'bonus_type'");
75651
75652#ifdef FREECIV_JSON_CONNECTION
75653 field_addr.name = "bonus_type";
75654#endif /* FREECIV_JSON_CONNECTION */
75655
75656 {
75657 int readin;
75658
75659 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75660 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
75661 }
75662 real_packet->bonus_type = readin;
75663 }
75664 }
75665
75666 if (nullptr == old) {
75667 old = fc_malloc(sizeof(*old));
75669 *old = *real_packet;
75671 } else {
75672 *old = *real_packet;
75673 }
75674
75675#else /* FREECIV_DELTA_PROTOCOL */
75676#ifdef FREECIV_JSON_CONNECTION
75677 field_addr.name = "id";
75678#endif /* FREECIV_JSON_CONNECTION */
75679
75680 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75682 }
75683
75684#ifdef FREECIV_JSON_CONNECTION
75685 field_addr.name = "trade_pct";
75686#endif /* FREECIV_JSON_CONNECTION */
75687
75688 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
75689 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
75690 }
75691
75692#ifdef FREECIV_JSON_CONNECTION
75693 field_addr.name = "cancelling";
75694#endif /* FREECIV_JSON_CONNECTION */
75695
75696 {
75697 int readin;
75698
75699 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75700 RECEIVE_PACKET_FIELD_ERROR(cancelling);
75701 }
75702 real_packet->cancelling = readin;
75703 }
75704
75705#ifdef FREECIV_JSON_CONNECTION
75706 field_addr.name = "bonus_type";
75707#endif /* FREECIV_JSON_CONNECTION */
75708
75709 {
75710 int readin;
75711
75712 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75713 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
75714 }
75715 real_packet->bonus_type = readin;
75716 }
75717#endif /* FREECIV_DELTA_PROTOCOL */
75718
75720#undef FREE_PACKET_STRUCT
75721}
75722
75723static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
75724{
75725 const struct packet_ruleset_trade *real_packet = packet;
75726 int e;
75728
75729 log_packet_detailed("packet_ruleset_trade_100: sending info about ()");
75730
75731#ifdef FREECIV_DELTA_PROTOCOL
75733 struct packet_ruleset_trade *old;
75734 bool differ;
75735 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TRADE;
75736
75737 if (nullptr == *hash) {
75739 nullptr, nullptr, nullptr, destroy_packet_ruleset_trade);
75740 }
75741 BV_CLR_ALL(fields);
75742
75743 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75744 old = fc_malloc(sizeof(*old));
75745 /* temporary bitcopy just to insert correctly */
75746 *old = *real_packet;
75749 }
75750
75751 differ = (old->id != real_packet->id);
75752 if (differ) {
75753 BV_SET(fields, 0);
75754 }
75755
75756 differ = (old->trade_pct != real_packet->trade_pct);
75757 if (differ) {
75758 BV_SET(fields, 1);
75759 }
75760
75761 differ = (old->cancelling != real_packet->cancelling);
75762 if (differ) {
75763 BV_SET(fields, 2);
75764 }
75765
75766 differ = (old->bonus_type != real_packet->bonus_type);
75767 if (differ) {
75768 BV_SET(fields, 3);
75769 }
75770#endif /* FREECIV_DELTA_PROTOCOL */
75771
75772#ifdef FREECIV_JSON_CONNECTION
75773 struct plocation field_addr;
75774 {
75775 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75778 }
75779#endif /* FREECIV_JSON_CONNECTION */
75780
75781#ifdef FREECIV_DELTA_PROTOCOL
75782#ifdef FREECIV_JSON_CONNECTION
75783 field_addr.name = "fields";
75784#endif /* FREECIV_JSON_CONNECTION */
75785 e = 0;
75786 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75787 if (e) {
75788 log_packet_detailed("fields bitvector error detected");
75789 }
75790
75791 if (BV_ISSET(fields, 0)) {
75792 log_packet_detailed(" field 'id' has changed");
75793
75794#ifdef FREECIV_JSON_CONNECTION
75795 field_addr.name = "id";
75796#endif /* FREECIV_JSON_CONNECTION */
75797 e = 0;
75798
75799 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75800
75801 if (e) {
75802 log_packet_detailed("'id' field error detected");
75803 }
75804 }
75805
75806 if (BV_ISSET(fields, 1)) {
75807 log_packet_detailed(" field 'trade_pct' has changed");
75808
75809#ifdef FREECIV_JSON_CONNECTION
75810 field_addr.name = "trade_pct";
75811#endif /* FREECIV_JSON_CONNECTION */
75812 e = 0;
75813
75814 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
75815
75816 if (e) {
75817 log_packet_detailed("'trade_pct' field error detected");
75818 }
75819 }
75820
75821 if (BV_ISSET(fields, 2)) {
75822 log_packet_detailed(" field 'cancelling' has changed");
75823
75824#ifdef FREECIV_JSON_CONNECTION
75825 field_addr.name = "cancelling";
75826#endif /* FREECIV_JSON_CONNECTION */
75827 e = 0;
75828
75829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
75830
75831 if (e) {
75832 log_packet_detailed("'cancelling' field error detected");
75833 }
75834 }
75835
75836 if (BV_ISSET(fields, 3)) {
75837 log_packet_detailed(" field 'bonus_type' has changed");
75838
75839#ifdef FREECIV_JSON_CONNECTION
75840 field_addr.name = "bonus_type";
75841#endif /* FREECIV_JSON_CONNECTION */
75842 e = 0;
75843
75844 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
75845
75846 if (e) {
75847 log_packet_detailed("'bonus_type' field error detected");
75848 }
75849 }
75850
75851 *old = *real_packet;
75852
75853#else /* FREECIV_DELTA_PROTOCOL */
75854#ifdef FREECIV_JSON_CONNECTION
75855 field_addr.name = "id";
75856#endif /* FREECIV_JSON_CONNECTION */
75857 e = 0;
75858
75859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
75860
75861 if (e) {
75862 log_packet_detailed("'id' field error detected");
75863 }
75864
75865#ifdef FREECIV_JSON_CONNECTION
75866 field_addr.name = "trade_pct";
75867#endif /* FREECIV_JSON_CONNECTION */
75868 e = 0;
75869
75870 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
75871
75872 if (e) {
75873 log_packet_detailed("'trade_pct' field error detected");
75874 }
75875
75876#ifdef FREECIV_JSON_CONNECTION
75877 field_addr.name = "cancelling";
75878#endif /* FREECIV_JSON_CONNECTION */
75879 e = 0;
75880
75881 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
75882
75883 if (e) {
75884 log_packet_detailed("'cancelling' field error detected");
75885 }
75886
75887#ifdef FREECIV_JSON_CONNECTION
75888 field_addr.name = "bonus_type";
75889#endif /* FREECIV_JSON_CONNECTION */
75890 e = 0;
75891
75892 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
75893
75894 if (e) {
75895 log_packet_detailed("'bonus_type' field error detected");
75896 }
75897#endif /* FREECIV_DELTA_PROTOCOL */
75898
75900}
75901
75903{
75904 if (!pc->used) {
75905 log_error("WARNING: trying to send data to the closed connection %s",
75907 return -1;
75908 }
75909 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TRADE].packet != nullptr, -1,
75910 "Handler for PACKET_RULESET_TRADE not installed");
75911 return pc->phs.handlers->send[PACKET_RULESET_TRADE].packet(pc, packet);
75912}
75913
75914void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
75915{
75916 conn_list_iterate(dest, pconn) {
75919}
75920
75921static inline void init_packet_ruleset_action(struct packet_ruleset_action *packet)
75922{
75923 memset(packet, 0, sizeof(*packet));
75924}
75925
75926#define free_packet_ruleset_action(_packet) (void) 0
75927#define destroy_packet_ruleset_action free
75928
75929#ifdef FREECIV_DELTA_PROTOCOL
75930#define hash_packet_ruleset_action_100 hash_const
75931#define cmp_packet_ruleset_action_100 cmp_const
75933#endif /* FREECIV_DELTA_PROTOCOL */
75934
75936{
75937#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action(_packet)
75939
75940#ifdef FREECIV_JSON_CONNECTION
75941 struct plocation field_addr;
75942 {
75943 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
75946 }
75947#endif /* FREECIV_JSON_CONNECTION */
75948
75949 log_packet_detailed("packet_ruleset_action_100: got info about ()");
75950
75951#ifdef FREECIV_DELTA_PROTOCOL
75953 struct packet_ruleset_action *old;
75954 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION;
75955
75956 if (nullptr == *hash) {
75958 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
75959 }
75960
75961 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75962 *real_packet = *old;
75963 } else {
75964 /* packet is already initialized empty */
75965 log_packet_detailed(" no old info");
75966 }
75967
75968#ifdef FREECIV_JSON_CONNECTION
75969 field_addr.name = "fields";
75970#endif /* FREECIV_JSON_CONNECTION */
75971 DIO_BV_GET(&din, &field_addr, fields);
75972
75973 if (BV_ISSET(fields, 0)) {
75974 log_packet_detailed(" got field 'id'");
75975
75976#ifdef FREECIV_JSON_CONNECTION
75977 field_addr.name = "id";
75978#endif /* FREECIV_JSON_CONNECTION */
75979
75980 {
75981 int readin;
75982
75983 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75985 }
75986 real_packet->id = readin;
75987 }
75988 }
75989
75990 if (BV_ISSET(fields, 1)) {
75991 log_packet_detailed(" got field 'ui_name'");
75992
75993#ifdef FREECIV_JSON_CONNECTION
75994 field_addr.name = "ui_name";
75995#endif /* FREECIV_JSON_CONNECTION */
75996
75997 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
75999 }
76000 }
76001
76002 real_packet->quiet = BV_ISSET(fields, 2);
76003
76004 if (BV_ISSET(fields, 3)) {
76005 log_packet_detailed(" got field 'result'");
76006
76007#ifdef FREECIV_JSON_CONNECTION
76008 field_addr.name = "result";
76009#endif /* FREECIV_JSON_CONNECTION */
76010
76011 {
76012 int readin;
76013
76014 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76016 }
76017 real_packet->result = readin;
76018 }
76019 }
76020
76021 if (BV_ISSET(fields, 4)) {
76022 log_packet_detailed(" got field 'sub_results'");
76023
76024#ifdef FREECIV_JSON_CONNECTION
76025 field_addr.name = "sub_results";
76026#endif /* FREECIV_JSON_CONNECTION */
76027
76028 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
76029 RECEIVE_PACKET_FIELD_ERROR(sub_results);
76030 }
76031 }
76032
76033 real_packet->actor_consuming_always = BV_ISSET(fields, 5);
76034
76035 if (BV_ISSET(fields, 6)) {
76036 log_packet_detailed(" got field 'act_kind'");
76037
76038#ifdef FREECIV_JSON_CONNECTION
76039 field_addr.name = "act_kind";
76040#endif /* FREECIV_JSON_CONNECTION */
76041
76042 {
76043 int readin;
76044
76045 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76047 }
76048 real_packet->act_kind = readin;
76049 }
76050 }
76051
76052 if (BV_ISSET(fields, 7)) {
76053 log_packet_detailed(" got field 'tgt_kind'");
76054
76055#ifdef FREECIV_JSON_CONNECTION
76056 field_addr.name = "tgt_kind";
76057#endif /* FREECIV_JSON_CONNECTION */
76058
76059 {
76060 int readin;
76061
76062 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76064 }
76065 real_packet->tgt_kind = readin;
76066 }
76067 }
76068
76069 if (BV_ISSET(fields, 8)) {
76070 log_packet_detailed(" got field 'sub_tgt_kind'");
76071
76072#ifdef FREECIV_JSON_CONNECTION
76073 field_addr.name = "sub_tgt_kind";
76074#endif /* FREECIV_JSON_CONNECTION */
76075
76076 {
76077 int readin;
76078
76079 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76080 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
76081 }
76082 real_packet->sub_tgt_kind = readin;
76083 }
76084 }
76085
76086 if (BV_ISSET(fields, 9)) {
76087 log_packet_detailed(" got field 'min_distance'");
76088
76089#ifdef FREECIV_JSON_CONNECTION
76090 field_addr.name = "min_distance";
76091#endif /* FREECIV_JSON_CONNECTION */
76092
76093 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
76094 RECEIVE_PACKET_FIELD_ERROR(min_distance);
76095 }
76096 }
76097
76098 if (BV_ISSET(fields, 10)) {
76099 log_packet_detailed(" got field 'max_distance'");
76100
76101#ifdef FREECIV_JSON_CONNECTION
76102 field_addr.name = "max_distance";
76103#endif /* FREECIV_JSON_CONNECTION */
76104
76105 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76106 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76107 }
76108 }
76109
76110 if (BV_ISSET(fields, 11)) {
76111 log_packet_detailed(" got field 'blocked_by'");
76112
76113#ifdef FREECIV_JSON_CONNECTION
76114 field_addr.name = "blocked_by";
76115#endif /* FREECIV_JSON_CONNECTION */
76116
76117 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76118 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76119 }
76120 }
76121
76122 if (nullptr == old) {
76123 old = fc_malloc(sizeof(*old));
76125 *old = *real_packet;
76127 } else {
76128 *old = *real_packet;
76129 }
76130
76131#else /* FREECIV_DELTA_PROTOCOL */
76132#ifdef FREECIV_JSON_CONNECTION
76133 field_addr.name = "id";
76134#endif /* FREECIV_JSON_CONNECTION */
76135
76136 {
76137 int readin;
76138
76139 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76141 }
76142 real_packet->id = readin;
76143 }
76144
76145#ifdef FREECIV_JSON_CONNECTION
76146 field_addr.name = "ui_name";
76147#endif /* FREECIV_JSON_CONNECTION */
76148
76149 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
76151 }
76152
76153#ifdef FREECIV_JSON_CONNECTION
76154 field_addr.name = "quiet";
76155#endif /* FREECIV_JSON_CONNECTION */
76156
76157 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
76159 }
76160
76161#ifdef FREECIV_JSON_CONNECTION
76162 field_addr.name = "result";
76163#endif /* FREECIV_JSON_CONNECTION */
76164
76165 {
76166 int readin;
76167
76168 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76170 }
76171 real_packet->result = readin;
76172 }
76173
76174#ifdef FREECIV_JSON_CONNECTION
76175 field_addr.name = "sub_results";
76176#endif /* FREECIV_JSON_CONNECTION */
76177
76178 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
76179 RECEIVE_PACKET_FIELD_ERROR(sub_results);
76180 }
76181
76182#ifdef FREECIV_JSON_CONNECTION
76183 field_addr.name = "actor_consuming_always";
76184#endif /* FREECIV_JSON_CONNECTION */
76185
76186 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->actor_consuming_always)) {
76187 RECEIVE_PACKET_FIELD_ERROR(actor_consuming_always);
76188 }
76189
76190#ifdef FREECIV_JSON_CONNECTION
76191 field_addr.name = "act_kind";
76192#endif /* FREECIV_JSON_CONNECTION */
76193
76194 {
76195 int readin;
76196
76197 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76199 }
76200 real_packet->act_kind = readin;
76201 }
76202
76203#ifdef FREECIV_JSON_CONNECTION
76204 field_addr.name = "tgt_kind";
76205#endif /* FREECIV_JSON_CONNECTION */
76206
76207 {
76208 int readin;
76209
76210 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76212 }
76213 real_packet->tgt_kind = readin;
76214 }
76215
76216#ifdef FREECIV_JSON_CONNECTION
76217 field_addr.name = "sub_tgt_kind";
76218#endif /* FREECIV_JSON_CONNECTION */
76219
76220 {
76221 int readin;
76222
76223 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76224 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
76225 }
76226 real_packet->sub_tgt_kind = readin;
76227 }
76228
76229#ifdef FREECIV_JSON_CONNECTION
76230 field_addr.name = "min_distance";
76231#endif /* FREECIV_JSON_CONNECTION */
76232
76233 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
76234 RECEIVE_PACKET_FIELD_ERROR(min_distance);
76235 }
76236
76237#ifdef FREECIV_JSON_CONNECTION
76238 field_addr.name = "max_distance";
76239#endif /* FREECIV_JSON_CONNECTION */
76240
76241 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
76242 RECEIVE_PACKET_FIELD_ERROR(max_distance);
76243 }
76244
76245#ifdef FREECIV_JSON_CONNECTION
76246 field_addr.name = "blocked_by";
76247#endif /* FREECIV_JSON_CONNECTION */
76248
76249 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
76250 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
76251 }
76252#endif /* FREECIV_DELTA_PROTOCOL */
76253
76255#undef FREE_PACKET_STRUCT
76256}
76257
76259{
76260 const struct packet_ruleset_action *real_packet = packet;
76261 int e;
76263
76264 log_packet_detailed("packet_ruleset_action_100: sending info about ()");
76265
76266#ifdef FREECIV_DELTA_PROTOCOL
76268 struct packet_ruleset_action *old;
76269 bool differ;
76270 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION;
76271
76272 if (nullptr == *hash) {
76274 nullptr, nullptr, nullptr, destroy_packet_ruleset_action);
76275 }
76276 BV_CLR_ALL(fields);
76277
76278 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76279 old = fc_malloc(sizeof(*old));
76280 /* temporary bitcopy just to insert correctly */
76281 *old = *real_packet;
76284 }
76285
76286 differ = (old->id != real_packet->id);
76287 if (differ) {
76288 BV_SET(fields, 0);
76289 }
76290
76291 differ = (strcmp(old->ui_name, real_packet->ui_name) != 0);
76292 if (differ) {
76293 BV_SET(fields, 1);
76294 }
76295
76296 /* folded into head */
76297 if (real_packet->quiet) {
76298 BV_SET(fields, 2);
76299 }
76300
76301 differ = (old->result != real_packet->result);
76302 if (differ) {
76303 BV_SET(fields, 3);
76304 }
76305
76306 differ = !BV_ARE_EQUAL(old->sub_results, real_packet->sub_results);
76307 if (differ) {
76308 BV_SET(fields, 4);
76309 }
76310
76311 /* folded into head */
76312 if (real_packet->actor_consuming_always) {
76313 BV_SET(fields, 5);
76314 }
76315
76316 differ = (old->act_kind != real_packet->act_kind);
76317 if (differ) {
76318 BV_SET(fields, 6);
76319 }
76320
76321 differ = (old->tgt_kind != real_packet->tgt_kind);
76322 if (differ) {
76323 BV_SET(fields, 7);
76324 }
76325
76326 differ = (old->sub_tgt_kind != real_packet->sub_tgt_kind);
76327 if (differ) {
76328 BV_SET(fields, 8);
76329 }
76330
76331 differ = (old->min_distance != real_packet->min_distance);
76332 if (differ) {
76333 BV_SET(fields, 9);
76334 }
76335
76336 differ = (old->max_distance != real_packet->max_distance);
76337 if (differ) {
76338 BV_SET(fields, 10);
76339 }
76340
76341 differ = !BV_ARE_EQUAL(old->blocked_by, real_packet->blocked_by);
76342 if (differ) {
76343 BV_SET(fields, 11);
76344 }
76345#endif /* FREECIV_DELTA_PROTOCOL */
76346
76347#ifdef FREECIV_JSON_CONNECTION
76348 struct plocation field_addr;
76349 {
76350 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76353 }
76354#endif /* FREECIV_JSON_CONNECTION */
76355
76356#ifdef FREECIV_DELTA_PROTOCOL
76357#ifdef FREECIV_JSON_CONNECTION
76358 field_addr.name = "fields";
76359#endif /* FREECIV_JSON_CONNECTION */
76360 e = 0;
76361 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76362 if (e) {
76363 log_packet_detailed("fields bitvector error detected");
76364 }
76365
76366 if (BV_ISSET(fields, 0)) {
76367 log_packet_detailed(" field 'id' has changed");
76368
76369#ifdef FREECIV_JSON_CONNECTION
76370 field_addr.name = "id";
76371#endif /* FREECIV_JSON_CONNECTION */
76372 e = 0;
76373
76374 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76375
76376 if (e) {
76377 log_packet_detailed("'id' field error detected");
76378 }
76379 }
76380
76381 if (BV_ISSET(fields, 1)) {
76382 log_packet_detailed(" field 'ui_name' has changed");
76383
76384#ifdef FREECIV_JSON_CONNECTION
76385 field_addr.name = "ui_name";
76386#endif /* FREECIV_JSON_CONNECTION */
76387 e = 0;
76388
76389 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76390
76391 if (e) {
76392 log_packet_detailed("'ui_name' field error detected");
76393 }
76394 }
76395
76396 /* field 2 is folded into the header */
76397
76398 if (BV_ISSET(fields, 3)) {
76399 log_packet_detailed(" field 'result' has changed");
76400
76401#ifdef FREECIV_JSON_CONNECTION
76402 field_addr.name = "result";
76403#endif /* FREECIV_JSON_CONNECTION */
76404 e = 0;
76405
76406 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76407
76408 if (e) {
76409 log_packet_detailed("'result' field error detected");
76410 }
76411 }
76412
76413 if (BV_ISSET(fields, 4)) {
76414 log_packet_detailed(" field 'sub_results' has changed");
76415
76416#ifdef FREECIV_JSON_CONNECTION
76417 field_addr.name = "sub_results";
76418#endif /* FREECIV_JSON_CONNECTION */
76419 e = 0;
76420
76421 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76422
76423 if (e) {
76424 log_packet_detailed("'sub_results' field error detected");
76425 }
76426 }
76427
76428 /* field 5 is folded into the header */
76429
76430 if (BV_ISSET(fields, 6)) {
76431 log_packet_detailed(" field 'act_kind' has changed");
76432
76433#ifdef FREECIV_JSON_CONNECTION
76434 field_addr.name = "act_kind";
76435#endif /* FREECIV_JSON_CONNECTION */
76436 e = 0;
76437
76438 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76439
76440 if (e) {
76441 log_packet_detailed("'act_kind' field error detected");
76442 }
76443 }
76444
76445 if (BV_ISSET(fields, 7)) {
76446 log_packet_detailed(" field 'tgt_kind' has changed");
76447
76448#ifdef FREECIV_JSON_CONNECTION
76449 field_addr.name = "tgt_kind";
76450#endif /* FREECIV_JSON_CONNECTION */
76451 e = 0;
76452
76453 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76454
76455 if (e) {
76456 log_packet_detailed("'tgt_kind' field error detected");
76457 }
76458 }
76459
76460 if (BV_ISSET(fields, 8)) {
76461 log_packet_detailed(" field 'sub_tgt_kind' has changed");
76462
76463#ifdef FREECIV_JSON_CONNECTION
76464 field_addr.name = "sub_tgt_kind";
76465#endif /* FREECIV_JSON_CONNECTION */
76466 e = 0;
76467
76468 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76469
76470 if (e) {
76471 log_packet_detailed("'sub_tgt_kind' field error detected");
76472 }
76473 }
76474
76475 if (BV_ISSET(fields, 9)) {
76476 log_packet_detailed(" field 'min_distance' has changed");
76477
76478#ifdef FREECIV_JSON_CONNECTION
76479 field_addr.name = "min_distance";
76480#endif /* FREECIV_JSON_CONNECTION */
76481 e = 0;
76482
76483 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
76484
76485 if (e) {
76486 log_packet_detailed("'min_distance' field error detected");
76487 }
76488 }
76489
76490 if (BV_ISSET(fields, 10)) {
76491 log_packet_detailed(" field 'max_distance' has changed");
76492
76493#ifdef FREECIV_JSON_CONNECTION
76494 field_addr.name = "max_distance";
76495#endif /* FREECIV_JSON_CONNECTION */
76496 e = 0;
76497
76498 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
76499
76500 if (e) {
76501 log_packet_detailed("'max_distance' field error detected");
76502 }
76503 }
76504
76505 if (BV_ISSET(fields, 11)) {
76506 log_packet_detailed(" field 'blocked_by' has changed");
76507
76508#ifdef FREECIV_JSON_CONNECTION
76509 field_addr.name = "blocked_by";
76510#endif /* FREECIV_JSON_CONNECTION */
76511 e = 0;
76512
76513 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
76514
76515 if (e) {
76516 log_packet_detailed("'blocked_by' field error detected");
76517 }
76518 }
76519
76520 *old = *real_packet;
76521
76522#else /* FREECIV_DELTA_PROTOCOL */
76523#ifdef FREECIV_JSON_CONNECTION
76524 field_addr.name = "id";
76525#endif /* FREECIV_JSON_CONNECTION */
76526 e = 0;
76527
76528 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76529
76530 if (e) {
76531 log_packet_detailed("'id' field error detected");
76532 }
76533
76534#ifdef FREECIV_JSON_CONNECTION
76535 field_addr.name = "ui_name";
76536#endif /* FREECIV_JSON_CONNECTION */
76537 e = 0;
76538
76539 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
76540
76541 if (e) {
76542 log_packet_detailed("'ui_name' field error detected");
76543 }
76544
76545#ifdef FREECIV_JSON_CONNECTION
76546 field_addr.name = "quiet";
76547#endif /* FREECIV_JSON_CONNECTION */
76548 e = 0;
76549
76550 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
76551
76552 if (e) {
76553 log_packet_detailed("'quiet' field error detected");
76554 }
76555
76556#ifdef FREECIV_JSON_CONNECTION
76557 field_addr.name = "result";
76558#endif /* FREECIV_JSON_CONNECTION */
76559 e = 0;
76560
76561 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
76562
76563 if (e) {
76564 log_packet_detailed("'result' field error detected");
76565 }
76566
76567#ifdef FREECIV_JSON_CONNECTION
76568 field_addr.name = "sub_results";
76569#endif /* FREECIV_JSON_CONNECTION */
76570 e = 0;
76571
76572 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->sub_results);
76573
76574 if (e) {
76575 log_packet_detailed("'sub_results' field error detected");
76576 }
76577
76578#ifdef FREECIV_JSON_CONNECTION
76579 field_addr.name = "actor_consuming_always";
76580#endif /* FREECIV_JSON_CONNECTION */
76581 e = 0;
76582
76583 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->actor_consuming_always);
76584
76585 if (e) {
76586 log_packet_detailed("'actor_consuming_always' field error detected");
76587 }
76588
76589#ifdef FREECIV_JSON_CONNECTION
76590 field_addr.name = "act_kind";
76591#endif /* FREECIV_JSON_CONNECTION */
76592 e = 0;
76593
76594 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
76595
76596 if (e) {
76597 log_packet_detailed("'act_kind' field error detected");
76598 }
76599
76600#ifdef FREECIV_JSON_CONNECTION
76601 field_addr.name = "tgt_kind";
76602#endif /* FREECIV_JSON_CONNECTION */
76603 e = 0;
76604
76605 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
76606
76607 if (e) {
76608 log_packet_detailed("'tgt_kind' field error detected");
76609 }
76610
76611#ifdef FREECIV_JSON_CONNECTION
76612 field_addr.name = "sub_tgt_kind";
76613#endif /* FREECIV_JSON_CONNECTION */
76614 e = 0;
76615
76616 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
76617
76618 if (e) {
76619 log_packet_detailed("'sub_tgt_kind' field error detected");
76620 }
76621
76622#ifdef FREECIV_JSON_CONNECTION
76623 field_addr.name = "min_distance";
76624#endif /* FREECIV_JSON_CONNECTION */
76625 e = 0;
76626
76627 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
76628
76629 if (e) {
76630 log_packet_detailed("'min_distance' field error detected");
76631 }
76632
76633#ifdef FREECIV_JSON_CONNECTION
76634 field_addr.name = "max_distance";
76635#endif /* FREECIV_JSON_CONNECTION */
76636 e = 0;
76637
76638 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
76639
76640 if (e) {
76641 log_packet_detailed("'max_distance' field error detected");
76642 }
76643
76644#ifdef FREECIV_JSON_CONNECTION
76645 field_addr.name = "blocked_by";
76646#endif /* FREECIV_JSON_CONNECTION */
76647 e = 0;
76648
76649 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->blocked_by);
76650
76651 if (e) {
76652 log_packet_detailed("'blocked_by' field error detected");
76653 }
76654#endif /* FREECIV_DELTA_PROTOCOL */
76655
76657}
76658
76660{
76661 if (!pc->used) {
76662 log_error("WARNING: trying to send data to the closed connection %s",
76664 return -1;
76665 }
76666 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION].packet != nullptr, -1,
76667 "Handler for PACKET_RULESET_ACTION not installed");
76668 return pc->phs.handlers->send[PACKET_RULESET_ACTION].packet(pc, packet);
76669}
76670
76671void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
76672{
76673 conn_list_iterate(dest, pconn) {
76676}
76677
76679{
76680 memset(packet, 0, sizeof(*packet));
76681
76684}
76685
76687{
76690}
76691
76692static inline void destroy_packet_ruleset_action_enabler(void *packet)
76693{
76695 free(packet);
76696}
76697
76698#ifdef FREECIV_DELTA_PROTOCOL
76699#define hash_packet_ruleset_action_enabler_100 hash_const
76700#define cmp_packet_ruleset_action_enabler_100 cmp_const
76702#endif /* FREECIV_DELTA_PROTOCOL */
76703
76705{
76706#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_enabler(_packet)
76708
76709#ifdef FREECIV_JSON_CONNECTION
76710 struct plocation field_addr;
76711 {
76712 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
76715 }
76716#endif /* FREECIV_JSON_CONNECTION */
76717
76718 log_packet_detailed("packet_ruleset_action_enabler_100: got info about ()");
76719
76720#ifdef FREECIV_DELTA_PROTOCOL
76723 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_ENABLER;
76724
76725 if (nullptr == *hash) {
76727 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
76728 }
76729
76730 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76731 real_packet->enabled_action = old->enabled_action;
76732 requirement_vector_copy(&real_packet->actor_reqs, &old->actor_reqs);
76733 requirement_vector_copy(&real_packet->target_reqs, &old->target_reqs);
76734 } else {
76735 /* packet is already initialized empty */
76736 log_packet_detailed(" no old info");
76737 }
76738
76739#ifdef FREECIV_JSON_CONNECTION
76740 field_addr.name = "fields";
76741#endif /* FREECIV_JSON_CONNECTION */
76742 DIO_BV_GET(&din, &field_addr, fields);
76743
76744 if (BV_ISSET(fields, 0)) {
76745 log_packet_detailed(" got field 'enabled_action'");
76746
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
76761 if (BV_ISSET(fields, 1)) {
76762 log_packet_detailed(" got field 'actor_reqs'");
76763
76764#ifdef FREECIV_JSON_CONNECTION
76765 field_addr.name = "actor_reqs";
76766#endif /* FREECIV_JSON_CONNECTION */
76767
76768 {
76769 int i;
76770
76771 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76772 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76773 }
76775
76776#ifdef FREECIV_JSON_CONNECTION
76777 /* Enter array. */
76778 field_addr.sub_location = plocation_elem_new(0);
76779#endif /* FREECIV_JSON_CONNECTION */
76780
76781 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
76782#ifdef FREECIV_JSON_CONNECTION
76783 /* Next array element */
76784 field_addr.sub_location->number = i;
76785#endif /* FREECIV_JSON_CONNECTION */
76786
76787 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
76788 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76789 }
76790 }
76791
76792#ifdef FREECIV_JSON_CONNECTION
76793 /* Exit array. */
76794 FC_FREE(field_addr.sub_location);
76795#endif /* FREECIV_JSON_CONNECTION */
76796 }
76797 }
76798
76799 if (BV_ISSET(fields, 2)) {
76800 log_packet_detailed(" got field 'target_reqs'");
76801
76802#ifdef FREECIV_JSON_CONNECTION
76803 field_addr.name = "target_reqs";
76804#endif /* FREECIV_JSON_CONNECTION */
76805
76806 {
76807 int i;
76808
76809 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76810 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76811 }
76813
76814#ifdef FREECIV_JSON_CONNECTION
76815 /* Enter array. */
76816 field_addr.sub_location = plocation_elem_new(0);
76817#endif /* FREECIV_JSON_CONNECTION */
76818
76819 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
76820#ifdef FREECIV_JSON_CONNECTION
76821 /* Next array element */
76822 field_addr.sub_location->number = i;
76823#endif /* FREECIV_JSON_CONNECTION */
76824
76825 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
76826 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76827 }
76828 }
76829
76830#ifdef FREECIV_JSON_CONNECTION
76831 /* Exit array. */
76832 FC_FREE(field_addr.sub_location);
76833#endif /* FREECIV_JSON_CONNECTION */
76834 }
76835 }
76836
76837 if (nullptr == old) {
76838 old = fc_malloc(sizeof(*old));
76840 old->enabled_action = real_packet->enabled_action;
76841 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
76842 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
76844 } else {
76845 old->enabled_action = real_packet->enabled_action;
76846 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
76847 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
76848 }
76849
76850#else /* FREECIV_DELTA_PROTOCOL */
76851#ifdef FREECIV_JSON_CONNECTION
76852 field_addr.name = "enabled_action";
76853#endif /* FREECIV_JSON_CONNECTION */
76854
76855 {
76856 int readin;
76857
76858 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76859 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
76860 }
76861 real_packet->enabled_action = readin;
76862 }
76863
76864#ifdef FREECIV_JSON_CONNECTION
76865 field_addr.name = "actor_reqs";
76866#endif /* FREECIV_JSON_CONNECTION */
76867
76868 {
76869 int i;
76870
76871 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76872 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76873 }
76875
76876#ifdef FREECIV_JSON_CONNECTION
76877 /* Enter array. */
76878 field_addr.sub_location = plocation_elem_new(0);
76879#endif /* FREECIV_JSON_CONNECTION */
76880
76881 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
76882#ifdef FREECIV_JSON_CONNECTION
76883 /* Next array element */
76884 field_addr.sub_location->number = i;
76885#endif /* FREECIV_JSON_CONNECTION */
76886
76887 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs.p[i])) {
76888 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
76889 }
76890 }
76891
76892#ifdef FREECIV_JSON_CONNECTION
76893 /* Exit array. */
76894 FC_FREE(field_addr.sub_location);
76895#endif /* FREECIV_JSON_CONNECTION */
76896 }
76897
76898#ifdef FREECIV_JSON_CONNECTION
76899 field_addr.name = "target_reqs";
76900#endif /* FREECIV_JSON_CONNECTION */
76901
76902 {
76903 int i;
76904
76905 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
76906 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76907 }
76909
76910#ifdef FREECIV_JSON_CONNECTION
76911 /* Enter array. */
76912 field_addr.sub_location = plocation_elem_new(0);
76913#endif /* FREECIV_JSON_CONNECTION */
76914
76915 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
76916#ifdef FREECIV_JSON_CONNECTION
76917 /* Next array element */
76918 field_addr.sub_location->number = i;
76919#endif /* FREECIV_JSON_CONNECTION */
76920
76921 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs.p[i])) {
76922 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
76923 }
76924 }
76925
76926#ifdef FREECIV_JSON_CONNECTION
76927 /* Exit array. */
76928 FC_FREE(field_addr.sub_location);
76929#endif /* FREECIV_JSON_CONNECTION */
76930 }
76931#endif /* FREECIV_DELTA_PROTOCOL */
76932
76934#undef FREE_PACKET_STRUCT
76935}
76936
76938{
76939 const struct packet_ruleset_action_enabler *real_packet = packet;
76940 int e;
76942
76943 log_packet_detailed("packet_ruleset_action_enabler_100: sending info about ()");
76944
76945#ifdef FREECIV_DELTA_PROTOCOL
76948 bool differ;
76949 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_ENABLER;
76950
76951 if (nullptr == *hash) {
76953 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_enabler);
76954 }
76955 BV_CLR_ALL(fields);
76956
76957 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76958 old = fc_malloc(sizeof(*old));
76959 /* temporary bitcopy just to insert correctly */
76960 *old = *real_packet;
76963 }
76964
76965 differ = (old->enabled_action != real_packet->enabled_action);
76966 if (differ) {
76967 BV_SET(fields, 0);
76968 }
76969
76970 differ = (requirement_vector_size(&old->actor_reqs) != requirement_vector_size(&real_packet->actor_reqs));
76971 if (!differ) {
76972 int i;
76973
76974 for (i = 0; i < requirement_vector_size(&old->actor_reqs); i++) {
76975 differ = !are_requirements_equal(&old->actor_reqs.p[i], &real_packet->actor_reqs.p[i]);
76976 if (differ) {
76977 break;
76978 }
76979 }
76980 }
76981 if (differ) {
76982 BV_SET(fields, 1);
76983 }
76984
76985 differ = (requirement_vector_size(&old->target_reqs) != requirement_vector_size(&real_packet->target_reqs));
76986 if (!differ) {
76987 int i;
76988
76989 for (i = 0; i < requirement_vector_size(&old->target_reqs); i++) {
76990 differ = !are_requirements_equal(&old->target_reqs.p[i], &real_packet->target_reqs.p[i]);
76991 if (differ) {
76992 break;
76993 }
76994 }
76995 }
76996 if (differ) {
76997 BV_SET(fields, 2);
76998 }
76999#endif /* FREECIV_DELTA_PROTOCOL */
77000
77001#ifdef FREECIV_JSON_CONNECTION
77002 struct plocation field_addr;
77003 {
77004 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77007 }
77008#endif /* FREECIV_JSON_CONNECTION */
77009
77010#ifdef FREECIV_DELTA_PROTOCOL
77011#ifdef FREECIV_JSON_CONNECTION
77012 field_addr.name = "fields";
77013#endif /* FREECIV_JSON_CONNECTION */
77014 e = 0;
77015 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77016 if (e) {
77017 log_packet_detailed("fields bitvector error detected");
77018 }
77019
77020 if (BV_ISSET(fields, 0)) {
77021 log_packet_detailed(" field 'enabled_action' has changed");
77022
77023#ifdef FREECIV_JSON_CONNECTION
77024 field_addr.name = "enabled_action";
77025#endif /* FREECIV_JSON_CONNECTION */
77026 e = 0;
77027
77028 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
77029
77030 if (e) {
77031 log_packet_detailed("'enabled_action' field error detected");
77032 }
77033 }
77034
77035 if (BV_ISSET(fields, 1)) {
77036 log_packet_detailed(" field 'actor_reqs' has changed");
77037
77038#ifdef FREECIV_JSON_CONNECTION
77039 field_addr.name = "actor_reqs";
77040#endif /* FREECIV_JSON_CONNECTION */
77041 e = 0;
77042
77043 {
77044 int i;
77045
77048
77049#ifdef FREECIV_JSON_CONNECTION
77050 /* Enter array. */
77051 field_addr.sub_location = plocation_elem_new(0);
77052#endif /* FREECIV_JSON_CONNECTION */
77053
77054 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77055#ifdef FREECIV_JSON_CONNECTION
77056 /* Next array element. */
77057 field_addr.sub_location->number = i;
77058#endif /* FREECIV_JSON_CONNECTION */
77059
77060 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
77061 }
77062
77063#ifdef FREECIV_JSON_CONNECTION
77064 /* Exit array. */
77065 FC_FREE(field_addr.sub_location);
77066#endif /* FREECIV_JSON_CONNECTION */
77067 }
77068
77069 if (e) {
77070 log_packet_detailed("'actor_reqs' field error detected");
77071 }
77072 }
77073
77074 if (BV_ISSET(fields, 2)) {
77075 log_packet_detailed(" field 'target_reqs' has changed");
77076
77077#ifdef FREECIV_JSON_CONNECTION
77078 field_addr.name = "target_reqs";
77079#endif /* FREECIV_JSON_CONNECTION */
77080 e = 0;
77081
77082 {
77083 int i;
77084
77087
77088#ifdef FREECIV_JSON_CONNECTION
77089 /* Enter array. */
77090 field_addr.sub_location = plocation_elem_new(0);
77091#endif /* FREECIV_JSON_CONNECTION */
77092
77093 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77094#ifdef FREECIV_JSON_CONNECTION
77095 /* Next array element. */
77096 field_addr.sub_location->number = i;
77097#endif /* FREECIV_JSON_CONNECTION */
77098
77099 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
77100 }
77101
77102#ifdef FREECIV_JSON_CONNECTION
77103 /* Exit array. */
77104 FC_FREE(field_addr.sub_location);
77105#endif /* FREECIV_JSON_CONNECTION */
77106 }
77107
77108 if (e) {
77109 log_packet_detailed("'target_reqs' field error detected");
77110 }
77111 }
77112
77113 old->enabled_action = real_packet->enabled_action;
77114 requirement_vector_copy(&old->actor_reqs, &real_packet->actor_reqs);
77115 requirement_vector_copy(&old->target_reqs, &real_packet->target_reqs);
77116
77117#else /* FREECIV_DELTA_PROTOCOL */
77118#ifdef FREECIV_JSON_CONNECTION
77119 field_addr.name = "enabled_action";
77120#endif /* FREECIV_JSON_CONNECTION */
77121 e = 0;
77122
77123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
77124
77125 if (e) {
77126 log_packet_detailed("'enabled_action' field error detected");
77127 }
77128
77129#ifdef FREECIV_JSON_CONNECTION
77130 field_addr.name = "actor_reqs";
77131#endif /* FREECIV_JSON_CONNECTION */
77132 e = 0;
77133
77134 {
77135 int i;
77136
77139
77140#ifdef FREECIV_JSON_CONNECTION
77141 /* Enter array. */
77142 field_addr.sub_location = plocation_elem_new(0);
77143#endif /* FREECIV_JSON_CONNECTION */
77144
77145 for (i = 0; i < requirement_vector_size(&real_packet->actor_reqs); i++) {
77146#ifdef FREECIV_JSON_CONNECTION
77147 /* Next array element. */
77148 field_addr.sub_location->number = i;
77149#endif /* FREECIV_JSON_CONNECTION */
77150
77151 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs.p[i]);
77152 }
77153
77154#ifdef FREECIV_JSON_CONNECTION
77155 /* Exit array. */
77156 FC_FREE(field_addr.sub_location);
77157#endif /* FREECIV_JSON_CONNECTION */
77158 }
77159
77160 if (e) {
77161 log_packet_detailed("'actor_reqs' field error detected");
77162 }
77163
77164#ifdef FREECIV_JSON_CONNECTION
77165 field_addr.name = "target_reqs";
77166#endif /* FREECIV_JSON_CONNECTION */
77167 e = 0;
77168
77169 {
77170 int i;
77171
77174
77175#ifdef FREECIV_JSON_CONNECTION
77176 /* Enter array. */
77177 field_addr.sub_location = plocation_elem_new(0);
77178#endif /* FREECIV_JSON_CONNECTION */
77179
77180 for (i = 0; i < requirement_vector_size(&real_packet->target_reqs); i++) {
77181#ifdef FREECIV_JSON_CONNECTION
77182 /* Next array element. */
77183 field_addr.sub_location->number = i;
77184#endif /* FREECIV_JSON_CONNECTION */
77185
77186 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs.p[i]);
77187 }
77188
77189#ifdef FREECIV_JSON_CONNECTION
77190 /* Exit array. */
77191 FC_FREE(field_addr.sub_location);
77192#endif /* FREECIV_JSON_CONNECTION */
77193 }
77194
77195 if (e) {
77196 log_packet_detailed("'target_reqs' field error detected");
77197 }
77198#endif /* FREECIV_DELTA_PROTOCOL */
77199
77201}
77202
77204{
77205 if (!pc->used) {
77206 log_error("WARNING: trying to send data to the closed connection %s",
77208 return -1;
77209 }
77210 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet != nullptr, -1,
77211 "Handler for PACKET_RULESET_ACTION_ENABLER not installed");
77212 return pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet(pc, packet);
77213}
77214
77221
77223{
77224 memset(packet, 0, sizeof(*packet));
77225
77226 requirement_vector_init(&packet->reqs);
77227}
77228
77230{
77231 requirement_vector_free(&packet->reqs);
77232}
77233
77234static inline void destroy_packet_ruleset_action_auto(void *packet)
77235{
77237 free(packet);
77238}
77239
77240#ifdef FREECIV_DELTA_PROTOCOL
77241#define hash_packet_ruleset_action_auto_100 hash_const
77242#define cmp_packet_ruleset_action_auto_100 cmp_const
77244#endif /* FREECIV_DELTA_PROTOCOL */
77245
77247{
77248#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_action_auto(_packet)
77250
77251#ifdef FREECIV_JSON_CONNECTION
77252 struct plocation field_addr;
77253 {
77254 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77257 }
77258#endif /* FREECIV_JSON_CONNECTION */
77259
77260 log_packet_detailed("packet_ruleset_action_auto_100: got info about ()");
77261
77262#ifdef FREECIV_DELTA_PROTOCOL
77265 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_AUTO;
77266
77267 if (nullptr == *hash) {
77269 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77270 }
77271
77272 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77273 real_packet->id = old->id;
77274 real_packet->cause = old->cause;
77275 requirement_vector_copy(&real_packet->reqs, &old->reqs);
77276 real_packet->alternatives_count = old->alternatives_count;
77277 {
77278 int i;
77279
77280 for (i = 0; i < old->alternatives_count; i++) {
77281 real_packet->alternatives[i] = old->alternatives[i];
77282 }
77283 }
77284 } else {
77285 /* packet is already initialized empty */
77286 log_packet_detailed(" no old info");
77287 }
77288
77289#ifdef FREECIV_JSON_CONNECTION
77290 field_addr.name = "fields";
77291#endif /* FREECIV_JSON_CONNECTION */
77292 DIO_BV_GET(&din, &field_addr, fields);
77293
77294 if (BV_ISSET(fields, 0)) {
77295 log_packet_detailed(" got field 'id'");
77296
77297#ifdef FREECIV_JSON_CONNECTION
77298 field_addr.name = "id";
77299#endif /* FREECIV_JSON_CONNECTION */
77300
77301 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77303 }
77304 }
77305
77306 if (BV_ISSET(fields, 1)) {
77307 log_packet_detailed(" got field 'cause'");
77308
77309#ifdef FREECIV_JSON_CONNECTION
77310 field_addr.name = "cause";
77311#endif /* FREECIV_JSON_CONNECTION */
77312
77313 {
77314 int readin;
77315
77316 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77318 }
77319 real_packet->cause = readin;
77320 }
77321 }
77322
77323 if (BV_ISSET(fields, 2)) {
77324 log_packet_detailed(" got field 'reqs'");
77325
77326#ifdef FREECIV_JSON_CONNECTION
77327 field_addr.name = "reqs";
77328#endif /* FREECIV_JSON_CONNECTION */
77329
77330 {
77331 int i;
77332
77333 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77335 }
77337
77338#ifdef FREECIV_JSON_CONNECTION
77339 /* Enter array. */
77340 field_addr.sub_location = plocation_elem_new(0);
77341#endif /* FREECIV_JSON_CONNECTION */
77342
77343 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77344#ifdef FREECIV_JSON_CONNECTION
77345 /* Next array element */
77346 field_addr.sub_location->number = i;
77347#endif /* FREECIV_JSON_CONNECTION */
77348
77349 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77351 }
77352 }
77353
77354#ifdef FREECIV_JSON_CONNECTION
77355 /* Exit array. */
77356 FC_FREE(field_addr.sub_location);
77357#endif /* FREECIV_JSON_CONNECTION */
77358 }
77359 }
77360
77361 if (BV_ISSET(fields, 3)) {
77362 log_packet_detailed(" got field 'alternatives_count'");
77363
77364#ifdef FREECIV_JSON_CONNECTION
77365 field_addr.name = "alternatives_count";
77366#endif /* FREECIV_JSON_CONNECTION */
77367
77368 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77369 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77370 }
77371 }
77372
77373 if (BV_ISSET(fields, 4)) {
77374 log_packet_detailed(" got field 'alternatives'");
77375
77376#ifdef FREECIV_JSON_CONNECTION
77377 field_addr.name = "alternatives";
77378#endif /* FREECIV_JSON_CONNECTION */
77379
77380 {
77381 int i;
77382
77383 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77384 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77385 }
77386
77387#ifdef FREECIV_JSON_CONNECTION
77388 /* Enter array. */
77389 field_addr.sub_location = plocation_elem_new(0);
77390#endif /* FREECIV_JSON_CONNECTION */
77391
77392 for (i = 0; i < real_packet->alternatives_count; i++) {
77393#ifdef FREECIV_JSON_CONNECTION
77394 /* Next array element */
77395 field_addr.sub_location->number = i;
77396#endif /* FREECIV_JSON_CONNECTION */
77397
77398 {
77399 int readin;
77400
77401 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77402 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77403 }
77404 real_packet->alternatives[i] = readin;
77405 }
77406 }
77407
77408#ifdef FREECIV_JSON_CONNECTION
77409 /* Exit array. */
77410 FC_FREE(field_addr.sub_location);
77411#endif /* FREECIV_JSON_CONNECTION */
77412 }
77413 }
77414
77415 if (nullptr == old) {
77416 old = fc_malloc(sizeof(*old));
77418 old->id = real_packet->id;
77419 old->cause = real_packet->cause;
77420 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77421 old->alternatives_count = real_packet->alternatives_count;
77422 {
77423 int i;
77424
77425 for (i = 0; i < real_packet->alternatives_count; i++) {
77426 old->alternatives[i] = real_packet->alternatives[i];
77427 }
77428 }
77430 } else {
77431 old->id = real_packet->id;
77432 old->cause = real_packet->cause;
77433 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77434 old->alternatives_count = real_packet->alternatives_count;
77435 {
77436 int i;
77437
77438 for (i = 0; i < real_packet->alternatives_count; i++) {
77439 old->alternatives[i] = real_packet->alternatives[i];
77440 }
77441 }
77442 }
77443
77444#else /* FREECIV_DELTA_PROTOCOL */
77445#ifdef FREECIV_JSON_CONNECTION
77446 field_addr.name = "id";
77447#endif /* FREECIV_JSON_CONNECTION */
77448
77449 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
77451 }
77452
77453#ifdef FREECIV_JSON_CONNECTION
77454 field_addr.name = "cause";
77455#endif /* FREECIV_JSON_CONNECTION */
77456
77457 {
77458 int readin;
77459
77460 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77462 }
77463 real_packet->cause = readin;
77464 }
77465
77466#ifdef FREECIV_JSON_CONNECTION
77467 field_addr.name = "reqs";
77468#endif /* FREECIV_JSON_CONNECTION */
77469
77470 {
77471 int i;
77472
77473 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
77475 }
77477
77478#ifdef FREECIV_JSON_CONNECTION
77479 /* Enter array. */
77480 field_addr.sub_location = plocation_elem_new(0);
77481#endif /* FREECIV_JSON_CONNECTION */
77482
77483 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77484#ifdef FREECIV_JSON_CONNECTION
77485 /* Next array element */
77486 field_addr.sub_location->number = i;
77487#endif /* FREECIV_JSON_CONNECTION */
77488
77489 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
77491 }
77492 }
77493
77494#ifdef FREECIV_JSON_CONNECTION
77495 /* Exit array. */
77496 FC_FREE(field_addr.sub_location);
77497#endif /* FREECIV_JSON_CONNECTION */
77498 }
77499
77500#ifdef FREECIV_JSON_CONNECTION
77501 field_addr.name = "alternatives_count";
77502#endif /* FREECIV_JSON_CONNECTION */
77503
77504 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
77505 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
77506 }
77507
77508#ifdef FREECIV_JSON_CONNECTION
77509 field_addr.name = "alternatives";
77510#endif /* FREECIV_JSON_CONNECTION */
77511
77512 {
77513 int i;
77514
77515 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
77516 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": array truncated");
77517 }
77518
77519#ifdef FREECIV_JSON_CONNECTION
77520 /* Enter array. */
77521 field_addr.sub_location = plocation_elem_new(0);
77522#endif /* FREECIV_JSON_CONNECTION */
77523
77524 for (i = 0; i < real_packet->alternatives_count; i++) {
77525#ifdef FREECIV_JSON_CONNECTION
77526 /* Next array element */
77527 field_addr.sub_location->number = i;
77528#endif /* FREECIV_JSON_CONNECTION */
77529
77530 {
77531 int readin;
77532
77533 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77534 RECEIVE_PACKET_FIELD_ERROR(alternatives);
77535 }
77536 real_packet->alternatives[i] = readin;
77537 }
77538 }
77539
77540#ifdef FREECIV_JSON_CONNECTION
77541 /* Exit array. */
77542 FC_FREE(field_addr.sub_location);
77543#endif /* FREECIV_JSON_CONNECTION */
77544 }
77545#endif /* FREECIV_DELTA_PROTOCOL */
77546
77548#undef FREE_PACKET_STRUCT
77549}
77550
77552{
77553 const struct packet_ruleset_action_auto *real_packet = packet;
77554 int e;
77556
77557 log_packet_detailed("packet_ruleset_action_auto_100: sending info about ()");
77558
77559#ifdef FREECIV_DELTA_PROTOCOL
77562 bool differ;
77563 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_AUTO;
77564
77565 if (nullptr == *hash) {
77567 nullptr, nullptr, nullptr, destroy_packet_ruleset_action_auto);
77568 }
77569 BV_CLR_ALL(fields);
77570
77571 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77572 old = fc_malloc(sizeof(*old));
77573 /* temporary bitcopy just to insert correctly */
77574 *old = *real_packet;
77577 }
77578
77579 differ = (old->id != real_packet->id);
77580 if (differ) {
77581 BV_SET(fields, 0);
77582 }
77583
77584 differ = (old->cause != real_packet->cause);
77585 if (differ) {
77586 BV_SET(fields, 1);
77587 }
77588
77590 if (!differ) {
77591 int i;
77592
77593 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
77594 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
77595 if (differ) {
77596 break;
77597 }
77598 }
77599 }
77600 if (differ) {
77601 BV_SET(fields, 2);
77602 }
77603
77604 differ = (old->alternatives_count != real_packet->alternatives_count);
77605 if (differ) {
77606 BV_SET(fields, 3);
77607 }
77608
77609 differ = (old->alternatives_count != real_packet->alternatives_count);
77610 if (!differ) {
77611 int i;
77612
77613 for (i = 0; i < old->alternatives_count; i++) {
77614 differ = (old->alternatives[i] != real_packet->alternatives[i]);
77615 if (differ) {
77616 break;
77617 }
77618 }
77619 }
77620 if (differ) {
77621 BV_SET(fields, 4);
77622 }
77623#endif /* FREECIV_DELTA_PROTOCOL */
77624
77625#ifdef FREECIV_JSON_CONNECTION
77626 struct plocation field_addr;
77627 {
77628 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77631 }
77632#endif /* FREECIV_JSON_CONNECTION */
77633
77634#ifdef FREECIV_DELTA_PROTOCOL
77635#ifdef FREECIV_JSON_CONNECTION
77636 field_addr.name = "fields";
77637#endif /* FREECIV_JSON_CONNECTION */
77638 e = 0;
77639 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77640 if (e) {
77641 log_packet_detailed("fields bitvector error detected");
77642 }
77643
77644 if (BV_ISSET(fields, 0)) {
77645 log_packet_detailed(" field 'id' has changed");
77646
77647#ifdef FREECIV_JSON_CONNECTION
77648 field_addr.name = "id";
77649#endif /* FREECIV_JSON_CONNECTION */
77650 e = 0;
77651
77652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
77653
77654 if (e) {
77655 log_packet_detailed("'id' field error detected");
77656 }
77657 }
77658
77659 if (BV_ISSET(fields, 1)) {
77660 log_packet_detailed(" field 'cause' has changed");
77661
77662#ifdef FREECIV_JSON_CONNECTION
77663 field_addr.name = "cause";
77664#endif /* FREECIV_JSON_CONNECTION */
77665 e = 0;
77666
77667 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
77668
77669 if (e) {
77670 log_packet_detailed("'cause' field error detected");
77671 }
77672 }
77673
77674 if (BV_ISSET(fields, 2)) {
77675 log_packet_detailed(" field 'reqs' has changed");
77676
77677#ifdef FREECIV_JSON_CONNECTION
77678 field_addr.name = "reqs";
77679#endif /* FREECIV_JSON_CONNECTION */
77680 e = 0;
77681
77682 {
77683 int i;
77684
77687
77688#ifdef FREECIV_JSON_CONNECTION
77689 /* Enter array. */
77690 field_addr.sub_location = plocation_elem_new(0);
77691#endif /* FREECIV_JSON_CONNECTION */
77692
77693 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77694#ifdef FREECIV_JSON_CONNECTION
77695 /* Next array element. */
77696 field_addr.sub_location->number = i;
77697#endif /* FREECIV_JSON_CONNECTION */
77698
77699 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
77700 }
77701
77702#ifdef FREECIV_JSON_CONNECTION
77703 /* Exit array. */
77704 FC_FREE(field_addr.sub_location);
77705#endif /* FREECIV_JSON_CONNECTION */
77706 }
77707
77708 if (e) {
77709 log_packet_detailed("'reqs' field error detected");
77710 }
77711 }
77712
77713 if (BV_ISSET(fields, 3)) {
77714 log_packet_detailed(" field 'alternatives_count' has changed");
77715
77716#ifdef FREECIV_JSON_CONNECTION
77717 field_addr.name = "alternatives_count";
77718#endif /* FREECIV_JSON_CONNECTION */
77719 e = 0;
77720
77721 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
77722
77723 if (e) {
77724 log_packet_detailed("'alternatives_count' field error detected");
77725 }
77726 }
77727
77728 if (BV_ISSET(fields, 4)) {
77729 log_packet_detailed(" field 'alternatives' has changed");
77730
77731#ifdef FREECIV_JSON_CONNECTION
77732 field_addr.name = "alternatives";
77733#endif /* FREECIV_JSON_CONNECTION */
77734 e = 0;
77735
77736 {
77737 int i;
77738
77739#ifdef FREECIV_JSON_CONNECTION
77740 /* Create the array. */
77741 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
77742
77743 /* Enter array. */
77744 field_addr.sub_location = plocation_elem_new(0);
77745#endif /* FREECIV_JSON_CONNECTION */
77746
77747 for (i = 0; i < real_packet->alternatives_count; i++) {
77748#ifdef FREECIV_JSON_CONNECTION
77749 /* Next array element. */
77750 field_addr.sub_location->number = i;
77751#endif /* FREECIV_JSON_CONNECTION */
77752
77753 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
77754 }
77755
77756#ifdef FREECIV_JSON_CONNECTION
77757 /* Exit array. */
77758 FC_FREE(field_addr.sub_location);
77759#endif /* FREECIV_JSON_CONNECTION */
77760 }
77761
77762 if (e) {
77763 log_packet_detailed("'alternatives' field error detected");
77764 }
77765 }
77766
77767 old->id = real_packet->id;
77768 old->cause = real_packet->cause;
77769 requirement_vector_copy(&old->reqs, &real_packet->reqs);
77770 old->alternatives_count = real_packet->alternatives_count;
77771 {
77772 int i;
77773
77774 for (i = 0; i < real_packet->alternatives_count; i++) {
77775 old->alternatives[i] = real_packet->alternatives[i];
77776 }
77777 }
77778
77779#else /* FREECIV_DELTA_PROTOCOL */
77780#ifdef FREECIV_JSON_CONNECTION
77781 field_addr.name = "id";
77782#endif /* FREECIV_JSON_CONNECTION */
77783 e = 0;
77784
77785 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
77786
77787 if (e) {
77788 log_packet_detailed("'id' field error detected");
77789 }
77790
77791#ifdef FREECIV_JSON_CONNECTION
77792 field_addr.name = "cause";
77793#endif /* FREECIV_JSON_CONNECTION */
77794 e = 0;
77795
77796 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
77797
77798 if (e) {
77799 log_packet_detailed("'cause' field error detected");
77800 }
77801
77802#ifdef FREECIV_JSON_CONNECTION
77803 field_addr.name = "reqs";
77804#endif /* FREECIV_JSON_CONNECTION */
77805 e = 0;
77806
77807 {
77808 int i;
77809
77812
77813#ifdef FREECIV_JSON_CONNECTION
77814 /* Enter array. */
77815 field_addr.sub_location = plocation_elem_new(0);
77816#endif /* FREECIV_JSON_CONNECTION */
77817
77818 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
77819#ifdef FREECIV_JSON_CONNECTION
77820 /* Next array element. */
77821 field_addr.sub_location->number = i;
77822#endif /* FREECIV_JSON_CONNECTION */
77823
77824 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
77825 }
77826
77827#ifdef FREECIV_JSON_CONNECTION
77828 /* Exit array. */
77829 FC_FREE(field_addr.sub_location);
77830#endif /* FREECIV_JSON_CONNECTION */
77831 }
77832
77833 if (e) {
77834 log_packet_detailed("'reqs' field error detected");
77835 }
77836
77837#ifdef FREECIV_JSON_CONNECTION
77838 field_addr.name = "alternatives_count";
77839#endif /* FREECIV_JSON_CONNECTION */
77840 e = 0;
77841
77842 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
77843
77844 if (e) {
77845 log_packet_detailed("'alternatives_count' field error detected");
77846 }
77847
77848#ifdef FREECIV_JSON_CONNECTION
77849 field_addr.name = "alternatives";
77850#endif /* FREECIV_JSON_CONNECTION */
77851 e = 0;
77852
77853 {
77854 int i;
77855
77856#ifdef FREECIV_JSON_CONNECTION
77857 /* Create the array. */
77858 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
77859
77860 /* Enter array. */
77861 field_addr.sub_location = plocation_elem_new(0);
77862#endif /* FREECIV_JSON_CONNECTION */
77863
77864 for (i = 0; i < real_packet->alternatives_count; i++) {
77865#ifdef FREECIV_JSON_CONNECTION
77866 /* Next array element. */
77867 field_addr.sub_location->number = i;
77868#endif /* FREECIV_JSON_CONNECTION */
77869
77870 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
77871 }
77872
77873#ifdef FREECIV_JSON_CONNECTION
77874 /* Exit array. */
77875 FC_FREE(field_addr.sub_location);
77876#endif /* FREECIV_JSON_CONNECTION */
77877 }
77878
77879 if (e) {
77880 log_packet_detailed("'alternatives' field error detected");
77881 }
77882#endif /* FREECIV_DELTA_PROTOCOL */
77883
77885}
77886
77888{
77889 if (!pc->used) {
77890 log_error("WARNING: trying to send data to the closed connection %s",
77892 return -1;
77893 }
77894 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet != nullptr, -1,
77895 "Handler for PACKET_RULESET_ACTION_AUTO not installed");
77896 return pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet(pc, packet);
77897}
77898
77900{
77901 conn_list_iterate(dest, pconn) {
77904}
77905
77906static inline void init_packet_ruleset_counter(struct packet_ruleset_counter *packet)
77907{
77908 memset(packet, 0, sizeof(*packet));
77909
77910 packet->helptext = strvec_new();
77911}
77912
77913static inline void free_packet_ruleset_counter(struct packet_ruleset_counter *packet)
77914{
77915 if (packet->helptext) {
77916 strvec_destroy(packet->helptext);
77917 packet->helptext = nullptr;
77918 }
77919}
77920
77921static inline void destroy_packet_ruleset_counter(void *packet)
77922{
77924 free(packet);
77925}
77926
77927#ifdef FREECIV_DELTA_PROTOCOL
77928#define hash_packet_ruleset_counter_100 hash_const
77929#define cmp_packet_ruleset_counter_100 cmp_const
77931#endif /* FREECIV_DELTA_PROTOCOL */
77932
77934{
77935#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_counter(_packet)
77937
77938#ifdef FREECIV_JSON_CONNECTION
77939 struct plocation field_addr;
77940 {
77941 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
77944 }
77945#endif /* FREECIV_JSON_CONNECTION */
77946
77947 log_packet_detailed("packet_ruleset_counter_100: got info about ()");
77948
77949#ifdef FREECIV_DELTA_PROTOCOL
77952 struct genhash **hash = pc->phs.received + PACKET_RULESET_COUNTER;
77953
77954 if (nullptr == *hash) {
77956 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
77957 }
77958
77959 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77960 sz_strlcpy(real_packet->name, old->name);
77961 sz_strlcpy(real_packet->rule_name, old->rule_name);
77962 if (old->helptext) {
77963 strvec_copy(real_packet->helptext, old->helptext);
77964 } else {
77965 strvec_clear(real_packet->helptext);
77966 }
77967 real_packet->def = old->def;
77968 real_packet->checkpoint = old->checkpoint;
77969 real_packet->type = old->type;
77970 real_packet->behavior = old->behavior;
77971 } else {
77972 /* packet is already initialized empty */
77973 log_packet_detailed(" no old info");
77974 }
77975
77976#ifdef FREECIV_JSON_CONNECTION
77977 field_addr.name = "fields";
77978#endif /* FREECIV_JSON_CONNECTION */
77979 DIO_BV_GET(&din, &field_addr, fields);
77980
77981 if (BV_ISSET(fields, 0)) {
77982 log_packet_detailed(" got field 'name'");
77983
77984#ifdef FREECIV_JSON_CONNECTION
77985 field_addr.name = "name";
77986#endif /* FREECIV_JSON_CONNECTION */
77987
77988 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
77990 }
77991 }
77992
77993 if (BV_ISSET(fields, 1)) {
77994 log_packet_detailed(" got field 'rule_name'");
77995
77996#ifdef FREECIV_JSON_CONNECTION
77997 field_addr.name = "rule_name";
77998#endif /* FREECIV_JSON_CONNECTION */
77999
78000 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
78001 RECEIVE_PACKET_FIELD_ERROR(rule_name);
78002 }
78003 }
78004
78005 if (BV_ISSET(fields, 2)) {
78006 log_packet_detailed(" got field 'helptext'");
78007
78008#ifdef FREECIV_JSON_CONNECTION
78009 field_addr.name = "helptext";
78010#endif /* FREECIV_JSON_CONNECTION */
78011
78012 {
78013 int i;
78014
78015 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78017 }
78018 strvec_reserve(real_packet->helptext, i);
78019
78020#ifdef FREECIV_JSON_CONNECTION
78021 /* Enter array. */
78022 field_addr.sub_location = plocation_elem_new(0);
78023#endif /* FREECIV_JSON_CONNECTION */
78024
78025 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78026#ifdef FREECIV_JSON_CONNECTION
78027 /* Next array element */
78028 field_addr.sub_location->number = i;
78029#endif /* FREECIV_JSON_CONNECTION */
78030
78031 {
78032 char readin[MAX_LEN_PACKET];
78033
78034 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
78035 || !strvec_set(real_packet->helptext, i, readin)) {
78037 }
78038 }
78039 }
78040
78041#ifdef FREECIV_JSON_CONNECTION
78042 /* Exit array. */
78043 FC_FREE(field_addr.sub_location);
78044#endif /* FREECIV_JSON_CONNECTION */
78045 }
78046 }
78047
78048 if (BV_ISSET(fields, 3)) {
78049 log_packet_detailed(" got field 'def'");
78050
78051#ifdef FREECIV_JSON_CONNECTION
78052 field_addr.name = "def";
78053#endif /* FREECIV_JSON_CONNECTION */
78054
78055 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
78057 }
78058 }
78059
78060 if (BV_ISSET(fields, 4)) {
78061 log_packet_detailed(" got field 'checkpoint'");
78062
78063#ifdef FREECIV_JSON_CONNECTION
78064 field_addr.name = "checkpoint";
78065#endif /* FREECIV_JSON_CONNECTION */
78066
78067 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
78068 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
78069 }
78070 }
78071
78072 if (BV_ISSET(fields, 5)) {
78073 log_packet_detailed(" got field 'type'");
78074
78075#ifdef FREECIV_JSON_CONNECTION
78076 field_addr.name = "type";
78077#endif /* FREECIV_JSON_CONNECTION */
78078
78079 {
78080 int readin;
78081
78082 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78084 }
78085 real_packet->type = readin;
78086 }
78087 }
78088
78089 if (BV_ISSET(fields, 6)) {
78090 log_packet_detailed(" got field 'behavior'");
78091
78092#ifdef FREECIV_JSON_CONNECTION
78093 field_addr.name = "behavior";
78094#endif /* FREECIV_JSON_CONNECTION */
78095
78096 {
78097 int readin;
78098
78099 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78101 }
78102 real_packet->behavior = readin;
78103 }
78104 }
78105
78106 if (nullptr == old) {
78107 old = fc_malloc(sizeof(*old));
78109 sz_strlcpy(old->name, real_packet->name);
78110 sz_strlcpy(old->rule_name, real_packet->rule_name);
78111 if (real_packet->helptext) {
78112 strvec_copy(old->helptext, real_packet->helptext);
78113 } else {
78114 strvec_clear(old->helptext);
78115 }
78116 old->def = real_packet->def;
78117 old->checkpoint = real_packet->checkpoint;
78118 old->type = real_packet->type;
78119 old->behavior = real_packet->behavior;
78121 } else {
78122 sz_strlcpy(old->name, real_packet->name);
78123 sz_strlcpy(old->rule_name, real_packet->rule_name);
78124 if (real_packet->helptext) {
78125 strvec_copy(old->helptext, real_packet->helptext);
78126 } else {
78127 strvec_clear(old->helptext);
78128 }
78129 old->def = real_packet->def;
78130 old->checkpoint = real_packet->checkpoint;
78131 old->type = real_packet->type;
78132 old->behavior = real_packet->behavior;
78133 }
78134
78135#else /* FREECIV_DELTA_PROTOCOL */
78136#ifdef FREECIV_JSON_CONNECTION
78137 field_addr.name = "name";
78138#endif /* FREECIV_JSON_CONNECTION */
78139
78140 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
78142 }
78143
78144#ifdef FREECIV_JSON_CONNECTION
78145 field_addr.name = "rule_name";
78146#endif /* FREECIV_JSON_CONNECTION */
78147
78148 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
78149 RECEIVE_PACKET_FIELD_ERROR(rule_name);
78150 }
78151
78152#ifdef FREECIV_JSON_CONNECTION
78153 field_addr.name = "helptext";
78154#endif /* FREECIV_JSON_CONNECTION */
78155
78156 {
78157 int i;
78158
78159 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78161 }
78162 strvec_reserve(real_packet->helptext, i);
78163
78164#ifdef FREECIV_JSON_CONNECTION
78165 /* Enter array. */
78166 field_addr.sub_location = plocation_elem_new(0);
78167#endif /* FREECIV_JSON_CONNECTION */
78168
78169 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78170#ifdef FREECIV_JSON_CONNECTION
78171 /* Next array element */
78172 field_addr.sub_location->number = i;
78173#endif /* FREECIV_JSON_CONNECTION */
78174
78175 {
78176 char readin[MAX_LEN_PACKET];
78177
78178 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
78179 || !strvec_set(real_packet->helptext, i, readin)) {
78181 }
78182 }
78183 }
78184
78185#ifdef FREECIV_JSON_CONNECTION
78186 /* Exit array. */
78187 FC_FREE(field_addr.sub_location);
78188#endif /* FREECIV_JSON_CONNECTION */
78189 }
78190
78191#ifdef FREECIV_JSON_CONNECTION
78192 field_addr.name = "def";
78193#endif /* FREECIV_JSON_CONNECTION */
78194
78195 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
78197 }
78198
78199#ifdef FREECIV_JSON_CONNECTION
78200 field_addr.name = "checkpoint";
78201#endif /* FREECIV_JSON_CONNECTION */
78202
78203 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
78204 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
78205 }
78206
78207#ifdef FREECIV_JSON_CONNECTION
78208 field_addr.name = "type";
78209#endif /* FREECIV_JSON_CONNECTION */
78210
78211 {
78212 int readin;
78213
78214 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78216 }
78217 real_packet->type = readin;
78218 }
78219
78220#ifdef FREECIV_JSON_CONNECTION
78221 field_addr.name = "behavior";
78222#endif /* FREECIV_JSON_CONNECTION */
78223
78224 {
78225 int readin;
78226
78227 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78229 }
78230 real_packet->behavior = readin;
78231 }
78232#endif /* FREECIV_DELTA_PROTOCOL */
78233
78235#undef FREE_PACKET_STRUCT
78236}
78237
78239{
78240 const struct packet_ruleset_counter *real_packet = packet;
78241 int e;
78243
78244 log_packet_detailed("packet_ruleset_counter_100: sending info about ()");
78245
78246#ifdef FREECIV_DELTA_PROTOCOL
78249 bool differ;
78250 struct genhash **hash = pc->phs.sent + PACKET_RULESET_COUNTER;
78251
78252 if (nullptr == *hash) {
78254 nullptr, nullptr, nullptr, destroy_packet_ruleset_counter);
78255 }
78256 BV_CLR_ALL(fields);
78257
78258 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78259 old = fc_malloc(sizeof(*old));
78260 /* temporary bitcopy just to insert correctly */
78261 *old = *real_packet;
78264 }
78265
78266 differ = (strcmp(old->name, real_packet->name) != 0);
78267 if (differ) {
78268 BV_SET(fields, 0);
78269 }
78270
78271 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
78272 if (differ) {
78273 BV_SET(fields, 1);
78274 }
78275
78276 if (real_packet->helptext) {
78277 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
78278 } else {
78279 differ = (strvec_size(old->helptext) > 0);
78280 }
78281 if (differ) {
78282 BV_SET(fields, 2);
78283 }
78284
78285 differ = (old->def != real_packet->def);
78286 if (differ) {
78287 BV_SET(fields, 3);
78288 }
78289
78290 differ = (old->checkpoint != real_packet->checkpoint);
78291 if (differ) {
78292 BV_SET(fields, 4);
78293 }
78294
78295 differ = (old->type != real_packet->type);
78296 if (differ) {
78297 BV_SET(fields, 5);
78298 }
78299
78300 differ = (old->behavior != real_packet->behavior);
78301 if (differ) {
78302 BV_SET(fields, 6);
78303 }
78304#endif /* FREECIV_DELTA_PROTOCOL */
78305
78306#ifdef FREECIV_JSON_CONNECTION
78307 struct plocation field_addr;
78308 {
78309 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78312 }
78313#endif /* FREECIV_JSON_CONNECTION */
78314
78315#ifdef FREECIV_DELTA_PROTOCOL
78316#ifdef FREECIV_JSON_CONNECTION
78317 field_addr.name = "fields";
78318#endif /* FREECIV_JSON_CONNECTION */
78319 e = 0;
78320 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78321 if (e) {
78322 log_packet_detailed("fields bitvector error detected");
78323 }
78324
78325 if (BV_ISSET(fields, 0)) {
78326 log_packet_detailed(" field 'name' has changed");
78327
78328#ifdef FREECIV_JSON_CONNECTION
78329 field_addr.name = "name";
78330#endif /* FREECIV_JSON_CONNECTION */
78331 e = 0;
78332
78333 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78334
78335 if (e) {
78336 log_packet_detailed("'name' field error detected");
78337 }
78338 }
78339
78340 if (BV_ISSET(fields, 1)) {
78341 log_packet_detailed(" field 'rule_name' has changed");
78342
78343#ifdef FREECIV_JSON_CONNECTION
78344 field_addr.name = "rule_name";
78345#endif /* FREECIV_JSON_CONNECTION */
78346 e = 0;
78347
78348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78349
78350 if (e) {
78351 log_packet_detailed("'rule_name' field error detected");
78352 }
78353 }
78354
78355 if (BV_ISSET(fields, 2)) {
78356 log_packet_detailed(" field 'helptext' has changed");
78357
78358#ifdef FREECIV_JSON_CONNECTION
78359 field_addr.name = "helptext";
78360#endif /* FREECIV_JSON_CONNECTION */
78361 e = 0;
78362
78363 if (!real_packet->helptext) {
78364 /* Transmit null as empty */
78365 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78366 } else {
78367 int i;
78368
78370 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78371
78372#ifdef FREECIV_JSON_CONNECTION
78373 /* Enter array. */
78374 field_addr.sub_location = plocation_elem_new(0);
78375#endif /* FREECIV_JSON_CONNECTION */
78376
78377 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78378#ifdef FREECIV_JSON_CONNECTION
78379 /* Next array element. */
78380 field_addr.sub_location->number = i;
78381#endif /* FREECIV_JSON_CONNECTION */
78382
78383 {
78384 const char *pstr = strvec_get(real_packet->helptext, i);
78385
78386 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78387 }
78388 }
78389
78390#ifdef FREECIV_JSON_CONNECTION
78391 /* Exit array. */
78392 FC_FREE(field_addr.sub_location);
78393#endif /* FREECIV_JSON_CONNECTION */
78394 }
78395
78396 if (e) {
78397 log_packet_detailed("'helptext' field error detected");
78398 }
78399 }
78400
78401 if (BV_ISSET(fields, 3)) {
78402 log_packet_detailed(" field 'def' has changed");
78403
78404#ifdef FREECIV_JSON_CONNECTION
78405 field_addr.name = "def";
78406#endif /* FREECIV_JSON_CONNECTION */
78407 e = 0;
78408
78409 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78410
78411 if (e) {
78412 log_packet_detailed("'def' field error detected");
78413 }
78414 }
78415
78416 if (BV_ISSET(fields, 4)) {
78417 log_packet_detailed(" field 'checkpoint' has changed");
78418
78419#ifdef FREECIV_JSON_CONNECTION
78420 field_addr.name = "checkpoint";
78421#endif /* FREECIV_JSON_CONNECTION */
78422 e = 0;
78423
78424 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78425
78426 if (e) {
78427 log_packet_detailed("'checkpoint' field error detected");
78428 }
78429 }
78430
78431 if (BV_ISSET(fields, 5)) {
78432 log_packet_detailed(" field 'type' has changed");
78433
78434#ifdef FREECIV_JSON_CONNECTION
78435 field_addr.name = "type";
78436#endif /* FREECIV_JSON_CONNECTION */
78437 e = 0;
78438
78439 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78440
78441 if (e) {
78442 log_packet_detailed("'type' field error detected");
78443 }
78444 }
78445
78446 if (BV_ISSET(fields, 6)) {
78447 log_packet_detailed(" field 'behavior' has changed");
78448
78449#ifdef FREECIV_JSON_CONNECTION
78450 field_addr.name = "behavior";
78451#endif /* FREECIV_JSON_CONNECTION */
78452 e = 0;
78453
78454 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78455
78456 if (e) {
78457 log_packet_detailed("'behavior' field error detected");
78458 }
78459 }
78460
78461 sz_strlcpy(old->name, real_packet->name);
78462 sz_strlcpy(old->rule_name, real_packet->rule_name);
78463 if (real_packet->helptext) {
78464 strvec_copy(old->helptext, real_packet->helptext);
78465 } else {
78466 strvec_clear(old->helptext);
78467 }
78468 old->def = real_packet->def;
78469 old->checkpoint = real_packet->checkpoint;
78470 old->type = real_packet->type;
78471 old->behavior = real_packet->behavior;
78472
78473#else /* FREECIV_DELTA_PROTOCOL */
78474#ifdef FREECIV_JSON_CONNECTION
78475 field_addr.name = "name";
78476#endif /* FREECIV_JSON_CONNECTION */
78477 e = 0;
78478
78479 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
78480
78481 if (e) {
78482 log_packet_detailed("'name' field error detected");
78483 }
78484
78485#ifdef FREECIV_JSON_CONNECTION
78486 field_addr.name = "rule_name";
78487#endif /* FREECIV_JSON_CONNECTION */
78488 e = 0;
78489
78490 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
78491
78492 if (e) {
78493 log_packet_detailed("'rule_name' field error detected");
78494 }
78495
78496#ifdef FREECIV_JSON_CONNECTION
78497 field_addr.name = "helptext";
78498#endif /* FREECIV_JSON_CONNECTION */
78499 e = 0;
78500
78501 if (!real_packet->helptext) {
78502 /* Transmit null as empty */
78503 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
78504 } else {
78505 int i;
78506
78508 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
78509
78510#ifdef FREECIV_JSON_CONNECTION
78511 /* Enter array. */
78512 field_addr.sub_location = plocation_elem_new(0);
78513#endif /* FREECIV_JSON_CONNECTION */
78514
78515 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
78516#ifdef FREECIV_JSON_CONNECTION
78517 /* Next array element. */
78518 field_addr.sub_location->number = i;
78519#endif /* FREECIV_JSON_CONNECTION */
78520
78521 {
78522 const char *pstr = strvec_get(real_packet->helptext, i);
78523
78524 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
78525 }
78526 }
78527
78528#ifdef FREECIV_JSON_CONNECTION
78529 /* Exit array. */
78530 FC_FREE(field_addr.sub_location);
78531#endif /* FREECIV_JSON_CONNECTION */
78532 }
78533
78534 if (e) {
78535 log_packet_detailed("'helptext' field error detected");
78536 }
78537
78538#ifdef FREECIV_JSON_CONNECTION
78539 field_addr.name = "def";
78540#endif /* FREECIV_JSON_CONNECTION */
78541 e = 0;
78542
78543 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
78544
78545 if (e) {
78546 log_packet_detailed("'def' field error detected");
78547 }
78548
78549#ifdef FREECIV_JSON_CONNECTION
78550 field_addr.name = "checkpoint";
78551#endif /* FREECIV_JSON_CONNECTION */
78552 e = 0;
78553
78554 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
78555
78556 if (e) {
78557 log_packet_detailed("'checkpoint' field error detected");
78558 }
78559
78560#ifdef FREECIV_JSON_CONNECTION
78561 field_addr.name = "type";
78562#endif /* FREECIV_JSON_CONNECTION */
78563 e = 0;
78564
78565 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
78566
78567 if (e) {
78568 log_packet_detailed("'type' field error detected");
78569 }
78570
78571#ifdef FREECIV_JSON_CONNECTION
78572 field_addr.name = "behavior";
78573#endif /* FREECIV_JSON_CONNECTION */
78574 e = 0;
78575
78576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
78577
78578 if (e) {
78579 log_packet_detailed("'behavior' field error detected");
78580 }
78581#endif /* FREECIV_DELTA_PROTOCOL */
78582
78584}
78585
78587{
78588 if (!pc->used) {
78589 log_error("WARNING: trying to send data to the closed connection %s",
78591 return -1;
78592 }
78593 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet != nullptr, -1,
78594 "Handler for PACKET_RULESET_COUNTER not installed");
78595 return pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet(pc, packet);
78596}
78597
78598void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
78599{
78600 conn_list_iterate(dest, pconn) {
78603}
78604
78605static inline void init_packet_ruleset_music(struct packet_ruleset_music *packet)
78606{
78607 memset(packet, 0, sizeof(*packet));
78608
78609 requirement_vector_init(&packet->reqs);
78610}
78611
78612static inline void free_packet_ruleset_music(struct packet_ruleset_music *packet)
78613{
78614 requirement_vector_free(&packet->reqs);
78615}
78616
78617static inline void destroy_packet_ruleset_music(void *packet)
78618{
78620 free(packet);
78621}
78622
78623#ifdef FREECIV_DELTA_PROTOCOL
78624#define hash_packet_ruleset_music_100 hash_const
78625#define cmp_packet_ruleset_music_100 cmp_const
78627#endif /* FREECIV_DELTA_PROTOCOL */
78628
78630{
78631#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_music(_packet)
78633
78634#ifdef FREECIV_JSON_CONNECTION
78635 struct plocation field_addr;
78636 {
78637 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78640 }
78641#endif /* FREECIV_JSON_CONNECTION */
78642
78643 log_packet_detailed("packet_ruleset_music_100: got info about ()");
78644
78645#ifdef FREECIV_DELTA_PROTOCOL
78647 struct packet_ruleset_music *old;
78648 struct genhash **hash = pc->phs.received + PACKET_RULESET_MUSIC;
78649
78650 if (nullptr == *hash) {
78652 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
78653 }
78654
78655 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78656 real_packet->id = old->id;
78657 sz_strlcpy(real_packet->music_peaceful, old->music_peaceful);
78658 sz_strlcpy(real_packet->music_combat, old->music_combat);
78659 requirement_vector_copy(&real_packet->reqs, &old->reqs);
78660 } else {
78661 /* packet is already initialized empty */
78662 log_packet_detailed(" no old info");
78663 }
78664
78665#ifdef FREECIV_JSON_CONNECTION
78666 field_addr.name = "fields";
78667#endif /* FREECIV_JSON_CONNECTION */
78668 DIO_BV_GET(&din, &field_addr, fields);
78669
78670 if (BV_ISSET(fields, 0)) {
78671 log_packet_detailed(" got field 'id'");
78672
78673#ifdef FREECIV_JSON_CONNECTION
78674 field_addr.name = "id";
78675#endif /* FREECIV_JSON_CONNECTION */
78676
78677 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
78679 }
78680 }
78681
78682 if (BV_ISSET(fields, 1)) {
78683 log_packet_detailed(" got field 'music_peaceful'");
78684
78685#ifdef FREECIV_JSON_CONNECTION
78686 field_addr.name = "music_peaceful";
78687#endif /* FREECIV_JSON_CONNECTION */
78688
78689 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
78690 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
78691 }
78692 }
78693
78694 if (BV_ISSET(fields, 2)) {
78695 log_packet_detailed(" got field 'music_combat'");
78696
78697#ifdef FREECIV_JSON_CONNECTION
78698 field_addr.name = "music_combat";
78699#endif /* FREECIV_JSON_CONNECTION */
78700
78701 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
78702 RECEIVE_PACKET_FIELD_ERROR(music_combat);
78703 }
78704 }
78705
78706 if (BV_ISSET(fields, 3)) {
78707 log_packet_detailed(" got field 'reqs'");
78708
78709#ifdef FREECIV_JSON_CONNECTION
78710 field_addr.name = "reqs";
78711#endif /* FREECIV_JSON_CONNECTION */
78712
78713 {
78714 int i;
78715
78716 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78718 }
78720
78721#ifdef FREECIV_JSON_CONNECTION
78722 /* Enter array. */
78723 field_addr.sub_location = plocation_elem_new(0);
78724#endif /* FREECIV_JSON_CONNECTION */
78725
78726 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78727#ifdef FREECIV_JSON_CONNECTION
78728 /* Next array element */
78729 field_addr.sub_location->number = i;
78730#endif /* FREECIV_JSON_CONNECTION */
78731
78732 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
78734 }
78735 }
78736
78737#ifdef FREECIV_JSON_CONNECTION
78738 /* Exit array. */
78739 FC_FREE(field_addr.sub_location);
78740#endif /* FREECIV_JSON_CONNECTION */
78741 }
78742 }
78743
78744 if (nullptr == old) {
78745 old = fc_malloc(sizeof(*old));
78747 old->id = real_packet->id;
78748 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78749 sz_strlcpy(old->music_combat, real_packet->music_combat);
78750 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78752 } else {
78753 old->id = real_packet->id;
78754 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78755 sz_strlcpy(old->music_combat, real_packet->music_combat);
78756 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78757 }
78758
78759#else /* FREECIV_DELTA_PROTOCOL */
78760#ifdef FREECIV_JSON_CONNECTION
78761 field_addr.name = "id";
78762#endif /* FREECIV_JSON_CONNECTION */
78763
78764 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
78766 }
78767
78768#ifdef FREECIV_JSON_CONNECTION
78769 field_addr.name = "music_peaceful";
78770#endif /* FREECIV_JSON_CONNECTION */
78771
78772 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
78773 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
78774 }
78775
78776#ifdef FREECIV_JSON_CONNECTION
78777 field_addr.name = "music_combat";
78778#endif /* FREECIV_JSON_CONNECTION */
78779
78780 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
78781 RECEIVE_PACKET_FIELD_ERROR(music_combat);
78782 }
78783
78784#ifdef FREECIV_JSON_CONNECTION
78785 field_addr.name = "reqs";
78786#endif /* FREECIV_JSON_CONNECTION */
78787
78788 {
78789 int i;
78790
78791 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
78793 }
78795
78796#ifdef FREECIV_JSON_CONNECTION
78797 /* Enter array. */
78798 field_addr.sub_location = plocation_elem_new(0);
78799#endif /* FREECIV_JSON_CONNECTION */
78800
78801 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78802#ifdef FREECIV_JSON_CONNECTION
78803 /* Next array element */
78804 field_addr.sub_location->number = i;
78805#endif /* FREECIV_JSON_CONNECTION */
78806
78807 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
78809 }
78810 }
78811
78812#ifdef FREECIV_JSON_CONNECTION
78813 /* Exit array. */
78814 FC_FREE(field_addr.sub_location);
78815#endif /* FREECIV_JSON_CONNECTION */
78816 }
78817#endif /* FREECIV_DELTA_PROTOCOL */
78818
78820#undef FREE_PACKET_STRUCT
78821}
78822
78823static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
78824{
78825 const struct packet_ruleset_music *real_packet = packet;
78826 int e;
78828
78829 log_packet_detailed("packet_ruleset_music_100: sending info about ()");
78830
78831#ifdef FREECIV_DELTA_PROTOCOL
78833 struct packet_ruleset_music *old;
78834 bool differ;
78835 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MUSIC;
78836
78837 if (nullptr == *hash) {
78839 nullptr, nullptr, nullptr, destroy_packet_ruleset_music);
78840 }
78841 BV_CLR_ALL(fields);
78842
78843 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78844 old = fc_malloc(sizeof(*old));
78845 /* temporary bitcopy just to insert correctly */
78846 *old = *real_packet;
78849 }
78850
78851 differ = (old->id != real_packet->id);
78852 if (differ) {
78853 BV_SET(fields, 0);
78854 }
78855
78856 differ = (strcmp(old->music_peaceful, real_packet->music_peaceful) != 0);
78857 if (differ) {
78858 BV_SET(fields, 1);
78859 }
78860
78861 differ = (strcmp(old->music_combat, real_packet->music_combat) != 0);
78862 if (differ) {
78863 BV_SET(fields, 2);
78864 }
78865
78867 if (!differ) {
78868 int i;
78869
78870 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
78871 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
78872 if (differ) {
78873 break;
78874 }
78875 }
78876 }
78877 if (differ) {
78878 BV_SET(fields, 3);
78879 }
78880#endif /* FREECIV_DELTA_PROTOCOL */
78881
78882#ifdef FREECIV_JSON_CONNECTION
78883 struct plocation field_addr;
78884 {
78885 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
78888 }
78889#endif /* FREECIV_JSON_CONNECTION */
78890
78891#ifdef FREECIV_DELTA_PROTOCOL
78892#ifdef FREECIV_JSON_CONNECTION
78893 field_addr.name = "fields";
78894#endif /* FREECIV_JSON_CONNECTION */
78895 e = 0;
78896 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78897 if (e) {
78898 log_packet_detailed("fields bitvector error detected");
78899 }
78900
78901 if (BV_ISSET(fields, 0)) {
78902 log_packet_detailed(" field 'id' has changed");
78903
78904#ifdef FREECIV_JSON_CONNECTION
78905 field_addr.name = "id";
78906#endif /* FREECIV_JSON_CONNECTION */
78907 e = 0;
78908
78909 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78910
78911 if (e) {
78912 log_packet_detailed("'id' field error detected");
78913 }
78914 }
78915
78916 if (BV_ISSET(fields, 1)) {
78917 log_packet_detailed(" field 'music_peaceful' has changed");
78918
78919#ifdef FREECIV_JSON_CONNECTION
78920 field_addr.name = "music_peaceful";
78921#endif /* FREECIV_JSON_CONNECTION */
78922 e = 0;
78923
78924 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
78925
78926 if (e) {
78927 log_packet_detailed("'music_peaceful' field error detected");
78928 }
78929 }
78930
78931 if (BV_ISSET(fields, 2)) {
78932 log_packet_detailed(" field 'music_combat' has changed");
78933
78934#ifdef FREECIV_JSON_CONNECTION
78935 field_addr.name = "music_combat";
78936#endif /* FREECIV_JSON_CONNECTION */
78937 e = 0;
78938
78939 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
78940
78941 if (e) {
78942 log_packet_detailed("'music_combat' field error detected");
78943 }
78944 }
78945
78946 if (BV_ISSET(fields, 3)) {
78947 log_packet_detailed(" field 'reqs' has changed");
78948
78949#ifdef FREECIV_JSON_CONNECTION
78950 field_addr.name = "reqs";
78951#endif /* FREECIV_JSON_CONNECTION */
78952 e = 0;
78953
78954 {
78955 int i;
78956
78959
78960#ifdef FREECIV_JSON_CONNECTION
78961 /* Enter array. */
78962 field_addr.sub_location = plocation_elem_new(0);
78963#endif /* FREECIV_JSON_CONNECTION */
78964
78965 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
78966#ifdef FREECIV_JSON_CONNECTION
78967 /* Next array element. */
78968 field_addr.sub_location->number = i;
78969#endif /* FREECIV_JSON_CONNECTION */
78970
78971 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
78972 }
78973
78974#ifdef FREECIV_JSON_CONNECTION
78975 /* Exit array. */
78976 FC_FREE(field_addr.sub_location);
78977#endif /* FREECIV_JSON_CONNECTION */
78978 }
78979
78980 if (e) {
78981 log_packet_detailed("'reqs' field error detected");
78982 }
78983 }
78984
78985 old->id = real_packet->id;
78986 sz_strlcpy(old->music_peaceful, real_packet->music_peaceful);
78987 sz_strlcpy(old->music_combat, real_packet->music_combat);
78988 requirement_vector_copy(&old->reqs, &real_packet->reqs);
78989
78990#else /* FREECIV_DELTA_PROTOCOL */
78991#ifdef FREECIV_JSON_CONNECTION
78992 field_addr.name = "id";
78993#endif /* FREECIV_JSON_CONNECTION */
78994 e = 0;
78995
78996 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
78997
78998 if (e) {
78999 log_packet_detailed("'id' field error detected");
79000 }
79001
79002#ifdef FREECIV_JSON_CONNECTION
79003 field_addr.name = "music_peaceful";
79004#endif /* FREECIV_JSON_CONNECTION */
79005 e = 0;
79006
79007 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
79008
79009 if (e) {
79010 log_packet_detailed("'music_peaceful' field error detected");
79011 }
79012
79013#ifdef FREECIV_JSON_CONNECTION
79014 field_addr.name = "music_combat";
79015#endif /* FREECIV_JSON_CONNECTION */
79016 e = 0;
79017
79018 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
79019
79020 if (e) {
79021 log_packet_detailed("'music_combat' field error detected");
79022 }
79023
79024#ifdef FREECIV_JSON_CONNECTION
79025 field_addr.name = "reqs";
79026#endif /* FREECIV_JSON_CONNECTION */
79027 e = 0;
79028
79029 {
79030 int i;
79031
79034
79035#ifdef FREECIV_JSON_CONNECTION
79036 /* Enter array. */
79037 field_addr.sub_location = plocation_elem_new(0);
79038#endif /* FREECIV_JSON_CONNECTION */
79039
79040 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79041#ifdef FREECIV_JSON_CONNECTION
79042 /* Next array element. */
79043 field_addr.sub_location->number = i;
79044#endif /* FREECIV_JSON_CONNECTION */
79045
79046 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79047 }
79048
79049#ifdef FREECIV_JSON_CONNECTION
79050 /* Exit array. */
79051 FC_FREE(field_addr.sub_location);
79052#endif /* FREECIV_JSON_CONNECTION */
79053 }
79054
79055 if (e) {
79056 log_packet_detailed("'reqs' field error detected");
79057 }
79058#endif /* FREECIV_DELTA_PROTOCOL */
79059
79061}
79062
79064{
79065 if (!pc->used) {
79066 log_error("WARNING: trying to send data to the closed connection %s",
79068 return -1;
79069 }
79070 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet != nullptr, -1,
79071 "Handler for PACKET_RULESET_MUSIC not installed");
79072 return pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet(pc, packet);
79073}
79074
79075void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
79076{
79077 conn_list_iterate(dest, pconn) {
79080}
79081
79083{
79084 memset(packet, 0, sizeof(*packet));
79085
79086 requirement_vector_init(&packet->reqs);
79087 packet->helptext = strvec_new();
79088}
79089
79091{
79092 if (packet->helptext) {
79093 strvec_destroy(packet->helptext);
79094 packet->helptext = nullptr;
79095 }
79096 requirement_vector_free(&packet->reqs);
79097}
79098
79099static inline void destroy_packet_ruleset_multiplier(void *packet)
79100{
79102 free(packet);
79103}
79104
79105#ifdef FREECIV_DELTA_PROTOCOL
79106#define hash_packet_ruleset_multiplier_100 hash_const
79107#define cmp_packet_ruleset_multiplier_100 cmp_const
79109#endif /* FREECIV_DELTA_PROTOCOL */
79110
79112{
79113#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_multiplier(_packet)
79115
79116#ifdef FREECIV_JSON_CONNECTION
79117 struct plocation field_addr;
79118 {
79119 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79122 }
79123#endif /* FREECIV_JSON_CONNECTION */
79124
79125 log_packet_detailed("packet_ruleset_multiplier_100: got info about ()");
79126
79127#ifdef FREECIV_DELTA_PROTOCOL
79130 struct genhash **hash = pc->phs.received + PACKET_RULESET_MULTIPLIER;
79131
79132 if (nullptr == *hash) {
79134 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79135 }
79136
79137 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79138 real_packet->id = old->id;
79139 real_packet->start = old->start;
79140 real_packet->stop = old->stop;
79141 real_packet->step = old->step;
79142 real_packet->def = old->def;
79143 real_packet->offset = old->offset;
79144 real_packet->factor = old->factor;
79145 real_packet->minimum_turns = old->minimum_turns;
79146 sz_strlcpy(real_packet->name, old->name);
79147 sz_strlcpy(real_packet->rule_name, old->rule_name);
79148 requirement_vector_copy(&real_packet->reqs, &old->reqs);
79149 if (old->helptext) {
79150 strvec_copy(real_packet->helptext, old->helptext);
79151 } else {
79152 strvec_clear(real_packet->helptext);
79153 }
79154 } else {
79155 /* packet is already initialized empty */
79156 log_packet_detailed(" no old info");
79157 }
79158
79159#ifdef FREECIV_JSON_CONNECTION
79160 field_addr.name = "fields";
79161#endif /* FREECIV_JSON_CONNECTION */
79162 DIO_BV_GET(&din, &field_addr, fields);
79163
79164 if (BV_ISSET(fields, 0)) {
79165 log_packet_detailed(" got field 'id'");
79166
79167#ifdef FREECIV_JSON_CONNECTION
79168 field_addr.name = "id";
79169#endif /* FREECIV_JSON_CONNECTION */
79170
79171 {
79172 int readin;
79173
79174 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79176 }
79177 real_packet->id = readin;
79178 }
79179 }
79180
79181 if (BV_ISSET(fields, 1)) {
79182 log_packet_detailed(" got field 'start'");
79183
79184#ifdef FREECIV_JSON_CONNECTION
79185 field_addr.name = "start";
79186#endif /* FREECIV_JSON_CONNECTION */
79187
79188 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79190 }
79191 }
79192
79193 if (BV_ISSET(fields, 2)) {
79194 log_packet_detailed(" got field 'stop'");
79195
79196#ifdef FREECIV_JSON_CONNECTION
79197 field_addr.name = "stop";
79198#endif /* FREECIV_JSON_CONNECTION */
79199
79200 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79202 }
79203 }
79204
79205 if (BV_ISSET(fields, 3)) {
79206 log_packet_detailed(" got field 'step'");
79207
79208#ifdef FREECIV_JSON_CONNECTION
79209 field_addr.name = "step";
79210#endif /* FREECIV_JSON_CONNECTION */
79211
79212 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79214 }
79215 }
79216
79217 if (BV_ISSET(fields, 4)) {
79218 log_packet_detailed(" got field 'def'");
79219
79220#ifdef FREECIV_JSON_CONNECTION
79221 field_addr.name = "def";
79222#endif /* FREECIV_JSON_CONNECTION */
79223
79224 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79226 }
79227 }
79228
79229 if (BV_ISSET(fields, 5)) {
79230 log_packet_detailed(" got field 'offset'");
79231
79232#ifdef FREECIV_JSON_CONNECTION
79233 field_addr.name = "offset";
79234#endif /* FREECIV_JSON_CONNECTION */
79235
79236 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79238 }
79239 }
79240
79241 if (BV_ISSET(fields, 6)) {
79242 log_packet_detailed(" got field 'factor'");
79243
79244#ifdef FREECIV_JSON_CONNECTION
79245 field_addr.name = "factor";
79246#endif /* FREECIV_JSON_CONNECTION */
79247
79248 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79250 }
79251 }
79252
79253 if (BV_ISSET(fields, 7)) {
79254 log_packet_detailed(" got field 'minimum_turns'");
79255
79256#ifdef FREECIV_JSON_CONNECTION
79257 field_addr.name = "minimum_turns";
79258#endif /* FREECIV_JSON_CONNECTION */
79259
79260 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79261 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79262 }
79263 }
79264
79265 if (BV_ISSET(fields, 8)) {
79266 log_packet_detailed(" got field 'name'");
79267
79268#ifdef FREECIV_JSON_CONNECTION
79269 field_addr.name = "name";
79270#endif /* FREECIV_JSON_CONNECTION */
79271
79272 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79274 }
79275 }
79276
79277 if (BV_ISSET(fields, 9)) {
79278 log_packet_detailed(" got field 'rule_name'");
79279
79280#ifdef FREECIV_JSON_CONNECTION
79281 field_addr.name = "rule_name";
79282#endif /* FREECIV_JSON_CONNECTION */
79283
79284 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79285 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79286 }
79287 }
79288
79289 if (BV_ISSET(fields, 10)) {
79290 log_packet_detailed(" got field 'reqs'");
79291
79292#ifdef FREECIV_JSON_CONNECTION
79293 field_addr.name = "reqs";
79294#endif /* FREECIV_JSON_CONNECTION */
79295
79296 {
79297 int i;
79298
79299 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79301 }
79303
79304#ifdef FREECIV_JSON_CONNECTION
79305 /* Enter array. */
79306 field_addr.sub_location = plocation_elem_new(0);
79307#endif /* FREECIV_JSON_CONNECTION */
79308
79309 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79310#ifdef FREECIV_JSON_CONNECTION
79311 /* Next array element */
79312 field_addr.sub_location->number = i;
79313#endif /* FREECIV_JSON_CONNECTION */
79314
79315 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79317 }
79318 }
79319
79320#ifdef FREECIV_JSON_CONNECTION
79321 /* Exit array. */
79322 FC_FREE(field_addr.sub_location);
79323#endif /* FREECIV_JSON_CONNECTION */
79324 }
79325 }
79326
79327 if (BV_ISSET(fields, 11)) {
79328 log_packet_detailed(" got field 'helptext'");
79329
79330#ifdef FREECIV_JSON_CONNECTION
79331 field_addr.name = "helptext";
79332#endif /* FREECIV_JSON_CONNECTION */
79333
79334 {
79335 int i;
79336
79337 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79339 }
79340 strvec_reserve(real_packet->helptext, i);
79341
79342#ifdef FREECIV_JSON_CONNECTION
79343 /* Enter array. */
79344 field_addr.sub_location = plocation_elem_new(0);
79345#endif /* FREECIV_JSON_CONNECTION */
79346
79347 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79348#ifdef FREECIV_JSON_CONNECTION
79349 /* Next array element */
79350 field_addr.sub_location->number = i;
79351#endif /* FREECIV_JSON_CONNECTION */
79352
79353 {
79354 char readin[MAX_LEN_PACKET];
79355
79356 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79357 || !strvec_set(real_packet->helptext, i, readin)) {
79359 }
79360 }
79361 }
79362
79363#ifdef FREECIV_JSON_CONNECTION
79364 /* Exit array. */
79365 FC_FREE(field_addr.sub_location);
79366#endif /* FREECIV_JSON_CONNECTION */
79367 }
79368 }
79369
79370 if (nullptr == old) {
79371 old = fc_malloc(sizeof(*old));
79373 old->id = real_packet->id;
79374 old->start = real_packet->start;
79375 old->stop = real_packet->stop;
79376 old->step = real_packet->step;
79377 old->def = real_packet->def;
79378 old->offset = real_packet->offset;
79379 old->factor = real_packet->factor;
79380 old->minimum_turns = real_packet->minimum_turns;
79381 sz_strlcpy(old->name, real_packet->name);
79382 sz_strlcpy(old->rule_name, real_packet->rule_name);
79383 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79384 if (real_packet->helptext) {
79385 strvec_copy(old->helptext, real_packet->helptext);
79386 } else {
79387 strvec_clear(old->helptext);
79388 }
79390 } else {
79391 old->id = real_packet->id;
79392 old->start = real_packet->start;
79393 old->stop = real_packet->stop;
79394 old->step = real_packet->step;
79395 old->def = real_packet->def;
79396 old->offset = real_packet->offset;
79397 old->factor = real_packet->factor;
79398 old->minimum_turns = real_packet->minimum_turns;
79399 sz_strlcpy(old->name, real_packet->name);
79400 sz_strlcpy(old->rule_name, real_packet->rule_name);
79401 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79402 if (real_packet->helptext) {
79403 strvec_copy(old->helptext, real_packet->helptext);
79404 } else {
79405 strvec_clear(old->helptext);
79406 }
79407 }
79408
79409#else /* FREECIV_DELTA_PROTOCOL */
79410#ifdef FREECIV_JSON_CONNECTION
79411 field_addr.name = "id";
79412#endif /* FREECIV_JSON_CONNECTION */
79413
79414 {
79415 int readin;
79416
79417 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79419 }
79420 real_packet->id = readin;
79421 }
79422
79423#ifdef FREECIV_JSON_CONNECTION
79424 field_addr.name = "start";
79425#endif /* FREECIV_JSON_CONNECTION */
79426
79427 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
79429 }
79430
79431#ifdef FREECIV_JSON_CONNECTION
79432 field_addr.name = "stop";
79433#endif /* FREECIV_JSON_CONNECTION */
79434
79435 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
79437 }
79438
79439#ifdef FREECIV_JSON_CONNECTION
79440 field_addr.name = "step";
79441#endif /* FREECIV_JSON_CONNECTION */
79442
79443 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
79445 }
79446
79447#ifdef FREECIV_JSON_CONNECTION
79448 field_addr.name = "def";
79449#endif /* FREECIV_JSON_CONNECTION */
79450
79451 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
79453 }
79454
79455#ifdef FREECIV_JSON_CONNECTION
79456 field_addr.name = "offset";
79457#endif /* FREECIV_JSON_CONNECTION */
79458
79459 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
79461 }
79462
79463#ifdef FREECIV_JSON_CONNECTION
79464 field_addr.name = "factor";
79465#endif /* FREECIV_JSON_CONNECTION */
79466
79467 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
79469 }
79470
79471#ifdef FREECIV_JSON_CONNECTION
79472 field_addr.name = "minimum_turns";
79473#endif /* FREECIV_JSON_CONNECTION */
79474
79475 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
79476 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
79477 }
79478
79479#ifdef FREECIV_JSON_CONNECTION
79480 field_addr.name = "name";
79481#endif /* FREECIV_JSON_CONNECTION */
79482
79483 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79485 }
79486
79487#ifdef FREECIV_JSON_CONNECTION
79488 field_addr.name = "rule_name";
79489#endif /* FREECIV_JSON_CONNECTION */
79490
79491 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
79492 RECEIVE_PACKET_FIELD_ERROR(rule_name);
79493 }
79494
79495#ifdef FREECIV_JSON_CONNECTION
79496 field_addr.name = "reqs";
79497#endif /* FREECIV_JSON_CONNECTION */
79498
79499 {
79500 int i;
79501
79502 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79504 }
79506
79507#ifdef FREECIV_JSON_CONNECTION
79508 /* Enter array. */
79509 field_addr.sub_location = plocation_elem_new(0);
79510#endif /* FREECIV_JSON_CONNECTION */
79511
79512 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79513#ifdef FREECIV_JSON_CONNECTION
79514 /* Next array element */
79515 field_addr.sub_location->number = i;
79516#endif /* FREECIV_JSON_CONNECTION */
79517
79518 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
79520 }
79521 }
79522
79523#ifdef FREECIV_JSON_CONNECTION
79524 /* Exit array. */
79525 FC_FREE(field_addr.sub_location);
79526#endif /* FREECIV_JSON_CONNECTION */
79527 }
79528
79529#ifdef FREECIV_JSON_CONNECTION
79530 field_addr.name = "helptext";
79531#endif /* FREECIV_JSON_CONNECTION */
79532
79533 {
79534 int i;
79535
79536 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
79538 }
79539 strvec_reserve(real_packet->helptext, i);
79540
79541#ifdef FREECIV_JSON_CONNECTION
79542 /* Enter array. */
79543 field_addr.sub_location = plocation_elem_new(0);
79544#endif /* FREECIV_JSON_CONNECTION */
79545
79546 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79547#ifdef FREECIV_JSON_CONNECTION
79548 /* Next array element */
79549 field_addr.sub_location->number = i;
79550#endif /* FREECIV_JSON_CONNECTION */
79551
79552 {
79553 char readin[MAX_LEN_PACKET];
79554
79555 if (!DIO_GET(string, &din, &field_addr, readin, sizeof(readin))
79556 || !strvec_set(real_packet->helptext, i, readin)) {
79558 }
79559 }
79560 }
79561
79562#ifdef FREECIV_JSON_CONNECTION
79563 /* Exit array. */
79564 FC_FREE(field_addr.sub_location);
79565#endif /* FREECIV_JSON_CONNECTION */
79566 }
79567#endif /* FREECIV_DELTA_PROTOCOL */
79568
79570#undef FREE_PACKET_STRUCT
79571}
79572
79574{
79575 const struct packet_ruleset_multiplier *real_packet = packet;
79576 int e;
79578
79579 log_packet_detailed("packet_ruleset_multiplier_100: sending info about ()");
79580
79581#ifdef FREECIV_DELTA_PROTOCOL
79584 bool differ;
79585 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MULTIPLIER;
79586
79587 if (nullptr == *hash) {
79589 nullptr, nullptr, nullptr, destroy_packet_ruleset_multiplier);
79590 }
79591 BV_CLR_ALL(fields);
79592
79593 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79594 old = fc_malloc(sizeof(*old));
79595 /* temporary bitcopy just to insert correctly */
79596 *old = *real_packet;
79599 }
79600
79601 differ = (old->id != real_packet->id);
79602 if (differ) {
79603 BV_SET(fields, 0);
79604 }
79605
79606 differ = (old->start != real_packet->start);
79607 if (differ) {
79608 BV_SET(fields, 1);
79609 }
79610
79611 differ = (old->stop != real_packet->stop);
79612 if (differ) {
79613 BV_SET(fields, 2);
79614 }
79615
79616 differ = (old->step != real_packet->step);
79617 if (differ) {
79618 BV_SET(fields, 3);
79619 }
79620
79621 differ = (old->def != real_packet->def);
79622 if (differ) {
79623 BV_SET(fields, 4);
79624 }
79625
79626 differ = (old->offset != real_packet->offset);
79627 if (differ) {
79628 BV_SET(fields, 5);
79629 }
79630
79631 differ = (old->factor != real_packet->factor);
79632 if (differ) {
79633 BV_SET(fields, 6);
79634 }
79635
79636 differ = (old->minimum_turns != real_packet->minimum_turns);
79637 if (differ) {
79638 BV_SET(fields, 7);
79639 }
79640
79641 differ = (strcmp(old->name, real_packet->name) != 0);
79642 if (differ) {
79643 BV_SET(fields, 8);
79644 }
79645
79646 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
79647 if (differ) {
79648 BV_SET(fields, 9);
79649 }
79650
79652 if (!differ) {
79653 int i;
79654
79655 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
79656 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
79657 if (differ) {
79658 break;
79659 }
79660 }
79661 }
79662 if (differ) {
79663 BV_SET(fields, 10);
79664 }
79665
79666 if (real_packet->helptext) {
79667 differ = !are_strvecs_equal(old->helptext, real_packet->helptext);
79668 } else {
79669 differ = (strvec_size(old->helptext) > 0);
79670 }
79671 if (differ) {
79672 BV_SET(fields, 11);
79673 }
79674#endif /* FREECIV_DELTA_PROTOCOL */
79675
79676#ifdef FREECIV_JSON_CONNECTION
79677 struct plocation field_addr;
79678 {
79679 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
79682 }
79683#endif /* FREECIV_JSON_CONNECTION */
79684
79685#ifdef FREECIV_DELTA_PROTOCOL
79686#ifdef FREECIV_JSON_CONNECTION
79687 field_addr.name = "fields";
79688#endif /* FREECIV_JSON_CONNECTION */
79689 e = 0;
79690 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79691 if (e) {
79692 log_packet_detailed("fields bitvector error detected");
79693 }
79694
79695 if (BV_ISSET(fields, 0)) {
79696 log_packet_detailed(" field 'id' has changed");
79697
79698#ifdef FREECIV_JSON_CONNECTION
79699 field_addr.name = "id";
79700#endif /* FREECIV_JSON_CONNECTION */
79701 e = 0;
79702
79703 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79704
79705 if (e) {
79706 log_packet_detailed("'id' field error detected");
79707 }
79708 }
79709
79710 if (BV_ISSET(fields, 1)) {
79711 log_packet_detailed(" field 'start' has changed");
79712
79713#ifdef FREECIV_JSON_CONNECTION
79714 field_addr.name = "start";
79715#endif /* FREECIV_JSON_CONNECTION */
79716 e = 0;
79717
79718 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
79719
79720 if (e) {
79721 log_packet_detailed("'start' field error detected");
79722 }
79723 }
79724
79725 if (BV_ISSET(fields, 2)) {
79726 log_packet_detailed(" field 'stop' has changed");
79727
79728#ifdef FREECIV_JSON_CONNECTION
79729 field_addr.name = "stop";
79730#endif /* FREECIV_JSON_CONNECTION */
79731 e = 0;
79732
79733 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
79734
79735 if (e) {
79736 log_packet_detailed("'stop' field error detected");
79737 }
79738 }
79739
79740 if (BV_ISSET(fields, 3)) {
79741 log_packet_detailed(" field 'step' has changed");
79742
79743#ifdef FREECIV_JSON_CONNECTION
79744 field_addr.name = "step";
79745#endif /* FREECIV_JSON_CONNECTION */
79746 e = 0;
79747
79748 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
79749
79750 if (e) {
79751 log_packet_detailed("'step' field error detected");
79752 }
79753 }
79754
79755 if (BV_ISSET(fields, 4)) {
79756 log_packet_detailed(" field 'def' has changed");
79757
79758#ifdef FREECIV_JSON_CONNECTION
79759 field_addr.name = "def";
79760#endif /* FREECIV_JSON_CONNECTION */
79761 e = 0;
79762
79763 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
79764
79765 if (e) {
79766 log_packet_detailed("'def' field error detected");
79767 }
79768 }
79769
79770 if (BV_ISSET(fields, 5)) {
79771 log_packet_detailed(" field 'offset' has changed");
79772
79773#ifdef FREECIV_JSON_CONNECTION
79774 field_addr.name = "offset";
79775#endif /* FREECIV_JSON_CONNECTION */
79776 e = 0;
79777
79778 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
79779
79780 if (e) {
79781 log_packet_detailed("'offset' field error detected");
79782 }
79783 }
79784
79785 if (BV_ISSET(fields, 6)) {
79786 log_packet_detailed(" field 'factor' has changed");
79787
79788#ifdef FREECIV_JSON_CONNECTION
79789 field_addr.name = "factor";
79790#endif /* FREECIV_JSON_CONNECTION */
79791 e = 0;
79792
79793 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
79794
79795 if (e) {
79796 log_packet_detailed("'factor' field error detected");
79797 }
79798 }
79799
79800 if (BV_ISSET(fields, 7)) {
79801 log_packet_detailed(" field 'minimum_turns' has changed");
79802
79803#ifdef FREECIV_JSON_CONNECTION
79804 field_addr.name = "minimum_turns";
79805#endif /* FREECIV_JSON_CONNECTION */
79806 e = 0;
79807
79808 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
79809
79810 if (e) {
79811 log_packet_detailed("'minimum_turns' field error detected");
79812 }
79813 }
79814
79815 if (BV_ISSET(fields, 8)) {
79816 log_packet_detailed(" field 'name' has changed");
79817
79818#ifdef FREECIV_JSON_CONNECTION
79819 field_addr.name = "name";
79820#endif /* FREECIV_JSON_CONNECTION */
79821 e = 0;
79822
79823 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
79824
79825 if (e) {
79826 log_packet_detailed("'name' field error detected");
79827 }
79828 }
79829
79830 if (BV_ISSET(fields, 9)) {
79831 log_packet_detailed(" field 'rule_name' has changed");
79832
79833#ifdef FREECIV_JSON_CONNECTION
79834 field_addr.name = "rule_name";
79835#endif /* FREECIV_JSON_CONNECTION */
79836 e = 0;
79837
79838 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
79839
79840 if (e) {
79841 log_packet_detailed("'rule_name' field error detected");
79842 }
79843 }
79844
79845 if (BV_ISSET(fields, 10)) {
79846 log_packet_detailed(" field 'reqs' has changed");
79847
79848#ifdef FREECIV_JSON_CONNECTION
79849 field_addr.name = "reqs";
79850#endif /* FREECIV_JSON_CONNECTION */
79851 e = 0;
79852
79853 {
79854 int i;
79855
79858
79859#ifdef FREECIV_JSON_CONNECTION
79860 /* Enter array. */
79861 field_addr.sub_location = plocation_elem_new(0);
79862#endif /* FREECIV_JSON_CONNECTION */
79863
79864 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
79865#ifdef FREECIV_JSON_CONNECTION
79866 /* Next array element. */
79867 field_addr.sub_location->number = i;
79868#endif /* FREECIV_JSON_CONNECTION */
79869
79870 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
79871 }
79872
79873#ifdef FREECIV_JSON_CONNECTION
79874 /* Exit array. */
79875 FC_FREE(field_addr.sub_location);
79876#endif /* FREECIV_JSON_CONNECTION */
79877 }
79878
79879 if (e) {
79880 log_packet_detailed("'reqs' field error detected");
79881 }
79882 }
79883
79884 if (BV_ISSET(fields, 11)) {
79885 log_packet_detailed(" field 'helptext' has changed");
79886
79887#ifdef FREECIV_JSON_CONNECTION
79888 field_addr.name = "helptext";
79889#endif /* FREECIV_JSON_CONNECTION */
79890 e = 0;
79891
79892 if (!real_packet->helptext) {
79893 /* Transmit null as empty */
79894 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
79895 } else {
79896 int i;
79897
79899 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
79900
79901#ifdef FREECIV_JSON_CONNECTION
79902 /* Enter array. */
79903 field_addr.sub_location = plocation_elem_new(0);
79904#endif /* FREECIV_JSON_CONNECTION */
79905
79906 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
79907#ifdef FREECIV_JSON_CONNECTION
79908 /* Next array element. */
79909 field_addr.sub_location->number = i;
79910#endif /* FREECIV_JSON_CONNECTION */
79911
79912 {
79913 const char *pstr = strvec_get(real_packet->helptext, i);
79914
79915 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
79916 }
79917 }
79918
79919#ifdef FREECIV_JSON_CONNECTION
79920 /* Exit array. */
79921 FC_FREE(field_addr.sub_location);
79922#endif /* FREECIV_JSON_CONNECTION */
79923 }
79924
79925 if (e) {
79926 log_packet_detailed("'helptext' field error detected");
79927 }
79928 }
79929
79930 old->id = real_packet->id;
79931 old->start = real_packet->start;
79932 old->stop = real_packet->stop;
79933 old->step = real_packet->step;
79934 old->def = real_packet->def;
79935 old->offset = real_packet->offset;
79936 old->factor = real_packet->factor;
79937 old->minimum_turns = real_packet->minimum_turns;
79938 sz_strlcpy(old->name, real_packet->name);
79939 sz_strlcpy(old->rule_name, real_packet->rule_name);
79940 requirement_vector_copy(&old->reqs, &real_packet->reqs);
79941 if (real_packet->helptext) {
79942 strvec_copy(old->helptext, real_packet->helptext);
79943 } else {
79944 strvec_clear(old->helptext);
79945 }
79946
79947#else /* FREECIV_DELTA_PROTOCOL */
79948#ifdef FREECIV_JSON_CONNECTION
79949 field_addr.name = "id";
79950#endif /* FREECIV_JSON_CONNECTION */
79951 e = 0;
79952
79953 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79954
79955 if (e) {
79956 log_packet_detailed("'id' field error detected");
79957 }
79958
79959#ifdef FREECIV_JSON_CONNECTION
79960 field_addr.name = "start";
79961#endif /* FREECIV_JSON_CONNECTION */
79962 e = 0;
79963
79964 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
79965
79966 if (e) {
79967 log_packet_detailed("'start' field error detected");
79968 }
79969
79970#ifdef FREECIV_JSON_CONNECTION
79971 field_addr.name = "stop";
79972#endif /* FREECIV_JSON_CONNECTION */
79973 e = 0;
79974
79975 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
79976
79977 if (e) {
79978 log_packet_detailed("'stop' field error detected");
79979 }
79980
79981#ifdef FREECIV_JSON_CONNECTION
79982 field_addr.name = "step";
79983#endif /* FREECIV_JSON_CONNECTION */
79984 e = 0;
79985
79986 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
79987
79988 if (e) {
79989 log_packet_detailed("'step' field error detected");
79990 }
79991
79992#ifdef FREECIV_JSON_CONNECTION
79993 field_addr.name = "def";
79994#endif /* FREECIV_JSON_CONNECTION */
79995 e = 0;
79996
79997 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
79998
79999 if (e) {
80000 log_packet_detailed("'def' field error detected");
80001 }
80002
80003#ifdef FREECIV_JSON_CONNECTION
80004 field_addr.name = "offset";
80005#endif /* FREECIV_JSON_CONNECTION */
80006 e = 0;
80007
80008 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
80009
80010 if (e) {
80011 log_packet_detailed("'offset' field error detected");
80012 }
80013
80014#ifdef FREECIV_JSON_CONNECTION
80015 field_addr.name = "factor";
80016#endif /* FREECIV_JSON_CONNECTION */
80017 e = 0;
80018
80019 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
80020
80021 if (e) {
80022 log_packet_detailed("'factor' field error detected");
80023 }
80024
80025#ifdef FREECIV_JSON_CONNECTION
80026 field_addr.name = "minimum_turns";
80027#endif /* FREECIV_JSON_CONNECTION */
80028 e = 0;
80029
80030 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
80031
80032 if (e) {
80033 log_packet_detailed("'minimum_turns' field error detected");
80034 }
80035
80036#ifdef FREECIV_JSON_CONNECTION
80037 field_addr.name = "name";
80038#endif /* FREECIV_JSON_CONNECTION */
80039 e = 0;
80040
80041 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
80042
80043 if (e) {
80044 log_packet_detailed("'name' field error detected");
80045 }
80046
80047#ifdef FREECIV_JSON_CONNECTION
80048 field_addr.name = "rule_name";
80049#endif /* FREECIV_JSON_CONNECTION */
80050 e = 0;
80051
80052 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
80053
80054 if (e) {
80055 log_packet_detailed("'rule_name' field error detected");
80056 }
80057
80058#ifdef FREECIV_JSON_CONNECTION
80059 field_addr.name = "reqs";
80060#endif /* FREECIV_JSON_CONNECTION */
80061 e = 0;
80062
80063 {
80064 int i;
80065
80068
80069#ifdef FREECIV_JSON_CONNECTION
80070 /* Enter array. */
80071 field_addr.sub_location = plocation_elem_new(0);
80072#endif /* FREECIV_JSON_CONNECTION */
80073
80074 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
80075#ifdef FREECIV_JSON_CONNECTION
80076 /* Next array element. */
80077 field_addr.sub_location->number = i;
80078#endif /* FREECIV_JSON_CONNECTION */
80079
80080 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
80081 }
80082
80083#ifdef FREECIV_JSON_CONNECTION
80084 /* Exit array. */
80085 FC_FREE(field_addr.sub_location);
80086#endif /* FREECIV_JSON_CONNECTION */
80087 }
80088
80089 if (e) {
80090 log_packet_detailed("'reqs' field error detected");
80091 }
80092
80093#ifdef FREECIV_JSON_CONNECTION
80094 field_addr.name = "helptext";
80095#endif /* FREECIV_JSON_CONNECTION */
80096 e = 0;
80097
80098 if (!real_packet->helptext) {
80099 /* Transmit null as empty */
80100 e |= DIO_PUT(arraylen, &dout, &field_addr, 0);
80101 } else {
80102 int i;
80103
80105 e |= DIO_PUT(arraylen, &dout, &field_addr, strvec_size(real_packet->helptext));
80106
80107#ifdef FREECIV_JSON_CONNECTION
80108 /* Enter array. */
80109 field_addr.sub_location = plocation_elem_new(0);
80110#endif /* FREECIV_JSON_CONNECTION */
80111
80112 for (i = 0; i < strvec_size(real_packet->helptext); i++) {
80113#ifdef FREECIV_JSON_CONNECTION
80114 /* Next array element. */
80115 field_addr.sub_location->number = i;
80116#endif /* FREECIV_JSON_CONNECTION */
80117
80118 {
80119 const char *pstr = strvec_get(real_packet->helptext, i);
80120
80121 e |= DIO_PUT(string, &dout, &field_addr, pstr ? pstr : "");
80122 }
80123 }
80124
80125#ifdef FREECIV_JSON_CONNECTION
80126 /* Exit array. */
80127 FC_FREE(field_addr.sub_location);
80128#endif /* FREECIV_JSON_CONNECTION */
80129 }
80130
80131 if (e) {
80132 log_packet_detailed("'helptext' field error detected");
80133 }
80134#endif /* FREECIV_DELTA_PROTOCOL */
80135
80137}
80138
80140{
80141 if (!pc->used) {
80142 log_error("WARNING: trying to send data to the closed connection %s",
80144 return -1;
80145 }
80146 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet != nullptr, -1,
80147 "Handler for PACKET_RULESET_MULTIPLIER not installed");
80148 return pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet(pc, packet);
80149}
80150
80152{
80153 conn_list_iterate(dest, pconn) {
80156}
80157
80158static inline void init_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80159{
80160 memset(packet, 0, sizeof(*packet));
80161
80165}
80166
80167static inline void free_packet_ruleset_clause(struct packet_ruleset_clause *packet)
80168{
80172}
80173
80174static inline void destroy_packet_ruleset_clause(void *packet)
80175{
80177 free(packet);
80178}
80179
80180#ifdef FREECIV_DELTA_PROTOCOL
80181#define hash_packet_ruleset_clause_100 hash_const
80182#define cmp_packet_ruleset_clause_100 cmp_const
80184#endif /* FREECIV_DELTA_PROTOCOL */
80185
80187{
80188#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_clause(_packet)
80190
80191#ifdef FREECIV_JSON_CONNECTION
80192 struct plocation field_addr;
80193 {
80194 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80197 }
80198#endif /* FREECIV_JSON_CONNECTION */
80199
80200 log_packet_detailed("packet_ruleset_clause_100: got info about ()");
80201
80202#ifdef FREECIV_DELTA_PROTOCOL
80204 struct packet_ruleset_clause *old;
80205 struct genhash **hash = pc->phs.received + PACKET_RULESET_CLAUSE;
80206
80207 if (nullptr == *hash) {
80209 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80210 }
80211
80212 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80213 real_packet->type = old->type;
80214 real_packet->enabled = old->enabled;
80215 requirement_vector_copy(&real_packet->giver_reqs, &old->giver_reqs);
80216 requirement_vector_copy(&real_packet->receiver_reqs, &old->receiver_reqs);
80217 requirement_vector_copy(&real_packet->either_reqs, &old->either_reqs);
80218 } else {
80219 /* packet is already initialized empty */
80220 log_packet_detailed(" no old info");
80221 }
80222
80223#ifdef FREECIV_JSON_CONNECTION
80224 field_addr.name = "fields";
80225#endif /* FREECIV_JSON_CONNECTION */
80226 DIO_BV_GET(&din, &field_addr, fields);
80227
80228 if (BV_ISSET(fields, 0)) {
80229 log_packet_detailed(" got field 'type'");
80230
80231#ifdef FREECIV_JSON_CONNECTION
80232 field_addr.name = "type";
80233#endif /* FREECIV_JSON_CONNECTION */
80234
80235 {
80236 int readin;
80237
80238 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80240 }
80241 real_packet->type = readin;
80242 }
80243 }
80244
80245 real_packet->enabled = BV_ISSET(fields, 1);
80246
80247 if (BV_ISSET(fields, 2)) {
80248 log_packet_detailed(" got field 'giver_reqs'");
80249
80250#ifdef FREECIV_JSON_CONNECTION
80251 field_addr.name = "giver_reqs";
80252#endif /* FREECIV_JSON_CONNECTION */
80253
80254 {
80255 int i;
80256
80257 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80258 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80259 }
80261
80262#ifdef FREECIV_JSON_CONNECTION
80263 /* Enter array. */
80264 field_addr.sub_location = plocation_elem_new(0);
80265#endif /* FREECIV_JSON_CONNECTION */
80266
80267 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80268#ifdef FREECIV_JSON_CONNECTION
80269 /* Next array element */
80270 field_addr.sub_location->number = i;
80271#endif /* FREECIV_JSON_CONNECTION */
80272
80273 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80274 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80275 }
80276 }
80277
80278#ifdef FREECIV_JSON_CONNECTION
80279 /* Exit array. */
80280 FC_FREE(field_addr.sub_location);
80281#endif /* FREECIV_JSON_CONNECTION */
80282 }
80283 }
80284
80285 if (BV_ISSET(fields, 3)) {
80286 log_packet_detailed(" got field 'receiver_reqs'");
80287
80288#ifdef FREECIV_JSON_CONNECTION
80289 field_addr.name = "receiver_reqs";
80290#endif /* FREECIV_JSON_CONNECTION */
80291
80292 {
80293 int i;
80294
80295 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80296 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80297 }
80298 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80299
80300#ifdef FREECIV_JSON_CONNECTION
80301 /* Enter array. */
80302 field_addr.sub_location = plocation_elem_new(0);
80303#endif /* FREECIV_JSON_CONNECTION */
80304
80305 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80306#ifdef FREECIV_JSON_CONNECTION
80307 /* Next array element */
80308 field_addr.sub_location->number = i;
80309#endif /* FREECIV_JSON_CONNECTION */
80310
80311 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80312 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80313 }
80314 }
80315
80316#ifdef FREECIV_JSON_CONNECTION
80317 /* Exit array. */
80318 FC_FREE(field_addr.sub_location);
80319#endif /* FREECIV_JSON_CONNECTION */
80320 }
80321 }
80322
80323 if (BV_ISSET(fields, 4)) {
80324 log_packet_detailed(" got field 'either_reqs'");
80325
80326#ifdef FREECIV_JSON_CONNECTION
80327 field_addr.name = "either_reqs";
80328#endif /* FREECIV_JSON_CONNECTION */
80329
80330 {
80331 int i;
80332
80333 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80334 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80335 }
80337
80338#ifdef FREECIV_JSON_CONNECTION
80339 /* Enter array. */
80340 field_addr.sub_location = plocation_elem_new(0);
80341#endif /* FREECIV_JSON_CONNECTION */
80342
80343 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80344#ifdef FREECIV_JSON_CONNECTION
80345 /* Next array element */
80346 field_addr.sub_location->number = i;
80347#endif /* FREECIV_JSON_CONNECTION */
80348
80349 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80350 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80351 }
80352 }
80353
80354#ifdef FREECIV_JSON_CONNECTION
80355 /* Exit array. */
80356 FC_FREE(field_addr.sub_location);
80357#endif /* FREECIV_JSON_CONNECTION */
80358 }
80359 }
80360
80361 if (nullptr == old) {
80362 old = fc_malloc(sizeof(*old));
80364 old->type = real_packet->type;
80365 old->enabled = real_packet->enabled;
80366 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80367 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80368 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80370 } else {
80371 old->type = real_packet->type;
80372 old->enabled = real_packet->enabled;
80373 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80374 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80375 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80376 }
80377
80378#else /* FREECIV_DELTA_PROTOCOL */
80379#ifdef FREECIV_JSON_CONNECTION
80380 field_addr.name = "type";
80381#endif /* FREECIV_JSON_CONNECTION */
80382
80383 {
80384 int readin;
80385
80386 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80388 }
80389 real_packet->type = readin;
80390 }
80391
80392#ifdef FREECIV_JSON_CONNECTION
80393 field_addr.name = "enabled";
80394#endif /* FREECIV_JSON_CONNECTION */
80395
80396 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
80398 }
80399
80400#ifdef FREECIV_JSON_CONNECTION
80401 field_addr.name = "giver_reqs";
80402#endif /* FREECIV_JSON_CONNECTION */
80403
80404 {
80405 int i;
80406
80407 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80408 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80409 }
80411
80412#ifdef FREECIV_JSON_CONNECTION
80413 /* Enter array. */
80414 field_addr.sub_location = plocation_elem_new(0);
80415#endif /* FREECIV_JSON_CONNECTION */
80416
80417 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80418#ifdef FREECIV_JSON_CONNECTION
80419 /* Next array element */
80420 field_addr.sub_location->number = i;
80421#endif /* FREECIV_JSON_CONNECTION */
80422
80423 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs.p[i])) {
80424 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
80425 }
80426 }
80427
80428#ifdef FREECIV_JSON_CONNECTION
80429 /* Exit array. */
80430 FC_FREE(field_addr.sub_location);
80431#endif /* FREECIV_JSON_CONNECTION */
80432 }
80433
80434#ifdef FREECIV_JSON_CONNECTION
80435 field_addr.name = "receiver_reqs";
80436#endif /* FREECIV_JSON_CONNECTION */
80437
80438 {
80439 int i;
80440
80441 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80442 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80443 }
80444 requirement_vector_reserve(&real_packet->receiver_reqs, i);
80445
80446#ifdef FREECIV_JSON_CONNECTION
80447 /* Enter array. */
80448 field_addr.sub_location = plocation_elem_new(0);
80449#endif /* FREECIV_JSON_CONNECTION */
80450
80451 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80452#ifdef FREECIV_JSON_CONNECTION
80453 /* Next array element */
80454 field_addr.sub_location->number = i;
80455#endif /* FREECIV_JSON_CONNECTION */
80456
80457 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs.p[i])) {
80458 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
80459 }
80460 }
80461
80462#ifdef FREECIV_JSON_CONNECTION
80463 /* Exit array. */
80464 FC_FREE(field_addr.sub_location);
80465#endif /* FREECIV_JSON_CONNECTION */
80466 }
80467
80468#ifdef FREECIV_JSON_CONNECTION
80469 field_addr.name = "either_reqs";
80470#endif /* FREECIV_JSON_CONNECTION */
80471
80472 {
80473 int i;
80474
80475 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
80476 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80477 }
80479
80480#ifdef FREECIV_JSON_CONNECTION
80481 /* Enter array. */
80482 field_addr.sub_location = plocation_elem_new(0);
80483#endif /* FREECIV_JSON_CONNECTION */
80484
80485 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80486#ifdef FREECIV_JSON_CONNECTION
80487 /* Next array element */
80488 field_addr.sub_location->number = i;
80489#endif /* FREECIV_JSON_CONNECTION */
80490
80491 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->either_reqs.p[i])) {
80492 RECEIVE_PACKET_FIELD_ERROR(either_reqs);
80493 }
80494 }
80495
80496#ifdef FREECIV_JSON_CONNECTION
80497 /* Exit array. */
80498 FC_FREE(field_addr.sub_location);
80499#endif /* FREECIV_JSON_CONNECTION */
80500 }
80501#endif /* FREECIV_DELTA_PROTOCOL */
80502
80504#undef FREE_PACKET_STRUCT
80505}
80506
80508{
80509 const struct packet_ruleset_clause *real_packet = packet;
80510 int e;
80512
80513 log_packet_detailed("packet_ruleset_clause_100: sending info about ()");
80514
80515#ifdef FREECIV_DELTA_PROTOCOL
80517 struct packet_ruleset_clause *old;
80518 bool differ;
80519 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CLAUSE;
80520
80521 if (nullptr == *hash) {
80523 nullptr, nullptr, nullptr, destroy_packet_ruleset_clause);
80524 }
80525 BV_CLR_ALL(fields);
80526
80527 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80528 old = fc_malloc(sizeof(*old));
80529 /* temporary bitcopy just to insert correctly */
80530 *old = *real_packet;
80533 }
80534
80535 differ = (old->type != real_packet->type);
80536 if (differ) {
80537 BV_SET(fields, 0);
80538 }
80539
80540 /* folded into head */
80541 if (real_packet->enabled) {
80542 BV_SET(fields, 1);
80543 }
80544
80545 differ = (requirement_vector_size(&old->giver_reqs) != requirement_vector_size(&real_packet->giver_reqs));
80546 if (!differ) {
80547 int i;
80548
80549 for (i = 0; i < requirement_vector_size(&old->giver_reqs); i++) {
80550 differ = !are_requirements_equal(&old->giver_reqs.p[i], &real_packet->giver_reqs.p[i]);
80551 if (differ) {
80552 break;
80553 }
80554 }
80555 }
80556 if (differ) {
80557 BV_SET(fields, 2);
80558 }
80559
80560 differ = (requirement_vector_size(&old->receiver_reqs) != requirement_vector_size(&real_packet->receiver_reqs));
80561 if (!differ) {
80562 int i;
80563
80564 for (i = 0; i < requirement_vector_size(&old->receiver_reqs); i++) {
80565 differ = !are_requirements_equal(&old->receiver_reqs.p[i], &real_packet->receiver_reqs.p[i]);
80566 if (differ) {
80567 break;
80568 }
80569 }
80570 }
80571 if (differ) {
80572 BV_SET(fields, 3);
80573 }
80574
80575 differ = (requirement_vector_size(&old->either_reqs) != requirement_vector_size(&real_packet->either_reqs));
80576 if (!differ) {
80577 int i;
80578
80579 for (i = 0; i < requirement_vector_size(&old->either_reqs); i++) {
80580 differ = !are_requirements_equal(&old->either_reqs.p[i], &real_packet->either_reqs.p[i]);
80581 if (differ) {
80582 break;
80583 }
80584 }
80585 }
80586 if (differ) {
80587 BV_SET(fields, 4);
80588 }
80589#endif /* FREECIV_DELTA_PROTOCOL */
80590
80591#ifdef FREECIV_JSON_CONNECTION
80592 struct plocation field_addr;
80593 {
80594 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80597 }
80598#endif /* FREECIV_JSON_CONNECTION */
80599
80600#ifdef FREECIV_DELTA_PROTOCOL
80601#ifdef FREECIV_JSON_CONNECTION
80602 field_addr.name = "fields";
80603#endif /* FREECIV_JSON_CONNECTION */
80604 e = 0;
80605 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80606 if (e) {
80607 log_packet_detailed("fields bitvector error detected");
80608 }
80609
80610 if (BV_ISSET(fields, 0)) {
80611 log_packet_detailed(" field 'type' has changed");
80612
80613#ifdef FREECIV_JSON_CONNECTION
80614 field_addr.name = "type";
80615#endif /* FREECIV_JSON_CONNECTION */
80616 e = 0;
80617
80618 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
80619
80620 if (e) {
80621 log_packet_detailed("'type' field error detected");
80622 }
80623 }
80624
80625 /* field 1 is folded into the header */
80626
80627 if (BV_ISSET(fields, 2)) {
80628 log_packet_detailed(" field 'giver_reqs' has changed");
80629
80630#ifdef FREECIV_JSON_CONNECTION
80631 field_addr.name = "giver_reqs";
80632#endif /* FREECIV_JSON_CONNECTION */
80633 e = 0;
80634
80635 {
80636 int i;
80637
80640
80641#ifdef FREECIV_JSON_CONNECTION
80642 /* Enter array. */
80643 field_addr.sub_location = plocation_elem_new(0);
80644#endif /* FREECIV_JSON_CONNECTION */
80645
80646 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80647#ifdef FREECIV_JSON_CONNECTION
80648 /* Next array element. */
80649 field_addr.sub_location->number = i;
80650#endif /* FREECIV_JSON_CONNECTION */
80651
80652 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
80653 }
80654
80655#ifdef FREECIV_JSON_CONNECTION
80656 /* Exit array. */
80657 FC_FREE(field_addr.sub_location);
80658#endif /* FREECIV_JSON_CONNECTION */
80659 }
80660
80661 if (e) {
80662 log_packet_detailed("'giver_reqs' field error detected");
80663 }
80664 }
80665
80666 if (BV_ISSET(fields, 3)) {
80667 log_packet_detailed(" field 'receiver_reqs' has changed");
80668
80669#ifdef FREECIV_JSON_CONNECTION
80670 field_addr.name = "receiver_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->receiver_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->receiver_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("'receiver_reqs' field error detected");
80702 }
80703 }
80704
80705 if (BV_ISSET(fields, 4)) {
80706 log_packet_detailed(" field 'either_reqs' has changed");
80707
80708#ifdef FREECIV_JSON_CONNECTION
80709 field_addr.name = "either_reqs";
80710#endif /* FREECIV_JSON_CONNECTION */
80711 e = 0;
80712
80713 {
80714 int i;
80715
80718
80719#ifdef FREECIV_JSON_CONNECTION
80720 /* Enter array. */
80721 field_addr.sub_location = plocation_elem_new(0);
80722#endif /* FREECIV_JSON_CONNECTION */
80723
80724 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80725#ifdef FREECIV_JSON_CONNECTION
80726 /* Next array element. */
80727 field_addr.sub_location->number = i;
80728#endif /* FREECIV_JSON_CONNECTION */
80729
80730 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
80731 }
80732
80733#ifdef FREECIV_JSON_CONNECTION
80734 /* Exit array. */
80735 FC_FREE(field_addr.sub_location);
80736#endif /* FREECIV_JSON_CONNECTION */
80737 }
80738
80739 if (e) {
80740 log_packet_detailed("'either_reqs' field error detected");
80741 }
80742 }
80743
80744 old->type = real_packet->type;
80745 old->enabled = real_packet->enabled;
80746 requirement_vector_copy(&old->giver_reqs, &real_packet->giver_reqs);
80747 requirement_vector_copy(&old->receiver_reqs, &real_packet->receiver_reqs);
80748 requirement_vector_copy(&old->either_reqs, &real_packet->either_reqs);
80749
80750#else /* FREECIV_DELTA_PROTOCOL */
80751#ifdef FREECIV_JSON_CONNECTION
80752 field_addr.name = "type";
80753#endif /* FREECIV_JSON_CONNECTION */
80754 e = 0;
80755
80756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
80757
80758 if (e) {
80759 log_packet_detailed("'type' field error detected");
80760 }
80761
80762#ifdef FREECIV_JSON_CONNECTION
80763 field_addr.name = "enabled";
80764#endif /* FREECIV_JSON_CONNECTION */
80765 e = 0;
80766
80767 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
80768
80769 if (e) {
80770 log_packet_detailed("'enabled' field error detected");
80771 }
80772
80773#ifdef FREECIV_JSON_CONNECTION
80774 field_addr.name = "giver_reqs";
80775#endif /* FREECIV_JSON_CONNECTION */
80776 e = 0;
80777
80778 {
80779 int i;
80780
80783
80784#ifdef FREECIV_JSON_CONNECTION
80785 /* Enter array. */
80786 field_addr.sub_location = plocation_elem_new(0);
80787#endif /* FREECIV_JSON_CONNECTION */
80788
80789 for (i = 0; i < requirement_vector_size(&real_packet->giver_reqs); i++) {
80790#ifdef FREECIV_JSON_CONNECTION
80791 /* Next array element. */
80792 field_addr.sub_location->number = i;
80793#endif /* FREECIV_JSON_CONNECTION */
80794
80795 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs.p[i]);
80796 }
80797
80798#ifdef FREECIV_JSON_CONNECTION
80799 /* Exit array. */
80800 FC_FREE(field_addr.sub_location);
80801#endif /* FREECIV_JSON_CONNECTION */
80802 }
80803
80804 if (e) {
80805 log_packet_detailed("'giver_reqs' field error detected");
80806 }
80807
80808#ifdef FREECIV_JSON_CONNECTION
80809 field_addr.name = "receiver_reqs";
80810#endif /* FREECIV_JSON_CONNECTION */
80811 e = 0;
80812
80813 {
80814 int i;
80815
80818
80819#ifdef FREECIV_JSON_CONNECTION
80820 /* Enter array. */
80821 field_addr.sub_location = plocation_elem_new(0);
80822#endif /* FREECIV_JSON_CONNECTION */
80823
80824 for (i = 0; i < requirement_vector_size(&real_packet->receiver_reqs); i++) {
80825#ifdef FREECIV_JSON_CONNECTION
80826 /* Next array element. */
80827 field_addr.sub_location->number = i;
80828#endif /* FREECIV_JSON_CONNECTION */
80829
80830 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs.p[i]);
80831 }
80832
80833#ifdef FREECIV_JSON_CONNECTION
80834 /* Exit array. */
80835 FC_FREE(field_addr.sub_location);
80836#endif /* FREECIV_JSON_CONNECTION */
80837 }
80838
80839 if (e) {
80840 log_packet_detailed("'receiver_reqs' field error detected");
80841 }
80842
80843#ifdef FREECIV_JSON_CONNECTION
80844 field_addr.name = "either_reqs";
80845#endif /* FREECIV_JSON_CONNECTION */
80846 e = 0;
80847
80848 {
80849 int i;
80850
80853
80854#ifdef FREECIV_JSON_CONNECTION
80855 /* Enter array. */
80856 field_addr.sub_location = plocation_elem_new(0);
80857#endif /* FREECIV_JSON_CONNECTION */
80858
80859 for (i = 0; i < requirement_vector_size(&real_packet->either_reqs); i++) {
80860#ifdef FREECIV_JSON_CONNECTION
80861 /* Next array element. */
80862 field_addr.sub_location->number = i;
80863#endif /* FREECIV_JSON_CONNECTION */
80864
80865 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->either_reqs.p[i]);
80866 }
80867
80868#ifdef FREECIV_JSON_CONNECTION
80869 /* Exit array. */
80870 FC_FREE(field_addr.sub_location);
80871#endif /* FREECIV_JSON_CONNECTION */
80872 }
80873
80874 if (e) {
80875 log_packet_detailed("'either_reqs' field error detected");
80876 }
80877#endif /* FREECIV_DELTA_PROTOCOL */
80878
80880}
80881
80883{
80884 if (!pc->used) {
80885 log_error("WARNING: trying to send data to the closed connection %s",
80887 return -1;
80888 }
80889 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet != nullptr, -1,
80890 "Handler for PACKET_RULESET_CLAUSE not installed");
80891 return pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet(pc, packet);
80892}
80893
80894void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
80895{
80896 conn_list_iterate(dest, pconn) {
80899}
80900
80901static inline void init_packet_ruleset_control(struct packet_ruleset_control *packet)
80902{
80903 memset(packet, 0, sizeof(*packet));
80904}
80905
80906#define free_packet_ruleset_control(_packet) (void) 0
80907#define destroy_packet_ruleset_control free
80908
80909#ifdef FREECIV_DELTA_PROTOCOL
80910#define hash_packet_ruleset_control_100 hash_const
80911#define cmp_packet_ruleset_control_100 cmp_const
80913#endif /* FREECIV_DELTA_PROTOCOL */
80914
80916{
80917#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_control(_packet)
80919
80920#ifdef FREECIV_JSON_CONNECTION
80921 struct plocation field_addr;
80922 {
80923 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
80926 }
80927#endif /* FREECIV_JSON_CONNECTION */
80928
80929 log_packet_detailed("packet_ruleset_control_100: got info about ()");
80930
80931#ifdef FREECIV_DELTA_PROTOCOL
80934 struct genhash **hash = pc->phs.received + PACKET_RULESET_CONTROL;
80935
80936 if (nullptr == *hash) {
80938 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
80939 }
80940
80941 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80942 *real_packet = *old;
80943 } else {
80944 /* packet is already initialized empty */
80945 log_packet_detailed(" no old info");
80946 }
80947
80948#ifdef FREECIV_JSON_CONNECTION
80949 field_addr.name = "fields";
80950#endif /* FREECIV_JSON_CONNECTION */
80951 DIO_BV_GET(&din, &field_addr, fields);
80952
80953 if (BV_ISSET(fields, 0)) {
80954 log_packet_detailed(" got field 'num_unit_classes'");
80955
80956#ifdef FREECIV_JSON_CONNECTION
80957 field_addr.name = "num_unit_classes";
80958#endif /* FREECIV_JSON_CONNECTION */
80959
80960 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
80961 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
80962 }
80963 }
80964
80965 if (BV_ISSET(fields, 1)) {
80966 log_packet_detailed(" got field 'num_unit_types'");
80967
80968#ifdef FREECIV_JSON_CONNECTION
80969 field_addr.name = "num_unit_types";
80970#endif /* FREECIV_JSON_CONNECTION */
80971
80972 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
80973 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
80974 }
80975 }
80976
80977 if (BV_ISSET(fields, 2)) {
80978 log_packet_detailed(" got field 'num_impr_types'");
80979
80980#ifdef FREECIV_JSON_CONNECTION
80981 field_addr.name = "num_impr_types";
80982#endif /* FREECIV_JSON_CONNECTION */
80983
80984 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
80985 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
80986 }
80987 }
80988
80989 if (BV_ISSET(fields, 3)) {
80990 log_packet_detailed(" got field 'num_tech_classes'");
80991
80992#ifdef FREECIV_JSON_CONNECTION
80993 field_addr.name = "num_tech_classes";
80994#endif /* FREECIV_JSON_CONNECTION */
80995
80996 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
80997 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
80998 }
80999 }
81000
81001 if (BV_ISSET(fields, 4)) {
81002 log_packet_detailed(" got field 'num_tech_types'");
81003
81004#ifdef FREECIV_JSON_CONNECTION
81005 field_addr.name = "num_tech_types";
81006#endif /* FREECIV_JSON_CONNECTION */
81007
81008 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
81009 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
81010 }
81011 }
81012
81013 if (BV_ISSET(fields, 5)) {
81014 log_packet_detailed(" got field 'num_extra_types'");
81015
81016#ifdef FREECIV_JSON_CONNECTION
81017 field_addr.name = "num_extra_types";
81018#endif /* FREECIV_JSON_CONNECTION */
81019
81020 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
81021 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
81022 }
81023 }
81024
81025 if (BV_ISSET(fields, 6)) {
81026 log_packet_detailed(" got field 'num_base_types'");
81027
81028#ifdef FREECIV_JSON_CONNECTION
81029 field_addr.name = "num_base_types";
81030#endif /* FREECIV_JSON_CONNECTION */
81031
81032 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
81033 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
81034 }
81035 }
81036
81037 if (BV_ISSET(fields, 7)) {
81038 log_packet_detailed(" got field 'num_road_types'");
81039
81040#ifdef FREECIV_JSON_CONNECTION
81041 field_addr.name = "num_road_types";
81042#endif /* FREECIV_JSON_CONNECTION */
81043
81044 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
81045 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
81046 }
81047 }
81048
81049 if (BV_ISSET(fields, 8)) {
81050 log_packet_detailed(" got field 'num_resource_types'");
81051
81052#ifdef FREECIV_JSON_CONNECTION
81053 field_addr.name = "num_resource_types";
81054#endif /* FREECIV_JSON_CONNECTION */
81055
81056 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
81057 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
81058 }
81059 }
81060
81061 if (BV_ISSET(fields, 9)) {
81062 log_packet_detailed(" got field 'num_goods_types'");
81063
81064#ifdef FREECIV_JSON_CONNECTION
81065 field_addr.name = "num_goods_types";
81066#endif /* FREECIV_JSON_CONNECTION */
81067
81068 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
81069 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
81070 }
81071 }
81072
81073 if (BV_ISSET(fields, 10)) {
81074 log_packet_detailed(" got field 'num_disaster_types'");
81075
81076#ifdef FREECIV_JSON_CONNECTION
81077 field_addr.name = "num_disaster_types";
81078#endif /* FREECIV_JSON_CONNECTION */
81079
81080 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
81081 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
81082 }
81083 }
81084
81085 if (BV_ISSET(fields, 11)) {
81086 log_packet_detailed(" got field 'num_achievement_types'");
81087
81088#ifdef FREECIV_JSON_CONNECTION
81089 field_addr.name = "num_achievement_types";
81090#endif /* FREECIV_JSON_CONNECTION */
81091
81092 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
81093 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
81094 }
81095 }
81096
81097 if (BV_ISSET(fields, 12)) {
81098 log_packet_detailed(" got field 'num_multipliers'");
81099
81100#ifdef FREECIV_JSON_CONNECTION
81101 field_addr.name = "num_multipliers";
81102#endif /* FREECIV_JSON_CONNECTION */
81103
81104 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
81105 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
81106 }
81107 }
81108
81109 if (BV_ISSET(fields, 13)) {
81110 log_packet_detailed(" got field 'num_styles'");
81111
81112#ifdef FREECIV_JSON_CONNECTION
81113 field_addr.name = "num_styles";
81114#endif /* FREECIV_JSON_CONNECTION */
81115
81116 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
81117 RECEIVE_PACKET_FIELD_ERROR(num_styles);
81118 }
81119 }
81120
81121 if (BV_ISSET(fields, 14)) {
81122 log_packet_detailed(" got field 'num_music_styles'");
81123
81124#ifdef FREECIV_JSON_CONNECTION
81125 field_addr.name = "num_music_styles";
81126#endif /* FREECIV_JSON_CONNECTION */
81127
81128 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
81129 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
81130 }
81131 }
81132
81133 if (BV_ISSET(fields, 15)) {
81134 log_packet_detailed(" got field 'government_count'");
81135
81136#ifdef FREECIV_JSON_CONNECTION
81137 field_addr.name = "government_count";
81138#endif /* FREECIV_JSON_CONNECTION */
81139
81140 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
81142 }
81143 }
81144
81145 if (BV_ISSET(fields, 16)) {
81146 log_packet_detailed(" got field 'nation_count'");
81147
81148#ifdef FREECIV_JSON_CONNECTION
81149 field_addr.name = "nation_count";
81150#endif /* FREECIV_JSON_CONNECTION */
81151
81152 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
81154 }
81155 }
81156
81157 if (BV_ISSET(fields, 17)) {
81158 log_packet_detailed(" got field 'num_city_styles'");
81159
81160#ifdef FREECIV_JSON_CONNECTION
81161 field_addr.name = "num_city_styles";
81162#endif /* FREECIV_JSON_CONNECTION */
81163
81164 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
81165 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
81166 }
81167 }
81168
81169 if (BV_ISSET(fields, 18)) {
81170 log_packet_detailed(" got field 'terrain_count'");
81171
81172#ifdef FREECIV_JSON_CONNECTION
81173 field_addr.name = "terrain_count";
81174#endif /* FREECIV_JSON_CONNECTION */
81175
81176 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
81178 }
81179 }
81180
81181 if (BV_ISSET(fields, 19)) {
81182 log_packet_detailed(" got field 'num_specialist_types'");
81183
81184#ifdef FREECIV_JSON_CONNECTION
81185 field_addr.name = "num_specialist_types";
81186#endif /* FREECIV_JSON_CONNECTION */
81187
81188 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
81189 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
81190 }
81191 }
81192
81193 if (BV_ISSET(fields, 20)) {
81194 log_packet_detailed(" got field 'num_nation_groups'");
81195
81196#ifdef FREECIV_JSON_CONNECTION
81197 field_addr.name = "num_nation_groups";
81198#endif /* FREECIV_JSON_CONNECTION */
81199
81200 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
81202 }
81203 }
81204
81205 if (BV_ISSET(fields, 21)) {
81206 log_packet_detailed(" got field 'num_nation_sets'");
81207
81208#ifdef FREECIV_JSON_CONNECTION
81209 field_addr.name = "num_nation_sets";
81210#endif /* FREECIV_JSON_CONNECTION */
81211
81212 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
81214 }
81215 }
81216
81217 if (BV_ISSET(fields, 22)) {
81218 log_packet_detailed(" got field 'preferred_tileset'");
81219
81220#ifdef FREECIV_JSON_CONNECTION
81221 field_addr.name = "preferred_tileset";
81222#endif /* FREECIV_JSON_CONNECTION */
81223
81224 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
81225 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
81226 }
81227 }
81228
81229 if (BV_ISSET(fields, 23)) {
81230 log_packet_detailed(" got field 'preferred_soundset'");
81231
81232#ifdef FREECIV_JSON_CONNECTION
81233 field_addr.name = "preferred_soundset";
81234#endif /* FREECIV_JSON_CONNECTION */
81235
81236 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
81237 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
81238 }
81239 }
81240
81241 if (BV_ISSET(fields, 24)) {
81242 log_packet_detailed(" got field 'preferred_musicset'");
81243
81244#ifdef FREECIV_JSON_CONNECTION
81245 field_addr.name = "preferred_musicset";
81246#endif /* FREECIV_JSON_CONNECTION */
81247
81248 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
81249 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
81250 }
81251 }
81252
81253 real_packet->popup_tech_help = BV_ISSET(fields, 25);
81254
81255 if (BV_ISSET(fields, 26)) {
81256 log_packet_detailed(" got field 'name'");
81257
81258#ifdef FREECIV_JSON_CONNECTION
81259 field_addr.name = "name";
81260#endif /* FREECIV_JSON_CONNECTION */
81261
81262 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81264 }
81265 }
81266
81267 if (BV_ISSET(fields, 27)) {
81268 log_packet_detailed(" got field 'version'");
81269
81270#ifdef FREECIV_JSON_CONNECTION
81271 field_addr.name = "version";
81272#endif /* FREECIV_JSON_CONNECTION */
81273
81274 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
81276 }
81277 }
81278
81279 if (BV_ISSET(fields, 28)) {
81280 log_packet_detailed(" got field 'alt_dir'");
81281
81282#ifdef FREECIV_JSON_CONNECTION
81283 field_addr.name = "alt_dir";
81284#endif /* FREECIV_JSON_CONNECTION */
81285
81286 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
81288 }
81289 }
81290
81291 if (BV_ISSET(fields, 29)) {
81292 log_packet_detailed(" got field 'desc_length'");
81293
81294#ifdef FREECIV_JSON_CONNECTION
81295 field_addr.name = "desc_length";
81296#endif /* FREECIV_JSON_CONNECTION */
81297
81298 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
81299 RECEIVE_PACKET_FIELD_ERROR(desc_length);
81300 }
81301 }
81302
81303 if (BV_ISSET(fields, 30)) {
81304 log_packet_detailed(" got field 'num_counters'");
81305
81306#ifdef FREECIV_JSON_CONNECTION
81307 field_addr.name = "num_counters";
81308#endif /* FREECIV_JSON_CONNECTION */
81309
81310 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
81311 RECEIVE_PACKET_FIELD_ERROR(num_counters);
81312 }
81313 }
81314
81315 if (nullptr == old) {
81316 old = fc_malloc(sizeof(*old));
81318 *old = *real_packet;
81320 } else {
81321 *old = *real_packet;
81322 }
81323
81324#else /* FREECIV_DELTA_PROTOCOL */
81325#ifdef FREECIV_JSON_CONNECTION
81326 field_addr.name = "num_unit_classes";
81327#endif /* FREECIV_JSON_CONNECTION */
81328
81329 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
81330 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
81331 }
81332
81333#ifdef FREECIV_JSON_CONNECTION
81334 field_addr.name = "num_unit_types";
81335#endif /* FREECIV_JSON_CONNECTION */
81336
81337 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
81338 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
81339 }
81340
81341#ifdef FREECIV_JSON_CONNECTION
81342 field_addr.name = "num_impr_types";
81343#endif /* FREECIV_JSON_CONNECTION */
81344
81345 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
81346 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
81347 }
81348
81349#ifdef FREECIV_JSON_CONNECTION
81350 field_addr.name = "num_tech_classes";
81351#endif /* FREECIV_JSON_CONNECTION */
81352
81353 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
81354 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
81355 }
81356
81357#ifdef FREECIV_JSON_CONNECTION
81358 field_addr.name = "num_tech_types";
81359#endif /* FREECIV_JSON_CONNECTION */
81360
81361 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
81362 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
81363 }
81364
81365#ifdef FREECIV_JSON_CONNECTION
81366 field_addr.name = "num_extra_types";
81367#endif /* FREECIV_JSON_CONNECTION */
81368
81369 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
81370 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
81371 }
81372
81373#ifdef FREECIV_JSON_CONNECTION
81374 field_addr.name = "num_base_types";
81375#endif /* FREECIV_JSON_CONNECTION */
81376
81377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
81378 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
81379 }
81380
81381#ifdef FREECIV_JSON_CONNECTION
81382 field_addr.name = "num_road_types";
81383#endif /* FREECIV_JSON_CONNECTION */
81384
81385 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
81386 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
81387 }
81388
81389#ifdef FREECIV_JSON_CONNECTION
81390 field_addr.name = "num_resource_types";
81391#endif /* FREECIV_JSON_CONNECTION */
81392
81393 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
81394 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
81395 }
81396
81397#ifdef FREECIV_JSON_CONNECTION
81398 field_addr.name = "num_goods_types";
81399#endif /* FREECIV_JSON_CONNECTION */
81400
81401 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
81402 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
81403 }
81404
81405#ifdef FREECIV_JSON_CONNECTION
81406 field_addr.name = "num_disaster_types";
81407#endif /* FREECIV_JSON_CONNECTION */
81408
81409 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
81410 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
81411 }
81412
81413#ifdef FREECIV_JSON_CONNECTION
81414 field_addr.name = "num_achievement_types";
81415#endif /* FREECIV_JSON_CONNECTION */
81416
81417 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
81418 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
81419 }
81420
81421#ifdef FREECIV_JSON_CONNECTION
81422 field_addr.name = "num_multipliers";
81423#endif /* FREECIV_JSON_CONNECTION */
81424
81425 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
81426 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
81427 }
81428
81429#ifdef FREECIV_JSON_CONNECTION
81430 field_addr.name = "num_styles";
81431#endif /* FREECIV_JSON_CONNECTION */
81432
81433 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
81434 RECEIVE_PACKET_FIELD_ERROR(num_styles);
81435 }
81436
81437#ifdef FREECIV_JSON_CONNECTION
81438 field_addr.name = "num_music_styles";
81439#endif /* FREECIV_JSON_CONNECTION */
81440
81441 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
81442 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
81443 }
81444
81445#ifdef FREECIV_JSON_CONNECTION
81446 field_addr.name = "government_count";
81447#endif /* FREECIV_JSON_CONNECTION */
81448
81449 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
81451 }
81452
81453#ifdef FREECIV_JSON_CONNECTION
81454 field_addr.name = "nation_count";
81455#endif /* FREECIV_JSON_CONNECTION */
81456
81457 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
81459 }
81460
81461#ifdef FREECIV_JSON_CONNECTION
81462 field_addr.name = "num_city_styles";
81463#endif /* FREECIV_JSON_CONNECTION */
81464
81465 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
81466 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
81467 }
81468
81469#ifdef FREECIV_JSON_CONNECTION
81470 field_addr.name = "terrain_count";
81471#endif /* FREECIV_JSON_CONNECTION */
81472
81473 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
81475 }
81476
81477#ifdef FREECIV_JSON_CONNECTION
81478 field_addr.name = "num_specialist_types";
81479#endif /* FREECIV_JSON_CONNECTION */
81480
81481 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
81482 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
81483 }
81484
81485#ifdef FREECIV_JSON_CONNECTION
81486 field_addr.name = "num_nation_groups";
81487#endif /* FREECIV_JSON_CONNECTION */
81488
81489 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
81491 }
81492
81493#ifdef FREECIV_JSON_CONNECTION
81494 field_addr.name = "num_nation_sets";
81495#endif /* FREECIV_JSON_CONNECTION */
81496
81497 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
81499 }
81500
81501#ifdef FREECIV_JSON_CONNECTION
81502 field_addr.name = "preferred_tileset";
81503#endif /* FREECIV_JSON_CONNECTION */
81504
81505 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
81506 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
81507 }
81508
81509#ifdef FREECIV_JSON_CONNECTION
81510 field_addr.name = "preferred_soundset";
81511#endif /* FREECIV_JSON_CONNECTION */
81512
81513 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
81514 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
81515 }
81516
81517#ifdef FREECIV_JSON_CONNECTION
81518 field_addr.name = "preferred_musicset";
81519#endif /* FREECIV_JSON_CONNECTION */
81520
81521 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
81522 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
81523 }
81524
81525#ifdef FREECIV_JSON_CONNECTION
81526 field_addr.name = "popup_tech_help";
81527#endif /* FREECIV_JSON_CONNECTION */
81528
81529 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->popup_tech_help)) {
81530 RECEIVE_PACKET_FIELD_ERROR(popup_tech_help);
81531 }
81532
81533#ifdef FREECIV_JSON_CONNECTION
81534 field_addr.name = "name";
81535#endif /* FREECIV_JSON_CONNECTION */
81536
81537 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
81539 }
81540
81541#ifdef FREECIV_JSON_CONNECTION
81542 field_addr.name = "version";
81543#endif /* FREECIV_JSON_CONNECTION */
81544
81545 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
81547 }
81548
81549#ifdef FREECIV_JSON_CONNECTION
81550 field_addr.name = "alt_dir";
81551#endif /* FREECIV_JSON_CONNECTION */
81552
81553 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
81555 }
81556
81557#ifdef FREECIV_JSON_CONNECTION
81558 field_addr.name = "desc_length";
81559#endif /* FREECIV_JSON_CONNECTION */
81560
81561 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
81562 RECEIVE_PACKET_FIELD_ERROR(desc_length);
81563 }
81564
81565#ifdef FREECIV_JSON_CONNECTION
81566 field_addr.name = "num_counters";
81567#endif /* FREECIV_JSON_CONNECTION */
81568
81569 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
81570 RECEIVE_PACKET_FIELD_ERROR(num_counters);
81571 }
81572#endif /* FREECIV_DELTA_PROTOCOL */
81573
81575#undef FREE_PACKET_STRUCT
81576}
81577
81579{
81580 const struct packet_ruleset_control *real_packet = packet;
81581 int e;
81583
81584 log_packet_detailed("packet_ruleset_control_100: sending info about ()");
81585
81586#ifdef FREECIV_DELTA_PROTOCOL
81589 bool differ;
81590 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CONTROL;
81591
81592 if (nullptr == *hash) {
81594 nullptr, nullptr, nullptr, destroy_packet_ruleset_control);
81595 }
81596 BV_CLR_ALL(fields);
81597
81598 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81599 old = fc_malloc(sizeof(*old));
81600 /* temporary bitcopy just to insert correctly */
81601 *old = *real_packet;
81604 }
81605
81606 differ = (old->num_unit_classes != real_packet->num_unit_classes);
81607 if (differ) {
81608 BV_SET(fields, 0);
81609 }
81610
81611 differ = (old->num_unit_types != real_packet->num_unit_types);
81612 if (differ) {
81613 BV_SET(fields, 1);
81614 }
81615
81616 differ = (old->num_impr_types != real_packet->num_impr_types);
81617 if (differ) {
81618 BV_SET(fields, 2);
81619 }
81620
81621 differ = (old->num_tech_classes != real_packet->num_tech_classes);
81622 if (differ) {
81623 BV_SET(fields, 3);
81624 }
81625
81626 differ = (old->num_tech_types != real_packet->num_tech_types);
81627 if (differ) {
81628 BV_SET(fields, 4);
81629 }
81630
81631 differ = (old->num_extra_types != real_packet->num_extra_types);
81632 if (differ) {
81633 BV_SET(fields, 5);
81634 }
81635
81636 differ = (old->num_base_types != real_packet->num_base_types);
81637 if (differ) {
81638 BV_SET(fields, 6);
81639 }
81640
81641 differ = (old->num_road_types != real_packet->num_road_types);
81642 if (differ) {
81643 BV_SET(fields, 7);
81644 }
81645
81646 differ = (old->num_resource_types != real_packet->num_resource_types);
81647 if (differ) {
81648 BV_SET(fields, 8);
81649 }
81650
81651 differ = (old->num_goods_types != real_packet->num_goods_types);
81652 if (differ) {
81653 BV_SET(fields, 9);
81654 }
81655
81656 differ = (old->num_disaster_types != real_packet->num_disaster_types);
81657 if (differ) {
81658 BV_SET(fields, 10);
81659 }
81660
81661 differ = (old->num_achievement_types != real_packet->num_achievement_types);
81662 if (differ) {
81663 BV_SET(fields, 11);
81664 }
81665
81666 differ = (old->num_multipliers != real_packet->num_multipliers);
81667 if (differ) {
81668 BV_SET(fields, 12);
81669 }
81670
81671 differ = (old->num_styles != real_packet->num_styles);
81672 if (differ) {
81673 BV_SET(fields, 13);
81674 }
81675
81676 differ = (old->num_music_styles != real_packet->num_music_styles);
81677 if (differ) {
81678 BV_SET(fields, 14);
81679 }
81680
81681 differ = (old->government_count != real_packet->government_count);
81682 if (differ) {
81683 BV_SET(fields, 15);
81684 }
81685
81686 differ = (old->nation_count != real_packet->nation_count);
81687 if (differ) {
81688 BV_SET(fields, 16);
81689 }
81690
81691 differ = (old->num_city_styles != real_packet->num_city_styles);
81692 if (differ) {
81693 BV_SET(fields, 17);
81694 }
81695
81696 differ = (old->terrain_count != real_packet->terrain_count);
81697 if (differ) {
81698 BV_SET(fields, 18);
81699 }
81700
81701 differ = (old->num_specialist_types != real_packet->num_specialist_types);
81702 if (differ) {
81703 BV_SET(fields, 19);
81704 }
81705
81706 differ = (old->num_nation_groups != real_packet->num_nation_groups);
81707 if (differ) {
81708 BV_SET(fields, 20);
81709 }
81710
81711 differ = (old->num_nation_sets != real_packet->num_nation_sets);
81712 if (differ) {
81713 BV_SET(fields, 21);
81714 }
81715
81716 differ = (strcmp(old->preferred_tileset, real_packet->preferred_tileset) != 0);
81717 if (differ) {
81718 BV_SET(fields, 22);
81719 }
81720
81721 differ = (strcmp(old->preferred_soundset, real_packet->preferred_soundset) != 0);
81722 if (differ) {
81723 BV_SET(fields, 23);
81724 }
81725
81726 differ = (strcmp(old->preferred_musicset, real_packet->preferred_musicset) != 0);
81727 if (differ) {
81728 BV_SET(fields, 24);
81729 }
81730
81731 /* folded into head */
81732 if (real_packet->popup_tech_help) {
81733 BV_SET(fields, 25);
81734 }
81735
81736 differ = (strcmp(old->name, real_packet->name) != 0);
81737 if (differ) {
81738 BV_SET(fields, 26);
81739 }
81740
81741 differ = (strcmp(old->version, real_packet->version) != 0);
81742 if (differ) {
81743 BV_SET(fields, 27);
81744 }
81745
81746 differ = (strcmp(old->alt_dir, real_packet->alt_dir) != 0);
81747 if (differ) {
81748 BV_SET(fields, 28);
81749 }
81750
81751 differ = (old->desc_length != real_packet->desc_length);
81752 if (differ) {
81753 BV_SET(fields, 29);
81754 }
81755
81756 differ = (old->num_counters != real_packet->num_counters);
81757 if (differ) {
81758 BV_SET(fields, 30);
81759 }
81760#endif /* FREECIV_DELTA_PROTOCOL */
81761
81762#ifdef FREECIV_JSON_CONNECTION
81763 struct plocation field_addr;
81764 {
81765 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
81768 }
81769#endif /* FREECIV_JSON_CONNECTION */
81770
81771#ifdef FREECIV_DELTA_PROTOCOL
81772#ifdef FREECIV_JSON_CONNECTION
81773 field_addr.name = "fields";
81774#endif /* FREECIV_JSON_CONNECTION */
81775 e = 0;
81776 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81777 if (e) {
81778 log_packet_detailed("fields bitvector error detected");
81779 }
81780
81781 if (BV_ISSET(fields, 0)) {
81782 log_packet_detailed(" field 'num_unit_classes' has changed");
81783
81784#ifdef FREECIV_JSON_CONNECTION
81785 field_addr.name = "num_unit_classes";
81786#endif /* FREECIV_JSON_CONNECTION */
81787 e = 0;
81788
81789 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
81790
81791 if (e) {
81792 log_packet_detailed("'num_unit_classes' field error detected");
81793 }
81794 }
81795
81796 if (BV_ISSET(fields, 1)) {
81797 log_packet_detailed(" field 'num_unit_types' has changed");
81798
81799#ifdef FREECIV_JSON_CONNECTION
81800 field_addr.name = "num_unit_types";
81801#endif /* FREECIV_JSON_CONNECTION */
81802 e = 0;
81803
81804 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
81805
81806 if (e) {
81807 log_packet_detailed("'num_unit_types' field error detected");
81808 }
81809 }
81810
81811 if (BV_ISSET(fields, 2)) {
81812 log_packet_detailed(" field 'num_impr_types' has changed");
81813
81814#ifdef FREECIV_JSON_CONNECTION
81815 field_addr.name = "num_impr_types";
81816#endif /* FREECIV_JSON_CONNECTION */
81817 e = 0;
81818
81819 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
81820
81821 if (e) {
81822 log_packet_detailed("'num_impr_types' field error detected");
81823 }
81824 }
81825
81826 if (BV_ISSET(fields, 3)) {
81827 log_packet_detailed(" field 'num_tech_classes' has changed");
81828
81829#ifdef FREECIV_JSON_CONNECTION
81830 field_addr.name = "num_tech_classes";
81831#endif /* FREECIV_JSON_CONNECTION */
81832 e = 0;
81833
81834 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
81835
81836 if (e) {
81837 log_packet_detailed("'num_tech_classes' field error detected");
81838 }
81839 }
81840
81841 if (BV_ISSET(fields, 4)) {
81842 log_packet_detailed(" field 'num_tech_types' has changed");
81843
81844#ifdef FREECIV_JSON_CONNECTION
81845 field_addr.name = "num_tech_types";
81846#endif /* FREECIV_JSON_CONNECTION */
81847 e = 0;
81848
81849 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
81850
81851 if (e) {
81852 log_packet_detailed("'num_tech_types' field error detected");
81853 }
81854 }
81855
81856 if (BV_ISSET(fields, 5)) {
81857 log_packet_detailed(" field 'num_extra_types' has changed");
81858
81859#ifdef FREECIV_JSON_CONNECTION
81860 field_addr.name = "num_extra_types";
81861#endif /* FREECIV_JSON_CONNECTION */
81862 e = 0;
81863
81864 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
81865
81866 if (e) {
81867 log_packet_detailed("'num_extra_types' field error detected");
81868 }
81869 }
81870
81871 if (BV_ISSET(fields, 6)) {
81872 log_packet_detailed(" field 'num_base_types' has changed");
81873
81874#ifdef FREECIV_JSON_CONNECTION
81875 field_addr.name = "num_base_types";
81876#endif /* FREECIV_JSON_CONNECTION */
81877 e = 0;
81878
81879 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
81880
81881 if (e) {
81882 log_packet_detailed("'num_base_types' field error detected");
81883 }
81884 }
81885
81886 if (BV_ISSET(fields, 7)) {
81887 log_packet_detailed(" field 'num_road_types' has changed");
81888
81889#ifdef FREECIV_JSON_CONNECTION
81890 field_addr.name = "num_road_types";
81891#endif /* FREECIV_JSON_CONNECTION */
81892 e = 0;
81893
81894 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
81895
81896 if (e) {
81897 log_packet_detailed("'num_road_types' field error detected");
81898 }
81899 }
81900
81901 if (BV_ISSET(fields, 8)) {
81902 log_packet_detailed(" field 'num_resource_types' has changed");
81903
81904#ifdef FREECIV_JSON_CONNECTION
81905 field_addr.name = "num_resource_types";
81906#endif /* FREECIV_JSON_CONNECTION */
81907 e = 0;
81908
81909 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
81910
81911 if (e) {
81912 log_packet_detailed("'num_resource_types' field error detected");
81913 }
81914 }
81915
81916 if (BV_ISSET(fields, 9)) {
81917 log_packet_detailed(" field 'num_goods_types' has changed");
81918
81919#ifdef FREECIV_JSON_CONNECTION
81920 field_addr.name = "num_goods_types";
81921#endif /* FREECIV_JSON_CONNECTION */
81922 e = 0;
81923
81924 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
81925
81926 if (e) {
81927 log_packet_detailed("'num_goods_types' field error detected");
81928 }
81929 }
81930
81931 if (BV_ISSET(fields, 10)) {
81932 log_packet_detailed(" field 'num_disaster_types' has changed");
81933
81934#ifdef FREECIV_JSON_CONNECTION
81935 field_addr.name = "num_disaster_types";
81936#endif /* FREECIV_JSON_CONNECTION */
81937 e = 0;
81938
81939 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
81940
81941 if (e) {
81942 log_packet_detailed("'num_disaster_types' field error detected");
81943 }
81944 }
81945
81946 if (BV_ISSET(fields, 11)) {
81947 log_packet_detailed(" field 'num_achievement_types' has changed");
81948
81949#ifdef FREECIV_JSON_CONNECTION
81950 field_addr.name = "num_achievement_types";
81951#endif /* FREECIV_JSON_CONNECTION */
81952 e = 0;
81953
81954 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
81955
81956 if (e) {
81957 log_packet_detailed("'num_achievement_types' field error detected");
81958 }
81959 }
81960
81961 if (BV_ISSET(fields, 12)) {
81962 log_packet_detailed(" field 'num_multipliers' has changed");
81963
81964#ifdef FREECIV_JSON_CONNECTION
81965 field_addr.name = "num_multipliers";
81966#endif /* FREECIV_JSON_CONNECTION */
81967 e = 0;
81968
81969 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
81970
81971 if (e) {
81972 log_packet_detailed("'num_multipliers' field error detected");
81973 }
81974 }
81975
81976 if (BV_ISSET(fields, 13)) {
81977 log_packet_detailed(" field 'num_styles' has changed");
81978
81979#ifdef FREECIV_JSON_CONNECTION
81980 field_addr.name = "num_styles";
81981#endif /* FREECIV_JSON_CONNECTION */
81982 e = 0;
81983
81984 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
81985
81986 if (e) {
81987 log_packet_detailed("'num_styles' field error detected");
81988 }
81989 }
81990
81991 if (BV_ISSET(fields, 14)) {
81992 log_packet_detailed(" field 'num_music_styles' has changed");
81993
81994#ifdef FREECIV_JSON_CONNECTION
81995 field_addr.name = "num_music_styles";
81996#endif /* FREECIV_JSON_CONNECTION */
81997 e = 0;
81998
81999 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
82000
82001 if (e) {
82002 log_packet_detailed("'num_music_styles' field error detected");
82003 }
82004 }
82005
82006 if (BV_ISSET(fields, 15)) {
82007 log_packet_detailed(" field 'government_count' has changed");
82008
82009#ifdef FREECIV_JSON_CONNECTION
82010 field_addr.name = "government_count";
82011#endif /* FREECIV_JSON_CONNECTION */
82012 e = 0;
82013
82014 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
82015
82016 if (e) {
82017 log_packet_detailed("'government_count' field error detected");
82018 }
82019 }
82020
82021 if (BV_ISSET(fields, 16)) {
82022 log_packet_detailed(" field 'nation_count' has changed");
82023
82024#ifdef FREECIV_JSON_CONNECTION
82025 field_addr.name = "nation_count";
82026#endif /* FREECIV_JSON_CONNECTION */
82027 e = 0;
82028
82029 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
82030
82031 if (e) {
82032 log_packet_detailed("'nation_count' field error detected");
82033 }
82034 }
82035
82036 if (BV_ISSET(fields, 17)) {
82037 log_packet_detailed(" field 'num_city_styles' has changed");
82038
82039#ifdef FREECIV_JSON_CONNECTION
82040 field_addr.name = "num_city_styles";
82041#endif /* FREECIV_JSON_CONNECTION */
82042 e = 0;
82043
82044 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
82045
82046 if (e) {
82047 log_packet_detailed("'num_city_styles' field error detected");
82048 }
82049 }
82050
82051 if (BV_ISSET(fields, 18)) {
82052 log_packet_detailed(" field 'terrain_count' has changed");
82053
82054#ifdef FREECIV_JSON_CONNECTION
82055 field_addr.name = "terrain_count";
82056#endif /* FREECIV_JSON_CONNECTION */
82057 e = 0;
82058
82059 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
82060
82061 if (e) {
82062 log_packet_detailed("'terrain_count' field error detected");
82063 }
82064 }
82065
82066 if (BV_ISSET(fields, 19)) {
82067 log_packet_detailed(" field 'num_specialist_types' has changed");
82068
82069#ifdef FREECIV_JSON_CONNECTION
82070 field_addr.name = "num_specialist_types";
82071#endif /* FREECIV_JSON_CONNECTION */
82072 e = 0;
82073
82074 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
82075
82076 if (e) {
82077 log_packet_detailed("'num_specialist_types' field error detected");
82078 }
82079 }
82080
82081 if (BV_ISSET(fields, 20)) {
82082 log_packet_detailed(" field 'num_nation_groups' has changed");
82083
82084#ifdef FREECIV_JSON_CONNECTION
82085 field_addr.name = "num_nation_groups";
82086#endif /* FREECIV_JSON_CONNECTION */
82087 e = 0;
82088
82089 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
82090
82091 if (e) {
82092 log_packet_detailed("'num_nation_groups' field error detected");
82093 }
82094 }
82095
82096 if (BV_ISSET(fields, 21)) {
82097 log_packet_detailed(" field 'num_nation_sets' has changed");
82098
82099#ifdef FREECIV_JSON_CONNECTION
82100 field_addr.name = "num_nation_sets";
82101#endif /* FREECIV_JSON_CONNECTION */
82102 e = 0;
82103
82104 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
82105
82106 if (e) {
82107 log_packet_detailed("'num_nation_sets' field error detected");
82108 }
82109 }
82110
82111 if (BV_ISSET(fields, 22)) {
82112 log_packet_detailed(" field 'preferred_tileset' has changed");
82113
82114#ifdef FREECIV_JSON_CONNECTION
82115 field_addr.name = "preferred_tileset";
82116#endif /* FREECIV_JSON_CONNECTION */
82117 e = 0;
82118
82119 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
82120
82121 if (e) {
82122 log_packet_detailed("'preferred_tileset' field error detected");
82123 }
82124 }
82125
82126 if (BV_ISSET(fields, 23)) {
82127 log_packet_detailed(" field 'preferred_soundset' has changed");
82128
82129#ifdef FREECIV_JSON_CONNECTION
82130 field_addr.name = "preferred_soundset";
82131#endif /* FREECIV_JSON_CONNECTION */
82132 e = 0;
82133
82134 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
82135
82136 if (e) {
82137 log_packet_detailed("'preferred_soundset' field error detected");
82138 }
82139 }
82140
82141 if (BV_ISSET(fields, 24)) {
82142 log_packet_detailed(" field 'preferred_musicset' has changed");
82143
82144#ifdef FREECIV_JSON_CONNECTION
82145 field_addr.name = "preferred_musicset";
82146#endif /* FREECIV_JSON_CONNECTION */
82147 e = 0;
82148
82149 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
82150
82151 if (e) {
82152 log_packet_detailed("'preferred_musicset' field error detected");
82153 }
82154 }
82155
82156 /* field 25 is folded into the header */
82157
82158 if (BV_ISSET(fields, 26)) {
82159 log_packet_detailed(" field 'name' has changed");
82160
82161#ifdef FREECIV_JSON_CONNECTION
82162 field_addr.name = "name";
82163#endif /* FREECIV_JSON_CONNECTION */
82164 e = 0;
82165
82166 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
82167
82168 if (e) {
82169 log_packet_detailed("'name' field error detected");
82170 }
82171 }
82172
82173 if (BV_ISSET(fields, 27)) {
82174 log_packet_detailed(" field 'version' has changed");
82175
82176#ifdef FREECIV_JSON_CONNECTION
82177 field_addr.name = "version";
82178#endif /* FREECIV_JSON_CONNECTION */
82179 e = 0;
82180
82181 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
82182
82183 if (e) {
82184 log_packet_detailed("'version' field error detected");
82185 }
82186 }
82187
82188 if (BV_ISSET(fields, 28)) {
82189 log_packet_detailed(" field 'alt_dir' has changed");
82190
82191#ifdef FREECIV_JSON_CONNECTION
82192 field_addr.name = "alt_dir";
82193#endif /* FREECIV_JSON_CONNECTION */
82194 e = 0;
82195
82196 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
82197
82198 if (e) {
82199 log_packet_detailed("'alt_dir' field error detected");
82200 }
82201 }
82202
82203 if (BV_ISSET(fields, 29)) {
82204 log_packet_detailed(" field 'desc_length' has changed");
82205
82206#ifdef FREECIV_JSON_CONNECTION
82207 field_addr.name = "desc_length";
82208#endif /* FREECIV_JSON_CONNECTION */
82209 e = 0;
82210
82211 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
82212
82213 if (e) {
82214 log_packet_detailed("'desc_length' field error detected");
82215 }
82216 }
82217
82218 if (BV_ISSET(fields, 30)) {
82219 log_packet_detailed(" field 'num_counters' has changed");
82220
82221#ifdef FREECIV_JSON_CONNECTION
82222 field_addr.name = "num_counters";
82223#endif /* FREECIV_JSON_CONNECTION */
82224 e = 0;
82225
82226 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
82227
82228 if (e) {
82229 log_packet_detailed("'num_counters' field error detected");
82230 }
82231 }
82232
82233 *old = *real_packet;
82234
82235#else /* FREECIV_DELTA_PROTOCOL */
82236#ifdef FREECIV_JSON_CONNECTION
82237 field_addr.name = "num_unit_classes";
82238#endif /* FREECIV_JSON_CONNECTION */
82239 e = 0;
82240
82241 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
82242
82243 if (e) {
82244 log_packet_detailed("'num_unit_classes' field error detected");
82245 }
82246
82247#ifdef FREECIV_JSON_CONNECTION
82248 field_addr.name = "num_unit_types";
82249#endif /* FREECIV_JSON_CONNECTION */
82250 e = 0;
82251
82252 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
82253
82254 if (e) {
82255 log_packet_detailed("'num_unit_types' field error detected");
82256 }
82257
82258#ifdef FREECIV_JSON_CONNECTION
82259 field_addr.name = "num_impr_types";
82260#endif /* FREECIV_JSON_CONNECTION */
82261 e = 0;
82262
82263 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
82264
82265 if (e) {
82266 log_packet_detailed("'num_impr_types' field error detected");
82267 }
82268
82269#ifdef FREECIV_JSON_CONNECTION
82270 field_addr.name = "num_tech_classes";
82271#endif /* FREECIV_JSON_CONNECTION */
82272 e = 0;
82273
82274 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
82275
82276 if (e) {
82277 log_packet_detailed("'num_tech_classes' field error detected");
82278 }
82279
82280#ifdef FREECIV_JSON_CONNECTION
82281 field_addr.name = "num_tech_types";
82282#endif /* FREECIV_JSON_CONNECTION */
82283 e = 0;
82284
82285 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
82286
82287 if (e) {
82288 log_packet_detailed("'num_tech_types' field error detected");
82289 }
82290
82291#ifdef FREECIV_JSON_CONNECTION
82292 field_addr.name = "num_extra_types";
82293#endif /* FREECIV_JSON_CONNECTION */
82294 e = 0;
82295
82296 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
82297
82298 if (e) {
82299 log_packet_detailed("'num_extra_types' field error detected");
82300 }
82301
82302#ifdef FREECIV_JSON_CONNECTION
82303 field_addr.name = "num_base_types";
82304#endif /* FREECIV_JSON_CONNECTION */
82305 e = 0;
82306
82307 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
82308
82309 if (e) {
82310 log_packet_detailed("'num_base_types' field error detected");
82311 }
82312
82313#ifdef FREECIV_JSON_CONNECTION
82314 field_addr.name = "num_road_types";
82315#endif /* FREECIV_JSON_CONNECTION */
82316 e = 0;
82317
82318 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
82319
82320 if (e) {
82321 log_packet_detailed("'num_road_types' field error detected");
82322 }
82323
82324#ifdef FREECIV_JSON_CONNECTION
82325 field_addr.name = "num_resource_types";
82326#endif /* FREECIV_JSON_CONNECTION */
82327 e = 0;
82328
82329 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
82330
82331 if (e) {
82332 log_packet_detailed("'num_resource_types' field error detected");
82333 }
82334
82335#ifdef FREECIV_JSON_CONNECTION
82336 field_addr.name = "num_goods_types";
82337#endif /* FREECIV_JSON_CONNECTION */
82338 e = 0;
82339
82340 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
82341
82342 if (e) {
82343 log_packet_detailed("'num_goods_types' field error detected");
82344 }
82345
82346#ifdef FREECIV_JSON_CONNECTION
82347 field_addr.name = "num_disaster_types";
82348#endif /* FREECIV_JSON_CONNECTION */
82349 e = 0;
82350
82351 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
82352
82353 if (e) {
82354 log_packet_detailed("'num_disaster_types' field error detected");
82355 }
82356
82357#ifdef FREECIV_JSON_CONNECTION
82358 field_addr.name = "num_achievement_types";
82359#endif /* FREECIV_JSON_CONNECTION */
82360 e = 0;
82361
82362 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
82363
82364 if (e) {
82365 log_packet_detailed("'num_achievement_types' field error detected");
82366 }
82367
82368#ifdef FREECIV_JSON_CONNECTION
82369 field_addr.name = "num_multipliers";
82370#endif /* FREECIV_JSON_CONNECTION */
82371 e = 0;
82372
82373 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
82374
82375 if (e) {
82376 log_packet_detailed("'num_multipliers' field error detected");
82377 }
82378
82379#ifdef FREECIV_JSON_CONNECTION
82380 field_addr.name = "num_styles";
82381#endif /* FREECIV_JSON_CONNECTION */
82382 e = 0;
82383
82384 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
82385
82386 if (e) {
82387 log_packet_detailed("'num_styles' field error detected");
82388 }
82389
82390#ifdef FREECIV_JSON_CONNECTION
82391 field_addr.name = "num_music_styles";
82392#endif /* FREECIV_JSON_CONNECTION */
82393 e = 0;
82394
82395 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
82396
82397 if (e) {
82398 log_packet_detailed("'num_music_styles' field error detected");
82399 }
82400
82401#ifdef FREECIV_JSON_CONNECTION
82402 field_addr.name = "government_count";
82403#endif /* FREECIV_JSON_CONNECTION */
82404 e = 0;
82405
82406 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
82407
82408 if (e) {
82409 log_packet_detailed("'government_count' field error detected");
82410 }
82411
82412#ifdef FREECIV_JSON_CONNECTION
82413 field_addr.name = "nation_count";
82414#endif /* FREECIV_JSON_CONNECTION */
82415 e = 0;
82416
82417 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
82418
82419 if (e) {
82420 log_packet_detailed("'nation_count' field error detected");
82421 }
82422
82423#ifdef FREECIV_JSON_CONNECTION
82424 field_addr.name = "num_city_styles";
82425#endif /* FREECIV_JSON_CONNECTION */
82426 e = 0;
82427
82428 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
82429
82430 if (e) {
82431 log_packet_detailed("'num_city_styles' field error detected");
82432 }
82433
82434#ifdef FREECIV_JSON_CONNECTION
82435 field_addr.name = "terrain_count";
82436#endif /* FREECIV_JSON_CONNECTION */
82437 e = 0;
82438
82439 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
82440
82441 if (e) {
82442 log_packet_detailed("'terrain_count' field error detected");
82443 }
82444
82445#ifdef FREECIV_JSON_CONNECTION
82446 field_addr.name = "num_specialist_types";
82447#endif /* FREECIV_JSON_CONNECTION */
82448 e = 0;
82449
82450 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
82451
82452 if (e) {
82453 log_packet_detailed("'num_specialist_types' field error detected");
82454 }
82455
82456#ifdef FREECIV_JSON_CONNECTION
82457 field_addr.name = "num_nation_groups";
82458#endif /* FREECIV_JSON_CONNECTION */
82459 e = 0;
82460
82461 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
82462
82463 if (e) {
82464 log_packet_detailed("'num_nation_groups' field error detected");
82465 }
82466
82467#ifdef FREECIV_JSON_CONNECTION
82468 field_addr.name = "num_nation_sets";
82469#endif /* FREECIV_JSON_CONNECTION */
82470 e = 0;
82471
82472 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
82473
82474 if (e) {
82475 log_packet_detailed("'num_nation_sets' field error detected");
82476 }
82477
82478#ifdef FREECIV_JSON_CONNECTION
82479 field_addr.name = "preferred_tileset";
82480#endif /* FREECIV_JSON_CONNECTION */
82481 e = 0;
82482
82483 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
82484
82485 if (e) {
82486 log_packet_detailed("'preferred_tileset' field error detected");
82487 }
82488
82489#ifdef FREECIV_JSON_CONNECTION
82490 field_addr.name = "preferred_soundset";
82491#endif /* FREECIV_JSON_CONNECTION */
82492 e = 0;
82493
82494 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
82495
82496 if (e) {
82497 log_packet_detailed("'preferred_soundset' field error detected");
82498 }
82499
82500#ifdef FREECIV_JSON_CONNECTION
82501 field_addr.name = "preferred_musicset";
82502#endif /* FREECIV_JSON_CONNECTION */
82503 e = 0;
82504
82505 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
82506
82507 if (e) {
82508 log_packet_detailed("'preferred_musicset' field error detected");
82509 }
82510
82511#ifdef FREECIV_JSON_CONNECTION
82512 field_addr.name = "popup_tech_help";
82513#endif /* FREECIV_JSON_CONNECTION */
82514 e = 0;
82515
82516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->popup_tech_help);
82517
82518 if (e) {
82519 log_packet_detailed("'popup_tech_help' field error detected");
82520 }
82521
82522#ifdef FREECIV_JSON_CONNECTION
82523 field_addr.name = "name";
82524#endif /* FREECIV_JSON_CONNECTION */
82525 e = 0;
82526
82527 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
82528
82529 if (e) {
82530 log_packet_detailed("'name' field error detected");
82531 }
82532
82533#ifdef FREECIV_JSON_CONNECTION
82534 field_addr.name = "version";
82535#endif /* FREECIV_JSON_CONNECTION */
82536 e = 0;
82537
82538 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
82539
82540 if (e) {
82541 log_packet_detailed("'version' field error detected");
82542 }
82543
82544#ifdef FREECIV_JSON_CONNECTION
82545 field_addr.name = "alt_dir";
82546#endif /* FREECIV_JSON_CONNECTION */
82547 e = 0;
82548
82549 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
82550
82551 if (e) {
82552 log_packet_detailed("'alt_dir' field error detected");
82553 }
82554
82555#ifdef FREECIV_JSON_CONNECTION
82556 field_addr.name = "desc_length";
82557#endif /* FREECIV_JSON_CONNECTION */
82558 e = 0;
82559
82560 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
82561
82562 if (e) {
82563 log_packet_detailed("'desc_length' field error detected");
82564 }
82565
82566#ifdef FREECIV_JSON_CONNECTION
82567 field_addr.name = "num_counters";
82568#endif /* FREECIV_JSON_CONNECTION */
82569 e = 0;
82570
82571 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
82572
82573 if (e) {
82574 log_packet_detailed("'num_counters' field error detected");
82575 }
82576#endif /* FREECIV_DELTA_PROTOCOL */
82577
82579}
82580
82582{
82583 if (!pc->used) {
82584 log_error("WARNING: trying to send data to the closed connection %s",
82586 return -1;
82587 }
82588 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet != nullptr, -1,
82589 "Handler for PACKET_RULESET_CONTROL not installed");
82590 return pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet(pc, packet);
82591}
82592
82593void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
82594{
82595 conn_list_iterate(dest, pconn) {
82598}
82599
82600static inline void init_packet_ruleset_summary(struct packet_ruleset_summary *packet)
82601{
82602 memset(packet, 0, sizeof(*packet));
82603}
82604
82605#define free_packet_ruleset_summary(_packet) (void) 0
82606#define destroy_packet_ruleset_summary free
82607
82608#ifdef FREECIV_DELTA_PROTOCOL
82609#define hash_packet_ruleset_summary_100 hash_const
82610#define cmp_packet_ruleset_summary_100 cmp_const
82612#endif /* FREECIV_DELTA_PROTOCOL */
82613
82615{
82616#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_summary(_packet)
82618
82619#ifdef FREECIV_JSON_CONNECTION
82620 struct plocation field_addr;
82621 {
82622 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82625 }
82626#endif /* FREECIV_JSON_CONNECTION */
82627
82628 log_packet_detailed("packet_ruleset_summary_100: got info about ()");
82629
82630#ifdef FREECIV_DELTA_PROTOCOL
82633 struct genhash **hash = pc->phs.received + PACKET_RULESET_SUMMARY;
82634
82635 if (nullptr == *hash) {
82637 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
82638 }
82639
82640 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82641 *real_packet = *old;
82642 } else {
82643 /* packet is already initialized empty */
82644 log_packet_detailed(" no old info");
82645 }
82646
82647#ifdef FREECIV_JSON_CONNECTION
82648 field_addr.name = "fields";
82649#endif /* FREECIV_JSON_CONNECTION */
82650 DIO_BV_GET(&din, &field_addr, fields);
82651
82652 if (BV_ISSET(fields, 0)) {
82653 log_packet_detailed(" got field 'text'");
82654
82655#ifdef FREECIV_JSON_CONNECTION
82656 field_addr.name = "text";
82657#endif /* FREECIV_JSON_CONNECTION */
82658
82659 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82661 }
82662 }
82663
82664 if (nullptr == old) {
82665 old = fc_malloc(sizeof(*old));
82667 *old = *real_packet;
82669 } else {
82670 *old = *real_packet;
82671 }
82672
82673#else /* FREECIV_DELTA_PROTOCOL */
82674#ifdef FREECIV_JSON_CONNECTION
82675 field_addr.name = "text";
82676#endif /* FREECIV_JSON_CONNECTION */
82677
82678 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82680 }
82681#endif /* FREECIV_DELTA_PROTOCOL */
82682
82684#undef FREE_PACKET_STRUCT
82685}
82686
82688{
82689 const struct packet_ruleset_summary *real_packet = packet;
82690 int e;
82692
82693 log_packet_detailed("packet_ruleset_summary_100: sending info about ()");
82694
82695#ifdef FREECIV_DELTA_PROTOCOL
82698 bool differ;
82699 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SUMMARY;
82700
82701 if (nullptr == *hash) {
82703 nullptr, nullptr, nullptr, destroy_packet_ruleset_summary);
82704 }
82705 BV_CLR_ALL(fields);
82706
82707 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82708 old = fc_malloc(sizeof(*old));
82709 /* temporary bitcopy just to insert correctly */
82710 *old = *real_packet;
82713 }
82714
82715 differ = (strcmp(old->text, real_packet->text) != 0);
82716 if (differ) {
82717 BV_SET(fields, 0);
82718 }
82719#endif /* FREECIV_DELTA_PROTOCOL */
82720
82721#ifdef FREECIV_JSON_CONNECTION
82722 struct plocation field_addr;
82723 {
82724 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82727 }
82728#endif /* FREECIV_JSON_CONNECTION */
82729
82730#ifdef FREECIV_DELTA_PROTOCOL
82731#ifdef FREECIV_JSON_CONNECTION
82732 field_addr.name = "fields";
82733#endif /* FREECIV_JSON_CONNECTION */
82734 e = 0;
82735 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82736 if (e) {
82737 log_packet_detailed("fields bitvector error detected");
82738 }
82739
82740 if (BV_ISSET(fields, 0)) {
82741 log_packet_detailed(" field 'text' has changed");
82742
82743#ifdef FREECIV_JSON_CONNECTION
82744 field_addr.name = "text";
82745#endif /* FREECIV_JSON_CONNECTION */
82746 e = 0;
82747
82748 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82749
82750 if (e) {
82751 log_packet_detailed("'text' field error detected");
82752 }
82753 }
82754
82755 *old = *real_packet;
82756
82757#else /* FREECIV_DELTA_PROTOCOL */
82758#ifdef FREECIV_JSON_CONNECTION
82759 field_addr.name = "text";
82760#endif /* FREECIV_JSON_CONNECTION */
82761 e = 0;
82762
82763 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82764
82765 if (e) {
82766 log_packet_detailed("'text' field error detected");
82767 }
82768#endif /* FREECIV_DELTA_PROTOCOL */
82769
82771}
82772
82774{
82775 if (!pc->used) {
82776 log_error("WARNING: trying to send data to the closed connection %s",
82778 return -1;
82779 }
82780 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet != nullptr, -1,
82781 "Handler for PACKET_RULESET_SUMMARY not installed");
82782 return pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet(pc, packet);
82783}
82784
82785void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
82786{
82787 conn_list_iterate(dest, pconn) {
82790}
82791
82793{
82794 memset(packet, 0, sizeof(*packet));
82795}
82796
82797#define free_packet_ruleset_description_part(_packet) (void) 0
82798#define destroy_packet_ruleset_description_part free
82799
82800#ifdef FREECIV_DELTA_PROTOCOL
82801#define hash_packet_ruleset_description_part_100 hash_const
82802#define cmp_packet_ruleset_description_part_100 cmp_const
82804#endif /* FREECIV_DELTA_PROTOCOL */
82805
82807{
82808#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_description_part(_packet)
82810
82811#ifdef FREECIV_JSON_CONNECTION
82812 struct plocation field_addr;
82813 {
82814 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82817 }
82818#endif /* FREECIV_JSON_CONNECTION */
82819
82820 log_packet_detailed("packet_ruleset_description_part_100: got info about ()");
82821
82822#ifdef FREECIV_DELTA_PROTOCOL
82825 struct genhash **hash = pc->phs.received + PACKET_RULESET_DESCRIPTION_PART;
82826
82827 if (nullptr == *hash) {
82829 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
82830 }
82831
82832 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82833 *real_packet = *old;
82834 } else {
82835 /* packet is already initialized empty */
82836 log_packet_detailed(" no old info");
82837 }
82838
82839#ifdef FREECIV_JSON_CONNECTION
82840 field_addr.name = "fields";
82841#endif /* FREECIV_JSON_CONNECTION */
82842 DIO_BV_GET(&din, &field_addr, fields);
82843
82844 if (BV_ISSET(fields, 0)) {
82845 log_packet_detailed(" got field 'text'");
82846
82847#ifdef FREECIV_JSON_CONNECTION
82848 field_addr.name = "text";
82849#endif /* FREECIV_JSON_CONNECTION */
82850
82851 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82853 }
82854 }
82855
82856 if (nullptr == old) {
82857 old = fc_malloc(sizeof(*old));
82859 *old = *real_packet;
82861 } else {
82862 *old = *real_packet;
82863 }
82864
82865#else /* FREECIV_DELTA_PROTOCOL */
82866#ifdef FREECIV_JSON_CONNECTION
82867 field_addr.name = "text";
82868#endif /* FREECIV_JSON_CONNECTION */
82869
82870 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
82872 }
82873#endif /* FREECIV_DELTA_PROTOCOL */
82874
82876#undef FREE_PACKET_STRUCT
82877}
82878
82880{
82881 const struct packet_ruleset_description_part *real_packet = packet;
82882 int e;
82884
82885 log_packet_detailed("packet_ruleset_description_part_100: sending info about ()");
82886
82887#ifdef FREECIV_DELTA_PROTOCOL
82890 bool differ;
82891 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DESCRIPTION_PART;
82892
82893 if (nullptr == *hash) {
82895 nullptr, nullptr, nullptr, destroy_packet_ruleset_description_part);
82896 }
82897 BV_CLR_ALL(fields);
82898
82899 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82900 old = fc_malloc(sizeof(*old));
82901 /* temporary bitcopy just to insert correctly */
82902 *old = *real_packet;
82905 }
82906
82907 differ = (strcmp(old->text, real_packet->text) != 0);
82908 if (differ) {
82909 BV_SET(fields, 0);
82910 }
82911#endif /* FREECIV_DELTA_PROTOCOL */
82912
82913#ifdef FREECIV_JSON_CONNECTION
82914 struct plocation field_addr;
82915 {
82916 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
82919 }
82920#endif /* FREECIV_JSON_CONNECTION */
82921
82922#ifdef FREECIV_DELTA_PROTOCOL
82923#ifdef FREECIV_JSON_CONNECTION
82924 field_addr.name = "fields";
82925#endif /* FREECIV_JSON_CONNECTION */
82926 e = 0;
82927 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82928 if (e) {
82929 log_packet_detailed("fields bitvector error detected");
82930 }
82931
82932 if (BV_ISSET(fields, 0)) {
82933 log_packet_detailed(" field 'text' has changed");
82934
82935#ifdef FREECIV_JSON_CONNECTION
82936 field_addr.name = "text";
82937#endif /* FREECIV_JSON_CONNECTION */
82938 e = 0;
82939
82940 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82941
82942 if (e) {
82943 log_packet_detailed("'text' field error detected");
82944 }
82945 }
82946
82947 *old = *real_packet;
82948
82949#else /* FREECIV_DELTA_PROTOCOL */
82950#ifdef FREECIV_JSON_CONNECTION
82951 field_addr.name = "text";
82952#endif /* FREECIV_JSON_CONNECTION */
82953 e = 0;
82954
82955 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
82956
82957 if (e) {
82958 log_packet_detailed("'text' field error detected");
82959 }
82960#endif /* FREECIV_DELTA_PROTOCOL */
82961
82963}
82964
82966{
82967 if (!pc->used) {
82968 log_error("WARNING: trying to send data to the closed connection %s",
82970 return -1;
82971 }
82972 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet != nullptr, -1,
82973 "Handler for PACKET_RULESET_DESCRIPTION_PART not installed");
82974 return pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet(pc, packet);
82975}
82976
82983
82985{
82986 memset(packet, 0, sizeof(*packet));
82987}
82988
82989#define free_packet_single_want_hack_req(_packet) (void) 0
82990#define destroy_packet_single_want_hack_req free
82991
82992#ifdef FREECIV_DELTA_PROTOCOL
82993#define hash_packet_single_want_hack_req_100 hash_const
82994#define cmp_packet_single_want_hack_req_100 cmp_const
82996#endif /* FREECIV_DELTA_PROTOCOL */
82997
82999{
83000#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_req(_packet)
83002
83003#ifdef FREECIV_JSON_CONNECTION
83004 struct plocation field_addr;
83005 {
83006 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83009 }
83010#endif /* FREECIV_JSON_CONNECTION */
83011
83012 log_packet_detailed("packet_single_want_hack_req_100: got info about ()");
83013
83014#ifdef FREECIV_DELTA_PROTOCOL
83017 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REQ;
83018
83019 if (nullptr == *hash) {
83021 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
83022 }
83023
83024 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83025 *real_packet = *old;
83026 } else {
83027 /* packet is already initialized empty */
83028 log_packet_detailed(" no old info");
83029 }
83030
83031#ifdef FREECIV_JSON_CONNECTION
83032 field_addr.name = "fields";
83033#endif /* FREECIV_JSON_CONNECTION */
83034 DIO_BV_GET(&din, &field_addr, fields);
83035
83036 if (BV_ISSET(fields, 0)) {
83037 log_packet_detailed(" got field 'token'");
83038
83039#ifdef FREECIV_JSON_CONNECTION
83040 field_addr.name = "token";
83041#endif /* FREECIV_JSON_CONNECTION */
83042
83043 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
83045 }
83046 }
83047
83048 if (nullptr == old) {
83049 old = fc_malloc(sizeof(*old));
83051 *old = *real_packet;
83053 } else {
83054 *old = *real_packet;
83055 }
83056
83057#else /* FREECIV_DELTA_PROTOCOL */
83058#ifdef FREECIV_JSON_CONNECTION
83059 field_addr.name = "token";
83060#endif /* FREECIV_JSON_CONNECTION */
83061
83062 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
83064 }
83065#endif /* FREECIV_DELTA_PROTOCOL */
83066
83068#undef FREE_PACKET_STRUCT
83069}
83070
83072{
83073 const struct packet_single_want_hack_req *real_packet = packet;
83074 int e;
83076
83077 log_packet_detailed("packet_single_want_hack_req_100: sending info about ()");
83078
83079#ifdef FREECIV_DELTA_PROTOCOL
83082 bool differ;
83083 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REQ;
83084
83085 if (nullptr == *hash) {
83087 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_req);
83088 }
83089 BV_CLR_ALL(fields);
83090
83091 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83092 old = fc_malloc(sizeof(*old));
83093 /* temporary bitcopy just to insert correctly */
83094 *old = *real_packet;
83097 }
83098
83099 differ = (strcmp(old->token, real_packet->token) != 0);
83100 if (differ) {
83101 BV_SET(fields, 0);
83102 }
83103#endif /* FREECIV_DELTA_PROTOCOL */
83104
83105#ifdef FREECIV_JSON_CONNECTION
83106 struct plocation field_addr;
83107 {
83108 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83111 }
83112#endif /* FREECIV_JSON_CONNECTION */
83113
83114#ifdef FREECIV_DELTA_PROTOCOL
83115#ifdef FREECIV_JSON_CONNECTION
83116 field_addr.name = "fields";
83117#endif /* FREECIV_JSON_CONNECTION */
83118 e = 0;
83119 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83120 if (e) {
83121 log_packet_detailed("fields bitvector error detected");
83122 }
83123
83124 if (BV_ISSET(fields, 0)) {
83125 log_packet_detailed(" field 'token' has changed");
83126
83127#ifdef FREECIV_JSON_CONNECTION
83128 field_addr.name = "token";
83129#endif /* FREECIV_JSON_CONNECTION */
83130 e = 0;
83131
83132 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83133
83134 if (e) {
83135 log_packet_detailed("'token' field error detected");
83136 }
83137 }
83138
83139 *old = *real_packet;
83140
83141#else /* FREECIV_DELTA_PROTOCOL */
83142#ifdef FREECIV_JSON_CONNECTION
83143 field_addr.name = "token";
83144#endif /* FREECIV_JSON_CONNECTION */
83145 e = 0;
83146
83147 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
83148
83149 if (e) {
83150 log_packet_detailed("'token' field error detected");
83151 }
83152#endif /* FREECIV_DELTA_PROTOCOL */
83153
83155}
83156
83158{
83159 if (!pc->used) {
83160 log_error("WARNING: trying to send data to the closed connection %s",
83162 return -1;
83163 }
83164 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet != nullptr, -1,
83165 "Handler for PACKET_SINGLE_WANT_HACK_REQ not installed");
83166 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet(pc, packet);
83167}
83168
83170{
83171 memset(packet, 0, sizeof(*packet));
83172}
83173
83174#define free_packet_single_want_hack_reply(_packet) (void) 0
83175#define destroy_packet_single_want_hack_reply free
83176
83177#ifdef FREECIV_DELTA_PROTOCOL
83178#define hash_packet_single_want_hack_reply_100 hash_const
83179#define cmp_packet_single_want_hack_reply_100 cmp_const
83181#endif /* FREECIV_DELTA_PROTOCOL */
83182
83184{
83185#define FREE_PACKET_STRUCT(_packet) free_packet_single_want_hack_reply(_packet)
83187
83188#ifdef FREECIV_JSON_CONNECTION
83189 struct plocation field_addr;
83190 {
83191 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83194 }
83195#endif /* FREECIV_JSON_CONNECTION */
83196
83197 log_packet_detailed("packet_single_want_hack_reply_100: got info about ()");
83198
83199#ifdef FREECIV_DELTA_PROTOCOL
83202 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REPLY;
83203
83204 if (nullptr == *hash) {
83206 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
83207 }
83208
83209 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83210 *real_packet = *old;
83211 } else {
83212 /* packet is already initialized empty */
83213 log_packet_detailed(" no old info");
83214 }
83215
83216#ifdef FREECIV_JSON_CONNECTION
83217 field_addr.name = "fields";
83218#endif /* FREECIV_JSON_CONNECTION */
83219 DIO_BV_GET(&din, &field_addr, fields);
83220
83221 real_packet->you_have_hack = BV_ISSET(fields, 0);
83222
83223 if (nullptr == old) {
83224 old = fc_malloc(sizeof(*old));
83226 *old = *real_packet;
83228 } else {
83229 *old = *real_packet;
83230 }
83231
83232#else /* FREECIV_DELTA_PROTOCOL */
83233#ifdef FREECIV_JSON_CONNECTION
83234 field_addr.name = "you_have_hack";
83235#endif /* FREECIV_JSON_CONNECTION */
83236
83237 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_have_hack)) {
83238 RECEIVE_PACKET_FIELD_ERROR(you_have_hack);
83239 }
83240#endif /* FREECIV_DELTA_PROTOCOL */
83241
83243#undef FREE_PACKET_STRUCT
83244}
83245
83247{
83248 const struct packet_single_want_hack_reply *real_packet = packet;
83249 int e;
83251
83252 log_packet_detailed("packet_single_want_hack_reply_100: sending info about ()");
83253
83254#ifdef FREECIV_DELTA_PROTOCOL
83257 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REPLY;
83258
83259 if (nullptr == *hash) {
83261 nullptr, nullptr, nullptr, destroy_packet_single_want_hack_reply);
83262 }
83263 BV_CLR_ALL(fields);
83264
83265 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83266 old = fc_malloc(sizeof(*old));
83267 /* temporary bitcopy just to insert correctly */
83268 *old = *real_packet;
83271 }
83272
83273 /* folded into head */
83274 if (real_packet->you_have_hack) {
83275 BV_SET(fields, 0);
83276 }
83277#endif /* FREECIV_DELTA_PROTOCOL */
83278
83279#ifdef FREECIV_JSON_CONNECTION
83280 struct plocation field_addr;
83281 {
83282 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83285 }
83286#endif /* FREECIV_JSON_CONNECTION */
83287
83288#ifdef FREECIV_DELTA_PROTOCOL
83289#ifdef FREECIV_JSON_CONNECTION
83290 field_addr.name = "fields";
83291#endif /* FREECIV_JSON_CONNECTION */
83292 e = 0;
83293 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83294 if (e) {
83295 log_packet_detailed("fields bitvector error detected");
83296 }
83297
83298 /* field 0 is folded into the header */
83299
83300 *old = *real_packet;
83301
83302#else /* FREECIV_DELTA_PROTOCOL */
83303#ifdef FREECIV_JSON_CONNECTION
83304 field_addr.name = "you_have_hack";
83305#endif /* FREECIV_JSON_CONNECTION */
83306 e = 0;
83307
83308 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_have_hack);
83309
83310 if (e) {
83311 log_packet_detailed("'you_have_hack' field error detected");
83312 }
83313#endif /* FREECIV_DELTA_PROTOCOL */
83314
83316}
83317
83319{
83320 if (!pc->used) {
83321 log_error("WARNING: trying to send data to the closed connection %s",
83323 return -1;
83324 }
83325 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet != nullptr, -1,
83326 "Handler for PACKET_SINGLE_WANT_HACK_REPLY not installed");
83327 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet(pc, packet);
83328}
83329
83330int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
83331{
83332 struct packet_single_want_hack_reply packet, *real_packet = &packet;
83333
83335
83337}
83338
83339static inline void init_packet_ruleset_choices(struct packet_ruleset_choices *packet)
83340{
83341 memset(packet, 0, sizeof(*packet));
83342}
83343
83344#define free_packet_ruleset_choices(_packet) (void) 0
83345#define destroy_packet_ruleset_choices free
83346
83347#ifdef FREECIV_DELTA_PROTOCOL
83348#define hash_packet_ruleset_choices_100 hash_const
83349#define cmp_packet_ruleset_choices_100 cmp_const
83351#endif /* FREECIV_DELTA_PROTOCOL */
83352
83354{
83355#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_choices(_packet)
83357
83358#ifdef FREECIV_JSON_CONNECTION
83359 struct plocation field_addr;
83360 {
83361 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83364 }
83365#endif /* FREECIV_JSON_CONNECTION */
83366
83367 log_packet_detailed("packet_ruleset_choices_100: got info about ()");
83368
83369#ifdef FREECIV_DELTA_PROTOCOL
83372 struct genhash **hash = pc->phs.received + PACKET_RULESET_CHOICES;
83373
83374 if (nullptr == *hash) {
83376 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
83377 }
83378
83379 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83380 *real_packet = *old;
83381 } else {
83382 /* packet is already initialized empty */
83383 log_packet_detailed(" no old info");
83384 }
83385
83386#ifdef FREECIV_JSON_CONNECTION
83387 field_addr.name = "fields";
83388#endif /* FREECIV_JSON_CONNECTION */
83389 DIO_BV_GET(&din, &field_addr, fields);
83390
83391 if (BV_ISSET(fields, 0)) {
83392 log_packet_detailed(" got field 'ruleset_count'");
83393
83394#ifdef FREECIV_JSON_CONNECTION
83395 field_addr.name = "ruleset_count";
83396#endif /* FREECIV_JSON_CONNECTION */
83397
83398 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
83399 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
83400 }
83401 }
83402
83403 if (BV_ISSET(fields, 1)) {
83404 log_packet_detailed(" got field 'rulesets'");
83405
83406#ifdef FREECIV_JSON_CONNECTION
83407 field_addr.name = "rulesets";
83408#endif /* FREECIV_JSON_CONNECTION */
83409
83410 {
83411 int i;
83412
83413 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
83414 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
83415 }
83416
83417#ifdef FREECIV_JSON_CONNECTION
83418 /* Enter array. */
83419 field_addr.sub_location = plocation_elem_new(0);
83420#endif /* FREECIV_JSON_CONNECTION */
83421
83422 for (i = 0; i < real_packet->ruleset_count; i++) {
83423#ifdef FREECIV_JSON_CONNECTION
83424 /* Next array element */
83425 field_addr.sub_location->number = i;
83426#endif /* FREECIV_JSON_CONNECTION */
83427
83428 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
83430 }
83431 }
83432
83433#ifdef FREECIV_JSON_CONNECTION
83434 /* Exit array. */
83435 FC_FREE(field_addr.sub_location);
83436#endif /* FREECIV_JSON_CONNECTION */
83437 }
83438 }
83439
83440 if (nullptr == old) {
83441 old = fc_malloc(sizeof(*old));
83443 *old = *real_packet;
83445 } else {
83446 *old = *real_packet;
83447 }
83448
83449#else /* FREECIV_DELTA_PROTOCOL */
83450#ifdef FREECIV_JSON_CONNECTION
83451 field_addr.name = "ruleset_count";
83452#endif /* FREECIV_JSON_CONNECTION */
83453
83454 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
83455 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
83456 }
83457
83458#ifdef FREECIV_JSON_CONNECTION
83459 field_addr.name = "rulesets";
83460#endif /* FREECIV_JSON_CONNECTION */
83461
83462 {
83463 int i;
83464
83465 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
83466 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": array truncated");
83467 }
83468
83469#ifdef FREECIV_JSON_CONNECTION
83470 /* Enter array. */
83471 field_addr.sub_location = plocation_elem_new(0);
83472#endif /* FREECIV_JSON_CONNECTION */
83473
83474 for (i = 0; i < real_packet->ruleset_count; i++) {
83475#ifdef FREECIV_JSON_CONNECTION
83476 /* Next array element */
83477 field_addr.sub_location->number = i;
83478#endif /* FREECIV_JSON_CONNECTION */
83479
83480 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
83482 }
83483 }
83484
83485#ifdef FREECIV_JSON_CONNECTION
83486 /* Exit array. */
83487 FC_FREE(field_addr.sub_location);
83488#endif /* FREECIV_JSON_CONNECTION */
83489 }
83490#endif /* FREECIV_DELTA_PROTOCOL */
83491
83493#undef FREE_PACKET_STRUCT
83494}
83495
83497{
83498 const struct packet_ruleset_choices *real_packet = packet;
83499 int e;
83501
83502 log_packet_detailed("packet_ruleset_choices_100: sending info about ()");
83503
83504#ifdef FREECIV_DELTA_PROTOCOL
83507 bool differ;
83508 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CHOICES;
83509
83510 if (nullptr == *hash) {
83512 nullptr, nullptr, nullptr, destroy_packet_ruleset_choices);
83513 }
83514 BV_CLR_ALL(fields);
83515
83516 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83517 old = fc_malloc(sizeof(*old));
83518 /* temporary bitcopy just to insert correctly */
83519 *old = *real_packet;
83522 }
83523
83524 differ = (old->ruleset_count != real_packet->ruleset_count);
83525 if (differ) {
83526 BV_SET(fields, 0);
83527 }
83528
83529 differ = (old->ruleset_count != real_packet->ruleset_count);
83530 if (!differ) {
83531 int i;
83532
83533 for (i = 0; i < old->ruleset_count; i++) {
83534 differ = (strcmp(old->rulesets[i], real_packet->rulesets[i]) != 0);
83535 if (differ) {
83536 break;
83537 }
83538 }
83539 }
83540 if (differ) {
83541 BV_SET(fields, 1);
83542 }
83543#endif /* FREECIV_DELTA_PROTOCOL */
83544
83545#ifdef FREECIV_JSON_CONNECTION
83546 struct plocation field_addr;
83547 {
83548 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83551 }
83552#endif /* FREECIV_JSON_CONNECTION */
83553
83554#ifdef FREECIV_DELTA_PROTOCOL
83555#ifdef FREECIV_JSON_CONNECTION
83556 field_addr.name = "fields";
83557#endif /* FREECIV_JSON_CONNECTION */
83558 e = 0;
83559 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83560 if (e) {
83561 log_packet_detailed("fields bitvector error detected");
83562 }
83563
83564 if (BV_ISSET(fields, 0)) {
83565 log_packet_detailed(" field 'ruleset_count' has changed");
83566
83567#ifdef FREECIV_JSON_CONNECTION
83568 field_addr.name = "ruleset_count";
83569#endif /* FREECIV_JSON_CONNECTION */
83570 e = 0;
83571
83572 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
83573
83574 if (e) {
83575 log_packet_detailed("'ruleset_count' field error detected");
83576 }
83577 }
83578
83579 if (BV_ISSET(fields, 1)) {
83580 log_packet_detailed(" field 'rulesets' has changed");
83581
83582#ifdef FREECIV_JSON_CONNECTION
83583 field_addr.name = "rulesets";
83584#endif /* FREECIV_JSON_CONNECTION */
83585 e = 0;
83586
83587 {
83588 int i;
83589
83590#ifdef FREECIV_JSON_CONNECTION
83591 /* Create the array. */
83592 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
83593
83594 /* Enter array. */
83595 field_addr.sub_location = plocation_elem_new(0);
83596#endif /* FREECIV_JSON_CONNECTION */
83597
83598 for (i = 0; i < real_packet->ruleset_count; i++) {
83599#ifdef FREECIV_JSON_CONNECTION
83600 /* Next array element. */
83601 field_addr.sub_location->number = i;
83602#endif /* FREECIV_JSON_CONNECTION */
83603
83604 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
83605 }
83606
83607#ifdef FREECIV_JSON_CONNECTION
83608 /* Exit array. */
83609 FC_FREE(field_addr.sub_location);
83610#endif /* FREECIV_JSON_CONNECTION */
83611 }
83612
83613 if (e) {
83614 log_packet_detailed("'rulesets' field error detected");
83615 }
83616 }
83617
83618 *old = *real_packet;
83619
83620#else /* FREECIV_DELTA_PROTOCOL */
83621#ifdef FREECIV_JSON_CONNECTION
83622 field_addr.name = "ruleset_count";
83623#endif /* FREECIV_JSON_CONNECTION */
83624 e = 0;
83625
83626 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
83627
83628 if (e) {
83629 log_packet_detailed("'ruleset_count' field error detected");
83630 }
83631
83632#ifdef FREECIV_JSON_CONNECTION
83633 field_addr.name = "rulesets";
83634#endif /* FREECIV_JSON_CONNECTION */
83635 e = 0;
83636
83637 {
83638 int i;
83639
83640#ifdef FREECIV_JSON_CONNECTION
83641 /* Create the array. */
83642 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
83643
83644 /* Enter array. */
83645 field_addr.sub_location = plocation_elem_new(0);
83646#endif /* FREECIV_JSON_CONNECTION */
83647
83648 for (i = 0; i < real_packet->ruleset_count; i++) {
83649#ifdef FREECIV_JSON_CONNECTION
83650 /* Next array element. */
83651 field_addr.sub_location->number = i;
83652#endif /* FREECIV_JSON_CONNECTION */
83653
83654 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
83655 }
83656
83657#ifdef FREECIV_JSON_CONNECTION
83658 /* Exit array. */
83659 FC_FREE(field_addr.sub_location);
83660#endif /* FREECIV_JSON_CONNECTION */
83661 }
83662
83663 if (e) {
83664 log_packet_detailed("'rulesets' field error detected");
83665 }
83666#endif /* FREECIV_DELTA_PROTOCOL */
83667
83669}
83670
83672{
83673 if (!pc->used) {
83674 log_error("WARNING: trying to send data to the closed connection %s",
83676 return -1;
83677 }
83678 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet != nullptr, -1,
83679 "Handler for PACKET_RULESET_CHOICES not installed");
83680 return pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet(pc, packet);
83681}
83682
83683static inline void init_packet_ruleset_select(struct packet_ruleset_select *packet)
83684{
83685 memset(packet, 0, sizeof(*packet));
83686}
83687
83688#define free_packet_ruleset_select(_packet) (void) 0
83689#define destroy_packet_ruleset_select free
83690
83691#ifdef FREECIV_DELTA_PROTOCOL
83692#define hash_packet_ruleset_select_100 hash_const
83693#define cmp_packet_ruleset_select_100 cmp_const
83695#endif /* FREECIV_DELTA_PROTOCOL */
83696
83698{
83699#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_select(_packet)
83701
83702#ifdef FREECIV_JSON_CONNECTION
83703 struct plocation field_addr;
83704 {
83705 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83708 }
83709#endif /* FREECIV_JSON_CONNECTION */
83710
83711 log_packet_detailed("packet_ruleset_select_100: got info about ()");
83712
83713#ifdef FREECIV_DELTA_PROTOCOL
83715 struct packet_ruleset_select *old;
83716 struct genhash **hash = pc->phs.received + PACKET_RULESET_SELECT;
83717
83718 if (nullptr == *hash) {
83720 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
83721 }
83722
83723 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83724 *real_packet = *old;
83725 } else {
83726 /* packet is already initialized empty */
83727 log_packet_detailed(" no old info");
83728 }
83729
83730#ifdef FREECIV_JSON_CONNECTION
83731 field_addr.name = "fields";
83732#endif /* FREECIV_JSON_CONNECTION */
83733 DIO_BV_GET(&din, &field_addr, fields);
83734
83735 if (BV_ISSET(fields, 0)) {
83736 log_packet_detailed(" got field 'modpack'");
83737
83738#ifdef FREECIV_JSON_CONNECTION
83739 field_addr.name = "modpack";
83740#endif /* FREECIV_JSON_CONNECTION */
83741
83742 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
83744 }
83745 }
83746
83747 if (nullptr == old) {
83748 old = fc_malloc(sizeof(*old));
83750 *old = *real_packet;
83752 } else {
83753 *old = *real_packet;
83754 }
83755
83756#else /* FREECIV_DELTA_PROTOCOL */
83757#ifdef FREECIV_JSON_CONNECTION
83758 field_addr.name = "modpack";
83759#endif /* FREECIV_JSON_CONNECTION */
83760
83761 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
83763 }
83764#endif /* FREECIV_DELTA_PROTOCOL */
83765
83767#undef FREE_PACKET_STRUCT
83768}
83769
83771{
83772 const struct packet_ruleset_select *real_packet = packet;
83773 int e;
83775
83776 log_packet_detailed("packet_ruleset_select_100: sending info about ()");
83777
83778#ifdef FREECIV_DELTA_PROTOCOL
83780 struct packet_ruleset_select *old;
83781 bool differ;
83782 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SELECT;
83783
83784 if (nullptr == *hash) {
83786 nullptr, nullptr, nullptr, destroy_packet_ruleset_select);
83787 }
83788 BV_CLR_ALL(fields);
83789
83790 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83791 old = fc_malloc(sizeof(*old));
83792 /* temporary bitcopy just to insert correctly */
83793 *old = *real_packet;
83796 }
83797
83798 differ = (strcmp(old->modpack, real_packet->modpack) != 0);
83799 if (differ) {
83800 BV_SET(fields, 0);
83801 }
83802#endif /* FREECIV_DELTA_PROTOCOL */
83803
83804#ifdef FREECIV_JSON_CONNECTION
83805 struct plocation field_addr;
83806 {
83807 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83810 }
83811#endif /* FREECIV_JSON_CONNECTION */
83812
83813#ifdef FREECIV_DELTA_PROTOCOL
83814#ifdef FREECIV_JSON_CONNECTION
83815 field_addr.name = "fields";
83816#endif /* FREECIV_JSON_CONNECTION */
83817 e = 0;
83818 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83819 if (e) {
83820 log_packet_detailed("fields bitvector error detected");
83821 }
83822
83823 if (BV_ISSET(fields, 0)) {
83824 log_packet_detailed(" field 'modpack' has changed");
83825
83826#ifdef FREECIV_JSON_CONNECTION
83827 field_addr.name = "modpack";
83828#endif /* FREECIV_JSON_CONNECTION */
83829 e = 0;
83830
83831 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
83832
83833 if (e) {
83834 log_packet_detailed("'modpack' field error detected");
83835 }
83836 }
83837
83838 *old = *real_packet;
83839
83840#else /* FREECIV_DELTA_PROTOCOL */
83841#ifdef FREECIV_JSON_CONNECTION
83842 field_addr.name = "modpack";
83843#endif /* FREECIV_JSON_CONNECTION */
83844 e = 0;
83845
83846 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
83847
83848 if (e) {
83849 log_packet_detailed("'modpack' field error detected");
83850 }
83851#endif /* FREECIV_DELTA_PROTOCOL */
83852
83854}
83855
83857{
83858 if (!pc->used) {
83859 log_error("WARNING: trying to send data to the closed connection %s",
83861 return -1;
83862 }
83863 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SELECT].packet != nullptr, -1,
83864 "Handler for PACKET_RULESET_SELECT not installed");
83865 return pc->phs.handlers->send[PACKET_RULESET_SELECT].packet(pc, packet);
83866}
83867
83868static inline void init_packet_game_load(struct packet_game_load *packet)
83869{
83870 memset(packet, 0, sizeof(*packet));
83871}
83872
83873#define free_packet_game_load(_packet) (void) 0
83874#define destroy_packet_game_load free
83875
83876#ifdef FREECIV_DELTA_PROTOCOL
83877#define hash_packet_game_load_100 hash_const
83878#define cmp_packet_game_load_100 cmp_const
83880#endif /* FREECIV_DELTA_PROTOCOL */
83881
83883{
83884#define FREE_PACKET_STRUCT(_packet) free_packet_game_load(_packet)
83886
83887#ifdef FREECIV_JSON_CONNECTION
83888 struct plocation field_addr;
83889 {
83890 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
83893 }
83894#endif /* FREECIV_JSON_CONNECTION */
83895
83896 log_packet_detailed("packet_game_load_100: got info about ()");
83897
83898#ifdef FREECIV_DELTA_PROTOCOL
83900 struct packet_game_load *old;
83901 struct genhash **hash = pc->phs.received + PACKET_GAME_LOAD;
83902
83903 if (nullptr == *hash) {
83905 nullptr, nullptr, nullptr, destroy_packet_game_load);
83906 }
83907
83908 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83909 *real_packet = *old;
83910 } else {
83911 /* packet is already initialized empty */
83912 log_packet_detailed(" no old info");
83913 }
83914
83915#ifdef FREECIV_JSON_CONNECTION
83916 field_addr.name = "fields";
83917#endif /* FREECIV_JSON_CONNECTION */
83918 DIO_BV_GET(&din, &field_addr, fields);
83919
83920 real_packet->load_successful = BV_ISSET(fields, 0);
83921
83922 if (BV_ISSET(fields, 1)) {
83923 log_packet_detailed(" got field 'load_filename'");
83924
83925#ifdef FREECIV_JSON_CONNECTION
83926 field_addr.name = "load_filename";
83927#endif /* FREECIV_JSON_CONNECTION */
83928
83929 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
83931 }
83932 }
83933
83934 if (nullptr == old) {
83935 old = fc_malloc(sizeof(*old));
83937 *old = *real_packet;
83939 } else {
83940 *old = *real_packet;
83941 }
83942
83943#else /* FREECIV_DELTA_PROTOCOL */
83944#ifdef FREECIV_JSON_CONNECTION
83945 field_addr.name = "load_successful";
83946#endif /* FREECIV_JSON_CONNECTION */
83947
83948 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->load_successful)) {
83949 RECEIVE_PACKET_FIELD_ERROR(load_successful);
83950 }
83951
83952#ifdef FREECIV_JSON_CONNECTION
83953 field_addr.name = "load_filename";
83954#endif /* FREECIV_JSON_CONNECTION */
83955
83956 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
83958 }
83959#endif /* FREECIV_DELTA_PROTOCOL */
83960
83962#undef FREE_PACKET_STRUCT
83963}
83964
83965static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
83966{
83967 const struct packet_game_load *real_packet = packet;
83968 int e;
83970
83971 log_packet_detailed("packet_game_load_100: sending info about ()");
83972
83973#ifdef FREECIV_DELTA_PROTOCOL
83975 struct packet_game_load *old;
83976 bool differ;
83977 struct genhash **hash = pc->phs.sent + PACKET_GAME_LOAD;
83978
83979 if (nullptr == *hash) {
83981 nullptr, nullptr, nullptr, destroy_packet_game_load);
83982 }
83983 BV_CLR_ALL(fields);
83984
83985 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83986 old = fc_malloc(sizeof(*old));
83987 /* temporary bitcopy just to insert correctly */
83988 *old = *real_packet;
83991 }
83992
83993 /* folded into head */
83994 if (real_packet->load_successful) {
83995 BV_SET(fields, 0);
83996 }
83997
83998 differ = (strcmp(old->load_filename, real_packet->load_filename) != 0);
83999 if (differ) {
84000 BV_SET(fields, 1);
84001 }
84002#endif /* FREECIV_DELTA_PROTOCOL */
84003
84004#ifdef FREECIV_JSON_CONNECTION
84005 struct plocation field_addr;
84006 {
84007 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84010 }
84011#endif /* FREECIV_JSON_CONNECTION */
84012
84013#ifdef FREECIV_DELTA_PROTOCOL
84014#ifdef FREECIV_JSON_CONNECTION
84015 field_addr.name = "fields";
84016#endif /* FREECIV_JSON_CONNECTION */
84017 e = 0;
84018 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84019 if (e) {
84020 log_packet_detailed("fields bitvector error detected");
84021 }
84022
84023 /* field 0 is folded into the header */
84024
84025 if (BV_ISSET(fields, 1)) {
84026 log_packet_detailed(" field 'load_filename' has changed");
84027
84028#ifdef FREECIV_JSON_CONNECTION
84029 field_addr.name = "load_filename";
84030#endif /* FREECIV_JSON_CONNECTION */
84031 e = 0;
84032
84033 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
84034
84035 if (e) {
84036 log_packet_detailed("'load_filename' field error detected");
84037 }
84038 }
84039
84040 *old = *real_packet;
84041
84042#else /* FREECIV_DELTA_PROTOCOL */
84043#ifdef FREECIV_JSON_CONNECTION
84044 field_addr.name = "load_successful";
84045#endif /* FREECIV_JSON_CONNECTION */
84046 e = 0;
84047
84048 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->load_successful);
84049
84050 if (e) {
84051 log_packet_detailed("'load_successful' field error detected");
84052 }
84053
84054#ifdef FREECIV_JSON_CONNECTION
84055 field_addr.name = "load_filename";
84056#endif /* FREECIV_JSON_CONNECTION */
84057 e = 0;
84058
84059 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
84060
84061 if (e) {
84062 log_packet_detailed("'load_filename' field error detected");
84063 }
84064#endif /* FREECIV_DELTA_PROTOCOL */
84065
84067}
84068
84069int send_packet_game_load(struct connection *pc, const struct packet_game_load *packet)
84070{
84071 if (!pc->used) {
84072 log_error("WARNING: trying to send data to the closed connection %s",
84074 return -1;
84075 }
84076 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_LOAD].packet != nullptr, -1,
84077 "Handler for PACKET_GAME_LOAD not installed");
84078 return pc->phs.handlers->send[PACKET_GAME_LOAD].packet(pc, packet);
84079}
84080
84081void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
84082{
84083 conn_list_iterate(dest, pconn) {
84086}
84087
84088int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
84089{
84090 struct packet_game_load packet, *real_packet = &packet;
84091
84093 sz_strlcpy(real_packet->load_filename, load_filename);
84094
84096}
84097
84099{
84100 struct packet_game_load packet, *real_packet = &packet;
84101
84103 sz_strlcpy(real_packet->load_filename, load_filename);
84104
84106}
84107
84109{
84110 memset(packet, 0, sizeof(*packet));
84111}
84112
84113#define free_packet_server_setting_control(_packet) (void) 0
84114#define destroy_packet_server_setting_control free
84115
84116#ifdef FREECIV_DELTA_PROTOCOL
84117#define hash_packet_server_setting_control_100 hash_const
84118#define cmp_packet_server_setting_control_100 cmp_const
84120#endif /* FREECIV_DELTA_PROTOCOL */
84121
84123{
84124#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_control(_packet)
84126
84127#ifdef FREECIV_JSON_CONNECTION
84128 struct plocation field_addr;
84129 {
84130 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84133 }
84134#endif /* FREECIV_JSON_CONNECTION */
84135
84136 log_packet_detailed("packet_server_setting_control_100: got info about ()");
84137
84138#ifdef FREECIV_DELTA_PROTOCOL
84141 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONTROL;
84142
84143 if (nullptr == *hash) {
84145 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
84146 }
84147
84148 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84149 *real_packet = *old;
84150 } else {
84151 /* packet is already initialized empty */
84152 log_packet_detailed(" no old info");
84153 }
84154
84155#ifdef FREECIV_JSON_CONNECTION
84156 field_addr.name = "fields";
84157#endif /* FREECIV_JSON_CONNECTION */
84158 DIO_BV_GET(&din, &field_addr, fields);
84159
84160 if (BV_ISSET(fields, 0)) {
84161 log_packet_detailed(" got field 'settings_num'");
84162
84163#ifdef FREECIV_JSON_CONNECTION
84164 field_addr.name = "settings_num";
84165#endif /* FREECIV_JSON_CONNECTION */
84166
84167 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
84168 RECEIVE_PACKET_FIELD_ERROR(settings_num);
84169 }
84170 }
84171
84172 if (BV_ISSET(fields, 1)) {
84173 log_packet_detailed(" got field 'categories_num'");
84174
84175#ifdef FREECIV_JSON_CONNECTION
84176 field_addr.name = "categories_num";
84177#endif /* FREECIV_JSON_CONNECTION */
84178
84179 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
84180 RECEIVE_PACKET_FIELD_ERROR(categories_num);
84181 }
84182 }
84183
84184 if (BV_ISSET(fields, 2)) {
84185 log_packet_detailed(" got field 'category_names'");
84186
84187#ifdef FREECIV_JSON_CONNECTION
84188 field_addr.name = "category_names";
84189#endif /* FREECIV_JSON_CONNECTION */
84190
84191 {
84192 int i;
84193
84194 if (real_packet->categories_num > 256) {
84195 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
84196 }
84197
84198#ifdef FREECIV_JSON_CONNECTION
84199 /* Enter array. */
84200 field_addr.sub_location = plocation_elem_new(0);
84201#endif /* FREECIV_JSON_CONNECTION */
84202
84203 for (i = 0; i < real_packet->categories_num; i++) {
84204#ifdef FREECIV_JSON_CONNECTION
84205 /* Next array element */
84206 field_addr.sub_location->number = i;
84207#endif /* FREECIV_JSON_CONNECTION */
84208
84209 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
84210 RECEIVE_PACKET_FIELD_ERROR(category_names);
84211 }
84212 }
84213
84214#ifdef FREECIV_JSON_CONNECTION
84215 /* Exit array. */
84216 FC_FREE(field_addr.sub_location);
84217#endif /* FREECIV_JSON_CONNECTION */
84218 }
84219 }
84220
84221 if (nullptr == old) {
84222 old = fc_malloc(sizeof(*old));
84224 *old = *real_packet;
84226 } else {
84227 *old = *real_packet;
84228 }
84229
84230#else /* FREECIV_DELTA_PROTOCOL */
84231#ifdef FREECIV_JSON_CONNECTION
84232 field_addr.name = "settings_num";
84233#endif /* FREECIV_JSON_CONNECTION */
84234
84235 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
84236 RECEIVE_PACKET_FIELD_ERROR(settings_num);
84237 }
84238
84239#ifdef FREECIV_JSON_CONNECTION
84240 field_addr.name = "categories_num";
84241#endif /* FREECIV_JSON_CONNECTION */
84242
84243 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
84244 RECEIVE_PACKET_FIELD_ERROR(categories_num);
84245 }
84246
84247#ifdef FREECIV_JSON_CONNECTION
84248 field_addr.name = "category_names";
84249#endif /* FREECIV_JSON_CONNECTION */
84250
84251 {
84252 int i;
84253
84254 if (real_packet->categories_num > 256) {
84255 RECEIVE_PACKET_FIELD_ERROR(category_names, ": array truncated");
84256 }
84257
84258#ifdef FREECIV_JSON_CONNECTION
84259 /* Enter array. */
84260 field_addr.sub_location = plocation_elem_new(0);
84261#endif /* FREECIV_JSON_CONNECTION */
84262
84263 for (i = 0; i < real_packet->categories_num; i++) {
84264#ifdef FREECIV_JSON_CONNECTION
84265 /* Next array element */
84266 field_addr.sub_location->number = i;
84267#endif /* FREECIV_JSON_CONNECTION */
84268
84269 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
84270 RECEIVE_PACKET_FIELD_ERROR(category_names);
84271 }
84272 }
84273
84274#ifdef FREECIV_JSON_CONNECTION
84275 /* Exit array. */
84276 FC_FREE(field_addr.sub_location);
84277#endif /* FREECIV_JSON_CONNECTION */
84278 }
84279#endif /* FREECIV_DELTA_PROTOCOL */
84280
84282#undef FREE_PACKET_STRUCT
84283}
84284
84286{
84287 const struct packet_server_setting_control *real_packet = packet;
84288 int e;
84290
84291 log_packet_detailed("packet_server_setting_control_100: sending info about ()");
84292
84293#ifdef FREECIV_DELTA_PROTOCOL
84296 bool differ;
84297 int different = 0;
84298 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONTROL;
84299
84300 if (nullptr == *hash) {
84302 nullptr, nullptr, nullptr, destroy_packet_server_setting_control);
84303 }
84304 BV_CLR_ALL(fields);
84305
84306 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84307 old = fc_malloc(sizeof(*old));
84308 /* temporary bitcopy just to insert correctly */
84309 *old = *real_packet;
84312 different = 1; /* Force to send. */
84313 }
84314
84315 differ = (old->settings_num != real_packet->settings_num);
84316 if (differ) {
84317 different++;
84318 BV_SET(fields, 0);
84319 }
84320
84321 differ = (old->categories_num != real_packet->categories_num);
84322 if (differ) {
84323 different++;
84324 BV_SET(fields, 1);
84325 }
84326
84327 differ = (old->categories_num != real_packet->categories_num);
84328 if (!differ) {
84329 int i;
84330
84331 for (i = 0; i < old->categories_num; i++) {
84332 differ = (strcmp(old->category_names[i], real_packet->category_names[i]) != 0);
84333 if (differ) {
84334 break;
84335 }
84336 }
84337 }
84338 if (differ) {
84339 different++;
84340 BV_SET(fields, 2);
84341 }
84342
84343 if (different == 0) {
84344 log_packet_detailed(" no change -> discard");
84346 }
84347#endif /* FREECIV_DELTA_PROTOCOL */
84348
84349#ifdef FREECIV_JSON_CONNECTION
84350 struct plocation field_addr;
84351 {
84352 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84355 }
84356#endif /* FREECIV_JSON_CONNECTION */
84357
84358#ifdef FREECIV_DELTA_PROTOCOL
84359#ifdef FREECIV_JSON_CONNECTION
84360 field_addr.name = "fields";
84361#endif /* FREECIV_JSON_CONNECTION */
84362 e = 0;
84363 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84364 if (e) {
84365 log_packet_detailed("fields bitvector error detected");
84366 }
84367
84368 if (BV_ISSET(fields, 0)) {
84369 log_packet_detailed(" field 'settings_num' has changed");
84370
84371#ifdef FREECIV_JSON_CONNECTION
84372 field_addr.name = "settings_num";
84373#endif /* FREECIV_JSON_CONNECTION */
84374 e = 0;
84375
84376 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
84377
84378 if (e) {
84379 log_packet_detailed("'settings_num' field error detected");
84380 }
84381 }
84382
84383 if (BV_ISSET(fields, 1)) {
84384 log_packet_detailed(" field 'categories_num' has changed");
84385
84386#ifdef FREECIV_JSON_CONNECTION
84387 field_addr.name = "categories_num";
84388#endif /* FREECIV_JSON_CONNECTION */
84389 e = 0;
84390
84391 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
84392
84393 if (e) {
84394 log_packet_detailed("'categories_num' field error detected");
84395 }
84396 }
84397
84398 if (BV_ISSET(fields, 2)) {
84399 log_packet_detailed(" field 'category_names' has changed");
84400
84401#ifdef FREECIV_JSON_CONNECTION
84402 field_addr.name = "category_names";
84403#endif /* FREECIV_JSON_CONNECTION */
84404 e = 0;
84405
84406 {
84407 int i;
84408
84409#ifdef FREECIV_JSON_CONNECTION
84410 /* Create the array. */
84411 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
84412
84413 /* Enter array. */
84414 field_addr.sub_location = plocation_elem_new(0);
84415#endif /* FREECIV_JSON_CONNECTION */
84416
84417 for (i = 0; i < real_packet->categories_num; i++) {
84418#ifdef FREECIV_JSON_CONNECTION
84419 /* Next array element. */
84420 field_addr.sub_location->number = i;
84421#endif /* FREECIV_JSON_CONNECTION */
84422
84423 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
84424 }
84425
84426#ifdef FREECIV_JSON_CONNECTION
84427 /* Exit array. */
84428 FC_FREE(field_addr.sub_location);
84429#endif /* FREECIV_JSON_CONNECTION */
84430 }
84431
84432 if (e) {
84433 log_packet_detailed("'category_names' field error detected");
84434 }
84435 }
84436
84437 *old = *real_packet;
84438
84439#else /* FREECIV_DELTA_PROTOCOL */
84440#ifdef FREECIV_JSON_CONNECTION
84441 field_addr.name = "settings_num";
84442#endif /* FREECIV_JSON_CONNECTION */
84443 e = 0;
84444
84445 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
84446
84447 if (e) {
84448 log_packet_detailed("'settings_num' field error detected");
84449 }
84450
84451#ifdef FREECIV_JSON_CONNECTION
84452 field_addr.name = "categories_num";
84453#endif /* FREECIV_JSON_CONNECTION */
84454 e = 0;
84455
84456 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
84457
84458 if (e) {
84459 log_packet_detailed("'categories_num' field error detected");
84460 }
84461
84462#ifdef FREECIV_JSON_CONNECTION
84463 field_addr.name = "category_names";
84464#endif /* FREECIV_JSON_CONNECTION */
84465 e = 0;
84466
84467 {
84468 int i;
84469
84470#ifdef FREECIV_JSON_CONNECTION
84471 /* Create the array. */
84472 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
84473
84474 /* Enter array. */
84475 field_addr.sub_location = plocation_elem_new(0);
84476#endif /* FREECIV_JSON_CONNECTION */
84477
84478 for (i = 0; i < real_packet->categories_num; i++) {
84479#ifdef FREECIV_JSON_CONNECTION
84480 /* Next array element. */
84481 field_addr.sub_location->number = i;
84482#endif /* FREECIV_JSON_CONNECTION */
84483
84484 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
84485 }
84486
84487#ifdef FREECIV_JSON_CONNECTION
84488 /* Exit array. */
84489 FC_FREE(field_addr.sub_location);
84490#endif /* FREECIV_JSON_CONNECTION */
84491 }
84492
84493 if (e) {
84494 log_packet_detailed("'category_names' field error detected");
84495 }
84496#endif /* FREECIV_DELTA_PROTOCOL */
84497
84499}
84500
84502{
84503 if (!pc->used) {
84504 log_error("WARNING: trying to send data to the closed connection %s",
84506 return -1;
84507 }
84508 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet != nullptr, -1,
84509 "Handler for PACKET_SERVER_SETTING_CONTROL not installed");
84510 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet(pc, packet);
84511}
84512
84514{
84515 memset(packet, 0, sizeof(*packet));
84516}
84517
84518#define free_packet_server_setting_const(_packet) (void) 0
84519#define destroy_packet_server_setting_const free
84520
84521#ifdef FREECIV_DELTA_PROTOCOL
84523{
84524 const struct packet_server_setting_const *key = (const struct packet_server_setting_const *) vkey;
84525 genhash_val_t result = 0;
84526
84527 result += key->id;
84528
84529 result &= 0xFFFFFFFF;
84530 return result;
84531}
84532
84533static bool cmp_packet_server_setting_const_100(const void *vkey1, const void *vkey2)
84534{
84535 const struct packet_server_setting_const *old = (const struct packet_server_setting_const *) vkey1;
84537 bool differ;
84538
84539 differ = (old->id != real_packet->id);
84540
84541 return !differ;
84542}
84544#endif /* FREECIV_DELTA_PROTOCOL */
84545
84547{
84548#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_const(_packet)
84550
84551#ifdef FREECIV_JSON_CONNECTION
84552 struct plocation field_addr;
84553 {
84554 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84557 }
84558#endif /* FREECIV_JSON_CONNECTION */
84559
84560#ifdef FREECIV_JSON_CONNECTION
84561 field_addr.name = "id";
84562#endif /* FREECIV_JSON_CONNECTION */
84563
84564 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84566 }
84567
84568 log_packet_detailed("packet_server_setting_const_100: got info about (%d)",
84569 real_packet->id);
84570
84571#ifdef FREECIV_DELTA_PROTOCOL
84574 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONST;
84575
84576 if (nullptr == *hash) {
84578 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
84579 }
84580
84581 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84582 *real_packet = *old;
84583 } else {
84584 /* packet is already initialized empty */
84585 log_packet_detailed(" no old info");
84586 }
84587
84588#ifdef FREECIV_JSON_CONNECTION
84589 field_addr.name = "fields";
84590#endif /* FREECIV_JSON_CONNECTION */
84591 DIO_BV_GET(&din, &field_addr, fields);
84592
84593 if (BV_ISSET(fields, 0)) {
84594 log_packet_detailed(" got field 'name'");
84595
84596#ifdef FREECIV_JSON_CONNECTION
84597 field_addr.name = "name";
84598#endif /* FREECIV_JSON_CONNECTION */
84599
84600 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84602 }
84603 }
84604
84605 if (BV_ISSET(fields, 1)) {
84606 log_packet_detailed(" got field 'short_help'");
84607
84608#ifdef FREECIV_JSON_CONNECTION
84609 field_addr.name = "short_help";
84610#endif /* FREECIV_JSON_CONNECTION */
84611
84612 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
84613 RECEIVE_PACKET_FIELD_ERROR(short_help);
84614 }
84615 }
84616
84617 if (BV_ISSET(fields, 2)) {
84618 log_packet_detailed(" got field 'extra_help'");
84619
84620#ifdef FREECIV_JSON_CONNECTION
84621 field_addr.name = "extra_help";
84622#endif /* FREECIV_JSON_CONNECTION */
84623
84624 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
84625 RECEIVE_PACKET_FIELD_ERROR(extra_help);
84626 }
84627 }
84628
84629 if (BV_ISSET(fields, 3)) {
84630 log_packet_detailed(" got field 'category'");
84631
84632#ifdef FREECIV_JSON_CONNECTION
84633 field_addr.name = "category";
84634#endif /* FREECIV_JSON_CONNECTION */
84635
84636 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
84638 }
84639 }
84640
84641 if (nullptr == old) {
84642 old = fc_malloc(sizeof(*old));
84644 *old = *real_packet;
84646 } else {
84647 *old = *real_packet;
84648 }
84649
84650#else /* FREECIV_DELTA_PROTOCOL */
84651#ifdef FREECIV_JSON_CONNECTION
84652 field_addr.name = "name";
84653#endif /* FREECIV_JSON_CONNECTION */
84654
84655 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84657 }
84658
84659#ifdef FREECIV_JSON_CONNECTION
84660 field_addr.name = "short_help";
84661#endif /* FREECIV_JSON_CONNECTION */
84662
84663 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
84664 RECEIVE_PACKET_FIELD_ERROR(short_help);
84665 }
84666
84667#ifdef FREECIV_JSON_CONNECTION
84668 field_addr.name = "extra_help";
84669#endif /* FREECIV_JSON_CONNECTION */
84670
84671 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
84672 RECEIVE_PACKET_FIELD_ERROR(extra_help);
84673 }
84674
84675#ifdef FREECIV_JSON_CONNECTION
84676 field_addr.name = "category";
84677#endif /* FREECIV_JSON_CONNECTION */
84678
84679 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
84681 }
84682#endif /* FREECIV_DELTA_PROTOCOL */
84683
84685#undef FREE_PACKET_STRUCT
84686}
84687
84689{
84690 const struct packet_server_setting_const *real_packet = packet;
84691 int e;
84693
84694 log_packet_detailed("packet_server_setting_const_100: sending info about (%d)",
84695 real_packet->id);
84696
84697#ifdef FREECIV_DELTA_PROTOCOL
84700 bool differ;
84701 int different = 0;
84702 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONST;
84703
84704 if (nullptr == *hash) {
84706 nullptr, nullptr, nullptr, destroy_packet_server_setting_const);
84707 }
84708 BV_CLR_ALL(fields);
84709
84710 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84711 old = fc_malloc(sizeof(*old));
84712 /* temporary bitcopy just to insert correctly */
84713 *old = *real_packet;
84716 different = 1; /* Force to send. */
84717 }
84718
84719 differ = (strcmp(old->name, real_packet->name) != 0);
84720 if (differ) {
84721 different++;
84722 BV_SET(fields, 0);
84723 }
84724
84725 differ = (strcmp(old->short_help, real_packet->short_help) != 0);
84726 if (differ) {
84727 different++;
84728 BV_SET(fields, 1);
84729 }
84730
84731 differ = (strcmp(old->extra_help, real_packet->extra_help) != 0);
84732 if (differ) {
84733 different++;
84734 BV_SET(fields, 2);
84735 }
84736
84737 differ = (old->category != real_packet->category);
84738 if (differ) {
84739 different++;
84740 BV_SET(fields, 3);
84741 }
84742
84743 if (different == 0) {
84744 log_packet_detailed(" no change -> discard");
84746 }
84747#endif /* FREECIV_DELTA_PROTOCOL */
84748
84749#ifdef FREECIV_JSON_CONNECTION
84750 struct plocation field_addr;
84751 {
84752 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84755 }
84756#endif /* FREECIV_JSON_CONNECTION */
84757
84758#ifdef FREECIV_JSON_CONNECTION
84759 field_addr.name = "id";
84760#endif /* FREECIV_JSON_CONNECTION */
84761 e = 0;
84762
84763 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
84764
84765 if (e) {
84766 log_packet_detailed("'id' field error detected");
84767 }
84768
84769#ifdef FREECIV_DELTA_PROTOCOL
84770#ifdef FREECIV_JSON_CONNECTION
84771 field_addr.name = "fields";
84772#endif /* FREECIV_JSON_CONNECTION */
84773 e = 0;
84774 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84775 if (e) {
84776 log_packet_detailed("fields bitvector error detected");
84777 }
84778
84779 if (BV_ISSET(fields, 0)) {
84780 log_packet_detailed(" field 'name' has changed");
84781
84782#ifdef FREECIV_JSON_CONNECTION
84783 field_addr.name = "name";
84784#endif /* FREECIV_JSON_CONNECTION */
84785 e = 0;
84786
84787 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
84788
84789 if (e) {
84790 log_packet_detailed("'name' field error detected");
84791 }
84792 }
84793
84794 if (BV_ISSET(fields, 1)) {
84795 log_packet_detailed(" field 'short_help' has changed");
84796
84797#ifdef FREECIV_JSON_CONNECTION
84798 field_addr.name = "short_help";
84799#endif /* FREECIV_JSON_CONNECTION */
84800 e = 0;
84801
84802 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
84803
84804 if (e) {
84805 log_packet_detailed("'short_help' field error detected");
84806 }
84807 }
84808
84809 if (BV_ISSET(fields, 2)) {
84810 log_packet_detailed(" field 'extra_help' has changed");
84811
84812#ifdef FREECIV_JSON_CONNECTION
84813 field_addr.name = "extra_help";
84814#endif /* FREECIV_JSON_CONNECTION */
84815 e = 0;
84816
84817 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
84818
84819 if (e) {
84820 log_packet_detailed("'extra_help' field error detected");
84821 }
84822 }
84823
84824 if (BV_ISSET(fields, 3)) {
84825 log_packet_detailed(" field 'category' has changed");
84826
84827#ifdef FREECIV_JSON_CONNECTION
84828 field_addr.name = "category";
84829#endif /* FREECIV_JSON_CONNECTION */
84830 e = 0;
84831
84832 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
84833
84834 if (e) {
84835 log_packet_detailed("'category' field error detected");
84836 }
84837 }
84838
84839 *old = *real_packet;
84840
84841#else /* FREECIV_DELTA_PROTOCOL */
84842#ifdef FREECIV_JSON_CONNECTION
84843 field_addr.name = "name";
84844#endif /* FREECIV_JSON_CONNECTION */
84845 e = 0;
84846
84847 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
84848
84849 if (e) {
84850 log_packet_detailed("'name' field error detected");
84851 }
84852
84853#ifdef FREECIV_JSON_CONNECTION
84854 field_addr.name = "short_help";
84855#endif /* FREECIV_JSON_CONNECTION */
84856 e = 0;
84857
84858 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
84859
84860 if (e) {
84861 log_packet_detailed("'short_help' field error detected");
84862 }
84863
84864#ifdef FREECIV_JSON_CONNECTION
84865 field_addr.name = "extra_help";
84866#endif /* FREECIV_JSON_CONNECTION */
84867 e = 0;
84868
84869 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
84870
84871 if (e) {
84872 log_packet_detailed("'extra_help' field error detected");
84873 }
84874
84875#ifdef FREECIV_JSON_CONNECTION
84876 field_addr.name = "category";
84877#endif /* FREECIV_JSON_CONNECTION */
84878 e = 0;
84879
84880 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
84881
84882 if (e) {
84883 log_packet_detailed("'category' field error detected");
84884 }
84885#endif /* FREECIV_DELTA_PROTOCOL */
84886
84888}
84889
84891{
84892 if (!pc->used) {
84893 log_error("WARNING: trying to send data to the closed connection %s",
84895 return -1;
84896 }
84897 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet != nullptr, -1,
84898 "Handler for PACKET_SERVER_SETTING_CONST not installed");
84899 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet(pc, packet);
84900}
84901
84903{
84904 memset(packet, 0, sizeof(*packet));
84905}
84906
84907#define free_packet_server_setting_bool(_packet) (void) 0
84908#define destroy_packet_server_setting_bool free
84909
84910#ifdef FREECIV_DELTA_PROTOCOL
84912{
84913 const struct packet_server_setting_bool *key = (const struct packet_server_setting_bool *) vkey;
84914 genhash_val_t result = 0;
84915
84916 result += key->id;
84917
84918 result &= 0xFFFFFFFF;
84919 return result;
84920}
84921
84922static bool cmp_packet_server_setting_bool_100(const void *vkey1, const void *vkey2)
84923{
84924 const struct packet_server_setting_bool *old = (const struct packet_server_setting_bool *) vkey1;
84926 bool differ;
84927
84928 differ = (old->id != real_packet->id);
84929
84930 return !differ;
84931}
84933#endif /* FREECIV_DELTA_PROTOCOL */
84934
84936{
84937#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bool(_packet)
84939
84940#ifdef FREECIV_JSON_CONNECTION
84941 struct plocation field_addr;
84942 {
84943 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
84946 }
84947#endif /* FREECIV_JSON_CONNECTION */
84948
84949#ifdef FREECIV_JSON_CONNECTION
84950 field_addr.name = "id";
84951#endif /* FREECIV_JSON_CONNECTION */
84952
84953 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84955 }
84956
84957 log_packet_detailed("packet_server_setting_bool_100: got info about (%d)",
84958 real_packet->id);
84959
84960#ifdef FREECIV_DELTA_PROTOCOL
84963 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BOOL;
84964
84965 if (nullptr == *hash) {
84967 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
84968 }
84969
84970 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84971 *real_packet = *old;
84972 } else {
84973 /* packet is already initialized empty */
84974 log_packet_detailed(" no old info");
84975 }
84976
84977#ifdef FREECIV_JSON_CONNECTION
84978 field_addr.name = "fields";
84979#endif /* FREECIV_JSON_CONNECTION */
84980 DIO_BV_GET(&din, &field_addr, fields);
84981
84982 real_packet->is_visible = BV_ISSET(fields, 0);
84983
84984 real_packet->is_changeable = BV_ISSET(fields, 1);
84985
84986 real_packet->initial_setting = BV_ISSET(fields, 2);
84987
84988 if (BV_ISSET(fields, 3)) {
84989 log_packet_detailed(" got field 'setdef'");
84990
84991#ifdef FREECIV_JSON_CONNECTION
84992 field_addr.name = "setdef";
84993#endif /* FREECIV_JSON_CONNECTION */
84994
84995 {
84996 int readin;
84997
84998 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85000 }
85001 real_packet->setdef = readin;
85002 }
85003 }
85004
85005 real_packet->val = BV_ISSET(fields, 4);
85006
85007 real_packet->default_val = BV_ISSET(fields, 5);
85008
85009 if (nullptr == old) {
85010 old = fc_malloc(sizeof(*old));
85012 *old = *real_packet;
85014 } else {
85015 *old = *real_packet;
85016 }
85017
85018#else /* FREECIV_DELTA_PROTOCOL */
85019#ifdef FREECIV_JSON_CONNECTION
85020 field_addr.name = "is_visible";
85021#endif /* FREECIV_JSON_CONNECTION */
85022
85023 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85024 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85025 }
85026
85027#ifdef FREECIV_JSON_CONNECTION
85028 field_addr.name = "is_changeable";
85029#endif /* FREECIV_JSON_CONNECTION */
85030
85031 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
85032 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
85033 }
85034
85035#ifdef FREECIV_JSON_CONNECTION
85036 field_addr.name = "initial_setting";
85037#endif /* FREECIV_JSON_CONNECTION */
85038
85039 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
85040 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
85041 }
85042
85043#ifdef FREECIV_JSON_CONNECTION
85044 field_addr.name = "setdef";
85045#endif /* FREECIV_JSON_CONNECTION */
85046
85047 {
85048 int readin;
85049
85050 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85052 }
85053 real_packet->setdef = readin;
85054 }
85055
85056#ifdef FREECIV_JSON_CONNECTION
85057 field_addr.name = "val";
85058#endif /* FREECIV_JSON_CONNECTION */
85059
85060 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->val)) {
85062 }
85063
85064#ifdef FREECIV_JSON_CONNECTION
85065 field_addr.name = "default_val";
85066#endif /* FREECIV_JSON_CONNECTION */
85067
85068 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->default_val)) {
85069 RECEIVE_PACKET_FIELD_ERROR(default_val);
85070 }
85071#endif /* FREECIV_DELTA_PROTOCOL */
85072
85074#undef FREE_PACKET_STRUCT
85075}
85076
85078{
85079 const struct packet_server_setting_bool *real_packet = packet;
85080 int e;
85082
85083 log_packet_detailed("packet_server_setting_bool_100: sending info about (%d)",
85084 real_packet->id);
85085
85086#ifdef FREECIV_DELTA_PROTOCOL
85089 bool differ;
85090 int different = 0;
85091 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BOOL;
85092
85093 if (nullptr == *hash) {
85095 nullptr, nullptr, nullptr, destroy_packet_server_setting_bool);
85096 }
85097 BV_CLR_ALL(fields);
85098
85099 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85100 old = fc_malloc(sizeof(*old));
85101 /* temporary bitcopy just to insert correctly */
85102 *old = *real_packet;
85105 different = 1; /* Force to send. */
85106 }
85107
85108 differ = (old->is_visible != real_packet->is_visible);
85109 if (differ) {
85110 different++;
85111 }
85112 /* folded into head */
85113 if (real_packet->is_visible) {
85114 BV_SET(fields, 0);
85115 }
85116
85117 differ = (old->is_changeable != real_packet->is_changeable);
85118 if (differ) {
85119 different++;
85120 }
85121 /* folded into head */
85122 if (real_packet->is_changeable) {
85123 BV_SET(fields, 1);
85124 }
85125
85126 differ = (old->initial_setting != real_packet->initial_setting);
85127 if (differ) {
85128 different++;
85129 }
85130 /* folded into head */
85131 if (real_packet->initial_setting) {
85132 BV_SET(fields, 2);
85133 }
85134
85135 differ = (old->setdef != real_packet->setdef);
85136 if (differ) {
85137 different++;
85138 BV_SET(fields, 3);
85139 }
85140
85141 differ = (old->val != real_packet->val);
85142 if (differ) {
85143 different++;
85144 }
85145 /* folded into head */
85146 if (real_packet->val) {
85147 BV_SET(fields, 4);
85148 }
85149
85150 differ = (old->default_val != real_packet->default_val);
85151 if (differ) {
85152 different++;
85153 }
85154 /* folded into head */
85155 if (real_packet->default_val) {
85156 BV_SET(fields, 5);
85157 }
85158
85159 if (different == 0) {
85160 log_packet_detailed(" no change -> discard");
85162 }
85163#endif /* FREECIV_DELTA_PROTOCOL */
85164
85165#ifdef FREECIV_JSON_CONNECTION
85166 struct plocation field_addr;
85167 {
85168 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85171 }
85172#endif /* FREECIV_JSON_CONNECTION */
85173
85174#ifdef FREECIV_JSON_CONNECTION
85175 field_addr.name = "id";
85176#endif /* FREECIV_JSON_CONNECTION */
85177 e = 0;
85178
85179 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85180
85181 if (e) {
85182 log_packet_detailed("'id' field error detected");
85183 }
85184
85185#ifdef FREECIV_DELTA_PROTOCOL
85186#ifdef FREECIV_JSON_CONNECTION
85187 field_addr.name = "fields";
85188#endif /* FREECIV_JSON_CONNECTION */
85189 e = 0;
85190 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85191 if (e) {
85192 log_packet_detailed("fields bitvector error detected");
85193 }
85194
85195 /* field 0 is folded into the header */
85196
85197 /* field 1 is folded into the header */
85198
85199 /* field 2 is folded into the header */
85200
85201 if (BV_ISSET(fields, 3)) {
85202 log_packet_detailed(" field 'setdef' has changed");
85203
85204#ifdef FREECIV_JSON_CONNECTION
85205 field_addr.name = "setdef";
85206#endif /* FREECIV_JSON_CONNECTION */
85207 e = 0;
85208
85209 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85210
85211 if (e) {
85212 log_packet_detailed("'setdef' field error detected");
85213 }
85214 }
85215
85216 /* field 4 is folded into the header */
85217
85218 /* field 5 is folded into the header */
85219
85220 *old = *real_packet;
85221
85222#else /* FREECIV_DELTA_PROTOCOL */
85223#ifdef FREECIV_JSON_CONNECTION
85224 field_addr.name = "is_visible";
85225#endif /* FREECIV_JSON_CONNECTION */
85226 e = 0;
85227
85228 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
85229
85230 if (e) {
85231 log_packet_detailed("'is_visible' field error detected");
85232 }
85233
85234#ifdef FREECIV_JSON_CONNECTION
85235 field_addr.name = "is_changeable";
85236#endif /* FREECIV_JSON_CONNECTION */
85237 e = 0;
85238
85239 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
85240
85241 if (e) {
85242 log_packet_detailed("'is_changeable' field error detected");
85243 }
85244
85245#ifdef FREECIV_JSON_CONNECTION
85246 field_addr.name = "initial_setting";
85247#endif /* FREECIV_JSON_CONNECTION */
85248 e = 0;
85249
85250 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
85251
85252 if (e) {
85253 log_packet_detailed("'initial_setting' field error detected");
85254 }
85255
85256#ifdef FREECIV_JSON_CONNECTION
85257 field_addr.name = "setdef";
85258#endif /* FREECIV_JSON_CONNECTION */
85259 e = 0;
85260
85261 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85262
85263 if (e) {
85264 log_packet_detailed("'setdef' field error detected");
85265 }
85266
85267#ifdef FREECIV_JSON_CONNECTION
85268 field_addr.name = "val";
85269#endif /* FREECIV_JSON_CONNECTION */
85270 e = 0;
85271
85272 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->val);
85273
85274 if (e) {
85275 log_packet_detailed("'val' field error detected");
85276 }
85277
85278#ifdef FREECIV_JSON_CONNECTION
85279 field_addr.name = "default_val";
85280#endif /* FREECIV_JSON_CONNECTION */
85281 e = 0;
85282
85283 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->default_val);
85284
85285 if (e) {
85286 log_packet_detailed("'default_val' field error detected");
85287 }
85288#endif /* FREECIV_DELTA_PROTOCOL */
85289
85291}
85292
85294{
85295 if (!pc->used) {
85296 log_error("WARNING: trying to send data to the closed connection %s",
85298 return -1;
85299 }
85300 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet != nullptr, -1,
85301 "Handler for PACKET_SERVER_SETTING_BOOL not installed");
85302 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet(pc, packet);
85303}
85304
85306{
85307 memset(packet, 0, sizeof(*packet));
85308}
85309
85310#define free_packet_server_setting_int(_packet) (void) 0
85311#define destroy_packet_server_setting_int free
85312
85313#ifdef FREECIV_DELTA_PROTOCOL
85315{
85316 const struct packet_server_setting_int *key = (const struct packet_server_setting_int *) vkey;
85317 genhash_val_t result = 0;
85318
85319 result += key->id;
85320
85321 result &= 0xFFFFFFFF;
85322 return result;
85323}
85324
85325static bool cmp_packet_server_setting_int_100(const void *vkey1, const void *vkey2)
85326{
85327 const struct packet_server_setting_int *old = (const struct packet_server_setting_int *) vkey1;
85329 bool differ;
85330
85331 differ = (old->id != real_packet->id);
85332
85333 return !differ;
85334}
85336#endif /* FREECIV_DELTA_PROTOCOL */
85337
85339{
85340#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_int(_packet)
85342
85343#ifdef FREECIV_JSON_CONNECTION
85344 struct plocation field_addr;
85345 {
85346 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85349 }
85350#endif /* FREECIV_JSON_CONNECTION */
85351
85352#ifdef FREECIV_JSON_CONNECTION
85353 field_addr.name = "id";
85354#endif /* FREECIV_JSON_CONNECTION */
85355
85356 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85358 }
85359
85360 log_packet_detailed("packet_server_setting_int_100: got info about (%d)",
85361 real_packet->id);
85362
85363#ifdef FREECIV_DELTA_PROTOCOL
85366 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_INT;
85367
85368 if (nullptr == *hash) {
85370 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
85371 }
85372
85373 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85374 *real_packet = *old;
85375 } else {
85376 /* packet is already initialized empty */
85377 log_packet_detailed(" no old info");
85378 }
85379
85380#ifdef FREECIV_JSON_CONNECTION
85381 field_addr.name = "fields";
85382#endif /* FREECIV_JSON_CONNECTION */
85383 DIO_BV_GET(&din, &field_addr, fields);
85384
85385 real_packet->is_visible = BV_ISSET(fields, 0);
85386
85387 real_packet->is_changeable = BV_ISSET(fields, 1);
85388
85389 real_packet->initial_setting = BV_ISSET(fields, 2);
85390
85391 if (BV_ISSET(fields, 3)) {
85392 log_packet_detailed(" got field 'setdef'");
85393
85394#ifdef FREECIV_JSON_CONNECTION
85395 field_addr.name = "setdef";
85396#endif /* FREECIV_JSON_CONNECTION */
85397
85398 {
85399 int readin;
85400
85401 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85403 }
85404 real_packet->setdef = readin;
85405 }
85406 }
85407
85408 if (BV_ISSET(fields, 4)) {
85409 log_packet_detailed(" got field 'val'");
85410
85411#ifdef FREECIV_JSON_CONNECTION
85412 field_addr.name = "val";
85413#endif /* FREECIV_JSON_CONNECTION */
85414
85415 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
85417 }
85418 }
85419
85420 if (BV_ISSET(fields, 5)) {
85421 log_packet_detailed(" got field 'default_val'");
85422
85423#ifdef FREECIV_JSON_CONNECTION
85424 field_addr.name = "default_val";
85425#endif /* FREECIV_JSON_CONNECTION */
85426
85427 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
85428 RECEIVE_PACKET_FIELD_ERROR(default_val);
85429 }
85430 }
85431
85432 if (BV_ISSET(fields, 6)) {
85433 log_packet_detailed(" got field 'min_val'");
85434
85435#ifdef FREECIV_JSON_CONNECTION
85436 field_addr.name = "min_val";
85437#endif /* FREECIV_JSON_CONNECTION */
85438
85439 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
85441 }
85442 }
85443
85444 if (BV_ISSET(fields, 7)) {
85445 log_packet_detailed(" got field 'max_val'");
85446
85447#ifdef FREECIV_JSON_CONNECTION
85448 field_addr.name = "max_val";
85449#endif /* FREECIV_JSON_CONNECTION */
85450
85451 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
85453 }
85454 }
85455
85456 if (nullptr == old) {
85457 old = fc_malloc(sizeof(*old));
85459 *old = *real_packet;
85461 } else {
85462 *old = *real_packet;
85463 }
85464
85465#else /* FREECIV_DELTA_PROTOCOL */
85466#ifdef FREECIV_JSON_CONNECTION
85467 field_addr.name = "is_visible";
85468#endif /* FREECIV_JSON_CONNECTION */
85469
85470 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85471 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85472 }
85473
85474#ifdef FREECIV_JSON_CONNECTION
85475 field_addr.name = "is_changeable";
85476#endif /* FREECIV_JSON_CONNECTION */
85477
85478 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
85479 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
85480 }
85481
85482#ifdef FREECIV_JSON_CONNECTION
85483 field_addr.name = "initial_setting";
85484#endif /* FREECIV_JSON_CONNECTION */
85485
85486 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
85487 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
85488 }
85489
85490#ifdef FREECIV_JSON_CONNECTION
85491 field_addr.name = "setdef";
85492#endif /* FREECIV_JSON_CONNECTION */
85493
85494 {
85495 int readin;
85496
85497 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85499 }
85500 real_packet->setdef = readin;
85501 }
85502
85503#ifdef FREECIV_JSON_CONNECTION
85504 field_addr.name = "val";
85505#endif /* FREECIV_JSON_CONNECTION */
85506
85507 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
85509 }
85510
85511#ifdef FREECIV_JSON_CONNECTION
85512 field_addr.name = "default_val";
85513#endif /* FREECIV_JSON_CONNECTION */
85514
85515 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
85516 RECEIVE_PACKET_FIELD_ERROR(default_val);
85517 }
85518
85519#ifdef FREECIV_JSON_CONNECTION
85520 field_addr.name = "min_val";
85521#endif /* FREECIV_JSON_CONNECTION */
85522
85523 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
85525 }
85526
85527#ifdef FREECIV_JSON_CONNECTION
85528 field_addr.name = "max_val";
85529#endif /* FREECIV_JSON_CONNECTION */
85530
85531 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
85533 }
85534#endif /* FREECIV_DELTA_PROTOCOL */
85535
85537#undef FREE_PACKET_STRUCT
85538}
85539
85541{
85542 const struct packet_server_setting_int *real_packet = packet;
85543 int e;
85545
85546 log_packet_detailed("packet_server_setting_int_100: sending info about (%d)",
85547 real_packet->id);
85548
85549#ifdef FREECIV_DELTA_PROTOCOL
85552 bool differ;
85553 int different = 0;
85554 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_INT;
85555
85556 if (nullptr == *hash) {
85558 nullptr, nullptr, nullptr, destroy_packet_server_setting_int);
85559 }
85560 BV_CLR_ALL(fields);
85561
85562 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85563 old = fc_malloc(sizeof(*old));
85564 /* temporary bitcopy just to insert correctly */
85565 *old = *real_packet;
85568 different = 1; /* Force to send. */
85569 }
85570
85571 differ = (old->is_visible != real_packet->is_visible);
85572 if (differ) {
85573 different++;
85574 }
85575 /* folded into head */
85576 if (real_packet->is_visible) {
85577 BV_SET(fields, 0);
85578 }
85579
85580 differ = (old->is_changeable != real_packet->is_changeable);
85581 if (differ) {
85582 different++;
85583 }
85584 /* folded into head */
85585 if (real_packet->is_changeable) {
85586 BV_SET(fields, 1);
85587 }
85588
85589 differ = (old->initial_setting != real_packet->initial_setting);
85590 if (differ) {
85591 different++;
85592 }
85593 /* folded into head */
85594 if (real_packet->initial_setting) {
85595 BV_SET(fields, 2);
85596 }
85597
85598 differ = (old->setdef != real_packet->setdef);
85599 if (differ) {
85600 different++;
85601 BV_SET(fields, 3);
85602 }
85603
85604 differ = (old->val != real_packet->val);
85605 if (differ) {
85606 different++;
85607 BV_SET(fields, 4);
85608 }
85609
85610 differ = (old->default_val != real_packet->default_val);
85611 if (differ) {
85612 different++;
85613 BV_SET(fields, 5);
85614 }
85615
85616 differ = (old->min_val != real_packet->min_val);
85617 if (differ) {
85618 different++;
85619 BV_SET(fields, 6);
85620 }
85621
85622 differ = (old->max_val != real_packet->max_val);
85623 if (differ) {
85624 different++;
85625 BV_SET(fields, 7);
85626 }
85627
85628 if (different == 0) {
85629 log_packet_detailed(" no change -> discard");
85631 }
85632#endif /* FREECIV_DELTA_PROTOCOL */
85633
85634#ifdef FREECIV_JSON_CONNECTION
85635 struct plocation field_addr;
85636 {
85637 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85640 }
85641#endif /* FREECIV_JSON_CONNECTION */
85642
85643#ifdef FREECIV_JSON_CONNECTION
85644 field_addr.name = "id";
85645#endif /* FREECIV_JSON_CONNECTION */
85646 e = 0;
85647
85648 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85649
85650 if (e) {
85651 log_packet_detailed("'id' field error detected");
85652 }
85653
85654#ifdef FREECIV_DELTA_PROTOCOL
85655#ifdef FREECIV_JSON_CONNECTION
85656 field_addr.name = "fields";
85657#endif /* FREECIV_JSON_CONNECTION */
85658 e = 0;
85659 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85660 if (e) {
85661 log_packet_detailed("fields bitvector error detected");
85662 }
85663
85664 /* field 0 is folded into the header */
85665
85666 /* field 1 is folded into the header */
85667
85668 /* field 2 is folded into the header */
85669
85670 if (BV_ISSET(fields, 3)) {
85671 log_packet_detailed(" field 'setdef' has changed");
85672
85673#ifdef FREECIV_JSON_CONNECTION
85674 field_addr.name = "setdef";
85675#endif /* FREECIV_JSON_CONNECTION */
85676 e = 0;
85677
85678 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85679
85680 if (e) {
85681 log_packet_detailed("'setdef' field error detected");
85682 }
85683 }
85684
85685 if (BV_ISSET(fields, 4)) {
85686 log_packet_detailed(" field 'val' has changed");
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
85700 if (BV_ISSET(fields, 5)) {
85701 log_packet_detailed(" field 'default_val' has changed");
85702
85703#ifdef FREECIV_JSON_CONNECTION
85704 field_addr.name = "default_val";
85705#endif /* FREECIV_JSON_CONNECTION */
85706 e = 0;
85707
85708 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
85709
85710 if (e) {
85711 log_packet_detailed("'default_val' field error detected");
85712 }
85713 }
85714
85715 if (BV_ISSET(fields, 6)) {
85716 log_packet_detailed(" field 'min_val' has changed");
85717
85718#ifdef FREECIV_JSON_CONNECTION
85719 field_addr.name = "min_val";
85720#endif /* FREECIV_JSON_CONNECTION */
85721 e = 0;
85722
85723 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
85724
85725 if (e) {
85726 log_packet_detailed("'min_val' field error detected");
85727 }
85728 }
85729
85730 if (BV_ISSET(fields, 7)) {
85731 log_packet_detailed(" field 'max_val' has changed");
85732
85733#ifdef FREECIV_JSON_CONNECTION
85734 field_addr.name = "max_val";
85735#endif /* FREECIV_JSON_CONNECTION */
85736 e = 0;
85737
85738 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
85739
85740 if (e) {
85741 log_packet_detailed("'max_val' field error detected");
85742 }
85743 }
85744
85745 *old = *real_packet;
85746
85747#else /* FREECIV_DELTA_PROTOCOL */
85748#ifdef FREECIV_JSON_CONNECTION
85749 field_addr.name = "is_visible";
85750#endif /* FREECIV_JSON_CONNECTION */
85751 e = 0;
85752
85753 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
85754
85755 if (e) {
85756 log_packet_detailed("'is_visible' field error detected");
85757 }
85758
85759#ifdef FREECIV_JSON_CONNECTION
85760 field_addr.name = "is_changeable";
85761#endif /* FREECIV_JSON_CONNECTION */
85762 e = 0;
85763
85764 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
85765
85766 if (e) {
85767 log_packet_detailed("'is_changeable' field error detected");
85768 }
85769
85770#ifdef FREECIV_JSON_CONNECTION
85771 field_addr.name = "initial_setting";
85772#endif /* FREECIV_JSON_CONNECTION */
85773 e = 0;
85774
85775 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
85776
85777 if (e) {
85778 log_packet_detailed("'initial_setting' field error detected");
85779 }
85780
85781#ifdef FREECIV_JSON_CONNECTION
85782 field_addr.name = "setdef";
85783#endif /* FREECIV_JSON_CONNECTION */
85784 e = 0;
85785
85786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
85787
85788 if (e) {
85789 log_packet_detailed("'setdef' field error detected");
85790 }
85791
85792#ifdef FREECIV_JSON_CONNECTION
85793 field_addr.name = "val";
85794#endif /* FREECIV_JSON_CONNECTION */
85795 e = 0;
85796
85797 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
85798
85799 if (e) {
85800 log_packet_detailed("'val' field error detected");
85801 }
85802
85803#ifdef FREECIV_JSON_CONNECTION
85804 field_addr.name = "default_val";
85805#endif /* FREECIV_JSON_CONNECTION */
85806 e = 0;
85807
85808 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
85809
85810 if (e) {
85811 log_packet_detailed("'default_val' field error detected");
85812 }
85813
85814#ifdef FREECIV_JSON_CONNECTION
85815 field_addr.name = "min_val";
85816#endif /* FREECIV_JSON_CONNECTION */
85817 e = 0;
85818
85819 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
85820
85821 if (e) {
85822 log_packet_detailed("'min_val' field error detected");
85823 }
85824
85825#ifdef FREECIV_JSON_CONNECTION
85826 field_addr.name = "max_val";
85827#endif /* FREECIV_JSON_CONNECTION */
85828 e = 0;
85829
85830 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
85831
85832 if (e) {
85833 log_packet_detailed("'max_val' field error detected");
85834 }
85835#endif /* FREECIV_DELTA_PROTOCOL */
85836
85838}
85839
85841{
85842 if (!pc->used) {
85843 log_error("WARNING: trying to send data to the closed connection %s",
85845 return -1;
85846 }
85847 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet != nullptr, -1,
85848 "Handler for PACKET_SERVER_SETTING_INT not installed");
85849 return pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet(pc, packet);
85850}
85851
85853{
85854 memset(packet, 0, sizeof(*packet));
85855}
85856
85857#define free_packet_server_setting_str(_packet) (void) 0
85858#define destroy_packet_server_setting_str free
85859
85860#ifdef FREECIV_DELTA_PROTOCOL
85862{
85863 const struct packet_server_setting_str *key = (const struct packet_server_setting_str *) vkey;
85864 genhash_val_t result = 0;
85865
85866 result += key->id;
85867
85868 result &= 0xFFFFFFFF;
85869 return result;
85870}
85871
85872static bool cmp_packet_server_setting_str_100(const void *vkey1, const void *vkey2)
85873{
85874 const struct packet_server_setting_str *old = (const struct packet_server_setting_str *) vkey1;
85876 bool differ;
85877
85878 differ = (old->id != real_packet->id);
85879
85880 return !differ;
85881}
85883#endif /* FREECIV_DELTA_PROTOCOL */
85884
85886{
85887#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_str(_packet)
85889
85890#ifdef FREECIV_JSON_CONNECTION
85891 struct plocation field_addr;
85892 {
85893 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
85896 }
85897#endif /* FREECIV_JSON_CONNECTION */
85898
85899#ifdef FREECIV_JSON_CONNECTION
85900 field_addr.name = "id";
85901#endif /* FREECIV_JSON_CONNECTION */
85902
85903 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
85905 }
85906
85907 log_packet_detailed("packet_server_setting_str_100: got info about (%d)",
85908 real_packet->id);
85909
85910#ifdef FREECIV_DELTA_PROTOCOL
85913 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_STR;
85914
85915 if (nullptr == *hash) {
85917 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
85918 }
85919
85920 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85921 *real_packet = *old;
85922 } else {
85923 /* packet is already initialized empty */
85924 log_packet_detailed(" no old info");
85925 }
85926
85927#ifdef FREECIV_JSON_CONNECTION
85928 field_addr.name = "fields";
85929#endif /* FREECIV_JSON_CONNECTION */
85930 DIO_BV_GET(&din, &field_addr, fields);
85931
85932 real_packet->is_visible = BV_ISSET(fields, 0);
85933
85934 real_packet->is_changeable = BV_ISSET(fields, 1);
85935
85936 real_packet->initial_setting = BV_ISSET(fields, 2);
85937
85938 if (BV_ISSET(fields, 3)) {
85939 log_packet_detailed(" got field 'setdef'");
85940
85941#ifdef FREECIV_JSON_CONNECTION
85942 field_addr.name = "setdef";
85943#endif /* FREECIV_JSON_CONNECTION */
85944
85945 {
85946 int readin;
85947
85948 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
85950 }
85951 real_packet->setdef = readin;
85952 }
85953 }
85954
85955 if (BV_ISSET(fields, 4)) {
85956 log_packet_detailed(" got field 'val'");
85957
85958#ifdef FREECIV_JSON_CONNECTION
85959 field_addr.name = "val";
85960#endif /* FREECIV_JSON_CONNECTION */
85961
85962 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
85964 }
85965 }
85966
85967 if (BV_ISSET(fields, 5)) {
85968 log_packet_detailed(" got field 'default_val'");
85969
85970#ifdef FREECIV_JSON_CONNECTION
85971 field_addr.name = "default_val";
85972#endif /* FREECIV_JSON_CONNECTION */
85973
85974 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
85975 RECEIVE_PACKET_FIELD_ERROR(default_val);
85976 }
85977 }
85978
85979 if (nullptr == old) {
85980 old = fc_malloc(sizeof(*old));
85982 *old = *real_packet;
85984 } else {
85985 *old = *real_packet;
85986 }
85987
85988#else /* FREECIV_DELTA_PROTOCOL */
85989#ifdef FREECIV_JSON_CONNECTION
85990 field_addr.name = "is_visible";
85991#endif /* FREECIV_JSON_CONNECTION */
85992
85993 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
85994 RECEIVE_PACKET_FIELD_ERROR(is_visible);
85995 }
85996
85997#ifdef FREECIV_JSON_CONNECTION
85998 field_addr.name = "is_changeable";
85999#endif /* FREECIV_JSON_CONNECTION */
86000
86001 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
86002 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
86003 }
86004
86005#ifdef FREECIV_JSON_CONNECTION
86006 field_addr.name = "initial_setting";
86007#endif /* FREECIV_JSON_CONNECTION */
86008
86009 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
86010 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
86011 }
86012
86013#ifdef FREECIV_JSON_CONNECTION
86014 field_addr.name = "setdef";
86015#endif /* FREECIV_JSON_CONNECTION */
86016
86017 {
86018 int readin;
86019
86020 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86022 }
86023 real_packet->setdef = readin;
86024 }
86025
86026#ifdef FREECIV_JSON_CONNECTION
86027 field_addr.name = "val";
86028#endif /* FREECIV_JSON_CONNECTION */
86029
86030 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
86032 }
86033
86034#ifdef FREECIV_JSON_CONNECTION
86035 field_addr.name = "default_val";
86036#endif /* FREECIV_JSON_CONNECTION */
86037
86038 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
86039 RECEIVE_PACKET_FIELD_ERROR(default_val);
86040 }
86041#endif /* FREECIV_DELTA_PROTOCOL */
86042
86044#undef FREE_PACKET_STRUCT
86045}
86046
86048{
86049 const struct packet_server_setting_str *real_packet = packet;
86050 int e;
86052
86053 log_packet_detailed("packet_server_setting_str_100: sending info about (%d)",
86054 real_packet->id);
86055
86056#ifdef FREECIV_DELTA_PROTOCOL
86059 bool differ;
86060 int different = 0;
86061 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_STR;
86062
86063 if (nullptr == *hash) {
86065 nullptr, nullptr, nullptr, destroy_packet_server_setting_str);
86066 }
86067 BV_CLR_ALL(fields);
86068
86069 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86070 old = fc_malloc(sizeof(*old));
86071 /* temporary bitcopy just to insert correctly */
86072 *old = *real_packet;
86075 different = 1; /* Force to send. */
86076 }
86077
86078 differ = (old->is_visible != real_packet->is_visible);
86079 if (differ) {
86080 different++;
86081 }
86082 /* folded into head */
86083 if (real_packet->is_visible) {
86084 BV_SET(fields, 0);
86085 }
86086
86087 differ = (old->is_changeable != real_packet->is_changeable);
86088 if (differ) {
86089 different++;
86090 }
86091 /* folded into head */
86092 if (real_packet->is_changeable) {
86093 BV_SET(fields, 1);
86094 }
86095
86096 differ = (old->initial_setting != real_packet->initial_setting);
86097 if (differ) {
86098 different++;
86099 }
86100 /* folded into head */
86101 if (real_packet->initial_setting) {
86102 BV_SET(fields, 2);
86103 }
86104
86105 differ = (old->setdef != real_packet->setdef);
86106 if (differ) {
86107 different++;
86108 BV_SET(fields, 3);
86109 }
86110
86111 differ = (strcmp(old->val, real_packet->val) != 0);
86112 if (differ) {
86113 different++;
86114 BV_SET(fields, 4);
86115 }
86116
86117 differ = (strcmp(old->default_val, real_packet->default_val) != 0);
86118 if (differ) {
86119 different++;
86120 BV_SET(fields, 5);
86121 }
86122
86123 if (different == 0) {
86124 log_packet_detailed(" no change -> discard");
86126 }
86127#endif /* FREECIV_DELTA_PROTOCOL */
86128
86129#ifdef FREECIV_JSON_CONNECTION
86130 struct plocation field_addr;
86131 {
86132 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86135 }
86136#endif /* FREECIV_JSON_CONNECTION */
86137
86138#ifdef FREECIV_JSON_CONNECTION
86139 field_addr.name = "id";
86140#endif /* FREECIV_JSON_CONNECTION */
86141 e = 0;
86142
86143 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86144
86145 if (e) {
86146 log_packet_detailed("'id' field error detected");
86147 }
86148
86149#ifdef FREECIV_DELTA_PROTOCOL
86150#ifdef FREECIV_JSON_CONNECTION
86151 field_addr.name = "fields";
86152#endif /* FREECIV_JSON_CONNECTION */
86153 e = 0;
86154 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86155 if (e) {
86156 log_packet_detailed("fields bitvector error detected");
86157 }
86158
86159 /* field 0 is folded into the header */
86160
86161 /* field 1 is folded into the header */
86162
86163 /* field 2 is folded into the header */
86164
86165 if (BV_ISSET(fields, 3)) {
86166 log_packet_detailed(" field 'setdef' has changed");
86167
86168#ifdef FREECIV_JSON_CONNECTION
86169 field_addr.name = "setdef";
86170#endif /* FREECIV_JSON_CONNECTION */
86171 e = 0;
86172
86173 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86174
86175 if (e) {
86176 log_packet_detailed("'setdef' field error detected");
86177 }
86178 }
86179
86180 if (BV_ISSET(fields, 4)) {
86181 log_packet_detailed(" field 'val' has changed");
86182
86183#ifdef FREECIV_JSON_CONNECTION
86184 field_addr.name = "val";
86185#endif /* FREECIV_JSON_CONNECTION */
86186 e = 0;
86187
86188 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
86189
86190 if (e) {
86191 log_packet_detailed("'val' field error detected");
86192 }
86193 }
86194
86195 if (BV_ISSET(fields, 5)) {
86196 log_packet_detailed(" field 'default_val' has changed");
86197
86198#ifdef FREECIV_JSON_CONNECTION
86199 field_addr.name = "default_val";
86200#endif /* FREECIV_JSON_CONNECTION */
86201 e = 0;
86202
86203 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
86204
86205 if (e) {
86206 log_packet_detailed("'default_val' field error detected");
86207 }
86208 }
86209
86210 *old = *real_packet;
86211
86212#else /* FREECIV_DELTA_PROTOCOL */
86213#ifdef FREECIV_JSON_CONNECTION
86214 field_addr.name = "is_visible";
86215#endif /* FREECIV_JSON_CONNECTION */
86216 e = 0;
86217
86218 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86219
86220 if (e) {
86221 log_packet_detailed("'is_visible' field error detected");
86222 }
86223
86224#ifdef FREECIV_JSON_CONNECTION
86225 field_addr.name = "is_changeable";
86226#endif /* FREECIV_JSON_CONNECTION */
86227 e = 0;
86228
86229 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86230
86231 if (e) {
86232 log_packet_detailed("'is_changeable' field error detected");
86233 }
86234
86235#ifdef FREECIV_JSON_CONNECTION
86236 field_addr.name = "initial_setting";
86237#endif /* FREECIV_JSON_CONNECTION */
86238 e = 0;
86239
86240 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86241
86242 if (e) {
86243 log_packet_detailed("'initial_setting' field error detected");
86244 }
86245
86246#ifdef FREECIV_JSON_CONNECTION
86247 field_addr.name = "setdef";
86248#endif /* FREECIV_JSON_CONNECTION */
86249 e = 0;
86250
86251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86252
86253 if (e) {
86254 log_packet_detailed("'setdef' field error detected");
86255 }
86256
86257#ifdef FREECIV_JSON_CONNECTION
86258 field_addr.name = "val";
86259#endif /* FREECIV_JSON_CONNECTION */
86260 e = 0;
86261
86262 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
86263
86264 if (e) {
86265 log_packet_detailed("'val' field error detected");
86266 }
86267
86268#ifdef FREECIV_JSON_CONNECTION
86269 field_addr.name = "default_val";
86270#endif /* FREECIV_JSON_CONNECTION */
86271 e = 0;
86272
86273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
86274
86275 if (e) {
86276 log_packet_detailed("'default_val' field error detected");
86277 }
86278#endif /* FREECIV_DELTA_PROTOCOL */
86279
86281}
86282
86284{
86285 if (!pc->used) {
86286 log_error("WARNING: trying to send data to the closed connection %s",
86288 return -1;
86289 }
86290 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet != nullptr, -1,
86291 "Handler for PACKET_SERVER_SETTING_STR not installed");
86292 return pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet(pc, packet);
86293}
86294
86296{
86297 memset(packet, 0, sizeof(*packet));
86298}
86299
86300#define free_packet_server_setting_enum(_packet) (void) 0
86301#define destroy_packet_server_setting_enum free
86302
86303#ifdef FREECIV_DELTA_PROTOCOL
86305{
86306 const struct packet_server_setting_enum *key = (const struct packet_server_setting_enum *) vkey;
86307 genhash_val_t result = 0;
86308
86309 result += key->id;
86310
86311 result &= 0xFFFFFFFF;
86312 return result;
86313}
86314
86315static bool cmp_packet_server_setting_enum_100(const void *vkey1, const void *vkey2)
86316{
86317 const struct packet_server_setting_enum *old = (const struct packet_server_setting_enum *) vkey1;
86319 bool differ;
86320
86321 differ = (old->id != real_packet->id);
86322
86323 return !differ;
86324}
86326#endif /* FREECIV_DELTA_PROTOCOL */
86327
86329{
86330#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_enum(_packet)
86332
86333#ifdef FREECIV_JSON_CONNECTION
86334 struct plocation field_addr;
86335 {
86336 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86339 }
86340#endif /* FREECIV_JSON_CONNECTION */
86341
86342#ifdef FREECIV_JSON_CONNECTION
86343 field_addr.name = "id";
86344#endif /* FREECIV_JSON_CONNECTION */
86345
86346 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
86348 }
86349
86350 log_packet_detailed("packet_server_setting_enum_100: got info about (%d)",
86351 real_packet->id);
86352
86353#ifdef FREECIV_DELTA_PROTOCOL
86356 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_ENUM;
86357
86358 if (nullptr == *hash) {
86360 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
86361 }
86362
86363 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86364 *real_packet = *old;
86365 } else {
86366 /* packet is already initialized empty */
86367 log_packet_detailed(" no old info");
86368 }
86369
86370#ifdef FREECIV_JSON_CONNECTION
86371 field_addr.name = "fields";
86372#endif /* FREECIV_JSON_CONNECTION */
86373 DIO_BV_GET(&din, &field_addr, fields);
86374
86375 real_packet->is_visible = BV_ISSET(fields, 0);
86376
86377 real_packet->is_changeable = BV_ISSET(fields, 1);
86378
86379 real_packet->initial_setting = BV_ISSET(fields, 2);
86380
86381 if (BV_ISSET(fields, 3)) {
86382 log_packet_detailed(" got field 'setdef'");
86383
86384#ifdef FREECIV_JSON_CONNECTION
86385 field_addr.name = "setdef";
86386#endif /* FREECIV_JSON_CONNECTION */
86387
86388 {
86389 int readin;
86390
86391 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86393 }
86394 real_packet->setdef = readin;
86395 }
86396 }
86397
86398 if (BV_ISSET(fields, 4)) {
86399 log_packet_detailed(" got field 'val'");
86400
86401#ifdef FREECIV_JSON_CONNECTION
86402 field_addr.name = "val";
86403#endif /* FREECIV_JSON_CONNECTION */
86404
86405 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
86407 }
86408 }
86409
86410 if (BV_ISSET(fields, 5)) {
86411 log_packet_detailed(" got field 'default_val'");
86412
86413#ifdef FREECIV_JSON_CONNECTION
86414 field_addr.name = "default_val";
86415#endif /* FREECIV_JSON_CONNECTION */
86416
86417 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
86418 RECEIVE_PACKET_FIELD_ERROR(default_val);
86419 }
86420 }
86421
86422 if (BV_ISSET(fields, 6)) {
86423 log_packet_detailed(" got field 'values_num'");
86424
86425#ifdef FREECIV_JSON_CONNECTION
86426 field_addr.name = "values_num";
86427#endif /* FREECIV_JSON_CONNECTION */
86428
86429 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
86430 RECEIVE_PACKET_FIELD_ERROR(values_num);
86431 }
86432 }
86433
86434 if (BV_ISSET(fields, 7)) {
86435 log_packet_detailed(" got field 'support_names'");
86436
86437#ifdef FREECIV_JSON_CONNECTION
86438 field_addr.name = "support_names";
86439#endif /* FREECIV_JSON_CONNECTION */
86440
86441 {
86442 int i;
86443
86444 if (real_packet->values_num > 64) {
86445 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
86446 }
86447
86448#ifdef FREECIV_JSON_CONNECTION
86449 /* Enter array. */
86450 field_addr.sub_location = plocation_elem_new(0);
86451#endif /* FREECIV_JSON_CONNECTION */
86452
86453 for (i = 0; i < real_packet->values_num; i++) {
86454#ifdef FREECIV_JSON_CONNECTION
86455 /* Next array element */
86456 field_addr.sub_location->number = i;
86457#endif /* FREECIV_JSON_CONNECTION */
86458
86459 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
86460 RECEIVE_PACKET_FIELD_ERROR(support_names);
86461 }
86462 }
86463
86464#ifdef FREECIV_JSON_CONNECTION
86465 /* Exit array. */
86466 FC_FREE(field_addr.sub_location);
86467#endif /* FREECIV_JSON_CONNECTION */
86468 }
86469 }
86470
86471 if (BV_ISSET(fields, 8)) {
86472 log_packet_detailed(" got field 'pretty_names'");
86473
86474#ifdef FREECIV_JSON_CONNECTION
86475 field_addr.name = "pretty_names";
86476#endif /* FREECIV_JSON_CONNECTION */
86477
86478 {
86479 int i;
86480
86481 if (real_packet->values_num > 64) {
86482 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
86483 }
86484
86485#ifdef FREECIV_JSON_CONNECTION
86486 /* Enter array. */
86487 field_addr.sub_location = plocation_elem_new(0);
86488#endif /* FREECIV_JSON_CONNECTION */
86489
86490 for (i = 0; i < real_packet->values_num; i++) {
86491#ifdef FREECIV_JSON_CONNECTION
86492 /* Next array element */
86493 field_addr.sub_location->number = i;
86494#endif /* FREECIV_JSON_CONNECTION */
86495
86496 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
86497 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
86498 }
86499 }
86500
86501#ifdef FREECIV_JSON_CONNECTION
86502 /* Exit array. */
86503 FC_FREE(field_addr.sub_location);
86504#endif /* FREECIV_JSON_CONNECTION */
86505 }
86506 }
86507
86508 if (nullptr == old) {
86509 old = fc_malloc(sizeof(*old));
86511 *old = *real_packet;
86513 } else {
86514 *old = *real_packet;
86515 }
86516
86517#else /* FREECIV_DELTA_PROTOCOL */
86518#ifdef FREECIV_JSON_CONNECTION
86519 field_addr.name = "is_visible";
86520#endif /* FREECIV_JSON_CONNECTION */
86521
86522 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
86523 RECEIVE_PACKET_FIELD_ERROR(is_visible);
86524 }
86525
86526#ifdef FREECIV_JSON_CONNECTION
86527 field_addr.name = "is_changeable";
86528#endif /* FREECIV_JSON_CONNECTION */
86529
86530 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
86531 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
86532 }
86533
86534#ifdef FREECIV_JSON_CONNECTION
86535 field_addr.name = "initial_setting";
86536#endif /* FREECIV_JSON_CONNECTION */
86537
86538 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
86539 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
86540 }
86541
86542#ifdef FREECIV_JSON_CONNECTION
86543 field_addr.name = "setdef";
86544#endif /* FREECIV_JSON_CONNECTION */
86545
86546 {
86547 int readin;
86548
86549 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
86551 }
86552 real_packet->setdef = readin;
86553 }
86554
86555#ifdef FREECIV_JSON_CONNECTION
86556 field_addr.name = "val";
86557#endif /* FREECIV_JSON_CONNECTION */
86558
86559 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
86561 }
86562
86563#ifdef FREECIV_JSON_CONNECTION
86564 field_addr.name = "default_val";
86565#endif /* FREECIV_JSON_CONNECTION */
86566
86567 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
86568 RECEIVE_PACKET_FIELD_ERROR(default_val);
86569 }
86570
86571#ifdef FREECIV_JSON_CONNECTION
86572 field_addr.name = "values_num";
86573#endif /* FREECIV_JSON_CONNECTION */
86574
86575 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
86576 RECEIVE_PACKET_FIELD_ERROR(values_num);
86577 }
86578
86579#ifdef FREECIV_JSON_CONNECTION
86580 field_addr.name = "support_names";
86581#endif /* FREECIV_JSON_CONNECTION */
86582
86583 {
86584 int i;
86585
86586 if (real_packet->values_num > 64) {
86587 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
86588 }
86589
86590#ifdef FREECIV_JSON_CONNECTION
86591 /* Enter array. */
86592 field_addr.sub_location = plocation_elem_new(0);
86593#endif /* FREECIV_JSON_CONNECTION */
86594
86595 for (i = 0; i < real_packet->values_num; i++) {
86596#ifdef FREECIV_JSON_CONNECTION
86597 /* Next array element */
86598 field_addr.sub_location->number = i;
86599#endif /* FREECIV_JSON_CONNECTION */
86600
86601 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
86602 RECEIVE_PACKET_FIELD_ERROR(support_names);
86603 }
86604 }
86605
86606#ifdef FREECIV_JSON_CONNECTION
86607 /* Exit array. */
86608 FC_FREE(field_addr.sub_location);
86609#endif /* FREECIV_JSON_CONNECTION */
86610 }
86611
86612#ifdef FREECIV_JSON_CONNECTION
86613 field_addr.name = "pretty_names";
86614#endif /* FREECIV_JSON_CONNECTION */
86615
86616 {
86617 int i;
86618
86619 if (real_packet->values_num > 64) {
86620 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
86621 }
86622
86623#ifdef FREECIV_JSON_CONNECTION
86624 /* Enter array. */
86625 field_addr.sub_location = plocation_elem_new(0);
86626#endif /* FREECIV_JSON_CONNECTION */
86627
86628 for (i = 0; i < real_packet->values_num; i++) {
86629#ifdef FREECIV_JSON_CONNECTION
86630 /* Next array element */
86631 field_addr.sub_location->number = i;
86632#endif /* FREECIV_JSON_CONNECTION */
86633
86634 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
86635 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
86636 }
86637 }
86638
86639#ifdef FREECIV_JSON_CONNECTION
86640 /* Exit array. */
86641 FC_FREE(field_addr.sub_location);
86642#endif /* FREECIV_JSON_CONNECTION */
86643 }
86644#endif /* FREECIV_DELTA_PROTOCOL */
86645
86647#undef FREE_PACKET_STRUCT
86648}
86649
86651{
86652 const struct packet_server_setting_enum *real_packet = packet;
86653 int e;
86655
86656 log_packet_detailed("packet_server_setting_enum_100: sending info about (%d)",
86657 real_packet->id);
86658
86659#ifdef FREECIV_DELTA_PROTOCOL
86662 bool differ;
86663 int different = 0;
86664 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_ENUM;
86665
86666 if (nullptr == *hash) {
86668 nullptr, nullptr, nullptr, destroy_packet_server_setting_enum);
86669 }
86670 BV_CLR_ALL(fields);
86671
86672 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86673 old = fc_malloc(sizeof(*old));
86674 /* temporary bitcopy just to insert correctly */
86675 *old = *real_packet;
86678 different = 1; /* Force to send. */
86679 }
86680
86681 differ = (old->is_visible != real_packet->is_visible);
86682 if (differ) {
86683 different++;
86684 }
86685 /* folded into head */
86686 if (real_packet->is_visible) {
86687 BV_SET(fields, 0);
86688 }
86689
86690 differ = (old->is_changeable != real_packet->is_changeable);
86691 if (differ) {
86692 different++;
86693 }
86694 /* folded into head */
86695 if (real_packet->is_changeable) {
86696 BV_SET(fields, 1);
86697 }
86698
86699 differ = (old->initial_setting != real_packet->initial_setting);
86700 if (differ) {
86701 different++;
86702 }
86703 /* folded into head */
86704 if (real_packet->initial_setting) {
86705 BV_SET(fields, 2);
86706 }
86707
86708 differ = (old->setdef != real_packet->setdef);
86709 if (differ) {
86710 different++;
86711 BV_SET(fields, 3);
86712 }
86713
86714 differ = (old->val != real_packet->val);
86715 if (differ) {
86716 different++;
86717 BV_SET(fields, 4);
86718 }
86719
86720 differ = (old->default_val != real_packet->default_val);
86721 if (differ) {
86722 different++;
86723 BV_SET(fields, 5);
86724 }
86725
86726 differ = (old->values_num != real_packet->values_num);
86727 if (differ) {
86728 different++;
86729 BV_SET(fields, 6);
86730 }
86731
86732 differ = (old->values_num != real_packet->values_num);
86733 if (!differ) {
86734 int i;
86735
86736 for (i = 0; i < old->values_num; i++) {
86737 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
86738 if (differ) {
86739 break;
86740 }
86741 }
86742 }
86743 if (differ) {
86744 different++;
86745 BV_SET(fields, 7);
86746 }
86747
86748 differ = (old->values_num != real_packet->values_num);
86749 if (!differ) {
86750 int i;
86751
86752 for (i = 0; i < old->values_num; i++) {
86753 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
86754 if (differ) {
86755 break;
86756 }
86757 }
86758 }
86759 if (differ) {
86760 different++;
86761 BV_SET(fields, 8);
86762 }
86763
86764 if (different == 0) {
86765 log_packet_detailed(" no change -> discard");
86767 }
86768#endif /* FREECIV_DELTA_PROTOCOL */
86769
86770#ifdef FREECIV_JSON_CONNECTION
86771 struct plocation field_addr;
86772 {
86773 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
86776 }
86777#endif /* FREECIV_JSON_CONNECTION */
86778
86779#ifdef FREECIV_JSON_CONNECTION
86780 field_addr.name = "id";
86781#endif /* FREECIV_JSON_CONNECTION */
86782 e = 0;
86783
86784 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
86785
86786 if (e) {
86787 log_packet_detailed("'id' field error detected");
86788 }
86789
86790#ifdef FREECIV_DELTA_PROTOCOL
86791#ifdef FREECIV_JSON_CONNECTION
86792 field_addr.name = "fields";
86793#endif /* FREECIV_JSON_CONNECTION */
86794 e = 0;
86795 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86796 if (e) {
86797 log_packet_detailed("fields bitvector error detected");
86798 }
86799
86800 /* field 0 is folded into the header */
86801
86802 /* field 1 is folded into the header */
86803
86804 /* field 2 is folded into the header */
86805
86806 if (BV_ISSET(fields, 3)) {
86807 log_packet_detailed(" field 'setdef' has changed");
86808
86809#ifdef FREECIV_JSON_CONNECTION
86810 field_addr.name = "setdef";
86811#endif /* FREECIV_JSON_CONNECTION */
86812 e = 0;
86813
86814 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86815
86816 if (e) {
86817 log_packet_detailed("'setdef' field error detected");
86818 }
86819 }
86820
86821 if (BV_ISSET(fields, 4)) {
86822 log_packet_detailed(" field 'val' has changed");
86823
86824#ifdef FREECIV_JSON_CONNECTION
86825 field_addr.name = "val";
86826#endif /* FREECIV_JSON_CONNECTION */
86827 e = 0;
86828
86829 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
86830
86831 if (e) {
86832 log_packet_detailed("'val' field error detected");
86833 }
86834 }
86835
86836 if (BV_ISSET(fields, 5)) {
86837 log_packet_detailed(" field 'default_val' has changed");
86838
86839#ifdef FREECIV_JSON_CONNECTION
86840 field_addr.name = "default_val";
86841#endif /* FREECIV_JSON_CONNECTION */
86842 e = 0;
86843
86844 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
86845
86846 if (e) {
86847 log_packet_detailed("'default_val' field error detected");
86848 }
86849 }
86850
86851 if (BV_ISSET(fields, 6)) {
86852 log_packet_detailed(" field 'values_num' has changed");
86853
86854#ifdef FREECIV_JSON_CONNECTION
86855 field_addr.name = "values_num";
86856#endif /* FREECIV_JSON_CONNECTION */
86857 e = 0;
86858
86859 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
86860
86861 if (e) {
86862 log_packet_detailed("'values_num' field error detected");
86863 }
86864 }
86865
86866 if (BV_ISSET(fields, 7)) {
86867 log_packet_detailed(" field 'support_names' has changed");
86868
86869#ifdef FREECIV_JSON_CONNECTION
86870 field_addr.name = "support_names";
86871#endif /* FREECIV_JSON_CONNECTION */
86872 e = 0;
86873
86874 {
86875 int i;
86876
86877#ifdef FREECIV_JSON_CONNECTION
86878 /* Create the array. */
86879 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86880
86881 /* Enter array. */
86882 field_addr.sub_location = plocation_elem_new(0);
86883#endif /* FREECIV_JSON_CONNECTION */
86884
86885 for (i = 0; i < real_packet->values_num; i++) {
86886#ifdef FREECIV_JSON_CONNECTION
86887 /* Next array element. */
86888 field_addr.sub_location->number = i;
86889#endif /* FREECIV_JSON_CONNECTION */
86890
86891 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
86892 }
86893
86894#ifdef FREECIV_JSON_CONNECTION
86895 /* Exit array. */
86896 FC_FREE(field_addr.sub_location);
86897#endif /* FREECIV_JSON_CONNECTION */
86898 }
86899
86900 if (e) {
86901 log_packet_detailed("'support_names' field error detected");
86902 }
86903 }
86904
86905 if (BV_ISSET(fields, 8)) {
86906 log_packet_detailed(" field 'pretty_names' has changed");
86907
86908#ifdef FREECIV_JSON_CONNECTION
86909 field_addr.name = "pretty_names";
86910#endif /* FREECIV_JSON_CONNECTION */
86911 e = 0;
86912
86913 {
86914 int i;
86915
86916#ifdef FREECIV_JSON_CONNECTION
86917 /* Create the array. */
86918 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
86919
86920 /* Enter array. */
86921 field_addr.sub_location = plocation_elem_new(0);
86922#endif /* FREECIV_JSON_CONNECTION */
86923
86924 for (i = 0; i < real_packet->values_num; i++) {
86925#ifdef FREECIV_JSON_CONNECTION
86926 /* Next array element. */
86927 field_addr.sub_location->number = i;
86928#endif /* FREECIV_JSON_CONNECTION */
86929
86930 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
86931 }
86932
86933#ifdef FREECIV_JSON_CONNECTION
86934 /* Exit array. */
86935 FC_FREE(field_addr.sub_location);
86936#endif /* FREECIV_JSON_CONNECTION */
86937 }
86938
86939 if (e) {
86940 log_packet_detailed("'pretty_names' field error detected");
86941 }
86942 }
86943
86944 *old = *real_packet;
86945
86946#else /* FREECIV_DELTA_PROTOCOL */
86947#ifdef FREECIV_JSON_CONNECTION
86948 field_addr.name = "is_visible";
86949#endif /* FREECIV_JSON_CONNECTION */
86950 e = 0;
86951
86952 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
86953
86954 if (e) {
86955 log_packet_detailed("'is_visible' field error detected");
86956 }
86957
86958#ifdef FREECIV_JSON_CONNECTION
86959 field_addr.name = "is_changeable";
86960#endif /* FREECIV_JSON_CONNECTION */
86961 e = 0;
86962
86963 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
86964
86965 if (e) {
86966 log_packet_detailed("'is_changeable' field error detected");
86967 }
86968
86969#ifdef FREECIV_JSON_CONNECTION
86970 field_addr.name = "initial_setting";
86971#endif /* FREECIV_JSON_CONNECTION */
86972 e = 0;
86973
86974 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
86975
86976 if (e) {
86977 log_packet_detailed("'initial_setting' field error detected");
86978 }
86979
86980#ifdef FREECIV_JSON_CONNECTION
86981 field_addr.name = "setdef";
86982#endif /* FREECIV_JSON_CONNECTION */
86983 e = 0;
86984
86985 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
86986
86987 if (e) {
86988 log_packet_detailed("'setdef' field error detected");
86989 }
86990
86991#ifdef FREECIV_JSON_CONNECTION
86992 field_addr.name = "val";
86993#endif /* FREECIV_JSON_CONNECTION */
86994 e = 0;
86995
86996 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
86997
86998 if (e) {
86999 log_packet_detailed("'val' field error detected");
87000 }
87001
87002#ifdef FREECIV_JSON_CONNECTION
87003 field_addr.name = "default_val";
87004#endif /* FREECIV_JSON_CONNECTION */
87005 e = 0;
87006
87007 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
87008
87009 if (e) {
87010 log_packet_detailed("'default_val' field error detected");
87011 }
87012
87013#ifdef FREECIV_JSON_CONNECTION
87014 field_addr.name = "values_num";
87015#endif /* FREECIV_JSON_CONNECTION */
87016 e = 0;
87017
87018 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
87019
87020 if (e) {
87021 log_packet_detailed("'values_num' field error detected");
87022 }
87023
87024#ifdef FREECIV_JSON_CONNECTION
87025 field_addr.name = "support_names";
87026#endif /* FREECIV_JSON_CONNECTION */
87027 e = 0;
87028
87029 {
87030 int i;
87031
87032#ifdef FREECIV_JSON_CONNECTION
87033 /* Create the array. */
87034 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87035
87036 /* Enter array. */
87037 field_addr.sub_location = plocation_elem_new(0);
87038#endif /* FREECIV_JSON_CONNECTION */
87039
87040 for (i = 0; i < real_packet->values_num; i++) {
87041#ifdef FREECIV_JSON_CONNECTION
87042 /* Next array element. */
87043 field_addr.sub_location->number = i;
87044#endif /* FREECIV_JSON_CONNECTION */
87045
87046 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87047 }
87048
87049#ifdef FREECIV_JSON_CONNECTION
87050 /* Exit array. */
87051 FC_FREE(field_addr.sub_location);
87052#endif /* FREECIV_JSON_CONNECTION */
87053 }
87054
87055 if (e) {
87056 log_packet_detailed("'support_names' field error detected");
87057 }
87058
87059#ifdef FREECIV_JSON_CONNECTION
87060 field_addr.name = "pretty_names";
87061#endif /* FREECIV_JSON_CONNECTION */
87062 e = 0;
87063
87064 {
87065 int i;
87066
87067#ifdef FREECIV_JSON_CONNECTION
87068 /* Create the array. */
87069 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
87070
87071 /* Enter array. */
87072 field_addr.sub_location = plocation_elem_new(0);
87073#endif /* FREECIV_JSON_CONNECTION */
87074
87075 for (i = 0; i < real_packet->values_num; i++) {
87076#ifdef FREECIV_JSON_CONNECTION
87077 /* Next array element. */
87078 field_addr.sub_location->number = i;
87079#endif /* FREECIV_JSON_CONNECTION */
87080
87081 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87082 }
87083
87084#ifdef FREECIV_JSON_CONNECTION
87085 /* Exit array. */
87086 FC_FREE(field_addr.sub_location);
87087#endif /* FREECIV_JSON_CONNECTION */
87088 }
87089
87090 if (e) {
87091 log_packet_detailed("'pretty_names' field error detected");
87092 }
87093#endif /* FREECIV_DELTA_PROTOCOL */
87094
87096}
87097
87099{
87100 if (!pc->used) {
87101 log_error("WARNING: trying to send data to the closed connection %s",
87103 return -1;
87104 }
87105 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet != nullptr, -1,
87106 "Handler for PACKET_SERVER_SETTING_ENUM not installed");
87107 return pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet(pc, packet);
87108}
87109
87111{
87112 memset(packet, 0, sizeof(*packet));
87113}
87114
87115#define free_packet_server_setting_bitwise(_packet) (void) 0
87116#define destroy_packet_server_setting_bitwise free
87117
87118#ifdef FREECIV_DELTA_PROTOCOL
87120{
87121 const struct packet_server_setting_bitwise *key = (const struct packet_server_setting_bitwise *) vkey;
87122 genhash_val_t result = 0;
87123
87124 result += key->id;
87125
87126 result &= 0xFFFFFFFF;
87127 return result;
87128}
87129
87130static bool cmp_packet_server_setting_bitwise_100(const void *vkey1, const void *vkey2)
87131{
87134 bool differ;
87135
87136 differ = (old->id != real_packet->id);
87137
87138 return !differ;
87139}
87141#endif /* FREECIV_DELTA_PROTOCOL */
87142
87144{
87145#define FREE_PACKET_STRUCT(_packet) free_packet_server_setting_bitwise(_packet)
87147
87148#ifdef FREECIV_JSON_CONNECTION
87149 struct plocation field_addr;
87150 {
87151 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87154 }
87155#endif /* FREECIV_JSON_CONNECTION */
87156
87157#ifdef FREECIV_JSON_CONNECTION
87158 field_addr.name = "id";
87159#endif /* FREECIV_JSON_CONNECTION */
87160
87161 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87163 }
87164
87165 log_packet_detailed("packet_server_setting_bitwise_100: got info about (%d)",
87166 real_packet->id);
87167
87168#ifdef FREECIV_DELTA_PROTOCOL
87171 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BITWISE;
87172
87173 if (nullptr == *hash) {
87175 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
87176 }
87177
87178 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87179 *real_packet = *old;
87180 } else {
87181 /* packet is already initialized empty */
87182 log_packet_detailed(" no old info");
87183 }
87184
87185#ifdef FREECIV_JSON_CONNECTION
87186 field_addr.name = "fields";
87187#endif /* FREECIV_JSON_CONNECTION */
87188 DIO_BV_GET(&din, &field_addr, fields);
87189
87190 real_packet->is_visible = BV_ISSET(fields, 0);
87191
87192 real_packet->is_changeable = BV_ISSET(fields, 1);
87193
87194 real_packet->initial_setting = BV_ISSET(fields, 2);
87195
87196 if (BV_ISSET(fields, 3)) {
87197 log_packet_detailed(" got field 'setdef'");
87198
87199#ifdef FREECIV_JSON_CONNECTION
87200 field_addr.name = "setdef";
87201#endif /* FREECIV_JSON_CONNECTION */
87202
87203 {
87204 int readin;
87205
87206 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87208 }
87209 real_packet->setdef = readin;
87210 }
87211 }
87212
87213 if (BV_ISSET(fields, 4)) {
87214 log_packet_detailed(" got field 'val'");
87215
87216#ifdef FREECIV_JSON_CONNECTION
87217 field_addr.name = "val";
87218#endif /* FREECIV_JSON_CONNECTION */
87219
87220 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
87222 }
87223 }
87224
87225 if (BV_ISSET(fields, 5)) {
87226 log_packet_detailed(" got field 'default_val'");
87227
87228#ifdef FREECIV_JSON_CONNECTION
87229 field_addr.name = "default_val";
87230#endif /* FREECIV_JSON_CONNECTION */
87231
87232 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
87233 RECEIVE_PACKET_FIELD_ERROR(default_val);
87234 }
87235 }
87236
87237 if (BV_ISSET(fields, 6)) {
87238 log_packet_detailed(" got field 'bits_num'");
87239
87240#ifdef FREECIV_JSON_CONNECTION
87241 field_addr.name = "bits_num";
87242#endif /* FREECIV_JSON_CONNECTION */
87243
87244 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
87246 }
87247 }
87248
87249 if (BV_ISSET(fields, 7)) {
87250 log_packet_detailed(" got field 'support_names'");
87251
87252#ifdef FREECIV_JSON_CONNECTION
87253 field_addr.name = "support_names";
87254#endif /* FREECIV_JSON_CONNECTION */
87255
87256 {
87257 int i;
87258
87259 if (real_packet->bits_num > 64) {
87260 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87261 }
87262
87263#ifdef FREECIV_JSON_CONNECTION
87264 /* Enter array. */
87265 field_addr.sub_location = plocation_elem_new(0);
87266#endif /* FREECIV_JSON_CONNECTION */
87267
87268 for (i = 0; i < real_packet->bits_num; i++) {
87269#ifdef FREECIV_JSON_CONNECTION
87270 /* Next array element */
87271 field_addr.sub_location->number = i;
87272#endif /* FREECIV_JSON_CONNECTION */
87273
87274 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87275 RECEIVE_PACKET_FIELD_ERROR(support_names);
87276 }
87277 }
87278
87279#ifdef FREECIV_JSON_CONNECTION
87280 /* Exit array. */
87281 FC_FREE(field_addr.sub_location);
87282#endif /* FREECIV_JSON_CONNECTION */
87283 }
87284 }
87285
87286 if (BV_ISSET(fields, 8)) {
87287 log_packet_detailed(" got field 'pretty_names'");
87288
87289#ifdef FREECIV_JSON_CONNECTION
87290 field_addr.name = "pretty_names";
87291#endif /* FREECIV_JSON_CONNECTION */
87292
87293 {
87294 int i;
87295
87296 if (real_packet->bits_num > 64) {
87297 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87298 }
87299
87300#ifdef FREECIV_JSON_CONNECTION
87301 /* Enter array. */
87302 field_addr.sub_location = plocation_elem_new(0);
87303#endif /* FREECIV_JSON_CONNECTION */
87304
87305 for (i = 0; i < real_packet->bits_num; i++) {
87306#ifdef FREECIV_JSON_CONNECTION
87307 /* Next array element */
87308 field_addr.sub_location->number = i;
87309#endif /* FREECIV_JSON_CONNECTION */
87310
87311 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87312 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87313 }
87314 }
87315
87316#ifdef FREECIV_JSON_CONNECTION
87317 /* Exit array. */
87318 FC_FREE(field_addr.sub_location);
87319#endif /* FREECIV_JSON_CONNECTION */
87320 }
87321 }
87322
87323 if (nullptr == old) {
87324 old = fc_malloc(sizeof(*old));
87326 *old = *real_packet;
87328 } else {
87329 *old = *real_packet;
87330 }
87331
87332#else /* FREECIV_DELTA_PROTOCOL */
87333#ifdef FREECIV_JSON_CONNECTION
87334 field_addr.name = "is_visible";
87335#endif /* FREECIV_JSON_CONNECTION */
87336
87337 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
87338 RECEIVE_PACKET_FIELD_ERROR(is_visible);
87339 }
87340
87341#ifdef FREECIV_JSON_CONNECTION
87342 field_addr.name = "is_changeable";
87343#endif /* FREECIV_JSON_CONNECTION */
87344
87345 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
87346 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
87347 }
87348
87349#ifdef FREECIV_JSON_CONNECTION
87350 field_addr.name = "initial_setting";
87351#endif /* FREECIV_JSON_CONNECTION */
87352
87353 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
87354 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
87355 }
87356
87357#ifdef FREECIV_JSON_CONNECTION
87358 field_addr.name = "setdef";
87359#endif /* FREECIV_JSON_CONNECTION */
87360
87361 {
87362 int readin;
87363
87364 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
87366 }
87367 real_packet->setdef = readin;
87368 }
87369
87370#ifdef FREECIV_JSON_CONNECTION
87371 field_addr.name = "val";
87372#endif /* FREECIV_JSON_CONNECTION */
87373
87374 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
87376 }
87377
87378#ifdef FREECIV_JSON_CONNECTION
87379 field_addr.name = "default_val";
87380#endif /* FREECIV_JSON_CONNECTION */
87381
87382 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
87383 RECEIVE_PACKET_FIELD_ERROR(default_val);
87384 }
87385
87386#ifdef FREECIV_JSON_CONNECTION
87387 field_addr.name = "bits_num";
87388#endif /* FREECIV_JSON_CONNECTION */
87389
87390 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
87392 }
87393
87394#ifdef FREECIV_JSON_CONNECTION
87395 field_addr.name = "support_names";
87396#endif /* FREECIV_JSON_CONNECTION */
87397
87398 {
87399 int i;
87400
87401 if (real_packet->bits_num > 64) {
87402 RECEIVE_PACKET_FIELD_ERROR(support_names, ": array truncated");
87403 }
87404
87405#ifdef FREECIV_JSON_CONNECTION
87406 /* Enter array. */
87407 field_addr.sub_location = plocation_elem_new(0);
87408#endif /* FREECIV_JSON_CONNECTION */
87409
87410 for (i = 0; i < real_packet->bits_num; i++) {
87411#ifdef FREECIV_JSON_CONNECTION
87412 /* Next array element */
87413 field_addr.sub_location->number = i;
87414#endif /* FREECIV_JSON_CONNECTION */
87415
87416 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
87417 RECEIVE_PACKET_FIELD_ERROR(support_names);
87418 }
87419 }
87420
87421#ifdef FREECIV_JSON_CONNECTION
87422 /* Exit array. */
87423 FC_FREE(field_addr.sub_location);
87424#endif /* FREECIV_JSON_CONNECTION */
87425 }
87426
87427#ifdef FREECIV_JSON_CONNECTION
87428 field_addr.name = "pretty_names";
87429#endif /* FREECIV_JSON_CONNECTION */
87430
87431 {
87432 int i;
87433
87434 if (real_packet->bits_num > 64) {
87435 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": array truncated");
87436 }
87437
87438#ifdef FREECIV_JSON_CONNECTION
87439 /* Enter array. */
87440 field_addr.sub_location = plocation_elem_new(0);
87441#endif /* FREECIV_JSON_CONNECTION */
87442
87443 for (i = 0; i < real_packet->bits_num; i++) {
87444#ifdef FREECIV_JSON_CONNECTION
87445 /* Next array element */
87446 field_addr.sub_location->number = i;
87447#endif /* FREECIV_JSON_CONNECTION */
87448
87449 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
87450 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
87451 }
87452 }
87453
87454#ifdef FREECIV_JSON_CONNECTION
87455 /* Exit array. */
87456 FC_FREE(field_addr.sub_location);
87457#endif /* FREECIV_JSON_CONNECTION */
87458 }
87459#endif /* FREECIV_DELTA_PROTOCOL */
87460
87462#undef FREE_PACKET_STRUCT
87463}
87464
87466{
87467 const struct packet_server_setting_bitwise *real_packet = packet;
87468 int e;
87470
87471 log_packet_detailed("packet_server_setting_bitwise_100: sending info about (%d)",
87472 real_packet->id);
87473
87474#ifdef FREECIV_DELTA_PROTOCOL
87477 bool differ;
87478 int different = 0;
87479 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BITWISE;
87480
87481 if (nullptr == *hash) {
87483 nullptr, nullptr, nullptr, destroy_packet_server_setting_bitwise);
87484 }
87485 BV_CLR_ALL(fields);
87486
87487 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87488 old = fc_malloc(sizeof(*old));
87489 /* temporary bitcopy just to insert correctly */
87490 *old = *real_packet;
87493 different = 1; /* Force to send. */
87494 }
87495
87496 differ = (old->is_visible != real_packet->is_visible);
87497 if (differ) {
87498 different++;
87499 }
87500 /* folded into head */
87501 if (real_packet->is_visible) {
87502 BV_SET(fields, 0);
87503 }
87504
87505 differ = (old->is_changeable != real_packet->is_changeable);
87506 if (differ) {
87507 different++;
87508 }
87509 /* folded into head */
87510 if (real_packet->is_changeable) {
87511 BV_SET(fields, 1);
87512 }
87513
87514 differ = (old->initial_setting != real_packet->initial_setting);
87515 if (differ) {
87516 different++;
87517 }
87518 /* folded into head */
87519 if (real_packet->initial_setting) {
87520 BV_SET(fields, 2);
87521 }
87522
87523 differ = (old->setdef != real_packet->setdef);
87524 if (differ) {
87525 different++;
87526 BV_SET(fields, 3);
87527 }
87528
87529 differ = (old->val != real_packet->val);
87530 if (differ) {
87531 different++;
87532 BV_SET(fields, 4);
87533 }
87534
87535 differ = (old->default_val != real_packet->default_val);
87536 if (differ) {
87537 different++;
87538 BV_SET(fields, 5);
87539 }
87540
87541 differ = (old->bits_num != real_packet->bits_num);
87542 if (differ) {
87543 different++;
87544 BV_SET(fields, 6);
87545 }
87546
87547 differ = (old->bits_num != real_packet->bits_num);
87548 if (!differ) {
87549 int i;
87550
87551 for (i = 0; i < old->bits_num; i++) {
87552 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
87553 if (differ) {
87554 break;
87555 }
87556 }
87557 }
87558 if (differ) {
87559 different++;
87560 BV_SET(fields, 7);
87561 }
87562
87563 differ = (old->bits_num != real_packet->bits_num);
87564 if (!differ) {
87565 int i;
87566
87567 for (i = 0; i < old->bits_num; i++) {
87568 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
87569 if (differ) {
87570 break;
87571 }
87572 }
87573 }
87574 if (differ) {
87575 different++;
87576 BV_SET(fields, 8);
87577 }
87578
87579 if (different == 0) {
87580 log_packet_detailed(" no change -> discard");
87582 }
87583#endif /* FREECIV_DELTA_PROTOCOL */
87584
87585#ifdef FREECIV_JSON_CONNECTION
87586 struct plocation field_addr;
87587 {
87588 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87591 }
87592#endif /* FREECIV_JSON_CONNECTION */
87593
87594#ifdef FREECIV_JSON_CONNECTION
87595 field_addr.name = "id";
87596#endif /* FREECIV_JSON_CONNECTION */
87597 e = 0;
87598
87599 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
87600
87601 if (e) {
87602 log_packet_detailed("'id' field error detected");
87603 }
87604
87605#ifdef FREECIV_DELTA_PROTOCOL
87606#ifdef FREECIV_JSON_CONNECTION
87607 field_addr.name = "fields";
87608#endif /* FREECIV_JSON_CONNECTION */
87609 e = 0;
87610 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87611 if (e) {
87612 log_packet_detailed("fields bitvector error detected");
87613 }
87614
87615 /* field 0 is folded into the header */
87616
87617 /* field 1 is folded into the header */
87618
87619 /* field 2 is folded into the header */
87620
87621 if (BV_ISSET(fields, 3)) {
87622 log_packet_detailed(" field 'setdef' has changed");
87623
87624#ifdef FREECIV_JSON_CONNECTION
87625 field_addr.name = "setdef";
87626#endif /* FREECIV_JSON_CONNECTION */
87627 e = 0;
87628
87629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87630
87631 if (e) {
87632 log_packet_detailed("'setdef' field error detected");
87633 }
87634 }
87635
87636 if (BV_ISSET(fields, 4)) {
87637 log_packet_detailed(" field 'val' has changed");
87638
87639#ifdef FREECIV_JSON_CONNECTION
87640 field_addr.name = "val";
87641#endif /* FREECIV_JSON_CONNECTION */
87642 e = 0;
87643
87644 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
87645
87646 if (e) {
87647 log_packet_detailed("'val' field error detected");
87648 }
87649 }
87650
87651 if (BV_ISSET(fields, 5)) {
87652 log_packet_detailed(" field 'default_val' has changed");
87653
87654#ifdef FREECIV_JSON_CONNECTION
87655 field_addr.name = "default_val";
87656#endif /* FREECIV_JSON_CONNECTION */
87657 e = 0;
87658
87659 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
87660
87661 if (e) {
87662 log_packet_detailed("'default_val' field error detected");
87663 }
87664 }
87665
87666 if (BV_ISSET(fields, 6)) {
87667 log_packet_detailed(" field 'bits_num' has changed");
87668
87669#ifdef FREECIV_JSON_CONNECTION
87670 field_addr.name = "bits_num";
87671#endif /* FREECIV_JSON_CONNECTION */
87672 e = 0;
87673
87674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
87675
87676 if (e) {
87677 log_packet_detailed("'bits_num' field error detected");
87678 }
87679 }
87680
87681 if (BV_ISSET(fields, 7)) {
87682 log_packet_detailed(" field 'support_names' has changed");
87683
87684#ifdef FREECIV_JSON_CONNECTION
87685 field_addr.name = "support_names";
87686#endif /* FREECIV_JSON_CONNECTION */
87687 e = 0;
87688
87689 {
87690 int i;
87691
87692#ifdef FREECIV_JSON_CONNECTION
87693 /* Create the array. */
87694 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87695
87696 /* Enter array. */
87697 field_addr.sub_location = plocation_elem_new(0);
87698#endif /* FREECIV_JSON_CONNECTION */
87699
87700 for (i = 0; i < real_packet->bits_num; i++) {
87701#ifdef FREECIV_JSON_CONNECTION
87702 /* Next array element. */
87703 field_addr.sub_location->number = i;
87704#endif /* FREECIV_JSON_CONNECTION */
87705
87706 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87707 }
87708
87709#ifdef FREECIV_JSON_CONNECTION
87710 /* Exit array. */
87711 FC_FREE(field_addr.sub_location);
87712#endif /* FREECIV_JSON_CONNECTION */
87713 }
87714
87715 if (e) {
87716 log_packet_detailed("'support_names' field error detected");
87717 }
87718 }
87719
87720 if (BV_ISSET(fields, 8)) {
87721 log_packet_detailed(" field 'pretty_names' has changed");
87722
87723#ifdef FREECIV_JSON_CONNECTION
87724 field_addr.name = "pretty_names";
87725#endif /* FREECIV_JSON_CONNECTION */
87726 e = 0;
87727
87728 {
87729 int i;
87730
87731#ifdef FREECIV_JSON_CONNECTION
87732 /* Create the array. */
87733 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87734
87735 /* Enter array. */
87736 field_addr.sub_location = plocation_elem_new(0);
87737#endif /* FREECIV_JSON_CONNECTION */
87738
87739 for (i = 0; i < real_packet->bits_num; i++) {
87740#ifdef FREECIV_JSON_CONNECTION
87741 /* Next array element. */
87742 field_addr.sub_location->number = i;
87743#endif /* FREECIV_JSON_CONNECTION */
87744
87745 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87746 }
87747
87748#ifdef FREECIV_JSON_CONNECTION
87749 /* Exit array. */
87750 FC_FREE(field_addr.sub_location);
87751#endif /* FREECIV_JSON_CONNECTION */
87752 }
87753
87754 if (e) {
87755 log_packet_detailed("'pretty_names' field error detected");
87756 }
87757 }
87758
87759 *old = *real_packet;
87760
87761#else /* FREECIV_DELTA_PROTOCOL */
87762#ifdef FREECIV_JSON_CONNECTION
87763 field_addr.name = "is_visible";
87764#endif /* FREECIV_JSON_CONNECTION */
87765 e = 0;
87766
87767 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
87768
87769 if (e) {
87770 log_packet_detailed("'is_visible' field error detected");
87771 }
87772
87773#ifdef FREECIV_JSON_CONNECTION
87774 field_addr.name = "is_changeable";
87775#endif /* FREECIV_JSON_CONNECTION */
87776 e = 0;
87777
87778 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
87779
87780 if (e) {
87781 log_packet_detailed("'is_changeable' field error detected");
87782 }
87783
87784#ifdef FREECIV_JSON_CONNECTION
87785 field_addr.name = "initial_setting";
87786#endif /* FREECIV_JSON_CONNECTION */
87787 e = 0;
87788
87789 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
87790
87791 if (e) {
87792 log_packet_detailed("'initial_setting' field error detected");
87793 }
87794
87795#ifdef FREECIV_JSON_CONNECTION
87796 field_addr.name = "setdef";
87797#endif /* FREECIV_JSON_CONNECTION */
87798 e = 0;
87799
87800 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
87801
87802 if (e) {
87803 log_packet_detailed("'setdef' field error detected");
87804 }
87805
87806#ifdef FREECIV_JSON_CONNECTION
87807 field_addr.name = "val";
87808#endif /* FREECIV_JSON_CONNECTION */
87809 e = 0;
87810
87811 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
87812
87813 if (e) {
87814 log_packet_detailed("'val' field error detected");
87815 }
87816
87817#ifdef FREECIV_JSON_CONNECTION
87818 field_addr.name = "default_val";
87819#endif /* FREECIV_JSON_CONNECTION */
87820 e = 0;
87821
87822 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
87823
87824 if (e) {
87825 log_packet_detailed("'default_val' field error detected");
87826 }
87827
87828#ifdef FREECIV_JSON_CONNECTION
87829 field_addr.name = "bits_num";
87830#endif /* FREECIV_JSON_CONNECTION */
87831 e = 0;
87832
87833 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
87834
87835 if (e) {
87836 log_packet_detailed("'bits_num' field error detected");
87837 }
87838
87839#ifdef FREECIV_JSON_CONNECTION
87840 field_addr.name = "support_names";
87841#endif /* FREECIV_JSON_CONNECTION */
87842 e = 0;
87843
87844 {
87845 int i;
87846
87847#ifdef FREECIV_JSON_CONNECTION
87848 /* Create the array. */
87849 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87850
87851 /* Enter array. */
87852 field_addr.sub_location = plocation_elem_new(0);
87853#endif /* FREECIV_JSON_CONNECTION */
87854
87855 for (i = 0; i < real_packet->bits_num; i++) {
87856#ifdef FREECIV_JSON_CONNECTION
87857 /* Next array element. */
87858 field_addr.sub_location->number = i;
87859#endif /* FREECIV_JSON_CONNECTION */
87860
87861 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
87862 }
87863
87864#ifdef FREECIV_JSON_CONNECTION
87865 /* Exit array. */
87866 FC_FREE(field_addr.sub_location);
87867#endif /* FREECIV_JSON_CONNECTION */
87868 }
87869
87870 if (e) {
87871 log_packet_detailed("'support_names' field error detected");
87872 }
87873
87874#ifdef FREECIV_JSON_CONNECTION
87875 field_addr.name = "pretty_names";
87876#endif /* FREECIV_JSON_CONNECTION */
87877 e = 0;
87878
87879 {
87880 int i;
87881
87882#ifdef FREECIV_JSON_CONNECTION
87883 /* Create the array. */
87884 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
87885
87886 /* Enter array. */
87887 field_addr.sub_location = plocation_elem_new(0);
87888#endif /* FREECIV_JSON_CONNECTION */
87889
87890 for (i = 0; i < real_packet->bits_num; i++) {
87891#ifdef FREECIV_JSON_CONNECTION
87892 /* Next array element. */
87893 field_addr.sub_location->number = i;
87894#endif /* FREECIV_JSON_CONNECTION */
87895
87896 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
87897 }
87898
87899#ifdef FREECIV_JSON_CONNECTION
87900 /* Exit array. */
87901 FC_FREE(field_addr.sub_location);
87902#endif /* FREECIV_JSON_CONNECTION */
87903 }
87904
87905 if (e) {
87906 log_packet_detailed("'pretty_names' field error detected");
87907 }
87908#endif /* FREECIV_DELTA_PROTOCOL */
87909
87911}
87912
87914{
87915 if (!pc->used) {
87916 log_error("WARNING: trying to send data to the closed connection %s",
87918 return -1;
87919 }
87920 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet != nullptr, -1,
87921 "Handler for PACKET_SERVER_SETTING_BITWISE not installed");
87922 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet(pc, packet);
87923}
87924
87925static inline void init_packet_set_topology(struct packet_set_topology *packet)
87926{
87927 memset(packet, 0, sizeof(*packet));
87928}
87929
87930#define free_packet_set_topology(_packet) (void) 0
87931#define destroy_packet_set_topology free
87932
87933#ifdef FREECIV_DELTA_PROTOCOL
87934#define hash_packet_set_topology_100 hash_const
87935#define cmp_packet_set_topology_100 cmp_const
87937#endif /* FREECIV_DELTA_PROTOCOL */
87938
87940{
87941#define FREE_PACKET_STRUCT(_packet) free_packet_set_topology(_packet)
87943
87944#ifdef FREECIV_JSON_CONNECTION
87945 struct plocation field_addr;
87946 {
87947 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
87950 }
87951#endif /* FREECIV_JSON_CONNECTION */
87952
87953 log_packet_detailed("packet_set_topology_100: got info about ()");
87954
87955#ifdef FREECIV_DELTA_PROTOCOL
87957 struct packet_set_topology *old;
87958 struct genhash **hash = pc->phs.received + PACKET_SET_TOPOLOGY;
87959
87960 if (nullptr == *hash) {
87962 nullptr, nullptr, nullptr, destroy_packet_set_topology);
87963 }
87964
87965 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87966 *real_packet = *old;
87967 } else {
87968 /* packet is already initialized empty */
87969 log_packet_detailed(" no old info");
87970 }
87971
87972#ifdef FREECIV_JSON_CONNECTION
87973 field_addr.name = "fields";
87974#endif /* FREECIV_JSON_CONNECTION */
87975 DIO_BV_GET(&din, &field_addr, fields);
87976
87977 if (BV_ISSET(fields, 0)) {
87978 log_packet_detailed(" got field 'topology_id'");
87979
87980#ifdef FREECIV_JSON_CONNECTION
87981 field_addr.name = "topology_id";
87982#endif /* FREECIV_JSON_CONNECTION */
87983
87984 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
87985 RECEIVE_PACKET_FIELD_ERROR(topology_id);
87986 }
87987 }
87988
87989 if (BV_ISSET(fields, 1)) {
87990 log_packet_detailed(" got field 'wrap_id'");
87991
87992#ifdef FREECIV_JSON_CONNECTION
87993 field_addr.name = "wrap_id";
87994#endif /* FREECIV_JSON_CONNECTION */
87995
87996 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
87998 }
87999 }
88000
88001 if (nullptr == old) {
88002 old = fc_malloc(sizeof(*old));
88004 *old = *real_packet;
88006 } else {
88007 *old = *real_packet;
88008 }
88009
88010#else /* FREECIV_DELTA_PROTOCOL */
88011#ifdef FREECIV_JSON_CONNECTION
88012 field_addr.name = "topology_id";
88013#endif /* FREECIV_JSON_CONNECTION */
88014
88015 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
88016 RECEIVE_PACKET_FIELD_ERROR(topology_id);
88017 }
88018
88019#ifdef FREECIV_JSON_CONNECTION
88020 field_addr.name = "wrap_id";
88021#endif /* FREECIV_JSON_CONNECTION */
88022
88023 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
88025 }
88026#endif /* FREECIV_DELTA_PROTOCOL */
88027
88029#undef FREE_PACKET_STRUCT
88030}
88031
88032static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
88033{
88034 const struct packet_set_topology *real_packet = packet;
88035 int e;
88037
88038 log_packet_detailed("packet_set_topology_100: sending info about ()");
88039
88040#ifdef FREECIV_DELTA_PROTOCOL
88042 struct packet_set_topology *old;
88043 bool differ;
88044 struct genhash **hash = pc->phs.sent + PACKET_SET_TOPOLOGY;
88045
88046 if (nullptr == *hash) {
88048 nullptr, nullptr, nullptr, destroy_packet_set_topology);
88049 }
88050 BV_CLR_ALL(fields);
88051
88052 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88053 old = fc_malloc(sizeof(*old));
88054 /* temporary bitcopy just to insert correctly */
88055 *old = *real_packet;
88058 }
88059
88060 differ = (old->topology_id != real_packet->topology_id);
88061 if (differ) {
88062 BV_SET(fields, 0);
88063 }
88064
88065 differ = (old->wrap_id != real_packet->wrap_id);
88066 if (differ) {
88067 BV_SET(fields, 1);
88068 }
88069#endif /* FREECIV_DELTA_PROTOCOL */
88070
88071#ifdef FREECIV_JSON_CONNECTION
88072 struct plocation field_addr;
88073 {
88074 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88077 }
88078#endif /* FREECIV_JSON_CONNECTION */
88079
88080#ifdef FREECIV_DELTA_PROTOCOL
88081#ifdef FREECIV_JSON_CONNECTION
88082 field_addr.name = "fields";
88083#endif /* FREECIV_JSON_CONNECTION */
88084 e = 0;
88085 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88086 if (e) {
88087 log_packet_detailed("fields bitvector error detected");
88088 }
88089
88090 if (BV_ISSET(fields, 0)) {
88091 log_packet_detailed(" field 'topology_id' has changed");
88092
88093#ifdef FREECIV_JSON_CONNECTION
88094 field_addr.name = "topology_id";
88095#endif /* FREECIV_JSON_CONNECTION */
88096 e = 0;
88097
88098 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
88099
88100 if (e) {
88101 log_packet_detailed("'topology_id' field error detected");
88102 }
88103 }
88104
88105 if (BV_ISSET(fields, 1)) {
88106 log_packet_detailed(" field 'wrap_id' has changed");
88107
88108#ifdef FREECIV_JSON_CONNECTION
88109 field_addr.name = "wrap_id";
88110#endif /* FREECIV_JSON_CONNECTION */
88111 e = 0;
88112
88113 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88114
88115 if (e) {
88116 log_packet_detailed("'wrap_id' field error detected");
88117 }
88118 }
88119
88120 *old = *real_packet;
88121
88122#else /* FREECIV_DELTA_PROTOCOL */
88123#ifdef FREECIV_JSON_CONNECTION
88124 field_addr.name = "topology_id";
88125#endif /* FREECIV_JSON_CONNECTION */
88126 e = 0;
88127
88128 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
88129
88130 if (e) {
88131 log_packet_detailed("'topology_id' field error detected");
88132 }
88133
88134#ifdef FREECIV_JSON_CONNECTION
88135 field_addr.name = "wrap_id";
88136#endif /* FREECIV_JSON_CONNECTION */
88137 e = 0;
88138
88139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
88140
88141 if (e) {
88142 log_packet_detailed("'wrap_id' field error detected");
88143 }
88144#endif /* FREECIV_DELTA_PROTOCOL */
88145
88147}
88148
88150{
88151 if (!pc->used) {
88152 log_error("WARNING: trying to send data to the closed connection %s",
88154 return -1;
88155 }
88156 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet != nullptr, -1,
88157 "Handler for PACKET_SET_TOPOLOGY not installed");
88158 return pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet(pc, packet);
88159}
88160
88161static inline void init_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88162{
88163 memset(packet, 0, sizeof(*packet));
88164
88165 requirement_vector_init(&packet->reqs);
88166}
88167
88168static inline void free_packet_ruleset_effect(struct packet_ruleset_effect *packet)
88169{
88170 requirement_vector_free(&packet->reqs);
88171}
88172
88173static inline void destroy_packet_ruleset_effect(void *packet)
88174{
88176 free(packet);
88177}
88178
88179#ifdef FREECIV_DELTA_PROTOCOL
88180#define hash_packet_ruleset_effect_100 hash_const
88181#define cmp_packet_ruleset_effect_100 cmp_const
88183#endif /* FREECIV_DELTA_PROTOCOL */
88184
88186{
88187#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_effect(_packet)
88189
88190#ifdef FREECIV_JSON_CONNECTION
88191 struct plocation field_addr;
88192 {
88193 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88196 }
88197#endif /* FREECIV_JSON_CONNECTION */
88198
88199 log_packet_detailed("packet_ruleset_effect_100: got info about ()");
88200
88201#ifdef FREECIV_DELTA_PROTOCOL
88203 struct packet_ruleset_effect *old;
88204 struct genhash **hash = pc->phs.received + PACKET_RULESET_EFFECT;
88205
88206 if (nullptr == *hash) {
88208 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
88209 }
88210
88211 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88212 real_packet->effect_type = old->effect_type;
88213 real_packet->effect_value = old->effect_value;
88214 real_packet->has_multiplier = old->has_multiplier;
88215 real_packet->multiplier = old->multiplier;
88216 requirement_vector_copy(&real_packet->reqs, &old->reqs);
88217 } else {
88218 /* packet is already initialized empty */
88219 log_packet_detailed(" no old info");
88220 }
88221
88222#ifdef FREECIV_JSON_CONNECTION
88223 field_addr.name = "fields";
88224#endif /* FREECIV_JSON_CONNECTION */
88225 DIO_BV_GET(&din, &field_addr, fields);
88226
88227 if (BV_ISSET(fields, 0)) {
88228 log_packet_detailed(" got field 'effect_type'");
88229
88230#ifdef FREECIV_JSON_CONNECTION
88231 field_addr.name = "effect_type";
88232#endif /* FREECIV_JSON_CONNECTION */
88233
88234 {
88235 int readin;
88236
88237 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88238 RECEIVE_PACKET_FIELD_ERROR(effect_type);
88239 }
88240 real_packet->effect_type = readin;
88241 }
88242 }
88243
88244 if (BV_ISSET(fields, 1)) {
88245 log_packet_detailed(" got field 'effect_value'");
88246
88247#ifdef FREECIV_JSON_CONNECTION
88248 field_addr.name = "effect_value";
88249#endif /* FREECIV_JSON_CONNECTION */
88250
88251 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
88252 RECEIVE_PACKET_FIELD_ERROR(effect_value);
88253 }
88254 }
88255
88256 real_packet->has_multiplier = BV_ISSET(fields, 2);
88257
88258 if (BV_ISSET(fields, 3)) {
88259 log_packet_detailed(" got field 'multiplier'");
88260
88261#ifdef FREECIV_JSON_CONNECTION
88262 field_addr.name = "multiplier";
88263#endif /* FREECIV_JSON_CONNECTION */
88264
88265 {
88266 int readin;
88267
88268 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88270 }
88271 real_packet->multiplier = readin;
88272 }
88273 }
88274
88275 if (BV_ISSET(fields, 4)) {
88276 log_packet_detailed(" got field 'reqs'");
88277
88278#ifdef FREECIV_JSON_CONNECTION
88279 field_addr.name = "reqs";
88280#endif /* FREECIV_JSON_CONNECTION */
88281
88282 {
88283 int i;
88284
88285 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
88287 }
88289
88290#ifdef FREECIV_JSON_CONNECTION
88291 /* Enter array. */
88292 field_addr.sub_location = plocation_elem_new(0);
88293#endif /* FREECIV_JSON_CONNECTION */
88294
88295 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88296#ifdef FREECIV_JSON_CONNECTION
88297 /* Next array element */
88298 field_addr.sub_location->number = i;
88299#endif /* FREECIV_JSON_CONNECTION */
88300
88301 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
88303 }
88304 }
88305
88306#ifdef FREECIV_JSON_CONNECTION
88307 /* Exit array. */
88308 FC_FREE(field_addr.sub_location);
88309#endif /* FREECIV_JSON_CONNECTION */
88310 }
88311 }
88312
88313 if (nullptr == old) {
88314 old = fc_malloc(sizeof(*old));
88316 old->effect_type = real_packet->effect_type;
88317 old->effect_value = real_packet->effect_value;
88318 old->has_multiplier = real_packet->has_multiplier;
88319 old->multiplier = real_packet->multiplier;
88320 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88322 } else {
88323 old->effect_type = real_packet->effect_type;
88324 old->effect_value = real_packet->effect_value;
88325 old->has_multiplier = real_packet->has_multiplier;
88326 old->multiplier = real_packet->multiplier;
88327 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88328 }
88329
88330#else /* FREECIV_DELTA_PROTOCOL */
88331#ifdef FREECIV_JSON_CONNECTION
88332 field_addr.name = "effect_type";
88333#endif /* FREECIV_JSON_CONNECTION */
88334
88335 {
88336 int readin;
88337
88338 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88339 RECEIVE_PACKET_FIELD_ERROR(effect_type);
88340 }
88341 real_packet->effect_type = readin;
88342 }
88343
88344#ifdef FREECIV_JSON_CONNECTION
88345 field_addr.name = "effect_value";
88346#endif /* FREECIV_JSON_CONNECTION */
88347
88348 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
88349 RECEIVE_PACKET_FIELD_ERROR(effect_value);
88350 }
88351
88352#ifdef FREECIV_JSON_CONNECTION
88353 field_addr.name = "has_multiplier";
88354#endif /* FREECIV_JSON_CONNECTION */
88355
88356 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_multiplier)) {
88357 RECEIVE_PACKET_FIELD_ERROR(has_multiplier);
88358 }
88359
88360#ifdef FREECIV_JSON_CONNECTION
88361 field_addr.name = "multiplier";
88362#endif /* FREECIV_JSON_CONNECTION */
88363
88364 {
88365 int readin;
88366
88367 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
88369 }
88370 real_packet->multiplier = readin;
88371 }
88372
88373#ifdef FREECIV_JSON_CONNECTION
88374 field_addr.name = "reqs";
88375#endif /* FREECIV_JSON_CONNECTION */
88376
88377 {
88378 int i;
88379
88380 if (!DIO_GET(arraylen, &din, &field_addr, &i)) {
88382 }
88384
88385#ifdef FREECIV_JSON_CONNECTION
88386 /* Enter array. */
88387 field_addr.sub_location = plocation_elem_new(0);
88388#endif /* FREECIV_JSON_CONNECTION */
88389
88390 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88391#ifdef FREECIV_JSON_CONNECTION
88392 /* Next array element */
88393 field_addr.sub_location->number = i;
88394#endif /* FREECIV_JSON_CONNECTION */
88395
88396 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs.p[i])) {
88398 }
88399 }
88400
88401#ifdef FREECIV_JSON_CONNECTION
88402 /* Exit array. */
88403 FC_FREE(field_addr.sub_location);
88404#endif /* FREECIV_JSON_CONNECTION */
88405 }
88406#endif /* FREECIV_DELTA_PROTOCOL */
88407
88409#undef FREE_PACKET_STRUCT
88410}
88411
88413{
88414 const struct packet_ruleset_effect *real_packet = packet;
88415 int e;
88417
88418 log_packet_detailed("packet_ruleset_effect_100: sending info about ()");
88419
88420#ifdef FREECIV_DELTA_PROTOCOL
88422 struct packet_ruleset_effect *old;
88423 bool differ;
88424 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EFFECT;
88425
88426 if (nullptr == *hash) {
88428 nullptr, nullptr, nullptr, destroy_packet_ruleset_effect);
88429 }
88430 BV_CLR_ALL(fields);
88431
88432 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88433 old = fc_malloc(sizeof(*old));
88434 /* temporary bitcopy just to insert correctly */
88435 *old = *real_packet;
88438 }
88439
88440 differ = (old->effect_type != real_packet->effect_type);
88441 if (differ) {
88442 BV_SET(fields, 0);
88443 }
88444
88445 differ = (old->effect_value != real_packet->effect_value);
88446 if (differ) {
88447 BV_SET(fields, 1);
88448 }
88449
88450 /* folded into head */
88451 if (real_packet->has_multiplier) {
88452 BV_SET(fields, 2);
88453 }
88454
88455 differ = (old->multiplier != real_packet->multiplier);
88456 if (differ) {
88457 BV_SET(fields, 3);
88458 }
88459
88461 if (!differ) {
88462 int i;
88463
88464 for (i = 0; i < requirement_vector_size(&old->reqs); i++) {
88465 differ = !are_requirements_equal(&old->reqs.p[i], &real_packet->reqs.p[i]);
88466 if (differ) {
88467 break;
88468 }
88469 }
88470 }
88471 if (differ) {
88472 BV_SET(fields, 4);
88473 }
88474#endif /* FREECIV_DELTA_PROTOCOL */
88475
88476#ifdef FREECIV_JSON_CONNECTION
88477 struct plocation field_addr;
88478 {
88479 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88482 }
88483#endif /* FREECIV_JSON_CONNECTION */
88484
88485#ifdef FREECIV_DELTA_PROTOCOL
88486#ifdef FREECIV_JSON_CONNECTION
88487 field_addr.name = "fields";
88488#endif /* FREECIV_JSON_CONNECTION */
88489 e = 0;
88490 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88491 if (e) {
88492 log_packet_detailed("fields bitvector error detected");
88493 }
88494
88495 if (BV_ISSET(fields, 0)) {
88496 log_packet_detailed(" field 'effect_type' has changed");
88497
88498#ifdef FREECIV_JSON_CONNECTION
88499 field_addr.name = "effect_type";
88500#endif /* FREECIV_JSON_CONNECTION */
88501 e = 0;
88502
88503 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
88504
88505 if (e) {
88506 log_packet_detailed("'effect_type' field error detected");
88507 }
88508 }
88509
88510 if (BV_ISSET(fields, 1)) {
88511 log_packet_detailed(" field 'effect_value' has changed");
88512
88513#ifdef FREECIV_JSON_CONNECTION
88514 field_addr.name = "effect_value";
88515#endif /* FREECIV_JSON_CONNECTION */
88516 e = 0;
88517
88518 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
88519
88520 if (e) {
88521 log_packet_detailed("'effect_value' field error detected");
88522 }
88523 }
88524
88525 /* field 2 is folded into the header */
88526
88527 if (BV_ISSET(fields, 3)) {
88528 log_packet_detailed(" field 'multiplier' has changed");
88529
88530#ifdef FREECIV_JSON_CONNECTION
88531 field_addr.name = "multiplier";
88532#endif /* FREECIV_JSON_CONNECTION */
88533 e = 0;
88534
88535 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
88536
88537 if (e) {
88538 log_packet_detailed("'multiplier' field error detected");
88539 }
88540 }
88541
88542 if (BV_ISSET(fields, 4)) {
88543 log_packet_detailed(" field 'reqs' has changed");
88544
88545#ifdef FREECIV_JSON_CONNECTION
88546 field_addr.name = "reqs";
88547#endif /* FREECIV_JSON_CONNECTION */
88548 e = 0;
88549
88550 {
88551 int i;
88552
88555
88556#ifdef FREECIV_JSON_CONNECTION
88557 /* Enter array. */
88558 field_addr.sub_location = plocation_elem_new(0);
88559#endif /* FREECIV_JSON_CONNECTION */
88560
88561 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88562#ifdef FREECIV_JSON_CONNECTION
88563 /* Next array element. */
88564 field_addr.sub_location->number = i;
88565#endif /* FREECIV_JSON_CONNECTION */
88566
88567 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
88568 }
88569
88570#ifdef FREECIV_JSON_CONNECTION
88571 /* Exit array. */
88572 FC_FREE(field_addr.sub_location);
88573#endif /* FREECIV_JSON_CONNECTION */
88574 }
88575
88576 if (e) {
88577 log_packet_detailed("'reqs' field error detected");
88578 }
88579 }
88580
88581 old->effect_type = real_packet->effect_type;
88582 old->effect_value = real_packet->effect_value;
88583 old->has_multiplier = real_packet->has_multiplier;
88584 old->multiplier = real_packet->multiplier;
88585 requirement_vector_copy(&old->reqs, &real_packet->reqs);
88586
88587#else /* FREECIV_DELTA_PROTOCOL */
88588#ifdef FREECIV_JSON_CONNECTION
88589 field_addr.name = "effect_type";
88590#endif /* FREECIV_JSON_CONNECTION */
88591 e = 0;
88592
88593 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
88594
88595 if (e) {
88596 log_packet_detailed("'effect_type' field error detected");
88597 }
88598
88599#ifdef FREECIV_JSON_CONNECTION
88600 field_addr.name = "effect_value";
88601#endif /* FREECIV_JSON_CONNECTION */
88602 e = 0;
88603
88604 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
88605
88606 if (e) {
88607 log_packet_detailed("'effect_value' field error detected");
88608 }
88609
88610#ifdef FREECIV_JSON_CONNECTION
88611 field_addr.name = "has_multiplier";
88612#endif /* FREECIV_JSON_CONNECTION */
88613 e = 0;
88614
88615 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_multiplier);
88616
88617 if (e) {
88618 log_packet_detailed("'has_multiplier' field error detected");
88619 }
88620
88621#ifdef FREECIV_JSON_CONNECTION
88622 field_addr.name = "multiplier";
88623#endif /* FREECIV_JSON_CONNECTION */
88624 e = 0;
88625
88626 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
88627
88628 if (e) {
88629 log_packet_detailed("'multiplier' field error detected");
88630 }
88631
88632#ifdef FREECIV_JSON_CONNECTION
88633 field_addr.name = "reqs";
88634#endif /* FREECIV_JSON_CONNECTION */
88635 e = 0;
88636
88637 {
88638 int i;
88639
88642
88643#ifdef FREECIV_JSON_CONNECTION
88644 /* Enter array. */
88645 field_addr.sub_location = plocation_elem_new(0);
88646#endif /* FREECIV_JSON_CONNECTION */
88647
88648 for (i = 0; i < requirement_vector_size(&real_packet->reqs); i++) {
88649#ifdef FREECIV_JSON_CONNECTION
88650 /* Next array element. */
88651 field_addr.sub_location->number = i;
88652#endif /* FREECIV_JSON_CONNECTION */
88653
88654 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs.p[i]);
88655 }
88656
88657#ifdef FREECIV_JSON_CONNECTION
88658 /* Exit array. */
88659 FC_FREE(field_addr.sub_location);
88660#endif /* FREECIV_JSON_CONNECTION */
88661 }
88662
88663 if (e) {
88664 log_packet_detailed("'reqs' field error detected");
88665 }
88666#endif /* FREECIV_DELTA_PROTOCOL */
88667
88669}
88670
88672{
88673 if (!pc->used) {
88674 log_error("WARNING: trying to send data to the closed connection %s",
88676 return -1;
88677 }
88678 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet != nullptr, -1,
88679 "Handler for PACKET_RULESET_EFFECT not installed");
88680 return pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet(pc, packet);
88681}
88682
88683void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
88684{
88685 conn_list_iterate(dest, pconn) {
88688}
88689
88691{
88692 memset(packet, 0, sizeof(*packet));
88693}
88694
88695#define free_packet_ruleset_resource(_packet) (void) 0
88696#define destroy_packet_ruleset_resource free
88697
88698#ifdef FREECIV_DELTA_PROTOCOL
88699#define hash_packet_ruleset_resource_100 hash_const
88700#define cmp_packet_ruleset_resource_100 cmp_const
88702#endif /* FREECIV_DELTA_PROTOCOL */
88703
88705{
88706#define FREE_PACKET_STRUCT(_packet) free_packet_ruleset_resource(_packet)
88708
88709#ifdef FREECIV_JSON_CONNECTION
88710 struct plocation field_addr;
88711 {
88712 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88715 }
88716#endif /* FREECIV_JSON_CONNECTION */
88717
88718 log_packet_detailed("packet_ruleset_resource_100: got info about ()");
88719
88720#ifdef FREECIV_DELTA_PROTOCOL
88723 struct genhash **hash = pc->phs.received + PACKET_RULESET_RESOURCE;
88724
88725 if (nullptr == *hash) {
88727 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
88728 }
88729
88730 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88731 *real_packet = *old;
88732 } else {
88733 /* packet is already initialized empty */
88734 log_packet_detailed(" no old info");
88735 }
88736
88737#ifdef FREECIV_JSON_CONNECTION
88738 field_addr.name = "fields";
88739#endif /* FREECIV_JSON_CONNECTION */
88740 DIO_BV_GET(&din, &field_addr, fields);
88741
88742 if (BV_ISSET(fields, 0)) {
88743 log_packet_detailed(" got field 'id'");
88744
88745#ifdef FREECIV_JSON_CONNECTION
88746 field_addr.name = "id";
88747#endif /* FREECIV_JSON_CONNECTION */
88748
88749 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
88751 }
88752 }
88753
88754 if (BV_ISSET(fields, 1)) {
88755 log_packet_detailed(" got field 'output'");
88756
88757#ifdef FREECIV_JSON_CONNECTION
88758 field_addr.name = "output";
88759#endif /* FREECIV_JSON_CONNECTION */
88760
88761 {
88762 int i;
88763
88764
88765#ifdef FREECIV_JSON_CONNECTION
88766 /* Enter array. */
88767 field_addr.sub_location = plocation_elem_new(0);
88768#endif /* FREECIV_JSON_CONNECTION */
88769
88770 for (i = 0; i < O_LAST; i++) {
88771#ifdef FREECIV_JSON_CONNECTION
88772 /* Next array element */
88773 field_addr.sub_location->number = i;
88774#endif /* FREECIV_JSON_CONNECTION */
88775
88776 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
88778 }
88779 }
88780
88781#ifdef FREECIV_JSON_CONNECTION
88782 /* Exit array. */
88783 FC_FREE(field_addr.sub_location);
88784#endif /* FREECIV_JSON_CONNECTION */
88785 }
88786 }
88787
88788 if (nullptr == old) {
88789 old = fc_malloc(sizeof(*old));
88791 *old = *real_packet;
88793 } else {
88794 *old = *real_packet;
88795 }
88796
88797#else /* FREECIV_DELTA_PROTOCOL */
88798#ifdef FREECIV_JSON_CONNECTION
88799 field_addr.name = "id";
88800#endif /* FREECIV_JSON_CONNECTION */
88801
88802 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
88804 }
88805
88806#ifdef FREECIV_JSON_CONNECTION
88807 field_addr.name = "output";
88808#endif /* FREECIV_JSON_CONNECTION */
88809
88810 {
88811 int i;
88812
88813
88814#ifdef FREECIV_JSON_CONNECTION
88815 /* Enter array. */
88816 field_addr.sub_location = plocation_elem_new(0);
88817#endif /* FREECIV_JSON_CONNECTION */
88818
88819 for (i = 0; i < O_LAST; i++) {
88820#ifdef FREECIV_JSON_CONNECTION
88821 /* Next array element */
88822 field_addr.sub_location->number = i;
88823#endif /* FREECIV_JSON_CONNECTION */
88824
88825 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
88827 }
88828 }
88829
88830#ifdef FREECIV_JSON_CONNECTION
88831 /* Exit array. */
88832 FC_FREE(field_addr.sub_location);
88833#endif /* FREECIV_JSON_CONNECTION */
88834 }
88835#endif /* FREECIV_DELTA_PROTOCOL */
88836
88838#undef FREE_PACKET_STRUCT
88839}
88840
88842{
88843 const struct packet_ruleset_resource *real_packet = packet;
88844 int e;
88846
88847 log_packet_detailed("packet_ruleset_resource_100: sending info about ()");
88848
88849#ifdef FREECIV_DELTA_PROTOCOL
88852 bool differ;
88853 struct genhash **hash = pc->phs.sent + PACKET_RULESET_RESOURCE;
88854
88855 if (nullptr == *hash) {
88857 nullptr, nullptr, nullptr, destroy_packet_ruleset_resource);
88858 }
88859 BV_CLR_ALL(fields);
88860
88861 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88862 old = fc_malloc(sizeof(*old));
88863 /* temporary bitcopy just to insert correctly */
88864 *old = *real_packet;
88867 }
88868
88869 differ = (old->id != real_packet->id);
88870 if (differ) {
88871 BV_SET(fields, 0);
88872 }
88873
88874 differ = FALSE;
88875 {
88876 int i;
88877
88878 for (i = 0; i < O_LAST; i++) {
88879 differ = (old->output[i] != real_packet->output[i]);
88880 if (differ) {
88881 break;
88882 }
88883 }
88884 }
88885 if (differ) {
88886 BV_SET(fields, 1);
88887 }
88888#endif /* FREECIV_DELTA_PROTOCOL */
88889
88890#ifdef FREECIV_JSON_CONNECTION
88891 struct plocation field_addr;
88892 {
88893 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
88896 }
88897#endif /* FREECIV_JSON_CONNECTION */
88898
88899#ifdef FREECIV_DELTA_PROTOCOL
88900#ifdef FREECIV_JSON_CONNECTION
88901 field_addr.name = "fields";
88902#endif /* FREECIV_JSON_CONNECTION */
88903 e = 0;
88904 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88905 if (e) {
88906 log_packet_detailed("fields bitvector error detected");
88907 }
88908
88909 if (BV_ISSET(fields, 0)) {
88910 log_packet_detailed(" field 'id' has changed");
88911
88912#ifdef FREECIV_JSON_CONNECTION
88913 field_addr.name = "id";
88914#endif /* FREECIV_JSON_CONNECTION */
88915 e = 0;
88916
88917 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
88918
88919 if (e) {
88920 log_packet_detailed("'id' field error detected");
88921 }
88922 }
88923
88924 if (BV_ISSET(fields, 1)) {
88925 log_packet_detailed(" field 'output' has changed");
88926
88927#ifdef FREECIV_JSON_CONNECTION
88928 field_addr.name = "output";
88929#endif /* FREECIV_JSON_CONNECTION */
88930 e = 0;
88931
88932 {
88933 int i;
88934
88935#ifdef FREECIV_JSON_CONNECTION
88936 /* Create the array. */
88937 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
88938
88939 /* Enter array. */
88940 field_addr.sub_location = plocation_elem_new(0);
88941#endif /* FREECIV_JSON_CONNECTION */
88942
88943 for (i = 0; i < O_LAST; i++) {
88944#ifdef FREECIV_JSON_CONNECTION
88945 /* Next array element. */
88946 field_addr.sub_location->number = i;
88947#endif /* FREECIV_JSON_CONNECTION */
88948
88949 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
88950 }
88951
88952#ifdef FREECIV_JSON_CONNECTION
88953 /* Exit array. */
88954 FC_FREE(field_addr.sub_location);
88955#endif /* FREECIV_JSON_CONNECTION */
88956 }
88957
88958 if (e) {
88959 log_packet_detailed("'output' field error detected");
88960 }
88961 }
88962
88963 *old = *real_packet;
88964
88965#else /* FREECIV_DELTA_PROTOCOL */
88966#ifdef FREECIV_JSON_CONNECTION
88967 field_addr.name = "id";
88968#endif /* FREECIV_JSON_CONNECTION */
88969 e = 0;
88970
88971 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
88972
88973 if (e) {
88974 log_packet_detailed("'id' field error detected");
88975 }
88976
88977#ifdef FREECIV_JSON_CONNECTION
88978 field_addr.name = "output";
88979#endif /* FREECIV_JSON_CONNECTION */
88980 e = 0;
88981
88982 {
88983 int i;
88984
88985#ifdef FREECIV_JSON_CONNECTION
88986 /* Create the array. */
88987 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
88988
88989 /* Enter array. */
88990 field_addr.sub_location = plocation_elem_new(0);
88991#endif /* FREECIV_JSON_CONNECTION */
88992
88993 for (i = 0; i < O_LAST; i++) {
88994#ifdef FREECIV_JSON_CONNECTION
88995 /* Next array element. */
88996 field_addr.sub_location->number = i;
88997#endif /* FREECIV_JSON_CONNECTION */
88998
88999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
89000 }
89001
89002#ifdef FREECIV_JSON_CONNECTION
89003 /* Exit array. */
89004 FC_FREE(field_addr.sub_location);
89005#endif /* FREECIV_JSON_CONNECTION */
89006 }
89007
89008 if (e) {
89009 log_packet_detailed("'output' field error detected");
89010 }
89011#endif /* FREECIV_DELTA_PROTOCOL */
89012
89014}
89015
89017{
89018 if (!pc->used) {
89019 log_error("WARNING: trying to send data to the closed connection %s",
89021 return -1;
89022 }
89023 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet != nullptr, -1,
89024 "Handler for PACKET_RULESET_RESOURCE not installed");
89025 return pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet(pc, packet);
89026}
89027
89029{
89030 conn_list_iterate(dest, pconn) {
89033}
89034
89035static inline void init_packet_scenario_info(struct packet_scenario_info *packet)
89036{
89037 memset(packet, 0, sizeof(*packet));
89038}
89039
89040#define free_packet_scenario_info(_packet) (void) 0
89041#define destroy_packet_scenario_info free
89042
89043#ifdef FREECIV_DELTA_PROTOCOL
89044#define hash_packet_scenario_info_100 hash_const
89045#define cmp_packet_scenario_info_100 cmp_const
89047#endif /* FREECIV_DELTA_PROTOCOL */
89048
89050{
89051#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_info(_packet)
89053
89054#ifdef FREECIV_JSON_CONNECTION
89055 struct plocation field_addr;
89056 {
89057 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89060 }
89061#endif /* FREECIV_JSON_CONNECTION */
89062
89063 log_packet_detailed("packet_scenario_info_100: got info about ()");
89064
89065#ifdef FREECIV_DELTA_PROTOCOL
89067 struct packet_scenario_info *old;
89068 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_INFO;
89069
89070 if (nullptr == *hash) {
89072 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
89073 }
89074
89075 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89076 *real_packet = *old;
89077 } else {
89078 /* packet is already initialized empty */
89079 log_packet_detailed(" no old info");
89080 }
89081
89082#ifdef FREECIV_JSON_CONNECTION
89083 field_addr.name = "fields";
89084#endif /* FREECIV_JSON_CONNECTION */
89085 DIO_BV_GET(&din, &field_addr, fields);
89086
89087 real_packet->is_scenario = BV_ISSET(fields, 0);
89088
89089 if (BV_ISSET(fields, 1)) {
89090 log_packet_detailed(" got field 'name'");
89091
89092#ifdef FREECIV_JSON_CONNECTION
89093 field_addr.name = "name";
89094#endif /* FREECIV_JSON_CONNECTION */
89095
89096 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89098 }
89099 }
89100
89101 if (BV_ISSET(fields, 2)) {
89102 log_packet_detailed(" got field 'authors'");
89103
89104#ifdef FREECIV_JSON_CONNECTION
89105 field_addr.name = "authors";
89106#endif /* FREECIV_JSON_CONNECTION */
89107
89108 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
89110 }
89111 }
89112
89113 real_packet->players = BV_ISSET(fields, 3);
89114
89115 real_packet->startpos_nations = BV_ISSET(fields, 4);
89116
89117 real_packet->save_random = BV_ISSET(fields, 5);
89118
89119 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
89120
89121 real_packet->lake_flooding = BV_ISSET(fields, 7);
89122
89123 real_packet->handmade = BV_ISSET(fields, 8);
89124
89125 real_packet->allow_ai_type_fallback = BV_ISSET(fields, 9);
89126
89127 real_packet->ruleset_locked = BV_ISSET(fields, 10);
89128
89129 if (BV_ISSET(fields, 11)) {
89130 log_packet_detailed(" got field 'datafile'");
89131
89132#ifdef FREECIV_JSON_CONNECTION
89133 field_addr.name = "datafile";
89134#endif /* FREECIV_JSON_CONNECTION */
89135
89136 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
89138 }
89139 }
89140
89141 real_packet->have_resources = BV_ISSET(fields, 12);
89142
89143 if (BV_ISSET(fields, 13)) {
89144 log_packet_detailed(" got field 'req_caps'");
89145
89146#ifdef FREECIV_JSON_CONNECTION
89147 field_addr.name = "req_caps";
89148#endif /* FREECIV_JSON_CONNECTION */
89149
89150 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
89152 }
89153 }
89154
89155 if (nullptr == old) {
89156 old = fc_malloc(sizeof(*old));
89158 *old = *real_packet;
89160 } else {
89161 *old = *real_packet;
89162 }
89163
89164#else /* FREECIV_DELTA_PROTOCOL */
89165#ifdef FREECIV_JSON_CONNECTION
89166 field_addr.name = "is_scenario";
89167#endif /* FREECIV_JSON_CONNECTION */
89168
89169 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_scenario)) {
89170 RECEIVE_PACKET_FIELD_ERROR(is_scenario);
89171 }
89172
89173#ifdef FREECIV_JSON_CONNECTION
89174 field_addr.name = "name";
89175#endif /* FREECIV_JSON_CONNECTION */
89176
89177 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89179 }
89180
89181#ifdef FREECIV_JSON_CONNECTION
89182 field_addr.name = "authors";
89183#endif /* FREECIV_JSON_CONNECTION */
89184
89185 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
89187 }
89188
89189#ifdef FREECIV_JSON_CONNECTION
89190 field_addr.name = "players";
89191#endif /* FREECIV_JSON_CONNECTION */
89192
89193 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->players)) {
89195 }
89196
89197#ifdef FREECIV_JSON_CONNECTION
89198 field_addr.name = "startpos_nations";
89199#endif /* FREECIV_JSON_CONNECTION */
89200
89201 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
89202 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
89203 }
89204
89205#ifdef FREECIV_JSON_CONNECTION
89206 field_addr.name = "save_random";
89207#endif /* FREECIV_JSON_CONNECTION */
89208
89209 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->save_random)) {
89210 RECEIVE_PACKET_FIELD_ERROR(save_random);
89211 }
89212
89213#ifdef FREECIV_JSON_CONNECTION
89214 field_addr.name = "prevent_new_cities";
89215#endif /* FREECIV_JSON_CONNECTION */
89216
89217 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
89218 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
89219 }
89220
89221#ifdef FREECIV_JSON_CONNECTION
89222 field_addr.name = "lake_flooding";
89223#endif /* FREECIV_JSON_CONNECTION */
89224
89225 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
89226 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
89227 }
89228
89229#ifdef FREECIV_JSON_CONNECTION
89230 field_addr.name = "handmade";
89231#endif /* FREECIV_JSON_CONNECTION */
89232
89233 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->handmade)) {
89235 }
89236
89237#ifdef FREECIV_JSON_CONNECTION
89238 field_addr.name = "allow_ai_type_fallback";
89239#endif /* FREECIV_JSON_CONNECTION */
89240
89241 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->allow_ai_type_fallback)) {
89242 RECEIVE_PACKET_FIELD_ERROR(allow_ai_type_fallback);
89243 }
89244
89245#ifdef FREECIV_JSON_CONNECTION
89246 field_addr.name = "ruleset_locked";
89247#endif /* FREECIV_JSON_CONNECTION */
89248
89249 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
89250 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
89251 }
89252
89253#ifdef FREECIV_JSON_CONNECTION
89254 field_addr.name = "datafile";
89255#endif /* FREECIV_JSON_CONNECTION */
89256
89257 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
89259 }
89260
89261#ifdef FREECIV_JSON_CONNECTION
89262 field_addr.name = "have_resources";
89263#endif /* FREECIV_JSON_CONNECTION */
89264
89265 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->have_resources)) {
89266 RECEIVE_PACKET_FIELD_ERROR(have_resources);
89267 }
89268
89269#ifdef FREECIV_JSON_CONNECTION
89270 field_addr.name = "req_caps";
89271#endif /* FREECIV_JSON_CONNECTION */
89272
89273 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
89275 }
89276#endif /* FREECIV_DELTA_PROTOCOL */
89277
89279#undef FREE_PACKET_STRUCT
89280}
89281
89282static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
89283{
89284 const struct packet_scenario_info *real_packet = packet;
89285 int e;
89287
89288 log_packet_detailed("packet_scenario_info_100: sending info about ()");
89289
89290#ifdef FREECIV_DELTA_PROTOCOL
89292 struct packet_scenario_info *old;
89293 bool differ;
89294 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_INFO;
89295
89296 if (nullptr == *hash) {
89298 nullptr, nullptr, nullptr, destroy_packet_scenario_info);
89299 }
89300 BV_CLR_ALL(fields);
89301
89302 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89303 old = fc_malloc(sizeof(*old));
89304 /* temporary bitcopy just to insert correctly */
89305 *old = *real_packet;
89308 }
89309
89310 /* folded into head */
89311 if (real_packet->is_scenario) {
89312 BV_SET(fields, 0);
89313 }
89314
89315 differ = (strcmp(old->name, real_packet->name) != 0);
89316 if (differ) {
89317 BV_SET(fields, 1);
89318 }
89319
89320 differ = (strcmp(old->authors, real_packet->authors) != 0);
89321 if (differ) {
89322 BV_SET(fields, 2);
89323 }
89324
89325 /* folded into head */
89326 if (real_packet->players) {
89327 BV_SET(fields, 3);
89328 }
89329
89330 /* folded into head */
89331 if (real_packet->startpos_nations) {
89332 BV_SET(fields, 4);
89333 }
89334
89335 /* folded into head */
89336 if (real_packet->save_random) {
89337 BV_SET(fields, 5);
89338 }
89339
89340 /* folded into head */
89341 if (real_packet->prevent_new_cities) {
89342 BV_SET(fields, 6);
89343 }
89344
89345 /* folded into head */
89346 if (real_packet->lake_flooding) {
89347 BV_SET(fields, 7);
89348 }
89349
89350 /* folded into head */
89351 if (real_packet->handmade) {
89352 BV_SET(fields, 8);
89353 }
89354
89355 /* folded into head */
89356 if (real_packet->allow_ai_type_fallback) {
89357 BV_SET(fields, 9);
89358 }
89359
89360 /* folded into head */
89361 if (real_packet->ruleset_locked) {
89362 BV_SET(fields, 10);
89363 }
89364
89365 differ = (strcmp(old->datafile, real_packet->datafile) != 0);
89366 if (differ) {
89367 BV_SET(fields, 11);
89368 }
89369
89370 /* folded into head */
89371 if (real_packet->have_resources) {
89372 BV_SET(fields, 12);
89373 }
89374
89375 differ = (strcmp(old->req_caps, real_packet->req_caps) != 0);
89376 if (differ) {
89377 BV_SET(fields, 13);
89378 }
89379#endif /* FREECIV_DELTA_PROTOCOL */
89380
89381#ifdef FREECIV_JSON_CONNECTION
89382 struct plocation field_addr;
89383 {
89384 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89387 }
89388#endif /* FREECIV_JSON_CONNECTION */
89389
89390#ifdef FREECIV_DELTA_PROTOCOL
89391#ifdef FREECIV_JSON_CONNECTION
89392 field_addr.name = "fields";
89393#endif /* FREECIV_JSON_CONNECTION */
89394 e = 0;
89395 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89396 if (e) {
89397 log_packet_detailed("fields bitvector error detected");
89398 }
89399
89400 /* field 0 is folded into the header */
89401
89402 if (BV_ISSET(fields, 1)) {
89403 log_packet_detailed(" field 'name' has changed");
89404
89405#ifdef FREECIV_JSON_CONNECTION
89406 field_addr.name = "name";
89407#endif /* FREECIV_JSON_CONNECTION */
89408 e = 0;
89409
89410 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89411
89412 if (e) {
89413 log_packet_detailed("'name' field error detected");
89414 }
89415 }
89416
89417 if (BV_ISSET(fields, 2)) {
89418 log_packet_detailed(" field 'authors' has changed");
89419
89420#ifdef FREECIV_JSON_CONNECTION
89421 field_addr.name = "authors";
89422#endif /* FREECIV_JSON_CONNECTION */
89423 e = 0;
89424
89425 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
89426
89427 if (e) {
89428 log_packet_detailed("'authors' field error detected");
89429 }
89430 }
89431
89432 /* field 3 is folded into the header */
89433
89434 /* field 4 is folded into the header */
89435
89436 /* field 5 is folded into the header */
89437
89438 /* field 6 is folded into the header */
89439
89440 /* field 7 is folded into the header */
89441
89442 /* field 8 is folded into the header */
89443
89444 /* field 9 is folded into the header */
89445
89446 /* field 10 is folded into the header */
89447
89448 if (BV_ISSET(fields, 11)) {
89449 log_packet_detailed(" field 'datafile' has changed");
89450
89451#ifdef FREECIV_JSON_CONNECTION
89452 field_addr.name = "datafile";
89453#endif /* FREECIV_JSON_CONNECTION */
89454 e = 0;
89455
89456 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
89457
89458 if (e) {
89459 log_packet_detailed("'datafile' field error detected");
89460 }
89461 }
89462
89463 /* field 12 is folded into the header */
89464
89465 if (BV_ISSET(fields, 13)) {
89466 log_packet_detailed(" field 'req_caps' has changed");
89467
89468#ifdef FREECIV_JSON_CONNECTION
89469 field_addr.name = "req_caps";
89470#endif /* FREECIV_JSON_CONNECTION */
89471 e = 0;
89472
89473 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
89474
89475 if (e) {
89476 log_packet_detailed("'req_caps' field error detected");
89477 }
89478 }
89479
89480 *old = *real_packet;
89481
89482#else /* FREECIV_DELTA_PROTOCOL */
89483#ifdef FREECIV_JSON_CONNECTION
89484 field_addr.name = "is_scenario";
89485#endif /* FREECIV_JSON_CONNECTION */
89486 e = 0;
89487
89488 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_scenario);
89489
89490 if (e) {
89491 log_packet_detailed("'is_scenario' field error detected");
89492 }
89493
89494#ifdef FREECIV_JSON_CONNECTION
89495 field_addr.name = "name";
89496#endif /* FREECIV_JSON_CONNECTION */
89497 e = 0;
89498
89499 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89500
89501 if (e) {
89502 log_packet_detailed("'name' field error detected");
89503 }
89504
89505#ifdef FREECIV_JSON_CONNECTION
89506 field_addr.name = "authors";
89507#endif /* FREECIV_JSON_CONNECTION */
89508 e = 0;
89509
89510 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
89511
89512 if (e) {
89513 log_packet_detailed("'authors' field error detected");
89514 }
89515
89516#ifdef FREECIV_JSON_CONNECTION
89517 field_addr.name = "players";
89518#endif /* FREECIV_JSON_CONNECTION */
89519 e = 0;
89520
89521 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->players);
89522
89523 if (e) {
89524 log_packet_detailed("'players' field error detected");
89525 }
89526
89527#ifdef FREECIV_JSON_CONNECTION
89528 field_addr.name = "startpos_nations";
89529#endif /* FREECIV_JSON_CONNECTION */
89530 e = 0;
89531
89532 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
89533
89534 if (e) {
89535 log_packet_detailed("'startpos_nations' field error detected");
89536 }
89537
89538#ifdef FREECIV_JSON_CONNECTION
89539 field_addr.name = "save_random";
89540#endif /* FREECIV_JSON_CONNECTION */
89541 e = 0;
89542
89543 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->save_random);
89544
89545 if (e) {
89546 log_packet_detailed("'save_random' field error detected");
89547 }
89548
89549#ifdef FREECIV_JSON_CONNECTION
89550 field_addr.name = "prevent_new_cities";
89551#endif /* FREECIV_JSON_CONNECTION */
89552 e = 0;
89553
89554 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
89555
89556 if (e) {
89557 log_packet_detailed("'prevent_new_cities' field error detected");
89558 }
89559
89560#ifdef FREECIV_JSON_CONNECTION
89561 field_addr.name = "lake_flooding";
89562#endif /* FREECIV_JSON_CONNECTION */
89563 e = 0;
89564
89565 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
89566
89567 if (e) {
89568 log_packet_detailed("'lake_flooding' field error detected");
89569 }
89570
89571#ifdef FREECIV_JSON_CONNECTION
89572 field_addr.name = "handmade";
89573#endif /* FREECIV_JSON_CONNECTION */
89574 e = 0;
89575
89576 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->handmade);
89577
89578 if (e) {
89579 log_packet_detailed("'handmade' field error detected");
89580 }
89581
89582#ifdef FREECIV_JSON_CONNECTION
89583 field_addr.name = "allow_ai_type_fallback";
89584#endif /* FREECIV_JSON_CONNECTION */
89585 e = 0;
89586
89587 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->allow_ai_type_fallback);
89588
89589 if (e) {
89590 log_packet_detailed("'allow_ai_type_fallback' field error detected");
89591 }
89592
89593#ifdef FREECIV_JSON_CONNECTION
89594 field_addr.name = "ruleset_locked";
89595#endif /* FREECIV_JSON_CONNECTION */
89596 e = 0;
89597
89598 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
89599
89600 if (e) {
89601 log_packet_detailed("'ruleset_locked' field error detected");
89602 }
89603
89604#ifdef FREECIV_JSON_CONNECTION
89605 field_addr.name = "datafile";
89606#endif /* FREECIV_JSON_CONNECTION */
89607 e = 0;
89608
89609 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
89610
89611 if (e) {
89612 log_packet_detailed("'datafile' field error detected");
89613 }
89614
89615#ifdef FREECIV_JSON_CONNECTION
89616 field_addr.name = "have_resources";
89617#endif /* FREECIV_JSON_CONNECTION */
89618 e = 0;
89619
89620 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->have_resources);
89621
89622 if (e) {
89623 log_packet_detailed("'have_resources' field error detected");
89624 }
89625
89626#ifdef FREECIV_JSON_CONNECTION
89627 field_addr.name = "req_caps";
89628#endif /* FREECIV_JSON_CONNECTION */
89629 e = 0;
89630
89631 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
89632
89633 if (e) {
89634 log_packet_detailed("'req_caps' field error detected");
89635 }
89636#endif /* FREECIV_DELTA_PROTOCOL */
89637
89639}
89640
89642{
89643 if (!pc->used) {
89644 log_error("WARNING: trying to send data to the closed connection %s",
89646 return -1;
89647 }
89648 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet != nullptr, -1,
89649 "Handler for PACKET_SCENARIO_INFO not installed");
89650 return pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet(pc, packet);
89651}
89652
89654{
89655 memset(packet, 0, sizeof(*packet));
89656}
89657
89658#define free_packet_scenario_description(_packet) (void) 0
89659#define destroy_packet_scenario_description free
89660
89661#ifdef FREECIV_DELTA_PROTOCOL
89662#define hash_packet_scenario_description_100 hash_const
89663#define cmp_packet_scenario_description_100 cmp_const
89665#endif /* FREECIV_DELTA_PROTOCOL */
89666
89668{
89669#define FREE_PACKET_STRUCT(_packet) free_packet_scenario_description(_packet)
89671
89672#ifdef FREECIV_JSON_CONNECTION
89673 struct plocation field_addr;
89674 {
89675 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89678 }
89679#endif /* FREECIV_JSON_CONNECTION */
89680
89681 log_packet_detailed("packet_scenario_description_100: got info about ()");
89682
89683#ifdef FREECIV_DELTA_PROTOCOL
89686 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_DESCRIPTION;
89687
89688 if (nullptr == *hash) {
89690 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
89691 }
89692
89693 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89694 *real_packet = *old;
89695 } else {
89696 /* packet is already initialized empty */
89697 log_packet_detailed(" no old info");
89698 }
89699
89700#ifdef FREECIV_JSON_CONNECTION
89701 field_addr.name = "fields";
89702#endif /* FREECIV_JSON_CONNECTION */
89703 DIO_BV_GET(&din, &field_addr, fields);
89704
89705 if (BV_ISSET(fields, 0)) {
89706 log_packet_detailed(" got field 'description'");
89707
89708#ifdef FREECIV_JSON_CONNECTION
89709 field_addr.name = "description";
89710#endif /* FREECIV_JSON_CONNECTION */
89711
89712 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
89713 RECEIVE_PACKET_FIELD_ERROR(description);
89714 }
89715 }
89716
89717 if (nullptr == old) {
89718 old = fc_malloc(sizeof(*old));
89720 *old = *real_packet;
89722 } else {
89723 *old = *real_packet;
89724 }
89725
89726#else /* FREECIV_DELTA_PROTOCOL */
89727#ifdef FREECIV_JSON_CONNECTION
89728 field_addr.name = "description";
89729#endif /* FREECIV_JSON_CONNECTION */
89730
89731 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
89732 RECEIVE_PACKET_FIELD_ERROR(description);
89733 }
89734#endif /* FREECIV_DELTA_PROTOCOL */
89735
89737#undef FREE_PACKET_STRUCT
89738}
89739
89741{
89742 const struct packet_scenario_description *real_packet = packet;
89743 int e;
89745
89746 log_packet_detailed("packet_scenario_description_100: sending info about ()");
89747
89748#ifdef FREECIV_DELTA_PROTOCOL
89751 bool differ;
89752 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_DESCRIPTION;
89753
89754 if (nullptr == *hash) {
89756 nullptr, nullptr, nullptr, destroy_packet_scenario_description);
89757 }
89758 BV_CLR_ALL(fields);
89759
89760 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89761 old = fc_malloc(sizeof(*old));
89762 /* temporary bitcopy just to insert correctly */
89763 *old = *real_packet;
89766 }
89767
89768 differ = (strcmp(old->description, real_packet->description) != 0);
89769 if (differ) {
89770 BV_SET(fields, 0);
89771 }
89772#endif /* FREECIV_DELTA_PROTOCOL */
89773
89774#ifdef FREECIV_JSON_CONNECTION
89775 struct plocation field_addr;
89776 {
89777 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89780 }
89781#endif /* FREECIV_JSON_CONNECTION */
89782
89783#ifdef FREECIV_DELTA_PROTOCOL
89784#ifdef FREECIV_JSON_CONNECTION
89785 field_addr.name = "fields";
89786#endif /* FREECIV_JSON_CONNECTION */
89787 e = 0;
89788 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89789 if (e) {
89790 log_packet_detailed("fields bitvector error detected");
89791 }
89792
89793 if (BV_ISSET(fields, 0)) {
89794 log_packet_detailed(" field 'description' has changed");
89795
89796#ifdef FREECIV_JSON_CONNECTION
89797 field_addr.name = "description";
89798#endif /* FREECIV_JSON_CONNECTION */
89799 e = 0;
89800
89801 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
89802
89803 if (e) {
89804 log_packet_detailed("'description' field error detected");
89805 }
89806 }
89807
89808 *old = *real_packet;
89809
89810#else /* FREECIV_DELTA_PROTOCOL */
89811#ifdef FREECIV_JSON_CONNECTION
89812 field_addr.name = "description";
89813#endif /* FREECIV_JSON_CONNECTION */
89814 e = 0;
89815
89816 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
89817
89818 if (e) {
89819 log_packet_detailed("'description' field error detected");
89820 }
89821#endif /* FREECIV_DELTA_PROTOCOL */
89822
89824}
89825
89827{
89828 if (!pc->used) {
89829 log_error("WARNING: trying to send data to the closed connection %s",
89831 return -1;
89832 }
89833 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet != nullptr, -1,
89834 "Handler for PACKET_SCENARIO_DESCRIPTION not installed");
89835 return pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet(pc, packet);
89836}
89837
89838static inline void init_packet_save_scenario(struct packet_save_scenario *packet)
89839{
89840 memset(packet, 0, sizeof(*packet));
89841}
89842
89843#define free_packet_save_scenario(_packet) (void) 0
89844#define destroy_packet_save_scenario free
89845
89846#ifdef FREECIV_DELTA_PROTOCOL
89847#define hash_packet_save_scenario_100 hash_const
89848#define cmp_packet_save_scenario_100 cmp_const
89850#endif /* FREECIV_DELTA_PROTOCOL */
89851
89853{
89854#define FREE_PACKET_STRUCT(_packet) free_packet_save_scenario(_packet)
89856
89857#ifdef FREECIV_JSON_CONNECTION
89858 struct plocation field_addr;
89859 {
89860 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89863 }
89864#endif /* FREECIV_JSON_CONNECTION */
89865
89866 log_packet_detailed("packet_save_scenario_100: got info about ()");
89867
89868#ifdef FREECIV_DELTA_PROTOCOL
89870 struct packet_save_scenario *old;
89871 struct genhash **hash = pc->phs.received + PACKET_SAVE_SCENARIO;
89872
89873 if (nullptr == *hash) {
89875 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
89876 }
89877
89878 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89879 *real_packet = *old;
89880 } else {
89881 /* packet is already initialized empty */
89882 log_packet_detailed(" no old info");
89883 }
89884
89885#ifdef FREECIV_JSON_CONNECTION
89886 field_addr.name = "fields";
89887#endif /* FREECIV_JSON_CONNECTION */
89888 DIO_BV_GET(&din, &field_addr, fields);
89889
89890 if (BV_ISSET(fields, 0)) {
89891 log_packet_detailed(" got field 'name'");
89892
89893#ifdef FREECIV_JSON_CONNECTION
89894 field_addr.name = "name";
89895#endif /* FREECIV_JSON_CONNECTION */
89896
89897 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89899 }
89900 }
89901
89902 if (nullptr == old) {
89903 old = fc_malloc(sizeof(*old));
89905 *old = *real_packet;
89907 } else {
89908 *old = *real_packet;
89909 }
89910
89911#else /* FREECIV_DELTA_PROTOCOL */
89912#ifdef FREECIV_JSON_CONNECTION
89913 field_addr.name = "name";
89914#endif /* FREECIV_JSON_CONNECTION */
89915
89916 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
89918 }
89919#endif /* FREECIV_DELTA_PROTOCOL */
89920
89922#undef FREE_PACKET_STRUCT
89923}
89924
89925static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
89926{
89927 const struct packet_save_scenario *real_packet = packet;
89928 int e;
89930
89931 log_packet_detailed("packet_save_scenario_100: sending info about ()");
89932
89933#ifdef FREECIV_DELTA_PROTOCOL
89935 struct packet_save_scenario *old;
89936 bool differ;
89937 struct genhash **hash = pc->phs.sent + PACKET_SAVE_SCENARIO;
89938
89939 if (nullptr == *hash) {
89941 nullptr, nullptr, nullptr, destroy_packet_save_scenario);
89942 }
89943 BV_CLR_ALL(fields);
89944
89945 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89946 old = fc_malloc(sizeof(*old));
89947 /* temporary bitcopy just to insert correctly */
89948 *old = *real_packet;
89951 }
89952
89953 differ = (strcmp(old->name, real_packet->name) != 0);
89954 if (differ) {
89955 BV_SET(fields, 0);
89956 }
89957#endif /* FREECIV_DELTA_PROTOCOL */
89958
89959#ifdef FREECIV_JSON_CONNECTION
89960 struct plocation field_addr;
89961 {
89962 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
89965 }
89966#endif /* FREECIV_JSON_CONNECTION */
89967
89968#ifdef FREECIV_DELTA_PROTOCOL
89969#ifdef FREECIV_JSON_CONNECTION
89970 field_addr.name = "fields";
89971#endif /* FREECIV_JSON_CONNECTION */
89972 e = 0;
89973 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89974 if (e) {
89975 log_packet_detailed("fields bitvector error detected");
89976 }
89977
89978 if (BV_ISSET(fields, 0)) {
89979 log_packet_detailed(" field 'name' has changed");
89980
89981#ifdef FREECIV_JSON_CONNECTION
89982 field_addr.name = "name";
89983#endif /* FREECIV_JSON_CONNECTION */
89984 e = 0;
89985
89986 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
89987
89988 if (e) {
89989 log_packet_detailed("'name' field error detected");
89990 }
89991 }
89992
89993 *old = *real_packet;
89994
89995#else /* FREECIV_DELTA_PROTOCOL */
89996#ifdef FREECIV_JSON_CONNECTION
89997 field_addr.name = "name";
89998#endif /* FREECIV_JSON_CONNECTION */
89999 e = 0;
90000
90001 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
90002
90003 if (e) {
90004 log_packet_detailed("'name' field error detected");
90005 }
90006#endif /* FREECIV_DELTA_PROTOCOL */
90007
90009}
90010
90012{
90013 if (!pc->used) {
90014 log_error("WARNING: trying to send data to the closed connection %s",
90016 return -1;
90017 }
90018 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet != nullptr, -1,
90019 "Handler for PACKET_SAVE_SCENARIO not installed");
90020 return pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet(pc, packet);
90021}
90022
90024{
90025 struct packet_save_scenario packet, *real_packet = &packet;
90026
90027 sz_strlcpy(real_packet->name, name);
90028
90030}
90031
90032static inline void init_packet_vote_new(struct packet_vote_new *packet)
90033{
90034 memset(packet, 0, sizeof(*packet));
90035}
90036
90037#define free_packet_vote_new(_packet) (void) 0
90038#define destroy_packet_vote_new free
90039
90040#ifdef FREECIV_DELTA_PROTOCOL
90041#define hash_packet_vote_new_100 hash_const
90042#define cmp_packet_vote_new_100 cmp_const
90044#endif /* FREECIV_DELTA_PROTOCOL */
90045
90047{
90048#define FREE_PACKET_STRUCT(_packet) free_packet_vote_new(_packet)
90050
90051#ifdef FREECIV_JSON_CONNECTION
90052 struct plocation field_addr;
90053 {
90054 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90057 }
90058#endif /* FREECIV_JSON_CONNECTION */
90059
90060 log_packet_detailed("packet_vote_new_100: got info about ()");
90061
90062#ifdef FREECIV_DELTA_PROTOCOL
90064 struct packet_vote_new *old;
90065 struct genhash **hash = pc->phs.received + PACKET_VOTE_NEW;
90066
90067 if (nullptr == *hash) {
90069 nullptr, nullptr, nullptr, destroy_packet_vote_new);
90070 }
90071
90072 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90073 *real_packet = *old;
90074 } else {
90075 /* packet is already initialized empty */
90076 log_packet_detailed(" no old info");
90077 }
90078
90079#ifdef FREECIV_JSON_CONNECTION
90080 field_addr.name = "fields";
90081#endif /* FREECIV_JSON_CONNECTION */
90082 DIO_BV_GET(&din, &field_addr, fields);
90083
90084 if (BV_ISSET(fields, 0)) {
90085 log_packet_detailed(" got field 'vote_no'");
90086
90087#ifdef FREECIV_JSON_CONNECTION
90088 field_addr.name = "vote_no";
90089#endif /* FREECIV_JSON_CONNECTION */
90090
90091 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90093 }
90094 }
90095
90096 if (BV_ISSET(fields, 1)) {
90097 log_packet_detailed(" got field 'user'");
90098
90099#ifdef FREECIV_JSON_CONNECTION
90100 field_addr.name = "user";
90101#endif /* FREECIV_JSON_CONNECTION */
90102
90103 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90105 }
90106 }
90107
90108 if (BV_ISSET(fields, 2)) {
90109 log_packet_detailed(" got field 'desc'");
90110
90111#ifdef FREECIV_JSON_CONNECTION
90112 field_addr.name = "desc";
90113#endif /* FREECIV_JSON_CONNECTION */
90114
90115 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90117 }
90118 }
90119
90120 if (BV_ISSET(fields, 3)) {
90121 log_packet_detailed(" got field 'percent_required'");
90122
90123#ifdef FREECIV_JSON_CONNECTION
90124 field_addr.name = "percent_required";
90125#endif /* FREECIV_JSON_CONNECTION */
90126
90127 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
90128 RECEIVE_PACKET_FIELD_ERROR(percent_required);
90129 }
90130 }
90131
90132 if (BV_ISSET(fields, 4)) {
90133 log_packet_detailed(" got field 'flags'");
90134
90135#ifdef FREECIV_JSON_CONNECTION
90136 field_addr.name = "flags";
90137#endif /* FREECIV_JSON_CONNECTION */
90138
90139 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
90141 }
90142 }
90143
90144 if (nullptr == old) {
90145 old = fc_malloc(sizeof(*old));
90147 *old = *real_packet;
90149 } else {
90150 *old = *real_packet;
90151 }
90152
90153#else /* FREECIV_DELTA_PROTOCOL */
90154#ifdef FREECIV_JSON_CONNECTION
90155 field_addr.name = "vote_no";
90156#endif /* FREECIV_JSON_CONNECTION */
90157
90158 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90160 }
90161
90162#ifdef FREECIV_JSON_CONNECTION
90163 field_addr.name = "user";
90164#endif /* FREECIV_JSON_CONNECTION */
90165
90166 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
90168 }
90169
90170#ifdef FREECIV_JSON_CONNECTION
90171 field_addr.name = "desc";
90172#endif /* FREECIV_JSON_CONNECTION */
90173
90174 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
90176 }
90177
90178#ifdef FREECIV_JSON_CONNECTION
90179 field_addr.name = "percent_required";
90180#endif /* FREECIV_JSON_CONNECTION */
90181
90182 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
90183 RECEIVE_PACKET_FIELD_ERROR(percent_required);
90184 }
90185
90186#ifdef FREECIV_JSON_CONNECTION
90187 field_addr.name = "flags";
90188#endif /* FREECIV_JSON_CONNECTION */
90189
90190 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
90192 }
90193#endif /* FREECIV_DELTA_PROTOCOL */
90194
90196#undef FREE_PACKET_STRUCT
90197}
90198
90199static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
90200{
90201 const struct packet_vote_new *real_packet = packet;
90202 int e;
90204
90205 log_packet_detailed("packet_vote_new_100: sending info about ()");
90206
90207#ifdef FREECIV_DELTA_PROTOCOL
90209 struct packet_vote_new *old;
90210 bool differ;
90211 struct genhash **hash = pc->phs.sent + PACKET_VOTE_NEW;
90212
90213 if (nullptr == *hash) {
90215 nullptr, nullptr, nullptr, destroy_packet_vote_new);
90216 }
90217 BV_CLR_ALL(fields);
90218
90219 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90220 old = fc_malloc(sizeof(*old));
90221 /* temporary bitcopy just to insert correctly */
90222 *old = *real_packet;
90225 }
90226
90227 differ = (old->vote_no != real_packet->vote_no);
90228 if (differ) {
90229 BV_SET(fields, 0);
90230 }
90231
90232 differ = (strcmp(old->user, real_packet->user) != 0);
90233 if (differ) {
90234 BV_SET(fields, 1);
90235 }
90236
90237 differ = (strcmp(old->desc, real_packet->desc) != 0);
90238 if (differ) {
90239 BV_SET(fields, 2);
90240 }
90241
90242 differ = (old->percent_required != real_packet->percent_required);
90243 if (differ) {
90244 BV_SET(fields, 3);
90245 }
90246
90247 differ = (old->flags != real_packet->flags);
90248 if (differ) {
90249 BV_SET(fields, 4);
90250 }
90251#endif /* FREECIV_DELTA_PROTOCOL */
90252
90253#ifdef FREECIV_JSON_CONNECTION
90254 struct plocation field_addr;
90255 {
90256 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90259 }
90260#endif /* FREECIV_JSON_CONNECTION */
90261
90262#ifdef FREECIV_DELTA_PROTOCOL
90263#ifdef FREECIV_JSON_CONNECTION
90264 field_addr.name = "fields";
90265#endif /* FREECIV_JSON_CONNECTION */
90266 e = 0;
90267 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90268 if (e) {
90269 log_packet_detailed("fields bitvector error detected");
90270 }
90271
90272 if (BV_ISSET(fields, 0)) {
90273 log_packet_detailed(" field 'vote_no' has changed");
90274
90275#ifdef FREECIV_JSON_CONNECTION
90276 field_addr.name = "vote_no";
90277#endif /* FREECIV_JSON_CONNECTION */
90278 e = 0;
90279
90280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90281
90282 if (e) {
90283 log_packet_detailed("'vote_no' field error detected");
90284 }
90285 }
90286
90287 if (BV_ISSET(fields, 1)) {
90288 log_packet_detailed(" field 'user' has changed");
90289
90290#ifdef FREECIV_JSON_CONNECTION
90291 field_addr.name = "user";
90292#endif /* FREECIV_JSON_CONNECTION */
90293 e = 0;
90294
90295 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
90296
90297 if (e) {
90298 log_packet_detailed("'user' field error detected");
90299 }
90300 }
90301
90302 if (BV_ISSET(fields, 2)) {
90303 log_packet_detailed(" field 'desc' has changed");
90304
90305#ifdef FREECIV_JSON_CONNECTION
90306 field_addr.name = "desc";
90307#endif /* FREECIV_JSON_CONNECTION */
90308 e = 0;
90309
90310 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
90311
90312 if (e) {
90313 log_packet_detailed("'desc' field error detected");
90314 }
90315 }
90316
90317 if (BV_ISSET(fields, 3)) {
90318 log_packet_detailed(" field 'percent_required' has changed");
90319
90320#ifdef FREECIV_JSON_CONNECTION
90321 field_addr.name = "percent_required";
90322#endif /* FREECIV_JSON_CONNECTION */
90323 e = 0;
90324
90325 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
90326
90327 if (e) {
90328 log_packet_detailed("'percent_required' field error detected");
90329 }
90330 }
90331
90332 if (BV_ISSET(fields, 4)) {
90333 log_packet_detailed(" field 'flags' has changed");
90334
90335#ifdef FREECIV_JSON_CONNECTION
90336 field_addr.name = "flags";
90337#endif /* FREECIV_JSON_CONNECTION */
90338 e = 0;
90339
90340 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
90341
90342 if (e) {
90343 log_packet_detailed("'flags' field error detected");
90344 }
90345 }
90346
90347 *old = *real_packet;
90348
90349#else /* FREECIV_DELTA_PROTOCOL */
90350#ifdef FREECIV_JSON_CONNECTION
90351 field_addr.name = "vote_no";
90352#endif /* FREECIV_JSON_CONNECTION */
90353 e = 0;
90354
90355 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90356
90357 if (e) {
90358 log_packet_detailed("'vote_no' field error detected");
90359 }
90360
90361#ifdef FREECIV_JSON_CONNECTION
90362 field_addr.name = "user";
90363#endif /* FREECIV_JSON_CONNECTION */
90364 e = 0;
90365
90366 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
90367
90368 if (e) {
90369 log_packet_detailed("'user' field error detected");
90370 }
90371
90372#ifdef FREECIV_JSON_CONNECTION
90373 field_addr.name = "desc";
90374#endif /* FREECIV_JSON_CONNECTION */
90375 e = 0;
90376
90377 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
90378
90379 if (e) {
90380 log_packet_detailed("'desc' field error detected");
90381 }
90382
90383#ifdef FREECIV_JSON_CONNECTION
90384 field_addr.name = "percent_required";
90385#endif /* FREECIV_JSON_CONNECTION */
90386 e = 0;
90387
90388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
90389
90390 if (e) {
90391 log_packet_detailed("'percent_required' field error detected");
90392 }
90393
90394#ifdef FREECIV_JSON_CONNECTION
90395 field_addr.name = "flags";
90396#endif /* FREECIV_JSON_CONNECTION */
90397 e = 0;
90398
90399 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
90400
90401 if (e) {
90402 log_packet_detailed("'flags' field error detected");
90403 }
90404#endif /* FREECIV_DELTA_PROTOCOL */
90405
90407}
90408
90409int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
90410{
90411 if (!pc->used) {
90412 log_error("WARNING: trying to send data to the closed connection %s",
90414 return -1;
90415 }
90416 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_NEW].packet != nullptr, -1,
90417 "Handler for PACKET_VOTE_NEW not installed");
90418 return pc->phs.handlers->send[PACKET_VOTE_NEW].packet(pc, packet);
90419}
90420
90421static inline void init_packet_vote_update(struct packet_vote_update *packet)
90422{
90423 memset(packet, 0, sizeof(*packet));
90424}
90425
90426#define free_packet_vote_update(_packet) (void) 0
90427#define destroy_packet_vote_update free
90428
90429#ifdef FREECIV_DELTA_PROTOCOL
90431{
90432 const struct packet_vote_update *key = (const struct packet_vote_update *) vkey;
90433 genhash_val_t result = 0;
90434
90435 result += key->vote_no;
90436
90437 result &= 0xFFFFFFFF;
90438 return result;
90439}
90440
90441static bool cmp_packet_vote_update_100(const void *vkey1, const void *vkey2)
90442{
90443 const struct packet_vote_update *old = (const struct packet_vote_update *) vkey1;
90444 const struct packet_vote_update *real_packet = (const struct packet_vote_update *) vkey2;
90445 bool differ;
90446
90447 differ = (old->vote_no != real_packet->vote_no);
90448
90449 return !differ;
90450}
90452#endif /* FREECIV_DELTA_PROTOCOL */
90453
90455{
90456#define FREE_PACKET_STRUCT(_packet) free_packet_vote_update(_packet)
90458
90459#ifdef FREECIV_JSON_CONNECTION
90460 struct plocation field_addr;
90461 {
90462 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90465 }
90466#endif /* FREECIV_JSON_CONNECTION */
90467
90468#ifdef FREECIV_JSON_CONNECTION
90469 field_addr.name = "vote_no";
90470#endif /* FREECIV_JSON_CONNECTION */
90471
90472 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90474 }
90475
90476 log_packet_detailed("packet_vote_update_100: got info about (%d)",
90477 real_packet->vote_no);
90478
90479#ifdef FREECIV_DELTA_PROTOCOL
90481 struct packet_vote_update *old;
90482 struct genhash **hash = pc->phs.received + PACKET_VOTE_UPDATE;
90483
90484 if (nullptr == *hash) {
90486 nullptr, nullptr, nullptr, destroy_packet_vote_update);
90487 }
90488
90489 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90490 *real_packet = *old;
90491 } else {
90492 /* packet is already initialized empty */
90493 log_packet_detailed(" no old info");
90494 }
90495
90496#ifdef FREECIV_JSON_CONNECTION
90497 field_addr.name = "fields";
90498#endif /* FREECIV_JSON_CONNECTION */
90499 DIO_BV_GET(&din, &field_addr, fields);
90500
90501 if (BV_ISSET(fields, 0)) {
90502 log_packet_detailed(" got field 'yes'");
90503
90504#ifdef FREECIV_JSON_CONNECTION
90505 field_addr.name = "yes";
90506#endif /* FREECIV_JSON_CONNECTION */
90507
90508 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
90510 }
90511 }
90512
90513 if (BV_ISSET(fields, 1)) {
90514 log_packet_detailed(" got field 'no'");
90515
90516#ifdef FREECIV_JSON_CONNECTION
90517 field_addr.name = "no";
90518#endif /* FREECIV_JSON_CONNECTION */
90519
90520 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
90522 }
90523 }
90524
90525 if (BV_ISSET(fields, 2)) {
90526 log_packet_detailed(" got field 'abstain'");
90527
90528#ifdef FREECIV_JSON_CONNECTION
90529 field_addr.name = "abstain";
90530#endif /* FREECIV_JSON_CONNECTION */
90531
90532 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
90534 }
90535 }
90536
90537 if (BV_ISSET(fields, 3)) {
90538 log_packet_detailed(" got field 'num_voters'");
90539
90540#ifdef FREECIV_JSON_CONNECTION
90541 field_addr.name = "num_voters";
90542#endif /* FREECIV_JSON_CONNECTION */
90543
90544 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
90545 RECEIVE_PACKET_FIELD_ERROR(num_voters);
90546 }
90547 }
90548
90549 if (nullptr == old) {
90550 old = fc_malloc(sizeof(*old));
90552 *old = *real_packet;
90554 } else {
90555 *old = *real_packet;
90556 }
90557
90558#else /* FREECIV_DELTA_PROTOCOL */
90559#ifdef FREECIV_JSON_CONNECTION
90560 field_addr.name = "yes";
90561#endif /* FREECIV_JSON_CONNECTION */
90562
90563 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
90565 }
90566
90567#ifdef FREECIV_JSON_CONNECTION
90568 field_addr.name = "no";
90569#endif /* FREECIV_JSON_CONNECTION */
90570
90571 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
90573 }
90574
90575#ifdef FREECIV_JSON_CONNECTION
90576 field_addr.name = "abstain";
90577#endif /* FREECIV_JSON_CONNECTION */
90578
90579 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
90581 }
90582
90583#ifdef FREECIV_JSON_CONNECTION
90584 field_addr.name = "num_voters";
90585#endif /* FREECIV_JSON_CONNECTION */
90586
90587 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
90588 RECEIVE_PACKET_FIELD_ERROR(num_voters);
90589 }
90590#endif /* FREECIV_DELTA_PROTOCOL */
90591
90593#undef FREE_PACKET_STRUCT
90594}
90595
90596static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
90597{
90598 const struct packet_vote_update *real_packet = packet;
90599 int e;
90601
90602 log_packet_detailed("packet_vote_update_100: sending info about (%d)",
90603 real_packet->vote_no);
90604
90605#ifdef FREECIV_DELTA_PROTOCOL
90607 struct packet_vote_update *old;
90608 bool differ;
90609 int different = 0;
90610 struct genhash **hash = pc->phs.sent + PACKET_VOTE_UPDATE;
90611
90612 if (nullptr == *hash) {
90614 nullptr, nullptr, nullptr, destroy_packet_vote_update);
90615 }
90616 BV_CLR_ALL(fields);
90617
90618 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90619 old = fc_malloc(sizeof(*old));
90620 /* temporary bitcopy just to insert correctly */
90621 *old = *real_packet;
90624 different = 1; /* Force to send. */
90625 }
90626
90627 differ = (old->yes != real_packet->yes);
90628 if (differ) {
90629 different++;
90630 BV_SET(fields, 0);
90631 }
90632
90633 differ = (old->no != real_packet->no);
90634 if (differ) {
90635 different++;
90636 BV_SET(fields, 1);
90637 }
90638
90639 differ = (old->abstain != real_packet->abstain);
90640 if (differ) {
90641 different++;
90642 BV_SET(fields, 2);
90643 }
90644
90645 differ = (old->num_voters != real_packet->num_voters);
90646 if (differ) {
90647 different++;
90648 BV_SET(fields, 3);
90649 }
90650
90651 if (different == 0) {
90652 log_packet_detailed(" no change -> discard");
90654 }
90655#endif /* FREECIV_DELTA_PROTOCOL */
90656
90657#ifdef FREECIV_JSON_CONNECTION
90658 struct plocation field_addr;
90659 {
90660 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90663 }
90664#endif /* FREECIV_JSON_CONNECTION */
90665
90666#ifdef FREECIV_JSON_CONNECTION
90667 field_addr.name = "vote_no";
90668#endif /* FREECIV_JSON_CONNECTION */
90669 e = 0;
90670
90671 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90672
90673 if (e) {
90674 log_packet_detailed("'vote_no' field error detected");
90675 }
90676
90677#ifdef FREECIV_DELTA_PROTOCOL
90678#ifdef FREECIV_JSON_CONNECTION
90679 field_addr.name = "fields";
90680#endif /* FREECIV_JSON_CONNECTION */
90681 e = 0;
90682 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90683 if (e) {
90684 log_packet_detailed("fields bitvector error detected");
90685 }
90686
90687 if (BV_ISSET(fields, 0)) {
90688 log_packet_detailed(" field 'yes' has changed");
90689
90690#ifdef FREECIV_JSON_CONNECTION
90691 field_addr.name = "yes";
90692#endif /* FREECIV_JSON_CONNECTION */
90693 e = 0;
90694
90695 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
90696
90697 if (e) {
90698 log_packet_detailed("'yes' field error detected");
90699 }
90700 }
90701
90702 if (BV_ISSET(fields, 1)) {
90703 log_packet_detailed(" field 'no' has changed");
90704
90705#ifdef FREECIV_JSON_CONNECTION
90706 field_addr.name = "no";
90707#endif /* FREECIV_JSON_CONNECTION */
90708 e = 0;
90709
90710 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
90711
90712 if (e) {
90713 log_packet_detailed("'no' field error detected");
90714 }
90715 }
90716
90717 if (BV_ISSET(fields, 2)) {
90718 log_packet_detailed(" field 'abstain' has changed");
90719
90720#ifdef FREECIV_JSON_CONNECTION
90721 field_addr.name = "abstain";
90722#endif /* FREECIV_JSON_CONNECTION */
90723 e = 0;
90724
90725 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
90726
90727 if (e) {
90728 log_packet_detailed("'abstain' field error detected");
90729 }
90730 }
90731
90732 if (BV_ISSET(fields, 3)) {
90733 log_packet_detailed(" field 'num_voters' has changed");
90734
90735#ifdef FREECIV_JSON_CONNECTION
90736 field_addr.name = "num_voters";
90737#endif /* FREECIV_JSON_CONNECTION */
90738 e = 0;
90739
90740 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
90741
90742 if (e) {
90743 log_packet_detailed("'num_voters' field error detected");
90744 }
90745 }
90746
90747 *old = *real_packet;
90748
90749#else /* FREECIV_DELTA_PROTOCOL */
90750#ifdef FREECIV_JSON_CONNECTION
90751 field_addr.name = "yes";
90752#endif /* FREECIV_JSON_CONNECTION */
90753 e = 0;
90754
90755 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
90756
90757 if (e) {
90758 log_packet_detailed("'yes' field error detected");
90759 }
90760
90761#ifdef FREECIV_JSON_CONNECTION
90762 field_addr.name = "no";
90763#endif /* FREECIV_JSON_CONNECTION */
90764 e = 0;
90765
90766 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
90767
90768 if (e) {
90769 log_packet_detailed("'no' field error detected");
90770 }
90771
90772#ifdef FREECIV_JSON_CONNECTION
90773 field_addr.name = "abstain";
90774#endif /* FREECIV_JSON_CONNECTION */
90775 e = 0;
90776
90777 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
90778
90779 if (e) {
90780 log_packet_detailed("'abstain' field error detected");
90781 }
90782
90783#ifdef FREECIV_JSON_CONNECTION
90784 field_addr.name = "num_voters";
90785#endif /* FREECIV_JSON_CONNECTION */
90786 e = 0;
90787
90788 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
90789
90790 if (e) {
90791 log_packet_detailed("'num_voters' field error detected");
90792 }
90793#endif /* FREECIV_DELTA_PROTOCOL */
90794
90796}
90797
90799{
90800 if (!pc->used) {
90801 log_error("WARNING: trying to send data to the closed connection %s",
90803 return -1;
90804 }
90805 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet != nullptr, -1,
90806 "Handler for PACKET_VOTE_UPDATE not installed");
90807 return pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet(pc, packet);
90808}
90809
90810static inline void init_packet_vote_remove(struct packet_vote_remove *packet)
90811{
90812 memset(packet, 0, sizeof(*packet));
90813}
90814
90815#define free_packet_vote_remove(_packet) (void) 0
90816#define destroy_packet_vote_remove free
90817
90818#ifdef FREECIV_DELTA_PROTOCOL
90819#define hash_packet_vote_remove_100 hash_const
90820#define cmp_packet_vote_remove_100 cmp_const
90822#endif /* FREECIV_DELTA_PROTOCOL */
90823
90825{
90826#define FREE_PACKET_STRUCT(_packet) free_packet_vote_remove(_packet)
90828
90829#ifdef FREECIV_JSON_CONNECTION
90830 struct plocation field_addr;
90831 {
90832 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90835 }
90836#endif /* FREECIV_JSON_CONNECTION */
90837
90838 log_packet_detailed("packet_vote_remove_100: got info about ()");
90839
90840#ifdef FREECIV_DELTA_PROTOCOL
90842 struct packet_vote_remove *old;
90843 struct genhash **hash = pc->phs.received + PACKET_VOTE_REMOVE;
90844
90845 if (nullptr == *hash) {
90847 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
90848 }
90849
90850 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90851 *real_packet = *old;
90852 } else {
90853 /* packet is already initialized empty */
90854 log_packet_detailed(" no old info");
90855 }
90856
90857#ifdef FREECIV_JSON_CONNECTION
90858 field_addr.name = "fields";
90859#endif /* FREECIV_JSON_CONNECTION */
90860 DIO_BV_GET(&din, &field_addr, fields);
90861
90862 if (BV_ISSET(fields, 0)) {
90863 log_packet_detailed(" got field 'vote_no'");
90864
90865#ifdef FREECIV_JSON_CONNECTION
90866 field_addr.name = "vote_no";
90867#endif /* FREECIV_JSON_CONNECTION */
90868
90869 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90871 }
90872 }
90873
90874 if (nullptr == old) {
90875 old = fc_malloc(sizeof(*old));
90877 *old = *real_packet;
90879 } else {
90880 *old = *real_packet;
90881 }
90882
90883#else /* FREECIV_DELTA_PROTOCOL */
90884#ifdef FREECIV_JSON_CONNECTION
90885 field_addr.name = "vote_no";
90886#endif /* FREECIV_JSON_CONNECTION */
90887
90888 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
90890 }
90891#endif /* FREECIV_DELTA_PROTOCOL */
90892
90894#undef FREE_PACKET_STRUCT
90895}
90896
90897static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
90898{
90899 const struct packet_vote_remove *real_packet = packet;
90900 int e;
90902
90903 log_packet_detailed("packet_vote_remove_100: sending info about ()");
90904
90905#ifdef FREECIV_DELTA_PROTOCOL
90907 struct packet_vote_remove *old;
90908 bool differ;
90909 struct genhash **hash = pc->phs.sent + PACKET_VOTE_REMOVE;
90910
90911 if (nullptr == *hash) {
90913 nullptr, nullptr, nullptr, destroy_packet_vote_remove);
90914 }
90915 BV_CLR_ALL(fields);
90916
90917 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90918 old = fc_malloc(sizeof(*old));
90919 /* temporary bitcopy just to insert correctly */
90920 *old = *real_packet;
90923 }
90924
90925 differ = (old->vote_no != real_packet->vote_no);
90926 if (differ) {
90927 BV_SET(fields, 0);
90928 }
90929#endif /* FREECIV_DELTA_PROTOCOL */
90930
90931#ifdef FREECIV_JSON_CONNECTION
90932 struct plocation field_addr;
90933 {
90934 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
90937 }
90938#endif /* FREECIV_JSON_CONNECTION */
90939
90940#ifdef FREECIV_DELTA_PROTOCOL
90941#ifdef FREECIV_JSON_CONNECTION
90942 field_addr.name = "fields";
90943#endif /* FREECIV_JSON_CONNECTION */
90944 e = 0;
90945 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90946 if (e) {
90947 log_packet_detailed("fields bitvector error detected");
90948 }
90949
90950 if (BV_ISSET(fields, 0)) {
90951 log_packet_detailed(" field 'vote_no' has changed");
90952
90953#ifdef FREECIV_JSON_CONNECTION
90954 field_addr.name = "vote_no";
90955#endif /* FREECIV_JSON_CONNECTION */
90956 e = 0;
90957
90958 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90959
90960 if (e) {
90961 log_packet_detailed("'vote_no' field error detected");
90962 }
90963 }
90964
90965 *old = *real_packet;
90966
90967#else /* FREECIV_DELTA_PROTOCOL */
90968#ifdef FREECIV_JSON_CONNECTION
90969 field_addr.name = "vote_no";
90970#endif /* FREECIV_JSON_CONNECTION */
90971 e = 0;
90972
90973 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
90974
90975 if (e) {
90976 log_packet_detailed("'vote_no' field error detected");
90977 }
90978#endif /* FREECIV_DELTA_PROTOCOL */
90979
90981}
90982
90984{
90985 if (!pc->used) {
90986 log_error("WARNING: trying to send data to the closed connection %s",
90988 return -1;
90989 }
90990 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet != nullptr, -1,
90991 "Handler for PACKET_VOTE_REMOVE not installed");
90992 return pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet(pc, packet);
90993}
90994
90995static inline void init_packet_vote_resolve(struct packet_vote_resolve *packet)
90996{
90997 memset(packet, 0, sizeof(*packet));
90998}
90999
91000#define free_packet_vote_resolve(_packet) (void) 0
91001#define destroy_packet_vote_resolve free
91002
91003#ifdef FREECIV_DELTA_PROTOCOL
91004#define hash_packet_vote_resolve_100 hash_const
91005#define cmp_packet_vote_resolve_100 cmp_const
91007#endif /* FREECIV_DELTA_PROTOCOL */
91008
91010{
91011#define FREE_PACKET_STRUCT(_packet) free_packet_vote_resolve(_packet)
91013
91014#ifdef FREECIV_JSON_CONNECTION
91015 struct plocation field_addr;
91016 {
91017 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91020 }
91021#endif /* FREECIV_JSON_CONNECTION */
91022
91023 log_packet_detailed("packet_vote_resolve_100: got info about ()");
91024
91025#ifdef FREECIV_DELTA_PROTOCOL
91027 struct packet_vote_resolve *old;
91028 struct genhash **hash = pc->phs.received + PACKET_VOTE_RESOLVE;
91029
91030 if (nullptr == *hash) {
91032 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
91033 }
91034
91035 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91036 *real_packet = *old;
91037 } else {
91038 /* packet is already initialized empty */
91039 log_packet_detailed(" no old info");
91040 }
91041
91042#ifdef FREECIV_JSON_CONNECTION
91043 field_addr.name = "fields";
91044#endif /* FREECIV_JSON_CONNECTION */
91045 DIO_BV_GET(&din, &field_addr, fields);
91046
91047 if (BV_ISSET(fields, 0)) {
91048 log_packet_detailed(" got field 'vote_no'");
91049
91050#ifdef FREECIV_JSON_CONNECTION
91051 field_addr.name = "vote_no";
91052#endif /* FREECIV_JSON_CONNECTION */
91053
91054 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91056 }
91057 }
91058
91059 real_packet->passed = BV_ISSET(fields, 1);
91060
91061 if (nullptr == old) {
91062 old = fc_malloc(sizeof(*old));
91064 *old = *real_packet;
91066 } else {
91067 *old = *real_packet;
91068 }
91069
91070#else /* FREECIV_DELTA_PROTOCOL */
91071#ifdef FREECIV_JSON_CONNECTION
91072 field_addr.name = "vote_no";
91073#endif /* FREECIV_JSON_CONNECTION */
91074
91075 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91077 }
91078
91079#ifdef FREECIV_JSON_CONNECTION
91080 field_addr.name = "passed";
91081#endif /* FREECIV_JSON_CONNECTION */
91082
91083 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->passed)) {
91085 }
91086#endif /* FREECIV_DELTA_PROTOCOL */
91087
91089#undef FREE_PACKET_STRUCT
91090}
91091
91092static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
91093{
91094 const struct packet_vote_resolve *real_packet = packet;
91095 int e;
91097
91098 log_packet_detailed("packet_vote_resolve_100: sending info about ()");
91099
91100#ifdef FREECIV_DELTA_PROTOCOL
91102 struct packet_vote_resolve *old;
91103 bool differ;
91104 struct genhash **hash = pc->phs.sent + PACKET_VOTE_RESOLVE;
91105
91106 if (nullptr == *hash) {
91108 nullptr, nullptr, nullptr, destroy_packet_vote_resolve);
91109 }
91110 BV_CLR_ALL(fields);
91111
91112 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91113 old = fc_malloc(sizeof(*old));
91114 /* temporary bitcopy just to insert correctly */
91115 *old = *real_packet;
91118 }
91119
91120 differ = (old->vote_no != real_packet->vote_no);
91121 if (differ) {
91122 BV_SET(fields, 0);
91123 }
91124
91125 /* folded into head */
91126 if (real_packet->passed) {
91127 BV_SET(fields, 1);
91128 }
91129#endif /* FREECIV_DELTA_PROTOCOL */
91130
91131#ifdef FREECIV_JSON_CONNECTION
91132 struct plocation field_addr;
91133 {
91134 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91137 }
91138#endif /* FREECIV_JSON_CONNECTION */
91139
91140#ifdef FREECIV_DELTA_PROTOCOL
91141#ifdef FREECIV_JSON_CONNECTION
91142 field_addr.name = "fields";
91143#endif /* FREECIV_JSON_CONNECTION */
91144 e = 0;
91145 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91146 if (e) {
91147 log_packet_detailed("fields bitvector error detected");
91148 }
91149
91150 if (BV_ISSET(fields, 0)) {
91151 log_packet_detailed(" field 'vote_no' has changed");
91152
91153#ifdef FREECIV_JSON_CONNECTION
91154 field_addr.name = "vote_no";
91155#endif /* FREECIV_JSON_CONNECTION */
91156 e = 0;
91157
91158 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91159
91160 if (e) {
91161 log_packet_detailed("'vote_no' field error detected");
91162 }
91163 }
91164
91165 /* field 1 is folded into the header */
91166
91167 *old = *real_packet;
91168
91169#else /* FREECIV_DELTA_PROTOCOL */
91170#ifdef FREECIV_JSON_CONNECTION
91171 field_addr.name = "vote_no";
91172#endif /* FREECIV_JSON_CONNECTION */
91173 e = 0;
91174
91175 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91176
91177 if (e) {
91178 log_packet_detailed("'vote_no' field error detected");
91179 }
91180
91181#ifdef FREECIV_JSON_CONNECTION
91182 field_addr.name = "passed";
91183#endif /* FREECIV_JSON_CONNECTION */
91184 e = 0;
91185
91186 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->passed);
91187
91188 if (e) {
91189 log_packet_detailed("'passed' field error detected");
91190 }
91191#endif /* FREECIV_DELTA_PROTOCOL */
91192
91194}
91195
91197{
91198 if (!pc->used) {
91199 log_error("WARNING: trying to send data to the closed connection %s",
91201 return -1;
91202 }
91203 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet != nullptr, -1,
91204 "Handler for PACKET_VOTE_RESOLVE not installed");
91205 return pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet(pc, packet);
91206}
91207
91208static inline void init_packet_vote_submit(struct packet_vote_submit *packet)
91209{
91210 memset(packet, 0, sizeof(*packet));
91211}
91212
91213#define free_packet_vote_submit(_packet) (void) 0
91214#define destroy_packet_vote_submit free
91215
91217{
91218#define FREE_PACKET_STRUCT(_packet) free_packet_vote_submit(_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_vote_submit_100: got info about ()");
91231
91232#ifdef FREECIV_JSON_CONNECTION
91233 field_addr.name = "vote_no";
91234#endif /* FREECIV_JSON_CONNECTION */
91235
91236 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
91238 }
91239
91240#ifdef FREECIV_JSON_CONNECTION
91241 field_addr.name = "value";
91242#endif /* FREECIV_JSON_CONNECTION */
91243
91244 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->value)) {
91246 }
91247
91249#undef FREE_PACKET_STRUCT
91250}
91251
91252static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
91253{
91254 const struct packet_vote_submit *real_packet = packet;
91255 int e;
91257
91258 log_packet_detailed("packet_vote_submit_100: sending info about ()");
91259
91260#ifdef FREECIV_JSON_CONNECTION
91261 struct plocation field_addr;
91262 {
91263 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91266 }
91267#endif /* FREECIV_JSON_CONNECTION */
91268
91269#ifdef FREECIV_JSON_CONNECTION
91270 field_addr.name = "vote_no";
91271#endif /* FREECIV_JSON_CONNECTION */
91272 e = 0;
91273
91274 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
91275
91276 if (e) {
91277 log_packet_detailed("'vote_no' field error detected");
91278 }
91279
91280#ifdef FREECIV_JSON_CONNECTION
91281 field_addr.name = "value";
91282#endif /* FREECIV_JSON_CONNECTION */
91283 e = 0;
91284
91285 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->value);
91286
91287 if (e) {
91288 log_packet_detailed("'value' field error detected");
91289 }
91290
91292}
91293
91295{
91296 if (!pc->used) {
91297 log_error("WARNING: trying to send data to the closed connection %s",
91299 return -1;
91300 }
91301 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet != nullptr, -1,
91302 "Handler for PACKET_VOTE_SUBMIT not installed");
91303 return pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet(pc, packet);
91304}
91305
91306static inline void init_packet_edit_mode(struct packet_edit_mode *packet)
91307{
91308 memset(packet, 0, sizeof(*packet));
91309}
91310
91311#define free_packet_edit_mode(_packet) (void) 0
91312#define destroy_packet_edit_mode free
91313
91314#ifdef FREECIV_DELTA_PROTOCOL
91315#define hash_packet_edit_mode_100 hash_const
91316#define cmp_packet_edit_mode_100 cmp_const
91318#endif /* FREECIV_DELTA_PROTOCOL */
91319
91321{
91322#define FREE_PACKET_STRUCT(_packet) free_packet_edit_mode(_packet)
91324
91325#ifdef FREECIV_JSON_CONNECTION
91326 struct plocation field_addr;
91327 {
91328 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91331 }
91332#endif /* FREECIV_JSON_CONNECTION */
91333
91334 log_packet_detailed("packet_edit_mode_100: got info about ()");
91335
91336#ifdef FREECIV_DELTA_PROTOCOL
91338 struct packet_edit_mode *old;
91339 struct genhash **hash = pc->phs.received + PACKET_EDIT_MODE;
91340
91341 if (nullptr == *hash) {
91343 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
91344 }
91345
91346 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91347 *real_packet = *old;
91348 } else {
91349 /* packet is already initialized empty */
91350 log_packet_detailed(" no old info");
91351 }
91352
91353#ifdef FREECIV_JSON_CONNECTION
91354 field_addr.name = "fields";
91355#endif /* FREECIV_JSON_CONNECTION */
91356 DIO_BV_GET(&din, &field_addr, fields);
91357
91358 real_packet->state = BV_ISSET(fields, 0);
91359
91360 if (nullptr == old) {
91361 old = fc_malloc(sizeof(*old));
91363 *old = *real_packet;
91365 } else {
91366 *old = *real_packet;
91367 }
91368
91369#else /* FREECIV_DELTA_PROTOCOL */
91370#ifdef FREECIV_JSON_CONNECTION
91371 field_addr.name = "state";
91372#endif /* FREECIV_JSON_CONNECTION */
91373
91374 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->state)) {
91376 }
91377#endif /* FREECIV_DELTA_PROTOCOL */
91378
91380#undef FREE_PACKET_STRUCT
91381}
91382
91383static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
91384{
91385 const struct packet_edit_mode *real_packet = packet;
91386 int e;
91388
91389 log_packet_detailed("packet_edit_mode_100: sending info about ()");
91390
91391#ifdef FREECIV_DELTA_PROTOCOL
91393 struct packet_edit_mode *old;
91394 struct genhash **hash = pc->phs.sent + PACKET_EDIT_MODE;
91395
91396 if (nullptr == *hash) {
91398 nullptr, nullptr, nullptr, destroy_packet_edit_mode);
91399 }
91400 BV_CLR_ALL(fields);
91401
91402 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91403 old = fc_malloc(sizeof(*old));
91404 /* temporary bitcopy just to insert correctly */
91405 *old = *real_packet;
91408 }
91409
91410 /* folded into head */
91411 if (real_packet->state) {
91412 BV_SET(fields, 0);
91413 }
91414#endif /* FREECIV_DELTA_PROTOCOL */
91415
91416#ifdef FREECIV_JSON_CONNECTION
91417 struct plocation field_addr;
91418 {
91419 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91422 }
91423#endif /* FREECIV_JSON_CONNECTION */
91424
91425#ifdef FREECIV_DELTA_PROTOCOL
91426#ifdef FREECIV_JSON_CONNECTION
91427 field_addr.name = "fields";
91428#endif /* FREECIV_JSON_CONNECTION */
91429 e = 0;
91430 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91431 if (e) {
91432 log_packet_detailed("fields bitvector error detected");
91433 }
91434
91435 /* field 0 is folded into the header */
91436
91437 *old = *real_packet;
91438
91439#else /* FREECIV_DELTA_PROTOCOL */
91440#ifdef FREECIV_JSON_CONNECTION
91441 field_addr.name = "state";
91442#endif /* FREECIV_JSON_CONNECTION */
91443 e = 0;
91444
91445 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->state);
91446
91447 if (e) {
91448 log_packet_detailed("'state' field error detected");
91449 }
91450#endif /* FREECIV_DELTA_PROTOCOL */
91451
91453}
91454
91455int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
91456{
91457 if (!pc->used) {
91458 log_error("WARNING: trying to send data to the closed connection %s",
91460 return -1;
91461 }
91462 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_MODE].packet != nullptr, -1,
91463 "Handler for PACKET_EDIT_MODE not installed");
91464 return pc->phs.handlers->send[PACKET_EDIT_MODE].packet(pc, packet);
91465}
91466
91467int dsend_packet_edit_mode(struct connection *pc, bool state)
91468{
91469 struct packet_edit_mode packet, *real_packet = &packet;
91470
91472
91474}
91475
91477{
91478 memset(packet, 0, sizeof(*packet));
91479}
91480
91481#define free_packet_edit_recalculate_borders(_packet) (void) 0
91482#define destroy_packet_edit_recalculate_borders free
91483
91485{
91486#define FREE_PACKET_STRUCT(_packet) free_packet_edit_recalculate_borders(_packet)
91488
91489 log_packet_detailed("packet_edit_recalculate_borders_100: got info about ()");
91490
91491 real_packet->__dummy = 0xff;
91492
91494#undef FREE_PACKET_STRUCT
91495}
91496
91498{
91500
91501 log_packet_detailed("packet_edit_recalculate_borders_100: sending info about ()");
91502
91504}
91505
91507{
91508 if (!pc->used) {
91509 log_error("WARNING: trying to send data to the closed connection %s",
91511 return -1;
91512 }
91513 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet != nullptr, -1,
91514 "Handler for PACKET_EDIT_RECALCULATE_BORDERS not installed");
91515 return pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet(pc);
91516}
91517
91519{
91520 memset(packet, 0, sizeof(*packet));
91521}
91522
91523#define free_packet_edit_check_tiles(_packet) (void) 0
91524#define destroy_packet_edit_check_tiles free
91525
91527{
91528#define FREE_PACKET_STRUCT(_packet) free_packet_edit_check_tiles(_packet)
91530
91531 log_packet_detailed("packet_edit_check_tiles_100: got info about ()");
91532
91533 real_packet->__dummy = 0xff;
91534
91536#undef FREE_PACKET_STRUCT
91537}
91538
91540{
91542
91543 log_packet_detailed("packet_edit_check_tiles_100: sending info about ()");
91544
91546}
91547
91549{
91550 if (!pc->used) {
91551 log_error("WARNING: trying to send data to the closed connection %s",
91553 return -1;
91554 }
91555 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet != nullptr, -1,
91556 "Handler for PACKET_EDIT_CHECK_TILES not installed");
91557 return pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet(pc);
91558}
91559
91561{
91562 memset(packet, 0, sizeof(*packet));
91563}
91564
91565#define free_packet_edit_toggle_fogofwar(_packet) (void) 0
91566#define destroy_packet_edit_toggle_fogofwar free
91567
91568#ifdef FREECIV_DELTA_PROTOCOL
91569#define hash_packet_edit_toggle_fogofwar_100 hash_const
91570#define cmp_packet_edit_toggle_fogofwar_100 cmp_const
91572#endif /* FREECIV_DELTA_PROTOCOL */
91573
91575{
91576#define FREE_PACKET_STRUCT(_packet) free_packet_edit_toggle_fogofwar(_packet)
91578
91579#ifdef FREECIV_JSON_CONNECTION
91580 struct plocation field_addr;
91581 {
91582 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91585 }
91586#endif /* FREECIV_JSON_CONNECTION */
91587
91588 log_packet_detailed("packet_edit_toggle_fogofwar_100: got info about ()");
91589
91590#ifdef FREECIV_DELTA_PROTOCOL
91593 struct genhash **hash = pc->phs.received + PACKET_EDIT_TOGGLE_FOGOFWAR;
91594
91595 if (nullptr == *hash) {
91597 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
91598 }
91599
91600 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91601 *real_packet = *old;
91602 } else {
91603 /* packet is already initialized empty */
91604 log_packet_detailed(" no old info");
91605 }
91606
91607#ifdef FREECIV_JSON_CONNECTION
91608 field_addr.name = "fields";
91609#endif /* FREECIV_JSON_CONNECTION */
91610 DIO_BV_GET(&din, &field_addr, fields);
91611
91612 if (BV_ISSET(fields, 0)) {
91613 log_packet_detailed(" got field 'player'");
91614
91615#ifdef FREECIV_JSON_CONNECTION
91616 field_addr.name = "player";
91617#endif /* FREECIV_JSON_CONNECTION */
91618
91619 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
91621 }
91622 }
91623
91624 if (nullptr == old) {
91625 old = fc_malloc(sizeof(*old));
91627 *old = *real_packet;
91629 } else {
91630 *old = *real_packet;
91631 }
91632
91633#else /* FREECIV_DELTA_PROTOCOL */
91634#ifdef FREECIV_JSON_CONNECTION
91635 field_addr.name = "player";
91636#endif /* FREECIV_JSON_CONNECTION */
91637
91638 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
91640 }
91641#endif /* FREECIV_DELTA_PROTOCOL */
91642
91644#undef FREE_PACKET_STRUCT
91645}
91646
91648{
91649 const struct packet_edit_toggle_fogofwar *real_packet = packet;
91650 int e;
91652
91653 log_packet_detailed("packet_edit_toggle_fogofwar_100: sending info about ()");
91654
91655#ifdef FREECIV_DELTA_PROTOCOL
91658 bool differ;
91659 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TOGGLE_FOGOFWAR;
91660
91661 if (nullptr == *hash) {
91663 nullptr, nullptr, nullptr, destroy_packet_edit_toggle_fogofwar);
91664 }
91665 BV_CLR_ALL(fields);
91666
91667 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91668 old = fc_malloc(sizeof(*old));
91669 /* temporary bitcopy just to insert correctly */
91670 *old = *real_packet;
91673 }
91674
91675 differ = (old->player != real_packet->player);
91676 if (differ) {
91677 BV_SET(fields, 0);
91678 }
91679#endif /* FREECIV_DELTA_PROTOCOL */
91680
91681#ifdef FREECIV_JSON_CONNECTION
91682 struct plocation field_addr;
91683 {
91684 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91687 }
91688#endif /* FREECIV_JSON_CONNECTION */
91689
91690#ifdef FREECIV_DELTA_PROTOCOL
91691#ifdef FREECIV_JSON_CONNECTION
91692 field_addr.name = "fields";
91693#endif /* FREECIV_JSON_CONNECTION */
91694 e = 0;
91695 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91696 if (e) {
91697 log_packet_detailed("fields bitvector error detected");
91698 }
91699
91700 if (BV_ISSET(fields, 0)) {
91701 log_packet_detailed(" field 'player' has changed");
91702
91703#ifdef FREECIV_JSON_CONNECTION
91704 field_addr.name = "player";
91705#endif /* FREECIV_JSON_CONNECTION */
91706 e = 0;
91707
91708 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
91709
91710 if (e) {
91711 log_packet_detailed("'player' field error detected");
91712 }
91713 }
91714
91715 *old = *real_packet;
91716
91717#else /* FREECIV_DELTA_PROTOCOL */
91718#ifdef FREECIV_JSON_CONNECTION
91719 field_addr.name = "player";
91720#endif /* FREECIV_JSON_CONNECTION */
91721 e = 0;
91722
91723 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
91724
91725 if (e) {
91726 log_packet_detailed("'player' field error detected");
91727 }
91728#endif /* FREECIV_DELTA_PROTOCOL */
91729
91731}
91732
91734{
91735 if (!pc->used) {
91736 log_error("WARNING: trying to send data to the closed connection %s",
91738 return -1;
91739 }
91740 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet != nullptr, -1,
91741 "Handler for PACKET_EDIT_TOGGLE_FOGOFWAR not installed");
91742 return pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet(pc, packet);
91743}
91744
91746{
91747 struct packet_edit_toggle_fogofwar packet, *real_packet = &packet;
91748
91750
91752}
91753
91755{
91756 memset(packet, 0, sizeof(*packet));
91757}
91758
91759#define free_packet_edit_fogofwar_state(_packet) (void) 0
91760#define destroy_packet_edit_fogofwar_state free
91761
91762#ifdef FREECIV_DELTA_PROTOCOL
91763#define hash_packet_edit_fogofwar_state_100 hash_const
91764#define cmp_packet_edit_fogofwar_state_100 cmp_const
91766#endif /* FREECIV_DELTA_PROTOCOL */
91767
91769{
91770#define FREE_PACKET_STRUCT(_packet) free_packet_edit_fogofwar_state(_packet)
91772
91773#ifdef FREECIV_JSON_CONNECTION
91774 struct plocation field_addr;
91775 {
91776 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91779 }
91780#endif /* FREECIV_JSON_CONNECTION */
91781
91782 log_packet_detailed("packet_edit_fogofwar_state_100: got info about ()");
91783
91784#ifdef FREECIV_DELTA_PROTOCOL
91787 struct genhash **hash = pc->phs.received + PACKET_EDIT_FOGOFWAR_STATE;
91788
91789 if (nullptr == *hash) {
91791 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
91792 }
91793
91794 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91795 *real_packet = *old;
91796 } else {
91797 /* packet is already initialized empty */
91798 log_packet_detailed(" no old info");
91799 }
91800
91801#ifdef FREECIV_JSON_CONNECTION
91802 field_addr.name = "fields";
91803#endif /* FREECIV_JSON_CONNECTION */
91804 DIO_BV_GET(&din, &field_addr, fields);
91805
91806 real_packet->enabled = BV_ISSET(fields, 0);
91807
91808 if (nullptr == old) {
91809 old = fc_malloc(sizeof(*old));
91811 *old = *real_packet;
91813 } else {
91814 *old = *real_packet;
91815 }
91816
91817#else /* FREECIV_DELTA_PROTOCOL */
91818#ifdef FREECIV_JSON_CONNECTION
91819 field_addr.name = "enabled";
91820#endif /* FREECIV_JSON_CONNECTION */
91821
91822 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
91824 }
91825#endif /* FREECIV_DELTA_PROTOCOL */
91826
91828#undef FREE_PACKET_STRUCT
91829}
91830
91832{
91833 const struct packet_edit_fogofwar_state *real_packet = packet;
91834 int e;
91836
91837 log_packet_detailed("packet_edit_fogofwar_state_100: sending info about ()");
91838
91839#ifdef FREECIV_DELTA_PROTOCOL
91842 struct genhash **hash = pc->phs.sent + PACKET_EDIT_FOGOFWAR_STATE;
91843
91844 if (nullptr == *hash) {
91846 nullptr, nullptr, nullptr, destroy_packet_edit_fogofwar_state);
91847 }
91848 BV_CLR_ALL(fields);
91849
91850 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91851 old = fc_malloc(sizeof(*old));
91852 /* temporary bitcopy just to insert correctly */
91853 *old = *real_packet;
91856 }
91857
91858 /* folded into head */
91859 if (real_packet->enabled) {
91860 BV_SET(fields, 0);
91861 }
91862#endif /* FREECIV_DELTA_PROTOCOL */
91863
91864#ifdef FREECIV_JSON_CONNECTION
91865 struct plocation field_addr;
91866 {
91867 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91870 }
91871#endif /* FREECIV_JSON_CONNECTION */
91872
91873#ifdef FREECIV_DELTA_PROTOCOL
91874#ifdef FREECIV_JSON_CONNECTION
91875 field_addr.name = "fields";
91876#endif /* FREECIV_JSON_CONNECTION */
91877 e = 0;
91878 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91879 if (e) {
91880 log_packet_detailed("fields bitvector error detected");
91881 }
91882
91883 /* field 0 is folded into the header */
91884
91885 *old = *real_packet;
91886
91887#else /* FREECIV_DELTA_PROTOCOL */
91888#ifdef FREECIV_JSON_CONNECTION
91889 field_addr.name = "enabled";
91890#endif /* FREECIV_JSON_CONNECTION */
91891 e = 0;
91892
91893 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
91894
91895 if (e) {
91896 log_packet_detailed("'enabled' field error detected");
91897 }
91898#endif /* FREECIV_DELTA_PROTOCOL */
91899
91901}
91902
91904{
91905 if (!pc->used) {
91906 log_error("WARNING: trying to send data to the closed connection %s",
91908 return -1;
91909 }
91910 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet != nullptr, -1,
91911 "Handler for PACKET_EDIT_FOGOFWAR_STATE not installed");
91912 return pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet(pc, packet);
91913}
91914
91916{
91917 conn_list_iterate(dest, pconn) {
91920}
91921
91923{
91924 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
91925
91927
91929}
91930
91932{
91933 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
91934
91936
91938}
91939
91941{
91942 memset(packet, 0, sizeof(*packet));
91943}
91944
91945#define free_packet_edit_tile_terrain(_packet) (void) 0
91946#define destroy_packet_edit_tile_terrain free
91947
91948#ifdef FREECIV_DELTA_PROTOCOL
91950{
91951 const struct packet_edit_tile_terrain *key = (const struct packet_edit_tile_terrain *) vkey;
91952 genhash_val_t result = 0;
91953
91954 result += key->tile;
91955
91956 result &= 0xFFFFFFFF;
91957 return result;
91958}
91959
91960static bool cmp_packet_edit_tile_terrain_100(const void *vkey1, const void *vkey2)
91961{
91962 const struct packet_edit_tile_terrain *old = (const struct packet_edit_tile_terrain *) vkey1;
91963 const struct packet_edit_tile_terrain *real_packet = (const struct packet_edit_tile_terrain *) vkey2;
91964 bool differ;
91965
91966 differ = (old->tile != real_packet->tile);
91967
91968 return !differ;
91969}
91971#endif /* FREECIV_DELTA_PROTOCOL */
91972
91974{
91975#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_terrain(_packet)
91977
91978#ifdef FREECIV_JSON_CONNECTION
91979 struct plocation field_addr;
91980 {
91981 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
91984 }
91985#endif /* FREECIV_JSON_CONNECTION */
91986
91987#ifdef FREECIV_JSON_CONNECTION
91988 field_addr.name = "tile";
91989#endif /* FREECIV_JSON_CONNECTION */
91990
91991 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
91993 }
91994
91995 log_packet_detailed("packet_edit_tile_terrain_100: got info about (%d)",
91996 real_packet->tile);
91997
91998#ifdef FREECIV_DELTA_PROTOCOL
92001 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_TERRAIN;
92002
92003 if (nullptr == *hash) {
92005 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
92006 }
92007
92008 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92009 *real_packet = *old;
92010 } else {
92011 /* packet is already initialized empty */
92012 log_packet_detailed(" no old info");
92013 }
92014
92015#ifdef FREECIV_JSON_CONNECTION
92016 field_addr.name = "fields";
92017#endif /* FREECIV_JSON_CONNECTION */
92018 DIO_BV_GET(&din, &field_addr, fields);
92019
92020 if (BV_ISSET(fields, 0)) {
92021 log_packet_detailed(" got field 'terrain'");
92022
92023#ifdef FREECIV_JSON_CONNECTION
92024 field_addr.name = "terrain";
92025#endif /* FREECIV_JSON_CONNECTION */
92026
92027 {
92028 int readin;
92029
92030 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92032 }
92033 real_packet->terrain = readin;
92034 }
92035 }
92036
92037 if (BV_ISSET(fields, 1)) {
92038 log_packet_detailed(" got field 'size'");
92039
92040#ifdef FREECIV_JSON_CONNECTION
92041 field_addr.name = "size";
92042#endif /* FREECIV_JSON_CONNECTION */
92043
92044 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92046 }
92047 }
92048
92049 if (nullptr == old) {
92050 old = fc_malloc(sizeof(*old));
92052 *old = *real_packet;
92054 } else {
92055 *old = *real_packet;
92056 }
92057
92058#else /* FREECIV_DELTA_PROTOCOL */
92059#ifdef FREECIV_JSON_CONNECTION
92060 field_addr.name = "terrain";
92061#endif /* FREECIV_JSON_CONNECTION */
92062
92063 {
92064 int readin;
92065
92066 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92068 }
92069 real_packet->terrain = readin;
92070 }
92071
92072#ifdef FREECIV_JSON_CONNECTION
92073 field_addr.name = "size";
92074#endif /* FREECIV_JSON_CONNECTION */
92075
92076 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92078 }
92079#endif /* FREECIV_DELTA_PROTOCOL */
92080
92082#undef FREE_PACKET_STRUCT
92083}
92084
92086{
92087 const struct packet_edit_tile_terrain *real_packet = packet;
92088 int e;
92090
92091 log_packet_detailed("packet_edit_tile_terrain_100: sending info about (%d)",
92092 real_packet->tile);
92093
92094#ifdef FREECIV_DELTA_PROTOCOL
92097 bool differ;
92098 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_TERRAIN;
92099
92100 if (nullptr == *hash) {
92102 nullptr, nullptr, nullptr, destroy_packet_edit_tile_terrain);
92103 }
92104 BV_CLR_ALL(fields);
92105
92106 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92107 old = fc_malloc(sizeof(*old));
92108 /* temporary bitcopy just to insert correctly */
92109 *old = *real_packet;
92112 }
92113
92114 differ = (old->terrain != real_packet->terrain);
92115 if (differ) {
92116 BV_SET(fields, 0);
92117 }
92118
92119 differ = (old->size != real_packet->size);
92120 if (differ) {
92121 BV_SET(fields, 1);
92122 }
92123#endif /* FREECIV_DELTA_PROTOCOL */
92124
92125#ifdef FREECIV_JSON_CONNECTION
92126 struct plocation field_addr;
92127 {
92128 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92131 }
92132#endif /* FREECIV_JSON_CONNECTION */
92133
92134#ifdef FREECIV_JSON_CONNECTION
92135 field_addr.name = "tile";
92136#endif /* FREECIV_JSON_CONNECTION */
92137 e = 0;
92138
92139 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
92140
92141 if (e) {
92142 log_packet_detailed("'tile' field error detected");
92143 }
92144
92145#ifdef FREECIV_DELTA_PROTOCOL
92146#ifdef FREECIV_JSON_CONNECTION
92147 field_addr.name = "fields";
92148#endif /* FREECIV_JSON_CONNECTION */
92149 e = 0;
92150 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92151 if (e) {
92152 log_packet_detailed("fields bitvector error detected");
92153 }
92154
92155 if (BV_ISSET(fields, 0)) {
92156 log_packet_detailed(" field 'terrain' has changed");
92157
92158#ifdef FREECIV_JSON_CONNECTION
92159 field_addr.name = "terrain";
92160#endif /* FREECIV_JSON_CONNECTION */
92161 e = 0;
92162
92163 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
92164
92165 if (e) {
92166 log_packet_detailed("'terrain' field error detected");
92167 }
92168 }
92169
92170 if (BV_ISSET(fields, 1)) {
92171 log_packet_detailed(" field 'size' has changed");
92172
92173#ifdef FREECIV_JSON_CONNECTION
92174 field_addr.name = "size";
92175#endif /* FREECIV_JSON_CONNECTION */
92176 e = 0;
92177
92178 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92179
92180 if (e) {
92181 log_packet_detailed("'size' field error detected");
92182 }
92183 }
92184
92185 *old = *real_packet;
92186
92187#else /* FREECIV_DELTA_PROTOCOL */
92188#ifdef FREECIV_JSON_CONNECTION
92189 field_addr.name = "terrain";
92190#endif /* FREECIV_JSON_CONNECTION */
92191 e = 0;
92192
92193 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
92194
92195 if (e) {
92196 log_packet_detailed("'terrain' field error detected");
92197 }
92198
92199#ifdef FREECIV_JSON_CONNECTION
92200 field_addr.name = "size";
92201#endif /* FREECIV_JSON_CONNECTION */
92202 e = 0;
92203
92204 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92205
92206 if (e) {
92207 log_packet_detailed("'size' field error detected");
92208 }
92209#endif /* FREECIV_DELTA_PROTOCOL */
92210
92212}
92213
92215{
92216 if (!pc->used) {
92217 log_error("WARNING: trying to send data to the closed connection %s",
92219 return -1;
92220 }
92221 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet != nullptr, -1,
92222 "Handler for PACKET_EDIT_TILE_TERRAIN not installed");
92223 return pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet(pc, packet);
92224}
92225
92227{
92228 struct packet_edit_tile_terrain packet, *real_packet = &packet;
92229
92231 real_packet->terrain = terrain;
92232 real_packet->size = size;
92233
92235}
92236
92237static inline void init_packet_edit_tile_extra(struct packet_edit_tile_extra *packet)
92238{
92239 memset(packet, 0, sizeof(*packet));
92240}
92241
92242#define free_packet_edit_tile_extra(_packet) (void) 0
92243#define destroy_packet_edit_tile_extra free
92244
92245#ifdef FREECIV_DELTA_PROTOCOL
92247{
92248 const struct packet_edit_tile_extra *key = (const struct packet_edit_tile_extra *) vkey;
92249 genhash_val_t result = 0;
92250
92251 result += key->tile;
92252
92253 result &= 0xFFFFFFFF;
92254 return result;
92255}
92256
92257static bool cmp_packet_edit_tile_extra_100(const void *vkey1, const void *vkey2)
92258{
92259 const struct packet_edit_tile_extra *old = (const struct packet_edit_tile_extra *) vkey1;
92260 const struct packet_edit_tile_extra *real_packet = (const struct packet_edit_tile_extra *) vkey2;
92261 bool differ;
92262
92263 differ = (old->tile != real_packet->tile);
92264
92265 return !differ;
92266}
92268#endif /* FREECIV_DELTA_PROTOCOL */
92269
92271{
92272#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile_extra(_packet)
92274
92275#ifdef FREECIV_JSON_CONNECTION
92276 struct plocation field_addr;
92277 {
92278 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92281 }
92282#endif /* FREECIV_JSON_CONNECTION */
92283
92284#ifdef FREECIV_JSON_CONNECTION
92285 field_addr.name = "tile";
92286#endif /* FREECIV_JSON_CONNECTION */
92287
92288 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
92290 }
92291
92292 log_packet_detailed("packet_edit_tile_extra_100: got info about (%d)",
92293 real_packet->tile);
92294
92295#ifdef FREECIV_DELTA_PROTOCOL
92298 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_EXTRA;
92299
92300 if (nullptr == *hash) {
92302 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
92303 }
92304
92305 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92306 *real_packet = *old;
92307 } else {
92308 /* packet is already initialized empty */
92309 log_packet_detailed(" no old info");
92310 }
92311
92312#ifdef FREECIV_JSON_CONNECTION
92313 field_addr.name = "fields";
92314#endif /* FREECIV_JSON_CONNECTION */
92315 DIO_BV_GET(&din, &field_addr, fields);
92316
92317 if (BV_ISSET(fields, 0)) {
92318 log_packet_detailed(" got field 'extra_type_id'");
92319
92320#ifdef FREECIV_JSON_CONNECTION
92321 field_addr.name = "extra_type_id";
92322#endif /* FREECIV_JSON_CONNECTION */
92323
92324 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
92325 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
92326 }
92327 }
92328
92329 real_packet->removal = BV_ISSET(fields, 1);
92330
92331 if (BV_ISSET(fields, 2)) {
92332 log_packet_detailed(" got field 'eowner'");
92333
92334#ifdef FREECIV_JSON_CONNECTION
92335 field_addr.name = "eowner";
92336#endif /* FREECIV_JSON_CONNECTION */
92337
92338 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92340 }
92341 }
92342
92343 if (BV_ISSET(fields, 3)) {
92344 log_packet_detailed(" got field 'size'");
92345
92346#ifdef FREECIV_JSON_CONNECTION
92347 field_addr.name = "size";
92348#endif /* FREECIV_JSON_CONNECTION */
92349
92350 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92352 }
92353 }
92354
92355 if (nullptr == old) {
92356 old = fc_malloc(sizeof(*old));
92358 *old = *real_packet;
92360 } else {
92361 *old = *real_packet;
92362 }
92363
92364#else /* FREECIV_DELTA_PROTOCOL */
92365#ifdef FREECIV_JSON_CONNECTION
92366 field_addr.name = "extra_type_id";
92367#endif /* FREECIV_JSON_CONNECTION */
92368
92369 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
92370 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
92371 }
92372
92373#ifdef FREECIV_JSON_CONNECTION
92374 field_addr.name = "removal";
92375#endif /* FREECIV_JSON_CONNECTION */
92376
92377 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
92379 }
92380
92381#ifdef FREECIV_JSON_CONNECTION
92382 field_addr.name = "eowner";
92383#endif /* FREECIV_JSON_CONNECTION */
92384
92385 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
92387 }
92388
92389#ifdef FREECIV_JSON_CONNECTION
92390 field_addr.name = "size";
92391#endif /* FREECIV_JSON_CONNECTION */
92392
92393 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
92395 }
92396#endif /* FREECIV_DELTA_PROTOCOL */
92397
92399#undef FREE_PACKET_STRUCT
92400}
92401
92403{
92404 const struct packet_edit_tile_extra *real_packet = packet;
92405 int e;
92407
92408 log_packet_detailed("packet_edit_tile_extra_100: sending info about (%d)",
92409 real_packet->tile);
92410
92411#ifdef FREECIV_DELTA_PROTOCOL
92414 bool differ;
92415 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_EXTRA;
92416
92417 if (nullptr == *hash) {
92419 nullptr, nullptr, nullptr, destroy_packet_edit_tile_extra);
92420 }
92421 BV_CLR_ALL(fields);
92422
92423 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92424 old = fc_malloc(sizeof(*old));
92425 /* temporary bitcopy just to insert correctly */
92426 *old = *real_packet;
92429 }
92430
92431 differ = (old->extra_type_id != real_packet->extra_type_id);
92432 if (differ) {
92433 BV_SET(fields, 0);
92434 }
92435
92436 /* folded into head */
92437 if (real_packet->removal) {
92438 BV_SET(fields, 1);
92439 }
92440
92441 differ = (old->eowner != real_packet->eowner);
92442 if (differ) {
92443 BV_SET(fields, 2);
92444 }
92445
92446 differ = (old->size != real_packet->size);
92447 if (differ) {
92448 BV_SET(fields, 3);
92449 }
92450#endif /* FREECIV_DELTA_PROTOCOL */
92451
92452#ifdef FREECIV_JSON_CONNECTION
92453 struct plocation field_addr;
92454 {
92455 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92458 }
92459#endif /* FREECIV_JSON_CONNECTION */
92460
92461#ifdef FREECIV_JSON_CONNECTION
92462 field_addr.name = "tile";
92463#endif /* FREECIV_JSON_CONNECTION */
92464 e = 0;
92465
92466 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
92467
92468 if (e) {
92469 log_packet_detailed("'tile' field error detected");
92470 }
92471
92472#ifdef FREECIV_DELTA_PROTOCOL
92473#ifdef FREECIV_JSON_CONNECTION
92474 field_addr.name = "fields";
92475#endif /* FREECIV_JSON_CONNECTION */
92476 e = 0;
92477 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92478 if (e) {
92479 log_packet_detailed("fields bitvector error detected");
92480 }
92481
92482 if (BV_ISSET(fields, 0)) {
92483 log_packet_detailed(" field 'extra_type_id' has changed");
92484
92485#ifdef FREECIV_JSON_CONNECTION
92486 field_addr.name = "extra_type_id";
92487#endif /* FREECIV_JSON_CONNECTION */
92488 e = 0;
92489
92490 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
92491
92492 if (e) {
92493 log_packet_detailed("'extra_type_id' field error detected");
92494 }
92495 }
92496
92497 /* field 1 is folded into the header */
92498
92499 if (BV_ISSET(fields, 2)) {
92500 log_packet_detailed(" field 'eowner' has changed");
92501
92502#ifdef FREECIV_JSON_CONNECTION
92503 field_addr.name = "eowner";
92504#endif /* FREECIV_JSON_CONNECTION */
92505 e = 0;
92506
92507 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
92508
92509 if (e) {
92510 log_packet_detailed("'eowner' field error detected");
92511 }
92512 }
92513
92514 if (BV_ISSET(fields, 3)) {
92515 log_packet_detailed(" field 'size' has changed");
92516
92517#ifdef FREECIV_JSON_CONNECTION
92518 field_addr.name = "size";
92519#endif /* FREECIV_JSON_CONNECTION */
92520 e = 0;
92521
92522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92523
92524 if (e) {
92525 log_packet_detailed("'size' field error detected");
92526 }
92527 }
92528
92529 *old = *real_packet;
92530
92531#else /* FREECIV_DELTA_PROTOCOL */
92532#ifdef FREECIV_JSON_CONNECTION
92533 field_addr.name = "extra_type_id";
92534#endif /* FREECIV_JSON_CONNECTION */
92535 e = 0;
92536
92537 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
92538
92539 if (e) {
92540 log_packet_detailed("'extra_type_id' field error detected");
92541 }
92542
92543#ifdef FREECIV_JSON_CONNECTION
92544 field_addr.name = "removal";
92545#endif /* FREECIV_JSON_CONNECTION */
92546 e = 0;
92547
92548 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
92549
92550 if (e) {
92551 log_packet_detailed("'removal' field error detected");
92552 }
92553
92554#ifdef FREECIV_JSON_CONNECTION
92555 field_addr.name = "eowner";
92556#endif /* FREECIV_JSON_CONNECTION */
92557 e = 0;
92558
92559 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
92560
92561 if (e) {
92562 log_packet_detailed("'eowner' field error detected");
92563 }
92564
92565#ifdef FREECIV_JSON_CONNECTION
92566 field_addr.name = "size";
92567#endif /* FREECIV_JSON_CONNECTION */
92568 e = 0;
92569
92570 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
92571
92572 if (e) {
92573 log_packet_detailed("'size' field error detected");
92574 }
92575#endif /* FREECIV_DELTA_PROTOCOL */
92576
92578}
92579
92581{
92582 if (!pc->used) {
92583 log_error("WARNING: trying to send data to the closed connection %s",
92585 return -1;
92586 }
92587 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet != nullptr, -1,
92588 "Handler for PACKET_EDIT_TILE_EXTRA not installed");
92589 return pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet(pc, packet);
92590}
92591
92592int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
92593{
92594 struct packet_edit_tile_extra packet, *real_packet = &packet;
92595
92597 real_packet->extra_type_id = extra_type_id;
92598 real_packet->removal = removal;
92599 real_packet->eowner = eowner;
92600 real_packet->size = size;
92601
92603}
92604
92605static inline void init_packet_edit_startpos(struct packet_edit_startpos *packet)
92606{
92607 memset(packet, 0, sizeof(*packet));
92608}
92609
92610#define free_packet_edit_startpos(_packet) (void) 0
92611#define destroy_packet_edit_startpos free
92612
92614{
92615#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos(_packet)
92617
92618#ifdef FREECIV_JSON_CONNECTION
92619 struct plocation field_addr;
92620 {
92621 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92624 }
92625#endif /* FREECIV_JSON_CONNECTION */
92626
92627 log_packet_detailed("packet_edit_startpos_100: got info about ()");
92628
92629#ifdef FREECIV_JSON_CONNECTION
92630 field_addr.name = "id";
92631#endif /* FREECIV_JSON_CONNECTION */
92632
92633 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
92635 }
92636
92637#ifdef FREECIV_JSON_CONNECTION
92638 field_addr.name = "removal";
92639#endif /* FREECIV_JSON_CONNECTION */
92640
92641 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
92643 }
92644
92645#ifdef FREECIV_JSON_CONNECTION
92646 field_addr.name = "tag";
92647#endif /* FREECIV_JSON_CONNECTION */
92648
92649 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
92651 }
92652
92654#undef FREE_PACKET_STRUCT
92655}
92656
92657static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
92658{
92659 const struct packet_edit_startpos *real_packet = packet;
92660 int e;
92662
92663 log_packet_detailed("packet_edit_startpos_100: sending info about ()");
92664
92665#ifdef FREECIV_JSON_CONNECTION
92666 struct plocation field_addr;
92667 {
92668 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92671 }
92672#endif /* FREECIV_JSON_CONNECTION */
92673
92674#ifdef FREECIV_JSON_CONNECTION
92675 field_addr.name = "id";
92676#endif /* FREECIV_JSON_CONNECTION */
92677 e = 0;
92678
92679 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
92680
92681 if (e) {
92682 log_packet_detailed("'id' field error detected");
92683 }
92684
92685#ifdef FREECIV_JSON_CONNECTION
92686 field_addr.name = "removal";
92687#endif /* FREECIV_JSON_CONNECTION */
92688 e = 0;
92689
92690 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
92691
92692 if (e) {
92693 log_packet_detailed("'removal' field error detected");
92694 }
92695
92696#ifdef FREECIV_JSON_CONNECTION
92697 field_addr.name = "tag";
92698#endif /* FREECIV_JSON_CONNECTION */
92699 e = 0;
92700
92701 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
92702
92703 if (e) {
92704 log_packet_detailed("'tag' field error detected");
92705 }
92706
92708}
92709
92711{
92712 if (!pc->used) {
92713 log_error("WARNING: trying to send data to the closed connection %s",
92715 return -1;
92716 }
92717 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet != nullptr, -1,
92718 "Handler for PACKET_EDIT_STARTPOS not installed");
92719 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet(pc, packet);
92720}
92721
92722int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
92723{
92724 struct packet_edit_startpos packet, *real_packet = &packet;
92725
92726 real_packet->id = id;
92727 real_packet->removal = removal;
92728 real_packet->tag = tag;
92729
92731}
92732
92734{
92735 memset(packet, 0, sizeof(*packet));
92736}
92737
92738#define free_packet_edit_startpos_full(_packet) (void) 0
92739#define destroy_packet_edit_startpos_full free
92740
92742{
92743#define FREE_PACKET_STRUCT(_packet) free_packet_edit_startpos_full(_packet)
92745
92746#ifdef FREECIV_JSON_CONNECTION
92747 struct plocation field_addr;
92748 {
92749 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92752 }
92753#endif /* FREECIV_JSON_CONNECTION */
92754
92755 log_packet_detailed("packet_edit_startpos_full_100: got info about ()");
92756
92757#ifdef FREECIV_JSON_CONNECTION
92758 field_addr.name = "id";
92759#endif /* FREECIV_JSON_CONNECTION */
92760
92761 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
92763 }
92764
92765#ifdef FREECIV_JSON_CONNECTION
92766 field_addr.name = "exclude";
92767#endif /* FREECIV_JSON_CONNECTION */
92768
92769 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->exclude)) {
92771 }
92772
92773#ifdef FREECIV_JSON_CONNECTION
92774 field_addr.name = "nations";
92775#endif /* FREECIV_JSON_CONNECTION */
92776
92777 if (!DIO_BV_GET(&din, &field_addr, real_packet->nations)) {
92779 }
92780
92782#undef FREE_PACKET_STRUCT
92783}
92784
92786{
92787 const struct packet_edit_startpos_full *real_packet = packet;
92788 int e;
92790
92791 log_packet_detailed("packet_edit_startpos_full_100: sending info about ()");
92792
92793#ifdef FREECIV_JSON_CONNECTION
92794 struct plocation field_addr;
92795 {
92796 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92799 }
92800#endif /* FREECIV_JSON_CONNECTION */
92801
92802#ifdef FREECIV_JSON_CONNECTION
92803 field_addr.name = "id";
92804#endif /* FREECIV_JSON_CONNECTION */
92805 e = 0;
92806
92807 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
92808
92809 if (e) {
92810 log_packet_detailed("'id' field error detected");
92811 }
92812
92813#ifdef FREECIV_JSON_CONNECTION
92814 field_addr.name = "exclude";
92815#endif /* FREECIV_JSON_CONNECTION */
92816 e = 0;
92817
92818 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->exclude);
92819
92820 if (e) {
92821 log_packet_detailed("'exclude' field error detected");
92822 }
92823
92824#ifdef FREECIV_JSON_CONNECTION
92825 field_addr.name = "nations";
92826#endif /* FREECIV_JSON_CONNECTION */
92827 e = 0;
92828
92829 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->nations);
92830
92831 if (e) {
92832 log_packet_detailed("'nations' field error detected");
92833 }
92834
92836}
92837
92839{
92840 if (!pc->used) {
92841 log_error("WARNING: trying to send data to the closed connection %s",
92843 return -1;
92844 }
92845 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet != nullptr, -1,
92846 "Handler for PACKET_EDIT_STARTPOS_FULL not installed");
92847 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet(pc, packet);
92848}
92849
92850static inline void init_packet_edit_tile(struct packet_edit_tile *packet)
92851{
92852 memset(packet, 0, sizeof(*packet));
92853}
92854
92855#define free_packet_edit_tile(_packet) (void) 0
92856#define destroy_packet_edit_tile free
92857
92858#ifdef FREECIV_DELTA_PROTOCOL
92860{
92861 const struct packet_edit_tile *key = (const struct packet_edit_tile *) vkey;
92862 genhash_val_t result = 0;
92863
92864 result += key->tile;
92865
92866 result &= 0xFFFFFFFF;
92867 return result;
92868}
92869
92870static bool cmp_packet_edit_tile_100(const void *vkey1, const void *vkey2)
92871{
92872 const struct packet_edit_tile *old = (const struct packet_edit_tile *) vkey1;
92873 const struct packet_edit_tile *real_packet = (const struct packet_edit_tile *) vkey2;
92874 bool differ;
92875
92876 differ = (old->tile != real_packet->tile);
92877
92878 return !differ;
92879}
92881#endif /* FREECIV_DELTA_PROTOCOL */
92882
92884{
92885#define FREE_PACKET_STRUCT(_packet) free_packet_edit_tile(_packet)
92887
92888#ifdef FREECIV_JSON_CONNECTION
92889 struct plocation field_addr;
92890 {
92891 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
92894 }
92895#endif /* FREECIV_JSON_CONNECTION */
92896
92897#ifdef FREECIV_JSON_CONNECTION
92898 field_addr.name = "tile";
92899#endif /* FREECIV_JSON_CONNECTION */
92900
92901 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
92903 }
92904
92905 log_packet_detailed("packet_edit_tile_100: got info about (%d)",
92906 real_packet->tile);
92907
92908#ifdef FREECIV_DELTA_PROTOCOL
92910 struct packet_edit_tile *old;
92911 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE;
92912
92913 if (nullptr == *hash) {
92915 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
92916 }
92917
92918 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92919 *real_packet = *old;
92920 } else {
92921 /* packet is already initialized empty */
92922 log_packet_detailed(" no old info");
92923 }
92924
92925#ifdef FREECIV_JSON_CONNECTION
92926 field_addr.name = "fields";
92927#endif /* FREECIV_JSON_CONNECTION */
92928 DIO_BV_GET(&din, &field_addr, fields);
92929
92930 if (BV_ISSET(fields, 0)) {
92931 log_packet_detailed(" got field 'extras'");
92932
92933#ifdef FREECIV_JSON_CONNECTION
92934 field_addr.name = "extras";
92935#endif /* FREECIV_JSON_CONNECTION */
92936
92937 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
92939 }
92940 }
92941
92942 if (BV_ISSET(fields, 1)) {
92943 log_packet_detailed(" got field 'resource'");
92944
92945#ifdef FREECIV_JSON_CONNECTION
92946 field_addr.name = "resource";
92947#endif /* FREECIV_JSON_CONNECTION */
92948
92949 {
92950 int readin;
92951
92952 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92954 }
92955 real_packet->resource = readin;
92956 }
92957 }
92958
92959 if (BV_ISSET(fields, 2)) {
92960 log_packet_detailed(" got field 'terrain'");
92961
92962#ifdef FREECIV_JSON_CONNECTION
92963 field_addr.name = "terrain";
92964#endif /* FREECIV_JSON_CONNECTION */
92965
92966 {
92967 int readin;
92968
92969 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
92971 }
92972 real_packet->terrain = readin;
92973 }
92974 }
92975
92976 if (BV_ISSET(fields, 3)) {
92977 log_packet_detailed(" got field 'startpos_nation'");
92978
92979#ifdef FREECIV_JSON_CONNECTION
92980 field_addr.name = "startpos_nation";
92981#endif /* FREECIV_JSON_CONNECTION */
92982
92983 {
92984 int readin;
92985
92986 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
92987 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
92988 }
92989 real_packet->startpos_nation = readin;
92990 }
92991 }
92992
92993 if (BV_ISSET(fields, 4)) {
92994 log_packet_detailed(" got field 'eowner'");
92995
92996#ifdef FREECIV_JSON_CONNECTION
92997 field_addr.name = "eowner";
92998#endif /* FREECIV_JSON_CONNECTION */
92999
93000 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93002 }
93003 }
93004
93005 if (BV_ISSET(fields, 5)) {
93006 log_packet_detailed(" got field 'label'");
93007
93008#ifdef FREECIV_JSON_CONNECTION
93009 field_addr.name = "label";
93010#endif /* FREECIV_JSON_CONNECTION */
93011
93012 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
93014 }
93015 }
93016
93017 if (nullptr == old) {
93018 old = fc_malloc(sizeof(*old));
93020 *old = *real_packet;
93022 } else {
93023 *old = *real_packet;
93024 }
93025
93026#else /* FREECIV_DELTA_PROTOCOL */
93027#ifdef FREECIV_JSON_CONNECTION
93028 field_addr.name = "extras";
93029#endif /* FREECIV_JSON_CONNECTION */
93030
93031 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
93033 }
93034
93035#ifdef FREECIV_JSON_CONNECTION
93036 field_addr.name = "resource";
93037#endif /* FREECIV_JSON_CONNECTION */
93038
93039 {
93040 int readin;
93041
93042 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93044 }
93045 real_packet->resource = readin;
93046 }
93047
93048#ifdef FREECIV_JSON_CONNECTION
93049 field_addr.name = "terrain";
93050#endif /* FREECIV_JSON_CONNECTION */
93051
93052 {
93053 int readin;
93054
93055 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
93057 }
93058 real_packet->terrain = readin;
93059 }
93060
93061#ifdef FREECIV_JSON_CONNECTION
93062 field_addr.name = "startpos_nation";
93063#endif /* FREECIV_JSON_CONNECTION */
93064
93065 {
93066 int readin;
93067
93068 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
93069 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
93070 }
93071 real_packet->startpos_nation = readin;
93072 }
93073
93074#ifdef FREECIV_JSON_CONNECTION
93075 field_addr.name = "eowner";
93076#endif /* FREECIV_JSON_CONNECTION */
93077
93078 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->eowner)) {
93080 }
93081
93082#ifdef FREECIV_JSON_CONNECTION
93083 field_addr.name = "label";
93084#endif /* FREECIV_JSON_CONNECTION */
93085
93086 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
93088 }
93089#endif /* FREECIV_DELTA_PROTOCOL */
93090
93092#undef FREE_PACKET_STRUCT
93093}
93094
93095static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
93096{
93097 const struct packet_edit_tile *real_packet = packet;
93098 int e;
93100
93101 log_packet_detailed("packet_edit_tile_100: sending info about (%d)",
93102 real_packet->tile);
93103
93104#ifdef FREECIV_DELTA_PROTOCOL
93106 struct packet_edit_tile *old;
93107 bool differ;
93108 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE;
93109
93110 if (nullptr == *hash) {
93112 nullptr, nullptr, nullptr, destroy_packet_edit_tile);
93113 }
93114 BV_CLR_ALL(fields);
93115
93116 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93117 old = fc_malloc(sizeof(*old));
93118 /* temporary bitcopy just to insert correctly */
93119 *old = *real_packet;
93122 }
93123
93124 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
93125 if (differ) {
93126 BV_SET(fields, 0);
93127 }
93128
93129 differ = (old->resource != real_packet->resource);
93130 if (differ) {
93131 BV_SET(fields, 1);
93132 }
93133
93134 differ = (old->terrain != real_packet->terrain);
93135 if (differ) {
93136 BV_SET(fields, 2);
93137 }
93138
93139 differ = (old->startpos_nation != real_packet->startpos_nation);
93140 if (differ) {
93141 BV_SET(fields, 3);
93142 }
93143
93144 differ = (old->eowner != real_packet->eowner);
93145 if (differ) {
93146 BV_SET(fields, 4);
93147 }
93148
93149 differ = (strcmp(old->label, real_packet->label) != 0);
93150 if (differ) {
93151 BV_SET(fields, 5);
93152 }
93153#endif /* FREECIV_DELTA_PROTOCOL */
93154
93155#ifdef FREECIV_JSON_CONNECTION
93156 struct plocation field_addr;
93157 {
93158 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93161 }
93162#endif /* FREECIV_JSON_CONNECTION */
93163
93164#ifdef FREECIV_JSON_CONNECTION
93165 field_addr.name = "tile";
93166#endif /* FREECIV_JSON_CONNECTION */
93167 e = 0;
93168
93169 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93170
93171 if (e) {
93172 log_packet_detailed("'tile' field error detected");
93173 }
93174
93175#ifdef FREECIV_DELTA_PROTOCOL
93176#ifdef FREECIV_JSON_CONNECTION
93177 field_addr.name = "fields";
93178#endif /* FREECIV_JSON_CONNECTION */
93179 e = 0;
93180 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93181 if (e) {
93182 log_packet_detailed("fields bitvector error detected");
93183 }
93184
93185 if (BV_ISSET(fields, 0)) {
93186 log_packet_detailed(" field 'extras' has changed");
93187
93188#ifdef FREECIV_JSON_CONNECTION
93189 field_addr.name = "extras";
93190#endif /* FREECIV_JSON_CONNECTION */
93191 e = 0;
93192
93193 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
93194
93195 if (e) {
93196 log_packet_detailed("'extras' field error detected");
93197 }
93198 }
93199
93200 if (BV_ISSET(fields, 1)) {
93201 log_packet_detailed(" field 'resource' has changed");
93202
93203#ifdef FREECIV_JSON_CONNECTION
93204 field_addr.name = "resource";
93205#endif /* FREECIV_JSON_CONNECTION */
93206 e = 0;
93207
93208 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
93209
93210 if (e) {
93211 log_packet_detailed("'resource' field error detected");
93212 }
93213 }
93214
93215 if (BV_ISSET(fields, 2)) {
93216 log_packet_detailed(" field 'terrain' has changed");
93217
93218#ifdef FREECIV_JSON_CONNECTION
93219 field_addr.name = "terrain";
93220#endif /* FREECIV_JSON_CONNECTION */
93221 e = 0;
93222
93223 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
93224
93225 if (e) {
93226 log_packet_detailed("'terrain' field error detected");
93227 }
93228 }
93229
93230 if (BV_ISSET(fields, 3)) {
93231 log_packet_detailed(" field 'startpos_nation' has changed");
93232
93233#ifdef FREECIV_JSON_CONNECTION
93234 field_addr.name = "startpos_nation";
93235#endif /* FREECIV_JSON_CONNECTION */
93236 e = 0;
93237
93238 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
93239
93240 if (e) {
93241 log_packet_detailed("'startpos_nation' field error detected");
93242 }
93243 }
93244
93245 if (BV_ISSET(fields, 4)) {
93246 log_packet_detailed(" field 'eowner' has changed");
93247
93248#ifdef FREECIV_JSON_CONNECTION
93249 field_addr.name = "eowner";
93250#endif /* FREECIV_JSON_CONNECTION */
93251 e = 0;
93252
93253 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93254
93255 if (e) {
93256 log_packet_detailed("'eowner' field error detected");
93257 }
93258 }
93259
93260 if (BV_ISSET(fields, 5)) {
93261 log_packet_detailed(" field 'label' has changed");
93262
93263#ifdef FREECIV_JSON_CONNECTION
93264 field_addr.name = "label";
93265#endif /* FREECIV_JSON_CONNECTION */
93266 e = 0;
93267
93268 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
93269
93270 if (e) {
93271 log_packet_detailed("'label' field error detected");
93272 }
93273 }
93274
93275 *old = *real_packet;
93276
93277#else /* FREECIV_DELTA_PROTOCOL */
93278#ifdef FREECIV_JSON_CONNECTION
93279 field_addr.name = "extras";
93280#endif /* FREECIV_JSON_CONNECTION */
93281 e = 0;
93282
93283 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->extras);
93284
93285 if (e) {
93286 log_packet_detailed("'extras' field error detected");
93287 }
93288
93289#ifdef FREECIV_JSON_CONNECTION
93290 field_addr.name = "resource";
93291#endif /* FREECIV_JSON_CONNECTION */
93292 e = 0;
93293
93294 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
93295
93296 if (e) {
93297 log_packet_detailed("'resource' field error detected");
93298 }
93299
93300#ifdef FREECIV_JSON_CONNECTION
93301 field_addr.name = "terrain";
93302#endif /* FREECIV_JSON_CONNECTION */
93303 e = 0;
93304
93305 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
93306
93307 if (e) {
93308 log_packet_detailed("'terrain' field error detected");
93309 }
93310
93311#ifdef FREECIV_JSON_CONNECTION
93312 field_addr.name = "startpos_nation";
93313#endif /* FREECIV_JSON_CONNECTION */
93314 e = 0;
93315
93316 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
93317
93318 if (e) {
93319 log_packet_detailed("'startpos_nation' field error detected");
93320 }
93321
93322#ifdef FREECIV_JSON_CONNECTION
93323 field_addr.name = "eowner";
93324#endif /* FREECIV_JSON_CONNECTION */
93325 e = 0;
93326
93327 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->eowner);
93328
93329 if (e) {
93330 log_packet_detailed("'eowner' field error detected");
93331 }
93332
93333#ifdef FREECIV_JSON_CONNECTION
93334 field_addr.name = "label";
93335#endif /* FREECIV_JSON_CONNECTION */
93336 e = 0;
93337
93338 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
93339
93340 if (e) {
93341 log_packet_detailed("'label' field error detected");
93342 }
93343#endif /* FREECIV_DELTA_PROTOCOL */
93344
93346}
93347
93348int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
93349{
93350 if (!pc->used) {
93351 log_error("WARNING: trying to send data to the closed connection %s",
93353 return -1;
93354 }
93355 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE].packet != nullptr, -1,
93356 "Handler for PACKET_EDIT_TILE not installed");
93357 return pc->phs.handlers->send[PACKET_EDIT_TILE].packet(pc, packet);
93358}
93359
93361{
93362 memset(packet, 0, sizeof(*packet));
93363}
93364
93365#define free_packet_edit_unit_create(_packet) (void) 0
93366#define destroy_packet_edit_unit_create free
93367
93368#ifdef FREECIV_DELTA_PROTOCOL
93369#define hash_packet_edit_unit_create_100 hash_const
93370#define cmp_packet_edit_unit_create_100 cmp_const
93372#endif /* FREECIV_DELTA_PROTOCOL */
93373
93375{
93376#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_create(_packet)
93378
93379#ifdef FREECIV_JSON_CONNECTION
93380 struct plocation field_addr;
93381 {
93382 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93385 }
93386#endif /* FREECIV_JSON_CONNECTION */
93387
93388 log_packet_detailed("packet_edit_unit_create_100: got info about ()");
93389
93390#ifdef FREECIV_DELTA_PROTOCOL
93393 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_CREATE;
93394
93395 if (nullptr == *hash) {
93397 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
93398 }
93399
93400 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93401 *real_packet = *old;
93402 } else {
93403 /* packet is already initialized empty */
93404 log_packet_detailed(" no old info");
93405 }
93406
93407#ifdef FREECIV_JSON_CONNECTION
93408 field_addr.name = "fields";
93409#endif /* FREECIV_JSON_CONNECTION */
93410 DIO_BV_GET(&din, &field_addr, fields);
93411
93412 if (BV_ISSET(fields, 0)) {
93413 log_packet_detailed(" got field 'owner'");
93414
93415#ifdef FREECIV_JSON_CONNECTION
93416 field_addr.name = "owner";
93417#endif /* FREECIV_JSON_CONNECTION */
93418
93419 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93421 }
93422 }
93423
93424 if (BV_ISSET(fields, 1)) {
93425 log_packet_detailed(" got field 'tile'");
93426
93427#ifdef FREECIV_JSON_CONNECTION
93428 field_addr.name = "tile";
93429#endif /* FREECIV_JSON_CONNECTION */
93430
93431 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93433 }
93434 }
93435
93436 if (BV_ISSET(fields, 2)) {
93437 log_packet_detailed(" got field 'type'");
93438
93439#ifdef FREECIV_JSON_CONNECTION
93440 field_addr.name = "type";
93441#endif /* FREECIV_JSON_CONNECTION */
93442
93443 {
93444 int readin;
93445
93446 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93448 }
93449 real_packet->type = readin;
93450 }
93451 }
93452
93453 if (BV_ISSET(fields, 3)) {
93454 log_packet_detailed(" got field 'count'");
93455
93456#ifdef FREECIV_JSON_CONNECTION
93457 field_addr.name = "count";
93458#endif /* FREECIV_JSON_CONNECTION */
93459
93460 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93462 }
93463 }
93464
93465 if (BV_ISSET(fields, 4)) {
93466 log_packet_detailed(" got field 'tag'");
93467
93468#ifdef FREECIV_JSON_CONNECTION
93469 field_addr.name = "tag";
93470#endif /* FREECIV_JSON_CONNECTION */
93471
93472 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
93474 }
93475 }
93476
93477 if (nullptr == old) {
93478 old = fc_malloc(sizeof(*old));
93480 *old = *real_packet;
93482 } else {
93483 *old = *real_packet;
93484 }
93485
93486#else /* FREECIV_DELTA_PROTOCOL */
93487#ifdef FREECIV_JSON_CONNECTION
93488 field_addr.name = "owner";
93489#endif /* FREECIV_JSON_CONNECTION */
93490
93491 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93493 }
93494
93495#ifdef FREECIV_JSON_CONNECTION
93496 field_addr.name = "tile";
93497#endif /* FREECIV_JSON_CONNECTION */
93498
93499 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93501 }
93502
93503#ifdef FREECIV_JSON_CONNECTION
93504 field_addr.name = "type";
93505#endif /* FREECIV_JSON_CONNECTION */
93506
93507 {
93508 int readin;
93509
93510 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93512 }
93513 real_packet->type = readin;
93514 }
93515
93516#ifdef FREECIV_JSON_CONNECTION
93517 field_addr.name = "count";
93518#endif /* FREECIV_JSON_CONNECTION */
93519
93520 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93522 }
93523
93524#ifdef FREECIV_JSON_CONNECTION
93525 field_addr.name = "tag";
93526#endif /* FREECIV_JSON_CONNECTION */
93527
93528 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
93530 }
93531#endif /* FREECIV_DELTA_PROTOCOL */
93532
93534#undef FREE_PACKET_STRUCT
93535}
93536
93538{
93539 const struct packet_edit_unit_create *real_packet = packet;
93540 int e;
93542
93543 log_packet_detailed("packet_edit_unit_create_100: sending info about ()");
93544
93545#ifdef FREECIV_DELTA_PROTOCOL
93548 bool differ;
93549 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_CREATE;
93550
93551 if (nullptr == *hash) {
93553 nullptr, nullptr, nullptr, destroy_packet_edit_unit_create);
93554 }
93555 BV_CLR_ALL(fields);
93556
93557 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93558 old = fc_malloc(sizeof(*old));
93559 /* temporary bitcopy just to insert correctly */
93560 *old = *real_packet;
93563 }
93564
93565 differ = (old->owner != real_packet->owner);
93566 if (differ) {
93567 BV_SET(fields, 0);
93568 }
93569
93570 differ = (old->tile != real_packet->tile);
93571 if (differ) {
93572 BV_SET(fields, 1);
93573 }
93574
93575 differ = (old->type != real_packet->type);
93576 if (differ) {
93577 BV_SET(fields, 2);
93578 }
93579
93580 differ = (old->count != real_packet->count);
93581 if (differ) {
93582 BV_SET(fields, 3);
93583 }
93584
93585 differ = (old->tag != real_packet->tag);
93586 if (differ) {
93587 BV_SET(fields, 4);
93588 }
93589#endif /* FREECIV_DELTA_PROTOCOL */
93590
93591#ifdef FREECIV_JSON_CONNECTION
93592 struct plocation field_addr;
93593 {
93594 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93597 }
93598#endif /* FREECIV_JSON_CONNECTION */
93599
93600#ifdef FREECIV_DELTA_PROTOCOL
93601#ifdef FREECIV_JSON_CONNECTION
93602 field_addr.name = "fields";
93603#endif /* FREECIV_JSON_CONNECTION */
93604 e = 0;
93605 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93606 if (e) {
93607 log_packet_detailed("fields bitvector error detected");
93608 }
93609
93610 if (BV_ISSET(fields, 0)) {
93611 log_packet_detailed(" field 'owner' has changed");
93612
93613#ifdef FREECIV_JSON_CONNECTION
93614 field_addr.name = "owner";
93615#endif /* FREECIV_JSON_CONNECTION */
93616 e = 0;
93617
93618 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93619
93620 if (e) {
93621 log_packet_detailed("'owner' field error detected");
93622 }
93623 }
93624
93625 if (BV_ISSET(fields, 1)) {
93626 log_packet_detailed(" field 'tile' has changed");
93627
93628#ifdef FREECIV_JSON_CONNECTION
93629 field_addr.name = "tile";
93630#endif /* FREECIV_JSON_CONNECTION */
93631 e = 0;
93632
93633 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93634
93635 if (e) {
93636 log_packet_detailed("'tile' field error detected");
93637 }
93638 }
93639
93640 if (BV_ISSET(fields, 2)) {
93641 log_packet_detailed(" field 'type' has changed");
93642
93643#ifdef FREECIV_JSON_CONNECTION
93644 field_addr.name = "type";
93645#endif /* FREECIV_JSON_CONNECTION */
93646 e = 0;
93647
93648 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93649
93650 if (e) {
93651 log_packet_detailed("'type' field error detected");
93652 }
93653 }
93654
93655 if (BV_ISSET(fields, 3)) {
93656 log_packet_detailed(" field 'count' has changed");
93657
93658#ifdef FREECIV_JSON_CONNECTION
93659 field_addr.name = "count";
93660#endif /* FREECIV_JSON_CONNECTION */
93661 e = 0;
93662
93663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93664
93665 if (e) {
93666 log_packet_detailed("'count' field error detected");
93667 }
93668 }
93669
93670 if (BV_ISSET(fields, 4)) {
93671 log_packet_detailed(" field 'tag' has changed");
93672
93673#ifdef FREECIV_JSON_CONNECTION
93674 field_addr.name = "tag";
93675#endif /* FREECIV_JSON_CONNECTION */
93676 e = 0;
93677
93678 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
93679
93680 if (e) {
93681 log_packet_detailed("'tag' field error detected");
93682 }
93683 }
93684
93685 *old = *real_packet;
93686
93687#else /* FREECIV_DELTA_PROTOCOL */
93688#ifdef FREECIV_JSON_CONNECTION
93689 field_addr.name = "owner";
93690#endif /* FREECIV_JSON_CONNECTION */
93691 e = 0;
93692
93693 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
93694
93695 if (e) {
93696 log_packet_detailed("'owner' field error detected");
93697 }
93698
93699#ifdef FREECIV_JSON_CONNECTION
93700 field_addr.name = "tile";
93701#endif /* FREECIV_JSON_CONNECTION */
93702 e = 0;
93703
93704 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
93705
93706 if (e) {
93707 log_packet_detailed("'tile' field error detected");
93708 }
93709
93710#ifdef FREECIV_JSON_CONNECTION
93711 field_addr.name = "type";
93712#endif /* FREECIV_JSON_CONNECTION */
93713 e = 0;
93714
93715 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
93716
93717 if (e) {
93718 log_packet_detailed("'type' field error detected");
93719 }
93720
93721#ifdef FREECIV_JSON_CONNECTION
93722 field_addr.name = "count";
93723#endif /* FREECIV_JSON_CONNECTION */
93724 e = 0;
93725
93726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
93727
93728 if (e) {
93729 log_packet_detailed("'count' field error detected");
93730 }
93731
93732#ifdef FREECIV_JSON_CONNECTION
93733 field_addr.name = "tag";
93734#endif /* FREECIV_JSON_CONNECTION */
93735 e = 0;
93736
93737 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
93738
93739 if (e) {
93740 log_packet_detailed("'tag' field error detected");
93741 }
93742#endif /* FREECIV_DELTA_PROTOCOL */
93743
93745}
93746
93748{
93749 if (!pc->used) {
93750 log_error("WARNING: trying to send data to the closed connection %s",
93752 return -1;
93753 }
93754 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet != nullptr, -1,
93755 "Handler for PACKET_EDIT_UNIT_CREATE not installed");
93756 return pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet(pc, packet);
93757}
93758
93759int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
93760{
93761 struct packet_edit_unit_create packet, *real_packet = &packet;
93762
93765 real_packet->type = type;
93766 real_packet->count = count;
93767 real_packet->tag = tag;
93768
93770}
93771
93773{
93774 memset(packet, 0, sizeof(*packet));
93775}
93776
93777#define free_packet_edit_unit_remove(_packet) (void) 0
93778#define destroy_packet_edit_unit_remove free
93779
93780#ifdef FREECIV_DELTA_PROTOCOL
93781#define hash_packet_edit_unit_remove_100 hash_const
93782#define cmp_packet_edit_unit_remove_100 cmp_const
93784#endif /* FREECIV_DELTA_PROTOCOL */
93785
93787{
93788#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove(_packet)
93790
93791#ifdef FREECIV_JSON_CONNECTION
93792 struct plocation field_addr;
93793 {
93794 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93797 }
93798#endif /* FREECIV_JSON_CONNECTION */
93799
93800 log_packet_detailed("packet_edit_unit_remove_100: got info about ()");
93801
93802#ifdef FREECIV_DELTA_PROTOCOL
93805 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE;
93806
93807 if (nullptr == *hash) {
93809 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
93810 }
93811
93812 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
93813 *real_packet = *old;
93814 } else {
93815 /* packet is already initialized empty */
93816 log_packet_detailed(" no old info");
93817 }
93818
93819#ifdef FREECIV_JSON_CONNECTION
93820 field_addr.name = "fields";
93821#endif /* FREECIV_JSON_CONNECTION */
93822 DIO_BV_GET(&din, &field_addr, fields);
93823
93824 if (BV_ISSET(fields, 0)) {
93825 log_packet_detailed(" got field 'owner'");
93826
93827#ifdef FREECIV_JSON_CONNECTION
93828 field_addr.name = "owner";
93829#endif /* FREECIV_JSON_CONNECTION */
93830
93831 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93833 }
93834 }
93835
93836 if (BV_ISSET(fields, 1)) {
93837 log_packet_detailed(" got field 'tile'");
93838
93839#ifdef FREECIV_JSON_CONNECTION
93840 field_addr.name = "tile";
93841#endif /* FREECIV_JSON_CONNECTION */
93842
93843 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93845 }
93846 }
93847
93848 if (BV_ISSET(fields, 2)) {
93849 log_packet_detailed(" got field 'type'");
93850
93851#ifdef FREECIV_JSON_CONNECTION
93852 field_addr.name = "type";
93853#endif /* FREECIV_JSON_CONNECTION */
93854
93855 {
93856 int readin;
93857
93858 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93860 }
93861 real_packet->type = readin;
93862 }
93863 }
93864
93865 if (BV_ISSET(fields, 3)) {
93866 log_packet_detailed(" got field 'count'");
93867
93868#ifdef FREECIV_JSON_CONNECTION
93869 field_addr.name = "count";
93870#endif /* FREECIV_JSON_CONNECTION */
93871
93872 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93874 }
93875 }
93876
93877 if (nullptr == old) {
93878 old = fc_malloc(sizeof(*old));
93880 *old = *real_packet;
93882 } else {
93883 *old = *real_packet;
93884 }
93885
93886#else /* FREECIV_DELTA_PROTOCOL */
93887#ifdef FREECIV_JSON_CONNECTION
93888 field_addr.name = "owner";
93889#endif /* FREECIV_JSON_CONNECTION */
93890
93891 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
93893 }
93894
93895#ifdef FREECIV_JSON_CONNECTION
93896 field_addr.name = "tile";
93897#endif /* FREECIV_JSON_CONNECTION */
93898
93899 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
93901 }
93902
93903#ifdef FREECIV_JSON_CONNECTION
93904 field_addr.name = "type";
93905#endif /* FREECIV_JSON_CONNECTION */
93906
93907 {
93908 int readin;
93909
93910 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
93912 }
93913 real_packet->type = readin;
93914 }
93915
93916#ifdef FREECIV_JSON_CONNECTION
93917 field_addr.name = "count";
93918#endif /* FREECIV_JSON_CONNECTION */
93919
93920 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
93922 }
93923#endif /* FREECIV_DELTA_PROTOCOL */
93924
93926#undef FREE_PACKET_STRUCT
93927}
93928
93930{
93931 const struct packet_edit_unit_remove *real_packet = packet;
93932 int e;
93934
93935 log_packet_detailed("packet_edit_unit_remove_100: sending info about ()");
93936
93937#ifdef FREECIV_DELTA_PROTOCOL
93940 bool differ;
93941 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE;
93942
93943 if (nullptr == *hash) {
93945 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove);
93946 }
93947 BV_CLR_ALL(fields);
93948
93949 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
93950 old = fc_malloc(sizeof(*old));
93951 /* temporary bitcopy just to insert correctly */
93952 *old = *real_packet;
93955 }
93956
93957 differ = (old->owner != real_packet->owner);
93958 if (differ) {
93959 BV_SET(fields, 0);
93960 }
93961
93962 differ = (old->tile != real_packet->tile);
93963 if (differ) {
93964 BV_SET(fields, 1);
93965 }
93966
93967 differ = (old->type != real_packet->type);
93968 if (differ) {
93969 BV_SET(fields, 2);
93970 }
93971
93972 differ = (old->count != real_packet->count);
93973 if (differ) {
93974 BV_SET(fields, 3);
93975 }
93976#endif /* FREECIV_DELTA_PROTOCOL */
93977
93978#ifdef FREECIV_JSON_CONNECTION
93979 struct plocation field_addr;
93980 {
93981 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
93984 }
93985#endif /* FREECIV_JSON_CONNECTION */
93986
93987#ifdef FREECIV_DELTA_PROTOCOL
93988#ifdef FREECIV_JSON_CONNECTION
93989 field_addr.name = "fields";
93990#endif /* FREECIV_JSON_CONNECTION */
93991 e = 0;
93992 e |= DIO_BV_PUT(&dout, &field_addr, fields);
93993 if (e) {
93994 log_packet_detailed("fields bitvector error detected");
93995 }
93996
93997 if (BV_ISSET(fields, 0)) {
93998 log_packet_detailed(" field 'owner' has changed");
93999
94000#ifdef FREECIV_JSON_CONNECTION
94001 field_addr.name = "owner";
94002#endif /* FREECIV_JSON_CONNECTION */
94003 e = 0;
94004
94005 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94006
94007 if (e) {
94008 log_packet_detailed("'owner' field error detected");
94009 }
94010 }
94011
94012 if (BV_ISSET(fields, 1)) {
94013 log_packet_detailed(" field 'tile' has changed");
94014
94015#ifdef FREECIV_JSON_CONNECTION
94016 field_addr.name = "tile";
94017#endif /* FREECIV_JSON_CONNECTION */
94018 e = 0;
94019
94020 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94021
94022 if (e) {
94023 log_packet_detailed("'tile' field error detected");
94024 }
94025 }
94026
94027 if (BV_ISSET(fields, 2)) {
94028 log_packet_detailed(" field 'type' has changed");
94029
94030#ifdef FREECIV_JSON_CONNECTION
94031 field_addr.name = "type";
94032#endif /* FREECIV_JSON_CONNECTION */
94033 e = 0;
94034
94035 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94036
94037 if (e) {
94038 log_packet_detailed("'type' field error detected");
94039 }
94040 }
94041
94042 if (BV_ISSET(fields, 3)) {
94043 log_packet_detailed(" field 'count' has changed");
94044
94045#ifdef FREECIV_JSON_CONNECTION
94046 field_addr.name = "count";
94047#endif /* FREECIV_JSON_CONNECTION */
94048 e = 0;
94049
94050 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94051
94052 if (e) {
94053 log_packet_detailed("'count' field error detected");
94054 }
94055 }
94056
94057 *old = *real_packet;
94058
94059#else /* FREECIV_DELTA_PROTOCOL */
94060#ifdef FREECIV_JSON_CONNECTION
94061 field_addr.name = "owner";
94062#endif /* FREECIV_JSON_CONNECTION */
94063 e = 0;
94064
94065 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94066
94067 if (e) {
94068 log_packet_detailed("'owner' field error detected");
94069 }
94070
94071#ifdef FREECIV_JSON_CONNECTION
94072 field_addr.name = "tile";
94073#endif /* FREECIV_JSON_CONNECTION */
94074 e = 0;
94075
94076 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
94077
94078 if (e) {
94079 log_packet_detailed("'tile' field error detected");
94080 }
94081
94082#ifdef FREECIV_JSON_CONNECTION
94083 field_addr.name = "type";
94084#endif /* FREECIV_JSON_CONNECTION */
94085 e = 0;
94086
94087 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
94088
94089 if (e) {
94090 log_packet_detailed("'type' field error detected");
94091 }
94092
94093#ifdef FREECIV_JSON_CONNECTION
94094 field_addr.name = "count";
94095#endif /* FREECIV_JSON_CONNECTION */
94096 e = 0;
94097
94098 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
94099
94100 if (e) {
94101 log_packet_detailed("'count' field error detected");
94102 }
94103#endif /* FREECIV_DELTA_PROTOCOL */
94104
94106}
94107
94109{
94110 if (!pc->used) {
94111 log_error("WARNING: trying to send data to the closed connection %s",
94113 return -1;
94114 }
94115 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet != nullptr, -1,
94116 "Handler for PACKET_EDIT_UNIT_REMOVE not installed");
94117 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet(pc, packet);
94118}
94119
94121{
94122 struct packet_edit_unit_remove packet, *real_packet = &packet;
94123
94126 real_packet->type = type;
94127 real_packet->count = count;
94128
94130}
94131
94133{
94134 memset(packet, 0, sizeof(*packet));
94135}
94136
94137#define free_packet_edit_unit_remove_by_id(_packet) (void) 0
94138#define destroy_packet_edit_unit_remove_by_id free
94139
94140#ifdef FREECIV_DELTA_PROTOCOL
94141#define hash_packet_edit_unit_remove_by_id_100 hash_const
94142#define cmp_packet_edit_unit_remove_by_id_100 cmp_const
94144#endif /* FREECIV_DELTA_PROTOCOL */
94145
94147{
94148#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit_remove_by_id(_packet)
94150
94151#ifdef FREECIV_JSON_CONNECTION
94152 struct plocation field_addr;
94153 {
94154 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94157 }
94158#endif /* FREECIV_JSON_CONNECTION */
94159
94160 log_packet_detailed("packet_edit_unit_remove_by_id_100: got info about ()");
94161
94162#ifdef FREECIV_DELTA_PROTOCOL
94165 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE_BY_ID;
94166
94167 if (nullptr == *hash) {
94169 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
94170 }
94171
94172 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94173 *real_packet = *old;
94174 } else {
94175 /* packet is already initialized empty */
94176 log_packet_detailed(" no old info");
94177 }
94178
94179#ifdef FREECIV_JSON_CONNECTION
94180 field_addr.name = "fields";
94181#endif /* FREECIV_JSON_CONNECTION */
94182 DIO_BV_GET(&din, &field_addr, fields);
94183
94184 if (BV_ISSET(fields, 0)) {
94185 log_packet_detailed(" got field 'id'");
94186
94187#ifdef FREECIV_JSON_CONNECTION
94188 field_addr.name = "id";
94189#endif /* FREECIV_JSON_CONNECTION */
94190
94191 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94193 }
94194 }
94195
94196 if (nullptr == old) {
94197 old = fc_malloc(sizeof(*old));
94199 *old = *real_packet;
94201 } else {
94202 *old = *real_packet;
94203 }
94204
94205#else /* FREECIV_DELTA_PROTOCOL */
94206#ifdef FREECIV_JSON_CONNECTION
94207 field_addr.name = "id";
94208#endif /* FREECIV_JSON_CONNECTION */
94209
94210 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94212 }
94213#endif /* FREECIV_DELTA_PROTOCOL */
94214
94216#undef FREE_PACKET_STRUCT
94217}
94218
94220{
94221 const struct packet_edit_unit_remove_by_id *real_packet = packet;
94222 int e;
94224
94225 log_packet_detailed("packet_edit_unit_remove_by_id_100: sending info about ()");
94226
94227#ifdef FREECIV_DELTA_PROTOCOL
94230 bool differ;
94231 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE_BY_ID;
94232
94233 if (nullptr == *hash) {
94235 nullptr, nullptr, nullptr, destroy_packet_edit_unit_remove_by_id);
94236 }
94237 BV_CLR_ALL(fields);
94238
94239 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94240 old = fc_malloc(sizeof(*old));
94241 /* temporary bitcopy just to insert correctly */
94242 *old = *real_packet;
94245 }
94246
94247 differ = (old->id != real_packet->id);
94248 if (differ) {
94249 BV_SET(fields, 0);
94250 }
94251#endif /* FREECIV_DELTA_PROTOCOL */
94252
94253#ifdef FREECIV_JSON_CONNECTION
94254 struct plocation field_addr;
94255 {
94256 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94259 }
94260#endif /* FREECIV_JSON_CONNECTION */
94261
94262#ifdef FREECIV_DELTA_PROTOCOL
94263#ifdef FREECIV_JSON_CONNECTION
94264 field_addr.name = "fields";
94265#endif /* FREECIV_JSON_CONNECTION */
94266 e = 0;
94267 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94268 if (e) {
94269 log_packet_detailed("fields bitvector error detected");
94270 }
94271
94272 if (BV_ISSET(fields, 0)) {
94273 log_packet_detailed(" field 'id' has changed");
94274
94275#ifdef FREECIV_JSON_CONNECTION
94276 field_addr.name = "id";
94277#endif /* FREECIV_JSON_CONNECTION */
94278 e = 0;
94279
94280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94281
94282 if (e) {
94283 log_packet_detailed("'id' field error detected");
94284 }
94285 }
94286
94287 *old = *real_packet;
94288
94289#else /* FREECIV_DELTA_PROTOCOL */
94290#ifdef FREECIV_JSON_CONNECTION
94291 field_addr.name = "id";
94292#endif /* FREECIV_JSON_CONNECTION */
94293 e = 0;
94294
94295 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94296
94297 if (e) {
94298 log_packet_detailed("'id' field error detected");
94299 }
94300#endif /* FREECIV_DELTA_PROTOCOL */
94301
94303}
94304
94306{
94307 if (!pc->used) {
94308 log_error("WARNING: trying to send data to the closed connection %s",
94310 return -1;
94311 }
94312 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet != nullptr, -1,
94313 "Handler for PACKET_EDIT_UNIT_REMOVE_BY_ID not installed");
94314 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet(pc, packet);
94315}
94316
94318{
94319 struct packet_edit_unit_remove_by_id packet, *real_packet = &packet;
94320
94321 real_packet->id = id;
94322
94324}
94325
94326static inline void init_packet_edit_unit(struct packet_edit_unit *packet)
94327{
94328 memset(packet, 0, sizeof(*packet));
94329}
94330
94331#define free_packet_edit_unit(_packet) (void) 0
94332#define destroy_packet_edit_unit free
94333
94334#ifdef FREECIV_DELTA_PROTOCOL
94336{
94337 const struct packet_edit_unit *key = (const struct packet_edit_unit *) vkey;
94338 genhash_val_t result = 0;
94339
94340 result += key->id;
94341
94342 result &= 0xFFFFFFFF;
94343 return result;
94344}
94345
94346static bool cmp_packet_edit_unit_100(const void *vkey1, const void *vkey2)
94347{
94348 const struct packet_edit_unit *old = (const struct packet_edit_unit *) vkey1;
94349 const struct packet_edit_unit *real_packet = (const struct packet_edit_unit *) vkey2;
94350 bool differ;
94351
94352 differ = (old->id != real_packet->id);
94353
94354 return !differ;
94355}
94357#endif /* FREECIV_DELTA_PROTOCOL */
94358
94360{
94361#define FREE_PACKET_STRUCT(_packet) free_packet_edit_unit(_packet)
94363
94364#ifdef FREECIV_JSON_CONNECTION
94365 struct plocation field_addr;
94366 {
94367 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94370 }
94371#endif /* FREECIV_JSON_CONNECTION */
94372
94373#ifdef FREECIV_JSON_CONNECTION
94374 field_addr.name = "id";
94375#endif /* FREECIV_JSON_CONNECTION */
94376
94377 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
94379 }
94380
94381 log_packet_detailed("packet_edit_unit_100: got info about (%d)",
94382 real_packet->id);
94383
94384#ifdef FREECIV_DELTA_PROTOCOL
94386 struct packet_edit_unit *old;
94387 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT;
94388
94389 if (nullptr == *hash) {
94391 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
94392 }
94393
94394 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
94395 *real_packet = *old;
94396 } else {
94397 /* packet is already initialized empty */
94398 log_packet_detailed(" no old info");
94399 }
94400
94401#ifdef FREECIV_JSON_CONNECTION
94402 field_addr.name = "fields";
94403#endif /* FREECIV_JSON_CONNECTION */
94404 DIO_BV_GET(&din, &field_addr, fields);
94405
94406 if (BV_ISSET(fields, 0)) {
94407 log_packet_detailed(" got field 'utype'");
94408
94409#ifdef FREECIV_JSON_CONNECTION
94410 field_addr.name = "utype";
94411#endif /* FREECIV_JSON_CONNECTION */
94412
94413 {
94414 int readin;
94415
94416 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94418 }
94419 real_packet->utype = readin;
94420 }
94421 }
94422
94423 if (BV_ISSET(fields, 1)) {
94424 log_packet_detailed(" got field 'owner'");
94425
94426#ifdef FREECIV_JSON_CONNECTION
94427 field_addr.name = "owner";
94428#endif /* FREECIV_JSON_CONNECTION */
94429
94430 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94432 }
94433 }
94434
94435 if (BV_ISSET(fields, 2)) {
94436 log_packet_detailed(" got field 'homecity'");
94437
94438#ifdef FREECIV_JSON_CONNECTION
94439 field_addr.name = "homecity";
94440#endif /* FREECIV_JSON_CONNECTION */
94441
94442 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
94444 }
94445 }
94446
94447 if (BV_ISSET(fields, 3)) {
94448 log_packet_detailed(" got field 'moves_left'");
94449
94450#ifdef FREECIV_JSON_CONNECTION
94451 field_addr.name = "moves_left";
94452#endif /* FREECIV_JSON_CONNECTION */
94453
94454 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
94455 RECEIVE_PACKET_FIELD_ERROR(moves_left);
94456 }
94457 }
94458
94459 if (BV_ISSET(fields, 4)) {
94460 log_packet_detailed(" got field 'hp'");
94461
94462#ifdef FREECIV_JSON_CONNECTION
94463 field_addr.name = "hp";
94464#endif /* FREECIV_JSON_CONNECTION */
94465
94466 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
94468 }
94469 }
94470
94471 if (BV_ISSET(fields, 5)) {
94472 log_packet_detailed(" got field 'veteran'");
94473
94474#ifdef FREECIV_JSON_CONNECTION
94475 field_addr.name = "veteran";
94476#endif /* FREECIV_JSON_CONNECTION */
94477
94478 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
94480 }
94481 }
94482
94483 if (BV_ISSET(fields, 6)) {
94484 log_packet_detailed(" got field 'fuel'");
94485
94486#ifdef FREECIV_JSON_CONNECTION
94487 field_addr.name = "fuel";
94488#endif /* FREECIV_JSON_CONNECTION */
94489
94490 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
94492 }
94493 }
94494
94495 if (BV_ISSET(fields, 7)) {
94496 log_packet_detailed(" got field 'activity'");
94497
94498#ifdef FREECIV_JSON_CONNECTION
94499 field_addr.name = "activity";
94500#endif /* FREECIV_JSON_CONNECTION */
94501
94502 {
94503 int readin;
94504
94505 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
94507 }
94508 real_packet->activity = readin;
94509 }
94510 }
94511
94512 if (BV_ISSET(fields, 8)) {
94513 log_packet_detailed(" got field 'activity_count'");
94514
94515#ifdef FREECIV_JSON_CONNECTION
94516 field_addr.name = "activity_count";
94517#endif /* FREECIV_JSON_CONNECTION */
94518
94519 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
94520 RECEIVE_PACKET_FIELD_ERROR(activity_count);
94521 }
94522 }
94523
94524 if (BV_ISSET(fields, 9)) {
94525 log_packet_detailed(" got field 'activity_base'");
94526
94527#ifdef FREECIV_JSON_CONNECTION
94528 field_addr.name = "activity_base";
94529#endif /* FREECIV_JSON_CONNECTION */
94530
94531 {
94532 int readin;
94533
94534 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
94535 RECEIVE_PACKET_FIELD_ERROR(activity_base);
94536 }
94537 real_packet->activity_base = readin;
94538 }
94539 }
94540
94541 real_packet->debug = BV_ISSET(fields, 10);
94542
94543 real_packet->moved = BV_ISSET(fields, 11);
94544
94545 real_packet->paradropped = BV_ISSET(fields, 12);
94546
94547 real_packet->done_moving = BV_ISSET(fields, 13);
94548
94549 if (BV_ISSET(fields, 14)) {
94550 log_packet_detailed(" got field 'transported_by'");
94551
94552#ifdef FREECIV_JSON_CONNECTION
94553 field_addr.name = "transported_by";
94554#endif /* FREECIV_JSON_CONNECTION */
94555
94556 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
94557 RECEIVE_PACKET_FIELD_ERROR(transported_by);
94558 }
94559 }
94560
94561 real_packet->stay = BV_ISSET(fields, 15);
94562
94563 if (nullptr == old) {
94564 old = fc_malloc(sizeof(*old));
94566 *old = *real_packet;
94568 } else {
94569 *old = *real_packet;
94570 }
94571
94572#else /* FREECIV_DELTA_PROTOCOL */
94573#ifdef FREECIV_JSON_CONNECTION
94574 field_addr.name = "utype";
94575#endif /* FREECIV_JSON_CONNECTION */
94576
94577 {
94578 int readin;
94579
94580 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
94582 }
94583 real_packet->utype = readin;
94584 }
94585
94586#ifdef FREECIV_JSON_CONNECTION
94587 field_addr.name = "owner";
94588#endif /* FREECIV_JSON_CONNECTION */
94589
94590 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
94592 }
94593
94594#ifdef FREECIV_JSON_CONNECTION
94595 field_addr.name = "homecity";
94596#endif /* FREECIV_JSON_CONNECTION */
94597
94598 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
94600 }
94601
94602#ifdef FREECIV_JSON_CONNECTION
94603 field_addr.name = "moves_left";
94604#endif /* FREECIV_JSON_CONNECTION */
94605
94606 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
94607 RECEIVE_PACKET_FIELD_ERROR(moves_left);
94608 }
94609
94610#ifdef FREECIV_JSON_CONNECTION
94611 field_addr.name = "hp";
94612#endif /* FREECIV_JSON_CONNECTION */
94613
94614 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
94616 }
94617
94618#ifdef FREECIV_JSON_CONNECTION
94619 field_addr.name = "veteran";
94620#endif /* FREECIV_JSON_CONNECTION */
94621
94622 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
94624 }
94625
94626#ifdef FREECIV_JSON_CONNECTION
94627 field_addr.name = "fuel";
94628#endif /* FREECIV_JSON_CONNECTION */
94629
94630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
94632 }
94633
94634#ifdef FREECIV_JSON_CONNECTION
94635 field_addr.name = "activity";
94636#endif /* FREECIV_JSON_CONNECTION */
94637
94638 {
94639 int readin;
94640
94641 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
94643 }
94644 real_packet->activity = readin;
94645 }
94646
94647#ifdef FREECIV_JSON_CONNECTION
94648 field_addr.name = "activity_count";
94649#endif /* FREECIV_JSON_CONNECTION */
94650
94651 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
94652 RECEIVE_PACKET_FIELD_ERROR(activity_count);
94653 }
94654
94655#ifdef FREECIV_JSON_CONNECTION
94656 field_addr.name = "activity_base";
94657#endif /* FREECIV_JSON_CONNECTION */
94658
94659 {
94660 int readin;
94661
94662 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
94663 RECEIVE_PACKET_FIELD_ERROR(activity_base);
94664 }
94665 real_packet->activity_base = readin;
94666 }
94667
94668#ifdef FREECIV_JSON_CONNECTION
94669 field_addr.name = "debug";
94670#endif /* FREECIV_JSON_CONNECTION */
94671
94672 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
94674 }
94675
94676#ifdef FREECIV_JSON_CONNECTION
94677 field_addr.name = "moved";
94678#endif /* FREECIV_JSON_CONNECTION */
94679
94680 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->moved)) {
94682 }
94683
94684#ifdef FREECIV_JSON_CONNECTION
94685 field_addr.name = "paradropped";
94686#endif /* FREECIV_JSON_CONNECTION */
94687
94688 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
94689 RECEIVE_PACKET_FIELD_ERROR(paradropped);
94690 }
94691
94692#ifdef FREECIV_JSON_CONNECTION
94693 field_addr.name = "done_moving";
94694#endif /* FREECIV_JSON_CONNECTION */
94695
94696 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
94697 RECEIVE_PACKET_FIELD_ERROR(done_moving);
94698 }
94699
94700#ifdef FREECIV_JSON_CONNECTION
94701 field_addr.name = "transported_by";
94702#endif /* FREECIV_JSON_CONNECTION */
94703
94704 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
94705 RECEIVE_PACKET_FIELD_ERROR(transported_by);
94706 }
94707
94708#ifdef FREECIV_JSON_CONNECTION
94709 field_addr.name = "stay";
94710#endif /* FREECIV_JSON_CONNECTION */
94711
94712 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
94714 }
94715#endif /* FREECIV_DELTA_PROTOCOL */
94716
94718#undef FREE_PACKET_STRUCT
94719}
94720
94721static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
94722{
94723 const struct packet_edit_unit *real_packet = packet;
94724 int e;
94726
94727 log_packet_detailed("packet_edit_unit_100: sending info about (%d)",
94728 real_packet->id);
94729
94730#ifdef FREECIV_DELTA_PROTOCOL
94732 struct packet_edit_unit *old;
94733 bool differ;
94734 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT;
94735
94736 if (nullptr == *hash) {
94738 nullptr, nullptr, nullptr, destroy_packet_edit_unit);
94739 }
94740 BV_CLR_ALL(fields);
94741
94742 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
94743 old = fc_malloc(sizeof(*old));
94744 /* temporary bitcopy just to insert correctly */
94745 *old = *real_packet;
94748 }
94749
94750 differ = (old->utype != real_packet->utype);
94751 if (differ) {
94752 BV_SET(fields, 0);
94753 }
94754
94755 differ = (old->owner != real_packet->owner);
94756 if (differ) {
94757 BV_SET(fields, 1);
94758 }
94759
94760 differ = (old->homecity != real_packet->homecity);
94761 if (differ) {
94762 BV_SET(fields, 2);
94763 }
94764
94765 differ = (old->moves_left != real_packet->moves_left);
94766 if (differ) {
94767 BV_SET(fields, 3);
94768 }
94769
94770 differ = (old->hp != real_packet->hp);
94771 if (differ) {
94772 BV_SET(fields, 4);
94773 }
94774
94775 differ = (old->veteran != real_packet->veteran);
94776 if (differ) {
94777 BV_SET(fields, 5);
94778 }
94779
94780 differ = (old->fuel != real_packet->fuel);
94781 if (differ) {
94782 BV_SET(fields, 6);
94783 }
94784
94785 differ = (old->activity != real_packet->activity);
94786 if (differ) {
94787 BV_SET(fields, 7);
94788 }
94789
94790 differ = (old->activity_count != real_packet->activity_count);
94791 if (differ) {
94792 BV_SET(fields, 8);
94793 }
94794
94795 differ = (old->activity_base != real_packet->activity_base);
94796 if (differ) {
94797 BV_SET(fields, 9);
94798 }
94799
94800 /* folded into head */
94801 if (real_packet->debug) {
94802 BV_SET(fields, 10);
94803 }
94804
94805 /* folded into head */
94806 if (real_packet->moved) {
94807 BV_SET(fields, 11);
94808 }
94809
94810 /* folded into head */
94811 if (real_packet->paradropped) {
94812 BV_SET(fields, 12);
94813 }
94814
94815 /* folded into head */
94816 if (real_packet->done_moving) {
94817 BV_SET(fields, 13);
94818 }
94819
94820 differ = (old->transported_by != real_packet->transported_by);
94821 if (differ) {
94822 BV_SET(fields, 14);
94823 }
94824
94825 /* folded into head */
94826 if (real_packet->stay) {
94827 BV_SET(fields, 15);
94828 }
94829#endif /* FREECIV_DELTA_PROTOCOL */
94830
94831#ifdef FREECIV_JSON_CONNECTION
94832 struct plocation field_addr;
94833 {
94834 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
94837 }
94838#endif /* FREECIV_JSON_CONNECTION */
94839
94840#ifdef FREECIV_JSON_CONNECTION
94841 field_addr.name = "id";
94842#endif /* FREECIV_JSON_CONNECTION */
94843 e = 0;
94844
94845 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
94846
94847 if (e) {
94848 log_packet_detailed("'id' field error detected");
94849 }
94850
94851#ifdef FREECIV_DELTA_PROTOCOL
94852#ifdef FREECIV_JSON_CONNECTION
94853 field_addr.name = "fields";
94854#endif /* FREECIV_JSON_CONNECTION */
94855 e = 0;
94856 e |= DIO_BV_PUT(&dout, &field_addr, fields);
94857 if (e) {
94858 log_packet_detailed("fields bitvector error detected");
94859 }
94860
94861 if (BV_ISSET(fields, 0)) {
94862 log_packet_detailed(" field 'utype' has changed");
94863
94864#ifdef FREECIV_JSON_CONNECTION
94865 field_addr.name = "utype";
94866#endif /* FREECIV_JSON_CONNECTION */
94867 e = 0;
94868
94869 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
94870
94871 if (e) {
94872 log_packet_detailed("'utype' field error detected");
94873 }
94874 }
94875
94876 if (BV_ISSET(fields, 1)) {
94877 log_packet_detailed(" field 'owner' has changed");
94878
94879#ifdef FREECIV_JSON_CONNECTION
94880 field_addr.name = "owner";
94881#endif /* FREECIV_JSON_CONNECTION */
94882 e = 0;
94883
94884 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
94885
94886 if (e) {
94887 log_packet_detailed("'owner' field error detected");
94888 }
94889 }
94890
94891 if (BV_ISSET(fields, 2)) {
94892 log_packet_detailed(" field 'homecity' has changed");
94893
94894#ifdef FREECIV_JSON_CONNECTION
94895 field_addr.name = "homecity";
94896#endif /* FREECIV_JSON_CONNECTION */
94897 e = 0;
94898
94899 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
94900
94901 if (e) {
94902 log_packet_detailed("'homecity' field error detected");
94903 }
94904 }
94905
94906 if (BV_ISSET(fields, 3)) {
94907 log_packet_detailed(" field 'moves_left' has changed");
94908
94909#ifdef FREECIV_JSON_CONNECTION
94910 field_addr.name = "moves_left";
94911#endif /* FREECIV_JSON_CONNECTION */
94912 e = 0;
94913
94914 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
94915
94916 if (e) {
94917 log_packet_detailed("'moves_left' field error detected");
94918 }
94919 }
94920
94921 if (BV_ISSET(fields, 4)) {
94922 log_packet_detailed(" field 'hp' has changed");
94923
94924#ifdef FREECIV_JSON_CONNECTION
94925 field_addr.name = "hp";
94926#endif /* FREECIV_JSON_CONNECTION */
94927 e = 0;
94928
94929 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
94930
94931 if (e) {
94932 log_packet_detailed("'hp' field error detected");
94933 }
94934 }
94935
94936 if (BV_ISSET(fields, 5)) {
94937 log_packet_detailed(" field 'veteran' has changed");
94938
94939#ifdef FREECIV_JSON_CONNECTION
94940 field_addr.name = "veteran";
94941#endif /* FREECIV_JSON_CONNECTION */
94942 e = 0;
94943
94944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
94945
94946 if (e) {
94947 log_packet_detailed("'veteran' field error detected");
94948 }
94949 }
94950
94951 if (BV_ISSET(fields, 6)) {
94952 log_packet_detailed(" field 'fuel' has changed");
94953
94954#ifdef FREECIV_JSON_CONNECTION
94955 field_addr.name = "fuel";
94956#endif /* FREECIV_JSON_CONNECTION */
94957 e = 0;
94958
94959 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
94960
94961 if (e) {
94962 log_packet_detailed("'fuel' field error detected");
94963 }
94964 }
94965
94966 if (BV_ISSET(fields, 7)) {
94967 log_packet_detailed(" field 'activity' has changed");
94968
94969#ifdef FREECIV_JSON_CONNECTION
94970 field_addr.name = "activity";
94971#endif /* FREECIV_JSON_CONNECTION */
94972 e = 0;
94973
94974 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
94975
94976 if (e) {
94977 log_packet_detailed("'activity' field error detected");
94978 }
94979 }
94980
94981 if (BV_ISSET(fields, 8)) {
94982 log_packet_detailed(" field 'activity_count' has changed");
94983
94984#ifdef FREECIV_JSON_CONNECTION
94985 field_addr.name = "activity_count";
94986#endif /* FREECIV_JSON_CONNECTION */
94987 e = 0;
94988
94989 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
94990
94991 if (e) {
94992 log_packet_detailed("'activity_count' field error detected");
94993 }
94994 }
94995
94996 if (BV_ISSET(fields, 9)) {
94997 log_packet_detailed(" field 'activity_base' has changed");
94998
94999#ifdef FREECIV_JSON_CONNECTION
95000 field_addr.name = "activity_base";
95001#endif /* FREECIV_JSON_CONNECTION */
95002 e = 0;
95003
95004 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
95005
95006 if (e) {
95007 log_packet_detailed("'activity_base' field error detected");
95008 }
95009 }
95010
95011 /* field 10 is folded into the header */
95012
95013 /* field 11 is folded into the header */
95014
95015 /* field 12 is folded into the header */
95016
95017 /* field 13 is folded into the header */
95018
95019 if (BV_ISSET(fields, 14)) {
95020 log_packet_detailed(" field 'transported_by' has changed");
95021
95022#ifdef FREECIV_JSON_CONNECTION
95023 field_addr.name = "transported_by";
95024#endif /* FREECIV_JSON_CONNECTION */
95025 e = 0;
95026
95027 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
95028
95029 if (e) {
95030 log_packet_detailed("'transported_by' field error detected");
95031 }
95032 }
95033
95034 /* field 15 is folded into the header */
95035
95036 *old = *real_packet;
95037
95038#else /* FREECIV_DELTA_PROTOCOL */
95039#ifdef FREECIV_JSON_CONNECTION
95040 field_addr.name = "utype";
95041#endif /* FREECIV_JSON_CONNECTION */
95042 e = 0;
95043
95044 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
95045
95046 if (e) {
95047 log_packet_detailed("'utype' field error detected");
95048 }
95049
95050#ifdef FREECIV_JSON_CONNECTION
95051 field_addr.name = "owner";
95052#endif /* FREECIV_JSON_CONNECTION */
95053 e = 0;
95054
95055 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95056
95057 if (e) {
95058 log_packet_detailed("'owner' field error detected");
95059 }
95060
95061#ifdef FREECIV_JSON_CONNECTION
95062 field_addr.name = "homecity";
95063#endif /* FREECIV_JSON_CONNECTION */
95064 e = 0;
95065
95066 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
95067
95068 if (e) {
95069 log_packet_detailed("'homecity' field error detected");
95070 }
95071
95072#ifdef FREECIV_JSON_CONNECTION
95073 field_addr.name = "moves_left";
95074#endif /* FREECIV_JSON_CONNECTION */
95075 e = 0;
95076
95077 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
95078
95079 if (e) {
95080 log_packet_detailed("'moves_left' field error detected");
95081 }
95082
95083#ifdef FREECIV_JSON_CONNECTION
95084 field_addr.name = "hp";
95085#endif /* FREECIV_JSON_CONNECTION */
95086 e = 0;
95087
95088 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
95089
95090 if (e) {
95091 log_packet_detailed("'hp' field error detected");
95092 }
95093
95094#ifdef FREECIV_JSON_CONNECTION
95095 field_addr.name = "veteran";
95096#endif /* FREECIV_JSON_CONNECTION */
95097 e = 0;
95098
95099 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
95100
95101 if (e) {
95102 log_packet_detailed("'veteran' field error detected");
95103 }
95104
95105#ifdef FREECIV_JSON_CONNECTION
95106 field_addr.name = "fuel";
95107#endif /* FREECIV_JSON_CONNECTION */
95108 e = 0;
95109
95110 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
95111
95112 if (e) {
95113 log_packet_detailed("'fuel' field error detected");
95114 }
95115
95116#ifdef FREECIV_JSON_CONNECTION
95117 field_addr.name = "activity";
95118#endif /* FREECIV_JSON_CONNECTION */
95119 e = 0;
95120
95121 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
95122
95123 if (e) {
95124 log_packet_detailed("'activity' field error detected");
95125 }
95126
95127#ifdef FREECIV_JSON_CONNECTION
95128 field_addr.name = "activity_count";
95129#endif /* FREECIV_JSON_CONNECTION */
95130 e = 0;
95131
95132 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
95133
95134 if (e) {
95135 log_packet_detailed("'activity_count' field error detected");
95136 }
95137
95138#ifdef FREECIV_JSON_CONNECTION
95139 field_addr.name = "activity_base";
95140#endif /* FREECIV_JSON_CONNECTION */
95141 e = 0;
95142
95143 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
95144
95145 if (e) {
95146 log_packet_detailed("'activity_base' field error detected");
95147 }
95148
95149#ifdef FREECIV_JSON_CONNECTION
95150 field_addr.name = "debug";
95151#endif /* FREECIV_JSON_CONNECTION */
95152 e = 0;
95153
95154 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
95155
95156 if (e) {
95157 log_packet_detailed("'debug' field error detected");
95158 }
95159
95160#ifdef FREECIV_JSON_CONNECTION
95161 field_addr.name = "moved";
95162#endif /* FREECIV_JSON_CONNECTION */
95163 e = 0;
95164
95165 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->moved);
95166
95167 if (e) {
95168 log_packet_detailed("'moved' field error detected");
95169 }
95170
95171#ifdef FREECIV_JSON_CONNECTION
95172 field_addr.name = "paradropped";
95173#endif /* FREECIV_JSON_CONNECTION */
95174 e = 0;
95175
95176 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
95177
95178 if (e) {
95179 log_packet_detailed("'paradropped' field error detected");
95180 }
95181
95182#ifdef FREECIV_JSON_CONNECTION
95183 field_addr.name = "done_moving";
95184#endif /* FREECIV_JSON_CONNECTION */
95185 e = 0;
95186
95187 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
95188
95189 if (e) {
95190 log_packet_detailed("'done_moving' field error detected");
95191 }
95192
95193#ifdef FREECIV_JSON_CONNECTION
95194 field_addr.name = "transported_by";
95195#endif /* FREECIV_JSON_CONNECTION */
95196 e = 0;
95197
95198 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
95199
95200 if (e) {
95201 log_packet_detailed("'transported_by' field error detected");
95202 }
95203
95204#ifdef FREECIV_JSON_CONNECTION
95205 field_addr.name = "stay";
95206#endif /* FREECIV_JSON_CONNECTION */
95207 e = 0;
95208
95209 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
95210
95211 if (e) {
95212 log_packet_detailed("'stay' field error detected");
95213 }
95214#endif /* FREECIV_DELTA_PROTOCOL */
95215
95217}
95218
95219int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
95220{
95221 if (!pc->used) {
95222 log_error("WARNING: trying to send data to the closed connection %s",
95224 return -1;
95225 }
95226 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT].packet != nullptr, -1,
95227 "Handler for PACKET_EDIT_UNIT not installed");
95228 return pc->phs.handlers->send[PACKET_EDIT_UNIT].packet(pc, packet);
95229}
95230
95232{
95233 memset(packet, 0, sizeof(*packet));
95234}
95235
95236#define free_packet_edit_city_create(_packet) (void) 0
95237#define destroy_packet_edit_city_create free
95238
95239#ifdef FREECIV_DELTA_PROTOCOL
95240#define hash_packet_edit_city_create_100 hash_const
95241#define cmp_packet_edit_city_create_100 cmp_const
95243#endif /* FREECIV_DELTA_PROTOCOL */
95244
95246{
95247#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_create(_packet)
95249
95250#ifdef FREECIV_JSON_CONNECTION
95251 struct plocation field_addr;
95252 {
95253 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95256 }
95257#endif /* FREECIV_JSON_CONNECTION */
95258
95259 log_packet_detailed("packet_edit_city_create_100: got info about ()");
95260
95261#ifdef FREECIV_DELTA_PROTOCOL
95264 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_CREATE;
95265
95266 if (nullptr == *hash) {
95268 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
95269 }
95270
95271 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95272 *real_packet = *old;
95273 } else {
95274 /* packet is already initialized empty */
95275 log_packet_detailed(" no old info");
95276 }
95277
95278#ifdef FREECIV_JSON_CONNECTION
95279 field_addr.name = "fields";
95280#endif /* FREECIV_JSON_CONNECTION */
95281 DIO_BV_GET(&din, &field_addr, fields);
95282
95283 if (BV_ISSET(fields, 0)) {
95284 log_packet_detailed(" got field 'owner'");
95285
95286#ifdef FREECIV_JSON_CONNECTION
95287 field_addr.name = "owner";
95288#endif /* FREECIV_JSON_CONNECTION */
95289
95290 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95292 }
95293 }
95294
95295 if (BV_ISSET(fields, 1)) {
95296 log_packet_detailed(" got field 'tile'");
95297
95298#ifdef FREECIV_JSON_CONNECTION
95299 field_addr.name = "tile";
95300#endif /* FREECIV_JSON_CONNECTION */
95301
95302 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
95304 }
95305 }
95306
95307 if (BV_ISSET(fields, 2)) {
95308 log_packet_detailed(" got field 'size'");
95309
95310#ifdef FREECIV_JSON_CONNECTION
95311 field_addr.name = "size";
95312#endif /* FREECIV_JSON_CONNECTION */
95313
95314 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95316 }
95317 }
95318
95319 if (BV_ISSET(fields, 3)) {
95320 log_packet_detailed(" got field 'tag'");
95321
95322#ifdef FREECIV_JSON_CONNECTION
95323 field_addr.name = "tag";
95324#endif /* FREECIV_JSON_CONNECTION */
95325
95326 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
95328 }
95329 }
95330
95331 if (nullptr == old) {
95332 old = fc_malloc(sizeof(*old));
95334 *old = *real_packet;
95336 } else {
95337 *old = *real_packet;
95338 }
95339
95340#else /* FREECIV_DELTA_PROTOCOL */
95341#ifdef FREECIV_JSON_CONNECTION
95342 field_addr.name = "owner";
95343#endif /* FREECIV_JSON_CONNECTION */
95344
95345 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95347 }
95348
95349#ifdef FREECIV_JSON_CONNECTION
95350 field_addr.name = "tile";
95351#endif /* FREECIV_JSON_CONNECTION */
95352
95353 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
95355 }
95356
95357#ifdef FREECIV_JSON_CONNECTION
95358 field_addr.name = "size";
95359#endif /* FREECIV_JSON_CONNECTION */
95360
95361 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95363 }
95364
95365#ifdef FREECIV_JSON_CONNECTION
95366 field_addr.name = "tag";
95367#endif /* FREECIV_JSON_CONNECTION */
95368
95369 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
95371 }
95372#endif /* FREECIV_DELTA_PROTOCOL */
95373
95375#undef FREE_PACKET_STRUCT
95376}
95377
95379{
95380 const struct packet_edit_city_create *real_packet = packet;
95381 int e;
95383
95384 log_packet_detailed("packet_edit_city_create_100: sending info about ()");
95385
95386#ifdef FREECIV_DELTA_PROTOCOL
95389 bool differ;
95390 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_CREATE;
95391
95392 if (nullptr == *hash) {
95394 nullptr, nullptr, nullptr, destroy_packet_edit_city_create);
95395 }
95396 BV_CLR_ALL(fields);
95397
95398 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95399 old = fc_malloc(sizeof(*old));
95400 /* temporary bitcopy just to insert correctly */
95401 *old = *real_packet;
95404 }
95405
95406 differ = (old->owner != real_packet->owner);
95407 if (differ) {
95408 BV_SET(fields, 0);
95409 }
95410
95411 differ = (old->tile != real_packet->tile);
95412 if (differ) {
95413 BV_SET(fields, 1);
95414 }
95415
95416 differ = (old->size != real_packet->size);
95417 if (differ) {
95418 BV_SET(fields, 2);
95419 }
95420
95421 differ = (old->tag != real_packet->tag);
95422 if (differ) {
95423 BV_SET(fields, 3);
95424 }
95425#endif /* FREECIV_DELTA_PROTOCOL */
95426
95427#ifdef FREECIV_JSON_CONNECTION
95428 struct plocation field_addr;
95429 {
95430 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95433 }
95434#endif /* FREECIV_JSON_CONNECTION */
95435
95436#ifdef FREECIV_DELTA_PROTOCOL
95437#ifdef FREECIV_JSON_CONNECTION
95438 field_addr.name = "fields";
95439#endif /* FREECIV_JSON_CONNECTION */
95440 e = 0;
95441 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95442 if (e) {
95443 log_packet_detailed("fields bitvector error detected");
95444 }
95445
95446 if (BV_ISSET(fields, 0)) {
95447 log_packet_detailed(" field 'owner' has changed");
95448
95449#ifdef FREECIV_JSON_CONNECTION
95450 field_addr.name = "owner";
95451#endif /* FREECIV_JSON_CONNECTION */
95452 e = 0;
95453
95454 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95455
95456 if (e) {
95457 log_packet_detailed("'owner' field error detected");
95458 }
95459 }
95460
95461 if (BV_ISSET(fields, 1)) {
95462 log_packet_detailed(" field 'tile' has changed");
95463
95464#ifdef FREECIV_JSON_CONNECTION
95465 field_addr.name = "tile";
95466#endif /* FREECIV_JSON_CONNECTION */
95467 e = 0;
95468
95469 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
95470
95471 if (e) {
95472 log_packet_detailed("'tile' field error detected");
95473 }
95474 }
95475
95476 if (BV_ISSET(fields, 2)) {
95477 log_packet_detailed(" field 'size' has changed");
95478
95479#ifdef FREECIV_JSON_CONNECTION
95480 field_addr.name = "size";
95481#endif /* FREECIV_JSON_CONNECTION */
95482 e = 0;
95483
95484 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
95485
95486 if (e) {
95487 log_packet_detailed("'size' field error detected");
95488 }
95489 }
95490
95491 if (BV_ISSET(fields, 3)) {
95492 log_packet_detailed(" field 'tag' has changed");
95493
95494#ifdef FREECIV_JSON_CONNECTION
95495 field_addr.name = "tag";
95496#endif /* FREECIV_JSON_CONNECTION */
95497 e = 0;
95498
95499 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
95500
95501 if (e) {
95502 log_packet_detailed("'tag' field error detected");
95503 }
95504 }
95505
95506 *old = *real_packet;
95507
95508#else /* FREECIV_DELTA_PROTOCOL */
95509#ifdef FREECIV_JSON_CONNECTION
95510 field_addr.name = "owner";
95511#endif /* FREECIV_JSON_CONNECTION */
95512 e = 0;
95513
95514 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
95515
95516 if (e) {
95517 log_packet_detailed("'owner' field error detected");
95518 }
95519
95520#ifdef FREECIV_JSON_CONNECTION
95521 field_addr.name = "tile";
95522#endif /* FREECIV_JSON_CONNECTION */
95523 e = 0;
95524
95525 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
95526
95527 if (e) {
95528 log_packet_detailed("'tile' field error detected");
95529 }
95530
95531#ifdef FREECIV_JSON_CONNECTION
95532 field_addr.name = "size";
95533#endif /* FREECIV_JSON_CONNECTION */
95534 e = 0;
95535
95536 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
95537
95538 if (e) {
95539 log_packet_detailed("'size' field error detected");
95540 }
95541
95542#ifdef FREECIV_JSON_CONNECTION
95543 field_addr.name = "tag";
95544#endif /* FREECIV_JSON_CONNECTION */
95545 e = 0;
95546
95547 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
95548
95549 if (e) {
95550 log_packet_detailed("'tag' field error detected");
95551 }
95552#endif /* FREECIV_DELTA_PROTOCOL */
95553
95555}
95556
95558{
95559 if (!pc->used) {
95560 log_error("WARNING: trying to send data to the closed connection %s",
95562 return -1;
95563 }
95564 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet != nullptr, -1,
95565 "Handler for PACKET_EDIT_CITY_CREATE not installed");
95566 return pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet(pc, packet);
95567}
95568
95569int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
95570{
95571 struct packet_edit_city_create packet, *real_packet = &packet;
95572
95575 real_packet->size = size;
95576 real_packet->tag = tag;
95577
95579}
95580
95582{
95583 memset(packet, 0, sizeof(*packet));
95584}
95585
95586#define free_packet_edit_city_remove(_packet) (void) 0
95587#define destroy_packet_edit_city_remove free
95588
95589#ifdef FREECIV_DELTA_PROTOCOL
95590#define hash_packet_edit_city_remove_100 hash_const
95591#define cmp_packet_edit_city_remove_100 cmp_const
95593#endif /* FREECIV_DELTA_PROTOCOL */
95594
95596{
95597#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city_remove(_packet)
95599
95600#ifdef FREECIV_JSON_CONNECTION
95601 struct plocation field_addr;
95602 {
95603 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95606 }
95607#endif /* FREECIV_JSON_CONNECTION */
95608
95609 log_packet_detailed("packet_edit_city_remove_100: got info about ()");
95610
95611#ifdef FREECIV_DELTA_PROTOCOL
95614 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_REMOVE;
95615
95616 if (nullptr == *hash) {
95618 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
95619 }
95620
95621 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95622 *real_packet = *old;
95623 } else {
95624 /* packet is already initialized empty */
95625 log_packet_detailed(" no old info");
95626 }
95627
95628#ifdef FREECIV_JSON_CONNECTION
95629 field_addr.name = "fields";
95630#endif /* FREECIV_JSON_CONNECTION */
95631 DIO_BV_GET(&din, &field_addr, fields);
95632
95633 if (BV_ISSET(fields, 0)) {
95634 log_packet_detailed(" got field 'id'");
95635
95636#ifdef FREECIV_JSON_CONNECTION
95637 field_addr.name = "id";
95638#endif /* FREECIV_JSON_CONNECTION */
95639
95640 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95642 }
95643 }
95644
95645 if (nullptr == old) {
95646 old = fc_malloc(sizeof(*old));
95648 *old = *real_packet;
95650 } else {
95651 *old = *real_packet;
95652 }
95653
95654#else /* FREECIV_DELTA_PROTOCOL */
95655#ifdef FREECIV_JSON_CONNECTION
95656 field_addr.name = "id";
95657#endif /* FREECIV_JSON_CONNECTION */
95658
95659 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95661 }
95662#endif /* FREECIV_DELTA_PROTOCOL */
95663
95665#undef FREE_PACKET_STRUCT
95666}
95667
95669{
95670 const struct packet_edit_city_remove *real_packet = packet;
95671 int e;
95673
95674 log_packet_detailed("packet_edit_city_remove_100: sending info about ()");
95675
95676#ifdef FREECIV_DELTA_PROTOCOL
95679 bool differ;
95680 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_REMOVE;
95681
95682 if (nullptr == *hash) {
95684 nullptr, nullptr, nullptr, destroy_packet_edit_city_remove);
95685 }
95686 BV_CLR_ALL(fields);
95687
95688 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
95689 old = fc_malloc(sizeof(*old));
95690 /* temporary bitcopy just to insert correctly */
95691 *old = *real_packet;
95694 }
95695
95696 differ = (old->id != real_packet->id);
95697 if (differ) {
95698 BV_SET(fields, 0);
95699 }
95700#endif /* FREECIV_DELTA_PROTOCOL */
95701
95702#ifdef FREECIV_JSON_CONNECTION
95703 struct plocation field_addr;
95704 {
95705 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95708 }
95709#endif /* FREECIV_JSON_CONNECTION */
95710
95711#ifdef FREECIV_DELTA_PROTOCOL
95712#ifdef FREECIV_JSON_CONNECTION
95713 field_addr.name = "fields";
95714#endif /* FREECIV_JSON_CONNECTION */
95715 e = 0;
95716 e |= DIO_BV_PUT(&dout, &field_addr, fields);
95717 if (e) {
95718 log_packet_detailed("fields bitvector error detected");
95719 }
95720
95721 if (BV_ISSET(fields, 0)) {
95722 log_packet_detailed(" field 'id' has changed");
95723
95724#ifdef FREECIV_JSON_CONNECTION
95725 field_addr.name = "id";
95726#endif /* FREECIV_JSON_CONNECTION */
95727 e = 0;
95728
95729 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95730
95731 if (e) {
95732 log_packet_detailed("'id' field error detected");
95733 }
95734 }
95735
95736 *old = *real_packet;
95737
95738#else /* FREECIV_DELTA_PROTOCOL */
95739#ifdef FREECIV_JSON_CONNECTION
95740 field_addr.name = "id";
95741#endif /* FREECIV_JSON_CONNECTION */
95742 e = 0;
95743
95744 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
95745
95746 if (e) {
95747 log_packet_detailed("'id' field error detected");
95748 }
95749#endif /* FREECIV_DELTA_PROTOCOL */
95750
95752}
95753
95755{
95756 if (!pc->used) {
95757 log_error("WARNING: trying to send data to the closed connection %s",
95759 return -1;
95760 }
95761 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet != nullptr, -1,
95762 "Handler for PACKET_EDIT_CITY_REMOVE not installed");
95763 return pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet(pc, packet);
95764}
95765
95767{
95768 struct packet_edit_city_remove packet, *real_packet = &packet;
95769
95770 real_packet->id = id;
95771
95773}
95774
95775static inline void init_packet_edit_city(struct packet_edit_city *packet)
95776{
95777 memset(packet, 0, sizeof(*packet));
95778}
95779
95780#define free_packet_edit_city(_packet) (void) 0
95781#define destroy_packet_edit_city free
95782
95783#ifdef FREECIV_DELTA_PROTOCOL
95785{
95786 const struct packet_edit_city *key = (const struct packet_edit_city *) vkey;
95787 genhash_val_t result = 0;
95788
95789 result += key->id;
95790
95791 result &= 0xFFFFFFFF;
95792 return result;
95793}
95794
95795static bool cmp_packet_edit_city_100(const void *vkey1, const void *vkey2)
95796{
95797 const struct packet_edit_city *old = (const struct packet_edit_city *) vkey1;
95798 const struct packet_edit_city *real_packet = (const struct packet_edit_city *) vkey2;
95799 bool differ;
95800
95801 differ = (old->id != real_packet->id);
95802
95803 return !differ;
95804}
95806#endif /* FREECIV_DELTA_PROTOCOL */
95807
95809{
95810#define FREE_PACKET_STRUCT(_packet) free_packet_edit_city(_packet)
95812
95813#ifdef FREECIV_JSON_CONNECTION
95814 struct plocation field_addr;
95815 {
95816 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
95819 }
95820#endif /* FREECIV_JSON_CONNECTION */
95821
95822#ifdef FREECIV_JSON_CONNECTION
95823 field_addr.name = "id";
95824#endif /* FREECIV_JSON_CONNECTION */
95825
95826 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
95828 }
95829
95830 log_packet_detailed("packet_edit_city_100: got info about (%d)",
95831 real_packet->id);
95832
95833#ifdef FREECIV_DELTA_PROTOCOL
95835 struct packet_edit_city *old;
95836 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY;
95837
95838 if (nullptr == *hash) {
95840 nullptr, nullptr, nullptr, destroy_packet_edit_city);
95841 }
95842
95843 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
95844 *real_packet = *old;
95845 } else {
95846 /* packet is already initialized empty */
95847 log_packet_detailed(" no old info");
95848 }
95849
95850#ifdef FREECIV_JSON_CONNECTION
95851 field_addr.name = "fields";
95852#endif /* FREECIV_JSON_CONNECTION */
95853 DIO_BV_GET(&din, &field_addr, fields);
95854
95855 if (BV_ISSET(fields, 0)) {
95856 log_packet_detailed(" got field 'name'");
95857
95858#ifdef FREECIV_JSON_CONNECTION
95859 field_addr.name = "name";
95860#endif /* FREECIV_JSON_CONNECTION */
95861
95862 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
95864 }
95865 }
95866
95867 if (BV_ISSET(fields, 1)) {
95868 log_packet_detailed(" got field 'owner'");
95869
95870#ifdef FREECIV_JSON_CONNECTION
95871 field_addr.name = "owner";
95872#endif /* FREECIV_JSON_CONNECTION */
95873
95874 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
95876 }
95877 }
95878
95879 if (BV_ISSET(fields, 2)) {
95880 log_packet_detailed(" got field 'original'");
95881
95882#ifdef FREECIV_JSON_CONNECTION
95883 field_addr.name = "original";
95884#endif /* FREECIV_JSON_CONNECTION */
95885
95886 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
95888 }
95889 }
95890
95891 if (BV_ISSET(fields, 3)) {
95892 log_packet_detailed(" got field 'size'");
95893
95894#ifdef FREECIV_JSON_CONNECTION
95895 field_addr.name = "size";
95896#endif /* FREECIV_JSON_CONNECTION */
95897
95898 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
95900 }
95901 }
95902
95903 if (BV_ISSET(fields, 4)) {
95904 log_packet_detailed(" got field 'history'");
95905
95906#ifdef FREECIV_JSON_CONNECTION
95907 field_addr.name = "history";
95908#endif /* FREECIV_JSON_CONNECTION */
95909
95910 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
95912 }
95913 }
95914
95915 if (BV_ISSET(fields, 5)) {
95916 log_packet_detailed(" got field 'ppl_happy'");
95917
95918#ifdef FREECIV_JSON_CONNECTION
95919 field_addr.name = "ppl_happy";
95920#endif /* FREECIV_JSON_CONNECTION */
95921
95922 {
95923 int i;
95924
95925
95926#ifdef FREECIV_JSON_CONNECTION
95927 /* Enter array. */
95928 field_addr.sub_location = plocation_elem_new(0);
95929#endif /* FREECIV_JSON_CONNECTION */
95930
95931 for (i = 0; i < 5; i++) {
95932#ifdef FREECIV_JSON_CONNECTION
95933 /* Next array element */
95934 field_addr.sub_location->number = i;
95935#endif /* FREECIV_JSON_CONNECTION */
95936
95937 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
95938 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
95939 }
95940 }
95941
95942#ifdef FREECIV_JSON_CONNECTION
95943 /* Exit array. */
95944 FC_FREE(field_addr.sub_location);
95945#endif /* FREECIV_JSON_CONNECTION */
95946 }
95947 }
95948
95949 if (BV_ISSET(fields, 6)) {
95950 log_packet_detailed(" got field 'ppl_content'");
95951
95952#ifdef FREECIV_JSON_CONNECTION
95953 field_addr.name = "ppl_content";
95954#endif /* FREECIV_JSON_CONNECTION */
95955
95956 {
95957 int i;
95958
95959
95960#ifdef FREECIV_JSON_CONNECTION
95961 /* Enter array. */
95962 field_addr.sub_location = plocation_elem_new(0);
95963#endif /* FREECIV_JSON_CONNECTION */
95964
95965 for (i = 0; i < 5; i++) {
95966#ifdef FREECIV_JSON_CONNECTION
95967 /* Next array element */
95968 field_addr.sub_location->number = i;
95969#endif /* FREECIV_JSON_CONNECTION */
95970
95971 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
95972 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
95973 }
95974 }
95975
95976#ifdef FREECIV_JSON_CONNECTION
95977 /* Exit array. */
95978 FC_FREE(field_addr.sub_location);
95979#endif /* FREECIV_JSON_CONNECTION */
95980 }
95981 }
95982
95983 if (BV_ISSET(fields, 7)) {
95984 log_packet_detailed(" got field 'ppl_unhappy'");
95985
95986#ifdef FREECIV_JSON_CONNECTION
95987 field_addr.name = "ppl_unhappy";
95988#endif /* FREECIV_JSON_CONNECTION */
95989
95990 {
95991 int i;
95992
95993
95994#ifdef FREECIV_JSON_CONNECTION
95995 /* Enter array. */
95996 field_addr.sub_location = plocation_elem_new(0);
95997#endif /* FREECIV_JSON_CONNECTION */
95998
95999 for (i = 0; i < 5; i++) {
96000#ifdef FREECIV_JSON_CONNECTION
96001 /* Next array element */
96002 field_addr.sub_location->number = i;
96003#endif /* FREECIV_JSON_CONNECTION */
96004
96005 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
96006 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
96007 }
96008 }
96009
96010#ifdef FREECIV_JSON_CONNECTION
96011 /* Exit array. */
96012 FC_FREE(field_addr.sub_location);
96013#endif /* FREECIV_JSON_CONNECTION */
96014 }
96015 }
96016
96017 if (BV_ISSET(fields, 8)) {
96018 log_packet_detailed(" got field 'ppl_angry'");
96019
96020#ifdef FREECIV_JSON_CONNECTION
96021 field_addr.name = "ppl_angry";
96022#endif /* FREECIV_JSON_CONNECTION */
96023
96024 {
96025 int i;
96026
96027
96028#ifdef FREECIV_JSON_CONNECTION
96029 /* Enter array. */
96030 field_addr.sub_location = plocation_elem_new(0);
96031#endif /* FREECIV_JSON_CONNECTION */
96032
96033 for (i = 0; i < 5; i++) {
96034#ifdef FREECIV_JSON_CONNECTION
96035 /* Next array element */
96036 field_addr.sub_location->number = i;
96037#endif /* FREECIV_JSON_CONNECTION */
96038
96039 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
96040 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
96041 }
96042 }
96043
96044#ifdef FREECIV_JSON_CONNECTION
96045 /* Exit array. */
96046 FC_FREE(field_addr.sub_location);
96047#endif /* FREECIV_JSON_CONNECTION */
96048 }
96049 }
96050
96051 if (BV_ISSET(fields, 9)) {
96052 log_packet_detailed(" got field 'specialists_size'");
96053
96054#ifdef FREECIV_JSON_CONNECTION
96055 field_addr.name = "specialists_size";
96056#endif /* FREECIV_JSON_CONNECTION */
96057
96058 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
96059 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
96060 }
96061 }
96062
96063 if (BV_ISSET(fields, 10)) {
96064 log_packet_detailed(" got field 'specialists'");
96065
96066#ifdef FREECIV_JSON_CONNECTION
96067 field_addr.name = "specialists";
96068#endif /* FREECIV_JSON_CONNECTION */
96069
96070 {
96071 int i;
96072
96073 if (real_packet->specialists_size > SP_MAX) {
96074 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
96075 }
96076
96077#ifdef FREECIV_JSON_CONNECTION
96078 /* Enter array. */
96079 field_addr.sub_location = plocation_elem_new(0);
96080#endif /* FREECIV_JSON_CONNECTION */
96081
96082 for (i = 0; i < real_packet->specialists_size; i++) {
96083#ifdef FREECIV_JSON_CONNECTION
96084 /* Next array element */
96085 field_addr.sub_location->number = i;
96086#endif /* FREECIV_JSON_CONNECTION */
96087
96088 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
96090 }
96091 }
96092
96093#ifdef FREECIV_JSON_CONNECTION
96094 /* Exit array. */
96095 FC_FREE(field_addr.sub_location);
96096#endif /* FREECIV_JSON_CONNECTION */
96097 }
96098 }
96099
96100 if (BV_ISSET(fields, 11)) {
96101 log_packet_detailed(" got field 'food_stock'");
96102
96103#ifdef FREECIV_JSON_CONNECTION
96104 field_addr.name = "food_stock";
96105#endif /* FREECIV_JSON_CONNECTION */
96106
96107 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
96108 RECEIVE_PACKET_FIELD_ERROR(food_stock);
96109 }
96110 }
96111
96112 if (BV_ISSET(fields, 12)) {
96113 log_packet_detailed(" got field 'shield_stock'");
96114
96115#ifdef FREECIV_JSON_CONNECTION
96116 field_addr.name = "shield_stock";
96117#endif /* FREECIV_JSON_CONNECTION */
96118
96119 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
96120 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
96121 }
96122 }
96123
96124 real_packet->airlift = BV_ISSET(fields, 13);
96125
96126 real_packet->debug = BV_ISSET(fields, 14);
96127
96128 real_packet->did_buy = BV_ISSET(fields, 15);
96129
96130 real_packet->did_sell = BV_ISSET(fields, 16);
96131
96132 real_packet->was_happy = BV_ISSET(fields, 17);
96133
96134 real_packet->had_famine = BV_ISSET(fields, 18);
96135
96136 if (BV_ISSET(fields, 19)) {
96137 log_packet_detailed(" got field 'anarchy'");
96138
96139#ifdef FREECIV_JSON_CONNECTION
96140 field_addr.name = "anarchy";
96141#endif /* FREECIV_JSON_CONNECTION */
96142
96143 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
96145 }
96146 }
96147
96148 if (BV_ISSET(fields, 20)) {
96149 log_packet_detailed(" got field 'rapture'");
96150
96151#ifdef FREECIV_JSON_CONNECTION
96152 field_addr.name = "rapture";
96153#endif /* FREECIV_JSON_CONNECTION */
96154
96155 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
96157 }
96158 }
96159
96160 if (BV_ISSET(fields, 21)) {
96161 log_packet_detailed(" got field 'steal'");
96162
96163#ifdef FREECIV_JSON_CONNECTION
96164 field_addr.name = "steal";
96165#endif /* FREECIV_JSON_CONNECTION */
96166
96167 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
96169 }
96170 }
96171
96172 if (BV_ISSET(fields, 22)) {
96173 log_packet_detailed(" got field 'turn_founded'");
96174
96175#ifdef FREECIV_JSON_CONNECTION
96176 field_addr.name = "turn_founded";
96177#endif /* FREECIV_JSON_CONNECTION */
96178
96179 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
96180 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
96181 }
96182 }
96183
96184 if (BV_ISSET(fields, 23)) {
96185 log_packet_detailed(" got field 'turn_last_built'");
96186
96187#ifdef FREECIV_JSON_CONNECTION
96188 field_addr.name = "turn_last_built";
96189#endif /* FREECIV_JSON_CONNECTION */
96190
96191 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
96192 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
96193 }
96194 }
96195
96196 if (BV_ISSET(fields, 24)) {
96197 log_packet_detailed(" got field 'built'");
96198
96199#ifdef FREECIV_JSON_CONNECTION
96200 field_addr.name = "built";
96201#endif /* FREECIV_JSON_CONNECTION */
96202
96204#ifdef FREECIV_JSON_CONNECTION
96205 /* Enter array (start at initial element). */
96206 field_addr.sub_location = plocation_elem_new(0);
96207 /* Enter diff array element (start at the index address). */
96208 field_addr.sub_location->sub_location = plocation_field_new("index");
96209#endif /* FREECIV_JSON_CONNECTION */
96210
96211 while (TRUE) {
96212 int i;
96213
96214 /* Read next index */
96215#if B_LAST <= MAX_UINT8
96216 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
96217#else
96218 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
96219#endif
96221 }
96222
96223 if (i == B_LAST) {
96224 break;
96225 }
96226 if (i > B_LAST) {
96228 ": unexpected index %d "
96229 "> length %d in array diff",
96230 i,
96231 B_LAST);
96232 }
96233
96234#ifdef FREECIV_JSON_CONNECTION
96235 /* Content address. */
96236 field_addr.sub_location->sub_location->name = "data";
96237#endif /* FREECIV_JSON_CONNECTION */
96238
96239 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
96241 }
96242
96243#ifdef FREECIV_JSON_CONNECTION
96244 /* Move to the next diff array element. */
96245 field_addr.sub_location->number++;
96246 /* Back to the index address. */
96247 field_addr.sub_location->sub_location->name = "index";
96248#endif /* FREECIV_JSON_CONNECTION */
96249 }
96250
96251#ifdef FREECIV_JSON_CONNECTION
96252 /* Exit diff array element. */
96253 FC_FREE(field_addr.sub_location->sub_location);
96254 /* Exit array. */
96255 FC_FREE(field_addr.sub_location);
96256#endif /* FREECIV_JSON_CONNECTION */
96257 }
96258
96259 if (BV_ISSET(fields, 25)) {
96260 log_packet_detailed(" got field 'production_kind'");
96261
96262#ifdef FREECIV_JSON_CONNECTION
96263 field_addr.name = "production_kind";
96264#endif /* FREECIV_JSON_CONNECTION */
96265
96266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
96267 RECEIVE_PACKET_FIELD_ERROR(production_kind);
96268 }
96269 }
96270
96271 if (BV_ISSET(fields, 26)) {
96272 log_packet_detailed(" got field 'production_value'");
96273
96274#ifdef FREECIV_JSON_CONNECTION
96275 field_addr.name = "production_value";
96276#endif /* FREECIV_JSON_CONNECTION */
96277
96278 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
96279 RECEIVE_PACKET_FIELD_ERROR(production_value);
96280 }
96281 }
96282
96283 if (nullptr == old) {
96284 old = fc_malloc(sizeof(*old));
96286 *old = *real_packet;
96288 } else {
96289 *old = *real_packet;
96290 }
96291
96292#else /* FREECIV_DELTA_PROTOCOL */
96293#ifdef FREECIV_JSON_CONNECTION
96294 field_addr.name = "name";
96295#endif /* FREECIV_JSON_CONNECTION */
96296
96297 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
96299 }
96300
96301#ifdef FREECIV_JSON_CONNECTION
96302 field_addr.name = "owner";
96303#endif /* FREECIV_JSON_CONNECTION */
96304
96305 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->owner)) {
96307 }
96308
96309#ifdef FREECIV_JSON_CONNECTION
96310 field_addr.name = "original";
96311#endif /* FREECIV_JSON_CONNECTION */
96312
96313 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->original)) {
96315 }
96316
96317#ifdef FREECIV_JSON_CONNECTION
96318 field_addr.name = "size";
96319#endif /* FREECIV_JSON_CONNECTION */
96320
96321 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
96323 }
96324
96325#ifdef FREECIV_JSON_CONNECTION
96326 field_addr.name = "history";
96327#endif /* FREECIV_JSON_CONNECTION */
96328
96329 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
96331 }
96332
96333#ifdef FREECIV_JSON_CONNECTION
96334 field_addr.name = "ppl_happy";
96335#endif /* FREECIV_JSON_CONNECTION */
96336
96337 {
96338 int i;
96339
96340
96341#ifdef FREECIV_JSON_CONNECTION
96342 /* Enter array. */
96343 field_addr.sub_location = plocation_elem_new(0);
96344#endif /* FREECIV_JSON_CONNECTION */
96345
96346 for (i = 0; i < 5; i++) {
96347#ifdef FREECIV_JSON_CONNECTION
96348 /* Next array element */
96349 field_addr.sub_location->number = i;
96350#endif /* FREECIV_JSON_CONNECTION */
96351
96352 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
96353 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
96354 }
96355 }
96356
96357#ifdef FREECIV_JSON_CONNECTION
96358 /* Exit array. */
96359 FC_FREE(field_addr.sub_location);
96360#endif /* FREECIV_JSON_CONNECTION */
96361 }
96362
96363#ifdef FREECIV_JSON_CONNECTION
96364 field_addr.name = "ppl_content";
96365#endif /* FREECIV_JSON_CONNECTION */
96366
96367 {
96368 int i;
96369
96370
96371#ifdef FREECIV_JSON_CONNECTION
96372 /* Enter array. */
96373 field_addr.sub_location = plocation_elem_new(0);
96374#endif /* FREECIV_JSON_CONNECTION */
96375
96376 for (i = 0; i < 5; i++) {
96377#ifdef FREECIV_JSON_CONNECTION
96378 /* Next array element */
96379 field_addr.sub_location->number = i;
96380#endif /* FREECIV_JSON_CONNECTION */
96381
96382 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
96383 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
96384 }
96385 }
96386
96387#ifdef FREECIV_JSON_CONNECTION
96388 /* Exit array. */
96389 FC_FREE(field_addr.sub_location);
96390#endif /* FREECIV_JSON_CONNECTION */
96391 }
96392
96393#ifdef FREECIV_JSON_CONNECTION
96394 field_addr.name = "ppl_unhappy";
96395#endif /* FREECIV_JSON_CONNECTION */
96396
96397 {
96398 int i;
96399
96400
96401#ifdef FREECIV_JSON_CONNECTION
96402 /* Enter array. */
96403 field_addr.sub_location = plocation_elem_new(0);
96404#endif /* FREECIV_JSON_CONNECTION */
96405
96406 for (i = 0; i < 5; i++) {
96407#ifdef FREECIV_JSON_CONNECTION
96408 /* Next array element */
96409 field_addr.sub_location->number = i;
96410#endif /* FREECIV_JSON_CONNECTION */
96411
96412 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
96413 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
96414 }
96415 }
96416
96417#ifdef FREECIV_JSON_CONNECTION
96418 /* Exit array. */
96419 FC_FREE(field_addr.sub_location);
96420#endif /* FREECIV_JSON_CONNECTION */
96421 }
96422
96423#ifdef FREECIV_JSON_CONNECTION
96424 field_addr.name = "ppl_angry";
96425#endif /* FREECIV_JSON_CONNECTION */
96426
96427 {
96428 int i;
96429
96430
96431#ifdef FREECIV_JSON_CONNECTION
96432 /* Enter array. */
96433 field_addr.sub_location = plocation_elem_new(0);
96434#endif /* FREECIV_JSON_CONNECTION */
96435
96436 for (i = 0; i < 5; i++) {
96437#ifdef FREECIV_JSON_CONNECTION
96438 /* Next array element */
96439 field_addr.sub_location->number = i;
96440#endif /* FREECIV_JSON_CONNECTION */
96441
96442 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
96443 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
96444 }
96445 }
96446
96447#ifdef FREECIV_JSON_CONNECTION
96448 /* Exit array. */
96449 FC_FREE(field_addr.sub_location);
96450#endif /* FREECIV_JSON_CONNECTION */
96451 }
96452
96453#ifdef FREECIV_JSON_CONNECTION
96454 field_addr.name = "specialists_size";
96455#endif /* FREECIV_JSON_CONNECTION */
96456
96457 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
96458 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
96459 }
96460
96461#ifdef FREECIV_JSON_CONNECTION
96462 field_addr.name = "specialists";
96463#endif /* FREECIV_JSON_CONNECTION */
96464
96465 {
96466 int i;
96467
96468 if (real_packet->specialists_size > SP_MAX) {
96469 RECEIVE_PACKET_FIELD_ERROR(specialists, ": array truncated");
96470 }
96471
96472#ifdef FREECIV_JSON_CONNECTION
96473 /* Enter array. */
96474 field_addr.sub_location = plocation_elem_new(0);
96475#endif /* FREECIV_JSON_CONNECTION */
96476
96477 for (i = 0; i < real_packet->specialists_size; i++) {
96478#ifdef FREECIV_JSON_CONNECTION
96479 /* Next array element */
96480 field_addr.sub_location->number = i;
96481#endif /* FREECIV_JSON_CONNECTION */
96482
96483 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
96485 }
96486 }
96487
96488#ifdef FREECIV_JSON_CONNECTION
96489 /* Exit array. */
96490 FC_FREE(field_addr.sub_location);
96491#endif /* FREECIV_JSON_CONNECTION */
96492 }
96493
96494#ifdef FREECIV_JSON_CONNECTION
96495 field_addr.name = "food_stock";
96496#endif /* FREECIV_JSON_CONNECTION */
96497
96498 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
96499 RECEIVE_PACKET_FIELD_ERROR(food_stock);
96500 }
96501
96502#ifdef FREECIV_JSON_CONNECTION
96503 field_addr.name = "shield_stock";
96504#endif /* FREECIV_JSON_CONNECTION */
96505
96506 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
96507 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
96508 }
96509
96510#ifdef FREECIV_JSON_CONNECTION
96511 field_addr.name = "airlift";
96512#endif /* FREECIV_JSON_CONNECTION */
96513
96514 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift)) {
96516 }
96517
96518#ifdef FREECIV_JSON_CONNECTION
96519 field_addr.name = "debug";
96520#endif /* FREECIV_JSON_CONNECTION */
96521
96522 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
96524 }
96525
96526#ifdef FREECIV_JSON_CONNECTION
96527 field_addr.name = "did_buy";
96528#endif /* FREECIV_JSON_CONNECTION */
96529
96530 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
96532 }
96533
96534#ifdef FREECIV_JSON_CONNECTION
96535 field_addr.name = "did_sell";
96536#endif /* FREECIV_JSON_CONNECTION */
96537
96538 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
96540 }
96541
96542#ifdef FREECIV_JSON_CONNECTION
96543 field_addr.name = "was_happy";
96544#endif /* FREECIV_JSON_CONNECTION */
96545
96546 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
96547 RECEIVE_PACKET_FIELD_ERROR(was_happy);
96548 }
96549
96550#ifdef FREECIV_JSON_CONNECTION
96551 field_addr.name = "had_famine";
96552#endif /* FREECIV_JSON_CONNECTION */
96553
96554 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
96555 RECEIVE_PACKET_FIELD_ERROR(had_famine);
96556 }
96557
96558#ifdef FREECIV_JSON_CONNECTION
96559 field_addr.name = "anarchy";
96560#endif /* FREECIV_JSON_CONNECTION */
96561
96562 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
96564 }
96565
96566#ifdef FREECIV_JSON_CONNECTION
96567 field_addr.name = "rapture";
96568#endif /* FREECIV_JSON_CONNECTION */
96569
96570 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
96572 }
96573
96574#ifdef FREECIV_JSON_CONNECTION
96575 field_addr.name = "steal";
96576#endif /* FREECIV_JSON_CONNECTION */
96577
96578 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
96580 }
96581
96582#ifdef FREECIV_JSON_CONNECTION
96583 field_addr.name = "turn_founded";
96584#endif /* FREECIV_JSON_CONNECTION */
96585
96586 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
96587 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
96588 }
96589
96590#ifdef FREECIV_JSON_CONNECTION
96591 field_addr.name = "turn_last_built";
96592#endif /* FREECIV_JSON_CONNECTION */
96593
96594 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
96595 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
96596 }
96597
96598#ifdef FREECIV_JSON_CONNECTION
96599 field_addr.name = "built";
96600#endif /* FREECIV_JSON_CONNECTION */
96601
96602 {
96603 int i;
96604
96605
96606#ifdef FREECIV_JSON_CONNECTION
96607 /* Enter array. */
96608 field_addr.sub_location = plocation_elem_new(0);
96609#endif /* FREECIV_JSON_CONNECTION */
96610
96611 for (i = 0; i < B_LAST; i++) {
96612#ifdef FREECIV_JSON_CONNECTION
96613 /* Next array element */
96614 field_addr.sub_location->number = i;
96615#endif /* FREECIV_JSON_CONNECTION */
96616
96617 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
96619 }
96620 }
96621
96622#ifdef FREECIV_JSON_CONNECTION
96623 /* Exit array. */
96624 FC_FREE(field_addr.sub_location);
96625#endif /* FREECIV_JSON_CONNECTION */
96626 }
96627
96628#ifdef FREECIV_JSON_CONNECTION
96629 field_addr.name = "production_kind";
96630#endif /* FREECIV_JSON_CONNECTION */
96631
96632 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
96633 RECEIVE_PACKET_FIELD_ERROR(production_kind);
96634 }
96635
96636#ifdef FREECIV_JSON_CONNECTION
96637 field_addr.name = "production_value";
96638#endif /* FREECIV_JSON_CONNECTION */
96639
96640 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
96641 RECEIVE_PACKET_FIELD_ERROR(production_value);
96642 }
96643#endif /* FREECIV_DELTA_PROTOCOL */
96644
96646#undef FREE_PACKET_STRUCT
96647}
96648
96649static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
96650{
96651 const struct packet_edit_city *real_packet = packet;
96652 int e;
96654
96655 log_packet_detailed("packet_edit_city_100: sending info about (%d)",
96656 real_packet->id);
96657
96658#ifdef FREECIV_DELTA_PROTOCOL
96660 struct packet_edit_city *old;
96661 bool differ;
96662 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY;
96663
96664 if (nullptr == *hash) {
96666 nullptr, nullptr, nullptr, destroy_packet_edit_city);
96667 }
96668 BV_CLR_ALL(fields);
96669
96670 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
96671 old = fc_malloc(sizeof(*old));
96672 /* temporary bitcopy just to insert correctly */
96673 *old = *real_packet;
96676 }
96677
96678 differ = (strcmp(old->name, real_packet->name) != 0);
96679 if (differ) {
96680 BV_SET(fields, 0);
96681 }
96682
96683 differ = (old->owner != real_packet->owner);
96684 if (differ) {
96685 BV_SET(fields, 1);
96686 }
96687
96688 differ = (old->original != real_packet->original);
96689 if (differ) {
96690 BV_SET(fields, 2);
96691 }
96692
96693 differ = (old->size != real_packet->size);
96694 if (differ) {
96695 BV_SET(fields, 3);
96696 }
96697
96698 differ = (old->history != real_packet->history);
96699 if (differ) {
96700 BV_SET(fields, 4);
96701 }
96702
96703 differ = FALSE;
96704 {
96705 int i;
96706
96707 for (i = 0; i < 5; i++) {
96708 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
96709 if (differ) {
96710 break;
96711 }
96712 }
96713 }
96714 if (differ) {
96715 BV_SET(fields, 5);
96716 }
96717
96718 differ = FALSE;
96719 {
96720 int i;
96721
96722 for (i = 0; i < 5; i++) {
96723 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
96724 if (differ) {
96725 break;
96726 }
96727 }
96728 }
96729 if (differ) {
96730 BV_SET(fields, 6);
96731 }
96732
96733 differ = FALSE;
96734 {
96735 int i;
96736
96737 for (i = 0; i < 5; i++) {
96738 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
96739 if (differ) {
96740 break;
96741 }
96742 }
96743 }
96744 if (differ) {
96745 BV_SET(fields, 7);
96746 }
96747
96748 differ = FALSE;
96749 {
96750 int i;
96751
96752 for (i = 0; i < 5; i++) {
96753 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
96754 if (differ) {
96755 break;
96756 }
96757 }
96758 }
96759 if (differ) {
96760 BV_SET(fields, 8);
96761 }
96762
96763 differ = (old->specialists_size != real_packet->specialists_size);
96764 if (differ) {
96765 BV_SET(fields, 9);
96766 }
96767
96768 differ = (old->specialists_size != real_packet->specialists_size);
96769 if (!differ) {
96770 int i;
96771
96772 for (i = 0; i < old->specialists_size; i++) {
96773 differ = (old->specialists[i] != real_packet->specialists[i]);
96774 if (differ) {
96775 break;
96776 }
96777 }
96778 }
96779 if (differ) {
96780 BV_SET(fields, 10);
96781 }
96782
96783 differ = (old->food_stock != real_packet->food_stock);
96784 if (differ) {
96785 BV_SET(fields, 11);
96786 }
96787
96788 differ = (old->shield_stock != real_packet->shield_stock);
96789 if (differ) {
96790 BV_SET(fields, 12);
96791 }
96792
96793 /* folded into head */
96794 if (real_packet->airlift) {
96795 BV_SET(fields, 13);
96796 }
96797
96798 /* folded into head */
96799 if (real_packet->debug) {
96800 BV_SET(fields, 14);
96801 }
96802
96803 /* folded into head */
96804 if (real_packet->did_buy) {
96805 BV_SET(fields, 15);
96806 }
96807
96808 /* folded into head */
96809 if (real_packet->did_sell) {
96810 BV_SET(fields, 16);
96811 }
96812
96813 /* folded into head */
96814 if (real_packet->was_happy) {
96815 BV_SET(fields, 17);
96816 }
96817
96818 /* folded into head */
96819 if (real_packet->had_famine) {
96820 BV_SET(fields, 18);
96821 }
96822
96823 differ = (old->anarchy != real_packet->anarchy);
96824 if (differ) {
96825 BV_SET(fields, 19);
96826 }
96827
96828 differ = (old->rapture != real_packet->rapture);
96829 if (differ) {
96830 BV_SET(fields, 20);
96831 }
96832
96833 differ = (old->steal != real_packet->steal);
96834 if (differ) {
96835 BV_SET(fields, 21);
96836 }
96837
96838 differ = (old->turn_founded != real_packet->turn_founded);
96839 if (differ) {
96840 BV_SET(fields, 22);
96841 }
96842
96843 differ = (old->turn_last_built != real_packet->turn_last_built);
96844 if (differ) {
96845 BV_SET(fields, 23);
96846 }
96847
96848 differ = FALSE;
96849 {
96850 int i;
96851
96852 for (i = 0; i < B_LAST; i++) {
96853 differ = (old->built[i] != real_packet->built[i]);
96854 if (differ) {
96855 break;
96856 }
96857 }
96858 }
96859 if (differ) {
96860 BV_SET(fields, 24);
96861 }
96862
96863 differ = (old->production_kind != real_packet->production_kind);
96864 if (differ) {
96865 BV_SET(fields, 25);
96866 }
96867
96868 differ = (old->production_value != real_packet->production_value);
96869 if (differ) {
96870 BV_SET(fields, 26);
96871 }
96872#endif /* FREECIV_DELTA_PROTOCOL */
96873
96874#ifdef FREECIV_JSON_CONNECTION
96875 struct plocation field_addr;
96876 {
96877 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
96880 }
96881#endif /* FREECIV_JSON_CONNECTION */
96882
96883#ifdef FREECIV_JSON_CONNECTION
96884 field_addr.name = "id";
96885#endif /* FREECIV_JSON_CONNECTION */
96886 e = 0;
96887
96888 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
96889
96890 if (e) {
96891 log_packet_detailed("'id' field error detected");
96892 }
96893
96894#ifdef FREECIV_DELTA_PROTOCOL
96895#ifdef FREECIV_JSON_CONNECTION
96896 field_addr.name = "fields";
96897#endif /* FREECIV_JSON_CONNECTION */
96898 e = 0;
96899 e |= DIO_BV_PUT(&dout, &field_addr, fields);
96900 if (e) {
96901 log_packet_detailed("fields bitvector error detected");
96902 }
96903
96904 if (BV_ISSET(fields, 0)) {
96905 log_packet_detailed(" field 'name' has changed");
96906
96907#ifdef FREECIV_JSON_CONNECTION
96908 field_addr.name = "name";
96909#endif /* FREECIV_JSON_CONNECTION */
96910 e = 0;
96911
96912 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
96913
96914 if (e) {
96915 log_packet_detailed("'name' field error detected");
96916 }
96917 }
96918
96919 if (BV_ISSET(fields, 1)) {
96920 log_packet_detailed(" field 'owner' has changed");
96921
96922#ifdef FREECIV_JSON_CONNECTION
96923 field_addr.name = "owner";
96924#endif /* FREECIV_JSON_CONNECTION */
96925 e = 0;
96926
96927 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
96928
96929 if (e) {
96930 log_packet_detailed("'owner' field error detected");
96931 }
96932 }
96933
96934 if (BV_ISSET(fields, 2)) {
96935 log_packet_detailed(" field 'original' has changed");
96936
96937#ifdef FREECIV_JSON_CONNECTION
96938 field_addr.name = "original";
96939#endif /* FREECIV_JSON_CONNECTION */
96940 e = 0;
96941
96942 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
96943
96944 if (e) {
96945 log_packet_detailed("'original' field error detected");
96946 }
96947 }
96948
96949 if (BV_ISSET(fields, 3)) {
96950 log_packet_detailed(" field 'size' has changed");
96951
96952#ifdef FREECIV_JSON_CONNECTION
96953 field_addr.name = "size";
96954#endif /* FREECIV_JSON_CONNECTION */
96955 e = 0;
96956
96957 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
96958
96959 if (e) {
96960 log_packet_detailed("'size' field error detected");
96961 }
96962 }
96963
96964 if (BV_ISSET(fields, 4)) {
96965 log_packet_detailed(" field 'history' has changed");
96966
96967#ifdef FREECIV_JSON_CONNECTION
96968 field_addr.name = "history";
96969#endif /* FREECIV_JSON_CONNECTION */
96970 e = 0;
96971
96972 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
96973
96974 if (e) {
96975 log_packet_detailed("'history' field error detected");
96976 }
96977 }
96978
96979 if (BV_ISSET(fields, 5)) {
96980 log_packet_detailed(" field 'ppl_happy' has changed");
96981
96982#ifdef FREECIV_JSON_CONNECTION
96983 field_addr.name = "ppl_happy";
96984#endif /* FREECIV_JSON_CONNECTION */
96985 e = 0;
96986
96987 {
96988 int i;
96989
96990#ifdef FREECIV_JSON_CONNECTION
96991 /* Create the array. */
96992 e |= DIO_PUT(farray, &dout, &field_addr, 5);
96993
96994 /* Enter array. */
96995 field_addr.sub_location = plocation_elem_new(0);
96996#endif /* FREECIV_JSON_CONNECTION */
96997
96998 for (i = 0; i < 5; i++) {
96999#ifdef FREECIV_JSON_CONNECTION
97000 /* Next array element. */
97001 field_addr.sub_location->number = i;
97002#endif /* FREECIV_JSON_CONNECTION */
97003
97004 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
97005 }
97006
97007#ifdef FREECIV_JSON_CONNECTION
97008 /* Exit array. */
97009 FC_FREE(field_addr.sub_location);
97010#endif /* FREECIV_JSON_CONNECTION */
97011 }
97012
97013 if (e) {
97014 log_packet_detailed("'ppl_happy' field error detected");
97015 }
97016 }
97017
97018 if (BV_ISSET(fields, 6)) {
97019 log_packet_detailed(" field 'ppl_content' has changed");
97020
97021#ifdef FREECIV_JSON_CONNECTION
97022 field_addr.name = "ppl_content";
97023#endif /* FREECIV_JSON_CONNECTION */
97024 e = 0;
97025
97026 {
97027 int i;
97028
97029#ifdef FREECIV_JSON_CONNECTION
97030 /* Create the array. */
97031 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97032
97033 /* Enter array. */
97034 field_addr.sub_location = plocation_elem_new(0);
97035#endif /* FREECIV_JSON_CONNECTION */
97036
97037 for (i = 0; i < 5; i++) {
97038#ifdef FREECIV_JSON_CONNECTION
97039 /* Next array element. */
97040 field_addr.sub_location->number = i;
97041#endif /* FREECIV_JSON_CONNECTION */
97042
97043 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
97044 }
97045
97046#ifdef FREECIV_JSON_CONNECTION
97047 /* Exit array. */
97048 FC_FREE(field_addr.sub_location);
97049#endif /* FREECIV_JSON_CONNECTION */
97050 }
97051
97052 if (e) {
97053 log_packet_detailed("'ppl_content' field error detected");
97054 }
97055 }
97056
97057 if (BV_ISSET(fields, 7)) {
97058 log_packet_detailed(" field 'ppl_unhappy' has changed");
97059
97060#ifdef FREECIV_JSON_CONNECTION
97061 field_addr.name = "ppl_unhappy";
97062#endif /* FREECIV_JSON_CONNECTION */
97063 e = 0;
97064
97065 {
97066 int i;
97067
97068#ifdef FREECIV_JSON_CONNECTION
97069 /* Create the array. */
97070 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97071
97072 /* Enter array. */
97073 field_addr.sub_location = plocation_elem_new(0);
97074#endif /* FREECIV_JSON_CONNECTION */
97075
97076 for (i = 0; i < 5; i++) {
97077#ifdef FREECIV_JSON_CONNECTION
97078 /* Next array element. */
97079 field_addr.sub_location->number = i;
97080#endif /* FREECIV_JSON_CONNECTION */
97081
97082 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
97083 }
97084
97085#ifdef FREECIV_JSON_CONNECTION
97086 /* Exit array. */
97087 FC_FREE(field_addr.sub_location);
97088#endif /* FREECIV_JSON_CONNECTION */
97089 }
97090
97091 if (e) {
97092 log_packet_detailed("'ppl_unhappy' field error detected");
97093 }
97094 }
97095
97096 if (BV_ISSET(fields, 8)) {
97097 log_packet_detailed(" field 'ppl_angry' has changed");
97098
97099#ifdef FREECIV_JSON_CONNECTION
97100 field_addr.name = "ppl_angry";
97101#endif /* FREECIV_JSON_CONNECTION */
97102 e = 0;
97103
97104 {
97105 int i;
97106
97107#ifdef FREECIV_JSON_CONNECTION
97108 /* Create the array. */
97109 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97110
97111 /* Enter array. */
97112 field_addr.sub_location = plocation_elem_new(0);
97113#endif /* FREECIV_JSON_CONNECTION */
97114
97115 for (i = 0; i < 5; i++) {
97116#ifdef FREECIV_JSON_CONNECTION
97117 /* Next array element. */
97118 field_addr.sub_location->number = i;
97119#endif /* FREECIV_JSON_CONNECTION */
97120
97121 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
97122 }
97123
97124#ifdef FREECIV_JSON_CONNECTION
97125 /* Exit array. */
97126 FC_FREE(field_addr.sub_location);
97127#endif /* FREECIV_JSON_CONNECTION */
97128 }
97129
97130 if (e) {
97131 log_packet_detailed("'ppl_angry' field error detected");
97132 }
97133 }
97134
97135 if (BV_ISSET(fields, 9)) {
97136 log_packet_detailed(" field 'specialists_size' has changed");
97137
97138#ifdef FREECIV_JSON_CONNECTION
97139 field_addr.name = "specialists_size";
97140#endif /* FREECIV_JSON_CONNECTION */
97141 e = 0;
97142
97143 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
97144
97145 if (e) {
97146 log_packet_detailed("'specialists_size' field error detected");
97147 }
97148 }
97149
97150 if (BV_ISSET(fields, 10)) {
97151 log_packet_detailed(" field 'specialists' has changed");
97152
97153#ifdef FREECIV_JSON_CONNECTION
97154 field_addr.name = "specialists";
97155#endif /* FREECIV_JSON_CONNECTION */
97156 e = 0;
97157
97158 {
97159 int i;
97160
97161#ifdef FREECIV_JSON_CONNECTION
97162 /* Create the array. */
97163 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
97164
97165 /* Enter array. */
97166 field_addr.sub_location = plocation_elem_new(0);
97167#endif /* FREECIV_JSON_CONNECTION */
97168
97169 for (i = 0; i < real_packet->specialists_size; i++) {
97170#ifdef FREECIV_JSON_CONNECTION
97171 /* Next array element. */
97172 field_addr.sub_location->number = i;
97173#endif /* FREECIV_JSON_CONNECTION */
97174
97175 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
97176 }
97177
97178#ifdef FREECIV_JSON_CONNECTION
97179 /* Exit array. */
97180 FC_FREE(field_addr.sub_location);
97181#endif /* FREECIV_JSON_CONNECTION */
97182 }
97183
97184 if (e) {
97185 log_packet_detailed("'specialists' field error detected");
97186 }
97187 }
97188
97189 if (BV_ISSET(fields, 11)) {
97190 log_packet_detailed(" field 'food_stock' has changed");
97191
97192#ifdef FREECIV_JSON_CONNECTION
97193 field_addr.name = "food_stock";
97194#endif /* FREECIV_JSON_CONNECTION */
97195 e = 0;
97196
97197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
97198
97199 if (e) {
97200 log_packet_detailed("'food_stock' field error detected");
97201 }
97202 }
97203
97204 if (BV_ISSET(fields, 12)) {
97205 log_packet_detailed(" field 'shield_stock' has changed");
97206
97207#ifdef FREECIV_JSON_CONNECTION
97208 field_addr.name = "shield_stock";
97209#endif /* FREECIV_JSON_CONNECTION */
97210 e = 0;
97211
97212 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
97213
97214 if (e) {
97215 log_packet_detailed("'shield_stock' field error detected");
97216 }
97217 }
97218
97219 /* field 13 is folded into the header */
97220
97221 /* field 14 is folded into the header */
97222
97223 /* field 15 is folded into the header */
97224
97225 /* field 16 is folded into the header */
97226
97227 /* field 17 is folded into the header */
97228
97229 /* field 18 is folded into the header */
97230
97231 if (BV_ISSET(fields, 19)) {
97232 log_packet_detailed(" field 'anarchy' has changed");
97233
97234#ifdef FREECIV_JSON_CONNECTION
97235 field_addr.name = "anarchy";
97236#endif /* FREECIV_JSON_CONNECTION */
97237 e = 0;
97238
97239 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
97240
97241 if (e) {
97242 log_packet_detailed("'anarchy' field error detected");
97243 }
97244 }
97245
97246 if (BV_ISSET(fields, 20)) {
97247 log_packet_detailed(" field 'rapture' has changed");
97248
97249#ifdef FREECIV_JSON_CONNECTION
97250 field_addr.name = "rapture";
97251#endif /* FREECIV_JSON_CONNECTION */
97252 e = 0;
97253
97254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
97255
97256 if (e) {
97257 log_packet_detailed("'rapture' field error detected");
97258 }
97259 }
97260
97261 if (BV_ISSET(fields, 21)) {
97262 log_packet_detailed(" field 'steal' has changed");
97263
97264#ifdef FREECIV_JSON_CONNECTION
97265 field_addr.name = "steal";
97266#endif /* FREECIV_JSON_CONNECTION */
97267 e = 0;
97268
97269 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
97270
97271 if (e) {
97272 log_packet_detailed("'steal' field error detected");
97273 }
97274 }
97275
97276 if (BV_ISSET(fields, 22)) {
97277 log_packet_detailed(" field 'turn_founded' has changed");
97278
97279#ifdef FREECIV_JSON_CONNECTION
97280 field_addr.name = "turn_founded";
97281#endif /* FREECIV_JSON_CONNECTION */
97282 e = 0;
97283
97284 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
97285
97286 if (e) {
97287 log_packet_detailed("'turn_founded' field error detected");
97288 }
97289 }
97290
97291 if (BV_ISSET(fields, 23)) {
97292 log_packet_detailed(" field 'turn_last_built' has changed");
97293
97294#ifdef FREECIV_JSON_CONNECTION
97295 field_addr.name = "turn_last_built";
97296#endif /* FREECIV_JSON_CONNECTION */
97297 e = 0;
97298
97299 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
97300
97301 if (e) {
97302 log_packet_detailed("'turn_last_built' field error detected");
97303 }
97304 }
97305
97306 if (BV_ISSET(fields, 24)) {
97307 log_packet_detailed(" field 'built' has changed");
97308
97309#ifdef FREECIV_JSON_CONNECTION
97310 field_addr.name = "built";
97311#endif /* FREECIV_JSON_CONNECTION */
97312 e = 0;
97313
97314 {
97315 int i;
97316
97318
97319#ifdef FREECIV_JSON_CONNECTION
97320 size_t count_i = 0;
97321
97322 /* Create the array. */
97323 e |= DIO_PUT(farray, &dout, &field_addr, 0);
97324
97325 /* Enter array. */
97326 field_addr.sub_location = plocation_elem_new(0);
97327#endif /* FREECIV_JSON_CONNECTION */
97328
97329 for (i = 0; i < B_LAST; i++) {
97330 differ = (old->built[i] != real_packet->built[i]);
97331
97332 if (!differ) {
97333 continue;
97334 }
97335
97336#ifdef FREECIV_JSON_CONNECTION
97337 /* Append next diff array element. */
97338 field_addr.sub_location->number = -1;
97339
97340 /* Create the diff array element. */
97341 e |= DIO_PUT(object, &dout, &field_addr);
97342
97343 /* Enter diff array element (start at the index address). */
97344 field_addr.sub_location->number = count_i++;
97345 field_addr.sub_location->sub_location = plocation_field_new("index");
97346#endif /* FREECIV_JSON_CONNECTION */
97347
97348 /* Write the index */
97349#if B_LAST <= MAX_UINT8
97350 e |= DIO_PUT(uint8, &dout, &field_addr, i);
97351#else
97352 e |= DIO_PUT(uint16, &dout, &field_addr, i);
97353#endif
97354
97355#ifdef FREECIV_JSON_CONNECTION
97356 /* Content address. */
97357 field_addr.sub_location->sub_location->name = "data";
97358#endif /* FREECIV_JSON_CONNECTION */
97359
97360 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
97361
97362#ifdef FREECIV_JSON_CONNECTION
97363 /* Exit diff array element. */
97364 FC_FREE(field_addr.sub_location->sub_location);
97365#endif /* FREECIV_JSON_CONNECTION */
97366 }
97367
97368#ifdef FREECIV_JSON_CONNECTION
97369 /* Append diff array element. */
97370 field_addr.sub_location->number = -1;
97371
97372 /* Create the terminating diff array element. */
97373 e |= DIO_PUT(object, &dout, &field_addr);
97374
97375 /* Enter diff array element (start at the index address). */
97376 field_addr.sub_location->number = count_i;
97377 field_addr.sub_location->sub_location = plocation_field_new("index");
97378#endif /* FREECIV_JSON_CONNECTION */
97379
97380 /* Write the sentinel value */
97381#if B_LAST <= MAX_UINT8
97382 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
97383#else
97384 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
97385#endif
97386
97387#ifdef FREECIV_JSON_CONNECTION
97388 /* Exit diff array element. */
97389 FC_FREE(field_addr.sub_location->sub_location);
97390 /* Exit array. */
97391 FC_FREE(field_addr.sub_location);
97392#endif /* FREECIV_JSON_CONNECTION */
97393 }
97394
97395 if (e) {
97396 log_packet_detailed("'built' field error detected");
97397 }
97398 }
97399
97400 if (BV_ISSET(fields, 25)) {
97401 log_packet_detailed(" field 'production_kind' has changed");
97402
97403#ifdef FREECIV_JSON_CONNECTION
97404 field_addr.name = "production_kind";
97405#endif /* FREECIV_JSON_CONNECTION */
97406 e = 0;
97407
97408 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
97409
97410 if (e) {
97411 log_packet_detailed("'production_kind' field error detected");
97412 }
97413 }
97414
97415 if (BV_ISSET(fields, 26)) {
97416 log_packet_detailed(" field 'production_value' has changed");
97417
97418#ifdef FREECIV_JSON_CONNECTION
97419 field_addr.name = "production_value";
97420#endif /* FREECIV_JSON_CONNECTION */
97421 e = 0;
97422
97423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
97424
97425 if (e) {
97426 log_packet_detailed("'production_value' field error detected");
97427 }
97428 }
97429
97430 *old = *real_packet;
97431
97432#else /* FREECIV_DELTA_PROTOCOL */
97433#ifdef FREECIV_JSON_CONNECTION
97434 field_addr.name = "name";
97435#endif /* FREECIV_JSON_CONNECTION */
97436 e = 0;
97437
97438 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
97439
97440 if (e) {
97441 log_packet_detailed("'name' field error detected");
97442 }
97443
97444#ifdef FREECIV_JSON_CONNECTION
97445 field_addr.name = "owner";
97446#endif /* FREECIV_JSON_CONNECTION */
97447 e = 0;
97448
97449 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->owner);
97450
97451 if (e) {
97452 log_packet_detailed("'owner' field error detected");
97453 }
97454
97455#ifdef FREECIV_JSON_CONNECTION
97456 field_addr.name = "original";
97457#endif /* FREECIV_JSON_CONNECTION */
97458 e = 0;
97459
97460 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->original);
97461
97462 if (e) {
97463 log_packet_detailed("'original' field error detected");
97464 }
97465
97466#ifdef FREECIV_JSON_CONNECTION
97467 field_addr.name = "size";
97468#endif /* FREECIV_JSON_CONNECTION */
97469 e = 0;
97470
97471 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
97472
97473 if (e) {
97474 log_packet_detailed("'size' field error detected");
97475 }
97476
97477#ifdef FREECIV_JSON_CONNECTION
97478 field_addr.name = "history";
97479#endif /* FREECIV_JSON_CONNECTION */
97480 e = 0;
97481
97482 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
97483
97484 if (e) {
97485 log_packet_detailed("'history' field error detected");
97486 }
97487
97488#ifdef FREECIV_JSON_CONNECTION
97489 field_addr.name = "ppl_happy";
97490#endif /* FREECIV_JSON_CONNECTION */
97491 e = 0;
97492
97493 {
97494 int i;
97495
97496#ifdef FREECIV_JSON_CONNECTION
97497 /* Create the array. */
97498 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97499
97500 /* Enter array. */
97501 field_addr.sub_location = plocation_elem_new(0);
97502#endif /* FREECIV_JSON_CONNECTION */
97503
97504 for (i = 0; i < 5; i++) {
97505#ifdef FREECIV_JSON_CONNECTION
97506 /* Next array element. */
97507 field_addr.sub_location->number = i;
97508#endif /* FREECIV_JSON_CONNECTION */
97509
97510 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
97511 }
97512
97513#ifdef FREECIV_JSON_CONNECTION
97514 /* Exit array. */
97515 FC_FREE(field_addr.sub_location);
97516#endif /* FREECIV_JSON_CONNECTION */
97517 }
97518
97519 if (e) {
97520 log_packet_detailed("'ppl_happy' field error detected");
97521 }
97522
97523#ifdef FREECIV_JSON_CONNECTION
97524 field_addr.name = "ppl_content";
97525#endif /* FREECIV_JSON_CONNECTION */
97526 e = 0;
97527
97528 {
97529 int i;
97530
97531#ifdef FREECIV_JSON_CONNECTION
97532 /* Create the array. */
97533 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97534
97535 /* Enter array. */
97536 field_addr.sub_location = plocation_elem_new(0);
97537#endif /* FREECIV_JSON_CONNECTION */
97538
97539 for (i = 0; i < 5; i++) {
97540#ifdef FREECIV_JSON_CONNECTION
97541 /* Next array element. */
97542 field_addr.sub_location->number = i;
97543#endif /* FREECIV_JSON_CONNECTION */
97544
97545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
97546 }
97547
97548#ifdef FREECIV_JSON_CONNECTION
97549 /* Exit array. */
97550 FC_FREE(field_addr.sub_location);
97551#endif /* FREECIV_JSON_CONNECTION */
97552 }
97553
97554 if (e) {
97555 log_packet_detailed("'ppl_content' field error detected");
97556 }
97557
97558#ifdef FREECIV_JSON_CONNECTION
97559 field_addr.name = "ppl_unhappy";
97560#endif /* FREECIV_JSON_CONNECTION */
97561 e = 0;
97562
97563 {
97564 int i;
97565
97566#ifdef FREECIV_JSON_CONNECTION
97567 /* Create the array. */
97568 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97569
97570 /* Enter array. */
97571 field_addr.sub_location = plocation_elem_new(0);
97572#endif /* FREECIV_JSON_CONNECTION */
97573
97574 for (i = 0; i < 5; i++) {
97575#ifdef FREECIV_JSON_CONNECTION
97576 /* Next array element. */
97577 field_addr.sub_location->number = i;
97578#endif /* FREECIV_JSON_CONNECTION */
97579
97580 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
97581 }
97582
97583#ifdef FREECIV_JSON_CONNECTION
97584 /* Exit array. */
97585 FC_FREE(field_addr.sub_location);
97586#endif /* FREECIV_JSON_CONNECTION */
97587 }
97588
97589 if (e) {
97590 log_packet_detailed("'ppl_unhappy' field error detected");
97591 }
97592
97593#ifdef FREECIV_JSON_CONNECTION
97594 field_addr.name = "ppl_angry";
97595#endif /* FREECIV_JSON_CONNECTION */
97596 e = 0;
97597
97598 {
97599 int i;
97600
97601#ifdef FREECIV_JSON_CONNECTION
97602 /* Create the array. */
97603 e |= DIO_PUT(farray, &dout, &field_addr, 5);
97604
97605 /* Enter array. */
97606 field_addr.sub_location = plocation_elem_new(0);
97607#endif /* FREECIV_JSON_CONNECTION */
97608
97609 for (i = 0; i < 5; i++) {
97610#ifdef FREECIV_JSON_CONNECTION
97611 /* Next array element. */
97612 field_addr.sub_location->number = i;
97613#endif /* FREECIV_JSON_CONNECTION */
97614
97615 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
97616 }
97617
97618#ifdef FREECIV_JSON_CONNECTION
97619 /* Exit array. */
97620 FC_FREE(field_addr.sub_location);
97621#endif /* FREECIV_JSON_CONNECTION */
97622 }
97623
97624 if (e) {
97625 log_packet_detailed("'ppl_angry' field error detected");
97626 }
97627
97628#ifdef FREECIV_JSON_CONNECTION
97629 field_addr.name = "specialists_size";
97630#endif /* FREECIV_JSON_CONNECTION */
97631 e = 0;
97632
97633 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
97634
97635 if (e) {
97636 log_packet_detailed("'specialists_size' field error detected");
97637 }
97638
97639#ifdef FREECIV_JSON_CONNECTION
97640 field_addr.name = "specialists";
97641#endif /* FREECIV_JSON_CONNECTION */
97642 e = 0;
97643
97644 {
97645 int i;
97646
97647#ifdef FREECIV_JSON_CONNECTION
97648 /* Create the array. */
97649 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
97650
97651 /* Enter array. */
97652 field_addr.sub_location = plocation_elem_new(0);
97653#endif /* FREECIV_JSON_CONNECTION */
97654
97655 for (i = 0; i < real_packet->specialists_size; i++) {
97656#ifdef FREECIV_JSON_CONNECTION
97657 /* Next array element. */
97658 field_addr.sub_location->number = i;
97659#endif /* FREECIV_JSON_CONNECTION */
97660
97661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
97662 }
97663
97664#ifdef FREECIV_JSON_CONNECTION
97665 /* Exit array. */
97666 FC_FREE(field_addr.sub_location);
97667#endif /* FREECIV_JSON_CONNECTION */
97668 }
97669
97670 if (e) {
97671 log_packet_detailed("'specialists' field error detected");
97672 }
97673
97674#ifdef FREECIV_JSON_CONNECTION
97675 field_addr.name = "food_stock";
97676#endif /* FREECIV_JSON_CONNECTION */
97677 e = 0;
97678
97679 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
97680
97681 if (e) {
97682 log_packet_detailed("'food_stock' field error detected");
97683 }
97684
97685#ifdef FREECIV_JSON_CONNECTION
97686 field_addr.name = "shield_stock";
97687#endif /* FREECIV_JSON_CONNECTION */
97688 e = 0;
97689
97690 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
97691
97692 if (e) {
97693 log_packet_detailed("'shield_stock' field error detected");
97694 }
97695
97696#ifdef FREECIV_JSON_CONNECTION
97697 field_addr.name = "airlift";
97698#endif /* FREECIV_JSON_CONNECTION */
97699 e = 0;
97700
97701 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift);
97702
97703 if (e) {
97704 log_packet_detailed("'airlift' field error detected");
97705 }
97706
97707#ifdef FREECIV_JSON_CONNECTION
97708 field_addr.name = "debug";
97709#endif /* FREECIV_JSON_CONNECTION */
97710 e = 0;
97711
97712 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
97713
97714 if (e) {
97715 log_packet_detailed("'debug' field error detected");
97716 }
97717
97718#ifdef FREECIV_JSON_CONNECTION
97719 field_addr.name = "did_buy";
97720#endif /* FREECIV_JSON_CONNECTION */
97721 e = 0;
97722
97723 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
97724
97725 if (e) {
97726 log_packet_detailed("'did_buy' field error detected");
97727 }
97728
97729#ifdef FREECIV_JSON_CONNECTION
97730 field_addr.name = "did_sell";
97731#endif /* FREECIV_JSON_CONNECTION */
97732 e = 0;
97733
97734 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
97735
97736 if (e) {
97737 log_packet_detailed("'did_sell' field error detected");
97738 }
97739
97740#ifdef FREECIV_JSON_CONNECTION
97741 field_addr.name = "was_happy";
97742#endif /* FREECIV_JSON_CONNECTION */
97743 e = 0;
97744
97745 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
97746
97747 if (e) {
97748 log_packet_detailed("'was_happy' field error detected");
97749 }
97750
97751#ifdef FREECIV_JSON_CONNECTION
97752 field_addr.name = "had_famine";
97753#endif /* FREECIV_JSON_CONNECTION */
97754 e = 0;
97755
97756 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
97757
97758 if (e) {
97759 log_packet_detailed("'had_famine' field error detected");
97760 }
97761
97762#ifdef FREECIV_JSON_CONNECTION
97763 field_addr.name = "anarchy";
97764#endif /* FREECIV_JSON_CONNECTION */
97765 e = 0;
97766
97767 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
97768
97769 if (e) {
97770 log_packet_detailed("'anarchy' field error detected");
97771 }
97772
97773#ifdef FREECIV_JSON_CONNECTION
97774 field_addr.name = "rapture";
97775#endif /* FREECIV_JSON_CONNECTION */
97776 e = 0;
97777
97778 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
97779
97780 if (e) {
97781 log_packet_detailed("'rapture' field error detected");
97782 }
97783
97784#ifdef FREECIV_JSON_CONNECTION
97785 field_addr.name = "steal";
97786#endif /* FREECIV_JSON_CONNECTION */
97787 e = 0;
97788
97789 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
97790
97791 if (e) {
97792 log_packet_detailed("'steal' field error detected");
97793 }
97794
97795#ifdef FREECIV_JSON_CONNECTION
97796 field_addr.name = "turn_founded";
97797#endif /* FREECIV_JSON_CONNECTION */
97798 e = 0;
97799
97800 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
97801
97802 if (e) {
97803 log_packet_detailed("'turn_founded' field error detected");
97804 }
97805
97806#ifdef FREECIV_JSON_CONNECTION
97807 field_addr.name = "turn_last_built";
97808#endif /* FREECIV_JSON_CONNECTION */
97809 e = 0;
97810
97811 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
97812
97813 if (e) {
97814 log_packet_detailed("'turn_last_built' field error detected");
97815 }
97816
97817#ifdef FREECIV_JSON_CONNECTION
97818 field_addr.name = "built";
97819#endif /* FREECIV_JSON_CONNECTION */
97820 e = 0;
97821
97822 {
97823 int i;
97824
97825#ifdef FREECIV_JSON_CONNECTION
97826 /* Create the array. */
97827 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
97828
97829 /* Enter array. */
97830 field_addr.sub_location = plocation_elem_new(0);
97831#endif /* FREECIV_JSON_CONNECTION */
97832
97833 for (i = 0; i < B_LAST; i++) {
97834#ifdef FREECIV_JSON_CONNECTION
97835 /* Next array element. */
97836 field_addr.sub_location->number = i;
97837#endif /* FREECIV_JSON_CONNECTION */
97838
97839 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
97840 }
97841
97842#ifdef FREECIV_JSON_CONNECTION
97843 /* Exit array. */
97844 FC_FREE(field_addr.sub_location);
97845#endif /* FREECIV_JSON_CONNECTION */
97846 }
97847
97848 if (e) {
97849 log_packet_detailed("'built' field error detected");
97850 }
97851
97852#ifdef FREECIV_JSON_CONNECTION
97853 field_addr.name = "production_kind";
97854#endif /* FREECIV_JSON_CONNECTION */
97855 e = 0;
97856
97857 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
97858
97859 if (e) {
97860 log_packet_detailed("'production_kind' field error detected");
97861 }
97862
97863#ifdef FREECIV_JSON_CONNECTION
97864 field_addr.name = "production_value";
97865#endif /* FREECIV_JSON_CONNECTION */
97866 e = 0;
97867
97868 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
97869
97870 if (e) {
97871 log_packet_detailed("'production_value' field error detected");
97872 }
97873#endif /* FREECIV_DELTA_PROTOCOL */
97874
97876}
97877
97878int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
97879{
97880 if (!pc->used) {
97881 log_error("WARNING: trying to send data to the closed connection %s",
97883 return -1;
97884 }
97885 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY].packet != nullptr, -1,
97886 "Handler for PACKET_EDIT_CITY not installed");
97887 return pc->phs.handlers->send[PACKET_EDIT_CITY].packet(pc, packet);
97888}
97889
97891{
97892 memset(packet, 0, sizeof(*packet));
97893}
97894
97895#define free_packet_edit_player_create(_packet) (void) 0
97896#define destroy_packet_edit_player_create free
97897
97898#ifdef FREECIV_DELTA_PROTOCOL
97899#define hash_packet_edit_player_create_100 hash_const
97900#define cmp_packet_edit_player_create_100 cmp_const
97902#endif /* FREECIV_DELTA_PROTOCOL */
97903
97905{
97906#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_create(_packet)
97908
97909#ifdef FREECIV_JSON_CONNECTION
97910 struct plocation field_addr;
97911 {
97912 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
97915 }
97916#endif /* FREECIV_JSON_CONNECTION */
97917
97918 log_packet_detailed("packet_edit_player_create_100: got info about ()");
97919
97920#ifdef FREECIV_DELTA_PROTOCOL
97923 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_CREATE;
97924
97925 if (nullptr == *hash) {
97927 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
97928 }
97929
97930 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
97931 *real_packet = *old;
97932 } else {
97933 /* packet is already initialized empty */
97934 log_packet_detailed(" no old info");
97935 }
97936
97937#ifdef FREECIV_JSON_CONNECTION
97938 field_addr.name = "fields";
97939#endif /* FREECIV_JSON_CONNECTION */
97940 DIO_BV_GET(&din, &field_addr, fields);
97941
97942 if (BV_ISSET(fields, 0)) {
97943 log_packet_detailed(" got field 'tag'");
97944
97945#ifdef FREECIV_JSON_CONNECTION
97946 field_addr.name = "tag";
97947#endif /* FREECIV_JSON_CONNECTION */
97948
97949 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
97951 }
97952 }
97953
97954 if (nullptr == old) {
97955 old = fc_malloc(sizeof(*old));
97957 *old = *real_packet;
97959 } else {
97960 *old = *real_packet;
97961 }
97962
97963#else /* FREECIV_DELTA_PROTOCOL */
97964#ifdef FREECIV_JSON_CONNECTION
97965 field_addr.name = "tag";
97966#endif /* FREECIV_JSON_CONNECTION */
97967
97968 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
97970 }
97971#endif /* FREECIV_DELTA_PROTOCOL */
97972
97974#undef FREE_PACKET_STRUCT
97975}
97976
97978{
97979 const struct packet_edit_player_create *real_packet = packet;
97980 int e;
97982
97983 log_packet_detailed("packet_edit_player_create_100: sending info about ()");
97984
97985#ifdef FREECIV_DELTA_PROTOCOL
97988 bool differ;
97989 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_CREATE;
97990
97991 if (nullptr == *hash) {
97993 nullptr, nullptr, nullptr, destroy_packet_edit_player_create);
97994 }
97995 BV_CLR_ALL(fields);
97996
97997 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
97998 old = fc_malloc(sizeof(*old));
97999 /* temporary bitcopy just to insert correctly */
98000 *old = *real_packet;
98003 }
98004
98005 differ = (old->tag != real_packet->tag);
98006 if (differ) {
98007 BV_SET(fields, 0);
98008 }
98009#endif /* FREECIV_DELTA_PROTOCOL */
98010
98011#ifdef FREECIV_JSON_CONNECTION
98012 struct plocation field_addr;
98013 {
98014 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98017 }
98018#endif /* FREECIV_JSON_CONNECTION */
98019
98020#ifdef FREECIV_DELTA_PROTOCOL
98021#ifdef FREECIV_JSON_CONNECTION
98022 field_addr.name = "fields";
98023#endif /* FREECIV_JSON_CONNECTION */
98024 e = 0;
98025 e |= DIO_BV_PUT(&dout, &field_addr, fields);
98026 if (e) {
98027 log_packet_detailed("fields bitvector error detected");
98028 }
98029
98030 if (BV_ISSET(fields, 0)) {
98031 log_packet_detailed(" field 'tag' has changed");
98032
98033#ifdef FREECIV_JSON_CONNECTION
98034 field_addr.name = "tag";
98035#endif /* FREECIV_JSON_CONNECTION */
98036 e = 0;
98037
98038 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
98039
98040 if (e) {
98041 log_packet_detailed("'tag' field error detected");
98042 }
98043 }
98044
98045 *old = *real_packet;
98046
98047#else /* FREECIV_DELTA_PROTOCOL */
98048#ifdef FREECIV_JSON_CONNECTION
98049 field_addr.name = "tag";
98050#endif /* FREECIV_JSON_CONNECTION */
98051 e = 0;
98052
98053 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
98054
98055 if (e) {
98056 log_packet_detailed("'tag' field error detected");
98057 }
98058#endif /* FREECIV_DELTA_PROTOCOL */
98059
98061}
98062
98064{
98065 if (!pc->used) {
98066 log_error("WARNING: trying to send data to the closed connection %s",
98068 return -1;
98069 }
98070 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet != nullptr, -1,
98071 "Handler for PACKET_EDIT_PLAYER_CREATE not installed");
98072 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet(pc, packet);
98073}
98074
98076{
98077 struct packet_edit_player_create packet, *real_packet = &packet;
98078
98079 real_packet->tag = tag;
98080
98082}
98083
98085{
98086 memset(packet, 0, sizeof(*packet));
98087}
98088
98089#define free_packet_edit_player_remove(_packet) (void) 0
98090#define destroy_packet_edit_player_remove free
98091
98092#ifdef FREECIV_DELTA_PROTOCOL
98093#define hash_packet_edit_player_remove_100 hash_const
98094#define cmp_packet_edit_player_remove_100 cmp_const
98096#endif /* FREECIV_DELTA_PROTOCOL */
98097
98099{
98100#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_remove(_packet)
98102
98103#ifdef FREECIV_JSON_CONNECTION
98104 struct plocation field_addr;
98105 {
98106 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98109 }
98110#endif /* FREECIV_JSON_CONNECTION */
98111
98112 log_packet_detailed("packet_edit_player_remove_100: got info about ()");
98113
98114#ifdef FREECIV_DELTA_PROTOCOL
98117 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_REMOVE;
98118
98119 if (nullptr == *hash) {
98121 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
98122 }
98123
98124 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98125 *real_packet = *old;
98126 } else {
98127 /* packet is already initialized empty */
98128 log_packet_detailed(" no old info");
98129 }
98130
98131#ifdef FREECIV_JSON_CONNECTION
98132 field_addr.name = "fields";
98133#endif /* FREECIV_JSON_CONNECTION */
98134 DIO_BV_GET(&din, &field_addr, fields);
98135
98136 if (BV_ISSET(fields, 0)) {
98137 log_packet_detailed(" got field 'id'");
98138
98139#ifdef FREECIV_JSON_CONNECTION
98140 field_addr.name = "id";
98141#endif /* FREECIV_JSON_CONNECTION */
98142
98143 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98145 }
98146 }
98147
98148 if (nullptr == old) {
98149 old = fc_malloc(sizeof(*old));
98151 *old = *real_packet;
98153 } else {
98154 *old = *real_packet;
98155 }
98156
98157#else /* FREECIV_DELTA_PROTOCOL */
98158#ifdef FREECIV_JSON_CONNECTION
98159 field_addr.name = "id";
98160#endif /* FREECIV_JSON_CONNECTION */
98161
98162 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98164 }
98165#endif /* FREECIV_DELTA_PROTOCOL */
98166
98168#undef FREE_PACKET_STRUCT
98169}
98170
98172{
98173 const struct packet_edit_player_remove *real_packet = packet;
98174 int e;
98176
98177 log_packet_detailed("packet_edit_player_remove_100: sending info about ()");
98178
98179#ifdef FREECIV_DELTA_PROTOCOL
98182 bool differ;
98183 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_REMOVE;
98184
98185 if (nullptr == *hash) {
98187 nullptr, nullptr, nullptr, destroy_packet_edit_player_remove);
98188 }
98189 BV_CLR_ALL(fields);
98190
98191 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
98192 old = fc_malloc(sizeof(*old));
98193 /* temporary bitcopy just to insert correctly */
98194 *old = *real_packet;
98197 }
98198
98199 differ = (old->id != real_packet->id);
98200 if (differ) {
98201 BV_SET(fields, 0);
98202 }
98203#endif /* FREECIV_DELTA_PROTOCOL */
98204
98205#ifdef FREECIV_JSON_CONNECTION
98206 struct plocation field_addr;
98207 {
98208 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98211 }
98212#endif /* FREECIV_JSON_CONNECTION */
98213
98214#ifdef FREECIV_DELTA_PROTOCOL
98215#ifdef FREECIV_JSON_CONNECTION
98216 field_addr.name = "fields";
98217#endif /* FREECIV_JSON_CONNECTION */
98218 e = 0;
98219 e |= DIO_BV_PUT(&dout, &field_addr, fields);
98220 if (e) {
98221 log_packet_detailed("fields bitvector error detected");
98222 }
98223
98224 if (BV_ISSET(fields, 0)) {
98225 log_packet_detailed(" field 'id' has changed");
98226
98227#ifdef FREECIV_JSON_CONNECTION
98228 field_addr.name = "id";
98229#endif /* FREECIV_JSON_CONNECTION */
98230 e = 0;
98231
98232 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
98233
98234 if (e) {
98235 log_packet_detailed("'id' field error detected");
98236 }
98237 }
98238
98239 *old = *real_packet;
98240
98241#else /* FREECIV_DELTA_PROTOCOL */
98242#ifdef FREECIV_JSON_CONNECTION
98243 field_addr.name = "id";
98244#endif /* FREECIV_JSON_CONNECTION */
98245 e = 0;
98246
98247 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
98248
98249 if (e) {
98250 log_packet_detailed("'id' field error detected");
98251 }
98252#endif /* FREECIV_DELTA_PROTOCOL */
98253
98255}
98256
98258{
98259 if (!pc->used) {
98260 log_error("WARNING: trying to send data to the closed connection %s",
98262 return -1;
98263 }
98264 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet != nullptr, -1,
98265 "Handler for PACKET_EDIT_PLAYER_REMOVE not installed");
98266 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet(pc, packet);
98267}
98268
98270{
98271 struct packet_edit_player_remove packet, *real_packet = &packet;
98272
98273 real_packet->id = id;
98274
98276}
98277
98278static inline void init_packet_edit_player(struct packet_edit_player *packet)
98279{
98280 memset(packet, 0, sizeof(*packet));
98281}
98282
98283#define free_packet_edit_player(_packet) (void) 0
98284#define destroy_packet_edit_player free
98285
98286#ifdef FREECIV_DELTA_PROTOCOL
98288{
98289 const struct packet_edit_player *key = (const struct packet_edit_player *) vkey;
98290 genhash_val_t result = 0;
98291
98292 result += key->id;
98293
98294 result &= 0xFFFFFFFF;
98295 return result;
98296}
98297
98298static bool cmp_packet_edit_player_100(const void *vkey1, const void *vkey2)
98299{
98300 const struct packet_edit_player *old = (const struct packet_edit_player *) vkey1;
98301 const struct packet_edit_player *real_packet = (const struct packet_edit_player *) vkey2;
98302 bool differ;
98303
98304 differ = (old->id != real_packet->id);
98305
98306 return !differ;
98307}
98309#endif /* FREECIV_DELTA_PROTOCOL */
98310
98312{
98313#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player(_packet)
98315
98316#ifdef FREECIV_JSON_CONNECTION
98317 struct plocation field_addr;
98318 {
98319 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
98322 }
98323#endif /* FREECIV_JSON_CONNECTION */
98324
98325#ifdef FREECIV_JSON_CONNECTION
98326 field_addr.name = "id";
98327#endif /* FREECIV_JSON_CONNECTION */
98328
98329 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
98331 }
98332
98333 log_packet_detailed("packet_edit_player_100: got info about (%d)",
98334 real_packet->id);
98335
98336#ifdef FREECIV_DELTA_PROTOCOL
98338 struct packet_edit_player *old;
98339 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER;
98340
98341 if (nullptr == *hash) {
98343 nullptr, nullptr, nullptr, destroy_packet_edit_player);
98344 }
98345
98346 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
98347 *real_packet = *old;
98348 } else {
98349 /* packet is already initialized empty */
98350 log_packet_detailed(" no old info");
98351 }
98352
98353#ifdef FREECIV_JSON_CONNECTION
98354 field_addr.name = "fields";
98355#endif /* FREECIV_JSON_CONNECTION */
98356 DIO_BV_GET(&din, &field_addr, fields);
98357
98358 if (BV_ISSET(fields, 0)) {
98359 log_packet_detailed(" got field 'name'");
98360
98361#ifdef FREECIV_JSON_CONNECTION
98362 field_addr.name = "name";
98363#endif /* FREECIV_JSON_CONNECTION */
98364
98365 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
98367 }
98368 }
98369
98370 if (BV_ISSET(fields, 1)) {
98371 log_packet_detailed(" got field 'username'");
98372
98373#ifdef FREECIV_JSON_CONNECTION
98374 field_addr.name = "username";
98375#endif /* FREECIV_JSON_CONNECTION */
98376
98377 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
98379 }
98380 }
98381
98382 if (BV_ISSET(fields, 2)) {
98383 log_packet_detailed(" got field 'ranked_username'");
98384
98385#ifdef FREECIV_JSON_CONNECTION
98386 field_addr.name = "ranked_username";
98387#endif /* FREECIV_JSON_CONNECTION */
98388
98389 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
98390 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
98391 }
98392 }
98393
98394 if (BV_ISSET(fields, 3)) {
98395 log_packet_detailed(" got field 'user_turns'");
98396
98397#ifdef FREECIV_JSON_CONNECTION
98398 field_addr.name = "user_turns";
98399#endif /* FREECIV_JSON_CONNECTION */
98400
98401 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
98402 RECEIVE_PACKET_FIELD_ERROR(user_turns);
98403 }
98404 }
98405
98406 real_packet->is_male = BV_ISSET(fields, 4);
98407
98408 if (BV_ISSET(fields, 5)) {
98409 log_packet_detailed(" got field 'government'");
98410
98411#ifdef FREECIV_JSON_CONNECTION
98412 field_addr.name = "government";
98413#endif /* FREECIV_JSON_CONNECTION */
98414
98415 {
98416 int readin;
98417
98418 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98420 }
98421 real_packet->government = readin;
98422 }
98423 }
98424
98425 if (BV_ISSET(fields, 6)) {
98426 log_packet_detailed(" got field 'target_government'");
98427
98428#ifdef FREECIV_JSON_CONNECTION
98429 field_addr.name = "target_government";
98430#endif /* FREECIV_JSON_CONNECTION */
98431
98432 {
98433 int readin;
98434
98435 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98436 RECEIVE_PACKET_FIELD_ERROR(target_government);
98437 }
98438 real_packet->target_government = readin;
98439 }
98440 }
98441
98442 if (BV_ISSET(fields, 7)) {
98443 log_packet_detailed(" got field 'nation'");
98444
98445#ifdef FREECIV_JSON_CONNECTION
98446 field_addr.name = "nation";
98447#endif /* FREECIV_JSON_CONNECTION */
98448
98449 {
98450 int readin;
98451
98452 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
98454 }
98455 real_packet->nation = readin;
98456 }
98457 }
98458
98459 if (BV_ISSET(fields, 8)) {
98460 log_packet_detailed(" got field 'team'");
98461
98462#ifdef FREECIV_JSON_CONNECTION
98463 field_addr.name = "team";
98464#endif /* FREECIV_JSON_CONNECTION */
98465
98466 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
98468 }
98469 }
98470
98471 real_packet->phase_done = BV_ISSET(fields, 9);
98472
98473 if (BV_ISSET(fields, 10)) {
98474 log_packet_detailed(" got field 'nturns_idle'");
98475
98476#ifdef FREECIV_JSON_CONNECTION
98477 field_addr.name = "nturns_idle";
98478#endif /* FREECIV_JSON_CONNECTION */
98479
98480 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
98481 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
98482 }
98483 }
98484
98485 real_packet->is_alive = BV_ISSET(fields, 11);
98486
98487 if (BV_ISSET(fields, 12)) {
98488 log_packet_detailed(" got field 'revolution_finishes'");
98489
98490#ifdef FREECIV_JSON_CONNECTION
98491 field_addr.name = "revolution_finishes";
98492#endif /* FREECIV_JSON_CONNECTION */
98493
98494 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
98495 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
98496 }
98497 }
98498
98499 if (BV_ISSET(fields, 13)) {
98500 log_packet_detailed(" got field 'autoselect_weight'");
98501
98502#ifdef FREECIV_JSON_CONNECTION
98503 field_addr.name = "autoselect_weight";
98504#endif /* FREECIV_JSON_CONNECTION */
98505
98506 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
98507 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
98508 }
98509 }
98510
98511 if (BV_ISSET(fields, 14)) {
98512 log_packet_detailed(" got field 'embassy'");
98513
98514#ifdef FREECIV_JSON_CONNECTION
98515 field_addr.name = "embassy";
98516#endif /* FREECIV_JSON_CONNECTION */
98517
98518 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
98520 }
98521 }
98522
98523 if (BV_ISSET(fields, 15)) {
98524 log_packet_detailed(" got field 'gold'");
98525
98526#ifdef FREECIV_JSON_CONNECTION
98527 field_addr.name = "gold";
98528#endif /* FREECIV_JSON_CONNECTION */
98529
98530 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
98532 }
98533 }
98534
98535 if (BV_ISSET(fields, 16)) {
98536 log_packet_detailed(" got field 'infrapoints'");
98537
98538#ifdef FREECIV_JSON_CONNECTION
98539 field_addr.name = "infrapoints";
98540#endif /* FREECIV_JSON_CONNECTION */
98541
98542 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
98543 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
98544 }
98545 }
98546
98547 if (BV_ISSET(fields, 17)) {
98548 log_packet_detailed(" got field 'tax'");
98549
98550#ifdef FREECIV_JSON_CONNECTION
98551 field_addr.name = "tax";
98552#endif /* FREECIV_JSON_CONNECTION */
98553
98554 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
98556 }
98557 }
98558
98559 if (BV_ISSET(fields, 18)) {
98560 log_packet_detailed(" got field 'science'");
98561
98562#ifdef FREECIV_JSON_CONNECTION
98563 field_addr.name = "science";
98564#endif /* FREECIV_JSON_CONNECTION */
98565
98566 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
98568 }
98569 }
98570
98571 if (BV_ISSET(fields, 19)) {
98572 log_packet_detailed(" got field 'luxury'");
98573
98574#ifdef FREECIV_JSON_CONNECTION
98575 field_addr.name = "luxury";
98576#endif /* FREECIV_JSON_CONNECTION */
98577
98578 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
98580 }
98581 }
98582
98583 if (BV_ISSET(fields, 20)) {
98584 log_packet_detailed(" got field 'future_tech'");
98585
98586#ifdef FREECIV_JSON_CONNECTION
98587 field_addr.name = "future_tech";
98588#endif /* FREECIV_JSON_CONNECTION */
98589
98590 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
98591 RECEIVE_PACKET_FIELD_ERROR(future_tech);
98592 }
98593 }
98594
98595 if (BV_ISSET(fields, 21)) {
98596 log_packet_detailed(" got field 'researching'");
98597
98598#ifdef FREECIV_JSON_CONNECTION
98599 field_addr.name = "researching";
98600#endif /* FREECIV_JSON_CONNECTION */
98601
98602 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
98603 RECEIVE_PACKET_FIELD_ERROR(researching);
98604 }
98605 }
98606
98607 if (BV_ISSET(fields, 22)) {
98608 log_packet_detailed(" got field 'bulbs_researched'");
98609
98610#ifdef FREECIV_JSON_CONNECTION
98611 field_addr.name = "bulbs_researched";
98612#endif /* FREECIV_JSON_CONNECTION */
98613
98614 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
98615 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
98616 }
98617 }
98618
98619 if (BV_ISSET(fields, 23)) {
98620 log_packet_detailed(" got field 'inventions'");
98621
98622#ifdef FREECIV_JSON_CONNECTION
98623 field_addr.name = "inventions";
98624#endif /* FREECIV_JSON_CONNECTION */
98625
98627#ifdef FREECIV_JSON_CONNECTION
98628 /* Enter array (start at initial element). */
98629 field_addr.sub_location = plocation_elem_new(0);
98630 /* Enter diff array element (start at the index address). */
98631 field_addr.sub_location->sub_location = plocation_field_new("index");
98632#endif /* FREECIV_JSON_CONNECTION */
98633
98634 while (TRUE) {
98635 int i;
98636
98637 /* Read next index */
98638#if A_LAST + 1 <= MAX_UINT8
98639 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
98640#else
98641 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
98642#endif
98643 RECEIVE_PACKET_FIELD_ERROR(inventions);
98644 }
98645
98646 if (i == A_LAST + 1) {
98647 break;
98648 }
98649 if (i > A_LAST + 1) {
98650 RECEIVE_PACKET_FIELD_ERROR(inventions,
98651 ": unexpected index %d "
98652 "> length %d in array diff",
98653 i,
98654 A_LAST + 1);
98655 }
98656
98657#ifdef FREECIV_JSON_CONNECTION
98658 /* Content address. */
98659 field_addr.sub_location->sub_location->name = "data";
98660#endif /* FREECIV_JSON_CONNECTION */
98661
98662 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
98663 RECEIVE_PACKET_FIELD_ERROR(inventions);
98664 }
98665
98666#ifdef FREECIV_JSON_CONNECTION
98667 /* Move to the next diff array element. */
98668 field_addr.sub_location->number++;
98669 /* Back to the index address. */
98670 field_addr.sub_location->sub_location->name = "index";
98671#endif /* FREECIV_JSON_CONNECTION */
98672 }
98673
98674#ifdef FREECIV_JSON_CONNECTION
98675 /* Exit diff array element. */
98676 FC_FREE(field_addr.sub_location->sub_location);
98677 /* Exit array. */
98678 FC_FREE(field_addr.sub_location);
98679#endif /* FREECIV_JSON_CONNECTION */
98680 }
98681
98682 real_packet->ai = BV_ISSET(fields, 24);
98683
98684 real_packet->scenario_reserved = BV_ISSET(fields, 25);
98685
98686 if (nullptr == old) {
98687 old = fc_malloc(sizeof(*old));
98689 *old = *real_packet;
98691 } else {
98692 *old = *real_packet;
98693 }
98694
98695#else /* FREECIV_DELTA_PROTOCOL */
98696#ifdef FREECIV_JSON_CONNECTION
98697 field_addr.name = "name";
98698#endif /* FREECIV_JSON_CONNECTION */
98699
98700 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
98702 }
98703
98704#ifdef FREECIV_JSON_CONNECTION
98705 field_addr.name = "username";
98706#endif /* FREECIV_JSON_CONNECTION */
98707
98708 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
98710 }
98711
98712#ifdef FREECIV_JSON_CONNECTION
98713 field_addr.name = "ranked_username";
98714#endif /* FREECIV_JSON_CONNECTION */
98715
98716 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
98717 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
98718 }
98719
98720#ifdef FREECIV_JSON_CONNECTION
98721 field_addr.name = "user_turns";
98722#endif /* FREECIV_JSON_CONNECTION */
98723
98724 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
98725 RECEIVE_PACKET_FIELD_ERROR(user_turns);
98726 }
98727
98728#ifdef FREECIV_JSON_CONNECTION
98729 field_addr.name = "is_male";
98730#endif /* FREECIV_JSON_CONNECTION */
98731
98732 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
98734 }
98735
98736#ifdef FREECIV_JSON_CONNECTION
98737 field_addr.name = "government";
98738#endif /* FREECIV_JSON_CONNECTION */
98739
98740 {
98741 int readin;
98742
98743 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98745 }
98746 real_packet->government = readin;
98747 }
98748
98749#ifdef FREECIV_JSON_CONNECTION
98750 field_addr.name = "target_government";
98751#endif /* FREECIV_JSON_CONNECTION */
98752
98753 {
98754 int readin;
98755
98756 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
98757 RECEIVE_PACKET_FIELD_ERROR(target_government);
98758 }
98759 real_packet->target_government = readin;
98760 }
98761
98762#ifdef FREECIV_JSON_CONNECTION
98763 field_addr.name = "nation";
98764#endif /* FREECIV_JSON_CONNECTION */
98765
98766 {
98767 int readin;
98768
98769 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
98771 }
98772 real_packet->nation = readin;
98773 }
98774
98775#ifdef FREECIV_JSON_CONNECTION
98776 field_addr.name = "team";
98777#endif /* FREECIV_JSON_CONNECTION */
98778
98779 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->team)) {
98781 }
98782
98783#ifdef FREECIV_JSON_CONNECTION
98784 field_addr.name = "phase_done";
98785#endif /* FREECIV_JSON_CONNECTION */
98786
98787 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
98788 RECEIVE_PACKET_FIELD_ERROR(phase_done);
98789 }
98790
98791#ifdef FREECIV_JSON_CONNECTION
98792 field_addr.name = "nturns_idle";
98793#endif /* FREECIV_JSON_CONNECTION */
98794
98795 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
98796 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
98797 }
98798
98799#ifdef FREECIV_JSON_CONNECTION
98800 field_addr.name = "is_alive";
98801#endif /* FREECIV_JSON_CONNECTION */
98802
98803 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
98805 }
98806
98807#ifdef FREECIV_JSON_CONNECTION
98808 field_addr.name = "revolution_finishes";
98809#endif /* FREECIV_JSON_CONNECTION */
98810
98811 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
98812 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
98813 }
98814
98815#ifdef FREECIV_JSON_CONNECTION
98816 field_addr.name = "autoselect_weight";
98817#endif /* FREECIV_JSON_CONNECTION */
98818
98819 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
98820 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
98821 }
98822
98823#ifdef FREECIV_JSON_CONNECTION
98824 field_addr.name = "embassy";
98825#endif /* FREECIV_JSON_CONNECTION */
98826
98827 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
98829 }
98830
98831#ifdef FREECIV_JSON_CONNECTION
98832 field_addr.name = "gold";
98833#endif /* FREECIV_JSON_CONNECTION */
98834
98835 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
98837 }
98838
98839#ifdef FREECIV_JSON_CONNECTION
98840 field_addr.name = "infrapoints";
98841#endif /* FREECIV_JSON_CONNECTION */
98842
98843 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
98844 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
98845 }
98846
98847#ifdef FREECIV_JSON_CONNECTION
98848 field_addr.name = "tax";
98849#endif /* FREECIV_JSON_CONNECTION */
98850
98851 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
98853 }
98854
98855#ifdef FREECIV_JSON_CONNECTION
98856 field_addr.name = "science";
98857#endif /* FREECIV_JSON_CONNECTION */
98858
98859 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
98861 }
98862
98863#ifdef FREECIV_JSON_CONNECTION
98864 field_addr.name = "luxury";
98865#endif /* FREECIV_JSON_CONNECTION */
98866
98867 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
98869 }
98870
98871#ifdef FREECIV_JSON_CONNECTION
98872 field_addr.name = "future_tech";
98873#endif /* FREECIV_JSON_CONNECTION */
98874
98875 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
98876 RECEIVE_PACKET_FIELD_ERROR(future_tech);
98877 }
98878
98879#ifdef FREECIV_JSON_CONNECTION
98880 field_addr.name = "researching";
98881#endif /* FREECIV_JSON_CONNECTION */
98882
98883 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
98884 RECEIVE_PACKET_FIELD_ERROR(researching);
98885 }
98886
98887#ifdef FREECIV_JSON_CONNECTION
98888 field_addr.name = "bulbs_researched";
98889#endif /* FREECIV_JSON_CONNECTION */
98890
98891 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
98892 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
98893 }
98894
98895#ifdef FREECIV_JSON_CONNECTION
98896 field_addr.name = "inventions";
98897#endif /* FREECIV_JSON_CONNECTION */
98898
98899 {
98900 int i;
98901
98902
98903#ifdef FREECIV_JSON_CONNECTION
98904 /* Enter array. */
98905 field_addr.sub_location = plocation_elem_new(0);
98906#endif /* FREECIV_JSON_CONNECTION */
98907
98908 for (i = 0; i < A_LAST + 1; i++) {
98909#ifdef FREECIV_JSON_CONNECTION
98910 /* Next array element */
98911 field_addr.sub_location->number = i;
98912#endif /* FREECIV_JSON_CONNECTION */
98913
98914 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
98915 RECEIVE_PACKET_FIELD_ERROR(inventions);
98916 }
98917 }
98918
98919#ifdef FREECIV_JSON_CONNECTION
98920 /* Exit array. */
98921 FC_FREE(field_addr.sub_location);
98922#endif /* FREECIV_JSON_CONNECTION */
98923 }
98924
98925#ifdef FREECIV_JSON_CONNECTION
98926 field_addr.name = "ai";
98927#endif /* FREECIV_JSON_CONNECTION */
98928
98929 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ai)) {
98931 }
98932
98933#ifdef FREECIV_JSON_CONNECTION
98934 field_addr.name = "scenario_reserved";
98935#endif /* FREECIV_JSON_CONNECTION */
98936
98937 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_reserved)) {
98938 RECEIVE_PACKET_FIELD_ERROR(scenario_reserved);
98939 }
98940#endif /* FREECIV_DELTA_PROTOCOL */
98941
98943#undef FREE_PACKET_STRUCT
98944}
98945
98946static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
98947{
98948 const struct packet_edit_player *real_packet = packet;
98949 int e;
98951
98952 log_packet_detailed("packet_edit_player_100: sending info about (%d)",
98953 real_packet->id);
98954
98955#ifdef FREECIV_DELTA_PROTOCOL
98957 struct packet_edit_player *old;
98958 bool differ;
98959 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER;
98960
98961 if (nullptr == *hash) {
98963 nullptr, nullptr, nullptr, destroy_packet_edit_player);
98964 }
98965 BV_CLR_ALL(fields);
98966
98967 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
98968 old = fc_malloc(sizeof(*old));
98969 /* temporary bitcopy just to insert correctly */
98970 *old = *real_packet;
98973 }
98974
98975 differ = (strcmp(old->name, real_packet->name) != 0);
98976 if (differ) {
98977 BV_SET(fields, 0);
98978 }
98979
98980 differ = (strcmp(old->username, real_packet->username) != 0);
98981 if (differ) {
98982 BV_SET(fields, 1);
98983 }
98984
98985 differ = (strcmp(old->ranked_username, real_packet->ranked_username) != 0);
98986 if (differ) {
98987 BV_SET(fields, 2);
98988 }
98989
98990 differ = (old->user_turns != real_packet->user_turns);
98991 if (differ) {
98992 BV_SET(fields, 3);
98993 }
98994
98995 /* folded into head */
98996 if (real_packet->is_male) {
98997 BV_SET(fields, 4);
98998 }
98999
99000 differ = (old->government != real_packet->government);
99001 if (differ) {
99002 BV_SET(fields, 5);
99003 }
99004
99005 differ = (old->target_government != real_packet->target_government);
99006 if (differ) {
99007 BV_SET(fields, 6);
99008 }
99009
99010 differ = (old->nation != real_packet->nation);
99011 if (differ) {
99012 BV_SET(fields, 7);
99013 }
99014
99015 differ = (old->team != real_packet->team);
99016 if (differ) {
99017 BV_SET(fields, 8);
99018 }
99019
99020 /* folded into head */
99021 if (real_packet->phase_done) {
99022 BV_SET(fields, 9);
99023 }
99024
99025 differ = (old->nturns_idle != real_packet->nturns_idle);
99026 if (differ) {
99027 BV_SET(fields, 10);
99028 }
99029
99030 /* folded into head */
99031 if (real_packet->is_alive) {
99032 BV_SET(fields, 11);
99033 }
99034
99035 differ = (old->revolution_finishes != real_packet->revolution_finishes);
99036 if (differ) {
99037 BV_SET(fields, 12);
99038 }
99039
99040 differ = (old->autoselect_weight != real_packet->autoselect_weight);
99041 if (differ) {
99042 BV_SET(fields, 13);
99043 }
99044
99045 differ = !BV_ARE_EQUAL(old->embassy, real_packet->embassy);
99046 if (differ) {
99047 BV_SET(fields, 14);
99048 }
99049
99050 differ = (old->gold != real_packet->gold);
99051 if (differ) {
99052 BV_SET(fields, 15);
99053 }
99054
99055 differ = (old->infrapoints != real_packet->infrapoints);
99056 if (differ) {
99057 BV_SET(fields, 16);
99058 }
99059
99060 differ = (old->tax != real_packet->tax);
99061 if (differ) {
99062 BV_SET(fields, 17);
99063 }
99064
99065 differ = (old->science != real_packet->science);
99066 if (differ) {
99067 BV_SET(fields, 18);
99068 }
99069
99070 differ = (old->luxury != real_packet->luxury);
99071 if (differ) {
99072 BV_SET(fields, 19);
99073 }
99074
99075 differ = (old->future_tech != real_packet->future_tech);
99076 if (differ) {
99077 BV_SET(fields, 20);
99078 }
99079
99080 differ = (old->researching != real_packet->researching);
99081 if (differ) {
99082 BV_SET(fields, 21);
99083 }
99084
99085 differ = (old->bulbs_researched != real_packet->bulbs_researched);
99086 if (differ) {
99087 BV_SET(fields, 22);
99088 }
99089
99090 differ = FALSE;
99091 {
99092 int i;
99093
99094 for (i = 0; i < A_LAST + 1; i++) {
99095 differ = (old->inventions[i] != real_packet->inventions[i]);
99096 if (differ) {
99097 break;
99098 }
99099 }
99100 }
99101 if (differ) {
99102 BV_SET(fields, 23);
99103 }
99104
99105 /* folded into head */
99106 if (real_packet->ai) {
99107 BV_SET(fields, 24);
99108 }
99109
99110 /* folded into head */
99111 if (real_packet->scenario_reserved) {
99112 BV_SET(fields, 25);
99113 }
99114#endif /* FREECIV_DELTA_PROTOCOL */
99115
99116#ifdef FREECIV_JSON_CONNECTION
99117 struct plocation field_addr;
99118 {
99119 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99122 }
99123#endif /* FREECIV_JSON_CONNECTION */
99124
99125#ifdef FREECIV_JSON_CONNECTION
99126 field_addr.name = "id";
99127#endif /* FREECIV_JSON_CONNECTION */
99128 e = 0;
99129
99130 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
99131
99132 if (e) {
99133 log_packet_detailed("'id' field error detected");
99134 }
99135
99136#ifdef FREECIV_DELTA_PROTOCOL
99137#ifdef FREECIV_JSON_CONNECTION
99138 field_addr.name = "fields";
99139#endif /* FREECIV_JSON_CONNECTION */
99140 e = 0;
99141 e |= DIO_BV_PUT(&dout, &field_addr, fields);
99142 if (e) {
99143 log_packet_detailed("fields bitvector error detected");
99144 }
99145
99146 if (BV_ISSET(fields, 0)) {
99147 log_packet_detailed(" field 'name' has changed");
99148
99149#ifdef FREECIV_JSON_CONNECTION
99150 field_addr.name = "name";
99151#endif /* FREECIV_JSON_CONNECTION */
99152 e = 0;
99153
99154 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
99155
99156 if (e) {
99157 log_packet_detailed("'name' field error detected");
99158 }
99159 }
99160
99161 if (BV_ISSET(fields, 1)) {
99162 log_packet_detailed(" field 'username' has changed");
99163
99164#ifdef FREECIV_JSON_CONNECTION
99165 field_addr.name = "username";
99166#endif /* FREECIV_JSON_CONNECTION */
99167 e = 0;
99168
99169 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
99170
99171 if (e) {
99172 log_packet_detailed("'username' field error detected");
99173 }
99174 }
99175
99176 if (BV_ISSET(fields, 2)) {
99177 log_packet_detailed(" field 'ranked_username' has changed");
99178
99179#ifdef FREECIV_JSON_CONNECTION
99180 field_addr.name = "ranked_username";
99181#endif /* FREECIV_JSON_CONNECTION */
99182 e = 0;
99183
99184 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
99185
99186 if (e) {
99187 log_packet_detailed("'ranked_username' field error detected");
99188 }
99189 }
99190
99191 if (BV_ISSET(fields, 3)) {
99192 log_packet_detailed(" field 'user_turns' has changed");
99193
99194#ifdef FREECIV_JSON_CONNECTION
99195 field_addr.name = "user_turns";
99196#endif /* FREECIV_JSON_CONNECTION */
99197 e = 0;
99198
99199 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
99200
99201 if (e) {
99202 log_packet_detailed("'user_turns' field error detected");
99203 }
99204 }
99205
99206 /* field 4 is folded into the header */
99207
99208 if (BV_ISSET(fields, 5)) {
99209 log_packet_detailed(" field 'government' has changed");
99210
99211#ifdef FREECIV_JSON_CONNECTION
99212 field_addr.name = "government";
99213#endif /* FREECIV_JSON_CONNECTION */
99214 e = 0;
99215
99216 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
99217
99218 if (e) {
99219 log_packet_detailed("'government' field error detected");
99220 }
99221 }
99222
99223 if (BV_ISSET(fields, 6)) {
99224 log_packet_detailed(" field 'target_government' has changed");
99225
99226#ifdef FREECIV_JSON_CONNECTION
99227 field_addr.name = "target_government";
99228#endif /* FREECIV_JSON_CONNECTION */
99229 e = 0;
99230
99231 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
99232
99233 if (e) {
99234 log_packet_detailed("'target_government' field error detected");
99235 }
99236 }
99237
99238 if (BV_ISSET(fields, 7)) {
99239 log_packet_detailed(" field 'nation' has changed");
99240
99241#ifdef FREECIV_JSON_CONNECTION
99242 field_addr.name = "nation";
99243#endif /* FREECIV_JSON_CONNECTION */
99244 e = 0;
99245
99246 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
99247
99248 if (e) {
99249 log_packet_detailed("'nation' field error detected");
99250 }
99251 }
99252
99253 if (BV_ISSET(fields, 8)) {
99254 log_packet_detailed(" field 'team' has changed");
99255
99256#ifdef FREECIV_JSON_CONNECTION
99257 field_addr.name = "team";
99258#endif /* FREECIV_JSON_CONNECTION */
99259 e = 0;
99260
99261 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
99262
99263 if (e) {
99264 log_packet_detailed("'team' field error detected");
99265 }
99266 }
99267
99268 /* field 9 is folded into the header */
99269
99270 if (BV_ISSET(fields, 10)) {
99271 log_packet_detailed(" field 'nturns_idle' has changed");
99272
99273#ifdef FREECIV_JSON_CONNECTION
99274 field_addr.name = "nturns_idle";
99275#endif /* FREECIV_JSON_CONNECTION */
99276 e = 0;
99277
99278 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
99279
99280 if (e) {
99281 log_packet_detailed("'nturns_idle' field error detected");
99282 }
99283 }
99284
99285 /* field 11 is folded into the header */
99286
99287 if (BV_ISSET(fields, 12)) {
99288 log_packet_detailed(" field 'revolution_finishes' has changed");
99289
99290#ifdef FREECIV_JSON_CONNECTION
99291 field_addr.name = "revolution_finishes";
99292#endif /* FREECIV_JSON_CONNECTION */
99293 e = 0;
99294
99295 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
99296
99297 if (e) {
99298 log_packet_detailed("'revolution_finishes' field error detected");
99299 }
99300 }
99301
99302 if (BV_ISSET(fields, 13)) {
99303 log_packet_detailed(" field 'autoselect_weight' has changed");
99304
99305#ifdef FREECIV_JSON_CONNECTION
99306 field_addr.name = "autoselect_weight";
99307#endif /* FREECIV_JSON_CONNECTION */
99308 e = 0;
99309
99310 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
99311
99312 if (e) {
99313 log_packet_detailed("'autoselect_weight' field error detected");
99314 }
99315 }
99316
99317 if (BV_ISSET(fields, 14)) {
99318 log_packet_detailed(" field 'embassy' has changed");
99319
99320#ifdef FREECIV_JSON_CONNECTION
99321 field_addr.name = "embassy";
99322#endif /* FREECIV_JSON_CONNECTION */
99323 e = 0;
99324
99325 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
99326
99327 if (e) {
99328 log_packet_detailed("'embassy' field error detected");
99329 }
99330 }
99331
99332 if (BV_ISSET(fields, 15)) {
99333 log_packet_detailed(" field 'gold' has changed");
99334
99335#ifdef FREECIV_JSON_CONNECTION
99336 field_addr.name = "gold";
99337#endif /* FREECIV_JSON_CONNECTION */
99338 e = 0;
99339
99340 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
99341
99342 if (e) {
99343 log_packet_detailed("'gold' field error detected");
99344 }
99345 }
99346
99347 if (BV_ISSET(fields, 16)) {
99348 log_packet_detailed(" field 'infrapoints' has changed");
99349
99350#ifdef FREECIV_JSON_CONNECTION
99351 field_addr.name = "infrapoints";
99352#endif /* FREECIV_JSON_CONNECTION */
99353 e = 0;
99354
99355 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
99356
99357 if (e) {
99358 log_packet_detailed("'infrapoints' field error detected");
99359 }
99360 }
99361
99362 if (BV_ISSET(fields, 17)) {
99363 log_packet_detailed(" field 'tax' has changed");
99364
99365#ifdef FREECIV_JSON_CONNECTION
99366 field_addr.name = "tax";
99367#endif /* FREECIV_JSON_CONNECTION */
99368 e = 0;
99369
99370 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
99371
99372 if (e) {
99373 log_packet_detailed("'tax' field error detected");
99374 }
99375 }
99376
99377 if (BV_ISSET(fields, 18)) {
99378 log_packet_detailed(" field 'science' has changed");
99379
99380#ifdef FREECIV_JSON_CONNECTION
99381 field_addr.name = "science";
99382#endif /* FREECIV_JSON_CONNECTION */
99383 e = 0;
99384
99385 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
99386
99387 if (e) {
99388 log_packet_detailed("'science' field error detected");
99389 }
99390 }
99391
99392 if (BV_ISSET(fields, 19)) {
99393 log_packet_detailed(" field 'luxury' has changed");
99394
99395#ifdef FREECIV_JSON_CONNECTION
99396 field_addr.name = "luxury";
99397#endif /* FREECIV_JSON_CONNECTION */
99398 e = 0;
99399
99400 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
99401
99402 if (e) {
99403 log_packet_detailed("'luxury' field error detected");
99404 }
99405 }
99406
99407 if (BV_ISSET(fields, 20)) {
99408 log_packet_detailed(" field 'future_tech' has changed");
99409
99410#ifdef FREECIV_JSON_CONNECTION
99411 field_addr.name = "future_tech";
99412#endif /* FREECIV_JSON_CONNECTION */
99413 e = 0;
99414
99415 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
99416
99417 if (e) {
99418 log_packet_detailed("'future_tech' field error detected");
99419 }
99420 }
99421
99422 if (BV_ISSET(fields, 21)) {
99423 log_packet_detailed(" field 'researching' has changed");
99424
99425#ifdef FREECIV_JSON_CONNECTION
99426 field_addr.name = "researching";
99427#endif /* FREECIV_JSON_CONNECTION */
99428 e = 0;
99429
99430 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
99431
99432 if (e) {
99433 log_packet_detailed("'researching' field error detected");
99434 }
99435 }
99436
99437 if (BV_ISSET(fields, 22)) {
99438 log_packet_detailed(" field 'bulbs_researched' has changed");
99439
99440#ifdef FREECIV_JSON_CONNECTION
99441 field_addr.name = "bulbs_researched";
99442#endif /* FREECIV_JSON_CONNECTION */
99443 e = 0;
99444
99445 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
99446
99447 if (e) {
99448 log_packet_detailed("'bulbs_researched' field error detected");
99449 }
99450 }
99451
99452 if (BV_ISSET(fields, 23)) {
99453 log_packet_detailed(" field 'inventions' has changed");
99454
99455#ifdef FREECIV_JSON_CONNECTION
99456 field_addr.name = "inventions";
99457#endif /* FREECIV_JSON_CONNECTION */
99458 e = 0;
99459
99460 {
99461 int i;
99462
99464
99465#ifdef FREECIV_JSON_CONNECTION
99466 size_t count_i = 0;
99467
99468 /* Create the array. */
99469 e |= DIO_PUT(farray, &dout, &field_addr, 0);
99470
99471 /* Enter array. */
99472 field_addr.sub_location = plocation_elem_new(0);
99473#endif /* FREECIV_JSON_CONNECTION */
99474
99475 for (i = 0; i < A_LAST + 1; i++) {
99476 differ = (old->inventions[i] != real_packet->inventions[i]);
99477
99478 if (!differ) {
99479 continue;
99480 }
99481
99482#ifdef FREECIV_JSON_CONNECTION
99483 /* Append next diff array element. */
99484 field_addr.sub_location->number = -1;
99485
99486 /* Create the diff array element. */
99487 e |= DIO_PUT(object, &dout, &field_addr);
99488
99489 /* Enter diff array element (start at the index address). */
99490 field_addr.sub_location->number = count_i++;
99491 field_addr.sub_location->sub_location = plocation_field_new("index");
99492#endif /* FREECIV_JSON_CONNECTION */
99493
99494 /* Write the index */
99495#if A_LAST + 1 <= MAX_UINT8
99496 e |= DIO_PUT(uint8, &dout, &field_addr, i);
99497#else
99498 e |= DIO_PUT(uint16, &dout, &field_addr, i);
99499#endif
99500
99501#ifdef FREECIV_JSON_CONNECTION
99502 /* Content address. */
99503 field_addr.sub_location->sub_location->name = "data";
99504#endif /* FREECIV_JSON_CONNECTION */
99505
99506 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
99507
99508#ifdef FREECIV_JSON_CONNECTION
99509 /* Exit diff array element. */
99510 FC_FREE(field_addr.sub_location->sub_location);
99511#endif /* FREECIV_JSON_CONNECTION */
99512 }
99513
99514#ifdef FREECIV_JSON_CONNECTION
99515 /* Append diff array element. */
99516 field_addr.sub_location->number = -1;
99517
99518 /* Create the terminating diff array element. */
99519 e |= DIO_PUT(object, &dout, &field_addr);
99520
99521 /* Enter diff array element (start at the index address). */
99522 field_addr.sub_location->number = count_i;
99523 field_addr.sub_location->sub_location = plocation_field_new("index");
99524#endif /* FREECIV_JSON_CONNECTION */
99525
99526 /* Write the sentinel value */
99527#if A_LAST + 1 <= MAX_UINT8
99528 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST + 1);
99529#else
99530 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST + 1);
99531#endif
99532
99533#ifdef FREECIV_JSON_CONNECTION
99534 /* Exit diff array element. */
99535 FC_FREE(field_addr.sub_location->sub_location);
99536 /* Exit array. */
99537 FC_FREE(field_addr.sub_location);
99538#endif /* FREECIV_JSON_CONNECTION */
99539 }
99540
99541 if (e) {
99542 log_packet_detailed("'inventions' field error detected");
99543 }
99544 }
99545
99546 /* field 24 is folded into the header */
99547
99548 /* field 25 is folded into the header */
99549
99550 *old = *real_packet;
99551
99552#else /* FREECIV_DELTA_PROTOCOL */
99553#ifdef FREECIV_JSON_CONNECTION
99554 field_addr.name = "name";
99555#endif /* FREECIV_JSON_CONNECTION */
99556 e = 0;
99557
99558 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
99559
99560 if (e) {
99561 log_packet_detailed("'name' field error detected");
99562 }
99563
99564#ifdef FREECIV_JSON_CONNECTION
99565 field_addr.name = "username";
99566#endif /* FREECIV_JSON_CONNECTION */
99567 e = 0;
99568
99569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
99570
99571 if (e) {
99572 log_packet_detailed("'username' field error detected");
99573 }
99574
99575#ifdef FREECIV_JSON_CONNECTION
99576 field_addr.name = "ranked_username";
99577#endif /* FREECIV_JSON_CONNECTION */
99578 e = 0;
99579
99580 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
99581
99582 if (e) {
99583 log_packet_detailed("'ranked_username' field error detected");
99584 }
99585
99586#ifdef FREECIV_JSON_CONNECTION
99587 field_addr.name = "user_turns";
99588#endif /* FREECIV_JSON_CONNECTION */
99589 e = 0;
99590
99591 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
99592
99593 if (e) {
99594 log_packet_detailed("'user_turns' field error detected");
99595 }
99596
99597#ifdef FREECIV_JSON_CONNECTION
99598 field_addr.name = "is_male";
99599#endif /* FREECIV_JSON_CONNECTION */
99600 e = 0;
99601
99602 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
99603
99604 if (e) {
99605 log_packet_detailed("'is_male' field error detected");
99606 }
99607
99608#ifdef FREECIV_JSON_CONNECTION
99609 field_addr.name = "government";
99610#endif /* FREECIV_JSON_CONNECTION */
99611 e = 0;
99612
99613 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
99614
99615 if (e) {
99616 log_packet_detailed("'government' field error detected");
99617 }
99618
99619#ifdef FREECIV_JSON_CONNECTION
99620 field_addr.name = "target_government";
99621#endif /* FREECIV_JSON_CONNECTION */
99622 e = 0;
99623
99624 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
99625
99626 if (e) {
99627 log_packet_detailed("'target_government' field error detected");
99628 }
99629
99630#ifdef FREECIV_JSON_CONNECTION
99631 field_addr.name = "nation";
99632#endif /* FREECIV_JSON_CONNECTION */
99633 e = 0;
99634
99635 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
99636
99637 if (e) {
99638 log_packet_detailed("'nation' field error detected");
99639 }
99640
99641#ifdef FREECIV_JSON_CONNECTION
99642 field_addr.name = "team";
99643#endif /* FREECIV_JSON_CONNECTION */
99644 e = 0;
99645
99646 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->team);
99647
99648 if (e) {
99649 log_packet_detailed("'team' field error detected");
99650 }
99651
99652#ifdef FREECIV_JSON_CONNECTION
99653 field_addr.name = "phase_done";
99654#endif /* FREECIV_JSON_CONNECTION */
99655 e = 0;
99656
99657 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
99658
99659 if (e) {
99660 log_packet_detailed("'phase_done' field error detected");
99661 }
99662
99663#ifdef FREECIV_JSON_CONNECTION
99664 field_addr.name = "nturns_idle";
99665#endif /* FREECIV_JSON_CONNECTION */
99666 e = 0;
99667
99668 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
99669
99670 if (e) {
99671 log_packet_detailed("'nturns_idle' field error detected");
99672 }
99673
99674#ifdef FREECIV_JSON_CONNECTION
99675 field_addr.name = "is_alive";
99676#endif /* FREECIV_JSON_CONNECTION */
99677 e = 0;
99678
99679 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
99680
99681 if (e) {
99682 log_packet_detailed("'is_alive' field error detected");
99683 }
99684
99685#ifdef FREECIV_JSON_CONNECTION
99686 field_addr.name = "revolution_finishes";
99687#endif /* FREECIV_JSON_CONNECTION */
99688 e = 0;
99689
99690 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
99691
99692 if (e) {
99693 log_packet_detailed("'revolution_finishes' field error detected");
99694 }
99695
99696#ifdef FREECIV_JSON_CONNECTION
99697 field_addr.name = "autoselect_weight";
99698#endif /* FREECIV_JSON_CONNECTION */
99699 e = 0;
99700
99701 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
99702
99703 if (e) {
99704 log_packet_detailed("'autoselect_weight' field error detected");
99705 }
99706
99707#ifdef FREECIV_JSON_CONNECTION
99708 field_addr.name = "embassy";
99709#endif /* FREECIV_JSON_CONNECTION */
99710 e = 0;
99711
99712 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->embassy);
99713
99714 if (e) {
99715 log_packet_detailed("'embassy' field error detected");
99716 }
99717
99718#ifdef FREECIV_JSON_CONNECTION
99719 field_addr.name = "gold";
99720#endif /* FREECIV_JSON_CONNECTION */
99721 e = 0;
99722
99723 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
99724
99725 if (e) {
99726 log_packet_detailed("'gold' field error detected");
99727 }
99728
99729#ifdef FREECIV_JSON_CONNECTION
99730 field_addr.name = "infrapoints";
99731#endif /* FREECIV_JSON_CONNECTION */
99732 e = 0;
99733
99734 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
99735
99736 if (e) {
99737 log_packet_detailed("'infrapoints' field error detected");
99738 }
99739
99740#ifdef FREECIV_JSON_CONNECTION
99741 field_addr.name = "tax";
99742#endif /* FREECIV_JSON_CONNECTION */
99743 e = 0;
99744
99745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
99746
99747 if (e) {
99748 log_packet_detailed("'tax' field error detected");
99749 }
99750
99751#ifdef FREECIV_JSON_CONNECTION
99752 field_addr.name = "science";
99753#endif /* FREECIV_JSON_CONNECTION */
99754 e = 0;
99755
99756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
99757
99758 if (e) {
99759 log_packet_detailed("'science' field error detected");
99760 }
99761
99762#ifdef FREECIV_JSON_CONNECTION
99763 field_addr.name = "luxury";
99764#endif /* FREECIV_JSON_CONNECTION */
99765 e = 0;
99766
99767 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
99768
99769 if (e) {
99770 log_packet_detailed("'luxury' field error detected");
99771 }
99772
99773#ifdef FREECIV_JSON_CONNECTION
99774 field_addr.name = "future_tech";
99775#endif /* FREECIV_JSON_CONNECTION */
99776 e = 0;
99777
99778 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
99779
99780 if (e) {
99781 log_packet_detailed("'future_tech' field error detected");
99782 }
99783
99784#ifdef FREECIV_JSON_CONNECTION
99785 field_addr.name = "researching";
99786#endif /* FREECIV_JSON_CONNECTION */
99787 e = 0;
99788
99789 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
99790
99791 if (e) {
99792 log_packet_detailed("'researching' field error detected");
99793 }
99794
99795#ifdef FREECIV_JSON_CONNECTION
99796 field_addr.name = "bulbs_researched";
99797#endif /* FREECIV_JSON_CONNECTION */
99798 e = 0;
99799
99800 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
99801
99802 if (e) {
99803 log_packet_detailed("'bulbs_researched' field error detected");
99804 }
99805
99806#ifdef FREECIV_JSON_CONNECTION
99807 field_addr.name = "inventions";
99808#endif /* FREECIV_JSON_CONNECTION */
99809 e = 0;
99810
99811 {
99812 int i;
99813
99814#ifdef FREECIV_JSON_CONNECTION
99815 /* Create the array. */
99816 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST + 1);
99817
99818 /* Enter array. */
99819 field_addr.sub_location = plocation_elem_new(0);
99820#endif /* FREECIV_JSON_CONNECTION */
99821
99822 for (i = 0; i < A_LAST + 1; i++) {
99823#ifdef FREECIV_JSON_CONNECTION
99824 /* Next array element. */
99825 field_addr.sub_location->number = i;
99826#endif /* FREECIV_JSON_CONNECTION */
99827
99828 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
99829 }
99830
99831#ifdef FREECIV_JSON_CONNECTION
99832 /* Exit array. */
99833 FC_FREE(field_addr.sub_location);
99834#endif /* FREECIV_JSON_CONNECTION */
99835 }
99836
99837 if (e) {
99838 log_packet_detailed("'inventions' field error detected");
99839 }
99840
99841#ifdef FREECIV_JSON_CONNECTION
99842 field_addr.name = "ai";
99843#endif /* FREECIV_JSON_CONNECTION */
99844 e = 0;
99845
99846 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ai);
99847
99848 if (e) {
99849 log_packet_detailed("'ai' field error detected");
99850 }
99851
99852#ifdef FREECIV_JSON_CONNECTION
99853 field_addr.name = "scenario_reserved";
99854#endif /* FREECIV_JSON_CONNECTION */
99855 e = 0;
99856
99857 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_reserved);
99858
99859 if (e) {
99860 log_packet_detailed("'scenario_reserved' field error detected");
99861 }
99862#endif /* FREECIV_DELTA_PROTOCOL */
99863
99865}
99866
99868{
99869 if (!pc->used) {
99870 log_error("WARNING: trying to send data to the closed connection %s",
99872 return -1;
99873 }
99874 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet != nullptr, -1,
99875 "Handler for PACKET_EDIT_PLAYER not installed");
99876 return pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet(pc, packet);
99877}
99878
99879void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
99880{
99881 conn_list_iterate(dest, pconn) {
99884}
99885
99887{
99888 memset(packet, 0, sizeof(*packet));
99889}
99890
99891#define free_packet_edit_player_vision(_packet) (void) 0
99892#define destroy_packet_edit_player_vision free
99893
99894#ifdef FREECIV_DELTA_PROTOCOL
99895#define hash_packet_edit_player_vision_100 hash_const
99896#define cmp_packet_edit_player_vision_100 cmp_const
99898#endif /* FREECIV_DELTA_PROTOCOL */
99899
99901{
99902#define FREE_PACKET_STRUCT(_packet) free_packet_edit_player_vision(_packet)
99904
99905#ifdef FREECIV_JSON_CONNECTION
99906 struct plocation field_addr;
99907 {
99908 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
99911 }
99912#endif /* FREECIV_JSON_CONNECTION */
99913
99914 log_packet_detailed("packet_edit_player_vision_100: got info about ()");
99915
99916#ifdef FREECIV_DELTA_PROTOCOL
99919 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_VISION;
99920
99921 if (nullptr == *hash) {
99923 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
99924 }
99925
99926 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
99927 *real_packet = *old;
99928 } else {
99929 /* packet is already initialized empty */
99930 log_packet_detailed(" no old info");
99931 }
99932
99933#ifdef FREECIV_JSON_CONNECTION
99934 field_addr.name = "fields";
99935#endif /* FREECIV_JSON_CONNECTION */
99936 DIO_BV_GET(&din, &field_addr, fields);
99937
99938 if (BV_ISSET(fields, 0)) {
99939 log_packet_detailed(" got field 'player'");
99940
99941#ifdef FREECIV_JSON_CONNECTION
99942 field_addr.name = "player";
99943#endif /* FREECIV_JSON_CONNECTION */
99944
99945 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
99947 }
99948 }
99949
99950 if (BV_ISSET(fields, 1)) {
99951 log_packet_detailed(" got field 'tile'");
99952
99953#ifdef FREECIV_JSON_CONNECTION
99954 field_addr.name = "tile";
99955#endif /* FREECIV_JSON_CONNECTION */
99956
99957 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
99959 }
99960 }
99961
99962 real_packet->known = BV_ISSET(fields, 2);
99963
99964 if (BV_ISSET(fields, 3)) {
99965 log_packet_detailed(" got field 'size'");
99966
99967#ifdef FREECIV_JSON_CONNECTION
99968 field_addr.name = "size";
99969#endif /* FREECIV_JSON_CONNECTION */
99970
99971 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
99973 }
99974 }
99975
99976 if (nullptr == old) {
99977 old = fc_malloc(sizeof(*old));
99979 *old = *real_packet;
99981 } else {
99982 *old = *real_packet;
99983 }
99984
99985#else /* FREECIV_DELTA_PROTOCOL */
99986#ifdef FREECIV_JSON_CONNECTION
99987 field_addr.name = "player";
99988#endif /* FREECIV_JSON_CONNECTION */
99989
99990 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->player)) {
99992 }
99993
99994#ifdef FREECIV_JSON_CONNECTION
99995 field_addr.name = "tile";
99996#endif /* FREECIV_JSON_CONNECTION */
99997
99998 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
100000 }
100001
100002#ifdef FREECIV_JSON_CONNECTION
100003 field_addr.name = "known";
100004#endif /* FREECIV_JSON_CONNECTION */
100005
100006 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->known)) {
100008 }
100009
100010#ifdef FREECIV_JSON_CONNECTION
100011 field_addr.name = "size";
100012#endif /* FREECIV_JSON_CONNECTION */
100013
100014 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
100016 }
100017#endif /* FREECIV_DELTA_PROTOCOL */
100018
100020#undef FREE_PACKET_STRUCT
100021}
100022
100024{
100025 const struct packet_edit_player_vision *real_packet = packet;
100026 int e;
100028
100029 log_packet_detailed("packet_edit_player_vision_100: sending info about ()");
100030
100031#ifdef FREECIV_DELTA_PROTOCOL
100034 bool differ;
100035 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_VISION;
100036
100037 if (nullptr == *hash) {
100039 nullptr, nullptr, nullptr, destroy_packet_edit_player_vision);
100040 }
100041 BV_CLR_ALL(fields);
100042
100043 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100044 old = fc_malloc(sizeof(*old));
100045 /* temporary bitcopy just to insert correctly */
100046 *old = *real_packet;
100049 }
100050
100051 differ = (old->player != real_packet->player);
100052 if (differ) {
100053 BV_SET(fields, 0);
100054 }
100055
100056 differ = (old->tile != real_packet->tile);
100057 if (differ) {
100058 BV_SET(fields, 1);
100059 }
100060
100061 /* folded into head */
100062 if (real_packet->known) {
100063 BV_SET(fields, 2);
100064 }
100065
100066 differ = (old->size != real_packet->size);
100067 if (differ) {
100068 BV_SET(fields, 3);
100069 }
100070#endif /* FREECIV_DELTA_PROTOCOL */
100071
100072#ifdef FREECIV_JSON_CONNECTION
100073 struct plocation field_addr;
100074 {
100075 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100078 }
100079#endif /* FREECIV_JSON_CONNECTION */
100080
100081#ifdef FREECIV_DELTA_PROTOCOL
100082#ifdef FREECIV_JSON_CONNECTION
100083 field_addr.name = "fields";
100084#endif /* FREECIV_JSON_CONNECTION */
100085 e = 0;
100086 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100087 if (e) {
100088 log_packet_detailed("fields bitvector error detected");
100089 }
100090
100091 if (BV_ISSET(fields, 0)) {
100092 log_packet_detailed(" field 'player' has changed");
100093
100094#ifdef FREECIV_JSON_CONNECTION
100095 field_addr.name = "player";
100096#endif /* FREECIV_JSON_CONNECTION */
100097 e = 0;
100098
100099 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
100100
100101 if (e) {
100102 log_packet_detailed("'player' field error detected");
100103 }
100104 }
100105
100106 if (BV_ISSET(fields, 1)) {
100107 log_packet_detailed(" field 'tile' has changed");
100108
100109#ifdef FREECIV_JSON_CONNECTION
100110 field_addr.name = "tile";
100111#endif /* FREECIV_JSON_CONNECTION */
100112 e = 0;
100113
100114 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100115
100116 if (e) {
100117 log_packet_detailed("'tile' field error detected");
100118 }
100119 }
100120
100121 /* field 2 is folded into the header */
100122
100123 if (BV_ISSET(fields, 3)) {
100124 log_packet_detailed(" field 'size' has changed");
100125
100126#ifdef FREECIV_JSON_CONNECTION
100127 field_addr.name = "size";
100128#endif /* FREECIV_JSON_CONNECTION */
100129 e = 0;
100130
100131 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
100132
100133 if (e) {
100134 log_packet_detailed("'size' field error detected");
100135 }
100136 }
100137
100138 *old = *real_packet;
100139
100140#else /* FREECIV_DELTA_PROTOCOL */
100141#ifdef FREECIV_JSON_CONNECTION
100142 field_addr.name = "player";
100143#endif /* FREECIV_JSON_CONNECTION */
100144 e = 0;
100145
100146 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->player);
100147
100148 if (e) {
100149 log_packet_detailed("'player' field error detected");
100150 }
100151
100152#ifdef FREECIV_JSON_CONNECTION
100153 field_addr.name = "tile";
100154#endif /* FREECIV_JSON_CONNECTION */
100155 e = 0;
100156
100157 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
100158
100159 if (e) {
100160 log_packet_detailed("'tile' field error detected");
100161 }
100162
100163#ifdef FREECIV_JSON_CONNECTION
100164 field_addr.name = "known";
100165#endif /* FREECIV_JSON_CONNECTION */
100166 e = 0;
100167
100168 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->known);
100169
100170 if (e) {
100171 log_packet_detailed("'known' field error detected");
100172 }
100173
100174#ifdef FREECIV_JSON_CONNECTION
100175 field_addr.name = "size";
100176#endif /* FREECIV_JSON_CONNECTION */
100177 e = 0;
100178
100179 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
100180
100181 if (e) {
100182 log_packet_detailed("'size' field error detected");
100183 }
100184#endif /* FREECIV_DELTA_PROTOCOL */
100185
100187}
100188
100190{
100191 if (!pc->used) {
100192 log_error("WARNING: trying to send data to the closed connection %s",
100194 return -1;
100195 }
100196 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet != nullptr, -1,
100197 "Handler for PACKET_EDIT_PLAYER_VISION not installed");
100198 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet(pc, packet);
100199}
100200
100201int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
100202{
100203 struct packet_edit_player_vision packet, *real_packet = &packet;
100204
100206 real_packet->tile = tile;
100207 real_packet->known = known;
100208 real_packet->size = size;
100209
100211}
100212
100213static inline void init_packet_edit_game(struct packet_edit_game *packet)
100214{
100215 memset(packet, 0, sizeof(*packet));
100216}
100217
100218#define free_packet_edit_game(_packet) (void) 0
100219#define destroy_packet_edit_game free
100220
100221#ifdef FREECIV_DELTA_PROTOCOL
100222#define hash_packet_edit_game_100 hash_const
100223#define cmp_packet_edit_game_100 cmp_const
100225#endif /* FREECIV_DELTA_PROTOCOL */
100226
100228{
100229#define FREE_PACKET_STRUCT(_packet) free_packet_edit_game(_packet)
100231
100232#ifdef FREECIV_JSON_CONNECTION
100233 struct plocation field_addr;
100234 {
100235 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100238 }
100239#endif /* FREECIV_JSON_CONNECTION */
100240
100241 log_packet_detailed("packet_edit_game_100: got info about ()");
100242
100243#ifdef FREECIV_DELTA_PROTOCOL
100245 struct packet_edit_game *old;
100246 struct genhash **hash = pc->phs.received + PACKET_EDIT_GAME;
100247
100248 if (nullptr == *hash) {
100250 nullptr, nullptr, nullptr, destroy_packet_edit_game);
100251 }
100252
100253 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100254 *real_packet = *old;
100255 } else {
100256 /* packet is already initialized empty */
100257 log_packet_detailed(" no old info");
100258 }
100259
100260#ifdef FREECIV_JSON_CONNECTION
100261 field_addr.name = "fields";
100262#endif /* FREECIV_JSON_CONNECTION */
100263 DIO_BV_GET(&din, &field_addr, fields);
100264
100265 real_packet->scenario = BV_ISSET(fields, 0);
100266
100267 if (BV_ISSET(fields, 1)) {
100268 log_packet_detailed(" got field 'scenario_name'");
100269
100270#ifdef FREECIV_JSON_CONNECTION
100271 field_addr.name = "scenario_name";
100272#endif /* FREECIV_JSON_CONNECTION */
100273
100274 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
100275 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
100276 }
100277 }
100278
100279 if (BV_ISSET(fields, 2)) {
100280 log_packet_detailed(" got field 'scenario_authors'");
100281
100282#ifdef FREECIV_JSON_CONNECTION
100283 field_addr.name = "scenario_authors";
100284#endif /* FREECIV_JSON_CONNECTION */
100285
100286 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
100288 }
100289 }
100290
100291 real_packet->scenario_random = BV_ISSET(fields, 3);
100292
100293 real_packet->scenario_players = BV_ISSET(fields, 4);
100294
100295 real_packet->startpos_nations = BV_ISSET(fields, 5);
100296
100297 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
100298
100299 real_packet->lake_flooding = BV_ISSET(fields, 7);
100300
100301 real_packet->ruleset_locked = BV_ISSET(fields, 8);
100302
100303 if (nullptr == old) {
100304 old = fc_malloc(sizeof(*old));
100306 *old = *real_packet;
100308 } else {
100309 *old = *real_packet;
100310 }
100311
100312#else /* FREECIV_DELTA_PROTOCOL */
100313#ifdef FREECIV_JSON_CONNECTION
100314 field_addr.name = "scenario";
100315#endif /* FREECIV_JSON_CONNECTION */
100316
100317 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario)) {
100318 RECEIVE_PACKET_FIELD_ERROR(scenario);
100319 }
100320
100321#ifdef FREECIV_JSON_CONNECTION
100322 field_addr.name = "scenario_name";
100323#endif /* FREECIV_JSON_CONNECTION */
100324
100325 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
100326 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
100327 }
100328
100329#ifdef FREECIV_JSON_CONNECTION
100330 field_addr.name = "scenario_authors";
100331#endif /* FREECIV_JSON_CONNECTION */
100332
100333 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
100335 }
100336
100337#ifdef FREECIV_JSON_CONNECTION
100338 field_addr.name = "scenario_random";
100339#endif /* FREECIV_JSON_CONNECTION */
100340
100341 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_random)) {
100342 RECEIVE_PACKET_FIELD_ERROR(scenario_random);
100343 }
100344
100345#ifdef FREECIV_JSON_CONNECTION
100346 field_addr.name = "scenario_players";
100347#endif /* FREECIV_JSON_CONNECTION */
100348
100349 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_players)) {
100350 RECEIVE_PACKET_FIELD_ERROR(scenario_players);
100351 }
100352
100353#ifdef FREECIV_JSON_CONNECTION
100354 field_addr.name = "startpos_nations";
100355#endif /* FREECIV_JSON_CONNECTION */
100356
100357 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
100358 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
100359 }
100360
100361#ifdef FREECIV_JSON_CONNECTION
100362 field_addr.name = "prevent_new_cities";
100363#endif /* FREECIV_JSON_CONNECTION */
100364
100365 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
100366 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
100367 }
100368
100369#ifdef FREECIV_JSON_CONNECTION
100370 field_addr.name = "lake_flooding";
100371#endif /* FREECIV_JSON_CONNECTION */
100372
100373 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
100374 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
100375 }
100376
100377#ifdef FREECIV_JSON_CONNECTION
100378 field_addr.name = "ruleset_locked";
100379#endif /* FREECIV_JSON_CONNECTION */
100380
100381 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
100382 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
100383 }
100384#endif /* FREECIV_DELTA_PROTOCOL */
100385
100387#undef FREE_PACKET_STRUCT
100388}
100389
100390static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
100391{
100392 const struct packet_edit_game *real_packet = packet;
100393 int e;
100395
100396 log_packet_detailed("packet_edit_game_100: sending info about ()");
100397
100398#ifdef FREECIV_DELTA_PROTOCOL
100400 struct packet_edit_game *old;
100401 bool differ;
100402 struct genhash **hash = pc->phs.sent + PACKET_EDIT_GAME;
100403
100404 if (nullptr == *hash) {
100406 nullptr, nullptr, nullptr, destroy_packet_edit_game);
100407 }
100408 BV_CLR_ALL(fields);
100409
100410 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100411 old = fc_malloc(sizeof(*old));
100412 /* temporary bitcopy just to insert correctly */
100413 *old = *real_packet;
100416 }
100417
100418 /* folded into head */
100419 if (real_packet->scenario) {
100420 BV_SET(fields, 0);
100421 }
100422
100423 differ = (strcmp(old->scenario_name, real_packet->scenario_name) != 0);
100424 if (differ) {
100425 BV_SET(fields, 1);
100426 }
100427
100428 differ = (strcmp(old->scenario_authors, real_packet->scenario_authors) != 0);
100429 if (differ) {
100430 BV_SET(fields, 2);
100431 }
100432
100433 /* folded into head */
100434 if (real_packet->scenario_random) {
100435 BV_SET(fields, 3);
100436 }
100437
100438 /* folded into head */
100439 if (real_packet->scenario_players) {
100440 BV_SET(fields, 4);
100441 }
100442
100443 /* folded into head */
100444 if (real_packet->startpos_nations) {
100445 BV_SET(fields, 5);
100446 }
100447
100448 /* folded into head */
100449 if (real_packet->prevent_new_cities) {
100450 BV_SET(fields, 6);
100451 }
100452
100453 /* folded into head */
100454 if (real_packet->lake_flooding) {
100455 BV_SET(fields, 7);
100456 }
100457
100458 /* folded into head */
100459 if (real_packet->ruleset_locked) {
100460 BV_SET(fields, 8);
100461 }
100462#endif /* FREECIV_DELTA_PROTOCOL */
100463
100464#ifdef FREECIV_JSON_CONNECTION
100465 struct plocation field_addr;
100466 {
100467 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100470 }
100471#endif /* FREECIV_JSON_CONNECTION */
100472
100473#ifdef FREECIV_DELTA_PROTOCOL
100474#ifdef FREECIV_JSON_CONNECTION
100475 field_addr.name = "fields";
100476#endif /* FREECIV_JSON_CONNECTION */
100477 e = 0;
100478 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100479 if (e) {
100480 log_packet_detailed("fields bitvector error detected");
100481 }
100482
100483 /* field 0 is folded into the header */
100484
100485 if (BV_ISSET(fields, 1)) {
100486 log_packet_detailed(" field 'scenario_name' has changed");
100487
100488#ifdef FREECIV_JSON_CONNECTION
100489 field_addr.name = "scenario_name";
100490#endif /* FREECIV_JSON_CONNECTION */
100491 e = 0;
100492
100493 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
100494
100495 if (e) {
100496 log_packet_detailed("'scenario_name' field error detected");
100497 }
100498 }
100499
100500 if (BV_ISSET(fields, 2)) {
100501 log_packet_detailed(" field 'scenario_authors' has changed");
100502
100503#ifdef FREECIV_JSON_CONNECTION
100504 field_addr.name = "scenario_authors";
100505#endif /* FREECIV_JSON_CONNECTION */
100506 e = 0;
100507
100508 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
100509
100510 if (e) {
100511 log_packet_detailed("'scenario_authors' field error detected");
100512 }
100513 }
100514
100515 /* field 3 is folded into the header */
100516
100517 /* field 4 is folded into the header */
100518
100519 /* field 5 is folded into the header */
100520
100521 /* field 6 is folded into the header */
100522
100523 /* field 7 is folded into the header */
100524
100525 /* field 8 is folded into the header */
100526
100527 *old = *real_packet;
100528
100529#else /* FREECIV_DELTA_PROTOCOL */
100530#ifdef FREECIV_JSON_CONNECTION
100531 field_addr.name = "scenario";
100532#endif /* FREECIV_JSON_CONNECTION */
100533 e = 0;
100534
100535 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario);
100536
100537 if (e) {
100538 log_packet_detailed("'scenario' field error detected");
100539 }
100540
100541#ifdef FREECIV_JSON_CONNECTION
100542 field_addr.name = "scenario_name";
100543#endif /* FREECIV_JSON_CONNECTION */
100544 e = 0;
100545
100546 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
100547
100548 if (e) {
100549 log_packet_detailed("'scenario_name' field error detected");
100550 }
100551
100552#ifdef FREECIV_JSON_CONNECTION
100553 field_addr.name = "scenario_authors";
100554#endif /* FREECIV_JSON_CONNECTION */
100555 e = 0;
100556
100557 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
100558
100559 if (e) {
100560 log_packet_detailed("'scenario_authors' field error detected");
100561 }
100562
100563#ifdef FREECIV_JSON_CONNECTION
100564 field_addr.name = "scenario_random";
100565#endif /* FREECIV_JSON_CONNECTION */
100566 e = 0;
100567
100568 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_random);
100569
100570 if (e) {
100571 log_packet_detailed("'scenario_random' field error detected");
100572 }
100573
100574#ifdef FREECIV_JSON_CONNECTION
100575 field_addr.name = "scenario_players";
100576#endif /* FREECIV_JSON_CONNECTION */
100577 e = 0;
100578
100579 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_players);
100580
100581 if (e) {
100582 log_packet_detailed("'scenario_players' field error detected");
100583 }
100584
100585#ifdef FREECIV_JSON_CONNECTION
100586 field_addr.name = "startpos_nations";
100587#endif /* FREECIV_JSON_CONNECTION */
100588 e = 0;
100589
100590 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
100591
100592 if (e) {
100593 log_packet_detailed("'startpos_nations' field error detected");
100594 }
100595
100596#ifdef FREECIV_JSON_CONNECTION
100597 field_addr.name = "prevent_new_cities";
100598#endif /* FREECIV_JSON_CONNECTION */
100599 e = 0;
100600
100601 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
100602
100603 if (e) {
100604 log_packet_detailed("'prevent_new_cities' field error detected");
100605 }
100606
100607#ifdef FREECIV_JSON_CONNECTION
100608 field_addr.name = "lake_flooding";
100609#endif /* FREECIV_JSON_CONNECTION */
100610 e = 0;
100611
100612 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
100613
100614 if (e) {
100615 log_packet_detailed("'lake_flooding' field error detected");
100616 }
100617
100618#ifdef FREECIV_JSON_CONNECTION
100619 field_addr.name = "ruleset_locked";
100620#endif /* FREECIV_JSON_CONNECTION */
100621 e = 0;
100622
100623 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
100624
100625 if (e) {
100626 log_packet_detailed("'ruleset_locked' field error detected");
100627 }
100628#endif /* FREECIV_DELTA_PROTOCOL */
100629
100631}
100632
100633int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
100634{
100635 if (!pc->used) {
100636 log_error("WARNING: trying to send data to the closed connection %s",
100638 return -1;
100639 }
100640 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_GAME].packet != nullptr, -1,
100641 "Handler for PACKET_EDIT_GAME not installed");
100642 return pc->phs.handlers->send[PACKET_EDIT_GAME].packet(pc, packet);
100643}
100644
100646{
100647 memset(packet, 0, sizeof(*packet));
100648}
100649
100650#define free_packet_edit_scenario_desc(_packet) (void) 0
100651#define destroy_packet_edit_scenario_desc free
100652
100653#ifdef FREECIV_DELTA_PROTOCOL
100654#define hash_packet_edit_scenario_desc_100 hash_const
100655#define cmp_packet_edit_scenario_desc_100 cmp_const
100657#endif /* FREECIV_DELTA_PROTOCOL */
100658
100660{
100661#define FREE_PACKET_STRUCT(_packet) free_packet_edit_scenario_desc(_packet)
100663
100664#ifdef FREECIV_JSON_CONNECTION
100665 struct plocation field_addr;
100666 {
100667 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100670 }
100671#endif /* FREECIV_JSON_CONNECTION */
100672
100673 log_packet_detailed("packet_edit_scenario_desc_100: got info about ()");
100674
100675#ifdef FREECIV_DELTA_PROTOCOL
100678 struct genhash **hash = pc->phs.received + PACKET_EDIT_SCENARIO_DESC;
100679
100680 if (nullptr == *hash) {
100682 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
100683 }
100684
100685 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100686 *real_packet = *old;
100687 } else {
100688 /* packet is already initialized empty */
100689 log_packet_detailed(" no old info");
100690 }
100691
100692#ifdef FREECIV_JSON_CONNECTION
100693 field_addr.name = "fields";
100694#endif /* FREECIV_JSON_CONNECTION */
100695 DIO_BV_GET(&din, &field_addr, fields);
100696
100697 if (BV_ISSET(fields, 0)) {
100698 log_packet_detailed(" got field 'scenario_desc'");
100699
100700#ifdef FREECIV_JSON_CONNECTION
100701 field_addr.name = "scenario_desc";
100702#endif /* FREECIV_JSON_CONNECTION */
100703
100704 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
100705 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
100706 }
100707 }
100708
100709 if (nullptr == old) {
100710 old = fc_malloc(sizeof(*old));
100712 *old = *real_packet;
100714 } else {
100715 *old = *real_packet;
100716 }
100717
100718#else /* FREECIV_DELTA_PROTOCOL */
100719#ifdef FREECIV_JSON_CONNECTION
100720 field_addr.name = "scenario_desc";
100721#endif /* FREECIV_JSON_CONNECTION */
100722
100723 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
100724 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
100725 }
100726#endif /* FREECIV_DELTA_PROTOCOL */
100727
100729#undef FREE_PACKET_STRUCT
100730}
100731
100733{
100734 const struct packet_edit_scenario_desc *real_packet = packet;
100735 int e;
100737
100738 log_packet_detailed("packet_edit_scenario_desc_100: sending info about ()");
100739
100740#ifdef FREECIV_DELTA_PROTOCOL
100743 bool differ;
100744 struct genhash **hash = pc->phs.sent + PACKET_EDIT_SCENARIO_DESC;
100745
100746 if (nullptr == *hash) {
100748 nullptr, nullptr, nullptr, destroy_packet_edit_scenario_desc);
100749 }
100750 BV_CLR_ALL(fields);
100751
100752 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100753 old = fc_malloc(sizeof(*old));
100754 /* temporary bitcopy just to insert correctly */
100755 *old = *real_packet;
100758 }
100759
100760 differ = (strcmp(old->scenario_desc, real_packet->scenario_desc) != 0);
100761 if (differ) {
100762 BV_SET(fields, 0);
100763 }
100764#endif /* FREECIV_DELTA_PROTOCOL */
100765
100766#ifdef FREECIV_JSON_CONNECTION
100767 struct plocation field_addr;
100768 {
100769 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100772 }
100773#endif /* FREECIV_JSON_CONNECTION */
100774
100775#ifdef FREECIV_DELTA_PROTOCOL
100776#ifdef FREECIV_JSON_CONNECTION
100777 field_addr.name = "fields";
100778#endif /* FREECIV_JSON_CONNECTION */
100779 e = 0;
100780 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100781 if (e) {
100782 log_packet_detailed("fields bitvector error detected");
100783 }
100784
100785 if (BV_ISSET(fields, 0)) {
100786 log_packet_detailed(" field 'scenario_desc' has changed");
100787
100788#ifdef FREECIV_JSON_CONNECTION
100789 field_addr.name = "scenario_desc";
100790#endif /* FREECIV_JSON_CONNECTION */
100791 e = 0;
100792
100793 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
100794
100795 if (e) {
100796 log_packet_detailed("'scenario_desc' field error detected");
100797 }
100798 }
100799
100800 *old = *real_packet;
100801
100802#else /* FREECIV_DELTA_PROTOCOL */
100803#ifdef FREECIV_JSON_CONNECTION
100804 field_addr.name = "scenario_desc";
100805#endif /* FREECIV_JSON_CONNECTION */
100806 e = 0;
100807
100808 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
100809
100810 if (e) {
100811 log_packet_detailed("'scenario_desc' field error detected");
100812 }
100813#endif /* FREECIV_DELTA_PROTOCOL */
100814
100816}
100817
100819{
100820 if (!pc->used) {
100821 log_error("WARNING: trying to send data to the closed connection %s",
100823 return -1;
100824 }
100825 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet != nullptr, -1,
100826 "Handler for PACKET_EDIT_SCENARIO_DESC not installed");
100827 return pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet(pc, packet);
100828}
100829
100831{
100832 memset(packet, 0, sizeof(*packet));
100833}
100834
100835#define free_packet_edit_object_created(_packet) (void) 0
100836#define destroy_packet_edit_object_created free
100837
100838#ifdef FREECIV_DELTA_PROTOCOL
100839#define hash_packet_edit_object_created_100 hash_const
100840#define cmp_packet_edit_object_created_100 cmp_const
100842#endif /* FREECIV_DELTA_PROTOCOL */
100843
100845{
100846#define FREE_PACKET_STRUCT(_packet) free_packet_edit_object_created(_packet)
100848
100849#ifdef FREECIV_JSON_CONNECTION
100850 struct plocation field_addr;
100851 {
100852 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100855 }
100856#endif /* FREECIV_JSON_CONNECTION */
100857
100858 log_packet_detailed("packet_edit_object_created_100: got info about ()");
100859
100860#ifdef FREECIV_DELTA_PROTOCOL
100863 struct genhash **hash = pc->phs.received + PACKET_EDIT_OBJECT_CREATED;
100864
100865 if (nullptr == *hash) {
100867 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
100868 }
100869
100870 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
100871 *real_packet = *old;
100872 } else {
100873 /* packet is already initialized empty */
100874 log_packet_detailed(" no old info");
100875 }
100876
100877#ifdef FREECIV_JSON_CONNECTION
100878 field_addr.name = "fields";
100879#endif /* FREECIV_JSON_CONNECTION */
100880 DIO_BV_GET(&din, &field_addr, fields);
100881
100882 if (BV_ISSET(fields, 0)) {
100883 log_packet_detailed(" got field 'tag'");
100884
100885#ifdef FREECIV_JSON_CONNECTION
100886 field_addr.name = "tag";
100887#endif /* FREECIV_JSON_CONNECTION */
100888
100889 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
100891 }
100892 }
100893
100894 if (BV_ISSET(fields, 1)) {
100895 log_packet_detailed(" got field 'id'");
100896
100897#ifdef FREECIV_JSON_CONNECTION
100898 field_addr.name = "id";
100899#endif /* FREECIV_JSON_CONNECTION */
100900
100901 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
100903 }
100904 }
100905
100906 if (nullptr == old) {
100907 old = fc_malloc(sizeof(*old));
100909 *old = *real_packet;
100911 } else {
100912 *old = *real_packet;
100913 }
100914
100915#else /* FREECIV_DELTA_PROTOCOL */
100916#ifdef FREECIV_JSON_CONNECTION
100917 field_addr.name = "tag";
100918#endif /* FREECIV_JSON_CONNECTION */
100919
100920 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
100922 }
100923
100924#ifdef FREECIV_JSON_CONNECTION
100925 field_addr.name = "id";
100926#endif /* FREECIV_JSON_CONNECTION */
100927
100928 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
100930 }
100931#endif /* FREECIV_DELTA_PROTOCOL */
100932
100934#undef FREE_PACKET_STRUCT
100935}
100936
100938{
100939 const struct packet_edit_object_created *real_packet = packet;
100940 int e;
100942
100943 log_packet_detailed("packet_edit_object_created_100: sending info about ()");
100944
100945#ifdef FREECIV_DELTA_PROTOCOL
100948 bool differ;
100949 struct genhash **hash = pc->phs.sent + PACKET_EDIT_OBJECT_CREATED;
100950
100951 if (nullptr == *hash) {
100953 nullptr, nullptr, nullptr, destroy_packet_edit_object_created);
100954 }
100955 BV_CLR_ALL(fields);
100956
100957 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
100958 old = fc_malloc(sizeof(*old));
100959 /* temporary bitcopy just to insert correctly */
100960 *old = *real_packet;
100963 }
100964
100965 differ = (old->tag != real_packet->tag);
100966 if (differ) {
100967 BV_SET(fields, 0);
100968 }
100969
100970 differ = (old->id != real_packet->id);
100971 if (differ) {
100972 BV_SET(fields, 1);
100973 }
100974#endif /* FREECIV_DELTA_PROTOCOL */
100975
100976#ifdef FREECIV_JSON_CONNECTION
100977 struct plocation field_addr;
100978 {
100979 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
100982 }
100983#endif /* FREECIV_JSON_CONNECTION */
100984
100985#ifdef FREECIV_DELTA_PROTOCOL
100986#ifdef FREECIV_JSON_CONNECTION
100987 field_addr.name = "fields";
100988#endif /* FREECIV_JSON_CONNECTION */
100989 e = 0;
100990 e |= DIO_BV_PUT(&dout, &field_addr, fields);
100991 if (e) {
100992 log_packet_detailed("fields bitvector error detected");
100993 }
100994
100995 if (BV_ISSET(fields, 0)) {
100996 log_packet_detailed(" field 'tag' has changed");
100997
100998#ifdef FREECIV_JSON_CONNECTION
100999 field_addr.name = "tag";
101000#endif /* FREECIV_JSON_CONNECTION */
101001 e = 0;
101002
101003 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
101004
101005 if (e) {
101006 log_packet_detailed("'tag' field error detected");
101007 }
101008 }
101009
101010 if (BV_ISSET(fields, 1)) {
101011 log_packet_detailed(" field 'id' has changed");
101012
101013#ifdef FREECIV_JSON_CONNECTION
101014 field_addr.name = "id";
101015#endif /* FREECIV_JSON_CONNECTION */
101016 e = 0;
101017
101018 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
101019
101020 if (e) {
101021 log_packet_detailed("'id' field error detected");
101022 }
101023 }
101024
101025 *old = *real_packet;
101026
101027#else /* FREECIV_DELTA_PROTOCOL */
101028#ifdef FREECIV_JSON_CONNECTION
101029 field_addr.name = "tag";
101030#endif /* FREECIV_JSON_CONNECTION */
101031 e = 0;
101032
101033 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
101034
101035 if (e) {
101036 log_packet_detailed("'tag' field error detected");
101037 }
101038
101039#ifdef FREECIV_JSON_CONNECTION
101040 field_addr.name = "id";
101041#endif /* FREECIV_JSON_CONNECTION */
101042 e = 0;
101043
101044 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
101045
101046 if (e) {
101047 log_packet_detailed("'id' field error detected");
101048 }
101049#endif /* FREECIV_DELTA_PROTOCOL */
101050
101052}
101053
101055{
101056 if (!pc->used) {
101057 log_error("WARNING: trying to send data to the closed connection %s",
101059 return -1;
101060 }
101061 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet != nullptr, -1,
101062 "Handler for PACKET_EDIT_OBJECT_CREATED not installed");
101063 return pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet(pc, packet);
101064}
101065
101067{
101068 struct packet_edit_object_created packet, *real_packet = &packet;
101069
101070 real_packet->tag = tag;
101071 real_packet->id = id;
101072
101074}
101075
101076static inline void init_packet_play_music(struct packet_play_music *packet)
101077{
101078 memset(packet, 0, sizeof(*packet));
101079}
101080
101081#define free_packet_play_music(_packet) (void) 0
101082#define destroy_packet_play_music free
101083
101084#ifdef FREECIV_DELTA_PROTOCOL
101085#define hash_packet_play_music_100 hash_const
101086#define cmp_packet_play_music_100 cmp_const
101088#endif /* FREECIV_DELTA_PROTOCOL */
101089
101091{
101092#define FREE_PACKET_STRUCT(_packet) free_packet_play_music(_packet)
101094
101095#ifdef FREECIV_JSON_CONNECTION
101096 struct plocation field_addr;
101097 {
101098 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101101 }
101102#endif /* FREECIV_JSON_CONNECTION */
101103
101104 log_packet_detailed("packet_play_music_100: got info about ()");
101105
101106#ifdef FREECIV_DELTA_PROTOCOL
101108 struct packet_play_music *old;
101109 struct genhash **hash = pc->phs.received + PACKET_PLAY_MUSIC;
101110
101111 if (nullptr == *hash) {
101113 nullptr, nullptr, nullptr, destroy_packet_play_music);
101114 }
101115
101116 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101117 *real_packet = *old;
101118 } else {
101119 /* packet is already initialized empty */
101120 log_packet_detailed(" no old info");
101121 }
101122
101123#ifdef FREECIV_JSON_CONNECTION
101124 field_addr.name = "fields";
101125#endif /* FREECIV_JSON_CONNECTION */
101126 DIO_BV_GET(&din, &field_addr, fields);
101127
101128 if (BV_ISSET(fields, 0)) {
101129 log_packet_detailed(" got field 'tag'");
101130
101131#ifdef FREECIV_JSON_CONNECTION
101132 field_addr.name = "tag";
101133#endif /* FREECIV_JSON_CONNECTION */
101134
101135 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101137 }
101138 }
101139
101140 if (nullptr == old) {
101141 old = fc_malloc(sizeof(*old));
101143 *old = *real_packet;
101145 } else {
101146 *old = *real_packet;
101147 }
101148
101149#else /* FREECIV_DELTA_PROTOCOL */
101150#ifdef FREECIV_JSON_CONNECTION
101151 field_addr.name = "tag";
101152#endif /* FREECIV_JSON_CONNECTION */
101153
101154 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101156 }
101157#endif /* FREECIV_DELTA_PROTOCOL */
101158
101160#undef FREE_PACKET_STRUCT
101161}
101162
101163static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
101164{
101165 const struct packet_play_music *real_packet = packet;
101166 int e;
101168
101169 log_packet_detailed("packet_play_music_100: sending info about ()");
101170
101171#ifdef FREECIV_DELTA_PROTOCOL
101173 struct packet_play_music *old;
101174 bool differ;
101175 struct genhash **hash = pc->phs.sent + PACKET_PLAY_MUSIC;
101176
101177 if (nullptr == *hash) {
101179 nullptr, nullptr, nullptr, destroy_packet_play_music);
101180 }
101181 BV_CLR_ALL(fields);
101182
101183 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101184 old = fc_malloc(sizeof(*old));
101185 /* temporary bitcopy just to insert correctly */
101186 *old = *real_packet;
101189 }
101190
101191 differ = (strcmp(old->tag, real_packet->tag) != 0);
101192 if (differ) {
101193 BV_SET(fields, 0);
101194 }
101195#endif /* FREECIV_DELTA_PROTOCOL */
101196
101197#ifdef FREECIV_JSON_CONNECTION
101198 struct plocation field_addr;
101199 {
101200 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101203 }
101204#endif /* FREECIV_JSON_CONNECTION */
101205
101206#ifdef FREECIV_DELTA_PROTOCOL
101207#ifdef FREECIV_JSON_CONNECTION
101208 field_addr.name = "fields";
101209#endif /* FREECIV_JSON_CONNECTION */
101210 e = 0;
101211 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101212 if (e) {
101213 log_packet_detailed("fields bitvector error detected");
101214 }
101215
101216 if (BV_ISSET(fields, 0)) {
101217 log_packet_detailed(" field 'tag' has changed");
101218
101219#ifdef FREECIV_JSON_CONNECTION
101220 field_addr.name = "tag";
101221#endif /* FREECIV_JSON_CONNECTION */
101222 e = 0;
101223
101224 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101225
101226 if (e) {
101227 log_packet_detailed("'tag' field error detected");
101228 }
101229 }
101230
101231 *old = *real_packet;
101232
101233#else /* FREECIV_DELTA_PROTOCOL */
101234#ifdef FREECIV_JSON_CONNECTION
101235 field_addr.name = "tag";
101236#endif /* FREECIV_JSON_CONNECTION */
101237 e = 0;
101238
101239 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101240
101241 if (e) {
101242 log_packet_detailed("'tag' field error detected");
101243 }
101244#endif /* FREECIV_DELTA_PROTOCOL */
101245
101247}
101248
101249int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
101250{
101251 if (!pc->used) {
101252 log_error("WARNING: trying to send data to the closed connection %s",
101254 return -1;
101255 }
101256 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet != nullptr, -1,
101257 "Handler for PACKET_PLAY_MUSIC not installed");
101258 return pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet(pc, packet);
101259}
101260
101261void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
101262{
101263 conn_list_iterate(dest, pconn) {
101264 send_packet_play_music(pconn, packet);
101266}
101267
101268static inline void init_packet_popup_image(struct packet_popup_image *packet)
101269{
101270 memset(packet, 0, sizeof(*packet));
101271}
101272
101273#define free_packet_popup_image(_packet) (void) 0
101274#define destroy_packet_popup_image free
101275
101276#ifdef FREECIV_DELTA_PROTOCOL
101277#define hash_packet_popup_image_100 hash_const
101278#define cmp_packet_popup_image_100 cmp_const
101280#endif /* FREECIV_DELTA_PROTOCOL */
101281
101283{
101284#define FREE_PACKET_STRUCT(_packet) free_packet_popup_image(_packet)
101286
101287#ifdef FREECIV_JSON_CONNECTION
101288 struct plocation field_addr;
101289 {
101290 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101293 }
101294#endif /* FREECIV_JSON_CONNECTION */
101295
101296 log_packet_detailed("packet_popup_image_100: got info about ()");
101297
101298#ifdef FREECIV_DELTA_PROTOCOL
101300 struct packet_popup_image *old;
101301 struct genhash **hash = pc->phs.received + PACKET_POPUP_IMAGE;
101302
101303 if (nullptr == *hash) {
101305 nullptr, nullptr, nullptr, destroy_packet_popup_image);
101306 }
101307
101308 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101309 *real_packet = *old;
101310 } else {
101311 /* packet is already initialized empty */
101312 log_packet_detailed(" no old info");
101313 }
101314
101315#ifdef FREECIV_JSON_CONNECTION
101316 field_addr.name = "fields";
101317#endif /* FREECIV_JSON_CONNECTION */
101318 DIO_BV_GET(&din, &field_addr, fields);
101319
101320 if (BV_ISSET(fields, 0)) {
101321 log_packet_detailed(" got field 'tag'");
101322
101323#ifdef FREECIV_JSON_CONNECTION
101324 field_addr.name = "tag";
101325#endif /* FREECIV_JSON_CONNECTION */
101326
101327 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101329 }
101330 }
101331
101332 if (nullptr == old) {
101333 old = fc_malloc(sizeof(*old));
101335 *old = *real_packet;
101337 } else {
101338 *old = *real_packet;
101339 }
101340
101341#else /* FREECIV_DELTA_PROTOCOL */
101342#ifdef FREECIV_JSON_CONNECTION
101343 field_addr.name = "tag";
101344#endif /* FREECIV_JSON_CONNECTION */
101345
101346 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
101348 }
101349#endif /* FREECIV_DELTA_PROTOCOL */
101350
101352#undef FREE_PACKET_STRUCT
101353}
101354
101355static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
101356{
101357 const struct packet_popup_image *real_packet = packet;
101358 int e;
101360
101361 log_packet_detailed("packet_popup_image_100: sending info about ()");
101362
101363#ifdef FREECIV_DELTA_PROTOCOL
101365 struct packet_popup_image *old;
101366 bool differ;
101367 struct genhash **hash = pc->phs.sent + PACKET_POPUP_IMAGE;
101368
101369 if (nullptr == *hash) {
101371 nullptr, nullptr, nullptr, destroy_packet_popup_image);
101372 }
101373 BV_CLR_ALL(fields);
101374
101375 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101376 old = fc_malloc(sizeof(*old));
101377 /* temporary bitcopy just to insert correctly */
101378 *old = *real_packet;
101381 }
101382
101383 differ = (strcmp(old->tag, real_packet->tag) != 0);
101384 if (differ) {
101385 BV_SET(fields, 0);
101386 }
101387#endif /* FREECIV_DELTA_PROTOCOL */
101388
101389#ifdef FREECIV_JSON_CONNECTION
101390 struct plocation field_addr;
101391 {
101392 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101395 }
101396#endif /* FREECIV_JSON_CONNECTION */
101397
101398#ifdef FREECIV_DELTA_PROTOCOL
101399#ifdef FREECIV_JSON_CONNECTION
101400 field_addr.name = "fields";
101401#endif /* FREECIV_JSON_CONNECTION */
101402 e = 0;
101403 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101404 if (e) {
101405 log_packet_detailed("fields bitvector error detected");
101406 }
101407
101408 if (BV_ISSET(fields, 0)) {
101409 log_packet_detailed(" field 'tag' has changed");
101410
101411#ifdef FREECIV_JSON_CONNECTION
101412 field_addr.name = "tag";
101413#endif /* FREECIV_JSON_CONNECTION */
101414 e = 0;
101415
101416 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101417
101418 if (e) {
101419 log_packet_detailed("'tag' field error detected");
101420 }
101421 }
101422
101423 *old = *real_packet;
101424
101425#else /* FREECIV_DELTA_PROTOCOL */
101426#ifdef FREECIV_JSON_CONNECTION
101427 field_addr.name = "tag";
101428#endif /* FREECIV_JSON_CONNECTION */
101429 e = 0;
101430
101431 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
101432
101433 if (e) {
101434 log_packet_detailed("'tag' field error detected");
101435 }
101436#endif /* FREECIV_DELTA_PROTOCOL */
101437
101439}
101440
101442{
101443 if (!pc->used) {
101444 log_error("WARNING: trying to send data to the closed connection %s",
101446 return -1;
101447 }
101448 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet != nullptr, -1,
101449 "Handler for PACKET_POPUP_IMAGE not installed");
101450 return pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet(pc, packet);
101451}
101452
101453void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
101454{
101455 conn_list_iterate(dest, pconn) {
101458}
101459
101460static inline void init_packet_sync_serial(struct packet_sync_serial *packet)
101461{
101462 memset(packet, 0, sizeof(*packet));
101463}
101464
101465#define free_packet_sync_serial(_packet) (void) 0
101466#define destroy_packet_sync_serial free
101467
101468#ifdef FREECIV_DELTA_PROTOCOL
101469#define hash_packet_sync_serial_100 hash_const
101470#define cmp_packet_sync_serial_100 cmp_const
101472#endif /* FREECIV_DELTA_PROTOCOL */
101473
101475{
101476#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial(_packet)
101478
101479#ifdef FREECIV_JSON_CONNECTION
101480 struct plocation field_addr;
101481 {
101482 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101485 }
101486#endif /* FREECIV_JSON_CONNECTION */
101487
101488 log_packet_detailed("packet_sync_serial_100: got info about ()");
101489
101490#ifdef FREECIV_DELTA_PROTOCOL
101492 struct packet_sync_serial *old;
101493 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL;
101494
101495 if (nullptr == *hash) {
101497 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
101498 }
101499
101500 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101501 *real_packet = *old;
101502 } else {
101503 /* packet is already initialized empty */
101504 log_packet_detailed(" no old info");
101505 }
101506
101507#ifdef FREECIV_JSON_CONNECTION
101508 field_addr.name = "fields";
101509#endif /* FREECIV_JSON_CONNECTION */
101510 DIO_BV_GET(&din, &field_addr, fields);
101511
101512 if (BV_ISSET(fields, 0)) {
101513 log_packet_detailed(" got field 'serial'");
101514
101515#ifdef FREECIV_JSON_CONNECTION
101516 field_addr.name = "serial";
101517#endif /* FREECIV_JSON_CONNECTION */
101518
101519 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101521 }
101522 }
101523
101524 if (nullptr == old) {
101525 old = fc_malloc(sizeof(*old));
101527 *old = *real_packet;
101529 } else {
101530 *old = *real_packet;
101531 }
101532
101533#else /* FREECIV_DELTA_PROTOCOL */
101534#ifdef FREECIV_JSON_CONNECTION
101535 field_addr.name = "serial";
101536#endif /* FREECIV_JSON_CONNECTION */
101537
101538 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101540 }
101541#endif /* FREECIV_DELTA_PROTOCOL */
101542
101544#undef FREE_PACKET_STRUCT
101545}
101546
101547static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
101548{
101549 const struct packet_sync_serial *real_packet = packet;
101550 int e;
101552
101553 log_packet_detailed("packet_sync_serial_100: sending info about ()");
101554
101555#ifdef FREECIV_DELTA_PROTOCOL
101557 struct packet_sync_serial *old;
101558 bool differ;
101559 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL;
101560
101561 if (nullptr == *hash) {
101563 nullptr, nullptr, nullptr, destroy_packet_sync_serial);
101564 }
101565 BV_CLR_ALL(fields);
101566
101567 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101568 old = fc_malloc(sizeof(*old));
101569 /* temporary bitcopy just to insert correctly */
101570 *old = *real_packet;
101573 }
101574
101575 differ = (old->serial != real_packet->serial);
101576 if (differ) {
101577 BV_SET(fields, 0);
101578 }
101579#endif /* FREECIV_DELTA_PROTOCOL */
101580
101581#ifdef FREECIV_JSON_CONNECTION
101582 struct plocation field_addr;
101583 {
101584 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101587 }
101588#endif /* FREECIV_JSON_CONNECTION */
101589
101590#ifdef FREECIV_DELTA_PROTOCOL
101591#ifdef FREECIV_JSON_CONNECTION
101592 field_addr.name = "fields";
101593#endif /* FREECIV_JSON_CONNECTION */
101594 e = 0;
101595 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101596 if (e) {
101597 log_packet_detailed("fields bitvector error detected");
101598 }
101599
101600 if (BV_ISSET(fields, 0)) {
101601 log_packet_detailed(" field 'serial' has changed");
101602
101603#ifdef FREECIV_JSON_CONNECTION
101604 field_addr.name = "serial";
101605#endif /* FREECIV_JSON_CONNECTION */
101606 e = 0;
101607
101608 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101609
101610 if (e) {
101611 log_packet_detailed("'serial' field error detected");
101612 }
101613 }
101614
101615 *old = *real_packet;
101616
101617#else /* FREECIV_DELTA_PROTOCOL */
101618#ifdef FREECIV_JSON_CONNECTION
101619 field_addr.name = "serial";
101620#endif /* FREECIV_JSON_CONNECTION */
101621 e = 0;
101622
101623 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101624
101625 if (e) {
101626 log_packet_detailed("'serial' field error detected");
101627 }
101628#endif /* FREECIV_DELTA_PROTOCOL */
101629
101631}
101632
101634{
101635 if (!pc->used) {
101636 log_error("WARNING: trying to send data to the closed connection %s",
101638 return -1;
101639 }
101640 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet != nullptr, -1,
101641 "Handler for PACKET_SYNC_SERIAL not installed");
101642 return pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet(pc, packet);
101643}
101644
101646{
101647 struct packet_sync_serial packet, *real_packet = &packet;
101648
101650
101652}
101653
101655{
101656 memset(packet, 0, sizeof(*packet));
101657}
101658
101659#define free_packet_sync_serial_reply(_packet) (void) 0
101660#define destroy_packet_sync_serial_reply free
101661
101662#ifdef FREECIV_DELTA_PROTOCOL
101663#define hash_packet_sync_serial_reply_100 hash_const
101664#define cmp_packet_sync_serial_reply_100 cmp_const
101666#endif /* FREECIV_DELTA_PROTOCOL */
101667
101669{
101670#define FREE_PACKET_STRUCT(_packet) free_packet_sync_serial_reply(_packet)
101672
101673#ifdef FREECIV_JSON_CONNECTION
101674 struct plocation field_addr;
101675 {
101676 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101679 }
101680#endif /* FREECIV_JSON_CONNECTION */
101681
101682 log_packet_detailed("packet_sync_serial_reply_100: got info about ()");
101683
101684#ifdef FREECIV_DELTA_PROTOCOL
101687 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL_REPLY;
101688
101689 if (nullptr == *hash) {
101691 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
101692 }
101693
101694 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101695 *real_packet = *old;
101696 } else {
101697 /* packet is already initialized empty */
101698 log_packet_detailed(" no old info");
101699 }
101700
101701#ifdef FREECIV_JSON_CONNECTION
101702 field_addr.name = "fields";
101703#endif /* FREECIV_JSON_CONNECTION */
101704 DIO_BV_GET(&din, &field_addr, fields);
101705
101706 if (BV_ISSET(fields, 0)) {
101707 log_packet_detailed(" got field 'serial'");
101708
101709#ifdef FREECIV_JSON_CONNECTION
101710 field_addr.name = "serial";
101711#endif /* FREECIV_JSON_CONNECTION */
101712
101713 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101715 }
101716 }
101717
101718 if (nullptr == old) {
101719 old = fc_malloc(sizeof(*old));
101721 *old = *real_packet;
101723 } else {
101724 *old = *real_packet;
101725 }
101726
101727#else /* FREECIV_DELTA_PROTOCOL */
101728#ifdef FREECIV_JSON_CONNECTION
101729 field_addr.name = "serial";
101730#endif /* FREECIV_JSON_CONNECTION */
101731
101732 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
101734 }
101735#endif /* FREECIV_DELTA_PROTOCOL */
101736
101738#undef FREE_PACKET_STRUCT
101739}
101740
101742{
101743 const struct packet_sync_serial_reply *real_packet = packet;
101744 int e;
101746
101747 log_packet_detailed("packet_sync_serial_reply_100: sending info about ()");
101748
101749#ifdef FREECIV_DELTA_PROTOCOL
101752 bool differ;
101753 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL_REPLY;
101754
101755 if (nullptr == *hash) {
101757 nullptr, nullptr, nullptr, destroy_packet_sync_serial_reply);
101758 }
101759 BV_CLR_ALL(fields);
101760
101761 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
101762 old = fc_malloc(sizeof(*old));
101763 /* temporary bitcopy just to insert correctly */
101764 *old = *real_packet;
101767 }
101768
101769 differ = (old->serial != real_packet->serial);
101770 if (differ) {
101771 BV_SET(fields, 0);
101772 }
101773#endif /* FREECIV_DELTA_PROTOCOL */
101774
101775#ifdef FREECIV_JSON_CONNECTION
101776 struct plocation field_addr;
101777 {
101778 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101781 }
101782#endif /* FREECIV_JSON_CONNECTION */
101783
101784#ifdef FREECIV_DELTA_PROTOCOL
101785#ifdef FREECIV_JSON_CONNECTION
101786 field_addr.name = "fields";
101787#endif /* FREECIV_JSON_CONNECTION */
101788 e = 0;
101789 e |= DIO_BV_PUT(&dout, &field_addr, fields);
101790 if (e) {
101791 log_packet_detailed("fields bitvector error detected");
101792 }
101793
101794 if (BV_ISSET(fields, 0)) {
101795 log_packet_detailed(" field 'serial' has changed");
101796
101797#ifdef FREECIV_JSON_CONNECTION
101798 field_addr.name = "serial";
101799#endif /* FREECIV_JSON_CONNECTION */
101800 e = 0;
101801
101802 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101803
101804 if (e) {
101805 log_packet_detailed("'serial' field error detected");
101806 }
101807 }
101808
101809 *old = *real_packet;
101810
101811#else /* FREECIV_DELTA_PROTOCOL */
101812#ifdef FREECIV_JSON_CONNECTION
101813 field_addr.name = "serial";
101814#endif /* FREECIV_JSON_CONNECTION */
101815 e = 0;
101816
101817 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
101818
101819 if (e) {
101820 log_packet_detailed("'serial' field error detected");
101821 }
101822#endif /* FREECIV_DELTA_PROTOCOL */
101823
101825}
101826
101828{
101829 if (!pc->used) {
101830 log_error("WARNING: trying to send data to the closed connection %s",
101832 return -1;
101833 }
101834 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet != nullptr, -1,
101835 "Handler for PACKET_SYNC_SERIAL_REPLY not installed");
101836 return pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet(pc, packet);
101837}
101838
101840{
101841 struct packet_sync_serial_reply packet, *real_packet = &packet;
101842
101844
101846}
101847
101849{
101850 memset(packet, 0, sizeof(*packet));
101851}
101852
101853#define free_packet_web_city_info_addition(_packet) (void) 0
101854#define destroy_packet_web_city_info_addition free
101855
101856#ifdef FREECIV_DELTA_PROTOCOL
101858{
101859 const struct packet_web_city_info_addition *key = (const struct packet_web_city_info_addition *) vkey;
101860 genhash_val_t result = 0;
101861
101862 result += key->id;
101863
101864 result &= 0xFFFFFFFF;
101865 return result;
101866}
101867
101868static bool cmp_packet_web_city_info_addition_100(const void *vkey1, const void *vkey2)
101869{
101870 const struct packet_web_city_info_addition *old = (const struct packet_web_city_info_addition *) vkey1;
101872 bool differ;
101873
101874 differ = (old->id != real_packet->id);
101875
101876 return !differ;
101877}
101879#endif /* FREECIV_DELTA_PROTOCOL */
101880
101882{
101883#define FREE_PACKET_STRUCT(_packet) free_packet_web_city_info_addition(_packet)
101885
101886#ifdef FREECIV_JSON_CONNECTION
101887 struct plocation field_addr;
101888 {
101889 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
101892 }
101893#endif /* FREECIV_JSON_CONNECTION */
101894
101895#ifdef FREECIV_JSON_CONNECTION
101896 field_addr.name = "id";
101897#endif /* FREECIV_JSON_CONNECTION */
101898
101899 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
101901 }
101902
101903 log_packet_detailed("packet_web_city_info_addition_100: got info about (%d)",
101904 real_packet->id);
101905
101906#ifdef FREECIV_DELTA_PROTOCOL
101909 struct genhash **hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
101910
101911 if (nullptr == *hash) {
101913 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
101914 }
101915
101916 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
101917 *real_packet = *old;
101918 } else {
101919 /* packet is already initialized empty */
101920 log_packet_detailed(" no old info");
101921 }
101922
101923#ifdef FREECIV_JSON_CONNECTION
101924 field_addr.name = "fields";
101925#endif /* FREECIV_JSON_CONNECTION */
101926 DIO_BV_GET(&din, &field_addr, fields);
101927
101928 real_packet->cma_enabled = BV_ISSET(fields, 0);
101929
101930 if (BV_ISSET(fields, 1)) {
101931 log_packet_detailed(" got field 'cm_parameter'");
101932
101933#ifdef FREECIV_JSON_CONNECTION
101934 field_addr.name = "cm_parameter";
101935#endif /* FREECIV_JSON_CONNECTION */
101936
101937 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
101939 }
101940 }
101941
101942 if (BV_ISSET(fields, 2)) {
101943 log_packet_detailed(" got field 'granary_size'");
101944
101945#ifdef FREECIV_JSON_CONNECTION
101946 field_addr.name = "granary_size";
101947#endif /* FREECIV_JSON_CONNECTION */
101948
101949 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
101950 RECEIVE_PACKET_FIELD_ERROR(granary_size);
101951 }
101952 }
101953
101954 if (BV_ISSET(fields, 3)) {
101955 log_packet_detailed(" got field 'granary_turns'");
101956
101957#ifdef FREECIV_JSON_CONNECTION
101958 field_addr.name = "granary_turns";
101959#endif /* FREECIV_JSON_CONNECTION */
101960
101961 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
101962 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
101963 }
101964 }
101965
101966 if (BV_ISSET(fields, 4)) {
101967 log_packet_detailed(" got field 'can_build_unit'");
101968
101969#ifdef FREECIV_JSON_CONNECTION
101970 field_addr.name = "can_build_unit";
101971#endif /* FREECIV_JSON_CONNECTION */
101972
101973 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
101974 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
101975 }
101976 }
101977
101978 if (BV_ISSET(fields, 5)) {
101979 log_packet_detailed(" got field 'can_build_improvement'");
101980
101981#ifdef FREECIV_JSON_CONNECTION
101982 field_addr.name = "can_build_improvement";
101983#endif /* FREECIV_JSON_CONNECTION */
101984
101985 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
101986 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
101987 }
101988 }
101989
101990 if (BV_ISSET(fields, 6)) {
101991 log_packet_detailed(" got field 'output_food'");
101992
101993#ifdef FREECIV_JSON_CONNECTION
101994 field_addr.name = "output_food";
101995#endif /* FREECIV_JSON_CONNECTION */
101996
101997 {
101998 int i;
101999
102000
102001#ifdef FREECIV_JSON_CONNECTION
102002 /* Enter array. */
102003 field_addr.sub_location = plocation_elem_new(0);
102004#endif /* FREECIV_JSON_CONNECTION */
102005
102006 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102007#ifdef FREECIV_JSON_CONNECTION
102008 /* Next array element */
102009 field_addr.sub_location->number = i;
102010#endif /* FREECIV_JSON_CONNECTION */
102011
102012 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
102013 RECEIVE_PACKET_FIELD_ERROR(output_food);
102014 }
102015 }
102016
102017#ifdef FREECIV_JSON_CONNECTION
102018 /* Exit array. */
102019 FC_FREE(field_addr.sub_location);
102020#endif /* FREECIV_JSON_CONNECTION */
102021 }
102022 }
102023
102024 if (BV_ISSET(fields, 7)) {
102025 log_packet_detailed(" got field 'output_shield'");
102026
102027#ifdef FREECIV_JSON_CONNECTION
102028 field_addr.name = "output_shield";
102029#endif /* FREECIV_JSON_CONNECTION */
102030
102031 {
102032 int i;
102033
102034
102035#ifdef FREECIV_JSON_CONNECTION
102036 /* Enter array. */
102037 field_addr.sub_location = plocation_elem_new(0);
102038#endif /* FREECIV_JSON_CONNECTION */
102039
102040 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102041#ifdef FREECIV_JSON_CONNECTION
102042 /* Next array element */
102043 field_addr.sub_location->number = i;
102044#endif /* FREECIV_JSON_CONNECTION */
102045
102046 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
102047 RECEIVE_PACKET_FIELD_ERROR(output_shield);
102048 }
102049 }
102050
102051#ifdef FREECIV_JSON_CONNECTION
102052 /* Exit array. */
102053 FC_FREE(field_addr.sub_location);
102054#endif /* FREECIV_JSON_CONNECTION */
102055 }
102056 }
102057
102058 if (BV_ISSET(fields, 8)) {
102059 log_packet_detailed(" got field 'output_trade'");
102060
102061#ifdef FREECIV_JSON_CONNECTION
102062 field_addr.name = "output_trade";
102063#endif /* FREECIV_JSON_CONNECTION */
102064
102065 {
102066 int i;
102067
102068
102069#ifdef FREECIV_JSON_CONNECTION
102070 /* Enter array. */
102071 field_addr.sub_location = plocation_elem_new(0);
102072#endif /* FREECIV_JSON_CONNECTION */
102073
102074 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102075#ifdef FREECIV_JSON_CONNECTION
102076 /* Next array element */
102077 field_addr.sub_location->number = i;
102078#endif /* FREECIV_JSON_CONNECTION */
102079
102080 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
102081 RECEIVE_PACKET_FIELD_ERROR(output_trade);
102082 }
102083 }
102084
102085#ifdef FREECIV_JSON_CONNECTION
102086 /* Exit array. */
102087 FC_FREE(field_addr.sub_location);
102088#endif /* FREECIV_JSON_CONNECTION */
102089 }
102090 }
102091
102092 if (nullptr == old) {
102093 old = fc_malloc(sizeof(*old));
102095 *old = *real_packet;
102097 } else {
102098 *old = *real_packet;
102099 }
102100
102101 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
102102 if (nullptr != *hash) {
102104 }
102105
102106#else /* FREECIV_DELTA_PROTOCOL */
102107#ifdef FREECIV_JSON_CONNECTION
102108 field_addr.name = "cma_enabled";
102109#endif /* FREECIV_JSON_CONNECTION */
102110
102111 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->cma_enabled)) {
102112 RECEIVE_PACKET_FIELD_ERROR(cma_enabled);
102113 }
102114
102115#ifdef FREECIV_JSON_CONNECTION
102116 field_addr.name = "cm_parameter";
102117#endif /* FREECIV_JSON_CONNECTION */
102118
102119 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102121 }
102122
102123#ifdef FREECIV_JSON_CONNECTION
102124 field_addr.name = "granary_size";
102125#endif /* FREECIV_JSON_CONNECTION */
102126
102127 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
102128 RECEIVE_PACKET_FIELD_ERROR(granary_size);
102129 }
102130
102131#ifdef FREECIV_JSON_CONNECTION
102132 field_addr.name = "granary_turns";
102133#endif /* FREECIV_JSON_CONNECTION */
102134
102135 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
102136 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
102137 }
102138
102139#ifdef FREECIV_JSON_CONNECTION
102140 field_addr.name = "can_build_unit";
102141#endif /* FREECIV_JSON_CONNECTION */
102142
102143 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
102144 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
102145 }
102146
102147#ifdef FREECIV_JSON_CONNECTION
102148 field_addr.name = "can_build_improvement";
102149#endif /* FREECIV_JSON_CONNECTION */
102150
102151 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
102152 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
102153 }
102154
102155#ifdef FREECIV_JSON_CONNECTION
102156 field_addr.name = "output_food";
102157#endif /* FREECIV_JSON_CONNECTION */
102158
102159 {
102160 int i;
102161
102162
102163#ifdef FREECIV_JSON_CONNECTION
102164 /* Enter array. */
102165 field_addr.sub_location = plocation_elem_new(0);
102166#endif /* FREECIV_JSON_CONNECTION */
102167
102168 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102169#ifdef FREECIV_JSON_CONNECTION
102170 /* Next array element */
102171 field_addr.sub_location->number = i;
102172#endif /* FREECIV_JSON_CONNECTION */
102173
102174 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
102175 RECEIVE_PACKET_FIELD_ERROR(output_food);
102176 }
102177 }
102178
102179#ifdef FREECIV_JSON_CONNECTION
102180 /* Exit array. */
102181 FC_FREE(field_addr.sub_location);
102182#endif /* FREECIV_JSON_CONNECTION */
102183 }
102184
102185#ifdef FREECIV_JSON_CONNECTION
102186 field_addr.name = "output_shield";
102187#endif /* FREECIV_JSON_CONNECTION */
102188
102189 {
102190 int i;
102191
102192
102193#ifdef FREECIV_JSON_CONNECTION
102194 /* Enter array. */
102195 field_addr.sub_location = plocation_elem_new(0);
102196#endif /* FREECIV_JSON_CONNECTION */
102197
102198 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102199#ifdef FREECIV_JSON_CONNECTION
102200 /* Next array element */
102201 field_addr.sub_location->number = i;
102202#endif /* FREECIV_JSON_CONNECTION */
102203
102204 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
102205 RECEIVE_PACKET_FIELD_ERROR(output_shield);
102206 }
102207 }
102208
102209#ifdef FREECIV_JSON_CONNECTION
102210 /* Exit array. */
102211 FC_FREE(field_addr.sub_location);
102212#endif /* FREECIV_JSON_CONNECTION */
102213 }
102214
102215#ifdef FREECIV_JSON_CONNECTION
102216 field_addr.name = "output_trade";
102217#endif /* FREECIV_JSON_CONNECTION */
102218
102219 {
102220 int i;
102221
102222
102223#ifdef FREECIV_JSON_CONNECTION
102224 /* Enter array. */
102225 field_addr.sub_location = plocation_elem_new(0);
102226#endif /* FREECIV_JSON_CONNECTION */
102227
102228 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102229#ifdef FREECIV_JSON_CONNECTION
102230 /* Next array element */
102231 field_addr.sub_location->number = i;
102232#endif /* FREECIV_JSON_CONNECTION */
102233
102234 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
102235 RECEIVE_PACKET_FIELD_ERROR(output_trade);
102236 }
102237 }
102238
102239#ifdef FREECIV_JSON_CONNECTION
102240 /* Exit array. */
102241 FC_FREE(field_addr.sub_location);
102242#endif /* FREECIV_JSON_CONNECTION */
102243 }
102244#endif /* FREECIV_DELTA_PROTOCOL */
102245
102247#undef FREE_PACKET_STRUCT
102248}
102249
102250static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
102251{
102252 const struct packet_web_city_info_addition *real_packet = packet;
102253 int e;
102255
102256 log_packet_detailed("packet_web_city_info_addition_100: sending info about (%d)",
102257 real_packet->id);
102258
102259#ifdef FREECIV_DELTA_PROTOCOL
102262 bool differ;
102263 int different = force_to_send;
102264 struct genhash **hash = pc->phs.sent + PACKET_WEB_CITY_INFO_ADDITION;
102265
102266 if (nullptr == *hash) {
102268 nullptr, nullptr, nullptr, destroy_packet_web_city_info_addition);
102269 }
102270 BV_CLR_ALL(fields);
102271
102272 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102273 old = fc_malloc(sizeof(*old));
102274 /* temporary bitcopy just to insert correctly */
102275 *old = *real_packet;
102278 different = 1; /* Force to send. */
102279 }
102280
102281 differ = (old->cma_enabled != real_packet->cma_enabled);
102282 if (differ) {
102283 different++;
102284 }
102285 /* folded into head */
102286 if (real_packet->cma_enabled) {
102287 BV_SET(fields, 0);
102288 }
102289
102290 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
102291 if (differ) {
102292 different++;
102293 BV_SET(fields, 1);
102294 }
102295
102296 differ = (old->granary_size != real_packet->granary_size);
102297 if (differ) {
102298 different++;
102299 BV_SET(fields, 2);
102300 }
102301
102302 differ = (old->granary_turns != real_packet->granary_turns);
102303 if (differ) {
102304 different++;
102305 BV_SET(fields, 3);
102306 }
102307
102308 differ = !BV_ARE_EQUAL(old->can_build_unit, real_packet->can_build_unit);
102309 if (differ) {
102310 different++;
102311 BV_SET(fields, 4);
102312 }
102313
102314 differ = !BV_ARE_EQUAL(old->can_build_improvement, real_packet->can_build_improvement);
102315 if (differ) {
102316 different++;
102317 BV_SET(fields, 5);
102318 }
102319
102320 differ = FALSE;
102321 {
102322 int i;
102323
102324 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102325 differ = (old->output_food[i] != real_packet->output_food[i]);
102326 if (differ) {
102327 break;
102328 }
102329 }
102330 }
102331 if (differ) {
102332 different++;
102333 BV_SET(fields, 6);
102334 }
102335
102336 differ = FALSE;
102337 {
102338 int i;
102339
102340 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102341 differ = (old->output_shield[i] != real_packet->output_shield[i]);
102342 if (differ) {
102343 break;
102344 }
102345 }
102346 }
102347 if (differ) {
102348 different++;
102349 BV_SET(fields, 7);
102350 }
102351
102352 differ = FALSE;
102353 {
102354 int i;
102355
102356 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102357 differ = (old->output_trade[i] != real_packet->output_trade[i]);
102358 if (differ) {
102359 break;
102360 }
102361 }
102362 }
102363 if (differ) {
102364 different++;
102365 BV_SET(fields, 8);
102366 }
102367
102368 if (different == 0) {
102369 log_packet_detailed(" no change -> discard");
102371 }
102372#endif /* FREECIV_DELTA_PROTOCOL */
102373
102374#ifdef FREECIV_JSON_CONNECTION
102375 struct plocation field_addr;
102376 {
102377 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102380 }
102381#endif /* FREECIV_JSON_CONNECTION */
102382
102383#ifdef FREECIV_JSON_CONNECTION
102384 field_addr.name = "id";
102385#endif /* FREECIV_JSON_CONNECTION */
102386 e = 0;
102387
102388 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
102389
102390 if (e) {
102391 log_packet_detailed("'id' field error detected");
102392 }
102393
102394#ifdef FREECIV_DELTA_PROTOCOL
102395#ifdef FREECIV_JSON_CONNECTION
102396 field_addr.name = "fields";
102397#endif /* FREECIV_JSON_CONNECTION */
102398 e = 0;
102399 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102400 if (e) {
102401 log_packet_detailed("fields bitvector error detected");
102402 }
102403
102404 /* field 0 is folded into the header */
102405
102406 if (BV_ISSET(fields, 1)) {
102407 log_packet_detailed(" field 'cm_parameter' has changed");
102408
102409#ifdef FREECIV_JSON_CONNECTION
102410 field_addr.name = "cm_parameter";
102411#endif /* FREECIV_JSON_CONNECTION */
102412 e = 0;
102413
102414 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102415
102416 if (e) {
102417 log_packet_detailed("'cm_parameter' field error detected");
102418 }
102419 }
102420
102421 if (BV_ISSET(fields, 2)) {
102422 log_packet_detailed(" field 'granary_size' has changed");
102423
102424#ifdef FREECIV_JSON_CONNECTION
102425 field_addr.name = "granary_size";
102426#endif /* FREECIV_JSON_CONNECTION */
102427 e = 0;
102428
102429 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
102430
102431 if (e) {
102432 log_packet_detailed("'granary_size' field error detected");
102433 }
102434 }
102435
102436 if (BV_ISSET(fields, 3)) {
102437 log_packet_detailed(" field 'granary_turns' has changed");
102438
102439#ifdef FREECIV_JSON_CONNECTION
102440 field_addr.name = "granary_turns";
102441#endif /* FREECIV_JSON_CONNECTION */
102442 e = 0;
102443
102444 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
102445
102446 if (e) {
102447 log_packet_detailed("'granary_turns' field error detected");
102448 }
102449 }
102450
102451 if (BV_ISSET(fields, 4)) {
102452 log_packet_detailed(" field 'can_build_unit' has changed");
102453
102454#ifdef FREECIV_JSON_CONNECTION
102455 field_addr.name = "can_build_unit";
102456#endif /* FREECIV_JSON_CONNECTION */
102457 e = 0;
102458
102459 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
102460
102461 if (e) {
102462 log_packet_detailed("'can_build_unit' field error detected");
102463 }
102464 }
102465
102466 if (BV_ISSET(fields, 5)) {
102467 log_packet_detailed(" field 'can_build_improvement' has changed");
102468
102469#ifdef FREECIV_JSON_CONNECTION
102470 field_addr.name = "can_build_improvement";
102471#endif /* FREECIV_JSON_CONNECTION */
102472 e = 0;
102473
102474 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
102475
102476 if (e) {
102477 log_packet_detailed("'can_build_improvement' field error detected");
102478 }
102479 }
102480
102481 if (BV_ISSET(fields, 6)) {
102482 log_packet_detailed(" field 'output_food' has changed");
102483
102484#ifdef FREECIV_JSON_CONNECTION
102485 field_addr.name = "output_food";
102486#endif /* FREECIV_JSON_CONNECTION */
102487 e = 0;
102488
102489 {
102490 int i;
102491
102492#ifdef FREECIV_JSON_CONNECTION
102493 /* Create the array. */
102495
102496 /* Enter array. */
102497 field_addr.sub_location = plocation_elem_new(0);
102498#endif /* FREECIV_JSON_CONNECTION */
102499
102500 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102501#ifdef FREECIV_JSON_CONNECTION
102502 /* Next array element. */
102503 field_addr.sub_location->number = i;
102504#endif /* FREECIV_JSON_CONNECTION */
102505
102506 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
102507 }
102508
102509#ifdef FREECIV_JSON_CONNECTION
102510 /* Exit array. */
102511 FC_FREE(field_addr.sub_location);
102512#endif /* FREECIV_JSON_CONNECTION */
102513 }
102514
102515 if (e) {
102516 log_packet_detailed("'output_food' field error detected");
102517 }
102518 }
102519
102520 if (BV_ISSET(fields, 7)) {
102521 log_packet_detailed(" field 'output_shield' has changed");
102522
102523#ifdef FREECIV_JSON_CONNECTION
102524 field_addr.name = "output_shield";
102525#endif /* FREECIV_JSON_CONNECTION */
102526 e = 0;
102527
102528 {
102529 int i;
102530
102531#ifdef FREECIV_JSON_CONNECTION
102532 /* Create the array. */
102534
102535 /* Enter array. */
102536 field_addr.sub_location = plocation_elem_new(0);
102537#endif /* FREECIV_JSON_CONNECTION */
102538
102539 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102540#ifdef FREECIV_JSON_CONNECTION
102541 /* Next array element. */
102542 field_addr.sub_location->number = i;
102543#endif /* FREECIV_JSON_CONNECTION */
102544
102545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
102546 }
102547
102548#ifdef FREECIV_JSON_CONNECTION
102549 /* Exit array. */
102550 FC_FREE(field_addr.sub_location);
102551#endif /* FREECIV_JSON_CONNECTION */
102552 }
102553
102554 if (e) {
102555 log_packet_detailed("'output_shield' field error detected");
102556 }
102557 }
102558
102559 if (BV_ISSET(fields, 8)) {
102560 log_packet_detailed(" field 'output_trade' has changed");
102561
102562#ifdef FREECIV_JSON_CONNECTION
102563 field_addr.name = "output_trade";
102564#endif /* FREECIV_JSON_CONNECTION */
102565 e = 0;
102566
102567 {
102568 int i;
102569
102570#ifdef FREECIV_JSON_CONNECTION
102571 /* Create the array. */
102573
102574 /* Enter array. */
102575 field_addr.sub_location = plocation_elem_new(0);
102576#endif /* FREECIV_JSON_CONNECTION */
102577
102578 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102579#ifdef FREECIV_JSON_CONNECTION
102580 /* Next array element. */
102581 field_addr.sub_location->number = i;
102582#endif /* FREECIV_JSON_CONNECTION */
102583
102584 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
102585 }
102586
102587#ifdef FREECIV_JSON_CONNECTION
102588 /* Exit array. */
102589 FC_FREE(field_addr.sub_location);
102590#endif /* FREECIV_JSON_CONNECTION */
102591 }
102592
102593 if (e) {
102594 log_packet_detailed("'output_trade' field error detected");
102595 }
102596 }
102597
102598 *old = *real_packet;
102599
102600 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
102601 if (nullptr != *hash) {
102603 }
102604
102605#else /* FREECIV_DELTA_PROTOCOL */
102606#ifdef FREECIV_JSON_CONNECTION
102607 field_addr.name = "cma_enabled";
102608#endif /* FREECIV_JSON_CONNECTION */
102609 e = 0;
102610
102611 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->cma_enabled);
102612
102613 if (e) {
102614 log_packet_detailed("'cma_enabled' field error detected");
102615 }
102616
102617#ifdef FREECIV_JSON_CONNECTION
102618 field_addr.name = "cm_parameter";
102619#endif /* FREECIV_JSON_CONNECTION */
102620 e = 0;
102621
102622 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102623
102624 if (e) {
102625 log_packet_detailed("'cm_parameter' field error detected");
102626 }
102627
102628#ifdef FREECIV_JSON_CONNECTION
102629 field_addr.name = "granary_size";
102630#endif /* FREECIV_JSON_CONNECTION */
102631 e = 0;
102632
102633 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
102634
102635 if (e) {
102636 log_packet_detailed("'granary_size' field error detected");
102637 }
102638
102639#ifdef FREECIV_JSON_CONNECTION
102640 field_addr.name = "granary_turns";
102641#endif /* FREECIV_JSON_CONNECTION */
102642 e = 0;
102643
102644 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
102645
102646 if (e) {
102647 log_packet_detailed("'granary_turns' field error detected");
102648 }
102649
102650#ifdef FREECIV_JSON_CONNECTION
102651 field_addr.name = "can_build_unit";
102652#endif /* FREECIV_JSON_CONNECTION */
102653 e = 0;
102654
102655 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_unit);
102656
102657 if (e) {
102658 log_packet_detailed("'can_build_unit' field error detected");
102659 }
102660
102661#ifdef FREECIV_JSON_CONNECTION
102662 field_addr.name = "can_build_improvement";
102663#endif /* FREECIV_JSON_CONNECTION */
102664 e = 0;
102665
102666 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->can_build_improvement);
102667
102668 if (e) {
102669 log_packet_detailed("'can_build_improvement' field error detected");
102670 }
102671
102672#ifdef FREECIV_JSON_CONNECTION
102673 field_addr.name = "output_food";
102674#endif /* FREECIV_JSON_CONNECTION */
102675 e = 0;
102676
102677 {
102678 int i;
102679
102680#ifdef FREECIV_JSON_CONNECTION
102681 /* Create the array. */
102683
102684 /* Enter array. */
102685 field_addr.sub_location = plocation_elem_new(0);
102686#endif /* FREECIV_JSON_CONNECTION */
102687
102688 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102689#ifdef FREECIV_JSON_CONNECTION
102690 /* Next array element. */
102691 field_addr.sub_location->number = i;
102692#endif /* FREECIV_JSON_CONNECTION */
102693
102694 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
102695 }
102696
102697#ifdef FREECIV_JSON_CONNECTION
102698 /* Exit array. */
102699 FC_FREE(field_addr.sub_location);
102700#endif /* FREECIV_JSON_CONNECTION */
102701 }
102702
102703 if (e) {
102704 log_packet_detailed("'output_food' field error detected");
102705 }
102706
102707#ifdef FREECIV_JSON_CONNECTION
102708 field_addr.name = "output_shield";
102709#endif /* FREECIV_JSON_CONNECTION */
102710 e = 0;
102711
102712 {
102713 int i;
102714
102715#ifdef FREECIV_JSON_CONNECTION
102716 /* Create the array. */
102718
102719 /* Enter array. */
102720 field_addr.sub_location = plocation_elem_new(0);
102721#endif /* FREECIV_JSON_CONNECTION */
102722
102723 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102724#ifdef FREECIV_JSON_CONNECTION
102725 /* Next array element. */
102726 field_addr.sub_location->number = i;
102727#endif /* FREECIV_JSON_CONNECTION */
102728
102729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
102730 }
102731
102732#ifdef FREECIV_JSON_CONNECTION
102733 /* Exit array. */
102734 FC_FREE(field_addr.sub_location);
102735#endif /* FREECIV_JSON_CONNECTION */
102736 }
102737
102738 if (e) {
102739 log_packet_detailed("'output_shield' field error detected");
102740 }
102741
102742#ifdef FREECIV_JSON_CONNECTION
102743 field_addr.name = "output_trade";
102744#endif /* FREECIV_JSON_CONNECTION */
102745 e = 0;
102746
102747 {
102748 int i;
102749
102750#ifdef FREECIV_JSON_CONNECTION
102751 /* Create the array. */
102753
102754 /* Enter array. */
102755 field_addr.sub_location = plocation_elem_new(0);
102756#endif /* FREECIV_JSON_CONNECTION */
102757
102758 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
102759#ifdef FREECIV_JSON_CONNECTION
102760 /* Next array element. */
102761 field_addr.sub_location->number = i;
102762#endif /* FREECIV_JSON_CONNECTION */
102763
102764 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
102765 }
102766
102767#ifdef FREECIV_JSON_CONNECTION
102768 /* Exit array. */
102769 FC_FREE(field_addr.sub_location);
102770#endif /* FREECIV_JSON_CONNECTION */
102771 }
102772
102773 if (e) {
102774 log_packet_detailed("'output_trade' field error detected");
102775 }
102776#endif /* FREECIV_DELTA_PROTOCOL */
102777
102779}
102780
102781int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
102782{
102783 if (!pc->used) {
102784 log_error("WARNING: trying to send data to the closed connection %s",
102786 return -1;
102787 }
102788 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send != nullptr, -1,
102789 "Handler for PACKET_WEB_CITY_INFO_ADDITION not installed");
102790 return pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send(pc, packet, force_to_send);
102791}
102792
102793void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
102794{
102795 conn_list_iterate(dest, pconn) {
102796 send_packet_web_city_info_addition(pconn, packet, force_to_send);
102798}
102799
102800static inline void init_packet_web_cma_set(struct packet_web_cma_set *packet)
102801{
102802 memset(packet, 0, sizeof(*packet));
102803}
102804
102805#define free_packet_web_cma_set(_packet) (void) 0
102806#define destroy_packet_web_cma_set free
102807
102808#ifdef FREECIV_DELTA_PROTOCOL
102810{
102811 const struct packet_web_cma_set *key = (const struct packet_web_cma_set *) vkey;
102812 genhash_val_t result = 0;
102813
102814 result += key->id;
102815
102816 result &= 0xFFFFFFFF;
102817 return result;
102818}
102819
102820static bool cmp_packet_web_cma_set_100(const void *vkey1, const void *vkey2)
102821{
102822 const struct packet_web_cma_set *old = (const struct packet_web_cma_set *) vkey1;
102823 const struct packet_web_cma_set *real_packet = (const struct packet_web_cma_set *) vkey2;
102824 bool differ;
102825
102826 differ = (old->id != real_packet->id);
102827
102828 return !differ;
102829}
102831#endif /* FREECIV_DELTA_PROTOCOL */
102832
102834{
102835#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_set(_packet)
102837
102838#ifdef FREECIV_JSON_CONNECTION
102839 struct plocation field_addr;
102840 {
102841 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102844 }
102845#endif /* FREECIV_JSON_CONNECTION */
102846
102847#ifdef FREECIV_JSON_CONNECTION
102848 field_addr.name = "id";
102849#endif /* FREECIV_JSON_CONNECTION */
102850
102851 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
102853 }
102854
102855 log_packet_detailed("packet_web_cma_set_100: got info about (%d)",
102856 real_packet->id);
102857
102858#ifdef FREECIV_DELTA_PROTOCOL
102860 struct packet_web_cma_set *old;
102861 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_SET;
102862
102863 if (nullptr == *hash) {
102865 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
102866 }
102867
102868 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
102869 *real_packet = *old;
102870 } else {
102871 /* packet is already initialized empty */
102872 log_packet_detailed(" no old info");
102873 }
102874
102875#ifdef FREECIV_JSON_CONNECTION
102876 field_addr.name = "fields";
102877#endif /* FREECIV_JSON_CONNECTION */
102878 DIO_BV_GET(&din, &field_addr, fields);
102879
102880 if (BV_ISSET(fields, 0)) {
102881 log_packet_detailed(" got field 'cm_parameter'");
102882
102883#ifdef FREECIV_JSON_CONNECTION
102884 field_addr.name = "cm_parameter";
102885#endif /* FREECIV_JSON_CONNECTION */
102886
102887 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102889 }
102890 }
102891
102892 if (nullptr == old) {
102893 old = fc_malloc(sizeof(*old));
102895 *old = *real_packet;
102897 } else {
102898 *old = *real_packet;
102899 }
102900
102901#else /* FREECIV_DELTA_PROTOCOL */
102902#ifdef FREECIV_JSON_CONNECTION
102903 field_addr.name = "cm_parameter";
102904#endif /* FREECIV_JSON_CONNECTION */
102905
102906 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
102908 }
102909#endif /* FREECIV_DELTA_PROTOCOL */
102910
102912#undef FREE_PACKET_STRUCT
102913}
102914
102915static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
102916{
102917 const struct packet_web_cma_set *real_packet = packet;
102918 int e;
102920
102921 log_packet_detailed("packet_web_cma_set_100: sending info about (%d)",
102922 real_packet->id);
102923
102924#ifdef FREECIV_DELTA_PROTOCOL
102926 struct packet_web_cma_set *old;
102927 bool differ;
102928 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_SET;
102929
102930 if (nullptr == *hash) {
102932 nullptr, nullptr, nullptr, destroy_packet_web_cma_set);
102933 }
102934 BV_CLR_ALL(fields);
102935
102936 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
102937 old = fc_malloc(sizeof(*old));
102938 /* temporary bitcopy just to insert correctly */
102939 *old = *real_packet;
102942 }
102943
102944 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
102945 if (differ) {
102946 BV_SET(fields, 0);
102947 }
102948#endif /* FREECIV_DELTA_PROTOCOL */
102949
102950#ifdef FREECIV_JSON_CONNECTION
102951 struct plocation field_addr;
102952 {
102953 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
102956 }
102957#endif /* FREECIV_JSON_CONNECTION */
102958
102959#ifdef FREECIV_JSON_CONNECTION
102960 field_addr.name = "id";
102961#endif /* FREECIV_JSON_CONNECTION */
102962 e = 0;
102963
102964 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
102965
102966 if (e) {
102967 log_packet_detailed("'id' field error detected");
102968 }
102969
102970#ifdef FREECIV_DELTA_PROTOCOL
102971#ifdef FREECIV_JSON_CONNECTION
102972 field_addr.name = "fields";
102973#endif /* FREECIV_JSON_CONNECTION */
102974 e = 0;
102975 e |= DIO_BV_PUT(&dout, &field_addr, fields);
102976 if (e) {
102977 log_packet_detailed("fields bitvector error detected");
102978 }
102979
102980 if (BV_ISSET(fields, 0)) {
102981 log_packet_detailed(" field 'cm_parameter' has changed");
102982
102983#ifdef FREECIV_JSON_CONNECTION
102984 field_addr.name = "cm_parameter";
102985#endif /* FREECIV_JSON_CONNECTION */
102986 e = 0;
102987
102988 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
102989
102990 if (e) {
102991 log_packet_detailed("'cm_parameter' field error detected");
102992 }
102993 }
102994
102995 *old = *real_packet;
102996
102997#else /* FREECIV_DELTA_PROTOCOL */
102998#ifdef FREECIV_JSON_CONNECTION
102999 field_addr.name = "cm_parameter";
103000#endif /* FREECIV_JSON_CONNECTION */
103001 e = 0;
103002
103003 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
103004
103005 if (e) {
103006 log_packet_detailed("'cm_parameter' field error detected");
103007 }
103008#endif /* FREECIV_DELTA_PROTOCOL */
103009
103011}
103012
103014{
103015 if (!pc->used) {
103016 log_error("WARNING: trying to send data to the closed connection %s",
103018 return -1;
103019 }
103020 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet != nullptr, -1,
103021 "Handler for PACKET_WEB_CMA_SET not installed");
103022 return pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet(pc, packet);
103023}
103024
103025static inline void init_packet_web_cma_clear(struct packet_web_cma_clear *packet)
103026{
103027 memset(packet, 0, sizeof(*packet));
103028}
103029
103030#define free_packet_web_cma_clear(_packet) (void) 0
103031#define destroy_packet_web_cma_clear free
103032
103033#ifdef FREECIV_DELTA_PROTOCOL
103034#define hash_packet_web_cma_clear_100 hash_const
103035#define cmp_packet_web_cma_clear_100 cmp_const
103037#endif /* FREECIV_DELTA_PROTOCOL */
103038
103040{
103041#define FREE_PACKET_STRUCT(_packet) free_packet_web_cma_clear(_packet)
103043
103044#ifdef FREECIV_JSON_CONNECTION
103045 struct plocation field_addr;
103046 {
103047 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103050 }
103051#endif /* FREECIV_JSON_CONNECTION */
103052
103053 log_packet_detailed("packet_web_cma_clear_100: got info about ()");
103054
103055#ifdef FREECIV_DELTA_PROTOCOL
103057 struct packet_web_cma_clear *old;
103058 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_CLEAR;
103059
103060 if (nullptr == *hash) {
103062 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
103063 }
103064
103065 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103066 *real_packet = *old;
103067 } else {
103068 /* packet is already initialized empty */
103069 log_packet_detailed(" no old info");
103070 }
103071
103072#ifdef FREECIV_JSON_CONNECTION
103073 field_addr.name = "fields";
103074#endif /* FREECIV_JSON_CONNECTION */
103075 DIO_BV_GET(&din, &field_addr, fields);
103076
103077 if (BV_ISSET(fields, 0)) {
103078 log_packet_detailed(" got field 'id'");
103079
103080#ifdef FREECIV_JSON_CONNECTION
103081 field_addr.name = "id";
103082#endif /* FREECIV_JSON_CONNECTION */
103083
103084 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103086 }
103087 }
103088
103089 if (nullptr == old) {
103090 old = fc_malloc(sizeof(*old));
103092 *old = *real_packet;
103094 } else {
103095 *old = *real_packet;
103096 }
103097
103098#else /* FREECIV_DELTA_PROTOCOL */
103099#ifdef FREECIV_JSON_CONNECTION
103100 field_addr.name = "id";
103101#endif /* FREECIV_JSON_CONNECTION */
103102
103103 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
103105 }
103106#endif /* FREECIV_DELTA_PROTOCOL */
103107
103109#undef FREE_PACKET_STRUCT
103110}
103111
103112static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
103113{
103114 const struct packet_web_cma_clear *real_packet = packet;
103115 int e;
103117
103118 log_packet_detailed("packet_web_cma_clear_100: sending info about ()");
103119
103120#ifdef FREECIV_DELTA_PROTOCOL
103122 struct packet_web_cma_clear *old;
103123 bool differ;
103124 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_CLEAR;
103125
103126 if (nullptr == *hash) {
103128 nullptr, nullptr, nullptr, destroy_packet_web_cma_clear);
103129 }
103130 BV_CLR_ALL(fields);
103131
103132 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103133 old = fc_malloc(sizeof(*old));
103134 /* temporary bitcopy just to insert correctly */
103135 *old = *real_packet;
103138 }
103139
103140 differ = (old->id != real_packet->id);
103141 if (differ) {
103142 BV_SET(fields, 0);
103143 }
103144#endif /* FREECIV_DELTA_PROTOCOL */
103145
103146#ifdef FREECIV_JSON_CONNECTION
103147 struct plocation field_addr;
103148 {
103149 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103152 }
103153#endif /* FREECIV_JSON_CONNECTION */
103154
103155#ifdef FREECIV_DELTA_PROTOCOL
103156#ifdef FREECIV_JSON_CONNECTION
103157 field_addr.name = "fields";
103158#endif /* FREECIV_JSON_CONNECTION */
103159 e = 0;
103160 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103161 if (e) {
103162 log_packet_detailed("fields bitvector error detected");
103163 }
103164
103165 if (BV_ISSET(fields, 0)) {
103166 log_packet_detailed(" field 'id' has changed");
103167
103168#ifdef FREECIV_JSON_CONNECTION
103169 field_addr.name = "id";
103170#endif /* FREECIV_JSON_CONNECTION */
103171 e = 0;
103172
103173 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103174
103175 if (e) {
103176 log_packet_detailed("'id' field error detected");
103177 }
103178 }
103179
103180 *old = *real_packet;
103181
103182#else /* FREECIV_DELTA_PROTOCOL */
103183#ifdef FREECIV_JSON_CONNECTION
103184 field_addr.name = "id";
103185#endif /* FREECIV_JSON_CONNECTION */
103186 e = 0;
103187
103188 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
103189
103190 if (e) {
103191 log_packet_detailed("'id' field error detected");
103192 }
103193#endif /* FREECIV_DELTA_PROTOCOL */
103194
103196}
103197
103199{
103200 if (!pc->used) {
103201 log_error("WARNING: trying to send data to the closed connection %s",
103203 return -1;
103204 }
103205 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet != nullptr, -1,
103206 "Handler for PACKET_WEB_CMA_CLEAR not installed");
103207 return pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet(pc, packet);
103208}
103209
103211{
103212 memset(packet, 0, sizeof(*packet));
103213}
103214
103215#define free_packet_web_player_info_addition(_packet) (void) 0
103216#define destroy_packet_web_player_info_addition free
103217
103218#ifdef FREECIV_DELTA_PROTOCOL
103220{
103221 const struct packet_web_player_info_addition *key = (const struct packet_web_player_info_addition *) vkey;
103222 genhash_val_t result = 0;
103223
103224 result += key->playerno;
103225
103226 result &= 0xFFFFFFFF;
103227 return result;
103228}
103229
103230static bool cmp_packet_web_player_info_addition_100(const void *vkey1, const void *vkey2)
103231{
103234 bool differ;
103235
103236 differ = (old->playerno != real_packet->playerno);
103237
103238 return !differ;
103239}
103241#endif /* FREECIV_DELTA_PROTOCOL */
103242
103244{
103245#define FREE_PACKET_STRUCT(_packet) free_packet_web_player_info_addition(_packet)
103247
103248#ifdef FREECIV_JSON_CONNECTION
103249 struct plocation field_addr;
103250 {
103251 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103254 }
103255#endif /* FREECIV_JSON_CONNECTION */
103256
103257#ifdef FREECIV_JSON_CONNECTION
103258 field_addr.name = "playerno";
103259#endif /* FREECIV_JSON_CONNECTION */
103260
103261 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->playerno)) {
103262 RECEIVE_PACKET_FIELD_ERROR(playerno);
103263 }
103264
103265 log_packet_detailed("packet_web_player_info_addition_100: got info about (%d)",
103266 real_packet->playerno);
103267
103268#ifdef FREECIV_DELTA_PROTOCOL
103271 struct genhash **hash = pc->phs.received + PACKET_WEB_PLAYER_INFO_ADDITION;
103272
103273 if (nullptr == *hash) {
103275 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
103276 }
103277
103278 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103279 *real_packet = *old;
103280 } else {
103281 /* packet is already initialized empty */
103282 log_packet_detailed(" no old info");
103283 }
103284
103285#ifdef FREECIV_JSON_CONNECTION
103286 field_addr.name = "fields";
103287#endif /* FREECIV_JSON_CONNECTION */
103288 DIO_BV_GET(&din, &field_addr, fields);
103289
103290 if (BV_ISSET(fields, 0)) {
103291 log_packet_detailed(" got field 'expected_income'");
103292
103293#ifdef FREECIV_JSON_CONNECTION
103294 field_addr.name = "expected_income";
103295#endif /* FREECIV_JSON_CONNECTION */
103296
103297 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
103298 RECEIVE_PACKET_FIELD_ERROR(expected_income);
103299 }
103300 }
103301
103302 if (nullptr == old) {
103303 old = fc_malloc(sizeof(*old));
103305 *old = *real_packet;
103307 } else {
103308 *old = *real_packet;
103309 }
103310
103311#else /* FREECIV_DELTA_PROTOCOL */
103312#ifdef FREECIV_JSON_CONNECTION
103313 field_addr.name = "expected_income";
103314#endif /* FREECIV_JSON_CONNECTION */
103315
103316 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
103317 RECEIVE_PACKET_FIELD_ERROR(expected_income);
103318 }
103319#endif /* FREECIV_DELTA_PROTOCOL */
103320
103322#undef FREE_PACKET_STRUCT
103323}
103324
103326{
103327 const struct packet_web_player_info_addition *real_packet = packet;
103328 int e;
103330
103331 log_packet_detailed("packet_web_player_info_addition_100: sending info about (%d)",
103332 real_packet->playerno);
103333
103334#ifdef FREECIV_DELTA_PROTOCOL
103337 bool differ;
103338 int different = 0;
103339 struct genhash **hash = pc->phs.sent + PACKET_WEB_PLAYER_INFO_ADDITION;
103340
103341 if (nullptr == *hash) {
103343 nullptr, nullptr, nullptr, destroy_packet_web_player_info_addition);
103344 }
103345 BV_CLR_ALL(fields);
103346
103347 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103348 old = fc_malloc(sizeof(*old));
103349 /* temporary bitcopy just to insert correctly */
103350 *old = *real_packet;
103353 different = 1; /* Force to send. */
103354 }
103355
103356 differ = (old->expected_income != real_packet->expected_income);
103357 if (differ) {
103358 different++;
103359 BV_SET(fields, 0);
103360 }
103361
103362 if (different == 0) {
103363 log_packet_detailed(" no change -> discard");
103365 }
103366#endif /* FREECIV_DELTA_PROTOCOL */
103367
103368#ifdef FREECIV_JSON_CONNECTION
103369 struct plocation field_addr;
103370 {
103371 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103374 }
103375#endif /* FREECIV_JSON_CONNECTION */
103376
103377#ifdef FREECIV_JSON_CONNECTION
103378 field_addr.name = "playerno";
103379#endif /* FREECIV_JSON_CONNECTION */
103380 e = 0;
103381
103382 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->playerno);
103383
103384 if (e) {
103385 log_packet_detailed("'playerno' field error detected");
103386 }
103387
103388#ifdef FREECIV_DELTA_PROTOCOL
103389#ifdef FREECIV_JSON_CONNECTION
103390 field_addr.name = "fields";
103391#endif /* FREECIV_JSON_CONNECTION */
103392 e = 0;
103393 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103394 if (e) {
103395 log_packet_detailed("fields bitvector error detected");
103396 }
103397
103398 if (BV_ISSET(fields, 0)) {
103399 log_packet_detailed(" field 'expected_income' has changed");
103400
103401#ifdef FREECIV_JSON_CONNECTION
103402 field_addr.name = "expected_income";
103403#endif /* FREECIV_JSON_CONNECTION */
103404 e = 0;
103405
103406 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
103407
103408 if (e) {
103409 log_packet_detailed("'expected_income' field error detected");
103410 }
103411 }
103412
103413 *old = *real_packet;
103414
103415#else /* FREECIV_DELTA_PROTOCOL */
103416#ifdef FREECIV_JSON_CONNECTION
103417 field_addr.name = "expected_income";
103418#endif /* FREECIV_JSON_CONNECTION */
103419 e = 0;
103420
103421 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
103422
103423 if (e) {
103424 log_packet_detailed("'expected_income' field error detected");
103425 }
103426#endif /* FREECIV_DELTA_PROTOCOL */
103427
103429}
103430
103432{
103433 if (!pc->used) {
103434 log_error("WARNING: trying to send data to the closed connection %s",
103436 return -1;
103437 }
103438 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet != nullptr, -1,
103439 "Handler for PACKET_WEB_PLAYER_INFO_ADDITION not installed");
103440 return pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet(pc, packet);
103441}
103442
103444{
103445 memset(packet, 0, sizeof(*packet));
103446}
103447
103448#define free_packet_web_ruleset_unit_addition(_packet) (void) 0
103449#define destroy_packet_web_ruleset_unit_addition free
103450
103451#ifdef FREECIV_DELTA_PROTOCOL
103453{
103454 const struct packet_web_ruleset_unit_addition *key = (const struct packet_web_ruleset_unit_addition *) vkey;
103455 genhash_val_t result = 0;
103456
103457 result += key->id;
103458
103459 result &= 0xFFFFFFFF;
103460 return result;
103461}
103462
103463static bool cmp_packet_web_ruleset_unit_addition_100(const void *vkey1, const void *vkey2)
103464{
103467 bool differ;
103468
103469 differ = (old->id != real_packet->id);
103470
103471 return !differ;
103472}
103474#endif /* FREECIV_DELTA_PROTOCOL */
103475
103477{
103478#define FREE_PACKET_STRUCT(_packet) free_packet_web_ruleset_unit_addition(_packet)
103480
103481#ifdef FREECIV_JSON_CONNECTION
103482 struct plocation field_addr;
103483 {
103484 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103487 }
103488#endif /* FREECIV_JSON_CONNECTION */
103489
103490#ifdef FREECIV_JSON_CONNECTION
103491 field_addr.name = "id";
103492#endif /* FREECIV_JSON_CONNECTION */
103493
103494 {
103495 int readin;
103496
103497 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
103499 }
103500 real_packet->id = readin;
103501 }
103502
103503 log_packet_detailed("packet_web_ruleset_unit_addition_100: got info about (%d)",
103504 real_packet->id);
103505
103506#ifdef FREECIV_DELTA_PROTOCOL
103509 struct genhash **hash = pc->phs.received + PACKET_WEB_RULESET_UNIT_ADDITION;
103510
103511 if (nullptr == *hash) {
103513 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
103514 }
103515
103516 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
103517 *real_packet = *old;
103518 } else {
103519 /* packet is already initialized empty */
103520 log_packet_detailed(" no old info");
103521 }
103522
103523#ifdef FREECIV_JSON_CONNECTION
103524 field_addr.name = "fields";
103525#endif /* FREECIV_JSON_CONNECTION */
103526 DIO_BV_GET(&din, &field_addr, fields);
103527
103528 if (BV_ISSET(fields, 0)) {
103529 log_packet_detailed(" got field 'utype_actions'");
103530
103531#ifdef FREECIV_JSON_CONNECTION
103532 field_addr.name = "utype_actions";
103533#endif /* FREECIV_JSON_CONNECTION */
103534
103535 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
103536 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
103537 }
103538 }
103539
103540 if (nullptr == old) {
103541 old = fc_malloc(sizeof(*old));
103543 *old = *real_packet;
103545 } else {
103546 *old = *real_packet;
103547 }
103548
103549#else /* FREECIV_DELTA_PROTOCOL */
103550#ifdef FREECIV_JSON_CONNECTION
103551 field_addr.name = "utype_actions";
103552#endif /* FREECIV_JSON_CONNECTION */
103553
103554 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
103555 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
103556 }
103557#endif /* FREECIV_DELTA_PROTOCOL */
103558
103560#undef FREE_PACKET_STRUCT
103561}
103562
103564{
103565 const struct packet_web_ruleset_unit_addition *real_packet = packet;
103566 int e;
103568
103569 log_packet_detailed("packet_web_ruleset_unit_addition_100: sending info about (%d)",
103570 real_packet->id);
103571
103572#ifdef FREECIV_DELTA_PROTOCOL
103575 bool differ;
103576 struct genhash **hash = pc->phs.sent + PACKET_WEB_RULESET_UNIT_ADDITION;
103577
103578 if (nullptr == *hash) {
103580 nullptr, nullptr, nullptr, destroy_packet_web_ruleset_unit_addition);
103581 }
103582 BV_CLR_ALL(fields);
103583
103584 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
103585 old = fc_malloc(sizeof(*old));
103586 /* temporary bitcopy just to insert correctly */
103587 *old = *real_packet;
103590 }
103591
103592 differ = !BV_ARE_EQUAL(old->utype_actions, real_packet->utype_actions);
103593 if (differ) {
103594 BV_SET(fields, 0);
103595 }
103596#endif /* FREECIV_DELTA_PROTOCOL */
103597
103598#ifdef FREECIV_JSON_CONNECTION
103599 struct plocation field_addr;
103600 {
103601 struct plocation *field_addr_tmp = plocation_field_new(nullptr);
103604 }
103605#endif /* FREECIV_JSON_CONNECTION */
103606
103607#ifdef FREECIV_JSON_CONNECTION
103608 field_addr.name = "id";
103609#endif /* FREECIV_JSON_CONNECTION */
103610 e = 0;
103611
103612 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
103613
103614 if (e) {
103615 log_packet_detailed("'id' field error detected");
103616 }
103617
103618#ifdef FREECIV_DELTA_PROTOCOL
103619#ifdef FREECIV_JSON_CONNECTION
103620 field_addr.name = "fields";
103621#endif /* FREECIV_JSON_CONNECTION */
103622 e = 0;
103623 e |= DIO_BV_PUT(&dout, &field_addr, fields);
103624 if (e) {
103625 log_packet_detailed("fields bitvector error detected");
103626 }
103627
103628 if (BV_ISSET(fields, 0)) {
103629 log_packet_detailed(" field 'utype_actions' has changed");
103630
103631#ifdef FREECIV_JSON_CONNECTION
103632 field_addr.name = "utype_actions";
103633#endif /* FREECIV_JSON_CONNECTION */
103634 e = 0;
103635
103636 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
103637
103638 if (e) {
103639 log_packet_detailed("'utype_actions' field error detected");
103640 }
103641 }
103642
103643 *old = *real_packet;
103644
103645#else /* FREECIV_DELTA_PROTOCOL */
103646#ifdef FREECIV_JSON_CONNECTION
103647 field_addr.name = "utype_actions";
103648#endif /* FREECIV_JSON_CONNECTION */
103649 e = 0;
103650
103651 e |= DIO_BV_PUT(&dout, &field_addr, real_packet->utype_actions);
103652
103653 if (e) {
103654 log_packet_detailed("'utype_actions' field error detected");
103655 }
103656#endif /* FREECIV_DELTA_PROTOCOL */
103657
103659}
103660
103662{
103663 if (!pc->used) {
103664 log_error("WARNING: trying to send data to the closed connection %s",
103666 return -1;
103667 }
103668 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet != nullptr, -1,
103669 "Handler for PACKET_WEB_RULESET_UNIT_ADDITION not installed");
103670 return pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet(pc, packet);
103671}
103672
103679
103681{
103682 phandlers->send[PACKET_CITY_RALLY_POINT].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_rally_point_100;
103684 phandlers->send[PACKET_WORKER_TASK].packet = (int(*)(struct connection *, const void *)) send_packet_worker_task_100;
103685 phandlers->receive[PACKET_WORKER_TASK] = (void *(*)(struct connection *)) receive_packet_worker_task_100;
103688 phandlers->send[PACKET_EDIT_STARTPOS].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_100;
103690 phandlers->send[PACKET_EDIT_STARTPOS_FULL].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_full_100;
103692 if (is_server()) {
103695 phandlers->send[PACKET_INVESTIGATE_STARTED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_started_100;
103696 phandlers->send[PACKET_INVESTIGATE_FINISHED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_finished_100;
103697 phandlers->send[PACKET_SERVER_JOIN_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_reply_100;
103698 phandlers->send[PACKET_AUTHENTICATION_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_req_100;
103700 phandlers->send[PACKET_ENDGAME_REPORT].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_report_100;
103701 phandlers->send[PACKET_ENDGAME_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_player_100;
103702 phandlers->send[PACKET_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_tile_info_100;
103703 phandlers->send[PACKET_GAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_game_info_100;
103704 phandlers->send[PACKET_CALENDAR_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_calendar_info_100;
103705 phandlers->send[PACKET_TIMEOUT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_timeout_info_100;
103706 phandlers->send[PACKET_MAP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_map_info_100;
103707 phandlers->send[PACKET_NUKE_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_nuke_tile_info_100;
103708 phandlers->send[PACKET_TEAM_NAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_team_name_info_100;
103709 phandlers->send[PACKET_ACHIEVEMENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_achievement_info_100;
103710 phandlers->send[PACKET_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_100;
103711 phandlers->send[PACKET_EARLY_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_early_chat_msg_100;
103712 phandlers->send[PACKET_CONNECT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_connect_msg_100;
103713 phandlers->send[PACKET_SERVER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_server_info_100;
103714 phandlers->send[PACKET_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_city_remove_100;
103715 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_100;
103716 phandlers->send[PACKET_CITY_NATIONALITIES].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_nationalities_100;
103717 phandlers->send[PACKET_CITY_UPDATE_COUNTERS].packet = (int(*)(struct connection *, const void *)) send_packet_city_update_counters_100;
103718 phandlers->send[PACKET_CITY_SHORT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_city_short_info_100;
103719 phandlers->send[PACKET_TRADE_ROUTE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_trade_route_info_100;
103721 phandlers->send[PACKET_CITY_SABOTAGE_LIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_sabotage_list_100;
103722 phandlers->send[PACKET_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_player_remove_100;
103723 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_100;
103724 phandlers->send[PACKET_PLAYER_DIPLSTATE].packet = (int(*)(struct connection *, const void *)) send_packet_player_diplstate_100;
103725 phandlers->send[PACKET_RESEARCH_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_research_info_100;
103726 phandlers->send[PACKET_UNKNOWN_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_unknown_research_100;
103727 phandlers->send[PACKET_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_remove_100;
103728 phandlers->send[PACKET_UNIT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_info_100;
103729 phandlers->send[PACKET_UNIT_SHORT_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_unit_short_info_100;
103730 phandlers->send[PACKET_UNIT_COMBAT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_combat_info_100;
103731 phandlers->send[PACKET_UNIT_ACTION_ANSWER].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_answer_100;
103732 phandlers->send[PACKET_UNIT_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_actions_100;
103738 phandlers->send[PACKET_PAGE_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_100;
103739 phandlers->send[PACKET_PAGE_MSG_PART].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_part_100;
103740 phandlers->send[PACKET_CONN_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_info_100;
103741 phandlers->send[PACKET_CONN_PING_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_ping_info_100;
103742 phandlers->send[PACKET_CONN_PING].no_packet = (int(*)(struct connection *)) send_packet_conn_ping_100;
103743 phandlers->send[PACKET_END_PHASE].no_packet = (int(*)(struct connection *)) send_packet_end_phase_100;
103744 phandlers->send[PACKET_START_PHASE].packet = (int(*)(struct connection *, const void *)) send_packet_start_phase_100;
103745 phandlers->send[PACKET_NEW_YEAR].packet = (int(*)(struct connection *, const void *)) send_packet_new_year_100;
103746 phandlers->send[PACKET_BEGIN_TURN].no_packet = (int(*)(struct connection *)) send_packet_begin_turn_100;
103747 phandlers->send[PACKET_END_TURN].no_packet = (int(*)(struct connection *)) send_packet_end_turn_100;
103749 phandlers->send[PACKET_THAW_CLIENT].no_packet = (int(*)(struct connection *)) send_packet_thaw_client_100;
103750 phandlers->send[PACKET_SPACESHIP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_info_100;
103751 phandlers->send[PACKET_RULESET_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_100;
103752 phandlers->send[PACKET_RULESET_UNIT_BONUS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_bonus_100;
103753 phandlers->send[PACKET_RULESET_UNIT_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_flag_100;
103755 phandlers->send[PACKET_RULESET_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_game_100;
103756 phandlers->send[PACKET_RULESET_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_specialist_100;
103758 phandlers->send[PACKET_RULESET_TECH].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_100;
103759 phandlers->send[PACKET_RULESET_TECH_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_class_100;
103760 phandlers->send[PACKET_RULESET_TECH_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_flag_100;
103761 phandlers->send[PACKET_RULESET_GOVERNMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_government_100;
103764 phandlers->send[PACKET_RULESET_NATION_SETS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_sets_100;
103766 phandlers->send[PACKET_RULESET_NATION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_100;
103767 phandlers->send[PACKET_NATION_AVAILABILITY].packet = (int(*)(struct connection *, const void *)) send_packet_nation_availability_100;
103768 phandlers->send[PACKET_RULESET_STYLE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_style_100;
103769 phandlers->send[PACKET_RULESET_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_city_100;
103770 phandlers->send[PACKET_RULESET_BUILDING].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_building_100;
103771 phandlers->send[PACKET_RULESET_IMPR_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_impr_flag_100;
103772 phandlers->send[PACKET_RULESET_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_100;
103773 phandlers->send[PACKET_RULESET_TERRAIN_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_flag_100;
103774 phandlers->send[PACKET_RULESET_UNIT_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_class_100;
103775 phandlers->send[PACKET_RULESET_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_100;
103776 phandlers->send[PACKET_RULESET_EXTRA_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_flag_100;
103777 phandlers->send[PACKET_RULESET_BASE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_base_100;
103778 phandlers->send[PACKET_RULESET_ROAD].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_road_100;
103779 phandlers->send[PACKET_RULESET_GOODS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_goods_100;
103780 phandlers->send[PACKET_RULESET_DISASTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_disaster_100;
103781 phandlers->send[PACKET_RULESET_ACHIEVEMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_achievement_100;
103782 phandlers->send[PACKET_RULESET_TRADE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_trade_100;
103783 phandlers->send[PACKET_RULESET_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_100;
103785 phandlers->send[PACKET_RULESET_ACTION_AUTO].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_auto_100;
103786 phandlers->send[PACKET_RULESET_COUNTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_counter_100;
103787 phandlers->send[PACKET_RULESET_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_music_100;
103788 phandlers->send[PACKET_RULESET_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_multiplier_100;
103789 phandlers->send[PACKET_RULESET_CLAUSE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_clause_100;
103790 phandlers->send[PACKET_RULESET_CONTROL].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_control_100;
103791 phandlers->send[PACKET_RULESET_SUMMARY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_summary_100;
103794 phandlers->send[PACKET_RULESET_CHOICES].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_choices_100;
103795 phandlers->send[PACKET_GAME_LOAD].packet = (int(*)(struct connection *, const void *)) send_packet_game_load_100;
103797 phandlers->send[PACKET_SERVER_SETTING_CONST].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_const_100;
103798 phandlers->send[PACKET_SERVER_SETTING_BOOL].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_bool_100;
103799 phandlers->send[PACKET_SERVER_SETTING_INT].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_int_100;
103800 phandlers->send[PACKET_SERVER_SETTING_STR].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_str_100;
103801 phandlers->send[PACKET_SERVER_SETTING_ENUM].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_enum_100;
103803 phandlers->send[PACKET_SET_TOPOLOGY].packet = (int(*)(struct connection *, const void *)) send_packet_set_topology_100;
103804 phandlers->send[PACKET_RULESET_EFFECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_effect_100;
103805 phandlers->send[PACKET_RULESET_RESOURCE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_resource_100;
103806 phandlers->send[PACKET_SCENARIO_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_info_100;
103807 phandlers->send[PACKET_SCENARIO_DESCRIPTION].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_description_100;
103808 phandlers->send[PACKET_VOTE_NEW].packet = (int(*)(struct connection *, const void *)) send_packet_vote_new_100;
103809 phandlers->send[PACKET_VOTE_UPDATE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_update_100;
103810 phandlers->send[PACKET_VOTE_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_remove_100;
103811 phandlers->send[PACKET_VOTE_RESOLVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_resolve_100;
103812 phandlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_fogofwar_state_100;
103813 phandlers->send[PACKET_EDIT_OBJECT_CREATED].packet = (int(*)(struct connection *, const void *)) send_packet_edit_object_created_100;
103814 phandlers->send[PACKET_PLAY_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_play_music_100;
103815 phandlers->send[PACKET_POPUP_IMAGE].packet = (int(*)(struct connection *, const void *)) send_packet_popup_image_100;
103816 phandlers->send[PACKET_SYNC_SERIAL_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_reply_100;
103817 phandlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_web_city_info_addition_100;
103825 phandlers->receive[PACKET_CITY_SELL] = (void *(*)(struct connection *)) receive_packet_city_sell_100;
103826 phandlers->receive[PACKET_CITY_BUY] = (void *(*)(struct connection *)) receive_packet_city_buy_100;
103827 phandlers->receive[PACKET_CITY_CHANGE] = (void *(*)(struct connection *)) receive_packet_city_change_100;
103832 phandlers->receive[PACKET_CITY_RENAME] = (void *(*)(struct connection *)) receive_packet_city_rename_100;
103845 phandlers->receive[PACKET_UNIT_ORDERS] = (void *(*)(struct connection *)) receive_packet_unit_orders_100;
103858 phandlers->receive[PACKET_REPORT_REQ] = (void *(*)(struct connection *)) receive_packet_report_req_100;
103859 phandlers->receive[PACKET_CONN_PONG] = (void *(*)(struct connection *)) receive_packet_conn_pong_100;
103861 phandlers->receive[PACKET_CLIENT_INFO] = (void *(*)(struct connection *)) receive_packet_client_info_100;
103867 phandlers->receive[PACKET_VOTE_SUBMIT] = (void *(*)(struct connection *)) receive_packet_vote_submit_100;
103868 phandlers->receive[PACKET_EDIT_MODE] = (void *(*)(struct connection *)) receive_packet_edit_mode_100;
103874 phandlers->receive[PACKET_EDIT_TILE] = (void *(*)(struct connection *)) receive_packet_edit_tile_100;
103878 phandlers->receive[PACKET_EDIT_UNIT] = (void *(*)(struct connection *)) receive_packet_edit_unit_100;
103881 phandlers->receive[PACKET_EDIT_CITY] = (void *(*)(struct connection *)) receive_packet_edit_city_100;
103884 phandlers->receive[PACKET_EDIT_PLAYER] = (void *(*)(struct connection *)) receive_packet_edit_player_100;
103886 phandlers->receive[PACKET_EDIT_GAME] = (void *(*)(struct connection *)) receive_packet_edit_game_100;
103888 phandlers->receive[PACKET_SYNC_SERIAL] = (void *(*)(struct connection *)) receive_packet_sync_serial_100;
103889 phandlers->receive[PACKET_WEB_CMA_SET] = (void *(*)(struct connection *)) receive_packet_web_cma_set_100;
103891 } else /* not is_server() */ {
103892 phandlers->send[PACKET_SERVER_JOIN_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_req_100;
103893 phandlers->send[PACKET_AUTHENTICATION_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_reply_100;
103894 phandlers->send[PACKET_NATION_SELECT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_nation_select_req_100;
103895 phandlers->send[PACKET_PLAYER_READY].packet = (int(*)(struct connection *, const void *)) send_packet_player_ready_100;
103896 phandlers->send[PACKET_CHAT_MSG_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_req_100;
103897 phandlers->send[PACKET_CITY_SELL].packet = (int(*)(struct connection *, const void *)) send_packet_city_sell_100;
103898 phandlers->send[PACKET_CITY_BUY].packet = (int(*)(struct connection *, const void *)) send_packet_city_buy_100;
103899 phandlers->send[PACKET_CITY_CHANGE].packet = (int(*)(struct connection *, const void *)) send_packet_city_change_100;
103900 phandlers->send[PACKET_CITY_WORKLIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_worklist_100;
103901 phandlers->send[PACKET_CITY_MAKE_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_specialist_100;
103902 phandlers->send[PACKET_CITY_MAKE_WORKER].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_worker_100;
103904 phandlers->send[PACKET_CITY_RENAME].packet = (int(*)(struct connection *, const void *)) send_packet_city_rename_100;
103905 phandlers->send[PACKET_CITY_OPTIONS_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_city_options_req_100;
103906 phandlers->send[PACKET_CITY_REFRESH].packet = (int(*)(struct connection *, const void *)) send_packet_city_refresh_100;
103908 phandlers->send[PACKET_PLAYER_PHASE_DONE].packet = (int(*)(struct connection *, const void *)) send_packet_player_phase_done_100;
103909 phandlers->send[PACKET_PLAYER_RATES].packet = (int(*)(struct connection *, const void *)) send_packet_player_rates_100;
103911 phandlers->send[PACKET_PLAYER_PLACE_INFRA].packet = (int(*)(struct connection *, const void *)) send_packet_player_place_infra_100;
103913 phandlers->send[PACKET_PLAYER_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_player_multiplier_100;
103914 phandlers->send[PACKET_PLAYER_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_player_research_100;
103915 phandlers->send[PACKET_PLAYER_TECH_GOAL].packet = (int(*)(struct connection *, const void *)) send_packet_player_tech_goal_100;
103916 phandlers->send[PACKET_UNIT_SSCS_SET].packet = (int(*)(struct connection *, const void *)) send_packet_unit_sscs_set_100;
103917 phandlers->send[PACKET_UNIT_ORDERS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_orders_100;
103919 phandlers->send[PACKET_UNIT_ACTION_QUERY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_query_100;
103920 phandlers->send[PACKET_UNIT_TYPE_UPGRADE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_type_upgrade_100;
103921 phandlers->send[PACKET_UNIT_DO_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_unit_do_action_100;
103922 phandlers->send[PACKET_UNIT_GET_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_get_actions_100;
103923 phandlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_change_activity_100;
103930 phandlers->send[PACKET_REPORT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_report_req_100;
103931 phandlers->send[PACKET_CONN_PONG].no_packet = (int(*)(struct connection *)) send_packet_conn_pong_100;
103933 phandlers->send[PACKET_CLIENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_client_info_100;
103935 phandlers->send[PACKET_SPACESHIP_PLACE].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_place_100;
103936 phandlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_single_want_hack_req_100;
103937 phandlers->send[PACKET_RULESET_SELECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_select_100;
103938 phandlers->send[PACKET_SAVE_SCENARIO].packet = (int(*)(struct connection *, const void *)) send_packet_save_scenario_100;
103939 phandlers->send[PACKET_VOTE_SUBMIT].packet = (int(*)(struct connection *, const void *)) send_packet_vote_submit_100;
103940 phandlers->send[PACKET_EDIT_MODE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_mode_100;
103943 phandlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet = (int(*)(struct connection *, const void *)) send_packet_edit_toggle_fogofwar_100;
103944 phandlers->send[PACKET_EDIT_TILE_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_terrain_100;
103945 phandlers->send[PACKET_EDIT_TILE_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_extra_100;
103946 phandlers->send[PACKET_EDIT_TILE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_100;
103947 phandlers->send[PACKET_EDIT_UNIT_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_create_100;
103948 phandlers->send[PACKET_EDIT_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_remove_100;
103950 phandlers->send[PACKET_EDIT_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_100;
103951 phandlers->send[PACKET_EDIT_CITY_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_create_100;
103952 phandlers->send[PACKET_EDIT_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_remove_100;
103953 phandlers->send[PACKET_EDIT_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_100;
103954 phandlers->send[PACKET_EDIT_PLAYER_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_create_100;
103955 phandlers->send[PACKET_EDIT_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_remove_100;
103956 phandlers->send[PACKET_EDIT_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_100;
103957 phandlers->send[PACKET_EDIT_PLAYER_VISION].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_vision_100;
103958 phandlers->send[PACKET_EDIT_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_edit_game_100;
103959 phandlers->send[PACKET_EDIT_SCENARIO_DESC].packet = (int(*)(struct connection *, const void *)) send_packet_edit_scenario_desc_100;
103960 phandlers->send[PACKET_SYNC_SERIAL].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_100;
103961 phandlers->send[PACKET_WEB_CMA_SET].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_set_100;
103962 phandlers->send[PACKET_WEB_CMA_CLEAR].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_clear_100;
103972 phandlers->receive[PACKET_TILE_INFO] = (void *(*)(struct connection *)) receive_packet_tile_info_100;
103973 phandlers->receive[PACKET_GAME_INFO] = (void *(*)(struct connection *)) receive_packet_game_info_100;
103976 phandlers->receive[PACKET_MAP_INFO] = (void *(*)(struct connection *)) receive_packet_map_info_100;
103980 phandlers->receive[PACKET_CHAT_MSG] = (void *(*)(struct connection *)) receive_packet_chat_msg_100;
103982 phandlers->receive[PACKET_CONNECT_MSG] = (void *(*)(struct connection *)) receive_packet_connect_msg_100;
103983 phandlers->receive[PACKET_SERVER_INFO] = (void *(*)(struct connection *)) receive_packet_server_info_100;
103984 phandlers->receive[PACKET_CITY_REMOVE] = (void *(*)(struct connection *)) receive_packet_city_remove_100;
103985 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_100;
103993 phandlers->receive[PACKET_PLAYER_INFO] = (void *(*)(struct connection *)) receive_packet_player_info_100;
103997 phandlers->receive[PACKET_UNIT_REMOVE] = (void *(*)(struct connection *)) receive_packet_unit_remove_100;
103998 phandlers->receive[PACKET_UNIT_INFO] = (void *(*)(struct connection *)) receive_packet_unit_info_100;
104008 phandlers->receive[PACKET_PAGE_MSG] = (void *(*)(struct connection *)) receive_packet_page_msg_100;
104010 phandlers->receive[PACKET_CONN_INFO] = (void *(*)(struct connection *)) receive_packet_conn_info_100;
104012 phandlers->receive[PACKET_CONN_PING] = (void *(*)(struct connection *)) receive_packet_conn_ping_100;
104013 phandlers->receive[PACKET_END_PHASE] = (void *(*)(struct connection *)) receive_packet_end_phase_100;
104014 phandlers->receive[PACKET_START_PHASE] = (void *(*)(struct connection *)) receive_packet_start_phase_100;
104015 phandlers->receive[PACKET_NEW_YEAR] = (void *(*)(struct connection *)) receive_packet_new_year_100;
104016 phandlers->receive[PACKET_BEGIN_TURN] = (void *(*)(struct connection *)) receive_packet_begin_turn_100;
104017 phandlers->receive[PACKET_END_TURN] = (void *(*)(struct connection *)) receive_packet_end_turn_100;
104019 phandlers->receive[PACKET_THAW_CLIENT] = (void *(*)(struct connection *)) receive_packet_thaw_client_100;
104065 phandlers->receive[PACKET_GAME_LOAD] = (void *(*)(struct connection *)) receive_packet_game_load_100;
104078 phandlers->receive[PACKET_VOTE_NEW] = (void *(*)(struct connection *)) receive_packet_vote_new_100;
104079 phandlers->receive[PACKET_VOTE_UPDATE] = (void *(*)(struct connection *)) receive_packet_vote_update_100;
104080 phandlers->receive[PACKET_VOTE_REMOVE] = (void *(*)(struct connection *)) receive_packet_vote_remove_100;
104084 phandlers->receive[PACKET_PLAY_MUSIC] = (void *(*)(struct connection *)) receive_packet_play_music_100;
104085 phandlers->receive[PACKET_POPUP_IMAGE] = (void *(*)(struct connection *)) receive_packet_popup_image_100;
104090 }
104091}
104092
104094 const char *capability)
104095{
104096}
104097
104098void packet_destroy(void *packet, enum packet_type type)
104099{
104100 static void (*const destroy_handlers[PACKET_LAST])(void *packet) = {
104304 };
104305 void (*handler)(void *packet) = (type < PACKET_LAST ? destroy_handlers[type] : nullptr);
104306
104307 if (handler == nullptr) {
104308 handler = free;
104309 log_error("packet_destroy(): Invalid packet type %d", type);
104310 }
104311
104312 handler(packet);
104313}
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