send authorize after logging legacy network

This commit is contained in:
Jan Kaluza 2011-06-02 13:52:19 +02:00
parent a7f77b72a8
commit 62fcb14192
8 changed files with 44 additions and 17 deletions

View file

@ -466,6 +466,11 @@ static PurpleCoreUiOps coreUiOps =
NULL
};
static void signed_on(PurpleConnection *gc, gpointer unused) {
PurpleAccount *account = purple_connection_get_account(gc);
np->handleConnected(np->m_accounts[account]);
}
static void printDebug(PurpleDebugLevel level, const char *category, const char *arg_s) {
std::string c("[LIBPURPLE");
@ -536,7 +541,7 @@ static bool initPurple(Config &cfg) {
// purple_signal_connect(purple_conversations_get_handle(), "buddy-typing", &conversation_handle, PURPLE_CALLBACK(buddyTyping), NULL);
// purple_signal_connect(purple_conversations_get_handle(), "buddy-typed", &conversation_handle, PURPLE_CALLBACK(buddyTyped), NULL);
// purple_signal_connect(purple_conversations_get_handle(), "buddy-typing-stopped", &conversation_handle, PURPLE_CALLBACK(buddyTypingStopped), NULL);
// purple_signal_connect(purple_connections_get_handle(), "signed-on", &conn_handle,PURPLE_CALLBACK(signed_on), NULL);
purple_signal_connect(purple_connections_get_handle(), "signed-on", &blist_handle,PURPLE_CALLBACK(signed_on), NULL);
// purple_signal_connect(purple_blist_get_handle(), "buddy-removed", &blist_handle,PURPLE_CALLBACK(buddyRemoved), NULL);
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &blist_handle,PURPLE_CALLBACK(buddySignedOn), NULL);
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", &blist_handle,PURPLE_CALLBACK(buddySignedOff), NULL);

View file

@ -48,6 +48,8 @@ class NetworkPlugin {
void handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &message);
void handleConnected(const std::string &user);
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");
void handleSubject(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");
@ -73,7 +75,7 @@ class NetworkPlugin {
void handleLeaveRoomPayload(const std::string &payload);
void handleVCardPayload(const std::string &payload);
void handleDataRead(const Swift::ByteArray&);
void handleConnected(bool error);
void _handleConnected(bool error);
void handleDisconnected();
void send(const std::string &data);

View file

@ -87,6 +87,7 @@ class NetworkPluginServer {
boost::shared_ptr<Swift::ConnectionServer> m_server;
std::list<Client *> m_clients;
Swift::Timer::ref m_pingTimer;
Component *m_component;
};
}

View file

@ -44,7 +44,7 @@ NetworkPlugin::NetworkPlugin(Swift::EventLoop *loop, const std::string &host, in
m_pingReceived = false;
m_conn = m_factories->getConnectionFactory()->createConnection();
m_conn->onDataRead.connect(boost::bind(&NetworkPlugin::handleDataRead, this, _1));
m_conn->onConnectFinished.connect(boost::bind(&NetworkPlugin::handleConnected, this, _1));
m_conn->onConnectFinished.connect(boost::bind(&NetworkPlugin::_handleConnected, this, _1));
m_conn->onDisconnected.connect(boost::bind(&NetworkPlugin::handleDisconnected, this));
m_pingTimer = m_factories->getTimerFactory()->createTimer(30000);
@ -123,6 +123,18 @@ void NetworkPlugin::handleBuddyChanged(const std::string &user, const std::strin
send(message);
}
void NetworkPlugin::handleConnected(const std::string &user) {
pbnetwork::Connected d;
d.set_user(user);
std::string message;
d.SerializeToString(&message);
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_CONNECTED);
send(message);
}
void NetworkPlugin::handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &msg) {
pbnetwork::Disconnected d;
d.set_user(user);
@ -171,7 +183,7 @@ void NetworkPlugin::handleRoomChanged(const std::string &user, const std::string
send(message);
}
void NetworkPlugin::handleConnected(bool error) {
void NetworkPlugin::_handleConnected(bool error) {
if (error) {
std::cerr << "Connecting error\n";
m_pingTimer->stop();

View file

@ -112,7 +112,8 @@ static void handleBuddyPayload(LocalBuddy *buddy, const pbnetwork::Buddy &payloa
NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, UserManager *userManager) {
m_userManager = userManager;
m_config = config;
component->m_factory = new NetworkFactory(this);
m_component = component;
m_component->m_factory = new NetworkFactory(this);
m_userManager->onUserCreated.connect(boost::bind(&NetworkPluginServer::handleUserCreated, this, _1));
m_userManager->onUserDestroyed.connect(boost::bind(&NetworkPluginServer::handleUserDestroyed, this, _1));
@ -174,6 +175,8 @@ void NetworkPluginServer::handleConnectedPayload(const std::string &data) {
// TODO: ERROR
return;
}
std::cout << "CONNECTED LOGIN 2 " << payload.user() << "\n";
m_component->m_userRegistry->onPasswordValid(payload.user());
// std::cout << payload.name() << "\n";
}
@ -185,9 +188,11 @@ void NetworkPluginServer::handleDisconnectedPayload(const std::string &data) {
}
User *user = m_userManager->getUser(payload.user());
if (!user)
if (!user) {
return;
}
m_component->m_userRegistry->onPasswordInvalid(payload.user());
user->handleDisconnected(payload.message());
}

View file

@ -2,7 +2,6 @@ package pbnetwork;
message Connected {
required string user = 1;
required string name = 2;
}
message Disconnected {

View file

@ -34,13 +34,20 @@ namespace Transport {
class MyUserRegistry : public Swift::UserRegistry {
public:
MyUserRegistry() {}
MyUserRegistry(Component *c) {component = c;}
~MyUserRegistry() {}
bool isValidUserPassword(const JID& user, const std::string& password) const {
users[user.toBare().toString()] = password;
Swift::Presence::ref response = Swift::Presence::create();
response->setTo(component->getJID());
response->setFrom(user);
response->setType(Swift::Presence::Available);
component->onUserPresenceReceived(response);
std::cout << "CONNECTED LOGIN 1" << user.toString() << "\n";
return true;
}
mutable std::map<std::string, std::string> users;
mutable Component *component;
};
Component::Component(Swift::EventLoop *loop, Config *config, Factory *factory) {
@ -59,7 +66,7 @@ Component::Component(Swift::EventLoop *loop, Config *config, Factory *factory) {
m_reconnectTimer->onTick.connect(bind(&Component::connect, this));
if (CONFIG_BOOL(m_config, "service.server_mode")) {
m_userRegistry = new MyUserRegistry();
m_userRegistry = new MyUserRegistry(this);
m_server = new Swift::Server(loop, m_factories, m_userRegistry, m_jid, CONFIG_INT(m_config, "service.port"));
m_server->start();
m_stanzaChannel = m_server->getStanzaChannel();
@ -174,14 +181,6 @@ void Component::handlePresence(Swift::Presence::ref presence) {
// filter out bad presences
if (!presence->getFrom().isValid()) {
Swift::Presence::ref response = Swift::Presence::create();
response->setTo(presence->getFrom());
response->setFrom(presence->getTo());
response->setType(Swift::Presence::Error);
response->addPayload(boost::shared_ptr<Payload>(new ErrorPayload(ErrorPayload::JIDMalformed, ErrorPayload::Modify)));
m_component->sendPresence(response);
return;
}

View file

@ -77,6 +77,10 @@ void User::handlePresence(Swift::Presence::ref presence) {
onReadyToConnect();
}
}
else if (m_component->inServerMode()) {
m_readyForConnect = true;
onReadyToConnect();
}
else {
m_reconnectTimer->start();
}