Commit Graph

929 Commits

Author SHA1 Message Date
Kevin Pouget
ec4e44200a utils: add set_bitmap/test_bitmap functions
This patch introduces `set_bitmap` and `test_bitmap` + relevant
macros, adapted from `<qemu>/include/qemu/bitops.h`.

These functions differ from `set_bit`/`test_bit` as they can set/test
bits in bit arrays longer than scalar data-types.

Signed-off-by: Kevin Pouget <kpouget@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2020-03-04 16:43:48 +00:00
Frediano Ziglio
b2f919f109 Add missing dependency in Autoconf integration
spice-common depends on Glib2, so automatically add to the
dependency list.
You can define a GLIB2_MIN_VER m4 variable in configure.ac
to raise the default GLib2 required version.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Kevin Pouget <kpouget@redhat.com>
2020-03-04 09:58:42 +00:00
Frediano Ziglio
19ea60416c m4: Make easier to integrate in other projects
Add a common.m4 file to be included directly in other project.
This include will include all needed checks to use spice-common.
Just include directly this file in your configure.ac.
This will define SPICE_COMMON_CFLAGS and SPICE_COMMON_DIR (for
linking .la files) which are needed to use spice-common.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Kevin Pouget <kpouget@redhat.com>
2020-03-02 13:54:12 +00:00
Frediano Ziglio
2cec5f99af test-quic: Run 1 random quic test per color mode
Reduce execution time. No need to run so much tests, coverage
stays more or less the same.
We iterate twice to check RGB mode with alpha, otherwise the
coverage reduce about 10-20%.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@gmail.com>
2020-03-02 09:57:56 +00:00
Frediano Ziglio
27fd63ff72 test-quic: Reduce height of test image
There's no much need for than size to be so big, limit to
reduce execution time, coverage stays more or less the same.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@gmail.com>
2020-03-02 09:57:54 +00:00
Frediano Ziglio
df66d9a151 test-quic: Cache gdk_pixbuf_get_byte_length value
Do not call the function for every iteration

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@gmail.com>
2020-03-02 09:57:50 +00:00
Frediano Ziglio
8e82bf5661 test-quic: Avoid namespace conflict with Gdk API
Avoid possible conflict in the future.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@gmail.com>
2020-03-02 09:57:44 +00:00
Eduardo Lima (Etrunko)
03e1fb94e4 build: Unconditionally link with libm if found
New versions of gcc have implemented __has_builtin which causes meson
to detect functions in libm, such as hypot() and sqrt() as built-ins
during configure time, while they are actually part of libm. This has
been causing build failures in Fedora 32 Rawhide and has been reported
in meson for some time now: https://github.com/mesonbuild/meson/issues/3740

