From 6922da2298b07d797029da4d40368adf12546639 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Thu, 7 Mar 2019 18:34:52 +0100 Subject: [HICN-85] Added state to connectors. Change-Id: I26d1b37fec4a2482b97a80fa5648f243745908f7 Signed-off-by: Mauro Sardara --- .../hicn/transport/core/raw_socket_connector.cc | 32 ++++++---------------- 1 file changed, 9 insertions(+), 23 deletions(-) (limited to 'libtransport/src/hicn/transport/core/raw_socket_connector.cc') diff --git a/libtransport/src/hicn/transport/core/raw_socket_connector.cc b/libtransport/src/hicn/transport/core/raw_socket_connector.cc index 78241b2ea..12cc4e0fa 100644 --- a/libtransport/src/hicn/transport/core/raw_socket_connector.cc +++ b/libtransport/src/hicn/transport/core/raw_socket_connector.cc @@ -54,6 +54,7 @@ RawSocketConnector::~RawSocketConnector() {} void RawSocketConnector::connect(const std::string &interface_name, const std::string &mac_address_str) { + state_ = ConnectorState::CONNECTING; memset(ðernet_header_, 0, sizeof(ethernet_header_)); struct ifreq ifr; struct ifreq if_mac; @@ -112,8 +113,6 @@ void RawSocketConnector::connect(const std::string &interface_name, doRecvPacket(); } -void RawSocketConnector::state() { return; } - void RawSocketConnector::send(const uint8_t *packet, std::size_t len, const PacketSentCallback &packet_sent) { // asio::async_write(socket_, asio::buffer(packet, len), @@ -124,30 +123,16 @@ void RawSocketConnector::send(const uint8_t *packet, std::size_t len, } void RawSocketConnector::send(const Packet::MemBufPtr &packet) { - // Packet &p = const_cast(packet); - // p.setTcpChecksum(); - - // if (!p.checkIntegrity()) { - // TRANSPORT_LOGW("Sending message with wrong checksum!!!"); - // } - - // std::shared_ptr ptr; - // try { - // ptr = packet.shared_from_this(); - // } catch (std::bad_weak_ptr& exc) { - // TRANSPORT_LOGW("Sending interest which has not been created using a - // shared PTR! A copy will be made."); ptr = - // std::shared_ptr(packet.clone()); - // } - io_service_.post([this, packet]() { bool write_in_progress = !output_buffer_.empty(); output_buffer_.push_back(std::move(packet)); - if (!write_in_progress) { - doSendPacket(); - } else { - // Tell the handle connect it has data to write - data_available_ = true; + if (TRANSPORT_EXPECT_TRUE(state_ == ConnectorState::CONNECTED)) { + if (!write_in_progress) { + doSendPacket(); + } else { + // Tell the handle connect it has data to write + data_available_ = true; + } } }); } @@ -202,6 +187,7 @@ void RawSocketConnector::doRecvPacket() { } void RawSocketConnector::doConnect() { + state_ = ConnectorState::CONNECTED; socket_.bind(raw_endpoint(&link_layer_address_, sizeof(link_layer_address_))); } -- cgit 1.2.3-korg