C++程序  |  59行  |  1.67 KB

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_QUIC_CRYPTO_STRIKE_REGISTER_CLIENT_H_
#define NET_QUIC_CRYPTO_STRIKE_REGISTER_CLIENT_H_

#include <string>

#include "base/basictypes.h"
#include "base/strings/string_piece.h"
#include "net/base/net_export.h"
#include "net/quic/quic_time.h"

namespace net {

// Interface implemented by clients that talk to strike registers
// implemented as local or remote services.
class NET_EXPORT_PRIVATE StrikeRegisterClient {
 public:
  // Single use callback that will be invoked once the validation
  // operation is complete.
  class NET_EXPORT_PRIVATE ResultCallback {
   public:
    ResultCallback() {}
    virtual ~ResultCallback() {}
    void Run(bool nonce_is_valid_and_unique) {
      RunImpl(nonce_is_valid_and_unique);
      delete this;
    }

   protected:
    virtual void RunImpl(bool nonce_is_valid_and_unique) = 0;

   private:
    DISALLOW_COPY_AND_ASSIGN(ResultCallback);
  };

  StrikeRegisterClient() {}
  virtual ~StrikeRegisterClient() {}

  // Returns true iff the strike register knows about the given orbit.
  virtual bool IsKnownOrbit(base::StringPiece orbit) const = 0;
  // Validate a nonce for freshness and uniqueness.
  // Will invoke cb->Run(ValidateResponse::nonce_is_valid_and_unique())
  // once the asynchronous operation is complete.
  virtual void VerifyNonceIsValidAndUnique(
      base::StringPiece nonce,
      QuicWallTime now,
      ResultCallback* cb) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(StrikeRegisterClient);
};

}  // namespace net

#endif  // NET_QUIC_CRYPTO_STRIKE_REGISTER_CLIENT_H_