Mejoras en general
This commit is contained in:
@@ -16,5 +16,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# at least, raw encoding is needed by the rfb protocol
|
||||
from . import common as enc
|
||||
from . import common
|
||||
from . import raw
|
||||
from . import zlib
|
||||
from . import cursor
|
||||
|
||||
@@ -15,5 +15,15 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
encodings = {}
|
||||
|
||||
class ENCODINGS:
|
||||
pass
|
||||
raw = 0
|
||||
zlib = 6
|
||||
# supported pseudo-encodings
|
||||
cursor = -239
|
||||
|
||||
encodings_priority = [
|
||||
ENCODINGS.zlib,
|
||||
ENCODINGS.raw
|
||||
]
|
||||
|
||||
@@ -16,5 +16,21 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from . import common
|
||||
from struct import *
|
||||
from lib import log
|
||||
import zlib
|
||||
|
||||
common.ENCODINGS.cursor = -239
|
||||
class Encoding:
|
||||
name = 'Cursor'
|
||||
id = -239
|
||||
description = 'Cursor pseudo encoding'
|
||||
enabled = True
|
||||
pseudoEncoding = True
|
||||
|
||||
cursor_sent = False
|
||||
|
||||
def __init__(self):
|
||||
log.debug("Initialized", __name__)
|
||||
|
||||
common.encodings[common.ENCODINGS.cursor] = Encoding
|
||||
log.debug("Loaded encoding: %s (%s)" % (__name__, Encoding.id))
|
||||
|
||||
@@ -17,16 +17,30 @@
|
||||
|
||||
from . import common
|
||||
from struct import *
|
||||
from lib import log
|
||||
|
||||
def send_image(x, y, w, h, image):
|
||||
_buff = bytearray()
|
||||
rectangles = 1
|
||||
_buff.extend(pack("!BxH", 0, rectangles))
|
||||
_buff.extend(pack("!HHHH", x, y, w, h))
|
||||
_buff.extend(pack(">i", common.ENCODINGS.raw))
|
||||
_buff.extend( image.tobytes() )
|
||||
class Encoding:
|
||||
_buff = None
|
||||
|
||||
return _buff
|
||||
name = 'raw'
|
||||
id = 0
|
||||
description = 'Raw VNC encoding'
|
||||
enabled = True
|
||||
firstUpdateSent = False
|
||||
|
||||
common.ENCODINGS.raw = 0
|
||||
common.ENCODINGS.raw_send_image = send_image
|
||||
def __init__(self):
|
||||
log.debug("Initialized", __name__)
|
||||
|
||||
def send_image(self, x, y, w, h, image):
|
||||
self._buff = bytearray()
|
||||
rectangles = 1
|
||||
self._buff.extend(pack("!BxH", 0, rectangles)) # message type 0 == FramebufferUpdate
|
||||
self._buff.extend(pack("!HHHH", x, y, w, h))
|
||||
self._buff.extend(pack(">i", self.id))
|
||||
self._buff.extend( image.tobytes() )
|
||||
|
||||
return self._buff
|
||||
|
||||
common.encodings[common.ENCODINGS.raw] = Encoding
|
||||
|
||||
log.debug("Loaded encoding: %s (%s)" % (__name__, Encoding.id))
|
||||
|
||||
54
lib/encodings/zlib.py
Normal file
54
lib/encodings/zlib.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from . import common
|
||||
from struct import *
|
||||
from lib import log
|
||||
import zlib
|
||||
|
||||
|
||||
class Encoding:
|
||||
name = 'zlib'
|
||||
id = 6
|
||||
description = 'zlib VNC encoding'
|
||||
enabled = True
|
||||
firstUpdateSent = False
|
||||
_compressObj = None
|
||||
|
||||
def __init__(self):
|
||||
log.debug("Initialized", __name__)
|
||||
self._compressObj = zlib.compressobj(
|
||||
zlib.Z_DEFAULT_COMPRESSION, # level: 0-9
|
||||
zlib.DEFLATED, # method: must be DEFLATED
|
||||
zlib.MAX_WBITS, # window size in bits:
|
||||
# -15..-8: negate, suppress header
|
||||
# 8..15: normal
|
||||
# 16..30: subtract 16, gzip header
|
||||
zlib.DEF_MEM_LEVEL, # mem level: 1..8/9
|
||||
zlib.Z_DEFAULT_STRATEGY # strategy:
|
||||
# 0 = Z_DEFAULT_STRATEGY
|
||||
# 1 = Z_FILTERED
|
||||
# 2 = Z_HUFFMAN_ONLY
|
||||
# 3 = Z_RLE
|
||||
# 4 = Z_FIXED
|
||||
)
|
||||
|
||||
def send_image(self, x, y, w, h, image):
|
||||
sendbuff = bytearray()
|
||||
|
||||
rectangles = 1
|
||||
sendbuff.extend(pack("!BxH", 0, rectangles)) # message type 0 == FramebufferUpdate
|
||||
sendbuff.extend(pack("!HHHH", x, y, w, h))
|
||||
sendbuff.extend(pack(">i", self.id))
|
||||
|
||||
#log.debug("Compressing...")
|
||||
zlibdata = self._compressObj.compress( image.tobytes() )
|
||||
zlibdata += self._compressObj.flush(zlib.Z_FULL_FLUSH)
|
||||
#log.debug("LEN", len(zlibdata))
|
||||
|
||||
l = pack("!I", len(zlibdata) )
|
||||
sendbuff.extend( l ) # send length
|
||||
sendbuff.extend( zlibdata ) # send compressed data
|
||||
|
||||
return sendbuff
|
||||
|
||||
common.encodings[common.ENCODINGS.zlib] = Encoding
|
||||
|
||||
log.debug("Loaded encoding: %s (%s)" % (__name__, Encoding.id))
|
||||
Reference in New Issue
Block a user