1 // Copyright (c) 2011 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_STREAMER_INTERFACE_H_ 6 #define NET_TOOLS_FLIP_SERVER_STREAMER_INTERFACE_H_ 7 8 #include <string> 9 10 #include "base/compiler_specific.h" 11 #include "net/tools/balsa/balsa_headers.h" 12 #include "net/tools/balsa/balsa_visitor_interface.h" 13 #include "net/tools/flip_server/sm_interface.h" 14 15 namespace net { 16 17 class BalsaFrame; 18 class FlipAcceptor; 19 class MemCacheIter; 20 class SMConnection; 21 class EpollServer; 22 23 class StreamerSM : public BalsaVisitorInterface, public SMInterface { 24 public: 25 StreamerSM(SMConnection* connection, 26 SMInterface* sm_other_interface, 27 EpollServer* epoll_server, 28 FlipAcceptor* acceptor); 29 virtual ~StreamerSM(); 30 AddToOutputOrder(const MemCacheIter & mci)31 void AddToOutputOrder(const MemCacheIter& mci) {} 32 33 virtual void InitSMInterface(SMInterface* sm_other_interface, 34 int32 server_idx) OVERRIDE; 35 virtual void InitSMConnection(SMConnectionPoolInterface* connection_pool, 36 SMInterface* sm_interface, 37 EpollServer* epoll_server, 38 int fd, 39 std::string server_ip, 40 std::string server_port, 41 std::string remote_ip, 42 bool use_ssl) OVERRIDE; 43 44 virtual size_t ProcessReadInput(const char* data, size_t len) OVERRIDE; 45 virtual size_t ProcessWriteInput(const char* data, size_t len) OVERRIDE; 46 virtual bool MessageFullyRead() const OVERRIDE; SetStreamID(uint32 stream_id)47 virtual void SetStreamID(uint32 stream_id) OVERRIDE {} 48 virtual bool Error() const OVERRIDE; 49 virtual const char* ErrorAsString() const OVERRIDE; 50 virtual void Reset() OVERRIDE; ResetForNewInterface(int32 server_idx)51 virtual void ResetForNewInterface(int32 server_idx) OVERRIDE {} 52 virtual void ResetForNewConnection() OVERRIDE; 53 virtual void Cleanup() OVERRIDE; 54 virtual int PostAcceptHook() OVERRIDE; NewStream(uint32 stream_id,uint32 priority,const std::string & filename)55 virtual void NewStream(uint32 stream_id, 56 uint32 priority, 57 const std::string& filename) OVERRIDE {} SendEOF(uint32 stream_id)58 virtual void SendEOF(uint32 stream_id) OVERRIDE {} SendErrorNotFound(uint32 stream_id)59 virtual void SendErrorNotFound(uint32 stream_id) OVERRIDE {} SendOKResponse(uint32 stream_id,std::string output)60 virtual void SendOKResponse(uint32 stream_id, std::string output) {} 61 virtual size_t SendSynStream(uint32 stream_id, 62 const BalsaHeaders& headers) OVERRIDE; 63 virtual size_t SendSynReply(uint32 stream_id, 64 const BalsaHeaders& headers) OVERRIDE; SendDataFrame(uint32 stream_id,const char * data,int64 len,uint32 flags,bool compress)65 virtual void SendDataFrame(uint32 stream_id, 66 const char* data, 67 int64 len, 68 uint32 flags, 69 bool compress) OVERRIDE {} 70 virtual void set_is_request() OVERRIDE; forward_ip_header()71 static std::string forward_ip_header() { return forward_ip_header_; } set_forward_ip_header(std::string value)72 static void set_forward_ip_header(std::string value) { 73 forward_ip_header_ = value; 74 } 75 76 private: SendEOFImpl(uint32 stream_id)77 void SendEOFImpl(uint32 stream_id) {} SendErrorNotFoundImpl(uint32 stream_id)78 void SendErrorNotFoundImpl(uint32 stream_id) {} SendOKResponseImpl(uint32 stream_id,std::string * output)79 void SendOKResponseImpl(uint32 stream_id, std::string* output) {} SendSynReplyImpl(uint32 stream_id,const BalsaHeaders & headers)80 size_t SendSynReplyImpl(uint32 stream_id, const BalsaHeaders& headers) { 81 return 0; 82 } SendSynStreamImpl(uint32 stream_id,const BalsaHeaders & headers)83 size_t SendSynStreamImpl(uint32 stream_id, const BalsaHeaders& headers) { 84 return 0; 85 } SendDataFrameImpl(uint32 stream_id,const char * data,int64 len,uint32 flags,bool compress)86 void SendDataFrameImpl(uint32 stream_id, 87 const char* data, 88 int64 len, 89 uint32 flags, 90 bool compress) {} GetOutput()91 virtual void GetOutput() OVERRIDE {} 92 93 virtual void ProcessBodyInput(const char* input, size_t size) OVERRIDE; 94 virtual void MessageDone() OVERRIDE; 95 virtual void ProcessHeaders(const BalsaHeaders& headers) OVERRIDE; ProcessBodyData(const char * input,size_t size)96 virtual void ProcessBodyData(const char* input, size_t size) OVERRIDE {} ProcessHeaderInput(const char * input,size_t size)97 virtual void ProcessHeaderInput(const char* input, size_t size) OVERRIDE {} ProcessTrailerInput(const char * input,size_t size)98 virtual void ProcessTrailerInput(const char* input, size_t size) OVERRIDE {} ProcessRequestFirstLine(const char * line_input,size_t line_length,const char * method_input,size_t method_length,const char * request_uri_input,size_t request_uri_length,const char * version_input,size_t version_length)99 virtual void ProcessRequestFirstLine(const char* line_input, 100 size_t line_length, 101 const char* method_input, 102 size_t method_length, 103 const char* request_uri_input, 104 size_t request_uri_length, 105 const char* version_input, 106 size_t version_length) OVERRIDE {} ProcessResponseFirstLine(const char * line_input,size_t line_length,const char * version_input,size_t version_length,const char * status_input,size_t status_length,const char * reason_input,size_t reason_length)107 virtual void ProcessResponseFirstLine(const char* line_input, 108 size_t line_length, 109 const char* version_input, 110 size_t version_length, 111 const char* status_input, 112 size_t status_length, 113 const char* reason_input, 114 size_t reason_length) OVERRIDE {} ProcessChunkLength(size_t chunk_length)115 virtual void ProcessChunkLength(size_t chunk_length) OVERRIDE {} ProcessChunkExtensions(const char * input,size_t size)116 virtual void ProcessChunkExtensions(const char* input, size_t size) OVERRIDE { 117 } HeaderDone()118 virtual void HeaderDone() OVERRIDE {} 119 virtual void HandleHeaderError(BalsaFrame* framer) OVERRIDE; HandleHeaderWarning(BalsaFrame * framer)120 virtual void HandleHeaderWarning(BalsaFrame* framer) OVERRIDE {} 121 virtual void HandleChunkingError(BalsaFrame* framer) OVERRIDE; 122 virtual void HandleBodyError(BalsaFrame* framer) OVERRIDE; 123 void HandleError(); 124 125 SMConnection* connection_; 126 SMInterface* sm_other_interface_; 127 EpollServer* epoll_server_; 128 FlipAcceptor* acceptor_; 129 bool is_request_; 130 BalsaFrame* http_framer_; 131 BalsaHeaders headers_; 132 static std::string forward_ip_header_; 133 }; 134 135 } // namespace net 136 137 #endif // NET_TOOLS_FLIP_SERVER_STREAMER_INTERFACE_H_ 138