diff options
| author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-06-29 19:07:27 -0500 |
|---|---|---|
| committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-06-29 19:07:27 -0500 |
| commit | 67f0b146ecc82da4511bfe72bdbe4f850c263d8c (patch) | |
| tree | f41dd17e138fbf3361cfe03479cedb862fcee5ce /lib/libtdekrb/src/tdekrbclientsocket.cpp | |
| parent | 1f8f9ca9434d9e2c0d7e7e061b7177009fd504df (diff) | |
| download | ulab-67f0b146ecc82da4511bfe72bdbe4f850c263d8c.tar.gz ulab-67f0b146ecc82da4511bfe72bdbe4f850c263d8c.zip | |
Add helper functions to krb sockets
Diffstat (limited to 'lib/libtdekrb/src/tdekrbclientsocket.cpp')
| -rw-r--r-- | lib/libtdekrb/src/tdekrbclientsocket.cpp | 121 |
1 files changed, 85 insertions, 36 deletions
diff --git a/lib/libtdekrb/src/tdekrbclientsocket.cpp b/lib/libtdekrb/src/tdekrbclientsocket.cpp index 7e39fcf..6ba35e5 100644 --- a/lib/libtdekrb/src/tdekrbclientsocket.cpp +++ b/lib/libtdekrb/src/tdekrbclientsocket.cpp @@ -204,6 +204,44 @@ bool TDEKerberosClientSocket::atEnd() const { return ret; } +TQ_ULONG TDEKerberosClientSocket::bytesAvailable() const { + bool ret; + + if (kerberosStatus() == KerberosInUse) { + ret = m_bufferLength; + } + else { + ret = TQSocket::bytesAvailable(); + } + + return ret; +} + +int TDEKerberosClientSocket::processPendingData() { + if (kerberosStatus() == KerberosInUse) { + int reclen; + int wrlen; + if (m_bufferLength <= 0) { + char* buf = (char*)malloc(m_negotiatedMaxBufferSize); + reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); + if (reclen < 0) { + free(buf); + return -1; + } + if (reclen > 0) { + m_buffer->at(m_bufferLength); + wrlen = m_buffer->writeBlock(buf, reclen); + if (wrlen > 0) { + m_bufferLength = m_bufferLength + wrlen; + } + } + free(buf); + } + } + + return 0; +} + int TDEKerberosClientSocket::setUsingKerberos(bool krbactive) { int ret = 0; @@ -243,20 +281,22 @@ TQ_LONG TDEKerberosClientSocket::readBlock(char *data, TQ_ULONG maxlen) { if (kerberosStatus() == KerberosInUse) { int reclen; int wrlen; - char* buf = (char*)malloc(m_negotiatedMaxBufferSize); - reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); - if (reclen < 0) { - free(buf); - return -1; - } - if (reclen > 0) { - m_buffer->at(m_bufferLength); - wrlen = m_buffer->writeBlock(buf, reclen); - if (wrlen > 0) { - m_bufferLength = m_bufferLength + wrlen; + if (m_bufferLength <= 0) { + char* buf = (char*)malloc(m_negotiatedMaxBufferSize); + reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); + if (reclen < 0) { + free(buf); + return -1; + } + if (reclen > 0) { + m_buffer->at(m_bufferLength); + wrlen = m_buffer->writeBlock(buf, reclen); + if (wrlen > 0) { + m_bufferLength = m_bufferLength + wrlen; + } } + free(buf); } - free(buf); if (maxlen > (unsigned int)m_bufferLength) { maxlen = m_bufferLength; @@ -304,20 +344,22 @@ TQ_LONG TDEKerberosClientSocket::readLine(char *data, TQ_ULONG maxlen) { if (kerberosStatus() == KerberosInUse) { int reclen; int wrlen; - char* buf = (char*)malloc(m_negotiatedMaxBufferSize); - reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); - if (reclen < 0) { - free(buf); - return -1; - } - if (reclen > 0) { - m_buffer->at(m_bufferLength); - wrlen = m_buffer->writeBlock(buf, reclen); - if (wrlen > 0) { - m_bufferLength = m_bufferLength + wrlen; + if (m_bufferLength <= 0) { + char* buf = (char*)malloc(m_negotiatedMaxBufferSize); + reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); + if (reclen < 0) { + free(buf); + return -1; } + if (reclen > 0) { + m_buffer->at(m_bufferLength); + wrlen = m_buffer->writeBlock(buf, reclen); + if (wrlen > 0) { + m_bufferLength = m_bufferLength + wrlen; + } + } + free(buf); } - free(buf); if (maxlen > (unsigned int)m_bufferLength) { maxlen = m_bufferLength; @@ -354,21 +396,24 @@ TQString TDEKerberosClientSocket::readLine() { int reclen; int wrlen; int readlen; + char* buf; maxlen = m_negotiatedMaxBufferSize; - char* buf = (char*)malloc(m_negotiatedMaxBufferSize); - reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); - if (reclen < 0) { - free(buf); - return TQString::null; - } - if (reclen > 0) { - m_buffer->at(m_bufferLength); - wrlen = m_buffer->writeBlock(buf, reclen); - if (wrlen > 0) { - m_bufferLength = m_bufferLength + wrlen; + if (m_bufferLength <= 0) { + buf = (char*)malloc(m_negotiatedMaxBufferSize); + reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); + if (reclen < 0) { + free(buf); + return TQString::null; } + if (reclen > 0) { + m_buffer->at(m_bufferLength); + wrlen = m_buffer->writeBlock(buf, reclen); + if (wrlen > 0) { + m_bufferLength = m_bufferLength + wrlen; + } + } + free(buf); } - free(buf); if (maxlen > m_bufferLength) { maxlen = m_bufferLength; @@ -596,6 +641,10 @@ TDEKerberosClientSocket::KerberosStatus TDEKerberosClientSocket::kerberosStatus( return KerberosInUse; } +bool TDEKerberosClientSocket::canReadData() { + return TQSocket::canReadLine(); +} + void TDEKerberosClientSocket::setStatusMessage(TQString message) { if (message != m_prevStatusMessage) { emit(statusMessageUpdated(message)); |
