1*6cb02f15SPeter MaydellBarrier client protocol 2*6cb02f15SPeter Maydell======================= 3*6cb02f15SPeter Maydell 4*6cb02f15SPeter MaydellQEMU's ``input-barrier`` device implements the client end of 5*6cb02f15SPeter Maydellthe KVM (Keyboard-Video-Mouse) software 6*6cb02f15SPeter Maydell`Barrier <https://github.com/debauchee/barrier>`__. 7*6cb02f15SPeter Maydell 8*6cb02f15SPeter MaydellThis document briefly describes the protocol as we implement it. 9*6cb02f15SPeter Maydell 10*6cb02f15SPeter MaydellMessage format 11*6cb02f15SPeter Maydell-------------- 12*6cb02f15SPeter Maydell 13*6cb02f15SPeter MaydellMessage format between the server and client is in two parts: 14*6cb02f15SPeter Maydell 15*6cb02f15SPeter Maydell#. the payload length, a 32bit integer in network endianness 16*6cb02f15SPeter Maydell#. the payload 17*6cb02f15SPeter Maydell 18*6cb02f15SPeter MaydellThe payload starts with a 4byte string (without NUL) which is the 19*6cb02f15SPeter Maydellcommand. The first command between the server and the client 20*6cb02f15SPeter Maydellis the only command not encoded on 4 bytes ("Barrier"). 21*6cb02f15SPeter MaydellThe remaining part of the payload is decoded according to the command. 22*6cb02f15SPeter Maydell 23*6cb02f15SPeter MaydellProtocol Description 24*6cb02f15SPeter Maydell-------------------- 25*6cb02f15SPeter Maydell 26*6cb02f15SPeter MaydellThis comes from ``barrier/src/lib/barrier/protocol_types.h``. 27*6cb02f15SPeter Maydell 28*6cb02f15SPeter MaydellbarrierCmdHello "Barrier" 29*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^ 30*6cb02f15SPeter Maydell 31*6cb02f15SPeter MaydellDirection: 32*6cb02f15SPeter Maydell server -> client 33*6cb02f15SPeter MaydellParameters: 34*6cb02f15SPeter Maydell ``{ int16_t minor, int16_t major }`` 35*6cb02f15SPeter MaydellDescription: 36*6cb02f15SPeter Maydell Say hello to client 37*6cb02f15SPeter Maydell 38*6cb02f15SPeter Maydell ``minor`` = protocol major version number supported by server 39*6cb02f15SPeter Maydell 40*6cb02f15SPeter Maydell ``major`` = protocol minor version number supported by server 41*6cb02f15SPeter Maydell 42*6cb02f15SPeter MaydellbarrierCmdHelloBack "Barrier" 43*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 44*6cb02f15SPeter Maydell 45*6cb02f15SPeter MaydellDirection: 46*6cb02f15SPeter Maydell client ->server 47*6cb02f15SPeter MaydellParameters: 48*6cb02f15SPeter Maydell ``{ int16_t minor, int16_t major, char *name}`` 49*6cb02f15SPeter MaydellDescription: 50*6cb02f15SPeter Maydell Respond to hello from server 51*6cb02f15SPeter Maydell 52*6cb02f15SPeter Maydell ``minor`` = protocol major version number supported by client 53*6cb02f15SPeter Maydell 54*6cb02f15SPeter Maydell ``major`` = protocol minor version number supported by client 55*6cb02f15SPeter Maydell 56*6cb02f15SPeter Maydell ``name`` = client name 57*6cb02f15SPeter Maydell 58*6cb02f15SPeter MaydellbarrierCmdDInfo "DINF" 59*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 60*6cb02f15SPeter Maydell 61*6cb02f15SPeter MaydellDirection: 62*6cb02f15SPeter Maydell client ->server 63*6cb02f15SPeter MaydellParameters: 64*6cb02f15SPeter Maydell ``{ int16_t x_origin, int16_t y_origin, int16_t width, int16_t height, int16_t x, int16_t y}`` 65*6cb02f15SPeter MaydellDescription: 66*6cb02f15SPeter Maydell The client screen must send this message in response to the 67*6cb02f15SPeter Maydell barrierCmdQInfo message. It must also send this message when the 68*6cb02f15SPeter Maydell screen's resolution changes. In this case, the client screen should 69*6cb02f15SPeter Maydell ignore any barrierCmdDMouseMove messages until it receives a 70*6cb02f15SPeter Maydell barrierCmdCInfoAck in order to prevent attempts to move the mouse off 71*6cb02f15SPeter Maydell the new screen area. 72*6cb02f15SPeter Maydell 73*6cb02f15SPeter MaydellbarrierCmdCNoop "CNOP" 74*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 75*6cb02f15SPeter Maydell 76*6cb02f15SPeter MaydellDirection: 77*6cb02f15SPeter Maydell client -> server 78*6cb02f15SPeter MaydellParameters: 79*6cb02f15SPeter Maydell None 80*6cb02f15SPeter MaydellDescription: 81*6cb02f15SPeter Maydell No operation 82*6cb02f15SPeter Maydell 83*6cb02f15SPeter MaydellbarrierCmdCClose "CBYE" 84*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 85*6cb02f15SPeter Maydell 86*6cb02f15SPeter MaydellDirection: 87*6cb02f15SPeter Maydell server -> client 88*6cb02f15SPeter MaydellParameters: 89*6cb02f15SPeter Maydell None 90*6cb02f15SPeter MaydellDescription: 91*6cb02f15SPeter Maydell Close connection 92*6cb02f15SPeter Maydell 93*6cb02f15SPeter MaydellbarrierCmdCEnter "CINN" 94*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 95*6cb02f15SPeter Maydell 96*6cb02f15SPeter MaydellDirection: 97*6cb02f15SPeter Maydell server -> client 98*6cb02f15SPeter MaydellParameters: 99*6cb02f15SPeter Maydell ``{ int16_t x, int16_t y, int32_t seq, int16_t modifier }`` 100*6cb02f15SPeter MaydellDescription: 101*6cb02f15SPeter Maydell Enter screen. 102*6cb02f15SPeter Maydell 103*6cb02f15SPeter Maydell ``x``, ``y`` = entering screen absolute coordinates 104*6cb02f15SPeter Maydell 105*6cb02f15SPeter Maydell ``seq`` = sequence number, which is used to order messages between 106*6cb02f15SPeter Maydell screens. the secondary screen must return this number 107*6cb02f15SPeter Maydell with some messages 108*6cb02f15SPeter Maydell 109*6cb02f15SPeter Maydell ``modifier`` = modifier key mask. this will have bits set for each 110*6cb02f15SPeter Maydell toggle modifier key that is activated on entry to the 111*6cb02f15SPeter Maydell screen. the secondary screen should adjust its toggle 112*6cb02f15SPeter Maydell modifiers to reflect that state. 113*6cb02f15SPeter Maydell 114*6cb02f15SPeter MaydellbarrierCmdCLeave "COUT" 115*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 116*6cb02f15SPeter Maydell 117*6cb02f15SPeter MaydellDirection: 118*6cb02f15SPeter Maydell server -> client 119*6cb02f15SPeter MaydellParameters: 120*6cb02f15SPeter Maydell None 121*6cb02f15SPeter MaydellDescription: 122*6cb02f15SPeter Maydell Leaving screen. the secondary screen should send clipboard data in 123*6cb02f15SPeter Maydell response to this message for those clipboards that it has grabbed 124*6cb02f15SPeter Maydell (i.e. has sent a barrierCmdCClipboard for and has not received a 125*6cb02f15SPeter Maydell barrierCmdCClipboard for with a greater sequence number) and that 126*6cb02f15SPeter Maydell were grabbed or have changed since the last leave. 127*6cb02f15SPeter Maydell 128*6cb02f15SPeter MaydellbarrierCmdCClipboard "CCLP" 129*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 130*6cb02f15SPeter Maydell 131*6cb02f15SPeter MaydellDirection: 132*6cb02f15SPeter Maydell server -> client 133*6cb02f15SPeter MaydellParameters: 134*6cb02f15SPeter Maydell ``{ int8_t id, int32_t seq }`` 135*6cb02f15SPeter MaydellDescription: 136*6cb02f15SPeter Maydell Grab clipboard. Sent by screen when some other app on that screen 137*6cb02f15SPeter Maydell grabs a clipboard. 138*6cb02f15SPeter Maydell 139*6cb02f15SPeter Maydell ``id`` = the clipboard identifier 140*6cb02f15SPeter Maydell 141*6cb02f15SPeter Maydell ``seq`` = sequence number. Client must use the sequence number passed in 142*6cb02f15SPeter Maydell the most recent barrierCmdCEnter. the server always sends 0. 143*6cb02f15SPeter Maydell 144*6cb02f15SPeter MaydellbarrierCmdCScreenSaver "CSEC" 145*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 146*6cb02f15SPeter Maydell 147*6cb02f15SPeter MaydellDirection: 148*6cb02f15SPeter Maydell server -> client 149*6cb02f15SPeter MaydellParameters: 150*6cb02f15SPeter Maydell ``{ int8_t started }`` 151*6cb02f15SPeter MaydellDescription: 152*6cb02f15SPeter Maydell Screensaver change. 153*6cb02f15SPeter Maydell 154*6cb02f15SPeter Maydell ``started`` = Screensaver on primary has started (1) or closed (0) 155*6cb02f15SPeter Maydell 156*6cb02f15SPeter MaydellbarrierCmdCResetOptions "CROP" 157*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 158*6cb02f15SPeter Maydell 159*6cb02f15SPeter MaydellDirection: 160*6cb02f15SPeter Maydell server -> client 161*6cb02f15SPeter MaydellParameters: 162*6cb02f15SPeter Maydell None 163*6cb02f15SPeter MaydellDescription: 164*6cb02f15SPeter Maydell Reset options. Client should reset all of its options to their 165*6cb02f15SPeter Maydell defaults. 166*6cb02f15SPeter Maydell 167*6cb02f15SPeter MaydellbarrierCmdCInfoAck "CIAK" 168*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 169*6cb02f15SPeter Maydell 170*6cb02f15SPeter MaydellDirection: 171*6cb02f15SPeter Maydell server -> client 172*6cb02f15SPeter MaydellParameters: 173*6cb02f15SPeter Maydell None 174*6cb02f15SPeter MaydellDescription: 175*6cb02f15SPeter Maydell Resolution change acknowledgment. Sent by server in response to a 176*6cb02f15SPeter Maydell client screen's barrierCmdDInfo. This is sent for every 177*6cb02f15SPeter Maydell barrierCmdDInfo, whether or not the server had sent a barrierCmdQInfo. 178*6cb02f15SPeter Maydell 179*6cb02f15SPeter MaydellbarrierCmdCKeepAlive "CALV" 180*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 181*6cb02f15SPeter Maydell 182*6cb02f15SPeter MaydellDirection: 183*6cb02f15SPeter Maydell server -> client 184*6cb02f15SPeter MaydellParameters: 185*6cb02f15SPeter Maydell None 186*6cb02f15SPeter MaydellDescription: 187*6cb02f15SPeter Maydell Keep connection alive. Sent by the server periodically to verify 188*6cb02f15SPeter Maydell that connections are still up and running. clients must reply in 189*6cb02f15SPeter Maydell kind on receipt. if the server gets an error sending the message or 190*6cb02f15SPeter Maydell does not receive a reply within a reasonable time then the server 191*6cb02f15SPeter Maydell disconnects the client. if the client doesn't receive these (or any 192*6cb02f15SPeter Maydell message) periodically then it should disconnect from the server. the 193*6cb02f15SPeter Maydell appropriate interval is defined by an option. 194*6cb02f15SPeter Maydell 195*6cb02f15SPeter MaydellbarrierCmdDKeyDown "DKDN" 196*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 197*6cb02f15SPeter Maydell 198*6cb02f15SPeter MaydellDirection: 199*6cb02f15SPeter Maydell server -> client 200*6cb02f15SPeter MaydellParameters: 201*6cb02f15SPeter Maydell ``{ int16_t keyid, int16_t modifier [,int16_t button] }`` 202*6cb02f15SPeter MaydellDescription: 203*6cb02f15SPeter Maydell Key pressed. 204*6cb02f15SPeter Maydell 205*6cb02f15SPeter Maydell ``keyid`` = X11 key id 206*6cb02f15SPeter Maydell 207*6cb02f15SPeter Maydell ``modified`` = modified mask 208*6cb02f15SPeter Maydell 209*6cb02f15SPeter Maydell ``button`` = X11 Xkb keycode (optional) 210*6cb02f15SPeter Maydell 211*6cb02f15SPeter MaydellbarrierCmdDKeyRepeat "DKRP" 212*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 213*6cb02f15SPeter Maydell 214*6cb02f15SPeter MaydellDirection: 215*6cb02f15SPeter Maydell server -> client 216*6cb02f15SPeter MaydellParameters: 217*6cb02f15SPeter Maydell ``{ int16_t keyid, int16_t modifier, int16_t repeat [,int16_t button] }`` 218*6cb02f15SPeter MaydellDescription: 219*6cb02f15SPeter Maydell Key auto-repeat. 220*6cb02f15SPeter Maydell 221*6cb02f15SPeter Maydell ``keyid`` = X11 key id 222*6cb02f15SPeter Maydell 223*6cb02f15SPeter Maydell ``modified`` = modified mask 224*6cb02f15SPeter Maydell 225*6cb02f15SPeter Maydell ``repeat`` = number of repeats 226*6cb02f15SPeter Maydell 227*6cb02f15SPeter Maydell ``button`` = X11 Xkb keycode (optional) 228*6cb02f15SPeter Maydell 229*6cb02f15SPeter MaydellbarrierCmdDKeyUp "DKUP" 230*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 231*6cb02f15SPeter Maydell 232*6cb02f15SPeter MaydellDirection: 233*6cb02f15SPeter Maydell server -> client 234*6cb02f15SPeter MaydellParameters: 235*6cb02f15SPeter Maydell ``{ int16_t keyid, int16_t modifier [,int16_t button] }`` 236*6cb02f15SPeter MaydellDescription: 237*6cb02f15SPeter Maydell Key released. 238*6cb02f15SPeter Maydell 239*6cb02f15SPeter Maydell ``keyid`` = X11 key id 240*6cb02f15SPeter Maydell 241*6cb02f15SPeter Maydell ``modified`` = modified mask 242*6cb02f15SPeter Maydell 243*6cb02f15SPeter Maydell ``button`` = X11 Xkb keycode (optional) 244*6cb02f15SPeter Maydell 245*6cb02f15SPeter MaydellbarrierCmdDMouseDown "DMDN" 246*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 247*6cb02f15SPeter Maydell 248*6cb02f15SPeter MaydellDirection: 249*6cb02f15SPeter Maydell server -> client 250*6cb02f15SPeter MaydellParameters: 251*6cb02f15SPeter Maydell ``{ int8_t button }`` 252*6cb02f15SPeter MaydellDescription: 253*6cb02f15SPeter Maydell Mouse button pressed. 254*6cb02f15SPeter Maydell 255*6cb02f15SPeter Maydell ``button`` = button id 256*6cb02f15SPeter Maydell 257*6cb02f15SPeter MaydellbarrierCmdDMouseUp "DMUP" 258*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 259*6cb02f15SPeter Maydell 260*6cb02f15SPeter MaydellDirection: 261*6cb02f15SPeter Maydell server -> client 262*6cb02f15SPeter MaydellParameters: 263*6cb02f15SPeter Maydell ``{ int8_t button }`` 264*6cb02f15SPeter MaydellDescription: 265*6cb02f15SPeter Maydell Mouse button release. 266*6cb02f15SPeter Maydell 267*6cb02f15SPeter Maydell ``button`` = button id 268*6cb02f15SPeter Maydell 269*6cb02f15SPeter MaydellbarrierCmdDMouseMove "DMMV" 270*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 271*6cb02f15SPeter Maydell 272*6cb02f15SPeter MaydellDirection: 273*6cb02f15SPeter Maydell server -> client 274*6cb02f15SPeter MaydellParameters: 275*6cb02f15SPeter Maydell ``{ int16_t x, int16_t y }`` 276*6cb02f15SPeter MaydellDescription: 277*6cb02f15SPeter Maydell Absolute mouse moved. 278*6cb02f15SPeter Maydell 279*6cb02f15SPeter Maydell ``x``, ``y`` = absolute screen coordinates 280*6cb02f15SPeter Maydell 281*6cb02f15SPeter MaydellbarrierCmdDMouseRelMove "DMRM" 282*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 283*6cb02f15SPeter Maydell 284*6cb02f15SPeter MaydellDirection: 285*6cb02f15SPeter Maydell server -> client 286*6cb02f15SPeter MaydellParameters: 287*6cb02f15SPeter Maydell ``{ int16_t x, int16_t y }`` 288*6cb02f15SPeter MaydellDescription: 289*6cb02f15SPeter Maydell Relative mouse moved. 290*6cb02f15SPeter Maydell 291*6cb02f15SPeter Maydell ``x``, ``y`` = r relative screen coordinates 292*6cb02f15SPeter Maydell 293*6cb02f15SPeter MaydellbarrierCmdDMouseWheel "DMWM" 294*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 295*6cb02f15SPeter Maydell 296*6cb02f15SPeter MaydellDirection: 297*6cb02f15SPeter Maydell server -> client 298*6cb02f15SPeter MaydellParameters: 299*6cb02f15SPeter Maydell ``{ int16_t x , int16_t y }`` or ``{ int16_t y }`` 300*6cb02f15SPeter MaydellDescription: 301*6cb02f15SPeter Maydell Mouse scroll. The delta should be +120 for one tick forward (away 302*6cb02f15SPeter Maydell from the user) or right and -120 for one tick backward (toward the 303*6cb02f15SPeter Maydell user) or left. 304*6cb02f15SPeter Maydell 305*6cb02f15SPeter Maydell ``x`` = x delta 306*6cb02f15SPeter Maydell 307*6cb02f15SPeter Maydell ``y`` = y delta 308*6cb02f15SPeter Maydell 309*6cb02f15SPeter MaydellbarrierCmdDClipboard "DCLP" 310*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 311*6cb02f15SPeter Maydell 312*6cb02f15SPeter MaydellDirection: 313*6cb02f15SPeter Maydell server -> client 314*6cb02f15SPeter MaydellParameters: 315*6cb02f15SPeter Maydell ``{ int8_t id, int32_t seq, int8_t mark, char *data }`` 316*6cb02f15SPeter MaydellDescription: 317*6cb02f15SPeter Maydell Clipboard data. 318*6cb02f15SPeter Maydell 319*6cb02f15SPeter Maydell ``id`` = clipboard id 320*6cb02f15SPeter Maydell 321*6cb02f15SPeter Maydell ``seq`` = sequence number. The sequence number is 0 when sent by the 322*6cb02f15SPeter Maydell server. Client screens should use the/ sequence number from 323*6cb02f15SPeter Maydell the most recent barrierCmdCEnter. 324*6cb02f15SPeter Maydell 325*6cb02f15SPeter MaydellbarrierCmdDSetOptions "DSOP" 326*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 327*6cb02f15SPeter Maydell 328*6cb02f15SPeter MaydellDirection: 329*6cb02f15SPeter Maydell server -> client 330*6cb02f15SPeter MaydellParameters: 331*6cb02f15SPeter Maydell ``{ int32 t nb, { int32_t id, int32_t val }[] }`` 332*6cb02f15SPeter MaydellDescription: 333*6cb02f15SPeter Maydell Set options. Client should set the given option/value pairs. 334*6cb02f15SPeter Maydell 335*6cb02f15SPeter Maydell ``nb`` = numbers of ``{ id, val }`` entries 336*6cb02f15SPeter Maydell 337*6cb02f15SPeter Maydell ``id`` = option id 338*6cb02f15SPeter Maydell 339*6cb02f15SPeter Maydell ``val`` = option new value 340*6cb02f15SPeter Maydell 341*6cb02f15SPeter MaydellbarrierCmdDFileTransfer "DFTR" 342*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 343*6cb02f15SPeter Maydell 344*6cb02f15SPeter MaydellDirection: 345*6cb02f15SPeter Maydell server -> client 346*6cb02f15SPeter MaydellParameters: 347*6cb02f15SPeter Maydell ``{ int8_t mark, char *content }`` 348*6cb02f15SPeter MaydellDescription: 349*6cb02f15SPeter Maydell Transfer file data. 350*6cb02f15SPeter Maydell 351*6cb02f15SPeter Maydell * ``mark`` = 0 means the content followed is the file size 352*6cb02f15SPeter Maydell * 1 means the content followed is the chunk data 353*6cb02f15SPeter Maydell * 2 means the file transfer is finished 354*6cb02f15SPeter Maydell 355*6cb02f15SPeter MaydellbarrierCmdDDragInfo "DDRG" 356*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 357*6cb02f15SPeter Maydell 358*6cb02f15SPeter MaydellDirection: 359*6cb02f15SPeter Maydell server -> client 360*6cb02f15SPeter MaydellParameters: 361*6cb02f15SPeter Maydell ``{ int16_t nb, char *content }`` 362*6cb02f15SPeter MaydellDescription: 363*6cb02f15SPeter Maydell Drag information. 364*6cb02f15SPeter Maydell 365*6cb02f15SPeter Maydell ``nb`` = number of dragging objects 366*6cb02f15SPeter Maydell 367*6cb02f15SPeter Maydell ``content`` = object's directory 368*6cb02f15SPeter Maydell 369*6cb02f15SPeter MaydellbarrierCmdQInfo "QINF" 370*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 371*6cb02f15SPeter Maydell 372*6cb02f15SPeter MaydellDirection: 373*6cb02f15SPeter Maydell server -> client 374*6cb02f15SPeter MaydellParameters: 375*6cb02f15SPeter Maydell None 376*6cb02f15SPeter MaydellDescription: 377*6cb02f15SPeter Maydell Query screen info 378*6cb02f15SPeter Maydell 379*6cb02f15SPeter Maydell Client should reply with a barrierCmdDInfo 380*6cb02f15SPeter Maydell 381*6cb02f15SPeter MaydellbarrierCmdEIncompatible "EICV" 382*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 383*6cb02f15SPeter Maydell 384*6cb02f15SPeter MaydellDirection: 385*6cb02f15SPeter Maydell server -> client 386*6cb02f15SPeter MaydellParameters: 387*6cb02f15SPeter Maydell ``{ int16_t nb, major *minor }`` 388*6cb02f15SPeter MaydellDescription: 389*6cb02f15SPeter Maydell Incompatible version. 390*6cb02f15SPeter Maydell 391*6cb02f15SPeter Maydell ``major`` = major version 392*6cb02f15SPeter Maydell 393*6cb02f15SPeter Maydell ``minor`` = minor version 394*6cb02f15SPeter Maydell 395*6cb02f15SPeter MaydellbarrierCmdEBusy "EBSY" 396*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 397*6cb02f15SPeter Maydell 398*6cb02f15SPeter MaydellDirection: 399*6cb02f15SPeter Maydell server -> client 400*6cb02f15SPeter MaydellParameters: 401*6cb02f15SPeter Maydell None 402*6cb02f15SPeter MaydellDescription: 403*6cb02f15SPeter Maydell Name provided when connecting is already in use. 404*6cb02f15SPeter Maydell 405*6cb02f15SPeter MaydellbarrierCmdEUnknown "EUNK" 406*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 407*6cb02f15SPeter Maydell 408*6cb02f15SPeter MaydellDirection: 409*6cb02f15SPeter Maydell server -> client 410*6cb02f15SPeter MaydellParameters: 411*6cb02f15SPeter Maydell None 412*6cb02f15SPeter MaydellDescription: 413*6cb02f15SPeter Maydell Unknown client. Name provided when connecting is not in primary's 414*6cb02f15SPeter Maydell screen configuration map. 415*6cb02f15SPeter Maydell 416*6cb02f15SPeter MaydellbarrierCmdEBad "EBAD" 417*6cb02f15SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 418*6cb02f15SPeter Maydell 419*6cb02f15SPeter MaydellDirection: 420*6cb02f15SPeter Maydell server -> client 421*6cb02f15SPeter MaydellParameters: 422*6cb02f15SPeter Maydell None 423*6cb02f15SPeter MaydellDescription: 424*6cb02f15SPeter Maydell Protocol violation. Server should disconnect after sending this 425*6cb02f15SPeter Maydell message. 426*6cb02f15SPeter Maydell 427