summaryrefslogtreecommitdiffstats
path: root/libvncserver
diff options
context:
space:
mode:
Diffstat (limited to 'libvncserver')
-rw-r--r--libvncserver/rfbserver.c41
1 files changed, 41 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;