Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Side by Side Diff: net/tools/flip_server/streamer_interface.cc

Issue 2169503002: Remove flip_server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/flip_server/streamer_interface.h ('k') | net/tools/flip_server/tcp_socket_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "net/tools/flip_server/streamer_interface.h"
6
7 #include <string>
8
9 #include "net/tools/balsa/balsa_frame.h"
10 #include "net/tools/flip_server/constants.h"
11 #include "net/tools/flip_server/flip_config.h"
12 #include "net/tools/flip_server/sm_connection.h"
13
14 namespace net {
15
16 std::string StreamerSM::forward_ip_header_;
17
18 StreamerSM::StreamerSM(SMConnection* connection,
19 SMInterface* sm_other_interface,
20 EpollServer* epoll_server,
21 FlipAcceptor* acceptor)
22 : connection_(connection),
23 sm_other_interface_(sm_other_interface),
24 epoll_server_(epoll_server),
25 acceptor_(acceptor),
26 is_request_(false),
27 http_framer_(new BalsaFrame) {
28 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "Creating StreamerSM object";
29 http_framer_->set_balsa_visitor(this);
30 http_framer_->set_balsa_headers(&headers_);
31 http_framer_->set_is_request(false);
32 }
33
34 StreamerSM::~StreamerSM() {
35 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Destroying StreamerSM object";
36 Reset();
37 delete http_framer_;
38 }
39
40 void StreamerSM::set_is_request() {
41 is_request_ = true;
42 http_framer_->set_is_request(true);
43 }
44
45 void StreamerSM::InitSMInterface(SMInterface* sm_other_interface,
46 int32_t server_idx) {
47 sm_other_interface_ = sm_other_interface;
48 }
49
50 void StreamerSM::InitSMConnection(SMConnectionPoolInterface* connection_pool,
51 SMInterface* sm_interface,
52 EpollServer* epoll_server,
53 int fd,
54 std::string server_ip,
55 std::string server_port,
56 std::string remote_ip,
57 bool use_ssl) {
58 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Initializing server "
59 << "connection.";
60 connection_->InitSMConnection(connection_pool,
61 sm_interface,
62 epoll_server,
63 fd,
64 server_ip,
65 server_port,
66 remote_ip,
67 use_ssl);
68 }
69
70 size_t StreamerSM::ProcessReadInput(const char* data, size_t len) {
71 // For now we only want to parse http requests. Just stream responses
72 if (is_request_) {
73 return http_framer_->ProcessInput(data, len);
74 } else {
75 return sm_other_interface_->ProcessWriteInput(data, len);
76 }
77 }
78
79 size_t StreamerSM::ProcessWriteInput(const char* data, size_t len) {
80 char* dataPtr = new char[len];
81 memcpy(dataPtr, data, len);
82 DataFrame* df = new DataFrame;
83 df->data = (const char*)dataPtr;
84 df->size = len;
85 df->delete_when_done = true;
86 connection_->EnqueueDataFrame(df);
87 return len;
88 }
89
90 bool StreamerSM::Error() const { return false; }
91
92 const char* StreamerSM::ErrorAsString() const { return "(none)"; }
93
94 bool StreamerSM::MessageFullyRead() const {
95 if (is_request_) {
96 return http_framer_->MessageFullyRead();
97 } else {
98 return false;
99 }
100 }
101
102 void StreamerSM::Reset() {
103 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Reset";
104 connection_->Cleanup("Server Reset");
105 http_framer_->Reset();
106 }
107
108 void StreamerSM::ResetForNewConnection() {
109 http_framer_->Reset();
110 sm_other_interface_->Reset();
111 }
112
113 void StreamerSM::Cleanup() {
114 if (is_request_)
115 http_framer_->Reset();
116 }
117
118 int StreamerSM::PostAcceptHook() {
119 if (!sm_other_interface_) {
120 SMConnection* server_connection = SMConnection::NewSMConnection(
121 epoll_server_, NULL, NULL, acceptor_, "server_conn: ");
122 if (server_connection == NULL) {
123 LOG(ERROR) << "StreamerSM: Could not create server conenction.";
124 return 0;
125 }
126 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Creating new server "
127 << "connection.";
128 sm_other_interface_ =
129 new StreamerSM(server_connection, this, epoll_server_, acceptor_);
130 sm_other_interface_->InitSMInterface(this, 0);
131 }
132 // The Streamer interface is used to stream HTTPS connections, so we
133 // will always use the https_server_ip/port here.
134 sm_other_interface_->InitSMConnection(NULL,
135 sm_other_interface_,
136 epoll_server_,
137 -1,
138 acceptor_->https_server_ip_,
139 acceptor_->https_server_port_,
140 std::string(),
141 false);
142
143 return 1;
144 }
145
146 size_t StreamerSM::SendSynStream(uint32_t stream_id,
147 const BalsaHeaders& headers) {
148 return 0;
149 }
150
151 size_t StreamerSM::SendSynReply(uint32_t stream_id,
152 const BalsaHeaders& headers) {
153 return 0;
154 }
155
156 void StreamerSM::ProcessBodyInput(const char* input, size_t size) {
157 VLOG(2) << ACCEPTOR_CLIENT_IDENT
158 << "StreamerHttpSM: Process Body Input Data: "
159 << "size " << size;
160 sm_other_interface_->ProcessWriteInput(input, size);
161 }
162
163 void StreamerSM::MessageDone() {
164 if (acceptor_->flip_handler_type_ == FLIP_HANDLER_PROXY) {
165 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerHttpSM: MessageDone.";
166 // TODO(kelindsay): anything need to be done ehre?
167 } else {
168 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StraemerHttpSM: MessageDone.";
169 }
170 }
171
172 void StreamerSM::ProcessHeaders(const BalsaHeaders& headers) {
173 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "HttpStreamerSM: Process Headers";
174 BalsaHeaders mod_headers;
175 mod_headers.CopyFrom(headers);
176 if (forward_ip_header_.length()) {
177 LOG(INFO) << "Adding forward header: " << forward_ip_header_;
178 mod_headers.ReplaceOrAppendHeader(forward_ip_header_,
179 connection_->client_ip());
180 } else {
181 LOG(INFO) << "NOT adding forward header.";
182 }
183 SimpleBuffer sb;
184 char* buffer;
185 int size;
186 mod_headers.WriteHeaderAndEndingToBuffer(&sb);
187 sb.GetReadablePtr(&buffer, &size);
188 sm_other_interface_->ProcessWriteInput(buffer, size);
189 }
190
191 void StreamerSM::HandleHeaderError(BalsaFrame* framer) { HandleError(); }
192
193 void StreamerSM::HandleChunkingError(BalsaFrame* framer) { HandleError(); }
194
195 void StreamerSM::HandleBodyError(BalsaFrame* framer) { HandleError(); }
196
197 void StreamerSM::HandleError() {
198 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Error detected";
199 }
200
201 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/flip_server/streamer_interface.h ('k') | net/tools/flip_server/tcp_socket_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698