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