Exemple #1
0
        public override DecodedObject <object> decodeObjectIdentifier(DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream)
        {
            DecodedObject <int> len = BERCoderUtils.decodeLength(stream);

            byte[] byteBuf = new byte[len.value];
            stream.Read(byteBuf, 0, byteBuf.Length);
            string dottedDecimal = BERObjectIdentifier.Decode(byteBuf);

            return(new DecodedObject <object>(new ObjectIdentifier(dottedDecimal)));
        }
Exemple #2
0
        public override int encodeObjectIdentifier(Object obj, Stream stream, ElementInfo elementInfo)
        {
            ObjectIdentifier oid = (ObjectIdentifier)obj;

            int[]  ia     = oid.getIntArray();
            byte[] buffer = BERObjectIdentifier.Encode(ia);
            if (buffer.Length < 1)
            {
                return(0);
            }
            int resultSize = 0; // size of tag

            resultSize += BERCoderUtils.encodeLength(buffer.Length, stream);
            stream.Write(buffer, 0, buffer.Length);
            resultSize += buffer.Length; // size of buffer
            return(resultSize);
        }
Exemple #3
0
        public override int encodeSequence(Object obj, Stream stream, ElementInfo elementInfo)
        {
            if (!CoderUtils.isSequenceSet(elementInfo))
            {
                return(base.encodeSequence(obj, stream, elementInfo));
            }
            else
            {
                int            resultSize = 0;
                PropertyInfo[] fields     = null;
                if (elementInfo.hasPreparedInfo())
                {
                    fields = elementInfo.getProperties(obj.GetType());
                }
                else
                {
                    SortedList <int, PropertyInfo> fieldOrder = CoderUtils.getSetOrder(obj.GetType());
                    //TO DO Performance optimization need (unnecessary copy)
                    fields = new PropertyInfo[fieldOrder.Count];
                    fieldOrder.Values.CopyTo(fields, 0);
                }

                for (int i = 0; i < fields.Length; i++)
                {
                    PropertyInfo field = fields[fields.Length - 1 - i];
                    resultSize += encodeSequenceField(obj, fields.Length - 1 - i, field, stream, elementInfo);
                }

                resultSize += encodeHeader(
                    BERCoderUtils.getTagValueForElement(
                        elementInfo,
                        TagClasses.Universal,
                        ElementType.Constructed,
                        UniversalTags.Set)
                    , resultSize, stream);
                return(resultSize);
            }
        }