// Copyright (c) 2012 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 REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
#define REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "remoting/protocol/authenticator.h"
#include "remoting/protocol/channel_authenticator.h"
namespace remoting {
namespace protocol {
class FakeChannelAuthenticator : public ChannelAuthenticator {
public:
FakeChannelAuthenticator(bool accept, bool async);
virtual ~FakeChannelAuthenticator();
// ChannelAuthenticator interface.
virtual void SecureAndAuthenticate(
scoped_ptr<net::StreamSocket> socket,
const DoneCallback& done_callback) OVERRIDE;
private:
void CallCallback(
net::Error error,
scoped_ptr<net::StreamSocket> socket);
void OnAuthBytesWritten(int result);
void OnAuthBytesRead(int result);
net::Error result_;
bool async_;
scoped_ptr<net::StreamSocket> socket_;
DoneCallback done_callback_;
bool did_read_bytes_;
bool did_write_bytes_;
base::WeakPtrFactory<FakeChannelAuthenticator> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(FakeChannelAuthenticator);
};
class FakeAuthenticator : public Authenticator {
public:
enum Type {
HOST,
CLIENT,
};
enum Action {
ACCEPT,
REJECT,
REJECT_CHANNEL
};
FakeAuthenticator(Type type, int round_trips, Action action, bool async);
virtual ~FakeAuthenticator();
// Authenticator interface.
virtual State state() const OVERRIDE;
virtual RejectionReason rejection_reason() const OVERRIDE;
virtual void ProcessMessage(const buzz::XmlElement* message,
const base::Closure& resume_callback) OVERRIDE;
virtual scoped_ptr<buzz::XmlElement> GetNextMessage() OVERRIDE;
virtual scoped_ptr<ChannelAuthenticator>
CreateChannelAuthenticator() const OVERRIDE;
protected:
Type type_;
int round_trips_;
Action action_;
bool async_;
// Total number of messages that have been processed.
int messages_;
DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator);
};
class FakeHostAuthenticatorFactory : public AuthenticatorFactory {
public:
FakeHostAuthenticatorFactory(
int round_trips, FakeAuthenticator::Action action, bool async);
virtual ~FakeHostAuthenticatorFactory();
// AuthenticatorFactory interface.
virtual scoped_ptr<Authenticator> CreateAuthenticator(
const std::string& local_jid,
const std::string& remote_jid,
const buzz::XmlElement* first_message) OVERRIDE;
private:
int round_trips_;
FakeAuthenticator::Action action_;
bool async_;
DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory);
};
} // namespace protocol
} // namespace remoting
#endif // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_