| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 BASE_MACH_IPC_MAC_H_ | 5 #ifndef BASE_MACH_IPC_MAC_H_ |
| 6 #define BASE_MACH_IPC_MAC_H_ | 6 #define BASE_MACH_IPC_MAC_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <mach/mach.h> | 9 #include <mach/mach.h> |
| 10 #include <mach/message.h> | 10 #include <mach/message.h> |
| 11 #include <servers/bootstrap.h> | 11 #include <servers/bootstrap.h> |
| 12 #include <sys/types.h> | 12 #include <sys/types.h> |
| 13 | 13 |
| 14 #include <CoreServices/CoreServices.h> | 14 #include <CoreServices/CoreServices.h> |
| 15 | 15 |
| 16 #include "base/base_api.h" | 16 #include "base/base_export.h" |
| 17 #include "base/basictypes.h" | 17 #include "base/basictypes.h" |
| 18 | 18 |
| 19 //============================================================================== | 19 //============================================================================== |
| 20 // DISCUSSION: | 20 // DISCUSSION: |
| 21 // | 21 // |
| 22 // The three main classes of interest are | 22 // The three main classes of interest are |
| 23 // | 23 // |
| 24 // MachMessage: a wrapper for a Mach message of the following form | 24 // MachMessage: a wrapper for a Mach message of the following form |
| 25 // mach_msg_header_t | 25 // mach_msg_header_t |
| 26 // mach_msg_body_t | 26 // mach_msg_body_t |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 // or it can manage storage internally. | 132 // or it can manage storage internally. |
| 133 // 1. If storage is allocated internally, the combined size of the descriptors | 133 // 1. If storage is allocated internally, the combined size of the descriptors |
| 134 // plus data must be less than 1024. But as a benefit no memory allocation is | 134 // plus data must be less than 1024. But as a benefit no memory allocation is |
| 135 // necessary. | 135 // necessary. |
| 136 // 2. For external storage, a buffer of at least EmptyMessageSize() must be | 136 // 2. For external storage, a buffer of at least EmptyMessageSize() must be |
| 137 // provided. | 137 // provided. |
| 138 // | 138 // |
| 139 // A MachMessage object is used by ReceivePort::WaitForMessage | 139 // A MachMessage object is used by ReceivePort::WaitForMessage |
| 140 // and MachPortSender::SendMessage | 140 // and MachPortSender::SendMessage |
| 141 // | 141 // |
| 142 class BASE_API MachMessage { | 142 class BASE_EXPORT MachMessage { |
| 143 public: | 143 public: |
| 144 static const size_t kEmptyMessageSize; | 144 static const size_t kEmptyMessageSize; |
| 145 | 145 |
| 146 virtual ~MachMessage(); | 146 virtual ~MachMessage(); |
| 147 | 147 |
| 148 // The receiver of the message can retrieve the raw data this way | 148 // The receiver of the message can retrieve the raw data this way |
| 149 u_int8_t *GetData() { | 149 u_int8_t *GetData() { |
| 150 return GetDataLength() > 0 ? GetDataPacket()->data : NULL; | 150 return GetDataLength() > 0 ? GetDataPacket()->data : NULL; |
| 151 } | 151 } |
| 152 | 152 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 public: | 238 public: |
| 239 MachReceiveMessage() : MachMessage() {} | 239 MachReceiveMessage() : MachMessage() {} |
| 240 MachReceiveMessage(void *storage, size_t storage_length) | 240 MachReceiveMessage(void *storage, size_t storage_length) |
| 241 : MachMessage(storage, storage_length) {} | 241 : MachMessage(storage, storage_length) {} |
| 242 | 242 |
| 243 private: | 243 private: |
| 244 DISALLOW_COPY_AND_ASSIGN(MachReceiveMessage); | 244 DISALLOW_COPY_AND_ASSIGN(MachReceiveMessage); |
| 245 }; | 245 }; |
| 246 | 246 |
| 247 //============================================================================== | 247 //============================================================================== |
| 248 class BASE_API MachSendMessage : public MachMessage { | 248 class BASE_EXPORT MachSendMessage : public MachMessage { |
| 249 public: | 249 public: |
| 250 explicit MachSendMessage(int32_t message_id); | 250 explicit MachSendMessage(int32_t message_id); |
| 251 MachSendMessage(void *storage, size_t storage_length, int32_t message_id); | 251 MachSendMessage(void *storage, size_t storage_length, int32_t message_id); |
| 252 | 252 |
| 253 private: | 253 private: |
| 254 void Initialize(int32_t message_id); | 254 void Initialize(int32_t message_id); |
| 255 | 255 |
| 256 DISALLOW_COPY_AND_ASSIGN(MachSendMessage); | 256 DISALLOW_COPY_AND_ASSIGN(MachSendMessage); |
| 257 }; | 257 }; |
| 258 | 258 |
| 259 //============================================================================== | 259 //============================================================================== |
| 260 // Represents a Mach port for which we have receive rights | 260 // Represents a Mach port for which we have receive rights |
| 261 class BASE_API ReceivePort { | 261 class BASE_EXPORT ReceivePort { |
| 262 public: | 262 public: |
| 263 // Creates a new Mach port for receiving messages and registers a name for it | 263 // Creates a new Mach port for receiving messages and registers a name for it |
| 264 explicit ReceivePort(const char *receive_port_name); | 264 explicit ReceivePort(const char *receive_port_name); |
| 265 | 265 |
| 266 // Given an already existing Mach port, use it. We take ownership of the | 266 // Given an already existing Mach port, use it. We take ownership of the |
| 267 // port and deallocate it in our destructor. | 267 // port and deallocate it in our destructor. |
| 268 explicit ReceivePort(mach_port_t receive_port); | 268 explicit ReceivePort(mach_port_t receive_port); |
| 269 | 269 |
| 270 // Create a new Mach port for receiving messages | 270 // Create a new Mach port for receiving messages |
| 271 ReceivePort(); | 271 ReceivePort(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 282 | 282 |
| 283 private: | 283 private: |
| 284 mach_port_t port_; | 284 mach_port_t port_; |
| 285 kern_return_t init_result_; | 285 kern_return_t init_result_; |
| 286 | 286 |
| 287 DISALLOW_COPY_AND_ASSIGN(ReceivePort); | 287 DISALLOW_COPY_AND_ASSIGN(ReceivePort); |
| 288 }; | 288 }; |
| 289 | 289 |
| 290 //============================================================================== | 290 //============================================================================== |
| 291 // Represents a Mach port for which we have send rights | 291 // Represents a Mach port for which we have send rights |
| 292 class BASE_API MachPortSender { | 292 class BASE_EXPORT MachPortSender { |
| 293 public: | 293 public: |
| 294 // get a port with send rights corresponding to a named registered service | 294 // get a port with send rights corresponding to a named registered service |
| 295 explicit MachPortSender(const char *receive_port_name); | 295 explicit MachPortSender(const char *receive_port_name); |
| 296 | 296 |
| 297 | 297 |
| 298 // Given an already existing Mach port, use it. Does not take ownership of | 298 // Given an already existing Mach port, use it. Does not take ownership of |
| 299 // |send_port|. | 299 // |send_port|. |
| 300 explicit MachPortSender(mach_port_t send_port); | 300 explicit MachPortSender(mach_port_t send_port); |
| 301 | 301 |
| 302 kern_return_t SendMessage(MachSendMessage &message, | 302 kern_return_t SendMessage(MachSendMessage &message, |
| 303 mach_msg_timeout_t timeout); | 303 mach_msg_timeout_t timeout); |
| 304 | 304 |
| 305 private: | 305 private: |
| 306 mach_port_t send_port_; | 306 mach_port_t send_port_; |
| 307 kern_return_t init_result_; | 307 kern_return_t init_result_; |
| 308 | 308 |
| 309 DISALLOW_COPY_AND_ASSIGN(MachPortSender); | 309 DISALLOW_COPY_AND_ASSIGN(MachPortSender); |
| 310 }; | 310 }; |
| 311 | 311 |
| 312 } // namespace base | 312 } // namespace base |
| 313 | 313 |
| 314 #endif // BASE_MACH_IPC_MAC_H_ | 314 #endif // BASE_MACH_IPC_MAC_H_ |
| OLD | NEW |