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 OnAuthBytesWritten(int result);
     28   void OnAuthBytesRead(int result);
     29 
     30   void CallDoneCallback();
     31 
     32   int result_;
     33   bool async_;
     34 
     35   scoped_ptr<net::StreamSocket> socket_;
     36   DoneCallback done_callback_;
     37 
     38   bool did_read_bytes_;
     39   bool did_write_bytes_;
     40 
     41   base::WeakPtrFactory<FakeChannelAuthenticator> weak_factory_;
     42 
     43   DISALLOW_COPY_AND_ASSIGN(FakeChannelAuthenticator);
     44 };
     45 
     46 class FakeAuthenticator : public Authenticator {
     47  public:
     48   enum Type {
     49     HOST,
     50     CLIENT,
     51   };
     52 
     53   enum Action {
     54     ACCEPT,
     55     REJECT,
     56     REJECT_CHANNEL
     57   };
     58 
     59   FakeAuthenticator(Type type, int round_trips, Action action, bool async);
     60 
     61   virtual ~FakeAuthenticator();
     62 
     63   // Set the number of messages that the authenticator needs to process before
     64   // started() returns true.  Default to 0.
     65   void set_messages_till_started(int messages);
     66 
     67   // Authenticator interface.
     68   virtual State state() const OVERRIDE;
     69   virtual bool started() const OVERRIDE;
     70   virtual RejectionReason rejection_reason() const OVERRIDE;
     71   virtual void ProcessMessage(const buzz::XmlElement* message,
     72                               const base::Closure& resume_callback) OVERRIDE;
     73   virtual scoped_ptr<buzz::XmlElement> GetNextMessage() OVERRIDE;
     74   virtual scoped_ptr<ChannelAuthenticator>
     75       CreateChannelAuthenticator() const OVERRIDE;
     76 
     77  protected:
     78   Type type_;
     79   int round_trips_;
     80   Action action_;
     81   bool async_;
     82 
     83   // Total number of messages that have been processed.
     84   int messages_;
     85   // Number of messages that the authenticator needs to process before started()
     86   // returns true.  Default to 0.
     87   int messages_till_started_;
     88 
     89   DISALLOW_COPY_AND_ASSIGN(FakeAuthenticator);
     90 };
     91 
     92 class FakeHostAuthenticatorFactory : public AuthenticatorFactory {
     93  public:
     94   FakeHostAuthenticatorFactory(
     95       int round_trips, int messages_till_start,
     96       FakeAuthenticator::Action action, bool async);
     97   virtual ~FakeHostAuthenticatorFactory();
     98 
     99   // AuthenticatorFactory interface.
    100   virtual scoped_ptr<Authenticator> CreateAuthenticator(
    101       const std::string& local_jid,
    102       const std::string& remote_jid,
    103       const buzz::XmlElement* first_message) OVERRIDE;
    104 
    105  private:
    106   int round_trips_;
    107   int messages_till_started_;
    108   FakeAuthenticator::Action action_;
    109   bool async_;
    110 
    111   DISALLOW_COPY_AND_ASSIGN(FakeHostAuthenticatorFactory);
    112 };
    113 
    114 }  // namespace protocol
    115 }  // namespace remoting
    116 
    117 #endif  // REMOTING_PROTOCOL_FAKE_AUTHENTICATOR_H_
    118