aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-11-29 02:55:30 +0900
committerOphestra <cat@gensokyo.uk>2025-11-29 02:55:30 +0900
commitf703aa20a599529aace054ef8befc5128afb59e2 (patch)
treeece1784129ef0711bc8d672472b74bfe2704e181 /internal/pipewire
parent5c12425d48e7f3aad70a4e712ec35b96653b9935 (diff)
internal/pipewire: implement client generation footer
This corresponds with the core generation footer and seem to be the only other possible footer type. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire')
-rw-r--r--internal/pipewire/core.go10
-rw-r--r--internal/pipewire/core_test.go21
2 files changed, 29 insertions, 2 deletions
diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go
index a54ec111..9e3613ba 100644
--- a/internal/pipewire/core.go
+++ b/internal/pipewire/core.go
@@ -81,6 +81,16 @@ type FooterCoreGeneration struct {
RegistryGeneration Long `json:"registry_generation"`
}
+// The FooterClientGeneration indicates to the server what is the last
+// registry generation number the client has processed.
+//
+// The client shall include this footer in the next message it sends,
+// after it has processed an incoming message whose footer includes a
+// registry generation update.
+type FooterClientGeneration struct {
+ ClientGeneration Long `json:"client_generation"`
+}
+
// A CoreInfo event is emitted by the server upon connection
// with the more information about the server.
type CoreInfo struct {
diff --git a/internal/pipewire/core_test.go b/internal/pipewire/core_test.go
index 0997e9c3..c6d11573 100644
--- a/internal/pipewire/core_test.go
+++ b/internal/pipewire/core_test.go
@@ -10,15 +10,32 @@ func TestFooterCoreGeneration(t *testing.T) {
t.Parallel()
encodingTestCases[pipewire.Footer[pipewire.FooterCoreGeneration], *pipewire.Footer[pipewire.FooterCoreGeneration]]{
- {"sample", samplePWContainer[1][0][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
+ /* recvmsg 0 */
+
+ {"sample0", samplePWContainer[1][0][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
Opcode: pipewire.FOOTER_CORE_OPCODE_GENERATION,
Payload: pipewire.FooterCoreGeneration{RegistryGeneration: 0x22},
}, nil},
- {"sample*", samplePWContainer[1][5][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
+ {"sample1", samplePWContainer[1][5][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
Opcode: pipewire.FOOTER_CORE_OPCODE_GENERATION,
Payload: pipewire.FooterCoreGeneration{RegistryGeneration: 0x23},
}, nil},
+
+ {"sample2", samplePWContainer[1][42][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
+ Opcode: pipewire.FOOTER_CORE_OPCODE_GENERATION,
+ Payload: pipewire.FooterCoreGeneration{RegistryGeneration: 0x24},
+ }, nil},
+ }.run(t)
+
+ encodingTestCases[pipewire.Footer[pipewire.FooterClientGeneration], *pipewire.Footer[pipewire.FooterClientGeneration]]{
+ /* sendmsg 1 */
+
+ {"sample0", samplePWContainer[3][0][2], pipewire.Footer[pipewire.FooterClientGeneration]{
+ Opcode: pipewire.FOOTER_CORE_OPCODE_GENERATION,
+ // why does this not match FooterCoreGeneration sample2?
+ Payload: pipewire.FooterClientGeneration{ClientGeneration: 0x23},
+ }, nil},
}.run(t)
}