summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsteven_carr <steven_carr>2006-05-15 18:41:56 +0000
committersteven_carr <steven_carr>2006-05-15 18:41:56 +0000
commit7218843ac0d39b5ae83cf166cab350e6fff82222 (patch)
treebeb646d701d5eb8d502e458ee7d305b58dca3d38
parent1c3af68549c544de065ceedec518449ee8cff49d (diff)
downloadlibtdevnc-7218843a.tar.gz
libtdevnc-7218843a.zip
Support sending TextChat messages back to the client
-rw-r--r--libvncserver/rfbserver.c41
-rw-r--r--rfb/rfb.h2
2 files changed, 43 insertions, 0 deletions
diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
index d3d4409..133007d 100644
--- a/libvncserver/rfbserver.c
+++ b/libvncserver/rfbserver.c
@@ -1015,6 +1015,47 @@ rfbSendServerIdentity(rfbClientPtr cl)
return TRUE;
}
+rfbBool rfbSendTextChatMessage(rfbClientPtr cl, uint32_t length, char *buffer)
+{
+ rfbTextChatMsg tc;
+ int bytesToSend=0;
+
+ memset((char *)&tc, 0, sizeof(tc));
+ tc.type = rfbTextChat;
+ tc.length = Swap32IfLE(length);
+
+ switch(length) {
+ case rfbTextChatOpen:
+ case rfbTextChatClose:
+ case rfbTextChatFinished:
+ bytesToSend=0;
+ break;
+ default:
+ bytesToSend=length;
+ if (bytesToSend>rfbTextMaxSize)
+ bytesToSend=rfbTextMaxSize;
+ }
+
+ if (cl->ublen + sz_rfbTextChatMsg + bytesToSend > UPDATE_BUF_SIZE) {
+ if (!rfbSendUpdateBuf(cl))
+ return FALSE;
+ }
+
+ memcpy(&cl->updateBuf[cl->ublen], (char *)&tc, sz_rfbTextChatMsg);
+ cl->ublen += sz_rfbTextChatMsg;
+ if (bytesToSend>0) {
+ memcpy(&cl->updateBuf[cl->ublen], buffer, bytesToSend);
+ cl->ublen += bytesToSend;
+ }
+ rfbStatRecordMessageSent(cl, rfbTextChat, sz_rfbTextChatMsg+bytesToSend, sz_rfbTextChatMsg+bytesToSend);
+
+ if (!rfbSendUpdateBuf(cl))
+ return FALSE;
+
+ return TRUE;
+}
+
+
rfbBool rfbSendFileTransferMessage(rfbClientPtr cl, uint8_t contentType, uint8_t contentParam, uint32_t size, uint32_t length, char *buffer)
{
rfbFileTransferMsg ft;
diff --git a/rfb/rfb.h b/rfb/rfb.h
index 461d6ab..1aef85a 100644
--- a/rfb/rfb.h
+++ b/rfb/rfb.h
@@ -959,6 +959,8 @@ extern int rfbStatGetEncodingCountRcvd(rfbClientPtr cl, uint32_t type);
/* Set which version you want to advertise 3.3, 3.6, 3.7 and 3.8 are currently supported*/
extern void rfbSetProtocolVersion(rfbScreenInfoPtr rfbScreen, int major_, int minor_);
+/* send a TextChat message to a client */
+extern rfbBool rfbSendTextChatMessage(rfbClientPtr cl, uint32_t length, char *buffer);