Meson always adds --as-needed to linker arguments so, it does not hurt
to link against libm even though no functions from that library will be
used.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2020-02-27 14:41:20 +00:00
Frediano Ziglio
35f45282d4 snd_codec: Update field names in function documentation
in_data field was renamed to in_ptr.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Julien Rope <jrope@redhat.com>
2020-02-07 17:07:57 +00:00
Frediano Ziglio
b699221f00 codegen: Check unsafe values alone
This rule remove possible integer overflows.
Current code generated is not affected by these integer overflows
as the computations are done using 64 bit but better safe then sorry.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Julien Rope <jrope@redhat.com>
2020-02-07 16:14:53 +00:00
Frediano Ziglio
ea864c70d9 lz_compress: Cleanup unused macros
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:27:03 +00:00
Frediano Ziglio
d5d1d5b0bf lz_decompress: Read "ctrl" inside loop
Remove code duplication

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:27:00 +00:00
Frediano Ziglio
a446b5b27b lz_decompress: Move variable declaration in nested scope
No need to compute these variable always, only if we have
a reference to a previous sequence.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:26:58 +00:00
Frediano Ziglio
08fafdbb33 lz_decompress: Reindented comment
Just space changes

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:26:56 +00:00
Frediano Ziglio
6595de58a2 lz_decompress: Simplify loop
The loop is always executed once so use a do {} while construct
to avoid the repetition.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:26:53 +00:00
Frediano Ziglio
109f6a4802 lz_decompress: Do not execute nested checks
Boundaries checks already done some lines above, no needs
to repeat for each pixel.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:26:51 +00:00
Frediano Ziglio
ac4763bd89 lz_decompress: Constify some variable
Make clear they are not supposed to be changed.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 15:26:34 +00:00
Frediano Ziglio
48944f6f41 marshallers: Avoid some useless pointers in SpiceMarshallerData
"buffers" and "marshallers" are always pointing to the static
buffers inside the same structure.
Use single array fields to avoid having initialize and have them.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Julien Rope <jrope@redhat.com>
2020-02-07 14:52:29 +00:00
Frediano Ziglio
87e2db9798 Reuse new spice_extra_assert macro
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 13:26:00 +00:00
Frediano Ziglio
e761c2d4de log: Add spice_extra_assert
This macro was suggested to simplify hot path expensive checks
which should be disable in production environments.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Francesco Giudici <fgiudici@redhat.com>
2020-02-07 13:24:45 +00:00
Frediano Ziglio
151c23d235 test-quic: Convert image to get more testing (gray, rgb16)
Allows to check QUIC algorithm and code with multiple input/output
formats.
Was limited to just RGB and RGBA.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2020-02-07 10:59:18 +00:00
Frediano Ziglio
26d3f6e138 build: Clean up some configure checks
Remove some system checks.
Specifically:
- functions in the standard C (memset, memmove);
- functions we use but we assume in the specific implementation
  present (dup2, fork);
- functions we don't use (error_at_line);
- headers in the standard C (stddef.h, stdint.h, string.h);
- headers present in all systems we support if are not checked
  in the source files (malloc.h);
- types we assume being present (XintYY_t, pid_t).

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2020-02-06 19:26:21 +00:00
Frediano Ziglio
f3d6c5f322 snd_codec: Do not include not needed headers
Include headers required for implementation only in the
implementation file.
This remove dependency and avoid the user component having to
check for header flags (in this case HAVE_CELT051 and HAVE_OPUS).
This make easier integration in other components.
This also make compilation faster.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2020-02-06 19:26:21 +00:00
Frediano Ziglio
da6a405f25 snd_codec: Avoid some useless casts declaring struct type
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-12-15 21:24:27 +00:00
Frediano Ziglio
2561f62283 quic: Do not include quic_config.h in quic.h
quic_config is used only by the implementation so include it
only from the implementation file.
This remove dependency.
This make easier integration in other components.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-12-10 08:22:02 +00:00
Frediano Ziglio
34807c600c quic: Use G_UNLIKELY in some hot paths
The buffers provided should be big enough to avoid to ask
for more space much often.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-12-10 08:13:11 +00:00
Frediano Ziglio
5a31a3850d quic: Remove unused include header
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-11-26 13:38:07 +00:00
Fabrice Fontaine
785ac8de4f meson: add tests option
Allow the user to disable tests through -Dtests=false

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-11-18 11:07:59 +00:00
Fabrice Fontaine
32beff2ff5 configure.ac: add --enable-tests
Allow the user to disable tests through --disable-tests, this is
especially useful for example to disable gdk-pixbuf dependency

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-11-18 11:07:56 +00:00
Frediano Ziglio
ead7790d47 codegen: Ignore path generating include guards
Make sure that guard do no change building out-of-tree or
with Meson.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
2019-11-04 11:08:10 +00:00
Kevin Pouget
f191053a8c build: Introduce the agent-interface as an alternative instrumentation library
The agent-interface is an experimental instrumentation library for
capturing and sharing Spice performance indicators with an external
agent.

    --enable-instrumentation=[recorder/agent/no]
             Enable instrumentation [default=no]

The former configuration option '--enable-recorder' is transformed
into '--enable-instrumentation=recorder'.

