Index: chrome/browser/sync/notifier/communicator/connection_settings.cc |
=================================================================== |
--- chrome/browser/sync/notifier/communicator/connection_settings.cc (revision 46353) |
+++ chrome/browser/sync/notifier/communicator/connection_settings.cc (working copy) |
@@ -1,127 +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. |
- |
-#include <algorithm> |
-#include <deque> |
-#include <string> |
-#include <vector> |
- |
-#include "chrome/browser/sync/notifier/communicator/connection_settings.h" |
-#include "talk/base/helpers.h" |
-#include "talk/xmpp/xmppclientsettings.h" |
- |
-namespace notifier { |
- |
-class RandomGenerator { |
- public: |
- int operator()(int ceiling) { |
- return static_cast<int>(cricket::CreateRandomId() % ceiling); |
- } |
-}; |
- |
-void ConnectionSettings::FillXmppClientSettings( |
- buzz::XmppClientSettings* xcs) const { |
- assert(xcs); |
- xcs->set_protocol(protocol_); |
- xcs->set_server(server_); |
- xcs->set_proxy(proxy_.type); |
- if (proxy_.type != talk_base::PROXY_NONE) { |
- xcs->set_proxy_host(proxy_.address.IPAsString()); |
- xcs->set_proxy_port(proxy_.address.port()); |
- } |
- if ((proxy_.type != talk_base::PROXY_NONE) && !proxy_.username.empty()) { |
- xcs->set_use_proxy_auth(true); |
- xcs->set_proxy_user(proxy_.username); |
- xcs->set_proxy_pass(proxy_.password); |
- } else { |
- xcs->set_use_proxy_auth(false); |
- } |
-} |
- |
-void ConnectionSettingsList::AddPermutations(const std::string& hostname, |
- const std::vector<uint32>& iplist, |
- int16 port, |
- bool special_port_magic, |
- bool proxy_only) { |
- // randomize the list. This ensures the iplist isn't always |
- // evaluated in the order returned by DNS |
- std::vector<uint32> iplist_random = iplist; |
- RandomGenerator rg; |
- std::random_shuffle(iplist_random.begin(), iplist_random.end(), rg); |
- |
- // Put generated addresses in a new deque, then append on the list_, since |
- // there are order dependencies and AddPermutations() may be called more |
- // than once. |
- std::deque<ConnectionSettings> list_temp; |
- |
- // Permute addresses for this server. In some cases we haven't resolved the |
- // to ip addresses. |
- talk_base::SocketAddress server(hostname, port, false); |
- if (iplist_random.empty()) { |
- // We couldn't pre-resolve the hostname, so let's hope it will resolve |
- // further down the pipeline (by a proxy, for example). |
- PermuteForAddress(server, special_port_magic, proxy_only, &list_temp); |
- } else { |
- // Generate a set of possibilities for each server address. |
- // Don't do permute duplicates. |
- for (size_t index = 0; index < iplist_random.size(); ++index) { |
- if (std::find(iplist_seen_.begin(), iplist_seen_.end(), |
- iplist_random[index]) != iplist_seen_.end()) { |
- continue; |
- } |
- iplist_seen_.push_back(iplist_random[index]); |
- server.SetResolvedIP(iplist_random[index]); |
- PermuteForAddress(server, special_port_magic, proxy_only, &list_temp); |
- } |
- } |
- |
- // Add this list to the instance list |
- while (list_temp.size() != 0) { |
- list_.push_back(list_temp[0]); |
- list_temp.pop_front(); |
- } |
-} |
- |
- |
-void ConnectionSettingsList::PermuteForAddress( |
- const talk_base::SocketAddress& server, |
- bool special_port_magic, |
- bool proxy_only, |
- std::deque<ConnectionSettings>* list_temp) { |
- assert(list_temp); |
- *(template_.mutable_server()) = server; |
- |
- // Use all of the original settings |
- list_temp->push_back(template_); |
- |
- // Try alternate port |
- if (special_port_magic) { |
- ConnectionSettings settings(template_); |
- settings.set_protocol(cricket::PROTO_SSLTCP); |
- settings.mutable_server()->SetPort(443); |
- // HTTPS proxies usually require port 443, so try it first |
- if ((template_.proxy().type == talk_base::PROXY_HTTPS) || |
- (template_.proxy().type == talk_base::PROXY_UNKNOWN)) { |
- list_temp->push_front(settings); |
- } else { |
- list_temp->push_back(settings); |
- } |
- } |
- |
- if (!proxy_only) { |
- // Try without the proxy |
- if (template_.proxy().type != talk_base::PROXY_NONE) { |
- ConnectionSettings settings(template_); |
- settings.mutable_proxy()->type = talk_base::PROXY_NONE; |
- list_temp->push_back(settings); |
- |
- if (special_port_magic) { |
- settings.set_protocol(cricket::PROTO_SSLTCP); |
- settings.mutable_server()->SetPort(443); |
- list_temp->push_back(settings); |
- } |
- } |
- } |
-} |
-} // namespace notifier |