All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 34s
				
			Test / Sandbox (push) Successful in 1m30s
				
			Test / Hakurei (push) Successful in 2m21s
				
			Test / Hpkg (push) Successful in 3m23s
				
			Test / Sandbox (race detector) (push) Successful in 4m1s
				
			Test / Hakurei (race detector) (push) Successful in 4m46s
				
			Test / Flake checks (push) Successful in 1m27s
				
			This package turns out to be much less widely used than anticipated, and might be facing removal. This change makes test cases cleaner. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dbus
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"io"
 | 
						|
	"sync"
 | 
						|
	"syscall"
 | 
						|
 | 
						|
	"hakurei.app/helper"
 | 
						|
	"hakurei.app/hst"
 | 
						|
	"hakurei.app/message"
 | 
						|
)
 | 
						|
 | 
						|
// ProxyName is the file name or path to the proxy program.
 | 
						|
// Overriding ProxyName will only affect Proxy instance created after the change.
 | 
						|
var ProxyName = "xdg-dbus-proxy"
 | 
						|
 | 
						|
// Proxy holds the state of a xdg-dbus-proxy process, and should never be copied.
 | 
						|
type Proxy struct {
 | 
						|
	helper helper.Helper
 | 
						|
	ctx    context.Context
 | 
						|
	msg    message.Msg
 | 
						|
 | 
						|
	cancel context.CancelCauseFunc
 | 
						|
	cause  func() error
 | 
						|
 | 
						|
	final      *Final
 | 
						|
	output     io.Writer
 | 
						|
	useSandbox bool
 | 
						|
 | 
						|
	name string
 | 
						|
 | 
						|
	mu, pmu sync.RWMutex
 | 
						|
}
 | 
						|
 | 
						|
func (p *Proxy) String() string {
 | 
						|
	if p == nil {
 | 
						|
		return "(invalid dbus proxy)"
 | 
						|
	}
 | 
						|
 | 
						|
	p.mu.RLock()
 | 
						|
	defer p.mu.RUnlock()
 | 
						|
 | 
						|
	if p.helper != nil {
 | 
						|
		return p.helper.String()
 | 
						|
	}
 | 
						|
 | 
						|
	return "(unused dbus proxy)"
 | 
						|
}
 | 
						|
 | 
						|
// Final describes the outcome of a proxy configuration.
 | 
						|
type Final struct {
 | 
						|
	Session, System ProxyPair
 | 
						|
	// parsed upstream address
 | 
						|
	SessionUpstream, SystemUpstream []AddrEntry
 | 
						|
	io.WriterTo
 | 
						|
}
 | 
						|
 | 
						|
// Finalise creates a checked argument writer for [Proxy].
 | 
						|
func Finalise(sessionBus, systemBus ProxyPair, session, system *hst.BusConfig) (final *Final, err error) {
 | 
						|
	if session == nil && system == nil {
 | 
						|
		return nil, syscall.EBADE
 | 
						|
	}
 | 
						|
 | 
						|
	var args []string
 | 
						|
	if session != nil {
 | 
						|
		if err = session.CheckInterfaces("session"); err != nil {
 | 
						|
			return
 | 
						|
		}
 | 
						|
		args = append(args, Args(session, sessionBus)...)
 | 
						|
	}
 | 
						|
	if system != nil {
 | 
						|
		if err = system.CheckInterfaces("system"); err != nil {
 | 
						|
			return
 | 
						|
		}
 | 
						|
		args = append(args, Args(system, systemBus)...)
 | 
						|
	}
 | 
						|
 | 
						|
	final = &Final{Session: sessionBus, System: systemBus}
 | 
						|
 | 
						|
	final.WriterTo, err = helper.NewCheckedArgs(args...)
 | 
						|
	if err != nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if session != nil {
 | 
						|
		final.SessionUpstream, err = Parse([]byte(final.Session[0]))
 | 
						|
		if err != nil {
 | 
						|
			return
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if system != nil {
 | 
						|
		final.SystemUpstream, err = Parse([]byte(final.System[0]))
 | 
						|
		if err != nil {
 | 
						|
			return
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
// New returns a new instance of [Proxy].
 | 
						|
func New(ctx context.Context, msg message.Msg, final *Final, output io.Writer) *Proxy {
 | 
						|
	return &Proxy{name: ProxyName, ctx: ctx, msg: msg, final: final, output: output, useSandbox: true}
 | 
						|
}
 |