Merge "Rootcanal: Use packets for LinkLayerSocket size"
diff --git a/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.cc b/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.cc
index ab2c5f1..ddff51b 100644
--- a/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.cc
+++ b/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.cc
@@ -18,8 +18,9 @@
#include <unistd.h>
-#include "packets/packet_view.h"
-#include "packets/view.h"
+#include "packet/packet_view.h"
+#include "packet/raw_builder.h"
+#include "packet/view.h"
using std::vector;
@@ -30,18 +31,18 @@
void LinkLayerSocketDevice::TimerTick() {
if (bytes_left_ == 0) {
- size_t size_bytes = sizeof(uint32_t);
- received_ = std::make_shared<std::vector<uint8_t>>(size_bytes);
- size_t bytes_received = socket_.TryReceive(size_bytes, received_->data());
+ auto packet_size = std::make_shared<std::vector<uint8_t>>(kSizeBytes);
+
+ size_t bytes_received = socket_.TryReceive(kSizeBytes, packet_size->data());
if (bytes_received == 0) {
return;
}
- ASSERT_LOG(bytes_received == size_bytes, "bytes_received == %d",
- static_cast<int>(bytes_received));
- packets::PacketView<true> size({packets::View(received_, 0, size_bytes)});
+ ASSERT_LOG(bytes_received == kSizeBytes, "bytes_received == %d", static_cast<int>(bytes_received));
+ bluetooth::packet::PacketView<bluetooth::packet::kLittleEndian> size(
+ {bluetooth::packet::View(packet_size, 0, kSizeBytes)});
bytes_left_ = size.begin().extract<uint32_t>();
- received_->resize(size_bytes + bytes_left_);
- offset_ = size_bytes;
+ received_ = std::make_shared<std::vector<uint8_t>>(bytes_left_);
+ offset_ = 0;
}
size_t bytes_received = socket_.TryReceive(bytes_left_, received_->data() + offset_);
if (bytes_received == 0) {
@@ -62,11 +63,16 @@
void LinkLayerSocketDevice::IncomingPacket(
model::packets::LinkLayerPacketView packet) {
- std::shared_ptr<std::vector<uint8_t>> payload_bytes =
- std::make_shared<std::vector<uint8_t>>(packet.begin(), packet.end());
- packets::PacketView<true> packet_view(payload_bytes);
+ auto size_packet = bluetooth::packet::RawBuilder();
+ size_packet.AddOctets4(packet.size());
+ std::vector<uint8_t> size_bytes;
+ bluetooth::packet::BitInserter bit_inserter(size_bytes);
+ size_packet.Serialize(bit_inserter);
- socket_.TrySend(packet_view);
+ if (socket_.TrySend(size_bytes) == kSizeBytes) {
+ std::vector<uint8_t> payload_bytes{packet.begin(), packet.end()};
+ socket_.TrySend(payload_bytes);
+ }
}
} // namespace test_vendor_lib
diff --git a/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.h b/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.h
index 2b662d1..564233c 100644
--- a/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.h
+++ b/vendor_libs/test_vendor_lib/model/devices/link_layer_socket_device.h
@@ -47,6 +47,8 @@
virtual void TimerTick() override;
+ static constexpr size_t kSizeBytes = sizeof(uint32_t);
+
private:
net::PolledSocket socket_;
Phy::Type phy_type_;
diff --git a/vendor_libs/test_vendor_lib/model/devices/polled_socket.cc b/vendor_libs/test_vendor_lib/model/devices/polled_socket.cc
index 2f96665..6fea766 100644
--- a/vendor_libs/test_vendor_lib/model/devices/polled_socket.cc
+++ b/vendor_libs/test_vendor_lib/model/devices/polled_socket.cc
@@ -45,17 +45,11 @@
file_descriptor_ = -1;
}
-size_t PolledSocket::TrySend(packets::PacketView<true> packet) {
+size_t PolledSocket::TrySend(const std::vector<uint8_t>& packet) {
if (file_descriptor_ == -1) {
return 0;
}
- // Could skip this copy if the packet is guaranteed to be contiguous.
- std::vector<uint8_t> copy;
- copy.reserve(packet.size());
- for (const auto&& c : packet) {
- copy.push_back(c);
- }
- int ret = write(file_descriptor_, copy.data(), copy.size());
+ int ret = write(file_descriptor_, packet.data(), packet.size());
if (ret == -1) {
LOG_WARN("%s error %s", __func__, strerror(errno));
return 0;
diff --git a/vendor_libs/test_vendor_lib/model/devices/polled_socket.h b/vendor_libs/test_vendor_lib/model/devices/polled_socket.h
index b697f56..a196fd6 100644
--- a/vendor_libs/test_vendor_lib/model/devices/polled_socket.h
+++ b/vendor_libs/test_vendor_lib/model/devices/polled_socket.h
@@ -26,8 +26,6 @@
#include <sys/socket.h>
#include <unistd.h>
-#include "packets/packet_view.h"
-
namespace test_vendor_lib {
namespace net {
@@ -41,7 +39,7 @@
PolledSocket(PolledSocket&& p);
virtual ~PolledSocket();
- size_t TrySend(packets::PacketView<true> packet);
+ size_t TrySend(const std::vector<uint8_t>& packet);
// size_t TrySendVector(const std::vector<const std::vector<uint8_t>&>& data);
size_t TryReceive(size_t num_bytes, uint8_t* data);