1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "jingle/notifier/communicator/connection_settings.h" 6 7 #include "base/logging.h" 8 9 // Ideally we shouldn't include anything from talk/p2p, but we need 10 // the definition of ProtocolType. Don't use any functions from 11 // port.h, since it won't link. 12 #include "talk/p2p/base/port.h" 13 14 #include "talk/xmpp/xmppclientsettings.h" 15 16 namespace notifier { 17 18 const uint16 kSslTcpPort = 443; 19 20 ConnectionSettings::ConnectionSettings( 21 const talk_base::SocketAddress& server, 22 SslTcpMode ssltcp_mode, 23 SslTcpSupport ssltcp_support) 24 : server(server), 25 ssltcp_mode(ssltcp_mode), 26 ssltcp_support(ssltcp_support) {} 27 28 ConnectionSettings::ConnectionSettings() 29 : ssltcp_mode(DO_NOT_USE_SSLTCP), 30 ssltcp_support(DOES_NOT_SUPPORT_SSLTCP) {} 31 32 ConnectionSettings::~ConnectionSettings() {} 33 34 bool ConnectionSettings::Equals(const ConnectionSettings& settings) const { 35 return 36 server == settings.server && 37 ssltcp_mode == settings.ssltcp_mode && 38 ssltcp_support == settings.ssltcp_support; 39 } 40 41 namespace { 42 43 const char* SslTcpModeToString(SslTcpMode ssltcp_mode) { 44 return (ssltcp_mode == USE_SSLTCP) ? "USE_SSLTCP" : "DO_NOT_USE_SSLTCP"; 45 } 46 47 const char* SslTcpSupportToString(SslTcpSupport ssltcp_support) { 48 return 49 (ssltcp_support == SUPPORTS_SSLTCP) ? 50 "SUPPORTS_SSLTCP" : 51 "DOES_NOT_SUPPORT_SSLTCP"; 52 } 53 54 } // namespace 55 56 std::string ConnectionSettings::ToString() const { 57 return 58 server.ToString() + ":" + SslTcpModeToString(ssltcp_mode) + ":" + 59 SslTcpSupportToString(ssltcp_support); 60 } 61 62 void ConnectionSettings::FillXmppClientSettings( 63 buzz::XmppClientSettings* client_settings) const { 64 client_settings->set_protocol( 65 (ssltcp_mode == USE_SSLTCP) ? 66 cricket::PROTO_SSLTCP : 67 cricket::PROTO_TCP); 68 client_settings->set_server(server); 69 } 70 71 ConnectionSettingsList MakeConnectionSettingsList( 72 const ServerList& servers, 73 bool try_ssltcp_first) { 74 ConnectionSettingsList settings_list; 75 76 for (ServerList::const_iterator it = servers.begin(); 77 it != servers.end(); ++it) { 78 const ConnectionSettings settings( 79 talk_base::SocketAddress(it->server.host(), it->server.port()), 80 DO_NOT_USE_SSLTCP, it->ssltcp_support); 81 82 if (it->ssltcp_support == SUPPORTS_SSLTCP) { 83 const ConnectionSettings settings_with_ssltcp( 84 talk_base::SocketAddress(it->server.host(), kSslTcpPort), 85 USE_SSLTCP, it->ssltcp_support); 86 87 if (try_ssltcp_first) { 88 settings_list.push_back(settings_with_ssltcp); 89 settings_list.push_back(settings); 90 } else { 91 settings_list.push_back(settings); 92 settings_list.push_back(settings_with_ssltcp); 93 } 94 } else { 95 settings_list.push_back(settings); 96 } 97 } 98 99 return settings_list; 100 } 101 102 } // namespace notifier 103