Add helper functions to krb sockets

master
Timothy Pearson 12 years ago
parent 1f8f9ca943
commit 67f0b146ec

@ -204,6 +204,44 @@ bool TDEKerberosClientSocket::atEnd() const {
return ret; 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 TDEKerberosClientSocket::setUsingKerberos(bool krbactive) {
int ret = 0; int ret = 0;
@ -243,20 +281,22 @@ TQ_LONG TDEKerberosClientSocket::readBlock(char *data, TQ_ULONG maxlen) {
if (kerberosStatus() == KerberosInUse) { if (kerberosStatus() == KerberosInUse) {
int reclen; int reclen;
int wrlen; int wrlen;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); char* buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return -1; free(buf);
} return -1;
if (reclen > 0) { }
m_buffer->at(m_bufferLength); if (reclen > 0) {
wrlen = m_buffer->writeBlock(buf, reclen); m_buffer->at(m_bufferLength);
if (wrlen > 0) { wrlen = m_buffer->writeBlock(buf, reclen);
m_bufferLength = m_bufferLength + wrlen; if (wrlen > 0) {
m_bufferLength = m_bufferLength + wrlen;
}
} }
free(buf);
} }
free(buf);
if (maxlen > (unsigned int)m_bufferLength) { if (maxlen > (unsigned int)m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -304,20 +344,22 @@ TQ_LONG TDEKerberosClientSocket::readLine(char *data, TQ_ULONG maxlen) {
if (kerberosStatus() == KerberosInUse) { if (kerberosStatus() == KerberosInUse) {
int reclen; int reclen;
int wrlen; int wrlen;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); char* buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return -1; 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 (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) { if (maxlen > (unsigned int)m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -354,21 +396,24 @@ TQString TDEKerberosClientSocket::readLine() {
int reclen; int reclen;
int wrlen; int wrlen;
int readlen; int readlen;
char* buf;
maxlen = m_negotiatedMaxBufferSize; maxlen = m_negotiatedMaxBufferSize;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return TQString::null; 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 (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) { if (maxlen > m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -596,6 +641,10 @@ TDEKerberosClientSocket::KerberosStatus TDEKerberosClientSocket::kerberosStatus(
return KerberosInUse; return KerberosInUse;
} }
bool TDEKerberosClientSocket::canReadData() {
return TQSocket::canReadLine();
}
void TDEKerberosClientSocket::setStatusMessage(TQString message) { void TDEKerberosClientSocket::setStatusMessage(TQString message) {
if (message != m_prevStatusMessage) { if (message != m_prevStatusMessage) {
emit(statusMessageUpdated(message)); emit(statusMessageUpdated(message));

@ -57,6 +57,7 @@ class TDEKerberosClientSocket : public TQSocket
TQ_LONG readLine(char *data, TQ_ULONG maxlen); TQ_LONG readLine(char *data, TQ_ULONG maxlen);
TQString readLine(); TQString readLine();
void writeLine(TQString); void writeLine(TQString);
TQ_ULONG bytesAvailable() const;
int setUsingKerberos(bool krbactive); int setUsingKerberos(bool krbactive);
void setServiceName(TQString name); void setServiceName(TQString name);
@ -65,6 +66,8 @@ class TDEKerberosClientSocket : public TQSocket
void setDataTimeout(int timeoutms); void setDataTimeout(int timeoutms);
KerberosStatus kerberosStatus() const; KerberosStatus kerberosStatus() const;
bool canReadData();
int processPendingData();
private: private:
int initializeKerberosInterface(); int initializeKerberosInterface();

@ -204,6 +204,44 @@ bool TDEKerberosServerSocket::atEnd() const {
return ret; return ret;
} }
TQ_ULONG TDEKerberosServerSocket::bytesAvailable() const {
bool ret;
if (kerberosStatus() == KerberosInUse) {
ret = m_bufferLength;
}
else {
ret = TQSocket::bytesAvailable();
}
return ret;
}
int TDEKerberosServerSocket::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 TDEKerberosServerSocket::setUsingKerberos(bool krbactive) { int TDEKerberosServerSocket::setUsingKerberos(bool krbactive) {
int ret = 0; int ret = 0;
@ -243,20 +281,22 @@ TQ_LONG TDEKerberosServerSocket::readBlock(char *data, TQ_ULONG maxlen) {
if (m_kerberosRequested) { if (m_kerberosRequested) {
int reclen; int reclen;
int wrlen; int wrlen;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); char* buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return -1; 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 (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) { if (maxlen > (unsigned int)m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -304,20 +344,22 @@ TQ_LONG TDEKerberosServerSocket::readLine(char *data, TQ_ULONG maxlen) {
if (m_kerberosRequested) { if (m_kerberosRequested) {
int reclen; int reclen;
int wrlen; int wrlen;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); char* buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return -1; 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 (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) { if (maxlen > (unsigned int)m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -354,21 +396,24 @@ TQString TDEKerberosServerSocket::readLine() {
int reclen; int reclen;
int wrlen; int wrlen;
int readlen; int readlen;
char* buf;
maxlen = m_negotiatedMaxBufferSize; maxlen = m_negotiatedMaxBufferSize;
char* buf = (char*)malloc(m_negotiatedMaxBufferSize); if (m_bufferLength <= 0) {
reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize); buf = (char*)malloc(m_negotiatedMaxBufferSize);
if (reclen < 0) { reclen = receiveEncryptedData(buf, m_negotiatedMaxBufferSize);
free(buf); if (reclen < 0) {
return TQString::null; 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 (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) { if (maxlen > m_bufferLength) {
maxlen = m_bufferLength; maxlen = m_bufferLength;
@ -596,6 +641,10 @@ TDEKerberosServerSocket::KerberosStatus TDEKerberosServerSocket::kerberosStatus(
return KerberosInUse; return KerberosInUse;
} }
bool TDEKerberosServerSocket::canReadData() {
return TQSocket::canReadLine();
}
void TDEKerberosServerSocket::setStatusMessage(TQString message) { void TDEKerberosServerSocket::setStatusMessage(TQString message) {
if (message != m_prevStatusMessage) { if (message != m_prevStatusMessage) {
emit(statusMessageUpdated(message)); emit(statusMessageUpdated(message));

@ -57,6 +57,7 @@ class TDEKerberosServerSocket : public TQSocket
TQ_LONG readLine(char *data, TQ_ULONG maxlen); TQ_LONG readLine(char *data, TQ_ULONG maxlen);
TQString readLine(); TQString readLine();
void writeLine(TQString); void writeLine(TQString);
TQ_ULONG bytesAvailable() const;
int setUsingKerberos(bool krbactive); int setUsingKerberos(bool krbactive);
void setServiceName(TQString name); void setServiceName(TQString name);
@ -65,6 +66,8 @@ class TDEKerberosServerSocket : public TQSocket
void setDataTimeout(int timeoutms); void setDataTimeout(int timeoutms);
KerberosStatus kerberosStatus() const; KerberosStatus kerberosStatus() const;
bool canReadData();
int processPendingData();
private: private:
int initializeKerberosInterface(); int initializeKerberosInterface();

@ -193,7 +193,7 @@ void AuthSocket::servLoop() {
m_servClientTimeout->start(5000, TRUE); m_servClientTimeout->start(5000, TRUE);
} }
if (m_servClientSocket->state() == TQSocket::Connected) { if (m_servClientSocket->state() == TQSocket::Connected) {
if (m_servClientSocket->canReadLine()) { if (m_servClientSocket->canReadData()) {
TQDataStream clientDS(m_servClientSocket); TQDataStream clientDS(m_servClientSocket);
TQString server_reply; TQString server_reply;
@ -237,11 +237,11 @@ void AuthSocket::servLoop() {
TQByteArray ba(8192); TQByteArray ba(8192);
TQ_ULONG reclen; TQ_ULONG reclen;
if (canReadLine()) { if (canReadData()) {
reclen = readBlock(ba.data(), 8192); reclen = readBlock(ba.data(), 8192);
m_servClientSocket->writeBlock(ba.data(), reclen); m_servClientSocket->writeBlock(ba.data(), reclen);
} }
if (m_servClientSocket->canReadLine()) { if (m_servClientSocket->canReadData()) {
reclen = m_servClientSocket->readBlock(ba.data(), 8192); reclen = m_servClientSocket->readBlock(ba.data(), 8192);
writeBlock(ba.data(), reclen); writeBlock(ba.data(), reclen);
} }
@ -267,7 +267,7 @@ void AuthSocket::commandLoop() {
m_criticalSection++; m_criticalSection++;
try { try {
if (state() == TQSocket::Connected) { if (state() == TQSocket::Connected) {
if (canReadLine()) { if (canReadData()) {
TQString command; TQString command;
TQDataStream ds(this); TQDataStream ds(this);

@ -166,7 +166,7 @@ void FPGASocket::commandLoop() {
writeBlock(buffer, cc); writeBlock(buffer, cc);
printf("[DEBUG] Got %d bytes from the serial port\n\r", cc); fflush(stdout); printf("[DEBUG] Got %d bytes from the serial port\n\r", cc); fflush(stdout);
} }
if (canReadLine()) { if (canReadData()) {
cc = readBlock(buffer, 10000); cc = readBlock(buffer, 10000);
if (cc > 0) { if (cc > 0) {
if (write(m_fd_tty, buffer, cc) < 0) { if (write(m_fd_tty, buffer, cc) < 0) {

Loading…
Cancel
Save