Index: chromeos/components/tether/message_wrapper.h |
diff --git a/chromeos/components/tether/message_wrapper.h b/chromeos/components/tether/message_wrapper.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d62ac5fb1754f46d193bc65551376c7a8339ebfe |
--- /dev/null |
+++ b/chromeos/components/tether/message_wrapper.h |
@@ -0,0 +1,59 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <google/protobuf/message_lite.h> |
+#include <memory> |
+ |
+#include "base/macros.h" |
+#include "chromeos/components/tether/proto/tether.pb.h" |
+ |
+namespace chromeos { |
+ |
+namespace tether { |
+ |
+// Wraps a message sent between devices. To send a message over the wire, |
+// construct a MessageWrapper by passing the message's proto as a constructor |
+// parameter, then call |ToRawMessage()| and send the resulting string. When a |
+// message has been received, pass it to |FromRawMessage()| to create a |
+// MessageWrapper object, then use |GetMessageType()| to determine the type of |
+// message that has been received. To access the wrapped proto for a received |
+// message, call |GetProto()| and cast the result to the associated message |
+// class. |
+class MessageWrapper { |
+ public: |
+ // Creates a MessageWrapper from a raw string received from a remote device. |
+ // Returns |nullptr| if the received message is not a valid tethering message. |
+ static std::unique_ptr<MessageWrapper> FromRawMessage( |
+ const std::string& message); |
+ |
+ MessageWrapper(const ConnectTetheringRequest& request); |
+ MessageWrapper(const ConnectTetheringResponse& response); |
+ MessageWrapper(const DisconnectTetheringRequest& request); |
+ MessageWrapper(const KeepAliveTickle& tickle); |
+ MessageWrapper(const TetherAvailabilityRequest& request); |
+ MessageWrapper(const TetherAvailabilityResponse& response); |
+ |
+ ~MessageWrapper(); |
+ |
+ std::shared_ptr<google::protobuf::MessageLite> GetProto() const; |
+ MessageType GetMessageType() const; |
+ |
+ // To send a message to a remote device, use ToRawMessage() and send the |
+ // result over the wire. |
+ std::string ToRawMessage() const; |
+ |
+ protected: |
+ MessageWrapper(const MessageType& type, |
+ std::shared_ptr<google::protobuf::MessageLite> proto); |
+ |
+ private: |
+ MessageType type_; |
+ std::shared_ptr<google::protobuf::MessageLite> proto_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MessageWrapper); |
+}; |
+ |
+} // namespace tether |
+ |
+} // namespace chromeos |