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