Signed-off-by: Kevin Pouget <kpouget@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-10-18 17:04:09 +01:00
Kevin Pouget
3331ad1a04 agent-interface: add configuration functions
agent_interface_start: this function allows launching the agent
interface (ie, its listening socket) on a given port.

agent_interface_set_on_connect_cb: this function allows passing a
callback function that will be triggered when a client (a Local Agent)
connects to the Agent Interface socket.

agent_interface_set_forward_quality_cb: this function allows SPICE to
provide a function that will forward Quality messages received by the
Agent Interface towards SPICE server, for a centralized processing of
the messages.

Signed-off-by: Kevin Pouget <kpouget@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-10-18 17:04:06 +01:00
Kevin Pouget
a16c7027c5 agent-interface: introduce the core of the Agent Interface
When initialized (recorder_initialization), the Agent Interface launch
a GThread (handle_communications) that opens a TCP server socket and
waits for Smart Local Agent connections. When a Local Agent connects
to the sockets, the communication is initialized
(agent_initialize_communication), the communication socket is stored
and the list of Recorders is sent. In return, the local agent
indicates which recorders to enable.

On the SPICE side, the Agent Interface handles the record() calls
(recorder_append*). When a record is received from SPICE, and if the
recorder is enabled, the record entry is sent through the TCP
connection. Otherwise, the record is dropped.

Signed-off-by: Kevin Pouget <kpouget@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-10-18 17:04:03 +01:00
Frediano Ziglio
99f6aa0028 codegen: Document "chunk" attribute
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-10-10 13:01:33 +01:00
Frediano Ziglio
d4248885e8 codegen: Check validity of array members
Check that combination of fields for an array does not
lead to unsafe code.
check_valid method came from generate_c_declaration with
some more check and it's use in demarshaller to validate
the array if the structure is not generated.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-10-10 12:33:42 +01:00
Frediano Ziglio
a5a86a1caf codegen: Add 'chunk' to the output attributes
Output attributes are the attributes that specify how to store
that field in the C structure.
There can be only one output type specified.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-10-10 11:11:36 +01:00
Frediano Ziglio
62b44b3073 proto: Demarshal Smartcard data field
Currently the demarshaler code is not used by spice-server.
Demarshal all the fields of the header message, not only the header.
Using generated code allows to easily check data and support
big endian machines. Generated code will be used by spice-server.

