예제 #1
0
        public override DecodedObject <object> decode(IASN1TypesDecoder decoder, DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
        {
            IASN1PreparedElementData saveInfo     = elementInfo.PreparedInfo;
            IASN1PreparedElement     instance     = (IASN1PreparedElement)elementInfo.PreparedInstance;
            ASN1ElementMetadata      saveElemInfo = elementInfo.PreparedASN1ElementInfo;

            elementInfo.PreparedInfo = (valueFieldMeta);

            if (saveElemInfo != null)
            {
                if (!saveElemInfo.HasTag &&
                    elementInfo.hasPreparedASN1ElementInfo() &&
                    elementInfo.PreparedASN1ElementInfo.HasTag)
                {
                    ASN1ElementMetadata elData = new ASN1ElementMetadata(
                        saveElemInfo.Name,
                        saveElemInfo.IsOptional,
                        elementInfo.PreparedASN1ElementInfo.HasTag,
                        elementInfo.PreparedASN1ElementInfo.IsImplicitTag,
                        elementInfo.PreparedASN1ElementInfo.TagClass,
                        elementInfo.PreparedASN1ElementInfo.Tag,
                        saveElemInfo.HasDefaultValue
                        );
                    elementInfo.PreparedASN1ElementInfo = elData;
                }
                else
                {
                    elementInfo.PreparedASN1ElementInfo = (saveElemInfo);
                }
            }
            DecodedObject <object> decodedResult =
                valueFieldMeta.TypeMetadata.decode(decoder, decodedTag, valueField.PropertyType, elementInfo, stream);

            if (decodedResult != null)
            {
                if (!CoderUtils.isNullField(valueField, elementInfo))
                {
                    decoder.invokeSetterMethodForField(valueField, instance, decodedResult.Value, elementInfo);
                }
            }
            elementInfo.PreparedInfo            = (saveInfo);
            elementInfo.PreparedInstance        = (instance);
            elementInfo.PreparedASN1ElementInfo = (saveElemInfo);

            if (decodedResult != null)
            {
                return(new DecodedObject <object>(instance, decodedResult.Size));
            }
            else
            {
                return(decodedResult);
            }
        }
예제 #2
0
 public override DecodedObject<object> decode(IASN1TypesDecoder decoder, DecodedObject<object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
 {
     return decoder.decodeSequence(decodedTag,objectClass,elementInfo,stream);
 }
예제 #3
0
 public abstract DecodedObject <object> decode(IASN1TypesDecoder decoder, DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream);
예제 #4
0
 public override DecodedObject <object> decode(IASN1TypesDecoder decoder, DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
 {
     return(decoder.decodeAny(decodedTag, objectClass, elementInfo, stream));
 }
예제 #5
0
        public override DecodedObject<object> decode(IASN1TypesDecoder decoder, DecodedObject<object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
        {
            IASN1PreparedElementData saveInfo = elementInfo.PreparedInfo;
            IASN1PreparedElement instance = (IASN1PreparedElement)elementInfo.PreparedInstance;
            ASN1ElementMetadata saveElemInfo = elementInfo.PreparedASN1ElementInfo;
            elementInfo.PreparedInfo = (valueFieldMeta);

            if (saveElemInfo != null)
            {
                if (!saveElemInfo.HasTag
                    && elementInfo.hasPreparedASN1ElementInfo()
                    && elementInfo.PreparedASN1ElementInfo.HasTag)
                {
                    ASN1ElementMetadata elData = new ASN1ElementMetadata(
                        saveElemInfo.Name,
                        saveElemInfo.IsOptional,
                        elementInfo.PreparedASN1ElementInfo.HasTag,
                        elementInfo.PreparedASN1ElementInfo.IsImplicitTag,
                        elementInfo.PreparedASN1ElementInfo.TagClass,
                        elementInfo.PreparedASN1ElementInfo.Tag,
                        saveElemInfo.HasDefaultValue
                        );
                    elementInfo.PreparedASN1ElementInfo = elData;
                }
                else
                    elementInfo.PreparedASN1ElementInfo = (saveElemInfo);
            }
            DecodedObject<object> decodedResult =
                valueFieldMeta.TypeMetadata.decode(decoder, decodedTag, valueField.PropertyType, elementInfo, stream);
            if (decodedResult != null)
            {
                if (!CoderUtils.isNullField(valueField, elementInfo))
                {
                    decoder.invokeSetterMethodForField(valueField, instance, decodedResult.Value, elementInfo);
                }
            }
            elementInfo.PreparedInfo = (saveInfo);
            elementInfo.PreparedInstance = (instance);
            elementInfo.PreparedASN1ElementInfo = (saveElemInfo);

            if (decodedResult != null)
                return new DecodedObject<object>(instance, decodedResult.Size);
            else
                return decodedResult;
        }
예제 #6
0
 public override DecodedObject <object> decode(IASN1TypesDecoder decoder, DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
 {
     elementInfo.PreparedInstance = null;
     return(decoder.decodeElement(decodedTag, objectClass, elementInfo, stream));
 }
예제 #7
0
 public override DecodedObject<object> decode(IASN1TypesDecoder decoder, DecodedObject<object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
 {
     elementInfo.PreparedInstance = null;
     return decoder.decodeElement(decodedTag, objectClass, elementInfo, stream);
 }
예제 #8
0
파일: ASN1Metadata.cs 프로젝트: rmc00/gsf
 public abstract DecodedObject<object> decode(IASN1TypesDecoder decoder, DecodedObject<object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream);