Esempio n. 1
0
        public DeliveryStatusMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(12);
            SetBuffer(start, reader);
        }
Esempio n. 2
0
        public I2PString(BufRef buf)
        {
            var len = buf.Read8();

            Str = System.Text.Encoding.UTF8.GetString(buf.BaseArray, buf.BaseArrayOffset, len);
            buf.Seek(len);
        }
Esempio n. 3
0
        public DataMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek((int)reader.ReadFlip32());
            SetBuffer(start, reader);
        }
Esempio n. 4
0
        public TunnelGatewayMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(6 + reader.PeekFlip16(4));
            SetBuffer(start, reader);
        }
Esempio n. 5
0
        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");
                }
            }
        }
Esempio n. 6
0
        public TunnelDataMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(4 + DataLength);
            SetBuffer(start, reader);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        public GarlicMessage(BufRef reader)
        {
            var start = new BufRef(reader);
            var len   = (int)reader.PeekFlip32(0);

            reader.Seek(len + 4);
            SetBuffer(start, reader);
        }
Esempio n. 9
0
 public GarlicClove(BufRef reader)
 {
     Delivery   = GarlicCloveDelivery.CreateGarlicCloveDelivery(reader);
     Message    = I2NPMessage.ReadHeader16(reader).Message;
     CloveId    = reader.Read32();
     Expiration = new I2PDate(reader);
     reader.Seek(3);   // Cert
 }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
 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);
 }
Esempio n. 12
0
        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");
            }
        }
Esempio n. 13
0
 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();
 }
Esempio n. 14
0
        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;
            }
        }
Esempio n. 15
0
        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");
        }
Esempio n. 16
0
        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);
            }
        }
Esempio n. 17
0
 public I2PRawData(BufRef reader, int size)
 {
     Data = new byte[size];
     Array.Copy(reader.BaseArray, reader.BaseArrayOffset, Data, 0, size);
     reader.Seek(size);
 }