The resulting change is.

   diff -ru gen/generated_client_marshallers.c common/generated_client_marshallers.c
    --- gen/generated_client_marshallers.c      2019-10-05 20:44:54.000000000 +0100
    +++ common/generated_client_marshallers.c   2019-10-05 20:45:33.000000000 +0100
    @@ -283,6 +283,7 @@
         spice_marshaller_add_uint32(m, src->type);
         spice_marshaller_add_uint32(m, src->reader_id);
         spice_marshaller_add_uint32(m, src->length);
    +    /* Don't marshall @nomarshal data */
     }

     #endif /* USE_SMARTCARD */
    diff -ru gen/generated_server_demarshallers.c common/generated_server_demarshallers.c
    --- gen/generated_server_demarshallers.c    2019-10-05 20:44:54.000000000 +0100
    +++ common/generated_server_demarshallers.c 2019-10-05 20:45:33.000000000 +0100
    @@ -1451,10 +1451,25 @@
         uint64_t nw_size;
         uint64_t mem_size;
         uint8_t *in, *end;
    +    uint64_t data__nw_size, data__mem_size;
    +    uint64_t data__nelements;
         VSCMsgHeader *out;

    -    nw_size = 12;
    -    mem_size = sizeof(VSCMsgHeader);
    +    { /* data */
    +        uint32_t length__value;
    +        pos = start + 8;
    +        if (SPICE_UNLIKELY(pos + 4 > message_end)) {
    +            goto error;
    +        }
    +        length__value = read_uint32(pos);
    +        data__nelements = length__value;
    +
    +        data__nw_size = data__nelements;
    +        data__mem_size = sizeof(uint8_t) * data__nelements;
    +    }
    +
    +    nw_size = 12 + data__nw_size;
    +    mem_size = sizeof(VSCMsgHeader) + data__mem_size;

         /* Check if message fits in reported side */
         if (nw_size > (uintptr_t) (message_end - start)) {
    @@ -1474,6 +1489,10 @@
         out->type = consume_uint32(&in);
         out->reader_id = consume_uint32(&in);
         out->length = consume_uint32(&in);
    +    verify(sizeof(out->data) == 0);
    +    memcpy(out->data, in, data__nelements);
    +    in += data__nelements;
    +    end += data__nelements;

         assert(in <= message_end);
         assert(end <= data + mem_size);

The @nomarshal attribute allows to not change the marshaling code
(used by spice-gtk).

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-10-08 14:40:32 +01:00
Kevin Pouget
2640ff294a common/recorder.h: do not complain on unused (dummy) recorders
Signed-off-by: Kevin Pouget <kpouget@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-09-11 10:02:44 +01:00
Frediano Ziglio
4727c19d36 meson: Remove "install" argument from configure_file
The argument requires Meson 0.50 however it's already "false"
by default if "install_dir" is not provided so remove it
to keep compatibility with Meson 0.48.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2019-08-29 04:51:48 +01:00
Frediano Ziglio
c392a7fee7 codegen: Add a check for C structure fields
This check make sure that output fields for member with @end (arrays)
are declared as empty arrays in output C structure.
This avoids output fields to be declared as pointer or other
invalid types.
The check is a compile time check so no code in object file
is generated.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
2019-08-14 15:49:19 +01:00
Frediano Ziglio
493475e012 protocol: Removed unneeded type specifications
Default type is already uint8_t.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
2019-08-14 10:32:08 +01:00
Frediano Ziglio
60e0453698 codegen: Exit with error on error generating C structures
This was some left-over during development of C structure
generations (the single structure generation was skipped).

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
2019-08-13 18:11:04 +01:00
Frediano Ziglio
7abd2b36d9 codegen: Use has_end_attr instead of has_attr("end")
Just style, they do the same thing, but is more coherent
with the rest of the code.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
2019-08-13 18:10:56 +01:00
Uri Lublin
01417b7533 test-marshallers.proto: ArrayMessage: make space for name
Do it by adding @end tag.
Without it the allocated memory has no space for 'name'.

Also fix SpiceMsgMainArrayMessage tests/test-marshallers.h,
replacing int8_t* name with int8_t name[0].
This makes name an "in-structure" array with no pre-defined size
instead of a pointer.
The size is defined by the message size.

Signed-off-by: Uri Lublin <uril@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-08-13 18:09:05 +01:00
Uri Lublin
a52a0a0906 ptypes.py: remove useless condition member != None
member = None is set before the if/else condition.
In the else code, when member is set it is checked
and if not-None it breaks out of the loop.
If the code is still in the loop for sure member is None.

Found by covscan.

Signed-off-by: Uri Lublin <uril@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
2019-08-12 17:00:42 +01:00
Frediano Ziglio
ff2e99d893 build: Disable Celt support by default
We started disabling Celt support making the option required.
After 2 releases start making it disabled unless explicitly
enabled.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Snir Sheriber <ssheribe@redhat.com>
2019-06-13 08:51:11 +01:00
Frediano Ziglio
cc109a83b6 recorder: Update
Pull version update and some features.
Version update changed copyright in files to LGPLv2, more
compatible with SPICE.
One of the feature is the support for absolute time.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-05-29 14:53:16 +01:00
Frediano Ziglio
3b517a2243 build: Remove unused git-version-gen file
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2019-05-29 14:53:12 +01:00
Frediano Ziglio
4fc4c2db36 Do not check for HAVE_CONFIG_H
This should always be defined and including config.h is a requirement.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-05-02 09:33:05 +01:00
Frediano Ziglio
09fba0677d gitignore: Ignore auto generated generated_messages.h file
git.mk seems to have issues with Makefile rules generating multiple
files so add manually this file.
This avoid SPICE server to generate distribution files with
"-dirty" suffix.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2019-04-30 11:31:20 +01:00