2024-05-29 Fred Gleason <fredg@paravelsystems.com>

* Changed the socket type from SOCK_STREAM to SOCK_SEQPACKET in
	the 'RDUnixServer' and 'RDUnixSocket' classes.
	* Removed the resynchronization code from the 'RDJsonFramer' class.
	* Fixed a bug in rdpadd(8) that could cause corruption when processing
	JSON updates.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2024-05-29 11:56:02 -04:00
parent d422d12a5b
commit c4e6914c29
5 changed files with 11 additions and 56 deletions

View File

@ -24785,3 +24785,9 @@
2024-05-27 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in the 'RDHPIPlayStream::play()' method that
the 'play_length' setting to be ignored.
2024-05-29 Fred Gleason <fredg@paravelsystems.com>
* Changed the socket type from SOCK_STREAM to SOCK_SEQPACKET in
the 'RDUnixServer' and 'RDUnixSocket' classes.
* Removed the resynchronization code from the 'RDJsonFramer' class.
* Fixed a bug in rdpadd(8) that could cause corruption when processing
JSON updates.

View File

@ -23,9 +23,6 @@
RDJsonFramer::RDJsonFramer(QTcpSocket *in_sock,QObject *parent)
: QObject(parent)
{
d_escaped=false;
d_quoted=false;
d_level=0;
d_socket=in_sock;
connect(d_socket,SIGNAL(readyRead()),this,SLOT(readyReadData()));
}
@ -34,9 +31,6 @@ RDJsonFramer::RDJsonFramer(QTcpSocket *in_sock,QObject *parent)
RDJsonFramer::RDJsonFramer(QObject *parent)
: QObject(parent)
{
d_escaped=false;
d_quoted=false;
d_level=0;
d_socket=NULL;
}
@ -57,54 +51,13 @@ QByteArray RDJsonFramer::currentDocument() const
void RDJsonFramer::write(const QByteArray &data)
{
for(int i=0;i<data.size();i++) {
QChar c=data.at(i);
d_data+=c;
if((c.cell()=='\\')&&(!d_escaped)) {
d_escaped=true;
}
else {
switch(c.cell()) {
case '{':
if(!d_quoted) {
d_level++;
}
break;
case '}':
if(!d_quoted) {
if(--d_level==0) {
d_current_document=d_data+"\n";
d_escaped=false;
d_quoted=false;
d_level=0;
d_data.clear();
d_current_document=data;
emit documentReceived(d_current_document);
}
}
break;
case '"':
if(!d_escaped) {
d_quoted=!d_quoted;
}
break;
}
d_escaped=false;
}
}
}
void RDJsonFramer::reset()
{
d_escaped=false;
d_quoted=false;
d_level=0;
d_data.clear();
emit documentReset();
}

View File

@ -46,10 +46,6 @@ class RDJsonFramer : public QObject
void readyReadData();
private:
QByteArray d_data;
bool d_escaped;
bool d_quoted;
int d_level;
QByteArray d_current_document;
QTcpSocket *d_socket;
};

View File

@ -77,7 +77,7 @@ bool RDUnixServer::listenToPathname(const QString &pathname)
{
struct sockaddr_un sa;
if((unix_socket=socket(AF_UNIX,SOCK_STREAM,0))<0) {
if((unix_socket=socket(AF_UNIX,SOCK_SEQPACKET,0))<0) {
unix_error_string=QString("unable to create socket")+" ["+
QString(strerror(errno))+"]";
return false;
@ -108,7 +108,7 @@ bool RDUnixServer::listenToAbstract(const QString &addr)
{
struct sockaddr_un sa;
if((unix_socket=socket(AF_UNIX,SOCK_STREAM,0))<0) {
if((unix_socket=socket(AF_UNIX,SOCK_SEQPACKET,0))<0) {
unix_error_string=QString("unable to create socket")+" ["+
QString(strerror(errno))+"]";
return false;

View File

@ -43,7 +43,7 @@ bool RDUnixSocket::connectToAbstract(const QString &addr,
int sock;
struct sockaddr_un sa;
if((sock=::socket(AF_UNIX,SOCK_STREAM,0))<0) {
if((sock=::socket(AF_UNIX,SOCK_SEQPACKET,0))<0) {
return false;
}
memset(&sa,0,sizeof(sa));