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()); }
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)); }