------------------------------------------------------------
revno: 261
committer: Alan Alvarez <aalva...@aliensoft.net>
branch nick: login-system
timestamp: Tue 2011-04-26 12:25:29 -0400
message:
Some fixes related to lp bug #703339
modified:
mira-client/include/Application.h
mira-client/src/gui/qt/ConnectionManagementWidget.cpp
mira-client/src/gui/qt/LoginDialog.cpp
mira-client/src/network/asio/AsioClient.cpp
mira-server/CMakeLists.txt
mira-server/include/network/Msg.h
mira-server/include/network/TcpConnection.h
mira-server/include/network/messages/MsgError.h
mira-server/include/network/messages/MsgLogin.h
mira-server/src/main.cpp
mira-server/src/network/Msg.cpp
mira-server/src/network/TcpConnection.cpp
mira-server/src/network/asio/AsioServer.cpp
--
lp:~mira-dev/mira/login-system
https://code.launchpad.net/~mira-dev/mira/login-system
You are subscribed to branch lp:~mira-dev/mira/login-system.
To unsubscribe from this branch go to
https://code.launchpad.net/~mira-dev/mira/login-system/+edit-subscription
=== modified file 'mira-client/include/Application.h'
--- mira-client/include/Application.h 2010-12-15 23:37:15 +0000
+++ mira-client/include/Application.h 2011-04-26 16:25:29 +0000
@@ -72,7 +72,7 @@
static void unset_client()
{
boost::thread(boost::bind(&UtilityManager::notify_offline, m_utility_manager));
- QMetaObject::invokeMethod(get_gui_application(), "serverConnectionLost", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(get_gui_application(), "serverConnectionLost");
m_client = NULL;
}
=== modified file 'mira-client/src/gui/qt/ConnectionManagementWidget.cpp'
--- mira-client/src/gui/qt/ConnectionManagementWidget.cpp 2010-12-16 15:44:13 +0000
+++ mira-client/src/gui/qt/ConnectionManagementWidget.cpp 2011-04-26 16:25:29 +0000
@@ -17,6 +17,8 @@
#include "MiraUtility.h"
#include "Crypto.h"
+using namespace miraclient;
+
ConnectionManagementWidget::ConnectionManagementWidget() : QFrame(), m_settings(miraclient::Application::get_settings())
{
setStyleSheet("ConnectionManagementWidget { background-color: white; margin-top: 25px }");
@@ -209,7 +211,12 @@
miraclient::network::asio::AsioClient* client = new miraclient::network::asio::AsioClient();
if (client)
{
+
miraclient::Application::mode = miraclient::Application::ONLINE;
+ if (miraclient::Application::get_client() == NULL)
+ {
+ miraclient::Application::unset_client();
+ }
miraclient::Application::set_client(dynamic_cast<miraclient::network::Client*>(client));
MiraUtility::set_client(dynamic_cast<miraclient::network::Client*>(client));
miraclient::Application::user_info.server_key = item->text().toStdString();
@@ -220,7 +227,9 @@
void ConnectionManagementWidget::loginFailed()
{
- miraclient::Application::get_client()->disconnect();
+ Application::ClientType* client = Application::get_client();
+ if (client != NULL)
+ client->disconnect();
}
void ConnectionManagementWidget::offlineConnectClicked()
=== modified file 'mira-client/src/gui/qt/LoginDialog.cpp'
--- mira-client/src/gui/qt/LoginDialog.cpp 2010-07-15 18:34:43 +0000
+++ mira-client/src/gui/qt/LoginDialog.cpp 2011-04-26 16:25:29 +0000
@@ -102,5 +102,5 @@
void LoginDialog::loginFailed(const QString& error_message)
{
m_errorLabel->setText("Failed to connect to server: " + error_message);
- Application::get_client()->disconnect();
+ // Application::get_client()->disconnect();
}
=== modified file 'mira-client/src/network/asio/AsioClient.cpp'
--- mira-client/src/network/asio/AsioClient.cpp 2010-08-13 17:47:14 +0000
+++ mira-client/src/network/asio/AsioClient.cpp 2011-04-26 16:25:29 +0000
@@ -55,6 +55,15 @@
// TODO: finish processing messages in queue or delete them.
Application::unset_client();
MiraUtility::set_client(NULL);
+
+ // Send LO (Logout) message to server
+ if (m_socket.is_open())
+ {
+ send("LO");
+ m_socket.close();
+ }
+
+ std::cout << "closed connection" << std::endl;
}
void AsioClient::connect(const std::string& hostname, const unsigned int port, const std::string& username, const std::string& password)
=== modified file 'mira-server/CMakeLists.txt'
--- mira-server/CMakeLists.txt 2010-08-23 23:05:06 +0000
+++ mira-server/CMakeLists.txt 2011-04-26 16:25:29 +0000
@@ -32,6 +32,7 @@
"include/network/messages/MsgListUtilities.h"
"include/network/messages/MsgListWorkplaces.h"
"include/network/messages/MsgLogin.h"
+ "include/network/messages/MsgLogout.h"
"include/network/messages/MsgMessage.h"
"include/network/messages/MsgNewGroup.h"
"include/network/messages/MsgNewUser.h"
=== modified file 'mira-server/include/network/Msg.h'
--- mira-server/include/network/Msg.h 2010-08-23 23:05:06 +0000
+++ mira-server/include/network/Msg.h 2011-04-26 16:25:29 +0000
@@ -71,6 +71,7 @@
NEW_USER,
USER_ACCEPTED,
LOGIN,
+ LOGOUT,
LOGIN_SUCCESS,
MESSAGE,
PRIVATE_MESSAGE,
=== modified file 'mira-server/include/network/TcpConnection.h'
--- mira-server/include/network/TcpConnection.h 2009-10-31 20:09:42 +0000
+++ mira-server/include/network/TcpConnection.h 2011-04-26 16:25:29 +0000
@@ -156,6 +156,7 @@
std::queue<std::string*> m_message_queue;
static ThreadPool m_thread_pool;
boost::mutex m_output_buffer_mutex;
+ boost::mutex m_socket_destruction_mutex;
};
} // namespace network
=== modified file 'mira-server/include/network/messages/MsgError.h'
--- mira-server/include/network/messages/MsgError.h 2010-08-24 20:10:25 +0000
+++ mira-server/include/network/messages/MsgError.h 2011-04-26 16:25:29 +0000
@@ -40,7 +40,7 @@
virtual void run()
{
std::cout << "Error UserID(" << m_source_connection->get_user_id() << "): " << m_message;
- };
+ }
~MsgError ()
{
=== modified file 'mira-server/include/network/messages/MsgLogin.h'
--- mira-server/include/network/messages/MsgLogin.h 2010-07-06 14:11:32 +0000
+++ mira-server/include/network/messages/MsgLogin.h 2011-04-26 16:25:29 +0000
@@ -95,13 +95,15 @@
else
{
m_source_connection->send("E L Bad Credentials");
+ delete m_source_connection;
}
}
else
{
m_source_connection->send("E L Invalid Format");
+ delete m_source_connection;
}
- };
+ }
~MsgLogin() {}
=== modified file 'mira-server/src/main.cpp'
--- mira-server/src/main.cpp 2010-08-23 23:05:06 +0000
+++ mira-server/src/main.cpp 2011-04-26 16:25:29 +0000
@@ -207,6 +207,7 @@
Msg::add_token(Msg::LIST_MEMBERS, "LM");
Msg::add_token(Msg::USER_STATUS, "US");
Msg::add_token(Msg::PART_GROUP, "PG");
+ Msg::add_token(Msg::LOGOUT, "LO");
// TODO: Need to add rest of messages.
unsigned short thread_count = Application::get_configuration().GetConfigurationAsInt("NETWORK_THREAD_COUNT");
=== modified file 'mira-server/src/network/Msg.cpp'
--- mira-server/src/network/Msg.cpp 2010-08-23 23:05:06 +0000
+++ mira-server/src/network/Msg.cpp 2011-04-26 16:25:29 +0000
@@ -38,6 +38,7 @@
#include "MsgListUtilities.h"
#include "MsgListMembers.h"
#include "MsgPartGroup.h"
+#include "MsgLogout.h"
//#include "MsgPong.h"
@@ -81,6 +82,14 @@
Msg* msg = NULL;
switch(get_token(token_string))
{
+ case UTILITY:
+ msg = new MsgUtility(source_connection, *message);
+ break;
+
+ case LOGOUT:
+ msg = new MsgLogout(source_connection, *message);
+ break;
+
case LOGIN:
msg = new MsgLogin(source_connection, *message);
break;
@@ -125,10 +134,6 @@
break;
*/
- case UTILITY:
- msg = new MsgUtility(source_connection, *message);
- break;
-
case LIST_WORKPLACES:
msg = new MsgListWorkplaces(source_connection, *message);
break;
=== modified file 'mira-server/src/network/TcpConnection.cpp'
--- mira-server/src/network/TcpConnection.cpp 2010-04-29 16:31:45 +0000
+++ mira-server/src/network/TcpConnection.cpp 2011-04-26 16:25:29 +0000
@@ -21,6 +21,7 @@
#include <iostream>
#include <cstring>
#include <string>
+#include <boost/thread/mutex.hpp>
#include "ThreadPool.h"
#include "TcpConnection.h"
@@ -44,6 +45,11 @@
TcpConnection::~TcpConnection()
{
+ m_socket_destruction_mutex.try_lock();
+
+ // Remove this connection from connection list
+ Application::get_server().remove_connection(m_user_id);
+
if(is_logged_in())
{
Application::get_server().remove_connection(m_user_id);
@@ -59,9 +65,14 @@
for (unsigned int i = 0; i < size; ++i, m_message_queue.pop())
delete m_message_queue.front();
- cout << "dropping connection" << endl;
+ if (m_socket != 0)
+ {
+ cout << "dropping connection" << endl;
+ close_socket(m_socket);
+ m_socket = 0;
+ }
- close_socket(m_socket);
+ m_socket_destruction_mutex.unlock();
}
void TcpConnection::add_to_output_buffer(const char* msg, unsigned int size)
@@ -96,9 +107,15 @@
void TcpConnection::handle_read(size_t bytes_transferred)
{
- if (!bytes_transferred)
+ if (!bytes_transferred) // Remote host closed connection
{
- delete this;
+ // If we can't acquire lock, that means this object is already being destructed
+ // Perhaps we closed the connection as well, so just return.
+ if (m_socket != 0 && m_socket_destruction_mutex.try_lock())
+ {
+ delete this;
+ }
+
return;
}
@@ -165,7 +182,7 @@
// User needs to login before doing anything else
//Except, for now, NU(new user) don't have to login for creating new account.
- if((token.compare("NU") != 0) && (token.compare("L") != 0) && (!is_logged_in()))
+ if( (!is_logged_in()) && (token.compare("NU") != 0) && (token.compare("L") != 0) )
{
send("E Need To Login");
delete this;
=== modified file 'mira-server/src/network/asio/AsioServer.cpp'
--- mira-server/src/network/asio/AsioServer.cpp 2010-08-13 17:47:14 +0000
+++ mira-server/src/network/asio/AsioServer.cpp 2011-04-26 16:25:29 +0000
@@ -114,6 +114,7 @@
SocketType* l_socket = static_cast<SocketType*>(socket);
l_socket->close();
delete l_socket;
+ l_socket = 0;
}
void AsioServer::run()
------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Mira-development mailing list
Mira-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mira-development