File indexing completed on 2024-04-28 03:50:13

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2010 Wes Hardaker <hardaker@users.sourceforge.net>
0004 //
0005 
0006 #include "AprsTCPIP.h"
0007 
0008 #include <QTcpSocket>
0009 
0010 #include "MarbleDebug.h"
0011 
0012 #include "AprsGatherer.h"
0013 
0014 using namespace Marble;
0015 
0016 AprsTCPIP::AprsTCPIP( const QString& hostName, int port )
0017     : m_hostName( hostName ),
0018       m_port( port ),
0019       m_numErrors( 0 )
0020 {
0021 }
0022 
0023 AprsTCPIP::~AprsTCPIP()
0024 {
0025 }
0026 
0027 QString
0028 AprsTCPIP::sourceName() const
0029 {
0030     return QString( "TCP" );
0031 }
0032 
0033 bool
0034 AprsTCPIP::canDoDirect() const
0035 {
0036     return false;
0037 }
0038 
0039 QIODevice *
0040 AprsTCPIP::openSocket() 
0041 {
0042     m_numErrors = 0;
0043 
0044     QTcpSocket *socket = new QTcpSocket();
0045     mDebug() << "Opening TCPIP socket to " << 
0046         m_hostName.toLocal8Bit().data() << ":" << m_port;
0047     socket->connectToHost( m_hostName, m_port );
0048     socket->waitForReadyRead();
0049 
0050     {
0051         // read the initial server statement
0052         char buf[4096];
0053         socket->readLine( buf, sizeof( buf ) );
0054         mDebug() << "Aprs TCPIP server: " << buf;
0055     }
0056 
0057     QString towrite( "user MARBLE pass -1 vers aprs-cgi 1.0 filter r/38/-120/200\n" );
0058     socket->write( towrite.toLocal8Bit().data(), towrite.length() );
0059 
0060     mDebug() << "opened TCPIP socket";
0061     return socket;
0062 }
0063 
0064 
0065 void
0066 AprsTCPIP::checkReadReturn( int length, QIODevice **socket,
0067                             AprsGatherer *gatherer ) 
0068 {
0069     if ( length < 0 || ( length == 0 && m_numErrors > 5 ) ) {
0070         // hard error.  try reopening
0071         mDebug() << "**** restarting TCPIP socket";
0072         delete *socket;
0073         gatherer->sleepFor( 1 );
0074         *socket = openSocket();
0075         return;
0076     }
0077     if ( length == 0 ) {
0078         ++m_numErrors;
0079         mDebug() << "**** Odd: read zero bytes from TCPIP socket";
0080         return;
0081     }
0082     return;
0083 }
0084