Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of Xpra. 

2# Copyright (C) 2017 Antoine Martin <antoine@xpra.org> 

3# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

4# later version. See the file COPYING for details. 

5 

6import struct 

7 

8#merge header and packet if packet is smaller than: 

9PIXEL_FORMAT = b"BBBBHHHBBBBBB" 

10 

11 

12class RFBClientMessage: 

13 """ client to server messages """ 

14 SETPIXELFORMAT = 0 

15 SETENCODINGS = 2 

16 FRAMEBUFFERUPDATEREQUEST = 3 

17 KEYEVENT = 4 

18 POINTEREVENT = 5 

19 CLIENTCUTTEXT = 6 

20 #optional: 

21 FILETRANSFER = 7 

22 SETSCALE = 8 

23 SETSERVERINPUT = 9 

24 SETSW = 10 

25 TEXTCHAT = 11 

26 KEYFRAMEREQUEST = 12 

27 KEEPALIVE = 13 

28 SETSCALEFACTOR = 15 

29 REQUESTSESSION = 20 

30 SETSESSION = 21 

31 NOTIFYPLUGINSTREAMING = 80 

32 VMWARE = 127 

33 CARCONNECTIVITY = 128 

34 ENABLECONTINUOUSUPDATES = 150 

35 CLIENTFENCE = 248 

36 OLIVECALLCONTROL = 249 

37 XVPCLIENTMESSAGE = 250 

38 SETDESKTOPSIZE = 251 

39 TIGHT = 252 

40 GIICLIENTMESSAGE = 253 

41 VMWARE = 254 

42 QEMUCLIENTMESSAGE = 255 

43 

44 PACKET_TYPE_STR = { 

45 SETPIXELFORMAT : "SetPixelFormat", 

46 SETENCODINGS : "SetEncodings", 

47 FRAMEBUFFERUPDATEREQUEST : "FramebufferUpdateRequest", 

48 KEYEVENT : "KeyEvent", 

49 POINTEREVENT : "PointerEvent", 

50 CLIENTCUTTEXT : "ClientCutText", 

51 #optional: 

52 FILETRANSFER : "FileTransfer", 

53 SETSCALE : "SetScale", 

54 SETSERVERINPUT : "SetServerInput", 

55 SETSW : "SetSW", 

56 TEXTCHAT : "TextChat", 

57 KEYFRAMEREQUEST : "KeyFrameRequest", 

58 KEEPALIVE : "KeepAlive", 

59 SETSCALEFACTOR : "SetScaleFactor", 

60 REQUESTSESSION : "RequestSession", 

61 SETSESSION : "SetSession", 

62 NOTIFYPLUGINSTREAMING : "NotifiyPluginStreaming", 

63 VMWARE : "VMWare", 

64 CARCONNECTIVITY : "CarConnectivity", 

65 ENABLECONTINUOUSUPDATES : "EnableContiniousUpdates", 

66 CLIENTFENCE : "ClientFence", 

67 OLIVECALLCONTROL : "OliveCallControl", 

68 XVPCLIENTMESSAGE : "XvpClientMessage", 

69 SETDESKTOPSIZE : "SetDesktopSize", 

70 TIGHT : "Tight", 

71 GIICLIENTMESSAGE : "GIIClientMessage", 

72 VMWARE : "VMWare", 

73 QEMUCLIENTMESSAGE : "QEMUClientMessage", 

74 } 

75 PACKET_FMT = { 

76 SETPIXELFORMAT : b"!BBBB"+PIXEL_FORMAT, 

77 SETENCODINGS : b"!BBH", 

78 FRAMEBUFFERUPDATEREQUEST : b"!BBHHHH", 

79 KEYEVENT : b"!BBBBi", 

80 POINTEREVENT : b"!BBHH", 

81 CLIENTCUTTEXT : b"!BBBBi", 

82 } 

83 PACKET_STRUCT = {} 

84 for ptype, fmt in PACKET_FMT.items(): 

85 PACKET_STRUCT[ptype] = struct.Struct(fmt) 

86 

87 

88class RFBServerMessage: 

89 #server to client messages: 

90 FRAMEBUFFERUPDATE = 0 

91 SETCOLORMAPENTRIES = 1 

92 BELL = 2 

93 SERVERCUTTEXT = 3 

94 #optional: 

95 RESIZEFRAMEBUFFER1 = 4 

96 KEYFRAMEUPDATE = 4 

97 FILETRANSFER = 7 

98 TEXTCHAT = 11 

99 KEEPALIVE = 13 

100 RESIZEFRAMEBUFFER2 = 15 

101 VMWARE1 = 127 

