コード例 #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
ファイル: Encoder.cs プロジェクト: xj0229/gsf
        public int encodePreparedElement(object obj, Stream stream, ElementInfo elementInfo)
        {
            IASN1PreparedElement preparedInstance = (IASN1PreparedElement)obj;

            elementInfo.PreparedInstance = (preparedInstance);
            ASN1ElementMetadata elementDataSave = null;

            if (elementInfo.hasPreparedASN1ElementInfo())
            {
                elementDataSave = elementInfo.PreparedASN1ElementInfo;
            }
            elementInfo.PreparedInfo = (preparedInstance.PreparedData);
            if (elementDataSave != null)
            {
                elementInfo.PreparedASN1ElementInfo = (elementDataSave);
            }
            return(preparedInstance.PreparedData.TypeMetadata.encode(
                       this, obj, stream, elementInfo
                       ));
        }
コード例 #3
0
        public DecodedObject <object> decodePreparedElement(DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
        {
            IASN1PreparedElementData saveInfo         = elementInfo.PreparedInfo;
            IASN1PreparedElement     preparedInstance = (IASN1PreparedElement)createInstanceForElement(objectClass, elementInfo);

            elementInfo.PreparedInstance = preparedInstance;
            ASN1ElementMetadata elementDataSave = null;

            if (elementInfo.hasPreparedASN1ElementInfo())
            {
                elementDataSave = elementInfo.PreparedASN1ElementInfo;
            }
            elementInfo.PreparedInfo = preparedInstance.PreparedData;
            if (elementDataSave != null)
            {
                elementInfo.PreparedASN1ElementInfo = elementDataSave;
            }
            DecodedObject <object> result = preparedInstance.PreparedData.TypeMetadata.decode(
                this, decodedTag, objectClass, elementInfo, stream
                );

            elementInfo.PreparedInfo = saveInfo;
            return(result);
        }