Beispiel #1
0
        EmberSet GetContents()
        {
            if (_contents == null)
            {
                _contents = this[ContentsTag] as EmberSet;
            }

            return(_contents);
        }
        /// <summary>
        /// Creates a container of an application-defined type with Set semantics
        /// </summary>
        /// <param name="type">Application-defined type. BerType.ApplicationFlag can be omitted.</param>
        public static EmberSet CreateApplicationDefinedSet(BerTag tag, uint type, EmberContainer parent)
        {
            var set = new EmberSet(tag, parent)
             {
            BerTypeNumber = type | BerType.ApplicationFlag
             };

             return set;
        }
Beispiel #3
0
        protected EmberSet EnsureContents()
        {
            if (_contents == null)
            {
                var tag = ContentsTag;

                _contents = this[tag] as EmberSet;

                if (_contents == null)
                {
                    _contents = new EmberSet(tag, this);
                }
            }

            return(_contents);
        }
 object IEmberVisitor <XmlExportState, object> .Visit(EmberSet node, XmlExportState state)
 {
     return(WriteContainer(node, state));
 }
Beispiel #5
0
        void Test_DOM()
        {
            Console.WriteLine("\r\n------------------------ DOM");

            EmberContainer container1;
            EmberContainer frame = new EmberFrame();

            container1 = new EmberSet(new BerTag(DefaultClass, 0));
            container1.Insert(new BerTag(DefaultClass, 0), -1);
            container1.Insert(new BerTag(DefaultClass, 1), 128);
            container1.Insert(new BerTag(DefaultClass, 2), -128);
            container1.Insert(new BerTag(DefaultClass, 3), 255);
            container1.Insert(new BerTag(DefaultClass, 4), -255);
            container1.Insert(new BerTag(DefaultClass, 5), 12345);
            container1.Insert(new BerTag(DefaultClass, 6), -12345);
            container1.Insert(new BerTag(DefaultClass, 7), 16384);
            container1.Insert(new BerTag(DefaultClass, 8), -16384);
            container1.Insert(new BerTag(DefaultClass, 9), 65535);
            container1.Insert(new BerTag(DefaultClass, 10), -65535);
            container1.Insert(new BerTag(DefaultClass, 11), 0);
            container1.Insert(new BerTag(DefaultClass, 12), 127);
            container1.Insert(new BerTag(DefaultClass, 13), -127);
            container1.Insert(new BerTag(DefaultClass, 1111222), 0xFFFFFFFF);
            container1.InsertOid(new BerTag(DefaultClass, 14), new int[] { 1, 3, 6, 0 });
            container1.InsertOid(new BerTag(DefaultClass, 15), new int[] { 1 });
            container1.InsertRelativeOid(new BerTag(DefaultClass, 16), new int[] { 1, 2, 3, 4, 5, 6 });
            frame.Insert(container1);

            container1 = new EmberSequence(new BerTag(DefaultClass, 1));
            container1.Insert(new BerTag(DefaultClass, 3), -0.54321);
            container1.Insert(new BerTag(DefaultClass, 5), "Wuppdich");

            var appDefined = EmberApplicationInterface.CreateApplicationDefinedSequence(new BerTag(BerClass.Application, 889), 2, container1);

            appDefined.Insert(new BerTag(DefaultClass, 100), true);

            frame.Insert(container1);

            var xml1 = GetXml(frame);

            var output = new BerMemoryOutput();

            frame.Encode(output);

            var memory = output.ToArray();

            using (var stream = new FileStream(@"N:\Temp\test.ber", FileMode.Create, FileAccess.Write))
                stream.Write(memory, 0, memory.Length);

            var input = new BerMemoryInput(memory);

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var asyncReader = new AsyncFrameReader(this);

            asyncReader.ReadBytes(output.Memory);
            var loadedFrame = asyncReader.DetachRoot();

            stopwatch.Stop();
            Console.WriteLine("load tree: {0}ms", stopwatch.ElapsedMilliseconds);

            var xml2 = GetXml(loadedFrame);

            Console.WriteLine(xml1);
            Console.WriteLine(xml2);

            Debug.Assert(xml1 == xml2);
        }