102 CARCONNECTIVITY = 128 

103 ENDOFCONTINOUSUPDATES = 150 

104 SERVERSTATE = 173 

105 SERVERFENCE = 248 

106 OLIVECALLCONTROL = 249 

107 XVPSERVERMESSAGE = 250 

108 TIGHT = 252 

109 GIISERVERMESSAGE = 253 

110 VMWARE2 = 254 

111 QEMUSERVERMESSAGE = 255 

112 

113 PACKET_TYPE_STR = { 

114 FRAMEBUFFERUPDATE : "FramebufferUpdate", 

115 SETCOLORMAPENTRIES : "SetColorMapEntries", 

116 BELL : "Bell", 

117 SERVERCUTTEXT : "ServerCutText", 

118 #optional: 

119 RESIZEFRAMEBUFFER1 : "ResizeFrameBuffer1", 

120 KEYFRAMEUPDATE : "KeyFrameUpdate", 

121 FILETRANSFER : "FileTransfer", 

122 TEXTCHAT : "TextChat", 

123 KEEPALIVE : "KeepAlive", 

124 RESIZEFRAMEBUFFER2 : "ResizeFrameBuffer2", 

125 VMWARE1 : "VMWare1", 

126 CARCONNECTIVITY : "CarConnectivity", 

127 ENDOFCONTINOUSUPDATES : "EndOfContinousUpdates", 

128 SERVERSTATE : "ServerState", 

129 SERVERFENCE : "ServerFence", 

130 OLIVECALLCONTROL : "OliveCallControl", 

131 XVPSERVERMESSAGE : "XvpServerMessage", 

132 TIGHT : "Tight", 

133 GIISERVERMESSAGE : "GIIServerMessage", 

134 VMWARE2 : "VMWare2", 

135 QEMUSERVERMESSAGE : "QEMUServerMessage", 

136 } 

137 

138class RFBEncoding: 

139 RAW = 0 

140 COPYRECT = 1 

141 RRE = 2 

142 CORRE = 4 

143 HEXTILE = 5 

144 ZLIB = 6 

145 TIGHT = 7 

146 ZLIBHEX = 8 

147 TRLE = 15 

148 ZRLE = 16 

149 H264 = 20 

150 JPEG = 21 

151 JRLE = 22 

152 HITACHI_ZYWRLE = 17 

153 DESKTOPSIZE = -223 

154 LASTRECT = -224 

155 CURSOR = -239 

156 XCURSOR = -240 

157 QEMU_POINTER = -257 

158 QEMU_KEY = -258 

159 QEMU_AUDIO = -259 

160 GII = -305 

161 DESKTOPNAME = -307 

162 EXTENDEDDESKTOPSIZE = -308 

163 XVP = -309 

164 FENCE = -312 

165 CONTINUOUSUPDATES = -313 

166 CURSORWITHALPHA = -314 

167 VA_H264 = 0x48323634 

168 

169 #-23 to -32 JPEG Quality Level Pseudo-encoding 

170 #-247 to -256 Compression Level Pseudo-encoding 

171 #-412 to -512 JPEG Fine-Grained Quality Level Pseudo-encoding 

172 #-763 to -768 JPEG Subsampling Level Pseudo-encoding 

173 

174 ENCODING_STR = { 

175 RAW : "Raw", 

176 COPYRECT : "CopyRect", 

177 RRE : "RRE", 

178 CORRE : "CoRRE", 

179 HEXTILE : "Hextile", 

180 ZLIB : "Zlib", 

181 TIGHT : "Tight", 

182 ZLIBHEX : "ZlibHex", 

183 TRLE : "TRLE", 

184 ZRLE : "ZRLE", 

185 H264 : "H264", 

186 JPEG : "JPEG", 

187 JRLE : "JRLE", 

188 HITACHI_ZYWRLE : "HITACHI_ZYWRLE", 

189 DESKTOPSIZE : "DesktopSize", 

190 LASTRECT : "LastRect", 

191 CURSOR : "Cursor", 

192 XCURSOR : "XCursor", 

193 QEMU_POINTER : "QEMU Pointer", 

194 QEMU_KEY : "QEMU Key", 

195 QEMU_AUDIO : "QEMU Audio", 

196 GII : "GII", 

197 DESKTOPNAME : "DesktopName", 

198 EXTENDEDDESKTOPSIZE : "ExtendedDesktopSize", 

199 XVP : "Xvp", 

200 FENCE : "Fence", 

201 CONTINUOUSUPDATES : "ContinuousUpdates", 

202 CURSORWITHALPHA : "CursorWithAlpha", 

203 VA_H264 : "VA_H264", 

204 } 

205 

