Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1344)

Unified Diff: mojo/public/rust/src/system/message_pipe.rs

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/rust/src/system/handle.rs ('k') | mojo/public/rust/src/system/mod.rs » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/rust/src/system/message_pipe.rs
diff --git a/mojo/public/rust/src/system/message_pipe.rs b/mojo/public/rust/src/system/message_pipe.rs
deleted file mode 100644
index cc7633afb9161cdf01dad877daac65ac48ff13bc..0000000000000000000000000000000000000000
--- a/mojo/public/rust/src/system/message_pipe.rs
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright 2016 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.
-
-use std::mem;
-use std::vec;
-use std::ptr;
-
-use system::ffi;
-use system::handle;
-use system::handle::{CastHandle, Handle};
-// This full import is intentional; nearly every type in mojo_types needs to be used.
-use system::mojo_types::*;
-
-#[repr(u32)]
-/// Create flags for message pipes
-pub enum Create {
- None = 0,
-}
-
-#[repr(u32)]
-/// Write flags for message pipes
-pub enum Write {
- None = 0,
-}
-
-#[repr(u32)]
-/// Read flags for message pipes
-pub enum Read {
- None = 0,
-
- /// If the message is unable to be
- /// read for whatever reason, dequeue
- /// it anyway
- MayDiscard = 1 << 0,
-}
-
-/// Creates a message pipe in Mojo and gives back two
-/// MessageEndpoints which represent the endpoints of the
-/// message pipe
-pub fn create(flags: CreateFlags) -> Result<(MessageEndpoint, MessageEndpoint), MojoResult> {
- let mut handle0: MojoHandle = 0;
- let mut handle1: MojoHandle = 0;
- let opts = ffi::MojoCreateMessagePipeOptions {
- struct_size: mem::size_of::<ffi::MojoCreateMessagePipeOptions>() as u32,
- flags: flags,
- _align: [],
- };
- let raw_opts = &opts as *const ffi::MojoCreateMessagePipeOptions;
- let r = MojoResult::from_code(unsafe {
- ffi::MojoCreateMessagePipe(raw_opts,
- &mut handle0 as *mut MojoHandle,
- &mut handle1 as *mut MojoHandle)
- });
- if r != MojoResult::Okay {
- Err(r)
- } else {
- Ok((MessageEndpoint { handle: unsafe { handle::acquire(handle0) } },
- MessageEndpoint { handle: unsafe { handle::acquire(handle1) } }))
- }
-}
-
-/// Represents the one endpoint of a message pipe.
-/// This data structure wraps a handle and acts
-/// effectively as a typed handle.
-pub struct MessageEndpoint {
- handle: handle::UntypedHandle,
-}
-
-impl MessageEndpoint {
- /// Read the next message from the endpoint. Messages in Mojo
- /// are some set of bytes plus a bunch of handles, so we
- /// return both a vector of bytes and a vector of untyped handles.
- ///
- /// Because the handles are untyped, it is up to the user of this
- /// library to know what type the handle actually is and to use
- /// from_untyped in order to convert the handle to the correct type.
- /// This is abstracted away, however, when using the Mojo bindings
- /// generator where you may specify your interface in Mojom.
- ///
- /// If an empty message (that is, it has neither data nor handles)
- /// is received, it will show up as an Err() containing MojoResult::Okay.
- pub fn read(&self,
- flags: ReadFlags)
- -> Result<(vec::Vec<u8>, vec::Vec<handle::UntypedHandle>), MojoResult> {
- let mut num_bytes: u32 = 0;
- let mut num_handles: u32 = 0;
- let result_prelim = MojoResult::from_code(unsafe {
- ffi::MojoReadMessage(self.handle.get_native_handle(),
- ptr::null_mut(),
- &mut num_bytes as *mut u32,
- ptr::null_mut(),
- &mut num_handles as *mut u32,
- flags)
- });
- if result_prelim != MojoResult::ResourceExhausted {
- return Err(result_prelim);
- }
- let mut buf: vec::Vec<u8> = vec::Vec::with_capacity(num_bytes as usize);
- let mut raw_handles: vec::Vec<MojoHandle> = vec::Vec::with_capacity(num_handles as usize);
- let buf_ptr;
- if num_bytes == 0 {
- buf_ptr = ptr::null_mut();
- } else {
- buf_ptr = buf.as_mut_ptr() as *mut ffi::c_void;
- }
- let raw_handles_ptr;
- if num_handles == 0 {
- raw_handles_ptr = ptr::null_mut();
- } else {
- raw_handles_ptr = raw_handles.as_mut_ptr();
- }
- let r = MojoResult::from_code(unsafe {
- ffi::MojoReadMessage(self.handle.get_native_handle(),
- buf_ptr,
- &mut num_bytes as *mut u32,
- raw_handles_ptr,
- &mut num_handles as *mut u32,
- flags)
- });
- unsafe {
- buf.set_len(num_bytes as usize);
- raw_handles.set_len(num_handles as usize);
- }
- let mut handles: vec::Vec<handle::UntypedHandle> =
- vec::Vec::with_capacity(num_handles as usize);
- for raw_handle in raw_handles.iter() {
- handles.push(unsafe { handle::acquire(*raw_handle) });
- }
- if r != MojoResult::Okay {
- Err(r)
- } else {
- Ok((buf, handles))
- }
- }
-
- /// Write a message to the endpoint. Messages in Mojo
- /// are some set of bytes plus a bunch of handles, so we
- /// return both a vector of bytes and a vector of untyped handles.
- ///
- /// Because the handles are untyped, it is up to the user of this
- /// library to know what type the handle actually is and to use
- /// from_untyped in order to convert the handle to the correct type.
- /// This is abstracted away, however, when using the Mojo bindings
- /// generator where you may specify your interface in Mojom.
- ///
- /// Additionally, the handles passed in are consumed. This is because
- /// Mojo handles operate on move semantics much like Rust data types.
- /// When a handle is sent through a message pipe it is invalidated and
- /// may not even be represented by the same integer on the other side,
- /// so care must be taken to design your application with this in mind.
- pub fn write(&self,
- bytes: &[u8],
- mut handles: vec::Vec<handle::UntypedHandle>,
- flags: WriteFlags)
- -> MojoResult {
- let bytes_ptr;
- if bytes.len() == 0 {
- bytes_ptr = ptr::null();
- } else {
- bytes_ptr = bytes.as_ptr() as *const ffi::c_void;
- }
- let mut raw_handles: vec::Vec<MojoHandle> = vec::Vec::with_capacity(handles.len());
- for handle in handles.iter_mut() {
- unsafe {
- raw_handles.push(handle.get_native_handle());
- handle.invalidate();
- }
- }
- let raw_handles_ptr;
- if raw_handles.len() == 0 {
- raw_handles_ptr = ptr::null();
- } else {
- raw_handles_ptr = raw_handles.as_ptr();
- }
- return MojoResult::from_code(unsafe {
- ffi::MojoWriteMessage(self.handle.get_native_handle(),
- bytes_ptr,
- bytes.len() as u32,
- raw_handles_ptr,
- raw_handles.len() as u32,
- flags)
- });
- }
-}
-
-impl CastHandle for MessageEndpoint {
- /// Generates a MessageEndpoint from an untyped handle wrapper
- /// See mojo::system::handle for information on untyped vs. typed
- unsafe fn from_untyped(handle: handle::UntypedHandle) -> Self {
- MessageEndpoint { handle: handle }
- }
-
- /// Consumes this object and produces a plain handle wrapper
- /// See mojo::system::handle for information on untyped vs. typed
- fn as_untyped(self) -> handle::UntypedHandle {
- self.handle
- }
-}
-
-impl Handle for MessageEndpoint {
- /// Returns the native handle wrapped by this structure.
- ///
- /// See mojo::system::handle for information on handle wrappers
- fn get_native_handle(&self) -> MojoHandle {
- self.handle.get_native_handle()
- }
-}
« no previous file with comments | « mojo/public/rust/src/system/handle.rs ('k') | mojo/public/rust/src/system/mod.rs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698