internal/pipewire: implement Registry::Global
All checks were successful
Test / Create distribution (push) Successful in 36s
Test / Sandbox (push) Successful in 2m29s
Test / Hakurei (push) Successful in 3m20s
Test / Hpkg (push) Successful in 4m9s
Test / Sandbox (race detector) (push) Successful in 4m26s
Test / Hakurei (race detector) (push) Successful in 5m11s
Test / Flake checks (push) Successful in 1m31s
All checks were successful
Test / Create distribution (push) Successful in 36s
Test / Sandbox (push) Successful in 2m29s
Test / Hakurei (push) Successful in 3m20s
Test / Hpkg (push) Successful in 4m9s
Test / Sandbox (race detector) (push) Successful in 4m26s
Test / Hakurei (race detector) (push) Successful in 5m11s
Test / Flake checks (push) Successful in 1m31s
Dealing with this event reawakened my burning hatred for OOP. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
cbe86dc4f0
commit
5c12425d48
@ -225,3 +225,33 @@ func (c *CoreGetRegistry) MarshalBinary() ([]byte, error) { return Marshal(c) }
|
|||||||
|
|
||||||
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
|
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
|
||||||
func (c *CoreGetRegistry) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
|
func (c *CoreGetRegistry) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
|
||||||
|
|
||||||
|
// A RegistryGlobal event is emitted to notify a client about a new global object.
|
||||||
|
type RegistryGlobal struct {
|
||||||
|
// The global id.
|
||||||
|
ID Int `json:"id"`
|
||||||
|
// Permission bits.
|
||||||
|
Permissions Int `json:"permissions"`
|
||||||
|
// The type of object.
|
||||||
|
Type String `json:"type"`
|
||||||
|
// The server version of the object.
|
||||||
|
Version Int `json:"version"`
|
||||||
|
// Extra global properties.
|
||||||
|
Properties *SPADict `json:"props"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Size satisfies [KnownSize] with a value computed at runtime.
|
||||||
|
func (c *RegistryGlobal) Size() Word {
|
||||||
|
return SizePrefix +
|
||||||
|
Size(SizeInt) +
|
||||||
|
Size(SizeInt) +
|
||||||
|
SizeString[Word](c.Type) +
|
||||||
|
Size(SizeInt) +
|
||||||
|
c.Properties.Size()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalBinary satisfies [encoding.BinaryMarshaler] via [Marshal].
|
||||||
|
func (c *RegistryGlobal) MarshalBinary() ([]byte, error) { return Marshal(c) }
|
||||||
|
|
||||||
|
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
|
||||||
|
func (c *RegistryGlobal) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
|
||||||
|
|||||||
@ -127,7 +127,447 @@ func TestCoreGetRegistry(t *testing.T) {
|
|||||||
encodingTestCases[pipewire.CoreGetRegistry, *pipewire.CoreGetRegistry]{
|
encodingTestCases[pipewire.CoreGetRegistry, *pipewire.CoreGetRegistry]{
|
||||||
{"sample", samplePWContainer[0][2][1], pipewire.CoreGetRegistry{
|
{"sample", samplePWContainer[0][2][1], pipewire.CoreGetRegistry{
|
||||||
Version: pipewire.PW_VERSION_REGISTRY,
|
Version: pipewire.PW_VERSION_REGISTRY,
|
||||||
NewID: 2,
|
// this ends up as the Id of PW_TYPE_INTERFACE_Registry
|
||||||
|
NewID: 2,
|
||||||
|
}, nil},
|
||||||
|
}.run(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRegistryGlobal(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
encodingTestCases[pipewire.RegistryGlobal, *pipewire.RegistryGlobal]{
|
||||||
|
{"sample0", samplePWContainer[1][6][1], pipewire.RegistryGlobal{
|
||||||
|
ID: pipewire.PW_ID_CORE,
|
||||||
|
Permissions: pipewire.PW_CORE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Core,
|
||||||
|
Version: pipewire.PW_VERSION_CORE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "0"},
|
||||||
|
{Key: "core.name", Value: "pipewire-0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample1", samplePWContainer[1][7][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 1,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "1"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-rt"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample2", samplePWContainer[1][8][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 3, // registry takes up 2
|
||||||
|
Permissions: pipewire.PW_SECURITY_CONTEXT_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_SecurityContext,
|
||||||
|
Version: pipewire.PW_VERSION_SECURITY_CONTEXT,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample3", samplePWContainer[1][9][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 2,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "2"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-protocol-native"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample4", samplePWContainer[1][10][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 5,
|
||||||
|
Permissions: pipewire.PW_PROFILER_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Profiler,
|
||||||
|
Version: pipewire.PW_VERSION_PROFILER,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "5"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample5", samplePWContainer[1][11][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 4,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "4"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-profiler"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample6", samplePWContainer[1][12][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 6,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "6"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-metadata"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample7", samplePWContainer[1][13][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 7,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "7"},
|
||||||
|
{Key: "module.id", Value: "6"},
|
||||||
|
{Key: "factory.name", Value: "metadata"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Metadata},
|
||||||
|
{Key: "factory.type.version", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample8", samplePWContainer[1][14][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 8,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "8"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-device-factory"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample9", samplePWContainer[1][15][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 9,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "9"},
|
||||||
|
{Key: "module.id", Value: "8"},
|
||||||
|
{Key: "factory.name", Value: "spa-device-factory"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Device},
|
||||||
|
{Key: "factory.type.version", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample10", samplePWContainer[1][16][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 10,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "10"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-node-factory"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample11", samplePWContainer[1][17][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 11,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "11"},
|
||||||
|
{Key: "module.id", Value: "10"},
|
||||||
|
{Key: "factory.name", Value: "spa-node-factory"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node},
|
||||||
|
{Key: "factory.type.version", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample12", samplePWContainer[1][18][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 12,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "12"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-node"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample13", samplePWContainer[1][19][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 13,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "13"},
|
||||||
|
{Key: "module.id", Value: "12"},
|
||||||
|
{Key: "factory.name", Value: "client-node"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_ClientNode},
|
||||||
|
{Key: "factory.type.version", Value: "6"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample14", samplePWContainer[1][20][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 14,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "14"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-device"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample15", samplePWContainer[1][21][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 15,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "15"},
|
||||||
|
{Key: "module.id", Value: "14"},
|
||||||
|
{Key: "factory.name", Value: "client-device"},
|
||||||
|
{Key: "factory.type.name", Value: "Spa:Pointer:Interface:Device"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample16", samplePWContainer[1][22][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 16,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "16"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-portal"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample17", samplePWContainer[1][23][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 17,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "17"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-access"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample18", samplePWContainer[1][24][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 18,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "18"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-adapter"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample19", samplePWContainer[1][25][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 19,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "19"},
|
||||||
|
{Key: "module.id", Value: "18"},
|
||||||
|
{Key: "factory.name", Value: "adapter"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node},
|
||||||
|
{Key: "factory.type.version", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample20", samplePWContainer[1][26][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 20,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "20"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-link-factory"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample21", samplePWContainer[1][27][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 21,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "21"},
|
||||||
|
{Key: "module.id", Value: "20"},
|
||||||
|
{Key: "factory.name", Value: "link-factory"},
|
||||||
|
{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Link},
|
||||||
|
{Key: "factory.type.version", Value: "3"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample22", samplePWContainer[1][28][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 22,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "22"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-session-manager"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample23", samplePWContainer[1][29][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 23,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "23"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "client-endpoint"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:ClientEndpoint"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample24", samplePWContainer[1][30][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 24,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "24"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "client-session"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:ClientSession"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample25", samplePWContainer[1][31][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 25,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "25"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "session"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:Session"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample26", samplePWContainer[1][32][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 26,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "26"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "endpoint"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:Endpoint"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample27", samplePWContainer[1][33][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 27,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "27"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "endpoint-stream"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:EndpointStream"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample28", samplePWContainer[1][34][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 28,
|
||||||
|
Permissions: pipewire.PW_FACTORY_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Factory,
|
||||||
|
Version: pipewire.PW_VERSION_FACTORY,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "28"},
|
||||||
|
{Key: "module.id", Value: "22"},
|
||||||
|
{Key: "factory.name", Value: "endpoint-link"},
|
||||||
|
{Key: "factory.type.name", Value: "PipeWire:Interface:EndpointLink"},
|
||||||
|
{Key: "factory.type.version", Value: "0"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample29", samplePWContainer[1][35][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 29,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "29"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-x11-bell"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample30", samplePWContainer[1][36][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 30,
|
||||||
|
Permissions: pipewire.PW_MODULE_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Module,
|
||||||
|
Version: pipewire.PW_VERSION_MODULE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "30"},
|
||||||
|
{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-jackdbus-detect"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample31", samplePWContainer[1][37][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 31,
|
||||||
|
Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK?
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Node,
|
||||||
|
Version: pipewire.PW_VERSION_NODE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "31"},
|
||||||
|
{Key: "factory.id", Value: "11"},
|
||||||
|
{Key: "priority.driver", Value: "200000"},
|
||||||
|
{Key: "node.name", Value: "Dummy-Driver"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample32", samplePWContainer[1][38][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 32,
|
||||||
|
Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK?
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Node,
|
||||||
|
Version: pipewire.PW_VERSION_NODE,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "32"},
|
||||||
|
{Key: "factory.id", Value: "11"},
|
||||||
|
{Key: "priority.driver", Value: "190000"},
|
||||||
|
{Key: "node.name", Value: "Freewheel-Driver"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample33", samplePWContainer[1][39][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 33,
|
||||||
|
Permissions: pipewire.PW_METADATA_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Metadata,
|
||||||
|
Version: pipewire.PW_VERSION_METADATA,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "33"},
|
||||||
|
{Key: "metadata.name", Value: "settings"},
|
||||||
|
},
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"sample34", samplePWContainer[1][40][1], pipewire.RegistryGlobal{
|
||||||
|
ID: 34,
|
||||||
|
Permissions: pipewire.PW_CLIENT_PERM_MASK,
|
||||||
|
Type: pipewire.PW_TYPE_INTERFACE_Client,
|
||||||
|
Version: pipewire.PW_VERSION_CLIENT,
|
||||||
|
Properties: &pipewire.SPADict{
|
||||||
|
{Key: "object.serial", Value: "34"},
|
||||||
|
{Key: "module.id", Value: "2"},
|
||||||
|
{Key: "pipewire.protocol", Value: "protocol-native"},
|
||||||
|
{Key: "pipewire.sec.pid", Value: "1443"},
|
||||||
|
{Key: "pipewire.sec.uid", Value: "1000"},
|
||||||
|
{Key: "pipewire.sec.gid", Value: "100"},
|
||||||
|
{Key: "pipewire.sec.socket", Value: "pipewire-0-manager"},
|
||||||
|
{Key: "pipewire.access", Value: "unrestricted"},
|
||||||
|
{Key: "application.name", Value: "pw-container"},
|
||||||
|
},
|
||||||
}, nil},
|
}, nil},
|
||||||
}.run(t)
|
}.run(t)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,216 @@ func TestHeader(t *testing.T) {
|
|||||||
Size: 0x58, Sequence: 5, FileCount: 0,
|
Size: 0x58, Sequence: 5, FileCount: 0,
|
||||||
}, nil},
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 0", samplePWContainer[1][6][0], pipewire.Header{
|
||||||
|
ID: 2, // this is specified by Core::GetRegistry in samplePWContainer[0][2][1]
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xc8, Sequence: 6, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 1", samplePWContainer[1][7][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xd8, Sequence: 7, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 2", samplePWContainer[1][8][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xa8, Sequence: 8, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 3", samplePWContainer[1][9][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 9, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 4", samplePWContainer[1][10][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xa0, Sequence: 10, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 5", samplePWContainer[1][11][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 11, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 6", samplePWContainer[1][12][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 12, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 7", samplePWContainer[1][13][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 13, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 8", samplePWContainer[1][14][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 14, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 9", samplePWContainer[1][15][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x178, Sequence: 15, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 10", samplePWContainer[1][16][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 16, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 11", samplePWContainer[1][17][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 17, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 12", samplePWContainer[1][18][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 18, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 13", samplePWContainer[1][19][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 19, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 14", samplePWContainer[1][20][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 20, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 15", samplePWContainer[1][21][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 21, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 16", samplePWContainer[1][22][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 22, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 17", samplePWContainer[1][23][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 23, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 18", samplePWContainer[1][24][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 24, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 19", samplePWContainer[1][25][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x160, Sequence: 25, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 20", samplePWContainer[1][26][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 26, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 21", samplePWContainer[1][27][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x168, Sequence: 27, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 22", samplePWContainer[1][28][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 28, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 23", samplePWContainer[1][29][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x178, Sequence: 29, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 24", samplePWContainer[1][30][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x178, Sequence: 30, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 25", samplePWContainer[1][31][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x168, Sequence: 31, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 26", samplePWContainer[1][32][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 32, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 27", samplePWContainer[1][33][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x178, Sequence: 33, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 28", samplePWContainer[1][34][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x170, Sequence: 34, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 29", samplePWContainer[1][35][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe0, Sequence: 35, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 30", samplePWContainer[1][36][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xe8, Sequence: 36, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 31", samplePWContainer[1][37][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x118, Sequence: 37, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 32", samplePWContainer[1][38][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x120, Sequence: 38, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 33", samplePWContainer[1][39][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0xd0, Sequence: 39, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
|
{"PW_REGISTRY_EVENT_GLOBAL 34", samplePWContainer[1][40][0], pipewire.Header{
|
||||||
|
ID: 2,
|
||||||
|
Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL,
|
||||||
|
Size: 0x238, Sequence: 40, FileCount: 0,
|
||||||
|
}, nil},
|
||||||
|
|
||||||
{"PW_SECURITY_CONTEXT_METHOD_CREATE", []byte{
|
{"PW_SECURITY_CONTEXT_METHOD_CREATE", []byte{
|
||||||
// Id
|
// Id
|
||||||
3, 0, 0, 0,
|
3, 0, 0, 0,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user