// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
#define NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
// State Machine Interfaces
#include <string>
#include "net/tools/flip_server/balsa_headers.h"
namespace net {
class EpollServer;
class SMConnectionPoolInterface;
class SMConnection;
class SMInterface {
public:
virtual void InitSMInterface(SMInterface* sm_other_interface,
int32 server_idx) = 0;
virtual void InitSMConnection(SMConnectionPoolInterface* connection_pool,
SMInterface* sm_interface,
EpollServer* epoll_server,
int fd,
std::string server_ip,
std::string server_port,
std::string remote_ip,
bool use_ssl) = 0;
virtual size_t ProcessReadInput(const char* data, size_t len) = 0;
virtual size_t ProcessWriteInput(const char* data, size_t len) = 0;
virtual void SetStreamID(uint32 stream_id) = 0;
virtual bool MessageFullyRead() const = 0;
virtual bool Error() const = 0;
virtual const char* ErrorAsString() const = 0;
virtual void Reset() = 0;
virtual void ResetForNewInterface(int32 server_idx) = 0;
// ResetForNewConnection is used for interfaces which control SMConnection
// objects. When called an interface may put its connection object into
// a reusable instance pool. Currently this is what the HttpSM interface
// does.
virtual void ResetForNewConnection() = 0;
virtual void Cleanup() = 0;
virtual int PostAcceptHook() = 0;
virtual void NewStream(uint32 stream_id, uint32 priority,
const std::string& filename) = 0;
virtual void SendEOF(uint32 stream_id) = 0;
virtual void SendErrorNotFound(uint32 stream_id) = 0;
virtual size_t SendSynStream(uint32 stream_id,
const BalsaHeaders& headers) = 0;
virtual size_t SendSynReply(uint32 stream_id,
const BalsaHeaders& headers) = 0;
virtual void SendDataFrame(uint32 stream_id, const char* data, int64 len,
uint32 flags, bool compress) = 0;
virtual void GetOutput() = 0;
virtual void set_is_request() = 0;
virtual ~SMInterface() {}
};
class SMConnectionInterface {
public:
virtual ~SMConnectionInterface() {}
virtual void ReadyToSend() = 0;
virtual EpollServer* epoll_server() = 0;
};
class SMConnectionPoolInterface {
public:
virtual ~SMConnectionPoolInterface() {}
virtual void SMConnectionDone(SMConnection* connection) = 0;
};
} // namespace net
#endif // NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_