aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-05-16 12:12:08 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-05-16 12:12:08 +0000
commit62f7371b8af93302a0d6044717e0d46399cc64e8 (patch)
treecfe6a37d0ac517ca90529f77e964347b5141e91d
parent61795f7dc3aff2ec8eb4d73292b6584a4dedd4b0 (diff)
downloadqmmp-62f7371b8af93302a0d6044717e0d46399cc64e8.tar.gz
qmmp-62f7371b8af93302a0d6044717e0d46399cc64e8.tar.bz2
qmmp-62f7371b8af93302a0d6044717e0d46399cc64e8.zip
http plugin: fixed http header encoding
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6352 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Transports/http/httpstreamreader.cpp31
-rw-r--r--src/plugins/Transports/http/httpstreamreader.h3
2 files changed, 23 insertions, 11 deletions
diff --git a/src/plugins/Transports/http/httpstreamreader.cpp b/src/plugins/Transports/http/httpstreamreader.cpp
index a667025f8..82a5e2f29 100644
--- a/src/plugins/Transports/http/httpstreamreader.cpp
+++ b/src/plugins/Transports/http/httpstreamreader.cpp
@@ -61,24 +61,24 @@ static size_t curl_header(void *data, size_t size, size_t nmemb,
}
//qDebug("header received: %s", (char*) data);
- QString str = QString::fromAscii((char *) data, data_size);
- str = str.trimmed ();
- if (str.left(4).contains("HTTP"))
+ QByteArray header((char *) data, data_size);
+ header = header.trimmed ();
+ if (header.left(4).contains("HTTP"))
{
qDebug("HttpStreamReader: header received");
//TODO open metadata socket
}
- else if (str.left(4).contains("ICY"))
+ else if (header.left(4).contains("ICY"))
{
qDebug("HttpStreamReader: shoutcast header received");
//dl->stream()->icy_meta_data = true;
}
else
{
- QString key = str.left(str.indexOf(":")).trimmed().toLower();
- QString value = str.right(str.size() - str.indexOf(":") - 1).trimmed();
+ QString key = QString::fromLatin1(header.left(header.indexOf(":")).trimmed().toLower());
+ QByteArray value = header.right(header.size() - header.indexOf(":") - 1).trimmed();
dl->stream()->header.insert(key, value);
- qDebug("HttpStreamReader: key=%s, value=%s",qPrintable(key),qPrintable(value));
+ qDebug("HttpStreamReader: key=%s, value=%s",qPrintable(key), value.constData());
if (key == "icy-metaint")
{
@@ -386,7 +386,7 @@ void HttpStreamReader::checkBuffer()
}
metaData.insert(Qmmp::URL, m_url);
m_parent->addMetaData(metaData);
- m_parent->addStreamInfo(m_stream.header);
+ sendStreamInfo(m_codec);
}
emit ready();
}
@@ -471,16 +471,27 @@ void HttpStreamReader::parseICYMetaData(char *data, qint64 size)
metaData.insert(Qmmp::TITLE, m_title);
}
else
- metaData.insert(Qmmp::TITLE, m_stream.header.value("icy-name"));
- metaData.insert(Qmmp::GENRE, m_stream.header.value("icy-genre"));
+ metaData.insert(Qmmp::TITLE, codec->toUnicode(m_stream.header.value("icy-name")));
+ metaData.insert(Qmmp::GENRE, codec->toUnicode(m_stream.header.value("icy-genre")));
metaData.insert(Qmmp::URL, m_url);
m_parent->addMetaData(metaData);
+ sendStreamInfo(codec);
m_meta_sent = true;
break;
}
}
}
+void HttpStreamReader::sendStreamInfo(QTextCodec *codec)
+{
+ QHash<QString, QString> info;
+ foreach (QString key, m_stream.header.keys())
+ {
+ info.insert(key, codec->toUnicode(m_stream.header.value(key)));
+ }
+ m_parent->addStreamInfo(info);
+}
+
DownloadThread::DownloadThread(HttpStreamReader *parent) : QThread(parent)
{
m_parent = parent;
diff --git a/src/plugins/Transports/http/httpstreamreader.h b/src/plugins/Transports/http/httpstreamreader.h
index 0ff615fd5..d39b1a446 100644
--- a/src/plugins/Transports/http/httpstreamreader.h
+++ b/src/plugins/Transports/http/httpstreamreader.h
@@ -46,7 +46,7 @@ struct HttpStreamData
long buf_fill;
QString content_type;
bool aborted;
- QHash <QString, QString> header;
+ QHash <QString, QByteArray> header;
bool icy_meta_data;
int icy_metaint;
};
@@ -95,6 +95,7 @@ private:
qint64 readBuffer(char* data, qint64 maxlen);
void readICYMetaData();
void parseICYMetaData(char *data, qint64 size);
+ void sendStreamInfo(QTextCodec *codec);
CURL *m_handle;
QMutex m_mutex;
HttpStreamData m_stream;