SpectrumErrorPayload
This commit is contained in:
parent
f0c6b4239a
commit
8faecb5664
8 changed files with 143 additions and 3 deletions
13
include/Swiften/Elements/SpectrumErrorPayload.cpp
Normal file
13
include/Swiften/Elements/SpectrumErrorPayload.cpp
Normal file
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Jan Kaluza
|
||||
* Licensed under the Simplified BSD license.
|
||||
* See Documentation/Licenses/BSD-simplified.txt for more information.
|
||||
*/
|
||||
|
||||
#include <Swiften/Elements/SpectrumErrorPayload.h>
|
||||
|
||||
namespace Swift {
|
||||
|
||||
SpectrumErrorPayload::SpectrumErrorPayload(Error error) : error_(error) { }
|
||||
|
||||
}
|
50
include/Swiften/Elements/SpectrumErrorPayload.h
Normal file
50
include/Swiften/Elements/SpectrumErrorPayload.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Jan Kaluza
|
||||
* Licensed under the Simplified BSD license.
|
||||
* See Documentation/Licenses/BSD-simplified.txt for more information.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <string>
|
||||
#include <Swiften/Elements/Payload.h>
|
||||
|
||||
namespace Swift {
|
||||
class SpectrumErrorPayload : public Payload {
|
||||
public:
|
||||
enum Error {
|
||||
CONNECTION_ERROR_NETWORK_ERROR = 0,
|
||||
CONNECTION_ERROR_INVALID_USERNAME = 1,
|
||||
CONNECTION_ERROR_AUTHENTICATION_FAILED = 2,
|
||||
CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE = 3,
|
||||
CONNECTION_ERROR_NO_SSL_SUPPORT = 4,
|
||||
CONNECTION_ERROR_ENCRYPTION_ERROR = 5,
|
||||
CONNECTION_ERROR_NAME_IN_USE = 6,
|
||||
CONNECTION_ERROR_INVALID_SETTINGS = 7,
|
||||
CONNECTION_ERROR_CERT_NOT_PROVIDED = 8,
|
||||
CONNECTION_ERROR_CERT_UNTRUSTED = 9,
|
||||
CONNECTION_ERROR_CERT_EXPIRED = 10,
|
||||
CONNECTION_ERROR_CERT_NOT_ACTIVATED = 11,
|
||||
CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH = 12,
|
||||
CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH = 13,
|
||||
CONNECTION_ERROR_CERT_SELF_SIGNED = 14,
|
||||
CONNECTION_ERROR_CERT_OTHER_ERROR = 15,
|
||||
CONNECTION_ERROR_OTHER_ERROR = 16,
|
||||
};
|
||||
|
||||
SpectrumErrorPayload(Error error = CONNECTION_ERROR_OTHER_ERROR);
|
||||
|
||||
Error getError() const {
|
||||
return error_;
|
||||
}
|
||||
|
||||
void setError(Error error) {
|
||||
error_ = error;
|
||||
}
|
||||
|
||||
private:
|
||||
Error error_;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Jan Kaluza
|
||||
* Licensed under the Simplified BSD license.
|
||||
* See Documentation/Licenses/BSD-simplified.txt for more information.
|
||||
*/
|
||||
|
||||
#include <Swiften/Serializer/PayloadSerializers/SpectrumErrorSerializer.h>
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
#include <Swiften/Base/foreach.h>
|
||||
#include <Swiften/Serializer/XML/XMLTextNode.h>
|
||||
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
|
||||
#include <Swiften/Serializer/XML/XMLElement.h>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
namespace Swift {
|
||||
|
||||
SpectrumErrorSerializer::SpectrumErrorSerializer() : GenericPayloadSerializer<SpectrumErrorPayload>() {
|
||||
}
|
||||
|
||||
std::string SpectrumErrorSerializer::serializePayload(boost::shared_ptr<SpectrumErrorPayload> error) const {
|
||||
std::string data;
|
||||
switch (error->getError()) {
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_NETWORK_ERROR: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_INVALID_USERNAME: data = "CONNECTION_ERROR_INVALID_USERNAME"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_AUTHENTICATION_FAILED: data = "CONNECTION_ERROR_AUTHENTICATION_FAILED"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE: data = "CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_NO_SSL_SUPPORT: data = "CONNECTION_ERROR_NO_SSL_SUPPORT"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_ENCRYPTION_ERROR: data = "CONNECTION_ERROR_ENCRYPTION_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_NAME_IN_USE: data = "CONNECTION_ERROR_NAME_IN_USE"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_INVALID_SETTINGS: data = "CONNECTION_ERROR_INVALID_SETTINGS"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_NOT_PROVIDED: data = "CONNECTION_ERROR_CERT_NOT_PROVIDED"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_UNTRUSTED: data = "CONNECTION_ERROR_CERT_UNTRUSTED"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_EXPIRED: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_NOT_ACTIVATED: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_SELF_SIGNED: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_CERT_OTHER_ERROR: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
case SpectrumErrorPayload::CONNECTION_ERROR_OTHER_ERROR: data = "CONNECTION_ERROR_NETWORK_ERROR"; break;
|
||||
}
|
||||
|
||||
XMLElement el("spectrumerror", "http://spectrum.im/error", data);
|
||||
|
||||
el.setAttribute("error", boost::lexical_cast<std::string>(error->getError()));
|
||||
|
||||
return el.serialize();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Jan Kaluza
|
||||
* Licensed under the Simplified BSD license.
|
||||
* See Documentation/Licenses/BSD-simplified.txt for more information.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Swiften/Serializer/GenericPayloadSerializer.h>
|
||||
#include <Swiften/Elements/SpectrumErrorPayload.h>
|
||||
|
||||
namespace Swift {
|
||||
class SpectrumErrorSerializer : public GenericPayloadSerializer<SpectrumErrorPayload> {
|
||||
public:
|
||||
SpectrumErrorSerializer();
|
||||
|
||||
virtual std::string serializePayload(boost::shared_ptr<SpectrumErrorPayload>) const;
|
||||
};
|
||||
}
|
|
@ -27,6 +27,7 @@
|
|||
#include "Swiften/Disco/EntityCapsProvider.h"
|
||||
#include "storagebackend.h"
|
||||
#include <Swiften/FileTransfer/OutgoingFileTransfer.h>
|
||||
#include "Swiften/Elements/SpectrumErrorPayload.h"
|
||||
|
||||
namespace Transport {
|
||||
|
||||
|
@ -93,7 +94,7 @@ class User : public Swift::EntityCapsProvider {
|
|||
/// \return language
|
||||
const char *getLang() { return "en"; }
|
||||
|
||||
void handleDisconnected(const std::string &error);
|
||||
void handleDisconnected(const std::string &error, Swift::SpectrumErrorPayload::Error e = Swift::SpectrumErrorPayload::CONNECTION_ERROR_OTHER_ERROR);
|
||||
|
||||
bool isReadyToConnect() {
|
||||
return m_readyForConnect;
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "Swiften/Elements/AttentionPayload.h"
|
||||
#include "Swiften/Elements/XHTMLIMPayload.h"
|
||||
#include "Swiften/Elements/InvisiblePayload.h"
|
||||
#include "Swiften/Elements/SpectrumErrorPayload.h"
|
||||
#include "transport/protocol.pb.h"
|
||||
#include "log4cxx/logger.h"
|
||||
|
||||
|
@ -387,7 +388,7 @@ void NetworkPluginServer::handleDisconnectedPayload(const std::string &data) {
|
|||
if (!user) {
|
||||
return;
|
||||
}
|
||||
user->handleDisconnected(payload.message());
|
||||
user->handleDisconnected(payload.message(), (Swift::SpectrumErrorPayload::Error) payload.error());
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleVCardPayload(const std::string &data) {
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "Swiften/Serializer/PayloadSerializers/XHTMLIMSerializer.h"
|
||||
#include "Swiften/Parser/PayloadParsers/StatsParser.h"
|
||||
#include "Swiften/Serializer/PayloadSerializers/StatsSerializer.h"
|
||||
#include "Swiften/Serializer/PayloadSerializers/SpectrumErrorSerializer.h"
|
||||
#include "transport/BlockParser.h"
|
||||
#include "transport/BlockSerializer.h"
|
||||
#include "Swiften/Parser/PayloadParsers/InvisibleParser.h"
|
||||
|
@ -99,6 +100,7 @@ Component::Component(Swift::EventLoop *loop, Swift::NetworkFactories *factories,
|
|||
m_server->addPayloadSerializer(new Transport::BlockSerializer());
|
||||
m_server->addPayloadSerializer(new Swift::InvisibleSerializer());
|
||||
m_server->addPayloadSerializer(new Swift::StatsSerializer());
|
||||
m_server->addPayloadSerializer(new Swift::SpectrumErrorSerializer());
|
||||
|
||||
m_server->onDataRead.connect(boost::bind(&Component::handleDataRead, this, _1));
|
||||
m_server->onDataWritten.connect(boost::bind(&Component::handleDataWritten, this, _1));
|
||||
|
@ -124,6 +126,7 @@ Component::Component(Swift::EventLoop *loop, Swift::NetworkFactories *factories,
|
|||
m_component->addPayloadSerializer(new Transport::BlockSerializer());
|
||||
m_component->addPayloadSerializer(new Swift::InvisibleSerializer());
|
||||
m_component->addPayloadSerializer(new Swift::StatsSerializer());
|
||||
m_component->addPayloadSerializer(new Swift::SpectrumErrorSerializer());
|
||||
|
||||
m_stanzaChannel = m_component->getStanzaChannel();
|
||||
m_iqRouter = m_component->getIQRouter();
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "Swiften/Server/ServerStanzaChannel.h"
|
||||
#include "Swiften/Elements/StreamError.h"
|
||||
#include "Swiften/Elements/MUCPayload.h"
|
||||
#include "Swiften/Elements/SpectrumErrorPayload.h"
|
||||
#include "log4cxx/logger.h"
|
||||
#include <boost/foreach.hpp>
|
||||
#include <stdio.h>
|
||||
|
@ -315,7 +316,7 @@ void User::setIgnoreDisconnect(bool ignoreDisconnect) {
|
|||
LOG4CXX_INFO(logger, m_jid.toString() << ": Setting ignoreDisconnect=" << m_ignoreDisconnect);
|
||||
}
|
||||
|
||||
void User::handleDisconnected(const std::string &error) {
|
||||
void User::handleDisconnected(const std::string &error, Swift::SpectrumErrorPayload::Error e) {
|
||||
if (m_ignoreDisconnect) {
|
||||
LOG4CXX_INFO(logger, m_jid.toString() << ": Disconnecting from legacy network ignored (probably moving between backends)");
|
||||
return;
|
||||
|
@ -333,6 +334,7 @@ void User::handleDisconnected(const std::string &error) {
|
|||
msg->setBody(error);
|
||||
msg->setTo(m_jid.toBare());
|
||||
msg->setFrom(m_component->getJID());
|
||||
msg->addPayload(boost::make_shared<Swift::SpectrumErrorPayload>(e));
|
||||
m_component->getStanzaChannel()->sendMessage(msg);
|
||||
|
||||
// In server mode, server finishes the session and pass unavailable session to userManager if we're connected to legacy network,
|
||||
|
|
Loading…
Add table
Reference in a new issue