From 62f7371b8af93302a0d6044717e0d46399cc64e8 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 16 May 2016 12:12:08 +0000 Subject: 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 --- src/plugins/Transports/http/httpstreamreader.cpp | 31 ++++++++++++++++-------- src/plugins/Transports/http/httpstreamreader.h | 3 ++- 2 files changed, 23 insertions(+), 11 deletions(-) (limited to 'src/plugins') 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 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 header; + QHash 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; -- cgit v1.2.3-13-gbd6f