// 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_