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_WIRE_POLOWIREADAPTER_H_ 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#define POLO_WIRE_POLOWIREADAPTER_H_ 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/wire/polowireinterface.h" 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/pairing/message/messagelistener.h" 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace polo { 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace wire { 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Abstract class for protocol adapters that send and receive Polo messages. The 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// adapter is responsible for serializing and deserializing messages sent and 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// received from the supplied PoloWireInterface. 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass PoloWireAdapter : public PoloWireListener { 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public: 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Creates a new adapter on the given interface. The interface should only 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // exist in the context of this adapter and will be freed when this adapter is 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // freed. 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // @param interface the interface used to send and receive data 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet explicit PoloWireAdapter(PoloWireInterface* interface); 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual ~PoloWireAdapter() {} 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sets the listener that will receive incoming Polo messages. A listener 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // must be set before using this adapter. 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void set_listener(pairing::message::MessageListener* listener); 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Gets the next message from the interface asynchronously. The listener 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // will be invoked when a message has been received. An error will occur if 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // this method is invoked again before a message or error is received by 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // the listener. 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void GetNextMessage() = 0; 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a configuration message to the peer. 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendConfigurationMessage( 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::ConfigurationMessage& message) = 0; 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a configuration acknowledgment to the peer. 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendConfigurationAckMessage( 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::ConfigurationAckMessage& message) = 0; 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends an options message to the peer. 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendOptionsMessage( 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::OptionsMessage& message) = 0; 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a pairing request message to the peer. 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendPairingRequestMessage( 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::PairingRequestMessage& message) = 0; 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a pairing request acknowledgment to the peer. 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendPairingRequestAckMessage( 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::PairingRequestAckMessage& message) = 0; 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a secret message to the peer. 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendSecretMessage( 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::SecretMessage& message) = 0; 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends a secret acknowledgment to the peer. 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendSecretAckMessage( 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const pairing::message::SecretAckMessage& message) = 0; 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Sends an error message to the peer. 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SendErrorMessage(pairing::PoloError error) = 0; 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet protected: 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Gets the Polo wire interface used to send and receive data. 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PoloWireInterface* interface() { return interface_; } 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Get the listener that will be notified of received Polo messages. 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet pairing::message::MessageListener* listener() { return listener_; } 847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet private: 867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PoloWireInterface* interface_; 877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet pairing::message::MessageListener* listener_; 887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DISALLOW_COPY_AND_ASSIGN(PoloWireAdapter); 907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace wire 937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace polo 947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#endif // POLO_WIRE_POLOWIREADAPTER_H_ 96