Home | History | Annotate | Download | only in protocol
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
      6 #define REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "remoting/protocol/authenticator.h"
     11 #include "remoting/protocol/channel_authenticator.h"
     12 
     13 namespace remoting {
     14 namespace protocol {
     15 
     16 class FakeChannelAuthenticator : public ChannelAuthenticator {
     17  public:
     18   FakeChannelAuthenticator(bool accept, bool async);
     19   virtual ~FakeChannelAuthenticator();
     20 
     21   // ChannelAuthenticator interface.
     22   virtual void SecureAndAuthenticate(
     23       scoped_ptr<net::StreamSocket> socket,
     24       const DoneCallback& done_callback) OVERRIDE;
     25 
     26  private:
     27   void CallCallback(
     28       net::Error error,
     29       scoped_ptr<net::StreamSocket> socket);
     30 
     31   void OnAuthBytesWritten(int result);
     32   void OnAuthBytesRead(int result);
     33 
     34   net::Error result_;
     35   bool async_;
     36 
     37   scoped_ptr<net::StreamSocket> socket_;
     38   DoneCallback done_callback_;
     39 
     40   bool did_read_bytes_;
     41   bool did_write_bytes_;
     42 
     43   base::WeakPtrFactory<FakeChannelAuthenticator> weak_factory_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(FakeChannelAuthenticator);
     46 };
     47 
     48 class FakeAuthenticator : public Authenticator {
     49  public:
     50   enum Type {
     51     HOST,
     52     CLIENT,
     53   };
     54 
     55   enum Action {
     56     ACCEPT,
     57     REJECT,
     58     REJECT_CHANNEL
     59   };
     60 
     61   FakeAuthenticator(Type type, int round_trips, Action action, bool async);
     62   virtual ~FakeAuthenticator();
     63 
     64   // Authenticator interface.
     65   virtual State state() const OVERRIDE;
     66   virtual RejectionReason rejection_reason() const OVERRIDE;
     67   virtual void ProcessMessage(const buzz::XmlElement* message,
     68                               const base::Closure& resume_callback) OVERRIDE;
     69   virtual scoped_ptr<buzz::XmlElement> GetNextMessage() OVERRIDE;
     70   virtual scoped_ptr<ChannelAuthenticator>
     71       CreateChannelAuthenticator() const OVERRIDE;
     72 
     73  protected:
     74   Type type_;
     75   int round_trips_;
     76   Action action_;
     77   bool async_;
     78 
     79   // Total number of messages that have been processed.
     80   int messages_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator);
     83 };
     84 
     85 class FakeHostAuthenticatorFactory : public AuthenticatorFactory {
     86  public:
     87   FakeHostAuthenticatorFactory(
     88       int round_trips, FakeAuthenticator::Action action, bool async);
     89   virtual ~FakeHostAuthenticatorFactory();
     90 
     91   // AuthenticatorFactory interface.
     92   virtual scoped_ptr<Authenticator> CreateAuthenticator(
     93       const std::string& local_jid,
     94       const std::string& remote_jid,
     95       const buzz::XmlElement* first_message) OVERRIDE;
     96 
     97  private:
     98   int round_trips_;
     99   FakeAuthenticator::Action action_;
    100   bool async_;
    101 
    102   DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory);
    103 };
    104 
    105 }  // namespace protocol
    106 }  // namespace remoting
    107 
    108 #endif  // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
    109