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); }
void UpdateCachedFields(BufRef reader) { CachedKey = new I2PIdentHash(reader); CachedFrom = new I2PIdentHash(reader); CachedLookupType = (LookupTypes)reader.Read8(); if (((byte)CachedLookupType & 0x01) != 0) { CachedTunnelId = new I2PTunnelId(reader); } var excludecount = reader.ReadFlip16(); for (int i = 0; i < excludecount; ++i) { CachedExcludeList.Add(new DatabaseSearchReplyMessage(reader)); } if (((byte)CachedLookupType & 0x02) != 0) { CachedReplyKey = new I2PSessionKey(reader); var tagcount = reader.Read8(); CachedTags.Add(new I2PSessionTag(reader)); } }
public RequestVariableLeaseSetMessage(BufRef reader) : base(ProtocolMessageType.RequestVarLS) { var leases = reader.ReadFlip16(); for (int i = 0; i < leases; ++i) { Leases.Add(new I2PLease(reader)); } }
public RequestLeaseSetMessage( BufRef reader ) : base(ProtocolMessageType.RequestLS) { SessionId = reader.ReadFlip16(); var leases = reader.Read8(); for ( int i = 0; i < leases; ++i ) { Leases.Add( new I2PLease( 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 CreateLeaseSetMessage(BufRef reader, I2CPSession session) : base(ProtocolMessageType.CreateLS) { SessionId = reader.ReadFlip16(); var cert = session.SessionIds[SessionId].Config.Destination.Certificate; DSAPrivateSigningKey = new I2PSigningPrivateKey( reader, new I2PCertificate(I2PSigningKey.SigningKeyTypes.DSA_SHA1)); PrivateKey = new I2PPrivateKey(reader, cert); Leases = new I2PLeaseSet(reader); }
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; } }
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 ReconfigureSessionMessage(BufRef reader) : base(ProtocolMessageType.ReconfigSession) { SessionId = reader.ReadFlip16(); Config = new I2PSessionConfig(reader); }
public SessionStatusMessage(BufRef reader) : base(ProtocolMessageType.SessionStatus) { SessionId = reader.ReadFlip16(); SessionState = (SessionStates)reader.Read8(); }
public DestroySessionMessage(BufRef reader) : base(ProtocolMessageType.DestroySession) { SessionId = reader.ReadFlip16(); }