Home | History | Annotate | Download | only in wire
      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);
     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.
     80   PoloWireInterface* interface() { return interface_; }
     81 
     82   // Get the listener that will be notified of received Polo messages.
     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