206 

207class RFBAuth: 

208 INVALID = 0 

209 NONE = 1 

210 VNC = 2 

211 TIGHT = 16 

212 AUTH_STR = { 

213 INVALID : "Invalid", 

214 NONE : "None", 

215 VNC : "VNC", 

216 TIGHT : "Tight", 

217 5 : "RA2", 

218 6 : "RA2ne", 

219 17 : "Ultra", 

220 18 : "TLS", 

221 19 : "VeNCrypt", 

222 20 : "SASL", 

223 21 : "MD5", 

224 22 : "xvp", 

225 } 

226 for i in (3, 4): 

227 AUTH_STR[i] = "RealVNC" 

228 for i in range(7, 16): 

229 AUTH_STR[i] = "RealVNC" 

230 for i in range(128, 255): 

231 AUTH_STR[i] = "RealVNC" 

232 for i in range(30, 35): 

233 AUTH_STR[i] = "Apple" 

234 

235 

236RFB_KEYNAMES = { 

237 0xff08 : "BackSpace", 

238 0xff09 : "Tab", 

239 0xff0d : "Return", 

240 0xff1b : "Escape", 

241 0xff63 : "Insert", 

242 0xffff : "Delete", 

243 0xff50 : "Home", 

244 0xff57 : "End", 

245 0xff55 : "PageUp", 

246 0xff56 : "PageDown", 

247 0xff51 : "Left", 

248 0xff52 : "Up", 

249 0xff53 : "Right", 

250 0xff54 : "Down", 

251 0xffe1 : "Shift_L", 

252 0xffe2 : "Shift_R", 

253 0xffe3 : "Control_L", 

254 0xffe4 : "Control_R", 

255 0xffe7 : "Meta_L", 

256 0xffe8 : "Meta_R", 

257 0xffe9 : "Alt_L", 

258 0xffea : "Alt_R", 

259 0x20 : "space", 

260 0x60 : "grave", 

261 0x2d : "minus", 

262 0x3d : "equal", 

263 0x2b : "plus", 

264 0x5f : "underscore", 

265 0xac : "notsign", 

266 0x21 : "exclam", 

267 0x22 : "quotedbl", 

268 0x24 : "dollar", 

269 0x5e : "asciicircum", 

270 0x26 : "ampersand", 

271 0x2a : "asterisk", 

272 0x28 : "parenleft", 

273 0x29 : "parenright", 

274 0x5c : "backslash", 

275 0x7c : "bar", 

276 0x5b : "bracketleft", 

277 0x5d : "bracketright", 

278 0x7b : "braceleft", 

279 0x7d : "braceright", 

280 0x3b : "semicolon", 

281 0x27 : "apostrophe", 

282 0x23 : "numbersign", 

283 0x3a : "colon", 

284 0x40 : "at", 

285 0x7e : "asciitilde", 

286 0x2c : "comma", 

287 0x2e : "period", 

288 0x2f : "slash", 

289 0x3c : "less", 

290 0x3e : "greater", 

291 0x3f : "question", 

292 0xffb0 : "KP_0", 

293 0xffb1 : "KP_1", 

294 0xffb2 : "KP_2", 

295 0xffb3 : "KP_3", 

296 0xffb4 : "KP_4", 

297 0xffb5 : "KP_5", 

298 0xffb6 : "KP_6", 

299 0xffb7 : "KP_7", 

300 0xffb8 : "KP_8", 

301 0xffb9 : "KP_9", 

302 0xffae : "KP_Decimal", 

303 0xffaf : "KP_Divide", 

304 0xffaa : "KP_Multiply", 

305 0xffad : "KP_Subtract", 

306 0xffab : "KP_Add", 

307 0xff8d : "KP_Enter", 

308 0xff7f : "Num_Lock", 

309 0xff9f : "KP_Delete", 

310 0xff9e : "KP_Insert", 

311 0xff9c : "KP_End", 

312 0xff9b : "KP_Down", 

313 #0xffb3 : "KP_Next", 

314 0xff96 : "KP_Left", 

315 0xff9d : "KP_Begin", 

316 0xff98 : "KP_Right", 

317 0xff95 : "KP_Home", 

318 0xff97 : "KP_Up", 

319 0xff9a : "KP_Prior", 

320 0xff14 : "Scroll_Lock", 

321 0xff13 : "Pause", 

322 0x1008ff26 : "XF86Back", 

323 0x1008ff27 : "XF86Forward", 

324 0x1008ff18 : "XF86HomePage", 

325 } 

326 

327for i in range(1, 13): 

328 RFB_KEYNAMES[0xffbe+(i-1)] = "F%i" % i