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); } }
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); } }
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); }
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); }
protected virtual T GetMessage(byte[] requestBytes) { return(BinaryHelper.FromBytes((IServerRequest <T>) this, requestBytes)); }