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_WIRE_POLOWIREADAPTER_H_ 16 #define POLO_WIRE_POLOWIREADAPTER_H_ 17 18 #include "polo/wire/polowireinterface.h" 19 20 #include "polo/pairing/message/messagelistener.h" 21 22 namespace polo { 23 namespace wire { 24 25 // Abstract class for protocol adapters that send and receive Polo messages. The 26 // adapter is responsible for serializing and deserializing messages sent and 27 // received from the supplied PoloWireInterface. 28 class PoloWireAdapter : public PoloWireListener { 29 public: 30 // Creates a new adapter on the given interface. The interface should only 31 // exist in the context of this adapter and will be freed when this adapter is 32 // freed. 33 // @param interface the interface used to send and receive data 34 explicit PoloWireAdapter(PoloWireInterface* interface); ~PoloWireAdapter()35 virtual ~PoloWireAdapter() {} 36 37 // Sets the listener that will receive incoming Polo messages. A listener 38 // must be set before using this adapter. 39 void set_listener(pairing::message::MessageListener* listener); 40 41 // Gets the next message from the interface asynchronously. The listener 42 // will be invoked when a message has been received. An error will occur if 43 // this method is invoked again before a message or error is received by 44 // the listener. 45 virtual void GetNextMessage() = 0; 46 47 // Sends a configuration message to the peer. 48 virtual void SendConfigurationMessage( 49 const pairing::message::ConfigurationMessage& message) = 0; 50 51 // Sends a configuration acknowledgment to the peer. 52 virtual void SendConfigurationAckMessage( 53 const pairing::message::ConfigurationAckMessage& message) = 0; 54 55 // Sends an options message to the peer. 56 virtual void SendOptionsMessage( 57 const pairing::message::OptionsMessage& message) = 0; 58 59 // Sends a pairing request message to the peer. 60 virtual void SendPairingRequestMessage( 61 const pairing::message::PairingRequestMessage& message) = 0; 62 63 // Sends a pairing request acknowledgment to the peer. 64 virtual void SendPairingRequestAckMessage( 65 const pairing::message::PairingRequestAckMessage& message) = 0; 66 67 // Sends a secret message to the peer. 68 virtual void SendSecretMessage( 69 const pairing::message::SecretMessage& message) = 0; 70 71 // Sends a secret acknowledgment to the peer. 72 virtual void SendSecretAckMessage( 73 const pairing::message::SecretAckMessage& message) = 0; 74 75 // Sends an error message to the peer. 76 virtual void SendErrorMessage(pairing::PoloError error) = 0; 77 78 protected: 79 // Gets the Polo wire interface used to send and receive data. interface()80 PoloWireInterface* interface() { return interface_; } 81 82 // Get the listener that will be notified of received Polo messages. listener()83 pairing::message::MessageListener* listener() { return listener_; } 84 85 private: 86 PoloWireInterface* interface_; 87 pairing::message::MessageListener* listener_; 88 89 DISALLOW_COPY_AND_ASSIGN(PoloWireAdapter); 90 }; 91 92 } // namespace wire 93 } // namespace polo 94 95 #endif // POLO_WIRE_POLOWIREADAPTER_H_ 96