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 
23 namespace polo {
24 namespace pairing {
25 namespace message {
26 
27 // A message containing the Polo pairing options.
28 class 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