diff --git a/common/client-message-type.go b/common/client-message-type.go index ba9351f..12e8c27 100644 --- a/common/client-message-type.go +++ b/common/client-message-type.go @@ -4,6 +4,7 @@ import ( "io" ) +// ClientMessageType ... type ClientMessageType uint8 //go:generate stringer -type=ClientMessageType @@ -29,6 +30,7 @@ type Color struct { R, G, B uint16 } +// ColorMap ... type ColorMap [256]Color // ClientMessage is the interface @@ -38,6 +40,7 @@ type ClientMessage interface { Write(io.Writer) error } +// String ... func (cmt ClientMessageType) String() string { switch cmt { case SetPixelFormatMsgType: diff --git a/common/conn-interfaces.go b/common/conn-interfaces.go index cb04c39..00c7c63 100644 --- a/common/conn-interfaces.go +++ b/common/conn-interfaces.go @@ -2,6 +2,7 @@ package common import "io" +//IServerConn ... type IServerConn interface { io.ReadWriter //IServerConn() io.ReadWriter @@ -23,6 +24,7 @@ type IServerConn interface { // Write([]byte) (int, error) } +//IClientConn ... type IClientConn interface { CurrentPixelFormat() *PixelFormat //CurrentColorMap() *ColorMap diff --git a/common/encoding.go b/common/encoding.go index 872a782..995e636 100644 --- a/common/encoding.go +++ b/common/encoding.go @@ -11,7 +11,7 @@ import ( type IEncoding interface { // The number that uniquely identifies this encoding type. Type() int32 - WriteTo(w io.Writer) (n int, err error) + WriteTo(w io.Writer) (n int64, err error) // Read reads the contents of the encoded pixel data from the reader. // This should return a new IEncoding implementation that contains // the proper data. @@ -143,6 +143,7 @@ func (enct EncodingType) String() string { return "" } +//EncodingType ... const ( EncRaw EncodingType = 0 EncCopyRect EncodingType = 1 @@ -220,17 +221,18 @@ type PixelFormat struct { BlueShift uint8 } -func (format *PixelFormat) WriteTo(w io.Writer) error { +//WriteTo ... +func (format *PixelFormat) WriteTo(w io.Writer) (int64, error) { var buf bytes.Buffer // Byte 1 if err := binary.Write(&buf, binary.BigEndian, format.BPP); err != nil { - return err + return 0, err } // Byte 2 if err := binary.Write(&buf, binary.BigEndian, format.Depth); err != nil { - return err + return 0, err } var boolByte byte @@ -242,7 +244,7 @@ func (format *PixelFormat) WriteTo(w io.Writer) error { // Byte 3 (BigEndian) if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil { - return err + return 0, err } if format.TrueColor == 1 { @@ -253,41 +255,42 @@ func (format *PixelFormat) WriteTo(w io.Writer) error { // Byte 4 (TrueColor) if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil { - return err + return 0, err } // If we have true color enabled then we have to fill in the rest of the // structure with the color values. if format.TrueColor == 1 { if err := binary.Write(&buf, binary.BigEndian, format.RedMax); err != nil { - return err + return 0, err } if err := binary.Write(&buf, binary.BigEndian, format.GreenMax); err != nil { - return err + return 0, err } if err := binary.Write(&buf, binary.BigEndian, format.BlueMax); err != nil { - return err + return 0, err } if err := binary.Write(&buf, binary.BigEndian, format.RedShift); err != nil { - return err + return 0, err } if err := binary.Write(&buf, binary.BigEndian, format.GreenShift); err != nil { - return err + return 0, err } if err := binary.Write(&buf, binary.BigEndian, format.BlueShift); err != nil { - return err + return 0, err } } w.Write(buf.Bytes()[0:16]) - return nil + return 0, nil } +// NewPixelFormat ... func NewPixelFormat(bpp uint8) *PixelFormat { bigEndian := 0 // rgbMax := uint16(math.Exp2(float64(bpp))) - 1 diff --git a/common/multi-listener.go b/common/multi-listener.go index 55f6e98..a478997 100644 --- a/common/multi-listener.go +++ b/common/multi-listener.go @@ -1,13 +1,16 @@ package common +//MultiListener ... type MultiListener struct { listeners []SegmentConsumer } +//AddListener ... func (m *MultiListener) AddListener(listener SegmentConsumer) { m.listeners = append(m.listeners, listener) } +//Consume ... func (m *MultiListener) Consume(seg *RfbSegment) error { for _, li := range m.listeners { diff --git a/common/rfb-reader-helper.go b/common/rfb-reader-helper.go index 75dfcc0..affed24 100644 --- a/common/rfb-reader-helper.go +++ b/common/rfb-reader-helper.go @@ -8,8 +8,10 @@ import ( "vncproxy/logger" ) +//TightMinToCompress ... var TightMinToCompress = 12 +//SegmentType ... const ( SegmentBytes SegmentType = iota SegmentMessageStart @@ -21,6 +23,7 @@ const ( SegmentMessageEnd ) +//SegmentType ... type SegmentType int func (seg SegmentType) String() string { @@ -46,6 +49,7 @@ func (seg SegmentType) String() string { return "" } +//RfbSegment ... type RfbSegment struct { Bytes []byte SegmentType SegmentType @@ -53,49 +57,59 @@ type RfbSegment struct { Message interface{} } +//SegmentConsumer ... type SegmentConsumer interface { Consume(*RfbSegment) error } +//RfbReadHelper ... type RfbReadHelper struct { io.Reader Listeners *MultiListener savedBytes *bytes.Buffer } +//NewRfbReadHelper ... func NewRfbReadHelper(r io.Reader) *RfbReadHelper { return &RfbReadHelper{Reader: r, Listeners: &MultiListener{}} } +//StartByteCollection ... func (r *RfbReadHelper) StartByteCollection() { r.savedBytes = &bytes.Buffer{} } +//EndByteCollection ... func (r *RfbReadHelper) EndByteCollection() []byte { bts := r.savedBytes.Bytes() r.savedBytes = nil return bts } +//ReadDiscrete ... func (r *RfbReadHelper) ReadDiscrete(p []byte) (int, error) { return r.Read(p) } +//SendRectSeparator ... func (r *RfbReadHelper) SendRectSeparator(upcomingRectType int) error { seg := &RfbSegment{SegmentType: SegmentRectSeparator, UpcomingObjectType: upcomingRectType} return r.Listeners.Consume(seg) } +//SendMessageStart ... func (r *RfbReadHelper) SendMessageStart(upcomingMessageType ServerMessageType) error { seg := &RfbSegment{SegmentType: SegmentMessageStart, UpcomingObjectType: int(upcomingMessageType)} return r.Listeners.Consume(seg) } +//SendMessageEnd ... func (r *RfbReadHelper) SendMessageEnd(messageType ServerMessageType) error { seg := &RfbSegment{SegmentType: SegmentMessageEnd, UpcomingObjectType: int(messageType)} return r.Listeners.Consume(seg) } +//PublishBytes ... func (r *RfbReadHelper) PublishBytes(p []byte) error { seg := &RfbSegment{Bytes: p, SegmentType: SegmentBytes} return r.Listeners.Consume(seg) @@ -135,6 +149,7 @@ func (r *RfbReadHelper) Read(p []byte) (n int, err error) { return readLen, err } +//ReadBytes ... func (r *RfbReadHelper) ReadBytes(count int) ([]byte, error) { buff := make([]byte, count) @@ -157,6 +172,7 @@ func (r *RfbReadHelper) ReadBytes(count int) ([]byte, error) { return buff, nil } +//ReadUint8 ... func (r *RfbReadHelper) ReadUint8() (uint8, error) { var myUint uint8 if err := binary.Read(r, binary.BigEndian, &myUint); err != nil { @@ -165,6 +181,8 @@ func (r *RfbReadHelper) ReadUint8() (uint8, error) { return myUint, nil } + +//ReadUint16 ... func (r *RfbReadHelper) ReadUint16() (uint16, error) { var myUint uint16 if err := binary.Read(r, binary.BigEndian, &myUint); err != nil { @@ -173,6 +191,8 @@ func (r *RfbReadHelper) ReadUint16() (uint16, error) { return myUint, nil } + +//ReadUint32 ... func (r *RfbReadHelper) ReadUint32() (uint32, error) { var myUint uint32 if err := binary.Read(r, binary.BigEndian, &myUint); err != nil { @@ -181,6 +201,8 @@ func (r *RfbReadHelper) ReadUint32() (uint32, error) { return myUint, nil } + +//ReadCompactLen ... func (r *RfbReadHelper) ReadCompactLen() (int, error) { var err error part, err := r.ReadUint8() @@ -204,6 +226,7 @@ func (r *RfbReadHelper) ReadCompactLen() (int, error) { return int(len), err } +//ReadTightData ... func (r *RfbReadHelper) ReadTightData(dataSize int) ([]byte, error) { if int(dataSize) < TightMinToCompress { return r.ReadBytes(int(dataSize)) diff --git a/common/server-message-type.go b/common/server-message-type.go index cfd7751..b71add1 100644 --- a/common/server-message-type.go +++ b/common/server-message-type.go @@ -4,14 +4,18 @@ import ( "io" ) +//ServerMessage ... type ServerMessage interface { Type() uint8 String() string CopyTo(r io.Reader, w io.Writer, c IClientConn) error Read(IClientConn, *RfbReadHelper) (ServerMessage, error) } + +//ServerMessageType ... type ServerMessageType int8 +//ServerMessageType ... const ( FramebufferUpdate ServerMessageType = iota SetColourMapEntries @@ -34,6 +38,7 @@ func (typ ServerMessageType) String() string { return "" } +//ServerInit ... type ServerInit struct { FBWidth, FBHeight uint16 PixelFormat PixelFormat diff --git a/encodings/enc-copy-rect.go b/encodings/enc-copy-rect.go index 8a6e6bf..95982f6 100644 --- a/encodings/enc-copy-rect.go +++ b/encodings/enc-copy-rect.go @@ -6,16 +6,20 @@ import ( "vncproxy/common" ) +//CopyRectEncoding .. type CopyRectEncoding struct { //Colors []Color copyRectSrcX uint16 copyRectSrcY uint16 } +//Type .. func (z *CopyRectEncoding) Type() int32 { return 1 } -func (z *CopyRectEncoding) WriteTo(w io.Writer) (n int, err error) { + +//WriteTo .. +func (z *CopyRectEncoding) WriteTo(w io.Writer) (n int64, err error) { binary.Write(w, binary.BigEndian, z.copyRectSrcX) if err != nil { return 0, err diff --git a/encodings/enc-zlib.go b/encodings/enc-zlib.go index be27029..2235546 100644 --- a/encodings/enc-zlib.go +++ b/encodings/enc-zlib.go @@ -7,16 +7,22 @@ import ( "vncproxy/common" ) +// ZLibEncoding .. type ZLibEncoding struct { bytes []byte } +// Type .. func (z *ZLibEncoding) Type() int32 { return 6 } + +// WriteTo ... func (z *ZLibEncoding) WriteTo(w io.Writer) (n int, err error) { return w.Write(z.bytes) } + +//Read ... func (z *ZLibEncoding) Read(pixelFmt *common.PixelFormat, rect *common.Rectangle, r *common.RfbReadHelper) (common.IEncoding, error) { //conn := common.RfbReadHelper{Reader:r} //conn := &DataSource{conn: conn.c, PixelFormat: conn.PixelFormat}