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