Ejemplo n.º 1
0
        public static byte[] Encode(string format, params object[] args)
        {
            var output = new BerMemoryOutput();
             var paramIndex = 0;

             for(int charIndex = 0; charIndex < format.Length; charIndex++)
             {
            var ch = format[charIndex];

            switch(ch)
            {
               case '{':
                  EncodeHeader(output, TypeTags.Sequence, BerDefinitions.IndefiniteLength);
                  break;

               case '}':
                  output.WriteByte(0);
                  output.WriteByte(0);
                  break;

               case 'b':
               {
                  EncodeHeader(output, TypeTags.Boolean, 1);
                  BerEncoding.EncodeBoolean(output, (bool)args[paramIndex++]);
                  break;
               }

               case 'i':
               case 'd':
               {
                  var value = (int)args[paramIndex++];
                  var valueLength = BerEncoding.GetIntegerLength(value);

                  EncodeHeader(output, TypeTags.Integer, valueLength);
                  BerEncoding.EncodeInteger(output, value, (int)valueLength);
                  break;
               }

               case 'l':
               case 't':
               {
                  var value = (long)args[paramIndex++];
                  var valueLength = BerEncoding.GetLongLength(value);

                  EncodeHeader(output, TypeTags.Integer, valueLength);
                  BerEncoding.EncodeLong(output, value, (int)valueLength);
                  break;
               }

               case 's':
               {
                  var value = (string)args[paramIndex++];
                  var valueLength = BerEncoding.GetUtf8StringLength(value);

                  EncodeHeader(output, TypeTags.UTF8String, valueLength);
                  BerEncoding.EncodeUtf8String(output, value);
                  break;
               }

               case 'y':
               {
                  var value = (byte[])args[paramIndex++];
                  var valueLength = value.Length;

                  EncodeHeader(output, TypeTags.OctetString, valueLength);
                  BerEncoding.EncodeByteArray(output, value);
                  break;
               }

               case 'f':
               case 'r':
               {
                  var value = (double)args[paramIndex++];
                  var local = new BerMemoryOutput();
                  var valueLength = BerEncoding.EncodeReal(local, value);
                  EncodeHeader(output, TypeTags.Real, valueLength);
                  output.WriteBytes(local.Memory);
                  break;
               }

               case 'o':
               {
                  var value = (int[])args[paramIndex++];
                  var local = new BerMemoryOutput();
                  var valueLength = BerEncoding.EncodeRelativeOid(local, value);
                  EncodeHeader(output, TypeTags.RelativeOid, valueLength);
                  output.WriteBytes(local.Memory);
                  break;
               }

               case 'g':
               {
                  var value = (DateTime)args[paramIndex++];
                  var local = new BerMemoryOutput();
                  var valueLength = BerEncoding.EncodeGeneralizedTime(local, value);
                  EncodeHeader(output, TypeTags.GeneralizedTime, valueLength);
                  output.WriteBytes(local.Memory);
                  break;
               }
            }
             }

             return output.ToArray();
        }
Ejemplo n.º 2
0
        public static byte[] Encode(string format, params object[] args)
        {
            var output     = new BerMemoryOutput();
            var paramIndex = 0;

            for (int charIndex = 0; charIndex < format.Length; charIndex++)
            {
                var ch = format[charIndex];

                switch (ch)
                {
                case '{':
                    EncodeHeader(output, TypeTags.Sequence, BerDefinitions.IndefiniteLength);
                    break;

                case '}':
                    output.WriteByte(0);
                    output.WriteByte(0);
                    break;

                case 'b':
                {
                    EncodeHeader(output, TypeTags.Boolean, 1);
                    BerEncoding.EncodeBoolean(output, (bool)args[paramIndex++]);
                    break;
                }

                case 'i':
                case 'd':
                {
                    var value       = (int)args[paramIndex++];
                    var valueLength = BerEncoding.GetIntegerLength(value);

                    EncodeHeader(output, TypeTags.Integer, valueLength);
                    BerEncoding.EncodeInteger(output, value, (int)valueLength);
                    break;
                }

                case 'l':
                case 't':
                {
                    var value       = (long)args[paramIndex++];
                    var valueLength = BerEncoding.GetLongLength(value);

                    EncodeHeader(output, TypeTags.Integer, valueLength);
                    BerEncoding.EncodeLong(output, value, (int)valueLength);
                    break;
                }

                case 's':
                {
                    var value       = (string)args[paramIndex++];
                    var valueLength = BerEncoding.GetUtf8StringLength(value);

                    EncodeHeader(output, TypeTags.UTF8String, valueLength);
                    BerEncoding.EncodeUtf8String(output, value);
                    break;
                }

                case 'y':
                {
                    var value       = (byte[])args[paramIndex++];
                    var valueLength = value.Length;

                    EncodeHeader(output, TypeTags.OctetString, valueLength);
                    BerEncoding.EncodeByteArray(output, value);
                    break;
                }

                case 'f':
                case 'r':
                {
                    var value       = (double)args[paramIndex++];
                    var local       = new BerMemoryOutput();
                    var valueLength = BerEncoding.EncodeReal(local, value);
                    EncodeHeader(output, TypeTags.Real, valueLength);
                    output.WriteBytes(local.Memory);
                    break;
                }

                case 'o':
                {
                    var value       = (int[])args[paramIndex++];
                    var local       = new BerMemoryOutput();
                    var valueLength = BerEncoding.EncodeRelativeOid(local, value);
                    EncodeHeader(output, TypeTags.RelativeOid, valueLength);
                    output.WriteBytes(local.Memory);
                    break;
                }

                case 'g':
                {
                    var value       = (DateTime)args[paramIndex++];
                    var local       = new BerMemoryOutput();
                    var valueLength = BerEncoding.EncodeGeneralizedTime(local, value);
                    EncodeHeader(output, TypeTags.GeneralizedTime, valueLength);
                    output.WriteBytes(local.Memory);
                    break;
                }
                }
            }

            return(output.ToArray());
        }