1// Copyright (c) 2009 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 NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_ 6#define NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_ 7 8// State Machine Interfaces 9 10#include <string> 11 12#include "net/tools/balsa/balsa_headers.h" 13 14namespace net { 15 16class EpollServer; 17class SMConnectionPoolInterface; 18class SMConnection; 19 20class SMInterface { 21 public: 22 virtual void InitSMInterface(SMInterface* sm_other_interface, 23 int32 server_idx) = 0; 24 virtual void InitSMConnection(SMConnectionPoolInterface* connection_pool, 25 SMInterface* sm_interface, 26 EpollServer* epoll_server, 27 int fd, 28 std::string server_ip, 29 std::string server_port, 30 std::string remote_ip, 31 bool use_ssl) = 0; 32 virtual size_t ProcessReadInput(const char* data, size_t len) = 0; 33 virtual size_t ProcessWriteInput(const char* data, size_t len) = 0; 34 virtual void SetStreamID(uint32 stream_id) = 0; 35 virtual bool MessageFullyRead() const = 0; 36 virtual bool Error() const = 0; 37 virtual const char* ErrorAsString() const = 0; 38 virtual void Reset() = 0; 39 virtual void ResetForNewInterface(int32 server_idx) = 0; 40 // ResetForNewConnection is used for interfaces which control SMConnection 41 // objects. When called an interface may put its connection object into 42 // a reusable instance pool. Currently this is what the HttpSM interface 43 // does. 44 virtual void ResetForNewConnection() = 0; 45 virtual void Cleanup() = 0; 46 47 virtual int PostAcceptHook() = 0; 48 49 virtual void NewStream(uint32 stream_id, 50 uint32 priority, 51 const std::string& filename) = 0; 52 virtual void SendEOF(uint32 stream_id) = 0; 53 virtual void SendErrorNotFound(uint32 stream_id) = 0; 54 virtual size_t SendSynStream(uint32 stream_id, 55 const BalsaHeaders& headers) = 0; 56 virtual size_t SendSynReply(uint32 stream_id, 57 const BalsaHeaders& headers) = 0; 58 virtual void SendDataFrame(uint32 stream_id, 59 const char* data, 60 int64 len, 61 uint32 flags, 62 bool compress) = 0; 63 virtual void GetOutput() = 0; 64 virtual void set_is_request() = 0; 65 66 virtual ~SMInterface() {} 67}; 68 69class SMConnectionInterface { 70 public: 71 virtual ~SMConnectionInterface() {} 72 virtual void ReadyToSend() = 0; 73 virtual EpollServer* epoll_server() = 0; 74}; 75 76class SMConnectionPoolInterface { 77 public: 78 virtual ~SMConnectionPoolInterface() {} 79 virtual void SMConnectionDone(SMConnection* connection) = 0; 80}; 81 82} // namespace net 83 84#endif // NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_ 85