From a59f31a99fc775d8962ad11fbfb4cc3413710ffd Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Thu, 10 Dec 2015 11:59:48 -0600 Subject: [PATCH] DNP3: Lua detect support. Adds support for access the DNP3 transaction in Lua rules. --- src/Makefile.am | 2 + src/detect-dnp3.c | 10 +- src/detect-lua-extensions.c | 2 + src/detect-lua.c | 10 + src/detect-parse.c | 3 + src/output-json-dnp3.c | 23 +- src/output.c | 4 + src/suricata-common.h | 1 + src/suricata.c | 3 - src/util-lua-dnp3-objects.c | 3542 +++++++++++++++++++++++++++++++++++ src/util-lua-dnp3-objects.h | 24 + src/util-lua-dnp3.c | 201 ++ src/util-lua-dnp3.h | 27 + 13 files changed, 3828 insertions(+), 24 deletions(-) create mode 100644 src/util-lua-dnp3-objects.c create mode 100644 src/util-lua-dnp3-objects.h create mode 100644 src/util-lua-dnp3.c create mode 100644 src/util-lua-dnp3.h diff --git a/src/Makefile.am b/src/Makefile.am index e91786a314..708ecb7a62 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -379,6 +379,8 @@ util-logopenfile.h util-logopenfile.c \ util-logopenfile-tile.h util-logopenfile-tile.c \ util-lua.c util-lua.h \ util-lua-common.c util-lua-common.h \ +util-lua-dnp3.c util-lua-dnp3.h \ +util-lua-dnp3-objects.c util-lua-dnp3-objects.h \ util-lua-dns.c util-lua-dns.h \ util-lua-http.c util-lua-http.h \ util-lua-tls.c util-lua-tls.h \ diff --git a/src/detect-dnp3.c b/src/detect-dnp3.c index ec210cf5d2..3abb0cff94 100644 --- a/src/detect-dnp3.c +++ b/src/detect-dnp3.c @@ -17,12 +17,16 @@ #include "suricata-common.h" +#include "stream.h" + #include "detect.h" #include "detect-parse.h" #include "detect-dnp3.h" #include "detect-engine.h" #include "detect-engine-content-inspection.h" +#include "app-layer-dnp3.h" + /** * The detection struct. */ @@ -213,7 +217,6 @@ static int DetectDNP3FuncSetup(DetectEngineCtx *de_ctx, Signature *s, char *str) if (unlikely(dnp3 == NULL)) { goto error; } - dnp3->detect_type = DNP3_DETECT_TYPE_FC; dnp3->function_code = function_code; sm = SigMatchAlloc(); @@ -301,7 +304,6 @@ static int DetectDNP3IndSetup(DetectEngineCtx *de_ctx, Signature *s, char *str) if (unlikely(detect == NULL)) { goto error; } - detect->detect_type = DNP3_DETECT_TYPE_IND; detect->ind_flags = flags; sm = SigMatchAlloc(); @@ -384,7 +386,6 @@ static int DetectDNP3ObjSetup(DetectEngineCtx *de_ctx, Signature *s, char *str) if (unlikely(detect == NULL)) { goto fail; } - detect->detect_type = DNP3_DETECT_TYPE_OBJ; detect->obj_group = group; detect->obj_variation = variation; @@ -489,6 +490,7 @@ static void DetectDNP3FuncRegister(void) sigmatch_table[DETECT_AL_DNP3FUNC].alias = "dnp3_func"; sigmatch_table[DETECT_AL_DNP3FUNC].Match = NULL; sigmatch_table[DETECT_AL_DNP3FUNC].AppLayerMatch = NULL; + sigmatch_table[DETECT_AL_DNP3FUNC].AppLayerTxMatch = DetectDNP3FuncMatch; sigmatch_table[DETECT_AL_DNP3FUNC].Setup = DetectDNP3FuncSetup; sigmatch_table[DETECT_AL_DNP3FUNC].Free = DetectDNP3Free; sigmatch_table[DETECT_AL_DNP3FUNC].RegisterTests = @@ -505,6 +507,7 @@ static void DetectDNP3IndRegister(void) sigmatch_table[DETECT_AL_DNP3IND].alias = "dnp3_ind"; sigmatch_table[DETECT_AL_DNP3IND].Match = NULL; sigmatch_table[DETECT_AL_DNP3IND].AppLayerMatch = NULL; + sigmatch_table[DETECT_AL_DNP3IND].AppLayerTxMatch = DetectDNP3IndMatch; sigmatch_table[DETECT_AL_DNP3IND].Setup = DetectDNP3IndSetup; sigmatch_table[DETECT_AL_DNP3IND].Free = DetectDNP3Free; sigmatch_table[DETECT_AL_DNP3IND].RegisterTests = @@ -521,6 +524,7 @@ static void DetectDNP3ObjRegister(void) sigmatch_table[DETECT_AL_DNP3OBJ].alias = "dnp3_obj"; sigmatch_table[DETECT_AL_DNP3OBJ].Match = NULL; sigmatch_table[DETECT_AL_DNP3OBJ].AppLayerMatch = NULL; + sigmatch_table[DETECT_AL_DNP3OBJ].AppLayerTxMatch = DetectDNP3ObjMatch; sigmatch_table[DETECT_AL_DNP3OBJ].Setup = DetectDNP3ObjSetup; sigmatch_table[DETECT_AL_DNP3OBJ].Free = DetectDNP3Free; sigmatch_table[DETECT_AL_DNP3OBJ].RegisterTests = diff --git a/src/detect-lua-extensions.c b/src/detect-lua-extensions.c index 6bd5c2453b..7825967f69 100644 --- a/src/detect-lua-extensions.c +++ b/src/detect-lua-extensions.c @@ -69,6 +69,7 @@ #include "util-lua-tls.h" #include "util-lua-ssh.h" #include "util-lua-smtp.h" +#include "util-lua-dnp3.h" static const char luaext_key_ld[] = "suricata:luajitdata"; static const char luaext_key_det_ctx[] = "suricata:det_ctx"; @@ -580,6 +581,7 @@ int LuaRegisterExtensions(lua_State *lua_state) LuaRegisterTlsFunctions(lua_state); LuaRegisterSshFunctions(lua_state); LuaRegisterSmtpFunctions(lua_state); + LuaRegisterDNP3Functions(lua_state); return 0; } diff --git a/src/detect-lua.c b/src/detect-lua.c index ab04434739..d77ee4edd5 100644 --- a/src/detect-lua.c +++ b/src/detect-lua.c @@ -168,6 +168,8 @@ void DetectLuaRegister(void) #define DATATYPE_SSH (1<<19) #define DATATYPE_SMTP (1<<20) +#define DATATYPE_DNP3 (1<<20) + #ifdef HAVE_LUAJIT static void *LuaStatePoolAlloc(void) { @@ -1023,6 +1025,12 @@ static int DetectLuaSetupPrime(DetectEngineCtx *de_ctx, DetectLuaData *ld) ld->flags |= DATATYPE_SMTP; + } else if (strncmp(k, "dnp3", 4) == 0 && strcmp(v, "true") == 0) { + + ld->alproto = ALPROTO_DNP3; + + ld->flags |= DATATYPE_DNP3; + } else { SCLogError(SC_ERR_LUA_ERROR, "unsupported data type %s", k); goto error; @@ -1124,6 +1132,8 @@ static int DetectLuaSetup (DetectEngineCtx *de_ctx, Signature *s, char *str) SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_AMATCH); } else if (luajit->alproto == ALPROTO_SMTP) { SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_AMATCH); + } else if (luajit->alproto == ALPROTO_DNP3) { + SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_DNP3_MATCH); } else { SCLogError(SC_ERR_LUA_ERROR, "luajit can't be used with protocol %s", AppLayerGetProtoName(luajit->alproto)); diff --git a/src/detect-parse.c b/src/detect-parse.c index 168c12ca82..1af519b090 100644 --- a/src/detect-parse.c +++ b/src/detect-parse.c @@ -1604,6 +1604,9 @@ static Signature *SigInitHelper(DetectEngineCtx *de_ctx, char *sigstr, if (sig->sm_lists[DETECT_SM_LIST_DNP3_DATA_MATCH]) { sig->flags |= SIG_FLAG_STATE_MATCH; } + if (sig->sm_lists[DETECT_SM_LIST_DNP3_MATCH]) { + sig->flags |= SIG_FLAG_STATE_MATCH; + } /* Template. */ if (sig->sm_lists[DETECT_SM_LIST_TEMPLATE_BUFFER_MATCH]) { diff --git a/src/output-json-dnp3.c b/src/output-json-dnp3.c index 34de8c6c2d..1ea1c3df87 100644 --- a/src/output-json-dnp3.c +++ b/src/output-json-dnp3.c @@ -415,32 +415,19 @@ static TmEcode JsonDNP3LogThreadDeinit(ThreadVars *t, void *data) return TM_ECODE_OK; } -void TmModuleJsonDNP3LogRegister(void) +void JsonDNP3LogRegister(void) { - tmm_modules[TMM_JSONDNP3LOG].name = "JsonDNP3Log"; - tmm_modules[TMM_JSONDNP3LOG].ThreadInit = JsonDNP3LogThreadInit; - tmm_modules[TMM_JSONDNP3LOG].ThreadDeinit = JsonDNP3LogThreadDeinit; - tmm_modules[TMM_JSONDNP3LOG].RegisterTests = NULL; - tmm_modules[TMM_JSONDNP3LOG].cap_flags = 0; - tmm_modules[TMM_JSONDNP3LOG].flags = TM_FLAG_LOGAPI_TM; - /* Register as en eve sub-module. */ - OutputRegisterTxSubModule("eve-log", "JsonDNP3Log", "eve-log.dnp3", - OutputDNP3LogInitSub, ALPROTO_DNP3, JsonDNP3Logger); + OutputRegisterTxSubModule(LOGGER_JSON_DNP3, "eve-log", "JsonDNP3Log", + "eve-log.dnp3", OutputDNP3LogInitSub, ALPROTO_DNP3, JsonDNP3Logger, + JsonDNP3LogThreadInit, JsonDNP3LogThreadDeinit, NULL); } #else -static TmEcode OutputJsonThreadInit(ThreadVars *t, void *initdata, void **data) +void JsonDNP3LogRegister (void) { SCLogInfo("Can't init JSON output - JSON support was disabled during build."); - return TM_ECODE_FAILED; -} - -void TmModuleJsonDNP3LogRegister (void) -{ - tmm_modules[TMM_JSONDNP3LOG].name = "JsonDNP3Log"; - tmm_modules[TMM_JSONDNP3LOG].ThreadInit = OutputJsonThreadInit; } #endif diff --git a/src/output.c b/src/output.c index e53ffec24d..befdc58d2a 100644 --- a/src/output.c +++ b/src/output.c @@ -69,6 +69,7 @@ #include "output-json.h" #include "output-json-template.h" #include "output-lua.h" +#include "output-json-dnp3.h" typedef struct RootLogger_ { ThreadInitFunc ThreadInit; @@ -1087,6 +1088,9 @@ void OutputRegisterLoggers(void) /* json stats */ JsonStatsLogRegister(); + /* DNP3. */ + JsonDNP3LogRegister(); + /* Template JSON logger. */ JsonTemplateLogRegister(); } diff --git a/src/suricata-common.h b/src/suricata-common.h index 9dda1f3ca2..a2c9414a16 100644 --- a/src/suricata-common.h +++ b/src/suricata-common.h @@ -361,6 +361,7 @@ typedef enum { LOGGER_JSON_STATS, LOGGER_PRELUDE, LOGGER_PCAP, + LOGGER_JSON_DNP3, LOGGER_SIZE, } LoggerId; diff --git a/src/suricata.c b/src/suricata.c index 06bb916b67..48125f5833 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -841,9 +841,6 @@ void RegisterAllModules() /* nflog */ TmModuleReceiveNFLOGRegister(); TmModuleDecodeNFLOGRegister(); - - /* dnp3 */ - TmModuleJsonDNP3LogRegister(); } static TmEcode LoadYamlConfig(SCInstance *suri) diff --git a/src/util-lua-dnp3-objects.c b/src/util-lua-dnp3-objects.c new file mode 100644 index 0000000000..6c3dcc51ab --- /dev/null +++ b/src/util-lua-dnp3-objects.c @@ -0,0 +1,3542 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * DO NOT EDIT. THIS FILE IS AUTO-GENERATED. + * + * Generated by command: + * ./scripts/dnp3-gen/dnp3-gen.py + */ + +#include "suricata-common.h" + +#include "app-layer-dnp3.h" +#include "app-layer-dnp3-objects.h" + +#ifdef HAVE_LUA + +#include +#include +#include + +#include "util-lua.h" + +/** + * \brief Push an object point item onto the stack. + */ +void DNP3PushPoint(lua_State *luastate, DNP3Object *object, + DNP3Point *point) +{ + switch (DNP3_OBJECT_CODE(object->group, object->variation)) { + case DNP3_OBJECT_CODE(1, 1): { + DNP3ObjectG1V1 *data = point->data; + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(1, 2): { + DNP3ObjectG1V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved"); + lua_pushinteger(luastate, data->reserved); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(2, 1): { + DNP3ObjectG2V1 *data = point->data; + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(2, 2): { + DNP3ObjectG2V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved"); + lua_pushinteger(luastate, data->reserved); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(2, 3): { + DNP3ObjectG2V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved"); + lua_pushinteger(luastate, data->reserved); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(3, 1): { + DNP3ObjectG3V1 *data = point->data; + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(3, 2): { + DNP3ObjectG3V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(4, 1): { + DNP3ObjectG4V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(4, 2): { + DNP3ObjectG4V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(4, 3): { + DNP3ObjectG4V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "chatter_filter"); + lua_pushinteger(luastate, data->chatter_filter); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "relative_time_ms"); + lua_pushinteger(luastate, data->relative_time_ms); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(10, 1): { + DNP3ObjectG10V1 *data = point->data; + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(10, 2): { + DNP3ObjectG10V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(11, 1): { + DNP3ObjectG11V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(11, 2): { + DNP3ObjectG11V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(12, 1): { + DNP3ObjectG12V1 *data = point->data; + lua_pushliteral(luastate, "op_type"); + lua_pushinteger(luastate, data->op_type); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "qu"); + lua_pushinteger(luastate, data->qu); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "cr"); + lua_pushinteger(luastate, data->cr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "tcc"); + lua_pushinteger(luastate, data->tcc); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "ontime"); + lua_pushinteger(luastate, data->ontime); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "offtime"); + lua_pushinteger(luastate, data->offtime); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved"); + lua_pushinteger(luastate, data->reserved); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(12, 2): { + DNP3ObjectG12V2 *data = point->data; + lua_pushliteral(luastate, "op_type"); + lua_pushinteger(luastate, data->op_type); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "qu"); + lua_pushinteger(luastate, data->qu); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "cr"); + lua_pushinteger(luastate, data->cr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "tcc"); + lua_pushinteger(luastate, data->tcc); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "ontime"); + lua_pushinteger(luastate, data->ontime); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "offtime"); + lua_pushinteger(luastate, data->offtime); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved"); + lua_pushinteger(luastate, data->reserved); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(12, 3): { + DNP3ObjectG12V3 *data = point->data; + lua_pushliteral(luastate, "point"); + lua_pushinteger(luastate, data->point); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(13, 1): { + DNP3ObjectG13V1 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_state"); + lua_pushinteger(luastate, data->commanded_state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(13, 2): { + DNP3ObjectG13V2 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_state"); + lua_pushinteger(luastate, data->commanded_state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 1): { + DNP3ObjectG20V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 2): { + DNP3ObjectG20V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 3): { + DNP3ObjectG20V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 4): { + DNP3ObjectG20V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 5): { + DNP3ObjectG20V5 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 6): { + DNP3ObjectG20V6 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 7): { + DNP3ObjectG20V7 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(20, 8): { + DNP3ObjectG20V8 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 1): { + DNP3ObjectG21V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 2): { + DNP3ObjectG21V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 3): { + DNP3ObjectG21V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 4): { + DNP3ObjectG21V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 5): { + DNP3ObjectG21V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 6): { + DNP3ObjectG21V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 7): { + DNP3ObjectG21V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 8): { + DNP3ObjectG21V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 9): { + DNP3ObjectG21V9 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 10): { + DNP3ObjectG21V10 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 11): { + DNP3ObjectG21V11 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(21, 12): { + DNP3ObjectG21V12 *data = point->data; + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 1): { + DNP3ObjectG22V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 2): { + DNP3ObjectG22V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 3): { + DNP3ObjectG22V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 4): { + DNP3ObjectG22V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 5): { + DNP3ObjectG22V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 6): { + DNP3ObjectG22V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 7): { + DNP3ObjectG22V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(22, 8): { + DNP3ObjectG22V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 1): { + DNP3ObjectG23V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 2): { + DNP3ObjectG23V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 3): { + DNP3ObjectG23V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 4): { + DNP3ObjectG23V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 5): { + DNP3ObjectG23V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 6): { + DNP3ObjectG23V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 7): { + DNP3ObjectG23V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(23, 8): { + DNP3ObjectG23V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "rollover"); + lua_pushinteger(luastate, data->rollover); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count"); + lua_pushinteger(luastate, data->count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 1): { + DNP3ObjectG30V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 2): { + DNP3ObjectG30V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 3): { + DNP3ObjectG30V3 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 4): { + DNP3ObjectG30V4 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 5): { + DNP3ObjectG30V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(30, 6): { + DNP3ObjectG30V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 1): { + DNP3ObjectG31V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 2): { + DNP3ObjectG31V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 3): { + DNP3ObjectG31V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 4): { + DNP3ObjectG31V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 5): { + DNP3ObjectG31V5 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 6): { + DNP3ObjectG31V6 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 7): { + DNP3ObjectG31V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(31, 8): { + DNP3ObjectG31V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 1): { + DNP3ObjectG32V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 2): { + DNP3ObjectG32V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 3): { + DNP3ObjectG32V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 4): { + DNP3ObjectG32V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 5): { + DNP3ObjectG32V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 6): { + DNP3ObjectG32V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 7): { + DNP3ObjectG32V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(32, 8): { + DNP3ObjectG32V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 1): { + DNP3ObjectG33V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 2): { + DNP3ObjectG33V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 3): { + DNP3ObjectG33V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 4): { + DNP3ObjectG33V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 5): { + DNP3ObjectG33V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 6): { + DNP3ObjectG33V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 7): { + DNP3ObjectG33V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(33, 8): { + DNP3ObjectG33V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(34, 1): { + DNP3ObjectG34V1 *data = point->data; + lua_pushliteral(luastate, "deadband_value"); + lua_pushinteger(luastate, data->deadband_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(34, 2): { + DNP3ObjectG34V2 *data = point->data; + lua_pushliteral(luastate, "deadband_value"); + lua_pushinteger(luastate, data->deadband_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(34, 3): { + DNP3ObjectG34V3 *data = point->data; + lua_pushliteral(luastate, "deadband_value"); + lua_pushnumber(luastate, data->deadband_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(40, 1): { + DNP3ObjectG40V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(40, 2): { + DNP3ObjectG40V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(40, 3): { + DNP3ObjectG40V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(40, 4): { + DNP3ObjectG40V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(41, 1): { + DNP3ObjectG41V1 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "control_status"); + lua_pushinteger(luastate, data->control_status); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(41, 2): { + DNP3ObjectG41V2 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "control_status"); + lua_pushinteger(luastate, data->control_status); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(41, 3): { + DNP3ObjectG41V3 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "control_status"); + lua_pushinteger(luastate, data->control_status); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(41, 4): { + DNP3ObjectG41V4 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "control_status"); + lua_pushinteger(luastate, data->control_status); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 1): { + DNP3ObjectG42V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 2): { + DNP3ObjectG42V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 3): { + DNP3ObjectG42V3 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 4): { + DNP3ObjectG42V4 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 5): { + DNP3ObjectG42V5 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 6): { + DNP3ObjectG42V6 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 7): { + DNP3ObjectG42V7 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(42, 8): { + DNP3ObjectG42V8 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "over_range"); + lua_pushinteger(luastate, data->over_range); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reference_err"); + lua_pushinteger(luastate, data->reference_err); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "value"); + lua_pushnumber(luastate, data->value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 1): { + DNP3ObjectG43V1 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushinteger(luastate, data->commanded_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 2): { + DNP3ObjectG43V2 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushinteger(luastate, data->commanded_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 3): { + DNP3ObjectG43V3 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushinteger(luastate, data->commanded_value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 4): { + DNP3ObjectG43V4 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushinteger(luastate, data->commanded_value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 5): { + DNP3ObjectG43V5 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushnumber(luastate, data->commanded_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 6): { + DNP3ObjectG43V6 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushnumber(luastate, data->commanded_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 7): { + DNP3ObjectG43V7 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushnumber(luastate, data->commanded_value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(43, 8): { + DNP3ObjectG43V8 *data = point->data; + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "commanded_value"); + lua_pushnumber(luastate, data->commanded_value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(50, 1): { + DNP3ObjectG50V1 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(50, 2): { + DNP3ObjectG50V2 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "interval"); + lua_pushinteger(luastate, data->interval); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(50, 3): { + DNP3ObjectG50V3 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(50, 4): { + DNP3ObjectG50V4 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "interval_count"); + lua_pushinteger(luastate, data->interval_count); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "interval_units"); + lua_pushinteger(luastate, data->interval_units); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(51, 1): { + DNP3ObjectG51V1 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(51, 2): { + DNP3ObjectG51V2 *data = point->data; + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(52, 1): { + DNP3ObjectG52V1 *data = point->data; + lua_pushliteral(luastate, "delay_secs"); + lua_pushinteger(luastate, data->delay_secs); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(52, 2): { + DNP3ObjectG52V2 *data = point->data; + lua_pushliteral(luastate, "delay_ms"); + lua_pushinteger(luastate, data->delay_ms); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 1): { + DNP3ObjectG70V1 *data = point->data; + lua_pushliteral(luastate, "filename_size"); + lua_pushinteger(luastate, data->filename_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filetype_code"); + lua_pushinteger(luastate, data->filetype_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "attribute_code"); + lua_pushinteger(luastate, data->attribute_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "start_record"); + lua_pushinteger(luastate, data->start_record); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "end_record"); + lua_pushinteger(luastate, data->end_record); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_size"); + lua_pushinteger(luastate, data->file_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "created_timestamp"); + lua_pushinteger(luastate, data->created_timestamp); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "permission"); + lua_pushinteger(luastate, data->permission); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_id"); + lua_pushinteger(luastate, data->file_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "owner_id"); + lua_pushinteger(luastate, data->owner_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "group_id"); + lua_pushinteger(luastate, data->group_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_function_code"); + lua_pushinteger(luastate, data->file_function_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filename"); + LuaPushStringBuffer(luastate, (uint8_t *)data->filename, + strlen(data->filename)); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "data_size"); + lua_pushinteger(luastate, data->data_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "data"); + LuaPushStringBuffer(luastate, (uint8_t *)data->data, + strlen(data->data)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 2): { + DNP3ObjectG70V2 *data = point->data; + lua_pushliteral(luastate, "username_offset"); + lua_pushinteger(luastate, data->username_offset); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username_size"); + lua_pushinteger(luastate, data->username_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "password_offset"); + lua_pushinteger(luastate, data->password_offset); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "password_size"); + lua_pushinteger(luastate, data->password_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "authentication_key"); + lua_pushinteger(luastate, data->authentication_key); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username"); + LuaPushStringBuffer(luastate, (uint8_t *)data->username, + strlen(data->username)); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "password"); + LuaPushStringBuffer(luastate, (uint8_t *)data->password, + strlen(data->password)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 3): { + DNP3ObjectG70V3 *data = point->data; + lua_pushliteral(luastate, "filename_offset"); + lua_pushinteger(luastate, data->filename_offset); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filename_size"); + lua_pushinteger(luastate, data->filename_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "created"); + lua_pushinteger(luastate, data->created); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "permissions"); + lua_pushinteger(luastate, data->permissions); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "authentication_key"); + lua_pushinteger(luastate, data->authentication_key); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_size"); + lua_pushinteger(luastate, data->file_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "operational_mode"); + lua_pushinteger(luastate, data->operational_mode); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "maximum_block_size"); + lua_pushinteger(luastate, data->maximum_block_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "request_id"); + lua_pushinteger(luastate, data->request_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filename"); + LuaPushStringBuffer(luastate, (uint8_t *)data->filename, + strlen(data->filename)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 4): { + DNP3ObjectG70V4 *data = point->data; + lua_pushliteral(luastate, "file_handle"); + lua_pushinteger(luastate, data->file_handle); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_size"); + lua_pushinteger(luastate, data->file_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "maximum_block_size"); + lua_pushinteger(luastate, data->maximum_block_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "request_id"); + lua_pushinteger(luastate, data->request_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "optional_text"); + LuaPushStringBuffer(luastate, (uint8_t *)data->optional_text, + strlen(data->optional_text)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 5): { + DNP3ObjectG70V5 *data = point->data; + lua_pushliteral(luastate, "file_handle"); + lua_pushinteger(luastate, data->file_handle); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "block_number"); + lua_pushinteger(luastate, data->block_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_data"); + LuaPushStringBuffer(luastate, (uint8_t *)data->file_data, + strlen(data->file_data)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 6): { + DNP3ObjectG70V6 *data = point->data; + lua_pushliteral(luastate, "file_handle"); + lua_pushinteger(luastate, data->file_handle); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "block_number"); + lua_pushinteger(luastate, data->block_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "status_code"); + lua_pushinteger(luastate, data->status_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "optional_text"); + LuaPushStringBuffer(luastate, (uint8_t *)data->optional_text, + strlen(data->optional_text)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 7): { + DNP3ObjectG70V7 *data = point->data; + lua_pushliteral(luastate, "filename_offset"); + lua_pushinteger(luastate, data->filename_offset); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filename_size"); + lua_pushinteger(luastate, data->filename_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_type"); + lua_pushinteger(luastate, data->file_type); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "file_size"); + lua_pushinteger(luastate, data->file_size); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "created_timestamp"); + lua_pushinteger(luastate, data->created_timestamp); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "permissions"); + lua_pushinteger(luastate, data->permissions); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "request_id"); + lua_pushinteger(luastate, data->request_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "filename"); + LuaPushStringBuffer(luastate, (uint8_t *)data->filename, + strlen(data->filename)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(70, 8): { + DNP3ObjectG70V8 *data = point->data; + lua_pushliteral(luastate, "file_specification"); + LuaPushStringBuffer(luastate, (uint8_t *)data->file_specification, + strlen(data->file_specification)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(80, 1): { + DNP3ObjectG80V1 *data = point->data; + lua_pushliteral(luastate, "state"); + lua_pushinteger(luastate, data->state); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(81, 1): { + DNP3ObjectG81V1 *data = point->data; + lua_pushliteral(luastate, "fill_percentage"); + lua_pushinteger(luastate, data->fill_percentage); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "overflow_state"); + lua_pushinteger(luastate, data->overflow_state); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "group"); + lua_pushinteger(luastate, data->group); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "variation"); + lua_pushinteger(luastate, data->variation); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(83, 1): { + DNP3ObjectG83V1 *data = point->data; + lua_pushliteral(luastate, "vendor_code"); + LuaPushStringBuffer(luastate, (uint8_t *)data->vendor_code, + strlen(data->vendor_code)); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "object_id"); + lua_pushinteger(luastate, data->object_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "length"); + lua_pushinteger(luastate, data->length); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "data_objects"); + lua_pushlstring(luastate, (const char *)data->data_objects, + data->length); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(86, 2): { + DNP3ObjectG86V2 *data = point->data; + lua_pushliteral(luastate, "rd"); + lua_pushinteger(luastate, data->rd); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "wr"); + lua_pushinteger(luastate, data->wr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "st"); + lua_pushinteger(luastate, data->st); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "ev"); + lua_pushinteger(luastate, data->ev); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "df"); + lua_pushinteger(luastate, data->df); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "padding0"); + lua_pushinteger(luastate, data->padding0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "padding1"); + lua_pushinteger(luastate, data->padding1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "padding2"); + lua_pushinteger(luastate, data->padding2); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(102, 1): { + DNP3ObjectG102V1 *data = point->data; + lua_pushliteral(luastate, "value"); + lua_pushinteger(luastate, data->value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 1): { + DNP3ObjectG120V1 *data = point->data; + lua_pushliteral(luastate, "csq"); + lua_pushinteger(luastate, data->csq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "usr"); + lua_pushinteger(luastate, data->usr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "mal"); + lua_pushinteger(luastate, data->mal); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reason"); + lua_pushinteger(luastate, data->reason); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "challenge_data"); + lua_pushlstring(luastate, (const char *)data->challenge_data, + data->challenge_data_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 2): { + DNP3ObjectG120V2 *data = point->data; + lua_pushliteral(luastate, "csq"); + lua_pushinteger(luastate, data->csq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "usr"); + lua_pushinteger(luastate, data->usr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "mac_value"); + lua_pushlstring(luastate, (const char *)data->mac_value, + data->mac_value_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 3): { + DNP3ObjectG120V3 *data = point->data; + lua_pushliteral(luastate, "csq"); + lua_pushinteger(luastate, data->csq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_number"); + lua_pushinteger(luastate, data->user_number); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 4): { + DNP3ObjectG120V4 *data = point->data; + lua_pushliteral(luastate, "user_number"); + lua_pushinteger(luastate, data->user_number); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 5): { + DNP3ObjectG120V5 *data = point->data; + lua_pushliteral(luastate, "ksq"); + lua_pushinteger(luastate, data->ksq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_number"); + lua_pushinteger(luastate, data->user_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "key_wrap_alg"); + lua_pushinteger(luastate, data->key_wrap_alg); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "key_status"); + lua_pushinteger(luastate, data->key_status); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "mal"); + lua_pushinteger(luastate, data->mal); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "challenge_data_len"); + lua_pushinteger(luastate, data->challenge_data_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "challenge_data"); + lua_pushlstring(luastate, (const char *)data->challenge_data, + data->challenge_data_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "mac_value"); + lua_pushlstring(luastate, (const char *)data->mac_value, + data->mac_value_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 6): { + DNP3ObjectG120V6 *data = point->data; + lua_pushliteral(luastate, "ksq"); + lua_pushinteger(luastate, data->ksq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "usr"); + lua_pushinteger(luastate, data->usr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "wrapped_key_data"); + lua_pushlstring(luastate, (const char *)data->wrapped_key_data, + data->wrapped_key_data_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 7): { + DNP3ObjectG120V7 *data = point->data; + lua_pushliteral(luastate, "sequence_number"); + lua_pushinteger(luastate, data->sequence_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "usr"); + lua_pushinteger(luastate, data->usr); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "association_id"); + lua_pushinteger(luastate, data->association_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "error_code"); + lua_pushinteger(luastate, data->error_code); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "time_of_error"); + lua_pushinteger(luastate, data->time_of_error); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "error_text"); + LuaPushStringBuffer(luastate, (uint8_t *)data->error_text, + strlen(data->error_text)); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 8): { + DNP3ObjectG120V8 *data = point->data; + lua_pushliteral(luastate, "key_change_method"); + lua_pushinteger(luastate, data->key_change_method); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "certificate_type"); + lua_pushinteger(luastate, data->certificate_type); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "certificate"); + lua_pushlstring(luastate, (const char *)data->certificate, + data->certificate_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 9): { + DNP3ObjectG120V9 *data = point->data; + lua_pushliteral(luastate, "mac_value"); + lua_pushlstring(luastate, (const char *)data->mac_value, + data->mac_value_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 10): { + DNP3ObjectG120V10 *data = point->data; + lua_pushliteral(luastate, "key_change_method"); + lua_pushinteger(luastate, data->key_change_method); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "operation"); + lua_pushinteger(luastate, data->operation); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "scs"); + lua_pushinteger(luastate, data->scs); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_role"); + lua_pushinteger(luastate, data->user_role); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_role_expiry_interval"); + lua_pushinteger(luastate, data->user_role_expiry_interval); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username_len"); + lua_pushinteger(luastate, data->username_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_public_key_len"); + lua_pushinteger(luastate, data->user_public_key_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "certification_data_len"); + lua_pushinteger(luastate, data->certification_data_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username"); + LuaPushStringBuffer(luastate, (uint8_t *)data->username, + strlen(data->username)); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_public_key"); + lua_pushlstring(luastate, (const char *)data->user_public_key, + data->user_public_key_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "certification_data"); + lua_pushlstring(luastate, (const char *)data->certification_data, + data->certification_data_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 11): { + DNP3ObjectG120V11 *data = point->data; + lua_pushliteral(luastate, "key_change_method"); + lua_pushinteger(luastate, data->key_change_method); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username_len"); + lua_pushinteger(luastate, data->username_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "master_challenge_data_len"); + lua_pushinteger(luastate, data->master_challenge_data_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "username"); + LuaPushStringBuffer(luastate, (uint8_t *)data->username, + strlen(data->username)); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "master_challenge_data"); + lua_pushlstring(luastate, (const char *)data->master_challenge_data, + data->master_challenge_data_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 12): { + DNP3ObjectG120V12 *data = point->data; + lua_pushliteral(luastate, "ksq"); + lua_pushinteger(luastate, data->ksq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_number"); + lua_pushinteger(luastate, data->user_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "challenge_data_len"); + lua_pushinteger(luastate, data->challenge_data_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "challenge_data"); + lua_pushlstring(luastate, (const char *)data->challenge_data, + data->challenge_data_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 13): { + DNP3ObjectG120V13 *data = point->data; + lua_pushliteral(luastate, "ksq"); + lua_pushinteger(luastate, data->ksq); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "user_number"); + lua_pushinteger(luastate, data->user_number); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "encrypted_update_key_len"); + lua_pushinteger(luastate, data->encrypted_update_key_len); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "encrypted_update_key_data"); + lua_pushlstring(luastate, (const char *)data->encrypted_update_key_data, + data->encrypted_update_key_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 14): { + DNP3ObjectG120V14 *data = point->data; + lua_pushliteral(luastate, "digital_signature"); + lua_pushlstring(luastate, (const char *)data->digital_signature, + data->digital_signature_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(120, 15): { + DNP3ObjectG120V15 *data = point->data; + lua_pushliteral(luastate, "mac"); + lua_pushlstring(luastate, (const char *)data->mac, + data->mac_len); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(121, 1): { + DNP3ObjectG121V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "association_id"); + lua_pushinteger(luastate, data->association_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count_value"); + lua_pushinteger(luastate, data->count_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(122, 1): { + DNP3ObjectG122V1 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "association_id"); + lua_pushinteger(luastate, data->association_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count_value"); + lua_pushinteger(luastate, data->count_value); + lua_settable(luastate, -3); + break; + } + case DNP3_OBJECT_CODE(122, 2): { + DNP3ObjectG122V2 *data = point->data; + lua_pushliteral(luastate, "online"); + lua_pushinteger(luastate, data->online); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "restart"); + lua_pushinteger(luastate, data->restart); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "comm_lost"); + lua_pushinteger(luastate, data->comm_lost); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "remote_forced"); + lua_pushinteger(luastate, data->remote_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "local_forced"); + lua_pushinteger(luastate, data->local_forced); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved0"); + lua_pushinteger(luastate, data->reserved0); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "discontinuity"); + lua_pushinteger(luastate, data->discontinuity); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "reserved1"); + lua_pushinteger(luastate, data->reserved1); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "association_id"); + lua_pushinteger(luastate, data->association_id); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "count_value"); + lua_pushinteger(luastate, data->count_value); + lua_settable(luastate, -3); + lua_pushliteral(luastate, "timestamp"); + lua_pushinteger(luastate, data->timestamp); + lua_settable(luastate, -3); + break; + } + default: + break; + } +} + +#endif /* HAVE_LUA */ diff --git a/src/util-lua-dnp3-objects.h b/src/util-lua-dnp3-objects.h new file mode 100644 index 0000000000..6575695a26 --- /dev/null +++ b/src/util-lua-dnp3-objects.h @@ -0,0 +1,24 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +#ifndef __UTIL_LUA_DNP3_OBJECTS_H__ +#define __UTIL_LUA_DNP3_OBJECTS_H__ + +void DNP3PushPoint(lua_State *luastate, DNP3Object *object, + DNP3Point *item); + +#endif /* ! __UTIL_LUA_DNP3_OBJECTS_H__ */ diff --git a/src/util-lua-dnp3.c b/src/util-lua-dnp3.c new file mode 100644 index 0000000000..96b7a5ea6b --- /dev/null +++ b/src/util-lua-dnp3.c @@ -0,0 +1,201 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +#include "suricata-common.h" + +#include "app-layer-dnp3.h" +#include "app-layer-dnp3-objects.h" + +#ifdef HAVE_LUA + +#include +#include +#include + +#include "util-lua.h" +#include "util-lua-common.h" +#include "util-lua-dnp3-objects.h" + +/** + * \brief Helper macro to push key and integer value onto a table. + */ +#define LUA_PUSHT_INT(l, k, v) do { \ + lua_pushliteral(luastate, k); \ + lua_pushinteger(luastate, v); \ + lua_settable(luastate, -3); \ + } while (0); + +static void DNP3PushPoints(lua_State *luastate, DNP3Object *object) +{ + DNP3Point *point; + int i = 1; + + TAILQ_FOREACH(point, object->points, next) { + lua_pushinteger(luastate, i++); + lua_newtable(luastate); + + lua_pushliteral(luastate, "index"); + lua_pushinteger(luastate, point->index); + lua_settable(luastate, -3); + + DNP3PushPoint(luastate, object, point); + + lua_settable(luastate, -3); + } +} + +static void DNP3PushObjects(lua_State *luastate, DNP3ObjectList *objects) +{ + DNP3Object *object = NULL; + int i = 1; + + TAILQ_FOREACH(object, objects, next) { + lua_pushinteger(luastate, i++); + lua_newtable(luastate); + + lua_pushliteral(luastate, "group"); + lua_pushinteger(luastate, object->group); + lua_settable(luastate, -3); + + lua_pushliteral(luastate, "variation"); + lua_pushinteger(luastate, object->variation); + lua_settable(luastate, -3); + + lua_pushliteral(luastate, "points"); + lua_newtable(luastate); + DNP3PushPoints(luastate, object); + lua_settable(luastate, -3); + + lua_settable(luastate, -3); + } +} + +static void DNP3PushLinkHeader(lua_State *luastate, DNP3LinkHeader *header) +{ + LUA_PUSHT_INT(luastate, "len", header->len); + LUA_PUSHT_INT(luastate, "control", header->control); + LUA_PUSHT_INT(luastate, "dst", header->dst); + LUA_PUSHT_INT(luastate, "src", header->src); + LUA_PUSHT_INT(luastate, "crc", header->crc); +} + +static void DNP3PushApplicationHeader(lua_State *luastate, + DNP3ApplicationHeader *header) +{ + LUA_PUSHT_INT(luastate, "control", header->control); + LUA_PUSHT_INT(luastate, "function_code", header->function_code); +} + +static void DNP3PushRequest(lua_State *luastate, DNP3Transaction *tx) +{ + /* Link header. */ + lua_pushliteral(luastate, "link_header"); + lua_newtable(luastate); + DNP3PushLinkHeader(luastate, &tx->request_lh); + lua_settable(luastate, -3); + + /* Transport header. */ + LUA_PUSHT_INT(luastate, "transport_header", tx->request_th); + + /* Application header. */ + lua_pushliteral(luastate, "application_header"); + lua_newtable(luastate); + DNP3PushApplicationHeader(luastate, &tx->request_ah); + lua_settable(luastate, -3); + + lua_pushliteral(luastate, "objects"); + lua_newtable(luastate); + DNP3PushObjects(luastate, &tx->request_objects); + lua_settable(luastate, -3); +} + +static void DNP3PushResponse(lua_State *luastate, DNP3Transaction *tx) +{ + /* Link header. */ + lua_pushliteral(luastate, "link_header"); + lua_newtable(luastate); + DNP3PushLinkHeader(luastate, &tx->response_lh); + lua_settable(luastate, -3); + + /* Transport header. */ + LUA_PUSHT_INT(luastate, "transport_header", tx->response_th); + + /* Application header. */ + lua_pushliteral(luastate, "application_header"); + lua_newtable(luastate); + DNP3PushApplicationHeader(luastate, &tx->response_ah); + lua_settable(luastate, -3); + + /* Internal indicators. */ + LUA_PUSHT_INT(luastate, "indicators", + tx->response_iin.iin1 << 8 | tx->response_iin.iin2); + + lua_pushliteral(luastate, "objects"); + lua_newtable(luastate); + DNP3PushObjects(luastate, &tx->response_objects); + lua_settable(luastate, -3); +} + +static int DNP3GetTx(lua_State *luastate) +{ + if (!LuaStateNeedProto(luastate, ALPROTO_DNP3)) { + return LuaCallbackError(luastate, "error: protocol not dnp3"); + } + + DNP3Transaction *tx = LuaStateGetTX(luastate); + if (tx == NULL) { + return LuaCallbackError(luastate, "error: no tx"); + } + + lua_newtable(luastate); + + lua_pushliteral(luastate, "tx_num"); + lua_pushinteger(luastate, tx->tx_num); + lua_settable(luastate, -3); + + LUA_PUSHT_INT(luastate, "has_request", tx->has_request); + if (tx->has_request) { + lua_pushliteral(luastate, "request"); + lua_newtable(luastate); + LUA_PUSHT_INT(luastate, "done", tx->request_done); + LUA_PUSHT_INT(luastate, "complete", tx->request_complete); + DNP3PushRequest(luastate, tx); + lua_settable(luastate, -3); + } + + LUA_PUSHT_INT(luastate, "has_response", tx->has_response); + if (tx->has_response) { + lua_pushliteral(luastate, "response"); + lua_newtable(luastate); + LUA_PUSHT_INT(luastate, "done", tx->response_done); + LUA_PUSHT_INT(luastate, "complete", tx->response_complete); + DNP3PushResponse(luastate, tx); + lua_settable(luastate, -3); + } + + return 1; +} + +int LuaRegisterDNP3Functions(lua_State *luastate) +{ + lua_pushcfunction(luastate, DNP3GetTx); + lua_setglobal(luastate, "DNP3GetTx"); + + return 0; +} + +#endif /* HAVE_LUA */ diff --git a/src/util-lua-dnp3.h b/src/util-lua-dnp3.h new file mode 100644 index 0000000000..3430e41b22 --- /dev/null +++ b/src/util-lua-dnp3.h @@ -0,0 +1,27 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +#ifndef __UTIL_LUA_DNP3_H__ +#define __UTIL_LUA_DNP3_H__ + +#ifdef HAVE_LUA + +int LuaRegisterDNP3Functions(lua_State *); + +#endif /* HAVE_LUA */ + +#endif /* !__UTIL_LUA_DNP3_H__ */