1 /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
2 * Copyright 2009-2019 Pierre Ossman for Cendio AB
3 *
4 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This software is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this software; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17 * USA.
18 */
19 #include <stdio.h>
20
21 #include <rfb/Exception.h>
22 #include <rfb/LogWriter.h>
23 #include <rfb/CMsgHandler.h>
24 #include <rfb/clipboardTypes.h>
25 #include <rfb/screenTypes.h>
26
27 static rfb::LogWriter vlog("CMsgHandler");
28
29 using namespace rfb;
30
CMsgHandler()31 CMsgHandler::CMsgHandler()
32 {
33 }
34
~CMsgHandler()35 CMsgHandler::~CMsgHandler()
36 {
37 }
38
setDesktopSize(int width,int height)39 void CMsgHandler::setDesktopSize(int width, int height)
40 {
41 server.setDimensions(width, height);
42 }
43
setExtendedDesktopSize(unsigned reason,unsigned result,int width,int height,const ScreenSet & layout)44 void CMsgHandler::setExtendedDesktopSize(unsigned reason, unsigned result,
45 int width, int height,
46 const ScreenSet& layout)
47 {
48 server.supportsSetDesktopSize = true;
49
50 if ((reason == reasonClient) && (result != resultSuccess))
51 return;
52
53 server.setDimensions(width, height, layout);
54 }
55
setPixelFormat(const PixelFormat & pf)56 void CMsgHandler::setPixelFormat(const PixelFormat& pf)
57 {
58 server.setPF(pf);
59 }
60
setName(const char * name)61 void CMsgHandler::setName(const char* name)
62 {
63 server.setName(name);
64 }
65
fence(rdr::U32 flags,unsigned len,const char data[])66 void CMsgHandler::fence(rdr::U32 flags, unsigned len, const char data[])
67 {
68 server.supportsFence = true;
69 }
70
endOfContinuousUpdates()71 void CMsgHandler::endOfContinuousUpdates()
72 {
73 server.supportsContinuousUpdates = true;
74 }
75
supportsQEMUKeyEvent()76 void CMsgHandler::supportsQEMUKeyEvent()
77 {
78 server.supportsQEMUKeyEvent = true;
79 }
80
serverInit(int width,int height,const PixelFormat & pf,const char * name)81 void CMsgHandler::serverInit(int width, int height,
82 const PixelFormat& pf,
83 const char* name)
84 {
85 server.setDimensions(width, height);
86 server.setPF(pf);
87 server.setName(name);
88 }
89
framebufferUpdateStart()90 void CMsgHandler::framebufferUpdateStart()
91 {
92 }
93
framebufferUpdateEnd()94 void CMsgHandler::framebufferUpdateEnd()
95 {
96 }
97
setLEDState(unsigned int state)98 void CMsgHandler::setLEDState(unsigned int state)
99 {
100 server.setLEDState(state);
101 }
102
handleClipboardCaps(rdr::U32 flags,const rdr::U32 * lengths)103 void CMsgHandler::handleClipboardCaps(rdr::U32 flags, const rdr::U32* lengths)
104 {
105 int i;
106
107 vlog.debug("Got server clipboard capabilities:");
108 for (i = 0;i < 16;i++) {
109 if (flags & (1 << i)) {
110 const char *type;
111
112 switch (1 << i) {
113 case clipboardUTF8:
114 type = "Plain text";
115 break;
116 case clipboardRTF:
117 type = "Rich text";
118 break;
119 case clipboardHTML:
120 type = "HTML";
121 break;
122 case clipboardDIB:
123 type = "Images";
124 break;
125 case clipboardFiles:
126 type = "Files";
127 break;
128 default:
129 vlog.debug(" Unknown format 0x%x", 1 << i);
130 continue;
131 }
132
133 if (lengths[i] == 0)
134 vlog.debug(" %s (only notify)", type);
135 else {
136 char bytes[1024];
137
138 iecPrefix(lengths[i], "B", bytes, sizeof(bytes));
139 vlog.debug(" %s (automatically send up to %s)",
140 type, bytes);
141 }
142 }
143 }
144
145 server.setClipboardCaps(flags, lengths);
146 }
147
handleClipboardRequest(rdr::U32 flags)148 void CMsgHandler::handleClipboardRequest(rdr::U32 flags)
149 {
150 }
151
handleClipboardPeek(rdr::U32 flags)152 void CMsgHandler::handleClipboardPeek(rdr::U32 flags)
153 {
154 }
155
handleClipboardNotify(rdr::U32 flags)156 void CMsgHandler::handleClipboardNotify(rdr::U32 flags)
157 {
158 }
159
handleClipboardProvide(rdr::U32 flags,const size_t * lengths,const rdr::U8 * const * data)160 void CMsgHandler::handleClipboardProvide(rdr::U32 flags,
161 const size_t* lengths,
162 const rdr::U8* const* data)
163 {
164 }
165