[X2Go-Commits] [x2gokdriveclient] 01/01: Server to client selection in UDP mode.

git-admin at x2go.org git-admin at x2go.org
Mon Dec 12 18:29:32 CET 2022


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch feature/udp-support
in repository x2gokdriveclient.

commit b28603bcccbfe640618f84ade84638843d3fb760
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Mon Dec 12 11:29:25 2022 -0600

    Server to client selection in UDP mode.
---
 client.cpp  | 60 ++++++++++++++++++++++++++++++++++++++++++------------------
 client.h    |  4 ++--
 xcbclip.cpp |  9 +++++----
 3 files changed, 49 insertions(+), 24 deletions(-)

diff --git a/client.cpp b/client.cpp
index 4c3b547..b954749 100644
--- a/client.cpp
+++ b/client.cpp
@@ -959,8 +959,8 @@ void Client::processServerPacket ( QByteArray data )
         }
         case SELECTION:
         {
-//             KDRStdErr()<<"Get Selection";
-//             getSelection(data);
+//             KDRStdErr()<<"Get Selection"<<KDR_ENDL;
+            getSelection(data);
             break;
         }
         case SERVER_VERSION:
@@ -970,6 +970,7 @@ void Client::processServerPacket ( QByteArray data )
         }
         case DEMANDCLIENTSELECTION:
         {
+               KDRStdErr()<<"Get Selection demand"<<KDR_ENDL;
 //             getClientSelection(data);
             break;
         }
@@ -1169,7 +1170,7 @@ void Client::getLastProcessedEvent(QByteArray data)
 {
     messageBuffer=data.data();
     uint16_t lastEvSeq=*((uint16_t*)messageBuffer+2);
-    KDRStdErr()<<"Server alive, last processed event "<<lastEvSeq<<KDR_ENDL;
+//     KDRStdErr()<<"Server alive, last processed event "<<lastEvSeq<<KDR_ENDL;
     QList<uint16_t> sequences=clientEventPackets.keys();
     uint16_t s;
     int32_t current_long,last_long;
@@ -1281,15 +1282,18 @@ void Client::getCursor(QByteArray data)
     }
 }
 
-void Client::getSelectionBuffer()
+void Client::getSelectionBuffer(char *data)
 {
+    if(connectionType==UDP)
+        messageBuffer=data;
 #ifndef Q_OS_LINUX
 //if using qt class, not supporting on demand load of data
     setInputSelectionData(selectionClipboard, selectionFormat, firstChunk, lastChunk, compressed_size, selectionSize, messageBuffer);
 #else
     clipboard->setInputSelectionData(selectionClipboard, selectionFormat, firstChunk, lastChunk, compressed_size, selectionSize, messageBuffer);
 #endif
-    freeMessageBuffer();
+    if(connectionType==TCP)
+        freeMessageBuffer();
 }
 
 
@@ -1681,9 +1685,17 @@ void Client::getDeletedCursors(QByteArray data)
     }
 }
 
-void Client::getSelection()
+void Client::getSelection(QByteArray data)
 {
-    bytesReady=0;
+    if(connectionType==UDP)
+    {
+        messageBuffer=data.data();
+        bytesLeftToRead=0;
+    }
+    else
+    {
+        bytesReady=0;
+    }
     selectionClipboard=CLIPBOARD;
     if( *((uint32_t*)messageBuffer+1 ) != CLIPBOARD)
     {
@@ -1703,24 +1715,25 @@ void Client::getSelection()
         lastChunk=*((uint32_t*)messageBuffer+5);
         compressed_size=*((uint32_t*)messageBuffer+6);
         selectionTotalSize=*((uint32_t*)messageBuffer+7);
+        KDRStdErr()<<"Got selection with sizes:"<<compressed_size<<" "<<selectionSize<< " "<<selectionTotalSize<<KDR_ENDL;
         //if we are supporting selection on demand, check if it's not selection notify event
         if(serverSupportsExtSelection() && firstChunk && lastChunk && (selectionSize == 0 ) && (selectionTotalSize == 0))
         {
             //set input selection with size 0 and notify true. Clipboard will know that we have a notification
-#ifdef Q_OS_LINUX
+            #ifdef Q_OS_LINUX
             clipboard->setInputSelectionData(selectionClipboard, selectionFormat, true, true, 0, 0, 0, true);
-#else
+            #else
             setInputSelectionData(selectionClipboard, selectionFormat, true, true, 0, 0, 0, true);
-#endif
+            #endif
         }
         else if(serverSupportsExtSelection() && lastChunk && (selectionSize==0))
         {
             //it's last chunk of incr selection with size 0
-#ifdef Q_OS_LINUX
+            #ifdef Q_OS_LINUX
             clipboard->setInputSelectionData(selectionClipboard, selectionFormat, firstChunk, lastChunk, 0, 0, 0);
-#else
+            #else
             setInputSelectionData(selectionClipboard, selectionFormat, firstChunk, lastChunk, 0, 0, 0);
-#endif
+            #endif
         }
     }
     else
@@ -1731,15 +1744,24 @@ void Client::getSelection()
         compressed_size=0;
     }
 
-
     currentDataType=SELECTIONBUFFER;
     //if data is compressed, read the "compressed_size" bytes
     if(compressed_size)
+    {
         bytesLeftToRead=compressed_size;
+    }
     else
         bytesLeftToRead=selectionSize;
