summaryrefslogtreecommitdiff
path: root/cpp/src/polo/wire/protobuf/protobufwireadapter.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/polo/wire/protobuf/protobufwireadapter.h')
-rw-r--r--cpp/src/polo/wire/protobuf/protobufwireadapter.h152
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_