34 static void DNP3HexDump(uint8_t *data,
int len)
36 for (
int i = 0; i <
len; i++) {
37 printf(
"%02x ", data[i]);
47 DNP3PointList *items =
SCCalloc(1,
sizeof(*items));
63 if (point->
data != NULL) {
84 static int DNP3ReadUint8(
const uint8_t **buf, uint32_t *
len, uint8_t *out)
86 if (*
len < (
int)
sizeof(*out)) {
89 *out = *(uint8_t *)(*buf);
108 static int DNP3ReadUint16(
const uint8_t **buf, uint32_t *
len, uint16_t *out)
110 if (*
len < (
int)
sizeof(*out)) {
114 *buf +=
sizeof(*out);
115 *
len -=
sizeof(*out);
132 static int DNP3ReadUint24(
const uint8_t **buf, uint32_t *
len, uint32_t *out)
134 if (*
len < (
int)(
sizeof(uint8_t) * 3)) {
138 #if __BYTE_ORDER__ == __BIG_ENDIAN
139 *out = ((uint32_t)(*buf)[0] << 16) | ((uint32_t)(*buf)[1] << 8) |
141 #elif __BYTE_ORDER == __LITTLE_ENDIAN
142 *out = ((uint64_t)(*buf)[0]) | ((uint64_t)(*buf)[1] << 8) |
143 ((uint64_t)(*buf)[2] << 16);
165 static int DNP3ReadUint32(
const uint8_t **buf, uint32_t *
len, uint32_t *out)
167 if (*
len < (
int)
sizeof(*out)) {
171 *buf +=
sizeof(*out);
172 *
len -=
sizeof(*out);
189 static int DNP3ReadUint48(
const uint8_t **buf, uint32_t *
len, uint64_t *out)
191 if (*
len < (
int)(
sizeof(uint8_t) * 6)) {
195 #if __BYTE_ORDER__ == __BIG_ENDIAN
196 *out = ((uint64_t)(*buf)[0] << 40) | ((uint64_t)(*buf)[1] << 32) |
197 ((uint64_t)(*buf)[2] << 24) | ((uint64_t)(*buf)[3] << 16) |
198 ((uint64_t)(*buf)[4] << 8) | (uint64_t)(*buf)[5];
199 #elif __BYTE_ORDER == __LITTLE_ENDIAN
200 *out = ((uint64_t)(*buf)[0]) | ((uint64_t)(*buf)[1] << 8) |
201 ((uint64_t)(*buf)[2] << 16) | ((uint64_t)(*buf)[3] << 24) |
202 ((uint64_t)(*buf)[4] << 32) | ((uint64_t)(*buf)[5] << 40);
224 static int DNP3ReadFloat32(
const uint8_t **buf, uint32_t *
len,
float *out)
230 #if __BYTE_ORDER == __LITTLE_ENDIAN
231 *((uint8_t *)out + 0) = (*buf)[0];
232 *((uint8_t *)out + 1) = (*buf)[1];
233 *((uint8_t *)out + 2) = (*buf)[2];
234 *((uint8_t *)out + 3) = (*buf)[3];
236 *((uint8_t *)out + 3) = (*buf)[0];
237 *((uint8_t *)out + 2) = (*buf)[1];
238 *((uint8_t *)out + 1) = (*buf)[2];
239 *((uint8_t *)out + 0) = (*buf)[3];
260 static int DNP3ReadFloat64(
const uint8_t **buf, uint32_t *
len,
double *out)
266 #if __BYTE_ORDER == __LITTLE_ENDIAN
267 *((uint8_t *)out + 0) = (*buf)[0];
268 *((uint8_t *)out + 1) = (*buf)[1];
269 *((uint8_t *)out + 2) = (*buf)[2];
270 *((uint8_t *)out + 3) = (*buf)[3];
271 *((uint8_t *)out + 4) = (*buf)[4];
272 *((uint8_t *)out + 5) = (*buf)[5];
273 *((uint8_t *)out + 6) = (*buf)[6];
274 *((uint8_t *)out + 7) = (*buf)[7];
276 *((uint8_t *)out + 7) = (*buf)[0];
277 *((uint8_t *)out + 6) = (*buf)[1];
278 *((uint8_t *)out + 5) = (*buf)[2];
279 *((uint8_t *)out + 4) = (*buf)[3];
280 *((uint8_t *)out + 3) = (*buf)[4];
281 *((uint8_t *)out + 2) = (*buf)[5];
282 *((uint8_t *)out + 1) = (*buf)[6];
283 *((uint8_t *)out + 0) = (*buf)[7];
294 static int DNP3ReadPrefix(
295 const uint8_t **buf, uint32_t *
len, uint8_t prefix_code, uint32_t *out)
297 uint8_t prefix_len = 0;
299 switch (prefix_code) {
315 if (*
len < (uint32_t)prefix_len) {
319 switch (prefix_len) {
320 case sizeof(uint32_t):
321 if (!DNP3ReadUint32(buf,
len, out)) {
325 case sizeof(uint16_t): {
328 if (!DNP3ReadUint16(buf,
len, &val)) {
334 case sizeof(uint8_t): {
337 if (!DNP3ReadUint8(buf,
len, &val)) {
356 static int DNP3AddPoint(DNP3PointList *list,
void *
object, uint32_t point_index,
357 uint8_t prefix_code, uint32_t prefix)
364 point->
data = object;
366 point->
index = point_index;
367 switch (prefix_code) {
373 point->
index = prefix;
378 point->
size = prefix;
393 static int DNP3DecodeObjectG1V1(
const uint8_t **buf, uint32_t *
len,
394 uint8_t prefix_code, uint32_t start, uint32_t count,
395 DNP3PointList *points)
398 uint32_t bytes = (count / 8) + 1;
400 uint32_t point_index = start;
402 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
406 for (uint32_t i = 0; i < bytes; i++) {
410 if (!DNP3ReadUint8(buf,
len, &octet)) {
414 for (
int j = 0; j < 8 && count; j = j + 1) {
416 object =
SCCalloc(1,
sizeof(*
object));
421 object->state = (octet >> j) & 0x1;
423 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
436 if (
object != NULL) {
442 static int DNP3DecodeObjectG1V2(
const uint8_t **buf, uint32_t *
len,
443 uint8_t prefix_code, uint32_t start, uint32_t count,
444 DNP3PointList *points)
448 uint32_t point_index = start;
450 if (*
len < count/8) {
455 object =
SCCalloc(1,
sizeof(*
object));
460 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
466 if (!DNP3ReadUint8(buf,
len, &octet)) {
469 object->online = (octet >> 0) & 0x1;
470 object->restart = (octet >> 1) & 0x1;
471 object->comm_lost = (octet >> 2) & 0x1;
472 object->remote_forced = (octet >> 3) & 0x1;
473 object->local_forced = (octet >> 4) & 0x1;
474 object->chatter_filter = (octet >> 5) & 0x1;
475 object->reserved = (octet >> 6) & 0x1;
476 object->state = (octet >> 7) & 0x1;
479 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
489 if (
object != NULL) {
496 static int DNP3DecodeObjectG2V1(
const uint8_t **buf, uint32_t *
len,
497 uint8_t prefix_code, uint32_t start, uint32_t count,
498 DNP3PointList *points)
502 uint32_t point_index = start;
504 if (*
len < count/8) {
509 object =
SCCalloc(1,
sizeof(*
object));
514 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
518 if (!DNP3ReadUint8(buf,
len, &object->
state)) {
522 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
532 if (
object != NULL) {
539 static int DNP3DecodeObjectG2V2(
const uint8_t **buf, uint32_t *
len,
540 uint8_t prefix_code, uint32_t start, uint32_t count,
541 DNP3PointList *points)
545 uint32_t point_index = start;
547 if (*
len < count/8) {
552 object =
SCCalloc(1,
sizeof(*
object));
557 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
563 if (!DNP3ReadUint8(buf,
len, &octet)) {
566 object->online = (octet >> 0) & 0x1;
567 object->restart = (octet >> 1) & 0x1;
568 object->comm_lost = (octet >> 2) & 0x1;
569 object->remote_forced = (octet >> 3) & 0x1;
570 object->local_forced = (octet >> 4) & 0x1;
571 object->chatter_filter = (octet >> 5) & 0x1;
572 object->reserved = (octet >> 6) & 0x1;
573 object->state = (octet >> 7) & 0x1;
579 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
589 if (
object != NULL) {
596 static int DNP3DecodeObjectG2V3(
const uint8_t **buf, uint32_t *
len,
597 uint8_t prefix_code, uint32_t start, uint32_t count,
598 DNP3PointList *points)
602 uint32_t point_index = start;
604 if (*
len < count/8) {
609 object =
SCCalloc(1,
sizeof(*
object));
614 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
620 if (!DNP3ReadUint8(buf,
len, &octet)) {
623 object->online = (octet >> 0) & 0x1;
624 object->restart = (octet >> 1) & 0x1;
625 object->comm_lost = (octet >> 2) & 0x1;
626 object->remote_forced = (octet >> 3) & 0x1;
627 object->local_forced = (octet >> 4) & 0x1;
628 object->chatter_filter = (octet >> 5) & 0x1;
629 object->reserved = (octet >> 6) & 0x1;
630 object->state = (octet >> 7) & 0x1;
636 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
646 if (
object != NULL) {
653 static int DNP3DecodeObjectG3V1(
const uint8_t **buf, uint32_t *
len,
654 uint8_t prefix_code, uint32_t start, uint32_t count,
655 DNP3PointList *points)
658 uint32_t bytes = (count / 8) + 1;
660 uint32_t point_index = start;
662 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
666 for (uint32_t i = 0; i < bytes; i++) {
670 if (!DNP3ReadUint8(buf,
len, &octet)) {
674 for (
int j = 0; j < 8 && count; j = j + 2) {
676 object =
SCCalloc(1,
sizeof(*
object));
681 object->state = (octet >> j) & 0x3;
683 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
696 if (
object != NULL) {
702 static int DNP3DecodeObjectG3V2(
const uint8_t **buf, uint32_t *
len,
703 uint8_t prefix_code, uint32_t start, uint32_t count,
704 DNP3PointList *points)
708 uint32_t point_index = start;
710 if (*
len < count/8) {
715 object =
SCCalloc(1,
sizeof(*
object));
720 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
726 if (!DNP3ReadUint8(buf,
len, &octet)) {
729 object->online = (octet >> 0) & 0x1;
730 object->restart = (octet >> 1) & 0x1;
731 object->comm_lost = (octet >> 2) & 0x1;
732 object->remote_forced = (octet >> 3) & 0x1;
733 object->local_forced = (octet >> 4) & 0x1;
734 object->chatter_filter = (octet >> 5) & 0x1;
735 object->state = (octet >> 6) & 0x3;
738 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
748 if (
object != NULL) {
755 static int DNP3DecodeObjectG4V1(
const uint8_t **buf, uint32_t *
len,
756 uint8_t prefix_code, uint32_t start, uint32_t count,
757 DNP3PointList *points)
761 uint32_t point_index = start;
763 if (*
len < count/8) {
768 object =
SCCalloc(1,
sizeof(*
object));
773 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
779 if (!DNP3ReadUint8(buf,
len, &octet)) {
782 object->online = (octet >> 0) & 0x1;
783 object->restart = (octet >> 1) & 0x1;
784 object->comm_lost = (octet >> 2) & 0x1;
785 object->remote_forced = (octet >> 3) & 0x1;
786 object->local_forced = (octet >> 4) & 0x1;
787 object->chatter_filter = (octet >> 5) & 0x1;
788 object->state = (octet >> 6) & 0x3;
791 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
801 if (
object != NULL) {
808 static int DNP3DecodeObjectG4V2(
const uint8_t **buf, uint32_t *
len,
809 uint8_t prefix_code, uint32_t start, uint32_t count,
810 DNP3PointList *points)
814 uint32_t point_index = start;
816 if (*
len < count/8) {
821 object =
SCCalloc(1,
sizeof(*
object));
826 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
832 if (!DNP3ReadUint8(buf,
len, &octet)) {
835 object->online = (octet >> 0) & 0x1;
836 object->restart = (octet >> 1) & 0x1;
837 object->comm_lost = (octet >> 2) & 0x1;
838 object->remote_forced = (octet >> 3) & 0x1;
839 object->local_forced = (octet >> 4) & 0x1;
840 object->chatter_filter = (octet >> 5) & 0x1;
841 object->state = (octet >> 6) & 0x3;
847 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
857 if (
object != NULL) {
864 static int DNP3DecodeObjectG4V3(
const uint8_t **buf, uint32_t *
len,
865 uint8_t prefix_code, uint32_t start, uint32_t count,
866 DNP3PointList *points)
870 uint32_t point_index = start;
872 if (*
len < count/8) {
877 object =
SCCalloc(1,
sizeof(*
object));
882 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
888 if (!DNP3ReadUint8(buf,
len, &octet)) {
891 object->online = (octet >> 0) & 0x1;
892 object->restart = (octet >> 1) & 0x1;
893 object->comm_lost = (octet >> 2) & 0x1;
894 object->remote_forced = (octet >> 3) & 0x1;
895 object->local_forced = (octet >> 4) & 0x1;
896 object->chatter_filter = (octet >> 5) & 0x1;
897 object->state = (octet >> 6) & 0x3;
903 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
913 if (
object != NULL) {
920 static int DNP3DecodeObjectG10V1(
const uint8_t **buf, uint32_t *
len,
921 uint8_t prefix_code, uint32_t start, uint32_t count,
922 DNP3PointList *points)
925 uint32_t bytes = (count / 8) + 1;
927 uint32_t point_index = start;
929 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
933 for (uint32_t i = 0; i < bytes; i++) {
937 if (!DNP3ReadUint8(buf,
len, &octet)) {
941 for (
int j = 0; j < 8 && count; j = j + 1) {
943 object =
SCCalloc(1,
sizeof(*
object));
948 object->state = (octet >> j) & 0x1;
950 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
963 if (
object != NULL) {
969 static int DNP3DecodeObjectG10V2(
const uint8_t **buf, uint32_t *
len,
970 uint8_t prefix_code, uint32_t start, uint32_t count,
971 DNP3PointList *points)
975 uint32_t point_index = start;
977 if (*
len < count/8) {
982 object =
SCCalloc(1,
sizeof(*
object));
987 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
993 if (!DNP3ReadUint8(buf,
len, &octet)) {
996 object->online = (octet >> 0) & 0x1;
997 object->restart = (octet >> 1) & 0x1;
998 object->comm_lost = (octet >> 2) & 0x1;
999 object->remote_forced = (octet >> 3) & 0x1;
1000 object->local_forced = (octet >> 4) & 0x1;
1001 object->reserved0 = (octet >> 5) & 0x1;
1002 object->reserved1 = (octet >> 6) & 0x1;
1003 object->state = (octet >> 7) & 0x1;
1006 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1016 if (
object != NULL) {
1023 static int DNP3DecodeObjectG11V1(
const uint8_t **buf, uint32_t *
len,
1024 uint8_t prefix_code, uint32_t start, uint32_t count,
1025 DNP3PointList *points)
1028 uint32_t prefix = 0;
1029 uint32_t point_index = start;
1031 if (*
len < count/8) {
1036 object =
SCCalloc(1,
sizeof(*
object));
1041 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1047 if (!DNP3ReadUint8(buf,
len, &octet)) {
1050 object->online = (octet >> 0) & 0x1;
1051 object->restart = (octet >> 1) & 0x1;
1052 object->comm_lost = (octet >> 2) & 0x1;
1053 object->remote_forced = (octet >> 3) & 0x1;
1054 object->local_forced = (octet >> 4) & 0x1;
1055 object->reserved0 = (octet >> 5) & 0x1;
1056 object->reserved1 = (octet >> 6) & 0x1;
1057 object->state = (octet >> 7) & 0x1;
1060 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1070 if (
object != NULL) {
1077 static int DNP3DecodeObjectG11V2(
const uint8_t **buf, uint32_t *
len,
1078 uint8_t prefix_code, uint32_t start, uint32_t count,
1079 DNP3PointList *points)
1082 uint32_t prefix = 0;
1083 uint32_t point_index = start;
1085 if (*
len < count/8) {
1090 object =
SCCalloc(1,
sizeof(*
object));
1095 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1101 if (!DNP3ReadUint8(buf,
len, &octet)) {
1104 object->online = (octet >> 0) & 0x1;
1105 object->restart = (octet >> 1) & 0x1;
1106 object->comm_lost = (octet >> 2) & 0x1;
1107 object->remote_forced = (octet >> 3) & 0x1;
1108 object->local_forced = (octet >> 4) & 0x1;
1109 object->reserved0 = (octet >> 5) & 0x1;
1110 object->reserved1 = (octet >> 6) & 0x1;
1111 object->state = (octet >> 7) & 0x1;
1117 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1127 if (
object != NULL) {
1134 static int DNP3DecodeObjectG12V1(
const uint8_t **buf, uint32_t *
len,
1135 uint8_t prefix_code, uint32_t start, uint32_t count,
1136 DNP3PointList *points)
1139 uint32_t prefix = 0;
1140 uint32_t point_index = start;
1142 if (*
len < count/8) {
1147 object =
SCCalloc(1,
sizeof(*
object));
1152 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1158 if (!DNP3ReadUint8(buf,
len, &octet)) {
1161 object->op_type = (octet >> 0) & 0xf;
1162 object->qu = (octet >> 4) & 0x1;
1163 object->cr = (octet >> 5) & 0x1;
1164 object->tcc = (octet >> 6) & 0x3;
1166 if (!DNP3ReadUint8(buf,
len, &object->
count)) {
1169 if (!DNP3ReadUint32(buf,
len, &object->
ontime)) {
1172 if (!DNP3ReadUint32(buf,
len, &object->
offtime)) {
1177 if (!DNP3ReadUint8(buf,
len, &octet)) {
1180 object->status_code = (octet >> 0) & 0x7f;
1181 object->reserved = (octet >> 7) & 0x1;
1184 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1194 if (
object != NULL) {
1201 static int DNP3DecodeObjectG12V2(
const uint8_t **buf, uint32_t *
len,
1202 uint8_t prefix_code, uint32_t start, uint32_t count,
1203 DNP3PointList *points)
1206 uint32_t prefix = 0;
1207 uint32_t point_index = start;
1209 if (*
len < count/8) {
1214 object =
SCCalloc(1,
sizeof(*
object));
1219 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1225 if (!DNP3ReadUint8(buf,
len, &octet)) {
1228 object->op_type = (octet >> 0) & 0xf;
1229 object->qu = (octet >> 4) & 0x1;
1230 object->cr = (octet >> 5) & 0x1;
1231 object->tcc = (octet >> 6) & 0x3;
1233 if (!DNP3ReadUint8(buf,
len, &object->
count)) {
1236 if (!DNP3ReadUint32(buf,
len, &object->
ontime)) {
1239 if (!DNP3ReadUint32(buf,
len, &object->
offtime)) {
1244 if (!DNP3ReadUint8(buf,
len, &octet)) {
1247 object->status_code = (octet >> 0) & 0x7f;
1248 object->reserved = (octet >> 7) & 0x1;
1251 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1261 if (
object != NULL) {
1268 static int DNP3DecodeObjectG12V3(
const uint8_t **buf, uint32_t *
len,
1269 uint8_t prefix_code, uint32_t start, uint32_t count,
1270 DNP3PointList *points)
1273 uint32_t bytes = (count / 8) + 1;
1274 uint32_t prefix = 0;
1275 uint32_t point_index = start;
1277 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1281 for (uint32_t i = 0; i < bytes; i++) {
1285 if (!DNP3ReadUint8(buf,
len, &octet)) {
1289 for (
int j = 0; j < 8 && count; j = j + 1) {
1291 object =
SCCalloc(1,
sizeof(*
object));
1296 object->point = (octet >> j) & 0x1;
1298 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1311 if (
object != NULL) {
1317 static int DNP3DecodeObjectG13V1(
const uint8_t **buf, uint32_t *
len,
1318 uint8_t prefix_code, uint32_t start, uint32_t count,
1319 DNP3PointList *points)
1322 uint32_t prefix = 0;
1323 uint32_t point_index = start;
1325 if (*
len < count/8) {
1330 object =
SCCalloc(1,
sizeof(*
object));
1335 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1341 if (!DNP3ReadUint8(buf,
len, &octet)) {
1344 object->status_code = (octet >> 0) & 0x7f;
1345 object->commanded_state = (octet >> 7) & 0x1;
1348 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1358 if (
object != NULL) {
1365 static int DNP3DecodeObjectG13V2(
const uint8_t **buf, uint32_t *
len,
1366 uint8_t prefix_code, uint32_t start, uint32_t count,
1367 DNP3PointList *points)
1370 uint32_t prefix = 0;
1371 uint32_t point_index = start;
1373 if (*
len < count/8) {
1378 object =
SCCalloc(1,
sizeof(*
object));
1383 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1389 if (!DNP3ReadUint8(buf,
len, &octet)) {
1392 object->status_code = (octet >> 0) & 0x7f;
1393 object->commanded_state = (octet >> 7) & 0x1;
1399 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1409 if (
object != NULL) {
1416 static int DNP3DecodeObjectG20V1(
const uint8_t **buf, uint32_t *
len,
1417 uint8_t prefix_code, uint32_t start, uint32_t count,
1418 DNP3PointList *points)
1421 uint32_t prefix = 0;
1422 uint32_t point_index = start;
1424 if (*
len < count/8) {
1429 object =
SCCalloc(1,
sizeof(*
object));
1434 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1440 if (!DNP3ReadUint8(buf,
len, &octet)) {
1443 object->online = (octet >> 0) & 0x1;
1444 object->restart = (octet >> 1) & 0x1;
1445 object->comm_lost = (octet >> 2) & 0x1;
1446 object->remote_forced = (octet >> 3) & 0x1;
1447 object->local_forced = (octet >> 4) & 0x1;
1448 object->rollover = (octet >> 5) & 0x1;
1449 object->discontinuity = (octet >> 6) & 0x1;
1450 object->reserved0 = (octet >> 7) & 0x1;
1452 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1456 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1466 if (
object != NULL) {
1473 static int DNP3DecodeObjectG20V2(
const uint8_t **buf, uint32_t *
len,
1474 uint8_t prefix_code, uint32_t start, uint32_t count,
1475 DNP3PointList *points)
1478 uint32_t prefix = 0;
1479 uint32_t point_index = start;
1481 if (*
len < count/8) {
1486 object =
SCCalloc(1,
sizeof(*
object));
1491 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1497 if (!DNP3ReadUint8(buf,
len, &octet)) {
1500 object->online = (octet >> 0) & 0x1;
1501 object->restart = (octet >> 1) & 0x1;
1502 object->comm_lost = (octet >> 2) & 0x1;
1503 object->remote_forced = (octet >> 3) & 0x1;
1504 object->local_forced = (octet >> 4) & 0x1;
1505 object->rollover = (octet >> 5) & 0x1;
1506 object->discontinuity = (octet >> 6) & 0x1;
1507 object->reserved0 = (octet >> 7) & 0x1;
1509 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1513 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1523 if (
object != NULL) {
1530 static int DNP3DecodeObjectG20V3(
const uint8_t **buf, uint32_t *
len,
1531 uint8_t prefix_code, uint32_t start, uint32_t count,
1532 DNP3PointList *points)
1535 uint32_t prefix = 0;
1536 uint32_t point_index = start;
1538 if (*
len < count/8) {
1543 object =
SCCalloc(1,
sizeof(*
object));
1548 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1554 if (!DNP3ReadUint8(buf,
len, &octet)) {
1557 object->online = (octet >> 0) & 0x1;
1558 object->restart = (octet >> 1) & 0x1;
1559 object->comm_lost = (octet >> 2) & 0x1;
1560 object->remote_forced = (octet >> 3) & 0x1;
1561 object->local_forced = (octet >> 4) & 0x1;
1562 object->rollover = (octet >> 5) & 0x1;
1563 object->reserved0 = (octet >> 6) & 0x1;
1564 object->reserved1 = (octet >> 7) & 0x1;
1566 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1570 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1580 if (
object != NULL) {
1587 static int DNP3DecodeObjectG20V4(
const uint8_t **buf, uint32_t *
len,
1588 uint8_t prefix_code, uint32_t start, uint32_t count,
1589 DNP3PointList *points)
1592 uint32_t prefix = 0;
1593 uint32_t point_index = start;
1595 if (*
len < count/8) {
1600 object =
SCCalloc(1,
sizeof(*
object));
1605 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1611 if (!DNP3ReadUint8(buf,
len, &octet)) {
1614 object->online = (octet >> 0) & 0x1;
1615 object->restart = (octet >> 1) & 0x1;
1616 object->comm_lost = (octet >> 2) & 0x1;
1617 object->remote_forced = (octet >> 3) & 0x1;
1618 object->local_forced = (octet >> 4) & 0x1;
1619 object->rollover = (octet >> 5) & 0x1;
1620 object->reserved0 = (octet >> 6) & 0x1;
1621 object->reserved1 = (octet >> 7) & 0x1;
1623 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1627 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1637 if (
object != NULL) {
1644 static int DNP3DecodeObjectG20V5(
const uint8_t **buf, uint32_t *
len,
1645 uint8_t prefix_code, uint32_t start, uint32_t count,
1646 DNP3PointList *points)
1649 uint32_t prefix = 0;
1650 uint32_t point_index = start;
1652 if (*
len < count/8) {
1657 object =
SCCalloc(1,
sizeof(*
object));
1662 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1666 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1670 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1680 if (
object != NULL) {
1687 static int DNP3DecodeObjectG20V6(
const uint8_t **buf, uint32_t *
len,
1688 uint8_t prefix_code, uint32_t start, uint32_t count,
1689 DNP3PointList *points)
1692 uint32_t prefix = 0;
1693 uint32_t point_index = start;
1695 if (*
len < count/8) {
1700 object =
SCCalloc(1,
sizeof(*
object));
1705 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1709 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1713 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1723 if (
object != NULL) {
1730 static int DNP3DecodeObjectG20V7(
const uint8_t **buf, uint32_t *
len,
1731 uint8_t prefix_code, uint32_t start, uint32_t count,
1732 DNP3PointList *points)
1735 uint32_t prefix = 0;
1736 uint32_t point_index = start;
1738 if (*
len < count/8) {
1743 object =
SCCalloc(1,
sizeof(*
object));
1748 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1752 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1756 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1766 if (
object != NULL) {
1773 static int DNP3DecodeObjectG20V8(
const uint8_t **buf, uint32_t *
len,
1774 uint8_t prefix_code, uint32_t start, uint32_t count,
1775 DNP3PointList *points)
1778 uint32_t prefix = 0;
1779 uint32_t point_index = start;
1781 if (*
len < count/8) {
1786 object =
SCCalloc(1,
sizeof(*
object));
1791 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1795 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1799 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1809 if (
object != NULL) {
1816 static int DNP3DecodeObjectG21V1(
const uint8_t **buf, uint32_t *
len,
1817 uint8_t prefix_code, uint32_t start, uint32_t count,
1818 DNP3PointList *points)
1821 uint32_t prefix = 0;
1822 uint32_t point_index = start;
1824 if (*
len < count/8) {
1829 object =
SCCalloc(1,
sizeof(*
object));
1834 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1840 if (!DNP3ReadUint8(buf,
len, &octet)) {
1843 object->online = (octet >> 0) & 0x1;
1844 object->restart = (octet >> 1) & 0x1;
1845 object->comm_lost = (octet >> 2) & 0x1;
1846 object->remote_forced = (octet >> 3) & 0x1;
1847 object->local_forced = (octet >> 4) & 0x1;
1848 object->rollover = (octet >> 5) & 0x1;
1849 object->discontinuity = (octet >> 6) & 0x1;
1850 object->reserved0 = (octet >> 7) & 0x1;
1852 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1856 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1866 if (
object != NULL) {
1873 static int DNP3DecodeObjectG21V2(
const uint8_t **buf, uint32_t *
len,
1874 uint8_t prefix_code, uint32_t start, uint32_t count,
1875 DNP3PointList *points)
1878 uint32_t prefix = 0;
1879 uint32_t point_index = start;
1881 if (*
len < count/8) {
1886 object =
SCCalloc(1,
sizeof(*
object));
1891 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1897 if (!DNP3ReadUint8(buf,
len, &octet)) {
1900 object->online = (octet >> 0) & 0x1;
1901 object->restart = (octet >> 1) & 0x1;
1902 object->comm_lost = (octet >> 2) & 0x1;
1903 object->remote_forced = (octet >> 3) & 0x1;
1904 object->local_forced = (octet >> 4) & 0x1;
1905 object->rollover = (octet >> 5) & 0x1;
1906 object->discontinuity = (octet >> 6) & 0x1;
1907 object->reserved0 = (octet >> 7) & 0x1;
1909 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1913 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1923 if (
object != NULL) {
1930 static int DNP3DecodeObjectG21V3(
const uint8_t **buf, uint32_t *
len,
1931 uint8_t prefix_code, uint32_t start, uint32_t count,
1932 DNP3PointList *points)
1935 uint32_t prefix = 0;
1936 uint32_t point_index = start;
1938 if (*
len < count/8) {
1943 object =
SCCalloc(1,
sizeof(*
object));
1948 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1954 if (!DNP3ReadUint8(buf,
len, &octet)) {
1957 object->online = (octet >> 0) & 0x1;
1958 object->restart = (octet >> 1) & 0x1;
1959 object->comm_lost = (octet >> 2) & 0x1;
1960 object->remote_forced = (octet >> 3) & 0x1;
1961 object->local_forced = (octet >> 4) & 0x1;
1962 object->rollover = (octet >> 5) & 0x1;
1963 object->reserved0 = (octet >> 6) & 0x1;
1964 object->reserved1 = (octet >> 7) & 0x1;
1966 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1970 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1980 if (
object != NULL) {
1987 static int DNP3DecodeObjectG21V4(
const uint8_t **buf, uint32_t *
len,
1988 uint8_t prefix_code, uint32_t start, uint32_t count,
1989 DNP3PointList *points)
1992 uint32_t prefix = 0;
1993 uint32_t point_index = start;
1995 if (*
len < count/8) {
2000 object =
SCCalloc(1,
sizeof(*
object));
2005 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2011 if (!DNP3ReadUint8(buf,
len, &octet)) {
2014 object->online = (octet >> 0) & 0x1;
2015 object->restart = (octet >> 1) & 0x1;
2016 object->comm_lost = (octet >> 2) & 0x1;
2017 object->remote_forced = (octet >> 3) & 0x1;
2018 object->local_forced = (octet >> 4) & 0x1;
2019 object->rollover = (octet >> 5) & 0x1;
2020 object->reserved0 = (octet >> 6) & 0x1;
2021 object->reserved1 = (octet >> 7) & 0x1;
2023 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2027 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2037 if (
object != NULL) {
2044 static int DNP3DecodeObjectG21V5(
const uint8_t **buf, uint32_t *
len,
2045 uint8_t prefix_code, uint32_t start, uint32_t count,
2046 DNP3PointList *points)
2049 uint32_t prefix = 0;
2050 uint32_t point_index = start;
2052 if (*
len < count/8) {
2057 object =
SCCalloc(1,
sizeof(*
object));
2062 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2068 if (!DNP3ReadUint8(buf,
len, &octet)) {
2071 object->online = (octet >> 0) & 0x1;
2072 object->restart = (octet >> 1) & 0x1;
2073 object->comm_lost = (octet >> 2) & 0x1;
2074 object->remote_forced = (octet >> 3) & 0x1;
2075 object->local_forced = (octet >> 4) & 0x1;
2076 object->rollover = (octet >> 5) & 0x1;
2077 object->discontinuity = (octet >> 6) & 0x1;
2078 object->reserved1 = (octet >> 7) & 0x1;
2080 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2087 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2097 if (
object != NULL) {
2104 static int DNP3DecodeObjectG21V6(
const uint8_t **buf, uint32_t *
len,
2105 uint8_t prefix_code, uint32_t start, uint32_t count,
2106 DNP3PointList *points)
2109 uint32_t prefix = 0;
2110 uint32_t point_index = start;
2112 if (*
len < count/8) {
2117 object =
SCCalloc(1,
sizeof(*
object));
2122 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2128 if (!DNP3ReadUint8(buf,
len, &octet)) {
2131 object->online = (octet >> 0) & 0x1;
2132 object->restart = (octet >> 1) & 0x1;
2133 object->comm_lost = (octet >> 2) & 0x1;
2134 object->remote_forced = (octet >> 3) & 0x1;
2135 object->local_forced = (octet >> 4) & 0x1;
2136 object->rollover = (octet >> 5) & 0x1;
2137 object->discontinuity = (octet >> 6) & 0x1;
2138 object->reserved1 = (octet >> 7) & 0x1;
2140 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2147 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2157 if (
object != NULL) {
2164 static int DNP3DecodeObjectG21V7(
const uint8_t **buf, uint32_t *
len,
2165 uint8_t prefix_code, uint32_t start, uint32_t count,
2166 DNP3PointList *points)
2169 uint32_t prefix = 0;
2170 uint32_t point_index = start;
2172 if (*
len < count/8) {
2177 object =
SCCalloc(1,
sizeof(*
object));
2182 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2188 if (!DNP3ReadUint8(buf,
len, &octet)) {
2191 object->online = (octet >> 0) & 0x1;
2192 object->restart = (octet >> 1) & 0x1;
2193 object->comm_lost = (octet >> 2) & 0x1;
2194 object->remote_forced = (octet >> 3) & 0x1;
2195 object->local_forced = (octet >> 4) & 0x1;
2196 object->rollover = (octet >> 5) & 0x1;
2197 object->reserved0 = (octet >> 6) & 0x1;
2198 object->reserved1 = (octet >> 7) & 0x1;
2200 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2207 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2217 if (
object != NULL) {
2224 static int DNP3DecodeObjectG21V8(
const uint8_t **buf, uint32_t *
len,
2225 uint8_t prefix_code, uint32_t start, uint32_t count,
2226 DNP3PointList *points)
2229 uint32_t prefix = 0;
2230 uint32_t point_index = start;
2232 if (*
len < count/8) {
2237 object =
SCCalloc(1,
sizeof(*
object));
2242 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2248 if (!DNP3ReadUint8(buf,
len, &octet)) {
2251 object->online = (octet >> 0) & 0x1;
2252 object->restart = (octet >> 1) & 0x1;
2253 object->comm_lost = (octet >> 2) & 0x1;
2254 object->remote_forced = (octet >> 3) & 0x1;
2255 object->local_forced = (octet >> 4) & 0x1;
2256 object->rollover = (octet >> 5) & 0x1;
2257 object->reserved0 = (octet >> 6) & 0x1;
2258 object->reserved1 = (octet >> 7) & 0x1;
2260 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2267 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2277 if (
object != NULL) {
2284 static int DNP3DecodeObjectG21V9(
const uint8_t **buf, uint32_t *
len,
2285 uint8_t prefix_code, uint32_t start, uint32_t count,
2286 DNP3PointList *points)
2289 uint32_t prefix = 0;
2290 uint32_t point_index = start;
2292 if (*
len < count/8) {
2297 object =
SCCalloc(1,
sizeof(*
object));
2302 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2306 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2310 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2320 if (
object != NULL) {
2327 static int DNP3DecodeObjectG21V10(
const uint8_t **buf, uint32_t *
len,
2328 uint8_t prefix_code, uint32_t start, uint32_t count,
2329 DNP3PointList *points)
2332 uint32_t prefix = 0;
2333 uint32_t point_index = start;
2335 if (*
len < count/8) {
2340 object =
SCCalloc(1,
sizeof(*
object));
2345 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2349 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2353 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2363 if (
object != NULL) {
2370 static int DNP3DecodeObjectG21V11(
const uint8_t **buf, uint32_t *
len,
2371 uint8_t prefix_code, uint32_t start, uint32_t count,
2372 DNP3PointList *points)
2375 uint32_t prefix = 0;
2376 uint32_t point_index = start;
2378 if (*
len < count/8) {
2383 object =
SCCalloc(1,
sizeof(*
object));
2388 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2392 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2396 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2406 if (
object != NULL) {
2413 static int DNP3DecodeObjectG21V12(
const uint8_t **buf, uint32_t *
len,
2414 uint8_t prefix_code, uint32_t start, uint32_t count,
2415 DNP3PointList *points)
2418 uint32_t prefix = 0;
2419 uint32_t point_index = start;
2421 if (*
len < count/8) {
2426 object =
SCCalloc(1,
sizeof(*
object));
2431 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2435 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2439 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2449 if (
object != NULL) {
2456 static int DNP3DecodeObjectG22V1(
const uint8_t **buf, uint32_t *
len,
2457 uint8_t prefix_code, uint32_t start, uint32_t count,
2458 DNP3PointList *points)
2461 uint32_t prefix = 0;
2462 uint32_t point_index = start;
2464 if (*
len < count/8) {
2469 object =
SCCalloc(1,
sizeof(*
object));
2474 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2480 if (!DNP3ReadUint8(buf,
len, &octet)) {
2483 object->online = (octet >> 0) & 0x1;
2484 object->restart = (octet >> 1) & 0x1;
2485 object->comm_lost = (octet >> 2) & 0x1;
2486 object->remote_forced = (octet >> 3) & 0x1;
2487 object->local_forced = (octet >> 4) & 0x1;
2488 object->rollover = (octet >> 5) & 0x1;
2489 object->discontinuity = (octet >> 6) & 0x1;
2490 object->reserved0 = (octet >> 7) & 0x1;
2492 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2496 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2506 if (
object != NULL) {
2513 static int DNP3DecodeObjectG22V2(
const uint8_t **buf, uint32_t *
len,
2514 uint8_t prefix_code, uint32_t start, uint32_t count,
2515 DNP3PointList *points)
2518 uint32_t prefix = 0;
2519 uint32_t point_index = start;
2521 if (*
len < count/8) {
2526 object =
SCCalloc(1,
sizeof(*
object));
2531 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2537 if (!DNP3ReadUint8(buf,
len, &octet)) {
2540 object->online = (octet >> 0) & 0x1;
2541 object->restart = (octet >> 1) & 0x1;
2542 object->comm_lost = (octet >> 2) & 0x1;
2543 object->remote_forced = (octet >> 3) & 0x1;
2544 object->local_forced = (octet >> 4) & 0x1;
2545 object->rollover = (octet >> 5) & 0x1;
2546 object->discontinuity = (octet >> 6) & 0x1;
2547 object->reserved0 = (octet >> 7) & 0x1;
2549 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2553 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2563 if (
object != NULL) {
2570 static int DNP3DecodeObjectG22V3(
const uint8_t **buf, uint32_t *
len,
2571 uint8_t prefix_code, uint32_t start, uint32_t count,
2572 DNP3PointList *points)
2575 uint32_t prefix = 0;
2576 uint32_t point_index = start;
2578 if (*
len < count/8) {
2583 object =
SCCalloc(1,
sizeof(*
object));
2588 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2594 if (!DNP3ReadUint8(buf,
len, &octet)) {
2597 object->online = (octet >> 0) & 0x1;
2598 object->restart = (octet >> 1) & 0x1;
2599 object->comm_lost = (octet >> 2) & 0x1;
2600 object->remote_forced = (octet >> 3) & 0x1;
2601 object->local_forced = (octet >> 4) & 0x1;
2602 object->rollover = (octet >> 5) & 0x1;
2603 object->reserved0 = (octet >> 6) & 0x1;
2604 object->reserved1 = (octet >> 7) & 0x1;
2606 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2610 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2620 if (
object != NULL) {
2627 static int DNP3DecodeObjectG22V4(
const uint8_t **buf, uint32_t *
len,
2628 uint8_t prefix_code, uint32_t start, uint32_t count,
2629 DNP3PointList *points)
2632 uint32_t prefix = 0;
2633 uint32_t point_index = start;
2635 if (*
len < count/8) {
2640 object =
SCCalloc(1,
sizeof(*
object));
2645 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2651 if (!DNP3ReadUint8(buf,
len, &octet)) {
2654 object->online = (octet >> 0) & 0x1;
2655 object->restart = (octet >> 1) & 0x1;
2656 object->comm_lost = (octet >> 2) & 0x1;
2657 object->remote_forced = (octet >> 3) & 0x1;
2658 object->local_forced = (octet >> 4) & 0x1;
2659 object->rollover = (octet >> 5) & 0x1;
2660 object->reserved0 = (octet >> 6) & 0x1;
2661 object->reserved1 = (octet >> 7) & 0x1;
2663 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2667 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2677 if (
object != NULL) {
2684 static int DNP3DecodeObjectG22V5(
const uint8_t **buf, uint32_t *
len,
2685 uint8_t prefix_code, uint32_t start, uint32_t count,
2686 DNP3PointList *points)
2689 uint32_t prefix = 0;
2690 uint32_t point_index = start;
2692 if (*
len < count/8) {
2697 object =
SCCalloc(1,
sizeof(*
object));
2702 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2708 if (!DNP3ReadUint8(buf,
len, &octet)) {
2711 object->online = (octet >> 0) & 0x1;
2712 object->restart = (octet >> 1) & 0x1;
2713 object->comm_lost = (octet >> 2) & 0x1;
2714 object->remote_forced = (octet >> 3) & 0x1;
2715 object->local_forced = (octet >> 4) & 0x1;
2716 object->rollover = (octet >> 5) & 0x1;
2717 object->reserved0 = (octet >> 6) & 0x1;
2718 object->reserved1 = (octet >> 7) & 0x1;
2720 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2727 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2737 if (
object != NULL) {
2744 static int DNP3DecodeObjectG22V6(
const uint8_t **buf, uint32_t *
len,
2745 uint8_t prefix_code, uint32_t start, uint32_t count,
2746 DNP3PointList *points)
2749 uint32_t prefix = 0;
2750 uint32_t point_index = start;
2752 if (*
len < count/8) {
2757 object =
SCCalloc(1,
sizeof(*
object));
2762 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2768 if (!DNP3ReadUint8(buf,
len, &octet)) {
2771 object->online = (octet >> 0) & 0x1;
2772 object->restart = (octet >> 1) & 0x1;
2773 object->comm_lost = (octet >> 2) & 0x1;
2774 object->remote_forced = (octet >> 3) & 0x1;
2775 object->local_forced = (octet >> 4) & 0x1;
2776 object->rollover = (octet >> 5) & 0x1;
2777 object->discontinuity = (octet >> 6) & 0x1;
2778 object->reserved0 = (octet >> 7) & 0x1;
2780 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2787 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2797 if (
object != NULL) {
2804 static int DNP3DecodeObjectG22V7(
const uint8_t **buf, uint32_t *
len,
2805 uint8_t prefix_code, uint32_t start, uint32_t count,
2806 DNP3PointList *points)
2809 uint32_t prefix = 0;
2810 uint32_t point_index = start;
2812 if (*
len < count/8) {
2817 object =
SCCalloc(1,
sizeof(*
object));
2822 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2828 if (!DNP3ReadUint8(buf,
len, &octet)) {
2831 object->online = (octet >> 0) & 0x1;
2832 object->restart = (octet >> 1) & 0x1;
2833 object->comm_lost = (octet >> 2) & 0x1;
2834 object->remote_forced = (octet >> 3) & 0x1;
2835 object->local_forced = (octet >> 4) & 0x1;
2836 object->rollover = (octet >> 5) & 0x1;
2837 object->reserved0 = (octet >> 6) & 0x1;
2838 object->reserved1 = (octet >> 7) & 0x1;
2840 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2847 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2857 if (
object != NULL) {
2864 static int DNP3DecodeObjectG22V8(
const uint8_t **buf, uint32_t *
len,
2865 uint8_t prefix_code, uint32_t start, uint32_t count,
2866 DNP3PointList *points)
2869 uint32_t prefix = 0;
2870 uint32_t point_index = start;
2872 if (*
len < count/8) {
2877 object =
SCCalloc(1,
sizeof(*
object));
2882 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2888 if (!DNP3ReadUint8(buf,
len, &octet)) {
2891 object->online = (octet >> 0) & 0x1;
2892 object->restart = (octet >> 1) & 0x1;
2893 object->comm_lost = (octet >> 2) & 0x1;
2894 object->remote_forced = (octet >> 3) & 0x1;
2895 object->local_forced = (octet >> 4) & 0x1;
2896 object->rollover = (octet >> 5) & 0x1;
2897 object->reserved0 = (octet >> 6) & 0x1;
2898 object->reserved1 = (octet >> 7) & 0x1;
2900 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2907 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2917 if (
object != NULL) {
2924 static int DNP3DecodeObjectG23V1(
const uint8_t **buf, uint32_t *
len,
2925 uint8_t prefix_code, uint32_t start, uint32_t count,
2926 DNP3PointList *points)
2929 uint32_t prefix = 0;
2930 uint32_t point_index = start;
2932 if (*
len < count/8) {
2937 object =
SCCalloc(1,
sizeof(*
object));
2942 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2948 if (!DNP3ReadUint8(buf,
len, &octet)) {
2951 object->online = (octet >> 0) & 0x1;
2952 object->restart = (octet >> 1) & 0x1;
2953 object->comm_lost = (octet >> 2) & 0x1;
2954 object->remote_forced = (octet >> 3) & 0x1;
2955 object->local_forced = (octet >> 4) & 0x1;
2956 object->rollover = (octet >> 5) & 0x1;
2957 object->discontinuity = (octet >> 6) & 0x1;
2958 object->reserved0 = (octet >> 7) & 0x1;
2960 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2964 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2974 if (
object != NULL) {
2981 static int DNP3DecodeObjectG23V2(
const uint8_t **buf, uint32_t *
len,
2982 uint8_t prefix_code, uint32_t start, uint32_t count,
2983 DNP3PointList *points)
2986 uint32_t prefix = 0;
2987 uint32_t point_index = start;
2989 if (*
len < count/8) {
2994 object =
SCCalloc(1,
sizeof(*
object));
2999 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3005 if (!DNP3ReadUint8(buf,
len, &octet)) {
3008 object->online = (octet >> 0) & 0x1;
3009 object->restart = (octet >> 1) & 0x1;
3010 object->comm_lost = (octet >> 2) & 0x1;
3011 object->remote_forced = (octet >> 3) & 0x1;
3012 object->local_forced = (octet >> 4) & 0x1;
3013 object->rollover = (octet >> 5) & 0x1;
3014 object->reserved0 = (octet >> 6) & 0x1;
3015 object->reserved1 = (octet >> 7) & 0x1;
3017 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3021 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3031 if (
object != NULL) {
3038 static int DNP3DecodeObjectG23V3(
const uint8_t **buf, uint32_t *
len,
3039 uint8_t prefix_code, uint32_t start, uint32_t count,
3040 DNP3PointList *points)
3043 uint32_t prefix = 0;
3044 uint32_t point_index = start;
3046 if (*
len < count/8) {
3051 object =
SCCalloc(1,
sizeof(*
object));
3056 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3062 if (!DNP3ReadUint8(buf,
len, &octet)) {
3065 object->online = (octet >> 0) & 0x1;
3066 object->restart = (octet >> 1) & 0x1;
3067 object->comm_lost = (octet >> 2) & 0x1;
3068 object->remote_forced = (octet >> 3) & 0x1;
3069 object->local_forced = (octet >> 4) & 0x1;
3070 object->rollover = (octet >> 5) & 0x1;
3071 object->reserved0 = (octet >> 6) & 0x1;
3072 object->reserved1 = (octet >> 7) & 0x1;
3074 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3078 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3088 if (
object != NULL) {
3095 static int DNP3DecodeObjectG23V4(
const uint8_t **buf, uint32_t *
len,
3096 uint8_t prefix_code, uint32_t start, uint32_t count,
3097 DNP3PointList *points)
3100 uint32_t prefix = 0;
3101 uint32_t point_index = start;
3103 if (*
len < count/8) {
3108 object =
SCCalloc(1,
sizeof(*
object));
3113 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3119 if (!DNP3ReadUint8(buf,
len, &octet)) {
3122 object->online = (octet >> 0) & 0x1;
3123 object->restart = (octet >> 1) & 0x1;
3124 object->comm_lost = (octet >> 2) & 0x1;
3125 object->remote_forced = (octet >> 3) & 0x1;
3126 object->local_forced = (octet >> 4) & 0x1;
3127 object->rollover = (octet >> 5) & 0x1;
3128 object->reserved0 = (octet >> 6) & 0x1;
3129 object->reserved1 = (octet >> 7) & 0x1;
3131 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3135 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3145 if (
object != NULL) {
3152 static int DNP3DecodeObjectG23V5(
const uint8_t **buf, uint32_t *
len,
3153 uint8_t prefix_code, uint32_t start, uint32_t count,
3154 DNP3PointList *points)
3157 uint32_t prefix = 0;
3158 uint32_t point_index = start;
3160 if (*
len < count/8) {
3165 object =
SCCalloc(1,
sizeof(*
object));
3170 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3176 if (!DNP3ReadUint8(buf,
len, &octet)) {
3179 object->online = (octet >> 0) & 0x1;
3180 object->restart = (octet >> 1) & 0x1;
3181 object->comm_lost = (octet >> 2) & 0x1;
3182 object->remote_forced = (octet >> 3) & 0x1;
3183 object->local_forced = (octet >> 4) & 0x1;
3184 object->rollover = (octet >> 5) & 0x1;
3185 object->discontinuity = (octet >> 6) & 0x1;
3186 object->reserved0 = (octet >> 7) & 0x1;
3188 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3195 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3205 if (
object != NULL) {
3212 static int DNP3DecodeObjectG23V6(
const uint8_t **buf, uint32_t *
len,
3213 uint8_t prefix_code, uint32_t start, uint32_t count,
3214 DNP3PointList *points)
3217 uint32_t prefix = 0;
3218 uint32_t point_index = start;
3220 if (*
len < count/8) {
3225 object =
SCCalloc(1,
sizeof(*
object));
3230 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3236 if (!DNP3ReadUint8(buf,
len, &octet)) {
3239 object->online = (octet >> 0) & 0x1;
3240 object->restart = (octet >> 1) & 0x1;
3241 object->comm_lost = (octet >> 2) & 0x1;
3242 object->remote_forced = (octet >> 3) & 0x1;
3243 object->local_forced = (octet >> 4) & 0x1;
3244 object->rollover = (octet >> 5) & 0x1;
3245 object->discontinuity = (octet >> 6) & 0x1;
3246 object->reserved0 = (octet >> 7) & 0x1;
3248 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3255 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3265 if (
object != NULL) {
3272 static int DNP3DecodeObjectG23V7(
const uint8_t **buf, uint32_t *
len,
3273 uint8_t prefix_code, uint32_t start, uint32_t count,
3274 DNP3PointList *points)
3277 uint32_t prefix = 0;
3278 uint32_t point_index = start;
3280 if (*
len < count/8) {
3285 object =
SCCalloc(1,
sizeof(*
object));
3290 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3296 if (!DNP3ReadUint8(buf,
len, &octet)) {
3299 object->online = (octet >> 0) & 0x1;
3300 object->restart = (octet >> 1) & 0x1;
3301 object->comm_lost = (octet >> 2) & 0x1;
3302 object->remote_forced = (octet >> 3) & 0x1;
3303 object->local_forced = (octet >> 4) & 0x1;
3304 object->rollover = (octet >> 5) & 0x1;
3305 object->reserved0 = (octet >> 6) & 0x1;
3306 object->reserved1 = (octet >> 7) & 0x1;
3308 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3315 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3325 if (
object != NULL) {
3332 static int DNP3DecodeObjectG23V8(
const uint8_t **buf, uint32_t *
len,
3333 uint8_t prefix_code, uint32_t start, uint32_t count,
3334 DNP3PointList *points)
3337 uint32_t prefix = 0;
3338 uint32_t point_index = start;
3340 if (*
len < count/8) {
3345 object =
SCCalloc(1,
sizeof(*
object));
3350 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3356 if (!DNP3ReadUint8(buf,
len, &octet)) {
3359 object->online = (octet >> 0) & 0x1;
3360 object->restart = (octet >> 1) & 0x1;
3361 object->comm_lost = (octet >> 2) & 0x1;
3362 object->remote_forced = (octet >> 3) & 0x1;
3363 object->local_forced = (octet >> 4) & 0x1;
3364 object->rollover = (octet >> 5) & 0x1;
3365 object->reserved0 = (octet >> 6) & 0x1;
3366 object->reserved1 = (octet >> 7) & 0x1;
3368 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3375 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3385 if (
object != NULL) {
3392 static int DNP3DecodeObjectG30V1(
const uint8_t **buf, uint32_t *
len,
3393 uint8_t prefix_code, uint32_t start, uint32_t count,
3394 DNP3PointList *points)
3397 uint32_t prefix = 0;
3398 uint32_t point_index = start;
3400 if (*
len < count/8) {
3405 object =
SCCalloc(1,
sizeof(*
object));
3410 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3416 if (!DNP3ReadUint8(buf,
len, &octet)) {
3419 object->online = (octet >> 0) & 0x1;
3420 object->restart = (octet >> 1) & 0x1;
3421 object->comm_lost = (octet >> 2) & 0x1;
3422 object->remote_forced = (octet >> 3) & 0x1;
3423 object->local_forced = (octet >> 4) & 0x1;
3424 object->over_range = (octet >> 5) & 0x1;
3425 object->reference_err = (octet >> 6) & 0x1;
3426 object->reserved0 = (octet >> 7) & 0x1;
3428 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3432 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3442 if (
object != NULL) {
3449 static int DNP3DecodeObjectG30V2(
const uint8_t **buf, uint32_t *
len,
3450 uint8_t prefix_code, uint32_t start, uint32_t count,
3451 DNP3PointList *points)
3454 uint32_t prefix = 0;
3455 uint32_t point_index = start;
3457 if (*
len < count/8) {
3462 object =
SCCalloc(1,
sizeof(*
object));
3467 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3473 if (!DNP3ReadUint8(buf,
len, &octet)) {
3476 object->online = (octet >> 0) & 0x1;
3477 object->restart = (octet >> 1) & 0x1;
3478 object->comm_lost = (octet >> 2) & 0x1;
3479 object->remote_forced = (octet >> 3) & 0x1;
3480 object->local_forced = (octet >> 4) & 0x1;
3481 object->over_range = (octet >> 5) & 0x1;
3482 object->reference_err = (octet >> 6) & 0x1;
3483 object->reserved0 = (octet >> 7) & 0x1;
3485 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3489 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3499 if (
object != NULL) {
3506 static int DNP3DecodeObjectG30V3(
const uint8_t **buf, uint32_t *
len,
3507 uint8_t prefix_code, uint32_t start, uint32_t count,
3508 DNP3PointList *points)
3511 uint32_t prefix = 0;
3512 uint32_t point_index = start;
3514 if (*
len < count/8) {
3519 object =
SCCalloc(1,
sizeof(*
object));
3524 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3528 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
3532 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3542 if (
object != NULL) {
3549 static int DNP3DecodeObjectG30V4(
const uint8_t **buf, uint32_t *
len,
3550 uint8_t prefix_code, uint32_t start, uint32_t count,
3551 DNP3PointList *points)
3554 uint32_t prefix = 0;
3555 uint32_t point_index = start;
3557 if (*
len < count/8) {
3562 object =
SCCalloc(1,
sizeof(*
object));
3567 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3571 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
3575 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3585 if (
object != NULL) {
3592 static int DNP3DecodeObjectG30V5(
const uint8_t **buf, uint32_t *
len,
3593 uint8_t prefix_code, uint32_t start, uint32_t count,
3594 DNP3PointList *points)
3597 uint32_t prefix = 0;
3598 uint32_t point_index = start;
3600 if (*
len < count/8) {
3605 object =
SCCalloc(1,
sizeof(*
object));
3610 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3616 if (!DNP3ReadUint8(buf,
len, &octet)) {
3619 object->online = (octet >> 0) & 0x1;
3620 object->restart = (octet >> 1) & 0x1;
3621 object->comm_lost = (octet >> 2) & 0x1;
3622 object->remote_forced = (octet >> 3) & 0x1;
3623 object->local_forced = (octet >> 4) & 0x1;
3624 object->over_range = (octet >> 5) & 0x1;
3625 object->reference_err = (octet >> 6) & 0x1;
3626 object->reserved0 = (octet >> 7) & 0x1;
3628 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
3632 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3642 if (
object != NULL) {
3649 static int DNP3DecodeObjectG30V6(
const uint8_t **buf, uint32_t *
len,
3650 uint8_t prefix_code, uint32_t start, uint32_t count,
3651 DNP3PointList *points)
3654 uint32_t prefix = 0;
3655 uint32_t point_index = start;
3657 if (*
len < count/8) {
3662 object =
SCCalloc(1,
sizeof(*
object));
3667 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3673 if (!DNP3ReadUint8(buf,
len, &octet)) {
3676 object->online = (octet >> 0) & 0x1;
3677 object->restart = (octet >> 1) & 0x1;
3678 object->comm_lost = (octet >> 2) & 0x1;
3679 object->remote_forced = (octet >> 3) & 0x1;
3680 object->local_forced = (octet >> 4) & 0x1;
3681 object->over_range = (octet >> 5) & 0x1;
3682 object->reference_err = (octet >> 6) & 0x1;
3683 object->reserved0 = (octet >> 7) & 0x1;
3685 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
3689 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3699 if (
object != NULL) {
3706 static int DNP3DecodeObjectG31V1(
const uint8_t **buf, uint32_t *
len,
3707 uint8_t prefix_code, uint32_t start, uint32_t count,
3708 DNP3PointList *points)
3711 uint32_t prefix = 0;
3712 uint32_t point_index = start;
3714 if (*
len < count/8) {
3719 object =
SCCalloc(1,
sizeof(*
object));
3724 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3730 if (!DNP3ReadUint8(buf,
len, &octet)) {
3733 object->online = (octet >> 0) & 0x1;
3734 object->restart = (octet >> 1) & 0x1;
3735 object->comm_lost = (octet >> 2) & 0x1;
3736 object->remote_forced = (octet >> 3) & 0x1;
3737 object->local_forced = (octet >> 4) & 0x1;
3738 object->over_range = (octet >> 5) & 0x1;
3739 object->reference_err = (octet >> 6) & 0x1;
3740 object->reserved0 = (octet >> 7) & 0x1;
3742 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3746 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3756 if (
object != NULL) {
3763 static int DNP3DecodeObjectG31V2(
const uint8_t **buf, uint32_t *
len,
3764 uint8_t prefix_code, uint32_t start, uint32_t count,
3765 DNP3PointList *points)
3768 uint32_t prefix = 0;
3769 uint32_t point_index = start;
3771 if (*
len < count/8) {
3776 object =
SCCalloc(1,
sizeof(*
object));
3781 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3787 if (!DNP3ReadUint8(buf,
len, &octet)) {
3790 object->online = (octet >> 0) & 0x1;
3791 object->restart = (octet >> 1) & 0x1;
3792 object->comm_lost = (octet >> 2) & 0x1;
3793 object->remote_forced = (octet >> 3) & 0x1;
3794 object->local_forced = (octet >> 4) & 0x1;
3795 object->over_range = (octet >> 5) & 0x1;
3796 object->reference_err = (octet >> 6) & 0x1;
3797 object->reserved0 = (octet >> 7) & 0x1;
3799 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3803 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3813 if (
object != NULL) {
3820 static int DNP3DecodeObjectG31V3(
const uint8_t **buf, uint32_t *
len,
3821 uint8_t prefix_code, uint32_t start, uint32_t count,
3822 DNP3PointList *points)
3825 uint32_t prefix = 0;
3826 uint32_t point_index = start;
3828 if (*
len < count/8) {
3833 object =
SCCalloc(1,
sizeof(*
object));
3838 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3844 if (!DNP3ReadUint8(buf,
len, &octet)) {
3847 object->online = (octet >> 0) & 0x1;
3848 object->restart = (octet >> 1) & 0x1;
3849 object->comm_lost = (octet >> 2) & 0x1;
3850 object->remote_forced = (octet >> 3) & 0x1;
3851 object->local_forced = (octet >> 4) & 0x1;
3852 object->over_range = (octet >> 5) & 0x1;
3853 object->reference_err = (octet >> 6) & 0x1;
3854 object->reserved0 = (octet >> 7) & 0x1;
3856 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3863 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3873 if (
object != NULL) {
3880 static int DNP3DecodeObjectG31V4(
const uint8_t **buf, uint32_t *
len,
3881 uint8_t prefix_code, uint32_t start, uint32_t count,
3882 DNP3PointList *points)
3885 uint32_t prefix = 0;
3886 uint32_t point_index = start;
3888 if (*
len < count/8) {
3893 object =
SCCalloc(1,
sizeof(*
object));
3898 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3904 if (!DNP3ReadUint8(buf,
len, &octet)) {
3907 object->online = (octet >> 0) & 0x1;
3908 object->restart = (octet >> 1) & 0x1;
3909 object->comm_lost = (octet >> 2) & 0x1;
3910 object->remote_forced = (octet >> 3) & 0x1;
3911 object->local_forced = (octet >> 4) & 0x1;
3912 object->over_range = (octet >> 5) & 0x1;
3913 object->reference_err = (octet >> 6) & 0x1;
3914 object->reserved0 = (octet >> 7) & 0x1;
3916 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3923 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3933 if (
object != NULL) {
3940 static int DNP3DecodeObjectG31V5(
const uint8_t **buf, uint32_t *
len,
3941 uint8_t prefix_code, uint32_t start, uint32_t count,
3942 DNP3PointList *points)
3945 uint32_t prefix = 0;
3946 uint32_t point_index = start;
3948 if (*
len < count/8) {
3953 object =
SCCalloc(1,
sizeof(*
object));
3958 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3962 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
3966 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3976 if (
object != NULL) {
3983 static int DNP3DecodeObjectG31V6(
const uint8_t **buf, uint32_t *
len,
3984 uint8_t prefix_code, uint32_t start, uint32_t count,
3985 DNP3PointList *points)
3988 uint32_t prefix = 0;
3989 uint32_t point_index = start;
3991 if (*
len < count/8) {
3996 object =
SCCalloc(1,
sizeof(*
object));
4001 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4005 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
4009 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4019 if (
object != NULL) {
4026 static int DNP3DecodeObjectG31V7(
const uint8_t **buf, uint32_t *
len,
4027 uint8_t prefix_code, uint32_t start, uint32_t count,
4028 DNP3PointList *points)
4031 uint32_t prefix = 0;
4032 uint32_t point_index = start;
4034 if (*
len < count/8) {
4039 object =
SCCalloc(1,
sizeof(*
object));
4044 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4050 if (!DNP3ReadUint8(buf,
len, &octet)) {
4053 object->online = (octet >> 0) & 0x1;
4054 object->restart = (octet >> 1) & 0x1;
4055 object->comm_lost = (octet >> 2) & 0x1;
4056 object->remote_forced = (octet >> 3) & 0x1;
4057 object->local_forced = (octet >> 4) & 0x1;
4058 object->over_range = (octet >> 5) & 0x1;
4059 object->reference_err = (octet >> 6) & 0x1;
4060 object->reserved0 = (octet >> 7) & 0x1;
4062 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4066 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4076 if (
object != NULL) {
4083 static int DNP3DecodeObjectG31V8(
const uint8_t **buf, uint32_t *
len,
4084 uint8_t prefix_code, uint32_t start, uint32_t count,
4085 DNP3PointList *points)
4088 uint32_t prefix = 0;
4089 uint32_t point_index = start;
4091 if (*
len < count/8) {
4096 object =
SCCalloc(1,
sizeof(*
object));
4101 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4107 if (!DNP3ReadUint8(buf,
len, &octet)) {
4110 object->online = (octet >> 0) & 0x1;
4111 object->restart = (octet >> 1) & 0x1;
4112 object->comm_lost = (octet >> 2) & 0x1;
4113 object->remote_forced = (octet >> 3) & 0x1;
4114 object->local_forced = (octet >> 4) & 0x1;
4115 object->over_range = (octet >> 5) & 0x1;
4116 object->reference_err = (octet >> 6) & 0x1;
4117 object->reserved0 = (octet >> 7) & 0x1;
4119 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4123 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4133 if (
object != NULL) {
4140 static int DNP3DecodeObjectG32V1(
const uint8_t **buf, uint32_t *
len,
4141 uint8_t prefix_code, uint32_t start, uint32_t count,
4142 DNP3PointList *points)
4145 uint32_t prefix = 0;
4146 uint32_t point_index = start;
4148 if (*
len < count/8) {
4153 object =
SCCalloc(1,
sizeof(*
object));
4158 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4164 if (!DNP3ReadUint8(buf,
len, &octet)) {
4167 object->online = (octet >> 0) & 0x1;
4168 object->restart = (octet >> 1) & 0x1;
4169 object->comm_lost = (octet >> 2) & 0x1;
4170 object->remote_forced = (octet >> 3) & 0x1;
4171 object->local_forced = (octet >> 4) & 0x1;
4172 object->over_range = (octet >> 5) & 0x1;
4173 object->reference_err = (octet >> 6) & 0x1;
4174 object->reserved0 = (octet >> 7) & 0x1;
4176 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4180 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4190 if (
object != NULL) {
4197 static int DNP3DecodeObjectG32V2(
const uint8_t **buf, uint32_t *
len,
4198 uint8_t prefix_code, uint32_t start, uint32_t count,
4199 DNP3PointList *points)
4202 uint32_t prefix = 0;
4203 uint32_t point_index = start;
4205 if (*
len < count/8) {
4210 object =
SCCalloc(1,
sizeof(*
object));
4215 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4221 if (!DNP3ReadUint8(buf,
len, &octet)) {
4224 object->online = (octet >> 0) & 0x1;
4225 object->restart = (octet >> 1) & 0x1;
4226 object->comm_lost = (octet >> 2) & 0x1;
4227 object->remote_forced = (octet >> 3) & 0x1;
4228 object->local_forced = (octet >> 4) & 0x1;
4229 object->over_range = (octet >> 5) & 0x1;
4230 object->reference_err = (octet >> 6) & 0x1;
4231 object->reserved0 = (octet >> 7) & 0x1;
4233 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4237 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4247 if (
object != NULL) {
4254 static int DNP3DecodeObjectG32V3(
const uint8_t **buf, uint32_t *
len,
4255 uint8_t prefix_code, uint32_t start, uint32_t count,
4256 DNP3PointList *points)
4259 uint32_t prefix = 0;
4260 uint32_t point_index = start;
4262 if (*
len < count/8) {
4267 object =
SCCalloc(1,
sizeof(*
object));
4272 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4278 if (!DNP3ReadUint8(buf,
len, &octet)) {
4281 object->online = (octet >> 0) & 0x1;
4282 object->restart = (octet >> 1) & 0x1;
4283 object->comm_lost = (octet >> 2) & 0x1;
4284 object->remote_forced = (octet >> 3) & 0x1;
4285 object->local_forced = (octet >> 4) & 0x1;
4286 object->over_range = (octet >> 5) & 0x1;
4287 object->reference_err = (octet >> 6) & 0x1;
4288 object->reserved0 = (octet >> 7) & 0x1;
4290 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4297 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4307 if (
object != NULL) {
4314 static int DNP3DecodeObjectG32V4(
const uint8_t **buf, uint32_t *
len,
4315 uint8_t prefix_code, uint32_t start, uint32_t count,
4316 DNP3PointList *points)
4319 uint32_t prefix = 0;
4320 uint32_t point_index = start;
4322 if (*
len < count/8) {
4327 object =
SCCalloc(1,
sizeof(*
object));
4332 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4338 if (!DNP3ReadUint8(buf,
len, &octet)) {
4341 object->online = (octet >> 0) & 0x1;
4342 object->restart = (octet >> 1) & 0x1;
4343 object->comm_lost = (octet >> 2) & 0x1;
4344 object->remote_forced = (octet >> 3) & 0x1;
4345 object->local_forced = (octet >> 4) & 0x1;
4346 object->over_range = (octet >> 5) & 0x1;
4347 object->reference_err = (octet >> 6) & 0x1;
4348 object->reserved0 = (octet >> 7) & 0x1;
4350 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4357 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4367 if (
object != NULL) {
4374 static int DNP3DecodeObjectG32V5(
const uint8_t **buf, uint32_t *
len,
4375 uint8_t prefix_code, uint32_t start, uint32_t count,
4376 DNP3PointList *points)
4379 uint32_t prefix = 0;
4380 uint32_t point_index = start;
4382 if (*
len < count/8) {
4387 object =
SCCalloc(1,
sizeof(*
object));
4392 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4398 if (!DNP3ReadUint8(buf,
len, &octet)) {
4401 object->online = (octet >> 0) & 0x1;
4402 object->restart = (octet >> 1) & 0x1;
4403 object->comm_lost = (octet >> 2) & 0x1;
4404 object->remote_forced = (octet >> 3) & 0x1;
4405 object->local_forced = (octet >> 4) & 0x1;
4406 object->over_range = (octet >> 5) & 0x1;
4407 object->reference_err = (octet >> 6) & 0x1;
4408 object->reserved0 = (octet >> 7) & 0x1;
4410 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4414 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4424 if (
object != NULL) {
4431 static int DNP3DecodeObjectG32V6(
const uint8_t **buf, uint32_t *
len,
4432 uint8_t prefix_code, uint32_t start, uint32_t count,
4433 DNP3PointList *points)
4436 uint32_t prefix = 0;
4437 uint32_t point_index = start;
4439 if (*
len < count/8) {
4444 object =
SCCalloc(1,
sizeof(*
object));
4449 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4455 if (!DNP3ReadUint8(buf,
len, &octet)) {
4458 object->online = (octet >> 0) & 0x1;
4459 object->restart = (octet >> 1) & 0x1;
4460 object->comm_lost = (octet >> 2) & 0x1;
4461 object->remote_forced = (octet >> 3) & 0x1;
4462 object->local_forced = (octet >> 4) & 0x1;
4463 object->over_range = (octet >> 5) & 0x1;
4464 object->reference_err = (octet >> 6) & 0x1;
4465 object->reserved0 = (octet >> 7) & 0x1;
4467 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4471 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4481 if (
object != NULL) {
4488 static int DNP3DecodeObjectG32V7(
const uint8_t **buf, uint32_t *
len,
4489 uint8_t prefix_code, uint32_t start, uint32_t count,
4490 DNP3PointList *points)
4493 uint32_t prefix = 0;
4494 uint32_t point_index = start;
4496 if (*
len < count/8) {
4501 object =
SCCalloc(1,
sizeof(*
object));
4506 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4512 if (!DNP3ReadUint8(buf,
len, &octet)) {
4515 object->online = (octet >> 0) & 0x1;
4516 object->restart = (octet >> 1) & 0x1;
4517 object->comm_lost = (octet >> 2) & 0x1;
4518 object->remote_forced = (octet >> 3) & 0x1;
4519 object->local_forced = (octet >> 4) & 0x1;
4520 object->over_range = (octet >> 5) & 0x1;
4521 object->reference_err = (octet >> 6) & 0x1;
4522 object->reserved0 = (octet >> 7) & 0x1;
4524 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4531 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4541 if (
object != NULL) {
4548 static int DNP3DecodeObjectG32V8(
const uint8_t **buf, uint32_t *
len,
4549 uint8_t prefix_code, uint32_t start, uint32_t count,
4550 DNP3PointList *points)
4553 uint32_t prefix = 0;
4554 uint32_t point_index = start;
4556 if (*
len < count/8) {
4561 object =
SCCalloc(1,
sizeof(*
object));
4566 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4572 if (!DNP3ReadUint8(buf,
len, &octet)) {
4575 object->online = (octet >> 0) & 0x1;
4576 object->restart = (octet >> 1) & 0x1;
4577 object->comm_lost = (octet >> 2) & 0x1;
4578 object->remote_forced = (octet >> 3) & 0x1;
4579 object->local_forced = (octet >> 4) & 0x1;
4580 object->over_range = (octet >> 5) & 0x1;
4581 object->reference_err = (octet >> 6) & 0x1;
4582 object->reserved0 = (octet >> 7) & 0x1;
4584 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4591 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4601 if (
object != NULL) {
4608 static int DNP3DecodeObjectG33V1(
const uint8_t **buf, uint32_t *
len,
4609 uint8_t prefix_code, uint32_t start, uint32_t count,
4610 DNP3PointList *points)
4613 uint32_t prefix = 0;
4614 uint32_t point_index = start;
4616 if (*
len < count/8) {
4621 object =
SCCalloc(1,
sizeof(*
object));
4626 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4632 if (!DNP3ReadUint8(buf,
len, &octet)) {
4635 object->online = (octet >> 0) & 0x1;
4636 object->restart = (octet >> 1) & 0x1;
4637 object->comm_lost = (octet >> 2) & 0x1;
4638 object->remote_forced = (octet >> 3) & 0x1;
4639 object->local_forced = (octet >> 4) & 0x1;
4640 object->over_range = (octet >> 5) & 0x1;
4641 object->reference_err = (octet >> 6) & 0x1;
4642 object->reserved0 = (octet >> 7) & 0x1;
4644 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4648 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4658 if (
object != NULL) {
4665 static int DNP3DecodeObjectG33V2(
const uint8_t **buf, uint32_t *
len,
4666 uint8_t prefix_code, uint32_t start, uint32_t count,
4667 DNP3PointList *points)
4670 uint32_t prefix = 0;
4671 uint32_t point_index = start;
4673 if (*
len < count/8) {
4678 object =
SCCalloc(1,
sizeof(*
object));
4683 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4689 if (!DNP3ReadUint8(buf,
len, &octet)) {
4692 object->online = (octet >> 0) & 0x1;
4693 object->restart = (octet >> 1) & 0x1;
4694 object->comm_lost = (octet >> 2) & 0x1;
4695 object->remote_forced = (octet >> 3) & 0x1;
4696 object->local_forced = (octet >> 4) & 0x1;
4697 object->over_range = (octet >> 5) & 0x1;
4698 object->reference_err = (octet >> 6) & 0x1;
4699 object->reserved0 = (octet >> 7) & 0x1;
4701 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4705 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4715 if (
object != NULL) {
4722 static int DNP3DecodeObjectG33V3(
const uint8_t **buf, uint32_t *
len,
4723 uint8_t prefix_code, uint32_t start, uint32_t count,
4724 DNP3PointList *points)
4727 uint32_t prefix = 0;
4728 uint32_t point_index = start;
4730 if (*
len < count/8) {
4735 object =
SCCalloc(1,
sizeof(*
object));
4740 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4746 if (!DNP3ReadUint8(buf,
len, &octet)) {
4749 object->online = (octet >> 0) & 0x1;
4750 object->restart = (octet >> 1) & 0x1;
4751 object->comm_lost = (octet >> 2) & 0x1;
4752 object->remote_forced = (octet >> 3) & 0x1;
4753 object->local_forced = (octet >> 4) & 0x1;
4754 object->over_range = (octet >> 5) & 0x1;
4755 object->reference_err = (octet >> 6) & 0x1;
4756 object->reserved0 = (octet >> 7) & 0x1;
4758 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4765 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4775 if (
object != NULL) {
4782 static int DNP3DecodeObjectG33V4(
const uint8_t **buf, uint32_t *
len,
4783 uint8_t prefix_code, uint32_t start, uint32_t count,
4784 DNP3PointList *points)
4787 uint32_t prefix = 0;
4788 uint32_t point_index = start;
4790 if (*
len < count/8) {
4795 object =
SCCalloc(1,
sizeof(*
object));
4800 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4806 if (!DNP3ReadUint8(buf,
len, &octet)) {
4809 object->online = (octet >> 0) & 0x1;
4810 object->restart = (octet >> 1) & 0x1;
4811 object->comm_lost = (octet >> 2) & 0x1;
4812 object->remote_forced = (octet >> 3) & 0x1;
4813 object->local_forced = (octet >> 4) & 0x1;
4814 object->over_range = (octet >> 5) & 0x1;
4815 object->reference_err = (octet >> 6) & 0x1;
4816 object->reserved0 = (octet >> 7) & 0x1;
4818 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4825 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4835 if (
object != NULL) {
4842 static int DNP3DecodeObjectG33V5(
const uint8_t **buf, uint32_t *
len,
4843 uint8_t prefix_code, uint32_t start, uint32_t count,
4844 DNP3PointList *points)
4847 uint32_t prefix = 0;
4848 uint32_t point_index = start;
4850 if (*
len < count/8) {
4855 object =
SCCalloc(1,
sizeof(*
object));
4860 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4866 if (!DNP3ReadUint8(buf,
len, &octet)) {
4869 object->online = (octet >> 0) & 0x1;
4870 object->restart = (octet >> 1) & 0x1;
4871 object->comm_lost = (octet >> 2) & 0x1;
4872 object->remote_forced = (octet >> 3) & 0x1;
4873 object->local_forced = (octet >> 4) & 0x1;
4874 object->over_range = (octet >> 5) & 0x1;
4875 object->reference_err = (octet >> 6) & 0x1;
4876 object->reserved0 = (octet >> 7) & 0x1;
4878 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4882 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4892 if (
object != NULL) {
4899 static int DNP3DecodeObjectG33V6(
const uint8_t **buf, uint32_t *
len,
4900 uint8_t prefix_code, uint32_t start, uint32_t count,
4901 DNP3PointList *points)
4904 uint32_t prefix = 0;
4905 uint32_t point_index = start;
4907 if (*
len < count/8) {
4912 object =
SCCalloc(1,
sizeof(*
object));
4917 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4923 if (!DNP3ReadUint8(buf,
len, &octet)) {
4926 object->online = (octet >> 0) & 0x1;
4927 object->restart = (octet >> 1) & 0x1;
4928 object->comm_lost = (octet >> 2) & 0x1;
4929 object->remote_forced = (octet >> 3) & 0x1;
4930 object->local_forced = (octet >> 4) & 0x1;
4931 object->over_range = (octet >> 5) & 0x1;
4932 object->reference_err = (octet >> 6) & 0x1;
4933 object->reserved0 = (octet >> 7) & 0x1;
4935 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4939 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4949 if (
object != NULL) {
4956 static int DNP3DecodeObjectG33V7(
const uint8_t **buf, uint32_t *
len,
4957 uint8_t prefix_code, uint32_t start, uint32_t count,
4958 DNP3PointList *points)
4961 uint32_t prefix = 0;
4962 uint32_t point_index = start;
4964 if (*
len < count/8) {
4969 object =
SCCalloc(1,
sizeof(*
object));
4974 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4980 if (!DNP3ReadUint8(buf,
len, &octet)) {
4983 object->online = (octet >> 0) & 0x1;
4984 object->restart = (octet >> 1) & 0x1;
4985 object->comm_lost = (octet >> 2) & 0x1;
4986 object->remote_forced = (octet >> 3) & 0x1;
4987 object->local_forced = (octet >> 4) & 0x1;
4988 object->over_range = (octet >> 5) & 0x1;
4989 object->reference_err = (octet >> 6) & 0x1;
4990 object->reserved0 = (octet >> 7) & 0x1;
4992 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4999 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5009 if (
object != NULL) {
5016 static int DNP3DecodeObjectG33V8(
const uint8_t **buf, uint32_t *
len,
5017 uint8_t prefix_code, uint32_t start, uint32_t count,
5018 DNP3PointList *points)
5021 uint32_t prefix = 0;
5022 uint32_t point_index = start;
5024 if (*
len < count/8) {
5029 object =
SCCalloc(1,
sizeof(*
object));
5034 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5040 if (!DNP3ReadUint8(buf,
len, &octet)) {
5043 object->online = (octet >> 0) & 0x1;
5044 object->restart = (octet >> 1) & 0x1;
5045 object->comm_lost = (octet >> 2) & 0x1;
5046 object->remote_forced = (octet >> 3) & 0x1;
5047 object->local_forced = (octet >> 4) & 0x1;
5048 object->over_range = (octet >> 5) & 0x1;
5049 object->reference_err = (octet >> 6) & 0x1;
5050 object->reserved0 = (octet >> 7) & 0x1;
5052 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5059 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5069 if (
object != NULL) {
5076 static int DNP3DecodeObjectG34V1(
const uint8_t **buf, uint32_t *
len,
5077 uint8_t prefix_code, uint32_t start, uint32_t count,
5078 DNP3PointList *points)
5081 uint32_t prefix = 0;
5082 uint32_t point_index = start;
5084 if (*
len < count/8) {
5089 object =
SCCalloc(1,
sizeof(*
object));
5094 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5102 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5112 if (
object != NULL) {
5119 static int DNP3DecodeObjectG34V2(
const uint8_t **buf, uint32_t *
len,
5120 uint8_t prefix_code, uint32_t start, uint32_t count,
5121 DNP3PointList *points)
5124 uint32_t prefix = 0;
5125 uint32_t point_index = start;
5127 if (*
len < count/8) {
5132 object =
SCCalloc(1,
sizeof(*
object));
5137 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5145 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5155 if (
object != NULL) {
5162 static int DNP3DecodeObjectG34V3(
const uint8_t **buf, uint32_t *
len,
5163 uint8_t prefix_code, uint32_t start, uint32_t count,
5164 DNP3PointList *points)
5167 uint32_t prefix = 0;
5168 uint32_t point_index = start;
5170 if (*
len < count/8) {
5175 object =
SCCalloc(1,
sizeof(*
object));
5180 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5188 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5198 if (
object != NULL) {
5205 static int DNP3DecodeObjectG40V1(
const uint8_t **buf, uint32_t *
len,
5206 uint8_t prefix_code, uint32_t start, uint32_t count,
5207 DNP3PointList *points)
5210 uint32_t prefix = 0;
5211 uint32_t point_index = start;
5213 if (*
len < count/8) {
5218 object =
SCCalloc(1,
sizeof(*
object));
5223 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5229 if (!DNP3ReadUint8(buf,
len, &octet)) {
5232 object->online = (octet >> 0) & 0x1;
5233 object->restart = (octet >> 1) & 0x1;
5234 object->comm_lost = (octet >> 2) & 0x1;
5235 object->remote_forced = (octet >> 3) & 0x1;
5236 object->local_forced = (octet >> 4) & 0x1;
5237 object->over_range = (octet >> 5) & 0x1;
5238 object->reference_err = (octet >> 6) & 0x1;
5239 object->reserved0 = (octet >> 7) & 0x1;
5241 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5245 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5255 if (
object != NULL) {
5262 static int DNP3DecodeObjectG40V2(
const uint8_t **buf, uint32_t *
len,
5263 uint8_t prefix_code, uint32_t start, uint32_t count,
5264 DNP3PointList *points)
5267 uint32_t prefix = 0;
5268 uint32_t point_index = start;
5270 if (*
len < count/8) {
5275 object =
SCCalloc(1,
sizeof(*
object));
5280 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5286 if (!DNP3ReadUint8(buf,
len, &octet)) {
5289 object->online = (octet >> 0) & 0x1;
5290 object->restart = (octet >> 1) & 0x1;
5291 object->comm_lost = (octet >> 2) & 0x1;
5292 object->remote_forced = (octet >> 3) & 0x1;
5293 object->local_forced = (octet >> 4) & 0x1;
5294 object->over_range = (octet >> 5) & 0x1;
5295 object->reference_err = (octet >> 6) & 0x1;
5296 object->reserved0 = (octet >> 7) & 0x1;
5298 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5302 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5312 if (
object != NULL) {
5319 static int DNP3DecodeObjectG40V3(
const uint8_t **buf, uint32_t *
len,
5320 uint8_t prefix_code, uint32_t start, uint32_t count,
5321 DNP3PointList *points)
5324 uint32_t prefix = 0;
5325 uint32_t point_index = start;
5327 if (*
len < count/8) {
5332 object =
SCCalloc(1,
sizeof(*
object));
5337 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5343 if (!DNP3ReadUint8(buf,
len, &octet)) {
5346 object->online = (octet >> 0) & 0x1;
5347 object->restart = (octet >> 1) & 0x1;
5348 object->comm_lost = (octet >> 2) & 0x1;
5349 object->remote_forced = (octet >> 3) & 0x1;
5350 object->local_forced = (octet >> 4) & 0x1;
5351 object->over_range = (octet >> 5) & 0x1;
5352 object->reference_err = (octet >> 6) & 0x1;
5353 object->reserved0 = (octet >> 7) & 0x1;
5355 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5359 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5369 if (
object != NULL) {
5376 static int DNP3DecodeObjectG40V4(
const uint8_t **buf, uint32_t *
len,
5377 uint8_t prefix_code, uint32_t start, uint32_t count,
5378 DNP3PointList *points)
5381 uint32_t prefix = 0;
5382 uint32_t point_index = start;
5384 if (*
len < count/8) {
5389 object =
SCCalloc(1,
sizeof(*
object));
5394 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5400 if (!DNP3ReadUint8(buf,
len, &octet)) {
5403 object->online = (octet >> 0) & 0x1;
5404 object->restart = (octet >> 1) & 0x1;
5405 object->comm_lost = (octet >> 2) & 0x1;
5406 object->remote_forced = (octet >> 3) & 0x1;
5407 object->local_forced = (octet >> 4) & 0x1;
5408 object->over_range = (octet >> 5) & 0x1;
5409 object->reference_err = (octet >> 6) & 0x1;
5410 object->reserved0 = (octet >> 7) & 0x1;
5412 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5416 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5426 if (
object != NULL) {
5433 static int DNP3DecodeObjectG41V1(
const uint8_t **buf, uint32_t *
len,
5434 uint8_t prefix_code, uint32_t start, uint32_t count,
5435 DNP3PointList *points)
5438 uint32_t prefix = 0;
5439 uint32_t point_index = start;
5441 if (*
len < count/8) {
5446 object =
SCCalloc(1,
sizeof(*
object));
5451 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5455 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
5462 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5472 if (
object != NULL) {
5479 static int DNP3DecodeObjectG41V2(
const uint8_t **buf, uint32_t *
len,
5480 uint8_t prefix_code, uint32_t start, uint32_t count,
5481 DNP3PointList *points)
5484 uint32_t prefix = 0;
5485 uint32_t point_index = start;
5487 if (*
len < count/8) {
5492 object =
SCCalloc(1,
sizeof(*
object));
5497 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5501 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
5508 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5518 if (
object != NULL) {
5525 static int DNP3DecodeObjectG41V3(
const uint8_t **buf, uint32_t *
len,
5526 uint8_t prefix_code, uint32_t start, uint32_t count,
5527 DNP3PointList *points)
5530 uint32_t prefix = 0;
5531 uint32_t point_index = start;
5533 if (*
len < count/8) {
5538 object =
SCCalloc(1,
sizeof(*
object));
5543 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5547 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5554 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5564 if (
object != NULL) {
5571 static int DNP3DecodeObjectG41V4(
const uint8_t **buf, uint32_t *
len,
5572 uint8_t prefix_code, uint32_t start, uint32_t count,
5573 DNP3PointList *points)
5576 uint32_t prefix = 0;
5577 uint32_t point_index = start;
5579 if (*
len < count/8) {
5584 object =
SCCalloc(1,
sizeof(*
object));
5589 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5593 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5600 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5610 if (
object != NULL) {
5617 static int DNP3DecodeObjectG42V1(
const uint8_t **buf, uint32_t *
len,
5618 uint8_t prefix_code, uint32_t start, uint32_t count,
5619 DNP3PointList *points)
5622 uint32_t prefix = 0;
5623 uint32_t point_index = start;
5625 if (*
len < count/8) {
5630 object =
SCCalloc(1,
sizeof(*
object));
5635 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5641 if (!DNP3ReadUint8(buf,
len, &octet)) {
5644 object->online = (octet >> 0) & 0x1;
5645 object->restart = (octet >> 1) & 0x1;
5646 object->comm_lost = (octet >> 2) & 0x1;
5647 object->remote_forced = (octet >> 3) & 0x1;
5648 object->local_forced = (octet >> 4) & 0x1;
5649 object->over_range = (octet >> 5) & 0x1;
5650 object->reference_err = (octet >> 6) & 0x1;
5651 object->reserved0 = (octet >> 7) & 0x1;
5653 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5657 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5667 if (
object != NULL) {
5674 static int DNP3DecodeObjectG42V2(
const uint8_t **buf, uint32_t *
len,
5675 uint8_t prefix_code, uint32_t start, uint32_t count,
5676 DNP3PointList *points)
5679 uint32_t prefix = 0;
5680 uint32_t point_index = start;
5682 if (*
len < count/8) {
5687 object =
SCCalloc(1,
sizeof(*
object));
5692 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5698 if (!DNP3ReadUint8(buf,
len, &octet)) {
5701 object->online = (octet >> 0) & 0x1;
5702 object->restart = (octet >> 1) & 0x1;
5703 object->comm_lost = (octet >> 2) & 0x1;
5704 object->remote_forced = (octet >> 3) & 0x1;
5705 object->local_forced = (octet >> 4) & 0x1;
5706 object->over_range = (octet >> 5) & 0x1;
5707 object->reference_err = (octet >> 6) & 0x1;
5708 object->reserved0 = (octet >> 7) & 0x1;
5710 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5714 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5724 if (
object != NULL) {
5731 static int DNP3DecodeObjectG42V3(
const uint8_t **buf, uint32_t *
len,
5732 uint8_t prefix_code, uint32_t start, uint32_t count,
5733 DNP3PointList *points)
5736 uint32_t prefix = 0;
5737 uint32_t point_index = start;
5739 if (*
len < count/8) {
5744 object =
SCCalloc(1,
sizeof(*
object));
5749 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5755 if (!DNP3ReadUint8(buf,
len, &octet)) {
5758 object->online = (octet >> 0) & 0x1;
5759 object->restart = (octet >> 1) & 0x1;
5760 object->comm_lost = (octet >> 2) & 0x1;
5761 object->remote_forced = (octet >> 3) & 0x1;
5762 object->local_forced = (octet >> 4) & 0x1;
5763 object->over_range = (octet >> 5) & 0x1;
5764 object->reference_err = (octet >> 6) & 0x1;
5765 object->reserved0 = (octet >> 7) & 0x1;
5767 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5774 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5784 if (
object != NULL) {
5791 static int DNP3DecodeObjectG42V4(
const uint8_t **buf, uint32_t *
len,
5792 uint8_t prefix_code, uint32_t start, uint32_t count,
5793 DNP3PointList *points)
5796 uint32_t prefix = 0;
5797 uint32_t point_index = start;
5799 if (*
len < count/8) {
5804 object =
SCCalloc(1,
sizeof(*
object));
5809 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5815 if (!DNP3ReadUint8(buf,
len, &octet)) {
5818 object->online = (octet >> 0) & 0x1;
5819 object->restart = (octet >> 1) & 0x1;
5820 object->comm_lost = (octet >> 2) & 0x1;
5821 object->remote_forced = (octet >> 3) & 0x1;
5822 object->local_forced = (octet >> 4) & 0x1;
5823 object->over_range = (octet >> 5) & 0x1;
5824 object->reference_err = (octet >> 6) & 0x1;
5825 object->reserved0 = (octet >> 7) & 0x1;
5827 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5834 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5844 if (
object != NULL) {
5851 static int DNP3DecodeObjectG42V5(
const uint8_t **buf, uint32_t *
len,
5852 uint8_t prefix_code, uint32_t start, uint32_t count,
5853 DNP3PointList *points)
5856 uint32_t prefix = 0;
5857 uint32_t point_index = start;
5859 if (*
len < count/8) {
5864 object =
SCCalloc(1,
sizeof(*
object));
5869 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5875 if (!DNP3ReadUint8(buf,
len, &octet)) {
5878 object->online = (octet >> 0) & 0x1;
5879 object->restart = (octet >> 1) & 0x1;
5880 object->comm_lost = (octet >> 2) & 0x1;
5881 object->remote_forced = (octet >> 3) & 0x1;
5882 object->local_forced = (octet >> 4) & 0x1;
5883 object->over_range = (octet >> 5) & 0x1;
5884 object->reference_err = (octet >> 6) & 0x1;
5885 object->reserved0 = (octet >> 7) & 0x1;
5887 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5891 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5901 if (
object != NULL) {
5908 static int DNP3DecodeObjectG42V6(
const uint8_t **buf, uint32_t *
len,
5909 uint8_t prefix_code, uint32_t start, uint32_t count,
5910 DNP3PointList *points)
5913 uint32_t prefix = 0;
5914 uint32_t point_index = start;
5916 if (*
len < count/8) {
5921 object =
SCCalloc(1,
sizeof(*
object));
5926 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5932 if (!DNP3ReadUint8(buf,
len, &octet)) {
5935 object->online = (octet >> 0) & 0x1;
5936 object->restart = (octet >> 1) & 0x1;
5937 object->comm_lost = (octet >> 2) & 0x1;
5938 object->remote_forced = (octet >> 3) & 0x1;
5939 object->local_forced = (octet >> 4) & 0x1;
5940 object->over_range = (octet >> 5) & 0x1;
5941 object->reference_err = (octet >> 6) & 0x1;
5942 object->reserved0 = (octet >> 7) & 0x1;
5944 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5948 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5958 if (
object != NULL) {
5965 static int DNP3DecodeObjectG42V7(
const uint8_t **buf, uint32_t *
len,
5966 uint8_t prefix_code, uint32_t start, uint32_t count,
5967 DNP3PointList *points)
5970 uint32_t prefix = 0;
5971 uint32_t point_index = start;
5973 if (*
len < count/8) {
5978 object =
SCCalloc(1,
sizeof(*
object));
5983 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5989 if (!DNP3ReadUint8(buf,
len, &octet)) {
5992 object->online = (octet >> 0) & 0x1;
5993 object->restart = (octet >> 1) & 0x1;
5994 object->comm_lost = (octet >> 2) & 0x1;
5995 object->remote_forced = (octet >> 3) & 0x1;
5996 object->local_forced = (octet >> 4) & 0x1;
5997 object->over_range = (octet >> 5) & 0x1;
5998 object->reference_err = (octet >> 6) & 0x1;
5999 object->reserved0 = (octet >> 7) & 0x1;
6001 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
6008 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6018 if (
object != NULL) {
6025 static int DNP3DecodeObjectG42V8(
const uint8_t **buf, uint32_t *
len,
6026 uint8_t prefix_code, uint32_t start, uint32_t count,
6027 DNP3PointList *points)
6030 uint32_t prefix = 0;
6031 uint32_t point_index = start;
6033 if (*
len < count/8) {
6038 object =
SCCalloc(1,
sizeof(*
object));
6043 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6049 if (!DNP3ReadUint8(buf,
len, &octet)) {
6052 object->online = (octet >> 0) & 0x1;
6053 object->restart = (octet >> 1) & 0x1;
6054 object->comm_lost = (octet >> 2) & 0x1;
6055 object->remote_forced = (octet >> 3) & 0x1;
6056 object->local_forced = (octet >> 4) & 0x1;
6057 object->over_range = (octet >> 5) & 0x1;
6058 object->reference_err = (octet >> 6) & 0x1;
6059 object->reserved0 = (octet >> 7) & 0x1;
6061 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
6068 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6078 if (
object != NULL) {
6085 static int DNP3DecodeObjectG43V1(
const uint8_t **buf, uint32_t *
len,
6086 uint8_t prefix_code, uint32_t start, uint32_t count,
6087 DNP3PointList *points)
6090 uint32_t prefix = 0;
6091 uint32_t point_index = start;
6093 if (*
len < count/8) {
6098 object =
SCCalloc(1,
sizeof(*
object));
6103 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6109 if (!DNP3ReadUint8(buf,
len, &octet)) {
6112 object->status_code = (octet >> 0) & 0x7f;
6113 object->reserved0 = (octet >> 7) & 0x1;
6115 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->commanded_value)) {
6119 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6129 if (
object != NULL) {
6136 static int DNP3DecodeObjectG43V2(
const uint8_t **buf, uint32_t *
len,
6137 uint8_t prefix_code, uint32_t start, uint32_t count,
6138 DNP3PointList *points)
6141 uint32_t prefix = 0;
6142 uint32_t point_index = start;
6144 if (*
len < count/8) {
6149 object =
SCCalloc(1,
sizeof(*
object));
6154 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6160 if (!DNP3ReadUint8(buf,
len, &octet)) {
6163 object->status_code = (octet >> 0) & 0x7f;
6164 object->reserved0 = (octet >> 7) & 0x1;
6166 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->commanded_value)) {
6170 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6180 if (
object != NULL) {
6187 static int DNP3DecodeObjectG43V3(
const uint8_t **buf, uint32_t *
len,
6188 uint8_t prefix_code, uint32_t start, uint32_t count,
6189 DNP3PointList *points)
6192 uint32_t prefix = 0;
6193 uint32_t point_index = start;
6195 if (*
len < count/8) {
6200 object =
SCCalloc(1,
sizeof(*
object));
6205 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6211 if (!DNP3ReadUint8(buf,
len, &octet)) {
6214 object->status_code = (octet >> 0) & 0x7f;
6215 object->reserved0 = (octet >> 7) & 0x1;
6217 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->commanded_value)) {
6224 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6234 if (
object != NULL) {
6241 static int DNP3DecodeObjectG43V4(
const uint8_t **buf, uint32_t *
len,
6242 uint8_t prefix_code, uint32_t start, uint32_t count,
6243 DNP3PointList *points)
6246 uint32_t prefix = 0;
6247 uint32_t point_index = start;
6249 if (*
len < count/8) {
6254 object =
SCCalloc(1,
sizeof(*
object));
6259 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6265 if (!DNP3ReadUint8(buf,
len, &octet)) {
6268 object->status_code = (octet >> 0) & 0x7f;
6269 object->reserved0 = (octet >> 7) & 0x1;
6271 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->commanded_value)) {
6278 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6288 if (
object != NULL) {
6295 static int DNP3DecodeObjectG43V5(
const uint8_t **buf, uint32_t *
len,
6296 uint8_t prefix_code, uint32_t start, uint32_t count,
6297 DNP3PointList *points)
6300 uint32_t prefix = 0;
6301 uint32_t point_index = start;
6303 if (*
len < count/8) {
6308 object =
SCCalloc(1,
sizeof(*
object));
6313 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6319 if (!DNP3ReadUint8(buf,
len, &octet)) {
6322 object->status_code = (octet >> 0) & 0x7f;
6323 object->reserved0 = (octet >> 7) & 0x1;
6329 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6339 if (
object != NULL) {
6346 static int DNP3DecodeObjectG43V6(
const uint8_t **buf, uint32_t *
len,
6347 uint8_t prefix_code, uint32_t start, uint32_t count,
6348 DNP3PointList *points)
6351 uint32_t prefix = 0;
6352 uint32_t point_index = start;
6354 if (*
len < count/8) {
6359 object =
SCCalloc(1,
sizeof(*
object));
6364 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6370 if (!DNP3ReadUint8(buf,
len, &octet)) {
6373 object->status_code = (octet >> 0) & 0x7f;
6374 object->reserved0 = (octet >> 7) & 0x1;
6380 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6390 if (
object != NULL) {
6397 static int DNP3DecodeObjectG43V7(
const uint8_t **buf, uint32_t *
len,
6398 uint8_t prefix_code, uint32_t start, uint32_t count,
6399 DNP3PointList *points)
6402 uint32_t prefix = 0;
6403 uint32_t point_index = start;
6405 if (*
len < count/8) {
6410 object =
SCCalloc(1,
sizeof(*
object));
6415 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6421 if (!DNP3ReadUint8(buf,
len, &octet)) {
6424 object->status_code = (octet >> 0) & 0x7f;
6425 object->reserved0 = (octet >> 7) & 0x1;
6434 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6444 if (
object != NULL) {
6451 static int DNP3DecodeObjectG43V8(
const uint8_t **buf, uint32_t *
len,
6452 uint8_t prefix_code, uint32_t start, uint32_t count,
6453 DNP3PointList *points)
6456 uint32_t prefix = 0;
6457 uint32_t point_index = start;
6459 if (*
len < count/8) {
6464 object =
SCCalloc(1,
sizeof(*
object));
6469 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6475 if (!DNP3ReadUint8(buf,
len, &octet)) {
6478 object->status_code = (octet >> 0) & 0x7f;
6479 object->reserved0 = (octet >> 7) & 0x1;
6488 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6498 if (
object != NULL) {
6505 static int DNP3DecodeObjectG50V1(
const uint8_t **buf, uint32_t *
len,
6506 uint8_t prefix_code, uint32_t start, uint32_t count,
6507 DNP3PointList *points)
6510 uint32_t prefix = 0;
6511 uint32_t point_index = start;
6513 if (*
len < count/8) {
6518 object =
SCCalloc(1,
sizeof(*
object));
6523 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6531 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6541 if (
object != NULL) {
6548 static int DNP3DecodeObjectG50V2(
const uint8_t **buf, uint32_t *
len,
6549 uint8_t prefix_code, uint32_t start, uint32_t count,
6550 DNP3PointList *points)
6553 uint32_t prefix = 0;
6554 uint32_t point_index = start;
6556 if (*
len < count/8) {
6561 object =
SCCalloc(1,
sizeof(*
object));
6566 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6573 if (!DNP3ReadUint32(buf,
len, &object->
interval)) {
6577 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6587 if (
object != NULL) {
6594 static int DNP3DecodeObjectG50V3(
const uint8_t **buf, uint32_t *
len,
6595 uint8_t prefix_code, uint32_t start, uint32_t count,
6596 DNP3PointList *points)
6599 uint32_t prefix = 0;
6600 uint32_t point_index = start;
6602 if (*
len < count/8) {
6607 object =
SCCalloc(1,
sizeof(*
object));
6612 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6620 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6630 if (
object != NULL) {
6637 static int DNP3DecodeObjectG50V4(
const uint8_t **buf, uint32_t *
len,
6638 uint8_t prefix_code, uint32_t start, uint32_t count,
6639 DNP3PointList *points)
6642 uint32_t prefix = 0;
6643 uint32_t point_index = start;
6645 if (*
len < count/8) {
6650 object =
SCCalloc(1,
sizeof(*
object));
6655 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6669 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6679 if (
object != NULL) {
6686 static int DNP3DecodeObjectG51V1(
const uint8_t **buf, uint32_t *
len,
6687 uint8_t prefix_code, uint32_t start, uint32_t count,
6688 DNP3PointList *points)
6691 uint32_t prefix = 0;
6692 uint32_t point_index = start;
6694 if (*
len < count/8) {
6699 object =
SCCalloc(1,
sizeof(*
object));
6704 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6712 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6722 if (
object != NULL) {
6729 static int DNP3DecodeObjectG51V2(
const uint8_t **buf, uint32_t *
len,
6730 uint8_t prefix_code, uint32_t start, uint32_t count,
6731 DNP3PointList *points)
6734 uint32_t prefix = 0;
6735 uint32_t point_index = start;
6737 if (*
len < count/8) {
6742 object =
SCCalloc(1,
sizeof(*
object));
6747 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6755 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6765 if (
object != NULL) {
6772 static int DNP3DecodeObjectG52V1(
const uint8_t **buf, uint32_t *
len,
6773 uint8_t prefix_code, uint32_t start, uint32_t count,
6774 DNP3PointList *points)
6777 uint32_t prefix = 0;
6778 uint32_t point_index = start;
6780 if (*
len < count/8) {
6785 object =
SCCalloc(1,
sizeof(*
object));
6790 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6798 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6808 if (
object != NULL) {
6815 static int DNP3DecodeObjectG52V2(
const uint8_t **buf, uint32_t *
len,
6816 uint8_t prefix_code, uint32_t start, uint32_t count,
6817 DNP3PointList *points)
6820 uint32_t prefix = 0;
6821 uint32_t point_index = start;
6823 if (*
len < count/8) {
6828 object =
SCCalloc(1,
sizeof(*
object));
6833 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6837 if (!DNP3ReadUint16(buf,
len, &object->
delay_ms)) {
6841 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6851 if (
object != NULL) {
6858 static int DNP3DecodeObjectG70V1(
const uint8_t **buf, uint32_t *
len,
6859 uint8_t prefix_code, uint32_t start, uint32_t count,
6860 DNP3PointList *points)
6863 uint32_t prefix = 0;
6864 uint32_t point_index = start;
6866 if (*
len < count/8) {
6871 object =
SCCalloc(1,
sizeof(*
object));
6876 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6904 if (!DNP3ReadUint32(buf,
len, &object->
file_id)) {
6907 if (!DNP3ReadUint32(buf,
len, &object->
owner_id)) {
6910 if (!DNP3ReadUint32(buf,
len, &object->
group_id)) {
6920 if (*len < object->filename_size) {
6925 *buf +=
object->filename_size;
6926 *
len -=
object->filename_size;
6928 object->filename[
object->filename_size] =
'\0';
6933 if (*len < object->data_size) {
6938 *buf +=
object->data_size;
6939 *
len -=
object->data_size;
6941 object->data[
object->data_size] =
'\0';
6943 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6953 if (
object != NULL) {
6960 static int DNP3DecodeObjectG70V2(
const uint8_t **buf, uint32_t *
len,
6961 uint8_t prefix_code, uint32_t start, uint32_t count,
6962 DNP3PointList *points)
6965 uint32_t prefix = 0;
6966 uint32_t point_index = start;
6968 if (*
len < count/8) {
6973 object =
SCCalloc(1,
sizeof(*
object));
6978 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6998 if (*len < object->username_size) {
7003 *buf +=
object->username_size;
7004 *
len -=
object->username_size;
7006 object->username[
object->username_size] =
'\0';
7008 if (*len < object->password_size) {
7013 *buf +=
object->password_size;
7014 *
len -=
object->password_size;
7016 object->password[
object->password_size] =
'\0';
7018 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7028 if (
object != NULL) {
7035 static int DNP3DecodeObjectG70V3(
const uint8_t **buf, uint32_t *
len,
7036 uint8_t prefix_code, uint32_t start, uint32_t count,
7037 DNP3PointList *points)
7040 uint32_t prefix = 0;
7041 uint32_t point_index = start;
7043 if (*
len < count/8) {
7048 object =
SCCalloc(1,
sizeof(*
object));
7053 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7063 if (!DNP3ReadUint48(buf,
len, &object->
created)) {
7085 if (*len < object->filename_size) {
7090 *buf +=
object->filename_size;
7091 *
len -=
object->filename_size;
7093 object->filename[
object->filename_size] =
'\0';
7095 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7105 if (
object != NULL) {
7112 static int DNP3DecodeObjectG70V4(
const uint8_t **buf, uint32_t *
len,
7113 uint8_t prefix_code, uint32_t start, uint32_t count,
7114 DNP3PointList *points)
7117 uint32_t prefix = 0;
7118 uint32_t point_index = start;