Exemple #1
0
        public TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry)
        {
            int    size          = (int)CodedInputStream.ReadRawVarint32(input);
            Stream limitedStream = new LimitedInputStream(input, size);

            return(MergeFrom(limitedStream, extensionRegistry));
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        /// <exception cref="IOException"></exception>
        public DeviceGroup?Read()
        {
            int detailsLength = ReadRawVarint32();

            if (detailsLength == -1)
            {
                return(null);
            }
            byte[] detailsSerialized = new byte[detailsLength];
            Util.ReadFully(inputStream, detailsSerialized);

            GroupDetails details = GroupDetails.Parser.ParseFrom(detailsSerialized);

            if (!details.HasId)
            {
                throw new IOException("ID missing on group record!");
            }

            byte[] id   = details.Id.ToByteArray();
            string?name = details.HasName ? details.Name : null;
            List <GroupDetails.Types.Member> members = details.Members.ToList();
            SignalServiceAttachmentStream?   avatar  = null;
            bool   active          = details.Active;
            uint?  expirationTimer = null;
            string?color           = details.HasColor ? details.Color : null;
            bool   blocked         = details.Blocked;

            if (details.Avatar != null)
            {
                long   avatarLength      = details.Avatar.Length;
                Stream avatarStream      = new LimitedInputStream(inputStream, avatarLength);
                string avatarContentType = details.Avatar.ContentType;
                avatar = new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null, false, null);
            }

            if (details.HasExpireTimer && details.ExpireTimer > 0)
            {
                expirationTimer = details.ExpireTimer;
            }

            List <SignalServiceAddress> addressMembers = new List <SignalServiceAddress>(members.Count);

            foreach (GroupDetails.Types.Member member in members)
            {
                addressMembers.Add(new SignalServiceAddress(UuidUtil.ParseOrNull(member.Uuid), member.E164));
            }

            return(new DeviceGroup(id, name, addressMembers, avatar, active, expirationTimer, color, blocked));
        }
        public void TestReadAhead()
        {
            foreach (var s in new[] { "foo\nx", "foo\r\nx" })
            {
                _outWriter("Testing:");
                _outWriter(s);
                using (var lis = new LimitedInputStream(s, 4))
                {
                    var st = new StreamTokenizer(lis);
                    st.EolIsSignificant(true);

                    int tt = st.NextToken();
                    Assert.Equal(StreamTokenizer.TT_WORD, tt);
                    Assert.Equal("foo", st.sval);

                    tt = st.NextToken();
                    Assert.Equal(StreamTokenizer.TT_EOL, tt);
                }
            }
        }
        public DeviceGroup Read()
        {
            int detailsLength = ReadRawVarint32();

            if (detailsLength == -1)
            {
                return(null);
            }
            byte[] detailsSerialized = new byte[detailsLength];
            Util.ReadFully(InputStream, detailsSerialized);

            GroupDetails details = GroupDetails.Parser.ParseFrom(detailsSerialized);

            byte[]        id      = details.Id.ToByteArray();
            string        name    = details.Name;
            List <string> members = new List <string>();

            members.AddRange(details.Members);
            SignalServiceAttachmentStream avatar = null;
            bool   active          = details.Active;
            uint?  expirationTimer = null;
            string?color           = details.ColorOneofCase == GroupDetails.ColorOneofOneofCase.Color ? details.Color : null;
            var    blocked         = details.Blocked;

            if (details.AvatarOneofCase == GroupDetails.AvatarOneofOneofCase.Avatar)
            {
                long   avatarLength      = details.Avatar.Length;
                Stream avatarStream      = new LimitedInputStream(InputStream, avatarLength);
                string avatarContentType = details.Avatar.ContentType;
                avatar = new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null, false, null);
            }

            if (details.ExpireTimerOneofCase == GroupDetails.ExpireTimerOneofOneofCase.ExpireTimer)
            {
                expirationTimer = details.ExpireTimer;
            }

            return(new DeviceGroup(id, name, members, avatar, active, expirationTimer, color, blocked));
        }
        /// <summary>
        /// Creates a bitmap from encoded JPEG bytes.
        /// Supports a partial JPEG image.
        /// </summary>
        /// <param name="encodedImage">
        /// The reference to the encoded image with the reference to the
        /// encoded bytes.
        /// </param>
        /// <param name="bitmapConfig">
        /// The <see cref="BitmapPixelFormat"/> used to create the decoded
        /// SoftwareBitmap.
        /// </param>
        /// <param name="length">
        /// The number of encoded bytes in the buffer.
        /// </param>
        /// <returns>The bitmap.</returns>
        /// <exception cref="OutOfMemoryException">
        /// If the Bitmap cannot be allocated.
        /// </exception>
        public Task <CloseableReference <SoftwareBitmap> > DecodeJPEGFromEncodedImageAsync(
            EncodedImage encodedImage, BitmapPixelFormat bitmapConfig, int length)
        {
            return(_executor.Execute(async() =>
            {
                bool isJpegComplete = encodedImage.IsCompleteAt(length);
                Stream jpegDataStream = encodedImage.GetInputStream();

                // At this point the Stream from the encoded image should not
                // be null since in the pipeline,this comes from a call stack where
                // this was checked before. Also this method needs the Stream to
                // decode the image so this can't be null.
                Preconditions.CheckNotNull(jpegDataStream);
                if (encodedImage.Size > length)
                {
                    jpegDataStream = new LimitedInputStream(jpegDataStream, length);
                }

                if (!isJpegComplete)
                {
                    jpegDataStream = new TailAppendingInputStream(jpegDataStream, EOI_TAIL);
                }

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(
                    jpegDataStream.AsRandomAccessStream())
                                        .AsTask()
                                        .ConfigureAwait(false);

                SoftwareBitmap bitmap = await decoder
                                        .GetSoftwareBitmapAsync(bitmapConfig, BitmapAlphaMode.Premultiplied)
                                        .AsTask()
                                        .ConfigureAwait(false);

                return CloseableReference <SoftwareBitmap> .of(bitmap);
            })
                   .Unwrap());
        }