-    //     KDRStdErr()<<"Get Selection, is Clipboard"<<selectionClipboard<<selectionFormat<<"chunk size"<<selectionSize<<"left"<<bytesLeftToRead;
-    freeMessageBuffer();
+    KDRStdErr()<<"Get Selection, is Clipboard "<<selectionClipboard<<selectionFormat<<" chunk size "<<selectionSize<<" left "<<bytesLeftToRead<<KDR_ENDL;
+    if(connectionType==TCP)
+    {
+        freeMessageBuffer();
+    }
+    else
+    {
+        if(bytesLeftToRead)
+            getSelectionBuffer(data.data()+4*8);
+    }
 }
 
 
@@ -2154,10 +2176,10 @@ void Client::slotSynchronize()
     //not connected or server not supporting KEEPALIVE event
     if(!connected || serverVersion<3)
         return;
-    KDRStdErr()<<"Synchronizing: control seq:"<<serverControlSeq<<" frame seq:"<<serverFrameSeq<<" repaint seq:"<<serverRepaintSeq<<
+    /*KDRStdErr()<<"Synchronizing: control seq:"<<serverControlSeq<<" frame seq:"<<serverFrameSeq<<" repaint seq:"<<serverRepaintSeq<<
     " frame cache:"<<frameCache.size()<<" srv control:"<<serverControlPackets.size()<<
     " srv frame:"<<serverFramePackets.size()<<" srv repaint:"<<serverRepaintPackets.size()<<" contr resend: "<<
-    requestedControlResend.size()<<" client event:"<<clientEventPackets.size()<<KDR_ENDL;
+    requestedControlResend.size()<<" client event:"<<clientEventPackets.size()<<KDR_ENDL;*/
 
     char evmsg[EVLENGTH]{};
     uint32_t etype;
@@ -2605,6 +2627,8 @@ void Client::requestSelectionFromServer(SelectionType sel)
     uint16_t selection=sel;
     uint32_t etype;
     etype=DEMANDSELECTION;
+
+    KDRStdErr()<<"Requesting selection from server"<<KDR_ENDL;
     memcpy(evmsg,(char*)&etype,4);
     memcpy(evmsg+4,(char*)&selection,2);
     sendEvent(evmsg,6);
diff --git a/client.h b/client.h
index f69b803..4e75c40 100644
--- a/client.h
+++ b/client.h
@@ -315,8 +315,8 @@ private:
     void getDeletedCursors(QByteArray data=QByteArray());
     void getDeletedFramesList(char* data=NULL);
     void getDeletedCursorsList(char* data=NULL);
-    void getSelection();
-    void getSelectionBuffer();
+    void getSelection(QByteArray data=QByteArray());
+    void getSelectionBuffer(char* data=NULL);
     void getWinUpdate();
     void getWinUpdateBuffer();
     void renderFrame();
diff --git a/xcbclip.cpp b/xcbclip.cpp
index 6adf47c..598ccb9 100644
--- a/xcbclip.cpp
+++ b/xcbclip.cpp
@@ -790,7 +790,8 @@ void XCBClip::setInputSelectionData(SelectionType selection, SelectionMime mime,
 {
     //if notify is true, we don't have actual data, just notification
     //copy data to selection buffer
-//     Client::KDRStdErr()<<"Get chunk of input selection: selection, myme, firstChunk, lastChunk, compressed, size:"<<selection<<mime<<firstChunk<<lastChunk<<compressed<<size<<notify;
+    Client::KDRStdErr()<<"Get chunk of input selection: selection, myme, firstChunk, lastChunk, compressed, size:"<<selection<<" "<<mime<<" "<<firstChunk<<" "<<
+    lastChunk<<" "<<compressed<<" "<<size<< " "<<notify<<KDR_ENDL;
 
 
     if(firstChunk)
@@ -806,7 +807,7 @@ void XCBClip::setInputSelectionData(SelectionType selection, SelectionMime mime,
     {
         total_compressed+=compressed;
         inputSelection[selection].selData.append(Client::zuncompress(data, compressed, size));
-//         Client::KDRStdErr()<<"uncompress from "<<compressed<<" to "<<size;
+        Client::KDRStdErr()<<"uncompress from "<<compressed<<" to "<<size<<KDR_ENDL;
     }
 
     if(lastChunk )
@@ -814,7 +815,7 @@ void XCBClip::setInputSelectionData(SelectionType selection, SelectionMime mime,
         if(notify)
         {
             inputSelection[selection].state=InputSelection::NOTIFIED;
-//             Client::KDRStdErr()<<"Got selection notify from server";
+            Client::KDRStdErr()<<"Got selection notify from server"<<KDR_ENDL;
             own_selection(selection);
         }
         else
@@ -825,7 +826,7 @@ void XCBClip::setInputSelectionData(SelectionType selection, SelectionMime mime,
                 own_selection(selection);
             }
             inputSelection[selection].state=InputSelection::COMPLETED;
-//             Client::KDRStdErr()<<"Got selection data for "<<selection<<"total size: "<<inputSelection[selection].selData.size()<<"compressed size"<<total_compressed;
+            Client::KDRStdErr()<<"Got selection data for "<<selection<<"total size: "<<inputSelection[selection].selData.size()<<" compressed size: "<<total_compressed<<KDR_ENDL;
         }
 
     }

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdriveclient.git


More information about the x2go-commits mailing list