1// Copyright 2013 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#ifndef NET_QUIC_CRYPTO_LOCAL_STRIKE_REGISTER_CLIENT_H_
6#define NET_QUIC_CRYPTO_LOCAL_STRIKE_REGISTER_CLIENT_H_
7
8#include "base/basictypes.h"
9#include "base/strings/string_piece.h"
10#include "base/synchronization/lock.h"
11#include "net/base/net_export.h"
12#include "net/quic/crypto/strike_register.h"
13#include "net/quic/crypto/strike_register_client.h"
14#include "net/quic/quic_time.h"
15
16namespace net {
17
18// StrikeRegisterClient implementation that wraps a local in-memory
19// strike register.
20class NET_EXPORT_PRIVATE LocalStrikeRegisterClient
21    : public StrikeRegisterClient {
22 public:
23  LocalStrikeRegisterClient(unsigned max_entries,
24                            uint32 current_time_external,
25                            uint32 window_secs,
26                            const uint8 orbit[8],
27                            StrikeRegister::StartupType startup);
28
29  virtual bool IsKnownOrbit(base::StringPiece orbit) const OVERRIDE;
30  virtual void VerifyNonceIsValidAndUnique(base::StringPiece nonce,
31                                           QuicWallTime now,
32                                           ResultCallback* cb) OVERRIDE;
33
34 private:
35  mutable base::Lock m_;
36  StrikeRegister strike_register_;
37
38  DISALLOW_COPY_AND_ASSIGN(LocalStrikeRegisterClient);
39};
40
41}  // namespace net
42
43#endif  // NET_QUIC_CRYPTO_LOCAL_STRIKE_REGISTER_CLIENT_H_
44