rfspace: Remove broken asio code

Asio sockets were replaced with native BSD sockets in
e1b699fda0, 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.

Signed-off-by: Eric Wild <ewild@sysmocom.de>
gr3.8
Clayton Smith 2 years ago committed by Eric Wild
parent e5bee0820f
commit 2d504bde50
  1. 146
      lib/rfspace/rfspace_source_c.cc
  2. 16
      lib/rfspace/rfspace_source_c.h

@ -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;
}

@ -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;

Loading…
Cancel
Save