Beispiel #6
0
        EmberNode CreateNode(string tagName, string typeName)
        {
            BerTag    tag;
            EmberNode node = null;

            if (BerTag.TryParse(tagName, out tag) &&
                typeName != null)
            {
                uint type;

                if (BerDefinitions.GetTypeFromName(typeName, true, out type))
                {
                    switch (type)
                    {
                    case BerType.Null:
                    {
                        node = new NullEmberLeaf(tag);
                        break;
                    }

                    case BerType.Boolean:
                    {
                        bool value;

                        if (bool.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            node = new BooleanEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.Integer:
                    {
                        long value;

                        if (long.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            if ((ulong)value > int.MaxValue)
                            {
                                node = new LongEmberLeaf(tag, value);
                            }
                            else
                            {
                                node = new IntegerEmberLeaf(tag, (int)value);
                            }
                        }

                        break;
                    }

                    case BerType.Real:
                    {
                        double value;

                        if (double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value))
                        {
                            node = new RealEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.UTF8String:
                    {
                        node = new StringEmberLeaf(tag, _reader.ReadContentAsString());
                        break;
                    }

                    case BerType.OctetString:
                    {
                        var octets = System.Convert.FromBase64String(_reader.ReadContentAsString());
                        node = new OctetStringEmberLeaf(tag, octets);
                        break;
                    }

#pragma warning disable 618 // EmberFrame is obsolete
                    case BerType.Sequence:
                    {
                        if (tag == Legacy.EmberFrame.FrameTag)
                        {
                            node = new Legacy.EmberFrame();
                        }
                        else
                        {
                            node = new EmberSequence(tag);
                        }

                        break;
                    }
#pragma warning restore 618

                    case BerType.Set:
                    {
                        node = new EmberSet(tag);
                        break;
                    }

                    default:
                    {
                        if (_application != null)
                        {
                            node = _application.CreateNodeFromXml(type, tag, _reader);
                        }

                        if (node == null)
                        {
                            Debug.WriteLine("Unknown BER value type: " + type);

                            node = new EmberContainer(tag, null, type);
                        }

                        break;
                    }
                    }
                }
            }

            return(node);
        }
Beispiel #7
0
        void Test_DOM()
        {
            Console.WriteLine("\r\n------------------------ DOM");

             EmberContainer container1;
             EmberContainer frame = new EmberFrame();

             container1 = new EmberSet(new BerTag(DefaultClass, 0));
             container1.Insert(new BerTag(DefaultClass, 0), -1);
             container1.Insert(new BerTag(DefaultClass, 1), 128);
             container1.Insert(new BerTag(DefaultClass, 2), -128);
             container1.Insert(new BerTag(DefaultClass, 3), 255);
             container1.Insert(new BerTag(DefaultClass, 4), -255);
             container1.Insert(new BerTag(DefaultClass, 5), 12345);
             container1.Insert(new BerTag(DefaultClass, 6), -12345);
             container1.Insert(new BerTag(DefaultClass, 7), 16384);
             container1.Insert(new BerTag(DefaultClass, 8), -16384);
             container1.Insert(new BerTag(DefaultClass, 9), 65535);
             container1.Insert(new BerTag(DefaultClass, 10), -65535);
             container1.Insert(new BerTag(DefaultClass, 11), 0);
             container1.Insert(new BerTag(DefaultClass, 12), 127);
             container1.Insert(new BerTag(DefaultClass, 13), -127);
             container1.Insert(new BerTag(DefaultClass, 1111222), 0xFFFFFFFF);
             container1.InsertOid(new BerTag(DefaultClass, 14), new int[] { 1, 3, 6, 0 });
             container1.InsertOid(new BerTag(DefaultClass, 15), new int[] { 1 });
             container1.InsertRelativeOid(new BerTag(DefaultClass, 16), new int[] { 1, 2, 3, 4, 5, 6 });
             frame.Insert(container1);

             container1 = new EmberSequence(new BerTag(DefaultClass, 1));
             container1.Insert(new BerTag(DefaultClass, 3), -0.54321);
             container1.Insert(new BerTag(DefaultClass, 5), "Wuppdich");

             var appDefined = EmberApplicationInterface.CreateApplicationDefinedSequence(new BerTag(BerClass.Application, 889), 2, container1);
             appDefined.Insert(new BerTag(DefaultClass, 100), true);

             frame.Insert(container1);

             var xml1 = GetXml(frame);

             var output = new BerMemoryOutput();
             frame.Encode(output);

             var memory = output.ToArray();
             using(var stream = new FileStream(@"N:\Temp\test.ber", FileMode.Create, FileAccess.Write))
            stream.Write(memory, 0, memory.Length);

             var input = new BerMemoryInput(memory);

             var stopwatch = new Stopwatch();
             stopwatch.Start();

             var asyncReader = new AsyncFrameReader(this);
             asyncReader.ReadBytes(output.Memory);
             var loadedFrame = asyncReader.DetachRoot();

             stopwatch.Stop();
             Console.WriteLine("load tree: {0}ms", stopwatch.ElapsedMilliseconds);

             var xml2 = GetXml(loadedFrame);

             Console.WriteLine(xml1);
             Console.WriteLine(xml2);

             Debug.Assert(xml1 == xml2);
        }
Beispiel #8
0
        EmberNode CreateNode(string tagName, string typeName)
        {
            BerTag tag;
             EmberNode node = null;

             if(BerTag.TryParse(tagName, out tag)
             && typeName != null)
             {
            uint type;

            if(BerDefinitions.GetTypeFromName(typeName, true, out type))
            {
               switch(type)
               {
                  case BerType.Boolean:
                  {
                     bool value;

                     if(bool.TryParse(_reader.ReadContentAsString(), out value))
                        node = new BooleanEmberLeaf(tag, value);

                     break;
                  }

                  case BerType.Integer:
                  {
                     long value;

                     if(long.TryParse(_reader.ReadContentAsString(), out value))
                     {
                        if((ulong)value > int.MaxValue)
                           node = new LongEmberLeaf(tag, value);
                        else
                           node = new IntegerEmberLeaf(tag, (int)value);
                     }

                     break;
                  }

                  case BerType.Real:
                  {
                     double value;

                     if(double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value))
                        node = new RealEmberLeaf(tag, value);

                     break;
                  }

                  case BerType.UTF8String:
                  {
                     node = new StringEmberLeaf(tag, _reader.ReadContentAsString());
                     break;
                  }

                  case BerType.OctetString:
                  {
                     var octets = System.Convert.FromBase64String(_reader.ReadContentAsString());
                     node = new OctetStringEmberLeaf(tag, octets);
                     break;
                  }

            #pragma warning disable 618 // EmberFrame is obsolete
                  case BerType.Sequence:
                  {
                     if(tag == Legacy.EmberFrame.FrameTag)
                        node = new Legacy.EmberFrame();
                     else
                        node = new EmberSequence(tag);

                     break;
                  }
            #pragma warning restore 618

                  case BerType.Set:
                  {
                     node = new EmberSet(tag);
                     break;
                  }

                  default:
                  {
                     if(_application != null)
                        node = _application.CreateNodeFromXml(type, tag, _reader);

                     if(node == null)
                     {
                        Debug.WriteLine("Unknown BER value type: " + type);

                        node = new EmberContainer(tag, null, type);
                     }

                     break;
                  }
               }
            }
             }

             return node;
        }
        /// <summary>
        /// Creates an EmberSet object with the passed BerType. Convenience method
        /// to be called from an overridden CreateNodeFromXml method.
        /// </summary>
        protected EmberNode CreateSet(uint type, BerTag tag, XmlReader reader)
        {
            var node = new EmberSet(tag, null, true)
             {
            BerTypeNumber = type
             };

             return node;
        }
        /// <summary>
        /// Creates an EmberSet object with the passed BerType. Convenience method
        /// to be called from an overridden CreateNodeFromReader method.
        /// </summary>
        protected EmberNode CreateSet(uint type, BerReaderBase reader)
        {
            var tag = reader.Tag;
             var node = new EmberSet(tag, null);

             node.BerTypeNumber = type;
             return node;
        }