| Index: remoting/protocol/protocol_test_client.cc
|
| diff --git a/remoting/protocol/protocol_test_client.cc b/remoting/protocol/protocol_test_client.cc
|
| deleted file mode 100644
|
| index aa35ba572736ba78dddc0b35e12de56823cdd499..0000000000000000000000000000000000000000
|
| --- a/remoting/protocol/protocol_test_client.cc
|
| +++ /dev/null
|
| @@ -1,367 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "build/build_config.h"
|
| -
|
| -#if !defined(OS_WIN)
|
| -extern "C" {
|
| -#include <unistd.h>
|
| -}
|
| -#endif // !defined(OS_WIN)
|
| -
|
| -#include <iostream>
|
| -#include <list>
|
| -
|
| -#include "base/at_exit.h"
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/message_loop_proxy.h"
|
| -#include "base/test/mock_chrome_application_mac.h"
|
| -#include "base/time.h"
|
| -#include "crypto/nss_util.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/socket/socket.h"
|
| -#include "remoting/base/constants.h"
|
| -#include "remoting/jingle_glue/jingle_thread.h"
|
| -#include "remoting/jingle_glue/xmpp_signal_strategy.h"
|
| -#include "remoting/protocol/jingle_session_manager.h"
|
| -
|
| -namespace remoting {
|
| -namespace protocol {
|
| -
|
| -namespace {
|
| -const int kBufferSize = 4096;
|
| -const char kDummyAuthToken[] = "";
|
| -} // namespace
|
| -
|
| -class ProtocolTestClient;
|
| -
|
| -class ProtocolTestConnection
|
| - : public base::RefCountedThreadSafe<ProtocolTestConnection> {
|
| - public:
|
| - ProtocolTestConnection(ProtocolTestClient* client)
|
| - : client_(client),
|
| - message_loop_(MessageLoop::current()),
|
| - session_(NULL),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - write_cb_(this, &ProtocolTestConnection::OnWritten)),
|
| - pending_write_(false),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - read_cb_(this, &ProtocolTestConnection::OnRead)) {
|
| - }
|
| -
|
| - virtual ~ProtocolTestConnection() {}
|
| -
|
| - void Init(Session* session);
|
| - void Write(const std::string& str);
|
| - void Read();
|
| - void Close();
|
| -
|
| - // Session::Callback interface.
|
| - virtual void OnStateChange(Session::State state);
|
| - private:
|
| - void DoWrite(scoped_refptr<net::IOBuffer> buf, int size);
|
| - void DoRead();
|
| -
|
| - void HandleReadResult(int result);
|
| -
|
| - void OnWritten(int result);
|
| - void OnRead(int result);
|
| -
|
| - ProtocolTestClient* client_;
|
| - MessageLoop* message_loop_;
|
| - scoped_ptr<Session> session_;
|
| - net::OldCompletionCallbackImpl<ProtocolTestConnection> write_cb_;
|
| - bool pending_write_;
|
| - net::OldCompletionCallbackImpl<ProtocolTestConnection> read_cb_;
|
| - scoped_refptr<net::IOBuffer> read_buffer_;
|
| -};
|
| -
|
| -class ProtocolTestClient
|
| - : public SignalStrategy::StatusObserver,
|
| - public SessionManager::Listener,
|
| - public base::RefCountedThreadSafe<ProtocolTestClient> {
|
| - public:
|
| - ProtocolTestClient() {
|
| - }
|
| -
|
| - virtual ~ProtocolTestClient() {}
|
| -
|
| - void Run(const std::string& username, const std::string& auth_token,
|
| - const std::string& auth_service, const std::string& host_jid);
|
| -
|
| - void OnConnectionClosed(ProtocolTestConnection* connection);
|
| -
|
| - // SignalStrategy::StatusObserver interface.
|
| - virtual void OnStateChange(
|
| - SignalStrategy::StatusObserver::State state) OVERRIDE;
|
| - virtual void OnJidChange(const std::string& full_jid) OVERRIDE;
|
| -
|
| - // SessionManager::Listener interface.
|
| - virtual void OnSessionManagerInitialized() OVERRIDE;
|
| - virtual void OnIncomingSession(
|
| - Session* session,
|
| - SessionManager::IncomingSessionResponse* response) OVERRIDE;
|
| -
|
| - private:
|
| - typedef std::list<scoped_refptr<ProtocolTestConnection> > ConnectionsList;
|
| -
|
| - std::string host_jid_;
|
| - scoped_ptr<SignalStrategy> signal_strategy_;
|
| - std::string local_jid_;
|
| - scoped_ptr<JingleSessionManager> session_manager_;
|
| - ConnectionsList connections_;
|
| - base::Lock connections_lock_;
|
| -};
|
| -
|
| -
|
| -void ProtocolTestConnection::Init(Session* session) {
|
| - session_.reset(session);
|
| -}
|
| -
|
| -void ProtocolTestConnection::Write(const std::string& str) {
|
| - if (str.empty())
|
| - return;
|
| -
|
| - scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(str.length()));
|
| - memcpy(buf->data(), str.c_str(), str.length());
|
| - message_loop_->PostTask(
|
| - FROM_HERE, base::Bind(&ProtocolTestConnection::DoWrite,
|
| - this, buf, str.length()));
|
| -}
|
| -
|
| -void ProtocolTestConnection::DoWrite(
|
| - scoped_refptr<net::IOBuffer> buf, int size) {
|
| - if (pending_write_) {
|
| - LOG(ERROR) << "Cannot write because there is another pending write.";
|
| - return;
|
| - }
|
| -
|
| - net::Socket* channel = session_->event_channel();
|
| - if (channel != NULL) {
|
| - int result = channel->Write(buf, size, &write_cb_);
|
| - if (result < 0) {
|
| - if (result == net::ERR_IO_PENDING)
|
| - pending_write_ = true;
|
| - else
|
| - LOG(ERROR) << "Write() returned error " << result;
|
| - }
|
| - } else {
|
| - LOG(ERROR) << "Cannot write because the channel isn't intialized yet.";
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestConnection::Read() {
|
| - message_loop_->PostTask(
|
| - FROM_HERE, base::Bind(&ProtocolTestConnection::DoRead, this));
|
| -}
|
| -
|
| -void ProtocolTestConnection::DoRead() {
|
| - read_buffer_ = new net::IOBuffer(kBufferSize);
|
| - while (true) {
|
| - int result = session_->event_channel()->Read(
|
| - read_buffer_, kBufferSize, &read_cb_);
|
| - if (result < 0) {
|
| - if (result != net::ERR_IO_PENDING)
|
| - LOG(ERROR) << "Read failed: " << result;
|
| - break;
|
| - } else {
|
| - HandleReadResult(result);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestConnection::Close() {
|
| - session_->Close();
|
| -}
|
| -
|
| -void ProtocolTestConnection::OnStateChange(Session::State state) {
|
| - LOG(INFO) << "State of " << session_->jid() << " changed to " << state;
|
| - if (state == Session::CONNECTED) {
|
| - // Start reading after we've connected.
|
| - Read();
|
| - } else if (state == Session::CLOSED) {
|
| - std::cerr << "Connection to " << session_->jid()
|
| - << " closed" << std::endl;
|
| - client_->OnConnectionClosed(this);
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestConnection::OnWritten(int result) {
|
| - pending_write_ = false;
|
| - if (result < 0)
|
| - LOG(ERROR) << "Write() returned error " << result;
|
| -}
|
| -
|
| -void ProtocolTestConnection::OnRead(int result) {
|
| - HandleReadResult(result);
|
| - DoRead();
|
| -}
|
| -
|
| -void ProtocolTestConnection::HandleReadResult(int result) {
|
| - if (result > 0) {
|
| - std::string str(reinterpret_cast<const char*>(read_buffer_->data()),
|
| - result);
|
| - std::cout << "(" << session_->jid() << "): " << str << std::endl;
|
| - } else {
|
| - LOG(ERROR) << "Read() returned error " << result;
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestClient::Run(const std::string& username,
|
| - const std::string& auth_token,
|
| - const std::string& auth_service,
|
| - const std::string& host_jid) {
|
| - remoting::JingleThread jingle_thread;
|
| - jingle_thread.Start();
|
| -
|
| - signal_strategy_.reset(
|
| - new XmppSignalStrategy(&jingle_thread, username, auth_token,
|
| - auth_service));
|
| - signal_strategy_->Init(this);
|
| - session_manager_.reset(new JingleSessionManager(
|
| - jingle_thread.message_loop_proxy()));
|
| -
|
| - host_jid_ = host_jid;
|
| -
|
| - while (true) {
|
| - std::string line;
|
| - std::getline(std::cin, line);
|
| -
|
| - {
|
| - base::AutoLock auto_lock(connections_lock_);
|
| -
|
| - // Broadcast message to all clients.
|
| - for (ConnectionsList::iterator it = connections_.begin();
|
| - it != connections_.end(); ++it) {
|
| - (*it)->Write(line);
|
| - }
|
| - }
|
| -
|
| - if (line == "exit")
|
| - break;
|
| - }
|
| -
|
| - while (!connections_.empty()) {
|
| - connections_.front()->Close();
|
| - connections_.pop_front();
|
| - }
|
| -
|
| - if (session_manager_.get()) {
|
| - session_manager_->Close();
|
| - session_manager_.reset();
|
| - }
|
| -
|
| - signal_strategy_->Close();
|
| - jingle_thread.Stop();
|
| -}
|
| -
|
| -void ProtocolTestClient::OnConnectionClosed(
|
| - ProtocolTestConnection* connection) {
|
| - connection->Close();
|
| - base::AutoLock auto_lock(connections_lock_);
|
| - for (ConnectionsList::iterator it = connections_.begin();
|
| - it != connections_.end(); ++it) {
|
| - if ((*it) == connection) {
|
| - connections_.erase(it);
|
| - return;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestClient::OnStateChange(
|
| - SignalStrategy::StatusObserver::State state) {
|
| - if (state == SignalStrategy::StatusObserver::CONNECTED) {
|
| - std::cerr << "Connected as " << local_jid_ << std::endl;
|
| -
|
| - session_manager_->Init(
|
| - local_jid_, signal_strategy_.get(), this, NULL, "", true);
|
| - session_manager_->set_allow_local_ips(true);
|
| - } else if (state == SignalStrategy::StatusObserver::CLOSED) {
|
| - std::cerr << "Connection closed" << std::endl;
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestClient::OnJidChange(const std::string& full_jid) {
|
| - local_jid_ = full_jid;
|
| -}
|
| -
|
| -void ProtocolTestClient::OnSessionManagerInitialized() {
|
| - if (host_jid_ != "") {
|
| - ProtocolTestConnection* connection = new ProtocolTestConnection(this);
|
| - connection->Init(session_manager_->Connect(
|
| - host_jid_, "", kDummyAuthToken,
|
| - CandidateSessionConfig::CreateDefault(),
|
| - base::Bind(&ProtocolTestConnection::OnStateChange, connection)));
|
| - connections_.push_back(make_scoped_refptr(connection));
|
| - }
|
| -}
|
| -
|
| -void ProtocolTestClient::OnIncomingSession(
|
| - Session* session,
|
| - SessionManager::IncomingSessionResponse* response) {
|
| - std::cerr << "Accepting connection from " << session->jid() << std::endl;
|
| -
|
| - session->set_config(SessionConfig::GetDefault());
|
| - *response = SessionManager::ACCEPT;
|
| -
|
| - ProtocolTestConnection* test_connection = new ProtocolTestConnection(this);
|
| - session->SetStateChangeCallback(
|
| - base::Bind(&ProtocolTestConnection::OnStateChange, test_connection));
|
| - test_connection->Init(session);
|
| - base::AutoLock auto_lock(connections_lock_);
|
| - connections_.push_back(make_scoped_refptr(test_connection));
|
| -}
|
| -
|
| -} // namespace protocol
|
| -} // namespace remoting
|
| -
|
| -using remoting::protocol::ProtocolTestClient;
|
| -
|
| -void usage(char* command) {
|
| - std::cerr << "Usage: " << command << "--username=<username>" << std::endl
|
| - << "\t--auth_token=<auth_token>" << std::endl
|
| - << "\t[--host_jid=<host_jid>]" << std::endl;
|
| - exit(1);
|
| -}
|
| -
|
| -int main(int argc, char** argv) {
|
| - CommandLine::Init(argc, argv);
|
| - const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
|
| -
|
| - if (!cmd_line->GetArgs().empty() || cmd_line->HasSwitch("help"))
|
| - usage(argv[0]);
|
| -
|
| - base::AtExitManager exit_manager;
|
| -
|
| - crypto::EnsureNSPRInit();
|
| - crypto::EnsureNSSInit();
|
| -
|
| -#if defined(OS_MACOSX)
|
| - mock_cr_app::RegisterMockCrApp();
|
| -#endif // OS_MACOSX
|
| -
|
| - std::string host_jid(cmd_line->GetSwitchValueASCII("host_jid"));
|
| -
|
| - if (!cmd_line->HasSwitch("username"))
|
| - usage(argv[0]);
|
| - std::string username(cmd_line->GetSwitchValueASCII("username"));
|
| -
|
| - if (!cmd_line->HasSwitch("auth_token"))
|
| - usage(argv[0]);
|
| - std::string auth_token(cmd_line->GetSwitchValueASCII("auth_token"));
|
| -
|
| - // Default to OAuth2 for the auth token.
|
| - std::string auth_service("oauth2");
|
| - if (cmd_line->HasSwitch("auth_service"))
|
| - auth_service = cmd_line->GetSwitchValueASCII("auth_service");
|
| -
|
| - scoped_refptr<ProtocolTestClient> client(new ProtocolTestClient());
|
| -
|
| - client->Run(username, auth_token, host_jid, auth_service);
|
| -
|
| - return 0;
|
| -}
|
|
|