17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Copyright 2012 Google Inc. All Rights Reserved. 27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Licensed under the Apache License, Version 2.0 (the "License"); 47c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// you may not use this file except in compliance with the License. 57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// You may obtain a copy of the License at 67c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// http://www.apache.org/licenses/LICENSE-2.0 87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Unless required by applicable law or agreed to in writing, software 107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// distributed under the License is distributed on an "AS IS" BASIS, 117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// See the License for the specific language governing permissions and 137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// limitations under the License. 147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#ifndef POLO_PAIRING_MESSAGE_OPTIONSMESSAGE_H_ 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#define POLO_PAIRING_MESSAGE_OPTIONSMESSAGE_H_ 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <set> 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <string> 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/encoding/encodingoption.h" 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/pairing/message/polomessage.h" 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace polo { 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace pairing { 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace message { 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// A message containing the Polo pairing options. 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass OptionsMessage : public PoloMessage { 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public: 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // The device role. The display device will be responsible for displaying 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // a secret code, and the user will enter the secret on the input device. 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet enum ProtocolRole { 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet kUnknown = 0, 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet kInputDevice = 1, 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet kDisplayDevice = 2, 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet }; 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Creates an empty options message. The supported encodings and protocol 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // role preference should be set before sending this message. 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet OptionsMessage(); 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Adds a supported input encoding. 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void AddInputEncoding(const encoding::EncodingOption& encoding); 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Adds a supported output encoding. 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void AddOutputEncoding(const encoding::EncodingOption& encoding); 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Determines whether the given input encoding is supported. 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet bool SupportsInputEncoding( 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const encoding::EncodingOption& encoding) const; 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Determines whether the given output encoding is supported. 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet bool SupportsOutputEncoding( 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const encoding::EncodingOption& encoding) const; 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sets the protocol role preference. 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void set_protocol_role_preference(ProtocolRole preference); 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Gets the protocol role preference. 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ProtocolRole protocol_role_preference() const; 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Gets the set of supported input encodings. 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const encoding::EncodingOption::EncodingSet& input_encodings() const; 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Gets the set of supported output encodings. 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const encoding::EncodingOption::EncodingSet& output_encodings() const; 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // @override 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual std::string ToString() const; 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet private: 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ProtocolRole protocol_role_preference_; 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption::EncodingSet input_encodings_; 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption::EncodingSet output_encodings_; 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DISALLOW_COPY_AND_ASSIGN(OptionsMessage); 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace message 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace pairing 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace polo 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#endif // POLO_PAIRING_MESSAGE_OPTIONSMESSAGE_H_ 84