diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-05-16 12:12:08 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-05-16 12:12:08 +0000 |
| commit | 62f7371b8af93302a0d6044717e0d46399cc64e8 (patch) | |
| tree | cfe6a37d0ac517ca90529f77e964347b5141e91d /src/plugins/Transports/http | |
| parent | 61795f7dc3aff2ec8eb4d73292b6584a4dedd4b0 (diff) | |
| download | qmmp-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
Diffstat (limited to 'src/plugins/Transports/http')
| -rw-r--r-- | src/plugins/Transports/http/httpstreamreader.cpp | 31 | ||||
| -rw-r--r-- | src/plugins/Transports/http/httpstreamreader.h | 3 |
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; |
