// 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); ~FakeChannelAuthenticator() override; // ChannelAuthenticator interface. void SecureAndAuthenticate(scoped_ptr socket, const DoneCallback& done_callback) override; private: void OnAuthBytesWritten(int result); void OnAuthBytesRead(int result); void CallDoneCallback(); int result_; bool async_; scoped_ptr socket_; DoneCallback done_callback_; bool did_read_bytes_; bool did_write_bytes_; base::WeakPtrFactory 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); ~FakeAuthenticator() override; // Set the number of messages that the authenticator needs to process before // started() returns true. Default to 0. void set_messages_till_started(int messages); // Authenticator interface. State state() const override; bool started() const override; RejectionReason rejection_reason() const override; void ProcessMessage(const buzz::XmlElement* message, const base::Closure& resume_callback) override; scoped_ptr GetNextMessage() override; scoped_ptr CreateChannelAuthenticator() const override; protected: Type type_; int round_trips_; Action action_; bool async_; // Total number of messages that have been processed. int messages_; // Number of messages that the authenticator needs to process before started() // returns true. Default to 0. int messages_till_started_; DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator); }; class FakeHostAuthenticatorFactory : public AuthenticatorFactory { public: FakeHostAuthenticatorFactory( int round_trips, int messages_till_start, FakeAuthenticator::Action action, bool async); ~FakeHostAuthenticatorFactory() override; // AuthenticatorFactory interface. scoped_ptr CreateAuthenticator( const std::string& local_jid, const std::string& remote_jid, const buzz::XmlElement* first_message) override; private: int round_trips_; int messages_till_started_; FakeAuthenticator::Action action_; bool async_; DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory); }; } // namespace protocol } // namespace remoting #endif // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_