// Copyright (c) 2012 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 "jingle/notifier/communicator/connection_settings.h" #include "base/logging.h" // Ideally we shouldn't include anything from talk/p2p, but we need // the definition of ProtocolType. Don't use any functions from // port.h, since it won't link. #include "talk/p2p/base/port.h" #include "talk/xmpp/xmppclientsettings.h" namespace notifier { const uint16 kSslTcpPort = 443; ConnectionSettings::ConnectionSettings( const talk_base::SocketAddress& server, SslTcpMode ssltcp_mode, SslTcpSupport ssltcp_support) : server(server), ssltcp_mode(ssltcp_mode), ssltcp_support(ssltcp_support) {} ConnectionSettings::ConnectionSettings() : ssltcp_mode(DO_NOT_USE_SSLTCP), ssltcp_support(DOES_NOT_SUPPORT_SSLTCP) {} ConnectionSettings::~ConnectionSettings() {} bool ConnectionSettings::Equals(const ConnectionSettings& settings) const { return server == settings.server && ssltcp_mode == settings.ssltcp_mode && ssltcp_support == settings.ssltcp_support; } namespace { const char* SslTcpModeToString(SslTcpMode ssltcp_mode) { return (ssltcp_mode == USE_SSLTCP) ? "USE_SSLTCP" : "DO_NOT_USE_SSLTCP"; } const char* SslTcpSupportToString(SslTcpSupport ssltcp_support) { return (ssltcp_support == SUPPORTS_SSLTCP) ? "SUPPORTS_SSLTCP" : "DOES_NOT_SUPPORT_SSLTCP"; } } // namespace std::string ConnectionSettings::ToString() const { return server.ToString() + ":" + SslTcpModeToString(ssltcp_mode) + ":" + SslTcpSupportToString(ssltcp_support); } void ConnectionSettings::FillXmppClientSettings( buzz::XmppClientSettings* client_settings) const { client_settings->set_protocol( (ssltcp_mode == USE_SSLTCP) ? cricket::PROTO_SSLTCP : cricket::PROTO_TCP); client_settings->set_server(server); } ConnectionSettingsList MakeConnectionSettingsList( const ServerList& servers, bool try_ssltcp_first) { ConnectionSettingsList settings_list; for (ServerList::const_iterator it = servers.begin(); it != servers.end(); ++it) { const ConnectionSettings settings( talk_base::SocketAddress(it->server.host(), it->server.port()), DO_NOT_USE_SSLTCP, it->ssltcp_support); if (it->ssltcp_support == SUPPORTS_SSLTCP) { const ConnectionSettings settings_with_ssltcp( talk_base::SocketAddress(it->server.host(), kSslTcpPort), USE_SSLTCP, it->ssltcp_support); if (try_ssltcp_first) { settings_list.push_back(settings_with_ssltcp); settings_list.push_back(settings); } else { settings_list.push_back(settings); settings_list.push_back(settings_with_ssltcp); } } else { settings_list.push_back(settings); } } return settings_list; } } // namespace notifier