Ejemplo n.º 1
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");
            }
        }
Ejemplo n.º 2
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
 }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        public SSUDataMessage(BufRef reader, DataDefragmenter fragments)
        {
            var dataflags = (DataMessageFlags)reader.Read8();

#if LOG_ALL_TRANSPORT
            Logging.LogTransport("SSU DataMessage rececived flag: " + dataflags.ToString());
#endif
            var explicitacks  = (dataflags & DataMessageFlags.ExplicitAcks) != 0;
            var acksbitfields = (dataflags & DataMessageFlags.BitfieldAcks) != 0;
            ECN = (dataflags & DataMessageFlags.ECN) != 0;
            var extdata = (dataflags & DataMessageFlags.ExtendedDataIncluded) != 0;
            if (explicitacks)
            {
                ExplicitAcks = new List <uint>();
                var acks = reader.Read8();
                for (int i = 0; i < acks; ++i)
                {
                    ExplicitAcks.Add(reader.Read32());
                }
            }
            if (acksbitfields)
            {
                var bitfields = reader.Read8();
                AckBitfields = new List <KeyValuePair <uint, List <byte> > >(bitfields);
                for (int i = 0; i < bitfields; ++i)
                {
                    var  msgid = reader.Read32();
                    var  bfs   = new List <byte>(10);
                    byte bf;
                    while (true)
                    {
                        bf = reader.Read8();
                        bfs.Add((byte)(bf & 0x7f));
                        if ((bf & 0x80) == 0)
                        {
                            break;
                        }
                    }
                    AckBitfields.Add(new KeyValuePair <uint, List <byte> >(msgid, bfs));
                }
            }
            if (extdata)
            {
                var datasize = reader.Read8();
                ExtData = reader.ReadBufLen(datasize);
            }

            var fragcount = reader.Read8();
            for (int i = 0; i < fragcount; ++i)
            {
                var frag       = new DataFragment(reader);
                var newmessage = fragments.Add(frag);

                if (newmessage != null)
                {
                    if (NewMessages == null)
                    {
                        NewMessages = new List <RebuildI2NPMessage>();
                    }
                    NewMessages.Add(newmessage);
                }
            }
        }
Ejemplo n.º 5
0
 public I2PTunnelId(BufRef buf)
 {
     Id = buf.Read32();
 }