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)#ifndef LIBRARIES_NACL_IO_SOCKET_PACKET_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define LIBRARIES_NACL_IO_SOCKET_PACKET_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/fifo_interface.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/macros.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class PepperInterface;
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// NOTE: The Packet class always owns the buffer and address.
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class Packet {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  explicit Packet(PepperInterface* ppapi);
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ~Packet();
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Copy the buffer, and address reference
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void Copy(const void* buffer, size_t len, PP_Resource addr);
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  char* buffer() { return buffer_; }
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_Resource addr() { return addr_; }
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  size_t len() { return len_; }
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PepperInterface* ppapi_;
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_Resource addr_;
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  char* buffer_;
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  size_t len_;
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Packet);
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_SOCKET_PACKET_H_
42