public DeliveryStatusMessage(BufRef reader) { var start = new BufRef(reader); reader.Seek(12); SetBuffer(start, reader); }
public I2PString(BufRef buf) { var len = buf.Read8(); Str = System.Text.Encoding.UTF8.GetString(buf.BaseArray, buf.BaseArrayOffset, len); buf.Seek(len); }
public DataMessage(BufRef reader) { var start = new BufRef(reader); reader.Seek((int)reader.ReadFlip32()); SetBuffer(start, reader); }
public TunnelGatewayMessage(BufRef reader) { var start = new BufRef(reader); reader.Seek(6 + reader.PeekFlip16(4)); SetBuffer(start, reader); }
public I2PRouterInfo(BufRef reader, bool verifysig) { var startview = new BufRef(reader); Identity = new I2PRouterIdentity(reader); PublishedDate = new I2PDate(reader); int addrcount = reader.Read8(); var addresses = new List <I2PRouterAddress>(); for (int i = 0; i < addrcount; ++i) { addresses.Add(new I2PRouterAddress(reader)); } Adresses = addresses.ToArray(); reader.Seek(reader.Read8() * 32); // peer_size. Unused. Options = new I2PMapping(reader); var payloadend = new BufRef(reader); Data = new BufLen(startview, 0, reader - startview); Signature = new I2PSignature(reader, Identity.Certificate); if (verifysig) { var versig = VerifySignature(); if (!versig) { throw new InvalidOperationException("I2PRouterInfo signature check failed"); } } }
public TunnelDataMessage(BufRef reader) { var start = new BufRef(reader); reader.Seek(4 + DataLength); SetBuffer(start, reader); }
public void Read(BufRef reader) { // magic number and zero byte 6 var magic = reader.ReadBufLen(6); _ = reader.Read8(); var magicstr = magic.ToEncoding(Encoding.UTF8); if (magicstr != SU3_MAGIC_NUMBER) { throw new ArgumentException("Not SU3 data."); } // su3 file format version FileVersion = reader.Read8(); SignatureType = reader.ReadFlip16(); SignatureLength = reader.ReadFlip16(); _ = reader.Read8(); VersionLength = reader.Read8(); _ = reader.Read8(); SignerIdLength = reader.Read8(); ContentLength = reader.ReadFlip64(); _ = reader.Read8(); FileType = (SU3FileTypes)reader.Read8(); _ = reader.Read8(); ContentType = (SU3ContentTypes)reader.Read8(); reader.Seek(12); Version = reader.ReadBufLen(VersionLength); SignerID = reader.ReadBufLen(SignerIdLength) .ToEncoding(Encoding.UTF8); }
public GarlicMessage(BufRef reader) { var start = new BufRef(reader); var len = (int)reader.PeekFlip32(0); reader.Seek(len + 4); SetBuffer(start, reader); }
public GarlicClove(BufRef reader) { Delivery = GarlicCloveDelivery.CreateGarlicCloveDelivery(reader); Message = I2NPMessage.ReadHeader16(reader).Message; CloveId = reader.Read32(); Expiration = new I2PDate(reader); reader.Seek(3); // Cert }
public TunnelDataMessage(I2NPHeader header, BufRef reader) { var start = new BufRef(reader); reader.Seek(4 + DataLength); SetBuffer(start, reader); // The message is encrypted at this stage //UpdateFirstDeliveryInstructionPosition(); }
public GetDateMessage(BufRef reader) : base(ProtocolMessageType.GetDate) { reader.Seek(4); if ((ProtocolMessageType)reader.Read8() != MessageType) { throw new ArgumentException("GetDateMessage( reader ) Wrong message type."); } Version = new I2PString(reader); Mapping = new I2PMapping(reader); }
void UpdateCachedFields(BufRef reader) { CachedKey = new I2PIdentHash(reader); CachedContent = reader.Read8() == 0 ? MessageContent.RouterInfo : MessageContent.LeaseSet; CachedReplyToken = reader.Read32(); if (CachedReplyToken != 0) { CachedReplyTunnelId = reader.Read32(); CachedReplyGateway = new I2PIdentHash(reader); } switch (CachedContent) { case MessageContent.RouterInfo: var length = reader.ReadFlip16(); #if USE_BC_GZIP CachedRouterInfo = new I2PRouterInfo( new BufRefLen(LZUtils.BCGZipDecompressNew(new BufLen(reader, 0, length))), true); #else using (var ms = new MemoryStream()) { ms.Write(reader.BaseArray, reader.BaseArrayOffset, length); ms.Position = 0; using (var gzs = new GZipStream(ms, CompressionMode.Decompress)) { var gzdata = StreamUtils.Read(gzs); CachedRouterInfo = new I2PRouterInfo(new BufRefLen(gzdata), true); } } #endif reader.Seek(length); break; case MessageContent.LeaseSet: CachedLeaseSet = new I2PLeaseSet(reader); break; /* * case MessageContent.LeaseSet2: * break; * * case MessageContent.EncryptedLeaseSet: * break; * * case MessageContent.MetaLeaseSet: * break; */ default: throw new InvalidDataException($"DatabaseStoreMessage: {CachedContent} not supported"); } }
public SessionStatusMessage(BufRef reader) : base(ProtocolMessageType.SessionStatus) { reader.Seek(4); if ((ProtocolMessageType)reader.Read8() != MessageType) { throw new ArgumentException("SessionStatusMessage( reader ) Wrong message type."); } SessionId = reader.Read16(); SessionState = (SessionStates)reader.Read8(); }
public I2PMapping(BufRef buf) { var bytes = buf.ReadFlip16(); var endpos = buf.BaseArrayOffset + bytes; while (buf.BaseArrayOffset < endpos) { var key = new I2PString(buf); if (buf.Peek8(0) == '=') { buf.Seek(1); } var value = new I2PString(buf); if (buf.Peek8(0) == ';') { buf.Seek(1); } Mappings[key] = value; } }
public DestinationStatistics(BufRef buf) { Id = new I2PIdentHash(buf); LastSeen = new I2PDate(buf); buf.Seek(60); // Reserved space var mapping = new I2PMapping(buf); SuccessfulConnects = TryGet(mapping, "SuccessfulConnects"); FailedConnects = TryGet(mapping, "FailedConnects"); InformationFaulty = TryGet(mapping, "InformationFaulty"); SuccessfulTunnelMember = TryGet(mapping, "SuccessfulTunnelMember"); DeclinedTunnelMember = TryGet(mapping, "DeclinedTunnelMember"); SlowHandshakeConnect = TryGet(mapping, "SlowHandshakeConnect"); MaxBandwidthSeen = TryGetFloat(mapping, "MaxBandwidthSeen"); TunnelBuildTimeout = TryGet(mapping, "TunnelBuildTimeout"); TunnelBuildTimeMsPerHop = TryGet(mapping, "TunnelBuildTimeMsPerHop", DefaultTunnelBuildTimeMsPerHop); FloodfillUpdateTimeout = TryGet(mapping, "FloodfillUpdateTimeout"); FloodfillUpdateSuccess = TryGet(mapping, "FloodfillUpdateSuccess"); SuccessfulTunnelTest = TryGet(mapping, "SuccessfulTunnelTest"); FailedTunnelTest = TryGet(mapping, "FailedTunnelTest"); }
void UpdateCachedFields(BufRef reader) { CachedKey = new I2PIdentHash(reader); CachedContent = reader.Read8() == 0 ? MessageContent.RouterInfo : MessageContent.LeaseSet; CachedReplyToken = reader.Read32(); if (CachedReplyToken != 0) { CachedReplyTunnelId = reader.Read32(); CachedReplyGateway = new I2PIdentHash(reader); } if (CachedContent == MessageContent.RouterInfo) { var length = reader.ReadFlip16(); #if USE_BC_GZIP CachedRouterInfo = new I2PRouterInfo( new BufRefLen(LZUtils.BCGZipDecompressNew(new BufLen(reader, 0, length))), true); #else using (var ms = new MemoryStream()) { ms.Write(reader.BaseArray, reader.BaseArrayOffset, length); ms.Position = 0; using (var gzs = new GZipStream(ms, CompressionMode.Decompress)) { var gzdata = StreamUtils.Read(gzs); CachedRouterInfo = new I2PRouterInfo(new BufRefLen(gzdata), true); } } #endif reader.Seek(length); } else { CachedLeaseSet = new I2PLeaseSet(reader); } }
public I2PRawData(BufRef reader, int size) { Data = new byte[size]; Array.Copy(reader.BaseArray, reader.BaseArrayOffset, Data, 0, size); reader.Seek(size); }