15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/socket/packet.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <assert.h>
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <string.h>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/pepper_interface.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)Packet::Packet(PepperInterface* ppapi)
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    : ppapi_(ppapi), addr_(0), buffer_(NULL), len_(0) {
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Packet::~Packet() {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if ((NULL != ppapi_) && addr_)
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ppapi_->ReleaseResource(addr_);
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  free(buffer_);
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void Packet::Copy(const void* buffer, size_t len, PP_Resource addr) {
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  addr_ = addr;
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  len_ = len;
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  buffer_ = (char*)malloc(len);
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  assert(buffer_);
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  memcpy(buffer_, buffer, len);
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (addr && (NULL != ppapi_))
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ppapi_->AddRefResource(addr);
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
36