[PATCH] rfspace: Remove broken asio code

argilo at gmail.com argilo at gmail.com
Fri Oct 23 03:06:12 UTC 2020


From: Clayton Smith <argilo at gmail.com>

Asio sockets were replaced with native BSD sockets in
e1b699fda04b114c8973e4cbef929781d2312ba5, and the old code was placed
behind #ifdef USE_ASIO. Subsequent commits soon broke the asio code.
Since it's been broken for a long time, I doubt anyone is using it, so
it makes sense to remove it.
---
 lib/rfspace/rfspace_source_c.cc | 146 --------------------------------
 lib/rfspace/rfspace_source_c.h  |  16 ----
 2 files changed, 162 deletions(-)

diff --git a/lib/rfspace/rfspace_source_c.cc b/lib/rfspace/rfspace_source_c.cc
index 121dcde032..6bd741252d 100644
--- a/lib/rfspace/rfspace_source_c.cc
+++ b/lib/rfspace/rfspace_source_c.cc
@@ -27,7 +27,6 @@
 #include "config.h"
 #endif
 
-#ifndef USE_ASIO
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -35,7 +34,6 @@
 #include <netinet/udp.h>
 #include <arpa/inet.h>
 #include <netdb.h>
-#endif
 
 #include <fcntl.h>
 #include <unistd.h>
@@ -54,9 +52,6 @@
 #include <boost/format.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/algorithm/string.hpp>
-#ifdef USE_ASIO
-#include <boost/asio/deadline_timer.hpp>
-#endif
 
 #include <gnuradio/io_signature.h>
 
@@ -64,9 +59,6 @@
 #include "rfspace_source_c.h"
 
 using namespace boost::assign;
-#ifdef USE_ASIO
-using boost::asio::deadline_timer;
-#endif
 
 #define DEFAULT_HOST  "127.0.0.1" /* We assume a running "siqs" from CuteSDR project */
 #define DEFAULT_PORT  50000
@@ -102,15 +94,8 @@ rfspace_source_c::rfspace_source_c (const std::string &args)
                     gr::io_signature::make (MIN_IN, MAX_IN, sizeof (gr_complex)),
                     gr::io_signature::make (MIN_OUT, MAX_OUT, sizeof (gr_complex))),
     _radio(RADIO_UNKNOWN),
-#ifdef USE_ASIO
-    _io_service(),
-    _resolver(_io_service),
-    _t(_io_service),
-    _u(_io_service),
-#else
     _tcp(-1),
     _udp(-1),
-#endif
     _usb(-1),
     _running(false),
     _keep_running(false),
@@ -239,30 +224,6 @@ rfspace_source_c::rfspace_source_c (const std::string &args)
     /* SDR-IP 4.4.4 Data Output UDP IP and Port Address */
     /* NETSDR 4.4.3 Data Output UDP IP and Port Address */
 
-#ifdef USE_ASIO
-
-    tcp::resolver::query query(tcp::v4(), host.c_str(), port_str.c_str());
-    tcp::resolver::iterator iterator = _resolver.resolve(query);
-
-    boost::system::error_code ec;
-
-    boost::asio::connect(_t, iterator, ec);
-    if ( ec )
-      throw std::runtime_error(ec.message() + " (" + host + ":" + port_str + ")");
-
-    _u.open(udp::v4(), ec);
-    if ( ec )
-      throw std::runtime_error(ec.message());
-
-    _u.bind(udp::endpoint(udp::v4(), DEFAULT_PORT), ec);
-      if ( ec )
-        throw std::runtime_error(ec.message());
-
-    _u.set_option(udp::socket::reuse_address(true));
-    _t.set_option(udp::socket::reuse_address(true));
-
-#else
-
     if ( (_tcp = socket(AF_INET, SOCK_STREAM, 0) ) < 0)
     {
       throw std::runtime_error("Could not create TCP socket");
@@ -339,8 +300,6 @@ rfspace_source_c::rfspace_source_c (const std::string &args)
       throw std::runtime_error("Bind of UDP socket failed: " + std::string(strerror(errno)));
     }
 
-#endif
-
   }
 
   /* Wait 10 ms before sending queries to device (required for networked radios). */
