17d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// Copyright (c) 2012 The Chromium Authors. All rights reserved.
27d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// Use of this source code is governed by a BSD-style license that can be
37d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// found in the LICENSE file.
47d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
57d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef REMOTING_PROTOCOL_FAKE_SESSION_H_
67d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#define REMOTING_PROTOCOL_FAKE_SESSION_H_
77d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
87d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include <map>
97d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include <string>
107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include <vector>
117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "base/memory/scoped_ptr.h"
137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "base/memory/weak_ptr.h"
147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "net/base/completion_callback.h"
157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "net/socket/socket.h"
167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "net/socket/stream_socket.h"
177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "remoting/protocol/channel_factory.h"
187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "remoting/protocol/session.h"
197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodnamespace base {
217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodclass MessageLoop;
227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}
237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodnamespace remoting {
257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodnamespace protocol {
267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodextern const char kTestJid[];
28ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod
297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// FakeSocket implement net::Socket interface for FakeConnection. All data
307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// written to FakeSocket is stored in a buffer returned by written_data().
317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// Read() reads data from another buffer that can be set with AppendInputData().
327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// Pending reads are supported, so if there is a pending read AppendInputData()
3371ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod// calls the read callback.
342f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod//
357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// Two fake sockets can be connected to each other using the
362f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod// PairWith() method, e.g.: a->PairWith(b). After this all data
377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// written to |a| can be read from |b| and vica versa. Two connected
387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// sockets |a| and |b| must be created and used on the same thread.
397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodclass FakeSocket : public net::StreamSocket {
407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod public:
417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  FakeSocket();
427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual ~FakeSocket();
437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  const std::string& written_data() const { return written_data_; }
457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
460beb66e3a61ae8bb1fa66e54b1ff1abb2f8711e9Behdad Esfahbod  void set_write_limit(int write_limit) { write_limit_ = write_limit; }
477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void set_async_write(bool async_write) { async_write_ = async_write; }
487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void set_next_write_error(int error) { next_write_error_ = error; }
497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void set_next_read_error(int error) { next_read_error_ = error; }
507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void AppendInputData(const std::vector<char>& data);
517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void PairWith(FakeSocket* peer_socket);
520beb66e3a61ae8bb1fa66e54b1ff1abb2f8711e9Behdad Esfahbod  int input_pos() const { return input_pos_; }
537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  bool read_pending() const { return read_pending_; }
547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  // net::Socket implementation.
567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual int Read(net::IOBuffer* buf, int buf_len,
577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod                   const net::CompletionCallback& callback) OVERRIDE;
587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual int Write(net::IOBuffer* buf, int buf_len,
597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod                    const net::CompletionCallback& callback) OVERRIDE;
607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual bool SetReceiveBufferSize(int32 size) OVERRIDE;
627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual bool SetSendBufferSize(int32 size) OVERRIDE;
637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
64ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  // net::StreamSocket interface.
65ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual int Connect(const net::CompletionCallback& callback) OVERRIDE;
66ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual void Disconnect() OVERRIDE;
67ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual bool IsConnected() const OVERRIDE;
68ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual bool IsConnectedAndIdle() const OVERRIDE;
69ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual int GetPeerAddress(net::IPEndPoint* address) const OVERRIDE;
70ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual int GetLocalAddress(net::IPEndPoint* address) const OVERRIDE;
71ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual const net::BoundNetLog& NetLog() const OVERRIDE;
72ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual void SetSubresourceSpeculation() OVERRIDE;
73ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual void SetOmniboxSpeculation() OVERRIDE;
74ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod  virtual bool WasEverUsed() const OVERRIDE;
757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual bool UsingTCPFastOpen() const OVERRIDE;
767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual bool WasNpnNegotiated() const OVERRIDE;
777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual net::NextProto GetNegotiatedProtocol() const OVERRIDE;
787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  virtual bool GetSSLInfo(net::SSLInfo* ssl_info) OVERRIDE;
797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
80ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod private:
817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void DoAsyncWrite(scoped_refptr<net::IOBuffer> buf, int buf_len,
827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod                    const net::CompletionCallback& callback);
837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  void DoWrite(net::IOBuffer* buf, int buf_len);
847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  bool async_write_;
867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  bool write_pending_;
877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  int write_limit_;
887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  int next_write_error_;
897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  int next_read_error_;
910beb66e3a61ae8bb1fa66e54b1ff1abb2f8711e9Behdad Esfahbod  bool read_pending_;
922f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  scoped_refptr<net::IOBuffer> read_buffer_;
932f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  int read_buffer_size_;
947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  net::CompletionCallback read_callback_;
957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  base::WeakPtr<FakeSocket> peer_socket_;
967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  std::string written_data_;
987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  std::string input_data_;
997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  int input_pos_;
1007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
1017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  net::BoundNetLog net_log_;
1027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
1037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  base::MessageLoop* message_loop_;
1047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  base::WeakPtrFactory<FakeSocket> weak_factory_;
1057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
1067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  DISALLOW_COPY_AND_ASSIGN(FakeSocket);
1077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod};
1087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod
1097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// FakeUdpSocket is similar to FakeSocket but behaves as UDP socket. All written
1107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// packets are stored separetely in written_packets(). AppendInputPacket() adds
1117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// one packet that will be returned by Read().
1127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodclass FakeUdpSocket : public net::Socket {
1137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod public:
1147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod  FakeUdpSocket();
1152f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual ~FakeUdpSocket();
1162f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1172f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  const std::vector<std::string>& written_packets() const {
1187d52e6601f0e695690cd168a288466746cf25300Behdad Esfahbod    return written_packets_;
1192f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  }
12071ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod
12171ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  void AppendInputPacket(const char* data, int data_size);
12271ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  int input_pos() const { return input_pos_; }
12371ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod
12471ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  // net::Socket implementation.
1252f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual int Read(net::IOBuffer* buf, int buf_len,
12671ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod                   const net::CompletionCallback& callback) OVERRIDE;
1272f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual int Write(net::IOBuffer* buf, int buf_len,
1282f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod                    const net::CompletionCallback& callback) OVERRIDE;
1292f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1302f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual bool SetReceiveBufferSize(int32 size) OVERRIDE;
1312f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual bool SetSendBufferSize(int32 size) OVERRIDE;
1322f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1332f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod private:
1342f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  bool read_pending_;
1352f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  scoped_refptr<net::IOBuffer> read_buffer_;
1362f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  int read_buffer_size_;
1372f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  net::CompletionCallback read_callback_;
1382f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1392f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  std::vector<std::string> written_packets_;
1402f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  std::vector<std::string> input_packets_;
141b7115b63be72e109b51f538ba581aed1017b2d55Behdad Esfahbod  int input_pos_;
1422f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1432f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  base::MessageLoop* message_loop_;
1442f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1452f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  DISALLOW_COPY_AND_ASSIGN(FakeUdpSocket);
1462f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod};
14771ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod
14871ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod// FakeSession is a dummy protocol::Session that uses FakeSocket for all
1492f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod// channels.
1502f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbodclass FakeSession : public Session,
1512f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod                    public ChannelFactory {
1522f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod public:
1532f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  FakeSession();
15471ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  virtual ~FakeSession();
1552f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
15671ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  EventHandler* event_handler() { return event_handler_; }
1572f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1582f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  void set_async_creation(bool async_creation) {
1592f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod    async_creation_ = async_creation;
1602f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  }
1612f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1622f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  void set_error(ErrorCode error) { error_ = error; }
1632f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1642f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  bool is_closed() const { return closed_; }
16571ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod
1662f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  FakeSocket* GetStreamChannel(const std::string& name);
1672f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  FakeUdpSocket* GetDatagramChannel(const std::string& name);
1682f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1692f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  // Session interface.
1702f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual void SetEventHandler(EventHandler* event_handler) OVERRIDE;
1712f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual ErrorCode error() OVERRIDE;
1722f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual const std::string& jid() OVERRIDE;
17371ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  virtual const CandidateSessionConfig* candidate_config() OVERRIDE;
17471ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  virtual const SessionConfig& config() OVERRIDE;
17571ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod  virtual void set_config(const SessionConfig& config) OVERRIDE;
1762f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual ChannelFactory* GetTransportChannelFactory() OVERRIDE;
1772f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual ChannelFactory* GetMultiplexedChannelFactory() OVERRIDE;
1782f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual void Close() OVERRIDE;
1792f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1802f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  // ChannelFactory interface.
1812f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual void CreateStreamChannel(
1822f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const std::string& name,
1832f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const StreamChannelCallback& callback) OVERRIDE;
1842f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual void CreateDatagramChannel(
1852f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const std::string& name,
1862f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const DatagramChannelCallback& callback) OVERRIDE;
1872f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  virtual void CancelChannelCreation(const std::string& name) OVERRIDE;
1882f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1892f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod public:
1902f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  void NotifyStreamChannelCallback(
1912f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const std::string& name,
1924c1d9244617e472464722e64d2cdbc1f9e8827f6Behdad Esfahbod      const StreamChannelCallback& callback);
1932f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  void NotifyDatagramChannelCallback(
1942f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const std::string& name,
1952f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod      const DatagramChannelCallback& callback);
1962f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
1972f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  EventHandler* event_handler_;
1982f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  scoped_ptr<const CandidateSessionConfig> candidate_config_;
1992f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  SessionConfig config_;
2002f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  base::MessageLoop* message_loop_;
2012f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
2022f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  bool async_creation_;
2032f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
2042f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  std::map<std::string, FakeSocket*> stream_channels_;
2052f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  std::map<std::string, FakeUdpSocket*> datagram_channels_;
2062f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
2072f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  std::string jid_;
2082f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
2092f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  ErrorCode error_;
2102f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  bool closed_;
2112f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod
2122f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  base::WeakPtrFactory<FakeSession> weak_factory_;
21371ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfdBehdad Esfahbod
2142f7586c6229096143ca0a96712a27416ee0d3c85Behdad Esfahbod  DISALLOW_COPY_AND_ASSIGN(FakeSession);
2157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod};
216
217}  // namespace protocol
218}  // namespace remoting
219
220#endif  // REMOTING_PROTOCOL_FAKE_SESSION_H_
221