| Index: remoting/protocol/message_reader.cc
|
| diff --git a/remoting/protocol/message_reader.cc b/remoting/protocol/message_reader.cc
|
| index 75b14f2344067cc81c33e76c53903c0928fbf61b..7b818ee7da90a0e61059cbf92aa5a59d2f67243e 100644
|
| --- a/remoting/protocol/message_reader.cc
|
| +++ b/remoting/protocol/message_reader.cc
|
| @@ -24,23 +24,18 @@ MessageReader::MessageReader()
|
| }
|
|
|
| MessageReader::~MessageReader() {
|
| - // Destroy MessageReaderPrivate if it was created.
|
| - if (destruction_callback_.get())
|
| - destruction_callback_->Run();
|
| }
|
|
|
| -void MessageReader::Close() {
|
| - closed_ = true;
|
| -}
|
| -
|
| -void MessageReader::Init(net::Socket* socket) {
|
| +void MessageReader::Init(net::Socket* socket,
|
| + MessageReceivedCallback* callback) {
|
| + message_received_callback_.reset(callback);
|
| DCHECK(socket);
|
| socket_ = socket;
|
| DoRead();
|
| }
|
|
|
| void MessageReader::DoRead() {
|
| - while (true) {
|
| + while (!closed_) {
|
| read_buffer_ = new net::IOBuffer(kReadBufferSize);
|
| int result = socket_->Read(
|
| read_buffer_, kReadBufferSize, &read_callback_);
|
| @@ -59,10 +54,25 @@ void MessageReader::OnRead(int result) {
|
|
|
| void MessageReader::HandleReadResult(int result) {
|
| if (result > 0) {
|
| - data_received_callback_->Run(read_buffer_, result);
|
| + OnDataReceived(read_buffer_, result);
|
| } else {
|
| - if (result != net::ERR_IO_PENDING)
|
| + if (result == net::ERR_CONNECTION_CLOSED) {
|
| + closed_ = true;
|
| + } else if (result != net::ERR_IO_PENDING) {
|
| LOG(ERROR) << "Read() returned error " << result;
|
| + }
|
| + }
|
| +}
|
| +
|
| +void MessageReader::OnDataReceived(net::IOBuffer* data, int data_size) {
|
| + message_decoder_.AddData(data, data_size);
|
| +
|
| + while (true) {
|
| + CompoundBuffer buffer;
|
| + if (!message_decoder_.GetNextMessage(&buffer))
|
| + break;
|
| +
|
| + message_received_callback_->Run(&buffer);
|
| }
|
| }
|
|
|
|
|