SABP stream delineation routines
SABP is not only specified as ASN.1 with APER encoding, but 3GPP in their infinite wisdom specified that it will run directly inside a TCP stream.
As TCP, like any stream, doesn't preserve message boudaries, there's no length field or other framing that would tell us once a given SABP PDU is fully received. Instead, we have to implement something like an "incremental APER length determinant parser" which will parse the outer length of the APER encoded data, and then use the result of that to determine the length of one binary/encoded SABP PDU.
dissect_per_length_determinant() from wireshark
packet-per.c which is actually used by the wireshark SABP dissector, facing the same problem.
- % Done changed from 0 to 30
The implementation in TTCN3 can be seen at https://gerrit.osmocom.org/#/c/osmo-ttcn3-hacks/+/15590/, specifically in the functions
f_APER_getMsgLen() which are (as the name implies) written as reather generic helpers for APER-in-TCP.
This code has been validated using SABP_Selftests.ttcn which is part of the upcoming CBC test suite.