| 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..551481d38810370c9968a546fdf5492b2896ab27 100644
|
| --- a/mojo/services/network/net_adapters.cc
|
| +++ b/mojo/services/network/net_adapters.cc
|
| @@ -8,6 +8,105 @@
|
|
|
| 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;
|
|
|