udp_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::udp;
15 
16 // Default constructor.
18  socket_(io_service_)
19 {
20 }
21 
22 ReturnStatuses UDPInterface::open(const std::string& ip_address, uint32_t port, uint32_t receive_buffer_size)
23 {
24  receive_buffer_size_ = receive_buffer_size;
25  return UDPInterface::open(ip_address, port);
26 }
27 
28 ReturnStatuses UDPInterface::open(const std::string& ip_address, uint32_t port)
29 {
30  if (socket_.is_open())
31  return ReturnStatuses::OK;
32 
33  std::stringstream sPort;
34  sPort << port;
35  udp::resolver res(io_service_);
36  udp::resolver::query query(udp::v4(), ip_address.c_str(), sPort.str());
37  sender_endpoint_ = *res.resolve(query);
38  boost::system::error_code ec;
39 
40  socket_.connect(sender_endpoint_, ec);
41 
42  if (ec.value() == boost::system::errc::success)
43  {
44  return ReturnStatuses::OK;
45  }
46  else if (ec.value() == boost::asio::error::invalid_argument)
47  {
49  }
50  else
51  {
52  close();
54  }
55 }
56 
58 {
59  if (!socket_.is_open())
61 
62  boost::system::error_code ec;
63  socket_.close(ec);
64 
65  if (ec.value() == boost::system::errc::success)
66  return ReturnStatuses::OK;
67  else
69 }
70 
72 {
73  return socket_.is_open();
74 }
75 
76 ReturnStatuses UDPInterface::read(std::vector<uint8_t> *msg)
77 {
78  if (!socket_.is_open())
80 
81  boost::system::error_code ec;
82  msg->assign(receive_buffer_size_, 0);
83  size_t msg_size = socket_.receive(boost::asio::buffer(*msg), 0, ec);
84  msg->resize(msg_size);
85 
86  if (ec.value() == boost::system::errc::success)
87  return ReturnStatuses::OK;
88  else
90 }
91 
92 ReturnStatuses UDPInterface::write(const std::vector<uint8_t>& msg)
93 {
94  if (!socket_.is_open())
96 
97  boost::system::error_code ec;
98  socket_.send_to(boost::asio::buffer(msg), sender_endpoint_, 0, ec);
99 
100  if (ec.value() == boost::system::errc::success)
101  return ReturnStatuses::OK;
102  else
104 }
AS::Network::UDPInterface::io_service_
boost::asio::io_service io_service_
Definition: network_interface.h:55
AS::Network::UDPInterface::write
ReturnStatuses write(const std::vector< uint8_t > &msg)
Definition: udp_interface.cpp:92
AS::Network::UDPInterface::receive_buffer_size_
uint32_t receive_buffer_size_
Definition: network_interface.h:54
AS::Network::ReturnStatuses::OK
@ OK
AS::Network::ReturnStatuses::INIT_FAILED
@ INIT_FAILED
network_interface.h
AS::Network::UDPInterface::read
ReturnStatuses read(std::vector< uint8_t > *msg)
Definition: udp_interface.cpp:76
AS::Network::ReturnStatuses::SOCKET_CLOSED
@ SOCKET_CLOSED
AS::Network::ReturnStatuses::BAD_PARAM
@ BAD_PARAM
AS::Network::UDPInterface::sender_endpoint_
boost::asio::ip::udp::endpoint sender_endpoint_
Definition: network_interface.h:57
AS::Network
Definition: common.h:13
AS::Network::ReturnStatuses::CLOSE_FAILED
@ CLOSE_FAILED
AS::Network::ReturnStatuses::READ_FAILED
@ READ_FAILED
AS::Network::UDPInterface::socket_
boost::asio::ip::udp::socket socket_
Definition: network_interface.h:56
AS::Network::UDPInterface::UDPInterface
UDPInterface()
Definition: udp_interface.cpp:17
AS::Network::ReturnStatuses::WRITE_FAILED
@ WRITE_FAILED
AS::Network::UDPInterface::is_open
bool is_open()
Definition: udp_interface.cpp:71
AS::Network::UDPInterface::open
ReturnStatuses open(const std::string &ip_address, uint32_t port, uint32_t receive_buffer_size)
Definition: udp_interface.cpp:22
AS::Network::UDPInterface::close
ReturnStatuses close()
Definition: udp_interface.cpp:57
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