public IDisposable Initialize(DatabaseSmugglerOptions options, SmugglerResult result, out long buildVersion) { _result = result; _returnBuffer = _context.GetManagedBuffer(out _buffer); _state = new JsonParserState(); _parser = new UnmanagedJsonParser(_context, _state, "file"); if (UnmanagedJsonParserHelper.Read(_peepingTomStream, _parser, _state, _buffer) == false) { UnmanagedJsonParserHelper.ThrowInvalidJson("Unexpected end of json.", _peepingTomStream, _parser); } if (_state.CurrentTokenType != JsonParserToken.StartObject) { UnmanagedJsonParserHelper.ThrowInvalidJson("Expected start object, but got " + _state.CurrentTokenType, _peepingTomStream, _parser); } buildVersion = ReadBuildVersion(); _buildVersionType = BuildVersion.Type(buildVersion); _readLegacyEtag = options.ReadLegacyEtag; return(new DisposableAction(() => { _parser.Dispose(); _returnBuffer.Dispose(); _returnWriteBuffer.Dispose(); })); }
public UnmanagedStreamBuffer(JsonOperationContext context, Stream stream) { _stream = stream; _sizeInBytes = 0; Used = 0; _returnBuffer = context.GetManagedBuffer(out _buffer); }
public AbstractBlittableJsonTextWriter(JsonOperationContext context, Stream stream) { _context = context; _stream = stream; _returnBuffer = context.GetManagedBuffer(out _pinnedBuffer); _buffer = _pinnedBuffer.Pointer; _parserAuxiliarMemory = context.GetMemory(32); }
public async Task InitializeAsync() { AssertNotSync(); try { _initialized = true; _state = new JsonParserState(); _parser = new UnmanagedJsonParser(_session.Context, _state, "stream contents"); _returnBuffer = _session.Context.GetManagedBuffer(out _buffer); if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer).ConfigureAwait(false) == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } if (_state.CurrentTokenType != JsonParserToken.StartObject) { UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } if (_isQueryStream) { HandleStreamQueryStats(_session.Context, _response, _parser, _state, _buffer, _streamQueryStatistics); } var property = UnmanagedJsonParserHelper.ReadString(_session.Context, _peepingTomStream, _parser, _state, _buffer); if (string.Equals(property, "Results") == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer).ConfigureAwait(false) == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } if (_state.CurrentTokenType != JsonParserToken.StartArray) { UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } } catch { Dispose(); throw; } }
public unsafe void ProcessAttachmentStream(DocumentsOperationContext context, BlittableJsonReaderObject data, ref DocumentItem.AttachmentStream attachment) { if (data.TryGet(nameof(AttachmentName.Hash), out LazyStringValue hash) == false || data.TryGet(nameof(AttachmentName.Size), out long size) == false || data.TryGet(nameof(DocumentItem.AttachmentStream.Tag), out LazyStringValue tag) == false) { throw new ArgumentException($"Data of attachment stream is not valid: {data}"); } if (_writeBuffer == null) { _returnWriteBuffer = _context.GetManagedBuffer(out _writeBuffer); } attachment.Data = data; attachment.Base64HashDispose = Slice.External(context.Allocator, hash, out attachment.Base64Hash); attachment.TagDispose = Slice.External(context.Allocator, tag, out attachment.Tag); while (size > 0) { var sizeToRead = (int)Math.Min(_writeBuffer.Length, size); var read = _parser.Copy(_writeBuffer.Pointer, sizeToRead); attachment.Stream.Write(_writeBuffer.Buffer.Array, _writeBuffer.Buffer.Offset, read.BytesRead); if (read.Done == false) { var read2 = _peepingTomStream.Read(_buffer.Buffer.Array, _buffer.Buffer.Offset, _buffer.Length); if (read2 == 0) { throw new EndOfStreamException("Stream ended without reaching end of stream content"); } _parser.SetBuffer(_buffer, 0, read2); } size -= read.BytesRead; } attachment.Stream.Flush(); }
public PeepingTomStream(Stream stream, JsonOperationContext context) { _stream = stream; _returnedBuffer = context.GetManagedBuffer(out _bufferWindow); }