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