Skip to content

Commit fe4d7ce

Browse files
committed
More unittests for commsdsl2wireshark.
1 parent 59b74ae commit fe4d7ce

15 files changed

Lines changed: 149 additions & 6 deletions

app/commsdsl2comms/src/CommsEnumField.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,10 @@ void CommsEnumField::commsAddLengthOptInternal(GenStringsList& opts) const
12201220
return;
12211221
}
12221222

1223+
if (obj.parseMinLength() != obj.parseMaxLength()) {
1224+
return;
1225+
}
1226+
12231227
static const unsigned LengthMap[] = {
12241228
/* Int8 */ 1,
12251229
/* Uint8 */ 1,

app/commsdsl2comms/src/CommsIntField.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,10 @@ void CommsIntField::commsAddLengthOptInternal(GenStringsList& opts) const
771771
return;
772772
}
773773

774+
if (obj.parseMinLength() != obj.parseMaxLength()) {
775+
return;
776+
}
777+
774778
static const unsigned LengthMap[] = {
775779
/* Int8 */ 1,
776780
/* Uint8 */ 1,

app/commsdsl2comms/src/CommsSetField.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -701,13 +701,18 @@ std::string CommsSetField::commsDefBitNameFuncCodeInternal() const
701701

702702
void CommsSetField::commsAddLengthOptInternal(commsdsl::gen::util::GenStringsList& opts) const
703703
{
704-
auto bitLength = genParseObj().parseBitLength();
704+
auto obj = genSetFieldParseObj();
705+
auto bitLength = obj.parseBitLength();
705706
if (bitLength != 0U) {
706707
opts.push_back("comms::option::def::FixedBitLength<" + util::genNumToString(bitLength) + '>');
707708
return;
708709
}
709710

710-
opts.push_back("comms::option::def::FixedLength<" + util::genNumToString(genSetFieldParseObj().parseMinLength()) + '>');
711+
if (obj.parseMinLength() != obj.parseMaxLength()) {
712+
return;
713+
}
714+
715+
opts.push_back("comms::option::def::FixedLength<" + util::genNumToString(obj.parseMinLength()) + '>');
711716
}
712717

713718
void CommsSetField::commsAddDefaultValueOptInternal(commsdsl::gen::util::GenStringsList& opts) const

app/commsdsl2wireshark/src/WiresharkEnumField.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ std::string WiresharkEnumField::wiresharkDissectBodyImpl(const WiresharkField* r
119119
{"TVB", wiresharkTvbStr()},
120120
};
121121

122+
if (parseObj.parseAvailableLengthLimit()) {
123+
repl["LEN"] = std::to_string(wiresharkMaxFieldLength(refField));
124+
}
125+
122126
if (parseObj.parseEndian() == commsdsl::parse::ParseEndian_Little) {
123127
repl["SUFFIX"] = strings::genLittleEndianSuffixStr();
124128
}

app/commsdsl2wireshark/src/WiresharkField.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1343,7 +1343,7 @@ std::string WiresharkField::wiresharkUnitNameString(commsdsl::parse::ParseUnits
13431343
std::string WiresharkField::wiresharkEmptyBufferCheckCode() const
13441344
{
13451345
static const std::string Templ =
1346-
"if offset == offset_limit then"
1346+
"if offset == offset_limit then\n"
13471347
" return #^#ERROR#$#, offset\n"
13481348
"end"
13491349
;

app/commsdsl2wireshark/src/WiresharkIntField.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,10 @@ std::string WiresharkIntField::wiresharkDissectBodyImpl(const WiresharkField* re
224224
{"TREE", wiresharkTreeStr()},
225225
};
226226

227+
if (parseObj.parseAvailableLengthLimit()) {
228+
repl["LEN"] = std::to_string(wiresharkMaxFieldLength(refField));
229+
}
230+
227231
if (parseObj.parseEndian() == commsdsl::parse::ParseEndian_Little) {
228232
repl["SUFFIX"] = strings::genLittleEndianSuffixStr();
229233
}

app/commsdsl2wireshark/src/WiresharkSetField.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ std::string WiresharkSetField::wiresharkDissectBodyImpl(const WiresharkField* re
143143
{"RANGE", wiresharkRangeStr()},
144144
};
145145

146+
if (parseObj.parseAvailableLengthLimit()) {
147+
repl["LEN"] = std::to_string(wiresharkMaxFieldLength(refField));
148+
}
149+
146150
if (parseObj.parseEndian() == commsdsl::parse::ParseEndian_Little) {
147151
repl["SUFFIX"] = strings::genLittleEndianSuffixStr();
148152
}

app/commsdsl2wireshark/test/test32/src/test32.lua-test32_local.field_ComplexLength_value.replace

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ if short_val ~= 0xff then
33
return short_val
44
end
55

6-
return test32_local.field_ComplexLengthMembers_Long_value()
6+
return test32_local.field_ComplexLengthMembers_LongMembers_ActLong_value()
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import sys
2+
3+
from commsdsl_pcap_gen import *
4+
5+
def do_frame(id, payload):
6+
prefix = struct.pack('>B', id)
7+
return prefix + payload
8+
9+
def pcap1(f):
10+
seq = 1000
11+
msg1_payload = struct.pack('>BBIH', 4, 4, 0, 0xffff)
12+
msg1 = do_frame(1, msg1_payload)
13+
header = commsdsl_create_ethernet_ip_tcp_headers(len(msg1), seq)
14+
commsdsl_write_packet(f, header + msg1, time.time())
15+
16+
def pcap2(f):
17+
seq = 2000
18+
msg2_payload = struct.pack('>BBBHBH', 1, 1, 2, 1, 2, 1)
19+
msg2 = do_frame(2, msg2_payload)
20+
header = commsdsl_create_ethernet_ip_tcp_headers(len(msg2), seq)
21+
commsdsl_write_packet(f, header + msg2, time.time())
22+
23+
def pcap3(f):
24+
seq = 3000
25+
msg3_payload1 = struct.pack('>BBHH', 0, 2, 1, 0xabcd)
26+
msg3_1 = do_frame(3, msg3_payload1)
27+
msg3_payload2 = struct.pack('>BBH300sH', 5, 0xff, 300, b'a' * 300, 0xabcd)
28+
msg3_2 = do_frame(3, msg3_payload2)
29+
header = commsdsl_create_ethernet_ip_tcp_headers(len(msg3_1) + len(msg3_2), seq)
30+
commsdsl_write_packet(f, header + msg3_1 + msg3_2, time.time())
31+
32+
def main():
33+
with open(sys.argv[1], 'wb') as f:
34+
commsdsl_write_pcap_header(f)
35+
pcap1(f)
36+
pcap2(f)
37+
pcap3(f)
38+
39+
if __name__ == '__main__':
40+
main()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import sys
2+
3+
from commsdsl_pcap_gen import *
4+
5+
def do_frame(id, version, payload):
6+
prefix = struct.pack('>BB', id, version)
7+
return prefix + payload
8+
9+
def pcap1(f):
10+
seq = 1000
11+
msg1_payload1 = struct.pack('>BBBH', 1, 1, 2, 0xabcd)
12+
msg1_1 = do_frame(1, 3, msg1_payload1)
13+
msg1_payload2 = struct.pack('>BBBIH', 1, 5, 2, 3, 0xabcd)
14+
msg1_2 = do_frame(1, 5, msg1_payload2)
15+
msg1_payload3 = struct.pack('>BBBIH', 1, 5, 2, 3, 0xabcd)
16+
msg1_3 = do_frame(1, 4, msg1_payload3)
17+
header = commsdsl_create_ethernet_ip_tcp_headers(len(msg1_1) + len(msg1_2) + len(msg1_3), seq)
18+
commsdsl_write_packet(f, header + msg1_1 + msg1_2 + msg1_3, time.time())
19+
20+
def main():
21+
with open(sys.argv[1], 'wb') as f:
22+
commsdsl_write_pcap_header(f)
23+
pcap1(f)
24+
25+
if __name__ == '__main__':
26+
main()

0 commit comments

Comments
 (0)