aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua/wslua_tvb.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2013-03-19 17:15:27 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2013-03-19 17:15:27 +0000
commit7d7bf98a8e01e1307cd5f9a27bbdf36c75838097 (patch)
tree87632d0b7676c9929349491edd89b7b4479063bb /epan/wslua/wslua_tvb.c
parentd16cb61d96fa75dd821af3aa2023592533b7a665 (diff)
Added TvbRange uncompress().
svn path=/trunk/; revision=48422
Diffstat (limited to 'epan/wslua/wslua_tvb.c')
-rw-r--r--epan/wslua/wslua_tvb.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/epan/wslua/wslua_tvb.c b/epan/wslua/wslua_tvb.c
index dc8d821ed3..15cd57a98d 100644
--- a/epan/wslua/wslua_tvb.c
+++ b/epan/wslua/wslua_tvb.c
@@ -1263,6 +1263,36 @@ WSLUA_METHOD TvbRange_range(lua_State* L) {
return 0;
}
+static int TvbRange_uncompress(lua_State* L) {
+ /* Obtain a uncompressed TvbRange from a TvbRange */
+#define WSLUA_ARG_TvbRange_tvb_NAME 2 /* The name to be given to the new data-source. */
+ TvbRange tvbr = checkTvbRange(L,1);
+ const gchar* name = luaL_optstring(L,WSLUA_ARG_ByteArray_tvb_NAME,"Uncompressed");
+ tvbuff_t *uncompr_tvb;
+
+ if (!(tvbr && tvbr->tvb)) return 0;
+
+ if (tvbr->tvb->expired) {
+ luaL_error(L,"expired tvb");
+ return 0;
+ }
+
+#ifdef HAVE_LIBZ
+ uncompr_tvb = tvb_child_uncompress(tvbr->tvb->ws_tvb, tvbr->tvb->ws_tvb, tvbr->offset, tvbr->len);
+ if (uncompr_tvb) {
+ add_new_data_source (lua_pinfo, uncompr_tvb, name);
+ if ((tvbr = new_TvbRange(L,uncompr_tvb,0,tvb_length(uncompr_tvb)))) {
+ PUSH_TVBRANGE(L,tvbr);
+ WSLUA_RETURN(1); /* The TvbRange */
+ }
+ }
+#else
+ luaL_error(L,"Missing support for ZLIB");
+#endif
+
+ return 0;
+}
+
/* Gets registered as metamethod automatically by WSLUA_REGISTER_CLASS/META */
static int TvbRange__gc(lua_State* L) {
TvbRange tvbr = checkTvbRange(L,1);
@@ -1344,6 +1374,7 @@ static const luaL_Reg TvbRange_methods[] = {
{"ustring", TvbRange_ustring},
{"le_ustringz", TvbRange_le_ustringz},
{"ustringz", TvbRange_ustringz},
+ {"uncompress", TvbRange_uncompress},
{ NULL, NULL }
};