1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef NET_QUIC_QUIC_CLIENT_SESSION_BASE_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define NET_QUIC_QUIC_CLIENT_SESSION_BASE_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "net/quic/quic_crypto_client_stream.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "net/quic/quic_session.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace net {
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Base class for all client-specific QuicSession subclasses.
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass NET_EXPORT_PRIVATE QuicClientSessionBase : public QuicSession {
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  QuicClientSessionBase(QuicConnection* connection,
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                        const QuicConfig& config);
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~QuicClientSessionBase();
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called when the proof in |cached| is marked valid.  If this is a secure
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // QUIC session, then this will happen only after the proof verifier
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // completes.  If this is an insecure QUIC connection, this will happen
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // as soon as a valid config is discovered (either from the cache or
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // from the server).
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnProofValid(
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const QuicCryptoClientConfig::CachedState& cached) = 0;
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called when proof verification details become available, either because
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // proof verification is complete, or when cached details are used. This
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // will only be called for secure QUIC connections.
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnProofVerifyDetailsAvailable(
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const ProofVerifyDetails& verify_details) = 0;
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Override base class to set FEC policy before any data is sent by client.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnCryptoHandshakeEvent(CryptoHandshakeEvent event) OVERRIDE;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(QuicClientSessionBase);
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace net
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // NET_QUIC_QUIC_CLIENT_SESSION_BASE_H_
45