| Index: net/quic/quic_client_session.cc
|
| diff --git a/net/quic/quic_client_session.cc b/net/quic/quic_client_session.cc
|
| index cf101c6066bf30615362e10fb3439277cda36f96..fd3c8273f2aaccbb2ebb6464e2fe7dac59ab3b83 100644
|
| --- a/net/quic/quic_client_session.cc
|
| +++ b/net/quic/quic_client_session.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "net/quic/quic_client_session.h"
|
|
|
| +#include "net/base/net_errors.h"
|
| +
|
| namespace net {
|
|
|
| QuicClientSession::QuicClientSession(QuicConnection* connection)
|
| @@ -12,6 +14,7 @@ QuicClientSession::QuicClientSession(QuicConnection* connection)
|
| }
|
|
|
| QuicClientSession::~QuicClientSession() {
|
| + STLDeleteValues(&streams_);
|
| }
|
|
|
| QuicReliableClientStream* QuicClientSession::CreateOutgoingReliableStream() {
|
| @@ -26,6 +29,7 @@ QuicReliableClientStream* QuicClientSession::CreateOutgoingReliableStream() {
|
| }
|
| QuicReliableClientStream* stream =
|
| new QuicReliableClientStream(GetNextStreamId(), this);
|
| + streams_[stream->id()] = stream;
|
|
|
| ActivateStream(stream);
|
| return stream;
|
| @@ -35,10 +39,17 @@ QuicCryptoClientStream* QuicClientSession::GetCryptoStream() {
|
| return &crypto_stream_;
|
| };
|
|
|
| -void QuicClientSession::CryptoConnect() {
|
| +int QuicClientSession::CryptoConnect(const CompletionCallback& callback) {
|
| CryptoHandshakeMessage message;
|
| message.tag = kCHLO;
|
| crypto_stream_.SendHandshakeMessage(message);
|
| +
|
| + if (IsCryptoHandshakeComplete()) {
|
| + return OK;
|
| + }
|
| +
|
| + callback_ = callback;
|
| + return ERR_IO_PENDING;
|
| }
|
|
|
| ReliableQuicStream* QuicClientSession::CreateIncomingReliableStream(
|
| @@ -47,4 +58,22 @@ ReliableQuicStream* QuicClientSession::CreateIncomingReliableStream(
|
| return NULL;
|
| }
|
|
|
| +void QuicClientSession::CloseStream(QuicStreamId stream_id) {
|
| + QuicSession::CloseStream(stream_id);
|
| +
|
| + StreamMap::iterator it = streams_.find(stream_id);
|
| + DCHECK(it != streams_.end());
|
| + if (it != streams_.end()) {
|
| + ReliableQuicStream* stream = it->second;
|
| + streams_.erase(it);
|
| + delete stream;
|
| + }
|
| +}
|
| +
|
| +void QuicClientSession::OnCryptoHandshakeComplete(QuicErrorCode error) {
|
| + if (!callback_.is_null()) {
|
| + callback_.Run(error == QUIC_NO_ERROR ? OK : ERR_UNEXPECTED);
|
| + }
|
| +}
|
| +
|
| } // namespace net
|
|
|