Home | History | Annotate | Download | only in communicator
      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