diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-07-06 12:55:52 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-07-06 12:55:52 -0500 |
commit | 8cc7778d9f0d659318f50c78abb5b31db82399ca (patch) | |
tree | ff4e3bc956dc11f6d6e861dcfa5ac8635e7614e8 /servers/auth_server_lin/src | |
parent | 1382b1f0c8d40386827dc49cb8fd7eb869e755aa (diff) | |
download | ulab-8cc7778d9f0d659318f50c78abb5b31db82399ca.tar.gz ulab-8cc7778d9f0d659318f50c78abb5b31db82399ca.zip |
Get rid of processevents calls in servers
Diffstat (limited to 'servers/auth_server_lin/src')
-rw-r--r-- | servers/auth_server_lin/src/auth_conn.cpp | 46 | ||||
-rw-r--r-- | servers/auth_server_lin/src/auth_conn.h | 4 |
2 files changed, 28 insertions, 22 deletions
diff --git a/servers/auth_server_lin/src/auth_conn.cpp b/servers/auth_server_lin/src/auth_conn.cpp index 0f0912b..a8f7459 100644 --- a/servers/auth_server_lin/src/auth_conn.cpp +++ b/servers/auth_server_lin/src/auth_conn.cpp @@ -28,11 +28,6 @@ #include "auth_conn.h" -#define ABORT_SOCKET(s) s->close(); \ - s->disconnect(); \ - delete s; \ - s = NULL; - /* exception handling */ struct exit_exception { int c; @@ -49,6 +44,10 @@ AuthSocket::AuthSocket(int sock, TQObject *parent, const char *name) : m_databaseServicesCursor(NULL), m_databaseServiceTypesCursor(NULL), m_databasePermissionsCursor(NULL), m_databaseActivityCursor(NULL) { + // Initialize timers + m_kerberosInitTimer = new TQTimer(); + connect(m_kerberosInitTimer, SIGNAL(timeout()), this, SLOT(finishKerberosHandshake())); + setServiceName("remotefpga"); line = 0; @@ -61,6 +60,11 @@ AuthSocket::AuthSocket(int sock, TQObject *parent, const char *name) : } AuthSocket::~AuthSocket() { + if (m_kerberosInitTimer) { + m_kerberosInitTimer->stop(); + delete m_kerberosInitTimer; + m_kerberosInitTimer = NULL; + } if (m_loopTimer) { m_loopTimer->stop(); delete m_loopTimer; @@ -110,11 +114,15 @@ void AuthSocket::connectionClosedHandler() { } } -int AuthSocket::initiateKerberosHandshake() { +void AuthSocket::initiateKerberosHandshake() { setUsingKerberos(true); - while (kerberosStatus() == TDEKerberosServerSocket::KerberosInitializing) { - // RAJA FIXME - tqApp->processEvents(); + m_kerberosInitTimer->start(100, TRUE); +} + +void AuthSocket::finishKerberosHandshake() { + if (kerberosStatus() == TDEKerberosServerSocket::KerberosInitializing) { + m_kerberosInitTimer->start(100, TRUE); + return; } if (kerberosStatus() == TDEKerberosServerSocket::KerberosInUse) { TQ_UINT32 magicnum = MAGIC_NUMBER; @@ -124,10 +132,13 @@ int AuthSocket::initiateKerberosHandshake() { ds << magicnum; ds << protover; - return 0; + enterCommandLoop(); + return; } else { - return -1; + printf("[DEBUG] Connection from %s closed due to Kerberos failure\n\r", m_remoteHost.ascii()); fflush(stdout); + close(); + return; } } @@ -609,14 +620,7 @@ void AuthServer::newConnection(int socket) { AuthSocket *s = new AuthSocket(socket, this); s->m_remoteHost = s->peerAddress().toString(); printf("[DEBUG] New connection from %s\n\r", s->m_remoteHost.ascii()); - if (s->initiateKerberosHandshake() != 0) { - printf("[DEBUG] Connection from %s closed due to Kerberos failure\n\r", s->m_remoteHost.ascii()); fflush(stdout); - ABORT_SOCKET(s) - return; - } - else { - connect(s, SIGNAL(connectionClosed()), s, SLOT(deleteLater())); - emit newConnect(s); - s->enterCommandLoop(); - } + connect(s, SIGNAL(connectionClosed()), s, SLOT(deleteLater())); + s->initiateKerberosHandshake(); + emit newConnect(s); } diff --git a/servers/auth_server_lin/src/auth_conn.h b/servers/auth_server_lin/src/auth_conn.h index ca938f6..277a48a 100644 --- a/servers/auth_server_lin/src/auth_conn.h +++ b/servers/auth_server_lin/src/auth_conn.h @@ -51,10 +51,11 @@ class AuthSocket : public TDEKerberosServerSocket public: void close(); - int initiateKerberosHandshake(); + void initiateKerberosHandshake(); int enterCommandLoop(); private slots: + void finishKerberosHandshake(); int connectToDatabase(); void connectionClosedHandler(); void commandLoop(); @@ -74,6 +75,7 @@ class AuthSocket : public TDEKerberosServerSocket TQString m_srvServiceHostName; int m_srvServicePort; + TQTimer* m_kerberosInitTimer; TQTimer* m_loopTimer; KSimpleConfig* m_config; |