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.
5 #ifndef NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
6 #define NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
8 // State Machine Interfaces
12 #include "net/tools/balsa/balsa_headers.h"
17 class SMConnectionPoolInterface
;
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
,
28 std::string server_ip
,
29 std::string server_port
,
30 std::string remote_ip
,
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
44 virtual void ResetForNewConnection() = 0;
45 virtual void Cleanup() = 0;
47 virtual int PostAcceptHook() = 0;
49 virtual void NewStream(uint32 stream_id
,
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
,
63 virtual void GetOutput() = 0;
64 virtual void set_is_request() = 0;
66 virtual ~SMInterface() {}
69 class SMConnectionInterface
{
71 virtual ~SMConnectionInterface() {}
72 virtual void ReadyToSend() = 0;
73 virtual EpollServer
* epoll_server() = 0;
76 class SMConnectionPoolInterface
{
78 virtual ~SMConnectionPoolInterface() {}
79 virtual void SMConnectionDone(SMConnection
* connection
) = 0;
84 #endif // NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_