コード例 #1
0
        public static DomainName FromBytes(byte[] bytes, ref int index)
        {
            if (bytes[index] >> 6 == 3)
            {
                //In case of pointer
                ushort ptr;
                bytes[index] -= 3 << 6;
                BinaryHelper.FromBytes(bytes, index, out ptr);
                bytes[index] += 3 << 6;
                index        += 2;
                ptr           = (ushort)(ptr << 2 >> 2);
                int iPtr = ptr;
                return(FromBytes(bytes, ref iPtr));
            }
            else
            {
                DomainName dn = new DomainName();

                if (bytes[index] != 0)
                {
                    dn.Add(Encoding.UTF8.GetString(bytes, index + 1, bytes[index]));
                    index += bytes[index] + 1;
                    dn.AddRange(DomainName.FromBytes(bytes, ref index));
                }
                else
                {
                    index++;
                }
                return(dn);
            }
        }
コード例 #2
0
        public static DomainName Get(BinaryReader reader)
        {
            byte stringLength = reader.ReadByte();

            if (stringLength >> 6 == 3)
            {
                if (!(reader is BackReferenceBinaryReader))
                {
                    throw new NotSupportedException("The given binary reader does not support back reference");
                }
                //In case of pointer
                ushort ptr;
                BinaryHelper.FromBytes(new byte[] { (byte)(stringLength - (3 << 6)), reader.ReadByte() }, out ptr);
                return(((BackReferenceBinaryReader)reader).Get <DomainName>(ptr));
            }
            else
            {
                DomainName dn = new DomainName();
                if (reader is BackReferenceBinaryReader)
                {
                    ((BackReferenceBinaryReader)reader).Register((int)reader.BaseStream.Position - 1, dn);
                }
                //stringLength = reader.ReadByte();
                if (stringLength != 0)
                {
                    dn.Add(Encoding.UTF8.GetString(reader.ReadBytes(stringLength), 0, stringLength));
                    //dn.Add(Encoding.UTF8.GetString(bytes, index + 1, bytes[index]));

                    dn.AddRange(DomainName.Get(reader));
                }
                //else
                //    index++;
                return(dn);
            }
        }
コード例 #3
0
        internal static HostAddress Get(BinaryReader reader)
        {
            ushort byteCount;

            BinaryHelper.FromBytes(reader.ReadBytes(2), out byteCount);
            HostAddress ha = new HostAddress();

            ha.Address = new IPAddress(reader.ReadBytes(byteCount));
            return(ha);
        }
コード例 #4
0
        public static Question FromBytes(byte[] bytes, ref int index)
        {
            Question q = new Question();

            q.DomainName = DomainName.FromBytes(bytes, ref index);
            ushort s;

            BinaryHelper.FromBytes(bytes, index, out s);
            index += 2;
            q.Type = (QType)s;
            BinaryHelper.FromBytes(bytes, index, out s);
            q.Class = (QClass)s;
            index  += 2;

/* openHAB, the open Home Automation Bus.
 * Copyright (C) 2010-${year}, openHAB.org <*****@*****.**>
 *
 * See the contributors.txt file in the distribution for a
 * full listing of individual contributors.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses>.
 *
 * Additional permission under GNU GPL version 3 section 7
 *
 * If you modify this Program, or any covered work, by linking or
 * combining it with Eclipse (or a modified version of that library),
 * containing parts covered by the terms of the Eclipse Public License
 * (EPL), the licensors of this Program grant you additional permission
 * to convey the resulting work.
 */

            return(q);
        }
コード例 #5
0
 protected virtual T GetMessage(byte[] requestBytes)
 {
     return(BinaryHelper.FromBytes((IServerRequest <T>) this, requestBytes));
 }