diff options
Diffstat (limited to 'cpp/src/polo/wire/protobuf/protobufwireadapter.h')
-rw-r--r-- | cpp/src/polo/wire/protobuf/protobufwireadapter.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/cpp/src/polo/wire/protobuf/protobufwireadapter.h b/cpp/src/polo/wire/protobuf/protobufwireadapter.h new file mode 100644 index 0000000..f033c78 --- /dev/null +++ b/cpp/src/polo/wire/protobuf/protobufwireadapter.h @@ -0,0 +1,152 @@ +// 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_ |