summaryrefslogtreecommitdiffstats
path: root/rfb
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2011-08-16 14:02:31 +0200
committerJohannes Schindelin <johannes.schindelin@gmx.de>2011-08-17 12:41:23 +0200
commit6fac22a74b5020387a6961e4cc197b5fa4743f96 (patch)
tree9eb15702fbeed2f15fe2de17b54ac92544582509 /rfb
parent353b35e86aa7d51d767f4ff66e1179105bbee205 (diff)
downloadlibvncserver-6fac22a74b5020387a6961e4cc197b5fa4743f96.zip
libvncserver-6fac22a74b5020387a6961e4cc197b5fa4743f96.tar.gz
websockets: Initial WebSockets support.
Has a bug: WebSocket client disconnects are not detected. rfbSendFramebufferUpdate is doing a MSG_PEEK recv to determine if enough data is available which prevents a disconnect from being detected. Otherwise it's working pretty well. [jes: moved added struct members to the end for binary compatibility with previous LibVNCServer versions, removed an unused variable] Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Diffstat (limited to 'rfb')
-rw-r--r--rfb/rfb.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/rfb/rfb.h b/rfb/rfb.h
index e79b68b..1a46e9a 100644
--- a/rfb/rfb.h
+++ b/rfb/rfb.h
@@ -631,6 +631,19 @@ typedef struct _rfbClientRec {
#if defined(LIBVNCSERVER_HAVE_LIBZ) || defined(LIBVNCSERVER_HAVE_LIBPNG)
uint32_t tightEncoding; /* rfbEncodingTight or rfbEncodingTightPng */
#endif
+
+#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
+ rfbBool webSockets;
+ rfbBool webSocketsSSL;
+ rfbBool webSocketsBase64;
+
+ char encodeBuf[UPDATE_BUF_SIZE*2 + 2]; /* UTF-8 could double it + framing */
+
+ char decodeBuf[8192]; /* TODO: what makes sense? */
+ int dblen;
+ char carryBuf[3]; /* For base64 carry-over */
+ int carrylen;
+#endif
} rfbClientRec, *rfbClientPtr;
/**
@@ -683,6 +696,7 @@ extern void rfbDisconnectUDPSock(rfbScreenInfoPtr rfbScreen);
extern void rfbCloseClient(rfbClientPtr cl);
extern int rfbReadExact(rfbClientPtr cl, char *buf, int len);
extern int rfbReadExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
+extern int rfbPeekExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
extern int rfbWriteExact(rfbClientPtr cl, const char *buf, int len);
extern int rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec);
extern int rfbConnect(rfbScreenInfoPtr rfbScreen, char* host, int port);
@@ -692,6 +706,14 @@ extern int rfbListenOnUDPPort(int port, in_addr_t iface);
extern int rfbStringToAddr(char* string,in_addr_t* addr);
extern rfbBool rfbSetNonBlocking(int sock);
+#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
+/* websockets.c */
+
+extern rfbBool webSocketsCheck(rfbClientPtr cl);
+extern int webSocketsEncode(rfbClientPtr cl, const char *src, int len);
+extern int webSocketsDecode(rfbClientPtr cl, char *dst, int len);
+#endif
+
/* rfbserver.c */
/* Routines to iterate over the client list in a thread-safe way.
OpenPOWER on IntegriCloud