| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef IPC_IPC_CHANNEL_READER_H_ | 5 #ifndef IPC_IPC_CHANNEL_READER_H_ |
| 6 #define IPC_IPC_CHANNEL_READER_H_ | 6 #define IPC_IPC_CHANNEL_READER_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "ipc/ipc_channel.h" | 9 #include "ipc/ipc_channel.h" |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 // succeeded, although there may not have been any messages processed. | 35 // succeeded, although there may not have been any messages processed. |
| 36 bool ProcessIncomingMessages(); | 36 bool ProcessIncomingMessages(); |
| 37 | 37 |
| 38 // Handles asynchronously read data. | 38 // Handles asynchronously read data. |
| 39 // | 39 // |
| 40 // Optionally call this after returning READ_PENDING from ReadData to | 40 // Optionally call this after returning READ_PENDING from ReadData to |
| 41 // indicate that buffer was filled with the given number of bytes of | 41 // indicate that buffer was filled with the given number of bytes of |
| 42 // data. See ReadData for more. | 42 // data. See ReadData for more. |
| 43 bool AsyncReadComplete(int bytes_read); | 43 bool AsyncReadComplete(int bytes_read); |
| 44 | 44 |
| 45 // Returns true if the given message is the "hello" message sent on channel | 45 // Returns true if the given message is internal to the IPC implementation, |
| 46 // set-up. | 46 // like the "hello" message sent on channel set-up. |
| 47 bool IsInternalMessage(const Message& m) const; |
| 48 |
| 49 // Returns true if the given message is an Hello message |
| 50 // sent on channel set-up. |
| 47 bool IsHelloMessage(const Message& m) const; | 51 bool IsHelloMessage(const Message& m) const; |
| 48 | 52 |
| 49 protected: | 53 protected: |
| 50 enum ReadState { READ_SUCCEEDED, READ_FAILED, READ_PENDING }; | 54 enum ReadState { READ_SUCCEEDED, READ_FAILED, READ_PENDING }; |
| 51 | 55 |
| 52 Listener* listener() const { return listener_; } | 56 Listener* listener() const { return listener_; } |
| 53 | 57 |
| 54 // Populates the given buffer with data from the pipe. | 58 // Populates the given buffer with data from the pipe. |
| 55 // | 59 // |
| 56 // Returns the state of the read. On READ_SUCCESS, the number of bytes | 60 // Returns the state of the read. On READ_SUCCESS, the number of bytes |
| (...skipping 12 matching lines...) Expand all Loading... |
| 69 // on success. False means a fatal channel error. | 73 // on success. False means a fatal channel error. |
| 70 // | 74 // |
| 71 // This will read from the input_fds_ and read more handles from the FD | 75 // This will read from the input_fds_ and read more handles from the FD |
| 72 // pipe if necessary. | 76 // pipe if necessary. |
| 73 virtual bool WillDispatchInputMessage(Message* msg) = 0; | 77 virtual bool WillDispatchInputMessage(Message* msg) = 0; |
| 74 | 78 |
| 75 // Performs post-dispatch checks. Called when all input buffers are empty, | 79 // Performs post-dispatch checks. Called when all input buffers are empty, |
| 76 // though there could be more data ready to be read from the OS. | 80 // though there could be more data ready to be read from the OS. |
| 77 virtual bool DidEmptyInputBuffers() = 0; | 81 virtual bool DidEmptyInputBuffers() = 0; |
| 78 | 82 |
| 79 // Handles the first message sent over the pipe which contains setup info. | 83 // Handles internal messages, like the hello message sent on channel startup. |
| 80 virtual void HandleHelloMessage(const Message& msg) = 0; | 84 virtual void HandleInternalMessage(const Message& msg) = 0; |
| 81 | 85 |
| 82 private: | 86 private: |
| 83 // Takes the given data received from the IPC channel and dispatches any | 87 // Takes the given data received from the IPC channel and dispatches any |
| 84 // fully completed messages. | 88 // fully completed messages. |
| 85 // | 89 // |
| 86 // Returns true on success. False means channel error. | 90 // Returns true on success. False means channel error. |
| 87 bool DispatchInputData(const char* input_data, int input_data_len); | 91 bool DispatchInputData(const char* input_data, int input_data_len); |
| 88 | 92 |
| 89 Listener* listener_; | 93 Listener* listener_; |
| 90 | 94 |
| 91 // We read from the pipe into this buffer. Managed by DispatchInputData, do | 95 // We read from the pipe into this buffer. Managed by DispatchInputData, do |
| 92 // not access directly outside that function. | 96 // not access directly outside that function. |
| 93 char input_buf_[Channel::kReadBufferSize]; | 97 char input_buf_[Channel::kReadBufferSize]; |
| 94 | 98 |
| 95 // Large messages that span multiple pipe buffers, get built-up using | 99 // Large messages that span multiple pipe buffers, get built-up using |
| 96 // this buffer. | 100 // this buffer. |
| 97 std::string input_overflow_buf_; | 101 std::string input_overflow_buf_; |
| 98 | 102 |
| 99 DISALLOW_COPY_AND_ASSIGN(ChannelReader); | 103 DISALLOW_COPY_AND_ASSIGN(ChannelReader); |
| 100 }; | 104 }; |
| 101 | 105 |
| 102 } // namespace internal | 106 } // namespace internal |
| 103 } // namespace IPC | 107 } // namespace IPC |
| 104 | 108 |
| 105 #endif // IPC_IPC_CHANNEL_READER_H_ | 109 #endif // IPC_IPC_CHANNEL_READER_H_ |
| OLD | NEW |