send authorize after logging legacy network
This commit is contained in:
parent
a7f77b72a8
commit
62fcb14192
8 changed files with 44 additions and 17 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ package pbnetwork;
|
|||
|
||||
message Connected {
|
||||
required string user = 1;
|
||||
required string name = 2;
|
||||
}
|
||||
|
||||
message Disconnected {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue