Fixed removing users
This commit is contained in:
parent
16f2ef24d6
commit
c6224941ce
7 changed files with 24 additions and 4 deletions
|
@ -28,6 +28,7 @@
|
|||
#include "Swiften/Server/ServerFromClientSession.h"
|
||||
#include "Swiften/Server/ServerStanzaChannel.h"
|
||||
#include "Swiften/Queries/IQRouter.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
namespace Swift {
|
||||
|
@ -108,6 +109,9 @@ void Server::handleNewClientConnection(boost::shared_ptr<Connection> connection)
|
|||
serverFromClientSession->onSessionFinished.connect(
|
||||
boost::bind(&Server::handleSessionFinished, this,
|
||||
serverFromClientSession));
|
||||
serverFromClientSession->onPasswordInvalid.connect(
|
||||
boost::bind(&Server::handleSessionFinished, this,
|
||||
serverFromClientSession));
|
||||
serverFromClientSession->onDataRead.connect(boost::bind(&Server::handleDataRead, this, _1));
|
||||
serverFromClientSession->onDataWritten.connect(boost::bind(&Server::handleDataWritten, this, _1));
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <Swiften/StreamStack/TLSServerLayer.h>
|
||||
#include <Swiften/Elements/StartTLSRequest.h>
|
||||
#include <Swiften/Elements/TLSProceed.h>
|
||||
#include <iostream>
|
||||
|
||||
namespace Swift {
|
||||
|
||||
|
@ -65,8 +66,10 @@ void ServerFromClientSession::handlePasswordInvalid(const std::string &user) {
|
|||
if (user != JID(user_, getLocalJID().getDomain()).toString() || authenticated_)
|
||||
return;
|
||||
if (!isInitialized()) {
|
||||
user_ = "/././";
|
||||
getXMPPLayer()->writeElement(boost::shared_ptr<AuthFailure>(new AuthFailure));
|
||||
finishSession(AuthenticationFailedError);
|
||||
onPasswordInvalid();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ namespace Swift {
|
|||
~ServerFromClientSession();
|
||||
|
||||
boost::signal<void ()> onSessionStarted;
|
||||
boost::signal<void ()> onPasswordInvalid;
|
||||
void setAllowSASLEXTERNAL();
|
||||
const std::string &getUser() {
|
||||
return user_;
|
||||
|
|
|
@ -55,10 +55,8 @@ void ServerStanzaChannel::sendPresence(boost::shared_ptr<Presence> presence) {
|
|||
void ServerStanzaChannel::finishSession(const JID& to, boost::shared_ptr<Element> element) {
|
||||
std::vector<boost::shared_ptr<ServerFromClientSession> > candidateSessions;
|
||||
for (std::list<boost::shared_ptr<ServerFromClientSession> >::const_iterator i = sessions[to.toBare().toString()].begin(); i != sessions[to.toBare().toString()].end(); ++i) {
|
||||
if ((*i)->getRemoteJID().equals(to, JID::WithoutResource)) {
|
||||
(*i)->sendElement(element);
|
||||
candidateSessions.push_back(*i);
|
||||
}
|
||||
(*i)->sendElement(element);
|
||||
candidateSessions.push_back(*i);
|
||||
}
|
||||
|
||||
for (std::vector<boost::shared_ptr<ServerFromClientSession> >::const_iterator i = candidateSessions.begin(); i != candidateSessions.end(); ++i) {
|
||||
|
|
|
@ -522,6 +522,7 @@ void NetworkPluginServer::pingTimeout() {
|
|||
|
||||
void NetworkPluginServer::handleUserCreated(User *user) {
|
||||
Backend *c = getFreeClient();
|
||||
|
||||
if (!c) {
|
||||
LOG4CXX_ERROR(logger, "There is no backend to handle user " << user->getJID().toString());
|
||||
user->handleDisconnected("Internal Server Error (no free backend to handle your session), please reconnect.");
|
||||
|
@ -624,6 +625,7 @@ void NetworkPluginServer::handleRoomLeft(User *user, const std::string &r) {
|
|||
}
|
||||
|
||||
void NetworkPluginServer::handleUserDestroyed(User *user) {
|
||||
std::cout << "HANDLE_DESTROYED\n";
|
||||
UserInfo userInfo = user->getUserInfo();
|
||||
|
||||
pbnetwork::Logout logout;
|
||||
|
|
|
@ -42,6 +42,7 @@ static LoggerPtr logger = Logger::getLogger("User");
|
|||
|
||||
User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component, UserManager *userManager) {
|
||||
m_jid = jid;
|
||||
m_data = NULL;
|
||||
|
||||
m_component = component;
|
||||
m_presenceOracle = component->m_presenceOracle;
|
||||
|
@ -190,6 +191,7 @@ void User::handleDisconnected(const std::string &error) {
|
|||
// Once in finishSession and once in m_userManager->removeUser.
|
||||
if (m_component->inServerMode()) {
|
||||
dynamic_cast<Swift::ServerStanzaChannel *>(m_component->getStanzaChannel())->finishSession(m_jid, boost::shared_ptr<Swift::Element>(new Swift::StreamError()));
|
||||
m_userManager->removeUser(this);
|
||||
}
|
||||
else {
|
||||
m_userManager->removeUser(this);
|
||||
|
|
|
@ -167,6 +167,14 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
|
|||
// // //
|
||||
addUser(user);
|
||||
}
|
||||
|
||||
// User can be handleDisconnected in addUser callbacks...
|
||||
user = getUser(userkey);
|
||||
if (!user) {
|
||||
m_userRegistry->onPasswordInvalid(presence->getFrom());
|
||||
return;
|
||||
}
|
||||
|
||||
user->handlePresence(presence);
|
||||
|
||||
bool isMUC = presence->getPayload<Swift::MUCPayload>() != NULL || *presence->getTo().getNode().c_str() == '#';
|
||||
|
@ -256,9 +264,11 @@ void UserManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
|
||||
void UserManager::connectUser(const Swift::JID &user) {
|
||||
if (m_users.find(user.toBare().toString()) != m_users.end()) {
|
||||
std::cout << "FOUND\n";
|
||||
m_userRegistry->onPasswordValid(user);
|
||||
}
|
||||
else {
|
||||
std::cout << "NOT FOUND - PRESENCe\n";
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
response->setTo(m_component->getJID());
|
||||
response->setFrom(user);
|
||||
|
|
Loading…
Add table
Reference in a new issue