1// Copyright 2012 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef POLO_PAIRING_MESSAGE_CONFIGURATIONMESSAGE_H_
16#define POLO_PAIRING_MESSAGE_CONFIGURATIONMESSAGE_H_
17
18#include <string>
19#include "polo/encoding/encodingoption.h"
20#include "polo/pairing/message/optionsmessage.h"
21#include "polo/pairing/message/polomessage.h"
22
23namespace polo {
24namespace pairing {
25namespace message {
26
27// A message that contains Polo configuration options.
28class ConfigurationMessage : public PoloMessage {
29 public:
30  // Creates a configuration message with the given encoding and role.
31  // @param encoding the configured encoding options
32  // @param client_role the client role
33  ConfigurationMessage(const encoding::EncodingOption &encoding,
34                       OptionsMessage::ProtocolRole client_role);
35
36  // Gets the configured encoding options.
37  const ::polo::encoding::EncodingOption& encoding() const;
38
39  // Gets the client role.
40  OptionsMessage::ProtocolRole client_role() const;
41
42  // @override
43  virtual std::string ToString() const;
44
45  // Computes the best configuration given the local and peer options. This
46  // performs a negotiation of the local and peer options and selects the most
47  // complex common input and output encodings and a local role.
48  // @param local_options the local options
49  // @param peer_options the peer options
50  static ConfigurationMessage* GetBestConfiguration(
51      const OptionsMessage& local_options,
52      const OptionsMessage& peer_options);
53
54 private:
55  encoding::EncodingOption encoding_;
56  OptionsMessage::ProtocolRole client_role_;
57
58  DISALLOW_COPY_AND_ASSIGN(ConfigurationMessage);
59};
60
61}  // namespace message
62}  // namespace pairing
63}  // namespace polo
64
65#endif  // POLO_PAIRING_MESSAGE_CONFIGURATIONMESSAGE_H_
66