From baf289d6d1b8d2bc12f60e4a6307ef0ae9f2f950 Mon Sep 17 00:00:00 2001 From: Szymon Tomasz Stefanek Date: Thu, 30 Dec 2010 03:00:17 +0000 Subject: Some fixes for the http request git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5271 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/kvilib/CMakeLists.txt | 1 - src/kvilib/net/KviHttpRequest.cpp | 31 +++++++++++++++++++------------ src/kvilib/net/KviHttpRequest.h | 33 ++++++++++++++++++++------------- 3 files changed, 39 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/kvilib/CMakeLists.txt b/src/kvilib/CMakeLists.txt index fb6d67a8f..4274cc276 100644 --- a/src/kvilib/CMakeLists.txt +++ b/src/kvilib/CMakeLists.txt @@ -107,7 +107,6 @@ SET(kvilib_SRCS irc/KviUserIdentity.cpp net/KviDnsResolver.cpp net/KviHttpRequest.cpp - net/KviHttpRequestThread.cpp net/KviNetUtils.cpp net/KviSASL.cpp net/kvi_socket.cpp diff --git a/src/kvilib/net/KviHttpRequest.cpp b/src/kvilib/net/KviHttpRequest.cpp index 14febe034..02dabc3f1 100644 --- a/src/kvilib/net/KviHttpRequest.cpp +++ b/src/kvilib/net/KviHttpRequest.cpp @@ -22,10 +22,7 @@ // //============================================================================= -//#include - #include "KviHttpRequest.h" -#include "KviHttpRequestThread.h" #include "KviLocale.h" #include "KviNetUtils.h" #include "KviDnsResolver.h" @@ -40,6 +37,9 @@ #include #include #include +#include + +//#include class KviHttpRequestPrivate { @@ -49,6 +49,7 @@ public: KviDataBuffer * pBuffer; QTimer * pConnectTimeoutTimer; KviFile * pFile; + unsigned short uPort; }; @@ -389,13 +390,17 @@ void KviHttpRequest::slotConnectionTimedOut() emit terminated(false); } -bool KviHttpRequest::doConnect() +void KviHttpRequest::slotSocketHostResolved() { - unsigned short uPort = m_url.port(); - if(uPort == 0) - uPort = m_p->bIsSSL ? 443 : 80; + emit contactingHost(QString::fromAscii("%1:%2").arg(m_url.host()).arg(m_p->uPort)); + emit status(__tr2qs("Contacting host %1 on port %2").arg(m_url.host()).arg(m_p->uPort)); +} - emit contactingHost(QString::fromAscii("%1:%2").arg(m_url.host()).arg(uPort)); +bool KviHttpRequest::doConnect() +{ + m_p->uPort = m_url.port(); + if(m_p->uPort == 0) + m_p->uPort = m_p->bIsSSL ? 443 : 80; if(m_p->pSocket) closeSocket(); @@ -406,15 +411,19 @@ bool KviHttpRequest::doConnect() QObject::connect(m_p->pSocket,SIGNAL(disconnected()),this,SLOT(slotSocketDisconnected())); QObject::connect(m_p->pSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotSocketError(QAbstractSocket::SocketError))); QObject::connect(m_p->pSocket,SIGNAL(readyRead()),this,SLOT(slotSocketReadDataReady())); + QObject::connect(m_p->pSocket,SIGNAL(hostFound()),this,SLOT(slotSocketHostResolved())); + + emit resolvingHost(m_url.host()); if(m_p->bIsSSL) { static_cast(m_p->pSocket)->setProtocol(QSsl::AnyProtocol); - static_cast(m_p->pSocket)->connectToHostEncrypted(m_url.host(),uPort); + static_cast(m_p->pSocket)->connectToHostEncrypted(m_url.host(),m_p->uPort); } else { - m_p->pSocket->connectToHost(m_url.host(),uPort); + m_p->pSocket->connectToHost(m_url.host(),m_p->uPort); } + if(m_p->pConnectTimeoutTimer) { delete m_p->pConnectTimeoutTimer; @@ -441,7 +450,6 @@ bool KviHttpRequest::doConnect() ); */ - emit status(__tr2qs("Contacting host %1 on port %2").arg(m_url.host()).arg(uPort)); return true; } @@ -979,7 +987,6 @@ bool KviHttpRequest::startDnsLookup() KviQString::sprintf(tmp,__tr2qs("Looking up host %Q"),&(m_url.host())); emit status(tmp); // FIXME - emit resolvingHost(m_url.host()); return true; } diff --git a/src/kvilib/net/KviHttpRequest.h b/src/kvilib/net/KviHttpRequest.h index 637790448..0091a5fd8 100644 --- a/src/kvilib/net/KviHttpRequest.h +++ b/src/kvilib/net/KviHttpRequest.h @@ -33,8 +33,6 @@ #include "KviPointerHashTable.h" #include -#include - #include class KviDnsResolver; @@ -55,6 +53,7 @@ class KVILIB_API KviHttpRequest : public QObject, public KviHeapObject { Q_OBJECT public: + enum ProcessingType { HeadersOnly, // Download headers only (HEAD request) @@ -63,6 +62,7 @@ public: Lines, // Emit the data as ASCII text lines (the client must take care of decoding the data) StoreToFile // Store the data to a file }; + enum ExistingFileAction { Overwrite, // Overwrite existing file @@ -70,9 +70,13 @@ public: RenameExisting, // Automatically rename the existing file Resume // Attempt to resume the file (get partial content) }; + public: + KviHttpRequest(); - ~KviHttpRequest(); + + virtual ~KviHttpRequest(); + protected: // data KviUrl m_url; @@ -94,19 +98,13 @@ protected: unsigned int m_uRemainingChunkSize; bool m_bIgnoreRemainingData; // used in chunked transfer after the last chunk has been seen unsigned int m_uConnectionTimeout; // in seconds, 60 secs by default + private: - KviHttpRequestPrivate * m_p; -protected: - void processData(KviDataBuffer * data); - bool processHeader(KviCString &szHeader); - bool openFile(); - void emitLines(KviDataBuffer * pDataBuffer); + KviHttpRequestPrivate * m_p; - void resetStatus(); - void resetData(); - void resetInternalStatus(); public: + void setConnectionTimeout(unsigned int uConnectionTimeout) { m_uConnectionTimeout = uConnectionTimeout; @@ -152,7 +150,6 @@ signals: void terminated(bool bSuccess); - void status(const QString &message); void data(const KviCString &data); void binaryData(const KviDataBuffer &data); @@ -163,12 +160,22 @@ private: void closeSocket(); bool doConnect(); + void processData(KviDataBuffer * data); + bool processHeader(KviCString &szHeader); + bool openFile(); + void emitLines(KviDataBuffer * pDataBuffer); + + void resetStatus(); + void resetData(); + void resetInternalStatus(); + private slots: void slotSocketReadDataReady(); void slotSocketDisconnected(); void slotSocketConnected(); void slotSocketError(QAbstractSocket::SocketError socketError); void slotConnectionTimedOut(); + void slotSocketHostResolved(); }; -- cgit v1.3.1-10-gc9f91