1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef REMOTING_BASE_PROTOBUF_HTTP_STREAM_PARSER_H_
- #define REMOTING_BASE_PROTOBUF_HTTP_STREAM_PARSER_H_
- #include "base/callback.h"
- #include "base/memory/scoped_refptr.h"
- #include "base/memory/weak_ptr.h"
- #include "base/strings/string_piece_forward.h"
- namespace google {
- namespace protobuf {
- namespace io {
- class CodedInputStream;
- } // namespace io
- } // namespace protobuf
- } // namespace google
- namespace net {
- class GrowableIOBuffer;
- } // namespace net
- namespace remoting {
- class ProtobufHttpStatus;
- // Class to parse incoming stream data wrapped with a StreamBody protobuf
- // message.
- class ProtobufHttpStreamParser final {
- public:
- using MessageCallback = base::RepeatingCallback<void(const std::string&)>;
- using StreamClosedCallback =
- base::OnceCallback<void(const ProtobufHttpStatus&)>;
- ProtobufHttpStreamParser(const MessageCallback& message_callback,
- StreamClosedCallback stream_closed_callback);
- ~ProtobufHttpStreamParser();
- ProtobufHttpStreamParser(const ProtobufHttpStreamParser&) = delete;
- ProtobufHttpStreamParser& operator=(const ProtobufHttpStreamParser&) = delete;
- // Appends the stream data (which should be the partial or full serialized
- // StreamBody) and runs callbacks if there is something decodable.
- void Append(base::StringPiece data);
- // Indicates whether the parser has pending data that needs more input to
- // complete a StreamBody message.
- bool HasPendingData() const;
- private:
- void ParseStreamIfAvailable();
- bool ParseOneField(google::protobuf::io::CodedInputStream* input_stream);
- MessageCallback message_callback_;
- StreamClosedCallback stream_closed_callback_;
- scoped_refptr<net::GrowableIOBuffer> read_buffer_;
- base::WeakPtrFactory<ProtobufHttpStreamParser> weak_factory_{this};
- };
- } // namespace remoting
- #endif // REMOTING_BASE_PROTOBUF_HTTP_STREAM_PARSER_H_
|