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