[X2Go-Commits] [x2gokdrive] 01/01: send a recive feature versions.
git-admin at x2go.org
git-admin at x2go.org
Mon Aug 24 18:07:34 CEST 2020
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2gokdrive.
commit a3ecd8eb0a58f57218b1aab1b96d9e0677e14667
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date: Mon Aug 24 11:07:27 2020 -0500
send a recive feature versions.
---
debian/changelog | 1 +
x2gokdriveremote.c | 36 ++++++++++++++++++++++++++++++++++++
x2gokdriveremote.h | 16 +++++++++++++++-
3 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/debian/changelog b/debian/changelog
index 3ac81d3..4a8877b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ x2gokdrive (0.0.0.1-0x2go1) UNRELEASED; urgency=medium
- Move selection functionality to separate thread. Use XCB API to manage
selections.
- add xcb-xfixes to deps.
+ - send a recive feature versions.
[ Mihai Moldovan ]
* Initial release:
diff --git a/x2gokdriveremote.c b/x2gokdriveremote.c
index 7732deb..e71f2a8 100644
--- a/x2gokdriveremote.c
+++ b/x2gokdriveremote.c
@@ -299,6 +299,20 @@ void remote_sendCursor(CursorPtr cursor)
pthread_mutex_unlock(&remoteVars.sendqueue_mutex);
}
+
+void remote_sendVersion(void)
+{
+ unsigned char buffer[56] = {0};
+ _X_UNUSED int l;
+
+ *((uint32_t*)buffer)=SERVERVERSION; //4B
+ *((uint16_t*)buffer+2)=FEATURE_VERSION;
+ EPHYR_DBG("Sending server version: %d", FEATURE_VERSION);
+ l=write(remoteVars.clientsock,buffer,56);
+ remoteVars.server_version_sent=TRUE;
+}
+
+
static
int32_t send_cursor(struct cursorFrame* cursor)
{
@@ -1467,6 +1481,7 @@ void *send_frame_thread (void *threadid)
SetNotifyFd(remoteVars.clientsock, clientReadNotify, X_NOTIFY_READ, NULL);
#endif /* XORG_VERSION_CURRENT */
remoteVars.client_connected=TRUE;
+ remoteVars.server_version_sent=FALSE;
if(remoteVars.checkConnectionTimer)
{
TimerFree(remoteVars.checkConnectionTimer);
@@ -1496,6 +1511,13 @@ void *send_frame_thread (void *threadid)
}
remoteVars.client_connected=TRUE;
+ //check if we should send the server version to client
+ if(remoteVars.client_version && ! remoteVars.server_version_sent)
+ {
+ //the client supports versions and we didn't send our version yet
+ remote_sendVersion();
+ }
+
if(!remoteVars.first_sendqueue_element && !remoteVars.firstCursor && !remoteVars.selstruct.firstOutputChunk)
{
@@ -2166,6 +2188,20 @@ clientReadNotify(int fd, int ready, void *data)
readInputSelectionHeader(buff);
break;
}
+ case CLIENTVERSION:
+ {
+ int16_t ver=*((uint16_t*)buff+2);
+ int16_t os=*((uint16_t*)buff+3);
+ EPHYR_DBG("Client information: vesrion %d, os %d", ver, os);
+ remoteVars.client_version=ver;
+ if(os > OS_DARWIN)
+ {
+ EPHYR_DBG("Unsupported OS, assuming OS_LINUX");
+ }
+ else
+ remoteVars.client_os=os;
+ break;
+ }
default:
{
EPHYR_DBG("UNSUPPORTED EVENT: %d",event_type);
diff --git a/x2gokdriveremote.h b/x2gokdriveremote.h
index a06e692..4249563 100644
--- a/x2gokdriveremote.h
+++ b/x2gokdriveremote.h
@@ -92,6 +92,12 @@
#endif /* XORG_VERSION_CURRENT */
+//FEATURE_VERSION is not cooresponding to actual version of server
+//it used to tell server which features are supported by server
+//Changes 0 - 1: sending and recieving client and OS version
+#define FEATURE_VERSION 1
+
+
#define EPHYR_WANT_DEBUG 1
// #warning DEBUG ENABLED
@@ -124,12 +130,13 @@ fprintf(stderr, __FILE__ ":%d,%s() " x "\n", __LINE__, __func__, ##a)
//always 4
#define XSERVERBPP 4
-enum msg_type{FRAME,DELETED,CURSOR, DELETEDCURSOR, SELECTION};
+enum msg_type{FRAME,DELETED, CURSOR, DELETEDCURSOR, SELECTION, SERVERVERSION};
enum AgentState{STARTING, RUNNING, RESUMING, SUSPENDING, SUSPENDED, TERMINATING, TERMINATED};
enum Compressions{JPEG,PNG};
enum SelectionType{PRIMARY,CLIPBOARD};
enum SelectionMime{STRING,UTF_STRING,PIXMAP};
enum ClipboardMode{CLIP_NONE,CLIP_CLIENT,CLIP_SERVER,CLIP_BOTH};
+enum OS_VERSION{OS_LINUX, OS_WINDOWS, OS_DARWIN};
#define DEFAULT_COMPRESSION JPEG
@@ -152,6 +159,7 @@ enum ClipboardMode{CLIP_NONE,CLIP_CLIENT,CLIP_SERVER,CLIP_BOTH};
#define GEOMETRY 7
#define UPDATE 8
#define SELECTIONEVENT 9
+#define CLIENTVERSION 10
#define EVLENGTH 41
@@ -333,6 +341,11 @@ struct _remoteHostVars
unsigned long send_thread_id;
+ //client information
+ enum OS_VERSION client_os;
+ uint16_t client_version;
+ BOOL server_version_sent;
+
//for control
uint32_t cache_elements;
uint32_t cache_size;
@@ -447,6 +460,7 @@ void remote_sendCursor(CursorPtr cursor);
void remote_removeCursor(uint32_t serialNumber);
void remote_send_main_image(void);
+void remote_sendVersion(void);
int remote_init(void);
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdrive.git
More information about the x2go-commits
mailing list