fix for oldeer vnc protocols
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
This commit is contained in:
parent
faf8458fa3
commit
cc43ee4e06
25
handlers.go
25
handlers.go
@ -20,6 +20,8 @@ const (
|
|||||||
ProtoVersion33 = "RFB 003.003\n"
|
ProtoVersion33 = "RFB 003.003\n"
|
||||||
// ProtoVersion38 sets if proto 003.008
|
// ProtoVersion38 sets if proto 003.008
|
||||||
ProtoVersion38 = "RFB 003.008\n"
|
ProtoVersion38 = "RFB 003.008\n"
|
||||||
|
// ProtoVersion37 sets if proto 003.007
|
||||||
|
ProtoVersion37 = "RFB 003.007\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ParseProtoVersion parse protocol version
|
// ParseProtoVersion parse protocol version
|
||||||
@ -175,6 +177,8 @@ type DefaultServerSecurityHandler struct{}
|
|||||||
// Handle provide server side security handler
|
// Handle provide server side security handler
|
||||||
func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
||||||
cfg := c.Config().(*ServerConfig)
|
cfg := c.Config().(*ServerConfig)
|
||||||
|
var secType SecurityType
|
||||||
|
if c.Protocol() == ProtoVersion37 || c.Protocol() == ProtoVersion38 {
|
||||||
if err := binary.Write(c, binary.BigEndian, uint8(len(cfg.SecurityHandlers))); err != nil {
|
if err := binary.Write(c, binary.BigEndian, uint8(len(cfg.SecurityHandlers))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -184,16 +188,27 @@ func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
st := uint32(0)
|
||||||
|
for _, sectype := range cfg.SecurityHandlers {
|
||||||
|
if uint32(sectype.Type()) > st {
|
||||||
|
st = uint32(sectype.Type())
|
||||||
|
secType = sectype.Type()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := binary.Write(c, binary.BigEndian, st); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
if err := c.Flush(); err != nil {
|
if err := c.Flush(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var secType SecurityType
|
if c.Protocol() == ProtoVersion38 {
|
||||||
if err := binary.Read(c, binary.BigEndian, &secType); err != nil {
|
if err := binary.Read(c, binary.BigEndian, &secType); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
secTypes := make(map[SecurityType]SecurityHandler)
|
secTypes := make(map[SecurityType]SecurityHandler)
|
||||||
for _, sType := range cfg.SecurityHandlers {
|
for _, sType := range cfg.SecurityHandlers {
|
||||||
secTypes[sType.Type()] = sType
|
secTypes[sType.Type()] = sType
|
||||||
@ -209,6 +224,7 @@ func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
|||||||
if authErr != nil {
|
if authErr != nil {
|
||||||
authCode = uint32(1)
|
authCode = uint32(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := binary.Write(c, binary.BigEndian, authCode); err != nil {
|
if err := binary.Write(c, binary.BigEndian, authCode); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -220,6 +236,8 @@ func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
|||||||
c.SetSecurityHandler(sType)
|
c.SetSecurityHandler(sType)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.Protocol() == ProtoVersion38 {
|
||||||
if err := binary.Write(c, binary.BigEndian, uint32(len(authErr.Error()))); err != nil {
|
if err := binary.Write(c, binary.BigEndian, uint32(len(authErr.Error()))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -229,6 +247,7 @@ func (*DefaultServerSecurityHandler) Handle(c Conn) error {
|
|||||||
if err := c.Flush(); err != nil {
|
if err := c.Flush(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return authErr
|
return authErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user