1. 24 Jul, 2020 1 commit
  2. 20 Jul, 2020 5 commits
    • Pascal Nowack's avatar
      session-rdp: Fix inconsistency regarding length to allocate · f0e6cc71
      Pascal Nowack authored
      session-rdp has the convention that the count of something that will be
      allocated means the amount of something that will be allocated without
      including the resulting size itself, while using length when allocating
      something means the size of the data in the memory.
      While using `sizeof (uint8_t)` doesn't change the current behaviour, it
      still introduces this inconsistency.
      
      Fix this inconsistency by moving the `sizeof ()` part into the length
      variable.
      f0e6cc71
    • Pascal Nowack's avatar
      rdp-pipewire-stream: Update mouse pointer and mouse pointer position · 2e646d2b
      Pascal Nowack authored
      Previously, the RDP backend did not send the new pointer bitmap and
      pointer position to the client which led that the client would always
      use their system pointer instead of our pointer bitmap.
      The RDP backend however, added recently an API to send these values to
      the client.
      
      So, update these values using that API.
      2e646d2b
    • Pascal Nowack's avatar
      vnc-pipewire-stream: Move helper function to pipewire-utils · b1365d1f
      Pascal Nowack authored
      spa_pixel_format_to_grd_pixel_format () is not tied to
      vnc-pipewire-stream.
      It will also be used by rdp-pipewire-stream, so move it to
      pipewire-utils to not unnecessarily duplicate the function.
      b1365d1f
    • Pascal Nowack's avatar
      session-rdp: Add API to move the mouse pointer · 42b01583
      Pascal Nowack authored
      Add an API to move the mouse pointer on the window of the connected
      client.
      It is however not defined how the client handles the pointer position
      update since the implementation of the pointer position update lies in
      the hands of the client.
      The client could also simply discard the data and do nothing.
      42b01583
    • Pascal Nowack's avatar
      session-rdp: Add API to update the mouse pointer bitmap · 25664707
      Pascal Nowack authored
      Add an API to set a new mouse pointer bitmap for the connected client.
      Also add a check whether an update of the pointer bitmap is actually
      needed in order to save bandwidth.
      Additionally, cache the pointer bitmaps in order to reduce the number
      of actual pointer updates.
      25664707
  3. 10 Jul, 2020 3 commits
  4. 09 Jul, 2020 5 commits
    • Pascal Nowack's avatar
      session-rdp: Add implementation for extended mouse events · c50789d8
      Pascal Nowack authored
      Similar to the implementation of normal mouse events, forward extended
      mouse events to mutter via the RemoteDesktop interface.
      Extended mouse events are button events of the BTN_SIDE- and the
      BTN_EXTRA-button.
      Usually, these buttons are used as Back- and Forward-button when using
      (file-)browsers.
      Also similar to the HasHorizontalWheel property, advertise the
      HasExtendedMouseEvent property to the client in order to be able to
      receive these events.
      c50789d8
    • Pascal Nowack's avatar
      session-rdp: Add implementation for normal mouse events · ce8a6db5
      Pascal Nowack authored
      Normal mouse events are events where the user moved the mouse, pressed
      a mouse button, or used the scroll wheel.
      Add support for these events by forwarding them to mutter via the
      RemoteDesktop interface.
      Also advertise the HasHorizontalWheel property to the client in order
      to able to receive horizontal scroll events.
      ce8a6db5
    • Pascal Nowack's avatar
      session-rdp: Implement is_view_only · d1130d2b
      Pascal Nowack authored
      Fetch the current state of allowed remote input from gsettings via
      GrdSettings instead of returning a dummy value.
      d1130d2b
    • Pascal Nowack's avatar
      settings: Add getter for the RDP view-only setting · 84cd00db
      Pascal Nowack authored
      Add a getter for the view-only setting for RDP in addition to the
      view-only setting itself.
      The setting is stored via gsettings.
      84cd00db
    • Pascal Nowack's avatar
      session-rdp: Fix some style issues · e9325dda
      Pascal Nowack authored
      Use only one space character as separator instead of two, fix the
      indentation and also sort all includes alphabetically.
      e9325dda
  5. 06 Jul, 2020 5 commits
  6. 29 Jun, 2020 12 commits
    • Pascal Nowack's avatar
      daemon: Add support for the Remote Desktop Protocol (RDP) · afaaae3f
      Pascal Nowack authored
      Add support for the previously implemented RDP server by applying the
      optional command line arguments accordingly and by also starting the
      rdp server when the service is enabled.
      
      https://gitlab.gnome.org/jadahl/gnome-remote-desktop/-/issues/26
      afaaae3f
    • Pascal Nowack's avatar
      rdp: Add initial implementation for RDP · 2adbe7e2
      Pascal Nowack authored
      Similar to the VNC implementation, the RDP implementation gets a
      RDP server, which will listen for new connections and create a new
      RDP session for the new client, a RDP session which will handle
      anything related to the client (such as sending a new Frame, taking
      care of the authentication of the client or in the future also
      handling any keyboard or mouse input) and a PipeWire stream,
      which gets the frames, that the the client should display to the
      user.
      
      In order to be able to communicate with the client, the library
      FreeRDP is being used.
      The first thing that will happen when a new RDP session is being
      created is passing the server certificate to the client for TLS
      Security and making sure that the client meets all requirements.
      These requirements are a valid authentication, which is done via
      NlaSecurity in FreeRDP (valid username and password), and the support
      of specific codecs in order to able to the view the content sent
      by the server.
      Currently the server requires the client to support either the
      NSCodec or the RemoteFXCodec.
      Once the requirements are fulfilled, the server starts sending
      the frames to the client which will then display them.
      If the requirements are not met, the server closes the connection
      to the client.
      Currently, the server only supports to view only the content.
      Any remote input, such as keyboard or mouse input, is being discarded
      by the server.
      2adbe7e2
    • Pascal Nowack's avatar
      rdp: Add handling for RDP SAM files · 97e4cbc3
      Pascal Nowack authored
      FreeRDP needs for NlaSecurity a SAM file which contains the accepted
      usernames and their associated passwords in a NTLM hash form.
      Unfortunately, this file cannot be passed via a file descriptor to
      FreeRDP.
      Instead, we have to create a temporary file in RAM with the required
      data, pass it to FreeRDP and delete it afterwards.
      97e4cbc3
    • Pascal Nowack's avatar
      Add damage-utils · 4c3c7588
      Pascal Nowack authored
      Encoding and sending frames can take a lot of time and sometimes the
      content that is sent to the client might also be larger than it is
      intended.
      Using damage regions can both reduce the encoding time of a frame and
      the amount of data that will be transmitted to the client by only
      updating the regions that actually have changed.
      
      damage-utils provides functions that create these regions for two
      provided frames.
      4c3c7588
    • Pascal Nowack's avatar
      settings: Add getter and setter for RDP settings · e434e809
      Pascal Nowack authored
      Add getter for the RDP port, server certificate and server keyfile.
      Also add a setter in order to be able to update the RDP server port
      in the settings.
      The path for the server certificate and the server keyfile are both
      stored via gsettings.
      
      Also add a SecretSchema in order to be able to get the username and
      password for RDP.
      e434e809
    • Pascal Nowack's avatar
      vnc-pipewire-stream: Adapt to pipewire-utils · 5b40717c
      Pascal Nowack authored
      Remove the function definitions that are implemented in pipewire-utils,
      remove includes that are not necessary any more and include
      pipewire-utils.
      5b40717c
    • Pascal Nowack's avatar
      pipewire: Add pipewire-utils · 1a8e2361
      Pascal Nowack authored
      When we implement other backends other than the already existing VNC
      backend, some functions and attributes in the pipewire backend of the
      new backend are either simply the same or can (and should) be shared
      with the other pipewire implementation due to unnecessary duplication.
      Pipewire-utils picks these functions and attributes up.
      1a8e2361
    • Pascal Nowack's avatar
      session-vnc: Fix typo in function name · 6b6231bf
      Pascal Nowack authored
      The name should be "on_pipewire_stream_closed" and not
      "on_pipwire_stream_closed".
      6b6231bf
    • Pascal Nowack's avatar
      vnc-pipewire-stream: Fix some style issues · 28acf072
      Pascal Nowack authored
      Use spaces instead of tabs.
      28acf072
    • Pascal Nowack's avatar
      vnc-pipewire-stream: Make signals a static variable · 51f4aa54
      Pascal Nowack authored
      Starting with gcc 10, gcc will reject multiple definitions of global
      variables.
      Since the variable "signals" isn't used in any other source file via
      the extern keyword, it should be a static variable.
      This will avoid gcc 10 complaining about multiple definitions of global
      variables.
      
      See also: https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common
      51f4aa54
    • Jonas Ådahl's avatar
      ci: Disable some pipewire session manager features · fc707e51
      Jonas Ådahl authored
      To make CI happy.
      fc707e51
    • Jonas Ådahl's avatar
      ci: Run pipewire in D-Bus session too · 87a7323a
      Jonas Ådahl authored
      This fixes a bunch of issues. Remove the disabling of module-flatpak
      too, as it was removed due to D-Bus missing, and it was renamed to
      module-portal.
      87a7323a
  7. 16 Jun, 2020 1 commit
    • wtaymans's avatar
      stream: log a warning on error · 7670167e
      wtaymans authored
      When we get an invalid buffer or we can't mmap() it, log a warning
      and exit instead of carying on with invalid pointers and segfault.
      7670167e
  8. 07 May, 2020 1 commit
    • Jonas Ådahl's avatar
      vnc/pipewire-stream: Handle stride mismatch · 78c5bcb1
      Jonas Ådahl authored
      The VNC server framebuffer assumes a particular stride; but there is no
      guarantee that we'll get the same from PipeWire. Handle this gracefully
      by coping row by row instead of the whole buffer.
      78c5bcb1
  9. 20 Mar, 2020 3 commits
  10. 19 Mar, 2020 3 commits
    • Jonas Ådahl's avatar
      vnc/pipewire-stream: Copy buffer content in real-time thread · c974ae62
      Jonas Ådahl authored
      This changes the stream behavior to copy the buffer content immediately
      as it is received, making it less likely that mutter will have had time
      to over-write the contents with a new frame. It doesn't cause any extra
      copying, but does result in a full frame allocation each frame, instead
      of just a copy.
      c974ae62
    • Jonas Ådahl's avatar
      vnc/pipewire-stream: Make loop invocation blocking · 96dbaa03
      Jonas Ådahl authored
      We are currently assuming the data associated with a buffer is valid for
      the duration of VNC frame drawing. This is only true if we make the loop
      invocation blocking, as otherwise it'll end up being called on in an
      idle callback.
      96dbaa03
    • Jonas Ådahl's avatar
      vnc/pipewire-stream: Drop NULL buffer · 578c0b2c
      Jonas Ådahl authored
      If we skipped a buffer due to a newer one being available, we'll still
      get a 'new buffer' event, but as we've already consumed it, there will
      be no new buffer available to process. Handle this by just ignoring
      returning early if we end up with no new buffer available.
      578c0b2c
  11. 11 Mar, 2020 1 commit