From 376b3a53c85490bc52dc7e70e7988c6d77a16681 Mon Sep 17 00:00:00 2001 From: Alfred Perlstein Date: Sun, 23 Dec 2012 12:15:44 -0800 Subject: [PATCH] allow users to force ipv4 only. add flag '-4' to commands to force ipv4. this doesn't work yet because hairtunes unconditionally uses ipv6 if available. --- shairport.pl | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/shairport.pl b/shairport.pl index a4a915a4..20f298a7 100755 --- a/shairport.pl +++ b/shairport.pl @@ -82,6 +82,9 @@ my $writepid; # show help my $help; + +my $ipv4; + unless (-x $hairtunes_cli) { say "Can't find the 'hairtunes' decoder binary, you need to build this before using ShairPort."; say "Read the INSTALL instructions!"; @@ -97,6 +100,7 @@ GetOptions("a|apname=s" => \$apname, "ao_devicename=s" => \$libao_devicename, "ao_deviceid=s" => \$libao_deviceid, "v|verbose" => \$verbose, + "4" => \$ipv4, "w|writepid=s" => \$writepid, "s|squeezebox" => \$squeeze, "c|cliport=s" => \$cliport, @@ -295,6 +299,7 @@ my $rsa = Crypt::OpenSSL::RSA->new_private_key($airport_pem) || die "RSA private my $listen; { + if (!defined($ipv4)) { eval { local $SIG{__DIE__}; $listen = new IO::Socket::INET6(Listen => 1, @@ -309,6 +314,7 @@ my $listen; "* Install this if iTunes won't play. *\n", "**************************************\n\n"; } + } $listen ||= new IO::Socket::INET(Listen => 1, LocalPort => $port, @@ -491,6 +497,7 @@ sub performSqueezeboxSetup { }; while (1) { + printf "about to select\n" if $verbose; my @waiting = $sel->can_read; foreach my $fh (@waiting) { if ($fh==$listen) { @@ -507,6 +514,7 @@ while (1) { # the 2nd connection is a player connection if (defined($play_prog) && $sel->count() == 2) { + printf "play prog: $play_prog\n" if ($verbose); system($play_prog); } } else { @@ -541,6 +549,8 @@ sub conn_handle_data { my $fh = shift; my $conn = $conns{$fh}; + printf "handle data 1\n" if ($verbose); + if ($conn->{req_need}) { if (length($conn->{data}) >= $conn->{req_need}) { $conn->{req}->content(substr($conn->{data}, 0, $conn->{req_need}, '')); @@ -675,7 +685,7 @@ sub conn_handle_request { my $dec = $hairtunes_cli . join(' ', '', map { sprintf "%s '%s'", $_, $dec_args{$_} } keys(%dec_args)); - # print "decode command: $dec\n"; + print "decode command: $dec\n" if ($verbose); my $decoder = open2(my $dec_out, my $dec_in, $dec); $conn->{decoder_pid} = $decoder; @@ -701,10 +711,15 @@ sub conn_handle_request { }; /^SET_PARAMETER$/ && do { my @lines = split /[\r\n]+/, $req->content; + printf("SET_PARAMETER req: " . $req->content . "\n") if ($verbose); my %content = map { /^(\S+): (.+)/; (lc $1, $2) } @lines; my $cfh = $conn->{decoder_fh}; if (exists $content{volume}) { + printf("sending-> vol: %f\n", $content{volume}) if ($verbose); printf $cfh "vol: %f\n", $content{volume}; + } else { + printf("unable to perform content for req: " . $req->content . "\n") if ($verbose); + } last; }; @@ -713,6 +728,7 @@ sub conn_handle_request { die("Unknown method: $_"); } + printf("%s", $resp->as_string("\r\n")) if ($verbose); print $fh $resp->as_string("\r\n"); $fh->flush; }