mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-09-16 16:30:26 +02:00
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:
parent
d422d12a5b
commit
c4e6914c29
@ -24785,3 +24785,9 @@
|
|||||||
2024-05-27 Fred Gleason <fredg@paravelsystems.com>
|
2024-05-27 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Fixed a regression in the 'RDHPIPlayStream::play()' method that
|
* Fixed a regression in the 'RDHPIPlayStream::play()' method that
|
||||||
the 'play_length' setting to be ignored.
|
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.
|
||||||
|
@ -23,9 +23,6 @@
|
|||||||
RDJsonFramer::RDJsonFramer(QTcpSocket *in_sock,QObject *parent)
|
RDJsonFramer::RDJsonFramer(QTcpSocket *in_sock,QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
d_escaped=false;
|
|
||||||
d_quoted=false;
|
|
||||||
d_level=0;
|
|
||||||
d_socket=in_sock;
|
d_socket=in_sock;
|
||||||
connect(d_socket,SIGNAL(readyRead()),this,SLOT(readyReadData()));
|
connect(d_socket,SIGNAL(readyRead()),this,SLOT(readyReadData()));
|
||||||
}
|
}
|
||||||
@ -34,9 +31,6 @@ RDJsonFramer::RDJsonFramer(QTcpSocket *in_sock,QObject *parent)
|
|||||||
RDJsonFramer::RDJsonFramer(QObject *parent)
|
RDJsonFramer::RDJsonFramer(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
d_escaped=false;
|
|
||||||
d_quoted=false;
|
|
||||||
d_level=0;
|
|
||||||
d_socket=NULL;
|
d_socket=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,54 +51,13 @@ QByteArray RDJsonFramer::currentDocument() const
|
|||||||
|
|
||||||
void RDJsonFramer::write(const QByteArray &data)
|
void RDJsonFramer::write(const QByteArray &data)
|
||||||
{
|
{
|
||||||
for(int i=0;i<data.size();i++) {
|
d_current_document=data;
|
||||||
QChar c=data.at(i);
|
emit documentReceived(d_current_document);
|
||||||
|
|
||||||
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();
|
|
||||||
emit documentReceived(d_current_document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '"':
|
|
||||||
if(!d_escaped) {
|
|
||||||
d_quoted=!d_quoted;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
d_escaped=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RDJsonFramer::reset()
|
void RDJsonFramer::reset()
|
||||||
{
|
{
|
||||||
d_escaped=false;
|
|
||||||
d_quoted=false;
|
|
||||||
d_level=0;
|
|
||||||
d_data.clear();
|
|
||||||
|
|
||||||
emit documentReset();
|
emit documentReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,10 +46,6 @@ class RDJsonFramer : public QObject
|
|||||||
void readyReadData();
|
void readyReadData();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QByteArray d_data;
|
|
||||||
bool d_escaped;
|
|
||||||
bool d_quoted;
|
|
||||||
int d_level;
|
|
||||||
QByteArray d_current_document;
|
QByteArray d_current_document;
|
||||||
QTcpSocket *d_socket;
|
QTcpSocket *d_socket;
|
||||||
};
|
};
|
||||||
|
@ -77,7 +77,7 @@ bool RDUnixServer::listenToPathname(const QString &pathname)
|
|||||||
{
|
{
|
||||||
struct sockaddr_un sa;
|
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")+" ["+
|
unix_error_string=QString("unable to create socket")+" ["+
|
||||||
QString(strerror(errno))+"]";
|
QString(strerror(errno))+"]";
|
||||||
return false;
|
return false;
|
||||||
@ -108,7 +108,7 @@ bool RDUnixServer::listenToAbstract(const QString &addr)
|
|||||||
{
|
{
|
||||||
struct sockaddr_un sa;
|
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")+" ["+
|
unix_error_string=QString("unable to create socket")+" ["+
|
||||||
QString(strerror(errno))+"]";
|
QString(strerror(errno))+"]";
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,7 +43,7 @@ bool RDUnixSocket::connectToAbstract(const QString &addr,
|
|||||||
int sock;
|
int sock;
|
||||||
struct sockaddr_un sa;
|
struct sockaddr_un sa;
|
||||||
|
|
||||||
if((sock=::socket(AF_UNIX,SOCK_STREAM,0))<0) {
|
if((sock=::socket(AF_UNIX,SOCK_SEQPACKET,0))<0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memset(&sa,0,sizeof(sa));
|
memset(&sa,0,sizeof(sa));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user