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)) {
6796 if (*len < object->filename_size) {
6806 object->filename[
object->filename_size] =
'\0';
6807 *buf +=
object->filename_size;
6808 *
len -=
object->filename_size;
6812 if (*len < object->data_size) {
6822 object->data[
object->data_size] =
'\0';
6823 *buf +=
object->data_size;
6824 *
len -=
object->data_size;
6826 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6836 if (
object != NULL) {
6840 if (object->
data != NULL) {
6849 static int DNP3DecodeObjectG70V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6850 uint32_t start, uint32_t count, DNP3PointList *points)
6853 uint32_t prefix = 0;
6854 uint32_t point_index = start;
6856 if (*
len < count/8) {
6861 object =
SCCalloc(1,
sizeof(*
object));
6866 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6885 if (*len < object->username_size) {
6895 object->username[
object->username_size] =
'\0';
6896 *buf +=
object->username_size;
6897 *
len -=
object->username_size;
6898 if (*len < object->password_size) {
6908 object->password[
object->password_size] =
'\0';
6909 *buf +=
object->password_size;
6910 *
len -=
object->password_size;
6912 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
6922 if (
object != NULL) {
6935 static int DNP3DecodeObjectG70V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
6936 uint32_t start, uint32_t count, DNP3PointList *points)
6939 uint32_t prefix = 0;
6940 uint32_t point_index = start;
6942 if (*
len < count/8) {
6947 object =
SCCalloc(1,
sizeof(*
object));
6952 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
6962 if (!DNP3ReadUint48(buf,
len, &object->
created)) {
6983 if (*len < object->filename_size) {
6993 object->filename[
object->filename_size] =
'\0';
6994 *buf +=
object->filename_size;
6995 *
len -=
object->filename_size;
6997 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7007 if (
object != NULL) {
7017 static int DNP3DecodeObjectG70V4(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7018 uint32_t start, uint32_t count, DNP3PointList *points)
7021 uint32_t prefix = 0;
7022 uint32_t point_index = start;
7029 if (*
len < count/8) {
7034 object =
SCCalloc(1,
sizeof(*
object));
7039 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7063 object->optional_text_len = (uint8_t)(prefix - (
offset - *
len));
7065 if (*len < object->optional_text_len) {
7070 *buf +=
object->optional_text_len;
7071 *
len -=
object->optional_text_len;
7073 object->optional_text[
object->optional_text_len] =
'\0';
7075 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7085 if (
object != NULL) {
7092 static int DNP3DecodeObjectG70V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7093 uint32_t start, uint32_t count, DNP3PointList *points)
7096 uint32_t prefix = 0;
7097 uint32_t point_index = start;
7104 if (*
len < count/8) {
7109 object =
SCCalloc(1,
sizeof(*
object));
7114 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7129 object->file_data_len = (uint8_t)(prefix - (
offset - *
len));
7131 if (*len < object->file_data_len) {
7136 *buf +=
object->file_data_len;
7137 *
len -=
object->file_data_len;
7139 object->file_data[
object->file_data_len] =
'\0';
7141 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7151 if (
object != NULL) {
7158 static int DNP3DecodeObjectG70V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7159 uint32_t start, uint32_t count, DNP3PointList *points)
7162 uint32_t prefix = 0;
7163 uint32_t point_index = start;
7170 if (*
len < count/8) {
7175 object =
SCCalloc(1,
sizeof(*
object));
7180 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7198 object->optional_text_len = (uint8_t)(prefix - (
offset - *
len));
7200 if (*len < object->optional_text_len) {
7205 *buf +=
object->optional_text_len;
7206 *
len -=
object->optional_text_len;
7208 object->optional_text[
object->optional_text_len] =
'\0';
7210 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7220 if (
object != NULL) {
7227 static int DNP3DecodeObjectG70V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7228 uint32_t start, uint32_t count, DNP3PointList *points)
7231 uint32_t prefix = 0;
7232 uint32_t point_index = start;
7234 if (*
len < count/8) {
7239 object =
SCCalloc(1,
sizeof(*
object));
7244 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7269 if (*len < object->filename_size) {
7279 object->filename[
object->filename_size] =
'\0';
7280 *buf +=
object->filename_size;
7281 *
len -=
object->filename_size;
7283 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7293 if (
object != NULL) {
7303 static int DNP3DecodeObjectG70V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7304 uint32_t start, uint32_t count, DNP3PointList *points)
7307 uint32_t prefix = 0;
7308 uint32_t point_index = start;
7311 if (prefix_code != 5) {
7315 if (*
len < count/8) {
7320 object =
SCCalloc(1,
sizeof(*
object));
7325 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7334 object->file_specification_len = (uint16_t)(prefix - (
offset - *
len));
7335 if (*len < object->file_specification_len) {
7345 object->file_specification[
object->file_specification_len] =
'\0';
7346 *buf +=
object->file_specification_len;
7347 *
len -=
object->file_specification_len;
7349 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7359 if (
object != NULL) {
7369 static int DNP3DecodeObjectG80V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7370 uint32_t start, uint32_t count, DNP3PointList *points)
7373 uint32_t bytes = (count / 8) + 1;
7374 uint32_t prefix = 0;
7375 uint32_t point_index = start;
7377 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7381 for (uint32_t i = 0; i < bytes; i++) {
7385 if (!DNP3ReadUint8(buf,
len, &octet)) {
7389 for (
int j = 0; j < 8 && count; j = j + 1) {
7391 object =
SCCalloc(1,
sizeof(*
object));
7396 object->state = (octet >> j) & 0x1;
7398 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7411 if (
object != NULL) {
7417 static int DNP3DecodeObjectG81V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7418 uint32_t start, uint32_t count, DNP3PointList *points)
7421 uint32_t prefix = 0;
7422 uint32_t point_index = start;
7424 if (*
len < count/8) {
7429 object =
SCCalloc(1,
sizeof(*
object));
7434 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7440 if (!DNP3ReadUint8(buf,
len, &octet)) {
7443 object->fill_percentage = (octet >> 0) & 0x7f;
7444 object->overflow_state = (octet >> 7) & 0x1;
7446 if (!DNP3ReadUint8(buf,
len, &object->
group)) {
7453 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7463 if (
object != NULL) {
7470 static int DNP3DecodeObjectG83V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7471 uint32_t start, uint32_t count, DNP3PointList *points)
7474 uint32_t prefix = 0;
7475 uint32_t point_index = start;
7477 if (*
len < count/8) {
7482 object =
SCCalloc(1,
sizeof(*
object));
7487 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7495 object->vendor_code[4] =
'\0';
7501 if (!DNP3ReadUint16(buf,
len, &object->
length)) {
7504 if (object->
length > 0) {
7505 if (*len < object->
length) {
7514 *buf +=
object->length;
7515 *
len -=
object->length;
7518 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7528 if (
object != NULL) {
7538 static int DNP3DecodeObjectG86V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7539 uint32_t start, uint32_t count, DNP3PointList *points)
7542 uint32_t prefix = 0;
7543 uint32_t point_index = start;
7545 if (*
len < count/8) {
7550 object =
SCCalloc(1,
sizeof(*
object));
7555 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7561 if (!DNP3ReadUint8(buf,
len, &octet)) {
7564 object->rd = (octet >> 0) & 0x1;
7565 object->wr = (octet >> 1) & 0x1;
7566 object->st = (octet >> 2) & 0x1;
7567 object->ev = (octet >> 3) & 0x1;
7568 object->df = (octet >> 4) & 0x1;
7569 object->padding0 = (octet >> 5) & 0x1;
7570 object->padding1 = (octet >> 6) & 0x1;
7571 object->padding2 = (octet >> 7) & 0x1;
7574 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7584 if (
object != NULL) {
7591 static int DNP3DecodeObjectG102V1(
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;
7598 if (*
len < count/8) {
7603 object =
SCCalloc(1,
sizeof(*
object));
7608 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7612 if (!DNP3ReadUint8(buf,
len, &object->
value)) {
7616 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7626 if (
object != NULL) {
7633 static int DNP3DecodeObjectG120V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7634 uint32_t start, uint32_t count, DNP3PointList *points)
7637 uint32_t prefix = 0;
7638 uint32_t point_index = start;
7641 if (prefix_code != 5) {
7645 if (*
len < count/8) {
7650 object =
SCCalloc(1,
sizeof(*
object));
7655 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7661 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7664 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
7667 if (!DNP3ReadUint8(buf,
len, &object->
mal)) {
7670 if (!DNP3ReadUint8(buf,
len, &object->
reason)) {
7676 object->challenge_data_len = (uint16_t)(prefix - (
offset - *
len));
7678 if (*len < object->challenge_data_len) {
7687 *buf +=
object->challenge_data_len;
7688 *
len -=
object->challenge_data_len;
7691 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7701 if (
object != NULL) {
7711 static int DNP3DecodeObjectG120V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7712 uint32_t start, uint32_t count, DNP3PointList *points)
7715 uint32_t prefix = 0;
7716 uint32_t point_index = start;
7719 if (prefix_code != 5) {
7723 if (*
len < count/8) {
7728 object =
SCCalloc(1,
sizeof(*
object));
7733 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7739 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7742 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
7748 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
7750 if (*len < object->mac_value_len) {
7759 *buf +=
object->mac_value_len;
7760 *
len -=
object->mac_value_len;
7763 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7773 if (
object != NULL) {
7783 static int DNP3DecodeObjectG120V3(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7784 uint32_t start, uint32_t count, DNP3PointList *points)
7787 uint32_t prefix = 0;
7788 uint32_t point_index = start;
7790 if (*
len < count/8) {
7795 object =
SCCalloc(1,
sizeof(*
object));
7800 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7804 if (!DNP3ReadUint32(buf,
len, &object->
csq)) {
7811 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7821 if (
object != NULL) {
7828 static int DNP3DecodeObjectG120V4(
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;
7835 if (*
len < count/8) {
7840 object =
SCCalloc(1,
sizeof(*
object));
7845 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7853 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7863 if (
object != NULL) {
7870 static int DNP3DecodeObjectG120V5(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7871 uint32_t start, uint32_t count, DNP3PointList *points)
7874 uint32_t prefix = 0;
7875 uint32_t point_index = start;
7878 if (prefix_code != 5) {
7882 if (*
len < count/8) {
7887 object =
SCCalloc(1,
sizeof(*
object));
7892 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7898 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
7910 if (!DNP3ReadUint8(buf,
len, &object->
mal)) {
7917 if (*len < object->challenge_data_len) {
7926 *buf +=
object->challenge_data_len;
7927 *
len -=
object->challenge_data_len;
7932 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
7934 if (*len < object->mac_value_len) {
7943 *buf +=
object->mac_value_len;
7944 *
len -=
object->mac_value_len;
7947 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
7957 if (
object != NULL) {
7970 static int DNP3DecodeObjectG120V6(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
7971 uint32_t start, uint32_t count, DNP3PointList *points)
7974 uint32_t prefix = 0;
7975 uint32_t point_index = start;
7978 if (prefix_code != 5) {
7982 if (*
len < count/8) {
7987 object =
SCCalloc(1,
sizeof(*
object));
7992 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
7998 if (!DNP3ReadUint24(buf,
len, &object->
ksq)) {
8001 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
8007 object->wrapped_key_data_len = (uint16_t)(prefix - (
offset - *
len));
8009 if (*len < object->wrapped_key_data_len) {
8018 *buf +=
object->wrapped_key_data_len;
8019 *
len -=
object->wrapped_key_data_len;
8022 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8032 if (
object != NULL) {
8042 static int DNP3DecodeObjectG120V7(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8043 uint32_t start, uint32_t count, DNP3PointList *points)
8046 uint32_t prefix = 0;
8047 uint32_t point_index = start;
8050 if (prefix_code != 5) {
8054 if (*
len < count/8) {
8059 object =
SCCalloc(1,
sizeof(*
object));
8064 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8073 if (!DNP3ReadUint16(buf,
len, &object->
usr)) {
8088 object->error_text_len = (uint16_t)(prefix - (
offset - *
len));
8089 if (*len < object->error_text_len) {
8099 object->error_text[
object->error_text_len] =
'\0';
8100 *buf +=
object->error_text_len;
8101 *
len -=
object->error_text_len;
8103 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8113 if (
object != NULL) {
8123 static int DNP3DecodeObjectG120V8(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8124 uint32_t start, uint32_t count, DNP3PointList *points)
8127 uint32_t prefix = 0;
8128 uint32_t point_index = start;
8131 if (prefix_code != 5) {
8135 if (*
len < count/8) {
8140 object =
SCCalloc(1,
sizeof(*
object));
8145 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8160 object->certificate_len = (uint16_t)(prefix - (
offset - *
len));
8162 if (*len < object->certificate_len) {
8171 *buf +=
object->certificate_len;
8172 *
len -=
object->certificate_len;
8175 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8185 if (
object != NULL) {
8195 static int DNP3DecodeObjectG120V9(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8196 uint32_t start, uint32_t count, DNP3PointList *points)
8199 uint32_t prefix = 0;
8200 uint32_t point_index = start;
8203 if (*
len < count/8) {
8208 object =
SCCalloc(1,
sizeof(*
object));
8213 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8222 object->mac_value_len = (uint16_t)(prefix - (
offset - *
len));
8224 if (*len < object->mac_value_len) {
8233 *buf +=
object->mac_value_len;
8234 *
len -=
object->mac_value_len;
8237 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8247 if (
object != NULL) {
8257 static int DNP3DecodeObjectG120V10(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8258 uint32_t start, uint32_t count, DNP3PointList *points)
8261 uint32_t prefix = 0;
8262 uint32_t point_index = start;
8264 if (prefix_code != 5) {
8268 if (*
len < count/8) {
8273 object =
SCCalloc(1,
sizeof(*
object));
8278 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8288 if (!DNP3ReadUint32(buf,
len, &object->
scs)) {
8306 if (*len < object->username_len) {
8316 object->username[
object->username_len] =
'\0';
8317 *buf +=
object->username_len;
8318 *
len -=
object->username_len;
8320 if (*len < object->user_public_key_len) {
8329 *buf +=
object->user_public_key_len;
8330 *
len -=
object->user_public_key_len;
8333 if (*len < object->certification_data_len) {
8342 *buf +=
object->certification_data_len;
8343 *
len -=
object->certification_data_len;
8346 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8356 if (
object != NULL) {
8372 static int DNP3DecodeObjectG120V11(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8373 uint32_t start, uint32_t count, DNP3PointList *points)
8376 uint32_t prefix = 0;
8377 uint32_t point_index = start;
8379 if (prefix_code != 5) {
8383 if (*
len < count/8) {
8388 object =
SCCalloc(1,
sizeof(*
object));
8393 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8406 if (*len < object->username_len) {
8416 object->username[
object->username_len] =
'\0';
8417 *buf +=
object->username_len;
8418 *
len -=
object->username_len;
8420 if (*len < object->master_challenge_data_len) {
8429 *buf +=
object->master_challenge_data_len;
8430 *
len -=
object->master_challenge_data_len;
8433 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8443 if (
object != NULL) {
8456 static int DNP3DecodeObjectG120V12(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8457 uint32_t start, uint32_t count, DNP3PointList *points)
8460 uint32_t prefix = 0;
8461 uint32_t point_index = start;
8463 if (prefix_code != 5) {
8467 if (*
len < count/8) {
8472 object =
SCCalloc(1,
sizeof(*
object));
8477 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8481 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
8491 if (*len < object->challenge_data_len) {
8500 *buf +=
object->challenge_data_len;
8501 *
len -=
object->challenge_data_len;
8504 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8514 if (
object != NULL) {
8524 static int DNP3DecodeObjectG120V13(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8525 uint32_t start, uint32_t count, DNP3PointList *points)
8528 uint32_t prefix = 0;
8529 uint32_t point_index = start;
8531 if (prefix_code != 5) {
8535 if (*
len < count/8) {
8540 object =
SCCalloc(1,
sizeof(*
object));
8545 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8549 if (!DNP3ReadUint32(buf,
len, &object->
ksq)) {
8559 if (*len < object->encrypted_update_key_len) {
8568 *buf +=
object->encrypted_update_key_len;
8569 *
len -=
object->encrypted_update_key_len;
8572 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8582 if (
object != NULL) {
8592 static int DNP3DecodeObjectG120V14(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8593 uint32_t start, uint32_t count, DNP3PointList *points)
8596 uint32_t prefix = 0;
8597 uint32_t point_index = start;
8600 if (prefix_code != 5) {
8604 if (*
len < count/8) {
8609 object =
SCCalloc(1,
sizeof(*
object));
8614 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8623 object->digital_signature_len = (uint16_t)(prefix - (
offset - *
len));
8625 if (*len < object->digital_signature_len) {
8634 *buf +=
object->digital_signature_len;
8635 *
len -=
object->digital_signature_len;
8638 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8648 if (
object != NULL) {
8658 static int DNP3DecodeObjectG120V15(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8659 uint32_t start, uint32_t count, DNP3PointList *points)
8662 uint32_t prefix = 0;
8663 uint32_t point_index = start;
8666 if (prefix_code != 5) {
8670 if (*
len < count/8) {
8675 object =
SCCalloc(1,
sizeof(*
object));
8680 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8689 object->mac_len = (uint16_t)(prefix - (
offset - *
len));
8691 if (*len < object->mac_len) {
8700 *buf +=
object->mac_len;
8701 *
len -=
object->mac_len;
8704 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8714 if (
object != NULL) {
8715 if (object->
mac != NULL) {
8724 static int DNP3DecodeObjectG121V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8725 uint32_t start, uint32_t count, DNP3PointList *points)
8728 uint32_t prefix = 0;
8729 uint32_t point_index = start;
8731 if (*
len < count/8) {
8736 object =
SCCalloc(1,
sizeof(*
object));
8741 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8747 if (!DNP3ReadUint8(buf,
len, &octet)) {
8750 object->online = (octet >> 0) & 0x1;
8751 object->restart = (octet >> 1) & 0x1;
8752 object->comm_lost = (octet >> 2) & 0x1;
8753 object->remote_forced = (octet >> 3) & 0x1;
8754 object->local_forced = (octet >> 4) & 0x1;
8755 object->reserved0 = (octet >> 5) & 0x1;
8756 object->discontinuity = (octet >> 6) & 0x1;
8757 object->reserved1 = (octet >> 7) & 0x1;
8766 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8776 if (
object != NULL) {
8783 static int DNP3DecodeObjectG122V1(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8784 uint32_t start, uint32_t count, DNP3PointList *points)
8787 uint32_t prefix = 0;
8788 uint32_t point_index = start;
8790 if (*
len < count/8) {
8795 object =
SCCalloc(1,
sizeof(*
object));
8800 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8806 if (!DNP3ReadUint8(buf,
len, &octet)) {
8809 object->online = (octet >> 0) & 0x1;
8810 object->restart = (octet >> 1) & 0x1;
8811 object->comm_lost = (octet >> 2) & 0x1;
8812 object->remote_forced = (octet >> 3) & 0x1;
8813 object->local_forced = (octet >> 4) & 0x1;
8814 object->reserved0 = (octet >> 5) & 0x1;
8815 object->discontinuity = (octet >> 6) & 0x1;
8816 object->reserved1 = (octet >> 7) & 0x1;
8825 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8835 if (
object != NULL) {
8842 static int DNP3DecodeObjectG122V2(
const uint8_t **buf, uint16_t *
len, uint8_t prefix_code,
8843 uint32_t start, uint32_t count, DNP3PointList *points)
8846 uint32_t prefix = 0;
8847 uint32_t point_index = start;
8849 if (*
len < count/8) {
8854 object =
SCCalloc(1,
sizeof(*
object));
8859 if (!DNP3ReadPrefix(buf,
len, prefix_code, &prefix)) {
8865 if (!DNP3ReadUint8(buf,
len, &octet)) {
8868 object->online = (octet >> 0) & 0x1;
8869 object->restart = (octet >> 1) & 0x1;
8870 object->comm_lost = (octet >> 2) & 0x1;
8871 object->remote_forced = (octet >> 3) & 0x1;
8872 object->local_forced = (octet >> 4) & 0x1;
8873 object->reserved0 = (octet >> 5) & 0x1;
8874 object->discontinuity = (octet >> 6) & 0x1;
8875 object->reserved1 = (octet >> 7) & 0x1;
8887 if (!DNP3AddPoint(points,
object, point_index, prefix_code, prefix)) {
8897 if (
object != NULL) {
8913 if (object->
data != NULL) {
9054 if (object->
mac != NULL) {
9072 uint8_t prefix_code, uint32_t start, uint32_t count, DNP3PointList *points)
9078 rc = DNP3DecodeObjectG1V1(buf,
len, prefix_code, start, count,
9082 rc = DNP3DecodeObjectG1V2(buf,
len, prefix_code, start, count,
9086 rc = DNP3DecodeObjectG2V1(buf,
len, prefix_code, start, count,
9090 rc = DNP3DecodeObjectG2V2(buf,
len, prefix_code, start, count,
9094 rc = DNP3DecodeObjectG2V3(buf,
len, prefix_code, start, count,
9098 rc = DNP3DecodeObjectG3V1(buf,
len, prefix_code, start, count,
9102 rc = DNP3DecodeObjectG3V2(buf,
len, prefix_code, start, count,
9106 rc = DNP3DecodeObjectG4V1(buf,
len, prefix_code, start, count,
9110 rc = DNP3DecodeObjectG4V2(buf,
len, prefix_code, start, count,
9114 rc = DNP3DecodeObjectG4V3(buf,
len, prefix_code, start, count,
9118 rc = DNP3DecodeObjectG10V1(buf,
len, prefix_code, start, count,
9122 rc = DNP3DecodeObjectG10V2(buf,
len, prefix_code, start, count,
9126 rc = DNP3DecodeObjectG11V1(buf,
len, prefix_code, start, count,
9130 rc = DNP3DecodeObjectG11V2(buf,
len, prefix_code, start, count,
9134 rc = DNP3DecodeObjectG12V1(buf,
len, prefix_code, start, count,
9138 rc = DNP3DecodeObjectG12V2(buf,
len, prefix_code, start, count,
9142 rc = DNP3DecodeObjectG12V3(buf,
len, prefix_code, start, count,
9146 rc = DNP3DecodeObjectG13V1(buf,
len, prefix_code, start, count,
9150 rc = DNP3DecodeObjectG13V2(buf,
len, prefix_code, start, count,
9154 rc = DNP3DecodeObjectG20V1(buf,
len, prefix_code, start, count,
9158 rc = DNP3DecodeObjectG20V2(buf,
len, prefix_code, start, count,
9162 rc = DNP3DecodeObjectG20V3(buf,
len, prefix_code, start, count,
9166 rc = DNP3DecodeObjectG20V4(buf,
len, prefix_code, start, count,
9170 rc = DNP3DecodeObjectG20V5(buf,
len, prefix_code, start, count,
9174 rc = DNP3DecodeObjectG20V6(buf,
len, prefix_code, start, count,
9178 rc = DNP3DecodeObjectG20V7(buf,
len, prefix_code, start, count,
9182 rc = DNP3DecodeObjectG20V8(buf,
len, prefix_code, start, count,
9186 rc = DNP3DecodeObjectG21V1(buf,
len, prefix_code, start, count,
9190 rc = DNP3DecodeObjectG21V2(buf,
len, prefix_code, start, count,
9194 rc = DNP3DecodeObjectG21V3(buf,
len, prefix_code, start, count,
9198 rc = DNP3DecodeObjectG21V4(buf,
len, prefix_code, start, count,
9202 rc = DNP3DecodeObjectG21V5(buf,
len, prefix_code, start, count,
9206 rc = DNP3DecodeObjectG21V6(buf,
len, prefix_code, start, count,
9210 rc = DNP3DecodeObjectG21V7(buf,
len, prefix_code, start, count,
9214 rc = DNP3DecodeObjectG21V8(buf,
len, prefix_code, start, count,
9218 rc = DNP3DecodeObjectG21V9(buf,
len, prefix_code, start, count,
9222 rc = DNP3DecodeObjectG21V10(buf,
len, prefix_code, start, count,
9226 rc = DNP3DecodeObjectG21V11(buf,
len, prefix_code, start, count,
9230 rc = DNP3DecodeObjectG21V12(buf,
len, prefix_code, start, count,
9234 rc = DNP3DecodeObjectG22V1(buf,
len, prefix_code, start, count,
9238 rc = DNP3DecodeObjectG22V2(buf,
len, prefix_code, start, count,
9242 rc = DNP3DecodeObjectG22V3(buf,
len, prefix_code, start, count,
9246 rc = DNP3DecodeObjectG22V4(buf,
len, prefix_code, start, count,
9250 rc = DNP3DecodeObjectG22V5(buf,
len, prefix_code, start, count,
9254 rc = DNP3DecodeObjectG22V6(buf,
len, prefix_code, start, count,
9258 rc = DNP3DecodeObjectG22V7(buf,
len, prefix_code, start, count,
9262 rc = DNP3DecodeObjectG22V8(buf,
len, prefix_code, start, count,
9266 rc = DNP3DecodeObjectG23V1(buf,
len, prefix_code, start, count,
9270 rc = DNP3DecodeObjectG23V2(buf,
len, prefix_code, start, count,
9274 rc = DNP3DecodeObjectG23V3(buf,
len, prefix_code, start, count,
9278 rc = DNP3DecodeObjectG23V4(buf,
len, prefix_code, start, count,
9282 rc = DNP3DecodeObjectG23V5(buf,
len, prefix_code, start, count,
9286 rc = DNP3DecodeObjectG23V6(buf,
len, prefix_code, start, count,
9290 rc = DNP3DecodeObjectG23V7(buf,
len, prefix_code, start, count,
9294 rc = DNP3DecodeObjectG23V8(buf,
len, prefix_code, start, count,
9298 rc = DNP3DecodeObjectG30V1(buf,
len, prefix_code, start, count,
9302 rc = DNP3DecodeObjectG30V2(buf,
len, prefix_code, start, count,
9306 rc = DNP3DecodeObjectG30V3(buf,
len, prefix_code, start, count,
9310 rc = DNP3DecodeObjectG30V4(buf,
len, prefix_code, start, count,
9314 rc = DNP3DecodeObjectG30V5(buf,
len, prefix_code, start, count,
9318 rc = DNP3DecodeObjectG30V6(buf,
len, prefix_code, start, count,
9322 rc = DNP3DecodeObjectG31V1(buf,
len, prefix_code, start, count,
9326 rc = DNP3DecodeObjectG31V2(buf,
len, prefix_code, start, count,
9330 rc = DNP3DecodeObjectG31V3(buf,
len, prefix_code, start, count,
9334 rc = DNP3DecodeObjectG31V4(buf,
len, prefix_code, start, count,
9338 rc = DNP3DecodeObjectG31V5(buf,
len, prefix_code, start, count,
9342 rc = DNP3DecodeObjectG31V6(buf,
len, prefix_code, start, count,
9346 rc = DNP3DecodeObjectG31V7(buf,
len, prefix_code, start, count,
9350 rc = DNP3DecodeObjectG31V8(buf,
len, prefix_code, start, count,
9354 rc = DNP3DecodeObjectG32V1(buf,
len, prefix_code, start, count,
9358 rc = DNP3DecodeObjectG32V2(buf,
len, prefix_code, start, count,
9362 rc = DNP3DecodeObjectG32V3(buf,
len, prefix_code, start, count,
9366 rc = DNP3DecodeObjectG32V4(buf,
len, prefix_code, start, count,
9370 rc = DNP3DecodeObjectG32V5(buf,
len, prefix_code, start, count,
9374 rc = DNP3DecodeObjectG32V6(buf,
len, prefix_code, start, count,
9378 rc = DNP3DecodeObjectG32V7(buf,
len, prefix_code, start, count,
9382 rc = DNP3DecodeObjectG32V8(buf,
len, prefix_code, start, count,
9386 rc = DNP3DecodeObjectG33V1(buf,
len, prefix_code, start, count,
9390 rc = DNP3DecodeObjectG33V2(buf,
len, prefix_code, start, count,
9394 rc = DNP3DecodeObjectG33V3(buf,
len, prefix_code, start, count,
9398 rc = DNP3DecodeObjectG33V4(buf,
len, prefix_code, start, count,
9402 rc = DNP3DecodeObjectG33V5(buf,
len, prefix_code, start, count,
9406 rc = DNP3DecodeObjectG33V6(buf,
len, prefix_code, start, count,
9410 rc = DNP3DecodeObjectG33V7(buf,
len, prefix_code, start, count,
9414 rc = DNP3DecodeObjectG33V8(buf,
len, prefix_code, start, count,
9418 rc = DNP3DecodeObjectG34V1(buf,
len, prefix_code, start, count,
9422 rc = DNP3DecodeObjectG34V2(buf,
len, prefix_code, start, count,
9426 rc = DNP3DecodeObjectG34V3(buf,
len, prefix_code, start, count,
9430 rc = DNP3DecodeObjectG40V1(buf,
len, prefix_code, start, count,
9434 rc = DNP3DecodeObjectG40V2(buf,
len, prefix_code, start, count,
9438 rc = DNP3DecodeObjectG40V3(buf,
len, prefix_code, start, count,
9442 rc = DNP3DecodeObjectG40V4(buf,
len, prefix_code, start, count,
9446 rc = DNP3DecodeObjectG41V1(buf,
len, prefix_code, start, count,
9450 rc = DNP3DecodeObjectG41V2(buf,
len, prefix_code, start, count,
9454 rc = DNP3DecodeObjectG41V3(buf,
len, prefix_code, start, count,
9458 rc = DNP3DecodeObjectG41V4(buf,
len, prefix_code, start, count,
9462 rc = DNP3DecodeObjectG42V1(buf,
len, prefix_code, start, count,
9466 rc = DNP3DecodeObjectG42V2(buf,
len, prefix_code, start, count,
9470 rc = DNP3DecodeObjectG42V3(buf,
len, prefix_code, start, count,
9474 rc = DNP3DecodeObjectG42V4(buf,
len, prefix_code, start, count,
9478 rc = DNP3DecodeObjectG42V5(buf,
len, prefix_code, start, count,
9482 rc = DNP3DecodeObjectG42V6(buf,
len, prefix_code, start, count,
9486 rc = DNP3DecodeObjectG42V7(buf,
len, prefix_code, start, count,
9490 rc = DNP3DecodeObjectG42V8(buf,
len, prefix_code, start, count,
9494 rc = DNP3DecodeObjectG43V1(buf,
len, prefix_code, start, count,
9498 rc = DNP3DecodeObjectG43V2(buf,
len, prefix_code, start, count,
9502 rc = DNP3DecodeObjectG43V3(buf,
len, prefix_code, start, count,
9506 rc = DNP3DecodeObjectG43V4(buf,
len, prefix_code, start, count,
9510 rc = DNP3DecodeObjectG43V5(buf,
len, prefix_code, start, count,
9514 rc = DNP3DecodeObjectG43V6(buf,
len, prefix_code, start, count,
9518 rc = DNP3DecodeObjectG43V7(buf,
len, prefix_code, start, count,
9522 rc = DNP3DecodeObjectG43V8(buf,
len, prefix_code, start, count,
9526 rc = DNP3DecodeObjectG50V1(buf,
len, prefix_code, start, count,
9530 rc = DNP3DecodeObjectG50V2(buf,
len, prefix_code, start, count,
9534 rc = DNP3DecodeObjectG50V3(buf,
len, prefix_code, start, count,
9538 rc = DNP3DecodeObjectG50V4(buf,
len, prefix_code, start, count,
9542 rc = DNP3DecodeObjectG51V1(buf,
len, prefix_code, start, count,
9546 rc = DNP3DecodeObjectG51V2(buf,
len, prefix_code, start, count,
9550 rc = DNP3DecodeObjectG52V1(buf,
len, prefix_code, start, count,
9554 rc = DNP3DecodeObjectG52V2(buf,
len, prefix_code, start, count,
9558 rc = DNP3DecodeObjectG70V1(buf,
len, prefix_code, start, count,
9562 rc = DNP3DecodeObjectG70V2(buf,
len, prefix_code, start, count,
9566 rc = DNP3DecodeObjectG70V3(buf,
len, prefix_code, start, count,
9570 rc = DNP3DecodeObjectG70V4(buf,
len, prefix_code, start, count,
9574 rc = DNP3DecodeObjectG70V5(buf,
len, prefix_code, start, count,
9578 rc = DNP3DecodeObjectG70V6(buf,
len, prefix_code, start, count,
9582 rc = DNP3DecodeObjectG70V7(buf,
len, prefix_code, start, count,
9586 rc = DNP3DecodeObjectG70V8(buf,
len, prefix_code, start, count,
9590 rc = DNP3DecodeObjectG80V1(buf,
len, prefix_code, start, count,
9594 rc = DNP3DecodeObjectG81V1(buf,
len, prefix_code, start, count,
9598 rc = DNP3DecodeObjectG83V1(buf,
len, prefix_code, start, count,
9602 rc = DNP3DecodeObjectG86V2(buf,
len, prefix_code, start, count,
9606 rc = DNP3DecodeObjectG102V1(buf,
len, prefix_code, start, count,
9610 rc = DNP3DecodeObjectG120V1(buf,
len, prefix_code, start, count,
9614 rc = DNP3DecodeObjectG120V2(buf,
len, prefix_code, start, count,
9618 rc = DNP3DecodeObjectG120V3(buf,
len, prefix_code, start, count,
9622 rc = DNP3DecodeObjectG120V4(buf,
len, prefix_code, start, count,
9626 rc = DNP3DecodeObjectG120V5(buf,
len, prefix_code, start, count,
9630 rc = DNP3DecodeObjectG120V6(buf,
len, prefix_code, start, count,
9634 rc = DNP3DecodeObjectG120V7(buf,
len, prefix_code, start, count,
9638 rc = DNP3DecodeObjectG120V8(buf,
len, prefix_code, start, count,
9642 rc = DNP3DecodeObjectG120V9(buf,
len, prefix_code, start, count,
9646 rc = DNP3DecodeObjectG120V10(buf,
len, prefix_code, start, count,
9650 rc = DNP3DecodeObjectG120V11(buf,
len, prefix_code, start, count,
9654 rc = DNP3DecodeObjectG120V12(buf,
len, prefix_code, start, count,
9658 rc = DNP3DecodeObjectG120V13(buf,
len, prefix_code, start, count,
9662 rc = DNP3DecodeObjectG120V14(buf,
len, prefix_code, start, count,
9666 rc = DNP3DecodeObjectG120V15(buf,
len, prefix_code, start, count,
9670 rc = DNP3DecodeObjectG121V1(buf,
len, prefix_code, start, count,
9674 rc = DNP3DecodeObjectG122V1(buf,
len, prefix_code, start, count,
9678 rc = DNP3DecodeObjectG122V2(buf,
len, prefix_code, start, count,