15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/protocol/authenticator.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/protocol/channel_authenticator.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace protocol { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeChannelAuthenticator : public ChannelAuthenticator { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeChannelAuthenticator(bool accept, bool async); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeChannelAuthenticator(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChannelAuthenticator interface. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SecureAndAuthenticate( 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::StreamSocket> socket, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DoneCallback& done_callback) OVERRIDE; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CallCallback( 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::Error error, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::StreamSocket> socket); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAuthBytesWritten(int result); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAuthBytesRead(int result); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::Error result_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::StreamSocket> socket_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoneCallback done_callback_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_read_bytes_; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_write_bytes_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<FakeChannelAuthenticator> weak_factory_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeChannelAuthenticator); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeAuthenticator : public Authenticator { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HOST, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CLIENT, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Action { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACCEPT, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) REJECT, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) REJECT_CHANNEL 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeAuthenticator(Type type, int round_trips, Action action, bool async); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeAuthenticator(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Authenticator interface. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual State state() const OVERRIDE; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RejectionReason rejection_reason() const OVERRIDE; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ProcessMessage(const buzz::XmlElement* message, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& resume_callback) OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<buzz::XmlElement> GetNextMessage() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<ChannelAuthenticator> 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateChannelAuthenticator() const OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int round_trips_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Action action_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Total number of messages that have been processed. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int messages_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeHostAuthenticatorFactory : public AuthenticatorFactory { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeHostAuthenticatorFactory( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int round_trips, FakeAuthenticator::Action action, bool async); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeHostAuthenticatorFactory(); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AuthenticatorFactory interface. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<Authenticator> CreateAuthenticator( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& local_jid, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& remote_jid, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const buzz::XmlElement* first_message) OVERRIDE; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int round_trips_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeAuthenticator::Action action_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace protocol 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_ 109