| // 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_PROTOBUF_PROTOBUFWIREADAPTER_H_ |
| #define POLO_WIRE_PROTOBUF_PROTOBUFWIREADAPTER_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "polo/wire/polowireadapter.h" |
| #include "polo/wire/protobuf/polo.pb.h" |
| |
| namespace polo { |
| namespace wire { |
| namespace protobuf { |
| |
| // Polo wire adapter that transmits Polo messages using protocol buffers. |
| class ProtobufWireAdapter : public PoloWireAdapter { |
| public: |
| // Creates a new protocol buffer adapter on the given interface |
| // @param interface the wire interface used to send and receive data |
| explicit ProtobufWireAdapter(PoloWireInterface* interface); |
| virtual ~ProtobufWireAdapter() {} |
| |
| /** @override */ |
| virtual void GetNextMessage(); |
| |
| /** @override */ |
| virtual void SendConfigurationMessage( |
| const pairing::message::ConfigurationMessage& message); |
| |
| /** @override */ |
| virtual void SendConfigurationAckMessage( |
| const pairing::message::ConfigurationAckMessage& message); |
| |
| /** @override */ |
| virtual void SendOptionsMessage( |
| const pairing::message::OptionsMessage& message); |
| |
| /** @override */ |
| virtual void SendPairingRequestMessage( |
| const pairing::message::PairingRequestMessage& message); |
| |
| /** @override */ |
| virtual void SendPairingRequestAckMessage( |
| const pairing::message::PairingRequestAckMessage& message); |
| |
| /** @override */ |
| virtual void SendSecretMessage( |
| const pairing::message::SecretMessage& message); |
| |
| /** @override */ |
| virtual void SendSecretAckMessage( |
| const pairing::message::SecretAckMessage& message); |
| |
| /** @override */ |
| virtual void SendErrorMessage(pairing::PoloError error); |
| |
| /** @override */ |
| virtual void OnBytesReceived(const std::vector<uint8_t>& data); |
| |
| /** @override */ |
| virtual void OnError(); |
| |
| private: |
| // The current read state. |
| enum ReadState { |
| // There is no read operation in progress. |
| kNone, |
| |
| // Waiting to read the message preamble which is 4 bytes representing |
| // the size of the next message. |
| kPreamble, |
| |
| // Waiting to read the message. |
| kMessage, |
| }; |
| |
| // Sends a message with the given type and payload. The payload should be |
| // the serialized string representation of a protobuf message of the given |
| // type. |
| void SendMessagePayload(OuterMessage_MessageType type, |
| const std::string& payload); |
| |
| // Sends the given outer message. |
| void SendOuterMessage(const OuterMessage& message); |
| |
| // Parses a received protobuf message. |
| void ParseMessage(const std::vector<uint8_t>& data); |
| |
| // Parses a configuration message from a serialized protobuf string. |
| void ParseConfigurationMessage(const std::string& payload); |
| |
| // Parses a configuration ack message from a serialized protobuf string. |
| void ParseConfigurationAckMessage(const std::string& payload); |
| |
| // Parses an options messages from a serialized protobuf string. |
| void ParseOptionsMessage(const std::string& payload); |
| |
| // Parses a pairing request message from a serialized protobuf string. |
| void ParsePairingRequestMessage(const std::string& payload); |
| |
| // Parses a pairing request ack message from a serialized protobuf string. |
| void ParsePairingRequestAckMessage(const std::string& payload); |
| |
| // Parses a secret message from a serialized protobuf string. |
| void ParseSecretMessage(const std::string& payload); |
| |
| // Parses a secret ack message from a serialized protobuf string. |
| void ParseSecretAckMessage(const std::string& payload); |
| |
| // Converts an encoding type from the internal representation to the protobuf |
| // representation. |
| Options_Encoding_EncodingType EncodingTypeToProto( |
| encoding::EncodingOption::EncodingType type); |
| |
| // Converts an encoding type from the protobuf representation to the internal |
| // representation. |
| encoding::EncodingOption::EncodingType EncodingTypeFromProto( |
| Options_Encoding_EncodingType type); |
| |
| // Converts a role type from the internal representation to the protobuf |
| // representation. |
| Options_RoleType RoleToProto( |
| pairing::message::OptionsMessage::ProtocolRole role); |
| |
| // Converts a role type from the protobuf representation to the internal |
| // representation. |
| pairing::message::OptionsMessage::ProtocolRole RoleFromProto( |
| Options_RoleType role); |
| |
| ReadState read_state_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ProtobufWireAdapter); |
| }; |
| |
| } // namespace protobuf |
| } // namespace wire |
| } // namespace polo |
| |
| #endif // POLO_WIRE_PROTOBUF_PROTOBUFWIREADAPTER_H_ |