When decoding concatenated PDUs from a file, is it possible to know which one is invalid and then skip that particular PDU?

Here is a sample code that illustrates how you can process multiple PDUs and skip invalid PDUs. Decoding is done in two passes. In the first pass, the entire BER-encoded PDU is buffered into the artificially created OpenType. In the second pass, the real PDU is decoded. If errors occur during the second pass, the code simply discards the incorrectly encoded PDU buffered into the encoded OpenType:

FileInputStream in = new FileInputStream("encoding.ber"); 
try { 
while (in.available() > 0) { 
// Read the encoded PDU into buffer 
// and advance input stream to the 
// beginning of the next encoded PDU. 
OpenType ot = coder.decode(in, new OpenType()); 
try { 
ByteArrayInputStream in1 = 
new ByteArrayInputStream
ot.getEncodedValue()); 
AbstractData data = 
coder.decode(in1, new SomePDU()); 
} 
catch (Exception e) { 
// Report that PDU cannot be decoded 
// due to some error. 
} 
} 

catch (Exception e) { 
// Fatal error. BER encoding has invalid    
// tag/length header. Error recovery is 
// not possible.  
}


The samples included with some of the Knowledge Center answers are meant for your general understanding of the OSS products. Different versions of the products might produce slightly different outputs. Consult the products documentation and samples for the most up-to-date products information and code examples.



Contact Support
contact Our office hours
24 hours/day, 7 days/week

  • Phone: 1-888-OSS-2761 (USA and Canada)
  • Phone: 1-732-302-9669 (International)
  • Fax: 1-732-302-0023
  • Email: support@oss.com
Free Trial
download

Test drive the OSS Nokalva ASN.1, 4G and XML Tools now! Your trial includes complete software, documentation, sample programs, free 24x7 technical support and more.




Learn ASN.1
Learn ASN.1

Our expert personnel can help you learn ASN.1!

We offer 4-day ASN.1 courses at our headquarters or your premises.