22
23
#include <QDomDocument>
23
24
#include <QDomElement>
24
25
#include <QDomNodeList>
26
27
#include "serverlistquerier.h"
28
#define SERVERLIST_SERVER "www.jabber.org"
29
#define SERVERLIST_PORT 80
30
#define SERVERLIST_PATH "/servers.xml"
29
#define SERVERLIST_SERVER "xmpp.org"
30
#define SERVERLIST_PORT 80
31
#define SERVERLIST_PATH "/services/services.xml"
32
#define SERVERLIST_MAX_REDIRECT 5
32
34
ServerListQuerier::ServerListQuerier(QObject* parent) : QObject(parent)
38
40
void ServerListQuerier::getList()
40
43
http_->get(SERVERLIST_PATH);
43
46
void ServerListQuerier::get_finished(int, bool err)
48
const QHttpResponseHeader response = http_->lastResponse();
46
51
emit error(http_->errorString());
51
if (!doc.setContent(http_->readAll())) {
52
emit error(tr("Unable to parse server list"));
58
QDomNodeList items = doc.elementsByTagName("item");
59
for (int i = 0; i < items.count(); i++) {
60
QString jid = items.item(i).toElement().attribute("jid");
62
servers.push_back(jid);
65
emit listReceived(servers);
54
if(response.statusCode() == 200) {
57
if (!doc.setContent(http_->readAll())) {
58
emit error(tr("Unable to parse server list"));
64
QDomNodeList items = doc.elementsByTagName("item");
65
for (int i = 0; i < items.count(); i++) {
66
QString jid = items.item(i).toElement().attribute("jid");
68
servers.push_back(jid);
71
emit listReceived(servers);
73
else if(response.statusCode() == 301 || response.statusCode() == 302) {
74
// handle redirections:
75
// 301 = moved permanently
77
if (redirectCount_ >= SERVERLIST_MAX_REDIRECT) {
78
emit error(tr("Maximum redirect count reached"));
82
QString newUrl = response.value("Location");
85
if (!url.protocol().isEmpty()) {
86
if (url.protocol() != "http") {
87
emit error(tr("Redirect to protocol '%1' not supported").arg(url.protocol()));
91
if (url.host().isEmpty()) {
92
emit error(tr("Cannot redirect to empty host"));
96
http_->disconnect(this);
98
http_ = new QHttp(url.host(), url.port(80), this);
99
connect(http_,SIGNAL(requestFinished(int,bool)),SLOT(get_finished(int,bool)));
106
emit error(tr("Unexpected HTTP status code: %1").arg(response.statusCode()));