tcp_interface.cpp
Go to the documentation of this file.
1 /*
2 * Unpublished Copyright (c) 2009-2017 AutonomouStuff, LLC, All Rights Reserved.
3 *
4 * This file is part of the network_interface ROS 1.0 driver which is released under the MIT license.
5 * See file LICENSE included with this software or go to https://opensource.org/licenses/MIT for full license details.
6 */
7 
9 
10 #include <string>
11 #include <vector>
12 
13 using namespace AS::Network; // NOLINT
14 using boost::asio::ip::tcp;
15 
16 // Default constructor.
18  socket_(io_service_)
19 {
20 }
21 
22 ReturnStatuses TCPInterface::open(std::string ip_address, const int &port)
23 {
24  if (socket_.is_open())
25  return ReturnStatuses::OK;
26 
27  std::stringstream sPort;
28  sPort << port;
29  tcp::resolver res(io_service_);
30  tcp::resolver::query query(tcp::v4(), ip_address, sPort.str());
31  tcp::resolver::iterator it = res.resolve(query);
32  boost::system::error_code ec;
33 
34  socket_.connect(*it, ec);
35 
36  if (ec.value() == boost::system::errc::success)
37  {
38  return ReturnStatuses::OK;
39  }
40  else if (ec.value() == boost::asio::error::invalid_argument)
41  {
43  }
44  else
45  {
46  close();
48  }
49 }
50 
52 {
53  if (!socket_.is_open())
54  return ReturnStatuses::OK;
55 
56  boost::system::error_code ec;
57  socket_.close(ec);
58 
59  if (ec.value() == boost::system::errc::success)
60  return ReturnStatuses::OK;
61  else
63 }
64 
66 {
67  return socket_.is_open();
68 }
69 
70 ReturnStatuses TCPInterface::read(std::vector<uint8_t> *msg)
71 {
72  if (!socket_.is_open())
74 
75  error_.assign(boost::system::errc::success, boost::system::system_category());
76 
77  msg->resize(socket_.available(), 0);
78  boost::asio::read(socket_, boost::asio::buffer(*msg), error_);
79 
80  // Reset the io service so that it is available for the next call to TCPInterface::read
81  io_service_.reset();
82 
83  if (error_.value() == boost::system::errc::success)
84  return ReturnStatuses::OK;
85  else
87 }
88 
89 ReturnStatuses TCPInterface::read_exactly(std::vector<uint8_t> *msg, const size_t &bytes_to_read)
90 {
91  if (!socket_.is_open())
93 
94  error_.assign(boost::system::errc::success, boost::system::system_category());
95 
96  msg->resize(bytes_to_read, 0);
97  boost::asio::read(socket_, boost::asio::buffer(*msg), boost::asio::transfer_exactly(bytes_to_read));
98 
99  // Reset the io service so that it is available for the next call to TCPInterface::read_exactly
100  io_service_.reset();
101 
102  if (error_.value() == boost::system::errc::success)
103  return ReturnStatuses::OK;
104  else
106 }
107 
108 ReturnStatuses TCPInterface::write(const std::vector<uint8_t> &msg)
109 {
110  if (!socket_.is_open())
112 
113  boost::system::error_code ec;
114  boost::asio::write(socket_, boost::asio::buffer(msg), ec);
115 
116  if (ec.value() == boost::system::errc::success)
117  {
118  return ReturnStatuses::OK;
119  }
120  else
121  {
123  }
124 }
AS::Network::TCPInterface::open
ReturnStatuses open(std::string ip_address, const int &port)
Definition: tcp_interface.cpp:22
AS::Network::TCPInterface::socket_
boost::asio::ip::tcp::socket socket_
Definition: network_interface.h:82
AS::Network::TCPInterface::read
ReturnStatuses read(std::vector< uint8_t > *msg)
Definition: tcp_interface.cpp:70
AS::Network::ReturnStatuses::OK
@ OK
AS::Network::TCPInterface::read_exactly
ReturnStatuses read_exactly(std::vector< uint8_t > *msg, const size_t &bytes_to_read)
Definition: tcp_interface.cpp:89
AS::Network::ReturnStatuses::INIT_FAILED
@ INIT_FAILED
network_interface.h
AS::Network::TCPInterface::close
ReturnStatuses close()
Definition: tcp_interface.cpp:51
AS::Network::TCPInterface::error_
boost::system::error_code error_
Definition: network_interface.h:83
AS::Network::TCPInterface::write
ReturnStatuses write(const std::vector< uint8_t > &msg)
Definition: tcp_interface.cpp:108
AS::Network::ReturnStatuses::SOCKET_CLOSED
@ SOCKET_CLOSED
AS::Network::ReturnStatuses::BAD_PARAM
@ BAD_PARAM
AS::Network::TCPInterface::TCPInterface
TCPInterface()
Definition: tcp_interface.cpp:17
AS::Network
Definition: common.h:13
AS::Network::ReturnStatuses::CLOSE_FAILED
@ CLOSE_FAILED
AS::Network::ReturnStatuses::READ_FAILED
@ READ_FAILED
AS::Network::ReturnStatuses::WRITE_FAILED
@ WRITE_FAILED
AS::Network::TCPInterface::io_service_
boost::asio::io_service io_service_
Definition: network_interface.h:81
AS::Network::TCPInterface::is_open
bool is_open()
Definition: tcp_interface.cpp:65
AS::Network::ReturnStatuses
ReturnStatuses
Definition: common.h:16


network_interface
Author(s): Joshua Whitley , Daniel Stanek , Joe Kale
autogenerated on Wed Mar 2 2022 00:35:33