Exemple #6
0
        public DeviceContact Read()// throws IOException
        {
            int detailsLength = ReadRawVarint32();

            if (detailsLength == -1)
            {
                return(null);
            }
            byte[] detailsSerialized = new byte[(int)detailsLength];
            Util.ReadFully(InputStream, detailsSerialized);

            var    details = ContactDetails.Parser.ParseFrom(detailsSerialized);
            string number  = details.Number;
            string name    = details.Name;
            SignalServiceAttachmentStream avatar = null;
            string          color    = details.ColorOneofCase == ContactDetails.ColorOneofOneofCase.Color ? details.Color : null;
            VerifiedMessage verified = null;

            byte[] profileKey  = null;
            bool   blocked     = false;
            uint?  expireTimer = null;

            if (details.AvatarOneofCase == ContactDetails.AvatarOneofOneofCase.Avatar)
            {
                long   avatarLength      = details.Avatar.Length;
                Stream avatarStream      = new LimitedInputStream(InputStream, avatarLength);
                String avatarContentType = details.Avatar.ContentType;
                avatar = new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null, false, null);
            }

            if (details.VerifiedOneofCase == ContactDetails.VerifiedOneofOneofCase.Verified)
            {
                string      destination = details.Verified.Destination;
                IdentityKey identityKey = new IdentityKey(details.Verified.IdentityKey.ToByteArray(), 0);

                VerifiedState state;
                switch (details.Verified.State)
                {
                case Verified.Types.State.Verified:
                    state = VerifiedState.Verified;
                    break;

                case Verified.Types.State.Unverified:
                    state = VerifiedState.Unverified;
                    break;

                case Verified.Types.State.Default:
                    state = VerifiedState.Default;
                    break;

                default:
                    throw new InvalidMessageException("Unknown state: " + details.Verified.State);
                }

                verified = new VerifiedMessage(destination, identityKey, state, Util.CurrentTimeMillis());
            }

            if (details.ProfileKeyOneofCase == ContactDetails.ProfileKeyOneofOneofCase.ProfileKey)
            {
                profileKey = details.ProfileKey.ToByteArray();
            }

            if (details.ExpireTimerOneofCase == ContactDetails.ExpireTimerOneofOneofCase.ExpireTimer && details.ExpireTimer > 0)
            {
                expireTimer = details.ExpireTimer;
            }

            return(new DeviceContact(number, name, avatar, color, verified, profileKey, blocked, expireTimer));
        }
        public DeviceContact?Read()
        {
            int detailsLength = ReadRawVarint32();

            if (detailsLength == -1)
            {
                return(null);
            }
            byte[] detailsSerialized = new byte[(int)detailsLength];
            Util.ReadFully(inputStream, detailsSerialized);

            var details = ContactDetails.Parser.ParseFrom(detailsSerialized);
            SignalServiceAddress address = new SignalServiceAddress(UuidUtil.ParseOrNull(details.Uuid), details.Number);
            string?name = details.Name;
            SignalServiceAttachmentStream?avatar = null;
            string?         color    = details.HasColor ? details.Color : null;
            VerifiedMessage?verified = null;

            byte[]? profileKey = null;
            bool blocked     = false;
            uint?expireTimer = null;

            if (details.Avatar != null)
            {
                long   avatarLength      = details.Avatar.Length;
                Stream avatarStream      = new LimitedInputStream(inputStream, avatarLength);
                string avatarContentType = details.Avatar.ContentType;
                avatar = new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null, false, null);
            }

            if (details.Verified != null)
            {
                try
                {
                    IdentityKey          identityKey = new IdentityKey(details.Verified.IdentityKey.ToByteArray(), 0);
                    SignalServiceAddress destination = new SignalServiceAddress(UuidUtil.ParseOrNull(details.Verified.DestinationUuid),
                                                                                details.Verified.Destination);

                    VerifiedState state;
                    switch (details.Verified.State)
                    {
                    case Verified.Types.State.Verified:
                        state = VerifiedState.Verified;
                        break;

                    case Verified.Types.State.Unverified:
                        state = VerifiedState.Unverified;
                        break;

                    case Verified.Types.State.Default:
                        state = VerifiedState.Default;
                        break;

                    default:
                        throw new InvalidMessageException("Unknown state: " + details.Verified.State);
                    }

                    verified = new VerifiedMessage(destination, identityKey, state, Util.CurrentTimeMillis());
                }
                catch (Exception ex) when(ex is InvalidKeyException || ex is InvalidMessageException)
                {
                    logger.LogWarning(new EventId(), ex, "");
                    verified = null;
                }
            }

            if (details.HasProfileKey)
            {
                profileKey = details.ProfileKey.ToByteArray();
            }

            if (details.HasExpireTimer && details.ExpireTimer > 0)
            {
                expireTimer = details.ExpireTimer;
            }

            return(new DeviceContact(address, name, avatar, color, verified, profileKey, blocked, expireTimer));
        }