Asn1API
Une Asn1API est une librairie contenant tout le matériel nécessaire à l'encodage et au décodage de données respectant un schéma ASN.1. Elle comprend un runtime ASN.1 qui regroupe les primitives de codage/décodage des types de base.
Elles sont disponibles en Java et C#.
Le développeur intègre directement dans son application la librairie et le runtime.
Contenu de la librairie Asn1API
Les classes Java ou C# issues du schéma ASN.1/XML. Elles sont produites par Asn1Compiler.
Le runtime de codage/décodage.
Le guide d'utilisation décrit les packages et namespaces, détaille les méthodes d'accès aux classes Java ou C# ainsi que les procédures de codage/décodage.
La documentation des classes au format javadoc ou MSDN-style HTML Help.
Des exemples d'utilisation.
Les API disponibles
3GPP
CDR_3GPP, CDR_3GPP_32298, TAP3,
NBAP, HNBAP, RANAP, RUA, RNSAP, SABP, SBCAP, URRC, PCAP, MAP, RRLP, PMF_3GPP, LTE_RRC, LTE_S1AP, LTE_X2AP
ECMA
CSTAp1, CSTAp2, CSTAp3, CSTAp3XML
ETSI
ETSI_LI, ITS
ITU-T
H245, H323, T120, MEGACO, E115
ISO
MMS, Z39.50, FTAM, RFID
IETF
LDAPv3, SNMPv2, CMS, PKIX
OASIS
XCBF
Open Mobile Alliance
SUPL, USUPL
Exemple
Voici un exemple Java et C# d'utilisation d'API générée à partir du fichier sample.asn1 :
SampleModule
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
MainStruct ::= SEQUENCE {
name IA5String,
age INTEGER
}
END
Les fichiers générés principaux sont :
- Sample/src/java/Sample/SampleFactory.java
- Sample/src/java/samplemodule/MainStruct.java
SampleFactory est une classe qui permet la gestion de l'API notamment la création des encodeurs et décodeurs. MainStruct est la classe associée au type ASN.1 MainStruct. Elle contient notamment les méthodes set/get pour accéder aux valeurs des composantes "name" et "age". Un exemple d'utilisation est :
import com.unigone.asn1RT.IDecoder;
import com.unigone.asn1RT.IEncoder;
import com.unigone.asn1RT.Asn1Exception;
import com.unigone.asn1RT.util.ByteArray;
import Sample.*;
import Sample.samplemodule.*;
...
/* encoder/decoder creation */
_encoder = SampleFactory.createEncoder();
_decoder = SampleFactory.createDecoder();
// fill a value
MainStruct mainStruct = new MainStruct();
mainStruct.setName("ABC");
mainStruct.setAge(7);
try
{
// ensure type is valid before encoding it
mainStruct.validate();
// Encode data (it could be written directly into a stream)
_encoder.encode(mainStruct);
}
catch (Asn1ValidationException avex)
{
System.out.println("ERROR WHILE VALIDATING pdu : "
+ avex.getMessage());
return;
}
catch (Asn1Exception aex)
{
System.out.println("ERROR WHILE ENCODING pdu : "
+ aex.getMessage());
return;
}
// dump data
System.out.println("mainStruct encoding :");
byte[] mainStruct_encoding = _encoder.getData();
System.out.println(ByteArray.byteArrayToHexString(mainStruct_encoding, null, -1));
// decode an encoding
mainStruct = new MainStruct();
try
{
// Decode data (it could be read directly from a stream).
_decoder.decode(mainStruct_encoding, mainStruct);
// ensure type is valid
mainStruct.validate();
}
catch (Asn1ValidationException avex)
{
// display already decoded values...
System.out.println(mainStruct.toString());
System.out.println("ERROR WHILE VALIDATING pdu : "
+ ex.getMessage());
return;
}
catch (Asn1Exception aex)
{
// display already decoded values...
System.out.println(mainStruct.toString());
System.out.println("decoder stopped at "+_decoder.usedBytes());
System.out.println("ERROR WHILE DECODING pdu : "
+ aex.getMessage());
return;
}
// access the value
String _name = mainStruct.getName();
long _age = mainStruct.getAge();
// using toString() with mainStruct
System.out.println(mainStruct.toString());
Les fichiers générés principaux sont :
- Sample/src/cSharp/Sample/SampleFactory.cs
- Sample/src/cSharp/SampleModule/MainStruct.cs
SampleFactory est une classe qui permet la gestion de l'Asn1API notamment la création des encodeurs et décodeurs. MainStruct est la classe associée au type ASN.1 MainStruct. Elle contient notamment les properties C# pour accéder aux valeurs des composantes "name" et "age". Un exemple d'utilisation est :
using IEncoder = Unigone.Asn1RT.IEncoder;
using IDecoder = Unigone.Asn1RT.IDecoder;
using Asn1Exception = Unigone.Asn1RT.Asn1Exception;
using ByteArray = Unigone.Asn1RT.Util.ByteArray;
using Sample;
using Sample.SampleModule;
...
/* encoder/decoder creation */
_encoder = SampleFactory.CreateEncoder();
_decoder = SampleFactory.CreateDecoder();
// fill a value
MainStruct mainStruct = new MainStruct();
mainStruct.Name = "ABC";
mainStruct.Age = 7;
try
{
// ensure type is valid before encoding it
mainStruct.Validate();
// Encode data (it could be written directly into a stream)
_encoder.Encode(mainStruct);
}
catch (Asn1ValidationException avex)
{
Console.Out.WriteLine("ERROR WHILE VALIDATING pdu : "
+ avex.Message);
return;
}
catch (Asn1Exception aex)
{
Console.Out.WriteLine("ERROR WHILE ENCODING pdu : "
+ aex.Message);
return;
}
// dump data
Console.Out.WriteLine("mainStruct encoding :");
byte[] mainStruct_encoding = _encoder.Data;
Console.Out.WriteLine(ByteArray.ByteArrayToHexString(mainStruct_encoding, null, -1));
// decode an encoding
mainStruct = new MainStruct();
try
{
// Decode data (it could be read directly from a stream).
_decoder.Decode(mainStruct_encoding, mainStruct);
// ensure type is valid
mainStruct.Validate();
}
catch (Asn1ValidationException avex)
{
// display already decoded values...
Console.Out.WriteLine(mainStruct.ToString());
Console.Out.WriteLine("ERROR WHILE VALIDATING pdu : "
+ avex.Message);
return;
}
catch (Asn1Exception aex)
{
// display already decoded values...
Console.Out.WriteLine(mainStruct.ToString());
Console.Out.WriteLine("decoder stopped at "+_decoder.UsedBytes());
Console.Out.WriteLine("ERROR WHILE DECODING pdu : "
+ aex.Message);
return;
}
// access the value
string _name = mainStruct.Name;
long _age = mainStruct.Age;
// using ToString() with mainStruct
Console.Out.WriteLine(mainStruct.ToString());