From 90f92b216be2e1e413b61afb59fdfd3cac1b798e Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Sat, 30 Aug 2008 20:51:50 +0000 Subject: Add setting the User-Agent for http requests to HttpGet class. Make rbutil set its own user agent string. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18366 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/httpget.cpp | 18 +++++++++++++----- rbutil/rbutilqt/httpget.h | 11 ++++++++--- rbutil/rbutilqt/rbutilqt.cpp | 5 +++-- rbutil/rbutilqt/version.h | 7 +++++-- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/rbutil/rbutilqt/httpget.cpp b/rbutil/rbutilqt/httpget.cpp index b349a2f4be..129545d158 100644 --- a/rbutil/rbutilqt/httpget.cpp +++ b/rbutil/rbutilqt/httpget.cpp @@ -26,6 +26,7 @@ QDir HttpGet::m_globalCache; //< global cach path value for new objects QUrl HttpGet::m_globalProxy; //< global proxy value for new objects bool HttpGet::m_globalDumbCache = false; //< globally set cache "dumb" mode +QString HttpGet::m_globalUserAgent; //< globally set user agent for requests HttpGet::HttpGet(QObject *parent) : QObject(parent) @@ -199,13 +200,19 @@ bool HttpGet::getFile(const QUrl &url) m_hash = QCryptographicHash::hash(url.toEncoded(), QCryptographicHash::Md5).toHex(); m_path = QString(QUrl::toPercentEncoding(url.path(), "/")); + // construct request header + m_header.setValue("Host", url.host()); + m_header.setValue("User-Agent", m_globalUserAgent); + m_header.setValue("Connection", "Keep-Alive"); + if(m_dumbCache || !m_usecache) { getFileFinish(); } else { - // request HTTP header + // schedule HTTP header request connect(this, SIGNAL(headerFinished()), this, SLOT(getFileFinish())); - headRequest = http.head(m_path + m_query); + m_header.setRequest("HEAD", m_path + m_query); + headRequest = http.request(m_header); } return true; @@ -262,15 +269,16 @@ void HttpGet::getFileFinish() else { qDebug() << "[HTTP] cache DISABLED"; } - + // schedule GET request + m_header.setRequest("GET", m_path + m_query); if(outputToBuffer) { qDebug() << "[HTTP] downloading to buffer."; - getRequest = http.get(m_path + m_query); + getRequest = http.request(m_header); } else { qDebug() << "[HTTP] downloading to file:" << qPrintable(outputFile->fileName()); - getRequest = http.get(m_path + m_query, outputFile); + getRequest = http.request(m_header, 0, outputFile); } qDebug() << "[HTTP] GET request scheduled, id:" << getRequest; diff --git a/rbutil/rbutilqt/httpget.h b/rbutil/rbutilqt/httpget.h index 72a76e43c1..ba4cbc821e 100644 --- a/rbutil/rbutilqt/httpget.h +++ b/rbutil/rbutilqt/httpget.h @@ -57,6 +57,8 @@ class HttpGet : public QObject { m_globalProxy = p; } static void setGlobalDumbCache(bool b) //< set "dumb" (ignore server status) caching mode { m_globalDumbCache = b; } + static void setGlobalUserAgent(QString u) //< set global user agent string + { m_globalUserAgent = u; } public slots: void abort(void); @@ -89,14 +91,17 @@ class HttpGet : public QObject QString m_cachefile; // cached filename bool m_cached; QUrl m_proxy; - static QDir m_globalCache; //< global cache path value - static QUrl m_globalProxy; //< global proxy value - static bool m_globalDumbCache; //< cache "dumb" mode global setting QDateTime m_serverTimestamp; //< timestamp of file on server QString m_query; //< constructed query to pass http getter QString m_path; //< constructed path to pass http getter QString m_hash; //< caching hash bool m_dumbCache; //< true if caching should ignore the server header + QHttpRequestHeader m_header; + + static QDir m_globalCache; //< global cache path value + static QUrl m_globalProxy; //< global proxy value + static bool m_globalDumbCache; //< cache "dumb" mode global setting + static QString m_globalUserAgent; //< global user agent string }; #endif diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index 8921eadb9a..e64a1a6eb3 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp @@ -57,7 +57,8 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent) settings = new RbSettings(); settings->open(); - + HttpGet::setGlobalUserAgent("rbutil/"VERSION); + m_gotInfo = false; // manual tab @@ -241,7 +242,7 @@ void RbUtilQt::about() QString rline = r.readAll(); about.browserCredits->insertPlainText(rline); about.browserCredits->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); - QString title = QString("The Rockbox Utility
Version %1").arg(VERSION); + QString title = QString("The Rockbox Utility
Version %1").arg(FULLVERSION); about.labelTitle->setText(title); about.labelHomepage->setText("http://www.rockbox.org"); diff --git a/rbutil/rbutilqt/version.h b/rbutil/rbutilqt/version.h index c0ba2bf848..8027b574f9 100644 --- a/rbutil/rbutilqt/version.h +++ b/rbutil/rbutilqt/version.h @@ -19,9 +19,12 @@ * ****************************************************************************/ -#define VERSION "SVN $Revision$ (m1.0.6), built "__DATE__" "__TIME__ - // PUREVERSION is needed to be able to just compare versions. It does not // contain a build timestamp because it needs to be the same in different // files +// VERSION is the plain version number, used for http User-Agent string. +#define VERSION "m1.0.6" #define PUREVERSION "SVN $Revision$" + +#define FULLVERSION PUREVERSION" ("VERSION"), built "__DATE__" "__TIME__ + -- cgit v1.2.3