blob: 551481d38810370c9968a546fdf5492b2896ab27 [file] [log] [blame]
// Copyright 2014 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.
#include "mojo/services/network/net_adapters.h"
#include "net/base/net_errors.h"
namespace mojo {
namespace {
const uint32_t kMaxBufSize = 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 > kMaxBufSize)
*num_bytes = kMaxBufSize;
*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)
: handle_(handle.Pass()),
buffer_(buffer) {
}
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;
if (error_code <= 0)
error->description = net::ErrorToString(error_code);
return error.Pass();
}
} // namespace mojo