complete aten hermon encoding
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
This commit is contained in:
parent
2024b32082
commit
a6abedbe53
10
client.go
10
client.go
@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// DefaultClientHandlers represents default client handlers
|
// DefaultClientHandlers represents default client handlers
|
||||||
DefaultClientHandlers = []ClientHandler{
|
DefaultClientHandlers = []Handler{
|
||||||
&DefaultClientVersionHandler{},
|
&DefaultClientVersionHandler{},
|
||||||
&DefaultClientSecurityHandler{},
|
&DefaultClientSecurityHandler{},
|
||||||
&DefaultClientClientInitHandler{},
|
&DefaultClientClientInitHandler{},
|
||||||
@ -126,7 +126,7 @@ func (c *ClientConn) PixelFormat() PixelFormat {
|
|||||||
|
|
||||||
// SetDesktopName sets desktop name
|
// SetDesktopName sets desktop name
|
||||||
func (c *ClientConn) SetDesktopName(name []byte) {
|
func (c *ClientConn) SetDesktopName(name []byte) {
|
||||||
copy(c.desktopName, name)
|
c.desktopName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPixelFormat sets pixel format
|
// SetPixelFormat sets pixel format
|
||||||
@ -232,7 +232,7 @@ func (*DefaultClientMessageHandler) Handle(c Conn) error {
|
|||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
serverMessages := make(map[ServerMessageType]ServerMessage)
|
serverMessages := make(map[ServerMessageType]ServerMessage)
|
||||||
for _, m := range cfg.ServerMessages {
|
for _, m := range cfg.Messages {
|
||||||
serverMessages[m.Type()] = m
|
serverMessages[m.Type()] = m
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,7 +282,7 @@ func (*DefaultClientMessageHandler) Handle(c Conn) error {
|
|||||||
// A ClientConfig structure is used to configure a ClientConn. After
|
// A ClientConfig structure is used to configure a ClientConn. After
|
||||||
// one has been passed to initialize a connection, it must not be modified.
|
// one has been passed to initialize a connection, it must not be modified.
|
||||||
type ClientConfig struct {
|
type ClientConfig struct {
|
||||||
Handlers []ClientHandler
|
Handlers []Handler
|
||||||
SecurityHandlers []SecurityHandler
|
SecurityHandlers []SecurityHandler
|
||||||
Encodings []Encoding
|
Encodings []Encoding
|
||||||
PixelFormat PixelFormat
|
PixelFormat PixelFormat
|
||||||
@ -290,7 +290,7 @@ type ClientConfig struct {
|
|||||||
ClientMessageCh chan ClientMessage
|
ClientMessageCh chan ClientMessage
|
||||||
ServerMessageCh chan ServerMessage
|
ServerMessageCh chan ServerMessage
|
||||||
Exclusive bool
|
Exclusive bool
|
||||||
ServerMessages []ServerMessage
|
Messages []ServerMessage
|
||||||
QuitCh chan struct{}
|
QuitCh chan struct{}
|
||||||
ErrorCh chan error
|
ErrorCh chan error
|
||||||
quit chan struct{}
|
quit chan struct{}
|
||||||
|
@ -5,6 +5,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
EncAtenHermonSubrect EncodingType = 0
|
||||||
|
EncAtenHermonRaw EncodingType = 1
|
||||||
|
)
|
||||||
|
|
||||||
type AtenHermon struct {
|
type AtenHermon struct {
|
||||||
_ [4]byte
|
_ [4]byte
|
||||||
AtenLength uint32
|
AtenLength uint32
|
||||||
@ -15,6 +20,14 @@ type AtenHermon struct {
|
|||||||
Encodings []Encoding
|
Encodings []Encoding
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AtenHermonSubrect struct {
|
||||||
|
A uint16
|
||||||
|
B uint16
|
||||||
|
Y uint8
|
||||||
|
X uint8
|
||||||
|
Data []byte
|
||||||
|
}
|
||||||
|
|
||||||
func (*AtenHermon) Type() EncodingType { return EncAtenHermon }
|
func (*AtenHermon) Type() EncodingType { return EncAtenHermon }
|
||||||
|
|
||||||
func (enc *AtenHermon) Read(c Conn, rect *Rectangle) error {
|
func (enc *AtenHermon) Read(c Conn, rect *Rectangle) error {
|
||||||
@ -72,40 +85,21 @@ func (enc *AtenHermon) Read(c Conn, rect *Rectangle) error {
|
|||||||
aten_length -= 10 // skip
|
aten_length -= 10 // skip
|
||||||
|
|
||||||
for aten_length > 0 {
|
for aten_length > 0 {
|
||||||
switch aten_type {
|
switch EncodingType(aten_type) {
|
||||||
case 0: //subrects
|
case EncAtenHermonSubrect:
|
||||||
var a uint16
|
encSR := &AtenHermonSubrect{}
|
||||||
var b uint16
|
if err := encSR.Read(c, rect); err != nil {
|
||||||
var x uint8
|
|
||||||
var y uint8
|
|
||||||
if err := binary.Read(c, binary.BigEndian, &a); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := binary.Read(c, binary.BigEndian, &b); err != nil {
|
enc.Encodings = append(enc.Encodings, encSR)
|
||||||
return err
|
aten_length -= 6 + (16 * 16 * uint32(c.PixelFormat().BPP/8))
|
||||||
}
|
case EncAtenHermonRaw:
|
||||||
if err := binary.Read(c, binary.BigEndian, &y); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Read(c, binary.BigEndian, &x); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
data := make([]byte, 16*16*uint32(c.PixelFormat().BPP))
|
|
||||||
if err := binary.Read(c, binary.BigEndian, &data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
aten_length -= 6 + (16 * 16 * uint32(c.PixelFormat().BPP))
|
|
||||||
panic("subrect!")
|
|
||||||
case 1: //raw
|
|
||||||
fmt.Printf("raw reader %d %s\n", aten_length, rect)
|
|
||||||
encRaw := &RawEncoding{}
|
encRaw := &RawEncoding{}
|
||||||
if err := encRaw.Read(c, rect); err != nil {
|
if err := encRaw.Read(c, rect); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
enc.Encodings = append(enc.Encodings, encRaw)
|
enc.Encodings = append(enc.Encodings, encRaw)
|
||||||
aten_length = 0
|
aten_length -= uint32(rect.Area()) * uint32(c.PixelFormat().BPP/8)
|
||||||
//aten_length -= uint32(rect.Area()) * uint32(c.PixelFormat().BPP)
|
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unknown aten hermon type %d", aten_type)
|
return fmt.Errorf("unknown aten hermon type %d", aten_type)
|
||||||
|
|
||||||
@ -115,7 +109,6 @@ func (enc *AtenHermon) Read(c Conn, rect *Rectangle) error {
|
|||||||
if aten_length < 0 {
|
if aten_length < 0 {
|
||||||
return fmt.Errorf("aten_len dropped below zero")
|
return fmt.Errorf("aten_len dropped below zero")
|
||||||
}
|
}
|
||||||
fmt.Printf("aten hermon readed\n")
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +145,48 @@ func (enc *AtenHermon) Write(c Conn, rect *Rectangle) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
fmt.Printf("aten hermon writed\n")
|
}
|
||||||
|
|
||||||
|
func (enc *AtenHermonSubrect) Type() EncodingType {
|
||||||
|
return EncAtenHermonSubrect
|
||||||
|
}
|
||||||
|
|
||||||
|
func (enc *AtenHermonSubrect) Read(c Conn, rect *Rectangle) error {
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &enc.A); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &enc.B); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &enc.Y); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &enc.X); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
enc.Data = make([]byte, 16*16*uint32(c.PixelFormat().BPP/8))
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &enc.Data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (enc *AtenHermonSubrect) Write(c Conn, rect *Rectangle) error {
|
||||||
|
if err := binary.Write(c, binary.BigEndian, enc.A); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, enc.B); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, enc.Y); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, enc.X); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, enc.Data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
50
handlers.go
50
handlers.go
@ -5,32 +5,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ClientHandler represents client handler
|
// Handler represents handler of handshake
|
||||||
type ClientHandler interface {
|
type Handler interface {
|
||||||
Handle(Conn) error
|
Handle(Conn) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientMessage is the interface
|
|
||||||
type ClientMessage interface {
|
|
||||||
String() string
|
|
||||||
Type() ClientMessageType
|
|
||||||
Read(Conn) (ClientMessage, error)
|
|
||||||
Write(Conn) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServerHandler represents server handler
|
|
||||||
type ServerHandler interface {
|
|
||||||
Handle(Conn) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServerMessage is the interface
|
|
||||||
type ServerMessage interface {
|
|
||||||
String() string
|
|
||||||
Type() ServerMessageType
|
|
||||||
Read(Conn) (ServerMessage, error)
|
|
||||||
Write(Conn) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProtoVersionLength protocol version length
|
// ProtoVersionLength protocol version length
|
||||||
const ProtoVersionLength = 12
|
const ProtoVersionLength = 12
|
||||||
|
|
||||||
@ -256,27 +235,28 @@ type DefaultClientServerInitHandler struct{}
|
|||||||
|
|
||||||
// Handle provide default server init handler
|
// Handle provide default server init handler
|
||||||
func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
||||||
|
var err error
|
||||||
srvInit := ServerInit{}
|
srvInit := ServerInit{}
|
||||||
|
|
||||||
if err := binary.Read(c, binary.BigEndian, &srvInit.FBWidth); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &srvInit.FBWidth); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := binary.Read(c, binary.BigEndian, &srvInit.FBHeight); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &srvInit.FBHeight); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := binary.Read(c, binary.BigEndian, &srvInit.PixelFormat); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &srvInit.PixelFormat); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := binary.Read(c, binary.BigEndian, &srvInit.NameLength); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &srvInit.NameLength); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
srvInit.NameText = make([]byte, srvInit.NameLength)
|
srvInit.NameText = make([]byte, srvInit.NameLength)
|
||||||
if err := binary.Read(c, binary.BigEndian, &srvInit.NameText); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &srvInit.NameText); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
c.SetDesktopName(srvInit.NameText)
|
c.SetDesktopName(srvInit.NameText)
|
||||||
if c.Protocol() == "aten" {
|
if c.Protocol() == "aten1" {
|
||||||
c.SetWidth(800)
|
c.SetWidth(800)
|
||||||
c.SetHeight(600)
|
c.SetHeight(600)
|
||||||
c.SetPixelFormat(NewPixelFormatAten())
|
c.SetPixelFormat(NewPixelFormatAten())
|
||||||
@ -285,7 +265,7 @@ func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
|||||||
c.SetHeight(srvInit.FBHeight)
|
c.SetHeight(srvInit.FBHeight)
|
||||||
c.SetPixelFormat(srvInit.PixelFormat)
|
c.SetPixelFormat(srvInit.PixelFormat)
|
||||||
}
|
}
|
||||||
if c.Protocol() == "aten" {
|
if c.Protocol() == "aten1" {
|
||||||
ikvm := struct {
|
ikvm := struct {
|
||||||
_ [8]byte
|
_ [8]byte
|
||||||
IKVMVideoEnable uint8
|
IKVMVideoEnable uint8
|
||||||
@ -293,9 +273,11 @@ func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
|||||||
IKVMKickEnable uint8
|
IKVMKickEnable uint8
|
||||||
VUSBEnable uint8
|
VUSBEnable uint8
|
||||||
}{}
|
}{}
|
||||||
if err := binary.Read(c, binary.BigEndian, &ikvm); err != nil {
|
if err = binary.Read(c, binary.BigEndian, &ikvm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
caps := struct {
|
caps := struct {
|
||||||
ServerMessagesNum uint16
|
ServerMessagesNum uint16
|
||||||
ClientMessagesNum uint16
|
ClientMessagesNum uint16
|
||||||
@ -306,7 +288,7 @@ func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
caps.ServerMessagesNum = uint16(2)
|
caps.ServerMessagesNum = uint16(1)
|
||||||
var item [16]byte
|
var item [16]byte
|
||||||
for i := uint16(0); i < caps.ServerMessagesNum; i++ {
|
for i := uint16(0); i < caps.ServerMessagesNum; i++ {
|
||||||
if err := binary.Read(c, binary.BigEndian, &item); err != nil {
|
if err := binary.Read(c, binary.BigEndian, &item); err != nil {
|
||||||
@ -315,7 +297,6 @@ func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
|||||||
fmt.Printf("server message cap %s\n", item)
|
fmt.Printf("server message cap %s\n", item)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
for i := uint16(0); i < caps.ClientMessagesNum; i++ {
|
for i := uint16(0); i < caps.ClientMessagesNum; i++ {
|
||||||
if err := binary.Read(c, binary.BigEndian, &item); err != nil {
|
if err := binary.Read(c, binary.BigEndian, &item); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -328,12 +309,11 @@ func (*DefaultClientServerInitHandler) Handle(c Conn) error {
|
|||||||
}
|
}
|
||||||
fmt.Printf("encoding cap %s\n", item)
|
fmt.Printf("encoding cap %s\n", item)
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
// var pad [1]byte
|
// var pad [1]byte
|
||||||
// if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
// if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
// return err
|
// return err
|
||||||
// }
|
// }
|
||||||
}
|
}*/
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
image.go
3
image.go
@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
//var _ draw.Drawer = (*ServerConn)(nil)
|
//var _ draw.Drawer = (*ServerConn)(nil)
|
||||||
@ -174,7 +175,7 @@ func (rect *Rectangle) Read(c Conn) error {
|
|||||||
case EncTightPng:
|
case EncTightPng:
|
||||||
rect.Enc = &TightPngEncoding{}
|
rect.Enc = &TightPngEncoding{}
|
||||||
case EncRaw:
|
case EncRaw:
|
||||||
if c.Protocol() == "aten" {
|
if strings.HasPrefix(c.Protocol(), "aten") {
|
||||||
rect.Enc = &AtenHermon{}
|
rect.Enc = &AtenHermon{}
|
||||||
} else {
|
} else {
|
||||||
rect.Enc = &RawEncoding{}
|
rect.Enc = &RawEncoding{}
|
||||||
|
42
messages.go
42
messages.go
@ -25,7 +25,7 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// ClientMessageType represents a Client-to-Server RFB message type.
|
// ClientMessageType represents RFB message type
|
||||||
type ClientMessageType uint8
|
type ClientMessageType uint8
|
||||||
|
|
||||||
//go:generate stringer -type=ClientMessageType
|
//go:generate stringer -type=ClientMessageType
|
||||||
@ -41,12 +41,10 @@ const (
|
|||||||
ClientCutTextMsgType
|
ClientCutTextMsgType
|
||||||
)
|
)
|
||||||
|
|
||||||
// ServerMessageType represents a Client-to-Server RFB message type.
|
// ServerMessageType represents RFB message type
|
||||||
type ServerMessageType uint8
|
type ServerMessageType uint8
|
||||||
|
|
||||||
//go:generate stringer -type=ServerMessageType
|
// Server-to-Client message types
|
||||||
|
|
||||||
// Client-to-Server message types.
|
|
||||||
const (
|
const (
|
||||||
FramebufferUpdateMsgType ServerMessageType = iota
|
FramebufferUpdateMsgType ServerMessageType = iota
|
||||||
SetColorMapEntriesMsgType
|
SetColorMapEntriesMsgType
|
||||||
@ -67,6 +65,20 @@ func (srvInit ServerInit) String() string {
|
|||||||
return fmt.Sprintf("Width: %d, Height: %d, PixelFormat: %s, NameLength: %d, MameText: %s", srvInit.FBWidth, srvInit.FBHeight, srvInit.PixelFormat, srvInit.NameLength, srvInit.NameText)
|
return fmt.Sprintf("Width: %d, Height: %d, PixelFormat: %s, NameLength: %d, MameText: %s", srvInit.FBWidth, srvInit.FBHeight, srvInit.PixelFormat, srvInit.NameLength, srvInit.NameText)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ClientMessage interface {
|
||||||
|
String() string
|
||||||
|
Type() ClientMessageType
|
||||||
|
Read(Conn) (ClientMessage, error)
|
||||||
|
Write(Conn) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerMessage interface {
|
||||||
|
String() string
|
||||||
|
Type() ServerMessageType
|
||||||
|
Read(Conn) (ServerMessage, error)
|
||||||
|
Write(Conn) error
|
||||||
|
}
|
||||||
|
|
||||||
// FramebufferUpdate holds a FramebufferUpdate wire format message.
|
// FramebufferUpdate holds a FramebufferUpdate wire format message.
|
||||||
type FramebufferUpdate struct {
|
type FramebufferUpdate struct {
|
||||||
_ [1]byte // pad
|
_ [1]byte // pad
|
||||||
@ -79,7 +91,7 @@ func (msg *FramebufferUpdate) String() string {
|
|||||||
return fmt.Sprintf("rects %d rectangle[]: { %v }", msg.NumRect, msg.Rects)
|
return fmt.Sprintf("rects %d rectangle[]: { %v }", msg.NumRect, msg.Rects)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type return ServerMessageType
|
// Type return MessageType
|
||||||
func (*FramebufferUpdate) Type() ServerMessageType {
|
func (*FramebufferUpdate) Type() ServerMessageType {
|
||||||
return FramebufferUpdateMsgType
|
return FramebufferUpdateMsgType
|
||||||
}
|
}
|
||||||
@ -137,7 +149,7 @@ func (msg *ServerCutText) String() string {
|
|||||||
return fmt.Sprintf("lenght: %d text: %s", msg.Length, msg.Text)
|
return fmt.Sprintf("lenght: %d text: %s", msg.Length, msg.Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ServerMessageType
|
// Type returns MessageType
|
||||||
func (*ServerCutText) Type() ServerMessageType {
|
func (*ServerCutText) Type() ServerMessageType {
|
||||||
return ServerCutTextMsgType
|
return ServerCutTextMsgType
|
||||||
}
|
}
|
||||||
@ -193,7 +205,7 @@ func (*Bell) String() string {
|
|||||||
return fmt.Sprintf("bell")
|
return fmt.Sprintf("bell")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ServerMessageType
|
// Type returns MessageType
|
||||||
func (*Bell) Type() ServerMessageType {
|
func (*Bell) Type() ServerMessageType {
|
||||||
return BellMsgType
|
return BellMsgType
|
||||||
}
|
}
|
||||||
@ -224,7 +236,7 @@ func (msg *SetColorMapEntries) String() string {
|
|||||||
return fmt.Sprintf("first color: %d, numcolors: %d, colors[]: { %v }", msg.FirstColor, msg.ColorsNum, msg.Colors)
|
return fmt.Sprintf("first color: %d, numcolors: %d, colors[]: { %v }", msg.FirstColor, msg.ColorsNum, msg.Colors)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ServerMessageType
|
// Type returns MessageType
|
||||||
func (*SetColorMapEntries) Type() ServerMessageType {
|
func (*SetColorMapEntries) Type() ServerMessageType {
|
||||||
return SetColorMapEntriesMsgType
|
return SetColorMapEntriesMsgType
|
||||||
}
|
}
|
||||||
@ -301,7 +313,7 @@ func (msg *SetPixelFormat) String() string {
|
|||||||
return fmt.Sprintf("%s", msg.PF)
|
return fmt.Sprintf("%s", msg.PF)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*SetPixelFormat) Type() ClientMessageType {
|
func (*SetPixelFormat) Type() ClientMessageType {
|
||||||
return SetPixelFormatMsgType
|
return SetPixelFormatMsgType
|
||||||
}
|
}
|
||||||
@ -346,7 +358,7 @@ func (msg *SetEncodings) String() string {
|
|||||||
return fmt.Sprintf("encnum: %d, encodings[]: { %v }", msg.EncNum, msg.Encodings)
|
return fmt.Sprintf("encnum: %d, encodings[]: { %v }", msg.EncNum, msg.Encodings)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*SetEncodings) Type() ClientMessageType {
|
func (*SetEncodings) Type() ClientMessageType {
|
||||||
return SetEncodingsMsgType
|
return SetEncodingsMsgType
|
||||||
}
|
}
|
||||||
@ -410,7 +422,7 @@ func (msg *FramebufferUpdateRequest) String() string {
|
|||||||
return fmt.Sprintf("incremental: %d, x: %d, y: %d, width: %d, height: %d", msg.Inc, msg.X, msg.Y, msg.Width, msg.Height)
|
return fmt.Sprintf("incremental: %d, x: %d, y: %d, width: %d, height: %d", msg.Inc, msg.X, msg.Y, msg.Width, msg.Height)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*FramebufferUpdateRequest) Type() ClientMessageType {
|
func (*FramebufferUpdateRequest) Type() ClientMessageType {
|
||||||
return FramebufferUpdateRequestMsgType
|
return FramebufferUpdateRequestMsgType
|
||||||
}
|
}
|
||||||
@ -447,7 +459,7 @@ func (msg *KeyEvent) String() string {
|
|||||||
return fmt.Sprintf("down: %d, key: %v", msg.Down, msg.Key)
|
return fmt.Sprintf("down: %d, key: %v", msg.Down, msg.Key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*KeyEvent) Type() ClientMessageType {
|
func (*KeyEvent) Type() ClientMessageType {
|
||||||
return KeyEventMsgType
|
return KeyEventMsgType
|
||||||
}
|
}
|
||||||
@ -483,7 +495,7 @@ func (msg *PointerEvent) String() string {
|
|||||||
return fmt.Sprintf("mask %d, x: %d, y: %d", msg.Mask, msg.X, msg.Y)
|
return fmt.Sprintf("mask %d, x: %d, y: %d", msg.Mask, msg.X, msg.Y)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*PointerEvent) Type() ClientMessageType {
|
func (*PointerEvent) Type() ClientMessageType {
|
||||||
return PointerEventMsgType
|
return PointerEventMsgType
|
||||||
}
|
}
|
||||||
@ -520,7 +532,7 @@ func (msg *ClientCutText) String() string {
|
|||||||
return fmt.Sprintf("length: %d, text: %s", msg.Length, msg.Text)
|
return fmt.Sprintf("length: %d, text: %s", msg.Length, msg.Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns ClientMessageType
|
// Type returns MessageType
|
||||||
func (*ClientCutText) Type() ClientMessageType {
|
func (*ClientCutText) Type() ClientMessageType {
|
||||||
return ClientCutTextMsgType
|
return ClientCutTextMsgType
|
||||||
}
|
}
|
||||||
|
314
messages_aten.go
Normal file
314
messages_aten.go
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
package vnc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Aten IKVM server message types
|
||||||
|
const (
|
||||||
|
AteniKVMFrontGroundEventMsgType ServerMessageType = 4
|
||||||
|
AteniKVMKeepAliveEventMsgType ServerMessageType = 22
|
||||||
|
AteniKVMVideoGetInfoMsgType ServerMessageType = 51
|
||||||
|
AteniKVMMouseGetInfoMsgType ServerMessageType = 55
|
||||||
|
AteniKVMSessionMessageMsgType ServerMessageType = 57
|
||||||
|
AteniKVMGetViewerLangMsgType ServerMessageType = 60
|
||||||
|
)
|
||||||
|
|
||||||
|
// Aten IKVM client message types
|
||||||
|
const (
|
||||||
|
AteniKVMKeyEventMsgType ClientMessageType = 4
|
||||||
|
AteniKVMPointerEventMsgType ClientMessageType = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
// AteniKVMKeyEvent holds the wire format message
|
||||||
|
type AteniKVMKeyEvent struct {
|
||||||
|
_ [1]byte // padding
|
||||||
|
Down uint8 // down-flag
|
||||||
|
_ [2]byte // padding
|
||||||
|
Key Key // key
|
||||||
|
_ [9]byte // padding
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMPointerEvent holds the wire format message
|
||||||
|
type AteniKVMPointerEvent struct {
|
||||||
|
_ [1]byte // padding
|
||||||
|
Mask uint8 // mask
|
||||||
|
X uint16 // x
|
||||||
|
Y uint16 // y
|
||||||
|
_ [11]byte // padding
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMPointerEvent) String() string {
|
||||||
|
return fmt.Sprintf("mask: %d, x:%d, y:%d", msg.Mask, msg.X, msg.Y)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMPointerEvent) Type() ClientMessageType {
|
||||||
|
return AteniKVMPointerEventMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*AteniKVMPointerEvent) Read(c Conn) (ClientMessage, error) {
|
||||||
|
msg := AteniKVMPointerEvent{}
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMPointerEvent) Write(c Conn) error {
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMKeyEvent) String() string {
|
||||||
|
return fmt.Sprintf("down:%d, key:%s", msg.Down, msg.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMKeyEvent) Type() ClientMessageType {
|
||||||
|
return AteniKVMKeyEventMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*AteniKVMKeyEvent) Read(c Conn) (ClientMessage, error) {
|
||||||
|
msg := AteniKVMKeyEvent{}
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *AteniKVMKeyEvent) Write(c Conn) error {
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMFrontGroundEvent unknown aten ikvm message
|
||||||
|
type AteniKVMFrontGroundEvent struct {
|
||||||
|
_ [20]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMFrontGroundEvent) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMFrontGroundEvent) Type() ServerMessageType {
|
||||||
|
return AteniKVMFrontGroundEventMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMFrontGroundEvent) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMFrontGroundEvent{}
|
||||||
|
var pad [20]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMFrontGroundEvent) Write(c Conn) error {
|
||||||
|
var pad [20]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMKeepAliveEvent unknown aten ikvm message
|
||||||
|
type AteniKVMKeepAliveEvent struct {
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMKeepAliveEvent) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMKeepAliveEvent) Type() ServerMessageType {
|
||||||
|
return AteniKVMKeepAliveEventMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMKeepAliveEvent) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMKeepAliveEvent{}
|
||||||
|
var pad [1]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMKeepAliveEvent) Write(c Conn) error {
|
||||||
|
var pad [1]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMVideoGetInfo unknown aten ikvm message
|
||||||
|
type AteniKVMVideoGetInfo struct {
|
||||||
|
_ [20]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMVideoGetInfo) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMVideoGetInfo) Type() ServerMessageType {
|
||||||
|
return AteniKVMVideoGetInfoMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMVideoGetInfo) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMVideoGetInfo{}
|
||||||
|
var pad [40]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMVideoGetInfo) Write(c Conn) error {
|
||||||
|
var pad [4]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMMouseGetInfo unknown aten ikvm message
|
||||||
|
type AteniKVMMouseGetInfo struct {
|
||||||
|
_ [2]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMMouseGetInfo) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMMouseGetInfo) Type() ServerMessageType {
|
||||||
|
return AteniKVMMouseGetInfoMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMMouseGetInfo) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMFrontGroundEvent{}
|
||||||
|
var pad [2]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMMouseGetInfo) Write(c Conn) error {
|
||||||
|
var pad [2]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMSessionMessage unknown aten ikvm message
|
||||||
|
type AteniKVMSessionMessage struct {
|
||||||
|
_ [264]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMSessionMessage) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMSessionMessage) Type() ServerMessageType {
|
||||||
|
return AteniKVMSessionMessageMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMSessionMessage) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMSessionMessage{}
|
||||||
|
var pad [264]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMSessionMessage) Write(c Conn) error {
|
||||||
|
var pad [264]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AteniKVMGetViewerLang unknown aten ikvm message
|
||||||
|
type AteniKVMGetViewerLang struct {
|
||||||
|
_ [8]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// String return string representation
|
||||||
|
func (msg *AteniKVMGetViewerLang) String() string {
|
||||||
|
return fmt.Sprintf("%s", msg.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type return ServerMessageType
|
||||||
|
func (*AteniKVMGetViewerLang) Type() ServerMessageType {
|
||||||
|
return AteniKVMGetViewerLangMsgType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read unmarshal message from conn
|
||||||
|
func (*AteniKVMGetViewerLang) Read(c Conn) (ServerMessage, error) {
|
||||||
|
msg := &AteniKVMGetViewerLang{}
|
||||||
|
var pad [8]byte
|
||||||
|
if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write marshal message to conn
|
||||||
|
func (msg *AteniKVMGetViewerLang) Write(c Conn) error {
|
||||||
|
var pad [8]byte
|
||||||
|
if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.Flush()
|
||||||
|
}
|
42
messagetype_string.go
Normal file
42
messagetype_string.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Code generated by "stringer -type=MessageType"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package vnc
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const (
|
||||||
|
_MessageType_name_0 = "SetPixelFormatMsgTypeSetColorMapEntriesMsgTypeSetEncodingsMsgTypeFramebufferUpdateRequestMsgTypeKeyEventMsgTypePointerEventMsgTypeClientCutTextMsgType"
|
||||||
|
_MessageType_name_1 = "AteniKVMKeepAliveEventMsgType"
|
||||||
|
_MessageType_name_2 = "AteniKVMVideoGetInfoMsgType"
|
||||||
|
_MessageType_name_3 = "AteniKVMMouseGetInfoMsgType"
|
||||||
|
_MessageType_name_4 = "AteniKVMSessionMessageMsgType"
|
||||||
|
_MessageType_name_5 = "AteniKVMGetViewerLangMsgType"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_MessageType_index_0 = [...]uint8{0, 21, 46, 65, 96, 111, 130, 150}
|
||||||
|
_MessageType_index_1 = [...]uint8{0, 29}
|
||||||
|
_MessageType_index_2 = [...]uint8{0, 27}
|
||||||
|
_MessageType_index_3 = [...]uint8{0, 27}
|
||||||
|
_MessageType_index_4 = [...]uint8{0, 29}
|
||||||
|
_MessageType_index_5 = [...]uint8{0, 28}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i MessageType) String() string {
|
||||||
|
switch {
|
||||||
|
case 0 <= i && i <= 6:
|
||||||
|
return _MessageType_name_0[_MessageType_index_0[i]:_MessageType_index_0[i+1]]
|
||||||
|
case i == 22:
|
||||||
|
return _MessageType_name_1
|
||||||
|
case i == 51:
|
||||||
|
return _MessageType_name_2
|
||||||
|
case i == 55:
|
||||||
|
return _MessageType_name_3
|
||||||
|
case i == 57:
|
||||||
|
return _MessageType_name_4
|
||||||
|
case i == 60:
|
||||||
|
return _MessageType_name_5
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("MessageType(%d)", i)
|
||||||
|
}
|
||||||
|
}
|
@ -50,10 +50,10 @@ func (auth *ClientAuthATEN) Auth(c Conn) error {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if ((nt&0xffff0ff0)>>0 == 0xaff90fb0) || (nt <= 0 || nt > 0x1000000) {
|
if ((nt&0xffff0ff0)>>0 == 0xaff90fb0) || (nt <= 0 || nt > 0x1000000) {
|
||||||
c.SetProtoVersion("aten")
|
c.SetProtoVersion("aten1")
|
||||||
var skip [20]byte
|
var skip [20]byte
|
||||||
binary.Read(c, binary.BigEndian, &skip)
|
binary.Read(c, binary.BigEndian, &skip)
|
||||||
fmt.Printf("skip %v\n", skip)
|
//fmt.Printf("skip %v\n", skip)
|
||||||
}
|
}
|
||||||
|
|
||||||
username := make([]byte, definedAuthLen)
|
username := make([]byte, definedAuthLen)
|
||||||
|
10
server.go
10
server.go
@ -91,7 +91,7 @@ func (c *ServerConn) PixelFormat() PixelFormat {
|
|||||||
|
|
||||||
// SetDesktopName sets connection desktop name
|
// SetDesktopName sets connection desktop name
|
||||||
func (c *ServerConn) SetDesktopName(name []byte) {
|
func (c *ServerConn) SetDesktopName(name []byte) {
|
||||||
copy(c.desktopName, name)
|
c.desktopName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPixelFormat sets pixel format for server conn
|
// SetPixelFormat sets pixel format for server conn
|
||||||
@ -168,7 +168,7 @@ type ServerConn struct {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// DefaultServerHandlers uses default handlers for hanshake
|
// DefaultServerHandlers uses default handlers for hanshake
|
||||||
DefaultServerHandlers = []ServerHandler{
|
DefaultServerHandlers = []Handler{
|
||||||
&DefaultServerVersionHandler{},
|
&DefaultServerVersionHandler{},
|
||||||
&DefaultServerSecurityHandler{},
|
&DefaultServerSecurityHandler{},
|
||||||
&DefaultServerClientInitHandler{},
|
&DefaultServerClientInitHandler{},
|
||||||
@ -179,14 +179,14 @@ var (
|
|||||||
|
|
||||||
// ServerConfig config struct
|
// ServerConfig config struct
|
||||||
type ServerConfig struct {
|
type ServerConfig struct {
|
||||||
Handlers []ServerHandler
|
Handlers []Handler
|
||||||
SecurityHandlers []SecurityHandler
|
SecurityHandlers []SecurityHandler
|
||||||
Encodings []Encoding
|
Encodings []Encoding
|
||||||
PixelFormat PixelFormat
|
PixelFormat PixelFormat
|
||||||
ColorMap ColorMap
|
ColorMap ColorMap
|
||||||
ClientMessageCh chan ClientMessage
|
ClientMessageCh chan ClientMessage
|
||||||
ServerMessageCh chan ServerMessage
|
ServerMessageCh chan ServerMessage
|
||||||
ClientMessages []ClientMessage
|
Messages []ClientMessage
|
||||||
DesktopName []byte
|
DesktopName []byte
|
||||||
Height uint16
|
Height uint16
|
||||||
Width uint16
|
Width uint16
|
||||||
@ -250,7 +250,7 @@ func (*DefaultServerMessageHandler) Handle(c Conn) error {
|
|||||||
|
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
clientMessages := make(map[ClientMessageType]ClientMessage)
|
clientMessages := make(map[ClientMessageType]ClientMessage)
|
||||||
for _, m := range cfg.ClientMessages {
|
for _, m := range cfg.Messages {
|
||||||
clientMessages[m.Type()] = m
|
clientMessages[m.Type()] = m
|
||||||
}
|
}
|
||||||
wg.Add(2)
|
wg.Add(2)
|
||||||
|
Loading…
Reference in New Issue
Block a user