From fc455268a511d91113f59c04b50fa08b7c37b554 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 7 Jul 2012 16:23:30 -0500 Subject: Convert to frame based protocol Finish FPGA programming server/client --- servers/auth_server_lin/src/auth_conn.cpp | 32 ++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'servers/auth_server_lin/src/auth_conn.cpp') diff --git a/servers/auth_server_lin/src/auth_conn.cpp b/servers/auth_server_lin/src/auth_conn.cpp index 1356df4..cac5ba9 100644 --- a/servers/auth_server_lin/src/auth_conn.cpp +++ b/servers/auth_server_lin/src/auth_conn.cpp @@ -130,8 +130,10 @@ void AuthSocket::finishKerberosHandshake() { TQ_UINT32 protover = PROTOCOL_VERSION; TQDataStream ds(this); + ds.setPrintableData(true); ds << magicnum; ds << protover; + writeEndOfFrame(); enterCommandLoop(); return; @@ -150,6 +152,7 @@ int AuthSocket::servLoop() { if (m_servActive) { TQString command; TQDataStream ds(this); + ds.setPrintableData(true); TDEKerberosClientSocket::KerberosStatus krbstat; switch (m_servState) { @@ -162,6 +165,7 @@ int AuthSocket::servLoop() { if (!m_servClientTimeout->isActive()) { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -187,6 +191,7 @@ int AuthSocket::servLoop() { else { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -205,6 +210,7 @@ int AuthSocket::servLoop() { else { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s due to Kerberos failure\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -218,19 +224,23 @@ int AuthSocket::servLoop() { m_servClientTimeout->start(5000, TRUE); } if (m_servClientSocket->state() == TQSocket::Connected) { - if (m_servClientSocket->canReadData()) { + if (m_servClientSocket->canReadFrame()) { TQDataStream clientDS(m_servClientSocket); + clientDS.setPrintableData(true); TQString server_reply; clientDS >> server_reply; + m_servClientSocket->clearFrameTail(); if (server_reply == "OK") { ds << TQString("OK"); + writeEndOfFrame(); transferred_data = true; m_servState = 4; } else { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s due to remote server returning %s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii(), server_reply.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -243,6 +253,7 @@ int AuthSocket::servLoop() { // Timeout! m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -254,6 +265,7 @@ int AuthSocket::servLoop() { else { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection failed to %s:%d for user %s@%s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; delete m_servClientTimeout; @@ -279,6 +291,7 @@ int AuthSocket::servLoop() { else { m_servClientSocket->close(); ds << TQString("ERRNOTAVL"); + writeEndOfFrame(); printf("[DEBUG] Connection terminated by remote host %s:%d for user %s@%s\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_servActive = false; close(); @@ -316,12 +329,14 @@ void AuthSocket::commandLoop() { try { transferred_data = false; if (state() == TQSocket::Connected) { - if (canReadData()) { + if (canReadFrame()) { TQString command; TQDataStream ds(this); + ds.setPrintableData(true); transferred_data = true; ds >> command; + clearFrameTail(); if (command != "") { printf("[DEBUG] Got command %s from user %s@%s\n\r", command.ascii(), m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); if (command == "LIST") { @@ -378,13 +393,15 @@ void AuthSocket::commandLoop() { m_slist.append(st); } } - + ds << m_slist; + writeEndOfFrame(); } else if (command == "BIND") { // Get desired Station Type from client StationType st; ds >> st; + clearFrameTail(); // Attempt to bind to station matching desired Service Type list... m_stationID = -1; @@ -405,6 +422,7 @@ void AuthSocket::commandLoop() { if (m_stationID < 0) { ds << TQString("ERRUNAVAL"); + writeEndOfFrame(); } else { m_bound = true; @@ -418,16 +436,19 @@ void AuthSocket::commandLoop() { m_databaseActivityCursor->insert(); ds << TQString("OK"); + writeEndOfFrame(); } } else { ds << TQString("ERRPREVCN"); + writeEndOfFrame(); } } else if (command == "SERV") { // Get client library name from the client TQString libname; ds >> libname; + clearFrameTail(); printf("[DEBUG] SERV command parameter was %s from user %s@%s\n\r", libname.ascii(), m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); m_databaseActivityCursor->select(TQString("username='%1' AND realmname='%2'").arg(m_authenticatedUserName).arg(m_authenticatedRealmName)); @@ -437,10 +458,12 @@ void AuthSocket::commandLoop() { if (m_bound == true) { ds << TQString("ERRINVCMD"); + writeEndOfFrame(); } else { if (m_stationID < 0) { ds << TQString("ERRNOCONN"); + writeEndOfFrame(); } else { // Find the service ID for the specified client library name @@ -451,6 +474,7 @@ void AuthSocket::commandLoop() { } if (sid < 0) { ds << TQString("ERRNOSERV"); + writeEndOfFrame(); } else { // Attempt to connect to the backend server @@ -470,6 +494,7 @@ void AuthSocket::commandLoop() { } else { ds << TQString("ERRNOSERV"); + writeEndOfFrame(); } } } @@ -477,6 +502,7 @@ void AuthSocket::commandLoop() { } else { ds << TQString("ERRINVCMD"); + writeEndOfFrame(); } } } -- cgit v1.2.3