complete aten hermon encoding

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
This commit is contained in:
Василий Толстов 2017-07-04 14:24:41 +03:00
parent 2024b32082
commit a6abedbe53
9 changed files with 476 additions and 93 deletions

View File

@ -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{}

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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{}

View File

@ -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
View 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
View 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)
}
}

View File

@ -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)

View File

@ -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)