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, uint16_t *
len, uint8_t *out)
86 if (*
len < (
int)
sizeof(*out)) {
89 *out = *(uint8_t *)(*buf);
108 static int DNP3ReadUint16(
const uint8_t **buf, uint16_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, uint16_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 = ((uint32_t)(*buf)[0]) | ((uint32_t)(*buf)[1] << 8) | ((uint32_t)(*buf)[2] << 16);
164 static int DNP3ReadUint32(
const uint8_t **buf, uint16_t *
len, uint32_t *out)
166 if (*
len < (
int)
sizeof(*out)) {
170 *buf +=
sizeof(*out);
171 *
len -=
sizeof(*out);
188 static int DNP3ReadUint48(
const uint8_t **buf, uint16_t *
len, uint64_t *out)
190 if (*
len < (
int)(
sizeof(uint8_t) * 6)) {
194 #if __BYTE_ORDER__ == __BIG_ENDIAN
195 *out = ((uint64_t)(*buf)[0] << 40) | ((uint64_t)(*buf)[1] << 32) |
196 ((uint64_t)(*buf)[2] << 24) | ((uint64_t)(*buf)[3] << 16) |
197 ((uint64_t)(*buf)[4] << 8) | (uint64_t)(*buf)[5];
198 #elif __BYTE_ORDER == __LITTLE_ENDIAN
199 *out = ((uint64_t)(*buf)[0]) | ((uint64_t)(*buf)[1] << 8) |
200 ((uint64_t)(*buf)[2] << 16) | ((uint64_t)(*buf)[3] << 24) |
201 ((uint64_t)(*buf)[4] << 32) | ((uint64_t)(*buf)[5] << 40);
223 static int DNP3ReadFloat32(
const uint8_t **buf, uint16_t *
len,
float *out)
229 #if __BYTE_ORDER == __LITTLE_ENDIAN
230 *((uint8_t *)out + 0) = (*buf)[0];
231 *((uint8_t *)out + 1) = (*buf)[1];
232 *((uint8_t *)out + 2) = (*buf)[2];
233 *((uint8_t *)out + 3) = (*buf)[3];
235 *((uint8_t *)out + 3) = (*buf)[0];
236 *((uint8_t *)out + 2) = (*buf)[1];
237 *((uint8_t *)out + 1) = (*buf)[2];
238 *((uint8_t *)out + 0) = (*buf)[3];
259 static int DNP3ReadFloat64(
const uint8_t **buf, uint16_t *
len,
double *out)
265 #if __BYTE_ORDER == __LITTLE_ENDIAN
266 *((uint8_t *)out + 0) = (*buf)[0];
267 *((uint8_t *)out + 1) = (*buf)[1];
268 *((uint8_t *)out + 2) = (*buf)[2];
269 *((uint8_t *)out + 3) = (*buf)[3];
270 *((uint8_t *)out + 4) = (*buf)[4];
271 *((uint8_t *)out + 5) = (*buf)[5];
272 *((uint8_t *)out + 6) = (*buf)[6];
273 *((uint8_t *)out + 7) = (*buf)[7];
275 *((uint8_t *)out + 7) = (*buf)[0];
276 *((uint8_t *)out + 6) = (*buf)[1];
277 *((uint8_t *)out + 5) = (*buf)[2];
278 *((uint8_t *)out + 4) = (*buf)[3];
279 *((uint8_t *)out + 3) = (*buf)[4];
280 *((uint8_t *)out + 2) = (*buf)[5];
281 *((uint8_t *)out + 1) = (*buf)[6];
282 *((uint8_t *)out + 0) = (*buf)[7];
293 static int DNP3ReadPrefix(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code, uint32_t *out)
295 uint8_t prefix_len = 0;
297 switch (prefix_code) {
313 if (*
len < (uint32_t)prefix_len) {
317 switch (prefix_len) {
318 case sizeof(uint32_t):
319 if (!DNP3ReadUint32(buf,
len, out)) {
323 case sizeof(uint16_t): {
326 if (!DNP3ReadUint16(buf,
len, &val)) {
332 case sizeof(uint8_t): {
335 if (!DNP3ReadUint8(buf,
len, &val)) {
354 static int DNP3AddPoint(DNP3PointList *list,
void *
object, uint32_t point_index,
355 uint8_t prefix_code, uint32_t prefix)
362 point->
data = object;
364 point->
index = point_index;
365 switch (prefix_code) {
371 point->
index = prefix;
376 point->
size = prefix;
391 static int DNP3DecodeObjectG1V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
392 uint32_t start, uint32_t count, DNP3PointList *points)
395 uint32_t bytes = (count / 8) + 1;
397 uint32_t point_index = start;
399 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
403 for (uint32_t i = 0; i < bytes; i++) {
407 if (!DNP3ReadUint8(buf,
len, &octet)) {
411 for (
int j = 0; j < 8 && count; j = j + 1) {
413 object =
SCCalloc(1,
sizeof(*
object));
418 object->state = (octet >> j) & 0x1;
420 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
433 if (
object != NULL) {
439 static int DNP3DecodeObjectG1V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
440 uint32_t start, uint32_t count, DNP3PointList *points)
444 uint32_t point_index = start;
446 if (*
len < count/8) {
451 object =
SCCalloc(1,
sizeof(*
object));
456 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
462 if (!DNP3ReadUint8(buf,
len, &octet)) {
465 object->online = (octet >> 0) & 0x1;
466 object->restart = (octet >> 1) & 0x1;
467 object->comm_lost = (octet >> 2) & 0x1;
468 object->remote_forced = (octet >> 3) & 0x1;
469 object->local_forced = (octet >> 4) & 0x1;
470 object->chatter_filter = (octet >> 5) & 0x1;
471 object->reserved = (octet >> 6) & 0x1;
472 object->state = (octet >> 7) & 0x1;
475 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
485 if (
object != NULL) {
492 static int DNP3DecodeObjectG2V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
493 uint32_t start, uint32_t count, DNP3PointList *points)
497 uint32_t point_index = start;
499 if (*
len < count/8) {
504 object =
SCCalloc(1,
sizeof(*
object));
509 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
513 if (!DNP3ReadUint8(buf,
len, &object->
state)) {
517 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
527 if (
object != NULL) {
534 static int DNP3DecodeObjectG2V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
535 uint32_t start, uint32_t count, DNP3PointList *points)
539 uint32_t point_index = start;
541 if (*
len < count/8) {
546 object =
SCCalloc(1,
sizeof(*
object));
551 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
557 if (!DNP3ReadUint8(buf,
len, &octet)) {
560 object->online = (octet >> 0) & 0x1;
561 object->restart = (octet >> 1) & 0x1;
562 object->comm_lost = (octet >> 2) & 0x1;
563 object->remote_forced = (octet >> 3) & 0x1;
564 object->local_forced = (octet >> 4) & 0x1;
565 object->chatter_filter = (octet >> 5) & 0x1;
566 object->reserved = (octet >> 6) & 0x1;
567 object->state = (octet >> 7) & 0x1;
573 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
583 if (
object != NULL) {
590 static int DNP3DecodeObjectG2V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
591 uint32_t start, uint32_t count, DNP3PointList *points)
595 uint32_t point_index = start;
597 if (*
len < count/8) {
602 object =
SCCalloc(1,
sizeof(*
object));
607 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
613 if (!DNP3ReadUint8(buf,
len, &octet)) {
616 object->online = (octet >> 0) & 0x1;
617 object->restart = (octet >> 1) & 0x1;
618 object->comm_lost = (octet >> 2) & 0x1;
619 object->remote_forced = (octet >> 3) & 0x1;
620 object->local_forced = (octet >> 4) & 0x1;
621 object->chatter_filter = (octet >> 5) & 0x1;
622 object->reserved = (octet >> 6) & 0x1;
623 object->state = (octet >> 7) & 0x1;
629 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
639 if (
object != NULL) {
646 static int DNP3DecodeObjectG3V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
647 uint32_t start, uint32_t count, DNP3PointList *points)
650 uint32_t bytes = (count / 8) + 1;
652 uint32_t point_index = start;
654 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
658 for (uint32_t i = 0; i < bytes; i++) {
662 if (!DNP3ReadUint8(buf,
len, &octet)) {
666 for (
int j = 0; j < 8 && count; j = j + 2) {
668 object =
SCCalloc(1,
sizeof(*
object));
673 object->state = (octet >> j) & 0x3;
675 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
688 if (
object != NULL) {
694 static int DNP3DecodeObjectG3V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
695 uint32_t start, uint32_t count, DNP3PointList *points)
699 uint32_t point_index = start;
701 if (*
len < count/8) {
706 object =
SCCalloc(1,
sizeof(*
object));
711 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
717 if (!DNP3ReadUint8(buf,
len, &octet)) {
720 object->online = (octet >> 0) & 0x1;
721 object->restart = (octet >> 1) & 0x1;
722 object->comm_lost = (octet >> 2) & 0x1;
723 object->remote_forced = (octet >> 3) & 0x1;
724 object->local_forced = (octet >> 4) & 0x1;
725 object->chatter_filter = (octet >> 5) & 0x1;
726 object->state = (octet >> 6) & 0x3;
729 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
739 if (
object != NULL) {
746 static int DNP3DecodeObjectG4V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
747 uint32_t start, uint32_t count, DNP3PointList *points)
751 uint32_t point_index = start;
753 if (*
len < count/8) {
758 object =
SCCalloc(1,
sizeof(*
object));
763 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
769 if (!DNP3ReadUint8(buf,
len, &octet)) {
772 object->online = (octet >> 0) & 0x1;
773 object->restart = (octet >> 1) & 0x1;
774 object->comm_lost = (octet >> 2) & 0x1;
775 object->remote_forced = (octet >> 3) & 0x1;
776 object->local_forced = (octet >> 4) & 0x1;
777 object->chatter_filter = (octet >> 5) & 0x1;
778 object->state = (octet >> 6) & 0x3;
781 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
791 if (
object != NULL) {
798 static int DNP3DecodeObjectG4V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
799 uint32_t start, uint32_t count, DNP3PointList *points)
803 uint32_t point_index = start;
805 if (*
len < count/8) {
810 object =
SCCalloc(1,
sizeof(*
object));
815 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
821 if (!DNP3ReadUint8(buf,
len, &octet)) {
824 object->online = (octet >> 0) & 0x1;
825 object->restart = (octet >> 1) & 0x1;
826 object->comm_lost = (octet >> 2) & 0x1;
827 object->remote_forced = (octet >> 3) & 0x1;
828 object->local_forced = (octet >> 4) & 0x1;
829 object->chatter_filter = (octet >> 5) & 0x1;
830 object->state = (octet >> 6) & 0x3;
836 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
846 if (
object != NULL) {
853 static int DNP3DecodeObjectG4V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
854 uint32_t start, uint32_t count, DNP3PointList *points)
858 uint32_t point_index = start;
860 if (*
len < count/8) {
865 object =
SCCalloc(1,
sizeof(*
object));
870 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
876 if (!DNP3ReadUint8(buf,
len, &octet)) {
879 object->online = (octet >> 0) & 0x1;
880 object->restart = (octet >> 1) & 0x1;
881 object->comm_lost = (octet >> 2) & 0x1;
882 object->remote_forced = (octet >> 3) & 0x1;
883 object->local_forced = (octet >> 4) & 0x1;
884 object->chatter_filter = (octet >> 5) & 0x1;
885 object->state = (octet >> 6) & 0x3;
891 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
901 if (
object != NULL) {
908 static int DNP3DecodeObjectG10V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
909 uint32_t start, uint32_t count, DNP3PointList *points)
912 uint32_t bytes = (count / 8) + 1;
914 uint32_t point_index = start;
916 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
920 for (uint32_t i = 0; i < bytes; i++) {
924 if (!DNP3ReadUint8(buf,
len, &octet)) {
928 for (
int j = 0; j < 8 && count; j = j + 1) {
930 object =
SCCalloc(1,
sizeof(*
object));
935 object->state = (octet >> j) & 0x1;
937 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
950 if (
object != NULL) {
956 static int DNP3DecodeObjectG10V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
957 uint32_t start, uint32_t count, DNP3PointList *points)
961 uint32_t point_index = start;
963 if (*
len < count/8) {
968 object =
SCCalloc(1,
sizeof(*
object));
973 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
979 if (!DNP3ReadUint8(buf,
len, &octet)) {
982 object->online = (octet >> 0) & 0x1;
983 object->restart = (octet >> 1) & 0x1;
984 object->comm_lost = (octet >> 2) & 0x1;
985 object->remote_forced = (octet >> 3) & 0x1;
986 object->local_forced = (octet >> 4) & 0x1;
987 object->reserved0 = (octet >> 5) & 0x1;
988 object->reserved1 = (octet >> 6) & 0x1;
989 object->state = (octet >> 7) & 0x1;
992 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1002 if (
object != NULL) {
1009 static int DNP3DecodeObjectG11V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1010 uint32_t start, uint32_t count, DNP3PointList *points)
1013 uint32_t prefix = 0;
1014 uint32_t point_index = start;
1016 if (*
len < count/8) {
1021 object =
SCCalloc(1,
sizeof(*
object));
1026 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1032 if (!DNP3ReadUint8(buf,
len, &octet)) {
1035 object->online = (octet >> 0) & 0x1;
1036 object->restart = (octet >> 1) & 0x1;
1037 object->comm_lost = (octet >> 2) & 0x1;
1038 object->remote_forced = (octet >> 3) & 0x1;
1039 object->local_forced = (octet >> 4) & 0x1;
1040 object->reserved0 = (octet >> 5) & 0x1;
1041 object->reserved1 = (octet >> 6) & 0x1;
1042 object->state = (octet >> 7) & 0x1;
1045 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1055 if (
object != NULL) {
1062 static int DNP3DecodeObjectG11V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1063 uint32_t start, uint32_t count, DNP3PointList *points)
1066 uint32_t prefix = 0;
1067 uint32_t point_index = start;
1069 if (*
len < count/8) {
1074 object =
SCCalloc(1,
sizeof(*
object));
1079 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1085 if (!DNP3ReadUint8(buf,
len, &octet)) {
1088 object->online = (octet >> 0) & 0x1;
1089 object->restart = (octet >> 1) & 0x1;
1090 object->comm_lost = (octet >> 2) & 0x1;
1091 object->remote_forced = (octet >> 3) & 0x1;
1092 object->local_forced = (octet >> 4) & 0x1;
1093 object->reserved0 = (octet >> 5) & 0x1;
1094 object->reserved1 = (octet >> 6) & 0x1;
1095 object->state = (octet >> 7) & 0x1;
1101 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1111 if (
object != NULL) {
1118 static int DNP3DecodeObjectG12V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1119 uint32_t start, uint32_t count, DNP3PointList *points)
1122 uint32_t prefix = 0;
1123 uint32_t point_index = start;
1125 if (*
len < count/8) {
1130 object =
SCCalloc(1,
sizeof(*
object));
1135 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1141 if (!DNP3ReadUint8(buf,
len, &octet)) {
1144 object->op_type = (octet >> 0) & 0xf;
1145 object->qu = (octet >> 4) & 0x1;
1146 object->cr = (octet >> 5) & 0x1;
1147 object->tcc = (octet >> 6) & 0x3;
1149 if (!DNP3ReadUint8(buf,
len, &object->
count)) {
1152 if (!DNP3ReadUint32(buf,
len, &object->
ontime)) {
1155 if (!DNP3ReadUint32(buf,
len, &object->
offtime)) {
1160 if (!DNP3ReadUint8(buf,
len, &octet)) {
1163 object->status_code = (octet >> 0) & 0x7f;
1164 object->reserved = (octet >> 7) & 0x1;
1167 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1177 if (
object != NULL) {
1184 static int DNP3DecodeObjectG12V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1185 uint32_t start, uint32_t count, DNP3PointList *points)
1188 uint32_t prefix = 0;
1189 uint32_t point_index = start;
1191 if (*
len < count/8) {
1196 object =
SCCalloc(1,
sizeof(*
object));
1201 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1207 if (!DNP3ReadUint8(buf,
len, &octet)) {
1210 object->op_type = (octet >> 0) & 0xf;
1211 object->qu = (octet >> 4) & 0x1;
1212 object->cr = (octet >> 5) & 0x1;
1213 object->tcc = (octet >> 6) & 0x3;
1215 if (!DNP3ReadUint8(buf,
len, &object->
count)) {
1218 if (!DNP3ReadUint32(buf,
len, &object->
ontime)) {
1221 if (!DNP3ReadUint32(buf,
len, &object->
offtime)) {
1226 if (!DNP3ReadUint8(buf,
len, &octet)) {
1229 object->status_code = (octet >> 0) & 0x7f;
1230 object->reserved = (octet >> 7) & 0x1;
1233 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1243 if (
object != NULL) {
1250 static int DNP3DecodeObjectG12V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1251 uint32_t start, uint32_t count, DNP3PointList *points)
1254 uint32_t bytes = (count / 8) + 1;
1255 uint32_t prefix = 0;
1256 uint32_t point_index = start;
1258 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1262 for (uint32_t i = 0; i < bytes; i++) {
1266 if (!DNP3ReadUint8(buf,
len, &octet)) {
1270 for (
int j = 0; j < 8 && count; j = j + 1) {
1272 object =
SCCalloc(1,
sizeof(*
object));
1277 object->point = (octet >> j) & 0x1;
1279 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1292 if (
object != NULL) {
1298 static int DNP3DecodeObjectG13V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1299 uint32_t start, uint32_t count, DNP3PointList *points)
1302 uint32_t prefix = 0;
1303 uint32_t point_index = start;
1305 if (*
len < count/8) {
1310 object =
SCCalloc(1,
sizeof(*
object));
1315 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1321 if (!DNP3ReadUint8(buf,
len, &octet)) {
1324 object->status_code = (octet >> 0) & 0x7f;
1325 object->commanded_state = (octet >> 7) & 0x1;
1328 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1338 if (
object != NULL) {
1345 static int DNP3DecodeObjectG13V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1346 uint32_t start, uint32_t count, DNP3PointList *points)
1349 uint32_t prefix = 0;
1350 uint32_t point_index = start;
1352 if (*
len < count/8) {
1357 object =
SCCalloc(1,
sizeof(*
object));
1362 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1368 if (!DNP3ReadUint8(buf,
len, &octet)) {
1371 object->status_code = (octet >> 0) & 0x7f;
1372 object->commanded_state = (octet >> 7) & 0x1;
1378 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1388 if (
object != NULL) {
1395 static int DNP3DecodeObjectG20V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1396 uint32_t start, uint32_t count, DNP3PointList *points)
1399 uint32_t prefix = 0;
1400 uint32_t point_index = start;
1402 if (*
len < count/8) {
1407 object =
SCCalloc(1,
sizeof(*
object));
1412 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1418 if (!DNP3ReadUint8(buf,
len, &octet)) {
1421 object->online = (octet >> 0) & 0x1;
1422 object->restart = (octet >> 1) & 0x1;
1423 object->comm_lost = (octet >> 2) & 0x1;
1424 object->remote_forced = (octet >> 3) & 0x1;
1425 object->local_forced = (octet >> 4) & 0x1;
1426 object->rollover = (octet >> 5) & 0x1;
1427 object->discontinuity = (octet >> 6) & 0x1;
1428 object->reserved0 = (octet >> 7) & 0x1;
1430 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1434 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1444 if (
object != NULL) {
1451 static int DNP3DecodeObjectG20V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1452 uint32_t start, uint32_t count, DNP3PointList *points)
1455 uint32_t prefix = 0;
1456 uint32_t point_index = start;
1458 if (*
len < count/8) {
1463 object =
SCCalloc(1,
sizeof(*
object));
1468 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1474 if (!DNP3ReadUint8(buf,
len, &octet)) {
1477 object->online = (octet >> 0) & 0x1;
1478 object->restart = (octet >> 1) & 0x1;
1479 object->comm_lost = (octet >> 2) & 0x1;
1480 object->remote_forced = (octet >> 3) & 0x1;
1481 object->local_forced = (octet >> 4) & 0x1;
1482 object->rollover = (octet >> 5) & 0x1;
1483 object->discontinuity = (octet >> 6) & 0x1;
1484 object->reserved0 = (octet >> 7) & 0x1;
1486 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1490 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1500 if (
object != NULL) {
1507 static int DNP3DecodeObjectG20V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1508 uint32_t start, uint32_t count, DNP3PointList *points)
1511 uint32_t prefix = 0;
1512 uint32_t point_index = start;
1514 if (*
len < count/8) {
1519 object =
SCCalloc(1,
sizeof(*
object));
1524 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1530 if (!DNP3ReadUint8(buf,
len, &octet)) {
1533 object->online = (octet >> 0) & 0x1;
1534 object->restart = (octet >> 1) & 0x1;
1535 object->comm_lost = (octet >> 2) & 0x1;
1536 object->remote_forced = (octet >> 3) & 0x1;
1537 object->local_forced = (octet >> 4) & 0x1;
1538 object->rollover = (octet >> 5) & 0x1;
1539 object->reserved0 = (octet >> 6) & 0x1;
1540 object->reserved1 = (octet >> 7) & 0x1;
1542 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1546 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1556 if (
object != NULL) {
1563 static int DNP3DecodeObjectG20V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1564 uint32_t start, uint32_t count, DNP3PointList *points)
1567 uint32_t prefix = 0;
1568 uint32_t point_index = start;
1570 if (*
len < count/8) {
1575 object =
SCCalloc(1,
sizeof(*
object));
1580 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1586 if (!DNP3ReadUint8(buf,
len, &octet)) {
1589 object->online = (octet >> 0) & 0x1;
1590 object->restart = (octet >> 1) & 0x1;
1591 object->comm_lost = (octet >> 2) & 0x1;
1592 object->remote_forced = (octet >> 3) & 0x1;
1593 object->local_forced = (octet >> 4) & 0x1;
1594 object->rollover = (octet >> 5) & 0x1;
1595 object->reserved0 = (octet >> 6) & 0x1;
1596 object->reserved1 = (octet >> 7) & 0x1;
1598 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1602 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1612 if (
object != NULL) {
1619 static int DNP3DecodeObjectG20V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1620 uint32_t start, uint32_t count, DNP3PointList *points)
1623 uint32_t prefix = 0;
1624 uint32_t point_index = start;
1626 if (*
len < count/8) {
1631 object =
SCCalloc(1,
sizeof(*
object));
1636 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1640 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1644 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1654 if (
object != NULL) {
1661 static int DNP3DecodeObjectG20V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1662 uint32_t start, uint32_t count, DNP3PointList *points)
1665 uint32_t prefix = 0;
1666 uint32_t point_index = start;
1668 if (*
len < count/8) {
1673 object =
SCCalloc(1,
sizeof(*
object));
1678 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1682 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1686 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1696 if (
object != NULL) {
1703 static int DNP3DecodeObjectG20V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1704 uint32_t start, uint32_t count, DNP3PointList *points)
1707 uint32_t prefix = 0;
1708 uint32_t point_index = start;
1710 if (*
len < count/8) {
1715 object =
SCCalloc(1,
sizeof(*
object));
1720 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1724 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1728 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1738 if (
object != NULL) {
1745 static int DNP3DecodeObjectG20V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1746 uint32_t start, uint32_t count, DNP3PointList *points)
1749 uint32_t prefix = 0;
1750 uint32_t point_index = start;
1752 if (*
len < count/8) {
1757 object =
SCCalloc(1,
sizeof(*
object));
1762 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1766 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1770 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1780 if (
object != NULL) {
1787 static int DNP3DecodeObjectG21V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1788 uint32_t start, uint32_t count, DNP3PointList *points)
1791 uint32_t prefix = 0;
1792 uint32_t point_index = start;
1794 if (*
len < count/8) {
1799 object =
SCCalloc(1,
sizeof(*
object));
1804 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1810 if (!DNP3ReadUint8(buf,
len, &octet)) {
1813 object->online = (octet >> 0) & 0x1;
1814 object->restart = (octet >> 1) & 0x1;
1815 object->comm_lost = (octet >> 2) & 0x1;
1816 object->remote_forced = (octet >> 3) & 0x1;
1817 object->local_forced = (octet >> 4) & 0x1;
1818 object->rollover = (octet >> 5) & 0x1;
1819 object->discontinuity = (octet >> 6) & 0x1;
1820 object->reserved0 = (octet >> 7) & 0x1;
1822 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1826 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1836 if (
object != NULL) {
1843 static int DNP3DecodeObjectG21V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1844 uint32_t start, uint32_t count, DNP3PointList *points)
1847 uint32_t prefix = 0;
1848 uint32_t point_index = start;
1850 if (*
len < count/8) {
1855 object =
SCCalloc(1,
sizeof(*
object));
1860 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1866 if (!DNP3ReadUint8(buf,
len, &octet)) {
1869 object->online = (octet >> 0) & 0x1;
1870 object->restart = (octet >> 1) & 0x1;
1871 object->comm_lost = (octet >> 2) & 0x1;
1872 object->remote_forced = (octet >> 3) & 0x1;
1873 object->local_forced = (octet >> 4) & 0x1;
1874 object->rollover = (octet >> 5) & 0x1;
1875 object->discontinuity = (octet >> 6) & 0x1;
1876 object->reserved0 = (octet >> 7) & 0x1;
1878 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1882 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1892 if (
object != NULL) {
1899 static int DNP3DecodeObjectG21V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1900 uint32_t start, uint32_t count, DNP3PointList *points)
1903 uint32_t prefix = 0;
1904 uint32_t point_index = start;
1906 if (*
len < count/8) {
1911 object =
SCCalloc(1,
sizeof(*
object));
1916 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1922 if (!DNP3ReadUint8(buf,
len, &octet)) {
1925 object->online = (octet >> 0) & 0x1;
1926 object->restart = (octet >> 1) & 0x1;
1927 object->comm_lost = (octet >> 2) & 0x1;
1928 object->remote_forced = (octet >> 3) & 0x1;
1929 object->local_forced = (octet >> 4) & 0x1;
1930 object->rollover = (octet >> 5) & 0x1;
1931 object->reserved0 = (octet >> 6) & 0x1;
1932 object->reserved1 = (octet >> 7) & 0x1;
1934 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
1938 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
1948 if (
object != NULL) {
1955 static int DNP3DecodeObjectG21V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
1956 uint32_t start, uint32_t count, DNP3PointList *points)
1959 uint32_t prefix = 0;
1960 uint32_t point_index = start;
1962 if (*
len < count/8) {
1967 object =
SCCalloc(1,
sizeof(*
object));
1972 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
1978 if (!DNP3ReadUint8(buf,
len, &octet)) {
1981 object->online = (octet >> 0) & 0x1;
1982 object->restart = (octet >> 1) & 0x1;
1983 object->comm_lost = (octet >> 2) & 0x1;
1984 object->remote_forced = (octet >> 3) & 0x1;
1985 object->local_forced = (octet >> 4) & 0x1;
1986 object->rollover = (octet >> 5) & 0x1;
1987 object->reserved0 = (octet >> 6) & 0x1;
1988 object->reserved1 = (octet >> 7) & 0x1;
1990 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
1994 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2004 if (
object != NULL) {
2011 static int DNP3DecodeObjectG21V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2012 uint32_t start, uint32_t count, DNP3PointList *points)
2015 uint32_t prefix = 0;
2016 uint32_t point_index = start;
2018 if (*
len < count/8) {
2023 object =
SCCalloc(1,
sizeof(*
object));
2028 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2034 if (!DNP3ReadUint8(buf,
len, &octet)) {
2037 object->online = (octet >> 0) & 0x1;
2038 object->restart = (octet >> 1) & 0x1;
2039 object->comm_lost = (octet >> 2) & 0x1;
2040 object->remote_forced = (octet >> 3) & 0x1;
2041 object->local_forced = (octet >> 4) & 0x1;
2042 object->rollover = (octet >> 5) & 0x1;
2043 object->discontinuity = (octet >> 6) & 0x1;
2044 object->reserved1 = (octet >> 7) & 0x1;
2046 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2053 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2063 if (
object != NULL) {
2070 static int DNP3DecodeObjectG21V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2071 uint32_t start, uint32_t count, DNP3PointList *points)
2074 uint32_t prefix = 0;
2075 uint32_t point_index = start;
2077 if (*
len < count/8) {
2082 object =
SCCalloc(1,
sizeof(*
object));
2087 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2093 if (!DNP3ReadUint8(buf,
len, &octet)) {
2096 object->online = (octet >> 0) & 0x1;
2097 object->restart = (octet >> 1) & 0x1;
2098 object->comm_lost = (octet >> 2) & 0x1;
2099 object->remote_forced = (octet >> 3) & 0x1;
2100 object->local_forced = (octet >> 4) & 0x1;
2101 object->rollover = (octet >> 5) & 0x1;
2102 object->discontinuity = (octet >> 6) & 0x1;
2103 object->reserved1 = (octet >> 7) & 0x1;
2105 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2112 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2122 if (
object != NULL) {
2129 static int DNP3DecodeObjectG21V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2130 uint32_t start, uint32_t count, DNP3PointList *points)
2133 uint32_t prefix = 0;
2134 uint32_t point_index = start;
2136 if (*
len < count/8) {
2141 object =
SCCalloc(1,
sizeof(*
object));
2146 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2152 if (!DNP3ReadUint8(buf,
len, &octet)) {
2155 object->online = (octet >> 0) & 0x1;
2156 object->restart = (octet >> 1) & 0x1;
2157 object->comm_lost = (octet >> 2) & 0x1;
2158 object->remote_forced = (octet >> 3) & 0x1;
2159 object->local_forced = (octet >> 4) & 0x1;
2160 object->rollover = (octet >> 5) & 0x1;
2161 object->reserved0 = (octet >> 6) & 0x1;
2162 object->reserved1 = (octet >> 7) & 0x1;
2164 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2171 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2181 if (
object != NULL) {
2188 static int DNP3DecodeObjectG21V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2189 uint32_t start, uint32_t count, DNP3PointList *points)
2192 uint32_t prefix = 0;
2193 uint32_t point_index = start;
2195 if (*
len < count/8) {
2200 object =
SCCalloc(1,
sizeof(*
object));
2205 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2211 if (!DNP3ReadUint8(buf,
len, &octet)) {
2214 object->online = (octet >> 0) & 0x1;
2215 object->restart = (octet >> 1) & 0x1;
2216 object->comm_lost = (octet >> 2) & 0x1;
2217 object->remote_forced = (octet >> 3) & 0x1;
2218 object->local_forced = (octet >> 4) & 0x1;
2219 object->rollover = (octet >> 5) & 0x1;
2220 object->reserved0 = (octet >> 6) & 0x1;
2221 object->reserved1 = (octet >> 7) & 0x1;
2223 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2230 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2240 if (
object != NULL) {
2247 static int DNP3DecodeObjectG21V9(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2248 uint32_t start, uint32_t count, DNP3PointList *points)
2251 uint32_t prefix = 0;
2252 uint32_t point_index = start;
2254 if (*
len < count/8) {
2259 object =
SCCalloc(1,
sizeof(*
object));
2264 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2268 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2272 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2282 if (
object != NULL) {
2289 static int DNP3DecodeObjectG21V10(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2290 uint32_t start, uint32_t count, DNP3PointList *points)
2293 uint32_t prefix = 0;
2294 uint32_t point_index = start;
2296 if (*
len < count/8) {
2301 object =
SCCalloc(1,
sizeof(*
object));
2306 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2310 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2314 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2324 if (
object != NULL) {
2331 static int DNP3DecodeObjectG21V11(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2332 uint32_t start, uint32_t count, DNP3PointList *points)
2335 uint32_t prefix = 0;
2336 uint32_t point_index = start;
2338 if (*
len < count/8) {
2343 object =
SCCalloc(1,
sizeof(*
object));
2348 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2352 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2356 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2366 if (
object != NULL) {
2373 static int DNP3DecodeObjectG21V12(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2374 uint32_t start, uint32_t count, DNP3PointList *points)
2377 uint32_t prefix = 0;
2378 uint32_t point_index = start;
2380 if (*
len < count/8) {
2385 object =
SCCalloc(1,
sizeof(*
object));
2390 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2394 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2398 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2408 if (
object != NULL) {
2415 static int DNP3DecodeObjectG22V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2416 uint32_t start, uint32_t count, DNP3PointList *points)
2419 uint32_t prefix = 0;
2420 uint32_t point_index = start;
2422 if (*
len < count/8) {
2427 object =
SCCalloc(1,
sizeof(*
object));
2432 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2438 if (!DNP3ReadUint8(buf,
len, &octet)) {
2441 object->online = (octet >> 0) & 0x1;
2442 object->restart = (octet >> 1) & 0x1;
2443 object->comm_lost = (octet >> 2) & 0x1;
2444 object->remote_forced = (octet >> 3) & 0x1;
2445 object->local_forced = (octet >> 4) & 0x1;
2446 object->rollover = (octet >> 5) & 0x1;
2447 object->discontinuity = (octet >> 6) & 0x1;
2448 object->reserved0 = (octet >> 7) & 0x1;
2450 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2454 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2464 if (
object != NULL) {
2471 static int DNP3DecodeObjectG22V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2472 uint32_t start, uint32_t count, DNP3PointList *points)
2475 uint32_t prefix = 0;
2476 uint32_t point_index = start;
2478 if (*
len < count/8) {
2483 object =
SCCalloc(1,
sizeof(*
object));
2488 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2494 if (!DNP3ReadUint8(buf,
len, &octet)) {
2497 object->online = (octet >> 0) & 0x1;
2498 object->restart = (octet >> 1) & 0x1;
2499 object->comm_lost = (octet >> 2) & 0x1;
2500 object->remote_forced = (octet >> 3) & 0x1;
2501 object->local_forced = (octet >> 4) & 0x1;
2502 object->rollover = (octet >> 5) & 0x1;
2503 object->discontinuity = (octet >> 6) & 0x1;
2504 object->reserved0 = (octet >> 7) & 0x1;
2506 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2510 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2520 if (
object != NULL) {
2527 static int DNP3DecodeObjectG22V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2528 uint32_t start, uint32_t count, DNP3PointList *points)
2531 uint32_t prefix = 0;
2532 uint32_t point_index = start;
2534 if (*
len < count/8) {
2539 object =
SCCalloc(1,
sizeof(*
object));
2544 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2550 if (!DNP3ReadUint8(buf,
len, &octet)) {
2553 object->online = (octet >> 0) & 0x1;
2554 object->restart = (octet >> 1) & 0x1;
2555 object->comm_lost = (octet >> 2) & 0x1;
2556 object->remote_forced = (octet >> 3) & 0x1;
2557 object->local_forced = (octet >> 4) & 0x1;
2558 object->rollover = (octet >> 5) & 0x1;
2559 object->reserved0 = (octet >> 6) & 0x1;
2560 object->reserved1 = (octet >> 7) & 0x1;
2562 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2566 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2576 if (
object != NULL) {
2583 static int DNP3DecodeObjectG22V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2584 uint32_t start, uint32_t count, DNP3PointList *points)
2587 uint32_t prefix = 0;
2588 uint32_t point_index = start;
2590 if (*
len < count/8) {
2595 object =
SCCalloc(1,
sizeof(*
object));
2600 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2606 if (!DNP3ReadUint8(buf,
len, &octet)) {
2609 object->online = (octet >> 0) & 0x1;
2610 object->restart = (octet >> 1) & 0x1;
2611 object->comm_lost = (octet >> 2) & 0x1;
2612 object->remote_forced = (octet >> 3) & 0x1;
2613 object->local_forced = (octet >> 4) & 0x1;
2614 object->rollover = (octet >> 5) & 0x1;
2615 object->reserved0 = (octet >> 6) & 0x1;
2616 object->reserved1 = (octet >> 7) & 0x1;
2618 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2622 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2632 if (
object != NULL) {
2639 static int DNP3DecodeObjectG22V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2640 uint32_t start, uint32_t count, DNP3PointList *points)
2643 uint32_t prefix = 0;
2644 uint32_t point_index = start;
2646 if (*
len < count/8) {
2651 object =
SCCalloc(1,
sizeof(*
object));
2656 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2662 if (!DNP3ReadUint8(buf,
len, &octet)) {
2665 object->online = (octet >> 0) & 0x1;
2666 object->restart = (octet >> 1) & 0x1;
2667 object->comm_lost = (octet >> 2) & 0x1;
2668 object->remote_forced = (octet >> 3) & 0x1;
2669 object->local_forced = (octet >> 4) & 0x1;
2670 object->rollover = (octet >> 5) & 0x1;
2671 object->reserved0 = (octet >> 6) & 0x1;
2672 object->reserved1 = (octet >> 7) & 0x1;
2674 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2681 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2691 if (
object != NULL) {
2698 static int DNP3DecodeObjectG22V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2699 uint32_t start, uint32_t count, DNP3PointList *points)
2702 uint32_t prefix = 0;
2703 uint32_t point_index = start;
2705 if (*
len < count/8) {
2710 object =
SCCalloc(1,
sizeof(*
object));
2715 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2721 if (!DNP3ReadUint8(buf,
len, &octet)) {
2724 object->online = (octet >> 0) & 0x1;
2725 object->restart = (octet >> 1) & 0x1;
2726 object->comm_lost = (octet >> 2) & 0x1;
2727 object->remote_forced = (octet >> 3) & 0x1;
2728 object->local_forced = (octet >> 4) & 0x1;
2729 object->rollover = (octet >> 5) & 0x1;
2730 object->discontinuity = (octet >> 6) & 0x1;
2731 object->reserved0 = (octet >> 7) & 0x1;
2733 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2740 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2750 if (
object != NULL) {
2757 static int DNP3DecodeObjectG22V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2758 uint32_t start, uint32_t count, DNP3PointList *points)
2761 uint32_t prefix = 0;
2762 uint32_t point_index = start;
2764 if (*
len < count/8) {
2769 object =
SCCalloc(1,
sizeof(*
object));
2774 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2780 if (!DNP3ReadUint8(buf,
len, &octet)) {
2783 object->online = (octet >> 0) & 0x1;
2784 object->restart = (octet >> 1) & 0x1;
2785 object->comm_lost = (octet >> 2) & 0x1;
2786 object->remote_forced = (octet >> 3) & 0x1;
2787 object->local_forced = (octet >> 4) & 0x1;
2788 object->rollover = (octet >> 5) & 0x1;
2789 object->reserved0 = (octet >> 6) & 0x1;
2790 object->reserved1 = (octet >> 7) & 0x1;
2792 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2799 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2809 if (
object != NULL) {
2816 static int DNP3DecodeObjectG22V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2817 uint32_t start, uint32_t count, DNP3PointList *points)
2820 uint32_t prefix = 0;
2821 uint32_t point_index = start;
2823 if (*
len < count/8) {
2828 object =
SCCalloc(1,
sizeof(*
object));
2833 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2839 if (!DNP3ReadUint8(buf,
len, &octet)) {
2842 object->online = (octet >> 0) & 0x1;
2843 object->restart = (octet >> 1) & 0x1;
2844 object->comm_lost = (octet >> 2) & 0x1;
2845 object->remote_forced = (octet >> 3) & 0x1;
2846 object->local_forced = (octet >> 4) & 0x1;
2847 object->rollover = (octet >> 5) & 0x1;
2848 object->reserved0 = (octet >> 6) & 0x1;
2849 object->reserved1 = (octet >> 7) & 0x1;
2851 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2858 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2868 if (
object != NULL) {
2875 static int DNP3DecodeObjectG23V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2876 uint32_t start, uint32_t count, DNP3PointList *points)
2879 uint32_t prefix = 0;
2880 uint32_t point_index = start;
2882 if (*
len < count/8) {
2887 object =
SCCalloc(1,
sizeof(*
object));
2892 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2898 if (!DNP3ReadUint8(buf,
len, &octet)) {
2901 object->online = (octet >> 0) & 0x1;
2902 object->restart = (octet >> 1) & 0x1;
2903 object->comm_lost = (octet >> 2) & 0x1;
2904 object->remote_forced = (octet >> 3) & 0x1;
2905 object->local_forced = (octet >> 4) & 0x1;
2906 object->rollover = (octet >> 5) & 0x1;
2907 object->discontinuity = (octet >> 6) & 0x1;
2908 object->reserved0 = (octet >> 7) & 0x1;
2910 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
2914 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2924 if (
object != NULL) {
2931 static int DNP3DecodeObjectG23V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2932 uint32_t start, uint32_t count, DNP3PointList *points)
2935 uint32_t prefix = 0;
2936 uint32_t point_index = start;
2938 if (*
len < count/8) {
2943 object =
SCCalloc(1,
sizeof(*
object));
2948 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
2954 if (!DNP3ReadUint8(buf,
len, &octet)) {
2957 object->online = (octet >> 0) & 0x1;
2958 object->restart = (octet >> 1) & 0x1;
2959 object->comm_lost = (octet >> 2) & 0x1;
2960 object->remote_forced = (octet >> 3) & 0x1;
2961 object->local_forced = (octet >> 4) & 0x1;
2962 object->rollover = (octet >> 5) & 0x1;
2963 object->reserved0 = (octet >> 6) & 0x1;
2964 object->reserved1 = (octet >> 7) & 0x1;
2966 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
2970 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
2980 if (
object != NULL) {
2987 static int DNP3DecodeObjectG23V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
2988 uint32_t start, uint32_t count, DNP3PointList *points)
2991 uint32_t prefix = 0;
2992 uint32_t point_index = start;
2994 if (*
len < count/8) {
2999 object =
SCCalloc(1,
sizeof(*
object));
3004 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3010 if (!DNP3ReadUint8(buf,
len, &octet)) {
3013 object->online = (octet >> 0) & 0x1;
3014 object->restart = (octet >> 1) & 0x1;
3015 object->comm_lost = (octet >> 2) & 0x1;
3016 object->remote_forced = (octet >> 3) & 0x1;
3017 object->local_forced = (octet >> 4) & 0x1;
3018 object->rollover = (octet >> 5) & 0x1;
3019 object->reserved0 = (octet >> 6) & 0x1;
3020 object->reserved1 = (octet >> 7) & 0x1;
3022 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3026 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3036 if (
object != NULL) {
3043 static int DNP3DecodeObjectG23V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3044 uint32_t start, uint32_t count, DNP3PointList *points)
3047 uint32_t prefix = 0;
3048 uint32_t point_index = start;
3050 if (*
len < count/8) {
3055 object =
SCCalloc(1,
sizeof(*
object));
3060 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3066 if (!DNP3ReadUint8(buf,
len, &octet)) {
3069 object->online = (octet >> 0) & 0x1;
3070 object->restart = (octet >> 1) & 0x1;
3071 object->comm_lost = (octet >> 2) & 0x1;
3072 object->remote_forced = (octet >> 3) & 0x1;
3073 object->local_forced = (octet >> 4) & 0x1;
3074 object->rollover = (octet >> 5) & 0x1;
3075 object->reserved0 = (octet >> 6) & 0x1;
3076 object->reserved1 = (octet >> 7) & 0x1;
3078 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3082 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3092 if (
object != NULL) {
3099 static int DNP3DecodeObjectG23V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3100 uint32_t start, uint32_t count, DNP3PointList *points)
3103 uint32_t prefix = 0;
3104 uint32_t point_index = start;
3106 if (*
len < count/8) {
3111 object =
SCCalloc(1,
sizeof(*
object));
3116 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3122 if (!DNP3ReadUint8(buf,
len, &octet)) {
3125 object->online = (octet >> 0) & 0x1;
3126 object->restart = (octet >> 1) & 0x1;
3127 object->comm_lost = (octet >> 2) & 0x1;
3128 object->remote_forced = (octet >> 3) & 0x1;
3129 object->local_forced = (octet >> 4) & 0x1;
3130 object->rollover = (octet >> 5) & 0x1;
3131 object->discontinuity = (octet >> 6) & 0x1;
3132 object->reserved0 = (octet >> 7) & 0x1;
3134 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3141 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3151 if (
object != NULL) {
3158 static int DNP3DecodeObjectG23V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3159 uint32_t start, uint32_t count, DNP3PointList *points)
3162 uint32_t prefix = 0;
3163 uint32_t point_index = start;
3165 if (*
len < count/8) {
3170 object =
SCCalloc(1,
sizeof(*
object));
3175 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3181 if (!DNP3ReadUint8(buf,
len, &octet)) {
3184 object->online = (octet >> 0) & 0x1;
3185 object->restart = (octet >> 1) & 0x1;
3186 object->comm_lost = (octet >> 2) & 0x1;
3187 object->remote_forced = (octet >> 3) & 0x1;
3188 object->local_forced = (octet >> 4) & 0x1;
3189 object->rollover = (octet >> 5) & 0x1;
3190 object->discontinuity = (octet >> 6) & 0x1;
3191 object->reserved0 = (octet >> 7) & 0x1;
3193 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3200 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3210 if (
object != NULL) {
3217 static int DNP3DecodeObjectG23V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3218 uint32_t start, uint32_t count, DNP3PointList *points)
3221 uint32_t prefix = 0;
3222 uint32_t point_index = start;
3224 if (*
len < count/8) {
3229 object =
SCCalloc(1,
sizeof(*
object));
3234 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3240 if (!DNP3ReadUint8(buf,
len, &octet)) {
3243 object->online = (octet >> 0) & 0x1;
3244 object->restart = (octet >> 1) & 0x1;
3245 object->comm_lost = (octet >> 2) & 0x1;
3246 object->remote_forced = (octet >> 3) & 0x1;
3247 object->local_forced = (octet >> 4) & 0x1;
3248 object->rollover = (octet >> 5) & 0x1;
3249 object->reserved0 = (octet >> 6) & 0x1;
3250 object->reserved1 = (octet >> 7) & 0x1;
3252 if (!DNP3ReadUint32(buf,
len, &object->
count)) {
3259 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3269 if (
object != NULL) {
3276 static int DNP3DecodeObjectG23V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3277 uint32_t start, uint32_t count, DNP3PointList *points)
3280 uint32_t prefix = 0;
3281 uint32_t point_index = start;
3283 if (*
len < count/8) {
3288 object =
SCCalloc(1,
sizeof(*
object));
3293 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3299 if (!DNP3ReadUint8(buf,
len, &octet)) {
3302 object->online = (octet >> 0) & 0x1;
3303 object->restart = (octet >> 1) & 0x1;
3304 object->comm_lost = (octet >> 2) & 0x1;
3305 object->remote_forced = (octet >> 3) & 0x1;
3306 object->local_forced = (octet >> 4) & 0x1;
3307 object->rollover = (octet >> 5) & 0x1;
3308 object->reserved0 = (octet >> 6) & 0x1;
3309 object->reserved1 = (octet >> 7) & 0x1;
3311 if (!DNP3ReadUint16(buf,
len, &object->
count)) {
3318 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3328 if (
object != NULL) {
3335 static int DNP3DecodeObjectG30V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3336 uint32_t start, uint32_t count, DNP3PointList *points)
3339 uint32_t prefix = 0;
3340 uint32_t point_index = start;
3342 if (*
len < count/8) {
3347 object =
SCCalloc(1,
sizeof(*
object));
3352 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3358 if (!DNP3ReadUint8(buf,
len, &octet)) {
3361 object->online = (octet >> 0) & 0x1;
3362 object->restart = (octet >> 1) & 0x1;
3363 object->comm_lost = (octet >> 2) & 0x1;
3364 object->remote_forced = (octet >> 3) & 0x1;
3365 object->local_forced = (octet >> 4) & 0x1;
3366 object->over_range = (octet >> 5) & 0x1;
3367 object->reference_err = (octet >> 6) & 0x1;
3368 object->reserved0 = (octet >> 7) & 0x1;
3370 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3374 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3384 if (
object != NULL) {
3391 static int DNP3DecodeObjectG30V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3392 uint32_t start, uint32_t count, DNP3PointList *points)
3395 uint32_t prefix = 0;
3396 uint32_t point_index = start;
3398 if (*
len < count/8) {
3403 object =
SCCalloc(1,
sizeof(*
object));
3408 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3414 if (!DNP3ReadUint8(buf,
len, &octet)) {
3417 object->online = (octet >> 0) & 0x1;
3418 object->restart = (octet >> 1) & 0x1;
3419 object->comm_lost = (octet >> 2) & 0x1;
3420 object->remote_forced = (octet >> 3) & 0x1;
3421 object->local_forced = (octet >> 4) & 0x1;
3422 object->over_range = (octet >> 5) & 0x1;
3423 object->reference_err = (octet >> 6) & 0x1;
3424 object->reserved0 = (octet >> 7) & 0x1;
3426 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3430 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3440 if (
object != NULL) {
3447 static int DNP3DecodeObjectG30V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3448 uint32_t start, uint32_t count, DNP3PointList *points)
3451 uint32_t prefix = 0;
3452 uint32_t point_index = start;
3454 if (*
len < count/8) {
3459 object =
SCCalloc(1,
sizeof(*
object));
3464 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3468 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
3472 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3482 if (
object != NULL) {
3489 static int DNP3DecodeObjectG30V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3490 uint32_t start, uint32_t count, DNP3PointList *points)
3493 uint32_t prefix = 0;
3494 uint32_t point_index = start;
3496 if (*
len < count/8) {
3501 object =
SCCalloc(1,
sizeof(*
object));
3506 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3510 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
3514 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3524 if (
object != NULL) {
3531 static int DNP3DecodeObjectG30V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3532 uint32_t start, uint32_t count, DNP3PointList *points)
3535 uint32_t prefix = 0;
3536 uint32_t point_index = start;
3538 if (*
len < count/8) {
3543 object =
SCCalloc(1,
sizeof(*
object));
3548 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3554 if (!DNP3ReadUint8(buf,
len, &octet)) {
3557 object->online = (octet >> 0) & 0x1;
3558 object->restart = (octet >> 1) & 0x1;
3559 object->comm_lost = (octet >> 2) & 0x1;
3560 object->remote_forced = (octet >> 3) & 0x1;
3561 object->local_forced = (octet >> 4) & 0x1;
3562 object->over_range = (octet >> 5) & 0x1;
3563 object->reference_err = (octet >> 6) & 0x1;
3564 object->reserved0 = (octet >> 7) & 0x1;
3566 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
3570 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3580 if (
object != NULL) {
3587 static int DNP3DecodeObjectG30V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3588 uint32_t start, uint32_t count, DNP3PointList *points)
3591 uint32_t prefix = 0;
3592 uint32_t point_index = start;
3594 if (*
len < count/8) {
3599 object =
SCCalloc(1,
sizeof(*
object));
3604 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3610 if (!DNP3ReadUint8(buf,
len, &octet)) {
3613 object->online = (octet >> 0) & 0x1;
3614 object->restart = (octet >> 1) & 0x1;
3615 object->comm_lost = (octet >> 2) & 0x1;
3616 object->remote_forced = (octet >> 3) & 0x1;
3617 object->local_forced = (octet >> 4) & 0x1;
3618 object->over_range = (octet >> 5) & 0x1;
3619 object->reference_err = (octet >> 6) & 0x1;
3620 object->reserved0 = (octet >> 7) & 0x1;
3622 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
3626 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3636 if (
object != NULL) {
3643 static int DNP3DecodeObjectG31V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3644 uint32_t start, uint32_t count, DNP3PointList *points)
3647 uint32_t prefix = 0;
3648 uint32_t point_index = start;
3650 if (*
len < count/8) {
3655 object =
SCCalloc(1,
sizeof(*
object));
3660 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3666 if (!DNP3ReadUint8(buf,
len, &octet)) {
3669 object->online = (octet >> 0) & 0x1;
3670 object->restart = (octet >> 1) & 0x1;
3671 object->comm_lost = (octet >> 2) & 0x1;
3672 object->remote_forced = (octet >> 3) & 0x1;
3673 object->local_forced = (octet >> 4) & 0x1;
3674 object->over_range = (octet >> 5) & 0x1;
3675 object->reference_err = (octet >> 6) & 0x1;
3676 object->reserved0 = (octet >> 7) & 0x1;
3678 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3682 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3692 if (
object != NULL) {
3699 static int DNP3DecodeObjectG31V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3700 uint32_t start, uint32_t count, DNP3PointList *points)
3703 uint32_t prefix = 0;
3704 uint32_t point_index = start;
3706 if (*
len < count/8) {
3711 object =
SCCalloc(1,
sizeof(*
object));
3716 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3722 if (!DNP3ReadUint8(buf,
len, &octet)) {
3725 object->online = (octet >> 0) & 0x1;
3726 object->restart = (octet >> 1) & 0x1;
3727 object->comm_lost = (octet >> 2) & 0x1;
3728 object->remote_forced = (octet >> 3) & 0x1;
3729 object->local_forced = (octet >> 4) & 0x1;
3730 object->over_range = (octet >> 5) & 0x1;
3731 object->reference_err = (octet >> 6) & 0x1;
3732 object->reserved0 = (octet >> 7) & 0x1;
3734 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3738 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3748 if (
object != NULL) {
3755 static int DNP3DecodeObjectG31V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3756 uint32_t start, uint32_t count, DNP3PointList *points)
3759 uint32_t prefix = 0;
3760 uint32_t point_index = start;
3762 if (*
len < count/8) {
3767 object =
SCCalloc(1,
sizeof(*
object));
3772 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3778 if (!DNP3ReadUint8(buf,
len, &octet)) {
3781 object->online = (octet >> 0) & 0x1;
3782 object->restart = (octet >> 1) & 0x1;
3783 object->comm_lost = (octet >> 2) & 0x1;
3784 object->remote_forced = (octet >> 3) & 0x1;
3785 object->local_forced = (octet >> 4) & 0x1;
3786 object->over_range = (octet >> 5) & 0x1;
3787 object->reference_err = (octet >> 6) & 0x1;
3788 object->reserved0 = (octet >> 7) & 0x1;
3790 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
3797 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3807 if (
object != NULL) {
3814 static int DNP3DecodeObjectG31V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3815 uint32_t start, uint32_t count, DNP3PointList *points)
3818 uint32_t prefix = 0;
3819 uint32_t point_index = start;
3821 if (*
len < count/8) {
3826 object =
SCCalloc(1,
sizeof(*
object));
3831 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3837 if (!DNP3ReadUint8(buf,
len, &octet)) {
3840 object->online = (octet >> 0) & 0x1;
3841 object->restart = (octet >> 1) & 0x1;
3842 object->comm_lost = (octet >> 2) & 0x1;
3843 object->remote_forced = (octet >> 3) & 0x1;
3844 object->local_forced = (octet >> 4) & 0x1;
3845 object->over_range = (octet >> 5) & 0x1;
3846 object->reference_err = (octet >> 6) & 0x1;
3847 object->reserved0 = (octet >> 7) & 0x1;
3849 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
3856 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3866 if (
object != NULL) {
3873 static int DNP3DecodeObjectG31V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3874 uint32_t start, uint32_t count, DNP3PointList *points)
3877 uint32_t prefix = 0;
3878 uint32_t point_index = start;
3880 if (*
len < count/8) {
3885 object =
SCCalloc(1,
sizeof(*
object));
3890 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3894 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
3898 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3908 if (
object != NULL) {
3915 static int DNP3DecodeObjectG31V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3916 uint32_t start, uint32_t count, DNP3PointList *points)
3919 uint32_t prefix = 0;
3920 uint32_t point_index = start;
3922 if (*
len < count/8) {
3927 object =
SCCalloc(1,
sizeof(*
object));
3932 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3936 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
3940 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
3950 if (
object != NULL) {
3957 static int DNP3DecodeObjectG31V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
3958 uint32_t start, uint32_t count, DNP3PointList *points)
3961 uint32_t prefix = 0;
3962 uint32_t point_index = start;
3964 if (*
len < count/8) {
3969 object =
SCCalloc(1,
sizeof(*
object));
3974 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
3980 if (!DNP3ReadUint8(buf,
len, &octet)) {
3983 object->online = (octet >> 0) & 0x1;
3984 object->restart = (octet >> 1) & 0x1;
3985 object->comm_lost = (octet >> 2) & 0x1;
3986 object->remote_forced = (octet >> 3) & 0x1;
3987 object->local_forced = (octet >> 4) & 0x1;
3988 object->over_range = (octet >> 5) & 0x1;
3989 object->reference_err = (octet >> 6) & 0x1;
3990 object->reserved0 = (octet >> 7) & 0x1;
3992 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
3996 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4006 if (
object != NULL) {
4013 static int DNP3DecodeObjectG31V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4014 uint32_t start, uint32_t count, DNP3PointList *points)
4017 uint32_t prefix = 0;
4018 uint32_t point_index = start;
4020 if (*
len < count/8) {
4025 object =
SCCalloc(1,
sizeof(*
object));
4030 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4036 if (!DNP3ReadUint8(buf,
len, &octet)) {
4039 object->online = (octet >> 0) & 0x1;
4040 object->restart = (octet >> 1) & 0x1;
4041 object->comm_lost = (octet >> 2) & 0x1;
4042 object->remote_forced = (octet >> 3) & 0x1;
4043 object->local_forced = (octet >> 4) & 0x1;
4044 object->over_range = (octet >> 5) & 0x1;
4045 object->reference_err = (octet >> 6) & 0x1;
4046 object->reserved0 = (octet >> 7) & 0x1;
4048 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4052 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4062 if (
object != NULL) {
4069 static int DNP3DecodeObjectG32V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4070 uint32_t start, uint32_t count, DNP3PointList *points)
4073 uint32_t prefix = 0;
4074 uint32_t point_index = start;
4076 if (*
len < count/8) {
4081 object =
SCCalloc(1,
sizeof(*
object));
4086 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4092 if (!DNP3ReadUint8(buf,
len, &octet)) {
4095 object->online = (octet >> 0) & 0x1;
4096 object->restart = (octet >> 1) & 0x1;
4097 object->comm_lost = (octet >> 2) & 0x1;
4098 object->remote_forced = (octet >> 3) & 0x1;
4099 object->local_forced = (octet >> 4) & 0x1;
4100 object->over_range = (octet >> 5) & 0x1;
4101 object->reference_err = (octet >> 6) & 0x1;
4102 object->reserved0 = (octet >> 7) & 0x1;
4104 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4108 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4118 if (
object != NULL) {
4125 static int DNP3DecodeObjectG32V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4126 uint32_t start, uint32_t count, DNP3PointList *points)
4129 uint32_t prefix = 0;
4130 uint32_t point_index = start;
4132 if (*
len < count/8) {
4137 object =
SCCalloc(1,
sizeof(*
object));
4142 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4148 if (!DNP3ReadUint8(buf,
len, &octet)) {
4151 object->online = (octet >> 0) & 0x1;
4152 object->restart = (octet >> 1) & 0x1;
4153 object->comm_lost = (octet >> 2) & 0x1;
4154 object->remote_forced = (octet >> 3) & 0x1;
4155 object->local_forced = (octet >> 4) & 0x1;
4156 object->over_range = (octet >> 5) & 0x1;
4157 object->reference_err = (octet >> 6) & 0x1;
4158 object->reserved0 = (octet >> 7) & 0x1;
4160 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4164 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4174 if (
object != NULL) {
4181 static int DNP3DecodeObjectG32V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4182 uint32_t start, uint32_t count, DNP3PointList *points)
4185 uint32_t prefix = 0;
4186 uint32_t point_index = start;
4188 if (*
len < count/8) {
4193 object =
SCCalloc(1,
sizeof(*
object));
4198 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4204 if (!DNP3ReadUint8(buf,
len, &octet)) {
4207 object->online = (octet >> 0) & 0x1;
4208 object->restart = (octet >> 1) & 0x1;
4209 object->comm_lost = (octet >> 2) & 0x1;
4210 object->remote_forced = (octet >> 3) & 0x1;
4211 object->local_forced = (octet >> 4) & 0x1;
4212 object->over_range = (octet >> 5) & 0x1;
4213 object->reference_err = (octet >> 6) & 0x1;
4214 object->reserved0 = (octet >> 7) & 0x1;
4216 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4223 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4233 if (
object != NULL) {
4240 static int DNP3DecodeObjectG32V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4241 uint32_t start, uint32_t count, DNP3PointList *points)
4244 uint32_t prefix = 0;
4245 uint32_t point_index = start;
4247 if (*
len < count/8) {
4252 object =
SCCalloc(1,
sizeof(*
object));
4257 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4263 if (!DNP3ReadUint8(buf,
len, &octet)) {
4266 object->online = (octet >> 0) & 0x1;
4267 object->restart = (octet >> 1) & 0x1;
4268 object->comm_lost = (octet >> 2) & 0x1;
4269 object->remote_forced = (octet >> 3) & 0x1;
4270 object->local_forced = (octet >> 4) & 0x1;
4271 object->over_range = (octet >> 5) & 0x1;
4272 object->reference_err = (octet >> 6) & 0x1;
4273 object->reserved0 = (octet >> 7) & 0x1;
4275 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4282 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4292 if (
object != NULL) {
4299 static int DNP3DecodeObjectG32V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4300 uint32_t start, uint32_t count, DNP3PointList *points)
4303 uint32_t prefix = 0;
4304 uint32_t point_index = start;
4306 if (*
len < count/8) {
4311 object =
SCCalloc(1,
sizeof(*
object));
4316 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4322 if (!DNP3ReadUint8(buf,
len, &octet)) {
4325 object->online = (octet >> 0) & 0x1;
4326 object->restart = (octet >> 1) & 0x1;
4327 object->comm_lost = (octet >> 2) & 0x1;
4328 object->remote_forced = (octet >> 3) & 0x1;
4329 object->local_forced = (octet >> 4) & 0x1;
4330 object->over_range = (octet >> 5) & 0x1;
4331 object->reference_err = (octet >> 6) & 0x1;
4332 object->reserved0 = (octet >> 7) & 0x1;
4334 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4338 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4348 if (
object != NULL) {
4355 static int DNP3DecodeObjectG32V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4356 uint32_t start, uint32_t count, DNP3PointList *points)
4359 uint32_t prefix = 0;
4360 uint32_t point_index = start;
4362 if (*
len < count/8) {
4367 object =
SCCalloc(1,
sizeof(*
object));
4372 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4378 if (!DNP3ReadUint8(buf,
len, &octet)) {
4381 object->online = (octet >> 0) & 0x1;
4382 object->restart = (octet >> 1) & 0x1;
4383 object->comm_lost = (octet >> 2) & 0x1;
4384 object->remote_forced = (octet >> 3) & 0x1;
4385 object->local_forced = (octet >> 4) & 0x1;
4386 object->over_range = (octet >> 5) & 0x1;
4387 object->reference_err = (octet >> 6) & 0x1;
4388 object->reserved0 = (octet >> 7) & 0x1;
4390 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4394 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4404 if (
object != NULL) {
4411 static int DNP3DecodeObjectG32V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4412 uint32_t start, uint32_t count, DNP3PointList *points)
4415 uint32_t prefix = 0;
4416 uint32_t point_index = start;
4418 if (*
len < count/8) {
4423 object =
SCCalloc(1,
sizeof(*
object));
4428 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4434 if (!DNP3ReadUint8(buf,
len, &octet)) {
4437 object->online = (octet >> 0) & 0x1;
4438 object->restart = (octet >> 1) & 0x1;
4439 object->comm_lost = (octet >> 2) & 0x1;
4440 object->remote_forced = (octet >> 3) & 0x1;
4441 object->local_forced = (octet >> 4) & 0x1;
4442 object->over_range = (octet >> 5) & 0x1;
4443 object->reference_err = (octet >> 6) & 0x1;
4444 object->reserved0 = (octet >> 7) & 0x1;
4446 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4453 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4463 if (
object != NULL) {
4470 static int DNP3DecodeObjectG32V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4471 uint32_t start, uint32_t count, DNP3PointList *points)
4474 uint32_t prefix = 0;
4475 uint32_t point_index = start;
4477 if (*
len < count/8) {
4482 object =
SCCalloc(1,
sizeof(*
object));
4487 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4493 if (!DNP3ReadUint8(buf,
len, &octet)) {
4496 object->online = (octet >> 0) & 0x1;
4497 object->restart = (octet >> 1) & 0x1;
4498 object->comm_lost = (octet >> 2) & 0x1;
4499 object->remote_forced = (octet >> 3) & 0x1;
4500 object->local_forced = (octet >> 4) & 0x1;
4501 object->over_range = (octet >> 5) & 0x1;
4502 object->reference_err = (octet >> 6) & 0x1;
4503 object->reserved0 = (octet >> 7) & 0x1;
4505 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4512 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4522 if (
object != NULL) {
4529 static int DNP3DecodeObjectG33V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4530 uint32_t start, uint32_t count, DNP3PointList *points)
4533 uint32_t prefix = 0;
4534 uint32_t point_index = start;
4536 if (*
len < count/8) {
4541 object =
SCCalloc(1,
sizeof(*
object));
4546 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4552 if (!DNP3ReadUint8(buf,
len, &octet)) {
4555 object->online = (octet >> 0) & 0x1;
4556 object->restart = (octet >> 1) & 0x1;
4557 object->comm_lost = (octet >> 2) & 0x1;
4558 object->remote_forced = (octet >> 3) & 0x1;
4559 object->local_forced = (octet >> 4) & 0x1;
4560 object->over_range = (octet >> 5) & 0x1;
4561 object->reference_err = (octet >> 6) & 0x1;
4562 object->reserved0 = (octet >> 7) & 0x1;
4564 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4568 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4578 if (
object != NULL) {
4585 static int DNP3DecodeObjectG33V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4586 uint32_t start, uint32_t count, DNP3PointList *points)
4589 uint32_t prefix = 0;
4590 uint32_t point_index = start;
4592 if (*
len < count/8) {
4597 object =
SCCalloc(1,
sizeof(*
object));
4602 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4608 if (!DNP3ReadUint8(buf,
len, &octet)) {
4611 object->online = (octet >> 0) & 0x1;
4612 object->restart = (octet >> 1) & 0x1;
4613 object->comm_lost = (octet >> 2) & 0x1;
4614 object->remote_forced = (octet >> 3) & 0x1;
4615 object->local_forced = (octet >> 4) & 0x1;
4616 object->over_range = (octet >> 5) & 0x1;
4617 object->reference_err = (octet >> 6) & 0x1;
4618 object->reserved0 = (octet >> 7) & 0x1;
4620 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4624 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4634 if (
object != NULL) {
4641 static int DNP3DecodeObjectG33V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4642 uint32_t start, uint32_t count, DNP3PointList *points)
4645 uint32_t prefix = 0;
4646 uint32_t point_index = start;
4648 if (*
len < count/8) {
4653 object =
SCCalloc(1,
sizeof(*
object));
4658 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4664 if (!DNP3ReadUint8(buf,
len, &octet)) {
4667 object->online = (octet >> 0) & 0x1;
4668 object->restart = (octet >> 1) & 0x1;
4669 object->comm_lost = (octet >> 2) & 0x1;
4670 object->remote_forced = (octet >> 3) & 0x1;
4671 object->local_forced = (octet >> 4) & 0x1;
4672 object->over_range = (octet >> 5) & 0x1;
4673 object->reference_err = (octet >> 6) & 0x1;
4674 object->reserved0 = (octet >> 7) & 0x1;
4676 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
4683 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4693 if (
object != NULL) {
4700 static int DNP3DecodeObjectG33V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4701 uint32_t start, uint32_t count, DNP3PointList *points)
4704 uint32_t prefix = 0;
4705 uint32_t point_index = start;
4707 if (*
len < count/8) {
4712 object =
SCCalloc(1,
sizeof(*
object));
4717 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4723 if (!DNP3ReadUint8(buf,
len, &octet)) {
4726 object->online = (octet >> 0) & 0x1;
4727 object->restart = (octet >> 1) & 0x1;
4728 object->comm_lost = (octet >> 2) & 0x1;
4729 object->remote_forced = (octet >> 3) & 0x1;
4730 object->local_forced = (octet >> 4) & 0x1;
4731 object->over_range = (octet >> 5) & 0x1;
4732 object->reference_err = (octet >> 6) & 0x1;
4733 object->reserved0 = (octet >> 7) & 0x1;
4735 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
4742 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4752 if (
object != NULL) {
4759 static int DNP3DecodeObjectG33V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4760 uint32_t start, uint32_t count, DNP3PointList *points)
4763 uint32_t prefix = 0;
4764 uint32_t point_index = start;
4766 if (*
len < count/8) {
4771 object =
SCCalloc(1,
sizeof(*
object));
4776 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4782 if (!DNP3ReadUint8(buf,
len, &octet)) {
4785 object->online = (octet >> 0) & 0x1;
4786 object->restart = (octet >> 1) & 0x1;
4787 object->comm_lost = (octet >> 2) & 0x1;
4788 object->remote_forced = (octet >> 3) & 0x1;
4789 object->local_forced = (octet >> 4) & 0x1;
4790 object->over_range = (octet >> 5) & 0x1;
4791 object->reference_err = (octet >> 6) & 0x1;
4792 object->reserved0 = (octet >> 7) & 0x1;
4794 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4798 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4808 if (
object != NULL) {
4815 static int DNP3DecodeObjectG33V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4816 uint32_t start, uint32_t count, DNP3PointList *points)
4819 uint32_t prefix = 0;
4820 uint32_t point_index = start;
4822 if (*
len < count/8) {
4827 object =
SCCalloc(1,
sizeof(*
object));
4832 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4838 if (!DNP3ReadUint8(buf,
len, &octet)) {
4841 object->online = (octet >> 0) & 0x1;
4842 object->restart = (octet >> 1) & 0x1;
4843 object->comm_lost = (octet >> 2) & 0x1;
4844 object->remote_forced = (octet >> 3) & 0x1;
4845 object->local_forced = (octet >> 4) & 0x1;
4846 object->over_range = (octet >> 5) & 0x1;
4847 object->reference_err = (octet >> 6) & 0x1;
4848 object->reserved0 = (octet >> 7) & 0x1;
4850 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4854 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4864 if (
object != NULL) {
4871 static int DNP3DecodeObjectG33V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4872 uint32_t start, uint32_t count, DNP3PointList *points)
4875 uint32_t prefix = 0;
4876 uint32_t point_index = start;
4878 if (*
len < count/8) {
4883 object =
SCCalloc(1,
sizeof(*
object));
4888 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4894 if (!DNP3ReadUint8(buf,
len, &octet)) {
4897 object->online = (octet >> 0) & 0x1;
4898 object->restart = (octet >> 1) & 0x1;
4899 object->comm_lost = (octet >> 2) & 0x1;
4900 object->remote_forced = (octet >> 3) & 0x1;
4901 object->local_forced = (octet >> 4) & 0x1;
4902 object->over_range = (octet >> 5) & 0x1;
4903 object->reference_err = (octet >> 6) & 0x1;
4904 object->reserved0 = (octet >> 7) & 0x1;
4906 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
4913 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4923 if (
object != NULL) {
4930 static int DNP3DecodeObjectG33V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4931 uint32_t start, uint32_t count, DNP3PointList *points)
4934 uint32_t prefix = 0;
4935 uint32_t point_index = start;
4937 if (*
len < count/8) {
4942 object =
SCCalloc(1,
sizeof(*
object));
4947 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
4953 if (!DNP3ReadUint8(buf,
len, &octet)) {
4956 object->online = (octet >> 0) & 0x1;
4957 object->restart = (octet >> 1) & 0x1;
4958 object->comm_lost = (octet >> 2) & 0x1;
4959 object->remote_forced = (octet >> 3) & 0x1;
4960 object->local_forced = (octet >> 4) & 0x1;
4961 object->over_range = (octet >> 5) & 0x1;
4962 object->reference_err = (octet >> 6) & 0x1;
4963 object->reserved0 = (octet >> 7) & 0x1;
4965 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
4972 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
4982 if (
object != NULL) {
4989 static int DNP3DecodeObjectG34V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
4990 uint32_t start, uint32_t count, DNP3PointList *points)
4993 uint32_t prefix = 0;
4994 uint32_t point_index = start;
4996 if (*
len < count/8) {
5001 object =
SCCalloc(1,
sizeof(*
object));
5006 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5014 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5024 if (
object != NULL) {
5031 static int DNP3DecodeObjectG34V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5032 uint32_t start, uint32_t count, DNP3PointList *points)
5035 uint32_t prefix = 0;
5036 uint32_t point_index = start;
5038 if (*
len < count/8) {
5043 object =
SCCalloc(1,
sizeof(*
object));
5048 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5056 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5066 if (
object != NULL) {
5073 static int DNP3DecodeObjectG34V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5074 uint32_t start, uint32_t count, DNP3PointList *points)
5077 uint32_t prefix = 0;
5078 uint32_t point_index = start;
5080 if (*
len < count/8) {
5085 object =
SCCalloc(1,
sizeof(*
object));
5090 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5098 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5108 if (
object != NULL) {
5115 static int DNP3DecodeObjectG40V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5116 uint32_t start, uint32_t count, DNP3PointList *points)
5119 uint32_t prefix = 0;
5120 uint32_t point_index = start;
5122 if (*
len < count/8) {
5127 object =
SCCalloc(1,
sizeof(*
object));
5132 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5138 if (!DNP3ReadUint8(buf,
len, &octet)) {
5141 object->online = (octet >> 0) & 0x1;
5142 object->restart = (octet >> 1) & 0x1;
5143 object->comm_lost = (octet >> 2) & 0x1;
5144 object->remote_forced = (octet >> 3) & 0x1;
5145 object->local_forced = (octet >> 4) & 0x1;
5146 object->over_range = (octet >> 5) & 0x1;
5147 object->reference_err = (octet >> 6) & 0x1;
5148 object->reserved0 = (octet >> 7) & 0x1;
5150 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5154 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5164 if (
object != NULL) {
5171 static int DNP3DecodeObjectG40V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5172 uint32_t start, uint32_t count, DNP3PointList *points)
5175 uint32_t prefix = 0;
5176 uint32_t point_index = start;
5178 if (*
len < count/8) {
5183 object =
SCCalloc(1,
sizeof(*
object));
5188 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5194 if (!DNP3ReadUint8(buf,
len, &octet)) {
5197 object->online = (octet >> 0) & 0x1;
5198 object->restart = (octet >> 1) & 0x1;
5199 object->comm_lost = (octet >> 2) & 0x1;
5200 object->remote_forced = (octet >> 3) & 0x1;
5201 object->local_forced = (octet >> 4) & 0x1;
5202 object->over_range = (octet >> 5) & 0x1;
5203 object->reference_err = (octet >> 6) & 0x1;
5204 object->reserved0 = (octet >> 7) & 0x1;
5206 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5210 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5220 if (
object != NULL) {
5227 static int DNP3DecodeObjectG40V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5228 uint32_t start, uint32_t count, DNP3PointList *points)
5231 uint32_t prefix = 0;
5232 uint32_t point_index = start;
5234 if (*
len < count/8) {
5239 object =
SCCalloc(1,
sizeof(*
object));
5244 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5250 if (!DNP3ReadUint8(buf,
len, &octet)) {
5253 object->online = (octet >> 0) & 0x1;
5254 object->restart = (octet >> 1) & 0x1;
5255 object->comm_lost = (octet >> 2) & 0x1;
5256 object->remote_forced = (octet >> 3) & 0x1;
5257 object->local_forced = (octet >> 4) & 0x1;
5258 object->over_range = (octet >> 5) & 0x1;
5259 object->reference_err = (octet >> 6) & 0x1;
5260 object->reserved0 = (octet >> 7) & 0x1;
5262 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5266 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5276 if (
object != NULL) {
5283 static int DNP3DecodeObjectG40V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5284 uint32_t start, uint32_t count, DNP3PointList *points)
5287 uint32_t prefix = 0;
5288 uint32_t point_index = start;
5290 if (*
len < count/8) {
5295 object =
SCCalloc(1,
sizeof(*
object));
5300 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5306 if (!DNP3ReadUint8(buf,
len, &octet)) {
5309 object->online = (octet >> 0) & 0x1;
5310 object->restart = (octet >> 1) & 0x1;
5311 object->comm_lost = (octet >> 2) & 0x1;
5312 object->remote_forced = (octet >> 3) & 0x1;
5313 object->local_forced = (octet >> 4) & 0x1;
5314 object->over_range = (octet >> 5) & 0x1;
5315 object->reference_err = (octet >> 6) & 0x1;
5316 object->reserved0 = (octet >> 7) & 0x1;
5318 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5322 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5332 if (
object != NULL) {
5339 static int DNP3DecodeObjectG41V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5340 uint32_t start, uint32_t count, DNP3PointList *points)
5343 uint32_t prefix = 0;
5344 uint32_t point_index = start;
5346 if (*
len < count/8) {
5351 object =
SCCalloc(1,
sizeof(*
object));
5356 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5360 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&object->
value)) {
5367 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5377 if (
object != NULL) {
5384 static int DNP3DecodeObjectG41V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5385 uint32_t start, uint32_t count, DNP3PointList *points)
5388 uint32_t prefix = 0;
5389 uint32_t point_index = start;
5391 if (*
len < count/8) {
5396 object =
SCCalloc(1,
sizeof(*
object));
5401 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5405 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&object->
value)) {
5412 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5422 if (
object != NULL) {
5429 static int DNP3DecodeObjectG41V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5430 uint32_t start, uint32_t count, DNP3PointList *points)
5433 uint32_t prefix = 0;
5434 uint32_t point_index = start;
5436 if (*
len < count/8) {
5441 object =
SCCalloc(1,
sizeof(*
object));
5446 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5450 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5457 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5467 if (
object != NULL) {
5474 static int DNP3DecodeObjectG41V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5475 uint32_t start, uint32_t count, DNP3PointList *points)
5478 uint32_t prefix = 0;
5479 uint32_t point_index = start;
5481 if (*
len < count/8) {
5486 object =
SCCalloc(1,
sizeof(*
object));
5491 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5495 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5502 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5512 if (
object != NULL) {
5519 static int DNP3DecodeObjectG42V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5520 uint32_t start, uint32_t count, DNP3PointList *points)
5523 uint32_t prefix = 0;
5524 uint32_t point_index = start;
5526 if (*
len < count/8) {
5531 object =
SCCalloc(1,
sizeof(*
object));
5536 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5542 if (!DNP3ReadUint8(buf,
len, &octet)) {
5545 object->online = (octet >> 0) & 0x1;
5546 object->restart = (octet >> 1) & 0x1;
5547 object->comm_lost = (octet >> 2) & 0x1;
5548 object->remote_forced = (octet >> 3) & 0x1;
5549 object->local_forced = (octet >> 4) & 0x1;
5550 object->over_range = (octet >> 5) & 0x1;
5551 object->reference_err = (octet >> 6) & 0x1;
5552 object->reserved0 = (octet >> 7) & 0x1;
5554 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5558 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5568 if (
object != NULL) {
5575 static int DNP3DecodeObjectG42V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5576 uint32_t start, uint32_t count, DNP3PointList *points)
5579 uint32_t prefix = 0;
5580 uint32_t point_index = start;
5582 if (*
len < count/8) {
5587 object =
SCCalloc(1,
sizeof(*
object));
5592 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5598 if (!DNP3ReadUint8(buf,
len, &octet)) {
5601 object->online = (octet >> 0) & 0x1;
5602 object->restart = (octet >> 1) & 0x1;
5603 object->comm_lost = (octet >> 2) & 0x1;
5604 object->remote_forced = (octet >> 3) & 0x1;
5605 object->local_forced = (octet >> 4) & 0x1;
5606 object->over_range = (octet >> 5) & 0x1;
5607 object->reference_err = (octet >> 6) & 0x1;
5608 object->reserved0 = (octet >> 7) & 0x1;
5610 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5614 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5624 if (
object != NULL) {
5631 static int DNP3DecodeObjectG42V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5632 uint32_t start, uint32_t count, DNP3PointList *points)
5635 uint32_t prefix = 0;
5636 uint32_t point_index = start;
5638 if (*
len < count/8) {
5643 object =
SCCalloc(1,
sizeof(*
object));
5648 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5654 if (!DNP3ReadUint8(buf,
len, &octet)) {
5657 object->online = (octet >> 0) & 0x1;
5658 object->restart = (octet >> 1) & 0x1;
5659 object->comm_lost = (octet >> 2) & 0x1;
5660 object->remote_forced = (octet >> 3) & 0x1;
5661 object->local_forced = (octet >> 4) & 0x1;
5662 object->over_range = (octet >> 5) & 0x1;
5663 object->reference_err = (octet >> 6) & 0x1;
5664 object->reserved0 = (octet >> 7) & 0x1;
5666 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->value)) {
5673 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5683 if (
object != NULL) {
5690 static int DNP3DecodeObjectG42V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5691 uint32_t start, uint32_t count, DNP3PointList *points)
5694 uint32_t prefix = 0;
5695 uint32_t point_index = start;
5697 if (*
len < count/8) {
5702 object =
SCCalloc(1,
sizeof(*
object));
5707 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5713 if (!DNP3ReadUint8(buf,
len, &octet)) {
5716 object->online = (octet >> 0) & 0x1;
5717 object->restart = (octet >> 1) & 0x1;
5718 object->comm_lost = (octet >> 2) & 0x1;
5719 object->remote_forced = (octet >> 3) & 0x1;
5720 object->local_forced = (octet >> 4) & 0x1;
5721 object->over_range = (octet >> 5) & 0x1;
5722 object->reference_err = (octet >> 6) & 0x1;
5723 object->reserved0 = (octet >> 7) & 0x1;
5725 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->value)) {
5732 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5742 if (
object != NULL) {
5749 static int DNP3DecodeObjectG42V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5750 uint32_t start, uint32_t count, DNP3PointList *points)
5753 uint32_t prefix = 0;
5754 uint32_t point_index = start;
5756 if (*
len < count/8) {
5761 object =
SCCalloc(1,
sizeof(*
object));
5766 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5772 if (!DNP3ReadUint8(buf,
len, &octet)) {
5775 object->online = (octet >> 0) & 0x1;
5776 object->restart = (octet >> 1) & 0x1;
5777 object->comm_lost = (octet >> 2) & 0x1;
5778 object->remote_forced = (octet >> 3) & 0x1;
5779 object->local_forced = (octet >> 4) & 0x1;
5780 object->over_range = (octet >> 5) & 0x1;
5781 object->reference_err = (octet >> 6) & 0x1;
5782 object->reserved0 = (octet >> 7) & 0x1;
5784 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5788 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5798 if (
object != NULL) {
5805 static int DNP3DecodeObjectG42V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5806 uint32_t start, uint32_t count, DNP3PointList *points)
5809 uint32_t prefix = 0;
5810 uint32_t point_index = start;
5812 if (*
len < count/8) {
5817 object =
SCCalloc(1,
sizeof(*
object));
5822 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5828 if (!DNP3ReadUint8(buf,
len, &octet)) {
5831 object->online = (octet >> 0) & 0x1;
5832 object->restart = (octet >> 1) & 0x1;
5833 object->comm_lost = (octet >> 2) & 0x1;
5834 object->remote_forced = (octet >> 3) & 0x1;
5835 object->local_forced = (octet >> 4) & 0x1;
5836 object->over_range = (octet >> 5) & 0x1;
5837 object->reference_err = (octet >> 6) & 0x1;
5838 object->reserved0 = (octet >> 7) & 0x1;
5840 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5844 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5854 if (
object != NULL) {
5861 static int DNP3DecodeObjectG42V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5862 uint32_t start, uint32_t count, DNP3PointList *points)
5865 uint32_t prefix = 0;
5866 uint32_t point_index = start;
5868 if (*
len < count/8) {
5873 object =
SCCalloc(1,
sizeof(*
object));
5878 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5884 if (!DNP3ReadUint8(buf,
len, &octet)) {
5887 object->online = (octet >> 0) & 0x1;
5888 object->restart = (octet >> 1) & 0x1;
5889 object->comm_lost = (octet >> 2) & 0x1;
5890 object->remote_forced = (octet >> 3) & 0x1;
5891 object->local_forced = (octet >> 4) & 0x1;
5892 object->over_range = (octet >> 5) & 0x1;
5893 object->reference_err = (octet >> 6) & 0x1;
5894 object->reserved0 = (octet >> 7) & 0x1;
5896 if (!DNP3ReadFloat32(buf,
len, &object->
value)) {
5903 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5913 if (
object != NULL) {
5920 static int DNP3DecodeObjectG42V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5921 uint32_t start, uint32_t count, DNP3PointList *points)
5924 uint32_t prefix = 0;
5925 uint32_t point_index = start;
5927 if (*
len < count/8) {
5932 object =
SCCalloc(1,
sizeof(*
object));
5937 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
5943 if (!DNP3ReadUint8(buf,
len, &octet)) {
5946 object->online = (octet >> 0) & 0x1;
5947 object->restart = (octet >> 1) & 0x1;
5948 object->comm_lost = (octet >> 2) & 0x1;
5949 object->remote_forced = (octet >> 3) & 0x1;
5950 object->local_forced = (octet >> 4) & 0x1;
5951 object->over_range = (octet >> 5) & 0x1;
5952 object->reference_err = (octet >> 6) & 0x1;
5953 object->reserved0 = (octet >> 7) & 0x1;
5955 if (!DNP3ReadFloat64(buf,
len, &object->
value)) {
5962 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
5972 if (
object != NULL) {
5979 static int DNP3DecodeObjectG43V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
5980 uint32_t start, uint32_t count, DNP3PointList *points)
5983 uint32_t prefix = 0;
5984 uint32_t point_index = start;
5986 if (*
len < count/8) {
5991 object =
SCCalloc(1,
sizeof(*
object));
5996 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6002 if (!DNP3ReadUint8(buf,
len, &octet)) {
6005 object->status_code = (octet >> 0) & 0x7f;
6006 object->reserved0 = (octet >> 7) & 0x1;
6008 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->commanded_value)) {
6012 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6022 if (
object != NULL) {
6029 static int DNP3DecodeObjectG43V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6030 uint32_t start, uint32_t count, DNP3PointList *points)
6033 uint32_t prefix = 0;
6034 uint32_t point_index = start;
6036 if (*
len < count/8) {
6041 object =
SCCalloc(1,
sizeof(*
object));
6046 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6052 if (!DNP3ReadUint8(buf,
len, &octet)) {
6055 object->status_code = (octet >> 0) & 0x7f;
6056 object->reserved0 = (octet >> 7) & 0x1;
6058 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->commanded_value)) {
6062 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6072 if (
object != NULL) {
6079 static int DNP3DecodeObjectG43V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6080 uint32_t start, uint32_t count, DNP3PointList *points)
6083 uint32_t prefix = 0;
6084 uint32_t point_index = start;
6086 if (*
len < count/8) {
6091 object =
SCCalloc(1,
sizeof(*
object));
6096 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6102 if (!DNP3ReadUint8(buf,
len, &octet)) {
6105 object->status_code = (octet >> 0) & 0x7f;
6106 object->reserved0 = (octet >> 7) & 0x1;
6108 if (!DNP3ReadUint32(buf,
len, (uint32_t *)&
object->commanded_value)) {
6115 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6125 if (
object != NULL) {
6132 static int DNP3DecodeObjectG43V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6133 uint32_t start, uint32_t count, DNP3PointList *points)
6136 uint32_t prefix = 0;
6137 uint32_t point_index = start;
6139 if (*
len < count/8) {
6144 object =
SCCalloc(1,
sizeof(*
object));
6149 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6155 if (!DNP3ReadUint8(buf,
len, &octet)) {
6158 object->status_code = (octet >> 0) & 0x7f;
6159 object->reserved0 = (octet >> 7) & 0x1;
6161 if (!DNP3ReadUint16(buf,
len, (uint16_t *)&
object->commanded_value)) {
6168 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6178 if (
object != NULL) {
6185 static int DNP3DecodeObjectG43V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6186 uint32_t start, uint32_t count, DNP3PointList *points)
6189 uint32_t prefix = 0;
6190 uint32_t point_index = start;
6192 if (*
len < count/8) {
6197 object =
SCCalloc(1,
sizeof(*
object));
6202 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6208 if (!DNP3ReadUint8(buf,
len, &octet)) {
6211 object->status_code = (octet >> 0) & 0x7f;
6212 object->reserved0 = (octet >> 7) & 0x1;
6218 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6228 if (
object != NULL) {
6235 static int DNP3DecodeObjectG43V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6236 uint32_t start, uint32_t count, DNP3PointList *points)
6239 uint32_t prefix = 0;
6240 uint32_t point_index = start;
6242 if (*
len < count/8) {
6247 object =
SCCalloc(1,
sizeof(*
object));
6252 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6258 if (!DNP3ReadUint8(buf,
len, &octet)) {
6261 object->status_code = (octet >> 0) & 0x7f;
6262 object->reserved0 = (octet >> 7) & 0x1;
6268 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6278 if (
object != NULL) {
6285 static int DNP3DecodeObjectG43V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6286 uint32_t start, uint32_t count, DNP3PointList *points)
6289 uint32_t prefix = 0;
6290 uint32_t point_index = start;
6292 if (*
len < count/8) {
6297 object =
SCCalloc(1,
sizeof(*
object));
6302 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6308 if (!DNP3ReadUint8(buf,
len, &octet)) {
6311 object->status_code = (octet >> 0) & 0x7f;
6312 object->reserved0 = (octet >> 7) & 0x1;
6321 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6331 if (
object != NULL) {
6338 static int DNP3DecodeObjectG43V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6339 uint32_t start, uint32_t count, DNP3PointList *points)
6342 uint32_t prefix = 0;
6343 uint32_t point_index = start;
6345 if (*
len < count/8) {
6350 object =
SCCalloc(1,
sizeof(*
object));
6355 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6361 if (!DNP3ReadUint8(buf,
len, &octet)) {
6364 object->status_code = (octet >> 0) & 0x7f;
6365 object->reserved0 = (octet >> 7) & 0x1;
6374 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6384 if (
object != NULL) {
6391 static int DNP3DecodeObjectG50V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6392 uint32_t start, uint32_t count, DNP3PointList *points)
6395 uint32_t prefix = 0;
6396 uint32_t point_index = start;
6398 if (*
len < count/8) {
6403 object =
SCCalloc(1,
sizeof(*
object));
6408 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6416 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6426 if (
object != NULL) {
6433 static int DNP3DecodeObjectG50V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6434 uint32_t start, uint32_t count, DNP3PointList *points)
6437 uint32_t prefix = 0;
6438 uint32_t point_index = start;
6440 if (*
len < count/8) {
6445 object =
SCCalloc(1,
sizeof(*
object));
6450 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6457 if (!DNP3ReadUint32(buf,
len, &object->
interval)) {
6461 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6471 if (
object != NULL) {
6478 static int DNP3DecodeObjectG50V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6479 uint32_t start, uint32_t count, DNP3PointList *points)
6482 uint32_t prefix = 0;
6483 uint32_t point_index = start;
6485 if (*
len < count/8) {
6490 object =
SCCalloc(1,
sizeof(*
object));
6495 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6503 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6513 if (
object != NULL) {
6520 static int DNP3DecodeObjectG50V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6521 uint32_t start, uint32_t count, DNP3PointList *points)
6524 uint32_t prefix = 0;
6525 uint32_t point_index = start;
6527 if (*
len < count/8) {
6532 object =
SCCalloc(1,
sizeof(*
object));
6537 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6551 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6561 if (
object != NULL) {
6568 static int DNP3DecodeObjectG51V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6569 uint32_t start, uint32_t count, DNP3PointList *points)
6572 uint32_t prefix = 0;
6573 uint32_t point_index = start;
6575 if (*
len < count/8) {
6580 object =
SCCalloc(1,
sizeof(*
object));
6585 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6593 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6603 if (
object != NULL) {
6610 static int DNP3DecodeObjectG51V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6611 uint32_t start, uint32_t count, DNP3PointList *points)
6614 uint32_t prefix = 0;
6615 uint32_t point_index = start;
6617 if (*
len < count/8) {
6622 object =
SCCalloc(1,
sizeof(*
object));
6627 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6635 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6645 if (
object != NULL) {
6652 static int DNP3DecodeObjectG52V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6653 uint32_t start, uint32_t count, DNP3PointList *points)
6656 uint32_t prefix = 0;
6657 uint32_t point_index = start;
6659 if (*
len < count/8) {
6664 object =
SCCalloc(1,
sizeof(*
object));
6669 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6677 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6687 if (
object != NULL) {
6694 static int DNP3DecodeObjectG52V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6695 uint32_t start, uint32_t count, DNP3PointList *points)
6698 uint32_t prefix = 0;
6699 uint32_t point_index = start;
6701 if (*
len < count/8) {
6706 object =
SCCalloc(1,
sizeof(*
object));
6711 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6715 if (!DNP3ReadUint16(buf,
len, &object->
delay_ms)) {
6719 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6729 if (
object != NULL) {
6736 static int DNP3DecodeObjectG70V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6737 uint32_t start, uint32_t count, DNP3PointList *points)
6740 uint32_t prefix = 0;
6741 uint32_t point_index = start;
6743 if (*
len < count/8) {
6748 object =
SCCalloc(1,
sizeof(*
object));
6753 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6781 if (!DNP3ReadUint32(buf,
len, &object->
file_id)) {
6784 if (!DNP3ReadUint32(buf,
len, &object->
owner_id)) {
6787 if (!DNP3ReadUint32(buf,
len, &object->
group_id)) {
6797 if (*len < object->filename_size) {
6802 *buf +=
object->filename_size;
6803 *
len -=
object->filename_size;
6805 object->filename[
object->filename_size] =
'\0';
6810 if (*len < object->data_size) {
6815 *buf +=
object->data_size;
6816 *
len -=
object->data_size;
6818 object->data[
object->data_size] =
'\0';
6820 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6830 if (
object != NULL) {
6837 static int DNP3DecodeObjectG70V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6838 uint32_t start, uint32_t count, DNP3PointList *points)
6841 uint32_t prefix = 0;
6842 uint32_t point_index = start;
6844 if (*
len < count/8) {
6849 object =
SCCalloc(1,
sizeof(*
object));
6854 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6874 if (*len < object->username_size) {
6879 *buf +=
object->username_size;
6880 *
len -=
object->username_size;
6882 object->username[
object->username_size] =
'\0';
6884 if (*len < object->password_size) {
6889 *buf +=
object->password_size;
6890 *
len -=
object->password_size;
6892 object->password[
object->password_size] =
'\0';
6894 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6904 if (
object != NULL) {
6911 static int DNP3DecodeObjectG70V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6912 uint32_t start, uint32_t count, DNP3PointList *points)
6915 uint32_t prefix = 0;
6916 uint32_t point_index = start;
6918 if (*
len < count/8) {
6923 object =
SCCalloc(1,
sizeof(*
object));
6928 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6938 if (!DNP3ReadUint48(buf,
len, &object->
created)) {
6960 if (*len < object->filename_size) {
6965 *buf +=
object->filename_size;
6966 *
len -=
object->filename_size;
6968 object->filename[
object->filename_size] =
'\0';
6970 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6980 if (
object != NULL) {
6987 static int DNP3DecodeObjectG70V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6988 uint32_t start, uint32_t count, DNP3PointList *points)
6991 uint32_t prefix = 0;
6992 uint32_t point_index = start;
6999 if (*
len < count/8) {
7004 object =
SCCalloc(1,
sizeof(*
object));
7009 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7033 object->optional_text_len = (uint8_t)(prefix - (
offset - *
len));
7035 if (*len < object->optional_text_len) {
7040 *buf +=
object->optional_text_len;
7041 *
len -=
object->optional_text_len;
7043 object->optional_text[
object->optional_text_len] =
'\0';
7045 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7055 if (
object != NULL) {
7062 static int DNP3DecodeObjectG70V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7063 uint32_t start, uint32_t count, DNP3PointList *points)
7066 uint32_t prefix = 0;
7067 uint32_t point_index = start;
7074 if (*
len < count/8) {
7079 object =
SCCalloc(1,
sizeof(*
object));
7084 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7099 object->file_data_len = (uint8_t)(prefix - (
offset - *
len));
7101 if (*len < object->file_data_len) {
7106 *buf +=
object->file_data_len;
7107 *
len -=
object->file_data_len;
7109 object->file_data[
object->file_data_len] =
'\0';
7111 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7121 if (
object != NULL) {
7128 static int DNP3DecodeObjectG70V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7129 uint32_t start, uint32_t count, DNP3PointList *points)
7132 uint32_t prefix = 0;
7133 uint32_t point_index = start;
7140 if (*
len < count/8) {
7145 object =
SCCalloc(1,
sizeof(*
object));
7150 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7168 object->optional_text_len = (uint8_t)(prefix - (
offset - *
len));
7170 if (*len < object->optional_text_len) {
7175 *buf +=
object->optional_text_len;
7176 *
len -=
object->optional_text_len;
7178 object->optional_text[
object->optional_text_len] =
'\0';
7180 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7190 if (
object != NULL) {
7197 static int DNP3DecodeObjectG70V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7198 uint32_t start, uint32_t count, DNP3PointList *points)
7201 uint32_t prefix = 0;
7202 uint32_t point_index = start;
7204 if (*
len < count/8) {
7209 object =
SCCalloc(1,
sizeof(*
object));
7214 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7240 if (*len < object->filename_size) {
7245 *buf +=
object->filename_size;
7246 *
len -=
object->filename_size;
7248 object->filename[
object->filename_size] =
'\0';
7250 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7260 if (
object != NULL) {
7267 static int DNP3DecodeObjectG70V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7268 uint32_t start, uint32_t count, DNP3PointList *points)
7271 uint32_t prefix = 0;
7272 uint32_t point_index = start;
7275 if (prefix_code != 5) {
7279 if (*
len < count/8) {
7284 object =
SCCalloc(1,
sizeof(*
object));
7289 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7298 object->file_specification_len = (uint16_t)(prefix - (
offset - *
len));
7300 if (*len < object->file_specification_len) {
7305 *buf +=
object->file_specification_len;
7306 *
len -=
object->file_specification_len;
7308 object->file_specification[
object->file_specification_len] =
'\0';
7310 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7320 if (
object != NULL) {
7327 static int DNP3DecodeObjectG80V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7328 uint32_t start, uint32_t count, DNP3PointList *points)
7331 uint32_t bytes = (count / 8) + 1;
7332 uint32_t prefix = 0;
7333 uint32_t point_index = start;
7335 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7339 for (uint32_t i = 0; i < bytes; i++) {
7343 if (!DNP3ReadUint8(buf,
len, &octet)) {
7347 for (
int j = 0; j < 8 && count; j = j + 1) {
7349 object =
SCCalloc(1,
sizeof(*
object));
7354 object->state = (octet >> j) & 0x1;
7356 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7369 if (
object != NULL) {
7375 static int DNP3DecodeObjectG81V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7376 uint32_t start, uint32_t count, DNP3PointList *points)
7379 uint32_t prefix = 0;
7380 uint32_t point_index = start;
7382 if (*
len < count/8) {
7387 object =
SCCalloc(1,
sizeof(*
object));
7392 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7398 if (!DNP3ReadUint8(buf,
len, &octet)) {
7401 object->fill_percentage = (octet >> 0) & 0x7f;
7402 object->overflow_state = (octet >> 7) & 0x1;
7404 if (!DNP3ReadUint8(buf,
len, &object->
group)) {
7411 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7421 if (
object != NULL) {
7428 static int DNP3DecodeObjectG83V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7429 uint32_t start, uint32_t count, DNP3PointList *points)
7432 uint32_t prefix = 0;
7433 uint32_t point_index = start;
7435 if (*
len < count/8) {
7440 object =
SCCalloc(1,
sizeof(*
object));
7445 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7453 object->vendor_code[4] =
'\0';
7459 if (!DNP3ReadUint16(buf,
len, &object->
length)) {
7462 if (object->
length > 0) {
7463 if (*len < object->length) {
7472 *buf +=
object->length;
7473 *
len -=
object->length;
7476 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7486 if (
object != NULL) {
7496 static int DNP3DecodeObjectG86V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7497 uint32_t start, uint32_t count, DNP3PointList *points)
7500 uint32_t prefix = 0;
7501 uint32_t point_index = start;
7503 if (*
len < count/8) {
7508 object =
SCCalloc(1,
sizeof(*
object));
7513 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7519 if (!DNP3ReadUint8(buf,
len, &octet)) {
7522 object->rd = (octet >> 0) & 0x1;
7523 object->wr = (octet >> 1) & 0x1;
7524 object->st = (octet >> 2) & 0x1;
7525 object->ev = (octet >> 3) & 0x1;
7526 object->df = (octet >> 4) & 0x1;
7527 object->padding0 = (octet >> 5) & 0x1;
7528 object->padding1 = (octet >> 6) & 0x1;
7529 object->padding2 = (octet >> 7) & 0x1;
7532 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7542 if (
object != NULL) {
7549 static int DNP3DecodeObjectG102V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7550 uint32_t start, uint32_t count, DNP3PointList *points)
7553 uint32_t prefix = 0;
7554 uint32_t point_index = start;
7556 if (*
len < count/8) {
7561 object =
SCCalloc(1,
sizeof(*
object));
7566 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7570 if (!DNP3ReadUint8(buf,
len, &object->
value)) {
7574 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7584 if (
object != NULL) {
7591 static int DNP3DecodeObjectG120V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7592 uint32_t start, uint32_t count, DNP3PointList *points)
7595 uint32_t prefix = 0;
7596 uint32_t point_index = start;
7599 if (prefix_code != 5) {
7603 if (*
len < count/8) {
7608 object =
SCCalloc(1,
sizeof(*
object));
7613 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7619 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7622 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
7625 if (!DNP3ReadUint8(buf,
len, &object->
mal)) {
7628 if (!DNP3ReadUint8(buf,
len, &object->
reason)) {
7634 object->challenge_data_len = (uint16_t)(prefix - (
offset - *
len));
7636 if (*len < object->challenge_data_len) {
7645 *buf +=
object->challenge_data_len;
7646 *
len -=
object->challenge_data_len;
7649 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7659 if (
object != NULL) {
7669 static int DNP3DecodeObjectG120V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7670 uint32_t start, uint32_t count, DNP3PointList *points)
7673 uint32_t prefix = 0;
7674 uint32_t point_index = start;
7677 if (prefix_code != 5) {
7681 if (*
len < count/8) {
7686 object =
SCCalloc(1,
sizeof(*
object));
7691 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7697 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7700 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
7706 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
7708 if (*len < object->mac_value_len) {
7717 *buf +=
object->mac_value_len;
7718 *
len -=
object->mac_value_len;
7721 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7731 if (
object != NULL) {
7741 static int DNP3DecodeObjectG120V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7742 uint32_t start, uint32_t count, DNP3PointList *points)
7745 uint32_t prefix = 0;
7746 uint32_t point_index = start;
7748 if (*
len < count/8) {
7753 object =
SCCalloc(1,
sizeof(*
object));
7758 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7762 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7769 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7779 if (
object != NULL) {
7786 static int DNP3DecodeObjectG120V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7787 uint32_t start, uint32_t count, DNP3PointList *points)
7790 uint32_t prefix = 0;
7791 uint32_t point_index = start;
7793 if (*
len < count/8) {
7798 object =
SCCalloc(1,
sizeof(*
object));
7803 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7811 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7821 if (
object != NULL) {
7828 static int DNP3DecodeObjectG120V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7829 uint32_t start, uint32_t count, DNP3PointList *points)
7832 uint32_t prefix = 0;
7833 uint32_t point_index = start;
7836 if (prefix_code != 5) {
7840 if (*
len < count/8) {
7845 object =
SCCalloc(1,
sizeof(*
object));
7850 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7856 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
7868 if (!DNP3ReadUint8(buf,
len, &object->
mal)) {
7875 if (*len < object->challenge_data_len) {
7884 *buf +=
object->challenge_data_len;
7885 *
len -=
object->challenge_data_len;
7890 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
7892 if (*len < object->mac_value_len) {
7901 *buf +=
object->mac_value_len;
7902 *
len -=
object->mac_value_len;
7905 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7915 if (
object != NULL) {
7928 static int DNP3DecodeObjectG120V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7929 uint32_t start, uint32_t count, DNP3PointList *points)
7932 uint32_t prefix = 0;
7933 uint32_t point_index = start;
7936 if (prefix_code != 5) {
7940 if (*
len < count/8) {
7945 object =
SCCalloc(1,
sizeof(*
object));
7950 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7956 if (!DNP3ReadUint24(buf,
len, &object->
ksq)) {
7959 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
7965 object->wrapped_key_data_len = (uint16_t)(prefix - (
offset - *
len));
7967 if (*len < object->wrapped_key_data_len) {
7976 *buf +=
object->wrapped_key_data_len;
7977 *
len -=
object->wrapped_key_data_len;
7980 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7990 if (
object != NULL) {
8000 static int DNP3DecodeObjectG120V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8001 uint32_t start, uint32_t count, DNP3PointList *points)
8004 uint32_t prefix = 0;
8005 uint32_t point_index = start;
8008 if (prefix_code != 5) {
8012 if (*
len < count/8) {
8017 object =
SCCalloc(1,
sizeof(*
object));
8022 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8031 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
8046 object->error_text_len = (uint16_t)(prefix - (
offset - *
len));
8048 if (*len < object->error_text_len) {
8053 *buf +=
object->error_text_len;
8054 *
len -=
object->error_text_len;
8056 object->error_text[
object->error_text_len] =
'\0';
8058 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8068 if (
object != NULL) {
8075 static int DNP3DecodeObjectG120V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8076 uint32_t start, uint32_t count, DNP3PointList *points)
8079 uint32_t prefix = 0;
8080 uint32_t point_index = start;
8083 if (prefix_code != 5) {
8087 if (*
len < count/8) {
8092 object =
SCCalloc(1,
sizeof(*
object));
8097 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8112 object->certificate_len = (uint16_t)(prefix - (
offset - *
len));
8114 if (*len < object->certificate_len) {
8123 *buf +=
object->certificate_len;
8124 *
len -=
object->certificate_len;
8127 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8137 if (
object != NULL) {
8147 static int DNP3DecodeObjectG120V9(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8148 uint32_t start, uint32_t count, DNP3PointList *points)
8151 uint32_t prefix = 0;
8152 uint32_t point_index = start;
8155 if (*
len < count/8) {
8160 object =
SCCalloc(1,
sizeof(*
object));
8165 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8174 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
8176 if (*len < object->mac_value_len) {
8185 *buf +=
object->mac_value_len;
8186 *
len -=
object->mac_value_len;
8189 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8199 if (
object != NULL) {
8209 static int DNP3DecodeObjectG120V10(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8210 uint32_t start, uint32_t count, DNP3PointList *points)
8213 uint32_t prefix = 0;
8214 uint32_t point_index = start;
8216 if (prefix_code != 5) {
8220 if (*
len < count/8) {
8225 object =
SCCalloc(1,
sizeof(*
object));
8230 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8240 if (!DNP3ReadUint32(buf,
len, &object->
scs)) {
8259 if (*len < object->username_len) {
8264 *buf +=
object->username_len;
8265 *
len -=
object->username_len;
8267 object->username[
object->username_len] =
'\0';
8269 if (*len < object->user_public_key_len) {
8278 *buf +=
object->user_public_key_len;
8279 *
len -=
object->user_public_key_len;
8282 if (*len < object->certification_data_len) {
8291 *buf +=
object->certification_data_len;
8292 *
len -=
object->certification_data_len;
8295 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8305 if (
object != NULL) {
8318 static int DNP3DecodeObjectG120V11(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8319 uint32_t start, uint32_t count, DNP3PointList *points)
8322 uint32_t prefix = 0;
8323 uint32_t point_index = start;
8325 if (prefix_code != 5) {
8329 if (*
len < count/8) {
8334 object =
SCCalloc(1,
sizeof(*
object));
8339 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8353 if (*len < object->username_len) {
8358 *buf +=
object->username_len;
8359 *
len -=
object->username_len;
8361 object->username[
object->username_len] =
'\0';
8363 if (*len < object->master_challenge_data_len) {
8372 *buf +=
object->master_challenge_data_len;
8373 *
len -=
object->master_challenge_data_len;
8376 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8386 if (
object != NULL) {
8396 static int DNP3DecodeObjectG120V12(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8397 uint32_t start, uint32_t count, DNP3PointList *points)
8400 uint32_t prefix = 0;
8401 uint32_t point_index = start;
8403 if (prefix_code != 5) {
8407 if (*
len < count/8) {
8412 object =
SCCalloc(1,
sizeof(*
object));
8417 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8421 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
8431 if (*len < object->challenge_data_len) {
8440 *buf +=
object->challenge_data_len;
8441 *
len -=
object->challenge_data_len;
8444 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8454 if (
object != NULL) {
8464 static int DNP3DecodeObjectG120V13(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8465 uint32_t start, uint32_t count, DNP3PointList *points)
8468 uint32_t prefix = 0;
8469 uint32_t point_index = start;
8471 if (prefix_code != 5) {
8475 if (*
len < count/8) {
8480 object =
SCCalloc(1,
sizeof(*
object));
8485 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8489 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
8499 if (*len < object->encrypted_update_key_len) {
8508 *buf +=
object->encrypted_update_key_len;
8509 *
len -=
object->encrypted_update_key_len;
8512 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8522 if (
object != NULL) {
8532 static int DNP3DecodeObjectG120V14(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8533 uint32_t start, uint32_t count, DNP3PointList *points)
8536 uint32_t prefix = 0;
8537 uint32_t point_index = start;
8540 if (prefix_code != 5) {
8544 if (*
len < count/8) {
8549 object =
SCCalloc(1,
sizeof(*
object));
8554 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8563 object->digital_signature_len = (uint16_t)(prefix - (
offset - *
len));
8565 if (*len < object->digital_signature_len) {
8574 *buf +=
object->digital_signature_len;
8575 *
len -=
object->digital_signature_len;
8578 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8588 if (
object != NULL) {
8598 static int DNP3DecodeObjectG120V15(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8599 uint32_t start, uint32_t count, DNP3PointList *points)
8602 uint32_t prefix = 0;
8603 uint32_t point_index = start;
8606 if (prefix_code != 5) {
8610 if (*
len < count/8) {
8615 object =
SCCalloc(1,
sizeof(*
object));
8620 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8629 object->mac_len = (uint16_t)(prefix - (
offset - *
len));
8631 if (*len < object->mac_len) {
8640 *buf +=
object->mac_len;
8641 *
len -=
object->mac_len;
8644 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8654 if (
object != NULL) {
8655 if (object->
mac != NULL) {
8664 static int DNP3DecodeObjectG121V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8665 uint32_t start, uint32_t count, DNP3PointList *points)
8668 uint32_t prefix = 0;
8669 uint32_t point_index = start;
8671 if (*
len < count/8) {
8676 object =
SCCalloc(1,
sizeof(*
object));
8681 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8687 if (!DNP3ReadUint8(buf,
len, &octet)) {
8690 object->online = (octet >> 0) & 0x1;
8691 object->restart = (octet >> 1) & 0x1;
8692 object->comm_lost = (octet >> 2) & 0x1;
8693 object->remote_forced = (octet >> 3) & 0x1;
8694 object->local_forced = (octet >> 4) & 0x1;
8695 object->reserved0 = (octet >> 5) & 0x1;
8696 object->discontinuity = (octet >> 6) & 0x1;
8697 object->reserved1 = (octet >> 7) & 0x1;
8706 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8716 if (
object != NULL) {
8723 static int DNP3DecodeObjectG122V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8724 uint32_t start, uint32_t count, DNP3PointList *points)
8727 uint32_t prefix = 0;
8728 uint32_t point_index = start;
8730 if (*
len < count/8) {
8735 object =
SCCalloc(1,
sizeof(*
object));
8740 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8746 if (!DNP3ReadUint8(buf,
len, &octet)) {
8749 object->online = (octet >> 0) & 0x1;
8750 object->restart = (octet >> 1) & 0x1;
8751 object->comm_lost = (octet >> 2) & 0x1;
8752 object->remote_forced = (octet >> 3) & 0x1;
8753 object->local_forced = (octet >> 4) & 0x1;
8754 object->reserved0 = (octet >> 5) & 0x1;
8755 object->discontinuity = (octet >> 6) & 0x1;
8756 object->reserved1 = (octet >> 7) & 0x1;
8765 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8775 if (
object != NULL) {
8782 static int DNP3DecodeObjectG122V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8783 uint32_t start, uint32_t count, DNP3PointList *points)
8786 uint32_t prefix = 0;
8787 uint32_t point_index = start;
8789 if (*
len < count/8) {
8794 object =
SCCalloc(1,
sizeof(*
object));
8799 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8805 if (!DNP3ReadUint8(buf,
len, &octet)) {
8808 object->online = (octet >> 0) & 0x1;
8809 object->restart = (octet >> 1) & 0x1;
8810 object->comm_lost = (octet >> 2) & 0x1;
8811 object->remote_forced = (octet >> 3) & 0x1;
8812 object->local_forced = (octet >> 4) & 0x1;
8813 object->reserved0 = (octet >> 5) & 0x1;
8814 object->discontinuity = (octet >> 6) & 0x1;
8815 object->reserved1 = (octet >> 7) & 0x1;
8827 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8837 if (
object != NULL) {
8940 if (object->
mac != NULL) {
8958 uint8_t prefix_code, uint32_t start, uint32_t count, DNP3PointList *points)
8964 rc = DNP3DecodeObjectG1V1(buf,
len, prefix_code, start, count,
8968 rc = DNP3DecodeObjectG1V2(buf,
len, prefix_code, start, count,
8972 rc = DNP3DecodeObjectG2V1(buf,
len, prefix_code, start, count,
8976 rc = DNP3DecodeObjectG2V2(buf,
len, prefix_code, start, count,
8980 rc = DNP3DecodeObjectG2V3(buf,
len, prefix_code, start, count,
8984 rc = DNP3DecodeObjectG3V1(buf,
len, prefix_code, start, count,
8988 rc = DNP3DecodeObjectG3V2(buf,
len, prefix_code, start, count,
8992 rc = DNP3DecodeObjectG4V1(buf,
len, prefix_code, start, count,
8996 rc = DNP3DecodeObjectG4V2(buf,
len, prefix_code, start, count,
9000 rc = DNP3DecodeObjectG4V3(buf,
len, prefix_code, start, count,
9004 rc = DNP3DecodeObjectG10V1(buf,
len, prefix_code, start, count,
9008 rc = DNP3DecodeObjectG10V2(buf,
len, prefix_code, start, count,
9012 rc = DNP3DecodeObjectG11V1(buf,
len, prefix_code, start, count,
9016 rc = DNP3DecodeObjectG11V2(buf,
len, prefix_code, start, count,
9020 rc = DNP3DecodeObjectG12V1(buf,
len, prefix_code, start, count,
9024 rc = DNP3DecodeObjectG12V2(buf,
len, prefix_code, start, count,
9028 rc = DNP3DecodeObjectG12V3(buf,
len, prefix_code, start, count,
9032 rc = DNP3DecodeObjectG13V1(buf,
len, prefix_code, start, count,
9036 rc = DNP3DecodeObjectG13V2(buf,
len, prefix_code, start, count,
9040 rc = DNP3DecodeObjectG20V1(buf,
len, prefix_code, start, count,
9044 rc = DNP3DecodeObjectG20V2(buf,
len, prefix_code, start, count,
9048 rc = DNP3DecodeObjectG20V3(buf,
len, prefix_code, start, count,
9052 rc = DNP3DecodeObjectG20V4(buf,
len, prefix_code, start, count,
9056 rc = DNP3DecodeObjectG20V5(buf,
len, prefix_code, start, count,
9060 rc = DNP3DecodeObjectG20V6(buf,
len, prefix_code, start, count,
9064 rc = DNP3DecodeObjectG20V7(buf,
len, prefix_code, start, count,
9068 rc = DNP3DecodeObjectG20V8(buf,
len, prefix_code, start, count,
9072 rc = DNP3DecodeObjectG21V1(buf,
len, prefix_code, start, count,
9076 rc = DNP3DecodeObjectG21V2(buf,
len, prefix_code, start, count,
9080 rc = DNP3DecodeObjectG21V3(buf,
len, prefix_code, start, count,
9084 rc = DNP3DecodeObjectG21V4(buf,
len, prefix_code, start, count,
9088 rc = DNP3DecodeObjectG21V5(buf,
len, prefix_code, start, count,
9092 rc = DNP3DecodeObjectG21V6(buf,
len, prefix_code, start, count,
9096 rc = DNP3DecodeObjectG21V7(buf,
len, prefix_code, start, count,
9100 rc = DNP3DecodeObjectG21V8(buf,
len, prefix_code, start, count,
9104 rc = DNP3DecodeObjectG21V9(buf,
len, prefix_code, start, count,
9108 rc = DNP3DecodeObjectG21V10(buf,
len, prefix_code, start, count,
9112 rc = DNP3DecodeObjectG21V11(buf,
len, prefix_code, start, count,
9116 rc = DNP3DecodeObjectG21V12(buf,
len, prefix_code, start, count,
9120 rc = DNP3DecodeObjectG22V1(buf,
len, prefix_code, start, count,
9124 rc = DNP3DecodeObjectG22V2(buf,
len, prefix_code, start, count,
9128 rc = DNP3DecodeObjectG22V3(buf,
len, prefix_code, start, count,
9132 rc = DNP3DecodeObjectG22V4(buf,
len, prefix_code, start, count,
9136 rc = DNP3DecodeObjectG22V5(buf,
len, prefix_code, start, count,
9140 rc = DNP3DecodeObjectG22V6(buf,
len, prefix_code, start, count,
9144 rc = DNP3DecodeObjectG22V7(buf,
len, prefix_code, start, count,
9148 rc = DNP3DecodeObjectG22V8(buf,
len, prefix_code, start, count,
9152 rc = DNP3DecodeObjectG23V1(buf,
len, prefix_code, start, count,
9156 rc = DNP3DecodeObjectG23V2(buf,
len, prefix_code, start, count,
9160 rc = DNP3DecodeObjectG23V3(buf,
len, prefix_code, start, count,
9164 rc = DNP3DecodeObjectG23V4(buf,
len, prefix_code, start, count,
9168 rc = DNP3DecodeObjectG23V5(buf,
len, prefix_code, start, count,
9172 rc = DNP3DecodeObjectG23V6(buf,
len, prefix_code, start, count,
9176 rc = DNP3DecodeObjectG23V7(buf,
len, prefix_code, start, count,
9180 rc = DNP3DecodeObjectG23V8(buf,
len, prefix_code, start, count,
9184 rc = DNP3DecodeObjectG30V1(buf,
len, prefix_code, start, count,
9188 rc = DNP3DecodeObjectG30V2(buf,
len, prefix_code, start, count,
9192 rc = DNP3DecodeObjectG30V3(buf,
len, prefix_code, start, count,
9196 rc = DNP3DecodeObjectG30V4(buf,
len, prefix_code, start, count,
9200 rc = DNP3DecodeObjectG30V5(buf,
len, prefix_code, start, count,
9204 rc = DNP3DecodeObjectG30V6(buf,
len, prefix_code, start, count,
9208 rc = DNP3DecodeObjectG31V1(buf,
len, prefix_code, start, count,
9212 rc = DNP3DecodeObjectG31V2(buf,
len, prefix_code, start, count,
9216 rc = DNP3DecodeObjectG31V3(buf,
len, prefix_code, start, count,
9220 rc = DNP3DecodeObjectG31V4(buf,
len, prefix_code, start, count,
9224 rc = DNP3DecodeObjectG31V5(buf,
len, prefix_code, start, count,
9228 rc = DNP3DecodeObjectG31V6(buf,
len, prefix_code, start, count,
9232 rc = DNP3DecodeObjectG31V7(buf,
len, prefix_code, start, count,
9236 rc = DNP3DecodeObjectG31V8(buf,
len, prefix_code, start, count,
9240 rc = DNP3DecodeObjectG32V1(buf,
len, prefix_code, start, count,
9244 rc = DNP3DecodeObjectG32V2(buf,
len, prefix_code, start, count,
9248 rc = DNP3DecodeObjectG32V3(buf,
len, prefix_code, start, count,
9252 rc = DNP3DecodeObjectG32V4(buf,
len, prefix_code, start, count,
9256 rc = DNP3DecodeObjectG32V5(buf,
len, prefix_code, start, count,
9260 rc = DNP3DecodeObjectG32V6(buf,
len, prefix_code, start, count,
9264 rc = DNP3DecodeObjectG32V7(buf,
len, prefix_code, start, count,
9268 rc = DNP3DecodeObjectG32V8(buf,
len, prefix_code, start, count,
9272 rc = DNP3DecodeObjectG33V1(buf,
len, prefix_code, start, count,
9276 rc = DNP3DecodeObjectG33V2(buf,
len, prefix_code, start, count,
9280 rc = DNP3DecodeObjectG33V3(buf,
len, prefix_code, start, count,
9284 rc = DNP3DecodeObjectG33V4(buf,
len, prefix_code, start, count,
9288 rc = DNP3DecodeObjectG33V5(buf,
len, prefix_code, start, count,
9292 rc = DNP3DecodeObjectG33V6(buf,
len, prefix_code, start, count,
9296 rc = DNP3DecodeObjectG33V7(buf,
len, prefix_code, start, count,
9300 rc = DNP3DecodeObjectG33V8(buf,
len, prefix_code, start, count,
9304 rc = DNP3DecodeObjectG34V1(buf,
len, prefix_code, start, count,
9308 rc = DNP3DecodeObjectG34V2(buf,
len, prefix_code, start, count,
9312 rc = DNP3DecodeObjectG34V3(buf,
len, prefix_code, start, count,
9316 rc = DNP3DecodeObjectG40V1(buf,
len, prefix_code, start, count,
9320 rc = DNP3DecodeObjectG40V2(buf,
len, prefix_code, start, count,
9324 rc = DNP3DecodeObjectG40V3(buf,
len, prefix_code, start, count,
9328 rc = DNP3DecodeObjectG40V4(buf,
len, prefix_code, start, count,
9332 rc = DNP3DecodeObjectG41V1(buf,
len, prefix_code, start, count,
9336 rc = DNP3DecodeObjectG41V2(buf,
len, prefix_code, start, count,
9340 rc = DNP3DecodeObjectG41V3(buf,
len, prefix_code, start, count,
9344 rc = DNP3DecodeObjectG41V4(buf,
len, prefix_code, start, count,
9348 rc = DNP3DecodeObjectG42V1(buf,
len, prefix_code, start, count,
9352 rc = DNP3DecodeObjectG42V2(buf,
len, prefix_code, start, count,
9356 rc = DNP3DecodeObjectG42V3(buf,
len, prefix_code, start, count,
9360 rc = DNP3DecodeObjectG42V4(buf,
len, prefix_code, start, count,
9364 rc = DNP3DecodeObjectG42V5(buf,
len, prefix_code, start, count,
9368 rc = DNP3DecodeObjectG42V6(buf,
len, prefix_code, start, count,
9372 rc = DNP3DecodeObjectG42V7(buf,
len, prefix_code, start, count,
9376 rc = DNP3DecodeObjectG42V8(buf,
len, prefix_code, start, count,
9380 rc = DNP3DecodeObjectG43V1(buf,
len, prefix_code, start, count,
9384 rc = DNP3DecodeObjectG43V2(buf,
len, prefix_code, start, count,
9388 rc = DNP3DecodeObjectG43V3(buf,
len, prefix_code, start, count,
9392 rc = DNP3DecodeObjectG43V4(buf,
len, prefix_code, start, count,
9396 rc = DNP3DecodeObjectG43V5(buf,
len, prefix_code, start, count,
9400 rc = DNP3DecodeObjectG43V6(buf,
len, prefix_code, start, count,
9404 rc = DNP3DecodeObjectG43V7(buf,
len, prefix_code, start, count,
9408 rc = DNP3DecodeObjectG43V8(buf,
len, prefix_code, start, count,
9412 rc = DNP3DecodeObjectG50V1(buf,
len, prefix_code, start, count,
9416 rc = DNP3DecodeObjectG50V2(buf,
len, prefix_code, start, count,
9420 rc = DNP3DecodeObjectG50V3(buf,
len, prefix_code, start, count,
9424 rc = DNP3DecodeObjectG50V4(buf,
len, prefix_code, start, count,
9428 rc = DNP3DecodeObjectG51V1(buf,
len, prefix_code, start, count,
9432 rc = DNP3DecodeObjectG51V2(buf,
len, prefix_code, start, count,
9436 rc = DNP3DecodeObjectG52V1(buf,
len, prefix_code, start, count,
9440 rc = DNP3DecodeObjectG52V2(buf,
len, prefix_code, start, count,
9444 rc = DNP3DecodeObjectG70V1(buf,
len, prefix_code, start, count,
9448 rc = DNP3DecodeObjectG70V2(buf,
len, prefix_code, start, count,
9452 rc = DNP3DecodeObjectG70V3(buf,
len, prefix_code, start, count,
9456 rc = DNP3DecodeObjectG70V4(buf,
len, prefix_code, start, count,
9460 rc = DNP3DecodeObjectG70V5(buf,
len, prefix_code, start, count,
9464 rc = DNP3DecodeObjectG70V6(buf,
len, prefix_code, start, count,
9468 rc = DNP3DecodeObjectG70V7(buf,
len, prefix_code, start, count,
9472 rc = DNP3DecodeObjectG70V8(buf,
len, prefix_code, start, count,
9476 rc = DNP3DecodeObjectG80V1(buf,
len, prefix_code, start, count,
9480 rc = DNP3DecodeObjectG81V1(buf,
len, prefix_code, start, count,
9484 rc = DNP3DecodeObjectG83V1(buf,
len, prefix_code, start, count,
9488 rc = DNP3DecodeObjectG86V2(buf,
len, prefix_code, start, count,
9492 rc = DNP3DecodeObjectG102V1(buf,
len, prefix_code, start, count,
9496 rc = DNP3DecodeObjectG120V1(buf,
len, prefix_code, start, count,
9500 rc = DNP3DecodeObjectG120V2(buf,
len, prefix_code, start, count,
9504 rc = DNP3DecodeObjectG120V3(buf,
len, prefix_code, start, count,
9508 rc = DNP3DecodeObjectG120V4(buf,
len, prefix_code, start, count,
9512 rc = DNP3DecodeObjectG120V5(buf,
len, prefix_code, start, count,
9516 rc = DNP3DecodeObjectG120V6(buf,
len, prefix_code, start, count,
9520 rc = DNP3DecodeObjectG120V7(buf,
len, prefix_code, start, count,
9524 rc = DNP3DecodeObjectG120V8(buf,
len, prefix_code, start, count,
9528 rc = DNP3DecodeObjectG120V9(buf,
len, prefix_code, start, count,
9532 rc = DNP3DecodeObjectG120V10(buf,
len, prefix_code, start, count,
9536 rc = DNP3DecodeObjectG120V11(buf,
len, prefix_code, start, count,
9540 rc = DNP3DecodeObjectG120V12(buf,
len, prefix_code, start, count,
9544 rc = DNP3DecodeObjectG120V13(buf,
len, prefix_code, start, count,
9548 rc = DNP3DecodeObjectG120V14(buf,
len, prefix_code, start, count,
9552 rc = DNP3DecodeObjectG120V15(buf,
len, prefix_code, start, count,
9556 rc = DNP3DecodeObjectG121V1(buf,
len, prefix_code, start, count,
9560 rc = DNP3DecodeObjectG122V1(buf,
len, prefix_code, start, count,
9564 rc = DNP3DecodeObjectG122V2(buf,
len, prefix_code, start, count,