1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
6#define LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
7
8#include "nacl_io/ossocket.h"
9#ifdef PROVIDES_SOCKET_API
10
11#include <ppapi/c/pp_resource.h>
12#include <ppapi/c/ppb_udp_socket.h>
13
14#include "nacl_io/socket/socket_node.h"
15#include "nacl_io/socket/udp_event_emitter.h"
16
17namespace nacl_io {
18
19class UdpNode : public SocketNode {
20 public:
21  explicit UdpNode(Filesystem* filesystem);
22
23 protected:
24  virtual Error Init(int open_flags);
25  virtual void Destroy();
26
27 public:
28  virtual UdpEventEmitter* GetEventEmitter();
29
30  virtual void QueueInput();
31  virtual void QueueOutput();
32
33  virtual Error Bind(const struct sockaddr* addr, socklen_t len);
34  virtual Error Connect(const HandleAttr& attr,
35                        const struct sockaddr* addr,
36                        socklen_t len);
37
38 protected:
39  virtual Error Recv_Locked(void* buf,
40                            size_t len,
41                            PP_Resource* addr,
42                            int* out_len);
43
44  virtual Error Send_Locked(const void* buf,
45                            size_t len,
46                            PP_Resource addr,
47                            int* out_len);
48
49  ScopedUdpEventEmitter emitter_;
50};
51
52}  // namespace nacl_io
53
54#endif  // PROVIDES_SOCKET_API
55#endif  // LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
56