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

Unified Diff: mojo/services/network/net_adapters.cc

Issue 649783002: Add mojo <--> net IO adapters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
Index: mojo/services/network/net_adapters.cc
diff --git a/mojo/services/network/net_adapters.cc b/mojo/services/network/net_adapters.cc
index 63744ff0adb34eabec953123de2a4b9aed6b9eaa..380a15672839f76ae9c0038aab9ce42adc9dc20f 100644
--- a/mojo/services/network/net_adapters.cc
+++ b/mojo/services/network/net_adapters.cc
@@ -8,6 +8,104 @@
namespace mojo {
+namespace {
+
+const uint32_t kMaxReadSize = 64 * 1024;
+
+} // namespace
+
+NetToMojoPendingBuffer::NetToMojoPendingBuffer(
+ ScopedDataPipeProducerHandle handle,
+ void* buffer)
+ : handle_(handle.Pass()),
+ buffer_(buffer) {
+}
+
+NetToMojoPendingBuffer::~NetToMojoPendingBuffer() {
+ if (handle_.is_valid())
+ EndWriteDataRaw(handle_.get(), 0);
+}
+
+// static
+MojoResult NetToMojoPendingBuffer::BeginWrite(
+ ScopedDataPipeProducerHandle* handle,
+ scoped_refptr<NetToMojoPendingBuffer>* pending,
+ uint32_t* num_bytes) {
+ void* buf;
+ *num_bytes = 0;
+
+ MojoResult result = BeginWriteDataRaw(handle->get(), &buf, num_bytes,
+ MOJO_WRITE_DATA_FLAG_NONE);
+ if (result == MOJO_RESULT_OK) {
+ if (*num_bytes > kMaxReadSize)
+ *num_bytes = kMaxReadSize;
yzshen1 2014/10/10 21:18:59 It seems a little confusing why we use kMaxReadSiz
+ *pending = new NetToMojoPendingBuffer(handle->Pass(), buf);
+ }
+ return result;
+}
+
+ScopedDataPipeProducerHandle NetToMojoPendingBuffer::Complete(
+ uint32_t num_bytes) {
+ EndWriteDataRaw(handle_.get(), num_bytes);
+ buffer_ = NULL;
+ return handle_.Pass();
+}
+
+// -----------------------------------------------------------------------------
+
+NetToMojoIOBuffer::NetToMojoIOBuffer(
+ NetToMojoPendingBuffer* pending_buffer)
+ : net::WrappedIOBuffer(pending_buffer->buffer()),
+ pending_buffer_(pending_buffer) {
+}
+
+NetToMojoIOBuffer::~NetToMojoIOBuffer() {
+}
+
+// -----------------------------------------------------------------------------
+
+MojoToNetPendingBuffer::MojoToNetPendingBuffer(
+ ScopedDataPipeConsumerHandle handle,
+ const void* buffer)
+ : buffer_(buffer) {
yzshen1 2014/10/10 21:18:59 |handle| should be used to initialize the correspo
+}
+
+MojoToNetPendingBuffer::~MojoToNetPendingBuffer() {
+}
+
+// static
+MojoResult MojoToNetPendingBuffer::BeginRead(
+ ScopedDataPipeConsumerHandle* handle,
+ scoped_refptr<MojoToNetPendingBuffer>* pending,
+ uint32_t* num_bytes) {
+ const void* buffer = NULL;
+ *num_bytes = 0;
+ MojoResult result = BeginReadDataRaw(handle->get(), &buffer, num_bytes,
+ MOJO_READ_DATA_FLAG_NONE);
+ if (result == MOJO_RESULT_OK)
+ *pending = new MojoToNetPendingBuffer(handle->Pass(), buffer);
+ return result;
+}
+
+ScopedDataPipeConsumerHandle MojoToNetPendingBuffer::Complete(
+ uint32_t num_bytes) {
+ EndReadDataRaw(handle_.get(), num_bytes);
+ buffer_ = NULL;
+ return handle_.Pass();
+}
+
+// -----------------------------------------------------------------------------
+
+MojoToNetIOBuffer::MojoToNetIOBuffer(MojoToNetPendingBuffer* pending_buffer)
+ : net::WrappedIOBuffer(pending_buffer->buffer()),
+ pending_buffer_(pending_buffer) {
+}
+
+MojoToNetIOBuffer::~MojoToNetIOBuffer() {
+}
+
+// -----------------------------------------------------------------------------
+
NetworkErrorPtr MakeNetworkError(int error_code) {
NetworkErrorPtr error = NetworkError::New();
error->code = error_code;

Powered by Google App Engine
This is Rietveld 408576698