diff --git a/docs/Features/Notifications.md b/docs/Features/Notifications.md index 29a0bdb5c6..503823e1cc 100644 --- a/docs/Features/Notifications.md +++ b/docs/Features/Notifications.md @@ -21,10 +21,16 @@ Gnome-shell: \ *** -## Debugging +## Technical + +Please refer to [the notifications subsystem](../Subsystems/Notifications.md). +
+ Debugging + * start both the client and server with the debug command line flags: `-d notify,dbus` * you can also test notifications forwarding using the dbus interface or xpra control, ie: ```shell xpra control :100 send-notification "hello" "world" "*" ``` will send the message to all clients. +
diff --git a/docs/Features/Webcam.md b/docs/Features/Webcam.md index 6240df0ef9..8391517309 100644 --- a/docs/Features/Webcam.md +++ b/docs/Features/Webcam.md @@ -35,7 +35,9 @@ You can enable the webcam from the client's system tray menu, or using the comma * MS Windows client builds have very unreliable support -## Debugging +## Technical + +For further reference, see [the webcam subsystem](../Subsystems/Webcam.md).
Diagnostics diff --git a/docs/README.md b/docs/README.md index fd134c9204..7e7ea47b76 100644 --- a/docs/README.md +++ b/docs/README.md @@ -62,6 +62,11 @@ See [Multicast DNS](./Network/Multicast-DNS.md) and [Encryption](./Network/Encryption.md): [AES](./Network/AES.md), [SSL](./Network/SSL.md), [SSH](./Network/SSH.md)
+## Technical +* [network protocol](./Network/Protocol.md) +* [subsystems](./Subsystems) +* [security](./Usage/Security.md) + --- ## [Build](./Build/README.md) diff --git a/docs/Subsystems/README.md b/docs/Subsystems/README.md index f67f546dc1..dcf32ee26c 100644 --- a/docs/Subsystems/README.md +++ b/docs/Subsystems/README.md @@ -1,14 +1,17 @@ # Subsystems -This documentation refers to individual protocol features, +This documentation refers to individual [protocol](../Network/Protocol.md) features, it links to the implementation and technical documentation for each subsystem. Most modules are optional, see [security considerations](../Usage/Security.md). +## Concepts + * Client Module: feature implementation loaded by the client, it interfaces with the corresponding "Client Connection Module" on the server side -* Client Connection Module: for each connection to a client, the server will instantiate this module +* Client Connection Module: for each connection to a client, the server will instantiate a handler * Server Module: feature implemented by the server, it may interact with multiple "Client Connection Modules" + | Subsystem | [Client Module](../../xpra/client/mixins/) | [Server Module](../../xpra/server/mixins) | [Client Connection Module](../../xpra/server/source/) | User Documentation | |-------------------------------------|--------------------------------------------------------------|----------------------------------------------------|----------------------------------------------------------|---------------------------------------------------------| | [Audio](./Audio.md) | [audio](../../xpra/client/mixins/audio.py) | [audio](../../xpra/server/mixins/audio.py) | [audio](../../xpra/server/source/audio.py) | [audio feature](../Features/Audio.md) | diff --git a/docs/Subsystems/Webcam.md b/docs/Subsystems/Webcam.md new file mode 100644 index 0000000000..f531ec01e3 --- /dev/null +++ b/docs/Subsystems/Webcam.md @@ -0,0 +1,47 @@ +# ![Webcam](../images/icons/webcam.png) Webcam + +For usage related information, see [webcam feature](../Features/Webcam.md). + + +## Implementations + +| Component | Link | +|-------------------|-------------------------------------------------------------------| +| client | [xpra.client.mixins.webcam](../../xpra/client/mixins/webcam.py) | +| client connection | [xpra.server.source.webcam](../../xpra/server/source/webcam.py) | +| server | [xpra.server.mixins.webcam](../../xpra/server/mixins/webcam.py) | + + +## Capabilities + +The client exposes a single `webcam` boolean capability. +The server exposes the following attributes using the `webcam` capability prefix: +* `enabled` boolean +* `encodings` list of strings - encodings supported: only `png` or `jpeg` are guaranteed to be supported +* `devices` integer - the number of virtual video devices available + + +## Network Packets + +| Packet Type | Arguments | Direction | +|-----------------------|----------------------------------------------------------------|------------------| +| `webcam-start` | `device_id`, `width`, `height` | client to server | +| `webcam-ack` | `unused`, `frame_no`, `width`, `height` | server to client | +| `webcam-frame` | `device_id`, `frame_no`, `encoding`, `width`, `height`, `data` | client to server | +| `webcam-stop` | `device_no` | + +`device_id`, `frame_no`, `width` and `height` are always integers, `encoding` is a string. + +The `device_id` must be smaller than the number of virtual video `devices`. + + +### Flow + +* client requests `webcam-start` +* the server responds with a `webcam-ack` for `frame_no` 0, the `width` and `height` may be different from the one requested +* the client can then send a `webcam-frame` for `frame_no` 1 +* the server responds with a `webcam-ack` for each frame it receives +* the client must wait for the `webcam-ack` before sending the next frame +* whenever the client decides to stop forwarding the webcam, it must send a `webcam-stop` packet + +If any of these steps fail, a `webcam-stop` packet must be sent to the peer.