aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-07-28 20:16:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-07-28 20:16:00 +0000
commit8a503d69ecb35d2e9c95885e4d1247011d788442 (patch)
tree69c6dbf4e14fe1d6d2c87469d213f2c8db213525 /lib
parent672048d4ee3b0c8f819db0512bc31887a4e12ff4 (diff)
downloadqmmp-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.cpp30
-rw-r--r--lib/downloader.h2
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