diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-08 06:05:39 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-08 06:05:39 +0000 |
commit | d707dc3868799f5791e2b41e385eb6bf1febb2eb (patch) | |
tree | e870754dd5ef9bfc48654147f4a41589fda8b571 /net/spdy | |
parent | c492275c3119a77f44e92171458ce7d77ca11e2b (diff) | |
download | chromium_src-d707dc3868799f5791e2b41e385eb6bf1febb2eb.zip chromium_src-d707dc3868799f5791e2b41e385eb6bf1febb2eb.tar.gz chromium_src-d707dc3868799f5791e2b41e385eb6bf1febb2eb.tar.bz2 |
SPDY - Used scoped_ptr for BufferedSpdyFramer in SpdySession.
This change is in preperation for setting the version when
we create the SpdyFramer.
R=rch
TEST=network unit tests
BUG=117287
Review URL: http://codereview.chromium.org/9637002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@125575 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy')
-rw-r--r-- | net/spdy/spdy_session.cc | 40 | ||||
-rw-r--r-- | net/spdy/spdy_session.h | 6 |
2 files changed, 29 insertions, 17 deletions
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 772c041..06abd11 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -339,10 +339,6 @@ SpdySession::SpdySession(const HostPortProxyPair& host_port_proxy_pair, flow_control_ = true; // TODO(mbelshe): consider randomization of the stream_hi_water_mark. - - buffered_spdy_framer_.set_visitor(this); - - SendSettings(); } SpdySession::PendingCreateStream::~PendingCreateStream() {} @@ -402,6 +398,10 @@ net::Error SpdySession::InitializeWithSocket( } } + buffered_spdy_framer_.reset(new spdy::BufferedSpdyFramer()); + buffered_spdy_framer_->set_visitor(this); + SendSettings(); + // Write out any data that we might have to send, such as the settings frame. WriteSocketLater(); net::Error error = ReadSocket(); @@ -597,8 +597,9 @@ int SpdySession::WriteSynStream( SendPrefacePingIfNoneInFlight(); + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdySynStreamControlFrame> syn_frame( - buffered_spdy_framer_.CreateSynStream( + buffered_spdy_framer_->CreateSynStream( stream_id, 0, ConvertRequestPriorityToSpdyPriority(priority), flags, false, headers.get())); @@ -670,6 +671,7 @@ int SpdySession::WriteCredentialFrame(const std::string& origin, credential.certs.push_back(cert); credential.proof.assign(proof.begin(), proof.end()); + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdyCredentialControlFrame> credential_frame( spdy::SpdyFramer::CreateCredentialFrame(credential)); QueueFrame(credential_frame.get(), priority, NULL); @@ -734,8 +736,9 @@ int SpdySession::WriteStreamData(spdy::SpdyStreamId stream_id, SendPrefacePingIfNoneInFlight(); // TODO(mbelshe): reduce memory copies here. + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdyDataFrame> frame( - buffered_spdy_framer_.CreateDataFrame( + buffered_spdy_framer_->CreateDataFrame( stream_id, data->data(), len, flags)); QueueFrame(frame.get(), stream->priority(), stream); @@ -766,6 +769,7 @@ void SpdySession::ResetStream(spdy::SpdyStreamId stream_id, make_scoped_refptr(new NetLogSpdyRstParameter(stream_id, status, description))); + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdyRstStreamControlFrame> rst_frame( spdy::SpdyFramer::CreateRstStream(stream_id, status)); @@ -824,16 +828,17 @@ void SpdySession::OnReadComplete(int bytes_read) { // cleanup. scoped_refptr<SpdySession> self(this); + DCHECK(buffered_spdy_framer_.get()); char *data = read_buffer_->data(); while (bytes_read && - buffered_spdy_framer_.error_code() == + buffered_spdy_framer_->error_code() == spdy::SpdyFramer::SPDY_NO_ERROR) { uint32 bytes_processed = - buffered_spdy_framer_.ProcessInput(data, bytes_read); + buffered_spdy_framer_->ProcessInput(data, bytes_read); bytes_read -= bytes_processed; data += bytes_processed; - if (buffered_spdy_framer_.state() == spdy::SpdyFramer::SPDY_DONE) - buffered_spdy_framer_.Reset(); + if (buffered_spdy_framer_->state() == spdy::SpdyFramer::SPDY_DONE) + buffered_spdy_framer_->Reset(); } if (state_ != CLOSED) @@ -958,6 +963,7 @@ void SpdySession::WriteSocket() { // Loop sending frames until we've sent everything or until the write // returns error (or ERR_IO_PENDING). + DCHECK(buffered_spdy_framer_.get()); while (in_flight_write_.buffer() || !queue_.empty()) { if (!in_flight_write_.buffer()) { // Grab the next SpdyFrame to send. @@ -968,9 +974,9 @@ void SpdySession::WriteSocket() { // which is now. At this time, we don't compress our data frames. spdy::SpdyFrame uncompressed_frame(next_buffer.buffer()->data(), false); size_t size; - if (buffered_spdy_framer_.IsCompressible(uncompressed_frame)) { + if (buffered_spdy_framer_->IsCompressible(uncompressed_frame)) { scoped_ptr<spdy::SpdyFrame> compressed_frame( - buffered_spdy_framer_.CompressFrame(uncompressed_frame)); + buffered_spdy_framer_->CompressFrame(uncompressed_frame)); if (!compressed_frame.get()) { CloseSessionOnError( net::ERR_SPDY_PROTOCOL_ERROR, true, "SPDY Compression failure."); @@ -1126,13 +1132,18 @@ Value* SpdySession::GetInfoAsValue() const { dict->SetInteger("streams_pushed_and_claimed_count", streams_pushed_and_claimed_count_); dict->SetInteger("streams_abandoned_count", streams_abandoned_count_); - dict->SetInteger("frames_received", buffered_spdy_framer_.frames_received()); + DCHECK(buffered_spdy_framer_.get()); + dict->SetInteger("frames_received", buffered_spdy_framer_->frames_received()); dict->SetBoolean("sent_settings", sent_settings_); dict->SetBoolean("received_settings", received_settings_); return dict; } +bool SpdySession::IsReused() const { + return buffered_spdy_framer_->frames_received() > 0; +} + int SpdySession::GetPeerAddress(AddressList* address) const { if (!connection_->socket()) return ERR_SOCKET_NOT_CONNECTED; @@ -1598,6 +1609,7 @@ void SpdySession::SendWindowUpdate(spdy::SpdyStreamId stream_id, make_scoped_refptr(new NetLogSpdyWindowUpdateParameter( stream_id, delta_window_size))); + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdyWindowUpdateControlFrame> window_update_frame( spdy::SpdyFramer::CreateWindowUpdate(stream_id, delta_window_size)); QueueFrame(window_update_frame.get(), stream->priority(), NULL); @@ -1662,6 +1674,7 @@ void SpdySession::SendSettings() { make_scoped_refptr(new NetLogSpdySettingsParameter(settings))); // Create the SETTINGS frame and send it. + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdySettingsControlFrame> settings_frame( spdy::SpdyFramer::CreateSettings(settings)); sent_settings_ = true; @@ -1740,6 +1753,7 @@ void SpdySession::SendTrailingPing() { } void SpdySession::WritePingFrame(uint32 unique_id) { + DCHECK(buffered_spdy_framer_.get()); scoped_ptr<spdy::SpdyPingControlFrame> ping_frame( spdy::SpdyFramer::CreatePingFrame(next_ping_id_)); QueueFrame(ping_frame.get(), SPDY_PRIORITY_HIGHEST, NULL); diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index 7104800..b3208d6 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h @@ -232,9 +232,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, // Indicates whether the session is being reused after having successfully // used to send/receive data in the past. - bool IsReused() const { - return buffered_spdy_framer_.frames_received() > 0; - } + bool IsReused() const; // Returns true if the underlying transport socket ever had any reads or // writes. @@ -551,7 +549,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, int certificate_error_code_; // Spdy Frame state. - spdy::BufferedSpdyFramer buffered_spdy_framer_; + scoped_ptr<spdy::BufferedSpdyFramer> buffered_spdy_framer_; // If an error has occurred on the session, the session is effectively // dead. Record this error here. When no error has occurred, |error_| will |