Commit Graph

364 Commits (08d0c64ff97d3a64e05a908d97ec0b822c8a26be)

Author SHA1 Message Date
Andri Yngvason a616423c49 fb: Add copyright notice 2020-04-12 13:17:54 +00:00
Andri Yngvason c6f1ab616e tight: Replace an assert with return -1 2020-04-10 12:40:57 +00:00
Andri Yngvason 0350ba1d16 zrle: Replace an assert with return -1 2020-04-10 12:36:51 +00:00
Andri Yngvason 297e22b588 Don't render when a client is still encoding 2020-04-10 12:07:35 +00:00
Andri Yngvason 1c2a2231d6 tight: Don't drop MSB when encoding rect size 2020-04-10 11:51:40 +00:00
Andri Yngvason 77b866096d Redesign framebuffer update loop
Rendering may now only happen inside the rendering callback. The user is
also allowed to change out the entire buffer in the callback.

The callback is triggered by nvnc_damage_region(), nvnc_damage_whole()
and/or framebuffer update requests.

This fixes #26
2020-04-07 23:35:57 +00:00
Andri Yngvason 048b796ff5 Enable SO_REUSEADDR again 2020-04-06 18:29:17 +00:00
Andri Yngvason 11a73c5cb0 Revert "tight: Limit rectangle max width according to spec"
This reverts commit 999c1ef255.

This sends more rects than the original rect count allows for.
2020-04-06 00:01:32 +00:00
Andri Yngvason 1976221afe Resolve host names in nvnc_open()
This fixes #23
2020-04-04 22:26:00 +00:00
Andri Yngvason 8fc5c18b28 Don't show partial frames to new clients 2020-04-04 14:00:03 +00:00
Andri Yngvason f45f90ed9b nvnc_fb: Add a mechanism for signaling that a frame is in use 2020-04-04 12:33:18 +00:00
Andri Yngvason b0799f7490 server: Add dtrace probe for stream_send inside update_fb_done 2020-04-03 23:11:12 +00:00
Andri Yngvason a54b9ddd8e tight: Check quality level at start of each frame 2020-04-03 22:54:46 +00:00
Andri Yngvason b44d1a1f58 Replace miniz with system provided zlib
miniz is simply broken, so I can't use it.
2020-04-03 22:39:55 +00:00
Andri Yngvason 25626a9048 tight: Implement quality control 2020-04-03 20:09:26 +00:00
Andri Yngvason 17e0d6036f tight: Implement bare minimum "basic" encoding 2020-04-03 00:18:54 +00:00
Andri Yngvason cfb2abfc58 tight: Prepare for "basic" encoding method 2020-04-02 21:52:04 +00:00
Andri Yngvason 999c1ef255 tight: Limit rectangle max width according to spec 2020-04-02 21:26:12 +00:00
Andri Yngvason 1724797a27 tight: Add some error handling 2020-04-02 21:12:09 +00:00
Andri Yngvason 10a3fd6238 Add dtrace probes for framebuffer updates 2020-04-01 22:53:22 +00:00
Andri Yngvason 22eba2bed8 Make sure framebuffers are properly aligned 2020-03-29 13:16:05 +00:00
Andri Yngvason f0974e5af6 stream: Close if read() == 0 2020-03-24 19:15:27 +00:00
John Axel Eriksson d1c7402acd
Remove libuv header include 2020-03-24 07:04:05 +01:00
Andri Yngvason a77eb34fba Spawn as many workers as there are CPU cores 2020-03-21 17:27:30 +00:00
Andri Yngvason 76e721c4cd Replace libuv with aml 2020-03-21 16:59:10 +00:00
Andri Yngvason 992b4445ed tight: Add copyright notice 2020-02-09 12:03:14 +00:00
Andri Yngvason 61efca48f0 damage: Increment/decrement reference count before/after check
This is prudent. The user might throw away these buffers before the
damage check finishes.
2020-01-29 21:33:13 +00:00
Andri Yngvason 10473597c5 stream: Fix flushing when tls is disabled 2020-01-29 17:03:55 +00:00
Stefan Agner 1e0612a81e Remove unused/unexisting include util.h
The header file util.h has been remvoed from the codebase with
commit caf9fe0130 ("Remove unused code"), remove it from pngfb.c as
well. This allows to build the examples again.
2020-01-26 12:45:06 +01:00
Andri Yngvason 7d2b295b4a server: Read messages straight into message buffer
This avoids extra copying and removes a possible error condition that
would cause the connection to be closed
2020-01-25 16:42:10 +00:00
Andri Yngvason 547387f549 server: Close after sending VeNCrypt failure message 2020-01-25 16:04:04 +00:00
Andri Yngvason b30a5516d3 server: Send the proper reason string on security handshake failure 2020-01-25 15:59:04 +00:00
Andri Yngvason 1687b8c701 server: Apply stream API change 2020-01-25 15:52:44 +00:00
Andri Yngvason fef9ca1d7c stream: Change api for stream_write 2020-01-25 15:46:52 +00:00
Andri Yngvason caf9fe0130 Remove unused code 2020-01-25 15:39:23 +00:00
Andri Yngvason 19e4e42036 Implement VeNCrypt with x509 plain authentication 2020-01-25 15:35:14 +00:00
Andri Yngvason 2f99659077 Create a network stream object with TLS support 2020-01-25 15:33:36 +00:00
Andri Yngvason f8d53635e4 Create a reference counted buffer 2020-01-25 15:29:25 +00:00
Andri Yngvason 01522559d6 zrle: Fix pixel conversion for bits-per-pixel < 32 2020-01-24 23:16:08 +00:00
Andri Yngvason 230acf0560 zrle: Remove unused variable 2020-01-24 23:02:47 +00:00
Andri Yngvason 4ebd60b8cc pixels: Delete useless code 2020-01-24 22:29:29 +00:00
Scott Moreau 1d897b2ba1 Swap red and blue colors with tight encoding 2020-01-20 14:29:02 -07:00
Andri Yngvason 450ea90306 pixels: Fix rfb_pixfmt_from_fourcc 2020-01-19 23:13:12 +00:00
Andri Yngvason a80b314eea server: Set the pixel format for the client if it hasn't specified one 2020-01-19 22:54:52 +00:00
Andri Yngvason 4e919c69ce Unbreak raw encoding 2020-01-19 21:31:55 +00:00
Andri Yngvason aa917decf3 pixels: Make it work for 4 bytes per cpixel 2020-01-19 21:30:49 +00:00
Andri Yngvason 7fa074e60b server: Close client if no frame encoding method is available 2020-01-19 21:27:17 +00:00
Andri Yngvason ebfe4382ee server: Use size_t for encoding indices 2020-01-19 19:17:15 +00:00
Scott Moreau db6c063aea Include sys/param.h for MIN definition
Fixes #11.
2020-01-19 12:00:18 -07:00
Jan Beich 928d0c20ac Drop unused platform-specific header
../src/zrle.c:29:10: fatal error: 'endian.h' file not found
 #include <endian.h>
          ^~~~~~~~~~
