forked from security/hakurei
internal/pipewire: implement Registry::Destroy
This requires error handling infrastructure in Core that does not yet exist, so it is not exported for now. It has been manually tested via linkname against PipeWire. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -608,6 +608,39 @@ func (registry *Registry) bind(proxy eventProxy, id, version Int) (Int, error) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RegistryDestroy is sent to try to destroy the global object with id.
|
||||||
|
// This might fail when the client does not have permission.
|
||||||
|
type RegistryDestroy struct {
|
||||||
|
// The global id to destroy.
|
||||||
|
ID Int `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Opcode satisfies [Message] with a constant value.
|
||||||
|
func (c *RegistryDestroy) Opcode() byte { return PW_REGISTRY_METHOD_DESTROY }
|
||||||
|
|
||||||
|
// FileCount satisfies [Message] with a constant value.
|
||||||
|
func (c *RegistryDestroy) FileCount() Int { return 0 }
|
||||||
|
|
||||||
|
// Size satisfies [KnownSize] with a constant value.
|
||||||
|
func (c *RegistryDestroy) Size() Word {
|
||||||
|
return SizePrefix +
|
||||||
|
Size(SizeInt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalBinary satisfies [encoding.BinaryMarshaler] via [Marshal].
|
||||||
|
func (c *RegistryDestroy) MarshalBinary() ([]byte, error) { return Marshal(c) }
|
||||||
|
|
||||||
|
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
|
||||||
|
func (c *RegistryDestroy) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
|
||||||
|
|
||||||
|
// destroy queues a [RegistryDestroy] message for the PipeWire server.
|
||||||
|
func (registry *Registry) destroy(id Int) error {
|
||||||
|
return registry.ctx.writeMessage(
|
||||||
|
registry.ID,
|
||||||
|
&RegistryDestroy{id},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// An UnsupportedObjectTypeError is the name of a type not known by the server [Registry].
|
// An UnsupportedObjectTypeError is the name of a type not known by the server [Registry].
|
||||||
type UnsupportedObjectTypeError string
|
type UnsupportedObjectTypeError string
|
||||||
|
|
||||||
|
|||||||
@@ -774,3 +774,20 @@ func TestRegistryBind(t *testing.T) {
|
|||||||
}, nil},
|
}, nil},
|
||||||
}.run(t)
|
}.run(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRegistryDestroy(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
encodingTestCases[pipewire.RegistryDestroy, *pipewire.RegistryDestroy]{
|
||||||
|
{"sample", []byte{
|
||||||
|
/* size: rest of data*/ 0x10, 0, 0, 0,
|
||||||
|
/* type: Struct */ 0xe, 0, 0, 0,
|
||||||
|
/* size: 4 bytes */ 4, 0, 0, 0,
|
||||||
|
/* type: Int */ 4, 0, 0, 0,
|
||||||
|
/* value: 0xbad */ 0xad, 0xb, 0, 0,
|
||||||
|
/* padding */ 0, 0, 0, 0,
|
||||||
|
}, pipewire.RegistryDestroy{
|
||||||
|
ID: 0xbad,
|
||||||
|
}, nil},
|
||||||
|
}.run(t)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user