aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-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)
}