// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef POLO_WIRE_POLOWIREADAPTER_H_ #define POLO_WIRE_POLOWIREADAPTER_H_ #include "polo/wire/polowireinterface.h" #include "polo/pairing/message/messagelistener.h" namespace polo { namespace wire { // Abstract class for protocol adapters that send and receive Polo messages. The // adapter is responsible for serializing and deserializing messages sent and // received from the supplied PoloWireInterface. class PoloWireAdapter : public PoloWireListener { public: // Creates a new adapter on the given interface. The interface should only // exist in the context of this adapter and will be freed when this adapter is // freed. // @param interface the interface used to send and receive data explicit PoloWireAdapter(PoloWireInterface* interface); virtual ~PoloWireAdapter() {} // Sets the listener that will receive incoming Polo messages. A listener // must be set before using this adapter. void set_listener(pairing::message::MessageListener* listener); // Gets the next message from the interface asynchronously. The listener // will be invoked when a message has been received. An error will occur if // this method is invoked again before a message or error is received by // the listener. virtual void GetNextMessage() = 0; // Sends a configuration message to the peer. virtual void SendConfigurationMessage( const pairing::message::ConfigurationMessage& message) = 0; // Sends a configuration acknowledgment to the peer. virtual void SendConfigurationAckMessage( const pairing::message::ConfigurationAckMessage& message) = 0; // Sends an options message to the peer. virtual void SendOptionsMessage( const pairing::message::OptionsMessage& message) = 0; // Sends a pairing request message to the peer. virtual void SendPairingRequestMessage( const pairing::message::PairingRequestMessage& message) = 0; // Sends a pairing request acknowledgment to the peer. virtual void SendPairingRequestAckMessage( const pairing::message::PairingRequestAckMessage& message) = 0; // Sends a secret message to the peer. virtual void SendSecretMessage( const pairing::message::SecretMessage& message) = 0; // Sends a secret acknowledgment to the peer. virtual void SendSecretAckMessage( const pairing::message::SecretAckMessage& message) = 0; // Sends an error message to the peer. virtual void SendErrorMessage(pairing::PoloError error) = 0; protected: // Gets the Polo wire interface used to send and receive data. PoloWireInterface* interface() { return interface_; } // Get the listener that will be notified of received Polo messages. pairing::message::MessageListener* listener() { return listener_; } private: PoloWireInterface* interface_; pairing::message::MessageListener* listener_; DISALLOW_COPY_AND_ASSIGN(PoloWireAdapter); }; } // namespace wire } // namespace polo #endif // POLO_WIRE_POLOWIREADAPTER_H_