- add sources.
[platform/framework/web/crosswalk.git] / src / jingle / notifier / communicator / connection_settings.cc
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