diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2006-03-30 19:48:05 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2006-03-30 19:48:05 +0000 |
commit | ad4fe1ff8f1b2583d68ef8d7b51172d72d59af1e (patch) | |
tree | fa5476bfb2ba2b0301e9c536855d6275f1dea8db | |
parent | 2e93b8b751af7a5d88aceb7e6d6f0b0520f38868 (diff) |
Fix FieldInfo and add an attribute for the filter name.
svn path=/trunk/; revision=17774
-rw-r--r-- | plugins/lua/elua_field.c | 69 |
1 files changed, 56 insertions, 13 deletions
diff --git a/plugins/lua/elua_field.c b/plugins/lua/elua_field.c index be6b432311..34cda992bd 100644 --- a/plugins/lua/elua_field.c +++ b/plugins/lua/elua_field.c @@ -58,6 +58,9 @@ ELUA_METAMETHOD FieldInfo__call(lua_State* L) { FieldInfo fi = checkFieldInfo(L,1); switch(fi->hfinfo->type) { + case FT_NONE: + lua_pushnil(L); + return 1; case FT_UINT8: case FT_UINT16: case FT_UINT24: @@ -80,30 +83,62 @@ ELUA_METAMETHOD FieldInfo__call(lua_State* L) { */ lua_pushnumber(L,(lua_Number)(gint64)fvalue_get_integer64(&(fi->value))); return 1; - case FT_ETHER: - case FT_IPv4: - case FT_IPv6: - case FT_IPXNET: - /* XXX: use Address ??? */ - + case FT_ETHER: { + Address eth = g_malloc(sizeof(address)); + eth->type = AT_ETHER; + eth->len = fi->length; + eth->data = tvb_memdup(fi->ds_tvb,fi->start,fi->length); + pushAddress(L,eth); + return 1; + } + case FT_IPv4:{ + Address ipv4 = g_malloc(sizeof(address)); + ipv4->type = AT_IPv4; + ipv4->len = fi->length; + ipv4->data = tvb_memdup(fi->ds_tvb,fi->start,fi->length); + pushAddress(L,ipv4); + return 1; + } + case FT_IPv6: { + Address ipv6 = g_malloc(sizeof(address)); + ipv6->type = AT_IPv6; + ipv6->len = fi->length; + ipv6->data = tvb_memdup(fi->ds_tvb,fi->start,fi->length); + pushAddress(L,ipv6); + return 1; + } + case FT_IPXNET:{ + Address ipx = g_malloc(sizeof(address)); + ipx->type = AT_IPX; + ipx->len = fi->length; + ipx->data = tvb_memdup(fi->ds_tvb,fi->start,fi->length); + pushAddress(L,ipx); + return 1; + } case FT_STRING: case FT_STRINGZ: + lua_pushstring(L,fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL)); + return 1; case FT_BYTES: case FT_UINT_BYTES: case FT_GUID: - case FT_OID: - lua_pushstring(L,fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL)); + case FT_OID: { + ByteArray ba = g_byte_array_new(); + g_byte_array_append(ba, ep_tvb_memdup(fi->ds_tvb,fi->start,fi->length),fi->length); + pushByteArray(L,ba); return 1; + } default: luaL_error(L,"FT_ not yet supported"); return 1; } - } ELUA_METAMETHOD FieldInfo__tostring(lua_State* L) { FieldInfo fi = checkFieldInfo(L,1); - lua_pushstring(L,fi->rep->representation); + if (fi) { + lua_pushstring(L,fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL)); + } return 1; } @@ -138,11 +173,18 @@ ELUA_ATTR_GET FieldInfo_get_generated(lua_State* L) { return 1; } +ELUA_ATTR_GET FieldInfo_get_name(lua_State* L) { + FieldInfo fi = checkFieldInfo(L,1); + lua_pushstring(L,fi->hfinfo->abbrev); + return 1; +} + static const luaL_reg FieldInfo_get[] = { {"data_source", FieldInfo_get_data_source }, {"range", FieldInfo_get_range}, {"hidden", FieldInfo_get_hidden}, {"generated", FieldInfo_get_generated}, + {"name", FieldInfo_get_name}, {"label", FieldInfo__tostring}, {"value", FieldInfo__call}, {"len", FieldInfo__len}, @@ -233,7 +275,7 @@ int FieldInfo_register(lua_State* L) { ELUA_FUNCTION elua_all_field_infos(lua_State* L) { - GPtrArray* found = proto_all_finfos(lua_tree->tree); + GPtrArray* found = lua_tree->tree ? proto_all_finfos(lua_tree->tree) : NULL; int items_found = 0; guint i; @@ -242,7 +284,10 @@ ELUA_FUNCTION elua_all_field_infos(lua_State* L) { pushFieldInfo(L,g_ptr_array_index(found,i)); items_found++; } + + g_ptr_array_free(found,TRUE); } + return items_found; } @@ -355,8 +400,6 @@ ELUA_METAMETHOD Field__call (lua_State* L) { items_found++; } } - - g_ptr_array_free(found,TRUE); } ELUA_RETURN(items_found); /* All the values of this field */ |