aboutsummaryrefslogtreecommitdiffstats
path: root/src/kvilib
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2010-12-30 03:00:17 +0000
committerGravatar Szymon Tomasz Stefanek2010-12-30 03:00:17 +0000
commitbaf289d6d1b8d2bc12f60e4a6307ef0ae9f2f950 (patch)
treea857375d4240f5f6b04ec3d8fb17496c47308d11 /src/kvilib
parentupdated docs (diff)
downloadKVIrc-baf289d6d1b8d2bc12f60e4a6307ef0ae9f2f950.tar.gz
KVIrc-baf289d6d1b8d2bc12f60e4a6307ef0ae9f2f950.tar.bz2
KVIrc-baf289d6d1b8d2bc12f60e4a6307ef0ae9f2f950.zip
Some fixes for the http request
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5271 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/kvilib')
-rw-r--r--src/kvilib/CMakeLists.txt1
-rw-r--r--src/kvilib/net/KviHttpRequest.cpp31
-rw-r--r--src/kvilib/net/KviHttpRequest.h33
3 files changed, 39 insertions, 26 deletions
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 <zlib.h>
-
#include "KviHttpRequest.h"
-#include "KviHttpRequestThread.h"
#include "KviLocale.h"
#include "KviNetUtils.h"
#include "KviDnsResolver.h"
@@ -40,6 +37,9 @@
#include <QTimer>
#include <QDir>
#include <QHostAddress>
+#include <QStringList>
+
+//#include <zlib.h>
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<QSslSocket *>(m_p->pSocket)->setProtocol(QSsl::AnyProtocol);
- static_cast<QSslSocket *>(m_p->pSocket)->connectToHostEncrypted(m_url.host(),uPort);
+ static_cast<QSslSocket *>(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 <QObject>
-#include <QStringList>
-
#include <QAbstractSocket>
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();
};