@@ -506,10 +465,8 @@ rfspace_source_c::rfspace_source_c (const std::string &args)
  */
 rfspace_source_c::~rfspace_source_c ()
 {
-#ifndef USE_ASIO
   close(_tcp);
   close(_udp);
-#endif
 
   if ( RFSPACE_SDR_IQ == _radio )
   {
@@ -600,11 +557,6 @@ bool rfspace_source_c::transaction( const unsigned char *cmd, size_t size,
   {
     std::lock_guard<std::mutex> lock(_tcp_lock);
 
-#ifdef USE_ASIO
-    _t.write_some( boost::asio::buffer(cmd, size) );
-
-    rx_bytes = _t.read_some( boost::asio::buffer(data, sizeof(data)) );
-#else
     if ( write(_tcp, cmd, size) != (int)size )
       return false;
 
@@ -624,7 +576,6 @@ bool rfspace_source_c::transaction( const unsigned char *cmd, size_t size,
       return false;
 
     rx_bytes = 2 + length; /* header + payload */
-#endif
   }
 
   response.resize( rx_bytes );
@@ -852,10 +803,6 @@ int rfspace_source_c::work( int noutput_items,
     return noutput_items;
   }
 
-#ifdef USE_ASIO
-  udp::endpoint ep;
-  size_t rx_bytes = _u.receive_from( boost::asio::buffer(data, sizeof(data)), ep );
-#else
   struct sockaddr_in sa_in;           /* remote address */
   socklen_t addrlen = sizeof(sa_in);  /* length of addresses */
   ssize_t rx_bytes = recvfrom(_udp, data, sizeof(data), 0, (struct sockaddr *)&sa_in, &addrlen);
@@ -864,7 +811,6 @@ int rfspace_source_c::work( int noutput_items,
     std::cerr << "recvfrom returned " << rx_bytes << std::endl;
     return WORK_DONE;
   }
-#endif
 
   #define HEADER_SIZE 2
   #define SEQNUM_SIZE 2
@@ -892,11 +838,7 @@ int rfspace_source_c::work( int noutput_items,
   if ( diff > 1 )
   {
     std::cerr << "Lost " << diff << " packets from "
-#ifdef USE_ASIO
-              << ep
-#else
               << inet_ntoa(sa_in.sin_addr) << ":" << ntohs(sa_in.sin_port)
-#endif
               << std::endl;
   }
 
@@ -977,48 +919,11 @@ typedef struct
   uint16_t port;
 } unit_t;
 
-#ifdef USE_ASIO
-static void handle_receive( const boost::system::error_code& ec,
-                            std::size_t length,
-                            boost::system::error_code* out_ec,
-                            std::size_t* out_length )
-{
-  *out_ec = ec;
-  *out_length = length;
-}
-
-static void handle_timer( const boost::system::error_code& ec,
-                          boost::system::error_code* out_ec )
-{
-  *out_ec = boost::asio::error::timed_out;
-}
-#endif
 
 static std::vector < unit_t > discover_netsdr()
 {
   std::vector < unit_t > units;
 
-#ifdef USE_ASIO
-  boost::system::error_code ec;
-  boost::asio::io_service ios;
-  udp::socket socket(ios);
-  deadline_timer timer(ios);
-
-  timer.expires_at(boost::posix_time::pos_infin);
-
-  socket.open(udp::v4(), ec);
-
-  if ( ec )
-    return units;
-
-  socket.bind(udp::endpoint(udp::v4(), DISCOVER_CLIENT_PORT), ec);
-
-  if ( ec )
-    return units;
-
-  socket.set_option(udp::socket::reuse_address(true));
-  socket.set_option(boost::asio::socket_base::broadcast(true));
-#else
   int sock;
 
   if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
@@ -1058,7 +963,6 @@ static std::vector < unit_t > discover_netsdr()
     close(sock);
     return units;
   }
-#endif
   discover_common_msg_t tx_msg;
   memset( (void *)&tx_msg, 0, sizeof(discover_common_msg_t) );
 
@@ -1067,64 +971,18 @@ static std::vector < unit_t > discover_netsdr()
   tx_msg.key[0] = KEY0;
   tx_msg.key[1] = KEY1;
   tx_msg.op = MSG_REQ;
-#ifdef USE_ASIO
-  udp::endpoint ep(boost::asio::ip::address_v4::broadcast(), DISCOVER_SERVER_PORT);
-  socket.send_to(boost::asio::buffer(&tx_msg, sizeof(tx_msg)), ep);
-#else
   sendto(sock, &tx_msg, sizeof(tx_msg), 0, (struct sockaddr *)&peer_sa, sizeof(peer_sa));
-#endif
   while ( true )
   {
     std::size_t rx_bytes = 0;
     unsigned char data[1024*2];
 
-#ifdef USE_ASIO
-    // Set up the variables that receive the result of the asynchronous
-    // operation. The error code is set to would_block to signal that the
-    // operation is incomplete. Asio guarantees that its asynchronous
-    // operations will never fail with would_block, so any other value in
-    // ec indicates completion.
-    ec = boost::asio::error::would_block;
-
-    // Start the asynchronous receive operation. The handle_receive function
-    // used as a callback will update the ec and rx_bytes variables.
-    socket.async_receive( boost::asio::buffer(data, sizeof(data)),
-        boost::bind(handle_receive, _1, _2, &ec, &rx_bytes) );
-
-    // Set a deadline for the asynchronous operation.
-    timer.expires_from_now( boost::posix_time::milliseconds(10) );
-
-    // Start an asynchronous wait on the timer. The handle_timer function
-    // used as a callback will update the ec variable.
-    timer.async_wait( boost::bind(handle_timer, _1, &ec) );
-
-    // Reset the io_service in preparation for a subsequent run_one() invocation.
-    ios.reset();
-
-    // Block until at least one asynchronous operation has completed.
-    do ios.run_one(); while ( ec == boost::asio::error::would_block );
-
-    if ( boost::asio::error::timed_out == ec ) /* timer was first to complete */
-    {
-      // Please note that cancel() has portability issues on some versions of
-      // Microsoft Windows, and it may be necessary to use close() instead.
-      // Consult the documentation for cancel() for further information.
-      socket.cancel();
-
-      break;
-    }
-    else /* socket was first to complete */
-    {
-      timer.cancel();
-    }
-#else
     socklen_t addrlen = sizeof(peer_sa);  /* length of addresses */
     int nbytes = recvfrom(sock, data, sizeof(data), 0, (struct sockaddr *)&peer_sa, &addrlen);
     if ( nbytes <= 0 )
       break;
 
     rx_bytes = nbytes;
-#endif
 
     if ( rx_bytes >= sizeof(discover_common_msg_t) )
     {
@@ -1151,11 +1009,7 @@ static std::vector < unit_t > discover_netsdr()
       }
     }
   }
-#ifdef USE_ASIO
-  socket.close(ec);
-#else
   close(sock);
-#endif
 
   return units;
 }
diff --git a/lib/rfspace/rfspace_source_c.h b/lib/rfspace/rfspace_source_c.h
index a51bfc6f8a..d2bf66d9c5 100644
--- a/lib/rfspace/rfspace_source_c.h
+++ b/lib/rfspace/rfspace_source_c.h
@@ -20,11 +20,6 @@
 #ifndef INCLUDED_RFSPACE_SOURCE_C_H
 #define INCLUDED_RFSPACE_SOURCE_C_H
 
-//#define USE_ASIO
-
-#ifdef USE_ASIO
-#include <boost/asio.hpp>
-#endif
 #include <gnuradio/thread/thread.h>
 #include <gnuradio/block.h>
 #include <gnuradio/sync_block.h>
@@ -36,10 +31,6 @@
 
 #include "osmosdr/ranges.h"
 #include "source_iface.h"
-#ifdef USE_ASIO
-using boost::asio::ip::tcp;
-using boost::asio::ip::udp;
-#endif
 class rfspace_source_c;
 
 #ifndef SOCKET
@@ -144,15 +135,8 @@ private: /* members */
 
   radio_type _radio;
 
-#ifdef USE_ASIO
-  boost::asio::io_service _io_service;
-  tcp::resolver _resolver;
-  tcp::socket _t;
-  udp::socket _u;
-#else
   SOCKET _tcp;
   SOCKET _udp;
-#endif
   int _usb;
   bool _running;
   bool _keep_running;
-- 
2.25.1



More information about the osmocom-sdr mailing list