use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.
the class BerClassWriter method writeSequenceOrSetClass.
private void writeSequenceOrSetClass(String className, AsnSequenceSet asnSequenceSet, Tag tag, String isStaticStr, List<String> listOfSubClassNames) throws IOException {
write("public" + isStaticStr + " class " + className + " implements " + berTypeInterfaceString + "Serializable {\n");
write("private static final long serialVersionUID = 1L;\n");
List<AsnElementType> componentTypes = asnSequenceSet.componentTypes;
addAutomaticTagsIfNeeded(componentTypes);
if (asnSequenceSet.parameters != null) {
List<AsnParameter> parameters = asnSequenceSet.parameters;
replaceParametersByAnyTypes(componentTypes, parameters);
}
for (AsnElementType componentType : componentTypes) {
if ((componentType.typeReference instanceof AsnConstructedType)) {
listOfSubClassNames.add(getClassName(componentType));
}
}
for (AsnElementType componentType : componentTypes) {
if (isInnerType(componentType)) {
String subClassName = getClassName(componentType, className);
writeConstructedTypeClass(subClassName, componentType.typeReference, null, true, listOfSubClassNames);
}
}
Tag mainTag;
if (tag == null) {
if (asnSequenceSet.isSequence) {
mainTag = stdSeqTag;
} else {
mainTag = stdSetTag;
}
} else {
mainTag = tag;
}
write("public static final BerTag tag = new BerTag(" + getBerTagParametersString(mainTag) + ");\n");
write("private byte[] code = null;");
setClassNamesOfComponents(listOfSubClassNames, componentTypes, className);
writeMembers(componentTypes);
if (asnSequenceSet.isSequence && accessExtended && extensibilityImplied) {
String accessModifierString = jaxbMode ? "private" : "public";
write(accessModifierString + " byte[] extensionBytes = null;");
}
writeEmptyConstructor(className);
if (jaxbMode) {
writeGetterAndSetter(componentTypes);
if (asnSequenceSet.isSequence && accessExtended && extensibilityImplied) {
write("public byte[] getExtensionBytes() {");
write("return extensionBytes;");
write("}\n");
write("public void setExtensionBytes(byte[] bytes) {");
write("this.extensionBytes = bytes;");
write("}\n");
}
} else {
writeEncodeConstructor(className, componentTypes);
}
boolean hasExplicitTag = (tag != null) && (tag.type == TagType.EXPLICIT);
writeSimpleEncodeFunction();
writeSequenceOrSetEncodeFunction(componentTypes, hasExplicitTag, asnSequenceSet.isSequence);
writeSimpleDecodeFunction("true");
if (asnSequenceSet.isSequence) {
writeSequenceDecodeMethod(convertToComponentInfos(componentTypes), hasExplicitTag);
} else {
writeSetDecodeFunction(convertToComponentInfos(componentTypes), hasExplicitTag);
}
writeEncodeAndSaveFunction();
writeSequenceOrSetToStringFunction(componentTypes);
write("}\n");
}
use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.
the class BerOctetString method decodeConstructedOctetString.
private int decodeConstructedOctetString(InputStream is) throws IOException {
BerLength length = new BerLength();
int lengthLength = length.decode(is);
value = new byte[0];
int vLength = 0;
if (length.val < 0) {
BerTag berTag = new BerTag();
vLength += berTag.decode(is);
while (!berTag.equals(0, 0, 0)) {
BerOctetString subOctetString = new BerOctetString();
vLength += subOctetString.decode(is, false);
value = concatenate(value, subOctetString.value);
vLength += berTag.decode(is);
}
vLength += BerLength.readEocByte(is);
} else {
while (vLength < length.val) {
BerOctetString subOctetString = new BerOctetString();
vLength += subOctetString.decode(is);
value = concatenate(value, subOctetString.value);
}
}
return lengthLength + vLength;
}
use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.
the class BerClassWriter method writeSequenceOfClass.
private void writeSequenceOfClass(String className, AsnSequenceOf asnSequenceOf, Tag tag, String isStaticStr, List<String> listOfSubClassNames) throws IOException {
write("public" + isStaticStr + " class " + className + " implements " + berTypeInterfaceString + "Serializable {\n");
write("private static final long serialVersionUID = 1L;\n");
AsnElementType componentType = asnSequenceOf.componentType;
String referencedTypeName = getClassNameOfSequenceOfElement(componentType, listOfSubClassNames);
if (isInnerType(componentType)) {
writeConstructedTypeClass(referencedTypeName, componentType.typeReference, null, true, listOfSubClassNames);
}
Tag mainTag;
if (tag == null) {
if (asnSequenceOf.isSequenceOf) {
mainTag = stdSeqTag;
} else {
mainTag = stdSetTag;
}
} else {
mainTag = tag;
}
write("public static final BerTag tag = new BerTag(" + getBerTagParametersString(mainTag) + ");");
write("private byte[] code = null;");
if (jaxbMode) {
write("private List<" + referencedTypeName + "> seqOf = null;\n");
} else {
write("public List<" + referencedTypeName + "> seqOf = null;\n");
}
write("public " + className + "() {");
write("seqOf = new ArrayList<>();");
write("}\n");
write("public " + className + "(byte[] code) {");
write("this.code = code;");
write("}\n");
if (!jaxbMode) {
write("public " + className + "(List<" + referencedTypeName + "> seqOf) {");
write("this.seqOf = seqOf;");
write("}\n");
}
if (jaxbMode) {
writeGetterForSeqOf(referencedTypeName);
}
boolean hasExplicitTag = (tag != null) && (tag.type == TagType.EXPLICIT);
writeSimpleEncodeFunction();
writeSequenceOfEncodeFunction(componentType, hasExplicitTag, asnSequenceOf.isSequenceOf);
writeSimpleDecodeFunction("true");
writeSequenceOrSetOfDecodeFunction(convertToComponentInfo(componentType, false, referencedTypeName), hasExplicitTag, asnSequenceOf.isSequenceOf);
writeEncodeAndSaveFunction();
writeSequenceOrSetOfToStringFunction(referencedTypeName, componentType);
write("}\n");
}
use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.
the class BerClassWriter method writeEncodeTag.
private void writeEncodeTag(Tag tag) throws IOException {
int typeStructure;
if (tag.typeStructure == TypeStructure.CONSTRUCTED) {
typeStructure = BerTag.CONSTRUCTED;
} else {
typeStructure = BerTag.PRIMITIVE;
}
BerTag berTag = new BerTag(getTagClassId(tag.tagClass.toString()), typeStructure, tag.value);
write("// write tag: " + tag.tagClass + "_CLASS, " + tag.typeStructure + ", " + tag.value);
for (int i = (berTag.tagBytes.length - 1); i >= 0; i--) {
write("reverseOS.write(0x" + HexString.fromByte(berTag.tagBytes[i]) + ");");
}
write("codeLength += " + berTag.tagBytes.length + ";");
}
use of com.beanit.asn1bean.ber.BerTag in project sandbox-java by stIncMale.
the class ReceiptAttribute method decode.
public int decode(InputStream is, boolean withTag) throws IOException {
int tlByteCount = 0;
int vByteCount = 0;
BerTag berTag = new BerTag();
if (withTag) {
tlByteCount += tag.decodeAndCheck(is);
}
BerLength length = new BerLength();
tlByteCount += length.decode(is);
int lengthVal = length.val;
vByteCount += berTag.decode(is);
if (berTag.equals(BerInteger.tag)) {
type = new BerInteger();
vByteCount += type.decode(is, false);
vByteCount += berTag.decode(is);
} else {
throw new IOException("Tag does not match mandatory sequence component.");
}
if (berTag.equals(BerInteger.tag)) {
version = new BerInteger();
vByteCount += version.decode(is, false);
vByteCount += berTag.decode(is);
} else {
throw new IOException("Tag does not match mandatory sequence component.");
}
if (berTag.equals(BerOctetString.tag)) {
value = new BerOctetString();
vByteCount += value.decode(is, false);
if (lengthVal >= 0 && vByteCount == lengthVal) {
return tlByteCount + vByteCount;
}
vByteCount += berTag.decode(is);
} else {
throw new IOException("Tag does not match mandatory sequence component.");
}
if (lengthVal < 0) {
if (!berTag.equals(0, 0, 0)) {
throw new IOException("Decoded sequence has wrong end of contents octets");
}
vByteCount += BerLength.readEocByte(is);
return tlByteCount + vByteCount;
}
throw new IOException("Unexpected end of sequence, length tag: " + lengthVal + ", bytes decoded: " + vByteCount);
}
Aggregations