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 OnAuthBytesWritten(int result); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAuthBytesRead(int result); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CallDoneCallback(); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int result_; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::StreamSocket> socket_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoneCallback done_callback_; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_read_bytes_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_write_bytes_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<FakeChannelAuthenticator> weak_factory_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeChannelAuthenticator); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeAuthenticator : public Authenticator { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HOST, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CLIENT, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Action { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACCEPT, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) REJECT, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) REJECT_CHANNEL 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeAuthenticator(Type type, int round_trips, Action action, bool async); 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeAuthenticator(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Set the number of messages that the authenticator needs to process before 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // started() returns true. Default to 0. 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void set_messages_till_started(int messages); 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Authenticator interface. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual State state() const OVERRIDE; 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool started() const OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RejectionReason rejection_reason() const OVERRIDE; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ProcessMessage(const buzz::XmlElement* message, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& resume_callback) OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<buzz::XmlElement> GetNextMessage() OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<ChannelAuthenticator> 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateChannelAuthenticator() const OVERRIDE; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type_; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int round_trips_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Action action_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Total number of messages that have been processed. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int messages_; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Number of messages that the authenticator needs to process before started() 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // returns true. Default to 0. 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int messages_till_started_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeHostAuthenticatorFactory : public AuthenticatorFactory { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeHostAuthenticatorFactory( 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int round_trips, int messages_till_start, 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FakeAuthenticator::Action action, bool async); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeHostAuthenticatorFactory(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AuthenticatorFactory interface. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_ptr<Authenticator> CreateAuthenticator( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& local_jid, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& remote_jid, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const buzz::XmlElement* first_message) OVERRIDE; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int round_trips_; 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int messages_till_started_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeAuthenticator::Action action_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool async_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace protocol 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_ 118