Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Unified Diff: components/proximity_auth/ble/bluetooth_low_energy_weave_packet_receiver.h

Issue 2053013002: Weave Packet Receiver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proximity_auth_weave_migration
Patch Set: added state transtion out of connecting Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/proximity_auth/ble/bluetooth_low_energy_weave_packet_receiver.h
diff --git a/components/proximity_auth/ble/bluetooth_low_energy_weave_packet_receiver.h b/components/proximity_auth/ble/bluetooth_low_energy_weave_packet_receiver.h
new file mode 100644
index 0000000000000000000000000000000000000000..adeb2badeba0daa8b80c2a782eb16ef707133294
--- /dev/null
+++ b/components/proximity_auth/ble/bluetooth_low_energy_weave_packet_receiver.h
@@ -0,0 +1,108 @@
+// Copyright 2016 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.
+
+#ifndef COMPONENTS_PROXIMITY_AUTH_BLE_BLUETOOTH_LOW_ENERGY_WEAVE_PACKET_RECEIVER_H_
+#define COMPONENTS_PROXIMITY_AUTH_BLE_BLUETOOTH_LOW_ENERGY_WEAVE_PACKET_RECEIVER_H_
+
+#include <stdint.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "components/proximity_auth/ble/bluetooth_low_energy_weave_packet_generator.h"
+
+namespace proximity_auth {
+// Receive the messages sent with uWeave protocol.
+// TODO(jingxuy): move the enums from BluetoothLowEnergyWeavePacketGenerator to
+// a shared location
+// TODO(jingxuy): a complete state transition comment
+class BluetoothLowEnergyWeavePacketReceiver {
+ public:
+ class Factory {
+ public:
+ static std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> NewInstance();
+
+ // Exposed for testing.
+ static void SetInstanceForTesting(Factory* factory);
+
+ protected:
+ // Exposed for testing.
+ BluetoothLowEnergyWeavePacketReceiver* BuildInstance();
+
+ private:
+ static Factory* factory_instance_;
+ };
+
+ enum State {
+ CONNECTING = 0x00,
+ RECEIVING_DATA = 0x01,
+ DATA_READY = 0x02,
+ CONNECTION_CLOSED = 0x03,
+ ERROR = 0x04
+ };
sacomoto 2016/06/13 17:16:40 When this class detect an error, e.g. wrong packet
jingxuy 2016/06/16 08:42:28 Done.
+
+ ~BluetoothLowEnergyWeavePacketReceiver();
+
+ typedef std::vector<uint8_t> Packet;
+
+ // Get the receiver’s state.
+ State GetState();
+
+ // Return the packet size that the receiver parsed out of request/response.
+ uint32_t GetPacketSize();
+
+ // Will crash unless receiver is in State::CONNECTION_CLOSED.
+ BluetoothLowEnergyWeavePacketGenerator::ReasonForClose GetReasonForClose();
+
+ // Will crash unless receiver is in State::DATA_READY.
+ // NOTE: if this function is not called in DATA_READY state and the receiver
+ // transitions out of that state, the data will be gone!
+ std::string GetDataMessage();
+
+ // Add a packet that's just been received over Connection to the receiver.
+ State ReceivePacket(const Packet& packet);
+
+ protected:
+ BluetoothLowEnergyWeavePacketReceiver();
+
+ private:
+ void ReceiveControlPacket(const Packet& packet);
+ void ReceiveDataPacket(const Packet& packet);
+
+ void ReceiveConnectionRequest(const Packet& packet);
+ void ReceiveConnectionResponse(const Packet& packet);
+ void ReceiveConnectionClose(const Packet& packet);
+ void AppendData(const Packet& packet);
+
+ uint16_t GetShortField(const Packet& packet, uint32_t index);
+ uint8_t GetPacketType(const Packet& packet);
+ uint8_t GetControlCommand(const Packet& packet);
+ void VerifyPacketCounter(const Packet& packet);
+ bool IsFirstDataPacket(const Packet& packet);
+ bool IsLastDataPacket(const Packet& packet);
+
+ // Max packet size of the connection.
+ // Default is 0 which means the server will determine the size by observing
+ // ATT_MTU of the client.
+ uint32_t packet_size_;
+
+ // Counter for the number of packets sent, starting at 0.
+ uint32_t packet_number_;
+
+ // Current state of the receiver.
+ // Certain functions will only return valid value if the receiver is in the
+ // appropriate state.
+ State state_;
+
+ // The reason why the connection was closed if any.
+ BluetoothLowEnergyWeavePacketGenerator::ReasonForClose reason_for_close_;
+
+ // The data message if there is one.
+ Packet data_message_;
+};
+
+} // namespace proximity_auth
+
+#endif // COMPONENTS_PROXIMITY_AUTH_BLE_BLUETOOTH_LOW_ENERGY_WEAVE_PACKET_RECEIVER_H_

Powered by Google App Engine
This is Rietveld 408576698