aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
AgeCommit message (Collapse)Author
2025-12-09internal/pipewire: expose connection propsOphestra
Unused in hakurei but could be useful when the package is moved out of internal. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-09internal/pipewire: include remaining size in recvmsg wrapperOphestra
This otherwise truncates the received data by len(remaining) bytes. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-09internal/pipewire: reset per-roundtrip state once per callOphestra
This was left in consume when relocating per-roundtrip code out of the per-receive consume method. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-09internal/pipewire: increment remote sequence after establishing boundsOphestra
This avoids incrementing it twice proceeding from a partial message. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-09internal/pipewire: do not clobber error parsing SCMsOphestra
The error is handled later, clobbering it here breaks error handling when SCMs are present. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-09Revert "internal/pipewire: work around remote sequence quirk"Ophestra
This reverts commit 564db6863b8e0e90cbf7210152c53124fddc1b4c.
2025-12-08internal/pipewire: work around remote sequence quirkOphestra
Remote sequence sometimes start with a non-zero value, and keeps the same value for a while before going back to zero. Conditions for reproducing this behaviour is not yet known. This change works around this behaviour. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-08treewide: include PipeWire op and enforce PulseAudio checkOphestra
This fully replaces PulseAudio with PipeWire and enforces the PulseAudio check and error message. The pipewire-pulse daemon is handled in the NixOS module. Closes #26. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-08hst: expose daemon as fs entryOphestra
This is slightly counterintuitive, but it turned out well under this framework since the daemon backs its target file. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-08internal/outcome: integrate pipewire serverOphestra
This is very simple and takes almost no inputs. This is not yet hooked up to anything to prevent breaking any existing behaviour. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/pipewire: constant for PIPEWIRE_REMOTEOphestra
This is not defined anywhere in upstream PipeWire, no idea why. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07hst: add pipewire flagOphestra
These are for #26. None of them are implemented yet. This fixes up test cases for the change to happen. Existing source code and JSON configuration continue to have the same effect. Existing flags get its EPulse bit replaced by EPipeWire. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/system: integrate PipeWire SecurityContextOphestra
Tests for this Op happens to be the best out of everything due to the robust infrastructure offered by internal/pipewire. This is now ready to use in internal/outcome for implementing #26. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/system: optional op check parallelismOphestra
The PipeWire Op check cannot be made parallel due to the OS interaction. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/pipewire: set finalizer on sccOphestra
This prevents leaking the socket and pipe fds. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/pipewire: seq access method for consumeOphestra
This improves readability as the offset is not immediately obvious. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/pipewire: respond to Core::PingOphestra
There is currently no known message that will get the PipeWire server to emit this event. It should be handled regardless. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/pipewire: specify opcode and file count with messageOphestra
This adds checking of FileCount while writing a message. Message encoding is relocated to an exported method to be used externally, probably for test stubbing. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/system: pass syscall error messageOphestra
This makes wrapped syscall errors produce a cleaner error message. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/system: port connect by nameOphestra
This behaviour is a bit messy and checks what appears to be a windows-specific environment variable for some reason. Keeping everything intact regardless to match upstream behaviour. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-07internal/system: remove ineffectual join reverting waylandOphestra
Removing the pathname socket used to be handled separately, now it is done during the Close call. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: high level SecurityContext helperOphestra
This sets up close pipe and socket internally, and exposes the resulting pathname socket and close_fd cleanup as an io.Closer. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: check pending ids after doneOphestra
This is not guaranteed to have completed after a roundtrip. This is leftover from when Roundtrip also sent and waited for sync. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: post-sync cleanup functionsOphestra
This makes it easier to handle resources who only needs to stay alive before the next sync. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: handle dangling files in roundtripOphestra
This should not be handled on every receive as it could cause valid (though impossible in current upstream implementation) messages to be rejected and raise a protocol error. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: store proxy errors in contextOphestra
This change fixes handling of non-fatal errors during a roundtrip as there can be multiple receive calls per roundtrip. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: set errno on an empty messageOphestra
This matches upstream behaviour. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: rename context consume methodOphestra
This name is more correct since it does not roundtrip, but receives messages. This is also more consistent with the method on event proxies. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-06internal/pipewire: use sendmsg/recvmsg directlyOphestra
The PipeWire protocol does not work with Go abstractions. This change makes relevant methods call sendmsg/recvmsg directly. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-05internal/pipewire: do not send ancillary msg without filesOphestra
This is unnecessary and does not match upstream behaviour. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-05internal/pipewire: constants from pipewire/keys.hOphestra
These are PipeWire spa_dict keys. Interestingly many keys in the sample are undefined and appear as magic strings in upstream source code. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-04internal/pipewire: improve protocol error messagesOphestra
These are mostly small formatting changes, with the biggest change being to UnexpectedEOFError where its kind is now described as part of the error type. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-04internal/pipewire: use type name in error stringsOphestra
This provides more useful messages for protocol errors. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-03internal/pipewire: relocate constantsOphestra
This should make things easier to navigate, and possible to fully automatically generate the constants in the future. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-03internal/pipewire: finalizers for dangling filesOphestra
This makes their handling much less error-prone. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-03internal/pipewire: collect non-protocol errorsOphestra
These errors are recoverable and should not terminate event handling. Only terminate event handling for protocol errors or inconsistent state that makes further event handling impossible. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: fail on unacknowledged proxiesOphestra
These proxies (with special cases documented in the implementation) are only safe for use after acknowledgement from the server. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: handle Core::ErrorOphestra
This event is not encountered in the pw-container sample, but already has existing sample from an excerpt. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: implement client contextOphestra
This consumes the entire sample, is validated to send identical messages and correctly handle received messages. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: use correct types in headerOphestra
This was written when the protocol was still barely understood, so none of the types here are correct and match the rest of the protocol. This change corrects these types. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: wrap EOF error for deserialisationOphestra
The io.ErrUnexpectedEOF error can be returned from multiple places. This change eases error handling. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-12-02internal/pipewire: preallocate for footerOphestra
This is useful during serialisation. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-30internal/pipewire: benchmarks against Gob and JSONOphestra
Performance does not matter for the use case of this library, but it is still interesting to know. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-30internal/pipewire: implement Core::ErrorOphestra
Sample was captured from pw-cli. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-29internal/pipewire: implement Core::Ping, Core::PongOphestra
I could not get the server to produce these events, however I am confident enough with the implementation to do it by hand. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-29internal/pipewire: implement SecurityContext::CreateOphestra
This is finally the thing we are after. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-29internal/pipewire: implement Registry::BindOphestra
This change also adds test cases for messages before this one. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-29internal/pipewire: implement client generation footerOphestra
This corresponds with the core generation footer and seem to be the only other possible footer type. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-28internal/pipewire: implement Registry::GlobalOphestra
Dealing with this event reawakened my burning hatred for OOP. Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-28internal/pipewire: add json struct tagsOphestra
These match the names found in documentation. Signed-off-by: Ophestra <cat@gensokyo.uk>