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_OPTIONSMESSAGE_H_
16#define POLO_PAIRING_MESSAGE_OPTIONSMESSAGE_H_
17
18#include <set>
19#include <string>
20#include "polo/encoding/encodingoption.h"
21#include "polo/pairing/message/polomessage.h"
22
23namespace polo {
24namespace pairing {
25namespace message {
26
27// A message containing the Polo pairing options.
28class OptionsMessage : public PoloMessage {
29 public:
30  // The device role. The display device will be responsible for displaying
31  // a secret code, and the user will enter the secret on the input device.
32  enum ProtocolRole {
33    kUnknown = 0,
34    kInputDevice = 1,
35    kDisplayDevice = 2,
36  };
37
38  // Creates an empty options message. The supported encodings and protocol
39  // role preference should be set before sending this message.
40  OptionsMessage();
41
42  // Adds a supported input encoding.
43  void AddInputEncoding(const encoding::EncodingOption& encoding);
44
45  // Adds a supported output encoding.
46  void AddOutputEncoding(const encoding::EncodingOption& encoding);
47
48  // Determines whether the given input encoding is supported.
49  bool SupportsInputEncoding(
50      const encoding::EncodingOption& encoding) const;
51
52  // Determines whether the given output encoding is supported.
53  bool SupportsOutputEncoding(
54      const encoding::EncodingOption& encoding) const;
55
56  // Sets the protocol role preference.
57  void set_protocol_role_preference(ProtocolRole preference);
58
59  // Gets the protocol role preference.
60  ProtocolRole protocol_role_preference() const;
61
62  // Gets the set of supported input encodings.
63  const encoding::EncodingOption::EncodingSet& input_encodings() const;
64
65  // Gets the set of supported output encodings.
66  const encoding::EncodingOption::EncodingSet& output_encodings() const;
67
68  // @override
69  virtual std::string ToString() const;
70
71 private:
72  ProtocolRole protocol_role_preference_;
73  encoding::EncodingOption::EncodingSet input_encodings_;
74  encoding::EncodingOption::EncodingSet output_encodings_;
75
76  DISALLOW_COPY_AND_ASSIGN(OptionsMessage);
77};
78
79}  // namespace message
80}  // namespace pairing
81}  // namespace polo
82
83#endif  // POLO_PAIRING_MESSAGE_OPTIONSMESSAGE_H_
84