15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/ossocket.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifdef PROVIDES_SOCKET_API
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <ppapi/c/pp_resource.h>
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <ppapi/c/ppb_udp_socket.h>
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/socket/socket_node.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/socket/udp_event_emitter.h"
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace nacl_io {
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UdpNode : public SocketNode {
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public:
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit UdpNode(Filesystem* filesystem);
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) protected:
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual Error Init(int open_flags);
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void Destroy();
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual UdpEventEmitter* GetEventEmitter();
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void QueueInput();
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void QueueOutput();
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual Error Bind(const struct sockaddr* addr, socklen_t len);
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual Error Connect(const HandleAttr& attr,
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        const struct sockaddr* addr,
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        socklen_t len);
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected:
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual Error Recv_Locked(void* buf,
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            size_t len,
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            PP_Resource* addr,
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            int* out_len);
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual Error Send_Locked(const void* buf,
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            size_t len,
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            PP_Resource addr,
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            int* out_len);
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedUdpEventEmitter emitter_;
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace nacl_io
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif  // PROVIDES_SOCKET_API
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_SOCKET_UDP_NODE_H_
56