@@ -103,8 +103,8 @@ type Daemon struct {
103103// New creates a new Daemon with the given configuration.
104104func New (cfg Config ) (* Daemon , error ) {
105105 credPath := cfg .CredFile
106- if credPath == "" || credPath == airplay . DefaultCredentialsFile {
107- credPath = airplay .DefaultCredentialStorePath ()
106+ if credPath == "" {
107+ credPath = airplay .DefaultCredentialsPath ()
108108 }
109109 cs , err := airplay .NewCredentialStore (credPath )
110110 if err != nil {
@@ -452,34 +452,38 @@ func (d *Daemon) connectAndStream(ctx context.Context, target string, port int,
452452 savedCreds := d .credStore .Lookup (deviceID )
453453 if savedCreds != nil {
454454 pub , priv := savedCreds .Ed25519Keys ()
455- client .PairingID = savedCreds .PairingID
456- client .PairKeys = & airplay.PairKeys {
457- Ed25519Public : pub ,
458- Ed25519Private : priv ,
459- }
460- if err := client .PairVerify (ctx ); err != nil {
461- log .Printf ("[daemon] pair-verify with saved creds failed: %v, trying transient pairing" , err )
462- // Reconnect for fresh pairing attempt
463- client .Close ()
464- client = airplay .NewAirPlayClient (target , port )
465- if err := client .Connect (ctx ); err != nil {
466- setErr (fmt .Sprintf ("reconnect failed: %v" , err ))
467- return
468- }
469- if _ , err := client .GetInfo (); err != nil {
470- setErr (fmt .Sprintf ("get info after reconnect failed: %v" , err ))
471- return
455+ if priv == nil {
456+ log .Printf ("[daemon] saved credentials have invalid keys, skipping pair-verify" )
457+ } else {
458+ client .PairingID = savedCreds .PairingID
459+ client .PairKeys = & airplay.PairKeys {
460+ Ed25519Public : pub ,
461+ Ed25519Private : priv ,
472462 }
473- // Try transient (no-PIN) pairing as fallback
474- if err := client .Pair (ctx , "" ); err != nil {
475- log .Printf ("[daemon] transient pairing also failed: %v" , err )
463+ if err := client .PairVerify (ctx ); err != nil {
464+ log .Printf ("[daemon] pair-verify with saved creds failed: %v, trying transient pairing" , err )
465+ // Reconnect for fresh pairing attempt
466+ client .Close ()
467+ client = airplay .NewAirPlayClient (target , port )
468+ if err := client .Connect (ctx ); err != nil {
469+ setErr (fmt .Sprintf ("reconnect failed: %v" , err ))
470+ return
471+ }
472+ if _ , err := client .GetInfo (); err != nil {
473+ setErr (fmt .Sprintf ("get info after reconnect failed: %v" , err ))
474+ return
475+ }
476+ // Try transient (no-PIN) pairing as fallback
477+ if err := client .Pair (ctx , "" ); err != nil {
478+ log .Printf ("[daemon] transient pairing also failed: %v" , err )
479+ } else {
480+ paired = true
481+ log .Printf ("[daemon] transient pairing succeeded for %s" , info .Name )
482+ }
476483 } else {
477484 paired = true
478- log .Printf ("[daemon] transient pairing succeeded for %s" , info .Name )
485+ log .Printf ("[daemon] pair-verify succeeded for %s" , info .Name )
479486 }
480- } else {
481- paired = true
482- log .Printf ("[daemon] pair-verify succeeded for %s" , info .Name )
483487 }
484488 }
485489 }
0 commit comments