Merge pull request #152 from hendrikw82/master

ios6 airplay announce message parsing bugfix  - Using Net:SDP
This commit is contained in:
Albert Zeyer
2012-09-26 23:18:42 -07:00
+17 -13
View File
@@ -45,6 +45,7 @@ use Crypt::OpenSSL::RSA;
use Digest::MD5 qw(md5 md5_hex);
use POSIX qw(:sys_wait_h setsid);
eval "use IO::Socket::INET6;";
use Net::SDP;
my $shairportversion = "0.05";
@@ -630,20 +631,23 @@ sub conn_handle_request {
last;
};
/^ANNOUNCE$/ && do {
my $sdptext = $req->content;
my @sdplines = split /[\r\n]+/, $sdptext;
my %sdp = map { ($1, $2) if /^a=([^:]+):(.+)/ } @sdplines;
die("no AESIV") unless my $aesiv = decode_base64($sdp{aesiv});
die("no AESKEY") unless my $rsaaeskey = decode_base64($sdp{rsaaeskey});
$rsa->use_pkcs1_oaep_padding;
my $aeskey = $rsa->decrypt($rsaaeskey) || die "RSA decrypt failed";
/^ANNOUNCE$/ && do {
my $sdp = Net::SDP->new($req->content);
my $audio = $sdp->media_desc_of_type('audio');
$conn->{aesiv} = $aesiv;
$conn->{aeskey} = $aeskey;
$conn->{fmtp} = $sdp{fmtp};
last;
};
print $audio->as_string();
print $audio->attribute('aesiv');
die("no AESIV") unless my $aesiv = decode_base64($audio->attribute('aesiv'));
die("no AESKEY") unless my $rsaaeskey = decode_base64($audio->attribute('rsaaeskey'));
$rsa->use_pkcs1_oaep_padding;
my $aeskey = $rsa->decrypt($rsaaeskey) || die "RSA decrypt failed";
$conn->{aesiv} = $aesiv;
$conn->{aeskey} = $aeskey;
$conn->{fmtp} = $audio->attribute('fmtp');
last;
};
/^SETUP$/ && do {
my $transport = $req->header('Transport');