diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-07-28 20:16:00 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-07-28 20:16:00 +0000 |
| commit | 8a503d69ecb35d2e9c95885e4d1247011d788442 (patch) | |
| tree | 69c6dbf4e14fe1d6d2c87469d213f2c8db213525 /lib | |
| parent | 672048d4ee3b0c8f819db0512bc31887a4e12ff4 (diff) | |
| download | qmmp-8a503d69ecb35d2e9c95885e4d1247011d788442.tar.gz qmmp-8a503d69ecb35d2e9c95885e4d1247011d788442.tar.bz2 qmmp-8a503d69ecb35d2e9c95885e4d1247011d788442.zip | |
added http header parsing, fixed died lock
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@43 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/downloader.cpp | 30 | ||||
| -rw-r--r-- | lib/downloader.h | 2 |
2 files changed, 21 insertions, 11 deletions
diff --git a/lib/downloader.cpp b/lib/downloader.cpp index 7afec4cdd..d9101ae8d 100644 --- a/lib/downloader.cpp +++ b/lib/downloader.cpp @@ -43,26 +43,28 @@ static size_t curl_header(void *data, size_t size, size_t nmemb, Downloader *dl = (Downloader *)pointer; dl->mutex()->lock (); size_t data_size = size * nmemb; - if (data_size < 2) + if (data_size < 3) + { + dl->mutex()->unlock(); return data_size; + } //qDebug("header received: %s", (char*) data); QString str = QString::fromAscii((char *) data, data_size); str = str.trimmed (); - if (str.contains("Content-Type")) + if (str.left(4).contains("HTTP") || str.left(4).contains("ICY")) { - str = str.right(str.size() - str.indexOf(":") - 1); - qDebug(qPrintable(QString("content-type: ")+str.trimmed())); - dl->stream()->content_type = str.trimmed(); + qDebug("Downloader: header received"); } - if (str.contains("content-type")) + else { - str = str.right(str.size() - str.indexOf(":") - 1); - qDebug(qPrintable(QString("content-type: ")+str.trimmed())); - dl->stream()->content_type = str.trimmed(); + QString key = str.left(str.indexOf(":")).trimmed(); + QString value = str.right(str.size() - str.indexOf(":") - 1).trimmed(); + dl->stream()->header.insert(key, value); + qDebug("Downloader: key=%s, value=%s",qPrintable(key),qPrintable(value)); } dl->mutex()->unlock(); - return size * nmemb; + return data_size; } int curl_progress(void *pointer, double dltotal, double dlnow, double ultotal, double ulnow) @@ -122,7 +124,12 @@ QMutex *Downloader::mutex() QString Downloader::contentType() { - return m_stream.content_type; + QString content; + if (m_stream.header.contains("Content-Type")) + content = m_stream.header.value("Content-Type"); + if (m_stream.header.contains("content-type")) + content = m_stream.header.value("content-type"); + return content; } void Downloader::abort() @@ -188,6 +195,7 @@ void Downloader::run() m_stream.buf_fill = 0; m_stream.buf = 0; m_stream.aborted = FALSE; + m_stream.header.clear (); int return_code, response; qDebug("Downloader: starting libcurl"); m_mutex.unlock(); diff --git a/lib/downloader.h b/lib/downloader.h index 87ed03cfd..cdbc7b977 100644 --- a/lib/downloader.h +++ b/lib/downloader.h @@ -23,6 +23,7 @@ #include <QThread> #include <QMutex> #include <QByteArray> +#include <QMap> #include <curl/curl.h> @@ -36,6 +37,7 @@ struct Stream int buf_fill; QString content_type; bool aborted; + QMap <QString, QString> header; }; class Downloader : public QThread |
