public static TransferAck Decode(G2Header root) { TransferAck ack = new TransferAck(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (child.Name == Packet_Uninitialized) { ack.Uninitialized = true; } if (child.Name == Packet_Error) { ack.Error = true; } if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_FileID: ack.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_StartByte: ack.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Bitfield: ack.Bitfield = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; } } return(ack); }
public static TransferRequest Decode(G2Header root) { TransferRequest tr = new TransferRequest(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (child.Name == Packet_GetBitfield) { tr.GetBitfield = true; } if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_FileID: tr.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_ChunkIndex: tr.ChunkIndex = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_StartByte: tr.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_EndByte: tr.EndByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; } } return(tr); }
public static TransferData Decode(G2Header root) { TransferData td = new TransferData(); if (G2Protocol.ReadPayload(root)) { td.Block = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize); } G2Protocol.ResetPacket(root); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_FileID: td.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_StartByte: td.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Index: td.Index = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; } } return(td); }
public static FileDetails Decode(G2Header root) { FileDetails packet = new FileDetails(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_Service: packet.Service = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_DataType: packet.DataType = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Hash: packet.Hash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Size: packet.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Extra: packet.Extra = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; } } return(packet); }
public static TransferStop Decode(G2Header root) { TransferStop stop = new TransferStop(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (child.Name == Packet_Retry) { stop.Retry = true; } if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_FileID: stop.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_StartByte: stop.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Index: stop.Index = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; } } return(stop); }
public static UpdateInfo Decode(G2Header root) { // embedded public key of source we allow updates from RSACryptoServiceProvider UpdateSourcePublicKey = new RSACryptoServiceProvider(); //UpdateSourcePublicKey.FromXmlString("<RSAKeyValue><Modulus>pTmHLSxyM9TDOM4tZzI5dld9JvPsHlHC/M5i0+Qtjid1DiefGAVubPToEhK9Im4Ohy37h5Ax6J3vt2pxLG4rnIDuKBJt70YH6W6XrJewQ6tid5BvVnNEzPUOIJHGMpOnyi0VjPpzZzWgp4JK6Yuh6LtsYwCyqIIJIBt9iQ/9XN0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"); UpdateInfo info = new UpdateInfo(); if (G2Protocol.ReadPayload(root)) { info.Embedded = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize); } G2Protocol.ResetPacket(root); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (G2Protocol.ReadPayload(child)) { if (child.Name == Packet_Signature) { info.Signature = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); } } } // verify signature byte[] pubKey = UpdateSourcePublicKey.ExportParameters(false).Modulus; if (!Utilities.CheckSignedData(pubKey, info.Embedded, info.Signature)) { return(null); } root = new G2Header(info.Embedded); if (!G2Protocol.ReadPacket(root)) { return(null); } child = new G2Header(info.Embedded); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_Name: info.Name = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Key: info.Key = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Size: info.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Hash: info.Hash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Notes: info.Notes = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Beginning: info.Beginning = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_DottedVersion: info.DottedVersion = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_SequentialVersion: info.SequentialVersion = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize); break; } } info.TempName = Utilities.ToBase64String(info.Hash); return(info); }
public static StorageFile Decode(G2Header root) { StorageFile file = new StorageFile(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_UID: file.UID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_Name: file.Name = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Date: file.Date = DateTime.FromBinary(BitConverter.ToInt64(child.Data, child.PayloadPos)); break; case Packet_Flags: file.Flags = (StorageFlags)BitConverter.ToUInt16(child.Data, child.PayloadPos); break; case Packet_Note: file.Note = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Revs: file.Revs = child.Data[child.PayloadPos]; break; case Packet_Size: file.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Hash: file.Hash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); file.HashID = BitConverter.ToUInt64(file.Hash, 0); break; case Packet_FileKey: file.FileKey = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_InternalSize: file.InternalSize = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_InternalHash: file.InternalHash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize); file.InternalHashID = BitConverter.ToUInt64(file.InternalHash, 0); break; case Packet_Integrated: file.IntegratedID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_Scope: file.Scope[BitConverter.ToUInt64(child.Data, child.PayloadPos)] = BitConverter.ToInt16(child.Data, child.PayloadPos + 8); break; } } return(file); }
public static TransferPong Decode(G2Header root) { TransferPong pong = new TransferPong(); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (child.Name == Packet_Error) { pong.Error = true; } if (!G2Protocol.ReadPayload(child)) { continue; } switch (child.Name) { case Packet_FileID: pong.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_Timeout: pong.Timeout = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Status: pong.Status = (TransferStatus)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_InternalSize: pong.InternalSize = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_ChunkSize: pong.ChunkSize = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_BitCount: pong.BitCount = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_AltClient: DhtClient client = DhtClient.FromBytes(child.Data, child.PayloadPos); pong.Alts[client] = new List <DhtAddress>(); G2Protocol.ResetPacket(child); G2Header sub = new G2Header(child.Data); while (G2Protocol.ReadNextChild(child, sub) == G2ReadResult.PACKET_GOOD) { if (G2Protocol.ReadPayload(sub)) { if (sub.Name == Packet_AltAddress) { pong.Alts[client].Add(DhtAddress.ReadPacket(sub)); } } } break; } } return(pong); }