OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ | 5 #ifndef SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ |
6 #define SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ | 6 #define SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ |
7 | 7 |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
| 10 |
8 #include "sandbox/win/src/crosscall_params.h" | 11 #include "sandbox/win/src/crosscall_params.h" |
9 #include "sandbox/win/src/sandbox.h" | 12 #include "sandbox/win/src/sandbox.h" |
10 | 13 |
11 // IPC transport implementation that uses shared memory. | 14 // IPC transport implementation that uses shared memory. |
12 // This is the client side | 15 // This is the client side |
13 // | 16 // |
14 // The shared memory is divided on blocks called channels, and potentially | 17 // The shared memory is divided on blocks called channels, and potentially |
15 // it can perform as many concurrent IPC calls as channels. The IPC over | 18 // it can perform as many concurrent IPC calls as channels. The IPC over |
16 // each channel is strictly synchronous for the client. | 19 // each channel is strictly synchronous for the client. |
17 // | 20 // |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 // points to be beginning of the channel buffer, where data goes | 77 // points to be beginning of the channel buffer, where data goes |
75 size_t channel_base; | 78 size_t channel_base; |
76 // maintains the state from the ChannelState enumeration | 79 // maintains the state from the ChannelState enumeration |
77 volatile LONG state; | 80 volatile LONG state; |
78 // the ping event is signaled by the client when the IPC data is ready on | 81 // the ping event is signaled by the client when the IPC data is ready on |
79 // the buffer | 82 // the buffer |
80 HANDLE ping_event; | 83 HANDLE ping_event; |
81 // the client waits on the pong event for the IPC answer back | 84 // the client waits on the pong event for the IPC answer back |
82 HANDLE pong_event; | 85 HANDLE pong_event; |
83 // the IPC unique identifier | 86 // the IPC unique identifier |
84 uint32 ipc_tag; | 87 uint32_t ipc_tag; |
85 }; | 88 }; |
86 | 89 |
87 struct IPCControl { | 90 struct IPCControl { |
88 // total number of channels available, some might be busy at a given time | 91 // total number of channels available, some might be busy at a given time |
89 size_t channels_count; | 92 size_t channels_count; |
90 // handle to a shared mutex to detect when the server is dead | 93 // handle to a shared mutex to detect when the server is dead |
91 HANDLE server_alive; | 94 HANDLE server_alive; |
92 // array of channel control structures | 95 // array of channel control structures |
93 ChannelControl channels[1]; | 96 ChannelControl channels[1]; |
94 }; | 97 }; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 // Return the channel index given the address of the buffer. | 130 // Return the channel index given the address of the buffer. |
128 size_t ChannelIndexFromBuffer(const void* buffer); | 131 size_t ChannelIndexFromBuffer(const void* buffer); |
129 IPCControl* control_; | 132 IPCControl* control_; |
130 // point to the first channel base | 133 // point to the first channel base |
131 char* first_base_; | 134 char* first_base_; |
132 }; | 135 }; |
133 | 136 |
134 } // namespace sandbox | 137 } // namespace sandbox |
135 | 138 |
136 #endif // SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ | 139 #endif // SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__ |
OLD | NEW |