If just raw data add a single field. If more complex loop through them. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- codegen/Makefile.am | 4 ++++ codegen/check_dissector | 4 ++++ codegen/data_u16s | Bin 0 -> 2000 bytes codegen/out_array_primitive.txt | 25 +++++++++++++++++++++++++ codegen/out_array_raw.txt | 5 +++++ codegen/out_array_struct.txt | 25 +++++++++++++++++++++++++ codegen/test.proto | 16 ++++++++++++++++ python_modules/dissector.py | 15 ++++++++++++++- 8 files changed, 93 insertions(+), 1 deletion(-) create mode 100755 codegen/data_u16s create mode 100644 codegen/out_array_primitive.txt create mode 100644 codegen/out_array_raw.txt create mode 100644 codegen/out_array_struct.txt diff --git a/codegen/Makefile.am b/codegen/Makefile.am index d8da936..bf5bbc7 100644 --- a/codegen/Makefile.am +++ b/codegen/Makefile.am @@ -60,6 +60,10 @@ EXTRA_DIST = \ data_base1 \ out_base1.txt \ out_struct1.txt \ + data_u16s \ + out_array_primitive.txt \ + out_array_raw.txt \ + out_array_struct.txt \ $(NULL) CLEANFILES = test.c test.h enums.h dissector.c dissector.h *.trs check_dissector.txt diff --git a/codegen/check_dissector b/codegen/check_dissector index 767ee9d..20d83ff 100755 --- a/codegen/check_dissector +++ b/codegen/check_dissector @@ -56,4 +56,8 @@ check data_base1 1 1 out_base1.txt check data_base1 1 1 out_struct1.txt --client +check data_u16s 1 100 out_array_primitive.txt --client +check data_u16s 1 101 out_array_raw.txt --client +check data_u16s 1 102 out_array_struct.txt --client + exit 0 diff --git a/codegen/data_u16s b/codegen/data_u16s new file mode 100755 index 0000000000000000000000000000000000000000..a9120dacd440f4139125ddf1cef775451e326edd GIT binary patch literal 2000 zcmeIy0~Zzs06@{3Z7kbfHkNI>wrtxi+qP{ROUt!o+cy43=lc!s+(!^W1ruBdA%zlJ z7-5AIUIY<E5?K^cMH5{NG5sc%*y4yQp7;_-D3QdHNGh4+Qb;M4)Y3>Ro%AxuD3jl1 zmPJ<CWS2uux#X5dUisu#KtYB4p|B!~DyFy+N-CwaGRi8ayb3C+q_Qfis;0UcYO1BS zI_j#Yz6Kg<q_IE!rHQ7RX|9EqT4}9~w%Td0gN{1stc$L?>8^*Kdg-l?zWV8JfPn@X z>~BL1HOz1$j5Nw<V~jP<coR%C$z)SZHO+K0%rwhvbIdi*d<!hJ$YM(@wajuWthCB% zYpk`-dK+xC$!1$@was=r?6k{nd+fE(eg_<M$YK9D;;3VeJK<j^opRb4XPtB21sDD2 zf0tZ##Z}i_cf(D$+;+!Z_uTiuLytW6#8b~a_rgoBy!OUh@4WZHN1uH5#aG{a_k%$H QK>vXMfd9b%e~JJ91Ud%iJOBUy literal 0 HcmV?d00001 diff --git a/codegen/out_array_primitive.txt b/codegen/out_array_primitive.txt new file mode 100644 index 0000000..3a77f37 --- /dev/null +++ b/codegen/out_array_primitive.txt @@ -0,0 +1,25 @@ +--- tree + --- item + Text: 0 (0) + Name: array + Abbrev: spice2.auto.ArrayPrimitive_array_array + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 1 (0x1) + Name: array + Abbrev: spice2.auto.ArrayPrimitive_array_array + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 2 (0x2) + Name: array + Abbrev: spice2.auto.ArrayPrimitive_array_array + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 3 (0x3) + Name: array + Abbrev: spice2.auto.ArrayPrimitive_array_array + Type: FT_UINT16 + Base: BASE_DEC diff --git a/codegen/out_array_raw.txt b/codegen/out_array_raw.txt new file mode 100644 index 0000000..f276871 --- /dev/null +++ b/codegen/out_array_raw.txt @@ -0,0 +1,5 @@ +--- tree + --- item + Text: + Name: array + Abbrev: spice2.auto.ArrayRaw_array_array diff --git a/codegen/out_array_struct.txt b/codegen/out_array_struct.txt new file mode 100644 index 0000000..eb03cd8 --- /dev/null +++ b/codegen/out_array_struct.txt @@ -0,0 +1,25 @@ +--- tree + --- item + Text: 0 (0) + Name: dummy + Abbrev: spice2.auto.Dummy_dummy + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 1 (0x1) + Name: dummy + Abbrev: spice2.auto.Dummy_dummy + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 2 (0x2) + Name: dummy + Abbrev: spice2.auto.Dummy_dummy + Type: FT_UINT16 + Base: BASE_DEC + --- item + Text: 3 (0x3) + Name: dummy + Abbrev: spice2.auto.Dummy_dummy + Type: FT_UINT16 + Base: BASE_DEC diff --git a/codegen/test.proto b/codegen/test.proto index 06fa303..2fd930b 100644 --- a/codegen/test.proto +++ b/codegen/test.proto @@ -34,6 +34,18 @@ struct Dummy { uint16 dummy; }; +message ArrayRaw { + uint8 array[4]; +}; + +message ArrayPrimitive { + uint16 array[4]; +}; + +message ArrayStruct { + Dummy array[4]; +}; + channel BaseChannel { server: message { @@ -58,6 +70,10 @@ channel BaseChannel { message { Dummy struct; } Struct1 = 1; + + ArrayPrimitive array_primitive = 100; + ArrayRaw array_raw; + ArrayStruct array_struct; }; protocol Spice { diff --git a/python_modules/dissector.py b/python_modules/dissector.py index edc6dc3..caf817f 100644 --- a/python_modules/dissector.py +++ b/python_modules/dissector.py @@ -304,6 +304,20 @@ def write_switch(writer, container, switch, dest, scope): def write_array(writer, container, member, nelements, array, dest, scope): assert(container and member) + element_type = array.element_type + + if element_type == ptypes.uint8 or element_type == ptypes.int8: + write_wireshark_field(writer, container, member, array, dest.level.tree, nelements, 'ENC_NA') + writer.increment("offset", nelements) + return + + with writer.index() as index, writer.for_loop(index, nelements) as array_scope: + if element_type.is_primitive(): + write_member_primitive(writer, container, member, element_type, dest, scope) + else: + assert(element_type.is_struct()) + write_struct(writer, member, element_type, index, dest, scope) + def write_pointer(writer, container, member, t, dest, scope): assert(t.is_pointer()) @@ -322,7 +336,6 @@ def write_struct_func(writer, t, func_name, index): writer.statement('return offset') writer.end_block() - def write_struct(writer, member, t, index, dest, scope): assert(t.is_struct()) -- 2.1.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel