aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/core/udp_socket_connector.cc
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2019-03-07 18:34:52 +0100
committerMauro Sardara <msardara@cisco.com>2019-03-08 09:33:21 +0000
commit6922da2298b07d797029da4d40368adf12546639 (patch)
tree12e9c21553c84d4740fe0bb1d5c88c263e50d714 /libtransport/src/hicn/transport/core/udp_socket_connector.cc
parentb980b4384d610e64e4c8bdd749a6e8fb0ebd5117 (diff)
[HICN-85] Added state to connectors.
Change-Id: I26d1b37fec4a2482b97a80fa5648f243745908f7 Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/core/udp_socket_connector.cc')
-rw-r--r--libtransport/src/hicn/transport/core/udp_socket_connector.cc35
1 files changed, 19 insertions, 16 deletions
diff --git a/libtransport/src/hicn/transport/core/udp_socket_connector.cc b/libtransport/src/hicn/transport/core/udp_socket_connector.cc
index f38891e71..54c0eb978 100644
--- a/libtransport/src/hicn/transport/core/udp_socket_connector.cc
+++ b/libtransport/src/hicn/transport/core/udp_socket_connector.cc
@@ -38,10 +38,8 @@ UdpSocketConnector::UdpSocketConnector(
connection_timer_(io_service_),
connection_timeout_(io_service_),
read_msg_(packet_pool_.makePtr(nullptr)),
- is_connecting_(false),
is_reconnection_(false),
data_available_(false),
- is_closed_(false),
app_name_(app_name) {}
UdpSocketConnector::~UdpSocketConnector() {}
@@ -50,11 +48,10 @@ void UdpSocketConnector::connect(std::string ip_address, std::string port) {
endpoint_iterator_ = resolver_.resolve(
{ip_address, port, asio::ip::resolver_query_base::numeric_service});
+ state_ = ConnectorState::CONNECTING;
doConnect();
}
-void UdpSocketConnector::state() { return; }
-
void UdpSocketConnector::send(const uint8_t *packet, std::size_t len,
const PacketSentCallback &packet_sent) {
socket_.async_send(asio::buffer(packet, len),
@@ -67,7 +64,7 @@ void UdpSocketConnector::send(const Packet::MemBufPtr &packet) {
io_service_.post([this, packet]() {
bool write_in_progress = !output_buffer_.empty();
output_buffer_.push_back(std::move(packet));
- if (TRANSPORT_EXPECT_FALSE(!is_connecting_)) {
+ if (TRANSPORT_EXPECT_TRUE(state_ == ConnectorState::CONNECTED)) {
if (!write_in_progress) {
doWrite();
}
@@ -79,11 +76,13 @@ void UdpSocketConnector::send(const Packet::MemBufPtr &packet) {
}
void UdpSocketConnector::close() {
- io_service_.dispatch([this]() {
- is_closed_ = true;
- socket_.shutdown(asio::ip::udp::socket::shutdown_type::shutdown_both);
- socket_.close();
- });
+ if (state_ != ConnectorState::CLOSED) {
+ state_ = ConnectorState::CLOSED;
+ if (socket_.is_open()) {
+ socket_.shutdown(asio::ip::tcp::socket::shutdown_type::shutdown_both);
+ socket_.close();
+ }
+ }
}
void UdpSocketConnector::doWrite() {
@@ -136,15 +135,17 @@ void UdpSocketConnector::doRead() {
}
void UdpSocketConnector::tryReconnect() {
- if (!is_connecting_ && !is_closed_) {
+ if (state_ == ConnectorState::CONNECTED) {
TRANSPORT_LOGE("Connection lost. Trying to reconnect...\n");
- is_connecting_ = true;
+ state_ = ConnectorState::CONNECTING;
is_reconnection_ = true;
connection_timer_.expires_from_now(std::chrono::seconds(1));
connection_timer_.async_wait([this](const std::error_code &ec) {
if (!ec) {
- socket_.shutdown(asio::ip::udp::socket::shutdown_type::shutdown_both);
- socket_.close();
+ if (socket_.is_open()) {
+ socket_.shutdown(asio::ip::tcp::socket::shutdown_type::shutdown_both);
+ socket_.close();
+ }
startConnectionTimer();
doConnect();
}
@@ -157,7 +158,7 @@ void UdpSocketConnector::doConnect() {
[this](std::error_code ec, udp::resolver::iterator) {
if (!ec) {
connection_timeout_.cancel();
- is_connecting_ = false;
+ state_ = ConnectorState::CONNECTED;
doRead();
if (data_available_) {
@@ -176,7 +177,9 @@ void UdpSocketConnector::doConnect() {
});
}
-bool UdpSocketConnector::checkConnected() { return !is_connecting_; }
+bool UdpSocketConnector::checkConnected() {
+ return state_ == ConnectorState::CONNECTED;
+}
void UdpSocketConnector::enableBurst() { return; }