summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-07-07 16:23:30 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-07-07 16:23:30 -0500
commitfc455268a511d91113f59c04b50fa08b7c37b554 (patch)
treed61462c8a4496fa788875918dc4113162382962b /lib
parent1b8ef84fb9f47b82d0da6fa6e1b9fe439bc6b05c (diff)
downloadulab-fc455268a511d91113f59c04b50fa08b7c37b554.tar.gz
ulab-fc455268a511d91113f59c04b50fa08b7c37b554.zip
Convert to frame based protocol
Finish FPGA programming server/client
Diffstat (limited to 'lib')
-rw-r--r--lib/libtdekrb/src/tdekrbclientsocket.cpp47
-rw-r--r--lib/libtdekrb/src/tdekrbclientsocket.h5
-rw-r--r--lib/libtdekrb/src/tdekrbserversocket.cpp49
-rw-r--r--lib/libtdekrb/src/tdekrbserversocket.h5
-rw-r--r--lib/libtqtrla/src/tqtrla.cpp6
-rw-r--r--lib/libtqtrla/src/tqtrla.h1
6 files changed, 110 insertions, 3 deletions
diff --git a/lib/libtdekrb/src/tdekrbclientsocket.cpp b/lib/libtdekrb/src/tdekrbclientsocket.cpp
index 02bee4d..9e9a27a 100644
--- a/lib/libtdekrb/src/tdekrbclientsocket.cpp
+++ b/lib/libtdekrb/src/tdekrbclientsocket.cpp
@@ -204,7 +204,7 @@ bool TDEKerberosClientSocket::atEnd() const {
bool ret;
if (kerberosStatus() == KerberosInUse) {
- ret = TQSocket::atEnd();
+ ret = ((m_bufferLength < 1) && TQSocket::atEnd());
}
else {
ret = TQSocket::atEnd();
@@ -710,6 +710,51 @@ bool TDEKerberosClientSocket::canReadData() {
return (TQSocket::canReadLine() || (m_bufferLength > 0));
}
+void TDEKerberosClientSocket::clearIncomingData() {
+ char data[64];
+ processPendingData();
+ while (canReadData()) {
+ readBlock(data, 64);
+ }
+}
+
+int TDEKerberosClientSocket::writeEndOfFrame() {
+ char data[1];
+ data[0] = 255;
+ return writeBlock(data, 1);
+}
+
+bool TDEKerberosClientSocket::canReadFrame() {
+ processPendingData();
+ if (m_buffer->buffer().contains(255) > 0) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+void TDEKerberosClientSocket::clearFrameTail() {
+ int i;
+ int eofLoc;
+ if (m_bufferLength > 0) {
+ eofLoc = m_buffer->buffer().find(255, 0) + 1;
+ if ((eofLoc > 0) && (eofLoc <= m_bufferLength)) {
+ // Remove the remaining frame bytes (including the End of Frame marker) from the buffer
+ m_bufferLength = m_bufferLength-eofLoc;
+ TQByteArray ba = m_buffer->buffer();
+ for (i=0; i<m_bufferLength;i++) {
+ ba[i] = ba[i+eofLoc];
+ }
+ if (m_bufferLength < 1) {
+ // Clear the buffer from memory
+ m_buffer->close();
+ m_buffer->open(IO_ReadWrite|IO_Truncate);
+ }
+ }
+ }
+}
+
void TDEKerberosClientSocket::setStatusMessage(TQString message) {
if (message != m_prevStatusMessage) {
emit(statusMessageUpdated(message));
diff --git a/lib/libtdekrb/src/tdekrbclientsocket.h b/lib/libtdekrb/src/tdekrbclientsocket.h
index 8fa2b25..a9034f0 100644
--- a/lib/libtdekrb/src/tdekrbclientsocket.h
+++ b/lib/libtdekrb/src/tdekrbclientsocket.h
@@ -71,6 +71,11 @@ class TDEKerberosClientSocket : public TQSocket
KerberosStatus kerberosStatus() const;
bool canReadData();
+ void clearIncomingData();
+
+ int writeEndOfFrame();
+ bool canReadFrame();
+ void clearFrameTail();
public slots:
int processPendingData();
diff --git a/lib/libtdekrb/src/tdekrbserversocket.cpp b/lib/libtdekrb/src/tdekrbserversocket.cpp
index 86c4212..f715af8 100644
--- a/lib/libtdekrb/src/tdekrbserversocket.cpp
+++ b/lib/libtdekrb/src/tdekrbserversocket.cpp
@@ -204,8 +204,8 @@ bool TDEKerberosServerSocket::at(TQIODevice::Offset off, int hidebasehack) {
bool TDEKerberosServerSocket::atEnd() const {
bool ret;
- if (m_kerberosRequested) {
- ret = TQSocket::atEnd();
+ if (kerberosStatus() == KerberosInUse) {
+ ret = ((m_bufferLength < 1) && TQSocket::atEnd());
}
else {
ret = TQSocket::atEnd();
@@ -719,6 +719,51 @@ bool TDEKerberosServerSocket::canReadData() {
return (TQSocket::canReadLine() || (m_bufferLength > 0));
}
+void TDEKerberosServerSocket::clearIncomingData() {
+ char data[64];
+ processPendingData();
+ while (canReadData()) {
+ readBlock(data, 64);
+ }
+}
+
+int TDEKerberosServerSocket::writeEndOfFrame() {
+ char data[1];
+ data[0] = 255;
+ return writeBlock(data, 1);
+}
+
+bool TDEKerberosServerSocket::canReadFrame() {
+ processPendingData();
+ if (m_buffer->buffer().contains(255) > 0) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+void TDEKerberosServerSocket::clearFrameTail() {
+ int i;
+ int eofLoc;
+ if (m_bufferLength > 0) {
+ eofLoc = m_buffer->buffer().find(255, 0) + 1;
+ if ((eofLoc > 0) && (eofLoc <= m_bufferLength)) {
+ // Remove the remaining frame bytes (including the End of Frame marker) from the buffer
+ m_bufferLength = m_bufferLength-eofLoc;
+ TQByteArray ba = m_buffer->buffer();
+ for (i=0; i<m_bufferLength;i++) {
+ ba[i] = ba[i+eofLoc];
+ }
+ if (m_bufferLength < 1) {
+ // Clear the buffer from memory
+ m_buffer->close();
+ m_buffer->open(IO_ReadWrite|IO_Truncate);
+ }
+ }
+ }
+}
+
void TDEKerberosServerSocket::setStatusMessage(TQString message) {
if (message != m_prevStatusMessage) {
emit(statusMessageUpdated(message));
diff --git a/lib/libtdekrb/src/tdekrbserversocket.h b/lib/libtdekrb/src/tdekrbserversocket.h
index 0394b49..1f4b4ff 100644
--- a/lib/libtdekrb/src/tdekrbserversocket.h
+++ b/lib/libtdekrb/src/tdekrbserversocket.h
@@ -71,6 +71,11 @@ class TDEKerberosServerSocket : public TQSocket
KerberosStatus kerberosStatus() const;
bool canReadData();
+ void clearIncomingData();
+
+ int writeEndOfFrame();
+ bool canReadFrame();
+ void clearFrameTail();
public slots:
int processPendingData();
diff --git a/lib/libtqtrla/src/tqtrla.cpp b/lib/libtqtrla/src/tqtrla.cpp
index d43c1f2..376a9d9 100644
--- a/lib/libtqtrla/src/tqtrla.cpp
+++ b/lib/libtqtrla/src/tqtrla.cpp
@@ -80,6 +80,12 @@ namespace KParts
emit(statusMessageSet(message));
}
+ TQ_ULONG RemoteInstrumentPart::maximumSocketDataChunkSize() {
+ // FIXME
+ // Dynamically set this!
+ return 512;
+ }
+
TQStringList RemoteInstrumentPart::textForServerError(TQString shortError) {
TQStringList ret;
diff --git a/lib/libtqtrla/src/tqtrla.h b/lib/libtqtrla/src/tqtrla.h
index 1f1ca22..c1c88e2 100644
--- a/lib/libtqtrla/src/tqtrla.h
+++ b/lib/libtqtrla/src/tqtrla.h
@@ -52,6 +52,7 @@ namespace KParts
protected:
TQStringList textForServerError(TQString shortError);
+ TQ_ULONG maximumSocketDataChunkSize();
protected slots:
void close();