15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef JINGLE_NOTIFIER_COMMUNICATOR_CONNECTION_SETTINGS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define JINGLE_NOTIFIER_COMMUNICATOR_CONNECTION_SETTINGS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jingle/notifier/base/server_information.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "talk/base/socketaddress.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace buzz {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class XmppClientSettings;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace notifier {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The port for SSLTCP (just the regular port for SSL).
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const uint16 kSslTcpPort;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SslTcpMode { DO_NOT_USE_SSLTCP, USE_SSLTCP };
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ConnectionSettings {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectionSettings(const talk_base::SocketAddress& server,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     SslTcpMode ssltcp_mode,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     SslTcpSupport ssltcp_support);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectionSettings();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ConnectionSettings();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Equals(const ConnectionSettings& settings) const;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ToString() const;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill in the connection-related fields of |client_settings|.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FillXmppClientSettings(buzz::XmppClientSettings* client_settings) const;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  talk_base::SocketAddress server;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SslTcpMode ssltcp_mode;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SslTcpSupport ssltcp_support;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<ConnectionSettings> ConnectionSettingsList;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Given a list of servers in priority order, generate a list of
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ConnectionSettings to try in priority order.  If |try_ssltcp_first|
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is set, for each server that supports SSLTCP, the
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ConnectionSettings using SSLTCP will come first.  If it is not set,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the ConnectionSettings using SSLTCP will come last.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConnectionSettingsList MakeConnectionSettingsList(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ServerList& servers,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool try_ssltcp_first);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace notifier
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // JINGLE_NOTIFIER_COMMUNICATOR_CONNECTION_SETTINGS_H_
60