15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// State Machine Interfaces
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/tools/balsa/balsa_headers.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EpollServer;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SMConnectionPoolInterface;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SMConnection;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SMInterface {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitSMInterface(SMInterface* sm_other_interface,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int32 server_idx) = 0;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitSMConnection(SMConnectionPoolInterface* connection_pool,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                SMInterface* sm_interface,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                EpollServer* epoll_server,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int fd,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                std::string server_ip,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                std::string server_port,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                std::string remote_ip,
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                bool use_ssl) = 0;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual size_t ProcessReadInput(const char* data, size_t len) = 0;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual size_t ProcessWriteInput(const char* data, size_t len) = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetStreamID(uint32 stream_id) = 0;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool MessageFullyRead() const = 0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Error() const = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const char* ErrorAsString() const = 0;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Reset() = 0;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResetForNewInterface(int32 server_idx) = 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ResetForNewConnection is used for interfaces which control SMConnection
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // objects. When called an interface may put its connection object into
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // a reusable instance pool. Currently this is what the HttpSM interface
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // does.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResetForNewConnection() = 0;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cleanup() = 0;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int PostAcceptHook() = 0;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void NewStream(uint32 stream_id,
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                         uint32 priority,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& filename) = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SendEOF(uint32 stream_id) = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SendErrorNotFound(uint32 stream_id) = 0;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual size_t SendSynStream(uint32 stream_id,
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                               const BalsaHeaders& headers) = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual size_t SendSynReply(uint32 stream_id,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const BalsaHeaders& headers) = 0;
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void SendDataFrame(uint32 stream_id,
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             const char* data,
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             int64 len,
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             uint32 flags,
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             bool compress) = 0;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetOutput() = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void set_is_request() = 0;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SMInterface() {}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SMConnectionInterface {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ~SMConnectionInterface() {}
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void ReadyToSend() = 0;
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual EpollServer* epoll_server() = 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SMConnectionPoolInterface {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SMConnectionPoolInterface() {}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SMConnectionDone(SMConnection* connection) = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_TOOLS_FLIP_SERVER_SM_INTERFACE_H_
85