Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3007)

Unified Diff: chrome/browser/sync/notifier/communicator/xmpp_connection_generator.cc

Issue 1956001: Moved XMPP notifier library from chrome/browser/sync to chrome/common.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/notifier/communicator/xmpp_connection_generator.cc
===================================================================
--- chrome/browser/sync/notifier/communicator/xmpp_connection_generator.cc (revision 46353)
+++ chrome/browser/sync/notifier/communicator/xmpp_connection_generator.cc (working copy)
@@ -1,210 +0,0 @@
-// Copyright (c) 2009 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.
-//
-// XmppConnectionGenerator does the following algorithm:
-// proxy = ResolveProxyInformation(connection_options)
-// for server in server_list
-// get dns_addresses for server
-// connection_list = (dns_addresses X connection methods X proxy).shuffle()
-// for connection in connection_list
-// yield connection
-
-#include "chrome/browser/sync/notifier/communicator/xmpp_connection_generator.h"
-
-#include <vector>
-
-#include "base/logging.h"
-#include "chrome/browser/sync/notifier/base/async_dns_lookup.h"
-#include "chrome/browser/sync/notifier/base/signal_thread_task.h"
-#include "chrome/browser/sync/notifier/communicator/connection_options.h"
-#include "chrome/browser/sync/notifier/communicator/connection_settings.h"
-#include "chrome/browser/sync/notifier/communicator/product_info.h"
-#include "talk/base/autodetectproxy.h"
-#include "talk/base/httpcommon-inl.h"
-#include "talk/base/task.h"
-#include "talk/base/thread.h"
-#include "talk/xmpp/prexmppauth.h"
-#include "talk/xmpp/xmppclientsettings.h"
-#include "talk/xmpp/xmppengine.h"
-
-namespace notifier {
-
-XmppConnectionGenerator::XmppConnectionGenerator(
- talk_base::Task* parent,
- const ConnectionOptions* options,
- bool proxy_only,
- const ServerInformation* server_list,
- int server_count)
- : settings_list_(new ConnectionSettingsList()),
- settings_index_(0),
- server_list_(new ServerInformation[server_count]),
- server_count_(server_count),
- server_index_(-1),
- proxy_only_(proxy_only),
- successfully_resolved_dns_(false),
- first_dns_error_(0),
- options_(options),
- parent_(parent) {
- assert(parent);
- assert(options);
- assert(server_count_ > 0);
- for (int i = 0; i < server_count_; ++i) {
- server_list_[i] = server_list[i];
- }
-}
-
-XmppConnectionGenerator::~XmppConnectionGenerator() {
- LOG(INFO) << "XmppConnectionGenerator::~XmppConnectionGenerator";
-}
-
-const talk_base::ProxyInfo& XmppConnectionGenerator::proxy() const {
- assert(settings_list_.get());
- if (settings_index_ >= settings_list_->GetCount()) {
- return settings_list_->proxy();
- }
-
- ConnectionSettings* settings = settings_list_->GetSettings(settings_index_);
- return settings->proxy();
-}
-
-// Starts resolving proxy information.
-void XmppConnectionGenerator::StartGenerating() {
- LOG(INFO) << "XmppConnectionGenerator::StartGenerating";
-
- talk_base::AutoDetectProxy* proxy_detect =
- new talk_base::AutoDetectProxy(GetUserAgentString());
-
- if (options_->autodetect_proxy()) {
- // Pretend the xmpp server is https, when detecting whether a proxy is
- // required to connect.
- talk_base::Url<char> host_url("/",
- server_list_[0].server.IPAsString().c_str(),
- server_list_[0].server.port());
- host_url.set_secure(true);
- proxy_detect->set_server_url(host_url.url());
- } else if (options_->proxy_host().length()) {
- talk_base::SocketAddress proxy(options_->proxy_host(),
- options_->proxy_port());
- proxy_detect->set_proxy(proxy);
- }
- proxy_detect->set_auth_info(options_->use_proxy_auth(),
- options_->auth_user(),
- talk_base::CryptString(options_->auth_pass()));
-
- SignalThreadTask<talk_base::AutoDetectProxy>* wrapper_task =
- new SignalThreadTask<talk_base::AutoDetectProxy>(parent_, &proxy_detect);
- wrapper_task->SignalWorkDone.connect(
- this,
- &XmppConnectionGenerator::OnProxyDetect);
- wrapper_task->Start();
-}
-
-void XmppConnectionGenerator::OnProxyDetect(
- talk_base::AutoDetectProxy* proxy_detect) {
- LOG(INFO) << "XmppConnectionGenerator::OnProxyDetect";
-
- ASSERT(settings_list_.get());
- ASSERT(proxy_detect);
- settings_list_->SetProxy(proxy_detect->proxy());
-
- // Start iterating through the connections (which are generated on demand).
- UseNextConnection();
-}
-
-void XmppConnectionGenerator::UseNextConnection() {
- // Trying to connect.
-
- // Iterate to the next possible connection.
- settings_index_++;
- if (settings_index_ < settings_list_->GetCount()) {
- // We have more connection settings in the settings_list_ to try, kick off
- // the next one.
- UseCurrentConnection();
- return;
- }
-
- // Iterate to the next possible server.
- server_index_++;
- if (server_index_ < server_count_) {
- AsyncDNSLookup* dns_lookup = new AsyncDNSLookup(
- server_list_[server_index_].server);
- SignalThreadTask<AsyncDNSLookup>* wrapper_task =
- new SignalThreadTask<AsyncDNSLookup>(parent_, &dns_lookup);
- wrapper_task->SignalWorkDone.connect(
- this,
- &XmppConnectionGenerator::OnServerDNSResolved);
- wrapper_task->Start();
- return;
- }
-
- // All out of possibilities.
- HandleExhaustedConnections();
-}
-
-void XmppConnectionGenerator::OnServerDNSResolved(
- AsyncDNSLookup* dns_lookup) {
- LOG(INFO) << "XmppConnectionGenerator::OnServerDNSResolved";
-
- // Print logging info.
- LOG(INFO) << " server: " <<
- server_list_[server_index_].server.ToString() <<
- " error: " << dns_lookup->error();
- if (first_dns_error_ == 0 && dns_lookup->error() != 0) {
- first_dns_error_ = dns_lookup->error();
- }
-
- if (!successfully_resolved_dns_ && dns_lookup->ip_list().size() > 0) {
- successfully_resolved_dns_ = true;
- }
-
- for (int i = 0; i < static_cast<int>(dns_lookup->ip_list().size()); ++i) {
- LOG(INFO)
- << " ip " << i << " : "
- << talk_base::SocketAddress::IPToString(dns_lookup->ip_list()[i]);
- }
-
- // Build the ip list.
- assert(settings_list_.get());
- settings_index_ = -1;
- settings_list_->ClearPermutations();
- settings_list_->AddPermutations(
- server_list_[server_index_].server.IPAsString(),
- dns_lookup->ip_list(),
- server_list_[server_index_].server.port(),
- server_list_[server_index_].special_port_magic,
- proxy_only_);
-
- UseNextConnection();
-}
-
-static const char* const PROTO_NAMES[cricket::PROTO_LAST + 1] = {
- "udp", "tcp", "ssltcp"
-};
-
-static const char* ProtocolToString(cricket::ProtocolType proto) {
- return PROTO_NAMES[proto];
-}
-
-void XmppConnectionGenerator::UseCurrentConnection() {
- LOG(INFO) << "XmppConnectionGenerator::UseCurrentConnection";
-
- ConnectionSettings* settings = settings_list_->GetSettings(settings_index_);
- LOG(INFO) << "*** Attempting "
- << ProtocolToString(settings->protocol()) << " connection to "
- << settings->server().IPAsString() << ":"
- << settings->server().port()
- << " (via " << ProxyToString(settings->proxy().type)
- << " proxy @ " << settings->proxy().address.IPAsString() << ":"
- << settings->proxy().address.port() << ")";
-
- SignalNewSettings(*settings);
-}
-
-void XmppConnectionGenerator::HandleExhaustedConnections() {
- LOG(INFO) << "(" << buzz::XmppEngine::ERROR_SOCKET
- << ", " << first_dns_error_ << ")";
- SignalExhaustedSettings(successfully_resolved_dns_, first_dns_error_);
-}
-
-} // namespace notifier

Powered by Google App Engine
This is Rietveld 408576698