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

Unified Diff: net/tools/flip_server/spdy_interface.cc

Issue 9425023: Refactor BufferedSpdyFramer so that SpdySession is not a visitor of (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
« net/spdy/buffered_spdy_framer.cc ('K') | « net/tools/flip_server/spdy_interface.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/tools/flip_server/spdy_interface.cc
===================================================================
--- net/tools/flip_server/spdy_interface.cc (revision 122608)
+++ net/tools/flip_server/spdy_interface.cc (working copy)
@@ -145,33 +145,26 @@
return sm_http_interface;
}
-int SpdySM::SpdyHandleNewStream(const SpdyControlFrame* frame,
- std::string &http_data,
- bool *is_https_scheme) {
- bool parsed_headers = false;
- SpdyHeaderBlock headers;
- const SpdySynStreamControlFrame* syn_stream =
- reinterpret_cast<const SpdySynStreamControlFrame*>(frame);
-
+int SpdySM::SpdyHandleNewStream(
+ const SpdySynStreamControlFrame* syn_stream,
+ const linked_ptr<spdy::SpdyHeaderBlock>& headers,
+ std::string &http_data,
+ bool* is_https_scheme) {
*is_https_scheme = false;
- parsed_headers = buffered_spdy_framer_->ParseHeaderBlock(frame, &headers);
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnSyn("
<< syn_stream->stream_id() << ")";
- VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: headers parsed?: "
- << (parsed_headers? "yes": "no");
- if (parsed_headers) {
- VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: # headers: "
- << headers.size();
- }
- SpdyHeaderBlock::iterator url = headers.find("url");
- SpdyHeaderBlock::iterator method = headers.find("method");
- if (url == headers.end() || method == headers.end()) {
+ VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: # headers: "
+ << headers->size();
+
+ SpdyHeaderBlock::iterator url = headers->find("url");
+ SpdyHeaderBlock::iterator method = headers->find("method");
+ if (url == headers->end() || method == headers->end()) {
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: didn't find method or url "
<< "or method. Not creating stream";
return 0;
}
- SpdyHeaderBlock::iterator scheme = headers.find("scheme");
+ SpdyHeaderBlock::iterator scheme = headers->find("scheme");
if (scheme->second.compare("https") == 0) {
*is_https_scheme = true;
}
@@ -191,16 +184,15 @@
<< " " << uri;
std::string filename = EncodeURL(uri, host, method->second);
NewStream(syn_stream->stream_id(),
- reinterpret_cast<const SpdySynStreamControlFrame*>
- (frame)->priority(),
+ syn_stream->priority(),
filename);
} else {
- SpdyHeaderBlock::iterator version = headers.find("version");
+ SpdyHeaderBlock::iterator version = headers->find("version");
http_data += method->second + " " + uri + " " + version->second + "\r\n";
VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Request: " << method->second << " "
<< uri << " " << version->second;
- for (SpdyHeaderBlock::iterator i = headers.begin();
- i != headers.end(); ++i) {
+ for (SpdyHeaderBlock::iterator i = headers->begin();
+ i != headers->end(); ++i) {
http_data += i->first + ": " + i->second + "\r\n";
VLOG(2) << ACCEPTOR_CLIENT_IDENT << i->first.c_str() << ":"
<< i->second.c_str();
@@ -217,81 +209,6 @@
return 1;
}
-void SpdySM::OnControl(const SpdyControlFrame* frame) {
- SpdyHeaderBlock headers;
- bool parsed_headers = false;
- switch (frame->type()) {
- case SYN_STREAM:
- {
- const SpdySynStreamControlFrame* syn_stream =
- reinterpret_cast<const SpdySynStreamControlFrame*>(frame);
-
- std::string http_data;
- bool is_https_scheme;
- int ret = SpdyHandleNewStream(frame, http_data, &is_https_scheme);
- if (!ret) {
- LOG(ERROR) << "SpdySM: Could not convert spdy into http.";
- break;
- }
- // We've seen a valid looking SYN_STREAM, consider this to have
- // been a real spdy session.
- valid_spdy_session_ = true;
-
- if (acceptor_->flip_handler_type_ == FLIP_HANDLER_PROXY) {
- std::string server_ip;
- std::string server_port;
- if (is_https_scheme) {
- server_ip = acceptor_->https_server_ip_;
- server_port = acceptor_->https_server_port_;
- } else {
- server_ip = acceptor_->http_server_ip_;
- server_port = acceptor_->http_server_port_;
- }
- SMInterface *sm_http_interface =
- FindOrMakeNewSMConnectionInterface(server_ip, server_port);
- stream_to_smif_[syn_stream->stream_id()] = sm_http_interface;
- sm_http_interface->SetStreamID(syn_stream->stream_id());
- sm_http_interface->ProcessWriteInput(http_data.c_str(),
- http_data.size());
- }
- }
- break;
-
- case SYN_REPLY:
- parsed_headers = buffered_spdy_framer_->ParseHeaderBlock(frame, &headers);
- DCHECK(parsed_headers);
- // TODO(willchan): if there is an error parsing headers, we
- // should send a RST_STREAM.
- VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnSynReply(" <<
- reinterpret_cast<const SpdySynReplyControlFrame*>(frame)->stream_id()
- << ")";
- break;
- case RST_STREAM:
- {
- const SpdyRstStreamControlFrame* rst_stream =
- reinterpret_cast<const SpdyRstStreamControlFrame*>(frame);
- VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnRst("
- << rst_stream->stream_id() << ")";
- client_output_ordering_.RemoveStreamId(rst_stream ->stream_id());
- }
- break;
-
- default:
- LOG(ERROR) << "SpdySM: Unknown control frame type";
- }
-}
-
-bool SpdySM::OnControlFrameHeaderData(spdy::SpdyStreamId stream_id,
- const char* header_data,
- size_t len) {
- DCHECK(false);
- return false;
-}
-
-void SpdySM::OnDataFrameHeader(const spdy::SpdyDataFrame* frame) {
- buffered_spdy_framer_->OnDataFrameHeader(frame);
-}
-
void SpdySM::OnStreamFrameData(SpdyStreamId stream_id,
const char* data, size_t len) {
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: StreamData(" << stream_id
@@ -309,23 +226,59 @@
interface->ProcessWriteInput(data, len);
}
-bool SpdySM::OnCredentialFrameData(const char* frame_data,
- size_t len) {
- return false;
-}
+void SpdySM::OnSynStream(const spdy::SpdySynStreamControlFrame& syn_stream,
+ const linked_ptr<spdy::SpdyHeaderBlock>& headers) {
+ std::string http_data;
+ bool is_https_scheme;
+ int ret = SpdyHandleNewStream(&syn_stream, headers, http_data,
+ &is_https_scheme);
+ if (!ret) {
+ LOG(ERROR) << "SpdySM: Could not convert spdy into http.";
+ return;
+ }
+ // We've seen a valid looking SYN_STREAM, consider this to have
+ // been a real spdy session.
+ valid_spdy_session_ = true;
-void SpdySM::OnSyn(const spdy::SpdySynStreamControlFrame& frame,
- const linked_ptr<spdy::SpdyHeaderBlock>& headers) {
+ if (acceptor_->flip_handler_type_ == FLIP_HANDLER_PROXY) {
+ std::string server_ip;
+ std::string server_port;
+ if (is_https_scheme) {
+ server_ip = acceptor_->https_server_ip_;
+ server_port = acceptor_->https_server_port_;
+ } else {
+ server_ip = acceptor_->http_server_ip_;
+ server_port = acceptor_->http_server_port_;
+ }
+ SMInterface* sm_http_interface =
+ FindOrMakeNewSMConnectionInterface(server_ip, server_port);
+ stream_to_smif_[syn_stream.stream_id()] = sm_http_interface;
+ sm_http_interface->SetStreamID(syn_stream.stream_id());
+ sm_http_interface->ProcessWriteInput(http_data.c_str(),
+ http_data.size());
+ }
}
void SpdySM::OnSynReply(const spdy::SpdySynReplyControlFrame& frame,
const linked_ptr<spdy::SpdyHeaderBlock>& headers) {
+ // TODO(willchan): if there is an error parsing headers, we
+ // should send a RST_STREAM.
+ VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnSynReply("
+ << frame.stream_id() << ")";
}
void SpdySM::OnHeaders(const spdy::SpdyHeadersControlFrame& frame,
const linked_ptr<spdy::SpdyHeaderBlock>& headers) {
+ VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnHeaders("
+ << frame.stream_id() << ")";
}
+void SpdySM::OnRstStream(const spdy::SpdyRstStreamControlFrame& frame) {
+ VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: OnRstStream("
+ << frame.stream_id() << ")";
+ client_output_ordering_.RemoveStreamId(frame.stream_id());
+}
+
size_t SpdySM::ProcessReadInput(const char* data, size_t len) {
return buffered_spdy_framer_->ProcessInput(data, len);
}
« net/spdy/buffered_spdy_framer.cc ('K') | « net/tools/flip_server/spdy_interface.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698