tcp_event_emitter.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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_TCP_EVENT_EMITTER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define LIBRARIES_NACL_IO_SOCKET_TCP_EVENT_EMITTER_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/fifo_char.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/stream/stream_event_emitter.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <ppapi/c/pp_resource.h>
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/macros.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/scoped_ref.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TcpEventEmitter;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Node;
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef sdk_util::ScopedRef<TcpEventEmitter> ScopedTcpEventEmitter;
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TcpEventEmitter : public StreamEventEmitter {
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TcpEventEmitter(size_t rsize, size_t wsize);
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  uint32_t ReadIn_Locked(char* buffer, uint32_t len);
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  uint32_t WriteIn_Locked(const char* buffer, uint32_t len);
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  uint32_t ReadOut_Locked(char* buffer, uint32_t len);
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  uint32_t WriteOut_Locked(const char* buffer, uint32_t len);
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool GetError_Locked();
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void SetError_Locked();
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void ConnectDone_Locked();
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  PP_Resource GetAcceptedSocket_Locked();
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void SetAcceptedSocket_Locked(PP_Resource socket);
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void UpdateStatus_Locked();
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void SetListening_Locked();
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected:
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual FIFOChar* in_fifo() { return &in_fifo_; }
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual FIFOChar* out_fifo() { return &out_fifo_; }
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FIFOChar in_fifo_;
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FIFOChar out_fifo_;
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool error_;
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool listening_;
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  PP_Resource accepted_socket_;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TcpEventEmitter);
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_SOCKET_TCP_EVENT_EMITTER_H_
57