2020-01-13 04:04:28 +00:00
Andri Yngvason ad0ff6b27c Make Tight encoding optional 2019-12-31 10:13:21 +00:00
Andri Yngvason ee3f2fefff server: Extract pixel format functions into pixels.c 2019-12-30 20:13:40 +00:00
Andri Yngvason a0376f2fd4 Pass entire client structure to tight encoder 2019-12-30 17:48:22 +00:00
Andri Yngvason d9f80ad196 server: Extract structure definitions into header 2019-12-30 17:22:19 +00:00
Andri Yngvason 8cd33d8a07 Add JPEG Tight encoding 2019-12-30 10:00:15 +00:00
Andri Yngvason 52f5510467 Send a correct reason string when disconnecting due to unsupported security type 2019-12-28 20:50:44 +00:00
Andri Yngvason 769107b7aa damage: Grow hint box after alignment 2019-12-27 18:04:36 +00:00
Andri Yngvason 00450e0c9d Clean up some memory leaks 2019-12-27 15:07:48 +00:00
Andri Yngvason 875cd5af7b Stop reading from a client as soon as an error occurs on the socket 2019-12-27 13:57:40 +00:00
Andri Yngvason bfb1cd9fc9 Don't buffer up multiple outgoing frames
It's pointless to send multiple frames in a single buffer. It just
overloads the client.
2019-12-23 12:11:00 +00:00
Andri Yngvason 4ebf4623cb Fix read buffer and drop older outgoing frames 2019-12-23 09:33:29 +00:00
Andri Yngvason 80b1f3cb4c Re-format using clang-format 2019-10-20 22:13:51 +00:00
Andri Yngvason de1f63573b raw-encoding: Do proper pixel conversion 2019-10-14 10:33:43 +00:00
Andri Yngvason 9f67b47e8c damage: Remove vestigial y_inversion code 2019-10-13 10:05:36 +00:00
Andri Yngvason 05ff0c1514 Don't send an update that hasn't been requested 2019-10-12 17:29:08 +00:00
Andri Yngvason 6dec7287f7 Tune deflate 2019-10-12 16:42:59 +00:00
Andri Yngvason 007578052c Use Z_BEST_SPEED for ZRLE
The default strategy loads the CPU too much when streaming at 60 FPS.
2019-10-12 15:47:38 +00:00
Andri Yngvason b54bc178f0 Fix decoding of encoding message 2019-10-08 18:12:57 +00:00
Andri Yngvason e9f200f4cc Excise y-inversion code 2019-10-08 17:58:35 +00:00
Andri Yngvason 9501a1da64 Keep a reference to the framebuffer while it is in a worker. 2019-10-08 17:53:12 +00:00
Andri Yngvason bc17fd823e pngfb: Fixup 2019-10-07 20:32:34 +00:00
Andri Yngvason 4beaf88a35 Turn around frame update model
Keeping a framebuffer for clients to request from seems to be a better fit for
the VNC standard.
2019-10-07 20:29:12 +00:00
Andri Yngvason 3196a7a46b Make nvnc_fb opaque 2019-10-07 17:39:54 +00:00
Andri Yngvason 0f840b9bb7 raw-encoding: Fix vec_reserve for destination buffer 2019-09-21 13:33:37 +00:00
Andri Yngvason 4c36a88cfd Fix y-inversion in damage tracking and raw encoding 2019-09-19 19:21:52 +00:00
Andri Yngvason 40f16fe63b Add raw encoding
It's useful for debugging
2019-09-19 18:14:26 +00:00
Andri Yngvason 7b57449e19 damage: Support y-inversion 2019-09-19 17:02:21 +00:00
Andri Yngvason 083eaaf20a Make sure that the client object outlives the encoding worker task 2019-09-18 22:16:40 +00:00
Andri Yngvason 8973ce5637 Return error from update when there are no pending clients 2019-09-18 21:21:37 +00:00
Andri Yngvason 7d4af0e741 Encode on worker threads 2019-09-15 21:53:10 +00:00
Andri Yngvason 70b2448c6e Create utility function for checking buffer damage 2019-09-15 21:53:10 +00:00
Andri Yngvason 578ee75235 zrle: Extract pixel conversion function into own file 2019-09-14 16:01:00 +00:00
Andri Yngvason b05791db4a zrle: Define tile side length in a macro 2019-09-14 16:01:00 +00:00
Andri Yngvason 3ce98968bb Add macros for compatibility with older libdrm 2019-09-10 18:17:45 +00:00
Andri Yngvason f3def21c96 Fix y-inversion 2019-09-08 23:24:01 +00:00
Andri Yngvason 55051310d6 Guard against unsupported pixel formats 2019-09-08 16:48:05 +00:00
Andri Yngvason ac2adbb721 Fix check for closing clients in fb update 2019-09-08 16:46:13 +00:00
Andri Yngvason 73987c2f17 Add modifier to do y-inversion during encoding 2019-09-08 15:19:56 +00:00
Andri Yngvason 2e359e734d zrle: Fix endianness 2019-09-08 14:41:22 +00:00
Andri Yngvason 66498bccf8 pngfb: Use correct fourcc format 2019-09-08 14:40:14 +00:00
Andri Yngvason 1a450a8e30 Explain what pngfb.c does 2019-09-07 18:44:48 +00:00
Andri Yngvason f9680148f1 Remove unused code 2019-09-07 18:42:55 +00:00
Andri Yngvason 6046949726 Add license and copyright notices 2019-09-07 16:51:07 +00:00
Andri Yngvason b6f29b036c Allocate framebuffer per client 2019-09-06 20:33:55 +00:00
Andri Yngvason 18062f08d2 Don't send anything to clients that don't have active requests 2019-09-06 20:17:03 +00:00
Andri Yngvason b10c6c2a5a Implement closing of other clients 2019-09-06 20:07:09 +00:00
Andri Yngvason 6660df4d8d Free encoded frames after sending them 2019-09-06 19:26:30 +00:00
Andri Yngvason fb335247aa zrle: Fix run-length encoding with palette 2019-09-05 23:36:07 +00:00
Andri Yngvason 3e374c97f0 zrle: Copy each tile region to a contiguous buffer before operating on it 2019-09-05 22:53:23 +00:00
Andri Yngvason 80e1093e71 zrle: Implement Palette RLE 2019-09-01 23:27:56 +00:00
Andri Yngvason ff67e2fed3 zrle: Keep the stream alive per connection
Otherwise the client doesn't want to play with the server.
2019-09-01 19:55:11 +00:00
Andri Yngvason 46dc074370 Fix encoding with offset 2019-09-01 13:01:02 +00:00
Andri Yngvason 20139f617d Add callbacks for new clients and when clients go away 2019-08-31 23:30:08 +00:00
Andri Yngvason ed5dadd203 Use client specific pointers in callbacks 2019-08-31 23:16:55 +00:00
Andri Yngvason f7ed6b6fce Use miniz instead of zlib 2019-08-31 15:50:23 +00:00
Andri Yngvason 8cb192c0ad Remove some printouts 2019-08-29 22:08:30 +00:00
Andri Yngvason fd6f47c93c Clean some things up and add more interface functions 2019-08-29 21:47:02 +00:00
Andri Yngvason 6d195dd484 Only linear framebuffers supported as is 2019-08-29 14:02:29 +00:00
Andri Yngvason 33324c9373 Create an interface 2019-08-28 22:46:47 +00:00
Andri Yngvason f31b5a6915 Add benchmark for zrle 2019-08-27 22:29:46 +00:00
Andri Yngvason b8e90d3665 zrle: Encode into vector 2019-08-27 21:49:28 +00:00
Andri Yngvason 1fc4d436a9 zrle: Extract deflate to function 2019-08-27 21:04:20 +00:00
Andri Yngvason 09d64dfbe6 zrle: Use vec for tile buffer 2019-08-27 20:28:12 +00:00
Andri Yngvason 980c437f3c Set up a directory structure 2019-08-27 19:42:52 +00:00