/*************************************************************************** * Copyright (C) 2003 by Torben Nielsen * * torben.nielsen@rocketmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "serverspy.h" #include "dnshelper.h" #include #include #include #include #include Serverspy::Serverspy(QWidget *parent, const char *name, WFlags f) : ServerspyBase(parent, name, f) { connect(&m_socket, SIGNAL(hostFound()), SLOT(socketHostFound())); connect(&m_socket, SIGNAL(connected()), SLOT(socketConnected())); connect(&m_socket, SIGNAL(error(int)), SLOT(socketError(int))); connect(&m_socket, SIGNAL(readyRead()), SLOT(socketReadyRead())); m_timer = new QTimer(this); connect( m_timer, SIGNAL( timeout() ), SLOT( socketTimeout() ) ); } Serverspy::~Serverspy() { if (m_socket.state() != QSocket::Idle || m_socket.state() != QSocket::Closing) m_socket.close(); } void Serverspy::findServer() { QString tmp = m_address->text(); m_address->setText( tmp.stripWhiteSpace() ); if ( m_address->text().isEmpty() ) return; QString ip = DnsHelper::getIp( m_address->text() ); QString hostname = DnsHelper::getHostname( ip ); m_ip->setText(QString("IP-address: ") + ip ); m_hostname->setText(QString("Orig. hostname: ") + hostname ); m_timer->start( 20000, true ); if ( m_socket.state() != QSocket::Idle ) m_socket.close(); m_output->setText("Result: looking up server"); m_socket.connectToHost( m_address->text(), 80 ); } void Serverspy::socketHostFound() { m_output->setText("Result: connecting to server"); } void Serverspy::socketConnected() { QString host_header = QString("Host: ").append(m_address->text()).append("\n"); QTextStream out(&m_socket); out << QString("HEAD / HTTP/1.1\n").append(host_header).append("\r\n");; m_output->setText("Result: requesting data"); } void Serverspy::socketError(int err) { switch(err) { case QSocket::ErrConnectionRefused : m_output->setText("Result: error - connection refused!"); break; case QSocket::ErrHostNotFound : m_output->setText("Result: error - host not found!"); break; case QSocket::ErrSocketRead : m_output->setText("Result: error - could not read from socket"); break; default : m_output->setText("Result: error"); } m_socket.close(); m_timer->stop(); } void Serverspy::socketReadyRead() { while ( m_socket.canReadLine() ) { QString line = m_socket.readLine(); QRegExp regex("^Server: ", true); if ( regex.search(line) != -1 ) { line = line.remove(regex); line = line.stripWhiteSpace(); m_output->setText( QString("Software: ").append(line) ); m_timer->stop(); m_socket.close(); break; } } } void Serverspy::socketTimeout() { m_socket.close(); m_output->setText("Result: connection timed out"); } #include "serverspy.moc"