Ejemplo n.º 1
0
 /// <summary>
 /// Creates a BinWriter and uses the given delegate to write,
 /// then disposes the BinWriter
 /// </summary>
 /// <param name="DoWrite"></param>
 public static void QuickWrite(Stream stream, Action<BinWriter> DoWrite)
 {
     using (BinWriter w = new BinWriter(stream))
     {
         DoWrite(w);
     }
 }
Ejemplo n.º 2
0
        private static void EncodeKeys(Stream outStream, ISet<Key> keys)
        {
            using (BinWriter w = new BinWriter(outStream))
            {
                w.Write(keys.Count);
            }

            foreach (Key key in keys)
                XdrCoding.putBytes(outStream, key.Data);
        }
Ejemplo n.º 3
0
        public void Encode(Stream outStream)
        {
            // number of key schemes in the list
            using (BinWriter w = new BinWriter(outStream))
            {
                w.Write(keySets.Count);
            }

            foreach (var entry in keySets)
            {
                KeyScheme scheme = entry.Key;
                IKeySet keySet = entry.Value;

                // scheme ID
                using (BinWriter w = new BinWriter(outStream))
                {
                    w.Write(scheme.Id);
                }

                if (scheme.IsDual())
                {
                    DualKeySet dualKeySet = (DualKeySet)keySet;

                    using (BinWriter w = new BinWriter(outStream))
                    {
                        w.Write(2);
                    }

                    EncodeKeys(outStream, dualKeySet.ProducerKeys);
                    EncodeKeys(outStream, dualKeySet.ConsumerKeys);
                }
                else
                {
                    using (BinWriter w = new BinWriter(outStream))
                    {
                        w.Write(1);
                    }

                    EncodeKeys(outStream, (SingleKeySet)keySet);
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Write a length-delimted array of strings.
        /// </summary>
        /// <param name="outStream"></param>
        /// <param name="strings"></param>
        public static void putStringArray(Stream outStream, String[] strings)
        {
            using (BinWriter w = new BinWriter(outStream))
            {
                w.Write(strings.Length);
            }

            foreach (String s in strings)
                putString(outStream, s);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Write a length-delimited 4-byte-aligned UTF-8 string.
        /// </summary>
        /// <param name="outStream"></param>
        /// <param name="s"></param>
        public static void putString(Stream outStream, String s)
        {
            try
            {
                if (s.Length == 0)
                {
                    using (BinWriter w = new BinWriter(outStream))
                    {
                        w.Write(0);
                    }
                }
                else
                {
                    byte[] b = Encoding.UTF8.GetBytes(s);

                    using (BinWriter w = new BinWriter(outStream))
                    {
                        // write length
                        w.Write(b.Length);
                        // write string
                        w.Write(b);
                    }

                    putPadding(outStream, b.Length);
                }
            }
            catch (Exception ex)
            {
                // shouldn't be possible to get an error encoding from UTF-16 to UTF-8.
                throw new Exception("Internal error", ex);
            }
        }
Ejemplo n.º 6
0
        public static void putObjects(Stream outStream, Object[] objects)
        {
            using (BinWriter w = new BinWriter(outStream))
            {
                w.Write(objects.Length);
            }

            foreach (Object o in objects)
                putObject(outStream, o);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Put an object value in type_id/value format.
 /// </summary>
 /// <param name="outStream"></param>
 /// <param name="value"></param>
 public static void putObject(Stream outStream, Object value)
 {
     using (BinWriter w = new BinWriter(outStream))
     {
         if (value is String)
         {
             w.Write(TYPE_STRING);
             putString(outStream, (String)value);
         }
         else if (value is int)
         {
             w.Write(TYPE_INT32);
             w.Write((int)value);
         }
         else if (value is long)
         {
             w.Write(TYPE_INT64);
             w.Write((long)value);
         }
         else if (value is double)
         {
             w.Write(TYPE_REAL64);
             w.Write((double)value);
         }
         else if (value is byte[])
         {
             w.Write(TYPE_OPAQUE);
             putBytes(outStream, (byte[])value);
         }
         else if (value == null)
         {
             throw new ArgumentException("Value cannot be null");
         }
         else
         {
             throw new ArgumentException
               ("Don't know how to encode " + value.GetType().Name);
         }
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Write a name/value set.
 /// </summary>
 /// <param name="?"></param>
 public static void putNameValues(Stream outStream, Dictionary<String, Object> nameValues)
 {
     using (BinWriter w = new BinWriter(outStream))
     {
         w.Write(nameValues.Count);
         foreach (var entry in nameValues)
         {
             putString(outStream, entry.Key);
             putObject(outStream, entry.Value);
         }
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Write a length-delimted array of longs.
        /// </summary>
        /// <param name="outStream"></param>
        /// <param name="longs"></param>
        public static void putLongArray(Stream outStream, long[] longs)
        {
            using (BinWriter w = new BinWriter(outStream))
            {
                w.Write(longs.Length);

                foreach (long l in longs)
                    w.Write(l);
            }
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Write a length-delimited, 4-byte-aligned byte array.
 /// </summary>
 /// <param name="outStream"></param>
 /// <param name="bytes"></param>
 public static void putBytes(Stream outStream, byte[] bytes)
 {
     using (BinWriter w = new BinWriter(outStream))
     {
         w.Write(bytes.Length);
         w.Write(bytes);
     }
     putPadding(outStream, bytes.Length);
 }
Ejemplo n.º 11
0
 public static void putBool(Stream outStream, bool value)
 {
     using (BinWriter w = new BinWriter(outStream))
     {
         w.Write(value ? 1 : 0);
     }
 }