14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef ECHO_SERVER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define ECHO_SERVER_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ppapi/cpp/instance.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ppapi/cpp/tcp_socket.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ppapi/utility/completion_callback_factory.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const int kBufferSize = 1024; 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Simple "echo" server based on a listening pp::TCPSocket. 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This server handles just one connection at a time and will 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// echo back whatever bytes get sent to it. 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class EchoServer { 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EchoServer(pp::Instance* instance, uint16_t port) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : instance_(instance), 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback_factory_(this) { 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Start(port); 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected: 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void Start(uint16_t port); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Callback functions 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnBindCompletion(int32_t result); 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnListenCompletion(int32_t result); 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnAcceptCompletion(int32_t result, pp::TCPSocket socket); 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnReadCompletion(int32_t result); 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnWriteCompletion(int32_t result); 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void TryRead(); 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void TryAccept(); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pp::Instance* instance_; 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pp::CompletionCallbackFactory<EchoServer> callback_factory_; 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pp::TCPSocket listening_socket_; 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pp::TCPSocket incoming_socket_; 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) char receive_buffer_[kBufferSize]; 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // ECHO_SERVER_H_ 47