public byte[] ToArray() { var woffset = 0; var ret = new byte[Size]; ret.CopyAndIncr(BitConverter.GetBytes(HighestVersion), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(Services), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(Timestamp), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(RecvServices), ref woffset); ret.CopyAndIncr(RecvIp.MapToIPv6().GetAddressBytes(), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(RecvPort), ref woffset, true); ret.CopyAndIncr(BitConverter.GetBytes(TransServices), ref woffset, true); ret.CopyAndIncr(TransIp.MapToIPv6().GetAddressBytes(), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(TransPort), ref woffset, true); ret.CopyAndIncr(BitConverter.GetBytes(Nonce), ref woffset); ret.CopyAndIncr(UserAgentLength.ToArray(), ref woffset); ret.CopyAndIncr(System.Text.Encoding.ASCII.GetBytes(UserAgent), ref woffset); ret.CopyAndIncr(BitConverter.GetBytes(StartHeight), ref woffset); ret[woffset] = Relay ? (byte)0x01 : (byte)0x00; return(ret); }
public byte[] ToArray() { var pl = new byte[85 + UserAgentLength.Size + UserAgentLength]; var hv = BitConverter.GetBytes(HighestVersion); Buffer.BlockCopy(hv, 0, pl, 0, hv.Length); var sv = BitConverter.GetBytes(Services); Buffer.BlockCopy(sv, 0, pl, 4, sv.Length); var ts = BitConverter.GetBytes(Timestamp); Buffer.BlockCopy(ts, 0, pl, 12, ts.Length); var rs = BitConverter.GetBytes(RecvServices); Buffer.BlockCopy(rs, 0, pl, 20, rs.Length); var ri = RecvIp.GetAddressBytes(); Buffer.BlockCopy(ri, 0, pl, 28, ri.Length); var rp = BitConverter.GetBytes(RecvPort); Array.Reverse(rp); Buffer.BlockCopy(rp, 0, pl, 44, rp.Length); var tss = BitConverter.GetBytes(TransServices); Buffer.BlockCopy(tss, 0, pl, 46, tss.Length); var ti = TransIp.GetAddressBytes(); Buffer.BlockCopy(ti, 0, pl, 54, ti.Length); var tp = BitConverter.GetBytes(TransPort); Array.Reverse(tp); Buffer.BlockCopy(tp, 0, pl, 70, tp.Length); var nn = BitConverter.GetBytes(Nonce); Buffer.BlockCopy(nn, 0, pl, 72, nn.Length); var ul = UserAgentLength.ToArray(); Buffer.BlockCopy(ul, 0, pl, 80, ul.Length); var ua = Encoding.ASCII.GetBytes(UserAgent); Buffer.BlockCopy(ua, 0, pl, 80 + UserAgentLength.Size, ua.Length); var sh = BitConverter.GetBytes(StartHeight); Buffer.BlockCopy(sh, 0, pl, 80 + UserAgentLength.Size + UserAgentLength, sh.Length); pl[pl.Length - 1] = Relay ? (byte)0x01 : (byte)0x00; return(pl); }